├── .eslintignore ├── .eslintrc ├── .gitignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── jestconfig.json ├── package-lock.json ├── package.json ├── src ├── components │ └── mapSvg │ │ ├── IranMap.tsx │ │ ├── IranMapWrapper.tsx │ │ └── iran-map.css ├── data │ └── provinces.ts ├── index.ts └── interfaces.ts ├── styleMock.tsx ├── tests └── common.test.tsx └── tsconfig.json /.eslintignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "prettier", 5 | "plugin:prettier/recommended", 6 | "eslint:recommended", 7 | "plugin:react/recommended", 8 | "plugin:@typescript-eslint/eslint-recommended", 9 | "plugin:@typescript-eslint/recommended" 10 | ], 11 | "parser": "@typescript-eslint/parser", 12 | "plugins": ["@typescript-eslint", "prettier", "react", "react-hooks"], 13 | "rules": { 14 | "react-hooks/rules-of-hooks": "error", 15 | "react-hooks/exhaustive-deps": "warn", 16 | "@typescript-eslint/no-non-null-assertion": "off", 17 | "@typescript-eslint/ban-ts-comment": "off", 18 | "@typescript-eslint/no-explicit-any": "off" 19 | }, 20 | "settings": { 21 | "react": { 22 | "version": "detect" 23 | } 24 | }, 25 | "env": { 26 | "browser": true, 27 | "node": true 28 | }, 29 | "globals": { 30 | "JSX": true 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules 2 | dist 3 | yarn-error.log 4 | npm-debug.log 5 | .parcel-cache -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "singleQuote": true, 4 | "trailingComma": "all", 5 | "tabWidth": 2, 6 | "semi": false, 7 | "printWidth": 120, 8 | "jsxSingleQuote": true, 9 | "endOfLine": "auto" 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Sima Mojtahedi 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # Iran Map 3 | 4 | ![NPM Version](https://img.shields.io/npm/v/react-iran-map)  5 | ![NPM Downloads](https://img.shields.io/npm/d18m/react-iran-map)  6 | ![GitHub Repo stars](https://img.shields.io/github/stars/simamojtahedi/react-iran-map?color=yellow)  7 | ![GitHub forks](https://img.shields.io/github/forks/simamojtahedi/react-iran-map)  8 | 9 | This is an interactive and responsive SVG map of Iran which is a powerful tool for visualizing data related to Iran's provinces. It allows users to customize the colors of each province based on data values and additionally, users can click on each province to change it's color and retrieve it's name using a simple function. 10 | 11 | This package is perfect for anyone looking to create data visualizations related to Iran or for anyone who needs an interactive map of Iran's provinces. 12 | 13 | ## Demo 14 | 15 | [**Live Demo**](https://simamojtahedi.github.io/react-iran-map/) 16 | 17 | 18 | 19 | ![react-iran-map](https://github.com/simamojtahedi/react-iran-map/assets/64223524/b8ebd675-19b4-453e-ae37-2043983476c2) 20 | 21 | 22 | 23 | ## Installation 24 | 25 | `npm i react-iran-map` 26 | 27 | ## Usage 28 | ```jsx 29 | import { IranMap } from 'react-iran-map' 30 | import mapData from '../data.tsx' 31 | 32 | function App() { 33 | const selectProvinceHandler = (province) => { 34 | console.log(province) 35 | } 36 | 37 | return ( 38 |
39 | 50 |
51 | ) 52 | } 53 | 54 | export default App 55 | ``` 56 | 57 | 58 | ## Data schema 59 | 60 | ```jsx 61 | const mapData = { 62 | ardabil: 0, 63 | isfahan: 20, 64 | alborz: 11, 65 | ilam: 18, 66 | eastAzerbaijan: 10, 67 | westAzerbaijan: 20, 68 | bushehr: 15, 69 | tehran: 3, 70 | chaharmahalandBakhtiari: 25, 71 | southKhorasan: 29, 72 | razaviKhorasan: 11, 73 | northKhorasan: 19, 74 | khuzestan: 12, 75 | zanjan: 18, 76 | semnan: 9, 77 | sistanAndBaluchestan: 3, 78 | fars: 7, 79 | qazvin: 35, 80 | qom: 30, 81 | kurdistan: 24, 82 | kerman: 23, 83 | kohgiluyehAndBoyerAhmad: 2, 84 | kermanshah: 7, 85 | golestan: 18, 86 | gilan: 14, 87 | lorestan: 7, 88 | mazandaran: 28, 89 | markazi: 25, 90 | hormozgan: 14, 91 | hamadan: 19, 92 | yazd: 32, 93 | } 94 | ``` 95 | ## Available attributes 96 | 97 | 98 | | Name | Type | Required | Description | 99 | | :------------------------ | :--------- | :------- | :------------------------------------------------------------------------------------------------------- | 100 | | `data` | `object` | True | An object that has 'Data schema' items as provinces | 101 | | `colorRange` | `string` | True | It defines the range of color based on it's value and it should be rgb color like this : `"30, 70, 181"` | 102 | | `width` | `number` | False | Width of the map | 103 | | `textColor` | `string` | False | Color of map texts | 104 | | `defaultSelectedProvince` | `string` | False | You can set one of the provinces from 'Data schema' as default selected province | 105 | | `deactiveProvinceColor` | `string` | False | It set color of the provinces with `0` value | 106 | | `selectedProvinceColor` | `string` | False | Color of the clicked province | 107 | | `tooltipTitle` | `string` | False | You can add a name for the value in tooltip | 108 | | `selectProvinceHandler` | `function` | False | You can define a function like example above to get selected province name | 109 | ## Authors 110 | 111 | - [@simamojtahedi](https://github.com/simamojtahedi) 112 | -------------------------------------------------------------------------------- /jestconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "moduleNameMapper": { 3 | "\\.(css)$": "/styleMock.tsx" 4 | }, 5 | "transform": { 6 | "^.+\\.(t|j)sx?$": "ts-jest" 7 | }, 8 | "testRegex": "(/tests/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$", 9 | "moduleFileExtensions": ["ts", "tsx", "js", "jsx", "json", "node"], 10 | "testEnvironment": "jsdom" 11 | } 12 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-iran-map", 3 | "version": "0.1.3", 4 | "description": "An interactive and responsive SVG map of Iran", 5 | "main": "./dist/cjs/index.js", 6 | "module": "./dist/esm/index.js", 7 | "types": "./dist/esm/index.d.ts", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/simamojtahedi/react-iran-map.git" 11 | }, 12 | "scripts": { 13 | "build": "npm run build:esm && npm run build:cjs", 14 | "build:esm": "tsc", 15 | "build:cjs": "tsc --module commonjs --outDir dist/cjs", 16 | "lint": "eslint \"{**/*,*}.{js,ts,jsx,tsx}\"", 17 | "prettier": "prettier --write \"{src,tests,example/src}/**/*.{js,ts,jsx,tsx}\"", 18 | "test": "jest --config jestconfig.json", 19 | "prepare": "npm run build", 20 | "prepublishOnly": "npm test && npm run prettier && npm run lint" 21 | }, 22 | "files": [ 23 | "dist", 24 | "LICENSE", 25 | "README.md" 26 | ], 27 | "keywords": [ 28 | "map", 29 | "iran", 30 | "iran-map", 31 | "iran-svg-map", 32 | "react-iran-map" 33 | ], 34 | "author": "Sima Mojtahedi", 35 | "license": "MIT", 36 | "peerDependencies": { 37 | "react": ">=16" 38 | }, 39 | "dependencies": { 40 | "@testing-library/react": "^14.1.2", 41 | "@types/jest": "^29.5.11", 42 | "@typescript-eslint/eslint-plugin": "^6.13.2", 43 | "@typescript-eslint/parser": "^6.13.2", 44 | "eslint": "^8.55.0", 45 | "eslint-config-prettier": "^9.1.0", 46 | "eslint-plugin-prettier": "^5.0.1", 47 | "eslint-plugin-react": "^7.33.2", 48 | "eslint-plugin-react-hooks": "^4.6.0", 49 | "jest": "^29.7.0", 50 | "jest-canvas-mock": "^2.5.2", 51 | "jest-environment-jsdom": "^29.7.0", 52 | "prettier": "^3.1.0", 53 | "react-tooltip": "^5.25.0", 54 | "ts-jest": "^29.1.1", 55 | "typescript": "^5.3.3" 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /src/components/mapSvg/IranMap.tsx: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useRef, useState } from 'react' 2 | import IranMapWrapper from './IranMapWrapper' 3 | import { provinces } from '../../data/provinces' 4 | import { IranMapWrapperProps, mapDataType, provinceType, selectedProvinceType } from '../../interfaces' 5 | import './iran-map.css' 6 | 7 | const IranMap: React.FC = ({ 8 | data, 9 | width, 10 | colorRange, 11 | defaultSelectedProvince, 12 | textColor = '#000', 13 | deactiveProvinceColor = '#e6e6e6', 14 | selectedProvinceColor, 15 | tooltipTitle = '', 16 | selectProvinceHandler, 17 | }) => { 18 | const mapRef = useRef(null) 19 | const [provinceName, setProvinceName] = useState(null) 20 | const [selectedProvince, setSelectedProvince] = useState({ 21 | name: defaultSelectedProvince ? defaultSelectedProvince : '', 22 | faName: defaultSelectedProvince 23 | ? provinces.find((province: provinceType) => province.provinceName === defaultSelectedProvince)?.provinceFaName 24 | : '', 25 | }) 26 | 27 | const pathMouseOverHandler = (event: any) => { 28 | const path = event.target 29 | setProvinceName(path.dataset.name) 30 | } 31 | 32 | const pathClickedHandle = (pathName: string) => { 33 | setSelectedProvince({ 34 | faName: pathName, 35 | name: provinces.find((province: provinceType) => province.provinceFaName === pathName)?.provinceName, 36 | }) 37 | 38 | selectProvinceHandler && 39 | selectProvinceHandler({ 40 | faName: pathName, 41 | name: provinces.find((province: provinceType) => province.provinceFaName === pathName)?.provinceName, 42 | }) 43 | } 44 | 45 | const setPathBackgrounds = (svg: Element, mapData: mapDataType) => { 46 | const polygons = svg.querySelectorAll('polygon') 47 | const paths = svg.querySelectorAll('path') 48 | 49 | const values = Object.values(mapData) 50 | //@ts-ignore 51 | const min = Math.min(...values) 52 | const max = Math.max(...values) 53 | 54 | const setColorHandler = (element: SVGPathElement) => { 55 | const title = provinces.find((item: provinceType) => item.provinceFaName === element.getAttribute('data-name')) 56 | ?.provinceName 57 | 58 | const selectedItem = provinces.find( 59 | (province: provinceType) => province.provinceFaName === selectedProvince.faName, 60 | )?.provinceFaName 61 | 62 | if (title) { 63 | const count = mapData[title.trim()] 64 | if (count === 0) { 65 | element.style.fill = deactiveProvinceColor 66 | } else { 67 | if (min !== max) { 68 | const alpha = Math.max(0.1, Math.min(1, (count - min) / (max - min))) 69 | const usageColor = `rgba(${colorRange}, ${alpha})` 70 | element.style.fill = usageColor 71 | } else { 72 | const usageColor = `rgba(${colorRange}, ${min > 0 ? 1 : 0.1})` 73 | element.style.fill = usageColor 74 | } 75 | } 76 | } 77 | if (element.getAttribute('data-name') === selectedItem && selectedProvinceColor) { 78 | element.style.fill = selectedProvinceColor 79 | } 80 | } 81 | 82 | paths.forEach((path: SVGPathElement) => { 83 | setColorHandler(path) 84 | }) 85 | 86 | polygons.forEach((polygon: SVGPathElement) => { 87 | setColorHandler(polygon) 88 | }) 89 | } 90 | 91 | useEffect(() => { 92 | if (mapRef.current) { 93 | setPathBackgrounds(mapRef.current, data) 94 | } 95 | }, [mapRef, selectedProvince]) 96 | 97 | return ( 98 |
99 | 109 |
110 | ) 111 | } 112 | 113 | export default IranMap 114 | -------------------------------------------------------------------------------- /src/components/mapSvg/IranMapWrapper.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { Tooltip } from 'react-tooltip' 3 | import { provinces } from '../../data/provinces' 4 | import { MapProps } from '../../interfaces' 5 | 6 | const IranMapWrapper: React.FC = ({ 7 | textColor, 8 | mapRef, 9 | provinceName, 10 | pathClickedHandle, 11 | pathMouseOverHandler, 12 | data, 13 | width, 14 | tooltipTitle, 15 | }) => { 16 | const badge = ` 17 |
18 |

${provinceName}

19 |

20 | ${ 21 | provinceName && 22 | data[ 23 | //@ts-ignore 24 | provinces.find((item: any) => item.provinceFaName === provinceName)?.provinceName 25 | ] 26 | } 27 | ${tooltipTitle && `${tooltipTitle}`} 28 |

29 |
30 | ` 31 | 32 | return ( 33 | <> 34 | 47 | pathMouseOverHandler(e)} 51 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 52 | d='M649.84,397.97h15.03l6.59-3.69l7.38-7.91l5.27-3.96l7.91-3.69l8.44-1.85h6.86h8.18l7.91,5.54l3.96,2.9 53 | l1.05,2.11l-3.43,3.43l-4.48,7.12l5.01,9.49l2.9,5.27c0,0,2.37,1.58,7.65,4.75s8.7,3.96,10.55,4.75c1.85,0.79,7.12,0,7.12,0 54 | s4.48-5.01,4.75-2.37s3.43,7.91,5.8,9.49c2.37,1.58,9.23,8.44,9.23,8.44l2.11-4.75l13.19-0.26l28.48-1.05l6.07,6.07l20.57,2.64 55 | l5.8,8.97l3.69-2.11l3.96-4.75l11.87-1.05v-5.01l5.27-4.48l7.65-1.85l6.86-1.85l-8.44-13.45l8.44-4.22l3.69-6.33l1.85-3.96 56 | l2.64-5.01l2.9-12.92l3.16-3.69l-3.16-9.49l5.01-2.64l4.75-16.88l-1.85-9.49l1.85-10.81l-5.8-3.43l3.43-10.55l-2.9-15.56l0.79-7.38 57 | l0.53-8.18h-45.1l-2.9-5.27l-12.4-16.62l-2.9-3.43h-9.49l-5.27-3.96l-7.12-3.69l-8.97-7.65l-3.16-12.92h-3.69 58 | c0,0-4.75-3.43-5.8-3.69c-1.05-0.26-8.44-4.22-8.44-4.22l-6.86-3.16h-3.96L775.9,221l-4.75-1.32l-4.48-1.85c0,0-2.11,1.32-2.9,1.58 59 | c-0.79,0.26-5.8,0.26-5.8,0.26l-2.37,29.54l-4.75,4.22l-2.11,1.58l4.48,4.75c0,0,2.37,3.69,2.11,4.75 60 | c-0.26,1.05-3.43,4.22-5.01,4.75c-1.58,0.53-4.48,0.26-5.27,2.37s-1.05,3.96-1.05,6.59s-0.26,8.18-0.26,8.18s0.26,0.53-1.32,1.32 61 | c-1.58,0.79-5.8,0.79-6.59,0.79s-10.55-4.75-10.55-4.75l-12.13-6.86l-9.76-0.53l-8.7-2.9l-5.01-2.37l-12.4,5.27 62 | c0,0-3.13,1.45-5.53,2.68c-1.29,0.66-2.37,1.26-2.65,1.54c-0.79,0.79-3.16,3.69-3.16,3.69l10.55,0.53c0,0,1.58,5.8,1.85,6.59 63 | c0.26,0.79-0.26,3.69-0.79,4.75c-0.53,1.05-1.85,3.96-2.9,4.48c-1.05,0.53-2.64,1.32-2.11,2.64c0.53,1.32,5.01,8.7,5.01,8.7 64 | s-2.9,5.54-2.9,6.59c0,1.05,0.26,8.18,0.26,8.97c0,0.79,1.32,6.07,1.32,6.07l13.71,13.71c0,0,0.53,6.59,0.53,7.65 65 | c0,1.05,0,4.22,0,6.33c0,2.11-0.53,5.8-1.85,6.86c-1.32,1.05-3.96,0.79-4.75,1.32c-0.79,0.53-4.48,2.11-5.8,2.9 66 | s-4.48,3.43-4.48,3.43s-3.16,1.85-5.8,2.9c-2.64,1.05-6.33,5.01-6.33,5.01L649.84,397.97z' 67 | /> 68 | pathMouseOverHandler(e)} 72 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 73 | d='M649.84,189.88l2.9,6.07v7.38v6.07l-4.75,5.54v6.86l-7.38,6.07c0,0-2.9,5.54-2.9,6.86c0,1.32,0,7.38,0,7.38 74 | h-4.48v6.59c0,0,5.8,0.53,6.07,2.64c0.26,2.11,0.26,6.59-1.05,9.23c-1.32,2.64-2.37,5.54-2.37,6.86c0,1.32,2.11,5.8,2.9,5.8 75 | s11.08-6.07,11.08-6.07l2.9,8.7l4.48,4.22l8.7,4.22l3.16-3.69l20.57-9.49l13.71,5.27l9.76,0.53l22.68,11.6l6.59-0.79l1.32-1.32 76 | l0.32-10.02l1-4.75l5.27-2.37l5.01-4.75l-2.11-4.75l-4.48-4.75l6.86-5.8l2.37-29.54l-5.54,2.37l-0.53-8.18l-15.82-1.85l-13.98-7.65 77 | l-8.97-1.32l-6.86-1.32l-3.96-13.45l-1.85-2.64h-8.7l-7.65,3.16l-12.92-3.16l-6.86,1.32c0,0-5.01-2.9-6.33-1.32 78 | c-1.32,1.58-8.18,2.11-8.18,2.11V189.88z' 79 | /> 80 | pathMouseOverHandler(e)} 84 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 85 | d='M523.77,275.86l1.85,6.07l8.18,2.64l2.11,3.96v3.43l4.1,1.85h11.99l13.71-5.27l2.11-1.32l5.54-1.05l6.07-8.7 86 | l9.49-3.16l12.13,2.37l8.44-3.43l6.07-7.12v-3.69v-5.54l6.86-5.54v-5.54l7.12-3.43l3.69-0.26h4.48v-7.38l2.9-6.86l7.38-6.07v-6.86 87 | l4.75-5.54v-13.45h-5.8l-16.35-1.32l-8.7-2.64c0,0-9.23,1.05-11.87,2.37s-12.13,4.75-12.13,4.75l-11.34,5.54l-15.3,12.13l-0.26,5.8 88 | v5.01c0,0-2.37,5.27-3.43,6.07c-1.05,0.79-8.44,3.48-10.29,3.19s-13.98,2.61-13.98,2.61l-5.54,1.05l-9.49,0.26 89 | c0,0-1.05,6.59-0.79,7.38c0.26,0.79,3.16,13.71,3.16,13.71l1.58,6.07l-0.26,2.64l-5.01,1.85L523.77,275.86z' 90 | /> 91 | pathMouseOverHandler(e)} 95 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 96 | d='M347.59,285.62l-4.22-0.53l-7.91-1.85l-7.12-1.32l-6.07,5.27l-13.98,0.26l-11.6-2.11l-10.02-6.86l-2.11-4.48 97 | l-3.96-9.23l-12.4-14.51c0,0-4.48-11.6-4.75-12.66s-8.97-16.88-8.97-16.88l-3.96-13.71l1.85-4.22l3.16-6.86l0.53-10.55l-1.58-10.29 98 | l2.37-2.9h5.01l4.48,2.11l2.64,27.96l3.96,15.82c0,0,6.59,7.12,9.23,8.97c2.64,1.85,8.18,5.54,8.18,5.54h16.88l13.71,1.32 99 | l11.08,5.01l6.07,1.85l2.11,11.34l7.38,8.18l6.07,3.43l-3.33,7.1l-5.9,9.38L347.59,285.62z' 100 | /> 101 | pathMouseOverHandler(e)} 105 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 106 | d='M352.34,264.78l-1.85,5.8l-6.07,9.23l11.34,12.13l6.59,6.07l3.96,6.07l10.55,4.22l6.33,3.43l7.38,2.64h9.49 107 | l14.77,8.44l1.85,2.64c0,0,4.22,7.38,5.01,8.18c0.79,0.79,8.97,4.75,8.97,4.75h7.65l4.75-3.16l9.49-3.96l3.96-1.58 108 | c0,0,8.7,1.32,11.6,2.9c2.9,1.58,9.49,3.69,9.49,3.69l7.12-4.75l14.51-9.76l9.23-1.32l8.97-4.22l7.38-7.91l3.16-7.91l5.8-6.59 109 | l2.11-1.85v-3.43l-2.11-3.96l-8.18-2.64l-1.85-6.07l-9.76-0.53l-2.9-5.01l-10.29-0.53l-17.67,5.27l-24.53,5.54l-13.45,2.11 110 | l-9.23,4.75c0,0-7.12,1.58-8.18,1.05c-1.05-0.53-13.45-2.37-13.45-2.37l-9.76-2.37l-24.79-6.33l-21.36-9.23l-4.75-4.48' 111 | /> 112 | pathMouseOverHandler(e)} 116 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 117 | d='M250.54,173.79l-7.38-10.29l-3.43-1.58h-2.37l-2.37-6.33l-9.76-1.32l-2.9-3.69v-3.43l5.01-2.64l6.33-2.64 118 | l2.77-3.43v-3.69l-5.67-3.96l-3.96-5.27l2.9-4.22l6.73-3.16l1.45-4.22l-19.52-19.52l-12.92,5.01l-9.49,5.8l-7.91,5.01l7.91,8.7 119 | l2.11,7.12l-0.79,11.6l1.05,6.33l1.05,3.43l1.85,1.85l-3.96,2.64l-2.11,3.43l1.58,5.27l-13.71,16.62l7.12,5.54l6.86,1.85h8.97 120 | l4.75-1.05l0.79,5.54c0,0,2.64,7.91,3.16,8.7c0.53,0.79,5.8,3.96,5.8,3.96l-1.32,4.75l10.29,2.9c0,0-1.85,7.38-2.64,8.18 121 | c-0.79,0.79-4.48,1.58-4.48,4.75s6.59,16.62,6.59,16.62l6.59,4.48l6.86,2.64l3.69,6.33h6.86h3.96l11.34-2.11l-4.75-12.66 122 | l-8.97-16.88l-3.96-13.71l5.01-11.08l0.53-10.55l-1.58-10.29L250.54,173.79z' 123 | /> 124 | pathMouseOverHandler(e)} 128 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 129 | d='M188.03,110.23l-7.12,7.65l-5.8,2.9l-4.75,5.54l-3.43,1.58l-5.01,2.11l-8.97,8.44l-5.27,4.75l-1.85,2.64 130 | l-8.44-1.85l-5.27,0.53l-4.22,1.32l-21.1-1.85l-10.29-0.79l-7.65-3.96l-6.59,2.37l-1.85,4.22v11.6l1.85,7.65l-5.54,4.48 131 | c0,0-4.22,1.58-4.22,3.82s0,12.26,0,12.26s7.12,16.09,8.7,20.04c1.58,3.96,8.18,25.58,8.18,25.58l15.3,17.67l10.29,2.11l4.75,4.22 132 | l-1.32,7.65l5.54,1.58l10.55-4.48c0,0,5.54-0.53,8.97-0.79c3.43-0.26,8.18-2.37,8.18-2.37s6.07-0.79,6.86,0.53 133 | c0.79,1.32,3.16,4.48,3.16,5.8c0,1.32,0.26,3.96,0.26,5.01c0,1.05,1.05,5.54,1.05,5.54h3.16c0,0,6.07-2.37,7.91-3.16 134 | c1.85-0.79,8.97,0.79,8.97,0.79l7.12-7.91l8.18-3.69l11.34-7.38h6.07h6.07l15.76-8.18l-8.64-5.27l-6.59-16.62l0.29-1.41l1.32-1.61 135 | l2.87-1.73l2.64-8.18l-10.29-2.9l1.32-4.75l-5.8-3.96l-3.16-8.7l-0.79-5.54l-4.75,1.05H197l-6.86-1.85l-7.12-5.54l13.71-16.62 136 | l-1.58-5.27l2.11-3.43l3.96-2.64l-1.85-1.85l-2.11-9.76l0.79-11.6l-2.11-7.12l-7.44-9' 137 | /> 138 | pathMouseOverHandler(e)} 142 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 143 | d='M81.48,325.57h12.66l2.37-10.29l2.77-1.98v-5.54h16.62v-9.89l7.91-6.33l6.73,5.14l6.73,0.79l15.43-2.37 144 | l7.12,2.77l7.12,3.96l10.68,5.14l11.08-8.7l-1.98-6.73l-3.69-13.05l-3-7.69l-5.96-0.22l-7.91,3.16h-3.16l-1.05-5.54l-0.26-5.01 145 | l-3.16-5.8l-1.65-0.67l-5.21,0.14l-5.46,1.89l-11.68,1.27l-10.55,4.48l-5.54-1.58l1.32-7.65l-4.75-4.22l-10.29-2.11l-15.3-17.67 146 | l-8.18-25.58l-8.7-20.04V173.4l0.63-1.5l2.49-1.82l6.64-4.98l-1.85-7.65v-11.6l1.85-4.22l6.59-2.37l-8.44-13.71l-5.54-1.05 147 | l-2.37-5.54l-11.34-9l-2.11-9.99l-7.65-1.05l-6.86-6.59l-8.44,4.75l-1.32,10.55l-3.43,5.8l-7.38,1.05l-7.65-1.05l-3.16,2.64 148 | c0,0,1.58,5.01,1.85,5.8c0.26,0.79-0.53,4.75,0.26,5.8c0.79,1.05,5.54,3.16,5.54,3.16l-0.53,8.44c0,0,0,5.54,0.79,6.33 149 | c0.79,0.79,5.54,5.01,5.54,5.01s-1.05,3.69-1.05,5.01c0,1.32,1.05,10.02,1.05,11.08s-0.26,6.86-0.26,7.91s2.64,5.54,3.43,5.54 150 | c0.79,0,5.54-1.05,5.01,1.32c-0.53,2.37-3.16,8.93-4.48,10.4c-1.32,1.47-4.75,9.91-4.75,9.91s2.37,9.23,3.43,10.02 151 | c1.05,0.79,6.33,4.48,6.33,4.48s4.75,0.26,5.01,1.85c0.26,1.58,0,1.85,0.53,5.54c0.53,3.69,0.79,6.07,1.58,8.7 152 | c0.79,2.64,10.29,11.87,10.29,11.87s-2.11,8.97-2.11,10.02s5.8,8.44,6.59,9.23c0.79,0.79,1.85,11.87,1.85,11.87l6.33,8.97 153 | l4.22,14.77l6.33,0.26l3.69,15.03L81.48,325.57z' 154 | /> 155 | pathMouseOverHandler(e)} 159 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 160 | d='M188.69,298.27l5.14-3.16l6.59,3.16l5.01,2.11h9.23c0,0,2.37,5.01,2.37,6.33c0,1.32-0.26,3.69,0,5.01 161 | c0.26,1.32-3.16,6.86-3.16,6.86s-1.32,3.96-1.32,5.01c0,1.05,4.51,3.16,4.5,3.96c-0.01,0.79,3.41,5.27,3.94,6.33s5.8,2.9,6.86,4.48 162 | s13.98,5.54,13.98,5.54l8.7,3.16h2.9l1.58-1.32c0,0,1.85-1.32,1.85-2.9c0-1.58,0-5.8,0-5.8v-5.27l8.97-7.38l6.59,5.01l5.27-2.64 163 | l2.11-3.16l3.69-2.51h2.9c0,0,4.22-4.88,4.22-7.52c0-2.64,0-6.59,0-6.59v-2.64l-3.16-3.69l-5.01-5.54l-9.76-3.16l-3.43-4.75 164 | l1.58-9.23l2.9-1.85c0,0,2.11,0.79,4.22,0s8.7,2.37,8.7,2.37l-6.07-13.71l-12.4-14.51l-22.15,2.11l-3.69-6.33l-4.81-1.85 165 | l-15.76,8.18h-12.13l-11.34,7.38l-8.18,3.69l-7.12,7.91l-2.36,1.07L188.69,298.27z' 166 | /> 167 | pathMouseOverHandler(e)} 171 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 172 | points='95.92,327.35 99.09,330.12 100.08,334.67 106.6,335.66 113.53,333.88 121.84,333.29 132.32,335.66 173 | 131.13,338.36 120.85,341 116.89,341 115.31,348.91 114.12,355.04 116.49,359.59 120.85,365.13 121.64,369.48 130.34,369.48 174 | 133.9,372.05 137.46,375.81 139.64,377.4 140.43,384.12 142.41,387.48 144.98,389.26 152.69,392.82 152.69,396.19 172.87,397.18 175 | 169.7,392.82 172.87,386.49 180.66,384.32 184.74,383.33 184.74,377.59 207.48,378.19 209.07,384.71 210.45,386.69 213.02,382.14 176 | 226.67,382.14 226.67,370.87 213.81,355.04 209.26,347.07 223.11,345.35 227.86,338.36 221,333.88 217.06,327.55 212.56,323.59 177 | 213.88,318.58 217.04,311.73 217.04,306.71 214.67,300.38 205.44,300.38 193.84,295.11 188.69,298.27 177.62,306.98 152.69,295.11 178 | 137.26,297.48 130.54,296.69 123.81,291.55 115.9,297.88 115.9,307.77 99.29,307.77 99.29,313.31 96.52,315.29 94.14,325.57 ' 179 | /> 180 | pathMouseOverHandler(e)} 184 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 185 | d='M99.09,465.81l4.15-2.57l6.92-6.53l2.37-4.95l-3.96-7.32l10.29-1.38l4.15-5.74l2.57,3.76l14.04,3.76l8.7,9.69 186 | l6.53,3.96l11.67-1.98c0,0,2.57-3.16,3.16-3.16c0.59,0,6.92,2.57,6.92,2.57s4.55,0.4,5.14,0.2c0.59-0.2,3.36-10.68,3.36-10.68 187 | l7.91,0.2l-1.19-5.34l4.15-5.74l3.56-7.52l2.57-4.55l10.09,2.77l9.49-7.52v-5.34v-3.16l-9.49-3.76l-2.97-2.77l-0.59-7.32l1.78-8.7 188 | l-3.94-8.53l-21.77-0.57v5.74l-11.87,3.16l-3.16,6.33l3.16,4.35l-20.18-0.99v-3.36l-10.29-5.34l-1.98-3.36l-0.79-6.73l-9.3-7.91 189 | h-8.7l0.99,4.75l-1.38,5.14l-9.69-1.98c0,0-3.96,2.18-3.96,3.36c0,1.19-1.38,4.15,0.2,5.74c1.58,1.58,2.37,2.77,1.58,3.16 190 | s-5.34,2.18-5.34,2.18l-3.1,2.77l-1.85,3.36c0,0-2.37,3.16-2.37,3.76s1.58,4.55,1.58,5.34c0,0.79-3.36,2.37-4.15,2.37 191 | c-0.79,0-1.98,0.2-2.57,0.79s-1.78,3.96-1.78,3.96s1.19,3.36-0.79,3.46s-2.77-1.48-2.77,0s-0.4,5.84,0,6.63 192 | c0.4,0.79,6.53,2.77,5.93,4.35s-2.18,5.34-2.37,6.73c-0.2,1.38-2.33,7.32-3.74,8.51c-1.41,1.19-2.59,4.55-2.59,4.55l5.14,4.35 193 | L99.09,465.81z' 194 | /> 195 | pathMouseOverHandler(e)} 199 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 200 | d='M204.32,571.64l2.18-6.13l6.73-4.95l3.56-15.43l1.58-14.04l6.33-4.95l-1.98-8.31l-12.26-8.7l-6.13-1.98 201 | l-7.91-8.31l-10.09-5.54l-10.48-5.74l-6.73-4.55l-4.35-4.95l-3.76-5.74l1.98-4.35l4.55,2.18l1.38-4.35h5.14l12.66-3.16l8.51-5.34 202 | l0.4-3.76v-5.14l-2.57-2.77l-7.91-0.2l-3.36,10.68l-5.14-0.2l-6.92-2.57l-3.16,3.16l-11.67,1.98l-6.53-3.96l-8.7-9.69l-14.04-3.76 203 | l-2.57-3.76l-4.15,5.74l-10.29,1.38l3.96,7.32l-2.37,4.95l-6.92,6.53l-4.15,2.57l2.57,6.92l6.92-0.79c0,0,1.58,0.59,1.58,2.18 204 | s-0.4,3.96-0.4,3.96l4.95,2.57c0,0,2.18,1.78,3.36,4.55c1.19,2.77,6.92,8.51,7.12,9.49c0.2,0.99-1.58,3.16-2.97,4.55 205 | c-1.38,1.38-6.92-0.79-4.35,2.57c2.57,3.36,2.37,1.38,2.57,3.36c0.2,1.98,0.79,5.34,0.79,5.34l15.03,2.18l14.04,9.89 206 | c0,0,10.29,8.31,11.57,9.3c1.29,0.99,7.22,6.33,7.62,7.12s6.33,3.76,6.92,3.76c0.59,0,6.13,0,6.13,0s6.73,4.15,7.71,6.73 207 | c0.99,2.57,1.38,3.96,3.16,7.32c1.78,3.36,2.18,3.56,3.96,7.71C199.18,568.67,204.32,571.64,204.32,571.64z' 208 | /> 209 | pathMouseOverHandler(e)} 213 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 214 | d='M256.87,342.85l4.02-3.43l9.49,7.65l4.75,6.59l3.16,2.18h9.69l3.56,1.78c0,0,0.99,1.19,0,3.16 215 | s-1.78,2.77-1.78,4.95c0,2.18,4.15,8.11,4.15,8.9s0.59,3.56,0,5.34c-0.59,1.78-7.32,9.69-7.32,9.69s-4.55-2.37-5.74,0.79 216 | c-1.19,3.16-3.76,7.32-3.76,9.49c0,2.18,0.4,5.93-1.58,8.7s-5.54,3.76-7.32,7.52c-1.78,3.76,2.97,9.1,2.97,9.1l4.35,10.68v5.54 217 | c0,0-3.36,5.14-5.93,5.34c-2.57,0.2-11.47-2.77-11.47-2.77l-5.14-5.54c0,0-4.55,0-5.74,0.99s-4.95,5.54-4.95,5.54l-6.65-1.98 218 | l-2.64-1.78l-9.49-7.52l-2.97-2.97l-7.12-2.97l-1.19-2.57l9.49-7.52v-8.51l-9.49-3.76l-2.97-2.77l-0.59-7.32l1.78-8.7l2.57-4.55 219 | h13.65v-11.27l-12.23-15.06l-5.17-8.75l13.85-1.71l4.75-6.99l13.98,5.54l8.7,3.16l4.48-1.32L256.87,342.85z' 220 | /> 221 | pathMouseOverHandler(e)} 225 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 226 | points='291.55,360.78 296.3,359.2 302.23,359.2 303.62,352.87 310.74,352.87 318.65,351.88 324.78,353.07 227 | 331.7,352.87 336.65,353.66 331.9,348.52 332.3,344.36 339.22,332.1 345.15,326.96 352.87,319.64 356.82,315.29 346.93,309.95 228 | 346.14,305.4 350.3,305.4 366.32,304.08 362.36,298.01 351.38,286.8 347.59,285.62 328.34,281.92 322.27,287.2 307.77,287.46 229 | 296.69,285.35 286.67,278.49 282.01,276.64 278.89,276 276.41,276.45 273.75,276.12 270.85,277.97 269.26,287.2 272.69,291.95 230 | 282.45,295.11 290.63,304.34 290.45,314.62 286.41,321.09 283.51,321.09 279.81,323.59 277.7,326.76 272.43,329.4 265.84,324.38 231 | 256.87,331.77 256.87,342.85 260.89,339.42 270.38,347.07 275.13,353.66 278.3,355.84 287.99,355.84 291.55,357.62 ' 232 | /> 233 | pathMouseOverHandler(e)} 237 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 238 | points='336.65,353.66 340.87,352.34 343.51,345.88 344.43,343.37 366.32,344.43 376.87,342.45 379.64,335.46 239 | 384.91,330.19 391.9,330.19 394.8,330.19 399.02,324.91 400.08,316.74 400.08,314.49 390.85,314.49 381.88,311.07 376.74,307.9 240 | 366.32,304.08 346.14,305.4 346.93,309.95 356.82,315.29 339.22,332.1 332.3,344.36 331.9,348.52 ' 241 | /> 242 | pathMouseOverHandler(e)} 246 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 247 | points='222.71,517.84 225.48,512.3 227.86,509.53 252.58,509.53 259.31,511.51 270.38,513.68 279.48,513.68 248 | 286.01,516.65 291.55,521.99 294.19,523.97 305.4,518.82 305.4,510.52 305.4,505.57 308.36,503.59 315.88,503.59 318.45,502.21 249 | 317.26,496.67 313.9,493.11 318.45,490.14 321.81,484.8 321.81,483.22 309.35,483.22 310.54,475.51 303.62,470.36 300.25,462.65 250 | 287.79,462.65 283.44,467 278.3,464.63 276.91,460.67 266.23,460.67 264.05,458.69 268.21,451.57 268.6,448.01 268.01,446.83 251 | 258.12,444.05 252.98,438.52 247.24,439.51 242.3,445.04 235.64,443.07 220.54,430.8 213.42,427.84 212.23,425.26 202.14,422.49 252 | 196.01,434.56 191.86,440.3 193.04,445.64 195.62,448.41 195.22,457.31 186.71,462.65 174.05,465.81 168.91,465.81 167.53,470.16 253 | 162.98,467.99 161,472.34 169.11,483.02 196.41,498.85 204.32,507.15 210.45,509.13 ' 254 | /> 255 | pathMouseOverHandler(e)} 259 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 260 | d='M204.32,571.64l7.45,10.68l-5.54,13.98l-3.16,8.44c0,0,0.79,11.6,0,12.4c-0.79,0.79,0,13.71,0,13.71h16.88 261 | v32.97l6.07,1.32l2.37,3.43l1.58,3.69l7.91,3.43c0,0,2.11,3.96,2.11,4.75s-1.32,3.69,0,5.01c1.32,1.32,5.54,7.65,5.54,7.65h6.07 262 | l2.37-2.11l15.03-2.64V677l-4.75-3.69l1.05-4.48l3.69-2.11h3.43v-3.96l5.27-1.85c0,0,6.59,0.53,6.86,1.32 263 | c0.26,0.79,1.32,6.59,1.32,6.59h-8.97c0,0-3.16,6.33-2.37,6.86c0.79,0.53,5.8,1.05,5.8,1.05l4.22,3.96l11.34,1.05l3.96,9.23 264 | l19.25-13.19h9.76l2.9,1.58l1.85-3.16l3.96,2.37l7.91,4.22l2.9-1.32v-11.6l-4.75-6.86l-1.32-2.11l3.96-4.22l-0.53-3.96l-5.27-7.12 265 | l-7.38-1.32l-0.53-8.18l-5.8,1.05l-1.85,2.11l-5.8-5.27l-1.05-3.69l3.76-8.18l-4.55-6.86l2.9-2.9l8.44,1.58l4.22-6.07l2.64-8.44 266 | l3.43-6.07l2.64-3.96l-5.54-9.76l-0.26-4.48l-13.91-11.08l-4.55-8.7v-5.01l-8.44-8.44l-14.77-13.19l0.13-4.81l-8.18-7.32l-6.53-2.97 267 | h-9.1l-17.8-4.15h-24.73l-5.14,8.31l1.98,8.31l-6.33,4.95l-1.58,14.04l-3.56,15.43l-6.73,4.95L204.32,571.64z' 268 | /> 269 | pathMouseOverHandler(e)} 273 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 274 | d='M348.38,681.48v11.6l4.75,3.16l3.16,1.32l3.16-3.16l12.4-1.32v-6.07c0,0,0.26-5.54,0-5.54 275 | s11.34-9.23,11.34-9.23s2.11-2.64,2.11-4.22s-3.43-10.81-3.43-10.81l-1.32-6.86l8.7,5.27c0,0,3.96,4.75,5.27,4.75 276 | c1.32,0,7.38,0.53,8.18,0.53c0.79,0,0.53,2.9,3.16,1.85s6.33-15.03,6.33-15.03l-23.47-19.52l-1.58-12.13c0,0-6.33,0.53-6.86,0 277 | c-0.53-0.53-5.27,1.58-5.27,1.58l-6.07-4.22c0,0,0-5.54-1.05-5.54c-1.05,0-5.54,1.58-5.54,1.58l-6.07-5.54c0,0-1.32-2.9-2.9-2.64 278 | c-1.58,0.26-5.01,1.85-8.7,2.64c-3.69,0.79-8.52-5.73-8.52-5.73l-3.34,9.69l-4.22,6.07l-8.44-1.58l-2.9,2.9l4.55,6.86l-3.76,8.18 279 | l1.05,3.69l5.8,5.27l1.85-2.11l5.8-1.05l0.53,8.18l7.38,1.32l5.27,7.12l0.53,3.96l-3.96,4.22l6.07,8.97V681.48z' 280 | /> 281 | pathMouseOverHandler(e)} 285 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 286 | d='M387.15,616.08V605l-2.9-21.63l3.96-10.02l1.58-1.71v-10.68l-2.77-5.8l-9.1-6.07l-2.11-2.9l-9.23-4.48v-7.65 287 | l-1.85-7.38v-4.48l-8.18-1.32l-6.59,3.1l-4.48,1.91l-6.33,4.48l-1.85,0.26l-5.01-2.9c0,0-1.85-1.05-2.64-1.05 288 | c-0.79,0-3.69,0-5.01,0.26c-1.32,0.26-5.8-1.05-5.8-1.05l-13.45-7.05l-11.21,5.14l-0.13,4.81l23.21,21.63v5.01l4.55,8.7l13.91,11.08 289 | l0.26,4.48l5.54,9.76l-5.36,8.77l4.88,4.74l1.73,0.85l1.91,0.15l8.7-2.64h1.19l1.71,2.64l6.07,5.54l5.54-1.58l0.35,0.25l0.4,1.29 290 | l0.3,4l6.07,4.22l3.58-1.38l1.69-0.21H387.15z' 291 | /> 292 | pathMouseOverHandler(e)} 296 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 297 | d='M321.81,483.22v-6.73l8.11-3.26l8.11-4.65l8.11-0.99l5.34-1.78l10.09-4.35h7.71l4.75-7.12V449l-1.58-7.12 298 | l-4.35-8.7c0,0-10.29-1.98-12.46-1.78c-2.18,0.2-7.91-0.62-8.9-0.01c-0.99,0.61-4.95-2.76-4.95-2.76l-2.57-8.11 299 | c0,0-4.35-3.16-5.54-2.87c-1.19,0.3-4.15-1.09-4.15-1.09l-2.37-13.25l2.77-7.91l4.15,1.78h3.36l6.99-1.78c0,0,6.26-3.42,6.86-2.8 300 | c0.59,0.62,5.34,0,5.34,0l1.78-9.66l7.91-5.93l3.16-1.58l2.37-14.64l0.59-2.77l-6.46-3.16l-10.15-2.57c0,0-8.51-0.4-9.1,0 301 | s-7.32,3.16-7.32,3.16l-7.71-2.57l-8.68-0.14l-4.38-0.85l-7.91,0.99h-7.12l-1.38,6.33h-5.93l-4.75,1.58l-1.59,3.31l-0.19,1.63 302 | l0.67,2.24l3.49,6.66l0.21,2.17l0.05,2.48l-7.58,10.38l-2.66-0.82l-1.88,0.25l-1.2,1.36l-3.58,8.33l-0.21,5.03l-1.55,4.84l-4,3.6 303 | l-2.59,2.65l-1.1,2.65l0.29,2.44l3.05,5.28l4.35,10.68v5.54l-2.75,3.39l-3.19,1.96l-1.58,0.01l0.59,1.18l-0.4,3.56l-4.15,7.12 304 | l2.18,1.98h10.68l1.38,3.96l5.14,2.37l4.35-4.35h12.46l3.36,7.71l6.92,5.14l-1.19,7.71H321.81z' 305 | /> 306 | pathMouseOverHandler(e)} 310 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 311 | points='368.1,433.18 374.03,434.16 374.03,425.46 377.59,422.49 397.37,417.55 412.6,415.57 417.15,413.2 312 | 424.08,393.81 413,385.7 406.47,382.93 402.71,378.38 392.82,376.41 383.33,374.23 374.03,375.22 368.1,376.11 358.41,382.93 313 | 356.63,392.6 351.29,392.6 344.43,395.4 338.46,396.92 334.08,397.18 329.92,395.4 327.15,403.31 329.53,416.56 333.68,417.65 314 | 339.22,420.52 341.79,428.63 346.74,431.38 355.64,431.4 ' 315 | /> 316 | pathMouseOverHandler(e)} 320 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 321 | d='M412.21,647.73l-1.58-9.49l2.64-12.4l3.43-8.18l1.32-7.38v-10.81l2.64-10.55l12.13-6.59l7.91,4.75 322 | c0,0,3.16,3.43,4.22,4.48c1.05,1.05,3.69,1.32,3.69,1.32l19.78,0.26l9.23-1.32l10.02-9.49l-7.12-3.96l-2.64-6.59v-40.62l13.45-9.76 323 | l9.23-1.32l23.21-1.25l3.16-7.71l9.49-1.58l8.7-3.96l1.32-7.38l10.81-2.37l12.66-3.43c0,0,6.33-3.69,8.44-3.69 324 | c2.11,0,16.88-2.64,16.88-2.64l11.34-8.7l3.16-10.29v-42.2l-140.31,2.11l-8.18-6.07l-7.65-3.36l-9.76-1.38c0,0-9.49,0.13-10.29,1.38 325 | c-0.79,1.25-3.16,1.52-3.16,1.52l-8.18-2.9l-5.08-2.97l-6.53,2.63l-13.25,1.72l-19.78,4.95l-3.56,2.97v7.58l-5.93,0.13l4.35,8.7 326 | l1.58,7.12v5.34l-4.75,7.12h-7.71l-10.09,4.35l-5.34,1.78l-8.11,0.99l-16.22,7.91v6.73l-3.36,6.92l-4.55,2.97l3.36,3.56l1.19,5.54 327 | l-2.57,1.38h-7.52l-2.97,1.98v13.25l13.45,7.05l5.8,1.05l5.01-0.26l7.65,3.96l1.85-0.26l6.33-4.48l11.08-5.01l8.18,1.32v4.48 328 | l1.85,7.38v7.65l9.23,4.48l2.11,2.9l9.1,6.07l2.77,5.8v10.68l-1.58,1.71l-3.96,10.02l2.9,21.63v11.08l1.58,12.13L412.21,647.73z' 329 | /> 330 | pathMouseOverHandler(e)} 334 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 335 | d='M424.08,393.81l5.01-10.75l-0.79-3.82l-4.22-6.07c0,0-1.58-1.05-1.85-2.37c-0.26-1.32,0-6.33,0-7.25 336 | c0-0.92-0.63-10.15-0.12-11.08c0.51-0.92,5.92,0.26,6.97,1.19c1.05,0.92,18.86,11.21,18.86,11.21l10.42-4.09c0,0,5.27-5.8,7.52-7.65 337 | s10.42-8.18,10.95-8.84c0.53-0.66,3.3-5.93,3.3-5.93l-2.64-2.37l-10.42-3.96l-10.02-2.24l-13.85,5.01l-5.01,3.43h-6.86l-10.02-4.75 338 | l-6.46-10.42l-14.11-7.78l-1.71,9.63l-4.22,5.27h-9.89l-5.27,5.27l-2.77,6.99l-10.55,1.98l-21.89-1.05l-3.56,8.97l-1.45,3.1 339 | l7.32-3.16h9.1l10.15,2.57l6.46,3.16l-2.97,17.41l13.85-1.19l19.38,4.15l3.76,4.55l6.53,2.77L424.08,393.81z' 340 | /> 341 | pathMouseOverHandler(e)} 345 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 346 | points='418.28,413.86 422.23,416.16 430.41,419.07 433.57,417.55 435.27,416.85 443.86,416.16 449.14,416.91 347 | 453.62,417.55 461.26,420.91 469.44,426.98 609.75,424.87 632.76,423.29 649.84,397.97 664.47,380.88 673.57,375.81 679.04,371.85 348 | 683.86,369.48 688.6,368.16 690.45,361.31 689.92,347.33 676.21,333.62 674.89,327.55 674.63,318.58 677.53,311.99 672.46,302.46 349 | 672.75,301.92 674.1,300.92 675.32,300.03 677.53,296.16 678.32,291.42 676.47,284.82 665.92,284.3 657.22,280.08 652.74,275.86 350 | 649.84,267.15 638.76,273.22 638.15,272.74 637.07,270.93 635.89,267.75 636.15,265.75 637.38,262.37 638.23,260.56 638.84,258.91 351 | 639.3,256.31 639.39,252.55 639.19,250.98 637.9,249.85 635.56,249.07 633.22,248.69 633.22,242.1 629.53,242.36 622.41,245.79 352 | 622.41,251.33 615.55,256.87 615.55,266.1 609.48,273.22 601.04,276.65 588.91,274.27 579.42,277.44 573.35,286.14 567.81,287.2 353 | 551.99,293.79 540,293.79 535.9,291.95 527.73,301.04 524.82,308.43 517.7,316.08 508.74,320.43 499.24,321.88 477.48,335.99 354 | 480.12,338.36 476.82,344.3 465.88,353.13 458.36,360.78 447.95,364.87 429.09,353.66 425.92,352.48 422.11,352.47 422.23,370.8 355 | 424.08,373.18 428.3,379.24 429.09,383.07 424.08,393.81 417.15,413.2 ' 356 | /> 357 | pathMouseOverHandler(e)} 361 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 362 | d='M606.58,477.35l3.16,9.23l10.55,16.62l4.35,7.12l13.45,4.75c0,0,11.6,3.96,11.74,5.54 363 | c0.13,1.58,10.42,18.22,10.81,19.4c0.4,1.18,5.14,11.07,5.54,14.63c0.4,3.56,3.16,10.29,3.16,10.29h10.29c0,0,9.36-0.4,10.81,0 364 | c1.45,0.4,9.36,3.56,14.11,5.93c4.75,2.37,23.34,5.14,25.32,6.73c1.98,1.58,11.87,5.54,14.64,7.52s12.26,7.12,15.43,9.1 365 | c3.16,1.98,12.26,12.26,14.24,13.85s11.08,12.66,11.08,12.66s10.29,7.52,10.29,8.7c0,1.19,5.54,9.49,6.73,11.47 366 | c1.19,1.98,9.1,10.29,10.29,11.87s4.35,4.35,4.35,4.35l25.32-11.47v-9.89h11.47l7.52-6.73l-1.98-6.33c0,0-0.79-3.56,1.98-3.96 367 | c2.77-0.4,14.64-3.96,14.64-3.96l9.49-3.16l3.56-9.89v-3.56l-3.16-3.96l-1.98-26.97l1.98-6.66v-9.89l-11.47-45.49l1.19-12.66 368 | l5.54-9.49l7.91-4.35v-3.96l-10.29-3.56l-7.91-5.93l-1.45-23.74l-11.87,1.05l-3.96,4.75l-3.69,2.11l-6.35-9.04l-20.02-2.57 369 | l-6.07-6.07l-41.67,1.32l-2.11,4.75l-9.23-8.44l-3.7-4.36l-1.18-2.21l-0.83-2.37l-0.09-0.56l-0.19-0.57l-0.3-0.18l-1.05,0.3 370 | l-3.44,2.86l-3.01,0.28l-2.96-0.08l-3.53-1.2l-5-2.16l-10.58-6.37l-7.91-14.77l4.48-7.12l3.43-3.43l-1.05-2.11l-11.87-8.44h-15.03 371 | l-8.44,1.85l-7.91,3.69l-5.27,3.96l-7.38,7.91l-6.59,3.69h-15.03l-17.08,25.32l-23.01,1.58v42.2L606.58,477.35z' 372 | /> 373 | pathMouseOverHandler(e)} 377 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 378 | d='M468.38,593.13l4.55,6.2c0,0,1.58,3.96,0.99,4.15c-0.59,0.2-5.54,3.56-5.54,3.56s-0.79,2.37-0.79,3.56 379 | c0,1.19,10.88,13.65,10.88,13.65l17.41,9.49c0,0,6.92,6.13,7.12,7.12c0.2,0.99,9.3-0.59,10.09,0c0.79,0.59,8.51,2.37,8.51,2.37 380 | s4.15,1.38,4.55,2.97c0.4,1.58,0.99,15.82,0.99,15.82l-1.19,9.69c0,0-3.96,0.4-0.4,3.36s7.32,6.13,7.91,7.52 381 | c0.59,1.38,2.18,6.33,2.57,7.52C536.43,691.31,539,701,539,701l5.74,4.35h19.19l-4.95-22.95l1.19-10.68l-8.7-8.51l-3.16-6.13 382 | l11.27-5.74l-0.99-14.24V619.9l12.07-4.15c0,0,5.34,2.08,6.23,2.37c0.89,0.3,7.12-1.19,7.12-1.19l9.69-2.08l13.45-6.03l9.3-1.38 383 | l12.16-6.13l1.98-3.56l6.82-9l3.66-5.93l10.19-0.49l8.9-3.66l8.93-3.2l0.26-10.55l-2.34-6.6l-0.83-3.68L660.65,540l-10.81-19.4 384 | l-25.19-10.29l-14.9-23.74l-3.16-9.23l-11.34,8.7l-16.88,2.64l-8.44,3.69l-23.47,5.8l-1.32,7.38l-8.7,3.96l-9.49,1.58l-3.16,7.71 385 | l-23.21,1.25l-9.23,1.32l-13.45,9.76v40.62l2.64,6.59l7.12,3.96l-10.02,9.49L468.38,593.13z' 386 | /> 387 | pathMouseOverHandler(e)} 391 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 392 | d='M356.3,697.57l2.64,4.75v3.03h12.92l11.6,1.19l5.01,6.33c0,0-0.26,5.54,0,6.33s10.02,3.96,11.08,4.22 393 | c1.05,0.26,9.76,13.71,9.76,14.51s7.91,13.71,7.91,13.71l5.27,11.87c0,0,3.43,9.49,4.22,11.6c0.79,2.11,6.07,13.71,6.59,16.35 394 | c0.53,2.64,2.11,8.7,3.43,10.81c1.32,2.11,7.65,7.91,8.7,8.44c1.05,0.53,5.01,3.16,7.38,5.54c2.37,2.37,3.69,4.22,4.48,6.86 395 | c0.79,2.64,1.58,5.01,2.37,7.38c0.79,2.37,0,4.75,2.37,7.91c2.37,3.16,8.18,8.7,9.76,10.29c1.58,1.58,3.16,4.22,7.91,6.59 396 | c4.75,2.37,13.98,3.43,20.84,6.86c6.86,3.43,9.76,5.27,12.92,6.86c3.16,1.58,7.18,2.9,7.18,2.9l4.17-1.32l7.65-7.38v-5.27 397 | l-1.58-5.27c0,0,3.16-2.11,5.27-2.9c2.11-0.79,9.23-3.96,10.81-3.96s19.52,0.79,22.95,1.05c3.43,0.26,20.04,0.26,20.04,0.26 398 | s8.97-4.22,10.55-5.8c1.58-1.58,13.98-16.88,13.98-16.88s-7.12-15.03-7.91-15.82c-0.79-0.79-2.11-4.22-2.11-6.86s0-15.56,0-17.01 399 | s2.11-9.89,2.11-9.89l-10.55-15.03l3.96-18.46l-22.68-32.7l-13.38-3.3h-19.19L539,701l-5.54-18.4l-7.91-7.52l-1.37-1.59l0.46-1.36 400 | l1.31-0.41l1.19-9.69l-0.99-15.82l-4.55-2.97l-8.51-2.37H503l-7.12-7.12l-17.41-9.49l-10.7-13.19l0.61-4.02l5.54-3.56l-0.99-4.15 401 | l-4.24-5.77l-20.09-0.69l-2.13-0.46l-1.56-0.86l-4.22-4.48l-7.91-4.75l-12.13,6.59l-2.58,10.32l-0.06,11.05l-1.32,7.38l-3.43,8.18 402 | l-2.64,12.4l1.58,9.49l-2.96,9.27l-1.64,3.68l-1.73,2.07l-1.06,0.22l-0.98-0.43l-1.13-1.64l-8.41-0.57l-2.19-1.63l-2.85-3.08 403 | l-8.7-5.27l1.32,6.86l3.22,9.66l0.18,1.46l-2.09,3.91l-11.34,9.23v11.6l-12.4,1.32L356.3,697.57z' 404 | /> 405 | pathMouseOverHandler(e)} 409 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 410 | d='M785.26,901.57l4.75-3.96l2.37-2.77v-10.29l-7.12-4.35v-8.31v-6.33l-3.96-6.33l5.54-55.78l8.31-3.56l2.37-3.16 411 | v-7.12l-4.75-6.73l4.75-2.37l9.89-3.56h9.1l3.56-6.73v-22.55v-5.93l-5.93-14.64l-1.19-62.51l3.96-7.52l-14.64-16.22l-6.73-11.47 412 | l-10.29-8.7l-11.08-12.66l-14.24-13.85l-16.7-9.89l-13.36-6.73l-25.32-6.73l-14.11-5.93h-21.1l-0.26,10.55l-8.93,3.2l-8.9,3.66 413 | l-10.19,0.49l-10.48,14.93l-1.98,3.56l-12.16,6.13l-9.3,1.38l-13.45,6.03l-16.81,3.26l-6.23-2.37l-12.07,4.15l0.99,31.45 414 | l-11.27,5.74l3.16,6.13l8.7,8.51l-1.19,10.68l4.95,22.95l13.38,3.3l22.68,32.7l-3.96,18.46l6.33,1.58l10.55,4.48l8.18-6.59 415 | l16.09-7.12l3.16,1.32l0.26,16.35l-1.32,14.24c0,0-0.26,6.33,0.53,6.86s5.01,5.01,5.01,5.01s3.69,1.32,4.48,2.11 416 | s7.65,3.16,7.65,3.16l8.18,0.26l7.91-5.8v-1.32l12.66-2.11l2.37,6.33c0,0-0.53,7.12,0,8.7s7.38,5.54,7.38,5.54l6.86,1.05 417 | c0,0,8.97,0,8.97,1.05s0.79,7.38,0.79,7.38l-9.49,10.55l5.01,3.96c0,0,0.79,5.8,0.79,7.65s0,7.12,0,7.12l2.9,6.07 418 | c0,0,6.59,2.37,7.65,5.54c1.05,3.16,11.34,10.81,11.34,10.81l9.76,1.58c0,0,5.93,6.33,7.71,7.65s15.49,3.43,15.49,3.43l5.01,6.07 419 | L785.26,901.57z' 420 | /> 421 | pathMouseOverHandler(e)} 425 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 426 | d='M785.26,901.57l5.14,18.2l4.75,13.05l-4.95,4.75l4.95,3.96l8.31,6.73v7.91v8.31v3.56v3.56l11.08-3.16 427 | l5.54,3.16l2.37,2.37h15.03l13.45,2.37h11.47l2.77,3.56l5.14-7.91l8.7,7.91c0,0,2.77,3.96,3.96,3.96s36.79,6.73,36.79,6.73 428 | l5.14-2.37l3.56-4.35l1.98-29.27l3.16-5.93l2.37-8.7v-8.7v-4.75l2.37-4.75l11.47,0.4l4.75-10.29l6.33,1.98c0,0-3.16-0.79,0-3.96 429 | c3.16-3.16,6.73-6.33,6.73-6.33l18.2-1.98l24.92-2.77v-5.54v-5.54l3.56-9.1v-3.96l2.77-2.77v-7.91c0,0-5.14-4.35-6.33-4.35 430 | s-11.87,0-11.87,0h-4.75c0,0-1.58-0.4-3.16,0c-1.58,0.4-3.96-9.49-3.96-9.49v-33.23l-0.79-7.12l0.4-9.89l0.4-3.16 431 | c0,0-8.7-0.79-10.68,0s-8.7-5.14-8.7-5.14l-4.35-3.16l-11.47-3.96c0,0-8.31-5.54-9.89-5.54c-1.58,0-11.87-13.05-11.87-13.05 432 | l-8.7-13.45l-5.54-11.47l-5.14-13.85l-21.76-24.13v-4.35l49.45-59.34l0.79-9.49v-4.75l-3.56-11.08l-1.98-5.14l-10.29-3.16h-7.91 433 | l-26.51-7.52l-3.56,13.45l-24.13,7.12l-1.34,0.64l-0.66,1.35l0.02,1.96l1.98,6.33l-7.52,6.73h-11.47v9.89l-25.32,11.47l-3.96,7.52 434 | l1.19,62.51l5.93,14.64v28.48l-3.56,6.73h-9.1l-9.89,3.56l-4.75,2.37l4.75,6.73v7.12l-2.37,3.16l-8.31,3.56l-5.54,55.78l3.96,6.33 435 | v14.64l7.12,4.35v10.29l-2.37,2.77L785.26,901.57z' 436 | /> 437 | pathMouseOverHandler(e)} 441 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 442 | d='M345.48,682.8l-11.87-6.59l-1.85,3.16l-3.03,1.25l3.36,4.55l-0.4,10.68l22.55,26.7l3.96,1.98v9.69 443 | c0,0-0.2,4.55,0,5.14c0.2,0.59,0,4.35,0,4.35h4.35h5.74c0,0,2.18,0.4,2.77,2.18c0.59,1.78,1.38,4.95,1.38,4.95s1.19,1.58,0,2.37 444 | c-1.19,0.79-5.74,2.18-5.74,2.18s0.2,3.76,0.4,4.55c0.2,0.79,1.58,2.37,2.77,2.97c1.19,0.59,7.12,0.99,7.71,1.19 445 | c0.59,0.2,2.18,2.57,2.18,4.15s0,7.71,0,7.71l0.99,6.73c0,0,1.38,3.96,2.18,4.75c0.79,0.79,2.97,4.55,4.15,5.34 446 | c1.19,0.79,2.77,3.76,2.97,4.35c0.2,0.59-0.4,5.34,0,6.33c0.4,0.99,1.98,2.97,2.77,4.35c0.79,1.38,3.76,3.96,4.75,5.34 447 | c0.99,1.38,4.75,6.92,4.75,6.92s2.18,2.37,4.15,3.36s18.79,1.19,20.37,1.19c1.58,0-0.2-0.4,7.91,4.75 448 | c8.11,5.14,8.11,5.54,10.09,6.53s-0.59-2.37,5.74,1.58c6.33,3.96,8.7,6.73,8.7,6.73l2.18,5.34c0,0-3.96,2.57-3.16,3.16 449 | c0.79,0.59,5.93,4.35,5.93,4.35l4.35,2.97l9.36-5.74l-6.13-5.6l-9.76-10.29l-2.65-8.74l-2.1-6.55l-2.06-4.1l-2.42-2.75l-7.38-5.54 450 | l-8.7-8.44l-3.43-10.81l-10.81-27.96l-5.27-11.87l-7.91-13.71l-9.76-14.51l-11.08-4.22v-6.33l-5.01-6.33l-11.6-1.19h-12.92v-3.03 451 | l-2.64-5.87l-7.91-3.36v-9.89L345.48,682.8z' 452 | /> 453 | pathMouseOverHandler(e)} 457 | onClick={(e: any) => pathClickedHandle(e.target.dataset.name)} 458 | d='M468.58,860.03l7.98,5.54l8.84,6.33l13.32,3.69h4.48l3.16,5.27c0,0-1.32,4.48,0,4.75 459 | c1.32,0.26,9.49,6.86,9.49,6.86h4.8l12.08-2.11l4.48,2.11l5.54,1.85h4.48l3.69,3.69c0,0,4.22,1.32,5.27,2.11 460 | c1.05,0.79,5.54,2.11,6.07,2.9s3.69,3.16,3.69,3.16s8.18-1.85,8.97-1.85s3.69-1.58,4.75-2.77c1.05-1.19,10.55-8.57,10.55-8.57 461 | l7.38-3.43l7.38,0.53l3.16-3.16c0,0,0.79-0.79,1.85-2.37c1.05-1.58,6.59-8.18,6.59-8.18l5.01-1.05c0,0,7.38-1.05,8.18-1.05 462 | s4.75-0.79,6.86-2.37c2.11-1.58,6.59-4.75,6.59-4.75l5.8-4.22l11.6,2.11l17.67,1.85l3.69,9.49l3.69,0.79l6.07,13.19v9.23v10.29 463 | l1.32,6.59c0,0,2.9,4.75,4.48,7.65c1.58,2.9,0,6.33,0,6.33s1.14,3.16,0.7,3.96c-0.44,0.79,4.04,8.7,4.04,8.7s-0.26,4.48,0,5.27 464 | c0.26,0.79,1.85,3.69,1.85,3.69h20.57l2.37,1.85l2.11,5.27l4.48-3.96c0,0,2.37-1.05,3.16,1.58c0.79,2.64,2.9,5.54,2.9,5.54h8.97 465 | h11.34l10.55,2.11h10.68l6.46,5.01l2.9,1.85h3.69l6.33,1.32l2.77-1.05v-23.34l-13.25-10.68l4.95-4.75l-9.89-31.25l-17.01-8.84 466 | l-5.01-6.07l-15.49-3.43l-7.71-7.65l-9.76-1.58l-7.23-5.95l-4.11-4.87l-1.97-2.48l-5.68-3.06l-2.9-6.07l-0.79-14.77l-5.01-3.96 467 | l9.49-10.55l-0.79-7.38l-8.97-1.05l-6.86-1.05l-7.38-5.54v-8.7l-2.37-6.33l-12.66,2.11v1.32l-7.91,5.8l-8.18-0.26l-7.65-3.16 468 | l-4.48-2.11l-5.01-5.01l0.79-21.1l-0.26-16.35l-3.16-1.32l-16.09,7.12l-8.18,6.59l-10.55-4.48l-6.33-1.58l10.55,15.03l-2.11,9.89 469 | v17.01l2.11,6.86l7.91,15.82l-15.22,17.8l-9.31,4.88l-42.99-1.32l-6.98,2.4l-9.11,4.46l0.98,3.27l0.6,7.28l-7.65,7.38l-4.17,1.32 470 | l-20.1-9.76l-10.31-3.59l-12.31-4.26L468.58,860.03z' 471 | /> 472 | 504 | 515 | 516 | 522 | 526 | 532 | 541 | 546 | 552 | 553 | 554 | 561 | 565 | 569 | 577 | 587 | 593 | 597 | 605 | 606 | 611 | 618 | 619 | 620 | 627 | 632 | 638 | 644 | 651 | 657 | 661 | 669 | 670 | 675 | 682 | 683 | 684 | 690 | 694 | 701 | 706 | 711 | 712 | 713 | 717 | 722 | 728 | 729 | 730 | 736 | 740 | 748 | 757 | 765 | 766 | 767 | 768 | 774 | 778 | 784 | 789 | 796 | 801 | 812 | 813 | 814 | 819 | 827 | 837 | 844 | 850 | 851 | 852 | 860 | 864 | 868 | 876 | 877 | 878 | 884 | 888 | 894 | 902 | 906 | 912 | 919 | 920 | 921 | 929 | 934 | 940 | 941 | 942 | 943 | 949 | 953 | 959 | 967 | 972 | 976 | 977 | 978 | 984 | 988 | 998 | 1003 | 1007 | 1014 | 1019 | 1024 | 1025 | 1026 | 1032 | 1033 | 1039 | 1047 | 1058 | 1059 | 1060 | 1068 | 1073 | 1078 | 1083 | 1090 | 1091 | 1092 | قم 1093 | 1094 | 1095 | 1101 | 1102 | 1107 | 1115 | 1121 | 1122 | 1123 | 1129 | 1130 | 1134 | 1140 | 1145 | 1149 | 1153 | 1160 | 1161 | 1162 | 1166 | 1171 | 1178 | 1186 | 1190 | 1196 | 1200 | 1204 | 1205 | 1206 | 1214 | 1218 | 1222 | 1230 | 1239 | 1245 | 1250 | 1257 | 1258 | 1259 | 1265 | 1270 | 1276 | 1282 | 1283 | 1284 | 1290 | 1296 | 1301 | 1305 | 1309 | 1310 | 1311 | 1312 | 1319 | 1328 | 1333 | 1343 | 1349 | 1353 | 1361 | 1367 | 1371 | 1376 | 1380 | 1385 | 1389 | 1390 | 1391 | 1398 | 1404 | 1409 | 1417 | 1423 | 1427 | 1435 | 1441 | 1445 | 1451 | 1455 | 1460 | 1464 | 1465 | 1466 | 1472 | 1476 | 1482 | 1490 | 1498 | 1499 | 1500 | 1504 | 1509 | 1515 | 1519 | 1520 | 1521 | 1522 | 1529 | 1535 | 1541 | 1546 | 1555 | 1556 | 1557 | 1563 | 1567 | 1575 | 1580 | 1584 | 1585 | 1586 | 1592 | 1596 | 1602 | 1610 | 1614 | 1619 | 1624 | 1625 | 1626 | 1632 | 1636 | 1642 | 1651 | 1659 | 1665 | 1670 | 1675 | 1681 | 1687 | 1691 | 1697 | 1706 | 1712 | 1720 | 1721 | 1722 | 1730 | 1736 | 1744 | 1748 | 1754 | 1758 | 1766 | 1767 | 1772 | 1779 | 1780 | 1781 | 1787 | 1793 | 1799 | 1800 | 1801 | 1807 | 1813 | 1820 | 1821 | 1822 | 1823 | 1824 | ) 1825 | } 1826 | 1827 | export default IranMapWrapper 1828 | -------------------------------------------------------------------------------- /src/components/mapSvg/iran-map.css: -------------------------------------------------------------------------------- 1 | .iran-map-wrapper { 2 | overflow: hidden; 3 | display: flex; 4 | align-items: center; 5 | justify-content: center; 6 | margin: auto; 7 | position: relative; 8 | direction: ltr !important; 9 | } 10 | 11 | .iran-map-wrapper path, 12 | .iran-map-wrapper polygon { 13 | outline: none !important; 14 | stroke: transparent; 15 | cursor: pointer; 16 | transition: all .3s; 17 | } 18 | 19 | .iran-map-wrapper .react-map-water { 20 | fill: #7bdaff !important; 21 | } 22 | 23 | .react-map-badge { 24 | background-color: #fff; 25 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.1); 26 | border-radius: 4px; 27 | font-family: inherit; 28 | overflow: hidden; 29 | min-width: 95px; 30 | text-align: right; 31 | } 32 | 33 | .react-map-badge h2 { 34 | margin: 0; 35 | padding: 7px; 36 | font-size: 12px; 37 | background-color: #e6e6e6; 38 | } 39 | 40 | .react-map-badge h3 { 41 | font-size: 13px; 42 | margin: 0; 43 | padding: 7px 10px; 44 | display: flex; 45 | justify-content: space-between; 46 | text-align: right; 47 | } 48 | 49 | .react-map-badge h3 span { 50 | flex: 1; 51 | direction: rtl; 52 | } 53 | 54 | .iran-map-wrapper g, 55 | .iran-map-wrapper text { 56 | pointer-events: none !important; 57 | font-family: inherit; 58 | font-weight: 700; 59 | } 60 | -------------------------------------------------------------------------------- /src/data/provinces.ts: -------------------------------------------------------------------------------- 1 | export const provinces = [ 2 | { 3 | provinceName: 'ardabil', 4 | provinceFaName: 'اردبیل', 5 | }, 6 | { 7 | provinceName: 'isfahan', 8 | provinceFaName: 'اصفهان', 9 | }, 10 | { 11 | provinceName: 'alborz', 12 | provinceFaName: 'البرز', 13 | }, 14 | { 15 | provinceName: 'ilam', 16 | provinceFaName: 'ایلام', 17 | }, 18 | { 19 | provinceName: 'eastAzerbaijan', 20 | provinceFaName: 'آذربایجان شرقی', 21 | }, 22 | { 23 | provinceName: 'westAzerbaijan', 24 | provinceFaName: 'آذربایجان غربی', 25 | }, 26 | { 27 | provinceName: 'bushehr', 28 | provinceFaName: 'بوشهر', 29 | }, 30 | { 31 | provinceName: 'tehran', 32 | provinceFaName: 'تهران', 33 | }, 34 | { 35 | provinceName: 'chaharmahalandBakhtiari', 36 | provinceFaName: 'چهارمحال و بختیاری', 37 | }, 38 | { 39 | provinceName: 'southKhorasan', 40 | provinceFaName: 'خراسان جنوبی', 41 | }, 42 | { 43 | provinceName: 'razaviKhorasan', 44 | provinceFaName: 'خراسان رضوی', 45 | }, 46 | { 47 | provinceName: 'northKhorasan', 48 | provinceFaName: 'خراسان شمالی', 49 | }, 50 | { 51 | provinceName: 'khuzestan', 52 | provinceFaName: 'خوزستان', 53 | }, 54 | { 55 | provinceName: 'zanjan', 56 | provinceFaName: 'زنجان', 57 | }, 58 | { 59 | provinceName: 'semnan', 60 | provinceFaName: 'سمنان', 61 | }, 62 | { 63 | provinceName: 'sistanAndBaluchestan', 64 | provinceFaName: 'سیستان و بلوچستان', 65 | }, 66 | { 67 | provinceName: 'fars', 68 | provinceFaName: 'فارس', 69 | }, 70 | { 71 | provinceName: 'qazvin', 72 | provinceFaName: 'قزوین', 73 | }, 74 | { 75 | provinceName: 'qom', 76 | provinceFaName: 'قم', 77 | }, 78 | { 79 | provinceName: 'kurdistan', 80 | provinceFaName: 'کردستان', 81 | }, 82 | { 83 | provinceName: 'kerman', 84 | provinceFaName: 'کرمان', 85 | }, 86 | { 87 | provinceName: 'kohgiluyehAndBoyerAhmad', 88 | provinceFaName: 'کهگیلویه و بویراحمد', 89 | }, 90 | { 91 | provinceName: 'kermanshah', 92 | provinceFaName: 'کرمانشاه', 93 | }, 94 | { 95 | provinceName: 'golestan', 96 | provinceFaName: 'گلستان', 97 | }, 98 | { 99 | provinceName: 'gilan', 100 | provinceFaName: 'گیلان', 101 | }, 102 | { 103 | provinceName: 'lorestan', 104 | provinceFaName: 'لرستان', 105 | }, 106 | { 107 | provinceName: 'mazandaran', 108 | provinceFaName: 'مازندران', 109 | }, 110 | { 111 | provinceName: 'markazi', 112 | provinceFaName: 'مرکزی', 113 | }, 114 | { 115 | provinceName: 'hormozgan', 116 | provinceFaName: 'هرمزگان', 117 | }, 118 | { 119 | provinceName: 'hamadan', 120 | provinceFaName: 'همدان', 121 | }, 122 | { 123 | provinceName: 'yazd', 124 | provinceFaName: 'یزد', 125 | }, 126 | ] 127 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import IranMap from './components/mapSvg/IranMap' 2 | 3 | export { IranMap } 4 | -------------------------------------------------------------------------------- /src/interfaces.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable @typescript-eslint/ban-types */ 2 | export interface selectedProvinceType { 3 | name: string | undefined 4 | faName: string | undefined 5 | } 6 | 7 | export interface provinceType { 8 | provinceName: string 9 | provinceFaName: string 10 | } 11 | 12 | export interface mapDataType { 13 | [key: string]: number 14 | } 15 | 16 | export interface IranMapWrapperProps { 17 | data: {} 18 | width?: number | string 19 | colorRange: string 20 | textColor?: string 21 | defaultSelectedProvince?: string 22 | selectedProvinceColor?: string 23 | tooltipTitle?: string 24 | selectProvinceHandler?: Function 25 | deactiveProvinceColor?: string 26 | } 27 | 28 | export interface MapProps { 29 | textColor: string 30 | mapRef: React.RefObject 31 | provinceName: null | string 32 | pathClickedHandle: Function 33 | pathMouseOverHandler: Function 34 | data: {} 35 | tooltipTitle: undefined | string 36 | width: number | string | undefined 37 | } 38 | -------------------------------------------------------------------------------- /styleMock.tsx: -------------------------------------------------------------------------------- 1 | module.exports = {} 2 | -------------------------------------------------------------------------------- /tests/common.test.tsx: -------------------------------------------------------------------------------- 1 | import * as React from 'react' 2 | import { render } from '@testing-library/react' 3 | import 'jest-canvas-mock' 4 | import IranMap from '../src/components/mapSvg/IranMap' 5 | 6 | const testData = { 7 | ardabil: 0, 8 | isfahan: 20, 9 | alborz: 11, 10 | ilam: 18, 11 | eastAzerbaijan: 10, 12 | westAzerbaijan: 20, 13 | bushehr: 15, 14 | tehran: 3, 15 | chaharmahalandBakhtiari: 25, 16 | southKhorasan: 29, 17 | razaviKhorasan: 11, 18 | northKhorasan: 19, 19 | khuzestan: 12, 20 | zanjan: 18, 21 | semnan: 9, 22 | sistanAndBaluchestan: 3, 23 | fars: 7, 24 | qazvin: 35, 25 | qom: 30, 26 | kurdistan: 24, 27 | kerman: 23, 28 | kohgiluyehAndBoyerAhmad: 2, 29 | kermanshah: 7, 30 | golestan: 18, 31 | gilan: 14, 32 | lorestan: 7, 33 | mazandaran: 28, 34 | markazi: 25, 35 | hormozgan: 14, 36 | hamadan: 19, 37 | yazd: 32, 38 | } 39 | 40 | describe('Common render', () => { 41 | it('renders without crashing', () => { 42 | render() 43 | }) 44 | }) 45 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["src"], 3 | "exclude": ["dist", "node_modules"], 4 | "compilerOptions": { 5 | "module": "esnext", 6 | "lib": ["dom", "esnext"], 7 | "importHelpers": true, 8 | "declaration": true, 9 | "sourceMap": true, 10 | "rootDir": "./src", 11 | "outDir": "./dist/esm", 12 | "strict": true, 13 | "noImplicitReturns": true, 14 | "noFallthroughCasesInSwitch": true, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "moduleResolution": "node", 18 | "jsx": "react", 19 | "esModuleInterop": true, 20 | "skipLibCheck": true, 21 | "forceConsistentCasingInFileNames": true 22 | } 23 | } 24 | --------------------------------------------------------------------------------