@motionscript/charts 0.1.1-alpha.2 → 0.1.1-alpha.3
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/CHANGELOG.md +8 -0
- package/README.md +7 -9
- package/dist/bar-chart/bar-chart.d.ts +48 -48
- package/dist/bar-chart/bar-chart.js +2 -2
- package/dist/bar-chart/bar-chart.js.map +1 -1
- package/dist/bar-chart/shared.d.ts +2 -1
- package/dist/bar-chart/shared.d.ts.map +1 -1
- package/dist/bar-chart/shared.js +2 -0
- package/dist/bar-chart/shared.js.map +1 -1
- package/dist/browser/chunks/chunk-FJHNBNPQ.js +2 -0
- package/dist/browser/chunks/chunk-FJHNBNPQ.js.map +7 -0
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +3 -3
- package/dist/browser/kit.js +1 -1
- package/dist/browser/manifest.json +1 -1
- package/dist/kit/style.d.ts +25 -20
- package/dist/kit/style.d.ts.map +1 -1
- package/dist/kit/style.js +20 -18
- package/dist/kit/style.js.map +1 -1
- package/dist/line-chart/line-chart.d.ts +48 -48
- package/dist/line-chart/line-chart.js +2 -2
- package/dist/line-chart/line-chart.js.map +1 -1
- package/dist/line-chart/shared.d.ts +2 -1
- package/dist/line-chart/shared.d.ts.map +1 -1
- package/dist/line-chart/shared.js +2 -0
- package/dist/line-chart/shared.js.map +1 -1
- package/dist/pie-chart/pie-chart.d.ts +18 -24
- package/dist/pie-chart/pie-chart.d.ts.map +1 -1
- package/dist/pie-chart/shared.d.ts +7 -9
- package/dist/pie-chart/shared.d.ts.map +1 -1
- package/dist/pie-chart/shared.js +7 -10
- package/dist/pie-chart/shared.js.map +1 -1
- package/dist/radar-chart/index.d.ts +1 -1
- package/dist/radar-chart/index.d.ts.map +1 -1
- package/dist/radar-chart/index.js +1 -1
- package/dist/radar-chart/index.js.map +1 -1
- package/dist/radar-chart/radar-chart.d.ts +6 -12
- package/dist/radar-chart/radar-chart.d.ts.map +1 -1
- package/dist/radar-chart/radar-chart.js +1 -2
- package/dist/radar-chart/radar-chart.js.map +1 -1
- package/dist/radar-chart/shared.d.ts +2 -5
- package/dist/radar-chart/shared.d.ts.map +1 -1
- package/dist/radar-chart/shared.js +3 -6
- package/dist/radar-chart/shared.js.map +1 -1
- package/dist/radial-chart/radial-chart.d.ts +12 -18
- package/dist/radial-chart/radial-chart.d.ts.map +1 -1
- package/dist/radial-chart/shared.d.ts +5 -7
- package/dist/radial-chart/shared.d.ts.map +1 -1
- package/dist/radial-chart/shared.js +5 -8
- package/dist/radial-chart/shared.js.map +1 -1
- package/package.json +4 -4
- package/src/bar-chart/bar-chart.ts +2 -2
- package/src/bar-chart/shared.ts +3 -0
- package/src/kit/style.ts +21 -19
- package/src/line-chart/line-chart.ts +2 -2
- package/src/line-chart/shared.ts +3 -1
- package/src/pie-chart/shared.ts +6 -10
- package/src/radar-chart/index.ts +1 -1
- package/src/radar-chart/radar-chart.ts +0 -2
- package/src/radar-chart/shared.ts +3 -7
- package/src/radial-chart/shared.ts +4 -8
- package/dist/browser/chunks/chunk-7XCRX6GE.js +0 -2
- package/dist/browser/chunks/chunk-7XCRX6GE.js.map +0 -7
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# @motionscript/charts
|
|
2
2
|
|
|
3
|
+
## 0.1.1-alpha.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 2291209: **Breaking:** a chart's text fields sit in the style group of the part they label, so a host draws each beside it rather than in one text section: axis text in a new `axes` group with `axisStroke`, `showXAxis` and `showYAxis` (which leave `grid`), `valueText` (and a pie's or radial's other labels) in `labels`, `legendText` in `legend`, a radar's `spokeText` in `grid`. The kit exports `CARTESIAN_AXES` and `VALUE_TEXT` in place of `CARTESIAN_TEXT` and `LEGEND_TEXT` (`CHART_LEGEND` now holds `legendText`), and the radar's `RADAR_TEXT` is folded into `RADAR_GRID`.
|
|
8
|
+
|
|
9
|
+
Migration: no stored document is affected; field names and values are unchanged. Code that spread `CARTESIAN_TEXT`, `LEGEND_TEXT` or `RADAR_TEXT` into a style spreads `CARTESIAN_AXES`, `VALUE_TEXT`, `CHART_LEGEND` or `RADAR_GRID` instead.
|
|
10
|
+
|
|
3
11
|
## 0.1.1-alpha.2
|
|
4
12
|
|
|
5
13
|
### Patch Changes
|
package/README.md
CHANGED
|
@@ -40,7 +40,7 @@ is out.
|
|
|
40
40
|
|
|
41
41
|
The style kit exports `CHART_STYLE_FAMILY` (`"chart"`), `CHART_STYLE_PRESETS`,
|
|
42
42
|
`CHART_PALETTE_DEFAULT`, the shared field groups (`CHART_SERIES`,
|
|
43
|
-
`CHART_BACKGROUND`, `GRID_BACKGROUND`, `
|
|
43
|
+
`CHART_BACKGROUND`, `GRID_BACKGROUND`, `CARTESIAN_AXES`, `VALUE_TEXT`,
|
|
44
44
|
`CARTESIAN_GRID`, `CHART_LEGEND`) and `migrateChartStyle`, each chart's
|
|
45
45
|
`migrate` hook for styles written before 0.1.1-alpha.2.
|
|
46
46
|
|
|
@@ -73,15 +73,13 @@ flat (`state.style.xLabelText`):
|
|
|
73
73
|
|---|---|---|
|
|
74
74
|
| series | `seriesFills`: a fill per series (per row on a pie or radial), cycled; each may stack paints | every chart |
|
|
75
75
|
| background | `background` (the whole chart), `gridBackground` (the plot, under the grid) | every chart; `gridBackground` on line, bar, radar |
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
| grid | `horizontalGrid` (a 2px `white/15` stroke), `verticalGrid` (none), `axisStroke` (none), `showXAxis`, `showYAxis` | line, bar |
|
|
80
|
-
| grid | `gridShape`, `gridLevels`, `gridStroke` (rings), `spokeStroke` (spokes), `spokeLabels` | radar |
|
|
76
|
+
| grid | `horizontalGrid` (a 2px `white/15` stroke), `verticalGrid` (none) | line, bar |
|
|
77
|
+
| axes | `axisStroke` (none), `showXAxis`, `xLabelText`, `xTitleText`, `showYAxis`, `yLabelText`, `yTitleText` | line, bar |
|
|
78
|
+
| grid | `gridShape`, `gridLevels`, `gridStroke` (rings), `spokeStroke` (spokes), `spokeLabels`, `spokeText` | radar |
|
|
81
79
|
| marks | the chart's own: `strokeWidth`, `curve`, `dots`, `area`, `barCornerRadius`, `barCornerStyle`, `innerRadius`, `sweep`, ... | every chart |
|
|
82
|
-
| labels | `values` (line, bar)
|
|
80
|
+
| labels | `values` and `valueText` (line, bar); `labelPlacement`, `labelText`, `valueText`, `centerText` (pie); `ringLabels`, `labelText`, `centerText` (radial) | |
|
|
83
81
|
|
|
84
|
-
Every run of text is a `Types.typography` field (face, size, weight, style,
|
|
82
|
+
Every run of text is a `Types.typography` field in the group of the part it labels (face, size, weight, style,
|
|
85
83
|
spacing, paint), so each is set like a text node; a partial (`{ fill }`) keeps the
|
|
86
84
|
rest of the field's default. The chart places and aligns the text itself.
|
|
87
85
|
`barCornerRadius` and `barCornerStyle` read as for a bar standing up: the top
|
|
@@ -91,7 +89,7 @@ A line is a stroke and an area is a fill: `horizontalGrid`, `verticalGrid`, `axi
|
|
|
91
89
|
and `spokeStroke` are `Types.stroke` entries (weight, colour, dash and caps; empty draws
|
|
92
90
|
nothing), and a radial's `track` is a `Types.fill` (empty draws no track). A series' `label`
|
|
93
91
|
is optional; the legend shows `label || field`.
|
|
94
|
-
| legend | `legend` (`bottom`, `top`, `right`, `none`), `swatch` (`square`, `circle`, `line`) | every chart |
|
|
92
|
+
| legend | `legend` (`bottom`, `top`, `right`, `none`), `swatch` (`square`, `circle`, `line`), `legendText` | every chart |
|
|
95
93
|
|
|
96
94
|
A chart takes only the fields it draws. A style is a partial laid over the chart's
|
|
97
95
|
previous style, and a key the chart does not have is dropped, so one style dresses
|
|
@@ -7,27 +7,27 @@ declare const BAR_STYLE: import("@motionscript/sdk").Type<_StyleInput<{
|
|
|
7
7
|
} & {
|
|
8
8
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
9
9
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
10
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
10
11
|
} & {
|
|
11
12
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
12
13
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
14
|
+
} & {
|
|
15
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
16
|
+
} & {
|
|
13
17
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
14
18
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
15
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
16
|
-
} & {
|
|
17
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
18
19
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
19
20
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
21
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
20
22
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
21
23
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
22
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
23
|
-
} & {
|
|
24
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
25
24
|
} & {
|
|
26
25
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
27
26
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
28
27
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
29
28
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
30
29
|
} & {
|
|
30
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
31
31
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
32
32
|
}>, _StyleValues<{
|
|
33
33
|
gridBackground: import("@motionscript/sdk").Type<_Fill, _FillResolved[], false>;
|
|
@@ -35,27 +35,27 @@ declare const BAR_STYLE: import("@motionscript/sdk").Type<_StyleInput<{
|
|
|
35
35
|
} & {
|
|
36
36
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
37
37
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
38
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
38
39
|
} & {
|
|
39
40
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
40
41
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
42
|
+
} & {
|
|
43
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
44
|
+
} & {
|
|
41
45
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
42
46
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
43
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
44
|
-
} & {
|
|
45
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
46
47
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
47
48
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
49
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
48
50
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
49
51
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
50
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
51
|
-
} & {
|
|
52
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
53
52
|
} & {
|
|
54
53
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
55
54
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
56
55
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
57
56
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
58
57
|
} & {
|
|
58
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
59
59
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
60
60
|
}>, false>;
|
|
61
61
|
/** A bar chart's resolved style. */
|
|
@@ -98,27 +98,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
98
98
|
} & {
|
|
99
99
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
100
100
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
101
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
101
102
|
} & {
|
|
102
103
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
103
104
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
105
|
+
} & {
|
|
106
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
107
|
+
} & {
|
|
104
108
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
105
109
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
106
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
107
|
-
} & {
|
|
108
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
109
110
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
110
111
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
112
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
111
113
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
112
114
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
113
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
114
|
-
} & {
|
|
115
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
116
115
|
} & {
|
|
117
116
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
118
117
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
119
118
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
120
119
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
121
120
|
} & {
|
|
121
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
122
122
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
123
123
|
}>, _StyleValues<{
|
|
124
124
|
gridBackground: import("@motionscript/sdk").Type<_Fill, _FillResolved[], false>;
|
|
@@ -126,27 +126,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
126
126
|
} & {
|
|
127
127
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
128
128
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
129
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
129
130
|
} & {
|
|
130
131
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
131
132
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
133
|
+
} & {
|
|
134
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
135
|
+
} & {
|
|
132
136
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
133
137
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
134
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
135
|
-
} & {
|
|
136
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
137
138
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
138
139
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
140
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
139
141
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
140
142
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
141
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
142
|
-
} & {
|
|
143
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
144
143
|
} & {
|
|
145
144
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
146
145
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
147
146
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
148
147
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
149
148
|
} & {
|
|
149
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
150
150
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
151
151
|
}>, false>;
|
|
152
152
|
/** Rise of every bar about the baseline, `[0, 1]`: 0 collapses them onto it. */
|
|
@@ -189,27 +189,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
189
189
|
} & {
|
|
190
190
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
191
191
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
192
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
192
193
|
} & {
|
|
193
194
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
194
195
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
196
|
+
} & {
|
|
197
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
198
|
+
} & {
|
|
195
199
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
196
200
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
197
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
198
|
-
} & {
|
|
199
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
200
201
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
201
202
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
203
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
202
204
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
203
205
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
204
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
205
|
-
} & {
|
|
206
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
207
206
|
} & {
|
|
208
207
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
209
208
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
210
209
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
211
210
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
212
211
|
} & {
|
|
212
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
213
213
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
214
214
|
}>, _StyleValues<{
|
|
215
215
|
gridBackground: import("@motionscript/sdk").Type<_Fill, _FillResolved[], false>;
|
|
@@ -217,27 +217,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
217
217
|
} & {
|
|
218
218
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
219
219
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
220
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
220
221
|
} & {
|
|
221
222
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
222
223
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
224
|
+
} & {
|
|
225
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
226
|
+
} & {
|
|
223
227
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
224
228
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
225
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
226
|
-
} & {
|
|
227
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
228
229
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
229
230
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
231
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
230
232
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
231
233
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
232
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
233
|
-
} & {
|
|
234
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
235
234
|
} & {
|
|
236
235
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
237
236
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
238
237
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
239
238
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
240
239
|
} & {
|
|
240
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
241
241
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
242
242
|
}>, false>;
|
|
243
243
|
/** Rise of every bar about the baseline, `[0, 1]`: 0 collapses them onto it. */
|
|
@@ -265,27 +265,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
265
265
|
} & {
|
|
266
266
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
267
267
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
268
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
268
269
|
} & {
|
|
269
270
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
270
271
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
272
|
+
} & {
|
|
273
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
274
|
+
} & {
|
|
271
275
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
272
276
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
273
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
274
|
-
} & {
|
|
275
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
276
277
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
277
278
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
279
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
278
280
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
279
281
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
280
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
281
|
-
} & {
|
|
282
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
283
282
|
} & {
|
|
284
283
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
285
284
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
286
285
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
287
286
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
288
287
|
} & {
|
|
288
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
289
289
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
290
290
|
}>, _StyleValues<{
|
|
291
291
|
gridBackground: import("@motionscript/sdk").Type<_Fill, _FillResolved[], false>;
|
|
@@ -293,27 +293,27 @@ export declare const BarChart: import("@motionscript/sdk").Component<"barChart",
|
|
|
293
293
|
} & {
|
|
294
294
|
legend: import("@motionscript/sdk").Type<"right" | "top" | "bottom" | "none", "right" | "top" | "bottom" | "none", false>;
|
|
295
295
|
swatch: import("@motionscript/sdk").Type<"square" | "circle" | "line", "square" | "circle" | "line", false>;
|
|
296
|
+
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
296
297
|
} & {
|
|
297
298
|
horizontalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
298
299
|
verticalGrid: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
300
|
+
} & {
|
|
301
|
+
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
302
|
+
} & {
|
|
299
303
|
axisStroke: import("@motionscript/sdk").Type<_Stroke, _StrokeResolved[], false>;
|
|
300
304
|
showXAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
301
|
-
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
302
|
-
} & {
|
|
303
|
-
legendText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
304
305
|
xLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
305
306
|
xTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
307
|
+
showYAxis: import("@motionscript/sdk").Type<boolean, boolean, false>;
|
|
306
308
|
yLabelText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
307
309
|
yTitleText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
308
|
-
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
309
|
-
} & {
|
|
310
|
-
seriesFills: import("@motionscript/sdk").Type<_Fill[], _FillResolved[][], false>;
|
|
311
310
|
} & {
|
|
312
311
|
barCornerRadius: import("@motionscript/sdk").Type<_RectCornerRadius, _CornerRadiusResolved, false>;
|
|
313
312
|
barCornerStyle: import("@motionscript/sdk").Type<_RectCornerStyle, _CornerStyleResolved, false>;
|
|
314
313
|
barWidth: import("@motionscript/sdk").Type<number, number, false>;
|
|
315
314
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
316
315
|
} & {
|
|
316
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
317
317
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
318
318
|
}>, false>;
|
|
319
319
|
/** Rise of every bar about the baseline, `[0, 1]`: 0 collapses them onto it. */
|
|
@@ -7,12 +7,12 @@ import { SERIES_ARG, asParts, fresh } from "../kit/entries.js";
|
|
|
7
7
|
import { HorizontalAxis } from "../kit/horizontal-axis.js";
|
|
8
8
|
import { DEFAULT_MARKERS, ENTER_SHARE, beats, legendAway } from "../kit/motion.js";
|
|
9
9
|
import { SPOTLIGHT_DIM, formatMarker, lerpAxisDomain, lerpAxisEntry, markerStep, markerValues, niceTicks, num, resolveAxisDomain, settleAxisDomain, } from "../kit/shared.js";
|
|
10
|
-
import { CARTESIAN_GRID,
|
|
10
|
+
import { CARTESIAN_GRID, CARTESIAN_AXES, CHART_LEGEND, CHART_SERIES, CHART_STYLE_FAMILY, CHART_STYLE_PRESETS, GRID_BACKGROUND, axisConfigOf, migrateChartStyle, legendConfigOf, seriesFill, valueText, } from "../kit/style.js";
|
|
11
11
|
import { VerticalAxis, axisPads } from "../kit/vertical-axis.js";
|
|
12
12
|
import { CategoryAxis, slotCentre } from "./category-axis.js";
|
|
13
13
|
import { ChartBars } from "./chart-bars.js";
|
|
14
14
|
import { BAR_LABELS, BAR_MARKS, barCategories, barSpans, resolveBarScale, } from "./shared.js";
|
|
15
|
-
const BAR_STYLE = Types.style(CHART_STYLE_FAMILY, { series: CHART_SERIES, background: GRID_BACKGROUND,
|
|
15
|
+
const BAR_STYLE = Types.style(CHART_STYLE_FAMILY, { series: CHART_SERIES, background: GRID_BACKGROUND, grid: CARTESIAN_GRID, axes: CARTESIAN_AXES, marks: BAR_MARKS, labels: BAR_LABELS, legend: CHART_LEGEND }, { presets: CHART_STYLE_PRESETS });
|
|
16
16
|
function drawnValue(s, domain) {
|
|
17
17
|
const divisions = (domain.ticks?.length ?? DEFAULT_MARKERS) - 1;
|
|
18
18
|
const range = resolveBarScale(s.data, s.series, s.stack, domain.range, divisions);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../src/bar-chart/bar-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Rect,\n Types,\n clamp,\n component2d,\n easeOut,\n type ChildView,\n type DataRecord,\n type NodeOf,\n type OutOf,\n // Named so this component's emitted type reaches `Node2D` and its props through the sdk, not core.\n type Node2D,\n type Node2DProps as _Node2DProps,\n type TextStyle as _TextStyle,\n type CornerRadiusResolved as _CornerRadiusResolved,\n type CornerStyleResolved as _CornerStyleResolved,\n type RectCornerRadius as _RectCornerRadius,\n type RectCornerStyle as _RectCornerStyle,\n type Fill as _Fill,\n type FillResolved as _FillResolved,\n type Stroke as _Stroke,\n type StrokeResolved as _StrokeResolved,\n type Size2D,\n type StyleInput as _StyleInput,\n type StyleValues as _StyleValues,\n} from \"@motionscript/sdk\"\nimport { formatNumber } from \"@motionscript/sdk/component\"\n\nimport { cartesianFrame, chartViews, columnGhost, frameGap, headroom, laidOutSize, overhang } from \"../kit/cartesian\"\nimport { ChartCanvas } from \"../kit/chart-canvas\"\nimport { ChartLegend } from \"../kit/chart-legend\"\nimport { SERIES_ARG, asParts, fresh } from \"../kit/entries\"\nimport { HorizontalAxis } from \"../kit/horizontal-axis\"\nimport { DEFAULT_MARKERS, ENTER_SHARE, beats, legendAway, type AnyTimeline, type Beat } from \"../kit/motion\"\nimport {\n SPOTLIGHT_DIM,\n formatMarker,\n lerpAxisDomain,\n lerpAxisEntry,\n markerStep,\n markerValues,\n niceTicks,\n num,\n resolveAxisDomain,\n settleAxisDomain,\n type AxisDomainConfig,\n type Range,\n type ResolvedAxisDomain,\n} from \"../kit/shared\"\nimport {\n CARTESIAN_GRID,\n CARTESIAN_TEXT,\n CHART_LEGEND,\n CHART_SERIES,\n CHART_STYLE_FAMILY,\n CHART_STYLE_PRESETS,\n GRID_BACKGROUND,\n axisConfigOf,\n migrateChartStyle,\n legendConfigOf,\n seriesFill,\n valueText,\n} from \"../kit/style\"\nimport { VerticalAxis, axisPads } from \"../kit/vertical-axis\"\nimport { CategoryAxis, slotCentre } from \"./category-axis\"\nimport { ChartBars, type BarGeometry } from \"./chart-bars\"\nimport {\n BAR_LABELS,\n BAR_MARKS,\n barCategories,\n barSpans,\n resolveBarScale,\n type BarOrientation,\n type BarSeries,\n type BarStack,\n} from \"./shared\"\n\nconst BAR_STYLE = Types.style(\n CHART_STYLE_FAMILY,\n { series: CHART_SERIES, background: GRID_BACKGROUND, text: CARTESIAN_TEXT, grid: CARTESIAN_GRID, marks: BAR_MARKS, labels: BAR_LABELS, legend: CHART_LEGEND },\n { presets: CHART_STYLE_PRESETS }\n)\n\n/** A bar chart's resolved style. */\nexport type BarChartStyle = OutOf<typeof BAR_STYLE>\n\n/** What a bar chart plots, as its entries hold it. */\nexport interface BarChartValues {\n readonly data: DataRecord[]\n readonly series: BarSeries[]\n readonly stack: BarStack\n readonly valueAxis: AxisDomainConfig\n}\n\n/** The value axis's domain with its range and ticks resolved. */\nexport type BarChartDomain = ResolvedAxisDomain\n\ninterface BarState extends BarChartValues {\n readonly categoryField: string\n readonly orientation: BarOrientation\n readonly style: BarChartStyle\n readonly weights: number[]\n readonly showing: boolean[]\n readonly spotlight: number | null\n readonly spotlightReveal: number\n}\n\nfunction drawnValue(s: BarChartValues, domain: AxisDomainConfig): AxisDomainConfig {\n const divisions = (domain.ticks?.length ?? DEFAULT_MARKERS) - 1\n const range = resolveBarScale(s.data, s.series, s.stack, domain.range, divisions)\n const even = domain.range !== undefined || s.stack === \"percent\"\n return { ...domain, range, ticks: domain.ticks ?? (even ? markerValues(range, DEFAULT_MARKERS - 1) : niceTicks(range, DEFAULT_MARKERS - 1)) }\n}\n\n/** The last domain worked out from each data array, and what it was read from. */\nconst domainsDrawn = new WeakMap<DataRecord[], { readonly key: readonly unknown[]; readonly domain: BarChartDomain }>()\n\n/** The value axis as drawn now. A series being hidden keeps its room, so the ticks hold still while it goes. */\nexport function barChartDomain(s: BarChartValues): BarChartDomain {\n const key = [s.series, s.stack, s.valueAxis]\n const kept = domainsDrawn.get(s.data)\n if (kept && kept.key.every((value, i) => value === key[i])) return kept.domain\n const domain = settleAxisDomain(s.valueAxis, (d) => drawnValue(s, d)) as BarChartDomain\n domainsDrawn.set(s.data, { key, domain })\n return domain\n}\n\n/** Ticks and the figures printed by bars both read through here, so they cannot disagree about how a number looks. */\nfunction valueLabel(s: BarChartValues, domain: BarChartDomain, value: number): string {\n const pattern = s.valueAxis.format\n if (pattern !== undefined) return formatNumber(value, pattern)\n const text = formatMarker(value, markerStep(domain.ticks))\n return s.stack === \"percent\" ? `${text}%` : text\n}\n\n/** A value along the value axis, a run of `length` px centred on 0. */\nfunction valueToPx(domain: BarChartDomain, length: number, value: number): number {\n const [min, max] = domain.range\n if (max === min) return -length / 2\n return ((value - min) / (max - min) - 0.5) * length\n}\n\n/** Where bars grow from: zero held on the scale, so a cropped axis grows them from the plot's edge. */\nfunction baselineValue(domain: BarChartDomain): number {\n const [lo, hi] = domain.range\n return clamp(0, Math.min(lo, hi), Math.max(lo, hi))\n}\n\nfunction weightAt(s: { readonly weights: readonly number[] }, index: number): number {\n return Math.max(0, s.weights[index] ?? 1)\n}\n\n/** The plot's run along the value axis and across the categories. */\nfunction runs(s: BarState, plot: Size2D): { along: number; across: number } {\n return s.orientation === \"horizontal\" ? { along: plot.width, across: plot.height } : { along: plot.height, across: plot.width }\n}\n\n/** Category `row`'s slot centre across the plot: left to right, or top to bottom. */\nfunction slotAt(s: BarState, row: number, across: number): number {\n const centre = slotCentre(row, s.data.length, across)\n return s.orientation === \"horizontal\" ? -centre : centre\n}\n\n/**\n * Series `index`'s bars in centred pixel space. Side by side, a series divides\n * the slot with its siblings by live weight; stacked, it takes the whole slot\n * and its weight scales its length, so hiding a series reflows rather than\n * punching a hole.\n */\nfunction seriesBars(s: BarState, index: number, plot: Size2D): BarGeometry[] {\n const series = s.series[index]\n if (!series) return []\n const domain = barChartDomain(s)\n const { along, across } = runs(s, plot)\n const n = s.data.length\n const slot = n > 0 ? across / n : 0\n const inner = slot * clamp(s.style.barWidth, 0, 1)\n const stacked = s.stack !== \"none\"\n let total = 0\n for (let i = 0; i < s.series.length; i++) total += weightAt(s, i)\n const unit = inner / (total > 0 ? total : 1)\n const weight = weightAt(s, index)\n let before = 0\n for (let i = 0; i < index; i++) before += weightAt(s, i)\n const gap = s.series.length > 1 ? s.style.barGap : 0\n const values = s.style.values\n\n return s.data.map((row, rowIndex) => {\n // Built from live contributions, so a fading series lowers the segments beyond it.\n const spans = barSpans(row, s.series, s.stack, s.weights)\n const span = spans[index] ?? { from: 0, to: 0, value: 0, outer: false }\n const centre = slotAt(s, rowIndex, across)\n const offset = -inner / 2 + unit * before + (unit * weight) / 2\n let caption = \"\"\n if (values !== \"none\" && span.value !== 0) {\n if (!stacked || values === \"inside\" || s.stack === \"percent\") caption = valueLabel(s, domain, stacked ? span.value : num(row, series.field))\n else if (span.outer) caption = valueLabel(s, domain, span.to)\n }\n return {\n center: stacked ? centre : centre + (s.orientation === \"horizontal\" ? -offset : offset),\n thickness: stacked ? inner : Math.max(0, unit * weight - gap),\n from: valueToPx(domain, along, span.from),\n to: valueToPx(domain, along, span.to),\n round: span.outer,\n grounded: !stacked || span.from === 0,\n caption,\n }\n })\n}\n\n/** Per-row opacity: 1 while nothing is spotlit, falling to {@link SPOTLIGHT_DIM} for all but the chosen category. */\nfunction categoryDims(s: BarState): number[] {\n const focus = clamp(s.spotlightReveal, 0, 1)\n const chosen = s.spotlight\n return s.data.map((_, i) => (focus <= 0 || chosen === i ? 1 : 1 - (1 - SPOTLIGHT_DIM) * focus))\n}\n\n/** The parts a bar chart's commands drive, found through its children. */\nfunction partsOf(children: readonly ChildView[]) {\n const views = chartViews(children)\n return {\n valueAxis: views.find((view) => VerticalAxis.is(view) || HorizontalAxis.is(view)) ?? null,\n categoryAxis: views.find(CategoryAxis.is) ?? null,\n bars: views.filter(ChartBars.is),\n legend: views.find(ChartLegend.is) ?? null,\n }\n}\n\n/**\n * Move series `index`'s share to `target` with its legend entry. Its bars stay\n * drawn for every frame the move covers and switch off only once a hide has\n * landed, so arriving at a time backwards matches arriving forwards.\n */\nfunction toggling(timeline: AnyTimeline, state: BarState, children: readonly ChildView[], index: number, target: number) {\n const parts = partsOf(children)\n if (!parts.bars[index]) return timeline.wait(timeline.duration)\n const from = state.series.map((_, i) => weightAt(state, i))\n const start = from[index] ?? 1\n const showing = state.series.map((s, i) => state.showing[i] ?? (s.enabled ?? true))\n return timeline.together([\n timeline.animate((t) => {\n const weights = [...from]\n weights[index] = start + (target - start) * timeline.ease(t)\n const shown = [...showing]\n shown[index] = target > 0 || t < 1\n return { weights, showing: shown }\n }, { eased: false }),\n ...(parts.legend ? [parts.legend.run(target > 0 ? \"showSeries\" : \"hideSeries\", { index })] : []),\n ])\n}\n\n/**\n * A bar chart, vertical or horizontal, its series side by side, stacked, or\n * stacked as shares of 100. Built like the line chart from `ChartCanvas`, a\n * value axis, a {@link CategoryAxis}, one {@link ChartBars} per series and\n * `ChartLegend`. Zero is always on the scale and bars grow about it, so a\n * negative value draws the other way from the same `growth` signal.\n *\n * Resting state is the finished chart; `enter` arms every part on its first\n * frame. A `to` of the value axis's `range` or `ticks` tweens from the domain as\n * drawn, so an auto axis rescales the bars continuously.\n */\nexport const BarChart = component2d({\n key: \"barChart\",\n state: {\n data: fresh<DataRecord[]>(() => [], { kind: \"dataset\" }),\n // Names a column, not a value, like the line chart's `xField`.\n categoryField: \"\",\n series: fresh<BarSeries[]>(() => [], { kind: \"series\" }),\n /** `vertical`: columns rise from a row of categories; `horizontal`: bars grow right from a column of them. */\n orientation: Types.oneOf([\"vertical\", \"horizontal\"] as const, { animatable: false }),\n /** `stacked`: each series sits on the sum of those before it; `percent`: every category reads as shares of 100. */\n stack: Types.oneOf([\"none\", \"stacked\", \"percent\"] as const),\n valueAxis: Types.custom<AxisDomainConfig>({}, { resolve: resolveAxisDomain, lerp: lerpAxisEntry }),\n categoryAxis: Types.custom<AxisDomainConfig>({}, { resolve: resolveAxisDomain, lerp: lerpAxisDomain }),\n style: BAR_STYLE,\n /** Rise of every bar about the baseline, `[0, 1]`: 0 collapses them onto it. */\n growth: 1,\n /** The category spotlit, or `null`. The choice snaps; `spotlightReveal` animates it. */\n spotlight: Types.custom<number | null>(null),\n spotlightReveal: 0,\n /** Each series' share of the slot, seeded from `enabled`: a weight rather than a switch, so hiding one widens the others. */\n weights: Types.custom<number[]>([], { private: true }),\n /** Whether each series' bars are drawn: on for every frame a show or hide covers, off once a hide lands. */\n showing: Types.custom<boolean[]>([], { private: true }),\n },\n defaults: {\n // A node made of parts that fill would otherwise hug them.\n width: \"fill\",\n height: \"fill\",\n weights: (state) => state.series.map((s) => ((s.enabled ?? true) ? 1 : 0)),\n showing: (state) => state.series.map((s) => s.enabled ?? true),\n },\n migrate: { style: migrateChartStyle(\"cartesian\") },\n allowedChildren: [],\n children: (state) => {\n const style = () => state.style\n const domain = () => barChartDomain(state)\n let plot: Node2D | undefined\n const plotSize = () => laidOutSize(plot)\n const built = state.style\n const horizontal = state.orientation === \"horizontal\"\n const categories = barCategories(state.data, state.categoryField)\n const valueConfig = () => axisConfigOf(style(), horizontal ? \"x\" : \"y\")\n const categoryConfig = () => axisConfigOf(style(), horizontal ? \"y\" : \"x\")\n const valueCaptions = () => {\n const d = domain()\n return d.ticks.map((value) => valueLabel(state, d, value))\n }\n const showValue = horizontal ? built.showXAxis : built.showYAxis\n const showCategory = horizontal ? built.showYAxis : built.showXAxis\n\n const valueAxis = showValue\n ? (horizontal\n ? new HorizontalAxis({\n range: () => domain().range,\n markers: () => domain().ticks,\n captions: valueCaptions,\n axis: valueConfig,\n label: state.valueAxis.label ?? \"\",\n overhang: () => ({ left: overhang(style()), right: overhang(style()) }),\n width: \"fill\",\n height: \"hug\",\n })\n : new VerticalAxis({\n range: () => domain().range,\n markers: () => domain().ticks,\n captions: valueCaptions,\n axis: valueConfig,\n label: state.valueAxis.label ?? \"\",\n width: \"hug\",\n height: \"fill\",\n })) as unknown as Node2D\n : undefined\n\n const categoryAxis = showCategory\n ? (new CategoryAxis({\n categories,\n axis: categoryConfig,\n label: state.categoryAxis.label ?? \"\",\n orientation: horizontal ? \"vertical\" : \"horizontal\",\n dims: () => categoryDims(state),\n width: horizontal ? \"hug\" : \"fill\",\n height: horizontal ? \"fill\" : \"hug\",\n }) as unknown as Node2D)\n : undefined\n\n const left = horizontal ? categoryAxis : valueAxis\n const bottom = horizontal ? valueAxis : categoryAxis\n const leftConfig = horizontal ? categoryConfig : valueConfig\n const ghost = left && bottom\n ? columnGhost({\n captions: horizontal ? () => categories : valueCaptions,\n count: horizontal ? categories.length : barChartDomain(state).ticks.length,\n text: () => leftConfig().labelStyle,\n title: (horizontal ? state.categoryAxis.label : state.valueAxis.label) ?? \"\",\n titleText: () => leftConfig().titleStyle,\n tickPad: () => axisPads(leftConfig(), \"right\").tick,\n titlePad: () => axisPads(leftConfig(), \"right\").title,\n })\n : undefined\n\n const barSets = state.series.map(\n (s, i) =>\n new ChartBars({\n bars: () => seriesBars(state, i, plotSize()),\n baseline: () => valueToPx(domain(), runs(state, plotSize()).along, baselineValue(domain())),\n horizontal,\n fill: () => seriesFill(style(), s, i),\n cornerRadius: () => style().barCornerRadius,\n cornerStyle: () => style().barCornerStyle,\n growth: () => state.growth,\n dims: () => categoryDims(state),\n // A figure past a stack's end prints the stack's total; a percent stack has none worth printing, so prints its shares inside.\n values: () => (built.values === \"end\" && state.stack === \"percent\" ? \"inside\" : built.values),\n valueStyle: () => valueText(style()),\n enabled: () => state.showing[i] ?? (s.enabled ?? true),\n }) as unknown as Node2D\n )\n\n const legendAt = built.legend\n const legend = legendAt !== \"none\"\n ? (new ChartLegend({\n series: state.series,\n swatches: () => state.series.map((s, i) => seriesFill(style(), s, i)),\n legend: () => legendConfigOf(style()),\n flow: legendAt === \"right\" ? \"vertical\" : \"horizontal\",\n }) as unknown as Node2D)\n : undefined\n\n const n = state.data.length\n // Category lines fall between the slots, never through a bar.\n const boundaries = () => Array.from({ length: Math.max(0, n - 1) }, (_, i) => i + 1)\n const slots = (): Range => [0, Math.max(1, n)]\n plot = new Rect({\n children: [\n new ChartCanvas({\n fill: () => style().gridBackground,\n xGridStroke: () => style().verticalGrid,\n yGridStroke: () => style().horizontalGrid,\n xMarkers: horizontal ? () => domain().ticks : boundaries,\n yMarkers: horizontal ? boundaries : () => domain().ticks,\n xExtent: horizontal ? () => domain().range : slots,\n yExtent: horizontal ? slots : () => domain().range,\n axisStroke: () => style().axisStroke,\n xAxisAt: () => (horizontal ? 0 : baselineValue(domain())),\n yAxisAt: () => (horizontal ? baselineValue(domain()) : 0),\n }),\n ...barSets,\n ],\n }) as unknown as Node2D\n\n return asParts([\n cartesianFrame({\n background: () => style().background,\n left,\n ghost,\n plot,\n bottom,\n legend,\n legendAt,\n gap: () => frameGap(style()),\n padding: () => ({\n top: headroom(style()),\n right: horizontal && bottom ? overhang(style()) : 0,\n left: horizontal && bottom && !left ? overhang(style()) : 0,\n bottom: 0,\n }),\n }),\n ])\n },\n commands: {\n /** Axes stagger in, bars rise from the baseline, the legend fades up last. `duration` is the whole entrance. */\n enter: {\n args: {},\n // Held from arrival, so it never shows finished ahead of its draw.\n entrance: true,\n easing: easeOut(),\n run: (timeline, state, children) => {\n const parts = partsOf(children)\n const duration = timeline.duration\n const axes = duration * ENTER_SHARE.axes\n const rise = duration * ENTER_SHARE.marks\n const { legend } = parts\n const at0 = (piece: Beat[\"piece\"]): Beat => ({ at: 0, duration: 0, piece })\n return beats(timeline, [\n at0(timeline.animate(() => ({ growth: 0 }))),\n ...(legend ? [at0(legend.to({ opacity: 0, ...legendAway(state.style.legend) }))] : []),\n ...(parts.valueAxis ? [{ at: 0, duration: axes, piece: parts.valueAxis.run(\"enter\", { slide: 24 }) }] : []),\n ...(parts.categoryAxis ? [{ at: 0, duration: axes, piece: parts.categoryAxis.run(\"enter\", { slide: 24 }) }] : []),\n // No priming to 0 first: the value at `t` is a function of `t`.\n { at: axes, duration: rise, piece: timeline.animate((t) => ({ growth: t })) },\n ...(legend ? [{ at: axes + rise, duration: duration * ENTER_SHARE.legend, piece: legend.to({ opacity: 1, x: 0, y: 0 }) }] : []),\n ])\n },\n },\n /** Bring series `index` back, the group reflowing to make room, with its legend entry. */\n showSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, state, children) => toggling(timeline, state, children, timeline.args.seriesIndex, 1),\n },\n /** The mirror of `showSeries`: bars narrow away (stacked, sink out) while the rest widen into the space. */\n hideSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, state, children) => toggling(timeline, state, children, timeline.args.seriesIndex, 0),\n },\n /** Fade every other series, bars and legend entry, to focus on `index`. Nothing moves, so the group does not reflow. */\n spotlightSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, _state, children) => {\n const parts = partsOf(children)\n const index = timeline.args.seriesIndex\n return timeline.together([\n ...parts.bars.map((bars, i) => bars.to({ opacity: i === index ? 1 : SPOTLIGHT_DIM })),\n ...(parts.legend ? [parts.legend.run(\"spotlightSeries\", { index })] : []),\n timeline.wait(timeline.duration),\n ])\n },\n },\n /**\n * Fade every other category's bars and caption to {@link SPOTLIGHT_DIM}. While\n * another is lit the focus moves directly. A missing category takes its slot\n * and changes nothing.\n */\n spotlightCategory: {\n args: { categoryIndex: Types.number(0, { min: 0, step: 1 }) },\n easing: easeOut(),\n run: (timeline, state) => {\n const index = timeline.args.categoryIndex\n if (index < 0 || index >= state.data.length) return timeline.wait(timeline.duration)\n const from = state.spotlightReveal\n return timeline.animate((t) => ({ spotlight: index, spotlightReveal: from + (1 - from) * t }))\n },\n },\n /** Every category back to full; the lit one is held until the fade lands. A no-op when nothing is lit, which still takes its slot. */\n clearCategory: {\n args: {},\n easing: easeOut(),\n run: (timeline, state) => {\n const from = state.spotlightReveal\n if (from === 0) return timeline.wait(timeline.duration)\n const lit = state.spotlight\n return timeline.animate((t) => (t >= 1 ? { spotlight: null, spotlightReveal: 0 } : { spotlight: lit, spotlightReveal: from * (1 - t) }))\n },\n },\n },\n})\n\nexport type BarChart = NodeOf<typeof BarChart>\n"]}
|
|
1
|
+
{"version":3,"file":"bar-chart.js","sourceRoot":"","sources":["../../src/bar-chart/bar-chart.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Rect,\n Types,\n clamp,\n component2d,\n easeOut,\n type ChildView,\n type DataRecord,\n type NodeOf,\n type OutOf,\n // Named so this component's emitted type reaches `Node2D` and its props through the sdk, not core.\n type Node2D,\n type Node2DProps as _Node2DProps,\n type TextStyle as _TextStyle,\n type CornerRadiusResolved as _CornerRadiusResolved,\n type CornerStyleResolved as _CornerStyleResolved,\n type RectCornerRadius as _RectCornerRadius,\n type RectCornerStyle as _RectCornerStyle,\n type Fill as _Fill,\n type FillResolved as _FillResolved,\n type Stroke as _Stroke,\n type StrokeResolved as _StrokeResolved,\n type Size2D,\n type StyleInput as _StyleInput,\n type StyleValues as _StyleValues,\n} from \"@motionscript/sdk\"\nimport { formatNumber } from \"@motionscript/sdk/component\"\n\nimport { cartesianFrame, chartViews, columnGhost, frameGap, headroom, laidOutSize, overhang } from \"../kit/cartesian\"\nimport { ChartCanvas } from \"../kit/chart-canvas\"\nimport { ChartLegend } from \"../kit/chart-legend\"\nimport { SERIES_ARG, asParts, fresh } from \"../kit/entries\"\nimport { HorizontalAxis } from \"../kit/horizontal-axis\"\nimport { DEFAULT_MARKERS, ENTER_SHARE, beats, legendAway, type AnyTimeline, type Beat } from \"../kit/motion\"\nimport {\n SPOTLIGHT_DIM,\n formatMarker,\n lerpAxisDomain,\n lerpAxisEntry,\n markerStep,\n markerValues,\n niceTicks,\n num,\n resolveAxisDomain,\n settleAxisDomain,\n type AxisDomainConfig,\n type Range,\n type ResolvedAxisDomain,\n} from \"../kit/shared\"\nimport {\n CARTESIAN_GRID,\n CARTESIAN_AXES,\n CHART_LEGEND,\n CHART_SERIES,\n CHART_STYLE_FAMILY,\n CHART_STYLE_PRESETS,\n GRID_BACKGROUND,\n axisConfigOf,\n migrateChartStyle,\n legendConfigOf,\n seriesFill,\n valueText,\n} from \"../kit/style\"\nimport { VerticalAxis, axisPads } from \"../kit/vertical-axis\"\nimport { CategoryAxis, slotCentre } from \"./category-axis\"\nimport { ChartBars, type BarGeometry } from \"./chart-bars\"\nimport {\n BAR_LABELS,\n BAR_MARKS,\n barCategories,\n barSpans,\n resolveBarScale,\n type BarOrientation,\n type BarSeries,\n type BarStack,\n} from \"./shared\"\n\nconst BAR_STYLE = Types.style(\n CHART_STYLE_FAMILY,\n { series: CHART_SERIES, background: GRID_BACKGROUND, grid: CARTESIAN_GRID, axes: CARTESIAN_AXES, marks: BAR_MARKS, labels: BAR_LABELS, legend: CHART_LEGEND },\n { presets: CHART_STYLE_PRESETS }\n)\n\n/** A bar chart's resolved style. */\nexport type BarChartStyle = OutOf<typeof BAR_STYLE>\n\n/** What a bar chart plots, as its entries hold it. */\nexport interface BarChartValues {\n readonly data: DataRecord[]\n readonly series: BarSeries[]\n readonly stack: BarStack\n readonly valueAxis: AxisDomainConfig\n}\n\n/** The value axis's domain with its range and ticks resolved. */\nexport type BarChartDomain = ResolvedAxisDomain\n\ninterface BarState extends BarChartValues {\n readonly categoryField: string\n readonly orientation: BarOrientation\n readonly style: BarChartStyle\n readonly weights: number[]\n readonly showing: boolean[]\n readonly spotlight: number | null\n readonly spotlightReveal: number\n}\n\nfunction drawnValue(s: BarChartValues, domain: AxisDomainConfig): AxisDomainConfig {\n const divisions = (domain.ticks?.length ?? DEFAULT_MARKERS) - 1\n const range = resolveBarScale(s.data, s.series, s.stack, domain.range, divisions)\n const even = domain.range !== undefined || s.stack === \"percent\"\n return { ...domain, range, ticks: domain.ticks ?? (even ? markerValues(range, DEFAULT_MARKERS - 1) : niceTicks(range, DEFAULT_MARKERS - 1)) }\n}\n\n/** The last domain worked out from each data array, and what it was read from. */\nconst domainsDrawn = new WeakMap<DataRecord[], { readonly key: readonly unknown[]; readonly domain: BarChartDomain }>()\n\n/** The value axis as drawn now. A series being hidden keeps its room, so the ticks hold still while it goes. */\nexport function barChartDomain(s: BarChartValues): BarChartDomain {\n const key = [s.series, s.stack, s.valueAxis]\n const kept = domainsDrawn.get(s.data)\n if (kept && kept.key.every((value, i) => value === key[i])) return kept.domain\n const domain = settleAxisDomain(s.valueAxis, (d) => drawnValue(s, d)) as BarChartDomain\n domainsDrawn.set(s.data, { key, domain })\n return domain\n}\n\n/** Ticks and the figures printed by bars both read through here, so they cannot disagree about how a number looks. */\nfunction valueLabel(s: BarChartValues, domain: BarChartDomain, value: number): string {\n const pattern = s.valueAxis.format\n if (pattern !== undefined) return formatNumber(value, pattern)\n const text = formatMarker(value, markerStep(domain.ticks))\n return s.stack === \"percent\" ? `${text}%` : text\n}\n\n/** A value along the value axis, a run of `length` px centred on 0. */\nfunction valueToPx(domain: BarChartDomain, length: number, value: number): number {\n const [min, max] = domain.range\n if (max === min) return -length / 2\n return ((value - min) / (max - min) - 0.5) * length\n}\n\n/** Where bars grow from: zero held on the scale, so a cropped axis grows them from the plot's edge. */\nfunction baselineValue(domain: BarChartDomain): number {\n const [lo, hi] = domain.range\n return clamp(0, Math.min(lo, hi), Math.max(lo, hi))\n}\n\nfunction weightAt(s: { readonly weights: readonly number[] }, index: number): number {\n return Math.max(0, s.weights[index] ?? 1)\n}\n\n/** The plot's run along the value axis and across the categories. */\nfunction runs(s: BarState, plot: Size2D): { along: number; across: number } {\n return s.orientation === \"horizontal\" ? { along: plot.width, across: plot.height } : { along: plot.height, across: plot.width }\n}\n\n/** Category `row`'s slot centre across the plot: left to right, or top to bottom. */\nfunction slotAt(s: BarState, row: number, across: number): number {\n const centre = slotCentre(row, s.data.length, across)\n return s.orientation === \"horizontal\" ? -centre : centre\n}\n\n/**\n * Series `index`'s bars in centred pixel space. Side by side, a series divides\n * the slot with its siblings by live weight; stacked, it takes the whole slot\n * and its weight scales its length, so hiding a series reflows rather than\n * punching a hole.\n */\nfunction seriesBars(s: BarState, index: number, plot: Size2D): BarGeometry[] {\n const series = s.series[index]\n if (!series) return []\n const domain = barChartDomain(s)\n const { along, across } = runs(s, plot)\n const n = s.data.length\n const slot = n > 0 ? across / n : 0\n const inner = slot * clamp(s.style.barWidth, 0, 1)\n const stacked = s.stack !== \"none\"\n let total = 0\n for (let i = 0; i < s.series.length; i++) total += weightAt(s, i)\n const unit = inner / (total > 0 ? total : 1)\n const weight = weightAt(s, index)\n let before = 0\n for (let i = 0; i < index; i++) before += weightAt(s, i)\n const gap = s.series.length > 1 ? s.style.barGap : 0\n const values = s.style.values\n\n return s.data.map((row, rowIndex) => {\n // Built from live contributions, so a fading series lowers the segments beyond it.\n const spans = barSpans(row, s.series, s.stack, s.weights)\n const span = spans[index] ?? { from: 0, to: 0, value: 0, outer: false }\n const centre = slotAt(s, rowIndex, across)\n const offset = -inner / 2 + unit * before + (unit * weight) / 2\n let caption = \"\"\n if (values !== \"none\" && span.value !== 0) {\n if (!stacked || values === \"inside\" || s.stack === \"percent\") caption = valueLabel(s, domain, stacked ? span.value : num(row, series.field))\n else if (span.outer) caption = valueLabel(s, domain, span.to)\n }\n return {\n center: stacked ? centre : centre + (s.orientation === \"horizontal\" ? -offset : offset),\n thickness: stacked ? inner : Math.max(0, unit * weight - gap),\n from: valueToPx(domain, along, span.from),\n to: valueToPx(domain, along, span.to),\n round: span.outer,\n grounded: !stacked || span.from === 0,\n caption,\n }\n })\n}\n\n/** Per-row opacity: 1 while nothing is spotlit, falling to {@link SPOTLIGHT_DIM} for all but the chosen category. */\nfunction categoryDims(s: BarState): number[] {\n const focus = clamp(s.spotlightReveal, 0, 1)\n const chosen = s.spotlight\n return s.data.map((_, i) => (focus <= 0 || chosen === i ? 1 : 1 - (1 - SPOTLIGHT_DIM) * focus))\n}\n\n/** The parts a bar chart's commands drive, found through its children. */\nfunction partsOf(children: readonly ChildView[]) {\n const views = chartViews(children)\n return {\n valueAxis: views.find((view) => VerticalAxis.is(view) || HorizontalAxis.is(view)) ?? null,\n categoryAxis: views.find(CategoryAxis.is) ?? null,\n bars: views.filter(ChartBars.is),\n legend: views.find(ChartLegend.is) ?? null,\n }\n}\n\n/**\n * Move series `index`'s share to `target` with its legend entry. Its bars stay\n * drawn for every frame the move covers and switch off only once a hide has\n * landed, so arriving at a time backwards matches arriving forwards.\n */\nfunction toggling(timeline: AnyTimeline, state: BarState, children: readonly ChildView[], index: number, target: number) {\n const parts = partsOf(children)\n if (!parts.bars[index]) return timeline.wait(timeline.duration)\n const from = state.series.map((_, i) => weightAt(state, i))\n const start = from[index] ?? 1\n const showing = state.series.map((s, i) => state.showing[i] ?? (s.enabled ?? true))\n return timeline.together([\n timeline.animate((t) => {\n const weights = [...from]\n weights[index] = start + (target - start) * timeline.ease(t)\n const shown = [...showing]\n shown[index] = target > 0 || t < 1\n return { weights, showing: shown }\n }, { eased: false }),\n ...(parts.legend ? [parts.legend.run(target > 0 ? \"showSeries\" : \"hideSeries\", { index })] : []),\n ])\n}\n\n/**\n * A bar chart, vertical or horizontal, its series side by side, stacked, or\n * stacked as shares of 100. Built like the line chart from `ChartCanvas`, a\n * value axis, a {@link CategoryAxis}, one {@link ChartBars} per series and\n * `ChartLegend`. Zero is always on the scale and bars grow about it, so a\n * negative value draws the other way from the same `growth` signal.\n *\n * Resting state is the finished chart; `enter` arms every part on its first\n * frame. A `to` of the value axis's `range` or `ticks` tweens from the domain as\n * drawn, so an auto axis rescales the bars continuously.\n */\nexport const BarChart = component2d({\n key: \"barChart\",\n state: {\n data: fresh<DataRecord[]>(() => [], { kind: \"dataset\" }),\n // Names a column, not a value, like the line chart's `xField`.\n categoryField: \"\",\n series: fresh<BarSeries[]>(() => [], { kind: \"series\" }),\n /** `vertical`: columns rise from a row of categories; `horizontal`: bars grow right from a column of them. */\n orientation: Types.oneOf([\"vertical\", \"horizontal\"] as const, { animatable: false }),\n /** `stacked`: each series sits on the sum of those before it; `percent`: every category reads as shares of 100. */\n stack: Types.oneOf([\"none\", \"stacked\", \"percent\"] as const),\n valueAxis: Types.custom<AxisDomainConfig>({}, { resolve: resolveAxisDomain, lerp: lerpAxisEntry }),\n categoryAxis: Types.custom<AxisDomainConfig>({}, { resolve: resolveAxisDomain, lerp: lerpAxisDomain }),\n style: BAR_STYLE,\n /** Rise of every bar about the baseline, `[0, 1]`: 0 collapses them onto it. */\n growth: 1,\n /** The category spotlit, or `null`. The choice snaps; `spotlightReveal` animates it. */\n spotlight: Types.custom<number | null>(null),\n spotlightReveal: 0,\n /** Each series' share of the slot, seeded from `enabled`: a weight rather than a switch, so hiding one widens the others. */\n weights: Types.custom<number[]>([], { private: true }),\n /** Whether each series' bars are drawn: on for every frame a show or hide covers, off once a hide lands. */\n showing: Types.custom<boolean[]>([], { private: true }),\n },\n defaults: {\n // A node made of parts that fill would otherwise hug them.\n width: \"fill\",\n height: \"fill\",\n weights: (state) => state.series.map((s) => ((s.enabled ?? true) ? 1 : 0)),\n showing: (state) => state.series.map((s) => s.enabled ?? true),\n },\n migrate: { style: migrateChartStyle(\"cartesian\") },\n allowedChildren: [],\n children: (state) => {\n const style = () => state.style\n const domain = () => barChartDomain(state)\n let plot: Node2D | undefined\n const plotSize = () => laidOutSize(plot)\n const built = state.style\n const horizontal = state.orientation === \"horizontal\"\n const categories = barCategories(state.data, state.categoryField)\n const valueConfig = () => axisConfigOf(style(), horizontal ? \"x\" : \"y\")\n const categoryConfig = () => axisConfigOf(style(), horizontal ? \"y\" : \"x\")\n const valueCaptions = () => {\n const d = domain()\n return d.ticks.map((value) => valueLabel(state, d, value))\n }\n const showValue = horizontal ? built.showXAxis : built.showYAxis\n const showCategory = horizontal ? built.showYAxis : built.showXAxis\n\n const valueAxis = showValue\n ? (horizontal\n ? new HorizontalAxis({\n range: () => domain().range,\n markers: () => domain().ticks,\n captions: valueCaptions,\n axis: valueConfig,\n label: state.valueAxis.label ?? \"\",\n overhang: () => ({ left: overhang(style()), right: overhang(style()) }),\n width: \"fill\",\n height: \"hug\",\n })\n : new VerticalAxis({\n range: () => domain().range,\n markers: () => domain().ticks,\n captions: valueCaptions,\n axis: valueConfig,\n label: state.valueAxis.label ?? \"\",\n width: \"hug\",\n height: \"fill\",\n })) as unknown as Node2D\n : undefined\n\n const categoryAxis = showCategory\n ? (new CategoryAxis({\n categories,\n axis: categoryConfig,\n label: state.categoryAxis.label ?? \"\",\n orientation: horizontal ? \"vertical\" : \"horizontal\",\n dims: () => categoryDims(state),\n width: horizontal ? \"hug\" : \"fill\",\n height: horizontal ? \"fill\" : \"hug\",\n }) as unknown as Node2D)\n : undefined\n\n const left = horizontal ? categoryAxis : valueAxis\n const bottom = horizontal ? valueAxis : categoryAxis\n const leftConfig = horizontal ? categoryConfig : valueConfig\n const ghost = left && bottom\n ? columnGhost({\n captions: horizontal ? () => categories : valueCaptions,\n count: horizontal ? categories.length : barChartDomain(state).ticks.length,\n text: () => leftConfig().labelStyle,\n title: (horizontal ? state.categoryAxis.label : state.valueAxis.label) ?? \"\",\n titleText: () => leftConfig().titleStyle,\n tickPad: () => axisPads(leftConfig(), \"right\").tick,\n titlePad: () => axisPads(leftConfig(), \"right\").title,\n })\n : undefined\n\n const barSets = state.series.map(\n (s, i) =>\n new ChartBars({\n bars: () => seriesBars(state, i, plotSize()),\n baseline: () => valueToPx(domain(), runs(state, plotSize()).along, baselineValue(domain())),\n horizontal,\n fill: () => seriesFill(style(), s, i),\n cornerRadius: () => style().barCornerRadius,\n cornerStyle: () => style().barCornerStyle,\n growth: () => state.growth,\n dims: () => categoryDims(state),\n // A figure past a stack's end prints the stack's total; a percent stack has none worth printing, so prints its shares inside.\n values: () => (built.values === \"end\" && state.stack === \"percent\" ? \"inside\" : built.values),\n valueStyle: () => valueText(style()),\n enabled: () => state.showing[i] ?? (s.enabled ?? true),\n }) as unknown as Node2D\n )\n\n const legendAt = built.legend\n const legend = legendAt !== \"none\"\n ? (new ChartLegend({\n series: state.series,\n swatches: () => state.series.map((s, i) => seriesFill(style(), s, i)),\n legend: () => legendConfigOf(style()),\n flow: legendAt === \"right\" ? \"vertical\" : \"horizontal\",\n }) as unknown as Node2D)\n : undefined\n\n const n = state.data.length\n // Category lines fall between the slots, never through a bar.\n const boundaries = () => Array.from({ length: Math.max(0, n - 1) }, (_, i) => i + 1)\n const slots = (): Range => [0, Math.max(1, n)]\n plot = new Rect({\n children: [\n new ChartCanvas({\n fill: () => style().gridBackground,\n xGridStroke: () => style().verticalGrid,\n yGridStroke: () => style().horizontalGrid,\n xMarkers: horizontal ? () => domain().ticks : boundaries,\n yMarkers: horizontal ? boundaries : () => domain().ticks,\n xExtent: horizontal ? () => domain().range : slots,\n yExtent: horizontal ? slots : () => domain().range,\n axisStroke: () => style().axisStroke,\n xAxisAt: () => (horizontal ? 0 : baselineValue(domain())),\n yAxisAt: () => (horizontal ? baselineValue(domain()) : 0),\n }),\n ...barSets,\n ],\n }) as unknown as Node2D\n\n return asParts([\n cartesianFrame({\n background: () => style().background,\n left,\n ghost,\n plot,\n bottom,\n legend,\n legendAt,\n gap: () => frameGap(style()),\n padding: () => ({\n top: headroom(style()),\n right: horizontal && bottom ? overhang(style()) : 0,\n left: horizontal && bottom && !left ? overhang(style()) : 0,\n bottom: 0,\n }),\n }),\n ])\n },\n commands: {\n /** Axes stagger in, bars rise from the baseline, the legend fades up last. `duration` is the whole entrance. */\n enter: {\n args: {},\n // Held from arrival, so it never shows finished ahead of its draw.\n entrance: true,\n easing: easeOut(),\n run: (timeline, state, children) => {\n const parts = partsOf(children)\n const duration = timeline.duration\n const axes = duration * ENTER_SHARE.axes\n const rise = duration * ENTER_SHARE.marks\n const { legend } = parts\n const at0 = (piece: Beat[\"piece\"]): Beat => ({ at: 0, duration: 0, piece })\n return beats(timeline, [\n at0(timeline.animate(() => ({ growth: 0 }))),\n ...(legend ? [at0(legend.to({ opacity: 0, ...legendAway(state.style.legend) }))] : []),\n ...(parts.valueAxis ? [{ at: 0, duration: axes, piece: parts.valueAxis.run(\"enter\", { slide: 24 }) }] : []),\n ...(parts.categoryAxis ? [{ at: 0, duration: axes, piece: parts.categoryAxis.run(\"enter\", { slide: 24 }) }] : []),\n // No priming to 0 first: the value at `t` is a function of `t`.\n { at: axes, duration: rise, piece: timeline.animate((t) => ({ growth: t })) },\n ...(legend ? [{ at: axes + rise, duration: duration * ENTER_SHARE.legend, piece: legend.to({ opacity: 1, x: 0, y: 0 }) }] : []),\n ])\n },\n },\n /** Bring series `index` back, the group reflowing to make room, with its legend entry. */\n showSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, state, children) => toggling(timeline, state, children, timeline.args.seriesIndex, 1),\n },\n /** The mirror of `showSeries`: bars narrow away (stacked, sink out) while the rest widen into the space. */\n hideSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, state, children) => toggling(timeline, state, children, timeline.args.seriesIndex, 0),\n },\n /** Fade every other series, bars and legend entry, to focus on `index`. Nothing moves, so the group does not reflow. */\n spotlightSeries: {\n args: { seriesIndex: SERIES_ARG },\n easing: easeOut(),\n run: (timeline, _state, children) => {\n const parts = partsOf(children)\n const index = timeline.args.seriesIndex\n return timeline.together([\n ...parts.bars.map((bars, i) => bars.to({ opacity: i === index ? 1 : SPOTLIGHT_DIM })),\n ...(parts.legend ? [parts.legend.run(\"spotlightSeries\", { index })] : []),\n timeline.wait(timeline.duration),\n ])\n },\n },\n /**\n * Fade every other category's bars and caption to {@link SPOTLIGHT_DIM}. While\n * another is lit the focus moves directly. A missing category takes its slot\n * and changes nothing.\n */\n spotlightCategory: {\n args: { categoryIndex: Types.number(0, { min: 0, step: 1 }) },\n easing: easeOut(),\n run: (timeline, state) => {\n const index = timeline.args.categoryIndex\n if (index < 0 || index >= state.data.length) return timeline.wait(timeline.duration)\n const from = state.spotlightReveal\n return timeline.animate((t) => ({ spotlight: index, spotlightReveal: from + (1 - from) * t }))\n },\n },\n /** Every category back to full; the lit one is held until the fade lands. A no-op when nothing is lit, which still takes its slot. */\n clearCategory: {\n args: {},\n easing: easeOut(),\n run: (timeline, state) => {\n const from = state.spotlightReveal\n if (from === 0) return timeline.wait(timeline.duration)\n const lit = state.spotlight\n return timeline.animate((t) => (t >= 1 ? { spotlight: null, spotlightReveal: 0 } : { spotlight: lit, spotlightReveal: from * (1 - t) }))\n },\n },\n },\n})\n\nexport type BarChart = NodeOf<typeof BarChart>\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type DataRecord, type Fill, type CornerRadiusResolved as _CornerRadiusResolved, type CornerStyleResolved as _CornerStyleResolved, type RectCornerRadius as _RectCornerRadius, type RectCornerStyle as _RectCornerStyle } from "@motionscript/sdk";
|
|
1
|
+
import { type DataRecord, type Fill, type CornerRadiusResolved as _CornerRadiusResolved, type CornerStyleResolved as _CornerStyleResolved, type RectCornerRadius as _RectCornerRadius, type RectCornerStyle as _RectCornerStyle, type TextStyle as _TextStyle } from "@motionscript/sdk";
|
|
2
2
|
import { type ChartSeries, type Range } from "../kit/shared.js";
|
|
3
3
|
/** One bar per row, beside its siblings in the category slot or stacked on them: {@link ChartSeries} under the name for what it draws here. */
|
|
4
4
|
export type BarSeries = ChartSeries;
|
|
@@ -53,6 +53,7 @@ export declare const BAR_MARKS: {
|
|
|
53
53
|
barGap: import("@motionscript/sdk").Type<number, number, false>;
|
|
54
54
|
};
|
|
55
55
|
export declare const BAR_LABELS: {
|
|
56
|
+
valueText: import("@motionscript/sdk").Type<_TextStyle, _TextStyle, false>;
|
|
56
57
|
/** Read as the chart is built: each bar's value past its end, inside it, or none. */
|
|
57
58
|
values: import("@motionscript/sdk").Type<"end" | "inside" | "none", "end" | "inside" | "none", false>;
|
|
58
59
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/bar-chart/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,IAAI,EAET,KAAK,oBAAoB,IAAI,qBAAqB,EAClD,KAAK,mBAAmB,IAAI,oBAAoB,EAChD,KAAK,gBAAgB,IAAI,iBAAiB,EAC1C,KAAK,eAAe,IAAI,gBAAgB,
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/bar-chart/shared.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EACf,KAAK,IAAI,EAET,KAAK,oBAAoB,IAAI,qBAAqB,EAClD,KAAK,mBAAmB,IAAI,oBAAoB,EAChD,KAAK,gBAAgB,IAAI,iBAAiB,EAC1C,KAAK,eAAe,IAAI,gBAAgB,EACxC,KAAK,SAAS,IAAI,UAAU,EAC7B,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAwB,KAAK,WAAW,EAAE,KAAK,KAAK,EAAE,MAAM,eAAe,CAAA;AAGlF,+IAA+I;AAC/I,MAAM,MAAM,SAAS,GAAG,WAAW,CAAA;AAEnC,2FAA2F;AAC3F,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,CAAA;AAErD,wFAAwF;AACxF,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,YAAY,CAAA;AAEtD;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,qGAAqG;IACrG,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,KAAK,EAAE,OAAO,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,GAAE,SAAS,MAAM,EAAO,GAAG,OAAO,EAAE,CA6BnI;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAEzE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,SAAS,SAAS,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,KAAK,CAUpI;AAED,2LAA2L;AAC3L,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAAE,EAClB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,KAAK,GAAG,SAAS,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B,KAAK,CAKP;AAED,gFAAgF;AAChF,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAQxC;AAED,sEAAsE;AACtE,eAAO,MAAM,SAAS;IACpB;;;;OAIG;;;IAGH,oFAAoF;;IAEpF,yDAAyD;;CAE1D,CAAA;AAED,eAAO,MAAM,UAAU;;IACrB,qFAAqF;;CAGtF,CAAA"}
|
package/dist/bar-chart/shared.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Types, fillOps, } from "@motionscript/sdk";
|
|
2
2
|
import { niceRange, num, text } from "../kit/shared.js";
|
|
3
|
+
import { VALUE_TEXT } from "../kit/style.js";
|
|
3
4
|
/**
|
|
4
5
|
* One row's spans, in series order. Stacking keeps a running sum on each side
|
|
5
6
|
* of zero, so a negative value stacks downward from the baseline rather than
|
|
@@ -95,5 +96,6 @@ export const BAR_MARKS = {
|
|
|
95
96
|
export const BAR_LABELS = {
|
|
96
97
|
/** Read as the chart is built: each bar's value past its end, inside it, or none. */
|
|
97
98
|
values: Types.oneOf(["none", "end", "inside"], { animatable: false }),
|
|
99
|
+
...VALUE_TEXT,
|
|
98
100
|
};
|
|
99
101
|
//# sourceMappingURL=shared.js.map
|