πŸš€ Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more β†’
Sign In

@vnedyalk0v/react19-simple-maps

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@vnedyalk0v/react19-simple-maps - npm Package Compare versions

Comparing version
2.0.1
to
2.0.2
+13
-0
CHANGELOG.md
# Changelog
## 2.0.2
### Patch Changes
- 05f1bfc: Security hardening (7 fixes):
- **[H-001]** Fix JSON-LD script-breakout XSS by escaping `<`, `>`, `&`, and Unicode line separators in `MapMetadata`.
- **[H-002]** Prevent redirect-based SSRF bypass by using `redirect: 'manual'` and validating each redirect hop against the URL security policy.
- **[M-001]** Enforce streaming response-size limits independent of the `Content-Length` header to prevent memory exhaustion.
- **[M-002]** Deprecate `fetchGeographies` β€” it now delegates to the hardened `fetchGeographiesCache` pipeline.
- **[M-003]** Align server actions in `GeographyActions` with the shared secure URL validator and fetch pipeline.
- **[L-001]** Add prominent dev-only labeling and production CSP guidance in example HTML and SECURITY.md.
- **[L-002]** Set `X-XSS-Protection: 0` consistently across all examples and documentation.
## 2.0.1

@@ -4,0 +17,0 @@

+20
-4

@@ -35,3 +35,8 @@ import { Feature, Geometry, FeatureCollection, MultiLineString, LineString } from 'geojson';

/**
* Basic fetch function for geography data without caching
* Fetch geography data with full security validation.
*
* @deprecated Since v2.1.0 β€” use {@link fetchGeographiesCache} instead for
* cached, secure fetching. This function now delegates to the hardened pipeline
* but swallows errors for backward compatibility.
*
* @param url - The URL to fetch geography data from

@@ -135,8 +140,19 @@ * @returns Promise resolving to geography data or undefined on error

/**
* Validates response size to prevent memory issues
* Fast pre-check of Content-Length header to reject obviously oversized responses.
* NOTE: This is only a pre-check β€” the header can be omitted or falsified.
* Use {@link readResponseWithSizeLimit} for authoritative enforcement.
* @param response - The fetch response to validate
* @throws {Error} If response is too large
* @throws {Error} If Content-Length exceeds the configured maximum
*/
declare function validateResponseSize(response: Response): Promise<void>;
/**
* Reads the response body as an ArrayBuffer while enforcing a hard byte-count limit.
* Protects against responses that omit or falsify Content-Length.
* @param response - The fetch response to read
* @param maxBytes - Maximum allowed bytes (defaults to GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE)
* @returns The response body as ArrayBuffer
* @throws {Error} If the body exceeds the byte limit
*/
declare function readResponseWithSizeLimit(response: Response, maxBytes?: number): Promise<ArrayBuffer>;
/**
* Validates that the parsed data is a valid geography object

@@ -253,3 +269,3 @@ * @param data - The parsed JSON data to validate

export { DEFAULT_GEOGRAPHY_FETCH_CONFIG, DEFAULT_SRI_CONFIG, DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG, KNOWN_GEOGRAPHY_SRI, addCustomSRI, configureGeographySecurity, configureSRI, createConfigurationError, createConnectorPath, createContextError, createGeographyError, createGeographyFetchError, createProjectionError, createSecurityError, createTypeGuard, createValidationError, disableSRI, enableDevelopmentMode, enableStrictSRI, fetchGeographies, fetchGeographiesCache, generateSRIForUrls, generateSRIHash, getCoords, getFeatures, getMesh, getSRIForUrl, isFeature, isFeatureCollection, isGeoProjection, isGeographyError, isProjectionName, isString, isTopology, isValidCoordinates, isValidGeographyData, isValidGeographyUrl, isValidGeometry, isValidLatitude, isValidLongitude, isValidMapDimensions, preloadGeography, prepareFeatures, prepareMesh, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI };
export { DEFAULT_GEOGRAPHY_FETCH_CONFIG, DEFAULT_SRI_CONFIG, DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG, KNOWN_GEOGRAPHY_SRI, addCustomSRI, configureGeographySecurity, configureSRI, createConfigurationError, createConnectorPath, createContextError, createGeographyError, createGeographyFetchError, createProjectionError, createSecurityError, createTypeGuard, createValidationError, disableSRI, enableDevelopmentMode, enableStrictSRI, fetchGeographies, fetchGeographiesCache, generateSRIForUrls, generateSRIHash, getCoords, getFeatures, getMesh, getSRIForUrl, isFeature, isFeatureCollection, isGeoProjection, isGeographyError, isProjectionName, isString, isTopology, isValidCoordinates, isValidGeographyData, isValidGeographyUrl, isValidGeometry, isValidLatitude, isValidLongitude, isValidMapDimensions, preloadGeography, prepareFeatures, prepareMesh, readResponseWithSizeLimit, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI };
export type { GeographySecurityConfig, SRIConfig, SRIEnforcementConfig };
+109
-42

@@ -235,5 +235,7 @@ import { feature, mesh } from 'topojson-client';

/**
* Validates response size to prevent memory issues
* Fast pre-check of Content-Length header to reject obviously oversized responses.
* NOTE: This is only a pre-check β€” the header can be omitted or falsified.
* Use {@link readResponseWithSizeLimit} for authoritative enforcement.
* @param response - The fetch response to validate
* @throws {Error} If response is too large
* @throws {Error} If Content-Length exceeds the configured maximum
*/

@@ -250,2 +252,46 @@ async function validateResponseSize(response) {

/**
* Reads the response body as an ArrayBuffer while enforcing a hard byte-count limit.
* Protects against responses that omit or falsify Content-Length.
* @param response - The fetch response to read
* @param maxBytes - Maximum allowed bytes (defaults to GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE)
* @returns The response body as ArrayBuffer
* @throws {Error} If the body exceeds the byte limit
*/
async function readResponseWithSizeLimit(response, maxBytes = GEOGRAPHY_FETCH_CONFIG.MAX_RESPONSE_SIZE) {
const reader = response.body?.getReader();
// Fallback: if ReadableStream is not available, read the whole body and check size.
// NOTE: response.arrayBuffer() loads the entire response into memory before the size
// check runs, which can cause high memory usage or OOM for very large responses.
// The ReadableStream path above is preferred as it streams data and enforces the
// size limit incrementally, failing fast without buffering the full payload.
if (!reader) {
const buffer = await response.arrayBuffer();
if (buffer.byteLength > maxBytes) {
throw createGeographyFetchError('VALIDATION_ERROR', `Response too large: ${buffer.byteLength} bytes exceeds limit of ${maxBytes} bytes`);
}
return buffer;
}
const chunks = [];
let totalBytes = 0;
for (;;) {
const { done, value } = await reader.read();
if (done)
break;
totalBytes += value.byteLength;
if (totalBytes > maxBytes) {
reader.cancel().catch(() => { });
throw createGeographyFetchError('VALIDATION_ERROR', `Response too large: exceeded limit of ${maxBytes} bytes`);
}
chunks.push(value);
}
// Concatenate chunks into a single ArrayBuffer
const result = new Uint8Array(totalBytes);
let offset = 0;
for (const chunk of chunks) {
result.set(chunk, offset);
offset += chunk.byteLength;
}
return result.buffer;
}
/**
* Validates that the parsed data is a valid geography object

@@ -495,4 +541,7 @@ * @param data - The parsed JSON data to validate

/** Maximum number of redirect hops allowed */
const MAX_REDIRECTS = 5;
/**
* Creates fetch options with security headers and timeout
* Creates fetch options with security headers and timeout.
* Uses `redirect: 'manual'` so each redirect hop can be validated against the URL policy.
* @param signal - AbortController signal for timeout

@@ -511,5 +560,41 @@ * @returns Fetch options object

credentials: 'omit', // Don't send credentials
redirect: 'manual', // Handle redirects manually to validate each hop
};
}
/**
* Follows redirects manually, validating each hop against the URL security policy.
* Prevents redirect-based SSRF bypasses.
* @param url - The initial URL to fetch
* @param options - Fetch options (must have redirect: 'manual')
* @returns The final non-redirect response
*/
async function fetchWithRedirectValidation(url, options) {
let currentUrl = url;
for (let hop = 0; hop < MAX_REDIRECTS; hop++) {
const response = await fetch(currentUrl, options);
// Not a redirect β€” return directly
if (response.status < 300 || response.status >= 400) {
return response;
}
// Consume the redirect response body to release connection resources
try {
await response.arrayBuffer();
}
catch {
// Ignore body-consumption errors β€” they must not mask redirect handling
}
// Extract and validate the redirect target
const location = response.headers.get('location');
if (!location) {
throw createGeographyFetchError('SECURITY_ERROR', `Redirect response (HTTP ${response.status}) missing Location header`, currentUrl);
}
// Resolve relative redirects against current URL
const redirectUrl = new URL(location, currentUrl).href;
// Validate the redirect target against the same URL security policy
validateGeographyUrl(redirectUrl);
currentUrl = redirectUrl;
}
throw createGeographyFetchError('SECURITY_ERROR', `Too many redirects (exceeded ${MAX_REDIRECTS} hops)`, url);
}
/**
* Creates an abort controller with timeout

@@ -555,21 +640,2 @@ * @param timeoutMs - Timeout in milliseconds

/**
* Parses JSON response with proper error handling
* @param response - The fetch response
* @param url - The URL for error context
* @returns Parsed geography data
*/
async function parseGeographyResponse(response, url) {
try {
const data = await response.json();
validateGeographyData(data);
return data;
}
catch (jsonError) {
if (jsonError instanceof SyntaxError) {
throw createGeographyFetchError('GEOGRAPHY_PARSE_ERROR', 'Invalid JSON format in geography data', url, jsonError);
}
throw jsonError;
}
}
/**
* Parses JSON from ArrayBuffer with proper error handling

@@ -595,3 +661,8 @@ * @param arrayBuffer - The response data as ArrayBuffer

/**
* Basic fetch function for geography data without caching
* Fetch geography data with full security validation.
*
* @deprecated Since v2.1.0 β€” use {@link fetchGeographiesCache} instead for
* cached, secure fetching. This function now delegates to the hardened pipeline
* but swallows errors for backward compatibility.
*
* @param url - The URL to fetch geography data from

@@ -601,8 +672,9 @@ * @returns Promise resolving to geography data or undefined on error

async function fetchGeographies(url) {
if (typeof process !== 'undefined' &&
process?.env?.NODE_ENV !== 'production') {
// eslint-disable-next-line no-console
console.warn('fetchGeographies is deprecated. Use fetchGeographiesCache for secure, cached fetching.');
}
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(response.statusText);
}
return await response.json();
return await fetchGeographiesCache(url);
}

@@ -625,4 +697,4 @@ catch {

try {
// Make secure fetch request
const response = await fetch(url, createSecureFetchOptions(controller.signal));
// Make secure fetch request with redirect validation
const response = await fetchWithRedirectValidation(url, createSecureFetchOptions(controller.signal));
cleanup();

@@ -633,18 +705,13 @@ // Validate response

}
// Validate content type and size
// Validate content type and fast pre-check of Content-Length
validateContentType(response);
await validateResponseSize(response);
// Handle SRI validation and parsing in one step to avoid response body consumption issues
// Read body with hard streaming size limit (guards against falsified Content-Length)
const arrayBuffer = await readResponseWithSizeLimit(response);
// Handle SRI validation if required
if (sriConfig) {
// Read response body once as ArrayBuffer
const arrayBuffer = await response.arrayBuffer();
// Validate SRI hash
await validateSRIFromArrayBuffer(arrayBuffer, url, sriConfig);
// Parse JSON from ArrayBuffer
return await parseGeographyFromArrayBuffer(arrayBuffer, url);
}
else {
// No SRI validation needed, parse normally
return await parseGeographyResponse(response, url);
}
// Parse JSON from the already-read ArrayBuffer
return await parseGeographyFromArrayBuffer(arrayBuffer, url);
}

@@ -1041,3 +1108,3 @@ catch (error) {

export { DEFAULT_GEOGRAPHY_FETCH_CONFIG, DEFAULT_SRI_CONFIG, DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG, KNOWN_GEOGRAPHY_SRI, addCustomSRI, configureGeographySecurity, configureSRI, createConfigurationError, createConnectorPath, createContextError, createGeographyError, createGeographyFetchError, createProjectionError, createSecurityError, createTypeGuard, createValidationError, disableSRI, enableDevelopmentMode, enableStrictSRI, fetchGeographies, fetchGeographiesCache, generateSRIForUrls, generateSRIHash, getCoords, getFeatures, getMesh, getSRIForUrl, isFeature, isFeatureCollection, isGeoProjection, isGeographyError, isProjectionName, isString, isTopology, isValidCoordinates, isValidGeographyData, isValidGeographyUrl, isValidGeometry, isValidLatitude, isValidLongitude, isValidMapDimensions, preloadGeography$1 as preloadGeography, prepareFeatures, prepareMesh, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI };
export { DEFAULT_GEOGRAPHY_FETCH_CONFIG, DEFAULT_SRI_CONFIG, DEVELOPMENT_GEOGRAPHY_FETCH_CONFIG, KNOWN_GEOGRAPHY_SRI, addCustomSRI, configureGeographySecurity, configureSRI, createConfigurationError, createConnectorPath, createContextError, createGeographyError, createGeographyFetchError, createProjectionError, createSecurityError, createTypeGuard, createValidationError, disableSRI, enableDevelopmentMode, enableStrictSRI, fetchGeographies, fetchGeographiesCache, generateSRIForUrls, generateSRIHash, getCoords, getFeatures, getMesh, getSRIForUrl, isFeature, isFeatureCollection, isGeoProjection, isGeographyError, isProjectionName, isString, isTopology, isValidCoordinates, isValidGeographyData, isValidGeographyUrl, isValidGeometry, isValidLatitude, isValidLongitude, isValidMapDimensions, preloadGeography$1 as preloadGeography, prepareFeatures, prepareMesh, readResponseWithSizeLimit, validateContentType, validateGeographyData, validateGeographyUrl, validateResponseSize, validateSRI };
//# sourceMappingURL=utils.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"utils.js","sources":["../src/types.ts","../src/utils/coordinate-utils.ts","../src/utils/error-utils.ts","../src/utils/geography-validation.ts","../src/utils/subresource-integrity.ts","../src/utils/geography-fetching.ts","../src/utils/geography-processing.ts","../src/utils.ts","../src/utils/preloading.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["preloadGeography"],"mappings":"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"}
{"version":3,"file":"utils.js","sources":["../src/types.ts","../src/utils/coordinate-utils.ts","../src/utils/error-utils.ts","../src/utils/geography-validation.ts","../src/utils/subresource-integrity.ts","../src/utils/geography-fetching.ts","../src/utils/geography-processing.ts","../src/utils.ts","../src/utils/preloading.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null],"names":["preloadGeography"],"mappings":"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"}
{
"name": "@vnedyalk0v/react19-simple-maps",
"version": "2.0.1",
"version": "2.0.2",
"description": "An svg map chart component built exclusively for React 19+ - Modern TypeScript-first library with cutting-edge React patterns",

@@ -5,0 +5,0 @@ "type": "module",

+86
-830

@@ -7,49 +7,31 @@ # @vnedyalk0v/react19-simple-maps

[![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue.svg)](https://www.typescriptlang.org/)
[![React 19](https://img.shields.io/badge/React-19%20Ready-61dafb.svg)](https://reactjs.org/)
[![React 19](https://img.shields.io/badge/React-19%20Ready-61dafb.svg)](https://react.dev/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![CI](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml/badge.svg)](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml)
[![CI](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml/badge.svg?branch=dev&event=push)](https://github.com/vnedyalk0v/react19-simple-maps/actions/workflows/ci.yml)
Create beautiful, interactive SVG maps in React with d3-geo and topojson using a declarative, TypeScript-first API built exclusively for React 19+.
Create interactive SVG maps in React with d3-geo and topojson using a TypeScript-first API for React 19+.
> **🍴 This is a modernized fork** of the original [react-simple-maps](https://github.com/zcreativelabs/react-simple-maps) by Richard Zimerman, completely rewritten with full TypeScript support, React 19 compatibility, and modern development practices by [Georgi Nedyalkov](mailto:vnedyalk0v@proton.me).
> Modernized fork of [react-simple-maps](https://github.com/zcreativelabs/react-simple-maps) with React 19 support and TypeScript-first tooling.
## ✨ Key Features
## Key Features
- πŸ”’ **Zero Security Vulnerabilities** - Completely secure dependencies with built-in security features
- πŸ“ **Full TypeScript Support** - Strict typing with comprehensive type definitions and branded types
- βš›οΈ **React 19+ Exclusive** - Built exclusively for React 19+ with cutting-edge features and patterns
- πŸš€ **Modern Build System** - ESM-only build with tree-shaking and type definitions
- πŸ§ͺ **Comprehensive Testing** - 100% test coverage with 159 tests using Vitest
- πŸ“¦ **Optimized Bundle** - Smaller bundle size with better performance than alternatives
- πŸ›‘οΈ **Enterprise Security** - Built-in SRI validation, HTTPS enforcement, and content validation
- 🎯 **Developer Experience** - Excellent IntelliSense, error boundaries, and debugging support
- React 19+ only (peer dependencies)
- ESM-only build with tree-shaking and type definitions
- TypeScript-first API with branded coordinate helpers
- Core components: ComposableMap, Geographies, Geography, ZoomableGroup, Marker, Annotation, Line, Sphere, Graticule
- Optional error boundary + Suspense fallback for geography loading
- Geography fetching utilities with validation (HTTPS-only default, private IP blocking, content-type/size checks) and optional SRI helpers
- Opt-in debug logging via `debug` prop or `REACT_SIMPLE_MAPS_DEBUG`
## πŸ“‹ Quick Links
## Quick Links
- πŸ“¦ [npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps) - Primary distribution
- πŸ“¦ [GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages) - Also available
- πŸ“š [Live Examples](./examples/) - Interactive demos with source code
- πŸ“ [**Changelog**](https://github.com/vnedyalk0v/react19-simple-maps/blob/main/CHANGELOG.md) - See what's new!
- πŸ› [Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues) - Report bugs or request features
- πŸ’¬ [Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions) - Community support and ideas
- [npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps)
- [GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages)
- [Examples](./examples/)
- [Changelog](./CHANGELOG.md)
- [Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues)
- [Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions)
## Why @vnedyalk0v/react19-simple-maps?
## Installation
`@vnedyalk0v/react19-simple-maps` makes working with SVG maps in React effortless. It handles complex tasks like panning, zooming, projections, and rendering optimization while leveraging the power of [d3-geo](https://github.com/d3/d3-geo) and topojson-client without requiring the entire d3 library.
Since the library leaves DOM work to React, it integrates seamlessly with other React libraries like [react-spring](https://github.com/react-spring/react-spring) for animations and [react-annotation](https://github.com/susielu/react-annotation/) for enhanced annotations.
**Why Choose This Package:**
- 🎯 **Declarative API** - Build complex maps with simple React components
- πŸ”§ **TypeScript First** - Full type safety with branded types and comprehensive IntelliSense
- 🎨 **Highly Customizable** - Style with CSS-in-JS, regular CSS, or styled-components
- πŸ“± **Touch & Mobile Ready** - Built-in pan, zoom, and touch interactions
- 🌍 **Universal Map Data** - Works with any valid TopoJSON, GeoJSON, or custom data
- ⚑ **Performance Optimized** - Efficient rendering, updates, and memory management
- πŸ›‘οΈ **Enterprise Security** - Built-in security features for production applications
- πŸ”„ **React 19 Native** - Leverages latest React features like the `use` API and enhanced error boundaries
## πŸ“¦ Installation
### From npm Registry (Recommended)

@@ -82,9 +64,10 @@

- **React**: 19.0.0 or higher (React 19+ exclusive - no backward compatibility)
- **TypeScript**: 5.0.0 or higher (strongly recommended for best developer experience)
- **Node.js**: 18.0.0 or higher (for development and build tools)
- **React**: 19.0.0 or higher (peer dependency)
- **React DOM**: 19.0.0 or higher (peer dependency)
- **Node.js**: 18.0.0 or higher (development/build)
- **TypeScript**: 5.0.0 or higher (recommended)
### Utilities Subpath
## Utilities Subpath
You can import utility helpers directly from the `./utils` subpath:
You can import helper utilities directly from the `./utils` subpath:

@@ -98,33 +81,11 @@ ```tsx

## πŸ”„ Migration from react-simple-maps
## Migration Notes (from react-simple-maps)
Migrating from the original `react-simple-maps`? We've got you covered!
1. Replace package + import path: `react-simple-maps` β†’ `@vnedyalk0v/react19-simple-maps`.
2. For TypeScript, use branded helpers like `createCoordinates()` (or an explicit cast) for `Coordinates`.
3. Geography event handlers receive `(event, data)` where `data` includes geography info (centroid, bounds, etc.).
**Quick Migration:**
## Quick Start
1. `npm uninstall react-simple-maps && npm install @vnedyalk0v/react19-simple-maps`
2. Update imports: `from "react-simple-maps"` β†’ `from "@vnedyalk0v/react19-simple-maps"`
3. Convert coordinates: `[lon, lat]` β†’ `createCoordinates(lon, lat)`
4. Update event handlers to use enhanced data parameter
**πŸ“– [Complete Migration Guide](./docs/MIGRATION.md)** - Detailed step-by-step instructions, breaking changes, and troubleshooting tips.
### Peer Dependencies
The package automatically includes these dependencies:
- `d3-geo` ^3.1.0 - Geographic projections and utilities
- `d3-zoom` ^3.0.0 - Zoom and pan behavior
- `d3-selection` ^3.0.0 - DOM selection utilities
- `d3-color` ^3.1.0 - Color manipulation
- `d3-interpolate` ^3.0.1 - Value interpolation
- `topojson-client` ^3.1.0 - TopoJSON parsing and processing
## πŸš€ Quick Start
`react19-simple-maps` provides a set of composable React components for creating interactive SVG maps. You can combine these components to build everything from simple world maps to complex interactive visualizations.
### Basic World Map (JavaScript)
```jsx
```tsx
import React from 'react';

@@ -135,5 +96,5 @@ import {

Geography,
createCoordinates,
} from '@vnedyalk0v/react19-simple-maps';
// URL to a valid TopoJSON file
const geoUrl = 'https://unpkg.com/world-atlas@2/countries-110m.json';

@@ -147,3 +108,3 @@

scale: 147,
center: [0, 0],
center: createCoordinates(0, 0),
}}

@@ -175,105 +136,9 @@ width={800}

### Interactive Map with TypeScript
## Core Components
```tsx
import React, { useState } from 'react';
import {
ComposableMap,
Geographies,
Geography,
Marker,
ZoomableGroup,
createCoordinates,
createScaleExtent,
createTranslateExtent,
} from '@vnedyalk0v/react19-simple-maps';
import type { Feature, Geometry } from 'geojson';
const geoUrl = 'https://unpkg.com/world-atlas@2/countries-50m.json';
const InteractiveMap: React.FC = () => {
const [selectedCountry, setSelectedCountry] = useState<string | null>(null);
const handleGeographyClick = (geography: Feature<Geometry>) => {
const countryName = geography.properties?.name || 'Unknown';
setSelectedCountry(countryName);
};
return (
<div>
{selectedCountry && <p>Selected: {selectedCountry}</p>}
<ComposableMap projection="geoEqualEarth" width={800} height={500}>
<ZoomableGroup
zoom={1}
center={createCoordinates(0, 0)}
minZoom={0.5}
maxZoom={8}
scaleExtent={createScaleExtent(0.5, 8)}
translateExtent={createTranslateExtent(
createCoordinates(-2000, -1000),
createCoordinates(2000, 1000),
)}
>
<Geographies geography={geoUrl}>
{({ geographies }) =>
geographies.map((geo) => (
<Geography
key={geo.rsmKey}
geography={geo}
onClick={() => handleGeographyClick(geo)}
style={{
default: {
fill:
selectedCountry === geo.properties?.name
? '#1976d2'
: '#D6D6DA',
outline: 'none',
stroke: '#FFFFFF',
strokeWidth: 0.5,
},
hover: { fill: '#F53', cursor: 'pointer' },
pressed: { fill: '#E42' },
}}
/>
))
}
</Geographies>
{/* Add a marker for New York */}
<Marker coordinates={createCoordinates(-74.006, 40.7128)}>
<circle r={5} fill="#F53" stroke="#fff" strokeWidth={2} />
<text
textAnchor="middle"
y={-10}
style={{ fontSize: '12px', fill: '#333' }}
>
New York
</text>
</Marker>
</ZoomableGroup>
</ComposableMap>
</div>
);
};
export default InteractiveMap;
```
### 🎯 Live Examples
Check out our comprehensive examples in the [`examples/`](./examples/) directory:
- **[Basic Map](./examples/basic-map/)** - Simple world map with click interactions
- **[Interactive Map](./examples/interactive-map/)** - Advanced features with zoom, pan, and markers
The examples use the [Equal Earth projection](https://observablehq.com/@d3/equal-earth), which provides an accurate representation of land areas. Learn more about this projection on [Shaded Relief](http://shadedrelief.com/ee_proj/) and [Wikipedia](https://en.wikipedia.org/wiki/Equal_Earth_projection).
## 🧩 Core Components
### ComposableMap
The main wrapper component that provides the SVG context and projection system.
The main wrapper component that provides SVG context and projection setup.
**Props:**
**Common props:**

@@ -284,229 +149,57 @@ - `projection` - Map projection (string name or d3-geo projection function)

- `className` - CSS class name
- `debug` - Enable debug logging (default: false, opt-in only)
- `metadata` - Optional metadata for SEO and accessibility
- `debug` - Enable opt-in debug logging (default: `false`)
```tsx
import {
ComposableMap,
createCoordinates,
} from '@vnedyalk0v/react19-simple-maps';
<ComposableMap
projection="geoEqualEarth"
projectionConfig={{
scale: 147,
center: createCoordinates(0, 0),
rotate: [0, 0, 0],
}}
width={800}
height={600}
className="my-map"
>
{/* Map content */}
</ComposableMap>;
```
### Geographies
Renders geographic features from TopoJSON or GeoJSON data with built-in error handling.
Renders geographic features from TopoJSON or GeoJSON data.
**Props:**
**Notable props:**
- `geography` - URL string, TopoJSON object, or GeoJSON FeatureCollection
- `parseGeographies` - Optional function to transform geography data
- `className` - CSS class name
- `errorBoundary` - Enable built-in error boundary and Suspense fallback
- `onGeographyError`, `fallback` - Error handling hooks when `errorBoundary` is enabled
```tsx
import { Geographies, Geography } from '@vnedyalk0v/react19-simple-maps';
<Geographies geography="https://unpkg.com/world-atlas@2/countries-110m.json">
{({ geographies, outline, borders }) =>
geographies.map((geo) => (
<Geography
key={geo.rsmKey}
geography={geo}
onClick={(event) => console.log('Clicked:', geo.properties?.name)}
onMouseEnter={(event) => console.log('Hover:', geo.properties?.name)}
/>
))
}
</Geographies>;
```
### Geography
Individual geographic feature component with enhanced interaction support.
Individual geographic feature component with enhanced event handlers.
**Enhanced Event Handlers:**
All event handlers receive `(event, GeographyEventData)` where `GeographyEventData` includes:
`geography`, `centroid`, `bounds`, and `coordinates`.
All event handlers now receive geographic data as a second parameter:
```tsx
<Geography
geography={geo}
onClick={(event, data) => {
console.log('Country:', data.geography.properties?.name);
console.log('Centroid:', data.centroid);
console.log('Bounds:', data.bounds);
console.log('Coordinates:', data.coordinates);
}}
onMouseEnter={(event, data) => {
// Access to rich geographic data
}}
/>
```
**Props:**
- `geography` - GeoJSON feature object
- `style` - Conditional styling object with `default`, `hover`, `pressed` states
- Enhanced event handlers: `onClick`, `onMouseEnter`, `onMouseLeave`, `onFocus`, `onBlur`
- All handlers receive `(event, GeographyEventData)` parameters
### ZoomableGroup
Provides zoom and pan functionality with configurable constraints. Supports both simple and advanced APIs.
Zoom and pan with both simple and advanced APIs.
**Simple API (Recommended):**
```tsx
import { ZoomableGroup, createZoomConfig, createPanConfig } from '@vnedyalk0v/react19-simple-maps';
// Easy zoom configuration
<ZoomableGroup
zoom={1}
center={createCoordinates(0, 0)}
{...createZoomConfig(0.5, 8)} // minZoom, maxZoom
>
{/* Content */}
</ZoomableGroup>
// Or use direct props
<ZoomableGroup
zoom={1}
center={createCoordinates(0, 0)}
minZoom={0.5}
maxZoom={8}
enableZoom={true}
>
{/* Content */}
</ZoomableGroup>
```
**Props:**
- `zoom` - Current zoom level
- `center` - Center coordinates
- `minZoom`, `maxZoom` - Zoom level constraints (simple API)
- `enableZoom`, `enablePan` - Enable/disable behaviors (simple API)
- `scaleExtent` - Alternative to minZoom/maxZoom using branded types
- `translateExtent` - Pan boundaries
- `filterZoomEvent` - Custom zoom event filtering
- `onMoveStart`, `onMove`, `onMoveEnd` - Movement event handlers
```tsx
import {
ZoomableGroup,
createCoordinates,
createScaleExtent,
createTranslateExtent,
createZoomConfig,
} from '@vnedyalk0v/react19-simple-maps';
// Approach 1: Using enableZoom/enablePan with explicit constraints
<ZoomableGroup
zoom={1}
center={createCoordinates(0, 0)}
enableZoom={true}
minZoom={0.5}
maxZoom={8}
scaleExtent={createScaleExtent(0.5, 8)}
enablePan={true}
translateExtent={createTranslateExtent(
createCoordinates(-1000, -500),
createCoordinates(1000, 500),
)}
onMoveEnd={(position) => console.log('New position:', position)}
{...createZoomConfig(0.5, 8)}
>
{/* Zoomable content */}
</ZoomableGroup>
// Approach 2: Simplified with just constraints
<ZoomableGroup
zoom={1}
center={createCoordinates(0, 0)}
minZoom={0.5}
maxZoom={8}
translateExtent={createTranslateExtent(
createCoordinates(-1000, -500),
createCoordinates(1000, 500),
)}
>
{/* Zoomable content */}
{/* Content */}
</ZoomableGroup>;
```
### Marker
### Marker & Annotation
Add custom markers to specific coordinates on your map.
Use `Marker` for custom points and `Annotation` for callouts.
**Props:**
- `coordinates` - Geographic coordinates using branded types
- `className` - CSS class name
- Event handlers: `onClick`, `onMouseEnter`, `onMouseLeave`, `onFocus`, `onBlur`
```tsx
import { Marker, createCoordinates } from '@vnedyalk0v/react19-simple-maps';
<Marker coordinates={createCoordinates(-74.006, 40.7128)}>
<circle r={5} fill="#F53" stroke="#fff" strokeWidth={2} />
<text textAnchor="middle" y={-10} style={{ fontSize: '12px' }}>
New York
</text>
</Marker>;
```
### Annotation
Create annotations with connector lines pointing to specific locations.
**Props:**
- `subject` - Target coordinates
- `dx`, `dy` - Offset from subject
- `curve` - Connector curve amount
- `connectorProps` - SVG props for the connector line
```tsx
import { Annotation, createCoordinates } from '@vnedyalk0v/react19-simple-maps';
<Annotation
subject={createCoordinates(-74.006, 40.7128)}
dx={-90}
dy={-30}
connectorProps={{
stroke: '#FF5533',
strokeWidth: 2,
strokeLinecap: 'round',
}}
>
<text textAnchor="end" alignmentBaseline="middle" fill="#F53">
New York City
</text>
</Annotation>;
```
### Additional Components
- **`Line`** - Draw lines between coordinates
- **`Graticule`** - Add coordinate grid lines
- **`Sphere`** - Add map outline/background
- **`GeographyErrorBoundary`** - React 19 error boundary for geography loading
- `Line` - Draw lines between coordinates
- `Graticule` - Add coordinate grid lines
- `Sphere` - Add map outline/background
- `GeographyErrorBoundary` - Explicit error boundary wrapper
- `MapWithMetadata` - Wrapper that renders metadata and a `ComposableMap`
## πŸ“ TypeScript Support
## TypeScript Support
The package includes comprehensive TypeScript definitions with strict typing and branded types for enhanced type safety.
Branded types help prevent coordinate mistakes:
### Branded Types for Coordinates
```tsx

@@ -517,22 +210,12 @@ import {

createLatitude,
createScaleExtent,
createTranslateExtent,
} from '@vnedyalk0v/react19-simple-maps';
// Branded types prevent coordinate mistakes
const longitude = createLongitude(-74.006); // Type: Longitude
const latitude = createLatitude(40.7128); // Type: Latitude
const coordinates = createCoordinates(-74.006, 40.7128); // Type: Coordinates
// Scale and translate extents
const scaleExtent = createScaleExtent(0.5, 8);
const translateExtent = createTranslateExtent(
createCoordinates(-1000, -500),
createCoordinates(1000, 500),
);
const lon = createLongitude(-74.006);
const lat = createLatitude(40.7128);
const coords = createCoordinates(-74.006, 40.7128);
```
### Geography Utilities
## Geography Utilities
Extract geographic data from features for enhanced interactions:
Extract geographic data for interactions and labels:

@@ -544,380 +227,40 @@ ```tsx

getBestGeographyCoordinates,
isValidCoordinates,
} from '@vnedyalk0v/react19-simple-maps';
// Extract centroid for map centering
const centroid = getGeographyCentroid(geography);
if (centroid) {
setMapCenter(centroid);
}
// Get bounding box for zoom-to-fit
const bounds = getGeographyBounds(geography);
if (bounds) {
const [southwest, northeast] = bounds;
// Use bounds for map fitting
}
// Get best available coordinates
const coords = getBestGeographyCoordinates(geography);
```
### Component Props and Event Handlers
## Map Data Sources
```tsx
import type {
ComposableMapProps,
GeographyProps,
GeographyEventData,
MarkerProps,
ProjectionConfig,
Position,
SimpleZoomableGroupProps,
} from '@vnedyalk0v/react19-simple-maps';
import type { Feature, Geometry } from 'geojson';
- [Natural Earth](https://github.com/nvkelso/natural-earth-vector)
- [TopoJSON Collection](https://github.com/deldersveld/topojson)
- [World Atlas](https://github.com/topojson/world-atlas)
- [US Atlas](https://github.com/topojson/us-atlas)
// Typed projection configuration
const projectionConfig: ProjectionConfig = {
scale: 147,
center: createCoordinates(0, 0),
rotate: [0, 0, 0],
};
## Security Utilities
// Enhanced event handlers with geographic data
const handleGeographyClick = (
event: React.MouseEvent,
data: GeographyEventData,
) => {
console.log('Country:', data.geography.properties?.name);
console.log('Centroid:', data.centroid);
if (data.centroid) {
setMapCenter(data.centroid);
}
};
The `./utils` subpath includes helpers for safer geography fetching. When you use URL-based geography data in `Geographies`, the internal fetch path applies URL validation, HTTPS-only defaults, response size checks, and optional SRI validation.
const handleZoomEnd = (position: Position) => {
console.log('New position:', position.coordinates, 'Zoom:', position.zoom);
};
```
## πŸ—ΊοΈ Map Data Sources
The library works with any valid TopoJSON or GeoJSON data, giving you complete flexibility in map visualization.
### Recommended Data Sources
- 🌍 **[Natural Earth](https://github.com/nvkelso/natural-earth-vector)** - High-quality public domain map data at multiple scales
- πŸ—ΊοΈ **[TopoJSON Collection](https://github.com/deldersveld/topojson)** - Ready-to-use TopoJSON files for various regions
- 🌐 **[World Atlas](https://github.com/topojson/world-atlas)** - Comprehensive world and country boundaries
- πŸ“Š **[World Bank Data](https://datahelpdesk.worldbank.org/knowledgebase/articles/902061)** - Official administrative boundaries
- πŸ›οΈ **[US Atlas](https://github.com/topojson/us-atlas)** - Detailed US states, counties, and congressional districts
### Popular Geography URLs
```tsx
// World maps
const worldCountries = 'https://unpkg.com/world-atlas@2/countries-110m.json';
const worldCountriesDetailed = 'https://unpkg.com/world-atlas@2/countries-50m.json';
// US maps
const usStates = 'https://unpkg.com/us-atlas@3/states-10m.json';
const usCounties = 'https://unpkg.com/us-atlas@3/counties-10m.json';
// Usage
<Geographies geography={worldCountries}>
{({ geographies }) => /* render countries */}
</Geographies>
```
### Creating Custom Maps
To create your own TopoJSON maps from shapefiles:
1. **[GDAL/OGR](https://gdal.org/)** - Convert shapefiles to GeoJSON
2. **[TopoJSON CLI](https://github.com/topojson/topojson)** - Convert GeoJSON to TopoJSON
3. **[Mapshaper](https://mapshaper.org/)** - Simplify and optimize map data
**Tutorial:** ["How to convert and prepare TopoJSON files for interactive mapping with d3"](https://hackernoon.com/how-to-convert-and-prepare-topojson-files-for-interactive-mapping-with-d3-499cf0ced5f)
## πŸš€ Advanced Features
### Built-in Projections
The library supports all major d3-geo projections out of the box:
```tsx
// Popular projections
<ComposableMap projection="geoEqualEarth" /> // Equal area, good for world maps
<ComposableMap projection="geoMercator" /> // Web maps standard
<ComposableMap projection="geoNaturalEarth1" /> // Compromise projection
<ComposableMap projection="geoAlbersUsa" /> // US-specific projection
<ComposableMap projection="geoOrthographic" /> // Globe view
```
### Custom Projections
Use any d3-geo projection or create your own:
```tsx
import { geoMercator, geoConicEqualArea } from 'd3-geo';
// Custom Mercator
const customMercator = geoMercator()
.scale(100)
.translate([400, 300])
.rotate([-11, 0]);
// Custom conic projection for specific regions
const customConic = geoConicEqualArea()
.parallels([29.5, 45.5])
.scale(1000)
.translate([480, 250])
.rotate([96, 0]);
<ComposableMap projection={customMercator}>{/* Map content */}</ComposableMap>;
```
### Advanced Zoom and Pan
```tsx
import {
ZoomableGroup,
createCoordinates,
createTranslateExtent,
} from '@vnedyalk0v/react19-simple-maps';
<ZoomableGroup
zoom={2}
center={createCoordinates(-100, 40)}
minZoom={0.5}
maxZoom={10}
translateExtent={createTranslateExtent(
createCoordinates(-2000, -1000),
createCoordinates(2000, 1000),
)}
filterZoomEvent={(event) => !event.ctrlKey} // Disable zoom with Ctrl
onMoveStart={(position, event) => console.log('Move started')}
onMove={(position, event) => console.log('Moving:', position)}
onMoveEnd={(position, event) => console.log('Move ended:', position)}
>
{/* Zoomable content */}
</ZoomableGroup>;
```
## πŸ›‘οΈ Enterprise Security Features
The library includes comprehensive security features designed for production applications.
### Geography Data Security
```tsx
import {
configureGeographySecurity,
enableDevelopmentMode,
DEFAULT_GEOGRAPHY_FETCH_CONFIG,
} from '@vnedyalk0v/react19-simple-maps/utils';
// Default: Strict HTTPS-only mode (recommended for production)
// No configuration needed - secure by default
configureGeographySecurity({
TIMEOUT_MS: 5000,
MAX_RESPONSE_SIZE: 10 * 1024 * 1024,
});
// For development with local geography files:
if (process.env.NODE_ENV === 'development') {
enableDevelopmentMode(true); // Allows HTTP localhost
enableDevelopmentMode(true); // allow HTTP localhost
}
// Custom security configuration:
configureGeographySecurity({
STRICT_HTTPS_ONLY: true, // Force HTTPS only
ALLOW_HTTP_LOCALHOST: false, // Disable HTTP localhost
TIMEOUT_MS: 5000, // 5 second timeout
MAX_RESPONSE_SIZE: 10 * 1024 * 1024, // 10MB max
ALLOWED_CONTENT_TYPES: [
// Restrict content types
'application/json',
'application/geo+json',
],
});
```
### Built-in Security Features
## Debugging
- πŸ”’ **HTTPS-only by default** - Prevents man-in-the-middle attacks
- 🚫 **Private IP blocking** - Prevents SSRF attacks
- ⏱️ **Request timeout protection** - Prevents hanging requests
- πŸ“ **Response size limits** - Prevents memory exhaustion
- πŸ›‘οΈ **Content-Type validation** - Ensures valid geography data
- 🏠 **Configurable localhost access** - Safe development mode
- πŸ” **Subresource Integrity (SRI)** - Tamper-proof external resources
- πŸ›‘οΈ **URL validation** - Prevents malicious URLs
Enable debug logging globally via environment variable or per map:
### Subresource Integrity (SRI)
Protect against tampered external resources with built-in SRI validation:
```tsx
import {
configureSRI,
enableStrictSRI,
addCustomSRI,
generateSRIHash,
generateSRIForUrls,
} from '@vnedyalk0v/react19-simple-maps/utils';
// Enable strict SRI for all external resources
enableStrictSRI();
// Add custom SRI for your geography data
addCustomSRI('https://your-domain.com/data.json', {
algorithm: 'sha384',
hash: 'sha384-your-calculated-hash',
enforceIntegrity: true,
});
// Generate SRI hash for a URL (development utility)
const hash = await generateSRIHash('https://example.com/data.json');
console.log('SRI Hash:', hash);
// Batch generate SRI for multiple URLs
const sriMap = await generateSRIForUrls([
'https://unpkg.com/world-atlas@2/countries-110m.json',
'https://unpkg.com/us-atlas@3/states-10m.json',
]);
```
### React 19 Error Boundaries
Built-in error boundaries for robust geography loading:
```tsx
import { GeographyErrorBoundary } from '@vnedyalk0v/react19-simple-maps';
<GeographyErrorBoundary
fallback={(error, retry) => (
<div>
<p>Failed to load map: {error.message}</p>
<button onClick={retry}>Retry</button>
</div>
)}
onError={(error) => console.error('Geography error:', error)}
>
<Geographies geography="https://example.com/map.json">
{({ geographies }) => /* render geographies */}
</Geographies>
</GeographyErrorBoundary>
```
## 🎨 Styling and Customization
### CSS-in-JS Styling
```tsx
const geographyStyle = {
default: {
fill: '#D6D6DA',
outline: 'none',
stroke: '#FFFFFF',
strokeWidth: 0.5,
},
hover: {
fill: '#F53',
outline: 'none',
cursor: 'pointer',
},
pressed: {
fill: '#E42',
outline: 'none',
},
};
<Geography geography={geo} style={geographyStyle} />;
```
### Conditional Styling
```tsx
const getCountryStyle = (
countryName: string,
selectedCountry: string | null,
) => ({
default: {
fill: selectedCountry === countryName ? '#1976d2' : '#D6D6DA',
outline: 'none',
stroke: '#FFFFFF',
strokeWidth: 0.5,
},
hover: {
fill: selectedCountry === countryName ? '#1565c0' : '#F53',
cursor: 'pointer',
},
});
<Geography
geography={geo}
style={getCountryStyle(geo.properties?.name, selectedCountry)}
/>;
```
### CSS Classes
```tsx
// Use CSS classes for styling
<ComposableMap className="world-map">
<Geographies geography={geoUrl} className="countries">
{({ geographies }) =>
geographies.map((geo) => (
<Geography
key={geo.rsmKey}
geography={geo}
className={`country country-${geo.properties?.iso_a2?.toLowerCase()}`}
/>
))
}
</Geographies>
</ComposableMap>
```
## πŸ”„ Migration from react-simple-maps
This is a complete rewrite focused exclusively on React 19+. **No backward compatibility** with React 18 or earlier versions.
### Key Differences
- **React 19+ Exclusive**: No support for React 18 or earlier
- **Full TypeScript rewrite** with strict typing and zero `any` types
- **React 19 features**: `use` API, enhanced error boundaries, improved Suspense
- **Modern build system**: ESM-only with tree-shaking and source maps
- **Updated dependencies**: Latest D3 versions with security fixes
- **Performance improvements**: Smaller bundle size and better rendering
- **Enhanced security**: Built-in SRI, HTTPS enforcement, and validation
- **Branded types**: Type-safe coordinates and configuration objects
### Migration Steps
1. **Upgrade React**: Ensure you're using React 19.0.0+
2. **Install package**: `npm install @vnedyalk0v/react19-simple-maps`
3. **Update imports**: Change import paths to the new package
4. **Use branded types**: Replace coordinate arrays with `createCoordinates()`
5. **Add error boundaries**: Wrap geography components for better error handling
6. **Update TypeScript**: Use the new comprehensive type definitions
## πŸ› Debugging
The library provides opt-in debugging capabilities to help with development and troubleshooting.
### Debug Mode
By default, the library is **quiet** and produces no console output. You can enable debugging in two ways:
**1. Environment Variable (Global)**
```bash
# Enable debug mode for all maps
REACT_SIMPLE_MAPS_DEBUG=true npm start
# Or in your .env file
REACT_SIMPLE_MAPS_DEBUG=true
```
**2. Component Prop (Per Map)**
```tsx

@@ -927,108 +270,21 @@ <ComposableMap debug={true}>{/* Map content */}</ComposableMap>

### Debug Output
## Development
When enabled, debug mode provides:
- **Component render information** with React 19 Owner Stack
- **Performance metrics** for render times
- **Error context** with detailed stack traces
- **Props and state logging** for troubleshooting
```tsx
// Example debug output in console:
// πŸ—ΊοΈ ComposableMap Render
// Owner Stack: ComposableMap <- App <- Router
// Props: { width: 800, height: 600, projection: "geoEqualEarth" }
```
### Best Practices
- **Production**: Always keep debug disabled (`debug={false}` or omit the prop)
- **Development**: Enable only when needed for troubleshooting
- **CI/CD**: Set `REACT_SIMPLE_MAPS_DEBUG=false` in production environments
## 🀝 Contributing
We welcome contributions! Please see our [Contributing Guide](./CONTRIBUTING.md) for details.
### Development Setup
```bash
# Clone the repository
git clone https://github.com/vnedyalk0v/react19-simple-maps.git
cd react19-simple-maps
# Install dependencies
npm install
# Start development with watch mode
npm run dev
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Type checking
npm run build
npm run test
npm run type-check
# Linting
npm run lint
# Build the package
npm run build
```
### Development Scripts
## Publishing
- `npm run dev` - Start development with watch mode
- `npm run build` - Build ESM output and type definitions
- `npm run test` - Run test suite with Vitest
- `npm run test:watch` - Run tests in watch mode
- `npm run test:ui` - Run tests with UI interface
- `npm run type-check` - TypeScript type checking
- `npm run lint` - ESLint code linting
- `npm run format` - Format code with Prettier
- `npm run analyze` - Bundle size analysis
Changesets is configured for versioning and releases. The GitHub Actions workflow in `.github/workflows/publish.yml` runs on pushes to `main` and publishes to npm (and GitHub Packages) when configured with tokens.
### Publishing
## License
The package uses [Changesets](https://github.com/changesets/changesets) for version management and automated publishing:
- **npm Registry**: Published on main branch merges
- **GitHub Packages**: Also published to GitHub Package Registry
- **Changelog**: Automatically generated from changesets
## πŸ“„ License
MIT licensed. Original work Copyright (c) Richard Zimerman 2017. Fork enhancements Copyright (c) Georgi Nedyalkov 2025. See [LICENSE](./LICENSE) for more details.
## πŸ”— Links & Resources
### Package Distribution
- πŸ“¦ **[npm Package](https://www.npmjs.com/package/@vnedyalk0v/react19-simple-maps)** - Primary distribution
- πŸ“¦ **[GitHub Packages](https://github.com/vnedyalk0v/react19-simple-maps/packages)** - Also available
- πŸ“Š **[Bundle Analysis](https://bundlephobia.com/package/@vnedyalk0v/react19-simple-maps)** - Size and dependencies
### Documentation & Examples
- πŸ“š **[Live Examples](./examples/)** - Interactive demos with source code
- πŸ“ **[Changelog](https://github.com/vnedyalk0v/react19-simple-maps/blob/main/CHANGELOG.md)** - Version history and updates
- πŸ”’ **[Security Guide](./examples/SECURITY.md)** - Security configuration details
### Community & Support
- πŸ› **[Issues](https://github.com/vnedyalk0v/react19-simple-maps/issues)** - Bug reports and feature requests
- πŸ’¬ **[Discussions](https://github.com/vnedyalk0v/react19-simple-maps/discussions)** - Community support and ideas
- πŸ“§ **[Maintainer](mailto:vnedyalk0v@proton.me)** - Direct contact
### Original Project
- 🍴 **[Original react-simple-maps](https://github.com/zcreativelabs/react-simple-maps)** - By Richard Zimerman
- πŸ“– **[Original Documentation](https://www.react-simple-maps.io/)** - Legacy documentation
---
**Built with ❀️ for the React community. Powered by React 19, TypeScript, and modern web standards.**
MIT licensed. Original work Copyright (c) Richard Zimerman 2017.
Fork maintenance Copyright (c) Georgi Nedyalkov 2025.
See [LICENSE](./LICENSE) for details.

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display