layerchart 2.0.0-next.61 → 2.0.0-next.63

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 (182) hide show
  1. package/dist/canvas.d.ts +6 -2
  2. package/dist/canvas.js +6 -2
  3. package/dist/components/Arc/Arc.base.svelte +49 -11
  4. package/dist/components/Arc/Arc.shared.svelte.d.ts +2 -0
  5. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-full-circle--360-degree-range--1.png +0 -0
  6. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-full-circle--360-degree-range--2.png +0 -0
  7. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-innerRadius-of-0--pie-slice--1.png +0 -0
  8. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-innerRadius-of-0--pie-slice--2.png +0 -0
  9. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-negative-domain-values-1.png +0 -0
  10. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-negative-domain-values-2.png +0 -0
  11. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-partial-arc--e-g---180-degrees--1.png +0 -0
  12. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-partial-arc--e-g---180-degrees--2.png +0 -0
  13. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-at-max-domain-1.png +0 -0
  14. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-at-max-domain-2.png +0 -0
  15. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-below-domain-min-1.png +0 -0
  16. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-below-domain-min-2.png +0 -0
  17. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-exceeding-domain-max-1.png +0 -0
  18. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-exceeding-domain-max-2.png +0 -0
  19. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-of-0-1.png +0 -0
  20. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-edge-cases-should-handle-value-of-0-2.png +0 -0
  21. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-pointer-enter-events-1.png +0 -0
  22. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-pointer-enter-events-2.png +0 -0
  23. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-pointer-move-events-1.png +0 -0
  24. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-pointer-move-events-2.png +0 -0
  25. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-touch-move-events-1.png +0 -0
  26. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-events-should-handle-touch-move-events-2.png +0 -0
  27. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-custom-class-1.png +0 -0
  28. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-custom-class-2.png +0 -0
  29. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-fill-color-1.png +0 -0
  30. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-fill-color-2.png +0 -0
  31. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-fillOpacity-1.png +0 -0
  32. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-fillOpacity-2.png +0 -0
  33. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-offset-to-arc-position-1.png +0 -0
  34. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-offset-to-arc-position-2.png +0 -0
  35. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-opacity-1.png +0 -0
  36. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-opacity-2.png +0 -0
  37. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-stroke-color-1.png +0 -0
  38. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-stroke-color-2.png +0 -0
  39. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-strokeWidth-1.png +0 -0
  40. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-strokeWidth-2.png +0 -0
  41. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-zero-offset-by-default-1.png +0 -0
  42. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-apply-zero-offset-by-default-2.png +0 -0
  43. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-call-tooltip-hide-on-pointer-leave-1.png +0 -0
  44. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-call-tooltip-hide-on-pointer-leave-2.png +0 -0
  45. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-call-tooltip-show-on-pointer-enter-with-data-1.png +0 -0
  46. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-call-tooltip-show-on-pointer-enter-with-data-2.png +0 -0
  47. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-handle-custom-start-angle-in-range-1.png +0 -0
  48. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-handle-custom-start-angle-in-range-2.png +0 -0
  49. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-have-stroke--none--by-default-1.png +0 -0
  50. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-have-stroke--none--by-default-2.png +0 -0
  51. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-an-arc-path-with-value-1.png +0 -0
  52. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-an-arc-path-with-value-2.png +0 -0
  53. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-when-track-prop-is-provided-1.png +0 -0
  54. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-when-track-prop-is-provided-2.png +0 -0
  55. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-custom-class-1.png +0 -0
  56. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-custom-class-2.png +0 -0
  57. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackCornerRadius-1.png +0 -0
  58. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackCornerRadius-2.png +0 -0
  59. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackEndAngle-1.png +0 -0
  60. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackEndAngle-2.png +0 -0
  61. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackInnerRadius-1.png +0 -0
  62. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackInnerRadius-2.png +0 -0
  63. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackInnerRadius-and-trackOuterRadius-1.png +0 -0
  64. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackInnerRadius-and-trackOuterRadius-2.png +0 -0
  65. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackOuterRadius-1.png +0 -0
  66. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackOuterRadius-2.png +0 -0
  67. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackPadAngle-1.png +0 -0
  68. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackPadAngle-2.png +0 -0
  69. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackStartAngle-1.png +0 -0
  70. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackStartAngle-2.png +0 -0
  71. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackStartAngle-and-trackEndAngle-1.png +0 -0
  72. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-track-with-trackStartAngle-and-trackEndAngle-2.png +0 -0
  73. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-both-startAngle-and-endAngle-1.png +0 -0
  74. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-both-startAngle-and-endAngle-2.png +0 -0
  75. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-cornerRadius-1.png +0 -0
  76. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-cornerRadius-2.png +0 -0
  77. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-domain-1.png +0 -0
  78. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-domain-2.png +0 -0
  79. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-domain-and-range-1.png +0 -0
  80. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-domain-and-range-2.png +0 -0
  81. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-range-1.png +0 -0
  82. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-custom-range-2.png +0 -0
  83. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-endAngle-in-radians-1.png +0 -0
  84. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-endAngle-in-radians-2.png +0 -0
  85. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-innerRadius-1.png +0 -0
  86. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-innerRadius-2.png +0 -0
  87. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-innerRadius-and-outerRadius-1.png +0 -0
  88. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-innerRadius-and-outerRadius-2.png +0 -0
  89. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-outerRadius-1.png +0 -0
  90. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-outerRadius-2.png +0 -0
  91. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-padAngle-1.png +0 -0
  92. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-padAngle-2.png +0 -0
  93. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-startAngle-in-radians-1.png +0 -0
  94. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-props-should-render-with-startAngle-in-radians-2.png +0 -0
  95. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-should-render-Arc-element-1.png +0 -0
  96. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-should-render-Arc-element-2.png +0 -0
  97. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-should-render-track-1.png +0 -0
  98. package/dist/components/Arc/__screenshots__/Arc.svelte.test.ts/Arc-should-render-track-2.png +0 -0
  99. package/dist/components/ArcLabel/ArcLabel.shared.svelte.d.ts +1 -0
  100. package/dist/components/{ArcLabel.svelte.test.js → ArcLabel/ArcLabel.svelte.test.js} +3 -3
  101. package/dist/components/ArcLabel/__screenshots__/ArcLabel.svelte.test.ts/ArcLabel-renders-a-text-element-with-the-supplied-value-at-the-centroid-1.png +0 -0
  102. package/dist/components/ArcLabel/__screenshots__/ArcLabel.svelte.test.ts/ArcLabel-renders-a-text-element-with-the-supplied-value-at-the-centroid-2.png +0 -0
  103. package/dist/components/Blur/Blur.canvas.svelte +25 -0
  104. package/dist/components/Blur/Blur.canvas.svelte.d.ts +4 -0
  105. package/dist/components/Blur/Blur.html.svelte +11 -0
  106. package/dist/components/Blur/Blur.html.svelte.d.ts +4 -0
  107. package/dist/components/{Blur.svelte.d.ts → Blur/Blur.shared.svelte.d.ts} +3 -5
  108. package/dist/components/Blur/Blur.svelte +23 -0
  109. package/dist/components/Blur/Blur.svelte.d.ts +4 -0
  110. package/dist/components/Blur/Blur.svg.svelte +24 -0
  111. package/dist/components/Blur/Blur.svg.svelte.d.ts +4 -0
  112. package/dist/components/Chart/Chart.base.svelte +13 -7
  113. package/dist/components/Chart/ChartCore.svelte.test.d.ts +1 -0
  114. package/dist/components/{ChartCore.svelte.test.js → Chart/ChartCore.svelte.test.js} +1 -1
  115. package/dist/components/Circle/Circle.shared.svelte.js +24 -5
  116. package/dist/components/Circle/Circle.svelte.test.js +70 -0
  117. package/dist/components/Dodge/Dodge.shared.svelte.d.ts +132 -0
  118. package/dist/components/Dodge/Dodge.shared.svelte.js +240 -0
  119. package/dist/components/Dodge/Dodge.svelte +88 -0
  120. package/dist/components/Dodge/Dodge.svelte.d.ts +27 -0
  121. package/dist/components/Dodge/Dodge.test.d.ts +1 -0
  122. package/dist/components/Dodge/Dodge.test.js +128 -0
  123. package/dist/components/Image/Image.html.svelte +0 -8
  124. package/dist/components/Image/Image.svg.svelte +1 -9
  125. package/dist/components/Link/Link.base.svelte +15 -9
  126. package/dist/components/Path/Path.canvas.svelte +5 -2
  127. package/dist/components/Path/Path.shared.svelte.d.ts +17 -4
  128. package/dist/components/Path/Path.shared.svelte.js +26 -8
  129. package/dist/components/Path/Path.svg.svelte +75 -60
  130. package/dist/components/Pattern/Pattern.canvas.svelte +4 -1
  131. package/dist/components/Pattern/Pattern.shared.svelte.d.ts +31 -2
  132. package/dist/components/Pattern/Pattern.shared.svelte.js +20 -1
  133. package/dist/components/Pattern/Pattern.svg.svelte +17 -1
  134. package/dist/components/Raster/Raster.base.svelte +2 -8
  135. package/dist/components/Rect/Rect.canvas.svelte +2 -4
  136. package/dist/components/Rect/Rect.canvas.svelte.d.ts +1 -1
  137. package/dist/components/Rect/Rect.html.svelte +3 -9
  138. package/dist/components/Rect/Rect.html.svelte.d.ts +1 -1
  139. package/dist/components/Rect/Rect.shared.svelte.d.ts +5 -2
  140. package/dist/components/Rect/Rect.shared.svelte.js +26 -13
  141. package/dist/components/Rect/Rect.svelte.test.js +45 -0
  142. package/dist/components/Rect/Rect.svg.svelte +36 -21
  143. package/dist/components/Rect/Rect.svg.svelte.d.ts +1 -1
  144. package/dist/components/RectClipPath/RectClipPath.base.svelte +25 -1
  145. package/dist/components/RectClipPath/RectClipPath.shared.svelte.d.ts +8 -0
  146. package/dist/components/Spline/Spline.base.svelte +3 -2
  147. package/dist/components/Text/Text.canvas.svelte +9 -0
  148. package/dist/components/Text/Text.html.svelte +6 -0
  149. package/dist/components/Text/Text.shared.svelte.d.ts +25 -2
  150. package/dist/components/Text/Text.shared.svelte.js +36 -5
  151. package/dist/components/Text/Text.svelte.test.js +40 -0
  152. package/dist/components/Text/Text.svg.svelte +7 -1
  153. package/dist/components/Trail/Trail.base.svelte +10 -7
  154. package/dist/components/Waffle/Waffle.shared.svelte.d.ts +182 -0
  155. package/dist/components/Waffle/Waffle.shared.svelte.js +300 -0
  156. package/dist/components/Waffle/Waffle.svelte +148 -0
  157. package/dist/components/Waffle/Waffle.svelte.d.ts +5 -0
  158. package/dist/components/charts/__screenshots__/ArcChart.svelte.test.ts/ArcChart-uses-the-chart-value-accessor-for-explicit-per-series-tooltip-values-1.png +0 -0
  159. package/dist/components/charts/__screenshots__/ArcChart.svelte.test.ts/ArcChart-uses-the-chart-value-accessor-for-explicit-per-series-tooltip-values-2.png +0 -0
  160. package/dist/components/charts/__screenshots__/BarChart.svelte.test.ts/BarChart-legend-series-toggle-adjusts-group-scale-should-adjust-grouped-bar-widths-when-series-are-toggled-via-legend-1.png +0 -0
  161. package/dist/components/charts/__screenshots__/PieChart.svelte.test.ts/PieChart-uses-hovered-slice-identity-for-implicit-tooltip-series-1.png +0 -0
  162. package/dist/components/charts/__screenshots__/PieChart.svelte.test.ts/PieChart-uses-hovered-slice-identity-for-implicit-tooltip-series-2.png +0 -0
  163. package/dist/components/index.d.ts +6 -2
  164. package/dist/components/index.js +6 -2
  165. package/dist/html.d.ts +6 -2
  166. package/dist/html.js +6 -2
  167. package/dist/states/chart.svelte.d.ts +4 -2
  168. package/dist/states/chart.svelte.js +53 -22
  169. package/dist/states/chart.svelte.test.js +54 -1
  170. package/dist/states/series.svelte.js +9 -13
  171. package/dist/states/series.svelte.test.js +5 -1
  172. package/dist/svg.d.ts +6 -2
  173. package/dist/svg.js +6 -2
  174. package/dist/utils/canvas.js +54 -13
  175. package/dist/utils/canvas.svelte.test.js +44 -0
  176. package/dist/utils/download.d.ts +5 -3
  177. package/dist/utils/download.js +36 -16
  178. package/dist/utils/stack.js +10 -2
  179. package/package.json +1 -1
  180. package/dist/components/Blur.svelte +0 -49
  181. /package/dist/components/{ArcLabel.svelte.test.d.ts → ArcLabel/ArcLabel.svelte.test.d.ts} +0 -0
  182. /package/dist/components/{ChartCore.svelte.test.d.ts → Blur/Blur.shared.svelte.js} +0 -0
@@ -27,6 +27,12 @@ const SVG_STYLE_PROPERTIES = [
27
27
  'alignment-baseline',
28
28
  'visibility',
29
29
  'display',
30
+ // `<Text>` wraps each label in a nested `<svg class="lc-text-svg">` that
31
+ // relies on `overflow: visible` so labels can render outside the wrapper
32
+ // (axis ticks positioned at negative x). Without this inlined, the
33
+ // rasteriser falls back to the spec default `overflow: hidden` and clips
34
+ // the labels.
35
+ 'overflow',
30
36
  'paint-order',
31
37
  'shape-rendering',
32
38
  'text-rendering',
@@ -58,9 +64,16 @@ function inlineSvgStyles(svg) {
58
64
  }
59
65
  /**
60
66
  * Draw an SVG element onto a canvas context at the given pixel dimensions.
67
+ * Sets `viewBox` (if not authored) so the SVG content scales to fill the
68
+ * destination size — without it, increasing the `width`/`height` attributes
69
+ * leaves content at its original pixel coordinates and the result lands in
70
+ * the top-left.
61
71
  */
62
- function drawSvgToCanvas(svg, ctx, pixelWidth, pixelHeight) {
72
+ function drawSvgToCanvas(svg, ctx, pixelWidth, pixelHeight, cssWidth, cssHeight) {
63
73
  const inlined = inlineSvgStyles(svg);
74
+ if (!inlined.getAttribute('viewBox')) {
75
+ inlined.setAttribute('viewBox', `0 0 ${cssWidth} ${cssHeight}`);
76
+ }
64
77
  inlined.setAttribute('width', String(pixelWidth));
65
78
  inlined.setAttribute('height', String(pixelHeight));
66
79
  const svgStr = new XMLSerializer().serializeToString(inlined);
@@ -69,7 +82,7 @@ function drawSvgToCanvas(svg, ctx, pixelWidth, pixelHeight) {
69
82
  return new Promise((resolve, reject) => {
70
83
  const img = new Image();
71
84
  img.onload = () => {
72
- ctx.drawImage(img, 0, 0);
85
+ ctx.drawImage(img, 0, 0, pixelWidth, pixelHeight);
73
86
  URL.revokeObjectURL(url);
74
87
  resolve();
75
88
  };
@@ -90,9 +103,22 @@ function drawSvgToCanvas(svg, ctx, pixelWidth, pixelHeight) {
90
103
  */
91
104
  export async function getChartImageBlob(container, options = {}) {
92
105
  const { background, format = 'png', quality = 0.92 } = options;
93
- const dpr = options.pixelRatio ?? window.devicePixelRatio ?? 1;
94
- const cssWidth = container.clientWidth;
95
- const cssHeight = container.clientHeight;
106
+ // Default to 1 so PNGs match the chart's on-page size; pass
107
+ // `pixelRatio: window.devicePixelRatio` (or higher) for retina-sharp output.
108
+ const dpr = options.pixelRatio ?? 1;
109
+ // Find all SVG and Canvas layers within the container, sorted by z-index.
110
+ // The class-name selector implicitly excludes `.lc-hit-canvas`.
111
+ const layers = Array.from(container.querySelectorAll('.lc-layout-svg, .lc-layout-canvas')).sort((a, b) => {
112
+ const aZ = parseFloat(window.getComputedStyle(a).zIndex) || 0;
113
+ const bZ = parseFloat(window.getComputedStyle(b).zIndex) || 0;
114
+ return aZ - bZ;
115
+ });
116
+ // Size the output to the chart layers (all share the same bounds) rather
117
+ // than the wrapping container, so padding/margin doesn't leave blank
118
+ // space on the right/bottom of the image.
119
+ const layerRect = layers[0]?.getBoundingClientRect();
120
+ const cssWidth = layerRect?.width || container.clientWidth;
121
+ const cssHeight = layerRect?.height || container.clientHeight;
96
122
  const pixelWidth = Math.round(cssWidth * dpr);
97
123
  const pixelHeight = Math.round(cssHeight * dpr);
98
124
  const offscreen = document.createElement('canvas');
@@ -105,21 +131,15 @@ export async function getChartImageBlob(container, options = {}) {
105
131
  ctx.fillStyle = bg;
106
132
  ctx.fillRect(0, 0, pixelWidth, pixelHeight);
107
133
  }
108
- // Find all SVG and Canvas layers within the container, sorted by z-index.
109
- // `.lc-hit-canvas` is excluded via the class selector (it uses `.lc-layout-canvas`).
110
- const layers = Array.from(container.querySelectorAll('.lc-layout-svg, .lc-layout-canvas')).sort((a, b) => {
111
- const aZ = parseFloat(window.getComputedStyle(a).zIndex) || 0;
112
- const bZ = parseFloat(window.getComputedStyle(b).zIndex) || 0;
113
- return aZ - bZ;
114
- });
115
134
  for (const layer of layers) {
116
135
  if (layer instanceof SVGElement) {
117
- await drawSvgToCanvas(layer, ctx, pixelWidth, pixelHeight);
136
+ await drawSvgToCanvas(layer, ctx, pixelWidth, pixelHeight, cssWidth, cssHeight);
118
137
  }
119
138
  else if (layer instanceof HTMLCanvasElement) {
120
- // Canvas layers are already rendered at physical pixel resolution via scaleCanvas().
121
- // Draw them at full natural size to preserve sharpness.
122
- ctx.drawImage(layer, 0, 0);
139
+ // Canvas bitmaps are sized to `cssSize × window.devicePixelRatio`
140
+ // (set by `scaleCanvas`). Map them to the requested output size so
141
+ // the result matches `pixelRatio`.
142
+ ctx.drawImage(layer, 0, 0, pixelWidth, pixelHeight);
123
143
  }
124
144
  }
125
145
  return new Promise((resolve, reject) => {
@@ -14,7 +14,11 @@ export function groupStackData(data, options) {
14
14
  ...new Set(groupData.map((d) => d[options.stackBy ?? ''])),
15
15
  ];
16
16
  // @ts-expect-error
17
- const stackData = stack().keys(stackKeys).order(options.order).offset(options.offset)(pivotData);
17
+ const stackData = stack()
18
+ .keys(stackKeys)
19
+ .value((d, key) => d[key] ?? 0)
20
+ .order(options.order)
21
+ .offset(options.offset)(pivotData);
18
22
  return stackData.flatMap((series) => {
19
23
  return series.flatMap((s) => {
20
24
  const keys = {
@@ -43,7 +47,11 @@ export function groupStackData(data, options) {
43
47
  // @ts-expect-error
44
48
  const stackKeys = [...new Set(data.map((d) => d[options.stackBy ?? '']))];
45
49
  // @ts-expect-error
46
- const stackData = stack().keys(stackKeys).order(options.order).offset(options.offset)(pivotData);
50
+ const stackData = stack()
51
+ .keys(stackKeys)
52
+ .value((d, key) => d[key] ?? 0)
53
+ .order(options.order)
54
+ .offset(options.offset)(pivotData);
47
55
  const result = stackData.flatMap((series) => {
48
56
  return series.flatMap((s) => {
49
57
  const keys = {
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "license": "MIT",
6
6
  "repository": "techniq/layerchart",
7
7
  "homepage": "https://layerchart.com",
8
- "version": "2.0.0-next.61",
8
+ "version": "2.0.0-next.63",
9
9
  "devDependencies": {
10
10
  "@changesets/cli": "^2.30.0",
11
11
  "@napi-rs/canvas": "^0.1.97",
@@ -1,49 +0,0 @@
1
- <script lang="ts" module>
2
- export type BlurProps = {
3
- /**
4
- * A unique id for the filter.
5
- */
6
- id?: string;
7
-
8
- /**
9
- * The standard deviation for the blur effect.
10
- *
11
- * @default 5
12
- */
13
- stdDeviation?: number;
14
-
15
- /**
16
- * The default children snippet which provides
17
- * the id for the filter.
18
- */
19
- children?: Snippet;
20
- };
21
- </script>
22
-
23
- <script lang="ts">
24
- import type { Snippet } from 'svelte';
25
- import { getLayerContext } from '../contexts/layer.js';
26
- import { createId } from '../utils/createId.js';
27
-
28
- const uid = $props.id();
29
-
30
- let { id = createId('blur-', uid), stdDeviation = 5, children }: BlurProps = $props();
31
-
32
- const layerCtx = getLayerContext();
33
- </script>
34
-
35
- {#if layerCtx === 'svg'}
36
- <defs>
37
- <filter {id} class="lc-blur-filter">
38
- <feGaussianBlur in="SourceGraphic" {stdDeviation} />
39
- </filter>
40
- </defs>
41
-
42
- {#if children}
43
- <g filter="url(#{id})" class="lc-blur-g">
44
- {@render children()}
45
- </g>
46
- {/if}
47
- {:else if children}
48
- {@render children()}
49
- {/if}