@voila.dev/chart 5.0.113 → 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 (103) 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 +22 -0
  38. package/dist/core/motion/motion-store.d.ts.map +1 -0
  39. package/dist/core/motion/motion-store.js +325 -0
  40. package/dist/core/motion/motion-store.js.map +7 -0
  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/motion/timing.d.ts +30 -0
  50. package/dist/core/motion/timing.d.ts.map +1 -0
  51. package/dist/core/motion/timing.js +25 -0
  52. package/dist/core/motion/timing.js.map +7 -0
  53. package/dist/core/motion/tween.d.ts +2 -0
  54. package/dist/core/motion/tween.d.ts.map +1 -1
  55. package/dist/core/motion/tween.js +1 -0
  56. package/dist/core/motion/tween.js.map +2 -2
  57. package/dist/core/types.d.ts +85 -0
  58. package/dist/core/types.d.ts.map +1 -1
  59. package/dist/geo/geo.d.ts.map +1 -1
  60. package/dist/geo/geo.js +2 -0
  61. package/dist/geo/geo.js.map +2 -2
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +8 -0
  65. package/dist/index.js.map +2 -2
  66. package/dist/react/chart.d.ts +7 -2
  67. package/dist/react/chart.d.ts.map +1 -1
  68. package/dist/react/chart.js +12 -7
  69. package/dist/react/chart.js.map +2 -2
  70. package/dist/react/svg-scene.d.ts.map +1 -1
  71. package/dist/react/svg-scene.js +3 -1
  72. package/dist/react/svg-scene.js.map +2 -2
  73. package/dist/react/use-animated-scene.d.ts +6 -5
  74. package/dist/react/use-animated-scene.d.ts.map +1 -1
  75. package/dist/react/use-animated-scene.js +36 -24
  76. package/dist/react/use-animated-scene.js.map +2 -2
  77. package/dist/voronoi/voronoi.d.ts.map +1 -1
  78. package/dist/voronoi/voronoi.js +2 -0
  79. package/dist/voronoi/voronoi.js.map +2 -2
  80. package/package.json +2 -1
  81. package/src/canvas/paint-scene.ts +5 -1
  82. package/src/contour/density.ts +2 -0
  83. package/src/core/marks/area.ts +28 -13
  84. package/src/core/marks/bar.ts +2 -0
  85. package/src/core/marks/line.ts +15 -8
  86. package/src/core/marks/polar.ts +22 -5
  87. package/src/core/marks/shared.ts +8 -0
  88. package/src/core/marks/stats/difference.ts +28 -8
  89. package/src/core/motion/arc-motion.ts +113 -0
  90. package/src/core/motion/enter-exit.ts +44 -0
  91. package/src/core/motion/leaving.ts +55 -0
  92. package/src/core/motion/motion-store.ts +449 -0
  93. package/src/core/motion/points-motion.ts +190 -0
  94. package/src/core/motion/strings.ts +68 -0
  95. package/src/core/motion/timing.ts +63 -0
  96. package/src/core/motion/tween.ts +1 -1
  97. package/src/core/types.ts +98 -0
  98. package/src/geo/geo.ts +2 -0
  99. package/src/index.ts +9 -0
  100. package/src/react/chart.tsx +21 -9
  101. package/src/react/svg-scene.tsx +5 -1
  102. package/src/react/use-animated-scene.ts +49 -33
  103. package/src/voronoi/voronoi.ts +2 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timing.d.ts","sourceRoot":"","sources":["../../../src/core/motion/timing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qGAAqG;AACrG,MAAM,MAAM,cAAc,GACvB;IACA,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,8GAA8G;IAC9G,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACzB,GACD;IACA,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEL,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,kDAAkD;IAClD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,kCAAkC;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAKD,6DAA6D;AAC7D,wBAAgB,WAAW,CAC1B,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GACxC,WAAW,GAAG,IAAI,CAgBpB;AAED,kHAAkH;AAClH,wBAAgB,YAAY,CAC3B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACX,MAAM,CAGR"}
@@ -0,0 +1,25 @@
1
+ const DEFAULT_DURATION = 300;
2
+ const MAX_STAGGER_TOTAL = 0.3;
3
+ function chartTiming(animate) {
4
+ if (animate === false || animate === 0) return null;
5
+ const options = typeof animate === "object" ? animate : { duration: animate === true ? DEFAULT_DURATION : animate };
6
+ return {
7
+ type: options.type ?? "spring",
8
+ duration: (options.duration ?? DEFAULT_DURATION) / 1e3,
9
+ bounce: Math.min(
10
+ Math.max("bounce" in options ? options.bounce ?? 0 : 0, 0),
11
+ 0.5
12
+ ),
13
+ easing: ("easing" in options ? options.easing : void 0) ?? "easeOut",
14
+ stagger: (options.stagger ?? 0) / 1e3
15
+ };
16
+ }
17
+ function staggerDelay(timing, index, count) {
18
+ if (timing.stagger === 0 || count < 2) return 0;
19
+ return index * Math.min(timing.stagger, MAX_STAGGER_TOTAL / (count - 1));
20
+ }
21
+ export {
22
+ chartTiming,
23
+ staggerDelay
24
+ };
25
+ //# sourceMappingURL=timing.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/core/motion/timing.ts"],
4
+ "sourcesContent": ["import type { EasingName } from \"@voila.dev/motion\";\n\n/** How a data update moves: what `<Chart animate>` accepts beyond `true`, `false` and a duration. */\nexport type ChartAnimation =\n\t| {\n\t\t\treadonly type?: \"spring\";\n\t\t\t/** Perceived duration, in milliseconds. */\n\t\t\treadonly duration?: number;\n\t\t\t/** 0 never overshoots (the default: a bar past its value shows a number the data doesn't have); up to 0.5. */\n\t\t\treadonly bounce?: number;\n\t\t\t/** Milliseconds between marks in focus order, capped at 300 ms in all. */\n\t\t\treadonly stagger?: number;\n\t }\n\t| {\n\t\t\treadonly type: \"tween\";\n\t\t\treadonly duration?: number;\n\t\t\treadonly easing?: EasingName;\n\t\t\treadonly stagger?: number;\n\t };\n\nexport interface ChartTiming {\n\treadonly type: \"spring\" | \"tween\";\n\t/** Seconds, as the motion package counts them. */\n\treadonly duration: number;\n\treadonly bounce: number;\n\treadonly easing: EasingName;\n\t/** Seconds between neighbours. */\n\treadonly stagger: number;\n}\n\nconst DEFAULT_DURATION = 300;\nconst MAX_STAGGER_TOTAL = 0.3;\n\n/** The timing an `animate` prop means, or `null` to snap. */\nexport function chartTiming(\n\tanimate: boolean | number | ChartAnimation,\n): ChartTiming | null {\n\tif (animate === false || animate === 0) return null;\n\tconst options: ChartAnimation =\n\t\ttypeof animate === \"object\"\n\t\t\t? animate\n\t\t\t: { duration: animate === true ? DEFAULT_DURATION : animate };\n\treturn {\n\t\ttype: options.type ?? \"spring\",\n\t\tduration: (options.duration ?? DEFAULT_DURATION) / 1000,\n\t\tbounce: Math.min(\n\t\t\tMath.max(\"bounce\" in options ? (options.bounce ?? 0) : 0, 0),\n\t\t\t0.5,\n\t\t),\n\t\teasing: (\"easing\" in options ? options.easing : undefined) ?? \"easeOut\",\n\t\tstagger: (options.stagger ?? 0) / 1000,\n\t};\n}\n\n/** The delay of the `index`-th of `count` marks: the gap shrinks so the last one never waits more than 300 ms. */\nexport function staggerDelay(\n\ttiming: ChartTiming,\n\tindex: number,\n\tcount: number,\n): number {\n\tif (timing.stagger === 0 || count < 2) return 0;\n\treturn index * Math.min(timing.stagger, MAX_STAGGER_TOTAL / (count - 1));\n}\n"],
5
+ "mappings": "AA8BA,MAAM,mBAAmB;AACzB,MAAM,oBAAoB;AAGnB,SAAS,YACf,SACqB;AACrB,MAAI,YAAY,SAAS,YAAY,EAAG,QAAO;AAC/C,QAAM,UACL,OAAO,YAAY,WAChB,UACA,EAAE,UAAU,YAAY,OAAO,mBAAmB,QAAQ;AAC9D,SAAO;AAAA,IACN,MAAM,QAAQ,QAAQ;AAAA,IACtB,WAAW,QAAQ,YAAY,oBAAoB;AAAA,IACnD,QAAQ,KAAK;AAAA,MACZ,KAAK,IAAI,YAAY,UAAW,QAAQ,UAAU,IAAK,GAAG,CAAC;AAAA,MAC3D;AAAA,IACD;AAAA,IACA,SAAS,YAAY,UAAU,QAAQ,SAAS,WAAc;AAAA,IAC9D,UAAU,QAAQ,WAAW,KAAK;AAAA,EACnC;AACD;AAGO,SAAS,aACf,QACA,OACA,OACS;AACT,MAAI,OAAO,YAAY,KAAK,QAAQ,EAAG,QAAO;AAC9C,SAAO,QAAQ,KAAK,IAAI,OAAO,SAAS,qBAAqB,QAAQ,EAAE;AACxE;",
6
+ "names": []
7
+ }
@@ -1,4 +1,6 @@
1
1
  import type { ChartScene } from "../types.js";
2
+ /** Two paths can tween when only their numbers differ. */
3
+ export declare function tweenPath(from: string, to: string, t: number): string;
2
4
  /** `to`, `t` of the way from `from` (0 is `from`, 1 is `to`). */
3
5
  export declare function tweenScene(from: ChartScene, to: ChartScene, t: number): ChartScene;
4
6
  /** Fast out, slow in: the motion settles rather than stops. */
@@ -1 +1 @@
1
- {"version":3,"file":"tween.d.ts","sourceRoot":"","sources":["../../../src/core/motion/tween.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAa,MAAM,iBAAiB,CAAC;AA+GzE,iEAAiE;AACjE,wBAAgB,UAAU,CACzB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,CAAC,EAAE,MAAM,GACP,UAAU,CASZ;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C"}
1
+ {"version":3,"file":"tween.d.ts","sourceRoot":"","sources":["../../../src/core/motion/tween.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,UAAU,EAAa,MAAM,iBAAiB,CAAC;AAoBzE,0DAA0D;AAC1D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBrE;AAyED,iEAAiE;AACjE,wBAAgB,UAAU,CACzB,IAAI,EAAE,UAAU,EAChB,EAAE,EAAE,UAAU,EACd,CAAC,EAAE,MAAM,GACP,UAAU,CASZ;AAED,+DAA+D;AAC/D,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -93,6 +93,7 @@ function easeOutCubic(t) {
93
93
  }
94
94
  export {
95
95
  easeOutCubic,
96
+ tweenPath,
96
97
  tweenScene
97
98
  };
98
99
  //# sourceMappingURL=tween.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/core/motion/tween.ts"],
4
- "sourcesContent": ["import type { ChartPaint, ChartScene, SceneNode } from \"#/core/types.ts\";\n\n/**\n * A scene part of the way from one scene to the next, keyed by node: what an\n * animated update draws on each frame. It lives in the core so the SVG and\n * Canvas renderers animate identically, and never feeds hit-testing or\n * focus: those always read the scene being animated towards.\n *\n * A node present on both sides moves; a new one fades in; one that left is\n * gone at once (fading out a bar the data no longer has would show a value\n * that is not true any more). A path tweens point by point when both shapes\n * share their commands, and swaps at the end when they do not.\n */\n\nconst NUMBER = /-?\\d*\\.?\\d+(?:e[-+]?\\d+)?/gi;\n\nfunction mix(from: number, to: number, t: number): number {\n\treturn from + (to - from) * t;\n}\n\n/** Two paths can tween when only their numbers differ. */\nfunction tweenPath(from: string, to: string, t: number): string {\n\tconst fromNumbers = from.match(NUMBER);\n\tconst toNumbers = to.match(NUMBER);\n\tif (\n\t\tfromNumbers === null ||\n\t\ttoNumbers === null ||\n\t\tfromNumbers.length !== toNumbers.length ||\n\t\tfrom.replace(NUMBER, \"#\") !== to.replace(NUMBER, \"#\")\n\t) {\n\t\treturn t < 1 ? from : to;\n\t}\n\tlet index = 0;\n\treturn to.replace(NUMBER, () => {\n\t\tconst value = mix(Number(fromNumbers[index]), Number(toNumbers[index]), t);\n\t\tindex += 1;\n\t\treturn String(Math.round(value * 100) / 100);\n\t});\n}\n\nfunction fadeIn<TPaint extends ChartPaint>(paint: TPaint, t: number): TPaint {\n\treturn { ...paint, opacity: (paint.opacity ?? 1) * t };\n}\n\nfunction tweenNode(\n\tfrom: SceneNode | undefined,\n\tto: SceneNode,\n\tt: number,\n): SceneNode {\n\tif (from === undefined || from.kind !== to.kind) {\n\t\treturn to.kind === \"group\"\n\t\t\t? {\n\t\t\t\t\t...to,\n\t\t\t\t\tchildren: to.children.map((child) => tweenNode(undefined, child, t)),\n\t\t\t\t}\n\t\t\t: { ...to, paint: fadeIn(to.paint, t) };\n\t}\n\tswitch (to.kind) {\n\t\tcase \"group\": {\n\t\t\tconst before = new Map(\n\t\t\t\t(from as typeof to).children.map((child) => [child.key, child]),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tchildren: to.children.map((child) =>\n\t\t\t\t\ttweenNode(before.get(child.key), child, t),\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tcase \"rect\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx: mix(previous.x, to.x, t),\n\t\t\t\ty: mix(previous.y, to.y, t),\n\t\t\t\twidth: mix(previous.width, to.width, t),\n\t\t\t\theight: mix(previous.height, to.height, t),\n\t\t\t};\n\t\t}\n\t\tcase \"circle\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tcx: mix(previous.cx, to.cx, t),\n\t\t\t\tcy: mix(previous.cy, to.cy, t),\n\t\t\t\tr: mix(previous.r, to.r, t),\n\t\t\t};\n\t\t}\n\t\tcase \"line\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx1: mix(previous.x1, to.x1, t),\n\t\t\t\ty1: mix(previous.y1, to.y1, t),\n\t\t\t\tx2: mix(previous.x2, to.x2, t),\n\t\t\t\ty2: mix(previous.y2, to.y2, t),\n\t\t\t};\n\t\t}\n\t\tcase \"text\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx: mix(previous.x, to.x, t),\n\t\t\t\ty: mix(previous.y, to.y, t),\n\t\t\t};\n\t\t}\n\t\tcase \"path\":\n\t\t\treturn { ...to, d: tweenPath((from as typeof to).d, to.d, t) };\n\t}\n}\n\n/** `to`, `t` of the way from `from` (0 is `from`, 1 is `to`). */\nexport function tweenScene(\n\tfrom: ChartScene,\n\tto: ChartScene,\n\tt: number,\n): ChartScene {\n\tif (t >= 1) {\n\t\treturn to;\n\t}\n\tconst before = new Map(from.nodes.map((node) => [node.key, node]));\n\treturn {\n\t\t...to,\n\t\tnodes: to.nodes.map((node) => tweenNode(before.get(node.key), node, t)),\n\t};\n}\n\n/** Fast out, slow in: the motion settles rather than stops. */\nexport function easeOutCubic(t: number): number {\n\treturn 1 - (1 - t) ** 3;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import type { ChartPaint, ChartScene, SceneNode } from \"#/core/types.ts\";\n\n/**\n * A scene part of the way from one scene to the next, keyed by node: what an\n * animated update draws on each frame. It lives in the core so the SVG and\n * Canvas renderers animate identically, and never feeds hit-testing or\n * focus: those always read the scene being animated towards.\n *\n * A node present on both sides moves; a new one fades in; one that left is\n * gone at once (fading out a bar the data no longer has would show a value\n * that is not true any more). A path tweens point by point when both shapes\n * share their commands, and swaps at the end when they do not.\n */\n\nconst NUMBER = /-?\\d*\\.?\\d+(?:e[-+]?\\d+)?/gi;\n\nfunction mix(from: number, to: number, t: number): number {\n\treturn from + (to - from) * t;\n}\n\n/** Two paths can tween when only their numbers differ. */\nexport function tweenPath(from: string, to: string, t: number): string {\n\tconst fromNumbers = from.match(NUMBER);\n\tconst toNumbers = to.match(NUMBER);\n\tif (\n\t\tfromNumbers === null ||\n\t\ttoNumbers === null ||\n\t\tfromNumbers.length !== toNumbers.length ||\n\t\tfrom.replace(NUMBER, \"#\") !== to.replace(NUMBER, \"#\")\n\t) {\n\t\treturn t < 1 ? from : to;\n\t}\n\tlet index = 0;\n\treturn to.replace(NUMBER, () => {\n\t\tconst value = mix(Number(fromNumbers[index]), Number(toNumbers[index]), t);\n\t\tindex += 1;\n\t\treturn String(Math.round(value * 100) / 100);\n\t});\n}\n\nfunction fadeIn<TPaint extends ChartPaint>(paint: TPaint, t: number): TPaint {\n\treturn { ...paint, opacity: (paint.opacity ?? 1) * t };\n}\n\nfunction tweenNode(\n\tfrom: SceneNode | undefined,\n\tto: SceneNode,\n\tt: number,\n): SceneNode {\n\tif (from === undefined || from.kind !== to.kind) {\n\t\treturn to.kind === \"group\"\n\t\t\t? {\n\t\t\t\t\t...to,\n\t\t\t\t\tchildren: to.children.map((child) => tweenNode(undefined, child, t)),\n\t\t\t\t}\n\t\t\t: { ...to, paint: fadeIn(to.paint, t) };\n\t}\n\tswitch (to.kind) {\n\t\tcase \"group\": {\n\t\t\tconst before = new Map(\n\t\t\t\t(from as typeof to).children.map((child) => [child.key, child]),\n\t\t\t);\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tchildren: to.children.map((child) =>\n\t\t\t\t\ttweenNode(before.get(child.key), child, t),\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t\tcase \"rect\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx: mix(previous.x, to.x, t),\n\t\t\t\ty: mix(previous.y, to.y, t),\n\t\t\t\twidth: mix(previous.width, to.width, t),\n\t\t\t\theight: mix(previous.height, to.height, t),\n\t\t\t};\n\t\t}\n\t\tcase \"circle\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tcx: mix(previous.cx, to.cx, t),\n\t\t\t\tcy: mix(previous.cy, to.cy, t),\n\t\t\t\tr: mix(previous.r, to.r, t),\n\t\t\t};\n\t\t}\n\t\tcase \"line\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx1: mix(previous.x1, to.x1, t),\n\t\t\t\ty1: mix(previous.y1, to.y1, t),\n\t\t\t\tx2: mix(previous.x2, to.x2, t),\n\t\t\t\ty2: mix(previous.y2, to.y2, t),\n\t\t\t};\n\t\t}\n\t\tcase \"text\": {\n\t\t\tconst previous = from as typeof to;\n\t\t\treturn {\n\t\t\t\t...to,\n\t\t\t\tx: mix(previous.x, to.x, t),\n\t\t\t\ty: mix(previous.y, to.y, t),\n\t\t\t};\n\t\t}\n\t\tcase \"path\":\n\t\t\treturn { ...to, d: tweenPath((from as typeof to).d, to.d, t) };\n\t}\n}\n\n/** `to`, `t` of the way from `from` (0 is `from`, 1 is `to`). */\nexport function tweenScene(\n\tfrom: ChartScene,\n\tto: ChartScene,\n\tt: number,\n): ChartScene {\n\tif (t >= 1) {\n\t\treturn to;\n\t}\n\tconst before = new Map(from.nodes.map((node) => [node.key, node]));\n\treturn {\n\t\t...to,\n\t\tnodes: to.nodes.map((node) => tweenNode(before.get(node.key), node, t)),\n\t};\n}\n\n/** Fast out, slow in: the motion settles rather than stops. */\nexport function easeOutCubic(t: number): number {\n\treturn 1 - (1 - t) ** 3;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
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
  }
package/dist/index.d.ts CHANGED
@@ -22,6 +22,8 @@ export { boxSummary, kernelDensity, linearFit, quantile, } from "./core/marks/st
22
22
  export { type WaffleOptions, waffleY } from "./core/marks/stats/waffle.js";
23
23
  export { type TextOptions, text } from "./core/marks/text.js";
24
24
  export { type TickOptions, tickX, tickY } from "./core/marks/tick.js";
25
+ export { createMotionStore, type MotionStore, } from "./core/motion/motion-store.js";
26
+ export { type ChartAnimation, type ChartTiming, chartTiming, } from "./core/motion/timing.js";
25
27
  export { easeOutCubic, tweenScene } from "./core/motion/tween.js";
26
28
  export { type ChartFocusStop, findNearest, focusStops, } from "./core/nearest.js";
27
29
  export { estimateTextWidth } from "./core/text.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,EAC9B,KAAK,SAAS,EACd,WAAW,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,KAAK,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAE,KAAK,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,KAAK,UAAU,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACN,KAAK,UAAU,EACf,GAAG,EACH,KAAK,EACL,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,EACL,SAAS,GACT,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtE,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACN,KAAK,iBAAiB,EACtB,WAAW,GACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,KAAK,UAAU,EACf,IAAI,EACJ,KAAK,gBAAgB,EACrB,SAAS,EACT,OAAO,GACP,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EACN,KAAK,gBAAgB,EACrB,SAAS,GACT,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,iBAAiB,EACtB,WAAW,GACX,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EACN,UAAU,EACV,aAAa,EACb,SAAS,EACT,QAAQ,GACR,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,KAAK,aAAa,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,KAAK,WAAW,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EACN,KAAK,cAAc,EACnB,WAAW,EACX,UAAU,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,mBAAmB,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -43,6 +43,12 @@ import {
43
43
  import { waffleY } from "./core/marks/stats/waffle.js";
44
44
  import { text } from "./core/marks/text.js";
45
45
  import { tickX, tickY } from "./core/marks/tick.js";
46
+ import {
47
+ createMotionStore
48
+ } from "./core/motion/motion-store.js";
49
+ import {
50
+ chartTiming
51
+ } from "./core/motion/timing.js";
46
52
  import { easeOutCubic, tweenScene } from "./core/motion/tween.js";
47
53
  import {
48
54
  findNearest,
@@ -60,7 +66,9 @@ export {
60
66
  boxSummary,
61
67
  boxY,
62
68
  cell,
69
+ chartTiming,
63
70
  compileChart,
71
+ createMotionStore,
64
72
  defineChart,
65
73
  differenceY,
66
74
  dodgeY,
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["export { type CompileOptions, compileChart } from \"#/core/compile.ts\";\nexport {\n\ttype ChartAxisOptions,\n\ttype ChartBuildContext,\n\ttype ChartColorOptions,\n\ttype ChartDefinition,\n\ttype ChartFacet,\n\ttype ChartFacetOptions,\n\ttype ChartPositionScaleOptions,\n\ttype ChartSpec,\n\tdefineChart,\n} from \"#/core/define-chart.ts\";\nexport { facet } from \"#/core/facet.ts\";\nexport { formatDate, formatNumber, formatValue } from \"#/core/format.ts\";\nexport { type AreaOptions, areaX, areaY } from \"#/core/marks/area.ts\";\nexport { type BarOptions, barX, barY } from \"#/core/marks/bar.ts\";\nexport { type CellOptions, cell } from \"#/core/marks/cell.ts\";\nexport { type DotOptions, dot } from \"#/core/marks/dot.ts\";\nexport { type FunnelOptions, funnel } from \"#/core/marks/funnel.ts\";\nexport { type LineOptions, lineX, lineY } from \"#/core/marks/line.ts\";\nexport {\n\ttype ArcOptions,\n\tarc,\n\tdonut,\n\ttype RadarOptions,\n\ttype RadialBarOptions,\n\tradar,\n\tradialBar,\n} from \"#/core/marks/polar.ts\";\nexport { type RectOptions, rectY } from \"#/core/marks/rect.ts\";\nexport { type RuleOptions, ruleX, ruleY } from \"#/core/marks/rule.ts\";\nexport type { ChartMarkOptions } from \"#/core/marks/shared.ts\";\nexport {\n\ttype DifferenceOptions,\n\tdifferenceY,\n} from \"#/core/marks/stats/difference.ts\";\nexport {\n\ttype BoxOptions,\n\tboxY,\n\ttype RidgelineOptions,\n\tridgeline,\n\tviolinY,\n} from \"#/core/marks/stats/distribution.ts\";\nexport { type DodgeOptions, dodgeY } from \"#/core/marks/stats/dodge.ts\";\nexport { type HexbinOptions, hexbin } from \"#/core/marks/stats/hexbin.ts\";\nexport {\n\ttype HistogramOptions,\n\thistogram,\n} from \"#/core/marks/stats/histogram.ts\";\nexport {\n\ttype RegressionOptions,\n\tregressionY,\n} from \"#/core/marks/stats/regression.ts\";\nexport {\n\tboxSummary,\n\tkernelDensity,\n\tlinearFit,\n\tquantile,\n} from \"#/core/marks/stats/statistics.ts\";\nexport { type WaffleOptions, waffleY } from \"#/core/marks/stats/waffle.ts\";\nexport { type TextOptions, text } from \"#/core/marks/text.ts\";\nexport { type TickOptions, tickX, tickY } from \"#/core/marks/tick.ts\";\nexport { easeOutCubic, tweenScene } from \"#/core/motion/tween.ts\";\nexport {\n\ttype ChartFocusStop,\n\tfindNearest,\n\tfocusStops,\n} from \"#/core/nearest.ts\";\nexport { estimateTextWidth } from \"#/core/text.ts\";\nexport { DEFAULT_THEME } from \"#/core/theme.ts\";\nexport type * from \"#/core/types.ts\";\n"],
5
- "mappings": "AAAA,SAA8B,oBAAoB;AAClD;AAAA,EASC;AAAA,OACM;AACP,SAAS,aAAa;AACtB,SAAS,YAAY,cAAc,mBAAmB;AACtD,SAA2B,OAAO,aAAa;AAC/C,SAA0B,MAAM,YAAY;AAC5C,SAA2B,YAAY;AACvC,SAA0B,WAAW;AACrC,SAA6B,cAAc;AAC3C,SAA2B,OAAO,aAAa;AAC/C;AAAA,EAEC;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACM;AACP,SAA2B,aAAa;AACxC,SAA2B,OAAO,aAAa;AAE/C;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EAEC;AAAA,EAEA;AAAA,EACA;AAAA,OACM;AACP,SAA4B,cAAc;AAC1C,SAA6B,cAAc;AAC3C;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAA6B,eAAe;AAC5C,SAA2B,YAAY;AACvC,SAA2B,OAAO,aAAa;AAC/C,SAAS,cAAc,kBAAkB;AACzC;AAAA,EAEC;AAAA,EACA;AAAA,OACM;AACP,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;",
4
+ "sourcesContent": ["export { type CompileOptions, compileChart } from \"#/core/compile.ts\";\nexport {\n\ttype ChartAxisOptions,\n\ttype ChartBuildContext,\n\ttype ChartColorOptions,\n\ttype ChartDefinition,\n\ttype ChartFacet,\n\ttype ChartFacetOptions,\n\ttype ChartPositionScaleOptions,\n\ttype ChartSpec,\n\tdefineChart,\n} from \"#/core/define-chart.ts\";\nexport { facet } from \"#/core/facet.ts\";\nexport { formatDate, formatNumber, formatValue } from \"#/core/format.ts\";\nexport { type AreaOptions, areaX, areaY } from \"#/core/marks/area.ts\";\nexport { type BarOptions, barX, barY } from \"#/core/marks/bar.ts\";\nexport { type CellOptions, cell } from \"#/core/marks/cell.ts\";\nexport { type DotOptions, dot } from \"#/core/marks/dot.ts\";\nexport { type FunnelOptions, funnel } from \"#/core/marks/funnel.ts\";\nexport { type LineOptions, lineX, lineY } from \"#/core/marks/line.ts\";\nexport {\n\ttype ArcOptions,\n\tarc,\n\tdonut,\n\ttype RadarOptions,\n\ttype RadialBarOptions,\n\tradar,\n\tradialBar,\n} from \"#/core/marks/polar.ts\";\nexport { type RectOptions, rectY } from \"#/core/marks/rect.ts\";\nexport { type RuleOptions, ruleX, ruleY } from \"#/core/marks/rule.ts\";\nexport type { ChartMarkOptions } from \"#/core/marks/shared.ts\";\nexport {\n\ttype DifferenceOptions,\n\tdifferenceY,\n} from \"#/core/marks/stats/difference.ts\";\nexport {\n\ttype BoxOptions,\n\tboxY,\n\ttype RidgelineOptions,\n\tridgeline,\n\tviolinY,\n} from \"#/core/marks/stats/distribution.ts\";\nexport { type DodgeOptions, dodgeY } from \"#/core/marks/stats/dodge.ts\";\nexport { type HexbinOptions, hexbin } from \"#/core/marks/stats/hexbin.ts\";\nexport {\n\ttype HistogramOptions,\n\thistogram,\n} from \"#/core/marks/stats/histogram.ts\";\nexport {\n\ttype RegressionOptions,\n\tregressionY,\n} from \"#/core/marks/stats/regression.ts\";\nexport {\n\tboxSummary,\n\tkernelDensity,\n\tlinearFit,\n\tquantile,\n} from \"#/core/marks/stats/statistics.ts\";\nexport { type WaffleOptions, waffleY } from \"#/core/marks/stats/waffle.ts\";\nexport { type TextOptions, text } from \"#/core/marks/text.ts\";\nexport { type TickOptions, tickX, tickY } from \"#/core/marks/tick.ts\";\nexport {\n\tcreateMotionStore,\n\ttype MotionStore,\n} from \"#/core/motion/motion-store.ts\";\nexport {\n\ttype ChartAnimation,\n\ttype ChartTiming,\n\tchartTiming,\n} from \"#/core/motion/timing.ts\";\nexport { easeOutCubic, tweenScene } from \"#/core/motion/tween.ts\";\nexport {\n\ttype ChartFocusStop,\n\tfindNearest,\n\tfocusStops,\n} from \"#/core/nearest.ts\";\nexport { estimateTextWidth } from \"#/core/text.ts\";\nexport { DEFAULT_THEME } from \"#/core/theme.ts\";\nexport type * from \"#/core/types.ts\";\n"],
5
+ "mappings": "AAAA,SAA8B,oBAAoB;AAClD;AAAA,EASC;AAAA,OACM;AACP,SAAS,aAAa;AACtB,SAAS,YAAY,cAAc,mBAAmB;AACtD,SAA2B,OAAO,aAAa;AAC/C,SAA0B,MAAM,YAAY;AAC5C,SAA2B,YAAY;AACvC,SAA0B,WAAW;AACrC,SAA6B,cAAc;AAC3C,SAA2B,OAAO,aAAa;AAC/C;AAAA,EAEC;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACM;AACP,SAA2B,aAAa;AACxC,SAA2B,OAAO,aAAa;AAE/C;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EAEC;AAAA,EAEA;AAAA,EACA;AAAA,OACM;AACP,SAA4B,cAAc;AAC1C,SAA6B,cAAc;AAC3C;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EAEC;AAAA,OACM;AACP;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACM;AACP,SAA6B,eAAe;AAC5C,SAA2B,YAAY;AACvC,SAA2B,OAAO,aAAa;AAC/C;AAAA,EACC;AAAA,OAEM;AACP;AAAA,EAGC;AAAA,OACM;AACP,SAAS,cAAc,kBAAkB;AACzC;AAAA,EAEC;AAAA,EACA;AAAA,OACM;AACP,SAAS,yBAAyB;AAClC,SAAS,qBAAqB;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
1
  import * as React from "react";
2
2
  import type { ChartDefinition } from "../core/define-chart.js";
3
+ import { type ChartAnimation } from "../core/motion/timing.js";
3
4
  import type { ChartPoint } from "../core/types.js";
4
5
  import { type ChartBrush } from "./brush-contract.js";
5
6
  import { type ChartTooltipRenderProps } from "./chart-tooltip.js";
@@ -23,8 +24,12 @@ interface Props extends Omit<React.ComponentProps<"div">, "children" | "onSelect
23
24
  readonly legend?: boolean;
24
25
  /** The visually hidden table of the values. On by default; turn it off only when the page shows the same table. */
25
26
  readonly dataTable?: boolean;
26
- /** Tween a data update, in milliseconds; `false` snaps. Reduced motion always snaps. */
27
- readonly animate?: boolean | number;
27
+ /**
28
+ * How a data update moves: `true` (a spring with no bounce), a perceived
29
+ * duration in milliseconds, or `{ duration, bounce, stagger }` and
30
+ * `{ type: "tween", easing }`. `false` snaps; reduced motion always does.
31
+ */
32
+ readonly animate?: boolean | number | ChartAnimation;
28
33
  /**
29
34
  * Zoom a continuous x: the wheel while the chart has focus, + and −,
30
35
  * Shift and the arrows to pan, a drag to pan when zoomed, 0 to reset.
@@ -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;AAG9D,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;AA6BzD,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,wFAAwF;IACxF,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACpC;;;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,qBAwXP"}
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"}
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import * as React from "react";
3
3
  import { compileChart } from "../core/compile.js";
4
+ import { chartTiming } from "../core/motion/timing.js";
4
5
  import { findNearest, focusStops } from "../core/nearest.js";
5
6
  import { toNumber } from "../core/scales/continuous.js";
6
7
  import {
@@ -23,7 +24,6 @@ import { useChartZoom } from "./use-chart-zoom.js";
23
24
  import { useTextMeasurer } from "./use-text-measurer.js";
24
25
  const DEFAULT_HEIGHT = 300;
25
26
  const DEFAULT_INITIAL_WIDTH = 640;
26
- const DEFAULT_DURATION = 300;
27
27
  const CHART_CSS = `
28
28
  [data-slot="chart-surface"]:focus-visible{outline:2px solid var(--ring,Highlight);outline-offset:2px;border-radius:4px}
29
29
  @media (forced-colors:active){
@@ -102,15 +102,17 @@ 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
- const shown = useAnimatedScene(
110
- scene,
111
- animationTrigger,
112
- animate === false ? 0 : animate === true ? DEFAULT_DURATION : animate
110
+ const animateKey = JSON.stringify(animate);
111
+ const timing = React.useMemo(
112
+ () => chartTiming(JSON.parse(animateKey)),
113
+ [animateKey]
113
114
  );
115
+ const shown = useAnimatedScene(scene, animationTrigger, timing);
114
116
  const messages = messagesFor(scene.locale);
115
117
  const { active, handlers } = useChartFocus({
116
118
  stops,
@@ -194,16 +196,19 @@ function Chart({
194
196
  if (event.key === "+" || event.key === "=") {
195
197
  event.preventDefault();
196
198
  viewport.zoomAround(center, ZOOM_STEP);
199
+ setKeyboardZooms((count) => count + 1);
197
200
  return;
198
201
  }
199
202
  if (event.key === "-" || event.key === "_") {
200
203
  event.preventDefault();
201
204
  viewport.zoomAround(center, 1 / ZOOM_STEP);
205
+ setKeyboardZooms((count) => count + 1);
202
206
  return;
203
207
  }
204
208
  if (event.key === "0") {
205
209
  event.preventDefault();
206
210
  viewport.reset();
211
+ setKeyboardZooms((count) => count + 1);
207
212
  return;
208
213
  }
209
214
  if (event.shiftKey && (event.key === "ArrowLeft" || event.key === "ArrowRight")) {