@devgateway/dvz-ui-react
Version:
A modular, embeddable React component library for data visualization and UI, built with TypeScript. Provides reusable components for charts, maps, dashboards, and more, with built-in support for internationalization and Redux integration.
173 lines (129 loc) • 4.95 kB
Markdown
# @devgateway/dvz-ui-react
A modular, embeddable React component library for data visualization and UI, built with TypeScript. This package provides a suite of reusable, customizable components and utilities for building rich data-driven applications, with a focus on embeddability and extensibility.
## Features
- **Rich Data Visualization**: Charting, mapping, dashboards, and more, powered by Nivo, D3, and custom components.
- **Embeddable Components**: Easily integrate visualizations and UI modules into your React apps.
- **Customizability**: Register your own components and reducers for extensibility.
- **Internationalization**: Built-in support for `react-intl`.
- **Redux Integration**: Utilities and reducers for state management.
- **TypeScript Support**: Fully typed API and components.
- **Modern Build**: Uses Vite for fast builds and development.
## Installation
```bash
npm install @devgateway/dvz-ui-react
# or
yarn add @devgateway/dvz-ui-react
```
> **Peer dependencies:**
> You must have `react` and `react-dom` (v18.3.1 or compatible) installed in your project.
## Usage
```tsx
import { components, getComponentByNameIgnoreCase } from '@devgateway/dvz-ui-react';
// Example: Render a chart component
const Chart = getComponentByNameIgnoreCase('chart');
<Chart {...props} />
// Or use directly from the components map
const { chart: ChartComponent } = components;
<ChartComponent {...props} />
```
### Usage Example: Chart Component
The `Chart` component is one of the core embeddable components. It supports a wide range of chart types and is highly configurable via props and data attributes.
```tsx
import { getComponentByNameIgnoreCase } from '@devgateway/dvz-ui-react';
const Chart = getComponentByNameIgnoreCase('chart');
// Example usage with minimal props
<Chart
data-type="bar"
data-height={400}
data-csv={`category,value
A,30
B,50
C,20`}
data-measures='{"csv": {"value": {"selected": true, "format": {"style": "decimal", "minimumFractionDigits": 0, "maximumFractionDigits": 0}}}}'
data-color-by="index"
data-show-legends="true"
data-legend-position="right"
data-x-label-color="#333"
data-bar-color="#007bff"
data-title="Sample Bar Chart"
/>
```
**Key Props and Data Attributes:**
- `data-type`: Chart type (`bar`, `line`, `pie`, `radar`, etc.)
- `data-csv`: CSV string with your data
- `data-measures`: JSON string defining which measures to display and their format
- `data-color-by`: How to color the chart (`index`, `category`, etc.)
- `data-show-legends`: Show/hide legends (`"true"`/`"false"`)
- `data-legend-position`: Position of the legend (`"right"`, `"bottom"`, etc.)
- `data-x-label-color`, `data-bar-color`: Color customizations
- `data-height`: Chart height in pixels
> **Tip:** Many more attributes are supported for advanced customization. See the source of `src/embeddable/chart/index.jsx` for the full list.
### Embeddable Components
Some of the main embeddable components include:
- `Chart`
- `MapView`
- `PageGallery`
- `PostsCarousel`
- `TabbedPosts`
- `Download`
- `NewsLetter`
- `SankeyChart`
- `SupersetChart`
- `SupersetDashboard`
- `BigNumber`
- `BigNumberTrend`
- ...and many more!
See the `src/embeddable` directory for the full list.
### Customization
You can register your own custom components and reducers:
```tsx
import { customizer } from '@devgateway/dvz-ui-react';
customizer.registerCustomEmbeddables({
myCustomComponent: MyComponent,
});
const MyComponent = customizer.getComponentByNameIgnoreCase('myCustomComponent');
```
## Directory Structure
- `src/embeddable/` — Main embeddable React components
- `src/redux/` — Redux utilities and reducers
- `src/lib/` — Shared utilities and helpers
- `src/layout/` — Layout components
- `src/tracker/` — Tracking and analytics utilities
- `src/translations/` — Internationalization files
## Development
### Scripts
- `npm run dev` — Start development mode (watch mode for TypeScript and Vite)
- `npm run build` — Build the library for production
### TypeScript
This project uses strict TypeScript settings. See `tsconfig.json` for details.
### Build
The library is built with [Vite](https://vitejs.dev/) and outputs both CommonJS and ES modules, as well as type declarations.
## Contributing
We welcome contributions! To get started:
1. **Clone the repo** and install dependencies:
```bash
git clone <repo-url>
cd data-viz-ui/packages/dvz-ui
npm install
```
2. **Start development mode**:
```bash
npm run dev
```
3. **Build the package**:
```bash
npm run build
```
4. **Lint and check types**:
```bash
npm run lint
npm run typecheck
```
5. **Submit a pull request** with your changes.
### Guidelines
- Use TypeScript for all source files.
- Write clear, descriptive commit messages.
- Add or update documentation and usage examples as needed.
- Ensure all tests and builds pass before submitting.
## License
MIT