@voila.dev/chart 5.0.114 → 5.0.117

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.
Files changed (86) hide show
  1. package/dist/canvas/paint-scene.d.ts.map +1 -1
  2. package/dist/canvas/paint-scene.js +3 -1
  3. package/dist/canvas/paint-scene.js.map +2 -2
  4. package/dist/contour/density.d.ts.map +1 -1
  5. package/dist/contour/density.js +2 -0
  6. package/dist/contour/density.js.map +2 -2
  7. package/dist/core/marks/area.d.ts.map +1 -1
  8. package/dist/core/marks/area.js +27 -11
  9. package/dist/core/marks/area.js.map +2 -2
  10. package/dist/core/marks/bar.d.ts.map +1 -1
  11. package/dist/core/marks/bar.js +2 -0
  12. package/dist/core/marks/bar.js.map +2 -2
  13. package/dist/core/marks/line.d.ts.map +1 -1
  14. package/dist/core/marks/line.js +13 -4
  15. package/dist/core/marks/line.js.map +2 -2
  16. package/dist/core/marks/polar.d.ts.map +1 -1
  17. package/dist/core/marks/polar.js +22 -5
  18. package/dist/core/marks/polar.js.map +2 -2
  19. package/dist/core/marks/shared.d.ts +8 -1
  20. package/dist/core/marks/shared.d.ts.map +1 -1
  21. package/dist/core/marks/shared.js.map +2 -2
  22. package/dist/core/marks/stats/difference.d.ts.map +1 -1
  23. package/dist/core/marks/stats/difference.js +20 -7
  24. package/dist/core/marks/stats/difference.js.map +2 -2
  25. package/dist/core/motion/arc-motion.d.ts +9 -0
  26. package/dist/core/motion/arc-motion.d.ts.map +1 -0
  27. package/dist/core/motion/arc-motion.js +67 -0
  28. package/dist/core/motion/arc-motion.js.map +7 -0
  29. package/dist/core/motion/enter-exit.d.ts +6 -0
  30. package/dist/core/motion/enter-exit.d.ts.map +1 -0
  31. package/dist/core/motion/enter-exit.js +20 -0
  32. package/dist/core/motion/enter-exit.js.map +7 -0
  33. package/dist/core/motion/leaving.d.ts +12 -0
  34. package/dist/core/motion/leaving.d.ts.map +1 -0
  35. package/dist/core/motion/leaving.js +33 -0
  36. package/dist/core/motion/leaving.js.map +7 -0
  37. package/dist/core/motion/motion-store.d.ts +4 -1
  38. package/dist/core/motion/motion-store.d.ts.map +1 -1
  39. package/dist/core/motion/motion-store.js +251 -100
  40. package/dist/core/motion/motion-store.js.map +3 -3
  41. package/dist/core/motion/points-motion.d.ts +6 -0
  42. package/dist/core/motion/points-motion.d.ts.map +1 -0
  43. package/dist/core/motion/points-motion.js +140 -0
  44. package/dist/core/motion/points-motion.js.map +7 -0
  45. package/dist/core/motion/strings.d.ts +18 -0
  46. package/dist/core/motion/strings.d.ts.map +1 -0
  47. package/dist/core/motion/strings.js +34 -0
  48. package/dist/core/motion/strings.js.map +7 -0
  49. package/dist/core/types.d.ts +85 -0
  50. package/dist/core/types.d.ts.map +1 -1
  51. package/dist/geo/geo.d.ts.map +1 -1
  52. package/dist/geo/geo.js +2 -0
  53. package/dist/geo/geo.js.map +2 -2
  54. package/dist/react/chart.d.ts.map +1 -1
  55. package/dist/react/chart.js +6 -2
  56. package/dist/react/chart.js.map +2 -2
  57. package/dist/react/svg-scene.d.ts.map +1 -1
  58. package/dist/react/svg-scene.js +3 -1
  59. package/dist/react/svg-scene.js.map +2 -2
  60. package/dist/react/use-animated-scene.d.ts.map +1 -1
  61. package/dist/react/use-animated-scene.js +14 -2
  62. package/dist/react/use-animated-scene.js.map +2 -2
  63. package/dist/voronoi/voronoi.d.ts.map +1 -1
  64. package/dist/voronoi/voronoi.js +2 -0
  65. package/dist/voronoi/voronoi.js.map +2 -2
  66. package/package.json +2 -2
  67. package/src/canvas/paint-scene.ts +5 -1
  68. package/src/contour/density.ts +2 -0
  69. package/src/core/marks/area.ts +28 -13
  70. package/src/core/marks/bar.ts +2 -0
  71. package/src/core/marks/line.ts +15 -8
  72. package/src/core/marks/polar.ts +22 -5
  73. package/src/core/marks/shared.ts +8 -0
  74. package/src/core/marks/stats/difference.ts +28 -8
  75. package/src/core/motion/arc-motion.ts +113 -0
  76. package/src/core/motion/enter-exit.ts +44 -0
  77. package/src/core/motion/leaving.ts +55 -0
  78. package/src/core/motion/motion-store.ts +332 -109
  79. package/src/core/motion/points-motion.ts +190 -0
  80. package/src/core/motion/strings.ts +68 -0
  81. package/src/core/types.ts +98 -0
  82. package/src/geo/geo.ts +2 -0
  83. package/src/react/chart.tsx +8 -2
  84. package/src/react/svg-scene.tsx +5 -1
  85. package/src/react/use-animated-scene.ts +18 -2
  86. package/src/voronoi/voronoi.ts +2 -0
@@ -0,0 +1,140 @@
1
+ import { areaPath, linePath, polygonPath } from "../paths.js";
2
+ const POINT_FIELDS = ["x", "y", "x0", "y0"];
3
+ function pointsPath(geometry) {
4
+ if (geometry.kind !== "points") return "";
5
+ const { runs, shape, curve } = geometry;
6
+ if (shape === "polygon") return polygonPath(runs[0] ?? []);
7
+ return runs.map(
8
+ (run) => shape === "area" ? areaPath(
9
+ run,
10
+ run.map((point) => ({
11
+ x: point.x0 ?? point.x,
12
+ y: point.y0 ?? point.y
13
+ })),
14
+ curve
15
+ ) : linePath(run, curve)
16
+ ).join("");
17
+ }
18
+ function channel(key, field) {
19
+ return `${key}${field}`;
20
+ }
21
+ function fields(point, into) {
22
+ for (const field of POINT_FIELDS) {
23
+ const value = point[field];
24
+ if (value !== void 0) into.set(channel(point.key, field), value);
25
+ }
26
+ }
27
+ function as(key, point) {
28
+ return { ...point, key };
29
+ }
30
+ function neighbour(order, index, has) {
31
+ for (let at = index - 1; at >= 0; at -= 1) {
32
+ const found = has.get(order[at]);
33
+ if (found) return found;
34
+ }
35
+ for (let at = index + 1; at < order.length; at += 1) {
36
+ const found = has.get(order[at]);
37
+ if (found) return found;
38
+ }
39
+ return void 0;
40
+ }
41
+ function mergeOrder(before, after) {
42
+ const merged = [...after];
43
+ const known = new Set(after);
44
+ for (const [index, key] of before.entries()) {
45
+ if (known.has(key)) continue;
46
+ const previous = before[index - 1];
47
+ merged.splice(
48
+ previous === void 0 ? 0 : merged.indexOf(previous) + 1,
49
+ 0,
50
+ key
51
+ );
52
+ known.add(key);
53
+ }
54
+ return merged;
55
+ }
56
+ function pointsPlan(from, to) {
57
+ if (from.runs.length !== to.runs.length || from.shape !== to.shape)
58
+ return void 0;
59
+ const starts = /* @__PURE__ */ new Map();
60
+ const targets = /* @__PURE__ */ new Map();
61
+ const orders = to.runs.map((run, index) => {
62
+ const old = new Map(
63
+ (from.runs[index] ?? []).map((point) => [point.key, point])
64
+ );
65
+ const next = new Map(run.map((point) => [point.key, point]));
66
+ if (old.size !== (from.runs[index]?.length ?? 0) || next.size !== run.length) {
67
+ return void 0;
68
+ }
69
+ const order = mergeOrder([...old.keys()], [...next.keys()]);
70
+ for (const [at, key] of order.entries()) {
71
+ const target = next.get(key) ?? neighbour(order, at, next);
72
+ const start = old.get(key) ?? neighbour(order, at, old) ?? target;
73
+ if (target === void 0 || start === void 0) continue;
74
+ fields(as(key, start), starts);
75
+ fields(as(key, target), targets);
76
+ }
77
+ return order;
78
+ });
79
+ if (orders.some((order) => order === void 0)) return void 0;
80
+ return {
81
+ starts,
82
+ targets,
83
+ build(value) {
84
+ const area = to.runs.some((run) => run[0]?.y0 !== void 0);
85
+ return {
86
+ ...to,
87
+ runs: orders.map(
88
+ (order) => order.map((key) => ({
89
+ key,
90
+ x: value(channel(key, "x")),
91
+ y: value(channel(key, "y")),
92
+ ...area ? { x0: value(channel(key, "x0")), y0: value(channel(key, "y0")) } : {}
93
+ }))
94
+ )
95
+ };
96
+ }
97
+ };
98
+ }
99
+ function pointsLength(geometry) {
100
+ if (geometry.kind !== "points") return 0;
101
+ let length = 0;
102
+ for (const run of geometry.runs) {
103
+ for (let index = 1; index < run.length; index += 1) {
104
+ const a = run[index - 1];
105
+ const b = run[index];
106
+ length += Math.hypot(b.x - a.x, b.y - a.y);
107
+ }
108
+ }
109
+ return length * 1.1;
110
+ }
111
+ function collapsed(node) {
112
+ const geometry = node.geometry;
113
+ if (geometry?.kind !== "points" || geometry.runs[0]?.[0]?.y0 === void 0) {
114
+ return void 0;
115
+ }
116
+ return {
117
+ ...node,
118
+ geometry: {
119
+ ...geometry,
120
+ runs: geometry.runs.map(
121
+ (run) => run.map((point) => ({
122
+ ...point,
123
+ x: point.x0 ?? point.x,
124
+ y: point.y0 ?? point.y
125
+ }))
126
+ )
127
+ }
128
+ };
129
+ }
130
+ const POINTS_MOTION = {
131
+ plan: (from, to) => from.kind === "points" && to.kind === "points" ? pointsPlan(from, to) : void 0,
132
+ draw: pointsPath,
133
+ length: pointsLength,
134
+ enter: (node) => node.enter === "grow" ? collapsed(node) : void 0
135
+ };
136
+ export {
137
+ POINTS_MOTION,
138
+ pointsPath
139
+ };
140
+ //# sourceMappingURL=points-motion.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/motion/points-motion.ts"],
4
+ "sourcesContent": ["import { areaPath, linePath, polygonPath } from \"#/core/paths.ts\";\nimport type {\n\tGeometryMotion,\n\tGeometryPlan,\n\tGeometryPoint,\n\tSceneGeometry,\n\tScenePath,\n} from \"#/core/types.ts\";\n\ntype Points = Extract<SceneGeometry, { kind: \"points\" }>;\n\nconst POINT_FIELDS = [\"x\", \"y\", \"x0\", \"y0\"] as const;\n\n/** A line, an area or a radar outline through its points. */\nexport function pointsPath(geometry: SceneGeometry): string {\n\tif (geometry.kind !== \"points\") return \"\";\n\tconst { runs, shape, curve } = geometry;\n\tif (shape === \"polygon\") return polygonPath(runs[0] ?? []);\n\treturn runs\n\t\t.map((run) =>\n\t\t\tshape === \"area\"\n\t\t\t\t? areaPath(\n\t\t\t\t\t\trun,\n\t\t\t\t\t\trun.map((point) => ({\n\t\t\t\t\t\t\tx: point.x0 ?? point.x,\n\t\t\t\t\t\t\ty: point.y0 ?? point.y,\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tcurve,\n\t\t\t\t\t)\n\t\t\t\t: linePath(run, curve),\n\t\t)\n\t\t.join(\"\");\n}\n\nfunction channel(key: string, field: string): string {\n\treturn `${key}\\u0001${field}`;\n}\n\nfunction fields(point: GeometryPoint, into: Map<string, number>) {\n\tfor (const field of POINT_FIELDS) {\n\t\tconst value = point[field];\n\t\tif (value !== undefined) into.set(channel(point.key, field), value);\n\t}\n}\n\n/** `point`'s numbers under `key`'s channel names: a point entering from, or folding into, a neighbour. */\nfunction as(key: string, point: GeometryPoint): GeometryPoint {\n\treturn { ...point, key };\n}\n\n/** The nearest of `order` around `index` that `has` knows: looking back first, then ahead. */\nfunction neighbour(\n\torder: readonly string[],\n\tindex: number,\n\thas: ReadonlyMap<string, GeometryPoint>,\n): GeometryPoint | undefined {\n\tfor (let at = index - 1; at >= 0; at -= 1) {\n\t\tconst found = has.get(order[at] as string);\n\t\tif (found) return found;\n\t}\n\tfor (let at = index + 1; at < order.length; at += 1) {\n\t\tconst found = has.get(order[at] as string);\n\t\tif (found) return found;\n\t}\n\treturn undefined;\n}\n\n/** The new keys, with the ones that left kept after the old point before them. */\nfunction mergeOrder(\n\tbefore: readonly string[],\n\tafter: readonly string[],\n): string[] {\n\tconst merged = [...after];\n\tconst known = new Set(after);\n\tfor (const [index, key] of before.entries()) {\n\t\tif (known.has(key)) continue;\n\t\tconst previous = before[index - 1];\n\t\tmerged.splice(\n\t\t\tprevious === undefined ? 0 : merged.indexOf(previous) + 1,\n\t\t\t0,\n\t\t\tkey,\n\t\t);\n\t\tknown.add(key);\n\t}\n\treturn merged;\n}\n\n/**\n * Points keyed by x. A point that appears enters from its nearest old\n * neighbour (a month added on the right slides out of the last one); a\n * point that leaves folds into its nearest new neighbour. Undefined when the\n * runs don't line up: the caller falls back to tweening the path.\n */\nfunction pointsPlan(from: Points, to: Points): GeometryPlan | undefined {\n\tif (from.runs.length !== to.runs.length || from.shape !== to.shape)\n\t\treturn undefined;\n\tconst starts = new Map<string, number>();\n\tconst targets = new Map<string, number>();\n\tconst orders = to.runs.map((run, index): string[] | undefined => {\n\t\tconst old = new Map(\n\t\t\t(from.runs[index] ?? []).map((point) => [point.key, point]),\n\t\t);\n\t\tconst next = new Map(run.map((point) => [point.key, point]));\n\t\t// Two points under one key can't be told apart: tween the path instead.\n\t\tif (\n\t\t\told.size !== (from.runs[index]?.length ?? 0) ||\n\t\t\tnext.size !== run.length\n\t\t) {\n\t\t\treturn undefined;\n\t\t}\n\t\tconst order = mergeOrder([...old.keys()], [...next.keys()]);\n\t\tfor (const [at, key] of order.entries()) {\n\t\t\tconst target = next.get(key) ?? neighbour(order, at, next);\n\t\t\tconst start = old.get(key) ?? neighbour(order, at, old) ?? target;\n\t\t\tif (target === undefined || start === undefined) continue;\n\t\t\tfields(as(key, start), starts);\n\t\t\tfields(as(key, target), targets);\n\t\t}\n\t\treturn order;\n\t});\n\tif (orders.some((order) => order === undefined)) return undefined;\n\treturn {\n\t\tstarts,\n\t\ttargets,\n\t\tbuild(value) {\n\t\t\tconst area = to.runs.some((run) => run[0]?.y0 !== undefined);\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\truns: (orders as string[][]).map((order) =>\n\t\t\t\t\torder.map((key) => ({\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tx: value(channel(key, \"x\")),\n\t\t\t\t\t\ty: value(channel(key, \"y\")),\n\t\t\t\t\t\t...(area\n\t\t\t\t\t\t\t? { x0: value(channel(key, \"x0\")), y0: value(channel(key, \"y0\")) }\n\t\t\t\t\t\t\t: {}),\n\t\t\t\t\t})),\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t};\n}\n\n/** A line's length along its points: what Canvas dashes against to trace it in. */\nfunction pointsLength(geometry: SceneGeometry): number {\n\tif (geometry.kind !== \"points\") return 0;\n\tlet length = 0;\n\tfor (const run of geometry.runs) {\n\t\tfor (let index = 1; index < run.length; index += 1) {\n\t\t\tconst a = run[index - 1] as GeometryPoint;\n\t\t\tconst b = run[index] as GeometryPoint;\n\t\t\tlength += Math.hypot(b.x - a.x, b.y - a.y);\n\t\t}\n\t}\n\t// A curve runs a little longer than its chords; the dash must cover it all.\n\treturn length * 1.1;\n}\n\n/** An area, or the line over it, grows from its lower edge. */\nfunction collapsed(node: ScenePath): ScenePath | undefined {\n\tconst geometry = node.geometry;\n\t// A line over an area carries the area's lower edge too, so the two grow as one.\n\tif (geometry?.kind !== \"points\" || geometry.runs[0]?.[0]?.y0 === undefined) {\n\t\treturn undefined;\n\t}\n\treturn {\n\t\t...node,\n\t\tgeometry: {\n\t\t\t...geometry,\n\t\t\truns: geometry.runs.map((run) =>\n\t\t\t\trun.map((point) => ({\n\t\t\t\t\t...point,\n\t\t\t\t\tx: point.x0 ?? point.x,\n\t\t\t\t\ty: point.y0 ?? point.y,\n\t\t\t\t})),\n\t\t\t),\n\t\t},\n\t};\n}\n\n/** Lines, areas and radar outlines: points keyed by x (or by axis). */\nexport const POINTS_MOTION: GeometryMotion = {\n\tplan: (from, to) =>\n\t\tfrom.kind === \"points\" && to.kind === \"points\"\n\t\t\t? pointsPlan(from, to)\n\t\t\t: undefined,\n\tdraw: pointsPath,\n\tlength: pointsLength,\n\tenter: (node) => (node.enter === \"grow\" ? collapsed(node) : undefined),\n};\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { SceneNode } from "../types.js";
2
+ /** The channels that move as a string mixed by progress, not as a number. */
3
+ export declare const STRING_CHANNELS: readonly ["d", "fill", "stroke"];
4
+ export type StringChannel = (typeof STRING_CHANNELS)[number];
5
+ /**
6
+ * A colour part of the way to another, as CSS: `color-mix()` reads the
7
+ * chart's `var(--chart-1)` tokens as they are, so nothing parses colours,
8
+ * and the Canvas resolver computes the mix against the page like any
9
+ * other colour.
10
+ */
11
+ export declare function colourBetween(from: string, to: string, progress: number): string;
12
+ /** What a string channel of `node` reads now. */
13
+ export declare function stringOf(node: SceneNode | undefined, channel: StringChannel): string | undefined;
14
+ /** The mix from what was painted to what `node` asks for. */
15
+ export declare function stringMixer(node: SceneNode, channel: StringChannel, from: string, to: string): (progress: number) => string;
16
+ /** `node` with each string channel set to its moving value. */
17
+ export declare function withStrings(node: SceneNode, values: Partial<Record<StringChannel, string>>): SceneNode;
18
+ //# sourceMappingURL=strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strings.d.ts","sourceRoot":"","sources":["../../../src/core/motion/strings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,6EAA6E;AAC7E,eAAO,MAAM,eAAe,YAAI,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAU,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAK7D;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,QAAQ,EAAE,MAAM,GACd,MAAM,CAKR;AAED,iDAAiD;AACjD,wBAAgB,QAAQ,CACvB,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,OAAO,EAAE,aAAa,GACpB,MAAM,GAAG,SAAS,CAOpB;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAC1B,IAAI,EAAE,SAAS,EACf,OAAO,EAAE,aAAa,EACtB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACR,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAM9B;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAC1B,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,GAC5C,SAAS,CAQX"}
@@ -0,0 +1,34 @@
1
+ import { tweenPath } from "./tween.js";
2
+ const STRING_CHANNELS = ["d", "fill", "stroke"];
3
+ const COLOUR_STEPS = 50;
4
+ function colourBetween(from, to, progress) {
5
+ const step = Math.round(Math.min(1, Math.max(0, progress)) * COLOUR_STEPS);
6
+ if (step === 0) return from;
7
+ if (step === COLOUR_STEPS) return to;
8
+ return `color-mix(in oklab, ${to} ${step * 100 / COLOUR_STEPS}%, ${from})`;
9
+ }
10
+ function stringOf(node, channel) {
11
+ if (node === void 0 || node.kind === "group") return void 0;
12
+ return channel === "d" ? node.kind === "path" ? node.d : void 0 : node.paint[channel];
13
+ }
14
+ function stringMixer(node, channel, from, to) {
15
+ if (channel !== "d") {
16
+ return (progress) => colourBetween(from, to, progress);
17
+ }
18
+ const morph = node.kind === "path" ? node.morph : void 0;
19
+ return morph ? morph(from, to) : (progress) => tweenPath(from, to, progress);
20
+ }
21
+ function withStrings(node, values) {
22
+ if (node.kind === "group") return node;
23
+ const { d, ...colours } = values;
24
+ const shaped = d === void 0 || node.kind !== "path" ? node : { ...node, d };
25
+ return Object.keys(colours).length === 0 ? shaped : { ...shaped, paint: { ...shaped.paint, ...colours } };
26
+ }
27
+ export {
28
+ STRING_CHANNELS,
29
+ colourBetween,
30
+ stringMixer,
31
+ stringOf,
32
+ withStrings
33
+ };
34
+ //# sourceMappingURL=strings.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/motion/strings.ts"],
4
+ "sourcesContent": ["import { tweenPath } from \"#/core/motion/tween.ts\";\nimport type { SceneNode } from \"#/core/types.ts\";\n\n/** The channels that move as a string mixed by progress, not as a number. */\nexport const STRING_CHANNELS = [\"d\", \"fill\", \"stroke\"] as const;\n\nexport type StringChannel = (typeof STRING_CHANNELS)[number];\n\n/** 2 % steps: at most 51 colours per pair, so the Canvas resolver's cache stays small. */\nconst COLOUR_STEPS = 50;\n\n/**\n * A colour part of the way to another, as CSS: `color-mix()` reads the\n * chart's `var(--chart-1)` tokens as they are, so nothing parses colours,\n * and the Canvas resolver computes the mix against the page like any\n * other colour.\n */\nexport function colourBetween(\n\tfrom: string,\n\tto: string,\n\tprogress: number,\n): string {\n\tconst step = Math.round(Math.min(1, Math.max(0, progress)) * COLOUR_STEPS);\n\tif (step === 0) return from;\n\tif (step === COLOUR_STEPS) return to;\n\treturn `color-mix(in oklab, ${to} ${(step * 100) / COLOUR_STEPS}%, ${from})`;\n}\n\n/** What a string channel of `node` reads now. */\nexport function stringOf(\n\tnode: SceneNode | undefined,\n\tchannel: StringChannel,\n): string | undefined {\n\tif (node === undefined || node.kind === \"group\") return undefined;\n\treturn channel === \"d\"\n\t\t? node.kind === \"path\"\n\t\t\t? node.d\n\t\t\t: undefined\n\t\t: node.paint[channel];\n}\n\n/** The mix from what was painted to what `node` asks for. */\nexport function stringMixer(\n\tnode: SceneNode,\n\tchannel: StringChannel,\n\tfrom: string,\n\tto: string,\n): (progress: number) => string {\n\tif (channel !== \"d\") {\n\t\treturn (progress) => colourBetween(from, to, progress);\n\t}\n\tconst morph = node.kind === \"path\" ? node.morph : undefined;\n\treturn morph ? morph(from, to) : (progress) => tweenPath(from, to, progress);\n}\n\n/** `node` with each string channel set to its moving value. */\nexport function withStrings(\n\tnode: SceneNode,\n\tvalues: Partial<Record<StringChannel, string>>,\n): SceneNode {\n\tif (node.kind === \"group\") return node;\n\tconst { d, ...colours } = values;\n\tconst shaped =\n\t\td === undefined || node.kind !== \"path\" ? node : { ...node, d };\n\treturn Object.keys(colours).length === 0\n\t\t? shaped\n\t\t: ({ ...shaped, paint: { ...shaped.paint, ...colours } } as SceneNode);\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAInB,MAAM,kBAAkB,CAAC,KAAK,QAAQ,QAAQ;AAKrD,MAAM,eAAe;AAQd,SAAS,cACf,MACA,IACA,UACS;AACT,QAAM,OAAO,KAAK,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,CAAC,IAAI,YAAY;AACzE,MAAI,SAAS,EAAG,QAAO;AACvB,MAAI,SAAS,aAAc,QAAO;AAClC,SAAO,uBAAuB,EAAE,IAAK,OAAO,MAAO,YAAY,MAAM,IAAI;AAC1E;AAGO,SAAS,SACf,MACA,SACqB;AACrB,MAAI,SAAS,UAAa,KAAK,SAAS,QAAS,QAAO;AACxD,SAAO,YAAY,MAChB,KAAK,SAAS,SACb,KAAK,IACL,SACD,KAAK,MAAM,OAAO;AACtB;AAGO,SAAS,YACf,MACA,SACA,MACA,IAC+B;AAC/B,MAAI,YAAY,KAAK;AACpB,WAAO,CAAC,aAAa,cAAc,MAAM,IAAI,QAAQ;AAAA,EACtD;AACA,QAAM,QAAQ,KAAK,SAAS,SAAS,KAAK,QAAQ;AAClD,SAAO,QAAQ,MAAM,MAAM,EAAE,IAAI,CAAC,aAAa,UAAU,MAAM,IAAI,QAAQ;AAC5E;AAGO,SAAS,YACf,MACA,QACY;AACZ,MAAI,KAAK,SAAS,QAAS,QAAO;AAClC,QAAM,EAAE,GAAG,GAAG,QAAQ,IAAI;AAC1B,QAAM,SACL,MAAM,UAAa,KAAK,SAAS,SAAS,OAAO,EAAE,GAAG,MAAM,EAAE;AAC/D,SAAO,OAAO,KAAK,OAAO,EAAE,WAAW,IACpC,SACC,EAAE,GAAG,QAAQ,OAAO,EAAE,GAAG,OAAO,OAAO,GAAG,QAAQ,EAAE;AACzD;",
6
+ "names": []
7
+ }
@@ -66,6 +66,15 @@ export interface ChartPaint {
66
66
  readonly strokeOpacity?: number;
67
67
  /** Fill with diagonal hatching in the fill colour: a value pencilled in, not yet true. */
68
68
  readonly hatch?: boolean;
69
+ /**
70
+ * Only the first `fraction` of the stroke is drawn: a line tracing itself
71
+ * in. `length` is the path's length in pixels, which Canvas needs for its
72
+ * dash and SVG doesn't (it measures with `pathLength`).
73
+ */
74
+ readonly drawn?: {
75
+ readonly fraction: number;
76
+ readonly length: number;
77
+ };
69
78
  }
70
79
  export interface ChartTextPaint extends ChartPaint {
71
80
  readonly fontSize?: number;
@@ -80,7 +89,15 @@ interface SceneNodeBase {
80
89
  readonly series?: string;
81
90
  /** A role for styling and tests: "mark", "axis", "grid", "label"… */
82
91
  readonly role?: string;
92
+ /** How the node appears when an update adds it: see `ChartEnter`. Fades by default. */
93
+ readonly enter?: ChartEnter;
83
94
  }
95
+ /**
96
+ * How a data mark appears. "grow" rises from its baseline (bars, areas) or
97
+ * opens from its neighbour (slices); "draw" traces a line in on the first
98
+ * render; "fade" fades in; "none" is there at once.
99
+ */
100
+ export type ChartEnter = "grow" | "draw" | "fade" | "none";
84
101
  export interface SceneGroup extends SceneNodeBase {
85
102
  readonly kind: "group";
86
103
  /** Shifts the children: a facet's cell drawn at its place in the grid. Clips are in the shifted space. */
@@ -98,14 +115,82 @@ export interface SceneRect extends SceneNodeBase {
98
115
  readonly width: number;
99
116
  readonly height: number;
100
117
  readonly corners?: ChartCorners;
118
+ /** The edge a bar grows from and shrinks back to: `y` for a column, `x` for a bar, in pixels. */
119
+ readonly baseline?: {
120
+ readonly axis: "x" | "y";
121
+ readonly at: number;
122
+ };
101
123
  readonly paint: ChartPaint;
102
124
  }
103
125
  /** Any outline: a line, an area, a wedge, a country. `d` is SVG path data, which `Path2D` reads as well. */
104
126
  export interface ScenePath extends SceneNodeBase {
105
127
  readonly kind: "path";
106
128
  readonly d: string;
129
+ /** What the shape means, when it has a simple meaning: motion moves that, then redraws `d`. */
130
+ readonly geometry?: SceneGeometry;
131
+ /**
132
+ * How that geometry moves, brought by the mark that drew it (like
133
+ * `morph`), so a chart only loads the motion of the shapes it has.
134
+ */
135
+ readonly motion?: GeometryMotion;
107
136
  readonly paint: ChartPaint;
137
+ /**
138
+ * How an update moves this outline into a new one whose commands differ:
139
+ * a country, a contour, a cell. Set by the marks whose shapes have no
140
+ * simpler meaning, so the morph only loads with them; without it, paths
141
+ * whose commands differ swap at the end.
142
+ */
143
+ readonly morph?: PathMorpher;
144
+ }
145
+ /** A point of a line, an area or a radar, keyed by its position so an update can slide it. */
146
+ export interface GeometryPoint {
147
+ readonly key: string;
148
+ readonly x: number;
149
+ readonly y: number;
150
+ /** The area's lower edge under this point. */
151
+ readonly x0?: number;
152
+ readonly y0?: number;
153
+ }
154
+ export type SceneGeometry = {
155
+ readonly kind: "points";
156
+ /** One run per unbroken stretch: a gap in the data splits the line. */
157
+ readonly runs: ReadonlyArray<ReadonlyArray<GeometryPoint>>;
158
+ readonly shape: "line" | "area" | "polygon";
159
+ readonly curve?: ChartCurve;
160
+ } | {
161
+ readonly kind: "arc";
162
+ readonly cx: number;
163
+ readonly cy: number;
164
+ readonly innerRadius: number;
165
+ readonly outerRadius: number;
166
+ readonly startAngle: number;
167
+ readonly endAngle: number;
168
+ };
169
+ /**
170
+ * A geometry in motion: every number it has, by channel name, where each
171
+ * starts and where it goes, and how to rebuild the shape from the numbers of
172
+ * one frame. The store springs the numbers; the plan only knows shapes.
173
+ */
174
+ export interface GeometryPlan {
175
+ readonly starts: ReadonlyMap<string, number>;
176
+ readonly targets: ReadonlyMap<string, number>;
177
+ build(value: (channel: string) => number): SceneGeometry;
178
+ }
179
+ /** What the motion store asks of a kind of geometry. */
180
+ export interface GeometryMotion {
181
+ /** How `from` (what is painted) becomes `to`; undefined to tween the path instead. */
182
+ plan(from: SceneGeometry, to: SceneGeometry): GeometryPlan | undefined;
183
+ /** The path data of one frame, through the mark's own builder, so every frame is a valid shape. */
184
+ draw(geometry: SceneGeometry): string;
185
+ /** Its length in pixels: what Canvas dashes against to trace a line in. */
186
+ length?(geometry: SceneGeometry): number;
187
+ /** The shape a node an update adds grows from; `siblings` is its new list, `known` the old scene. */
188
+ enter?(node: ScenePath, siblings: readonly SceneNode[], known: ReadonlyMap<string, SceneNode>): ScenePath | undefined;
189
+ /** The shape a node an update removes collapses to; `siblings` is its old list, `known` the new scene. */
190
+ exit?(node: ScenePath, siblings: readonly SceneNode[], known: ReadonlyMap<string, SceneNode>): ScenePath | undefined;
108
191
  }
192
+ /** The outlines between two paths, 0 at `from` and 1 at `to`. */
193
+ export type PathMorpher = (from: string, to: string) => (progress: number) => string;
109
194
  export interface SceneCircle extends SceneNodeBase {
110
195
  readonly kind: "circle";
111
196
  readonly cx: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/geo/geo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"geo.d.ts","sourceRoot":"","sources":["../../src/geo/geo.ts"],"names":[],"mappings":"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"}
package/dist/geo/geo.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { mixPath } from "@voila.dev/motion";
1
2
  import {
2
3
  geoAlbersUsa,
3
4
  geoArea,
@@ -113,6 +114,7 @@ function geoShape(features, options) {
113
114
  key: `${id}:${name}`,
114
115
  role: "mark",
115
116
  d,
117
+ morph: mixPath,
116
118
  paint: paint({
117
119
  fill,
118
120
  stroke: options.stroke ?? context.theme.background,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/geo/geo.ts"],
4
- "sourcesContent": ["import {\n\ttype GeoPermissibleObjects,\n\ttype GeoProjection,\n\tgeoAlbersUsa,\n\tgeoArea,\n\tgeoConicConformal,\n\tgeoEqualEarth,\n\tgeoEquirectangular,\n\tgeoMercator,\n\tgeoNaturalEarth1,\n\tgeoOrthographic,\n\tgeoPath,\n} from \"d3-geo\";\nimport { isPlaceable, numericValue, readChannel } from \"#/core/channel.ts\";\nimport { markId, paint } from \"#/core/marks/shared.ts\";\nimport type {\n\tChartAccessor,\n\tChartFittedProjection,\n\tChartMark,\n\tChartPoint,\n\tChartProjection,\n\tChartValue,\n\tSceneNode,\n} from \"#/core/types.ts\";\n\nexport type ProjectionName =\n\t| \"equal-earth\"\n\t| \"natural-earth\"\n\t| \"mercator\"\n\t| \"equirectangular\"\n\t| \"orthographic\"\n\t| \"albers-usa\"\n\t/** Conformal conic on France's own standard parallels (Lambert 93's). */\n\t| \"france\";\n\nconst PROJECTIONS: Record<ProjectionName, () => GeoProjection> = {\n\t\"equal-earth\": geoEqualEarth,\n\t\"natural-earth\": geoNaturalEarth1,\n\tmercator: geoMercator,\n\tequirectangular: geoEquirectangular,\n\torthographic: geoOrthographic,\n\t\"albers-usa\": geoAlbersUsa as unknown as () => GeoProjection,\n\tfrance: () => geoConicConformal().parallels([44, 49]).rotate([-3, 0]),\n};\n\ntype Ring = ReadonlyArray<ReadonlyArray<number>>;\n\nfunction reverseRings(geometry: {\n\ttype: string;\n\tcoordinates?: unknown;\n}): unknown {\n\tif (geometry.type === \"Polygon\") {\n\t\treturn {\n\t\t\t...geometry,\n\t\t\tcoordinates: (geometry.coordinates as Ring[]).map((ring) =>\n\t\t\t\t[...ring].reverse(),\n\t\t\t),\n\t\t};\n\t}\n\tif (geometry.type === \"MultiPolygon\") {\n\t\treturn {\n\t\t\t...geometry,\n\t\t\tcoordinates: (geometry.coordinates as Ring[][]).map((polygon) =>\n\t\t\t\tpolygon.map((ring) => [...ring].reverse()),\n\t\t\t),\n\t\t};\n\t}\n\treturn geometry;\n}\n\n/**\n * GeoJSON as RFC 7946 writes it winds rings counter-clockwise; d3-geo reads\n * that as \"the whole sphere except this region\". A shape covering more than\n * half the globe is that mistake, so its rings are turned round.\n */\nexport function rewind<T>(object: T): T {\n\tconst value = object as {\n\t\ttype?: string;\n\t\tfeatures?: unknown[];\n\t\tgeometry?: { type: string };\n\t};\n\tif (value.type === \"FeatureCollection\" && Array.isArray(value.features)) {\n\t\treturn {\n\t\t\t...value,\n\t\t\tfeatures: value.features.map((feature) => rewind(feature)),\n\t\t} as T;\n\t}\n\tif (value.type === \"Feature\" && value.geometry) {\n\t\treturn geoArea(value as GeoPermissibleObjects) > 2 * Math.PI\n\t\t\t? ({ ...value, geometry: reverseRings(value.geometry) } as T)\n\t\t\t: object;\n\t}\n\treturn object;\n}\n\nexport interface ProjectionOptions {\n\t/** The GeoJSON the map should frame: usually the shapes it draws. */\n\treadonly domain: GeoPermissibleObjects;\n\t/** Pixels kept clear around the framed shape. */\n\treadonly inset?: number;\n}\n\n/**\n * How longitude and latitude become pixels, fitted so `domain` fills the\n * plot. A name picks one of the usual projections; any d3-geo projection\n * factory works too.\n */\nexport function projection(\n\tkind: ProjectionName | (() => GeoProjection),\n\toptions: ProjectionOptions,\n): ChartProjection {\n\treturn {\n\t\tfit(plot): ChartFittedProjection {\n\t\t\tconst inset = options.inset ?? 4;\n\t\t\tconst projected = (\n\t\t\t\ttypeof kind === \"function\" ? kind : PROJECTIONS[kind]\n\t\t\t)().fitExtent(\n\t\t\t\t[\n\t\t\t\t\t[plot.x + inset, plot.y + inset],\n\t\t\t\t\t[plot.x + plot.width - inset, plot.y + plot.height - inset],\n\t\t\t\t],\n\t\t\t\trewind(options.domain),\n\t\t\t);\n\t\t\tconst path = geoPath(projected);\n\t\t\treturn {\n\t\t\t\tproject(longitude, latitude) {\n\t\t\t\t\tconst point = projected([longitude, latitude]);\n\t\t\t\t\treturn point ? { x: point[0], y: point[1] } : undefined;\n\t\t\t\t},\n\t\t\t\tpath: (geometry) => path(geometry as GeoPermissibleObjects) ?? \"\",\n\t\t\t\tcentroid(geometry) {\n\t\t\t\t\tconst [x, y] = path.centroid(geometry as GeoPermissibleObjects);\n\t\t\t\t\treturn { x, y };\n\t\t\t\t},\n\t\t\t\tbounds(geometry) {\n\t\t\t\t\tconst [[x0, y0], [x1, y1]] = path.bounds(\n\t\t\t\t\t\tgeometry as GeoPermissibleObjects,\n\t\t\t\t\t);\n\t\t\t\t\treturn { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\ninterface Feature {\n\treadonly type: \"Feature\";\n\treadonly properties?: Record<string, unknown> | null;\n\treadonly geometry: unknown;\n}\n\nexport interface GeoShapeOptions<TFeature> {\n\treadonly id?: string;\n\t/** A region's name: tooltip, table, live region. */\n\treadonly name: ChartAccessor<TFeature, unknown>;\n\t/** A value per region: a choropleth on a sequential (numbers) or ordinal (categories) color scale. */\n\treadonly color?: ChartAccessor<TFeature, ChartValue>;\n\treadonly fill?: string;\n\treadonly stroke?: string;\n\t/** What the colour values are, for the table heading. */\n\treadonly label?: string;\n\treadonly tip?: boolean;\n}\n\n/** Regions, countries, d\u00E9partements: one shape per GeoJSON feature. */\nexport function geoShape<TFeature extends Feature>(\n\tfeatures: ReadonlyArray<TFeature>,\n\toptions: GeoShapeOptions<TFeature>,\n): ChartMark {\n\tconst names = readChannel(features, options.name);\n\tconst colors = readChannel(features, options.color);\n\treturn {\n\t\tid: options.id,\n\t\tcoordinate: \"frame\",\n\t\tfocusOrder: \"point\",\n\t\ttitles: { value: options.label },\n\t\tchannels:\n\t\t\toptions.color === undefined\n\t\t\t\t? {}\n\t\t\t\t: { color: { values: colors.filter(isPlaceable) } },\n\t\trender(context) {\n\t\t\tconst id = markId(options.id, \"geo\", context);\n\t\t\tconst fitted = context.projection;\n\t\t\tif (fitted === undefined) {\n\t\t\t\treturn { nodes: [] };\n\t\t\t}\n\t\t\tconst nodes: SceneNode[] = [];\n\t\t\tconst points: ChartPoint[] = [];\n\t\t\tfor (const [index, feature] of features.entries()) {\n\t\t\t\tconst name = String(names[index] ?? index);\n\t\t\t\tconst value = colors[index];\n\t\t\t\tconst fill =\n\t\t\t\t\toptions.fill ??\n\t\t\t\t\t(value === undefined || options.color === undefined\n\t\t\t\t\t\t? context.theme.grid\n\t\t\t\t\t\t: context.colorOf(value));\n\t\t\t\tconst shape = rewind(feature);\n\t\t\t\tconst d = fitted.path(shape);\n\t\t\t\tif (d === \"\") continue;\n\t\t\t\tnodes.push({\n\t\t\t\t\tkind: \"path\",\n\t\t\t\t\tkey: `${id}:${name}`,\n\t\t\t\t\trole: \"mark\",\n\t\t\t\t\td,\n\t\t\t\t\tpaint: paint({\n\t\t\t\t\t\tfill,\n\t\t\t\t\t\tstroke: options.stroke ?? context.theme.background,\n\t\t\t\t\t\tstrokeWidth: 0.75,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\tif (options.tip !== false) {\n\t\t\t\t\tconst center = fitted.centroid(shape);\n\t\t\t\t\tconst number = numericValue(value);\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tkey: `${id}:${name}`,\n\t\t\t\t\t\tmarkId: id,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tdatum: feature,\n\t\t\t\t\t\tx: center.x,\n\t\t\t\t\t\ty: center.y,\n\t\t\t\t\t\txValue: name,\n\t\t\t\t\t\tyValue: value,\n\t\t\t\t\t\tseriesLabel: options.label,\n\t\t\t\t\t\tcolor: fill,\n\t\t\t\t\t\ttitle: name,\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\tvalue === undefined\n\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t: number === undefined\n\t\t\t\t\t\t\t\t\t? String(value)\n\t\t\t\t\t\t\t\t\t: context.formatY(number),\n\t\t\t\t\t\thit: { kind: \"rect\", rect: fitted.bounds(shape) },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { nodes, points };\n\t\t},\n\t};\n}\n\nexport interface GeoDotOptions<TDatum> {\n\treadonly id?: string;\n\treadonly longitude: ChartAccessor<TDatum, ChartValue>;\n\treadonly latitude: ChartAccessor<TDatum, ChartValue>;\n\treadonly name: ChartAccessor<TDatum, unknown>;\n\t/** A radius in pixels, or a field whose values set each dot's area. */\n\treadonly r?: number | ChartAccessor<TDatum, ChartValue>;\n\treadonly maxRadius?: number;\n\treadonly fill?: string;\n\treadonly label?: string;\n\treadonly value?: ChartAccessor<TDatum, ChartValue>;\n\treadonly tip?: boolean;\n}\n\n/** Places on the map: a dot at each longitude and latitude, sized by a value if asked. */\nexport function geoDot<TDatum>(\n\tdata: ReadonlyArray<TDatum>,\n\toptions: GeoDotOptions<TDatum>,\n): ChartMark {\n\tconst longitudes = readChannel(data, options.longitude).map(numericValue);\n\tconst latitudes = readChannel(data, options.latitude).map(numericValue);\n\tconst names = readChannel(data, options.name);\n\tconst values = readChannel(data, options.value).map(numericValue);\n\tconst sized = options.r !== undefined && typeof options.r !== \"number\";\n\tconst sizes = sized\n\t\t? readChannel(data, options.r as ChartAccessor<TDatum, ChartValue>).map(\n\t\t\t\tnumericValue,\n\t\t\t)\n\t\t: [];\n\tconst largest = Math.max(0, ...sizes.map((size) => Math.abs(size ?? 0)));\n\treturn {\n\t\tid: options.id,\n\t\tcoordinate: \"frame\",\n\t\tfocusOrder: \"point\",\n\t\ttitles: { value: options.label },\n\t\tchannels: {},\n\t\trender(context) {\n\t\t\tconst id = markId(options.id, \"geoDot\", context);\n\t\t\tconst fitted = context.projection;\n\t\t\tif (fitted === undefined) {\n\t\t\t\treturn { nodes: [] };\n\t\t\t}\n\t\t\tconst color = options.fill ?? context.paletteColor(context.markIndex);\n\t\t\tconst maxRadius = options.maxRadius ?? 16;\n\t\t\tconst nodes: SceneNode[] = [];\n\t\t\tconst points: ChartPoint[] = [];\n\t\t\tfor (const [index, datum] of data.entries()) {\n\t\t\t\tconst longitude = longitudes[index];\n\t\t\t\tconst latitude = latitudes[index];\n\t\t\t\tif (longitude === undefined || latitude === undefined) continue;\n\t\t\t\tconst at = fitted.project(longitude, latitude);\n\t\t\t\tif (at === undefined) continue;\n\t\t\t\tconst r =\n\t\t\t\t\ttypeof options.r === \"number\"\n\t\t\t\t\t\t? options.r\n\t\t\t\t\t\t: sized\n\t\t\t\t\t\t\t? largest === 0\n\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t: Math.sqrt(Math.abs(sizes[index] ?? 0) / largest) * maxRadius\n\t\t\t\t\t\t\t: 4;\n\t\t\t\tconst name = String(names[index] ?? index);\n\t\t\t\tnodes.push({\n\t\t\t\t\tkind: \"circle\",\n\t\t\t\t\tkey: `${id}:${index}`,\n\t\t\t\t\trole: \"mark\",\n\t\t\t\t\tcx: at.x,\n\t\t\t\t\tcy: at.y,\n\t\t\t\t\tr,\n\t\t\t\t\tpaint: {\n\t\t\t\t\t\tfill: color,\n\t\t\t\t\t\tfillOpacity: 0.75,\n\t\t\t\t\t\tstroke: context.theme.background,\n\t\t\t\t\t\tstrokeWidth: 1,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tif (options.tip !== false) {\n\t\t\t\t\tconst value = values[index] ?? sizes[index];\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tkey: `${id}:${index}`,\n\t\t\t\t\t\tmarkId: id,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t\tx: at.x,\n\t\t\t\t\t\ty: at.y,\n\t\t\t\t\t\txValue: name,\n\t\t\t\t\t\tyValue: value,\n\t\t\t\t\t\tseriesLabel: options.label,\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\ttitle: name,\n\t\t\t\t\t\tvalue: value === undefined ? \"\" : context.formatY(value),\n\t\t\t\t\t\thit: {\n\t\t\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\t\t\trect: {\n\t\t\t\t\t\t\t\tx: at.x - r - 2,\n\t\t\t\t\t\t\t\ty: at.y - r - 2,\n\t\t\t\t\t\t\t\twidth: r * 2 + 4,\n\t\t\t\t\t\t\t\theight: r * 2 + 4,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { nodes, points };\n\t\t},\n\t};\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { mixPath } from \"@voila.dev/motion\";\nimport {\n\ttype GeoPermissibleObjects,\n\ttype GeoProjection,\n\tgeoAlbersUsa,\n\tgeoArea,\n\tgeoConicConformal,\n\tgeoEqualEarth,\n\tgeoEquirectangular,\n\tgeoMercator,\n\tgeoNaturalEarth1,\n\tgeoOrthographic,\n\tgeoPath,\n} from \"d3-geo\";\nimport { isPlaceable, numericValue, readChannel } from \"#/core/channel.ts\";\nimport { markId, paint } from \"#/core/marks/shared.ts\";\nimport type {\n\tChartAccessor,\n\tChartFittedProjection,\n\tChartMark,\n\tChartPoint,\n\tChartProjection,\n\tChartValue,\n\tSceneNode,\n} from \"#/core/types.ts\";\n\nexport type ProjectionName =\n\t| \"equal-earth\"\n\t| \"natural-earth\"\n\t| \"mercator\"\n\t| \"equirectangular\"\n\t| \"orthographic\"\n\t| \"albers-usa\"\n\t/** Conformal conic on France's own standard parallels (Lambert 93's). */\n\t| \"france\";\n\nconst PROJECTIONS: Record<ProjectionName, () => GeoProjection> = {\n\t\"equal-earth\": geoEqualEarth,\n\t\"natural-earth\": geoNaturalEarth1,\n\tmercator: geoMercator,\n\tequirectangular: geoEquirectangular,\n\torthographic: geoOrthographic,\n\t\"albers-usa\": geoAlbersUsa as unknown as () => GeoProjection,\n\tfrance: () => geoConicConformal().parallels([44, 49]).rotate([-3, 0]),\n};\n\ntype Ring = ReadonlyArray<ReadonlyArray<number>>;\n\nfunction reverseRings(geometry: {\n\ttype: string;\n\tcoordinates?: unknown;\n}): unknown {\n\tif (geometry.type === \"Polygon\") {\n\t\treturn {\n\t\t\t...geometry,\n\t\t\tcoordinates: (geometry.coordinates as Ring[]).map((ring) =>\n\t\t\t\t[...ring].reverse(),\n\t\t\t),\n\t\t};\n\t}\n\tif (geometry.type === \"MultiPolygon\") {\n\t\treturn {\n\t\t\t...geometry,\n\t\t\tcoordinates: (geometry.coordinates as Ring[][]).map((polygon) =>\n\t\t\t\tpolygon.map((ring) => [...ring].reverse()),\n\t\t\t),\n\t\t};\n\t}\n\treturn geometry;\n}\n\n/**\n * GeoJSON as RFC 7946 writes it winds rings counter-clockwise; d3-geo reads\n * that as \"the whole sphere except this region\". A shape covering more than\n * half the globe is that mistake, so its rings are turned round.\n */\nexport function rewind<T>(object: T): T {\n\tconst value = object as {\n\t\ttype?: string;\n\t\tfeatures?: unknown[];\n\t\tgeometry?: { type: string };\n\t};\n\tif (value.type === \"FeatureCollection\" && Array.isArray(value.features)) {\n\t\treturn {\n\t\t\t...value,\n\t\t\tfeatures: value.features.map((feature) => rewind(feature)),\n\t\t} as T;\n\t}\n\tif (value.type === \"Feature\" && value.geometry) {\n\t\treturn geoArea(value as GeoPermissibleObjects) > 2 * Math.PI\n\t\t\t? ({ ...value, geometry: reverseRings(value.geometry) } as T)\n\t\t\t: object;\n\t}\n\treturn object;\n}\n\nexport interface ProjectionOptions {\n\t/** The GeoJSON the map should frame: usually the shapes it draws. */\n\treadonly domain: GeoPermissibleObjects;\n\t/** Pixels kept clear around the framed shape. */\n\treadonly inset?: number;\n}\n\n/**\n * How longitude and latitude become pixels, fitted so `domain` fills the\n * plot. A name picks one of the usual projections; any d3-geo projection\n * factory works too.\n */\nexport function projection(\n\tkind: ProjectionName | (() => GeoProjection),\n\toptions: ProjectionOptions,\n): ChartProjection {\n\treturn {\n\t\tfit(plot): ChartFittedProjection {\n\t\t\tconst inset = options.inset ?? 4;\n\t\t\tconst projected = (\n\t\t\t\ttypeof kind === \"function\" ? kind : PROJECTIONS[kind]\n\t\t\t)().fitExtent(\n\t\t\t\t[\n\t\t\t\t\t[plot.x + inset, plot.y + inset],\n\t\t\t\t\t[plot.x + plot.width - inset, plot.y + plot.height - inset],\n\t\t\t\t],\n\t\t\t\trewind(options.domain),\n\t\t\t);\n\t\t\tconst path = geoPath(projected);\n\t\t\treturn {\n\t\t\t\tproject(longitude, latitude) {\n\t\t\t\t\tconst point = projected([longitude, latitude]);\n\t\t\t\t\treturn point ? { x: point[0], y: point[1] } : undefined;\n\t\t\t\t},\n\t\t\t\tpath: (geometry) => path(geometry as GeoPermissibleObjects) ?? \"\",\n\t\t\t\tcentroid(geometry) {\n\t\t\t\t\tconst [x, y] = path.centroid(geometry as GeoPermissibleObjects);\n\t\t\t\t\treturn { x, y };\n\t\t\t\t},\n\t\t\t\tbounds(geometry) {\n\t\t\t\t\tconst [[x0, y0], [x1, y1]] = path.bounds(\n\t\t\t\t\t\tgeometry as GeoPermissibleObjects,\n\t\t\t\t\t);\n\t\t\t\t\treturn { x: x0, y: y0, width: x1 - x0, height: y1 - y0 };\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\t};\n}\n\ninterface Feature {\n\treadonly type: \"Feature\";\n\treadonly properties?: Record<string, unknown> | null;\n\treadonly geometry: unknown;\n}\n\nexport interface GeoShapeOptions<TFeature> {\n\treadonly id?: string;\n\t/** A region's name: tooltip, table, live region. */\n\treadonly name: ChartAccessor<TFeature, unknown>;\n\t/** A value per region: a choropleth on a sequential (numbers) or ordinal (categories) color scale. */\n\treadonly color?: ChartAccessor<TFeature, ChartValue>;\n\treadonly fill?: string;\n\treadonly stroke?: string;\n\t/** What the colour values are, for the table heading. */\n\treadonly label?: string;\n\treadonly tip?: boolean;\n}\n\n/** Regions, countries, d\u00E9partements: one shape per GeoJSON feature. */\nexport function geoShape<TFeature extends Feature>(\n\tfeatures: ReadonlyArray<TFeature>,\n\toptions: GeoShapeOptions<TFeature>,\n): ChartMark {\n\tconst names = readChannel(features, options.name);\n\tconst colors = readChannel(features, options.color);\n\treturn {\n\t\tid: options.id,\n\t\tcoordinate: \"frame\",\n\t\tfocusOrder: \"point\",\n\t\ttitles: { value: options.label },\n\t\tchannels:\n\t\t\toptions.color === undefined\n\t\t\t\t? {}\n\t\t\t\t: { color: { values: colors.filter(isPlaceable) } },\n\t\trender(context) {\n\t\t\tconst id = markId(options.id, \"geo\", context);\n\t\t\tconst fitted = context.projection;\n\t\t\tif (fitted === undefined) {\n\t\t\t\treturn { nodes: [] };\n\t\t\t}\n\t\t\tconst nodes: SceneNode[] = [];\n\t\t\tconst points: ChartPoint[] = [];\n\t\t\tfor (const [index, feature] of features.entries()) {\n\t\t\t\tconst name = String(names[index] ?? index);\n\t\t\t\tconst value = colors[index];\n\t\t\t\tconst fill =\n\t\t\t\t\toptions.fill ??\n\t\t\t\t\t(value === undefined || options.color === undefined\n\t\t\t\t\t\t? context.theme.grid\n\t\t\t\t\t\t: context.colorOf(value));\n\t\t\t\tconst shape = rewind(feature);\n\t\t\t\tconst d = fitted.path(shape);\n\t\t\t\tif (d === \"\") continue;\n\t\t\t\tnodes.push({\n\t\t\t\t\tkind: \"path\",\n\t\t\t\t\tkey: `${id}:${name}`,\n\t\t\t\t\trole: \"mark\",\n\t\t\t\t\td,\n\t\t\t\t\tmorph: mixPath,\n\t\t\t\t\tpaint: paint({\n\t\t\t\t\t\tfill,\n\t\t\t\t\t\tstroke: options.stroke ?? context.theme.background,\n\t\t\t\t\t\tstrokeWidth: 0.75,\n\t\t\t\t\t}),\n\t\t\t\t});\n\t\t\t\tif (options.tip !== false) {\n\t\t\t\t\tconst center = fitted.centroid(shape);\n\t\t\t\t\tconst number = numericValue(value);\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tkey: `${id}:${name}`,\n\t\t\t\t\t\tmarkId: id,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tdatum: feature,\n\t\t\t\t\t\tx: center.x,\n\t\t\t\t\t\ty: center.y,\n\t\t\t\t\t\txValue: name,\n\t\t\t\t\t\tyValue: value,\n\t\t\t\t\t\tseriesLabel: options.label,\n\t\t\t\t\t\tcolor: fill,\n\t\t\t\t\t\ttitle: name,\n\t\t\t\t\t\tvalue:\n\t\t\t\t\t\t\tvalue === undefined\n\t\t\t\t\t\t\t\t? \"\"\n\t\t\t\t\t\t\t\t: number === undefined\n\t\t\t\t\t\t\t\t\t? String(value)\n\t\t\t\t\t\t\t\t\t: context.formatY(number),\n\t\t\t\t\t\thit: { kind: \"rect\", rect: fitted.bounds(shape) },\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { nodes, points };\n\t\t},\n\t};\n}\n\nexport interface GeoDotOptions<TDatum> {\n\treadonly id?: string;\n\treadonly longitude: ChartAccessor<TDatum, ChartValue>;\n\treadonly latitude: ChartAccessor<TDatum, ChartValue>;\n\treadonly name: ChartAccessor<TDatum, unknown>;\n\t/** A radius in pixels, or a field whose values set each dot's area. */\n\treadonly r?: number | ChartAccessor<TDatum, ChartValue>;\n\treadonly maxRadius?: number;\n\treadonly fill?: string;\n\treadonly label?: string;\n\treadonly value?: ChartAccessor<TDatum, ChartValue>;\n\treadonly tip?: boolean;\n}\n\n/** Places on the map: a dot at each longitude and latitude, sized by a value if asked. */\nexport function geoDot<TDatum>(\n\tdata: ReadonlyArray<TDatum>,\n\toptions: GeoDotOptions<TDatum>,\n): ChartMark {\n\tconst longitudes = readChannel(data, options.longitude).map(numericValue);\n\tconst latitudes = readChannel(data, options.latitude).map(numericValue);\n\tconst names = readChannel(data, options.name);\n\tconst values = readChannel(data, options.value).map(numericValue);\n\tconst sized = options.r !== undefined && typeof options.r !== \"number\";\n\tconst sizes = sized\n\t\t? readChannel(data, options.r as ChartAccessor<TDatum, ChartValue>).map(\n\t\t\t\tnumericValue,\n\t\t\t)\n\t\t: [];\n\tconst largest = Math.max(0, ...sizes.map((size) => Math.abs(size ?? 0)));\n\treturn {\n\t\tid: options.id,\n\t\tcoordinate: \"frame\",\n\t\tfocusOrder: \"point\",\n\t\ttitles: { value: options.label },\n\t\tchannels: {},\n\t\trender(context) {\n\t\t\tconst id = markId(options.id, \"geoDot\", context);\n\t\t\tconst fitted = context.projection;\n\t\t\tif (fitted === undefined) {\n\t\t\t\treturn { nodes: [] };\n\t\t\t}\n\t\t\tconst color = options.fill ?? context.paletteColor(context.markIndex);\n\t\t\tconst maxRadius = options.maxRadius ?? 16;\n\t\t\tconst nodes: SceneNode[] = [];\n\t\t\tconst points: ChartPoint[] = [];\n\t\t\tfor (const [index, datum] of data.entries()) {\n\t\t\t\tconst longitude = longitudes[index];\n\t\t\t\tconst latitude = latitudes[index];\n\t\t\t\tif (longitude === undefined || latitude === undefined) continue;\n\t\t\t\tconst at = fitted.project(longitude, latitude);\n\t\t\t\tif (at === undefined) continue;\n\t\t\t\tconst r =\n\t\t\t\t\ttypeof options.r === \"number\"\n\t\t\t\t\t\t? options.r\n\t\t\t\t\t\t: sized\n\t\t\t\t\t\t\t? largest === 0\n\t\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t\t: Math.sqrt(Math.abs(sizes[index] ?? 0) / largest) * maxRadius\n\t\t\t\t\t\t\t: 4;\n\t\t\t\tconst name = String(names[index] ?? index);\n\t\t\t\tnodes.push({\n\t\t\t\t\tkind: \"circle\",\n\t\t\t\t\tkey: `${id}:${index}`,\n\t\t\t\t\trole: \"mark\",\n\t\t\t\t\tcx: at.x,\n\t\t\t\t\tcy: at.y,\n\t\t\t\t\tr,\n\t\t\t\t\tpaint: {\n\t\t\t\t\t\tfill: color,\n\t\t\t\t\t\tfillOpacity: 0.75,\n\t\t\t\t\t\tstroke: context.theme.background,\n\t\t\t\t\t\tstrokeWidth: 1,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tif (options.tip !== false) {\n\t\t\t\t\tconst value = values[index] ?? sizes[index];\n\t\t\t\t\tpoints.push({\n\t\t\t\t\t\tkey: `${id}:${index}`,\n\t\t\t\t\t\tmarkId: id,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t\tdatum,\n\t\t\t\t\t\tx: at.x,\n\t\t\t\t\t\ty: at.y,\n\t\t\t\t\t\txValue: name,\n\t\t\t\t\t\tyValue: value,\n\t\t\t\t\t\tseriesLabel: options.label,\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\ttitle: name,\n\t\t\t\t\t\tvalue: value === undefined ? \"\" : context.formatY(value),\n\t\t\t\t\t\thit: {\n\t\t\t\t\t\t\tkind: \"rect\",\n\t\t\t\t\t\t\trect: {\n\t\t\t\t\t\t\t\tx: at.x - r - 2,\n\t\t\t\t\t\t\t\ty: at.y - r - 2,\n\t\t\t\t\t\t\t\twidth: r * 2 + 4,\n\t\t\t\t\t\t\t\theight: r * 2 + 4,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { nodes, points };\n\t\t},\n\t};\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/react/chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,yBAAyB,CAAC;AAG3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACN,KAAK,UAAU,EAGf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAGN,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA4BzD,UAAU,KACT,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EACd,OAAO,GACP,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,mHAAmH;IACnH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,iHAAiH;IACjH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;CACvD;AAOD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EACrB,UAAU,EACV,SAAS,EACT,eAAe,EACf,MAAuB,EACvB,WAAW,EACX,YAAoC,EACpC,QAAQ,EAAE,QAAsB,EAChC,OAAc,EACd,MAAM,EACN,SAAgB,EAChB,OAAc,EACd,IAAY,EACZ,KAAK,EAAE,aAAa,EACpB,aAAa,EACb,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACR,EAAE,KAAK,qBA0XP"}
1
+ {"version":3,"file":"chart.d.ts","sourceRoot":"","sources":["../../src/react/chart.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,KAAK,cAAc,EAAe,MAAM,yBAAyB,CAAC;AAG3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EACN,KAAK,UAAU,EAGf,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAGN,KAAK,uBAAuB,EAC5B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AA4BzD,UAAU,KACT,SAAQ,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAC5E,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,iDAAiD;IACjD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,kGAAkG;IAClG,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC;IAClC,sEAAsE;IACtE,QAAQ,CAAC,OAAO,CAAC,EACd,OAAO,GACP,CAAC,CAAC,KAAK,EAAE,uBAAuB,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC;IACzD,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,mHAAmH;IACnH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,CAAC;IACrD;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,iHAAiH;IACjH,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,KAAK,IAAI,CAAC;CACvD;AAOD;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,EACrB,UAAU,EACV,SAAS,EACT,eAAe,EACf,MAAuB,EACvB,WAAW,EACX,YAAoC,EACpC,QAAQ,EAAE,QAAsB,EAChC,OAAc,EACd,MAAM,EACN,SAAgB,EAChB,OAAc,EACd,IAAY,EACZ,KAAK,EAAE,aAAa,EACpB,aAAa,EACb,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACR,EAAE,KAAK,qBAgYP"}
@@ -102,9 +102,10 @@ function Chart({
102
102
  const [zoomAnnouncement, setZoomAnnouncement] = React.useState("");
103
103
  const drag = React.useRef(null);
104
104
  const stops = React.useMemo(() => focusStops(scene), [scene]);
105
+ const [keyboardZooms, setKeyboardZooms] = React.useState(0);
105
106
  const animationTrigger = React.useMemo(
106
- () => [definition, hidden],
107
- [definition, hidden]
107
+ () => [definition, hidden, keyboardZooms],
108
+ [definition, hidden, keyboardZooms]
108
109
  );
109
110
  const animateKey = JSON.stringify(animate);
110
111
  const timing = React.useMemo(
@@ -195,16 +196,19 @@ function Chart({
195
196
  if (event.key === "+" || event.key === "=") {
196
197
  event.preventDefault();
197
198
  viewport.zoomAround(center, ZOOM_STEP);
199
+ setKeyboardZooms((count) => count + 1);
198
200
  return;
199
201
  }
200
202
  if (event.key === "-" || event.key === "_") {
201
203
  event.preventDefault();
202
204
  viewport.zoomAround(center, 1 / ZOOM_STEP);
205
+ setKeyboardZooms((count) => count + 1);
203
206
  return;
204
207
  }
205
208
  if (event.key === "0") {
206
209
  event.preventDefault();
207
210
  viewport.reset();
211
+ setKeyboardZooms((count) => count + 1);
208
212
  return;
209
213
  }
210
214
  if (event.shiftKey && (event.key === "ArrowLeft" || event.key === "ArrowRight")) {