@leracherry/chartmd 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,23 +1,9 @@
1
1
  # chart.md
2
2
 
3
- Markdown-native charts for React. Write a chart as a fenced Markdown block and
4
- render it with `react-markdown`; the chart inherits the text colour of the
5
- surrounding document.
6
-
7
- ````md
8
- ```chart
9
- type: bar
10
- title: Sign-ups
11
- x: Month
12
- y: People
13
-
14
- | Month | Free | Pro |
15
- | --- | ---: | ---: |
16
- | Jan | 120 | 32 |
17
- | Feb | 168 | 48 |
18
- | Mar | 210 | 67 |
19
- ```
20
- ````
3
+ Markdown-native charts for React. Write data as a Markdown table and render a
4
+ responsive chart that automatically matches the surrounding document.
5
+
6
+ ![A line chart rendered by chart.md](https://raw.githubusercontent.com/leracherry/chart.md/main/docs/chart-preview.png)
21
7
 
22
8
  ## Install
23
9
 
@@ -25,7 +11,66 @@ y: People
25
11
  npm install @leracherry/chartmd react-markdown
26
12
  ```
27
13
 
28
- ## Use with React Markdown
14
+ React is a peer dependency. No browser charting library is required.
15
+
16
+ ## Appearance
17
+
18
+ Version 0.2 uses thin strokes, small markers, inherited typography and colour,
19
+ and evenly spaced numeric ticks. The chart background is transparent.
20
+
21
+ ### Six line styles
22
+
23
+ Every series receives a matching line and marker in both the plot and legend.
24
+ Styles repeat after six series; there is no hard series limit, but two to six
25
+ series are recommended for readability. Legends wrap into rows of three.
26
+
27
+ ![Six line and marker styles](https://raw.githubusercontent.com/leracherry/chart.md/main/docs/chart-styles.png)
28
+
29
+ 1. Solid line with circles
30
+ 2. Dashed line with squares
31
+ 3. Dotted line with diamonds
32
+ 4. Dash-dot line with triangles
33
+ 5. Long dashes with plus markers
34
+ 6. Short dashes with cross markers
35
+
36
+ ### Optional paper grid
37
+
38
+ Add `grid: paper` inside the chart fence for a faint square grid. The squares
39
+ are decorative; axis labels define the measurement scale. Use `grid: none` for
40
+ an uncluttered plot, or `grid: horizontal` for the default horizontal guides.
41
+
42
+ ![Paper grid](https://raw.githubusercontent.com/leracherry/chart.md/main/docs/chart-paper.png)
43
+
44
+ ![Chart without grid](https://raw.githubusercontent.com/leracherry/chart.md/main/docs/chart-none.png)
45
+
46
+ ### Dark documents
47
+
48
+ The same component follows the document's text colour; no separate chart palette
49
+ or filled chart background is needed.
50
+
51
+ ![Dark document theme](https://raw.githubusercontent.com/leracherry/chart.md/main/docs/chart-dark.png)
52
+
53
+ The previews above are rasterized output from the package's actual React
54
+ component and stylesheet. The white/dark page backgrounds belong to the previews.
55
+
56
+ ## Quick start
57
+
58
+ Write a fenced `chart` block anywhere in your Markdown:
59
+
60
+ ```chart
61
+ type: line
62
+ title: Response time
63
+ x: Release
64
+ y: Milliseconds
65
+
66
+ | Release | API | Worker |
67
+ | --- | ---: | ---: |
68
+ | 1.0 | 182 | 240 |
69
+ | 1.1 | 151 | 205 |
70
+ | 1.2 | 127 | 176 |
71
+ ```
72
+
73
+ Add the plugin and component map to `react-markdown`:
29
74
 
30
75
  ```tsx
31
76
  import Markdown from 'react-markdown';
@@ -41,16 +86,60 @@ export function Article({ source }: { source: string }) {
41
86
  }
42
87
  ```
43
88
 
44
- That is the complete integration. `remarkChart` recognizes fenced `chart`
45
- blocks, validates their contents, and turns them into a chart node.
46
- `chartComponents` tells `react-markdown` how to render that node.
89
+ `remarkChart` parses and validates chart fences. `chartComponents` renders the
90
+ result as accessible, server-renderable SVG.
91
+
92
+ See [examples/chart-page.md](examples/chart-page.md) for a complete Markdown
93
+ page with prose, a chart, and follow-up notes.
94
+
95
+ ## Syntax
96
+
97
+ The first table column supplies the labels. Every remaining column becomes a
98
+ numeric series.
99
+
100
+ | Property | Required | Description |
101
+ | -------- | -------- | ------------------------------------------ |
102
+ | `type` | Yes | `bar` or `line` |
103
+ | `title` | No | Accessible chart title and visible heading |
104
+ | `x` | No | Horizontal-axis label |
105
+ | `y` | No | Vertical-axis label |
106
+ | `grid` | No | `horizontal` (default), `paper`, or `none` |
107
+
108
+ Values may be positive, negative, or zero. Table rows require the same number
109
+ of cells as the header, and series names must be unique. Invalid input fails
110
+ during Markdown processing instead of silently producing a broken chart.
111
+
112
+ Here is a bar chart with two series:
47
113
 
48
- The SVG uses `currentColor`, so a chart automatically follows the Markdown
49
- container in light mode, dark mode, links, embedded docs, and custom themes:
114
+ ```chart
115
+ type: bar
116
+ title: Sign-ups
117
+ x: Month
118
+ y: People
119
+
120
+ | Month | Free | Pro |
121
+ | --- | ---: | ---: |
122
+ | Jan | 120 | 32 |
123
+ | Feb | 168 | 48 |
124
+ | Mar | 210 | 67 |
125
+ ```
126
+
127
+ Both backtick and tilde Markdown fences are supported.
128
+
129
+ ## Theme inheritance
130
+
131
+ Charts use `currentColor`, so they follow the text colour of their Markdown
132
+ container in light mode, dark mode, and custom themes. Multiple series remain
133
+ one-colour and are distinguished with opacity and dash patterns.
50
134
 
51
135
  ```css
52
136
  .markdown-body {
53
137
  color: #24292f;
138
+ --chartmd-color: currentColor;
139
+ --chartmd-grid-opacity: 0.1;
140
+ --chartmd-muted-opacity: 0.8;
141
+ --chartmd-paper-opacity: 0.07;
142
+ --chartmd-line-width: 1.75;
54
143
  }
55
144
 
56
145
  @media (prefers-color-scheme: dark) {
@@ -60,75 +149,68 @@ container in light mode, dark mode, links, embedded docs, and custom themes:
60
149
  }
61
150
  ```
62
151
 
63
- Multiple series remain one-colour: they are distinguished by opacity and line
64
- dash patterns. Optional CSS variables provide finer control without requiring a
65
- chart theme:
66
-
67
- ```css
68
- .markdown-body {
69
- --chartmd-color: currentColor;
70
- --chartmd-grid-opacity: 0.14;
71
- --chartmd-muted-opacity: 0.68;
72
- }
73
- ```
74
-
75
- ## Chart syntax
76
-
77
- `type` is `bar` or `line`. `title`, `x`, and `y` are optional plain-text
78
- properties. The first table column supplies labels; every remaining column is a
79
- numeric series.
80
-
81
- ````md
82
- ```chart
83
- type: line
84
- title: Response time
85
- x: Release
86
- y: Milliseconds
87
-
88
- | Release | API | Worker |
89
- | --- | ---: | ---: |
90
- | 1.0 | 182 | 240 |
91
- | 1.1 | 151 | 205 |
92
- | 1.2 | 127 | 176 |
93
- ```
94
- ````
95
-
96
- Values may be positive, negative, or zero. Tables require a header, a Markdown
97
- separator row, and at least one data row. Invalid charts fail during Markdown
98
- processing with a useful error instead of silently rendering broken output.
152
+ The CSS variables are optional. Importing `@leracherry/chartmd/style.css` is
153
+ enough for the default presentation.
99
154
 
100
155
  ## Direct component use
101
156
 
102
- The parser and component are also public when the Markdown renderer is managed
103
- elsewhere:
157
+ The parser and React component are public when Markdown is handled elsewhere:
104
158
 
105
159
  ```tsx
106
160
  import { Chart, parseChart } from '@leracherry/chartmd';
161
+ import '@leracherry/chartmd/style.css';
107
162
 
108
163
  const definition = parseChart(chartSource);
109
164
  return <Chart definition={definition} />;
110
165
  ```
111
166
 
112
- Public exports:
167
+ Use `locale` and standard `Intl.NumberFormat` options for number presentation:
168
+
169
+ ```tsx
170
+ <Chart
171
+ definition={definition}
172
+ locale="en-GB"
173
+ numberFormat={{ style: 'percent', maximumFractionDigits: 1 }}
174
+ />
175
+ ```
176
+
177
+ Percentage formatting expects fractions (`0.25` becomes `25%`). Accessible
178
+ descriptions retain exact source values. Rendered values must be finite and
179
+ within ±1e12; nonzero magnitudes must be at least 1e-12. Small default values use
180
+ scientific notation. Labels are plain text; Markdown emphasis inside cells is not parsed.
181
+
182
+ ## API
113
183
 
114
- - `remarkChart` — Markdown AST plugin.
184
+ - `remarkChart` — Remark-compatible Markdown AST plugin.
115
185
  - `chartComponents` — component map for `react-markdown`.
116
- - `Chart` — responsive, accessible React SVG component.
117
- - `parseChart` — parser for the fenced block body.
186
+ - `Chart` — responsive and accessible React SVG component.
187
+ - `parseChart` — parser for a chart fence body.
188
+ - `lineStyles` — six built-in dash and marker combinations, in series order.
118
189
  - `ChartDefinition`, `ChartSeries`, and `ChartType` — TypeScript types.
119
190
 
120
- The package has no browser charting dependency and does not use a canvas,
121
- network request, generated image, or client-side effect.
191
+ The renderer uses no canvas, network request, generated image, or client-side
192
+ effect. It works with server rendering and hydration.
122
193
 
123
- ## Development and delivery
194
+ ## Development
124
195
 
125
- The product direction and release milestones live in [ROADMAP.md](ROADMAP.md).
196
+ The product direction and release milestones are documented in
197
+ [ROADMAP.md](ROADMAP.md).
126
198
 
127
199
  ```sh
128
200
  pnpm install
129
201
  pnpm check
130
202
  ```
131
203
 
204
+ Generate previews with the real renderer (PNG conversion requires `rsvg-convert`):
205
+
206
+ ```sh
207
+ pnpm build
208
+ node scripts/render-readme-preview.mjs /tmp/chart.svg paper
209
+ rsvg-convert --width 1440 --background-color white /tmp/chart.svg -o docs/chart-paper.png
210
+ ```
211
+
212
+ Available preview variants: `horizontal`, `paper`, `none`, `styles`, and `dark`.
213
+
132
214
  ## License
133
215
 
134
216
  [MIT](LICENSE)
package/ROADMAP.md CHANGED
@@ -21,6 +21,13 @@ Exit criteria: a consumer can install `@leracherry/chartmd` and
21
21
  `react-markdown`, paste the README example, and render a chart without
22
22
  configuration or another charting library.
23
23
 
24
+ ## 0.2 — Document presentation (implemented)
25
+
26
+ - Six consistent line and marker styles with wrapping legends.
27
+ - Transparent, horizontal-grid, and optional paper-grid presentation.
28
+ - Readable tick intervals, exact accessible values, and locale/number formatting.
29
+ - Rendered documentation images for default, paper, no-grid, dark, and six-series views.
30
+
24
31
  ## Milestone 2 — Markdown ecosystem coverage
25
32
 
26
33
  - Compatibility fixtures for Unified/Remark pipelines beyond `react-markdown`.
@@ -34,7 +41,7 @@ Remark-based React rendering paths.
34
41
  ## Milestone 3 — Custom rendering without theme drift
35
42
 
36
43
  - Component overrides for marks, labels, legends, and tooltips.
37
- - Locale-aware number formatting.
44
+ - Additional formatting hooks for Markdown integrations.
38
45
  - Explicit colour opt-in for teams that need multi-colour series, while keeping
39
46
  one-colour inheritance as the default.
40
47
  - Visual regression suite for light, dark, narrow, and high-contrast layouts.
package/dist/chart.d.ts CHANGED
@@ -1,15 +1,42 @@
1
1
  import { type HTMLAttributes, type SVGProps } from 'react';
2
2
  import type { ChartDefinition } from './types.js';
3
+ export declare const lineStyles: readonly [{
4
+ readonly name: "Solid · circle";
5
+ readonly dash: "";
6
+ readonly shape: "circle";
7
+ }, {
8
+ readonly name: "Dashed · square";
9
+ readonly dash: "7 4";
10
+ readonly shape: "square";
11
+ }, {
12
+ readonly name: "Dotted · diamond";
13
+ readonly dash: "1 4";
14
+ readonly shape: "diamond";
15
+ }, {
16
+ readonly name: "Dash-dot · triangle";
17
+ readonly dash: "8 4 1 4";
18
+ readonly shape: "triangle";
19
+ }, {
20
+ readonly name: "Long dash · plus";
21
+ readonly dash: "12 5";
22
+ readonly shape: "plus";
23
+ }, {
24
+ readonly name: "Short dash · cross";
25
+ readonly dash: "3 3";
26
+ readonly shape: "cross";
27
+ }];
3
28
  export interface ChartProps extends Omit<SVGProps<SVGSVGElement>, 'children'> {
4
29
  definition?: ChartDefinition;
5
30
  'data-chart'?: string;
31
+ locale?: string;
32
+ numberFormat?: Intl.NumberFormatOptions;
6
33
  }
7
- export declare function Chart({ definition: suppliedDefinition, 'data-chart': serializedDefinition, className, style, ...svgProps }: ChartProps): import("react/jsx-runtime").JSX.Element;
34
+ export declare function Chart({ definition: supplied, 'data-chart': serialized, locale, numberFormat, className, style, ...props }: ChartProps): import("react/jsx-runtime").JSX.Element;
8
35
  interface ChartContainerProps extends HTMLAttributes<HTMLDivElement> {
9
36
  node?: unknown;
10
37
  'data-chart'?: string;
11
38
  }
12
- declare function ChartContainer({ node, 'data-chart': serializedDefinition, children, ...props }: ChartContainerProps): import("react/jsx-runtime").JSX.Element;
39
+ declare function ChartContainer({ node, 'data-chart': serialized, children, ...props }: ChartContainerProps): import("react/jsx-runtime").JSX.Element;
13
40
  export declare const chartComponents: {
14
41
  div: typeof ChartContainer;
15
42
  };
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,QAAQ,EACd,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AASlD,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3E,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAwBD,wBAAgB,KAAK,CAAC,EACpB,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,oBAAoB,EAClC,SAAS,EACT,KAAK,EACL,GAAG,QAAQ,EACZ,EAAE,UAAU,2CA+MZ;AA+BD,UAAU,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,iBAAS,cAAc,CAAC,EACtB,IAAI,EACJ,YAAY,EAAE,oBAAoB,EAClC,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAMrB;AAED,eAAO,MAAM,eAAe;;CAE3B,CAAC"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,cAAc,EAAE,KAAK,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;EAOb,CAAC;AACX,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3E,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC;CACzC;AA6DD,wBAAgB,KAAK,CAAC,EACpB,UAAU,EAAE,QAAQ,EACpB,YAAY,EAAE,UAAU,EACxB,MAAa,EACb,YAAY,EACZ,SAAS,EACT,KAAK,EACL,GAAG,KAAK,EACT,EAAE,UAAU,2CA+OZ;AACD,UAAU,mBAAoB,SAAQ,cAAc,CAAC,cAAc,CAAC;IAClE,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AACD,iBAAS,cAAc,CAAC,EACtB,IAAI,EACJ,YAAY,EAAE,UAAU,EACxB,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,mBAAmB,2CAOrB;AACD,eAAO,MAAM,eAAe;;CAA0B,CAAC"}
package/dist/chart.js CHANGED
@@ -1,116 +1,97 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useId, } from 'react';
3
- const width = 720;
4
- const height = 420;
5
- const margin = { top: 54, right: 24, bottom: 76, left: 72 };
6
- const plotWidth = width - margin.left - margin.right;
7
- const plotHeight = height - margin.top - margin.bottom;
8
- const dashPatterns = ['', '8 5', '2 4', '10 4 2 4', '1 4'];
9
- function formatNumber(value) {
10
- return new Intl.NumberFormat('en', {
11
- maximumFractionDigits: 2,
12
- notation: Math.abs(value) >= 10_000 ? 'compact' : 'standard',
13
- }).format(value);
14
- }
15
- function getDomain(definition) {
16
- const values = definition.series.flatMap((series) => series.values);
17
- let minimum = Math.min(0, ...values);
18
- let maximum = Math.max(0, ...values);
19
- if (minimum === maximum)
20
- maximum = minimum + 1;
21
- const padding = (maximum - minimum) * 0.08;
22
- if (minimum < 0)
23
- minimum -= padding;
24
- if (maximum > 0)
25
- maximum += padding;
26
- return [minimum, maximum];
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useId } from 'react';
3
+ export const lineStyles = [
4
+ { name: 'Solid · circle', dash: '', shape: 'circle' },
5
+ { name: 'Dashed · square', dash: '7 4', shape: 'square' },
6
+ { name: 'Dotted · diamond', dash: '1 4', shape: 'diamond' },
7
+ { name: 'Dash-dot · triangle', dash: '8 4 1 4', shape: 'triangle' },
8
+ { name: 'Long dash · plus', dash: '12 5', shape: 'plus' },
9
+ { name: 'Short dash · cross', dash: '3 3', shape: 'cross' },
10
+ ];
11
+ function validate(value) {
12
+ if (!value || typeof value !== 'object')
13
+ throw new Error('Invalid chart definition');
14
+ const d = value;
15
+ if (!['bar', 'line'].includes(d.type) ||
16
+ !Array.isArray(d.labels) ||
17
+ !d.labels.length ||
18
+ !d.labels.every((v) => typeof v === 'string') ||
19
+ !Array.isArray(d.series) ||
20
+ !d.series.length ||
21
+ !d.series.every((s) => s &&
22
+ typeof s.name === 'string' &&
23
+ Array.isArray(s.values) &&
24
+ s.values.length === d.labels.length &&
25
+ s.values.every((v) => Number.isFinite(v) &&
26
+ Math.abs(v) <= 1e12 &&
27
+ (v === 0 || Math.abs(v) >= 1e-12))) ||
28
+ [d.title, d.x, d.y].some((v) => v !== undefined && typeof v !== 'string') ||
29
+ (d.grid !== undefined && !['horizontal', 'paper', 'none'].includes(d.grid)))
30
+ throw new Error('Invalid chart definition');
27
31
  }
28
- function seriesOpacity(index) {
29
- return Math.max(0.38, 0.94 - index * 0.14);
32
+ function Marker({ index, x, y }) {
33
+ const shape = lineStyles[index % 6].shape;
34
+ return (_jsxs("g", { transform: `translate(${x} ${y})`, className: "chartmd__marker", "data-marker": shape, children: [shape === 'circle' && _jsx("circle", { r: "3" }), shape === 'square' && _jsx("rect", { x: "-3", y: "-3", width: "6", height: "6" }), shape === 'diamond' && _jsx("path", { d: "M0 -4 4 0 0 4 -4 0Z" }), shape === 'triangle' && _jsx("path", { d: "M0 -4 4 3 -4 3Z" }), shape === 'plus' && (_jsx("path", { d: "M-4 0H4M0 -4V4", fill: "none", stroke: "currentColor", strokeWidth: "1.5" })), shape === 'cross' && (_jsx("path", { d: "M-3 -3 3 3M-3 3 3 -3", fill: "none", stroke: "currentColor", strokeWidth: "1.5" }))] }));
30
35
  }
31
- export function Chart({ definition: suppliedDefinition, 'data-chart': serializedDefinition, className, style, ...svgProps }) {
32
- const definition = suppliedDefinition ?? parseSerialized(serializedDefinition);
33
- const titleId = `chartmd-title-${useId().replaceAll(':', '')}`;
34
- const descriptionId = `${titleId}-description`;
35
- const [minimum, maximum] = getDomain(definition);
36
- const y = (value) => {
37
- return margin.top + ((maximum - value) / (maximum - minimum)) * plotHeight;
38
- };
39
- const zeroY = y(0);
40
- const categoryWidth = plotWidth / definition.labels.length;
41
- const title = definition.title ?? `${definition.type === 'bar' ? 'Bar' : 'Line'} chart`;
42
- const description = definition.series
43
- .map((series) => {
44
- const values = definition.labels.map((label, index) => `${label}: ${formatNumber(series.values[index] ?? 0)}`);
45
- return `${series.name}. ${values.join(', ')}`;
46
- })
47
- .join('. ');
48
- const mergedStyle = {
49
- color: 'var(--chartmd-color, currentColor)',
50
- ...style,
36
+ export function Chart({ definition: supplied, 'data-chart': serialized, locale = 'en', numberFormat, className, style, ...props }) {
37
+ const definition = supplied ?? JSON.parse(serialized ?? 'null');
38
+ validate(definition);
39
+ const d = definition;
40
+ const id = `chartmd-${useId().replaceAll(':', '')}`;
41
+ const formatter = new Intl.NumberFormat(locale, {
42
+ maximumFractionDigits: 2,
43
+ ...numberFormat,
44
+ });
45
+ const format = (v) => {
46
+ if (!numberFormat && v !== 0 && Math.abs(v) < 0.01) {
47
+ return new Intl.NumberFormat(locale, {
48
+ notation: 'scientific',
49
+ maximumFractionDigits: 2,
50
+ }).format(v);
51
+ }
52
+ return formatter.format(Object.is(v, -0) ? 0 : v);
51
53
  };
52
- return (_jsxs("svg", { ...svgProps, className: ['chartmd', className].filter(Boolean).join(' '), style: mergedStyle, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-labelledby": `${titleId} ${descriptionId}`, xmlns: "http://www.w3.org/2000/svg", children: [_jsx("title", { id: titleId, children: title }), _jsx("desc", { id: descriptionId, children: description }), definition.title && (_jsx("text", { className: "chartmd__title", x: margin.left, y: 25, fontSize: 20, children: definition.title })), Array.from({ length: 5 }, (_, index) => {
53
- const value = minimum + ((maximum - minimum) * index) / 4;
54
- const gridY = y(value);
55
- return (_jsxs("g", { children: [_jsx("line", { className: "chartmd__grid", x1: margin.left, x2: width - margin.right, y1: gridY, y2: gridY, stroke: "currentColor" }), _jsx("text", { className: "chartmd__label", x: margin.left - 10, y: gridY + 4, textAnchor: "end", fontSize: 12, children: formatNumber(value) })] }, index));
56
- }), _jsx("line", { className: "chartmd__axis", x1: margin.left, x2: width - margin.right, y1: zeroY, y2: zeroY, stroke: "currentColor" }), definition.type === 'bar'
57
- ? definition.labels.flatMap((label, labelIndex) => {
58
- const groupWidth = categoryWidth * 0.72;
59
- const barWidth = groupWidth / definition.series.length;
60
- const groupX = margin.left + labelIndex * categoryWidth + categoryWidth * 0.14;
61
- return definition.series.map((series, seriesIndex) => {
62
- const value = series.values[labelIndex] ?? 0;
63
- const valueY = y(value);
64
- return (_jsx("rect", { x: groupX + seriesIndex * barWidth + 1, y: Math.min(zeroY, valueY), width: Math.max(1, barWidth - 2), height: Math.max(1, Math.abs(zeroY - valueY)), fill: "currentColor", opacity: seriesOpacity(seriesIndex), rx: 2, children: _jsx("title", { children: `${label}, ${series.name}: ${formatNumber(value)}` }) }, `${label}-${series.name}`));
65
- });
66
- })
67
- : definition.series.map((series, seriesIndex) => {
68
- const points = series.values
69
- .map((value, index) => {
70
- const x = margin.left + categoryWidth * (index + 0.5);
71
- return `${x},${y(value)}`;
72
- })
73
- .join(' ');
74
- return (_jsxs("g", { opacity: seriesOpacity(seriesIndex), children: [_jsx("polyline", { points: points, fill: "none", stroke: "currentColor", strokeWidth: 3, strokeLinejoin: "round", strokeLinecap: "round", strokeDasharray: dashPatterns[seriesIndex % dashPatterns.length] }), series.values.map((value, index) => {
75
- const label = definition.labels[index] ?? '';
76
- return (_jsx("circle", { cx: margin.left + categoryWidth * (index + 0.5), cy: y(value), r: 4, fill: "currentColor", children: _jsx("title", { children: `${label}, ${series.name}: ${formatNumber(value)}` }) }, label));
77
- })] }, series.name));
78
- }), definition.labels.map((label, index) => (_jsxs("text", { className: "chartmd__label", x: margin.left + categoryWidth * (index + 0.5), y: height - margin.bottom + 22, textAnchor: "middle", fontSize: 12, children: [label.length > 14 ? `${label.slice(0, 13)}…` : label, _jsx("title", { children: label })] }, label))), definition.x && (_jsx("text", { className: "chartmd__label", x: margin.left + plotWidth / 2, y: height - 12, textAnchor: "middle", fontSize: 13, children: definition.x })), definition.y && (_jsx("text", { className: "chartmd__label", transform: `translate(16 ${margin.top + plotHeight / 2}) rotate(-90)`, textAnchor: "middle", fontSize: 13, children: definition.y })), definition.series.length > 1 &&
79
- definition.series.map((series, index) => (_jsxs("g", { transform: `translate(${margin.left + index * 130} ${height - 34})`, opacity: seriesOpacity(index), children: [definition.type === 'bar' ? (_jsx("rect", { width: 16, height: 10, y: -9, rx: 2, fill: "currentColor" })) : (_jsx("line", { x1: 0, x2: 18, y1: -4, y2: -4, stroke: "currentColor", strokeWidth: 3, strokeDasharray: dashPatterns[index % dashPatterns.length] })), _jsx("text", { className: "chartmd__legend", x: 24, fontSize: 12, children: series.name })] }, series.name)))] }));
80
- }
81
- function parseSerialized(value) {
82
- if (!value)
83
- throw new Error('Chart requires a definition');
84
- const parsed = JSON.parse(value);
85
- if (!isChartDefinition(parsed)) {
86
- throw new Error('Chart received an invalid definition');
87
- }
88
- return parsed;
89
- }
90
- function isChartDefinition(value) {
91
- if (!value || typeof value !== 'object')
92
- return false;
93
- const candidate = value;
94
- return ((candidate.type === 'bar' || candidate.type === 'line') &&
95
- Array.isArray(candidate.labels) &&
96
- candidate.labels.every((label) => typeof label === 'string') &&
97
- Array.isArray(candidate.series) &&
98
- candidate.series.length > 0 &&
99
- candidate.series.every((series) => {
100
- return (typeof series?.name === 'string' &&
101
- Array.isArray(series.values) &&
102
- series.values.length === candidate.labels?.length &&
103
- series.values.every(Number.isFinite));
104
- }));
54
+ let low = 0;
55
+ let high = 0;
56
+ for (const s of d.series)
57
+ for (const v of s.values) {
58
+ low = Math.min(low, v);
59
+ high = Math.max(high, v);
60
+ }
61
+ const rough = (high - low || 1) / 5;
62
+ const power = 10 ** Math.floor(Math.log10(rough));
63
+ const step = ([1, 2, 5, 10].find((n) => n * power >= rough) ?? 10) * power;
64
+ low = Math.floor(low / step) * step;
65
+ high = Math.ceil(high / step) * step;
66
+ if (high === low)
67
+ high = low + step;
68
+ const ticks = Array.from({ length: Math.round((high - low) / step) + 1 }, (_, i) => low + i * step);
69
+ const width = 720;
70
+ const left = Math.max(72, Math.min(200, Math.max(...ticks.map((v) => format(v).length)) * 7 + 28));
71
+ const top = d.title ? 52 : 24;
72
+ const bottom = 300;
73
+ const plotWidth = width - left - 24;
74
+ const category = plotWidth / d.labels.length;
75
+ const x = (i) => left + category * (i + 0.5);
76
+ const y = (v) => bottom - ((v - low) / (high - low)) * (bottom - top);
77
+ const legendTop = bottom + (d.x ? 70 : 48);
78
+ const height = legendTop +
79
+ (d.series.length > 1 ? Math.ceil(d.series.length / 3) * 26 : 0) +
80
+ 14;
81
+ const title = d.title ?? `${d.type === 'line' ? 'Line' : 'Bar'} chart`;
82
+ const shorten = (v, length) => v.length > length ? `${v.slice(0, length - 1)}…` : v;
83
+ const stride = Math.max(1, Math.ceil(d.labels.length / 8));
84
+ return (_jsxs("svg", { ...props, className: ['chartmd', className].filter(Boolean).join(' '), style: style, viewBox: `0 0 ${width} ${height}`, role: "img", "aria-labelledby": `${id}-title ${id}-desc`, xmlns: "http://www.w3.org/2000/svg", children: [_jsx("title", { id: `${id}-title`, children: title }), _jsx("desc", { id: `${id}-desc`, children: d.series
85
+ .map((s) => `${s.name}. ${d.labels.map((label, i) => `${label}: ${s.values[i]}`).join(', ')}`)
86
+ .join('. ') }), _jsx("defs", { children: _jsx("pattern", { id: `${id}-paper`, width: "16", height: "16", patternUnits: "userSpaceOnUse", x: left, y: top, children: _jsx("path", { d: "M16 0H0V16", fill: "none", stroke: "currentColor", strokeWidth: "0.5" }) }) }), d.title && (_jsxs("text", { className: "chartmd__title", x: left, y: "24", children: [shorten(d.title, 65), _jsx("title", { children: d.title })] })), d.grid === 'paper' && (_jsx("rect", { className: "chartmd__paper", x: left, y: top, width: plotWidth, height: bottom - top, fill: `url(#${id}-paper)` })), ticks.map((value, i) => (_jsxs("g", { children: [d.grid !== 'none' && (_jsx("line", { className: "chartmd__grid", x1: left, x2: width - 24, y1: y(value), y2: y(value) })), _jsx("text", { className: "chartmd__label chartmd__number", x: left - 10, y: y(value) + 4, textAnchor: "end", children: format(value) })] }, i))), _jsx("line", { className: "chartmd__axis", x1: left, x2: width - 24, y1: y(0), y2: y(0) }), d.series.map((s, si) => (_jsx("g", { children: d.type === 'line' ? (_jsxs(_Fragment, { children: [_jsx("polyline", { className: "chartmd__line", points: s.values.map((v, i) => `${x(i)},${y(v)}`).join(' '), strokeDasharray: lineStyles[si % 6].dash }), s.values.map((v, i) => (_jsxs("g", { children: [_jsx("title", { children: `${d.labels[i]}, ${s.name}: ${format(v)}` }), _jsx(Marker, { index: si, x: x(i), y: y(v) })] }, i)))] })) : (s.values.map((v, i) => {
87
+ const bw = (category * 0.72) / d.series.length;
88
+ return (_jsx("rect", { x: left + category * i + category * 0.14 + bw * si, y: Math.min(y(v), y(0)), width: Math.max(0, bw - 2), height: Math.abs(y(v) - y(0)), fill: "currentColor", opacity: Math.max(0.4, 0.9 - si * 0.1), children: _jsx("title", { children: `${d.labels[i]}, ${s.name}: ${format(v)}` }) }, i));
89
+ })) }, si))), d.labels.map((label, i) => i % stride === 0 && (_jsxs("text", { className: "chartmd__label", x: x(i), y: bottom + 23, textAnchor: "middle", children: [shorten(label, 12), _jsx("title", { children: label })] }, i))), d.x && (_jsx("text", { className: "chartmd__label", x: left + plotWidth / 2, y: bottom + 46, textAnchor: "middle", children: d.x })), d.y && (_jsx("text", { className: "chartmd__label", transform: `translate(16 ${(top + bottom) / 2}) rotate(-90)`, textAnchor: "middle", children: d.y })), d.series.length > 1 &&
90
+ d.series.map((s, si) => (_jsxs("g", { transform: `translate(${left + ((si % 3) * plotWidth) / 3} ${legendTop + Math.floor(si / 3) * 26})`, children: [d.type === 'line' ? (_jsxs(_Fragment, { children: [_jsx("line", { className: "chartmd__line", x1: "0", x2: "28", strokeDasharray: lineStyles[si % 6].dash }), _jsx(Marker, { index: si, x: 14, y: 0 })] })) : (_jsx("rect", { x: "0", y: "-4", width: "24", height: "8", fill: "currentColor", opacity: Math.max(0.4, 0.9 - si * 0.1) })), _jsxs("text", { className: "chartmd__label", x: "38", y: "4", children: [shorten(s.name, 18), _jsx("title", { children: s.name })] })] }, si)))] }));
105
91
  }
106
- function ChartContainer({ node, 'data-chart': serializedDefinition, children, ...props }) {
92
+ function ChartContainer({ node, 'data-chart': serialized, children, ...props }) {
107
93
  void node;
108
- if (serializedDefinition) {
109
- return _jsx(Chart, { "data-chart": serializedDefinition });
110
- }
111
- return _jsx("div", { ...props, children: children });
94
+ return serialized ? (_jsx(Chart, { "data-chart": serialized })) : (_jsx("div", { ...props, children: children }));
112
95
  }
113
- export const chartComponents = {
114
- div: ChartContainer,
115
- };
96
+ export const chartComponents = { div: ChartContainer };
116
97
  //# sourceMappingURL=chart.js.map
package/dist/chart.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,KAAK,GAIN,MAAM,OAAO,CAAC;AAGf,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC5D,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AACrD,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AACvD,MAAM,YAAY,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AAO3D,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;QACjC,qBAAqB,EAAE,CAAC;QACxB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KAC7D,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,UAA2B;IAC5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpE,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACrC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC;IACrC,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,GAAG,OAAO,GAAG,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,OAAO,CAAC;IACpC,IAAI,OAAO,GAAG,CAAC;QAAE,OAAO,IAAI,OAAO,CAAC;IACpC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,aAAa,CAAC,KAAa;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,EACpB,UAAU,EAAE,kBAAkB,EAC9B,YAAY,EAAE,oBAAoB,EAClC,SAAS,EACT,KAAK,EACL,GAAG,QAAQ,EACA;IACX,MAAM,UAAU,GACd,kBAAkB,IAAI,eAAe,CAAC,oBAAoB,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,iBAAiB,KAAK,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;IAC/D,MAAM,aAAa,GAAG,GAAG,OAAO,cAAc,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,CAAC,GAAG,CAAC,KAAa,EAAE,EAAE;QAC1B,OAAO,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC;IAC7E,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACnB,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3D,MAAM,KAAK,GACT,UAAU,CAAC,KAAK,IAAI,GAAG,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC;IAC5E,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM;SAClC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACd,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAClC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CACf,GAAG,KAAK,KAAK,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CACzD,CAAC;QACF,OAAO,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAChD,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;IACd,MAAM,WAAW,GAAG;QAClB,KAAK,EAAE,oCAAoC;QAC3C,GAAG,KAAK;KACQ,CAAC;IAEnB,OAAO,CACL,kBACM,QAAQ,EACZ,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC3D,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,OAAO,KAAK,IAAI,MAAM,EAAE,EACjC,IAAI,EAAC,KAAK,qBACO,GAAG,OAAO,IAAI,aAAa,EAAE,EAC9C,KAAK,EAAC,4BAA4B,aAElC,gBAAO,EAAE,EAAE,OAAO,YAAG,KAAK,GAAS,EACnC,eAAM,EAAE,EAAE,aAAa,YAAG,WAAW,GAAQ,EAE5C,UAAU,CAAC,KAAK,IAAI,CACnB,eAAM,SAAS,EAAC,gBAAgB,EAAC,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,YACjE,UAAU,CAAC,KAAK,GACZ,CACR,EAEA,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE;gBACtC,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;gBACvB,OAAO,CACL,wBACE,eACE,SAAS,EAAC,eAAe,EACzB,EAAE,EAAE,MAAM,CAAC,IAAI,EACf,EAAE,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,EACxB,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,KAAK,EACT,MAAM,EAAC,cAAc,GACrB,EACF,eACE,SAAS,EAAC,gBAAgB,EAC1B,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,EAAE,EACnB,CAAC,EAAE,KAAK,GAAG,CAAC,EACZ,UAAU,EAAC,KAAK,EAChB,QAAQ,EAAE,EAAE,YAEX,YAAY,CAAC,KAAK,CAAC,GACf,KAjBD,KAAK,CAkBT,CACL,CAAC;YACJ,CAAC,CAAC,EAEF,eACE,SAAS,EAAC,eAAe,EACzB,EAAE,EAAE,MAAM,CAAC,IAAI,EACf,EAAE,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,EACxB,EAAE,EAAE,KAAK,EACT,EAAE,EAAE,KAAK,EACT,MAAM,EAAC,cAAc,GACrB,EAED,UAAU,CAAC,IAAI,KAAK,KAAK;gBACxB,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;oBAC9C,MAAM,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;oBACxC,MAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;oBACvD,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,GAAG,UAAU,GAAG,aAAa,GAAG,aAAa,GAAG,IAAI,CAAC;oBAClE,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;wBACnD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;wBAC7C,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;wBACxB,OAAO,CACL,eAEE,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,QAAQ,GAAG,CAAC,EACtC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,EAC1B,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,EAChC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,EAC7C,IAAI,EAAC,cAAc,EACnB,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,EACnC,EAAE,EAAE,CAAC,YAEL,0BAAQ,GAAG,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,GAAS,IAT9D,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,EAAE,CAUzB,CACR,CAAC;oBACJ,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC;gBACJ,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE;oBAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;yBACzB,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;wBACpB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;wBACtD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC5B,CAAC,CAAC;yBACD,IAAI,CAAC,GAAG,CAAC,CAAC;oBACb,OAAO,CACL,aAAqB,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,aACtD,mBACE,MAAM,EAAE,MAAM,EACd,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,cAAc,EAAC,OAAO,EACtB,aAAa,EAAC,OAAO,EACrB,eAAe,EACb,YAAY,CAAC,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,GAEjD,EACD,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gCAClC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gCAC7C,OAAO,CACL,iBAEE,EAAE,EAAE,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,EAC/C,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EACZ,CAAC,EAAE,CAAC,EACJ,IAAI,EAAC,cAAc,YAEnB,0BAAQ,GAAG,KAAK,KAAK,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,GAAS,IAN9D,KAAK,CAOH,CACV,CAAC;4BACJ,CAAC,CAAC,KAzBI,MAAM,CAAC,IAAI,CA0Bf,CACL,CAAC;gBACJ,CAAC,CAAC,EAEL,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CACvC,gBAEE,SAAS,EAAC,gBAAgB,EAC1B,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,aAAa,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,EAC9C,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,EAAE,EAC9B,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,aAEX,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,EACrD,0BAAQ,KAAK,GAAS,KARjB,KAAK,CASL,CACR,CAAC,EAED,UAAU,CAAC,CAAC,IAAI,CACf,eACE,SAAS,EAAC,gBAAgB,EAC1B,CAAC,EAAE,MAAM,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,EAC9B,CAAC,EAAE,MAAM,GAAG,EAAE,EACd,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,YAEX,UAAU,CAAC,CAAC,GACR,CACR,EACA,UAAU,CAAC,CAAC,IAAI,CACf,eACE,SAAS,EAAC,gBAAgB,EAC1B,SAAS,EAAE,gBAAgB,MAAM,CAAC,GAAG,GAAG,UAAU,GAAG,CAAC,eAAe,EACrE,UAAU,EAAC,QAAQ,EACnB,QAAQ,EAAE,EAAE,YAEX,UAAU,CAAC,CAAC,GACR,CACR,EAEA,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBAC3B,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACvC,aAEE,SAAS,EAAE,aAAa,MAAM,CAAC,IAAI,GAAG,KAAK,GAAG,GAAG,IAAI,MAAM,GAAG,EAAE,GAAG,EACnE,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,aAE5B,UAAU,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAC3B,eAAM,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,EAAC,cAAc,GAAG,CAClE,CAAC,CAAC,CAAC,CACF,eACE,EAAE,EAAE,CAAC,EACL,EAAE,EAAE,EAAE,EACN,EAAE,EAAE,CAAC,CAAC,EACN,EAAE,EAAE,CAAC,CAAC,EACN,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,EACd,eAAe,EAAE,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,GAC1D,CACH,EACD,eAAM,SAAS,EAAC,iBAAiB,EAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,YAClD,MAAM,CAAC,IAAI,GACP,KAnBF,MAAM,CAAC,IAAI,CAoBd,CACL,CAAC,IACA,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAyB;IAChD,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,MAAM,SAAS,GAAG,KAAiC,CAAC;IACpD,OAAO,CACL,CAAC,SAAS,CAAC,IAAI,KAAK,KAAK,IAAI,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC;QACvD,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC;QAC5D,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAC3B,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE;YAChC,OAAO,CACL,OAAO,MAAM,EAAE,IAAI,KAAK,QAAQ;gBAChC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC5B,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,MAAM;gBACjD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CACrC,CAAC;QACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAOD,SAAS,cAAc,CAAC,EACtB,IAAI,EACJ,YAAY,EAAE,oBAAoB,EAClC,QAAQ,EACR,GAAG,KAAK,EACY;IACpB,KAAK,IAAI,CAAC;IACV,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO,KAAC,KAAK,kBAAa,oBAAoB,GAAI,CAAC;IACrD,CAAC;IACD,OAAO,iBAAS,KAAK,YAAG,QAAQ,GAAO,CAAC;AAC1C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,GAAG,EAAE,cAAc;CACpB,CAAC"}
1
+ {"version":3,"file":"chart.js","sourceRoot":"","sources":["../src/chart.tsx"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { Chart, chartComponents, type ChartProps } from './chart.js';
1
+ export { Chart, chartComponents, lineStyles, type ChartProps, } from './chart.js';
2
2
  export { parseChart } from './parser.js';
3
3
  export { remarkChart } from './remark.js';
4
4
  export { ChartSyntaxError, type ChartDefinition, type ChartSeries, type ChartType, } from './types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,eAAe,EACf,UAAU,EACV,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,SAAS,GACf,MAAM,YAAY,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Chart, chartComponents } from './chart.js';
1
+ export { Chart, chartComponents, lineStyles, } from './chart.js';
2
2
  export { parseChart } from './parser.js';
3
3
  export { remarkChart } from './remark.js';
4
4
  export { ChartSyntaxError, } from './types.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,gBAAgB,GAIjB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,eAAe,EACf,UAAU,GAEX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,gBAAgB,GAIjB,MAAM,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CA4H1D"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AAiDpB,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAoI1D"}
package/dist/parser.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ChartSyntaxError, } from './types.js';
2
- const metadataKeys = new Set(['type', 'title', 'x', 'y']);
2
+ const metadataKeys = new Set(['type', 'title', 'x', 'y', 'grid']);
3
3
  const separatorCell = /^:?-{3,}:?$/;
4
4
  function splitRow(row, line) {
5
5
  const trimmed = row.trim();
@@ -131,6 +131,12 @@ export function parseChart(source) {
131
131
  definition.x = metadata.x;
132
132
  if (metadata.y)
133
133
  definition.y = metadata.y;
134
+ if (metadata.grid) {
135
+ if (!['horizontal', 'paper', 'none'].includes(metadata.grid)) {
136
+ throw new ChartSyntaxError('grid must be “horizontal”, “paper”, or “none”');
137
+ }
138
+ definition.grid = metadata.grid;
139
+ }
134
140
  return definition;
135
141
  }
136
142
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -8,6 +8,7 @@ export interface ChartDefinition {
8
8
  title?: string;
9
9
  x?: string;
10
10
  y?: string;
11
+ grid?: 'horizontal' | 'paper' | 'none';
11
12
  labels: string[];
12
13
  series: ChartSeries[];
13
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAKvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IAJf,IAAI,SAAsB;gBAGjC,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA;CAIzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,KAAK,GAAG,MAAM,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,GAAG,MAAM,CAAC;IACvC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IAKvC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IAJf,IAAI,SAAsB;gBAGjC,OAAO,EAAE,MAAM,EACN,IAAI,CAAC,EAAE,MAAM,YAAA;CAIzB"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAK9B;IAJF,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACE,OAAe,EACN,IAAa;QAEtB,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAFxD,SAAI,GAAJ,IAAI,CAAS;IAGxB,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAiBA,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAK9B;IAJF,IAAI,GAAG,kBAAkB,CAAC;IAEnC,YACE,OAAe,EACN,IAAa;QAEtB,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC;QAFxD,SAAI,GAAJ,IAAI,CAAS;IAGxB,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leracherry/chartmd",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Markdown-native charts for React, styled by your Markdown theme.",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.17.1",
package/style.css CHANGED
@@ -3,27 +3,44 @@
3
3
  inline-size: 100%;
4
4
  max-inline-size: 100%;
5
5
  block-size: auto;
6
- overflow: visible;
7
6
  color: var(--chartmd-color, currentColor);
8
- font: inherit;
7
+ font-family: inherit;
8
+ background: transparent;
9
+ }
10
+ .chartmd__line {
11
+ fill: none;
12
+ stroke: currentColor;
13
+ stroke-width: var(--chartmd-line-width, 1.75);
14
+ stroke-linejoin: round;
15
+ stroke-linecap: round;
16
+ }
17
+ .chartmd__marker {
18
+ fill: currentColor;
19
+ }
20
+ .chartmd__grid,
21
+ .chartmd__axis {
22
+ stroke: currentColor;
23
+ stroke-width: 0.75;
9
24
  }
10
-
11
25
  .chartmd__grid {
12
- opacity: var(--chartmd-grid-opacity, 0.14);
26
+ opacity: var(--chartmd-grid-opacity, 0.1);
13
27
  }
14
-
15
- .chartmd__axis,
16
- .chartmd__label,
17
- .chartmd__legend,
18
- .chartmd__title {
28
+ .chartmd__axis {
29
+ opacity: 0.35;
30
+ }
31
+ .chartmd__paper {
32
+ opacity: var(--chartmd-paper-opacity, 0.07);
33
+ }
34
+ .chartmd__label {
19
35
  fill: currentColor;
36
+ opacity: var(--chartmd-muted-opacity, 0.8);
37
+ font-size: 12px;
20
38
  }
21
-
22
- .chartmd__label,
23
- .chartmd__legend {
24
- opacity: var(--chartmd-muted-opacity, 0.68);
39
+ .chartmd__number {
40
+ font-variant-numeric: tabular-nums;
25
41
  }
26
-
27
42
  .chartmd__title {
28
- font-weight: 600;
43
+ fill: currentColor;
44
+ font-size: 17px;
45
+ font-weight: 500;
29
46
  }