@misoto22/design 0.5.0 → 0.6.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 +124 -0
- package/bin/misoto22-design.mjs +205 -0
- package/dist/agent/Accordion.md +41 -0
- package/dist/agent/Alert.md +42 -0
- package/dist/agent/AppShell.md +40 -0
- package/dist/agent/AreaChart.md +68 -0
- package/dist/agent/Article.md +41 -0
- package/dist/agent/Avatar.md +32 -0
- package/dist/agent/Badge.md +40 -0
- package/dist/agent/BarChart.md +65 -0
- package/dist/agent/BarList.md +40 -0
- package/dist/agent/BigNumber.md +45 -0
- package/dist/agent/BoxPlot.md +58 -0
- package/dist/agent/Breadcrumb.md +32 -0
- package/dist/agent/BulletChart.md +48 -0
- package/dist/agent/Button.md +56 -0
- package/dist/agent/Calendar.md +42 -0
- package/dist/agent/Card.md +49 -0
- package/dist/agent/Checkbox.md +35 -0
- package/dist/agent/Collapsible.md +46 -0
- package/dist/agent/Combobox.md +50 -0
- package/dist/agent/Command.md +93 -0
- package/dist/agent/ComposedChart.md +57 -0
- package/dist/agent/ContextMenu.md +59 -0
- package/dist/agent/DatePicker.md +75 -0
- package/dist/agent/Diagram.md +46 -0
- package/dist/agent/Dialog.md +52 -0
- package/dist/agent/DropdownMenu.md +70 -0
- package/dist/agent/EmptyState.md +37 -0
- package/dist/agent/ErrorState.md +41 -0
- package/dist/agent/Facet.md +82 -0
- package/dist/agent/Field.md +37 -0
- package/dist/agent/FigureBand.md +37 -0
- package/dist/agent/FloatingIconButton.md +38 -0
- package/dist/agent/FunnelChart.md +52 -0
- package/dist/agent/Heatmap.md +53 -0
- package/dist/agent/Histogram.md +63 -0
- package/dist/agent/Input.md +30 -0
- package/dist/agent/Kbd.md +29 -0
- package/dist/agent/LineChart.md +60 -0
- package/dist/agent/LinkArrow.md +29 -0
- package/dist/agent/NativeSelect.md +40 -0
- package/dist/agent/NavItem.md +35 -0
- package/dist/agent/Pagination.md +43 -0
- package/dist/agent/PieChart.md +55 -0
- package/dist/agent/Popover.md +57 -0
- package/dist/agent/Progress.md +33 -0
- package/dist/agent/RadarChart.md +54 -0
- package/dist/agent/RadialChart.md +57 -0
- package/dist/agent/RadioGroup.md +44 -0
- package/dist/agent/SankeyChart.md +61 -0
- package/dist/agent/ScatterChart.md +54 -0
- package/dist/agent/ScrollArea.md +40 -0
- package/dist/agent/SearchableMenu.md +46 -0
- package/dist/agent/Select.md +75 -0
- package/dist/agent/Separator.md +35 -0
- package/dist/agent/Sheet.md +57 -0
- package/dist/agent/Skeleton.md +73 -0
- package/dist/agent/Slider.md +39 -0
- package/dist/agent/Sparkline.md +45 -0
- package/dist/agent/Spinner.md +39 -0
- package/dist/agent/StatusDot.md +36 -0
- package/dist/agent/StatusPill.md +28 -0
- package/dist/agent/Steps.md +44 -0
- package/dist/agent/Switch.md +29 -0
- package/dist/agent/Table.md +85 -0
- package/dist/agent/Tabs.md +48 -0
- package/dist/agent/Tag.md +35 -0
- package/dist/agent/Textarea.md +26 -0
- package/dist/agent/Toast.md +26 -0
- package/dist/agent/ToggleGroup.md +44 -0
- package/dist/agent/Tooltip.md +51 -0
- package/dist/agent/TreemapChart.md +52 -0
- package/dist/agent/WaterfallChart.md +62 -0
- package/dist/agent/catalog.json +1791 -0
- package/dist/agent/index.md +131 -0
- package/dist/charts/AreaChart/AreaChart.d.ts +191 -0
- package/dist/charts/AreaChart/AreaChart.js +480 -0
- package/dist/charts/AreaChart/AreaChart.js.map +1 -0
- package/dist/charts/BarChart/BarChart.d.ts +179 -0
- package/dist/charts/BarChart/BarChart.js +591 -0
- package/dist/charts/BarChart/BarChart.js.map +1 -0
- package/dist/charts/BarList/BarList.d.ts +57 -0
- package/dist/charts/BarList/BarList.js +71 -0
- package/dist/charts/BarList/BarList.js.map +1 -0
- package/dist/charts/BigNumber/BigNumber.d.ts +56 -0
- package/dist/charts/BigNumber/BigNumber.js +31 -0
- package/dist/charts/BigNumber/BigNumber.js.map +1 -0
- package/dist/charts/BoxPlot/BoxPlot.d.ts +177 -0
- package/dist/charts/BoxPlot/BoxPlot.js +495 -0
- package/dist/charts/BoxPlot/BoxPlot.js.map +1 -0
- package/dist/charts/BulletChart/BulletChart.d.ts +100 -0
- package/dist/charts/BulletChart/BulletChart.js +162 -0
- package/dist/charts/BulletChart/BulletChart.js.map +1 -0
- package/dist/charts/ComposedChart/ComposedChart.d.ts +171 -0
- package/dist/charts/ComposedChart/ComposedChart.js +667 -0
- package/dist/charts/ComposedChart/ComposedChart.js.map +1 -0
- package/dist/charts/Facet/Facet.d.ts +240 -0
- package/dist/charts/Facet/Facet.js +133 -0
- package/dist/charts/Facet/Facet.js.map +1 -0
- package/dist/charts/Facet/panels.d.ts +187 -0
- package/dist/charts/Facet/panels.js +203 -0
- package/dist/charts/Facet/panels.js.map +1 -0
- package/dist/charts/FunnelChart/FunnelChart.d.ts +101 -0
- package/dist/charts/FunnelChart/FunnelChart.js +147 -0
- package/dist/charts/FunnelChart/FunnelChart.js.map +1 -0
- package/dist/charts/Heatmap/Heatmap.d.ts +78 -0
- package/dist/charts/Heatmap/Heatmap.js +108 -0
- package/dist/charts/Heatmap/Heatmap.js.map +1 -0
- package/dist/charts/Histogram/Histogram.d.ts +165 -0
- package/dist/charts/Histogram/Histogram.js +350 -0
- package/dist/charts/Histogram/Histogram.js.map +1 -0
- package/dist/charts/LineChart/LineChart.d.ts +167 -0
- package/dist/charts/LineChart/LineChart.js +486 -0
- package/dist/charts/LineChart/LineChart.js.map +1 -0
- package/dist/charts/PieChart/PieChart.d.ts +128 -0
- package/dist/charts/PieChart/PieChart.js +309 -0
- package/dist/charts/PieChart/PieChart.js.map +1 -0
- package/dist/charts/RadarChart/RadarChart.d.ts +123 -0
- package/dist/charts/RadarChart/RadarChart.js +299 -0
- package/dist/charts/RadarChart/RadarChart.js.map +1 -0
- package/dist/charts/RadialChart/RadialChart.d.ts +124 -0
- package/dist/charts/RadialChart/RadialChart.js +257 -0
- package/dist/charts/RadialChart/RadialChart.js.map +1 -0
- package/dist/charts/SankeyChart/SankeyChart.d.ts +137 -0
- package/dist/charts/SankeyChart/SankeyChart.js +501 -0
- package/dist/charts/SankeyChart/SankeyChart.js.map +1 -0
- package/dist/charts/ScatterChart/ScatterChart.d.ts +128 -0
- package/dist/charts/ScatterChart/ScatterChart.js +269 -0
- package/dist/charts/ScatterChart/ScatterChart.js.map +1 -0
- package/dist/charts/Sparkline/Sparkline.d.ts +53 -0
- package/dist/charts/Sparkline/Sparkline.js +93 -0
- package/dist/charts/Sparkline/Sparkline.js.map +1 -0
- package/dist/charts/TreemapChart/TreemapChart.d.ts +93 -0
- package/dist/charts/TreemapChart/TreemapChart.js +118 -0
- package/dist/charts/TreemapChart/TreemapChart.js.map +1 -0
- package/dist/charts/WaterfallChart/WaterfallChart.d.ts +164 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js +319 -0
- package/dist/charts/WaterfallChart/WaterfallChart.js.map +1 -0
- package/dist/charts/index.d.ts +41 -0
- package/dist/charts/index.js +128 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/lib/annotations.d.ts +103 -0
- package/dist/charts/lib/annotations.js +99 -0
- package/dist/charts/lib/annotations.js.map +1 -0
- package/dist/charts/lib/axis.d.ts +18 -0
- package/dist/charts/lib/axis.js +21 -0
- package/dist/charts/lib/axis.js.map +1 -0
- package/dist/charts/lib/background.d.ts +33 -0
- package/dist/charts/lib/background.js +173 -0
- package/dist/charts/lib/background.js.map +1 -0
- package/dist/charts/lib/brush.d.ts +94 -0
- package/dist/charts/lib/brush.js +535 -0
- package/dist/charts/lib/brush.js.map +1 -0
- package/dist/charts/lib/chart.d.ts +94 -0
- package/dist/charts/lib/chart.js +134 -0
- package/dist/charts/lib/chart.js.map +1 -0
- package/dist/charts/lib/dot.d.ts +29 -0
- package/dist/charts/lib/dot.js +78 -0
- package/dist/charts/lib/dot.js.map +1 -0
- package/dist/charts/lib/empty.d.ts +31 -0
- package/dist/charts/lib/empty.js +13 -0
- package/dist/charts/lib/empty.js.map +1 -0
- package/dist/charts/lib/export.d.ts +103 -0
- package/dist/charts/lib/export.js +204 -0
- package/dist/charts/lib/export.js.map +1 -0
- package/dist/charts/lib/figure.d.ts +61 -0
- package/dist/charts/lib/figure.js +59 -0
- package/dist/charts/lib/figure.js.map +1 -0
- package/dist/charts/lib/format.d.ts +46 -0
- package/dist/charts/lib/format.js +56 -0
- package/dist/charts/lib/format.js.map +1 -0
- package/dist/charts/lib/legend.d.ts +45 -0
- package/dist/charts/lib/legend.js +117 -0
- package/dist/charts/lib/legend.js.map +1 -0
- package/dist/charts/lib/loading.d.ts +48 -0
- package/dist/charts/lib/loading.js +105 -0
- package/dist/charts/lib/loading.js.map +1 -0
- package/dist/charts/lib/paint.d.ts +154 -0
- package/dist/charts/lib/paint.js +551 -0
- package/dist/charts/lib/paint.js.map +1 -0
- package/dist/charts/lib/sonify-control.d.ts +163 -0
- package/dist/charts/lib/sonify-control.js +172 -0
- package/dist/charts/lib/sonify-control.js.map +1 -0
- package/dist/charts/lib/sonify.d.ts +248 -0
- package/dist/charts/lib/sonify.js +262 -0
- package/dist/charts/lib/sonify.js.map +1 -0
- package/dist/charts/lib/toolbar.d.ts +143 -0
- package/dist/charts/lib/toolbar.js +156 -0
- package/dist/charts/lib/toolbar.js.map +1 -0
- package/dist/charts/lib/tooltip.d.ts +59 -0
- package/dist/charts/lib/tooltip.js +135 -0
- package/dist/charts/lib/tooltip.js.map +1 -0
- package/dist/charts/lib/values.d.ts +56 -0
- package/dist/charts/lib/values.js +71 -0
- package/dist/charts/lib/values.js.map +1 -0
- package/dist/charts/lib/zoom.d.ts +139 -0
- package/dist/charts/lib/zoom.js +314 -0
- package/dist/charts/lib/zoom.js.map +1 -0
- package/dist/semantic.css +19 -0
- package/dist/styles.css +1 -1
- package/dist/themes.css +50 -0
- package/dist/tokens.css +118 -0
- package/dist/tokens.d.ts +17 -0
- package/dist/tokens.js +101 -0
- package/dist/tokens.json +101 -0
- package/package.json +26 -4
- package/skills/misoto22-design/SKILL.md +171 -0
- package/skills/misoto22-design/evals/claims.json +95 -0
- package/skills/misoto22-design/rules/a11y.md +115 -0
- package/skills/misoto22-design/rules/composition.md +108 -0
- package/skills/misoto22-design/rules/forms.md +128 -0
- package/skills/misoto22-design/rules/naming.md +155 -0
- package/skills/misoto22-design/rules/tokens.md +131 -0
|
@@ -0,0 +1,551 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { motion } from "motion/react";
|
|
4
|
+
import { colorStops } from "./chart.js";
|
|
5
|
+
const REVEAL_DURATION = 1;
|
|
6
|
+
const REVEAL_EASE = [0, 0.7, 0.5, 1];
|
|
7
|
+
const REVEAL_ORIGIN = {
|
|
8
|
+
forward: 0,
|
|
9
|
+
reverse: 1,
|
|
10
|
+
"center-out": 0.5
|
|
11
|
+
};
|
|
12
|
+
function RevealMask({ id, type }) {
|
|
13
|
+
const reveal = {
|
|
14
|
+
initial: { scaleX: 0 },
|
|
15
|
+
animate: { scaleX: 1 },
|
|
16
|
+
transition: { duration: REVEAL_DURATION, ease: REVEAL_EASE }
|
|
17
|
+
};
|
|
18
|
+
return /* @__PURE__ */ jsx(
|
|
19
|
+
"mask",
|
|
20
|
+
{
|
|
21
|
+
id: `${id}-reveal-mask`,
|
|
22
|
+
maskUnits: "userSpaceOnUse",
|
|
23
|
+
maskContentUnits: "userSpaceOnUse",
|
|
24
|
+
x: "0",
|
|
25
|
+
y: "0",
|
|
26
|
+
width: "100%",
|
|
27
|
+
height: "100%",
|
|
28
|
+
children: type === "edges-in" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
29
|
+
/* @__PURE__ */ jsx(
|
|
30
|
+
motion.rect,
|
|
31
|
+
{
|
|
32
|
+
...reveal,
|
|
33
|
+
x: "0",
|
|
34
|
+
y: "0",
|
|
35
|
+
width: "50%",
|
|
36
|
+
height: "100%",
|
|
37
|
+
fill: "white",
|
|
38
|
+
style: { originX: 0 }
|
|
39
|
+
}
|
|
40
|
+
),
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
motion.rect,
|
|
43
|
+
{
|
|
44
|
+
...reveal,
|
|
45
|
+
x: "50%",
|
|
46
|
+
y: "0",
|
|
47
|
+
width: "50%",
|
|
48
|
+
height: "100%",
|
|
49
|
+
fill: "white",
|
|
50
|
+
style: { originX: 1 }
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
] }) : /* @__PURE__ */ jsx(
|
|
54
|
+
motion.rect,
|
|
55
|
+
{
|
|
56
|
+
...reveal,
|
|
57
|
+
x: "0",
|
|
58
|
+
y: "0",
|
|
59
|
+
width: "100%",
|
|
60
|
+
height: "100%",
|
|
61
|
+
fill: "white",
|
|
62
|
+
style: { originX: REVEAL_ORIGIN[type] }
|
|
63
|
+
}
|
|
64
|
+
)
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function SeriesGradient({
|
|
69
|
+
id,
|
|
70
|
+
dataKey,
|
|
71
|
+
config,
|
|
72
|
+
direction = "horizontal",
|
|
73
|
+
gradientUnits
|
|
74
|
+
}) {
|
|
75
|
+
const stops = colorStops(config[dataKey]);
|
|
76
|
+
const axis = direction === "vertical" ? { x1: "0", y1: "0", x2: "0", y2: "1" } : { x1: "0", y1: "0", x2: "1", y2: "0" };
|
|
77
|
+
return /* @__PURE__ */ jsx("linearGradient", { id: `${id}-colors-${dataKey}`, ...axis, gradientUnits, children: /* @__PURE__ */ jsx(ColorStops, { dataKey, stops }) });
|
|
78
|
+
}
|
|
79
|
+
function ColorStops({
|
|
80
|
+
dataKey,
|
|
81
|
+
stops,
|
|
82
|
+
opacities
|
|
83
|
+
}) {
|
|
84
|
+
if (stops === 1) {
|
|
85
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
86
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: `var(--color-${dataKey}-0)`, stopOpacity: opacities?.[0] }),
|
|
87
|
+
/* @__PURE__ */ jsx(
|
|
88
|
+
"stop",
|
|
89
|
+
{
|
|
90
|
+
offset: "100%",
|
|
91
|
+
stopColor: `var(--color-${dataKey}-0)`,
|
|
92
|
+
stopOpacity: opacities?.[opacities.length - 1]
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
] });
|
|
96
|
+
}
|
|
97
|
+
return /* @__PURE__ */ jsx(Fragment, { children: Array.from({ length: stops }, (_, index) => {
|
|
98
|
+
const offset = `${index / (stops - 1) * 100}%`;
|
|
99
|
+
return /* @__PURE__ */ jsx(
|
|
100
|
+
"stop",
|
|
101
|
+
{
|
|
102
|
+
offset,
|
|
103
|
+
stopColor: `var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`,
|
|
104
|
+
stopOpacity: opacities?.[index]
|
|
105
|
+
},
|
|
106
|
+
offset
|
|
107
|
+
);
|
|
108
|
+
}) });
|
|
109
|
+
}
|
|
110
|
+
function MaskedFill({
|
|
111
|
+
name,
|
|
112
|
+
id,
|
|
113
|
+
dataKey,
|
|
114
|
+
texture,
|
|
115
|
+
patternUnits = "userSpaceOnUse",
|
|
116
|
+
patternContentUnits,
|
|
117
|
+
size = { width: "100%", height: "100%" },
|
|
118
|
+
maskContentUnits,
|
|
119
|
+
fill
|
|
120
|
+
}) {
|
|
121
|
+
const maskId = `${id}-${name}-mask-${dataKey}`;
|
|
122
|
+
const paint = fill ?? `url(#${id}-colors-${dataKey})`;
|
|
123
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
124
|
+
/* @__PURE__ */ jsx("mask", { id: maskId, maskContentUnits, children: texture }),
|
|
125
|
+
/* @__PURE__ */ jsx(
|
|
126
|
+
"pattern",
|
|
127
|
+
{
|
|
128
|
+
id: `${id}-${name}-${dataKey}`,
|
|
129
|
+
patternUnits,
|
|
130
|
+
patternContentUnits,
|
|
131
|
+
width: size.width,
|
|
132
|
+
height: size.height,
|
|
133
|
+
children: /* @__PURE__ */ jsx(
|
|
134
|
+
"rect",
|
|
135
|
+
{
|
|
136
|
+
x: "0",
|
|
137
|
+
y: "0",
|
|
138
|
+
width: size.width,
|
|
139
|
+
height: size.height,
|
|
140
|
+
fill: paint,
|
|
141
|
+
mask: `url(#${maskId})`
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
] });
|
|
147
|
+
}
|
|
148
|
+
function AreaGradientFill({ id, dataKey }) {
|
|
149
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
150
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}-area-gradient-fade-${dataKey}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
151
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "var(--chart-fill)" }),
|
|
152
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: 0 })
|
|
153
|
+
] }),
|
|
154
|
+
/* @__PURE__ */ jsx(
|
|
155
|
+
MaskedFill,
|
|
156
|
+
{
|
|
157
|
+
name: "gradient",
|
|
158
|
+
id,
|
|
159
|
+
dataKey,
|
|
160
|
+
texture: /* @__PURE__ */ jsx(
|
|
161
|
+
"rect",
|
|
162
|
+
{
|
|
163
|
+
width: "100%",
|
|
164
|
+
height: "100%",
|
|
165
|
+
fill: `url(#${id}-area-gradient-fade-${dataKey})`
|
|
166
|
+
}
|
|
167
|
+
)
|
|
168
|
+
}
|
|
169
|
+
)
|
|
170
|
+
] });
|
|
171
|
+
}
|
|
172
|
+
function AreaGradientReverseFill({ id, dataKey }) {
|
|
173
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
174
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}-area-reverse-fade-${dataKey}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
175
|
+
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: 0 }),
|
|
176
|
+
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "var(--chart-fill)" })
|
|
177
|
+
] }),
|
|
178
|
+
/* @__PURE__ */ jsx(
|
|
179
|
+
MaskedFill,
|
|
180
|
+
{
|
|
181
|
+
name: "gradient-reverse",
|
|
182
|
+
id,
|
|
183
|
+
dataKey,
|
|
184
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id}-area-reverse-fade-${dataKey})` })
|
|
185
|
+
}
|
|
186
|
+
)
|
|
187
|
+
] });
|
|
188
|
+
}
|
|
189
|
+
function AreaSolidFill({ id, dataKey }) {
|
|
190
|
+
return /* @__PURE__ */ jsx(
|
|
191
|
+
MaskedFill,
|
|
192
|
+
{
|
|
193
|
+
name: "solid",
|
|
194
|
+
id,
|
|
195
|
+
dataKey,
|
|
196
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "white", fillOpacity: "var(--chart-fill)" })
|
|
197
|
+
}
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
function AreaDottedFill({ id, dataKey }) {
|
|
201
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
202
|
+
/* @__PURE__ */ jsx(
|
|
203
|
+
"pattern",
|
|
204
|
+
{
|
|
205
|
+
id: `${id}-area-dotted-texture-${dataKey}`,
|
|
206
|
+
x: "0",
|
|
207
|
+
y: "0",
|
|
208
|
+
width: "6",
|
|
209
|
+
height: "6",
|
|
210
|
+
patternUnits: "userSpaceOnUse",
|
|
211
|
+
children: /* @__PURE__ */ jsx("circle", { cx: "4", cy: "4", r: "0.5", fill: "white" })
|
|
212
|
+
}
|
|
213
|
+
),
|
|
214
|
+
/* @__PURE__ */ jsx(
|
|
215
|
+
MaskedFill,
|
|
216
|
+
{
|
|
217
|
+
name: "dotted",
|
|
218
|
+
id,
|
|
219
|
+
dataKey,
|
|
220
|
+
texture: /* @__PURE__ */ jsx(
|
|
221
|
+
"rect",
|
|
222
|
+
{
|
|
223
|
+
width: "100%",
|
|
224
|
+
height: "100%",
|
|
225
|
+
fill: `url(#${id}-area-dotted-texture-${dataKey})`,
|
|
226
|
+
fillOpacity: "var(--chart-texture)"
|
|
227
|
+
}
|
|
228
|
+
)
|
|
229
|
+
}
|
|
230
|
+
)
|
|
231
|
+
] });
|
|
232
|
+
}
|
|
233
|
+
function AreaLinesFill({ id, dataKey }) {
|
|
234
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
235
|
+
/* @__PURE__ */ jsx(
|
|
236
|
+
"pattern",
|
|
237
|
+
{
|
|
238
|
+
id: `${id}-area-lines-texture-${dataKey}`,
|
|
239
|
+
patternUnits: "userSpaceOnUse",
|
|
240
|
+
width: "5",
|
|
241
|
+
height: "5",
|
|
242
|
+
patternTransform: "rotate(45)",
|
|
243
|
+
children: /* @__PURE__ */ jsx("line", { x1: "0", y1: "0", x2: "0", y2: "5", stroke: "white", strokeWidth: "1" })
|
|
244
|
+
}
|
|
245
|
+
),
|
|
246
|
+
/* @__PURE__ */ jsx(
|
|
247
|
+
MaskedFill,
|
|
248
|
+
{
|
|
249
|
+
name: "lines",
|
|
250
|
+
id,
|
|
251
|
+
dataKey,
|
|
252
|
+
texture: /* @__PURE__ */ jsx(
|
|
253
|
+
"rect",
|
|
254
|
+
{
|
|
255
|
+
width: "100%",
|
|
256
|
+
height: "100%",
|
|
257
|
+
fill: `url(#${id}-area-lines-texture-${dataKey})`,
|
|
258
|
+
fillOpacity: "var(--chart-texture)"
|
|
259
|
+
}
|
|
260
|
+
)
|
|
261
|
+
}
|
|
262
|
+
)
|
|
263
|
+
] });
|
|
264
|
+
}
|
|
265
|
+
function AreaHatchedFill({ id, dataKey }) {
|
|
266
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
267
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}-area-hatched-stripe-${dataKey}`, x1: "0", y1: "0", x2: "1", y2: "0", children: [
|
|
268
|
+
/* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: 0.2 }),
|
|
269
|
+
/* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: 1 })
|
|
270
|
+
] }),
|
|
271
|
+
/* @__PURE__ */ jsx(
|
|
272
|
+
"pattern",
|
|
273
|
+
{
|
|
274
|
+
id: `${id}-area-hatched-texture-${dataKey}`,
|
|
275
|
+
x: "0",
|
|
276
|
+
y: "0",
|
|
277
|
+
width: "20",
|
|
278
|
+
height: "10",
|
|
279
|
+
patternUnits: "userSpaceOnUse",
|
|
280
|
+
overflow: "visible",
|
|
281
|
+
patternTransform: "rotate(20)",
|
|
282
|
+
children: /* @__PURE__ */ jsx("rect", { width: "20", height: "10", fill: `url(#${id}-area-hatched-stripe-${dataKey})` })
|
|
283
|
+
}
|
|
284
|
+
),
|
|
285
|
+
/* @__PURE__ */ jsx(
|
|
286
|
+
MaskedFill,
|
|
287
|
+
{
|
|
288
|
+
name: "hatched",
|
|
289
|
+
id,
|
|
290
|
+
dataKey,
|
|
291
|
+
texture: /* @__PURE__ */ jsx(
|
|
292
|
+
"rect",
|
|
293
|
+
{
|
|
294
|
+
width: "100%",
|
|
295
|
+
height: "100%",
|
|
296
|
+
fill: `url(#${id}-area-hatched-texture-${dataKey})`,
|
|
297
|
+
fillOpacity: "var(--chart-texture)"
|
|
298
|
+
}
|
|
299
|
+
)
|
|
300
|
+
}
|
|
301
|
+
)
|
|
302
|
+
] });
|
|
303
|
+
}
|
|
304
|
+
function UnselectedFill({ id, dataKey }) {
|
|
305
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
306
|
+
/* @__PURE__ */ jsx(
|
|
307
|
+
"pattern",
|
|
308
|
+
{
|
|
309
|
+
id: `${id}-unselected-texture-${dataKey}`,
|
|
310
|
+
patternUnits: "userSpaceOnUse",
|
|
311
|
+
width: "5",
|
|
312
|
+
height: "5",
|
|
313
|
+
patternTransform: "rotate(45)",
|
|
314
|
+
children: /* @__PURE__ */ jsx("line", { x1: "0", y1: "0", x2: "0", y2: "5", stroke: "white", strokeWidth: "1" })
|
|
315
|
+
}
|
|
316
|
+
),
|
|
317
|
+
/* @__PURE__ */ jsx(
|
|
318
|
+
MaskedFill,
|
|
319
|
+
{
|
|
320
|
+
name: "unselected",
|
|
321
|
+
id,
|
|
322
|
+
dataKey,
|
|
323
|
+
texture: /* @__PURE__ */ jsx(
|
|
324
|
+
"rect",
|
|
325
|
+
{
|
|
326
|
+
width: "100%",
|
|
327
|
+
height: "100%",
|
|
328
|
+
fill: `url(#${id}-unselected-texture-${dataKey})`,
|
|
329
|
+
fillOpacity: "var(--chart-texture)"
|
|
330
|
+
}
|
|
331
|
+
)
|
|
332
|
+
}
|
|
333
|
+
)
|
|
334
|
+
] });
|
|
335
|
+
}
|
|
336
|
+
function BarHatchedFill({ id, dataKey }) {
|
|
337
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
338
|
+
/* @__PURE__ */ jsxs(
|
|
339
|
+
"pattern",
|
|
340
|
+
{
|
|
341
|
+
id: `${id}-bar-hatched-texture-${dataKey}`,
|
|
342
|
+
x: "0",
|
|
343
|
+
y: "0",
|
|
344
|
+
width: "5",
|
|
345
|
+
height: "5",
|
|
346
|
+
patternUnits: "userSpaceOnUse",
|
|
347
|
+
patternTransform: "rotate(-45)",
|
|
348
|
+
children: [
|
|
349
|
+
/* @__PURE__ */ jsx("rect", { width: "5", height: "5", fill: "white", fillOpacity: 0.3 }),
|
|
350
|
+
/* @__PURE__ */ jsx("rect", { width: "1.5", height: "5", fill: "white", fillOpacity: 1 })
|
|
351
|
+
]
|
|
352
|
+
}
|
|
353
|
+
),
|
|
354
|
+
/* @__PURE__ */ jsx(
|
|
355
|
+
MaskedFill,
|
|
356
|
+
{
|
|
357
|
+
name: "hatched",
|
|
358
|
+
id,
|
|
359
|
+
dataKey,
|
|
360
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id}-bar-hatched-texture-${dataKey})` })
|
|
361
|
+
}
|
|
362
|
+
)
|
|
363
|
+
] });
|
|
364
|
+
}
|
|
365
|
+
function BarBufferFill({ id, dataKey }) {
|
|
366
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
367
|
+
/* @__PURE__ */ jsxs(
|
|
368
|
+
"pattern",
|
|
369
|
+
{
|
|
370
|
+
id: `${id}-bar-buffer-texture-${dataKey}`,
|
|
371
|
+
x: "0",
|
|
372
|
+
y: "0",
|
|
373
|
+
width: "5",
|
|
374
|
+
height: "5",
|
|
375
|
+
patternUnits: "userSpaceOnUse",
|
|
376
|
+
patternTransform: "rotate(-45)",
|
|
377
|
+
children: [
|
|
378
|
+
/* @__PURE__ */ jsx("rect", { width: "5", height: "5", fill: "black", fillOpacity: 0 }),
|
|
379
|
+
/* @__PURE__ */ jsx("rect", { width: "1", height: "5", fill: "white", fillOpacity: 1 })
|
|
380
|
+
]
|
|
381
|
+
}
|
|
382
|
+
),
|
|
383
|
+
/* @__PURE__ */ jsx(
|
|
384
|
+
MaskedFill,
|
|
385
|
+
{
|
|
386
|
+
name: "buffer",
|
|
387
|
+
id,
|
|
388
|
+
dataKey,
|
|
389
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id}-bar-buffer-texture-${dataKey})` })
|
|
390
|
+
}
|
|
391
|
+
)
|
|
392
|
+
] });
|
|
393
|
+
}
|
|
394
|
+
function BarDuotoneFill({
|
|
395
|
+
id,
|
|
396
|
+
dataKey,
|
|
397
|
+
config,
|
|
398
|
+
reverse = false
|
|
399
|
+
}) {
|
|
400
|
+
const name = reverse ? "duotone-reverse" : "duotone";
|
|
401
|
+
const stops = colorStops(config[dataKey]);
|
|
402
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
403
|
+
/* @__PURE__ */ jsxs(
|
|
404
|
+
"linearGradient",
|
|
405
|
+
{
|
|
406
|
+
id: `${id}-${name}-split-${dataKey}`,
|
|
407
|
+
gradientUnits: "objectBoundingBox",
|
|
408
|
+
x1: "0",
|
|
409
|
+
y1: "0",
|
|
410
|
+
x2: "1",
|
|
411
|
+
y2: "0",
|
|
412
|
+
children: [
|
|
413
|
+
/* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: reverse ? 1 : 0.4 }),
|
|
414
|
+
/* @__PURE__ */ jsx("stop", { offset: "50%", stopColor: "white", stopOpacity: reverse ? 0.4 : 1 })
|
|
415
|
+
]
|
|
416
|
+
}
|
|
417
|
+
),
|
|
418
|
+
/* @__PURE__ */ jsx(
|
|
419
|
+
"linearGradient",
|
|
420
|
+
{
|
|
421
|
+
id: `${id}-${name}-colors-${dataKey}`,
|
|
422
|
+
gradientUnits: "objectBoundingBox",
|
|
423
|
+
x1: "0",
|
|
424
|
+
y1: "0",
|
|
425
|
+
x2: "0",
|
|
426
|
+
y2: "1",
|
|
427
|
+
children: /* @__PURE__ */ jsx(ColorStops, { dataKey, stops })
|
|
428
|
+
}
|
|
429
|
+
),
|
|
430
|
+
/* @__PURE__ */ jsx(
|
|
431
|
+
MaskedFill,
|
|
432
|
+
{
|
|
433
|
+
name,
|
|
434
|
+
id,
|
|
435
|
+
dataKey,
|
|
436
|
+
patternUnits: "objectBoundingBox",
|
|
437
|
+
patternContentUnits: "objectBoundingBox",
|
|
438
|
+
maskContentUnits: "objectBoundingBox",
|
|
439
|
+
size: { width: 1, height: 1 },
|
|
440
|
+
fill: `url(#${id}-${name}-colors-${dataKey})`,
|
|
441
|
+
texture: /* @__PURE__ */ jsx(
|
|
442
|
+
"rect",
|
|
443
|
+
{
|
|
444
|
+
x: "0",
|
|
445
|
+
y: "0",
|
|
446
|
+
width: "1",
|
|
447
|
+
height: "1",
|
|
448
|
+
fill: `url(#${id}-${name}-split-${dataKey})`
|
|
449
|
+
}
|
|
450
|
+
)
|
|
451
|
+
}
|
|
452
|
+
)
|
|
453
|
+
] });
|
|
454
|
+
}
|
|
455
|
+
function BarGradientFill({ id, dataKey }) {
|
|
456
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
457
|
+
/* @__PURE__ */ jsxs("linearGradient", { id: `${id}-bar-gradient-fade-${dataKey}`, x1: "0", y1: "0", x2: "0", y2: "1", children: [
|
|
458
|
+
/* @__PURE__ */ jsx("stop", { offset: "20%", stopColor: "white", stopOpacity: 1 }),
|
|
459
|
+
/* @__PURE__ */ jsx("stop", { offset: "90%", stopColor: "white", stopOpacity: 0 })
|
|
460
|
+
] }),
|
|
461
|
+
/* @__PURE__ */ jsx(
|
|
462
|
+
MaskedFill,
|
|
463
|
+
{
|
|
464
|
+
name: "gradient",
|
|
465
|
+
id,
|
|
466
|
+
dataKey,
|
|
467
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${id}-bar-gradient-fade-${dataKey})` })
|
|
468
|
+
}
|
|
469
|
+
)
|
|
470
|
+
] });
|
|
471
|
+
}
|
|
472
|
+
function BarStrippedFill({ id, dataKey }) {
|
|
473
|
+
return /* @__PURE__ */ jsx(
|
|
474
|
+
MaskedFill,
|
|
475
|
+
{
|
|
476
|
+
name: "stripped",
|
|
477
|
+
id,
|
|
478
|
+
dataKey,
|
|
479
|
+
texture: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: "white", fillOpacity: "var(--chart-fill)" })
|
|
480
|
+
}
|
|
481
|
+
);
|
|
482
|
+
}
|
|
483
|
+
function GlowFilter({
|
|
484
|
+
id,
|
|
485
|
+
dataKey,
|
|
486
|
+
spread = 8,
|
|
487
|
+
intensity = 0.5
|
|
488
|
+
}) {
|
|
489
|
+
return /* @__PURE__ */ jsxs("filter", { id: `${id}-glow-${dataKey}`, x: "-100%", y: "-100%", width: "300%", height: "300%", children: [
|
|
490
|
+
/* @__PURE__ */ jsx("feGaussianBlur", { in: "SourceGraphic", stdDeviation: spread, result: "blur" }),
|
|
491
|
+
/* @__PURE__ */ jsx(
|
|
492
|
+
"feColorMatrix",
|
|
493
|
+
{
|
|
494
|
+
in: "blur",
|
|
495
|
+
type: "matrix",
|
|
496
|
+
values: `1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ${intensity} 0`,
|
|
497
|
+
result: "glow"
|
|
498
|
+
}
|
|
499
|
+
),
|
|
500
|
+
/* @__PURE__ */ jsxs("feMerge", { children: [
|
|
501
|
+
/* @__PURE__ */ jsx("feMergeNode", { in: "glow" }),
|
|
502
|
+
/* @__PURE__ */ jsx("feMergeNode", { in: "SourceGraphic" })
|
|
503
|
+
] })
|
|
504
|
+
] });
|
|
505
|
+
}
|
|
506
|
+
function AnimatedDashedStroke({ dash = 3 }) {
|
|
507
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
508
|
+
/* @__PURE__ */ jsx(
|
|
509
|
+
"animate",
|
|
510
|
+
{
|
|
511
|
+
attributeName: "stroke-dasharray",
|
|
512
|
+
values: `${dash} ${dash}; 0 ${dash}; ${dash} ${dash}`,
|
|
513
|
+
dur: "1s",
|
|
514
|
+
repeatCount: "indefinite",
|
|
515
|
+
keyTimes: "0;0.5;1"
|
|
516
|
+
}
|
|
517
|
+
),
|
|
518
|
+
/* @__PURE__ */ jsx(
|
|
519
|
+
"animate",
|
|
520
|
+
{
|
|
521
|
+
attributeName: "stroke-dashoffset",
|
|
522
|
+
values: `0; -${dash * 2}`,
|
|
523
|
+
dur: "1s",
|
|
524
|
+
repeatCount: "indefinite",
|
|
525
|
+
keyTimes: "0;1"
|
|
526
|
+
}
|
|
527
|
+
)
|
|
528
|
+
] });
|
|
529
|
+
}
|
|
530
|
+
export {
|
|
531
|
+
AnimatedDashedStroke,
|
|
532
|
+
AreaDottedFill,
|
|
533
|
+
AreaGradientFill,
|
|
534
|
+
AreaGradientReverseFill,
|
|
535
|
+
AreaHatchedFill,
|
|
536
|
+
AreaLinesFill,
|
|
537
|
+
AreaSolidFill,
|
|
538
|
+
BarBufferFill,
|
|
539
|
+
BarDuotoneFill,
|
|
540
|
+
BarGradientFill,
|
|
541
|
+
BarHatchedFill,
|
|
542
|
+
BarStrippedFill,
|
|
543
|
+
ColorStops,
|
|
544
|
+
GlowFilter,
|
|
545
|
+
REVEAL_DURATION,
|
|
546
|
+
REVEAL_EASE,
|
|
547
|
+
RevealMask,
|
|
548
|
+
SeriesGradient,
|
|
549
|
+
UnselectedFill
|
|
550
|
+
};
|
|
551
|
+
//# sourceMappingURL=paint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/charts/lib/paint.tsx"],"sourcesContent":["'use client'\n\nimport type { ReactNode } from 'react'\nimport { motion } from 'motion/react'\nimport type { ChartConfig } from './chart'\nimport { colorStops } from './chart'\n\n/**\n * The intro wipe's direction, shared by every mark that has one.\n *\n * Named for the DATA rather than for the screen. `forward` runs from the first\n * row to the last, `reverse` the other way — which is the thing the author\n * actually means, and stays true in a right-to-left document, where a cartesian\n * plot is still drawn first-row-first.\n *\n * `\"none\"` opts out, and is also what a device with the OS reduce-motion\n * preference falls back to: a reveal is a per-frame animated SVG mask, the\n * heaviest thing in the package and the least welcome to a reader who has\n * asked for stillness.\n */\nexport type ChartRevealType = 'none' | 'forward' | 'reverse' | 'center-out' | 'edges-in'\n\n/** A reveal that actually plays. */\nexport type ChartRevealDirection = Exclude<ChartRevealType, 'none'>\n\n/** The intro wipe, in seconds. */\nexport const REVEAL_DURATION = 1\n\n/**\n * The wipe's curve. Not `--ease`: the system's easing is tuned for a control\n * moving a few pixels, and over a full plot width it arrives too abruptly.\n * A long, flat tail is what makes a line read as being drawn.\n */\nexport const REVEAL_EASE: [number, number, number, number] = [0, 0.7, 0.5, 1]\n\n/** The edge a single-rect wipe grows from: 0 the start, 1 the end, 0.5 the middle. */\nconst REVEAL_ORIGIN: Record<Exclude<ChartRevealDirection, 'edges-in'>, number> = {\n forward: 0,\n reverse: 1,\n 'center-out': 0.5,\n}\n\n/**\n * The mask that draws a line or an area in.\n *\n * One mask covers the mark's fill, its stroke AND its resting dots, so the\n * three arrive together. Drawn separately — which is what Recharts' own\n * animation does — the dots pop in before the line reaches them.\n *\n * Both `maskUnits` and `maskContentUnits` are user space so every masked\n * element shares one coordinate system and the wipe edge lands at the same x\n * on each of them.\n */\nexport function RevealMask({ id, type }: { id: string; type: ChartRevealDirection }) {\n const reveal = {\n initial: { scaleX: 0 },\n animate: { scaleX: 1 },\n transition: { duration: REVEAL_DURATION, ease: REVEAL_EASE },\n }\n\n return (\n <mask\n id={`${id}-reveal-mask`}\n maskUnits=\"userSpaceOnUse\"\n maskContentUnits=\"userSpaceOnUse\"\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n >\n {type === 'edges-in' ? (\n <>\n <motion.rect\n {...reveal}\n x=\"0\"\n y=\"0\"\n width=\"50%\"\n height=\"100%\"\n fill=\"white\"\n style={{ originX: 0 }}\n />\n <motion.rect\n {...reveal}\n x=\"50%\"\n y=\"0\"\n width=\"50%\"\n height=\"100%\"\n fill=\"white\"\n style={{ originX: 1 }}\n />\n </>\n ) : (\n <motion.rect\n {...reveal}\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"white\"\n style={{ originX: REVEAL_ORIGIN[type] }}\n />\n )}\n </mask>\n )\n}\n\nexport interface PaintProps {\n /** The owning mark's id, which scopes every definition below. */\n id: string\n /** The series being painted. */\n dataKey: string\n}\n\n/**\n * The one gradient everything else is masked out of.\n *\n * Every fill variant, every stroke and every dot in a chart paints from this,\n * which is what makes a series a single visual object rather than a set of\n * elements that happen to share a colour. A series with one colour still gets a\n * two-stop gradient: it keeps the paint reference identical across variants, so\n * switching a series from one colour to three changes no other code.\n */\nexport function SeriesGradient({\n id,\n dataKey,\n config,\n direction = 'horizontal',\n gradientUnits,\n}: PaintProps & {\n config: ChartConfig\n /** Horizontal reads along the axis; vertical reads up the mark. */\n direction?: 'horizontal' | 'vertical'\n gradientUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n}) {\n const stops = colorStops(config[dataKey])\n const axis =\n direction === 'vertical'\n ? { x1: '0', y1: '0', x2: '0', y2: '1' }\n : { x1: '0', y1: '0', x2: '1', y2: '0' }\n\n return (\n <linearGradient id={`${id}-colors-${dataKey}`} {...axis} gradientUnits={gradientUnits}>\n <ColorStops dataKey={dataKey} stops={stops} />\n </linearGradient>\n )\n}\n\n/**\n * The stops themselves, so a variant can build its own gradient from them.\n *\n * `opacities` ramps the stops independently of their colour — a radar's fill\n * fades from its centre outward without needing a second gradient to mask it.\n */\nexport function ColorStops({\n dataKey,\n stops,\n opacities,\n}: {\n dataKey: string\n stops: number\n opacities?: number[]\n}) {\n if (stops === 1) {\n return (\n <>\n <stop offset=\"0%\" stopColor={`var(--color-${dataKey}-0)`} stopOpacity={opacities?.[0]} />\n <stop\n offset=\"100%\"\n stopColor={`var(--color-${dataKey}-0)`}\n stopOpacity={opacities?.[opacities.length - 1]}\n />\n </>\n )\n }\n\n return (\n <>\n {Array.from({ length: stops }, (_, index) => {\n const offset = `${(index / (stops - 1)) * 100}%`\n return (\n <stop\n key={offset}\n offset={offset}\n stopColor={`var(--color-${dataKey}-${index}, var(--color-${dataKey}-0))`}\n stopOpacity={opacities?.[index]}\n />\n )\n })}\n </>\n )\n}\n\n/**\n * A texture, expressed once.\n *\n * Every fill variant in the package has the same three parts: a texture, a mask\n * built from it, and a pattern that paints the series gradient through that\n * mask. Writing those three out per variant — which is how this arrived — meant\n * six near-identical twenty-line blocks per chart type and four chart types\n * that each had their own copy.\n */\nfunction MaskedFill({\n name,\n id,\n dataKey,\n texture,\n patternUnits = 'userSpaceOnUse',\n patternContentUnits,\n size = { width: '100%', height: '100%' },\n maskContentUnits,\n fill,\n}: PaintProps & {\n /** The variant's name, which becomes its paint reference. */\n name: string\n /** The mask's contents — white shows the series through, black hides it. */\n texture: ReactNode\n patternUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n patternContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n size?: { width: string | number; height: string | number }\n maskContentUnits?: 'userSpaceOnUse' | 'objectBoundingBox'\n /** The paint the mask reveals. Defaults to the series gradient. */\n fill?: string\n}) {\n const maskId = `${id}-${name}-mask-${dataKey}`\n const paint = fill ?? `url(#${id}-colors-${dataKey})`\n\n return (\n <>\n <mask id={maskId} maskContentUnits={maskContentUnits}>\n {texture}\n </mask>\n <pattern\n id={`${id}-${name}-${dataKey}`}\n patternUnits={patternUnits}\n patternContentUnits={patternContentUnits}\n width={size.width}\n height={size.height}\n >\n <rect\n x=\"0\"\n y=\"0\"\n width={size.width}\n height={size.height}\n fill={paint}\n mask={`url(#${maskId})`}\n />\n </pattern>\n </>\n )\n}\n\n/* ── Area fills ───────────────────────────────────────────────────────────\n Six ways an area meets the plot, and in the monochrome default they are the\n PRIMARY way two series are told apart — the ramp is the second encoding. */\n\n/** Solid at the top, dissolving toward the axis. The default. */\nexport function AreaGradientFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <linearGradient id={`${id}-area-gradient-fade-${dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity=\"var(--chart-fill)\" />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity={0} />\n </linearGradient>\n <MaskedFill\n name=\"gradient\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${id}-area-gradient-fade-${dataKey})`}\n />\n }\n />\n </>\n )\n}\n\n/** The same fade, run the other way — heavier where it meets the axis. */\nexport function AreaGradientReverseFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <linearGradient id={`${id}-area-reverse-fade-${dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"0%\" stopColor=\"white\" stopOpacity={0} />\n <stop offset=\"100%\" stopColor=\"white\" stopOpacity=\"var(--chart-fill)\" />\n </linearGradient>\n <MaskedFill\n name=\"gradient-reverse\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect width=\"100%\" height=\"100%\" fill={`url(#${id}-area-reverse-fade-${dataKey})`} />\n }\n />\n </>\n )\n}\n\n/** One flat wash, no fade. Reads as a band rather than as a slope. */\nexport function AreaSolidFill({ id, dataKey }: PaintProps) {\n return (\n <MaskedFill\n name=\"solid\"\n id={id}\n dataKey={dataKey}\n texture={<rect width=\"100%\" height=\"100%\" fill=\"white\" fillOpacity=\"var(--chart-fill)\" />}\n />\n )\n}\n\n/** A field of dots. The lightest texture, and the one that stacks best. */\nexport function AreaDottedFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <pattern\n id={`${id}-area-dotted-texture-${dataKey}`}\n x=\"0\"\n y=\"0\"\n width=\"6\"\n height=\"6\"\n patternUnits=\"userSpaceOnUse\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"0.5\" fill=\"white\" />\n </pattern>\n <MaskedFill\n name=\"dotted\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${id}-area-dotted-texture-${dataKey})`}\n fillOpacity=\"var(--chart-texture)\"\n />\n }\n />\n </>\n )\n}\n\n/** Diagonal rule lines, 45°. */\nexport function AreaLinesFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <pattern\n id={`${id}-area-lines-texture-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45)\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"5\" stroke=\"white\" strokeWidth=\"1\" />\n </pattern>\n <MaskedFill\n name=\"lines\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${id}-area-lines-texture-${dataKey})`}\n fillOpacity=\"var(--chart-texture)\"\n />\n }\n />\n </>\n )\n}\n\n/** Wide soft-edged stripes at 20°. The heaviest of the six. */\nexport function AreaHatchedFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <linearGradient id={`${id}-area-hatched-stripe-${dataKey}`} x1=\"0\" y1=\"0\" x2=\"1\" y2=\"0\">\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={0.2} />\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={1} />\n </linearGradient>\n <pattern\n id={`${id}-area-hatched-texture-${dataKey}`}\n x=\"0\"\n y=\"0\"\n width=\"20\"\n height=\"10\"\n patternUnits=\"userSpaceOnUse\"\n overflow=\"visible\"\n patternTransform=\"rotate(20)\"\n >\n <rect width=\"20\" height=\"10\" fill={`url(#${id}-area-hatched-stripe-${dataKey})`} />\n </pattern>\n <MaskedFill\n name=\"hatched\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${id}-area-hatched-texture-${dataKey})`}\n fillOpacity=\"var(--chart-texture)\"\n />\n }\n />\n </>\n )\n}\n\n/**\n * What a series looks like when another one is selected.\n *\n * A thin diagonal rule rather than a lower opacity: opacity alone makes a\n * series faint, and a faint area on a white ground is still an area. The\n * texture change is what makes it read as \"not this one\".\n */\nexport function UnselectedFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <pattern\n id={`${id}-unselected-texture-${dataKey}`}\n patternUnits=\"userSpaceOnUse\"\n width=\"5\"\n height=\"5\"\n patternTransform=\"rotate(45)\"\n >\n <line x1=\"0\" y1=\"0\" x2=\"0\" y2=\"5\" stroke=\"white\" strokeWidth=\"1\" />\n </pattern>\n <MaskedFill\n name=\"unselected\"\n id={id}\n dataKey={dataKey}\n texture={\n <rect\n width=\"100%\"\n height=\"100%\"\n fill={`url(#${id}-unselected-texture-${dataKey})`}\n fillOpacity=\"var(--chart-texture)\"\n />\n }\n />\n </>\n )\n}\n\n/* ── Bar fills ────────────────────────────────────────────────────────────\n A bar is a solid block, so its textures are denser than an area's — the eye\n has less of it to read and the mark can carry more. */\n\n/** 45° stripes over a faint ground. */\nexport function BarHatchedFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <pattern\n id={`${id}-bar-hatched-texture-${dataKey}`}\n x=\"0\"\n y=\"0\"\n width=\"5\"\n height=\"5\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"rotate(-45)\"\n >\n <rect width=\"5\" height=\"5\" fill=\"white\" fillOpacity={0.3} />\n <rect width=\"1.5\" height=\"5\" fill=\"white\" fillOpacity={1} />\n </pattern>\n <MaskedFill\n name=\"hatched\"\n id={id}\n dataKey={dataKey}\n texture={<rect width=\"100%\" height=\"100%\" fill={`url(#${id}-bar-hatched-texture-${dataKey})`} />}\n />\n </>\n )\n}\n\n/**\n * Stripes with nothing behind them — the projected, not-yet-real part of a\n * series. Used by the last bar when `buffer` is set.\n */\nexport function BarBufferFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <pattern\n id={`${id}-bar-buffer-texture-${dataKey}`}\n x=\"0\"\n y=\"0\"\n width=\"5\"\n height=\"5\"\n patternUnits=\"userSpaceOnUse\"\n patternTransform=\"rotate(-45)\"\n >\n <rect width=\"5\" height=\"5\" fill=\"black\" fillOpacity={0} />\n <rect width=\"1\" height=\"5\" fill=\"white\" fillOpacity={1} />\n </pattern>\n <MaskedFill\n name=\"buffer\"\n id={id}\n dataKey={dataKey}\n texture={<rect width=\"100%\" height=\"100%\" fill={`url(#${id}-bar-buffer-texture-${dataKey})`} />}\n />\n </>\n )\n}\n\n/**\n * A bar split down its own middle, one half at full weight.\n *\n * Everything here is in object-bounding-box units so the split lands at each\n * bar's centre rather than at the plot's — in user space a narrow bar at the\n * right of the chart would be entirely on one side of the seam.\n */\nexport function BarDuotoneFill({\n id,\n dataKey,\n config,\n reverse = false,\n}: PaintProps & { config: ChartConfig; reverse?: boolean }) {\n const name = reverse ? 'duotone-reverse' : 'duotone'\n const stops = colorStops(config[dataKey])\n\n return (\n <>\n <linearGradient\n id={`${id}-${name}-split-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"1\"\n y2=\"0\"\n >\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={reverse ? 1 : 0.4} />\n <stop offset=\"50%\" stopColor=\"white\" stopOpacity={reverse ? 0.4 : 1} />\n </linearGradient>\n <linearGradient\n id={`${id}-${name}-colors-${dataKey}`}\n gradientUnits=\"objectBoundingBox\"\n x1=\"0\"\n y1=\"0\"\n x2=\"0\"\n y2=\"1\"\n >\n <ColorStops dataKey={dataKey} stops={stops} />\n </linearGradient>\n <MaskedFill\n name={name}\n id={id}\n dataKey={dataKey}\n patternUnits=\"objectBoundingBox\"\n patternContentUnits=\"objectBoundingBox\"\n maskContentUnits=\"objectBoundingBox\"\n size={{ width: 1, height: 1 }}\n fill={`url(#${id}-${name}-colors-${dataKey})`}\n texture={\n <rect\n x=\"0\"\n y=\"0\"\n width=\"1\"\n height=\"1\"\n fill={`url(#${id}-${name}-split-${dataKey})`}\n />\n }\n />\n </>\n )\n}\n\n/** Solid at the top of the bar, dissolving toward the baseline. */\nexport function BarGradientFill({ id, dataKey }: PaintProps) {\n return (\n <>\n <linearGradient id={`${id}-bar-gradient-fade-${dataKey}`} x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n <stop offset=\"20%\" stopColor=\"white\" stopOpacity={1} />\n <stop offset=\"90%\" stopColor=\"white\" stopOpacity={0} />\n </linearGradient>\n <MaskedFill\n name=\"gradient\"\n id={id}\n dataKey={dataKey}\n texture={<rect width=\"100%\" height=\"100%\" fill={`url(#${id}-bar-gradient-fade-${dataKey})`} />}\n />\n </>\n )\n}\n\n/**\n * A faint body under a solid cap, drawn by the bar shape itself.\n *\n * The variant that survives density best: at twenty bars a solid block becomes\n * a wall, and a 2px cap over a wash still reads as twenty distinct values.\n */\nexport function BarStrippedFill({ id, dataKey }: PaintProps) {\n return (\n <MaskedFill\n name=\"stripped\"\n id={id}\n dataKey={dataKey}\n texture={<rect width=\"100%\" height=\"100%\" fill=\"white\" fillOpacity=\"var(--chart-fill)\" />}\n />\n )\n}\n\n/**\n * The halo behind a highlighted mark.\n *\n * The one blur in the package, and it is a filter on a MARK rather than a\n * box-shadow under a panel — law 2 bans the second, not the first. It exists\n * because a monochrome chart has no \"brighter\" to reach for when one series has\n * to be the point of the figure.\n *\n * A line needs a wider, stronger halo than a bar: a 0.8px stroke has almost no\n * area to bleed from, where a bar has its whole face.\n */\nexport function GlowFilter({\n id,\n dataKey,\n spread = 8,\n intensity = 0.5,\n}: PaintProps & {\n /** Blur radius, in user units. */\n spread?: number\n /** Alpha multiplier on the blurred copy. Above 1 saturates it. */\n intensity?: number\n}) {\n return (\n <filter id={`${id}-glow-${dataKey}`} x=\"-100%\" y=\"-100%\" width=\"300%\" height=\"300%\">\n <feGaussianBlur in=\"SourceGraphic\" stdDeviation={spread} result=\"blur\" />\n <feColorMatrix\n in=\"blur\"\n type=\"matrix\"\n values={`1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ${intensity} 0`}\n result=\"glow\"\n />\n <feMerge>\n <feMergeNode in=\"glow\" />\n <feMergeNode in=\"SourceGraphic\" />\n </feMerge>\n </filter>\n )\n}\n\n/**\n * A dashed stroke that crawls along its own path.\n *\n * SMIL rather than CSS, because the two attributes have to stay in lockstep and\n * a CSS animation on `stroke-dasharray` is not interpolated the same way in\n * every engine. It is composed as a CHILD of the mark, so a caller that does\n * not ask for it pays nothing — and `keyframes.css`'s reduced-motion rule\n * cannot reach SMIL, which is why the call sites gate it on `useReducedMotion`\n * instead.\n */\nexport function AnimatedDashedStroke({ dash = 3 }: { dash?: number }) {\n return (\n <>\n <animate\n attributeName=\"stroke-dasharray\"\n values={`${dash} ${dash}; 0 ${dash}; ${dash} ${dash}`}\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;0.5;1\"\n />\n <animate\n attributeName=\"stroke-dashoffset\"\n values={`0; -${dash * 2}`}\n dur=\"1s\"\n repeatCount=\"indefinite\"\n keyTimes=\"0;1\"\n />\n </>\n )\n}\n"],"mappings":"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","names":[]}
|