{"version":3,"sources":["Timeline/Timeline.module.css","Modal/Modal.module.css","shared/Button.module.css","Topbar.module.css","Map/Map.module.css","NavigationMobile.module.css","shared/Icon.module.css","../node_modules/@stencil/core/internal/client lazy /^/.*$/ include: /.entry/.js$/ exclude: /.system/.entry/.js$/ groupOptions: {} namespace object","icons/controls-play.svg","shared/Icon.tsx","shared/Button.tsx","icons/controls-pause.svg","icons/arrow-button-left-2.svg","icons/arrow-button-right-2.svg","utils/useMouse.ts","utils/mapUtils.ts","Map/ActiveYear.tsx","Timeline/TimelineActive.tsx","utils/urlUtils.ts","utils/useUrlParams.ts","Timeline/Timeline.tsx","icons/layout-two-colums.svg","icons/search.svg","icons/maps.svg","icons/navigation-menu.svg","icons/share-1.svg","icons/close.svg","utils/useOnClickOutside.ts","utils/useToggleCompare.ts","Topbar.tsx","NavigationMobile.tsx","icons/twitter.svg","Modal/Modal.tsx","Modal/InfoModal.tsx","icons/facebook.svg","icons/email-action-unread.svg","icons/linkedin.svg","icons/whatsapp.svg","Modal/ShareModal.tsx","utils/useMapPlayer.ts","Map/CustomAttribution.tsx","Map/Map.tsx","Map/MapSwitcher.tsx","utils/useMapSync.ts","App.tsx","utils/useLegacyUrlCompatibility.ts","AppBase.tsx","index.tsx"],"names":["module","exports","webpackEmptyAsyncContext","req","Promise","resolve","then","e","Error","code","keys","id","_path","React","memo","ImportedSvg","svg","title","className","classNames","styles","Icon","width","height","role","Button","children","iconTitle","mobile","as","iconSvg","type","size","props","Tag","Button___primary","Button___tertiary","Button___white","Button___opacity","Button___transparent","Button___small","Button___smaller","Button___mobile","Button_title","Button_icon","_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgControlsPlay","_ref","svgRef","titleId","xmlns","viewBox","ref","undefined","d","_rect","_rect2","ForwardRef","SvgControlsPause","x","y","rx","ry","_g","SvgArrowButtonLeft2","transform","fill","strokeLinecap","strokeLinejoin","SvgArrowButtonRight2","useMouse","active","useRafState","elY","setElY","useEffect","moveHandler","event","current","posY","getBoundingClientRect","top","window","pageYOffset","MouseEvent","pageY","touches","on","document","off","getMapSettings","satellite","topo","lods","level","resolution","scale","ActiveYear","hovered","secondary","portalId","ReactDOM","createPortal","Map_year","Map_year___active","getElementById","TimelineActive","timelineActiveTop","yearShown","timelineRef","timelineBounds","activeYear","mapType","onClick","mapSettings","pixelsPerYear","lastYear","firstYear","hoverDistance","steps","Math","min","round","ACTIVE_YEAR_HEIGHT","click","useCallback","stopPropagation","Timeline_active","Timeline_active___hovered","style","onTouchEndCapture","Timeline_activeYear","Timeline_activeIcon","splitMapState","mapState","splittedState","substring","split","map","parseFloat","zoom","joinMapState","createUrl","url","year","typeCompare","yearCompare","translatedType","translatedTypeCompare","comparing","generatePath","toString","useUrlParams","useParams","typeParam","yearParam","typeCompareParam","yearCompareParam","mapStateParam","navigate","useNavigate","calculatedComparing","calculatedType","calculatedTypeCompare","calculatedYear","useMemo","parseInt","startYear","calculatedYearCompare","navigateTo","options","mapTypeCompare","activeYearCompare","Timeline","playing","togglePlay","useRef","useMeasure","measureRef","bounds","useState","setHovered","years","len","push","clickY","Timeline___default","Timeline___hovered","Timeline___secondary","Timeline_actions","IconPause","IconPlay","onChange","value","Timeline_previousNext","IconArrowLeft","prevYear","nextYear","IconArrowRight","Timeline_wrapper","Timeline_years","mergeRefs","onMouseEnter","onMouseLeave","onTouchStart","includesYear","sliderValues","includes","Timeline_year","Timeline_year___selected","Timeline_year___line","Timeline_year___label","_line","SvgLayoutTwoColums","x1","y1","x2","y2","_circle","SvgSearch","cx","cy","r","_line2","SvgMaps","_line3","SvgNavigationMenu","_polyline","SvgShare1","points","SvgClose","useOnClickOutside","handler","excludeSelectors","listener","el","contains","querySelector","addEventListener","removeEventListener","useToggleCompare","setSnack","toggleSecondaryPlay","landscapeMode","useMediaQuery","query","Topbar","toggleMobileNavigation","mobileNavigationOpen","toggleShareModal","toggleInfoModal","mobileSearchInstance","snack","useToggle","mobileSearch","toggleMobileSearch","nodeRef","snackRef","toggleCompare","Topbar_actionsMobile","IconSearch","CSSTransition","in","timeout","enterActive","Topbar_searchMobile___transition","enterDone","Topbar_searchMobile","Topbar_actions","Topbar_search","IconCompare","Topbar_logo","src","alt","Topbar_navigationMobile","IconClose","IconNavigation","Topbar_navigation","IconMap","IconShare","mountOnEnter","unmountOnExit","onEntered","setTimeout","Topbar_snacks___active","Topbar_snacks","Topbar_snack","NavigationMobile","isOpen","toggle","modalOpen","NavigationMobile___transition","NavigationMobile_content","Modal","handleClose","useKey","modalRef","modalInnerRef","useClickAway","Modal___transition","Modal_inner","Modal_button","InfoModal","Modal_content","href","Modal_list","SvgTwitter","xmlnsXlink","enableBackground","xmlSpace","strokeWidth","SvgFacebook","SvgEmailActionUnread","SvgLinkedin","_path2","SvgWhatsapp","fillRule","clipRule","ShareModal","location","useLocation","copiedToClipboard","setCopiedToClipboard","buttonStyles","Button_group","Button_group___margin","pathname","IconTwitter","IconFacebook","IconLinkedin","IconWhatsapp","IconEmail","onFocus","select","navigator","clipboard","writeText","useMapPlayer","secondaryPlaying","mapSettingsCompare","advance","nextYearCompare","useInterval","settings","timeLoopIntervalSeconds","CustomAttribution","mapLayer","layers","find","layer","from","to","attribution","attributionKey","forEach","zoomLevel","zoomLevelInt","text","attributionUrl","position","bottom","right","tabIndex","rel","geolocationSource","LocatorService","outFields","placeholder","singleLineFieldName","Map","mapRef","mapViewRef","attributionRef","layerRef","domLoading","setDomLoading","loading","setLoading","prevExtentRef","prevZoomRef","useImperativeHandle","getView","mapDiv","node","WebMap","state","view","MapView","container","spatialReference","SpatialReference","wkid","constraints","snapToZoom","minZoom","maxZoom","rotationEnabled","padding","ui","components","center","Point","Zoom","add","Search","includeDefaultSources","sources","popupEnabled","resultGraphicEnabled","locationEnabled","locateWidget","Locate","graphic","Graphic","symbol","color","outline","scaleBar","ScaleBar","unit","Attribution","visible","when","extent","replace","TileLayer","resampling","maxScale","prevLayer","findLayerById","remove","viewWatch","watchUtils","stationary","Map___default","Map___secondary","Map___primary","Map_holder","forwardRef","MapSwitcher","switchMapType","firstSatelliteYear","lastSatelliteYear","Map_switch","Map_switch___map","useMapSync","compare","primaryMapRef","secondaryMapRef","views","sync","viewpoint","watch","activate","App","shareModalOpen","infoModalOpen","Layout___compare","useLegacyUrlCompatibility","useEffectOnce","urlSearchParams","URLSearchParams","search","params","fromEntries","entries","datatype","l","AppBase","path","element","render","StrictMode"],"mappings":"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","file":"static/js/main.cd909ad8.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"Timeline\":\"Timeline_Timeline__11XFc\",\"Timeline___hovered\":\"Timeline_Timeline___hovered__1Tum5\",\"Timeline_year\":\"Timeline_Timeline_year__3Yj0s\",\"Timeline___secondary\":\"Timeline_Timeline___secondary__37yrS\",\"Timeline_year___line\":\"Timeline_Timeline_year___line__3utYi\",\"Timeline_year___label\":\"Timeline_Timeline_year___label__e_Wil\",\"Timeline_active\":\"Timeline_Timeline_active__1PTg4\",\"Timeline_activeIcon\":\"Timeline_Timeline_activeIcon__19PBf\",\"Timeline_actions\":\"Timeline_Timeline_actions__vlhQa\",\"Timeline_previousNext\":\"Timeline_Timeline_previousNext__3LSLA\",\"Timeline_wrapper\":\"Timeline_Timeline_wrapper__1A8q2\",\"Timeline_active___hovered\":\"Timeline_Timeline_active___hovered__lGmrr\",\"Timeline_years\":\"Timeline_Timeline_years__26yKG\",\"Timeline_year___selected\":\"Timeline_Timeline_year___selected__1kvXc\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Modal\":\"Modal_Modal__3-HVN\",\"Modal___transition\":\"Modal_Modal___transition__2V3fs\",\"Modal_inner\":\"Modal_Modal_inner__3C2PA\",\"Modal_button\":\"Modal_Modal_button__12tt4\",\"Modal_content\":\"Modal_Modal_content__2bvsX\",\"Modal_list\":\"Modal_Modal_list__1khIv\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Button\":\"Button_Button__2tO-X\",\"Button___small\":\"Button_Button___small__A79EE\",\"Button___smaller\":\"Button_Button___smaller__XD5bg\",\"Button_icon\":\"Button_Button_icon__2zuc1\",\"Button___primary\":\"Button_Button___primary__1y7oo\",\"Button___tertiary\":\"Button_Button___tertiary__2nx-H\",\"Button___opacity\":\"Button_Button___opacity__AN4T_\",\"Button___transparent\":\"Button_Button___transparent__2OCWr\",\"Button___white\":\"Button_Button___white__3u8hj\",\"Button_title\":\"Button_Button_title__3L4Vm\",\"Button_group\":\"Button_Button_group__2RI1O\",\"Button_group___margin\":\"Button_Button_group___margin__2Io7V\",\"Button___mobile\":\"Button_Button___mobile__1ViRS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Topbar\":\"Topbar_Topbar__3ujED\",\"Topbar_actions\":\"Topbar_Topbar_actions__3UiQl\",\"Topbar_actionsMobile\":\"Topbar_Topbar_actionsMobile__3eFL7\",\"Topbar_logo\":\"Topbar_Topbar_logo__1vNBS\",\"Topbar_navigation\":\"Topbar_Topbar_navigation__1tSQG\",\"Topbar_navigationMobile\":\"Topbar_Topbar_navigationMobile__1yZzJ\",\"Topbar_searchMobile\":\"Topbar_Topbar_searchMobile__1iB80\",\"Topbar_searchMobile___transition\":\"Topbar_Topbar_searchMobile___transition__O7-oH\",\"Topbar_snacks\":\"Topbar_Topbar_snacks__2FXaB\",\"Topbar_snacks___active\":\"Topbar_Topbar_snacks___active__1X6wT\",\"Topbar_snack\":\"Topbar_Topbar_snack__gUnQW\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Map\":\"Map_Map__2WTsV\",\"Map___primary\":\"Map_Map___primary__2aKKv\",\"Map___secondary\":\"Map_Map___secondary__EpCEH\",\"Map_holder\":\"Map_Map_holder__2Bbkp\",\"Map_switch\":\"Map_Map_switch__3VLE8\",\"Map_switch___map\":\"Map_Map_switch___map__18lpB\",\"Map_year\":\"Map_Map_year__1irAq\",\"Map_year___active\":\"Map_Map_year___active__27RCU\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"NavigationMobile\":\"NavigationMobile_NavigationMobile__ZggtT\",\"NavigationMobile___transition\":\"NavigationMobile_NavigationMobile___transition__1zzLG\",\"NavigationMobile_content\":\"NavigationMobile_NavigationMobile_content__1FbFw\",\"NavigationMobile_footer\":\"NavigationMobile_NavigationMobile_footer__3Q-CT\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Icon\":\"Icon_Icon__33h0r\",\"Icon___large\":\"Icon_Icon___large__cbjL5\"};","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = 523;","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgControlsPlay(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"controls-play\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"a\",\n d: \"M2.338,3.255v17.49a1.5,1.5,0,0,0,2.209,1.322L20.87,13.322a1.5,1.5,0,0,0,0-2.644L4.547,1.933A1.5,1.5,0,0,0,2.338,3.255Z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgControlsPlay);\nexport default __webpack_public_path__ + \"static/media/controls-play.ba5cbf55.svg\";\nexport { ForwardRef as ReactComponent };","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport styles from './Icon.module.css';\r\n\r\ntype IconProps = {\r\n svg: Function;\r\n title: string;\r\n className?: string;\r\n};\r\n\r\nexport default React.memo(function Icon({ svg, title, className }: IconProps) {\r\n // Width and height 100% is a safari fix for SVG\r\n let ImportedSvg: Function | undefined;\r\n ImportedSvg = svg;\r\n return (\r\n \r\n \r\n \r\n );\r\n});\r\n","import React from 'react';\r\nimport Icon from './Icon';\r\nimport classNames from 'classnames';\r\nimport styles from './Button.module.css';\r\n\r\ntype ButtonProps = {\r\n children?: React.ReactNode;\r\n className?: string;\r\n iconTitle?: string;\r\n iconSvg?: Function;\r\n mobile?: Boolean;\r\n as?: 'button' | 'a';\r\n type?: 'primary' | 'tertiary' | 'white' | 'opacity' | 'transparent';\r\n size?: 'small' | 'smaller';\r\n href?: string;\r\n title?: string;\r\n target?: '_blank';\r\n onClick?: () => void;\r\n id?: string;\r\n rel?: 'noreferrer';\r\n};\r\n\r\nexport default function Button({\r\n children,\r\n iconTitle,\r\n mobile,\r\n className = '',\r\n as = 'button',\r\n iconSvg,\r\n type,\r\n size,\r\n title,\r\n ...props\r\n}: ButtonProps) {\r\n const Tag = as;\r\n\r\n return (\r\n \r\n {children && {children}}\r\n {iconTitle && iconSvg && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","var _rect, _rect2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgControlsPause(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"controls-pause\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n className: \"a\",\n x: 5.25,\n y: 3.75,\n width: 4.5,\n height: 16.5,\n rx: 1.5,\n ry: 1.5\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n className: \"a\",\n x: 14.25,\n y: 3.75,\n width: 4.5,\n height: 16.5,\n rx: 1.5,\n ry: 1.5\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgControlsPause);\nexport default __webpack_public_path__ + \"static/media/controls-pause.8ef6a8de.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgArrowButtonLeft2(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1,0,0,1,0,0)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M2.625,12.637,19.874,22.4A.75.75,0,0,0,21,21.763V2.237A.75.75,0,0,0,19.874,1.6L2.625,11.363A.729.729,0,0,0,2.625,12.637Z\",\n fill: \"none\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgArrowButtonLeft2);\nexport default __webpack_public_path__ + \"static/media/arrow-button-left-2.ee794da5.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgArrowButtonRight2(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n viewBox: \"0 0 24 24\",\n xmlns: \"http://www.w3.org/2000/svg\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1,0,0,1,0,0)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21.124,11.363,3.875,1.6a.75.75,0,0,0-1.125.637V21.763a.75.75,0,0,0,1.125.637l17.249-9.763A.729.729,0,0,0,21.124,11.363Z\",\n fill: \"none\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgArrowButtonRight2);\nexport default __webpack_public_path__ + \"static/media/arrow-button-right-2.7fa5bc0b.svg\";\nexport { ForwardRef as ReactComponent };","import { RefObject, useEffect } from 'react';\r\nimport { useRafState } from 'react-use';\r\n\r\nimport { off, on } from 'react-use/esm/misc/util';\r\n\r\n// Based on useMouse from react-use.\r\n\r\nexport type elY = number | null;\r\n\r\nconst useMouse = (ref: RefObject, active: boolean = false): elY => {\r\n if (process.env.NODE_ENV === 'development') {\r\n if (typeof ref !== 'object' || typeof ref.current === 'undefined') {\r\n console.error('useMouse expects a single ref argument.');\r\n }\r\n }\r\n\r\n const [elY, setElY] = useRafState(null);\r\n\r\n useEffect(() => {\r\n const moveHandler = (event: MouseEvent | TouchEvent) => {\r\n if (active && ref && ref.current) {\r\n const { top } = ref.current.getBoundingClientRect();\r\n const posY = top + window.pageYOffset;\r\n const elY =\r\n event instanceof MouseEvent\r\n ? event.pageY - posY\r\n : event.touches[0].pageY - posY;\r\n setElY(elY);\r\n }\r\n };\r\n\r\n if (!active) {\r\n setElY(null);\r\n }\r\n\r\n on(document, 'mousemove', moveHandler);\r\n on(document, 'touchmove', moveHandler);\r\n\r\n return () => {\r\n off(document, 'mousemove', moveHandler);\r\n off(document, 'touchmove', moveHandler);\r\n };\r\n }, [ref, active, setElY]);\r\n\r\n return elY;\r\n};\r\n\r\nexport default useMouse;\r\n","import topo from '../topo.json';\r\nimport satellite from '../satellite.json';\r\n\r\nexport const getMapSettings = (type: MapTypes) => {\r\n if (type === 'satellite') {\r\n return satellite;\r\n } else {\r\n return topo;\r\n }\r\n};\r\n\r\nexport const lods = [\r\n { level: 0, resolution: 3251.206502413005, scale: 12288000 },\r\n { level: 1, resolution: 1625.6032512065026, scale: 6144000 },\r\n { level: 2, resolution: 812.8016256032513, scale: 3072000 },\r\n { level: 3, resolution: 406.40081280162565, scale: 1536000 },\r\n { level: 4, resolution: 203.20040640081282, scale: 768000 },\r\n { level: 5, resolution: 101.60020320040641, scale: 384000 },\r\n { level: 6, resolution: 50.800101600203206, scale: 192000 },\r\n { level: 7, resolution: 25.400050800101603, scale: 96000 },\r\n { level: 8, resolution: 12.700025400050801, scale: 48000 },\r\n { level: 9, resolution: 6.350012700025401, scale: 24000 },\r\n { level: 10, resolution: 3.1750063500127004, scale: 12000 },\r\n { level: 11, resolution: 1.5875031750063502, scale: 6000 },\r\n { level: 12, resolution: 0.7937515875031751, scale: 3000 },\r\n { level: 13, resolution: 0.39687579375158755, scale: 1500 },\r\n { level: 14, resolution: 0.19843789687579377, scale: 750 },\r\n { level: 15, resolution: 0.09921894843789689, scale: 375 },\r\n { level: 16, resolution: 0.04960947421894844, scale: 187.5 },\r\n];\r\n\r\nexport type MapTypes = 'satellite' | 'map';\r\n","import classNames from 'classnames';\r\nimport React from 'react';\r\nimport styles from './Map.module.css';\r\nimport ReactDOM from 'react-dom';\r\n\r\ntype ActiveYearProps = {\r\n hovered: boolean;\r\n secondary: boolean;\r\n children: React.ReactNode;\r\n};\r\n\r\nexport default function ActiveYear({\r\n hovered,\r\n children,\r\n secondary = false,\r\n}: ActiveYearProps) {\r\n let portalId = 'activeYearPortal';\r\n if (secondary) portalId = portalId + 'Secondary';\r\n\r\n return ReactDOM.createPortal(\r\n \r\n {children}\r\n ,\r\n document.getElementById(portalId)!\r\n );\r\n}\r\n","import { useCallback } from 'react';\r\nimport styles from './Timeline.module.css';\r\nimport useMouse from './../utils/useMouse';\r\nimport { getMapSettings, MapTypes } from '../utils/mapUtils';\r\nimport { RectReadOnly } from 'react-use-measure';\r\nimport classNames from 'classnames';\r\nimport ActiveYear from '../Map/ActiveYear';\r\n\r\ntype TimelineActiveProps = {\r\n hovered?: boolean;\r\n timelineRef: React.MutableRefObject;\r\n timelineBounds: RectReadOnly;\r\n activeYear: number;\r\n mapType: MapTypes;\r\n onClick: (year: number) => void;\r\n secondary: boolean;\r\n};\r\n\r\nexport default function TimelineActive({\r\n hovered = false,\r\n timelineRef,\r\n timelineBounds,\r\n activeYear,\r\n secondary = false,\r\n mapType,\r\n onClick,\r\n}: TimelineActiveProps) {\r\n const ACTIVE_YEAR_HEIGHT = 34;\r\n // useMouse is only returns a value when we are hovered over the timeline\r\n const elY = useMouse(timelineRef, hovered);\r\n\r\n const mapSettings = getMapSettings(mapType);\r\n\r\n const pixelsPerYear =\r\n timelineBounds.height / (mapSettings.lastYear - mapSettings.firstYear + 1);\r\n\r\n let timelineActiveTop: number;\r\n let yearShown: number;\r\n\r\n if (hovered && elY !== null) {\r\n const hoverDistance = elY < 0 ? 0 : elY;\r\n\r\n const steps = Math.min(\r\n Math.round((hoverDistance - pixelsPerYear / 2) / pixelsPerYear),\r\n mapSettings.lastYear - mapSettings.firstYear\r\n );\r\n\r\n timelineActiveTop =\r\n steps * pixelsPerYear + (pixelsPerYear / 2 - ACTIVE_YEAR_HEIGHT / 2);\r\n\r\n yearShown = mapSettings.firstYear + steps;\r\n } else {\r\n timelineActiveTop =\r\n (activeYear - mapSettings.firstYear) * pixelsPerYear +\r\n pixelsPerYear / 2 -\r\n ACTIVE_YEAR_HEIGHT / 2;\r\n yearShown = activeYear;\r\n }\r\n\r\n const click = useCallback(\r\n (e) => {\r\n // Hier een setYear() functie van maken, zodat je 'kaart' niet mee hoeft te geven\r\n e.stopPropagation();\r\n onClick(yearShown);\r\n },\r\n [yearShown, onClick]\r\n );\r\n\r\n if (timelineBounds.height <= 0) return null;\r\n\r\n return (\r\n \r\n
{yearShown}
\r\n \r\n \r\n {yearShown}\r\n \r\n \r\n );\r\n}\r\n","import { generatePath } from 'react-router';\r\nimport { MapTypes } from './mapUtils';\r\n\r\nexport const splitMapState = (mapState?: string) => {\r\n if (!mapState) return undefined;\r\n let splittedState;\r\n splittedState = mapState.substring(1).split(',');\r\n splittedState = splittedState.map(function (x) {\r\n return parseFloat(x);\r\n });\r\n return { x: splittedState[0], y: splittedState[1], zoom: splittedState[2] };\r\n};\r\n\r\nexport const joinMapState = ({ x, y, zoom }: any) => {\r\n return `@${Math.round(x)},${Math.round(y)},${Math.round(zoom * 100) / 100}`;\r\n};\r\n\r\nexport type CreateUrl = {\r\n type?: MapTypes;\r\n year?: number;\r\n typeCompare?: MapTypes;\r\n yearCompare?: number;\r\n mapState?: string;\r\n comparing?: boolean;\r\n};\r\n\r\nexport const createUrl = ({\r\n type,\r\n year,\r\n mapState,\r\n typeCompare,\r\n yearCompare,\r\n comparing,\r\n}: CreateUrl) => {\r\n const translatedType = type === 'satellite' ? 'satelliet' : 'kaart';\r\n const translatedTypeCompare =\r\n typeCompare === 'satellite' ? 'satelliet' : 'kaart';\r\n\r\n let url;\r\n if (comparing) {\r\n url = '/vergelijk/:type/:year/:typeCompare/:yearCompare';\r\n } else {\r\n url = '/:type/:year';\r\n }\r\n\r\n if (mapState) {\r\n url = url + '/:mapState';\r\n }\r\n\r\n return generatePath(url, {\r\n type: translatedType,\r\n year: year?.toString(),\r\n typeCompare: translatedTypeCompare,\r\n yearCompare: yearCompare?.toString(),\r\n mapState,\r\n });\r\n};\r\n","import { useCallback, useMemo } from 'react';\r\nimport { useParams, useNavigate } from 'react-router-dom';\r\nimport { getMapSettings, MapTypes } from './mapUtils';\r\nimport { createUrl, CreateUrl } from './urlUtils';\r\n\r\nconst useUrlParams = () => {\r\n const {\r\n type: typeParam,\r\n year: yearParam,\r\n typeCompare: typeCompareParam,\r\n yearCompare: yearCompareParam,\r\n mapState: mapStateParam,\r\n } = useParams();\r\n const navigate = useNavigate();\r\n const calculatedComparing = !!typeCompareParam && !!yearCompareParam;\r\n\r\n const calculatedType: MapTypes =\r\n typeParam === 'satelliet' ? 'satellite' : 'map';\r\n\r\n const calculatedTypeCompare: MapTypes =\r\n typeCompareParam === 'satelliet' ? 'satellite' : 'map';\r\n\r\n const calculatedYear = useMemo(() => {\r\n const mapSettings = getMapSettings(calculatedType);\r\n let calculatedYear =\r\n yearParam && parseInt(yearParam)\r\n ? parseInt(yearParam)\r\n : mapSettings.startYear;\r\n\r\n // If we don't have a valid year, then return the startyear\r\n if (\r\n calculatedYear < mapSettings.firstYear ||\r\n calculatedYear > mapSettings.lastYear\r\n ) {\r\n calculatedYear = mapSettings.startYear;\r\n }\r\n return calculatedYear;\r\n }, [yearParam, calculatedType]);\r\n\r\n // @TODO remove same function\r\n const calculatedYearCompare = useMemo(() => {\r\n const mapSettings = getMapSettings(calculatedTypeCompare);\r\n let calculatedYearCompare =\r\n yearCompareParam && parseInt(yearCompareParam)\r\n ? parseInt(yearCompareParam)\r\n : mapSettings.startYear;\r\n\r\n // If we don't have a valid year, then return the startyear\r\n if (\r\n calculatedYearCompare < mapSettings.firstYear ||\r\n calculatedYearCompare > mapSettings.lastYear\r\n ) {\r\n calculatedYearCompare = mapSettings.startYear;\r\n }\r\n return calculatedYearCompare;\r\n }, [yearCompareParam, calculatedTypeCompare]);\r\n\r\n const navigateTo = useCallback(\r\n (\r\n { type, year, typeCompare, yearCompare, mapState, comparing }: CreateUrl,\r\n options?: any\r\n ) => {\r\n const newType = type ?? calculatedType;\r\n const newTypeCompare = typeCompare ?? calculatedTypeCompare;\r\n navigate(\r\n createUrl({\r\n type: newType,\r\n year: year ?? calculatedYear,\r\n typeCompare: newTypeCompare,\r\n yearCompare: yearCompare ?? calculatedYearCompare,\r\n mapState: mapState ?? mapStateParam,\r\n comparing: comparing ?? calculatedComparing,\r\n }),\r\n options\r\n );\r\n },\r\n [\r\n calculatedYear,\r\n calculatedType,\r\n calculatedTypeCompare,\r\n calculatedYearCompare,\r\n mapStateParam,\r\n navigate,\r\n calculatedComparing,\r\n ]\r\n ); // this depends on id, and need to be recreated on id change\r\n\r\n return {\r\n mapType: calculatedType,\r\n mapTypeCompare: calculatedTypeCompare,\r\n activeYear: calculatedYear,\r\n activeYearCompare: calculatedYearCompare,\r\n comparing: calculatedComparing,\r\n navigateTo,\r\n };\r\n};\r\n\r\nexport default useUrlParams;\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport classNames from 'classnames';\r\nimport mergeRefs from 'merge-refs';\r\nimport useMeasure from 'react-use-measure';\r\nimport styles from './Timeline.module.css';\r\nimport Button from '../shared/Button';\r\nimport { ReactComponent as IconPlay } from './../icons/controls-play.svg';\r\nimport { ReactComponent as IconPause } from './../icons/controls-pause.svg';\r\nimport { ReactComponent as IconArrowLeft } from './../icons/arrow-button-left-2.svg';\r\nimport { ReactComponent as IconArrowRight } from './../icons/arrow-button-right-2.svg';\r\nimport TimelineActive from './TimelineActive';\r\nimport useUrlParams from '../utils/useUrlParams';\r\nimport { getMapSettings, MapTypes } from '../utils/mapUtils';\r\n\r\ntype TimelineProps = {\r\n playing: boolean;\r\n togglePlay: () => void;\r\n activeYear: number;\r\n mapType: MapTypes;\r\n secondary?: boolean;\r\n};\r\n\r\nexport default function Timeline({\r\n playing,\r\n togglePlay,\r\n activeYear,\r\n mapType,\r\n secondary = false,\r\n}: TimelineProps) {\r\n const { navigateTo } = useUrlParams();\r\n const timelineRef = React.useRef(null!);\r\n const [measureRef, bounds] = useMeasure();\r\n const [hovered, setHovered] = useState(false);\r\n\r\n const mapSettings = getMapSettings(mapType);\r\n\r\n // Create year object based on settings file useMemo\r\n const years = useMemo(() => {\r\n const years = [];\r\n let i = mapSettings.firstYear;\r\n const len = mapSettings.lastYear;\r\n do {\r\n years.push(i);\r\n } while (++i <= len);\r\n return years;\r\n }, [mapSettings]);\r\n\r\n // Also allow users to click on the timeline and not only on the nozzle\r\n // (TimelineActive) for timlines with bigger space between the steps\r\n const onClick = useCallback(\r\n (e) => {\r\n const clickY = e.pageY - timelineRef.current.getBoundingClientRect().top;\r\n const pixelsPerYear =\r\n bounds.height / (mapSettings.lastYear - mapSettings.firstYear + 1);\r\n\r\n const steps = Math.min(\r\n Math.round((clickY - pixelsPerYear / 2) / pixelsPerYear),\r\n mapSettings.lastYear - mapSettings.firstYear\r\n );\r\n navigateTo({\r\n [secondary ? 'yearCompare' : 'year']: mapSettings.firstYear + steps,\r\n });\r\n },\r\n [bounds, mapSettings, navigateTo, secondary]\r\n );\r\n\r\n return (\r\n \r\n
\r\n \r\n\r\n \r\n navigateTo({\r\n [secondary ? 'yearCompare' : 'year']: parseInt(e.target.value),\r\n })\r\n }\r\n value={activeYear}\r\n title=\"Kies een jaar\"\r\n >\r\n {years.map((year) => (\r\n \r\n ))}\r\n \r\n\r\n
\r\n {\r\n const prevYear =\r\n activeYear - 1 < mapSettings.firstYear\r\n ? mapSettings.lastYear\r\n : activeYear - 1;\r\n navigateTo({\r\n [secondary ? 'yearCompare' : 'year']: prevYear,\r\n });\r\n }}\r\n />\r\n {\r\n const nextYear =\r\n activeYear + 1 > mapSettings.lastYear\r\n ? mapSettings.firstYear\r\n : activeYear + 1;\r\n navigateTo({\r\n [secondary ? 'yearCompare' : 'year']: nextYear,\r\n });\r\n }}\r\n iconSvg={IconArrowRight}\r\n />\r\n
\r\n
\r\n\r\n
\r\n setHovered(true)}\r\n onMouseLeave={() => setHovered(false)}\r\n onTouchStart={() => setHovered(true)}\r\n onTouchEndCapture={() => setHovered(false)}\r\n onClick={onClick}\r\n >\r\n \r\n navigateTo({\r\n [secondary ? 'yearCompare' : 'year']: year,\r\n })\r\n }\r\n />\r\n {years.map((year) => {\r\n const includesYear = mapSettings.sliderValues.includes(year);\r\n return (\r\n \r\n {includesYear && {year}}\r\n \r\n );\r\n })}\r\n
\r\n \r\n \r\n );\r\n}\r\n","var _rect, _line;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLayoutTwoColums(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"layout-two-colums\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n className: \"a\",\n x: 1.5,\n y: 1.497,\n width: 21,\n height: 21,\n rx: 1.5,\n ry: 1.5\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 12,\n y1: 1.497,\n x2: 12,\n y2: 22.497\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLayoutTwoColums);\nexport default __webpack_public_path__ + \"static/media/layout-two-colums.6eb29c7c.svg\";\nexport { ForwardRef as ReactComponent };","var _circle, _line;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgSearch(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"search\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n className: \"a\",\n cx: 9.813,\n cy: 9.812,\n r: 9.063,\n transform: \"translate(-3.056 4.62) rotate(-23.025)\"\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 16.221,\n y1: 16.22,\n x2: 23.25,\n y2: 23.25\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSearch);\nexport default __webpack_public_path__ + \"static/media/search.cd38e40f.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _line, _line2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgMaps(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"maps\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"a\",\n d: \"M16.307,2.838a1.5,1.5,0,0,0-1.114,0L8.807,5.393a1.5,1.5,0,0,1-1.114,0L1.779,3.027a.75.75,0,0,0-1.029.7V18.1a1.5,1.5,0,0,0,.943,1.393l6,2.4a1.5,1.5,0,0,0,1.114,0l6.386-2.555a1.5,1.5,0,0,1,1.114,0L22.221,21.7a.75.75,0,0,0,1.029-.7V6.631a1.5,1.5,0,0,0-.943-1.393Z\"\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 8.25,\n y1: 5.5,\n x2: 8.25,\n y2: 22\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 15.75,\n y1: 2.731,\n x2: 15.75,\n y2: 19.231\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgMaps);\nexport default __webpack_public_path__ + \"static/media/maps.97268072.svg\";\nexport { ForwardRef as ReactComponent };","var _line, _line2, _line3;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgNavigationMenu(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"navigation-menu\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 2.25,\n y1: 18.003,\n x2: 21.75,\n y2: 18.003\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 2.25,\n y1: 12.003,\n x2: 21.75,\n y2: 12.003\n })), _line3 || (_line3 = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 2.25,\n y1: 6.003,\n x2: 21.75,\n y2: 6.003\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgNavigationMenu);\nexport default __webpack_public_path__ + \"static/media/navigation-menu.82efb750.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _line, _polyline;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgShare1(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"share-1\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"a\",\n d: \"M17.25,8.25h1.5a1.5,1.5,0,0,1,1.5,1.5v12a1.5,1.5,0,0,1-1.5,1.5H5.25a1.5,1.5,0,0,1-1.5-1.5v-12a1.5,1.5,0,0,1,1.5-1.5h1.5\"\n })), _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 12,\n y1: 0.75,\n x2: 12,\n y2: 11.25\n })), _polyline || (_polyline = /*#__PURE__*/React.createElement(\"polyline\", {\n className: \"a\",\n points: \"8.25 4.5 12 0.75 15.75 4.5\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgShare1);\nexport default __webpack_public_path__ + \"static/media/share-1.d1362eed.svg\";\nexport { ForwardRef as ReactComponent };","var _line, _line2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgClose(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"close\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _line || (_line = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 0.75,\n y1: 23.249,\n x2: 23.25,\n y2: 0.749\n })), _line2 || (_line2 = /*#__PURE__*/React.createElement(\"line\", {\n className: \"a\",\n x1: 23.25,\n y1: 23.249,\n x2: 0.75,\n y2: 0.749\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgClose);\nexport default __webpack_public_path__ + \"static/media/close.a7b977a1.svg\";\nexport { ForwardRef as ReactComponent };","import { RefObject, useEffect } from 'react';\r\n\r\ntype AnyEvent = MouseEvent | TouchEvent;\r\n\r\nfunction useOnClickOutside(\r\n ref: RefObject,\r\n handler: (event: AnyEvent) => void,\r\n excludeSelectors?: string\r\n): void {\r\n useEffect(() => {\r\n const listener = (event: AnyEvent) => {\r\n const el = ref?.current;\r\n\r\n // Do nothing if clicking ref's element or descendent elements\r\n if (!el || el.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n if (\r\n excludeSelectors &&\r\n document.querySelector(excludeSelectors)?.contains(event.target as Node)\r\n ) {\r\n return;\r\n }\r\n\r\n handler(event);\r\n };\r\n\r\n document.addEventListener(`mousedown`, listener);\r\n document.addEventListener(`touchstart`, listener);\r\n\r\n return () => {\r\n document.removeEventListener(`mousedown`, listener);\r\n document.removeEventListener(`touchstart`, listener);\r\n };\r\n\r\n // Reload only if ref or handler changes\r\n }, [ref, handler, excludeSelectors]);\r\n}\r\n\r\nexport default useOnClickOutside;\r\n","import { useMediaQuery } from 'react-responsive';\r\nimport useUrlParams from './useUrlParams';\r\n\r\nconst useToggleCompare = (\r\n setSnack: (message: string | false) => void,\r\n togglePlay: (toggle?: boolean) => void,\r\n toggleSecondaryPlay: (toggle?: boolean) => void\r\n) => {\r\n const landscapeMode = useMediaQuery({ query: '(min-width: 600px)' });\r\n const { navigateTo, comparing } = useUrlParams();\r\n return () => {\r\n // Stop playing maps when switching comparing state\r\n if (!comparing && landscapeMode) {\r\n setSnack(\r\n 'Gebruik de tijdbalk rechts om de tweede kaart van jaar te wisselen.'\r\n );\r\n }\r\n togglePlay(false);\r\n toggleSecondaryPlay(false);\r\n navigateTo({ comparing: !comparing });\r\n };\r\n};\r\n\r\nexport default useToggleCompare;\r\n","import styles from './Topbar.module.css';\r\nimport Button from './shared/Button';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport { ReactComponent as IconCompare } from './icons/layout-two-colums.svg';\r\nimport { ReactComponent as IconSearch } from './icons/search.svg';\r\nimport { ReactComponent as IconMap } from './icons/maps.svg';\r\nimport { ReactComponent as IconNavigation } from './icons/navigation-menu.svg';\r\nimport { ReactComponent as IconShare } from './icons/share-1.svg';\r\nimport { ReactComponent as IconClose } from './icons/close.svg';\r\nimport { useEffect, useRef } from 'react';\r\nimport { useToggle } from 'react-use';\r\nimport useOnClickOutside from './utils/useOnClickOutside';\r\nimport useUrlParams from './utils/useUrlParams';\r\nimport useToggleCompare from './utils/useToggleCompare';\r\n\r\ntype TopbarProps = {\r\n toggleMobileNavigation: (open?: boolean) => void;\r\n mobileNavigationOpen: boolean;\r\n toggleShareModal: () => void;\r\n toggleInfoModal: () => void;\r\n togglePlay: (toggle?: boolean) => void;\r\n toggleSecondaryPlay: (toggle?: boolean) => void;\r\n mobileSearchInstance: any;\r\n snack: string | false;\r\n setSnack: (message: string | false) => void;\r\n};\r\n\r\nexport default function Topbar({\r\n toggleMobileNavigation,\r\n mobileNavigationOpen,\r\n toggleShareModal,\r\n toggleInfoModal,\r\n mobileSearchInstance,\r\n snack,\r\n setSnack,\r\n togglePlay,\r\n toggleSecondaryPlay,\r\n}: TopbarProps) {\r\n const [mobileSearch, toggleMobileSearch] = useToggle(false);\r\n const nodeRef = useRef(null);\r\n const snackRef = useRef(null);\r\n const { comparing } = useUrlParams();\r\n const toggleCompare = useToggleCompare(\r\n setSnack,\r\n togglePlay,\r\n toggleSecondaryPlay\r\n );\r\n\r\n useOnClickOutside(\r\n nodeRef,\r\n () => {\r\n if (mobileSearch) toggleMobileSearch();\r\n },\r\n '#toggleSearch'\r\n );\r\n\r\n // Close the search when we activate the search\r\n useEffect(() => {\r\n if (mobileSearchInstance.current) {\r\n mobileSearchInstance.current.on('select-result', toggleMobileSearch);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [mobileSearchInstance.current, toggleMobileSearch]);\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n {comparing ? 'Stop vergelijken' : 'Vergelijken'}\r\n \r\n
\r\n\r\n
\r\n \"Logo\r\n

Topotijdreis

\r\n
\r\n\r\n \r\n\r\n \r\n setTimeout(() => setSnack(false), 5000)}\r\n nodeRef={snackRef}\r\n classNames={{\r\n enterActive: styles.Topbar_snacks___active,\r\n enterDone: styles.Topbar_snacks___active,\r\n }}\r\n >\r\n
\r\n
{snack}
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import { useRef } from 'react';\r\nimport styles from './NavigationMobile.module.css';\r\nimport Button from './shared/Button';\r\nimport { ReactComponent as IconCompare } from './icons/layout-two-colums.svg';\r\nimport { ReactComponent as IconMap } from './icons/maps.svg';\r\nimport { ReactComponent as IconPlay } from './icons/controls-play.svg';\r\nimport { ReactComponent as IconPause } from './icons/controls-pause.svg';\r\nimport { ReactComponent as IconShare } from './icons/share-1.svg';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport useOnClickOutside from './utils/useOnClickOutside';\r\nimport useUrlParams from './utils/useUrlParams';\r\nimport useToggleCompare from './utils/useToggleCompare';\r\n\r\ntype NavigationMobileProps = {\r\n isOpen: boolean;\r\n toggle: (open?: boolean) => void;\r\n playing: boolean;\r\n togglePlay: (toggle?: boolean) => void;\r\n toggleSecondaryPlay: (toggle?: boolean) => void;\r\n toggleInfoModal: () => void;\r\n toggleShareModal: () => void;\r\n setSnack: (message: string | false) => void;\r\n modalOpen: boolean;\r\n};\r\n\r\nexport default function NavigationMobile({\r\n isOpen,\r\n toggle,\r\n playing,\r\n togglePlay,\r\n toggleSecondaryPlay,\r\n setSnack,\r\n toggleInfoModal,\r\n toggleShareModal,\r\n modalOpen,\r\n}: NavigationMobileProps) {\r\n const nodeRef = useRef(null);\r\n const toggleCompare = useToggleCompare(\r\n setSnack,\r\n togglePlay,\r\n toggleSecondaryPlay\r\n );\r\n const { comparing } = useUrlParams();\r\n useOnClickOutside(\r\n nodeRef,\r\n () => {\r\n if (isOpen && !modalOpen) toggle(false);\r\n },\r\n '#toggleMobileNavigation'\r\n );\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n Play\r\n \r\n
\r\n \r\n {comparing ? 'Stop vergelijken' : 'Vergelijken'}\r\n \r\n
\r\n \r\n Over Topotijdreis\r\n \r\n
\r\n \r\n Delen\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgTwitter(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n width: \"56.693px\",\n height: \"56.693px\",\n viewBox: \"0 0 56.693 56.693\",\n style: {\n enableBackground: \"new 0 0 56.693 56.693\"\n },\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n strokeWidth: 0,\n d: \"M54.082,15.5495c-1.8115,0.8047-3.7597,1.3477-5.8051,1.5913c2.0874-1.25,3.6894-3.2305,4.4443-5.5918 c-1.9531,1.1587-4.1152,2-6.418,2.4536c-1.8432-1.9643-4.4702-3.1919-7.3769-3.1919c-5.5816,0-10.1069,4.5254-10.1069,10.107 c0,0.792,0.0893,1.563,0.2617,2.3027c-8.3999-0.4209-15.8477-4.4443-20.8325-10.5596c-0.8697,1.4922-1.3682,3.2281-1.3682,5.0811 c0,3.5063,1.7842,6.5996,4.4961,8.4126c-1.6563-0.0532-3.2154-0.5073-4.5777-1.2647c-0.0009,0.042-0.0009,0.0845-0.0009,0.128 c0,4.896,3.4839,8.9809,8.1079,9.9101c-0.8482,0.2305-1.7412,0.3545-2.6631,0.3545c-0.6519,0-1.2847-0.063-1.9019-0.1816 c1.2867,4.0151,5.0191,6.9375,9.441,7.019c-3.459,2.711-7.8165,4.3267-12.5523,4.3267c-0.8154,0-1.6196-0.0484-2.4106-0.1411 c4.4736,2.8681,9.7856,4.541,15.4931,4.541c18.5908,0,28.7559-15.4009,28.7559-28.7569c0-0.4375-0.0088-0.8745-0.0283-1.3076 C51.0137,19.3571,52.728,17.5769,54.082,15.5495z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgTwitter);\nexport default __webpack_public_path__ + \"static/media/twitter.1927d724.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useRef } from 'react';\r\nimport styles from './Modal.module.css';\r\nimport { ReactComponent as IconClose } from './../icons/close.svg';\r\nimport { useClickAway, useKey } from 'react-use';\r\nimport Div100vh from 'react-div-100vh';\r\nimport { CSSTransition } from 'react-transition-group';\r\nimport Button from '../shared/Button';\r\n\r\ntype ModalProps = {\r\n children: React.ReactNode;\r\n handleClose: () => void;\r\n isOpen: boolean;\r\n};\r\n\r\nexport default function Modal({ children, handleClose, isOpen }: ModalProps) {\r\n useKey(\r\n 'Escape',\r\n () => {\r\n if (isOpen) handleClose();\r\n },\r\n undefined,\r\n [isOpen]\r\n );\r\n const modalRef = useRef(null);\r\n const modalInnerRef = useRef(null);\r\n useClickAway(modalInnerRef, () => {\r\n if (isOpen) handleClose();\r\n });\r\n\r\n return (\r\n \r\n \r\n
\r\n {children}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport Modal from './Modal';\r\nimport styles from './Modal.module.css';\r\n\r\ntype InfoModalProps = {\r\n handleClose: () => void;\r\n isOpen: boolean;\r\n};\r\n\r\nexport default function InfoModal({ handleClose, isOpen }: InfoModalProps) {\r\n return (\r\n \r\n
\r\n

Over meer dan 200 jaar topografie en luchtfoto's

\r\n

\r\n Op 18 februari 1815 werd het Topographisch Bureau opgericht. Sinds die\r\n datum verzamelt en ontsluit de Nederlandse overheid geografische\r\n informatie: bijvoorbeeld over de ligging van wegen, water, bebouwing\r\n en landbouwgrond. Later ging het Bureau verder onder de naam\r\n Topografische Dienst. In 2004 werd de Dienst onderdeel van het\r\n Kadaster.\r\n

\r\n

\r\n Hiermee haalde het Kadaster jarenlange ervaring met het verzamelen van\r\n geo-informatie in huis. Een resultaat om trots op te zijn: meer dan\r\n 200 jaar topografische kaarten van topniveau. Om dit niveau te\r\n behouden investeren we in innovaties, waar mogelijk in samenwerking\r\n met overheden, het bedrijfsleven en de wetenschap. Door nieuwe\r\n methoden en technieken hebben gebruikers nog meer plezier van onze\r\n kaarten. Deze zijn actueler dan ooit.\r\n

\r\n

\r\n Sinds 1927 worden topografische kaarten gemaakt met behulp van\r\n luchtfoto's, dat zijn foto’s vanuit een vliegtuig loodrecht naar\r\n beneden. Vanaf die tijd zijn er van Nederland luchtfoto’s beschikbaar\r\n met verschillende intervallen. Vanaf 2006 is begonnen met het maken\r\n van digitale luchtfoto’s van (delen van) Nederland, deze worden in\r\n Topotijdreis getoond.\r\n

\r\n

\r\n Om 200 jaar topografie te vieren is in 2015 deze tijdreis-app gemaakt.\r\n Ontdek met de app meer dan 200 jaar aan topografische gegevens van\r\n Nederland en luchtfoto’s vanaf 2006!\r\n

\r\n

Veel plezier bij het gebruik van Topotijdreis !

\r\n
\r\n
\r\n

Disclaimer

\r\n

\r\n Topotijdreis met luchtfoto’s is met grote zorg opgebouwd uit\r\n gedigitaliseerde en geogerefereerde historische kaarten en\r\n luchtfoto's. Toch kunnen er nog onvolkomenheden voorkomen.\r\n

\r\n

\r\n \r\n Toegankelijkheidsverklaring\r\n \r\n

\r\n

\r\n \r\n Algemene voorwaarden & Privacy\r\n \r\n

\r\n
\r\n\r\n
\r\n

Topografische kaarten

\r\n

\r\n De kaarten zijn opgebouwd uit meerdere kaartschalen en tonen gegevens\r\n conform het Nederlands tiling schema op de schalen 1:12.288.000 (level\r\n 0) t/m 1:6.000 (level 11). De gebruikte kaartprojectie is het\r\n Rijksdriehoekstelsel.\r\n

\r\n

\r\n Het kan voorkomen dat de kaarten uit de beginperiode verschoven liggen\r\n ten opzichte van de moderne topografie. Door de eenvoudige projectie\r\n die in de beginperiode is toegepast bij de oorspronkelijke\r\n vervaardiging van de Kraijenhoff-kaart en de Postroutekaart uit 1815\r\n is er geen sprake van een constante schaal. De schaal is wel verbeterd\r\n bij de digitale inpassing van de kaarten maar het kaartbeeld is niet\r\n beter te corrigeren.\r\n

\r\n

\r\n In Topotijdreis zijn de volgende topografische kaarten opgenomen (van\r\n overzicht naar detail, en van oud naar jong):\r\n

\r\n

Postroutekaart

\r\n

\r\n Weergave in Topotijdreis in 1815 op schaal 1 op 400.000\r\n
\r\n Een prachtig getekende historische topografische kaart met routes van\r\n postkoetsen in de tijd van Napoleon.\r\n

\r\n

Algemene Kaart Nederland

\r\n

\r\n Weergave in Topotijdreis van 1816 tot en met 1888 op schaal 1 op\r\n 400.000\r\n
\r\n De Algemene Kaarten van Nederland van 1816, 1821 en 1830 geven een\r\n mooi overzicht van Nederland in die tijd.\r\n

\r\n

Gemeentekaart

\r\n

\r\n Weergave in Topotijdreis van 1889 tot nu op schaal 1 op 400.000\r\n
\r\n De Gemeentekaart van Nederland geeft een overzicht van de\r\n administratieve indeling van Nederland in gemeenten. Op de kaart vindt\r\n u onder andere rijksgrenzen, provinciegrenzen en gemeentegrenzen.{' '}\r\n

\r\n

Topografische Kaart 200D

\r\n

\r\n Weergave in Topotijdreis van 1867 tot en met 1995 op schaal 1 op\r\n 200.000\r\n
\r\n De historische kaarten op schaal 1:200.000 zijn uitgegeven tussen 1865\r\n en 1955. U ziet op deze topografische kaart het terrein en landschap\r\n van vroeger op kleine schaal.\r\n

\r\n

Wegenkaart

\r\n

\r\n Weergave in Topotijdreis van 1996 tot en met 2014 op schaal 1 op\r\n 250.000\r\n
\r\n De Historische wegenkaart geeft een gedetailleerd beeld van de\r\n Nederlandse wegen in het verleden.\r\n

\r\n

TOP250

\r\n

\r\n Weergave in Topotijdreis van 2015 tot nu op schaal 1 op 250.000\r\n
\r\n De topografische kaarten op schaal 1:250.000 worden in deze vorm\r\n uitgegeven sinds 2015. Deze kleine schaal geeft een goed overzicht van\r\n een groter gebied.\r\n

\r\n

Krayenhoffkaart

\r\n

\r\n Weergave in Topotijdreis van 1815 tot en met 1849 op schaal 1 op\r\n 115.200\r\n
\r\n De Krayenhoffkaart is een topografische kaart van de Bataafse\r\n Republiek, gemaakt tussen 1798 en 1822. De kaart dankt zijn naam aan\r\n baron en cartograaf Krayenhoff. De laatste gewijzigde druk werd\r\n gemaakt in ongeveer 1870.\r\n

\r\n

Topografische Militaire Kaart

\r\n

\r\n Weergave in Topotijdreis van 1850 tot en met 1935 op schaal 1 op\r\n 50.000\r\n
\r\n De Topografische Militaire Kaart van het Koninkrijk der Nederlanden\r\n verscheen van 1850 tot 1864. Door de gedetailleerde weergave is de\r\n kaart een uitstekende bron van informatie voor de bestudering van het\r\n 19-eeuwse, voor-industriële Nederlandse landschap.{' '}\r\n

\r\n

TOP50

\r\n

\r\n Weergave in Topotijdreis van 1903 tot nu op schaal 1 op 50.000\r\n
\r\n Topografische kaarten op schaal 1:50.000 zijn uitgegeven tussen 1903\r\n en nu. De kaart is in kleur en geeft een volledig beeld van het\r\n terrein en het landschap, met onder meer huizen in het buitengebied,\r\n straten, water, bos en plaatsnamen.\r\n

\r\n

Bonnebladen

\r\n

\r\n Weergave in Topotijdreis van 1865 tot en met 1949 op schaal 1 op\r\n 25.000\r\n
\r\n Bonnebladen zijn gedetailleerde militaire kaarten. Deze kaartbladen\r\n werden vanaf 1865 voor het eerst in kleur gedrukt door het voormalige\r\n Topographisch Bureau.\r\n

\r\n

TOP25

\r\n

\r\n Weergave in Topotijdreis van 1935 tot nu op schaal 1 op 25.000\r\n
\r\n Topografische kaarten op schaal 1:25.000 zijn uitgegeven tussen 1935\r\n en nu. U ziet op een topografische kaart het terrein en landschap met\r\n huizen, straten en plaatsnamen. Waar was bebouwing? Hoe liepen beekjes\r\n en rivieren? U ziet ook waar bos, hei of weidegrond was. De kaarten\r\n bevatten gedetailleerde topografische informatie.\r\n

\r\n

\r\n Bovengenoemde Topotijdreis kaarten zijn te{' '}\r\n \r\n bestellen\r\n \r\n .\r\n

\r\n
\r\n\r\n
\r\n

Luchtfoto’s

\r\n

\r\n In Topotijdreis zijn momenteel alleen de digitale luchtfoto’s\r\n opgenomen vanaf het eerste jaar dat de bedekking van Nederland\r\n digitaal compleet is, en dat is 2006.\r\n

\r\n

\r\n De luchtfoto’s zijn vervaardigd op een schaal van ongeveer 1:18.000 en\r\n beslaan een gebied van circa 4 x 4 km. Alle luchtfoto’s zijn loodrecht\r\n naar beneden genomen, t/m 2006 in zwart/wit en vanaf 2007 zijn de\r\n luchtfoto's opgenomen in kleur.\r\n

\r\n

\r\n Er zijn analoge luchtfoto's vanaf 1927 beschikbaar, deze zijn te{' '}\r\n \r\n bestellen\r\n \r\n .\r\n

\r\n
\r\n\r\n
\r\n

Veelgestelde vragen

\r\n\r\n

\r\n \r\n Waarom zie ik soms geen verschil in het kaartbeeld wanneer ik wissel\r\n tussen jaren?\r\n \r\n

\r\n

\r\n Dit komt omdat er voor die gebieden dan geen nieuwe kaarten zijn\r\n gemaakt. De kaart van een specifiek jaar laat de historische\r\n topografische data zien die tot op dat jaar actueel beschikbaar waren.\r\n Dit kan betekenen dat er gedurende meerdere jaren geen verschil in de\r\n kaart waarneembaar is.\r\n

\r\n\r\n

\r\n Waarom zijn bepaalde kaarten verschillend van kleur?\r\n

\r\n

\r\n Destijds waren er verschillende drukkers om de topografische kaarten\r\n te printen. Zij hadden een eigen productieproces en manier van\r\n opslaan. Dit verklaart het kleurverschil.\r\n

\r\n\r\n

\r\n Zijn alle kaarten in kleur?\r\n

\r\n

\r\n Nee, per gebied en jaartal kan dit variëren. Dit heeft te maken met\r\n het doel waar de kaart voor gemaakt werd/wordt.\r\n

\r\n\r\n

\r\n Is er bij een kaart ook een legenda beschikbaar?\r\n

\r\n

\r\n Nee, hiervoor moet u een{' '}\r\n \r\n bestelling plaatsen\r\n \r\n .\r\n

\r\n\r\n

\r\n Kan ik een kaart ook downloaden als een PDF-bestand?\r\n

\r\n

\r\n Nee, wel kunt u een kaart{' '}\r\n bestellen.\r\n

\r\n\r\n

\r\n Staan er ook kadastrale grenzen op kaarten?\r\n

\r\n

\r\n Nee, alleen de topografie wordt weergegeven. Wilt u een kaart met\r\n kadastrale grenzen dan kunt u een{' '}\r\n \r\n kadastrale kaart opvragen\r\n \r\n .\r\n

\r\n\r\n

\r\n \r\n Waarom klopt de informatie op de kaart niet met de werkelijkheid?\r\n Mijn huis staat niet juist weergegeven.\r\n \r\n

\r\n

\r\n Er zit een periode tussen de werkelijke opname en de feitelijke\r\n uitgave waarin de kaart is gemaakt.\r\n

\r\n\r\n

\r\n Zijn er ook kaarten aanwezig van voor 1815?\r\n

\r\n

\r\n Nee, voor die tijd bestond er nog geen topografische dienst. Er zijn\r\n wel topografische kaarten maar die zijn regionaal beschikbaar.\r\n Bijvoorbeeld via het Nationaal archief, dit kan per gemeente,\r\n provincie verschillen.\r\n

\r\n\r\n

\r\n \r\n Mag ik een print-screen maken van een kaart en dit publiceren?\r\n \r\n

\r\n

\r\n U mag de website topotijdreis niet commercieel gebruiken. Het volgende\r\n is niet toegestaan:\r\n

\r\n
    \r\n
  • het vragen van betaling en/of registratie voor toegang;
  • \r\n
  • het toe- of invoegen van reclame-uitingen;
  • \r\n
  • \r\n logo’s of andere content (al dan niet via layers, pop-ups en\r\n dergelijke);\r\n
  • \r\n
  • \r\n het creëren van additionele functionaliteiten en afgeleide diensten.\r\n
  • \r\n
\r\n

\r\n Overig gebruik is alleen toegestaan als daarvoor voorafgaande\r\n schriftelijke toestemming van het Kadaster is verkregen. Zie hiervoor\r\n ook{' '}\r\n \r\n Algemene voorwaarden & Privacy\r\n \r\n .\r\n

\r\n\r\n

\r\n \r\n Waarom zie ik vliegvelden en kazernes niet op oudere kaarten?\r\n \r\n

\r\n

\r\n In een bepaalde periode viel dit onder geclassificeerd gebied en mocht\r\n niet weergegeven worden. Dit werd witgelaten of met een fantasie\r\n (grasvelden, slootjes) gebied weergegeven.\r\n

\r\n\r\n

\r\n \r\n Waarom is een gebouw op een kaart niet zichtbaar in het jaar van\r\n uitgifte?\r\n \r\n

\r\n

\r\n De kaarten worden gemaakt op basis van de luchtfoto en daar zit een\r\n paar jaar tussen, dit kan oplopen tot 5 jaar. Daarnaast werden vroeger\r\n de kaarten ook niet zo vaak herzien als tegenwoordig.\r\n

\r\n\r\n

\r\n Zijn er luchtfoto's van voor 2006 beschikbaar?\r\n

\r\n

\r\n Er zijn analoge luchtfoto's{' '}\r\n \r\n vanaf 1927 beschikbaar\r\n \r\n

\r\n\r\n

\r\n Hoe goed zijn details op de foto's te onderscheiden?\r\n

\r\n

\r\n Het detailniveau verschilt per vluchtjaar en is afhankelijk van\r\n seizoensinvloeden. De luchtfoto's zijn gevlogen op een hoogte van\r\n ongeveer 1800 meter t.b.v. topografische kaarten op een schaal van\r\n 1:10.000. Kleine objecten zoals schuttingen en hekken zijn niet\r\n zichtbaar op de foto's.\r\n

\r\n\r\n

\r\n \r\n Waarom staan er alleen luchtfoto’s vanaf 2006 in Topotijdreis?\r\n \r\n

\r\n

\r\n Vanaf 2006 zijn de luchtfoto’s digitaal beschikbaar en daarom\r\n makkelijk in Topotijdreis op te nemen. Voor 2006 is (een groot deel\r\n van) Nederland alleen met analoge luchtfoto’s opgenomen. Deze zijn\r\n niet geschikt voor opname in Topotijdreis.\r\n

\r\n\r\n

\r\n Hoe kun je het beste navigeren in de luchtfoto?\r\n

\r\n

\r\n In de luchtfoto’s staan geen namen ed. Het kan daarom lastig zijn om\r\n in de luchtfoto de gewenste locatie te vinden. Het makkelijkste is om\r\n op de kaart in Topotijdreis je locatie te zoeken en dan via de knop\r\n over te schakelen naar de luchtfoto.\r\n

\r\n\r\n

\r\n \r\n Waarom hebben de kaart en de luchtfoto niet dezelfde tijdsbalk?\r\n \r\n

\r\n

\r\n Luchtfoto’s zijn niet voor ieder jaar beschikbaar en de nieuwe\r\n luchtfoto’s en de nieuwe topografische kaart kunnen op verschillende\r\n tijdstippen beschikbaar komen.\r\n

\r\n\r\n

\r\n \r\n Waarom bevatten de kaart en de luchtfoto van hetzelfde jaartal niet\r\n dezelfde informatie? / Waarom zie ik wel iets op de luchtfoto, maar\r\n niet op de topografische kaart?\r\n \r\n

\r\n

\r\n De luchtfoto’s worden gebruikt als bron voor het actualiseren van de\r\n topografische kaarten. Vanwege de doorlooptijd van de processen rondom\r\n luchtfoto’s en topografische kaarten zijn de topografische kaarten\r\n meestal gebaseerd op de luchtfoto’s van het jaar ervoor. Als\r\n voorbeeld: De topografische kaarten uit 2019 zijn gebaseerd op\r\n luchtfoto’s uit 2018.\r\n

\r\n\r\n

\r\n In welke browser kan ik de app het beste bekijken?\r\n

\r\n

\r\n Gebruik de meest recente versie van uw browser. De app werkt het beste\r\n in Google Chrome en Mozilla Firefox.\r\n

\r\n
\r\n
\r\n );\r\n}\r\n","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgFacebook(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n width: \"56.693px\",\n height: \"56.693px\",\n viewBox: \"0 0 56.693 56.693\",\n enableBackground: \"new 0 0 56.693 56.693\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n strokeWidth: 0,\n d: \"M40.43,21.739h-7.645v-5.014c0-1.883,1.248-2.322,2.127-2.322c0.877,0,5.395,0,5.395,0V6.125l-7.43-0.029 c-8.248,0-10.125,6.174-10.125,10.125v5.518h-4.77v8.53h4.77c0,10.947,0,24.137,0,24.137h10.033c0,0,0-13.32,0-24.137h6.77 L40.43,21.739z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFacebook);\nexport default __webpack_public_path__ + \"static/media/facebook.7dea9556.svg\";\nexport { ForwardRef as ReactComponent };","var _g;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgEmailActionUnread(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n transform: \"matrix(1,0,0,1,0,0)\"\n }, /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23.89,5.83a.18.18,0,0,0-.2,0l-9.75,9.75a2.72,2.72,0,0,1-1.94.8,2.79,2.79,0,0,1-1.95-.8L.31,5.87a.18.18,0,0,0-.2,0A.18.18,0,0,0,0,6V18a2,2,0,0,0,2,2H22a2,2,0,0,0,2-2V6A.18.18,0,0,0,23.89,5.83Z\",\n fill: \"currentColor\",\n strokeWidth: 0\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M11.11,14.56a1.27,1.27,0,0,0,1.77,0l9.69-9.69a.5.5,0,0,0,.12-.51C22.58,4,22.27,4,22,4H2c-.28,0-.58,0-.69.36a.5.5,0,0,0,.12.51Z\",\n fill: \"currentColor\",\n strokeWidth: 0\n })))));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgEmailActionUnread);\nexport default __webpack_public_path__ + \"static/media/email-action-unread.927adab2.svg\";\nexport { ForwardRef as ReactComponent };","var _path;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgLinkedin(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n width: \"32px\",\n height: \"32px\",\n viewBox: \"0 0 32 32\",\n enableBackground: \"new 0 0 32 32\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n strokeWidth: 0,\n d: \"M30.7,0H1.3C0.6,0,0,0.6,0,1.3v29.3C0,31.4,0.6,32,1.3,32h29.3c0.7,0,1.3-0.6,1.3-1.3V1.3 C32,0.6,31.4,0,30.7,0z M9.5,27.3H4.7V12h4.8V27.3z M7.1,9.9c-1.5,0-2.8-1.2-2.8-2.8c0-1.5,1.2-2.8,2.8-2.8c1.5,0,2.8,1.2,2.8,2.8 C9.9,8.7,8.6,9.9,7.1,9.9z M27.3,27.3h-4.7v-7.4c0-1.8,0-4-2.5-4c-2.5,0-2.8,1.9-2.8,3.9v7.6h-4.7V12H17v2.1h0.1 c0.6-1.2,2.2-2.5,4.5-2.5c4.8,0,5.7,3.2,5.7,7.3V27.3z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgLinkedin);\nexport default __webpack_public_path__ + \"static/media/linkedin.7edc2eed.svg\";\nexport { ForwardRef as ReactComponent };","var _path, _path2;\nvar _excluded = [\"title\", \"titleId\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\nimport * as React from \"react\";\nfunction SvgWhatsapp(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n id: \"Layer_1\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n x: \"0px\",\n y: \"0px\",\n width: \"32px\",\n height: \"32px\",\n viewBox: \"0 0 32 32\",\n enableBackground: \"new 0 0 32 32\",\n xmlSpace: \"preserve\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n strokeWidth: 0,\n d: \"M0.1,32l2.3-8.2c-1.4-2.4-2.1-5.1-2.1-7.9C0.2,7.1,7.3,0,16.1,0c4.2,0,8.2,1.7,11.2,4.7c3,3,4.6,7,4.6,11.2 c0,8.7-7.1,15.9-15.9,15.9h0h0c-2.7,0-5.3-0.7-7.6-1.9L0.1,32z M8.9,26.9l0.5,0.3c2,1.2,4.3,1.8,6.7,1.8h0c7.3,0,13.2-5.9,13.2-13.2 c0-3.5-1.4-6.8-3.9-9.3s-5.8-3.9-9.3-3.9C8.8,2.7,2.9,8.6,2.9,15.9c0,2.5,0.7,4.9,2,7l0.3,0.5l-1.3,4.9L8.9,26.9z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n fill: \"currentColor\",\n strokeWidth: 0,\n d: \"M12.1,9.2c-0.3-0.8-0.6-0.7-0.9-0.7c-0.2,0-0.5,0-0.8,0 c-0.3,0-0.7,0.1-1.1,0.5C9,9.4,8,10.4,8,12.3c0,2,1.4,3.8,1.6,4.1c0.2,0.3,2.8,4.3,6.8,6c0.9,0.4,1.7,0.7,2.3,0.8 c0.9,0.3,1.8,0.3,2.5,0.2c0.8-0.1,2.3-1,2.7-1.9c0.3-0.9,0.3-1.7,0.2-1.9c-0.1-0.2-0.4-0.3-0.8-0.5C22.9,19,21,18,20.6,17.9 c-0.4-0.1-0.6-0.2-0.9,0.2c-0.3,0.4-1,1.3-1.3,1.6c-0.2,0.3-0.5,0.3-0.9,0.1c-0.4-0.2-1.7-0.6-3.2-2c-1.2-1.1-2-2.3-2.2-2.7 c-0.2-0.4,0-0.6,0.2-0.8c0.2-0.2,0.4-0.5,0.6-0.7c0.2-0.2,0.3-0.4,0.4-0.7c0.1-0.3,0.1-0.5,0-0.7C13.2,12,12.4,10,12.1,9.2z\"\n })));\n}\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgWhatsapp);\nexport default __webpack_public_path__ + \"static/media/whatsapp.11ccb525.svg\";\nexport { ForwardRef as ReactComponent };","import { useEffect, useState } from 'react';\r\nimport Modal from './Modal';\r\nimport styles from './Modal.module.css';\r\nimport classNames from 'classnames';\r\nimport { useLocation } from 'react-router-dom';\r\n\r\nimport Button from '../shared/Button';\r\nimport buttonStyles from '../shared/Button.module.css';\r\nimport { ReactComponent as IconTwitter } from './../icons/twitter.svg';\r\nimport { ReactComponent as IconFacebook } from './../icons/facebook.svg';\r\nimport { ReactComponent as IconEmail } from './../icons/email-action-unread.svg';\r\nimport { ReactComponent as IconLinkedin } from './../icons/linkedin.svg';\r\nimport { ReactComponent as IconWhatsapp } from './../icons/whatsapp.svg';\r\n\r\ntype ShareModalProps = {\r\n handleClose: () => void;\r\n isOpen: boolean;\r\n};\r\n\r\nexport default function ShareModal({ handleClose, isOpen }: ShareModalProps) {\r\n const location = useLocation();\r\n const [copiedToClipboard, setCopiedToClipboard] = useState(false);\r\n useEffect(() => {\r\n if (!isOpen) setCopiedToClipboard(false);\r\n }, [isOpen]);\r\n return (\r\n \r\n
\r\n

Delen

\r\n

Deel Topotijdreis met iemand die ook even terug in de tijd wil.

\r\n \r\n \r\n Twitter\r\n {' '}\r\n \r\n Facebook\r\n {' '}\r\n \r\n LinkedIn\r\n \r\n \r\n WhatsApp\r\n \r\n \r\n E-mail\r\n \r\n
\r\n

Kopieer de url en deel waar je maar wilt.

\r\n
\r\n e.target.select()}\r\n value={`https://www.topotijdreis.nl${location.pathname}`}\r\n onChange={() => {}}\r\n />\r\n {\r\n setCopiedToClipboard(true);\r\n navigator.clipboard.writeText(\r\n `https://www.topotijdreis.nl${location.pathname}`\r\n );\r\n }}\r\n >\r\n {copiedToClipboard ? 'Gekopieerd!' : 'Kopieer'}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import { useInterval, useToggle } from 'react-use';\r\nimport settings from '../settings.json';\r\nimport useUrlParams from './useUrlParams';\r\nimport { getMapSettings } from './mapUtils';\r\nimport { useEffect } from 'react';\r\n\r\nconst useMapPlayer = () => {\r\n const [playing, togglePlay] = useToggle(false);\r\n const [secondaryPlaying, toggleSecondaryPlay] = useToggle(false);\r\n const { activeYear, activeYearCompare, mapType, mapTypeCompare, navigateTo } =\r\n useUrlParams();\r\n const mapSettings = getMapSettings(mapType);\r\n const mapSettingsCompare = getMapSettings(mapTypeCompare);\r\n\r\n const advance = () => {\r\n let nextYear = activeYear;\r\n let nextYearCompare = activeYearCompare;\r\n\r\n if (playing) {\r\n nextYear =\r\n activeYear + 1 > mapSettings.lastYear\r\n ? mapSettings.firstYear\r\n : activeYear + 1;\r\n }\r\n // Also fix stop of timer of secondary when comparing is closing\r\n if (secondaryPlaying) {\r\n nextYearCompare =\r\n activeYearCompare + 1 > mapSettingsCompare.lastYear\r\n ? mapSettingsCompare.firstYear\r\n : activeYearCompare + 1;\r\n }\r\n\r\n navigateTo({ year: nextYear, yearCompare: nextYearCompare });\r\n // Mischien een ternary setting?\r\n };\r\n\r\n useInterval(\r\n advance,\r\n playing || secondaryPlaying ? settings.timeLoopIntervalSeconds * 1000 : null\r\n );\r\n\r\n // Advance map directly when pressing play\r\n useEffect(() => {\r\n if (playing && !secondaryPlaying) advance();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [playing]);\r\n\r\n useEffect(() => {\r\n if (!playing && secondaryPlaying) advance();\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [secondaryPlaying]);\r\n\r\n return { playing, togglePlay, secondaryPlaying, toggleSecondaryPlay };\r\n};\r\n\r\nexport default useMapPlayer;\r\n","import { useMemo } from 'react';\r\nimport { getMapSettings } from '../utils/mapUtils';\r\n\r\nexport default function CustomAttribution({ mapType, activeYear, zoom }: any) {\r\n // Find the layer\r\n const mapLayer: any = useMemo(\r\n () =>\r\n getMapSettings(mapType).layers.find((layer) => {\r\n return activeYear >= layer.from && activeYear <= layer.to;\r\n }),\r\n [activeYear, mapType]\r\n );\r\n\r\n if (!mapLayer.attribution) return null;\r\n\r\n let attributionKey = 0;\r\n Object.keys(mapLayer.attribution).forEach((zoomLevel) => {\r\n const zoomLevelInt = parseFloat(zoomLevel);\r\n if (zoom > zoomLevelInt && zoomLevelInt > attributionKey)\r\n attributionKey = zoomLevelInt;\r\n });\r\n\r\n const attribution = mapLayer.attribution[attributionKey].text;\r\n const attributionUrl = mapLayer.attribution[attributionKey].url;\r\n if (!attribution) return null;\r\n\r\n return (\r\n \r\n
\r\n {attributionUrl ? (\r\n \r\n {attribution}\r\n \r\n ) : (\r\n attribution\r\n )}\r\n
\r\n
\r\n \r\n Powered by Esri\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import {\r\n useRef,\r\n useEffect,\r\n forwardRef,\r\n useImperativeHandle,\r\n useCallback,\r\n useState,\r\n} from 'react';\r\nimport classNames from 'classnames';\r\nimport styles from './Map.module.css';\r\nimport MapView from '@arcgis/core/views/MapView';\r\nimport Search from '@arcgis/core/widgets/Search';\r\nimport Locate from '@arcgis/core/widgets/Locate';\r\nimport * as watchUtils from '@arcgis/core/core/watchUtils';\r\nimport WebMap from '@arcgis/core/WebMap';\r\nimport TileLayer from '@arcgis/core/layers/TileLayer';\r\nimport useUrlParams from '../utils/useUrlParams';\r\nimport { joinMapState, splitMapState } from '../utils/urlUtils';\r\nimport { getMapSettings, lods, MapTypes } from '../utils/mapUtils';\r\nimport { useParams } from 'react-router-dom';\r\nimport Point from '@arcgis/core/geometry/Point';\r\nimport SpatialReference from '@arcgis/core/geometry/SpatialReference';\r\nimport ScaleBar from '@arcgis/core/widgets/ScaleBar';\r\nimport Attribution from '@arcgis/core/widgets/Attribution';\r\nimport Graphic from '@arcgis/core/Graphic';\r\nimport Zoom from '@arcgis/core/widgets/Zoom';\r\nimport CustomAttribution from './CustomAttribution';\r\nimport { LocatorService } from '../settings.json';\r\n\r\nconst geolocationSource = {\r\n url: LocatorService,\r\n outFields: ['Addr_type'],\r\n placeholder: 'Zoek op de kaart',\r\n singleLineFieldName: 'SingleLine',\r\n};\r\n\r\ntype MapProps = {\r\n mobileSearchInstance: any;\r\n children: React.ReactNode;\r\n secondary?: boolean;\r\n comparing?: boolean;\r\n activeYear: number;\r\n mapType: MapTypes;\r\n mapTypeCompare: MapTypes;\r\n};\r\n\r\nfunction Map(\r\n {\r\n mobileSearchInstance,\r\n children,\r\n mapType,\r\n activeYear,\r\n mapTypeCompare,\r\n secondary = false,\r\n }: MapProps,\r\n ref: any\r\n) {\r\n // const mapDiv = useRef(null);\r\n const mapRef = useRef(null!);\r\n const mapViewRef = useRef(null!);\r\n const attributionRef = useRef(null!);\r\n const layerRef = useRef(null!);\r\n const [domLoading, setDomLoading] = useState(true);\r\n const [loading, setLoading] = useState(true);\r\n // const [loading, setIsLoading] = useState(true);\r\n const prevExtentRef = useRef(null!);\r\n const prevZoomRef = useRef(null!);\r\n const { navigateTo, comparing } = useUrlParams();\r\n let { mapState } = useParams();\r\n\r\n useImperativeHandle(ref, () => ({\r\n getView: () => mapViewRef.current,\r\n }));\r\n\r\n const mapDiv = useCallback((node) => {\r\n if (node) {\r\n mapRef.current = new WebMap();\r\n const state = splitMapState(mapState);\r\n const view = new MapView({\r\n container: node,\r\n zoom: state && state.zoom ? state.zoom : undefined,\r\n map: mapRef.current,\r\n spatialReference: new SpatialReference({ wkid: 28992 }),\r\n constraints: {\r\n snapToZoom: false,\r\n minZoom: 2,\r\n // @ts-ignore\r\n lods: lods,\r\n maxZoom: 16,\r\n rotationEnabled: false,\r\n },\r\n padding: { top: 65, bottom: 0 },\r\n });\r\n mapViewRef.current = view;\r\n view.ui.components = [];\r\n\r\n // Set initial mapCenter from the url\r\n if (state && state.x && state.y) {\r\n view.center = new Point({\r\n x: state.x,\r\n y: state.y,\r\n spatialReference: view.spatialReference,\r\n });\r\n }\r\n\r\n const zoom = new Zoom({ view: view });\r\n view.ui.add(zoom);\r\n\r\n if (!secondary) {\r\n new Search({\r\n view: view,\r\n includeDefaultSources: false,\r\n sources: [geolocationSource],\r\n container: 'searchWidget',\r\n popupEnabled: false,\r\n resultGraphicEnabled: true,\r\n locationEnabled: false,\r\n });\r\n\r\n // Mobile\r\n mobileSearchInstance.current = new Search({\r\n view: view,\r\n includeDefaultSources: false,\r\n sources: [geolocationSource],\r\n container: 'mobileSearchWidget',\r\n popupEnabled: false,\r\n resultGraphicEnabled: true,\r\n locationEnabled: false,\r\n });\r\n }\r\n\r\n const locateWidget = new Locate({\r\n view: view, // Attaches the Locate button to the view\r\n graphic: new Graphic({\r\n symbol: {\r\n // @ts-ignore - Types not correct in ArcgisJS 4\r\n type: 'simple-marker', // autocasts as new SimpleMarkerSymbol()\r\n color: '#00387d',\r\n size: 10,\r\n outline: { width: 1, color: 'white' },\r\n },\r\n }),\r\n });\r\n\r\n view.ui.add(locateWidget, 'manual');\r\n\r\n const scaleBar = new ScaleBar({\r\n unit: 'metric',\r\n view: view,\r\n });\r\n\r\n const attribution = new Attribution({\r\n view: view,\r\n // @ts-ignore\r\n visible: true,\r\n });\r\n attributionRef.current = attribution;\r\n\r\n view.ui.add(attribution);\r\n\r\n view.ui.add(scaleBar, {\r\n position: 'bottom-right',\r\n });\r\n\r\n // Set the initial extent on loaded so we know if we have to change the url\r\n view.when(() => {\r\n setLoading(false)\r\n prevExtentRef.current = view.extent;\r\n prevZoomRef.current = view.zoom;\r\n // setIsLoading(false);\r\n });\r\n }\r\n // All refs are set, dom is ready\r\n // setTimeout(()=>{\r\n setDomLoading(false);\r\n // }, 1000);\r\n // No dependencies, we only want this function triggered once\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n // Change the maxzoom based no the type of map we're looking at\r\n useEffect(() => {\r\n if (loading) return;\r\n const view = mapViewRef.current;\r\n // If we're comparing the same mapTypes, we can use the max zoomLevel of the maptype\r\n let maxZoom = 12;\r\n if (!comparing || mapType === mapTypeCompare) {\r\n maxZoom = mapType === 'satellite' ? 14 : 12;\r\n }\r\n // If our currentzoom is larger than the maxzoom, update url\r\n if (view.extent && mapViewRef.current.zoom > maxZoom) {\r\n navigateTo(\r\n {\r\n mapState: joinMapState({\r\n x: view.extent.center.x,\r\n y: view.extent.center.y,\r\n zoom: maxZoom,\r\n }),\r\n },\r\n { replace: true }\r\n );\r\n }\r\n view.constraints.maxZoom = maxZoom;\r\n }, [mapType, comparing, mapTypeCompare, navigateTo, loading]);\r\n\r\n // Change map layer based on active year, only load layer after dom is ready\r\n useEffect(() => {\r\n if (domLoading) return;\r\n // Find the MapLayer from settings\r\n const mapLayer = getMapSettings(mapType).layers.find((layer) => {\r\n return activeYear >= layer.from && activeYear <= layer.to;\r\n });\r\n\r\n if (!mapLayer) return;\r\n\r\n // @ts-ignore\r\n attributionRef.current.visible = mapLayer.attribution ? false : true;\r\n\r\n let layer = new TileLayer({\r\n url: mapLayer.url,\r\n id: mapLayer.id.toString(),\r\n resampling: true,\r\n maxScale: 187.5,\r\n });\r\n mapRef.current.add(layer);\r\n if (layerRef.current) {\r\n const prevLayer = mapRef.current.findLayerById(layerRef.current.id);\r\n mapRef.current.remove(prevLayer);\r\n }\r\n layerRef.current = layer;\r\n }, [mapType, activeYear, domLoading]);\r\n\r\n // Trigger viewchange\r\n useEffect(() => {\r\n if (loading) return;\r\n const view = mapViewRef.current;\r\n // Update the initialExtend, so that we navigate unessecarily\r\n prevExtentRef.current = mapViewRef.current.extent;\r\n prevZoomRef.current = mapViewRef.current.zoom;\r\n\r\n // Watch viewport changes to update the url. We need to do it here to\r\n // prevent stale mapType and activeYear values in createUrl.\r\n const viewWatch = watchUtils.whenFalse(view, 'stationary', () => {\r\n // @hier zit de bug op samsung a51 chrome\r\n // https://topotijdreis.nl/vergelijk/kaart/1865/kaart/1948/@178548,506942,4.4\r\n if (!view.stationary) {\r\n watchUtils.whenTrueOnce(view, 'stationary', () => {\r\n if (\r\n (view.zoom !== prevZoomRef.current ||\r\n view.extent.center.x !== prevExtentRef.current.center.x ||\r\n view.extent.center.y !== prevExtentRef.current.center.y) &&\r\n view.extent && view.extent.center\r\n ) {\r\n navigateTo(\r\n {\r\n mapState: joinMapState({\r\n x: view.extent.center.x,\r\n y: view.extent.center.y,\r\n zoom: view.zoom,\r\n }),\r\n },\r\n { replace: true }\r\n );\r\n }\r\n });\r\n }\r\n });\r\n return () => viewWatch.remove();\r\n }, [navigateTo, loading]);\r\n\r\n let portalId = 'activeYearPortal';\r\n if (secondary) portalId = portalId + 'Secondary';\r\n\r\n return (\r\n \r\n
\r\n {children}\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default forwardRef(Map);\r\n","import { useCallback } from 'react';\r\nimport { getMapSettings, MapTypes } from '../utils/mapUtils';\r\nimport useUrlParams from '../utils/useUrlParams';\r\nimport styles from './Map.module.css';\r\nimport classNames from 'classnames';\r\n\r\ntype MapSwitcherProps = {\r\n setSnack: (message: string | false) => void;\r\n activeYear: number;\r\n mapType: MapTypes;\r\n secondary?: boolean;\r\n};\r\n\r\nexport default function MapSwitcher({\r\n setSnack,\r\n mapType,\r\n secondary,\r\n}: MapSwitcherProps) {\r\n const { navigateTo, activeYear } = useUrlParams();\r\n const switchMapType = useCallback(() => {\r\n if (mapType === 'satellite') {\r\n navigateTo({ [secondary ? 'typeCompare' : 'type']: 'map' });\r\n } else {\r\n let year = activeYear;\r\n let firstSatelliteYear = getMapSettings('satellite').firstYear;\r\n let lastSatelliteYear = getMapSettings('satellite').lastYear;\r\n if (activeYear < firstSatelliteYear) {\r\n year = firstSatelliteYear;\r\n // Show notification\r\n setSnack(`We sturen je door de tijd naar\r\n ${getMapSettings('satellite').firstYear}, omdat luchtfoto's sinds dat\r\n jaar beschikbaar zijn.`);\r\n } else if (activeYear > lastSatelliteYear) year = lastSatelliteYear;\r\n navigateTo({\r\n [secondary ? 'typeCompare' : 'type']: 'satellite',\r\n [secondary ? 'yearCompare' : 'year']: year,\r\n });\r\n }\r\n }, [activeYear, mapType, navigateTo, setSnack, secondary]);\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import { useEffect, useRef } from 'react';\r\n\r\nconst useMapSync = (compare: boolean) => {\r\n const primaryMapRef = useRef();\r\n const secondaryMapRef = useRef();\r\n useEffect(() => {\r\n if (compare) {\r\n const view1 = primaryMapRef.current.getView();\r\n const view2 = secondaryMapRef.current.getView();\r\n\r\n const views = [view1, view2];\r\n let active: any;\r\n\r\n const sync = (source: any) => {\r\n if (!active || !active.viewpoint || active !== source) return;\r\n\r\n for (const view of views) {\r\n if (view !== active) view.viewpoint = active.viewpoint;\r\n }\r\n };\r\n\r\n const activate = (view: any) => {\r\n active = view;\r\n sync(active);\r\n };\r\n\r\n for (const view of views) {\r\n view.watch(['interacting', 'animation'], () => {\r\n activate(view);\r\n });\r\n\r\n view.watch('viewpoint', () => sync(view));\r\n }\r\n }\r\n }, [compare]);\r\n return [primaryMapRef, secondaryMapRef];\r\n};\r\n\r\nexport default useMapSync;\r\n","import './App.css';\r\nimport Timeline from './Timeline/Timeline';\r\nimport Topbar from './Topbar';\r\nimport NavigationMobile from './NavigationMobile';\r\nimport Div100vh from 'react-div-100vh';\r\nimport { useToggle } from 'react-use';\r\nimport InfoModal from './Modal/InfoModal';\r\nimport ShareModal from './Modal/ShareModal';\r\nimport useMapPlayer from './utils/useMapPlayer';\r\nimport Map from './Map/Map';\r\nimport { useRef, useState } from 'react';\r\nimport MapSwitcher from './Map/MapSwitcher';\r\nimport classNames from 'classnames';\r\nimport useUrlParams from './utils/useUrlParams';\r\nimport useMapSync from './utils/useMapSync';\r\n\r\ntype AppProps = {\r\n compare?: boolean;\r\n};\r\n\r\nfunction App({ compare = false }: AppProps) {\r\n const [shareModalOpen, toggleShareModal] = useToggle(false);\r\n const [infoModalOpen, toggleInfoModal] = useToggle(false);\r\n const [mobileNavigationOpen, toggleMobileNavigation] = useToggle(false);\r\n const { playing, togglePlay, secondaryPlaying, toggleSecondaryPlay } =\r\n useMapPlayer();\r\n const mobileSearchInstance = useRef();\r\n const [snack, setSnack] = useState(false);\r\n const [primaryMapRef, secondaryMapRef] = useMapSync(compare);\r\n const { activeYear, mapType, activeYearCompare, mapTypeCompare } =\r\n useUrlParams();\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n \r\n\r\n \r\n\r\n {compare && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default App;\r\n","import { useEffectOnce } from 'react-use';\r\nimport { getMapSettings, MapTypes } from './mapUtils';\r\nimport { createUrl } from './urlUtils';\r\n\r\nconst useLegacyUrlCompatibility = () => {\r\n // Support legacy sharing url's\r\n useEffectOnce(() => {\r\n const urlSearchParams = new URLSearchParams(window.location.search);\r\n const params = Object.fromEntries(urlSearchParams.entries());\r\n if (Object.keys(params).length !== 0) {\r\n const type: MapTypes =\r\n params.datatype === 'imagery' ? 'satellite' : 'map';\r\n const year = params.year\r\n ? parseInt(params.year as string)\r\n : getMapSettings(type).startYear;\r\n let mapState;\r\n\r\n if (params.x && params.y && params.l) {\r\n mapState = `@${parseInt(params.x as string)},${parseInt(\r\n params.y as string\r\n )},${parseInt(params.l as string)}`;\r\n }\r\n window.location.replace(createUrl({ type, year, mapState }));\r\n }\r\n });\r\n};\r\n\r\nexport default useLegacyUrlCompatibility;\r\n","import App from './App';\r\nimport { Route, Routes } from 'react-router-dom';\r\nimport useLegacyUrlCompatibility from './utils/useLegacyUrlCompatibility';\r\n\r\nexport default function AppBase() {\r\n useLegacyUrlCompatibility();\r\n return (\r\n \r\n }\r\n />\r\n }\r\n />\r\n } />\r\n } />\r\n } />\r\n \r\n );\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport './styles/tokens.css';\r\nimport './styles/base.css';\r\n\r\nimport AppBase from './AppBase';\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n"],"sourceRoot":""}