UNPKG

@dschz/solid-highcharts

Version:
369 lines (274 loc) โ€ข 10.6 kB
<p align="center"> <img width="100%" src="https://assets.solidjs.com/banner?type=Ecosystem&background=tiles&project=solid-highcharts" alt="solid-highcharts"> </p> # @dschz/solid-highcharts [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Highcharts](https://img.shields.io/badge/highcharts-12.0.0+-orange?style=flat-square)](https://github.com/highcharts/highcharts) [![npm version](https://img.shields.io/npm/v/@dschz/solid-highcharts?color=blue)](https://www.npmjs.com/package/@dschz/solid-highcharts) [![Bundle Size](https://img.shields.io/bundlephobia/minzip/@dschz/solid-highcharts)](https://bundlephobia.com/package/@dschz/solid-highcharts) [![JSR](https://jsr.io/badges/@dschz/solid-highcharts/score)](https://jsr.io/@dschz/solid-highcharts) [![CI](https://github.com/dsnchz/solid-highcharts/actions/workflows/ci.yaml/badge.svg)](https://github.com/dsnchz/solid-highcharts/actions/workflows/ci.yaml) [![Discord](https://img.shields.io/badge/Discord-%235865F2.svg?logo=discord&logoColor=white)](https://discord.gg/yVBGJfTfQy) A comprehensive SolidJS wrapper for [Highcharts](https://www.highcharts.com/) that provides type-safe, reactive chart components with proper lifecycle management. ## โœจ Features - ๐ŸŽฏ **Type-Safe**: Full TypeScript support with proper type inference - โšก **Reactive**: Seamless integration with SolidJS reactivity system - ๐Ÿ—๏ธ **Modular**: Support for all Highcharts variants (Core, Stock, Maps, Gantt) - ๐Ÿงน **Clean**: Automatic cleanup and memory management - ๐Ÿ“ฑ **Responsive**: Built-in responsive chart behavior - ๐ŸŽจ **Customizable**: Full access to Highcharts configuration options ## โš–๏ธ Licensing **Important**: This wrapper library (`@dschz/solid-highcharts`) is MIT licensed, but **Highcharts itself is a commercial product** that requires a license for most use cases. ### Highcharts Licensing - ๐Ÿข **Commercial Use**: Requires a [Highcharts license](https://shop.highcharts.com/) for commercial projects - ๐ŸŽ“ **Non-Commercial**: Free for personal projects, school websites, and non-profit organizations - ๐Ÿงช **Evaluation**: Free for testing and evaluation purposes ### License Requirements by Use Case | Use Case | Highcharts License Required | | -------------------------------- | --------------------------- | | Personal/hobby projects | โŒ **Free** | | Educational/school websites | โŒ **Free** | | Non-profit organizations | โŒ **Free** | | Commercial websites/applications | โœ… **License Required** | | SaaS products | โœ… **License Required** | | Products for sale | โœ… **License Required** | ๐Ÿ“‹ **Before using Highcharts in your project**, please review the [official Highcharts license terms](https://www.highcharts.com/products/highcharts/#non-commercial) to determine if you need to purchase a license. This wrapper library simply provides SolidJS integration - all Highcharts licensing terms apply to your usage of the underlying Highcharts library. ## ๐Ÿ“ฆ Installation ```bash # Using npm npm install highcharts @dschz/solid-highcharts # Using yarn yarn install highcharts @dschz/solid-highcharts # Using pnpm pnpm install highcharts @dschz/solid-highcharts # Using bun bun install highcharts @dschz/solid-highcharts ``` ### Highcharts Module Usage All Highcharts functionality is available from the single `highcharts` package via different import paths. **โš ๏ธ Important: Import order matters!** Highcharts modules must be imported after the core module. **๐Ÿ“ฆ Highcharts v12+**: As of Highcharts version 12, you should use ESM import paths for better compatibility and tree-shaking. The examples below show the recommended ESM imports. ```tsx // Core Highcharts (standard charts) - ESM import import Highcharts from "highcharts/esm/highcharts"; // Stock Charts (financial/time-series data) - ESM import import HighchartsStock from "highcharts/esm/highstock"; // Maps (geographical data) - ESM import import HighchartsMaps from "highcharts/esm/highmaps"; // Gantt Charts (project timelines) - ESM import import HighchartsGantt from "highcharts/esm/highcharts-gantt"; // Additional modules (optional) -- ORDER MATTERS! MUST BE IMPORTED AFTER Highcharts IMPORT! import "highcharts/esm/modules/accessibility"; import "highcharts/esm/modules/exporting"; import "highcharts/esm/modules/export-data"; ``` See this [post](https://www.highcharts.com/docs/getting-started/version-12) for more details. **Legacy UMD imports** (pre-v12) are still supported but ESM is recommended: ```tsx // Legacy UMD imports (still works but not recommended) import Highcharts from "highcharts"; import HighchartsStock from "highcharts/highstock"; import HighchartsMaps from "highcharts/highmaps"; import HighchartsGantt from "highcharts/highcharts-gantt"; // Additional modules (optional) -- ORDER MATTERS! MUST BE IMPORTED AFTER Highcharts IMPORT! import "highcharts/modules/accessibility"; import "highcharts/modules/exporting"; import "highcharts/modules/export-data"; ``` ### API Quick Start This library exposes four factory functions that create the Highcharts components to use in your Solid application. #### Basic Chart ```tsx import Highcharts from "highcharts/esm/highcharts"; import { createChart } from "@dschz/solid-highcharts"; // Highcharts Chart component const Chart = createChart(Highcharts); ``` #### Stock Chart ```tsx // To create a StockChart import Highcharts from "highcharts/esm/highstock"; import { createStockChart } from "@dschz/solid-highcharts"; // Highcharts StockChart component const StockChart = createStockChart(Highcharts); ``` #### Map Chart ```tsx // To create a MapChart import Highcharts from "highcharts/esm/highmaps"; import { createMapChart } from "@dschz/solid-highcharts"; // Highcharts MapChart component const MapChart = createMapChart(Highcharts); ``` #### Gantt Chart ```tsx // To create a GanttChart import Highcharts from "highcharts/esm/highcharts-gantt"; import { createGanttChart } from "@dschz/solid-highcharts"; // Highcharts GanttChart component const GanttChart = createGanttChart(Highcharts); ``` #### Accessibility / Exporting Modules For additional modules like `exporting` and `accessibility`, you simply import them to register with Highcharts: ```tsx import Highcharts from "highcharts/esm/highcharts"; import "highcharts/esm/modules/accessibility"; import "highcharts/esm/modules/exporting"; import "highcharts/esm/modules/export-data"; import { createChart } from "@dschz/solid-highcharts"; const Chart = createChart(Highcharts); ``` **Note**: You may need to disable import sorting rules (like `simple-import-sort` or Prettier) for these imports to prevent automatic reordering that would break functionality as the additional modules must be imported **AFTER** the target Highcharts module import. ## ๐Ÿ”ง Component Props All chart components returned from the factory functions accept the same props interface: ```tsx type HighchartOptions = Highcharts.Options & { animation?: boolean | Partial<AnimationOptionsObject>; }; type HighchartsComponentProps = HighchartOptions & { /** CSS class for container */ class?: string; /** CSS styles for container */ style?: JSX.CSSProperties; /** Access to container element */ ref?: (container: HTMLDivElement) => void; /** Callback when chart is created */ onCreateChart?: (chart: Highcharts.Chart) => void; }; ``` ### Props Examples ```tsx // Basic styling <Chart class="my-chart" style={{ height: '400px', border: '1px solid #ccc' }} title={{ text: 'Styled Chart' }} series={[{ type: 'line', data: [1, 2, 3] }]} /> // Chart reference and callbacks <Chart ref={(container) => console.log('Container:', container)} onCreateChart={(chart) => { // Access chart instance chart.setTitle({ text: 'Updated Title' }); // Add custom event listeners chart.container.addEventListener('click', () => { console.log('Chart clicked!'); }); }} series={[{ type: 'line', data: [1, 2, 3] }]} /> ``` ## ๐ŸŽจ Styling and Theming ### CSS Styling All charts have a default `solid-highcharts` class that you can use for global styling: ```css /* Global chart styles */ .solid-highcharts { border-radius: 8px; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); background: #ffffff; } /* Dark mode support */ .dark .solid-highcharts { background: #1a1a1a; border-color: #333; } /* Custom chart class */ .my-chart { background: #f5f5f5; padding: 16px; } /* Responsive behavior */ .chart-responsive { width: 100%; height: 400px; min-height: 300px; } @media (max-width: 768px) { .chart-responsive { height: 300px; } } ``` You can combine the base class with your custom classes: ```tsx <Chart class="my-chart chart-responsive" title={{ text: "Styled Chart" }} series={[{ type: "line", data: [1, 2, 3] }]} /> ``` ### Highcharts Theming ```tsx import Highcharts from "highcharts/esm/highcharts"; import { createChart } from "@dschz/solid-highcharts"; // Apply global theme Highcharts.setOptions({ colors: ["#058DC7", "#50B432", "#ED561B", "#DDDF00"], chart: { backgroundColor: "#f9f9f9", style: { fontFamily: "Inter, sans-serif", }, }, title: { style: { color: "#333", fontSize: "18px", }, }, }); const Chart = createChart(Highcharts); ``` ### Framework Integration The base class works well with CSS frameworks: ```css /* Tailwind-like utilities */ .solid-highcharts { @apply rounded-lg shadow-md bg-white dark:bg-gray-800; } /* CSS Modules */ .chart { composes: solid-highcharts; /* Additional styles */ } ``` ## ๐Ÿ“ˆ Performance Tips ### 1. Use Chart Boost for Large Datasets ```tsx import Highcharts from "highcharts/esm/highcharts"; import "highcharts/esm/modules/boost"; <Chart boost={{ useGPUTranslations: true, seriesThreshold: 50, }} series={[ { type: "line", data: largeDataset, // 1000+ points boostThreshold: 100, }, ]} />; ``` ## ๐Ÿค Contributing All contributions are welcome! Please see our [Contributing Guide](CONTRIBUTING.md) for details. ### Development Setup ```bash # Clone the repository git clone https://github.com/dsnchz/solid-highcharts.git cd solid-highcharts # Install dependencies bun install # Run tests bun test # Build the library bun run build # Start development server bun start ``` ## ๐Ÿ“„ License MIT ยฉ [Daniel Sanchez](https://github.com/dsnchz)