third party plugins
Tailwind CSS Data Maps
Datamaps are customizable SVG visualizations for the web, providing interactive geospatial insights by converting raw data into visual formats.
Below are the comprehensively outlined steps you can follow to seamlessly integrate Datamaps JS with FlyonUI.
- 1Step 1: Install Datamaps
Install
datamaps
using npm.npm i datamaps
- 2Step 2: Include Datamaps JavaScript
To integrate Datamaps, add the following
<script>
tags near the end of your</body>
section.<script src="../path/to/d3/d3.min.js"></script> <script src="../path/to/topojson/build/topojson.min.js"></script> <script src="../path/to/datamaps/dist/datamaps.world.min.js"></script>
Since no custom CSS overrides are required, you can also use a CDN link.Add the following
<script>
tags near the end of your</body>
section:<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.3/d3.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/topojson/1.6.9/topojson.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/datamaps@0.5.9/dist/datamaps.all.min.js"></script>
- 3Step 3: Initialize Datamaps
Add the following JavaScript code to initialize Datamaps on a target element using its
id
, as shown in the Datamap example. Ensure this script is placed below the Datamaps JS library and in a location where TailwindCSS can monitor it, as mentioned in step 3.For additional options and configurations, refer to the Datamaps JS documentation .
<script> (function () { // Dataset containing import and export data for various countries const dataSet = { CHN: { import: { value: '11,250', percent: '14.5', isGrown: true }, export: { value: '680', percent: '0.5', isGrown: true }, fillKey: 'MAJOR', short: 'cn' }, DEU: { import: { value: '9,320', percent: '6.1', isGrown: true }, export: { value: '1,200', percent: '6.3', isGrown: true }, fillKey: 'MAJOR', short: 'de' }, GBR: { import: { value: '5,050', percent: '8.9', isGrown: false }, export: { value: '2,150', percent: '3.7', isGrown: true }, fillKey: 'MAJOR', short: 'gb' }, IND: { import: { value: '1,500', percent: '18.5', isGrown: false }, export: { value: '450', percent: '12.0', isGrown: true }, fillKey: 'MAJOR', short: 'in' }, USA: { import: { value: '480', percent: '1.1', isGrown: false }, export: { value: '1,600', percent: '2.5', isGrown: true }, fillKey: 'MAJOR', short: 'us', customName: 'United States' }, CAN: { import: { value: '2,500', percent: '22.0', isGrown: true }, export: { value: '600', percent: '13.0', isGrown: true }, fillKey: 'MAJOR', short: 'ca' }, AUS: { import: { value: '1,350', percent: '12.0', isGrown: true }, export: { value: '330', percent: '10.0', isGrown: true }, fillKey: 'MAJOR', short: 'au' }, FRA: { import: { value: '3,800', percent: '16.0', isGrown: true }, export: { value: '820', percent: '15.0', isGrown: true }, fillKey: 'MAJOR', short: 'fr' }, JPN: { import: { value: '4,200', percent: '21.0', isGrown: true }, export: { value: '710', percent: '18.0', isGrown: false }, fillKey: 'MAJOR', short: 'jp' }, ITA: { import: { value: '3,200', percent: '14.8', isGrown: false }, export: { value: '640', percent: '12.5', isGrown: true }, fillKey: 'MAJOR', short: 'it' }, RUS: { import: { value: '5,600', percent: '19.5', isGrown: true }, export: { value: '1,000', percent: '10.5', isGrown: true }, fillKey: 'MAJOR', short: 'ru' }, MEX: { import: { value: '2,750', percent: '17.5', isGrown: false }, export: { value: '520', percent: '9.2', isGrown: true }, fillKey: 'MAJOR', short: 'mx' }, ZAF: { import: { value: '1,800', percent: '10.5', isGrown: true }, export: { value: '450', percent: '8.0', isGrown: true }, fillKey: 'MAJOR', short: 'za' } } // Initialize Datamap const dataMap = new Datamap({ element: document.querySelector('#countries-datamap'), // HTML element to render the map projection: 'mercator', // Projection type responsive: true, // Enable responsiveness fills: { defaultFill: `oklch(var(--b2)/0.6)`, MAJOR: `oklch(var(--b3)/0.8)` }, data: dataSet, // Country-specific data geographyConfig: { borderColor: `oklch(var(--bc)/0.5)`, // Border color for countries highlightFillColor: `oklch(var(--p)/0.2)`, // Highlight fill color on hover highlightBorderColor: `oklch(var(--p))`, // Highlight border color on hover popupTemplate: function (geo, data) { // Popup template for displaying country data const growUp = `<span class="icon-[tabler--trending-up] text-success size-4"></span>` const growDown = `<span class="icon-[tabler--trending-down] text-error size-4"></span>` return ` <div class="bg-base-100 rounded-lg overflow-hidden shadow min-w-32 me-2"> <div class="flex items-center gap-2 bg-base-300 p-2"> <div class="flex items-center"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/lipis/flag-icons@7.0.0/css/flag-icons.min.css"/> <span class="fi fi-${data.short.toLowerCase()} h-4 w-5 rounded"></span> </div> <span class="text-sm font-medium text-base-content/90">${data.customName || geo.properties.name}</span> </div> <div class="p-2 space-y-1"> <div class="flex items-center justify-between text-xs gap-2"> <div class="text-base-content/80 text-nowrap">Import: <span class="font-medium">${ data.import.value }M</span></div> <span class="flex items-center gap-0.5 ${data.import.isGrown ? 'text-success' : 'text-error'}">${ data.import.percent }${data.import.isGrown ? growUp : growDown}</span> </div> <div class="flex items-center justify-between text-xs gap-2"> <div class="text-base-content/80 text-nowrap">Export: <span class="font-medium">${ data.export.value }</span>M</div> <span class="flex items-center gap-0.5 ${data.export.isGrown ? 'text-success' : 'text-error'}">${ data.export.percent }${data.export.isGrown ? growUp : growDown}</span> </div> </div> </div>` } } }) // Event listener for window resize to make Datamap responsive window.addEventListener('resize', function () { dataMap.resize() }) })() </script>
The following example demonstrates the usage of a data map, initialized with the JavaScript code provided above.
<div id="countries-datamap"></div>