layerchart 0.53.0 → 0.54.1

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 (107) hide show
  1. package/dist/components/Arc.svelte +170 -144
  2. package/dist/components/Area.svelte +96 -67
  3. package/dist/components/Area.svelte.d.ts +1 -0
  4. package/dist/components/Axis.svelte +241 -234
  5. package/dist/components/Axis.svelte.d.ts +2 -1
  6. package/dist/components/Bar.svelte +72 -45
  7. package/dist/components/Bars.svelte +46 -34
  8. package/dist/components/Bars.svelte.d.ts +1 -0
  9. package/dist/components/Blur.svelte +5 -3
  10. package/dist/components/Bounds.svelte +37 -21
  11. package/dist/components/Brush.svelte +181 -110
  12. package/dist/components/Calendar.svelte +51 -38
  13. package/dist/components/Chart.svelte +296 -73
  14. package/dist/components/Chart.svelte.d.ts +42 -25
  15. package/dist/components/ChartClipPath.svelte +8 -5
  16. package/dist/components/ChartContext.svelte +243 -93
  17. package/dist/components/ChartContext.svelte.d.ts +15 -23
  18. package/dist/components/Circle.svelte +25 -16
  19. package/dist/components/CircleClipPath.svelte +16 -10
  20. package/dist/components/ClipPath.svelte +11 -7
  21. package/dist/components/ColorRamp.svelte +12 -10
  22. package/dist/components/ForceSimulation.svelte +185 -116
  23. package/dist/components/Frame.svelte +10 -6
  24. package/dist/components/GeoCircle.svelte +15 -9
  25. package/dist/components/GeoContext.svelte +109 -62
  26. package/dist/components/GeoEdgeFade.svelte +20 -14
  27. package/dist/components/GeoPath.svelte +107 -69
  28. package/dist/components/GeoPoint.svelte +32 -18
  29. package/dist/components/GeoSpline.svelte +30 -22
  30. package/dist/components/GeoTile.svelte +40 -30
  31. package/dist/components/GeoVisible.svelte +10 -7
  32. package/dist/components/Graticule.svelte +14 -8
  33. package/dist/components/Grid.svelte +178 -0
  34. package/dist/components/Grid.svelte.d.ts +35 -0
  35. package/dist/components/Group.svelte +43 -31
  36. package/dist/components/Highlight.svelte +284 -243
  37. package/dist/components/HitCanvas.svelte +75 -42
  38. package/dist/components/Hull.svelte +40 -20
  39. package/dist/components/Labels.svelte +84 -63
  40. package/dist/components/Labels.svelte.d.ts +2 -0
  41. package/dist/components/Legend.svelte +106 -75
  42. package/dist/components/Legend.svelte.d.ts +1 -1
  43. package/dist/components/Line.svelte +29 -19
  44. package/dist/components/LinearGradient.svelte +21 -15
  45. package/dist/components/Link.svelte +44 -22
  46. package/dist/components/MonthPath.svelte +23 -16
  47. package/dist/components/MotionPath.svelte +34 -25
  48. package/dist/components/Pack.svelte +21 -14
  49. package/dist/components/Partition.svelte +35 -20
  50. package/dist/components/Pattern.svelte +8 -6
  51. package/dist/components/Pie.svelte +76 -57
  52. package/dist/components/Point.svelte +11 -7
  53. package/dist/components/Points.svelte +178 -143
  54. package/dist/components/RadialGradient.svelte +25 -18
  55. package/dist/components/Rect.svelte +33 -19
  56. package/dist/components/RectClipPath.svelte +16 -11
  57. package/dist/components/Rule.svelte +66 -42
  58. package/dist/components/Rule.svelte.d.ts +2 -0
  59. package/dist/components/Sankey.svelte +55 -30
  60. package/dist/components/Spline.svelte +118 -96
  61. package/dist/components/Text.svelte +137 -104
  62. package/dist/components/Threshold.svelte +18 -7
  63. package/dist/components/TileImage.svelte +56 -50
  64. package/dist/components/TransformContext.svelte +238 -136
  65. package/dist/components/TransformControls.svelte +57 -29
  66. package/dist/components/TransformControls.svelte.d.ts +1 -1
  67. package/dist/components/Tree.svelte +33 -23
  68. package/dist/components/Treemap.svelte +69 -41
  69. package/dist/components/Voronoi.svelte +55 -28
  70. package/dist/components/charts/AreaChart.svelte +162 -87
  71. package/dist/components/charts/AreaChart.svelte.d.ts +41 -3
  72. package/dist/components/charts/BarChart.svelte +207 -108
  73. package/dist/components/charts/BarChart.svelte.d.ts +41 -3
  74. package/dist/components/charts/LineChart.svelte +119 -47
  75. package/dist/components/charts/LineChart.svelte.d.ts +41 -3
  76. package/dist/components/charts/PieChart.svelte +117 -53
  77. package/dist/components/charts/PieChart.svelte.d.ts +17 -2
  78. package/dist/components/charts/ScatterChart.svelte +92 -42
  79. package/dist/components/charts/ScatterChart.svelte.d.ts +39 -3
  80. package/dist/components/index.d.ts +1 -0
  81. package/dist/components/index.js +1 -0
  82. package/dist/components/layout/Canvas.svelte +63 -43
  83. package/dist/components/layout/Html.svelte +28 -18
  84. package/dist/components/layout/Svg.svelte +47 -32
  85. package/dist/components/tooltip/Tooltip.svelte +143 -82
  86. package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
  87. package/dist/components/tooltip/TooltipContext.svelte +315 -248
  88. package/dist/components/tooltip/TooltipContext.svelte.d.ts +7 -0
  89. package/dist/components/tooltip/TooltipHeader.svelte +9 -3
  90. package/dist/components/tooltip/TooltipItem.svelte +17 -9
  91. package/dist/components/tooltip/TooltipList.svelte +2 -1
  92. package/dist/components/tooltip/TooltipSeparator.svelte +3 -2
  93. package/dist/docs/Blockquote.svelte +4 -3
  94. package/dist/docs/Code.svelte +15 -8
  95. package/dist/docs/CurveMenuField.svelte +17 -12
  96. package/dist/docs/GeoDebug.svelte +13 -9
  97. package/dist/docs/Header1.svelte +2 -1
  98. package/dist/docs/Json.svelte +6 -4
  99. package/dist/docs/Layout.svelte +6 -6
  100. package/dist/docs/PathDataMenuField.svelte +52 -44
  101. package/dist/docs/Preview.svelte +48 -29
  102. package/dist/docs/TilesetField.svelte +80 -62
  103. package/dist/docs/TransformDebug.svelte +8 -5
  104. package/dist/docs/ViewSourceButton.svelte +13 -9
  105. package/dist/stores/motionStore.d.ts +1 -1
  106. package/dist/utils/scales.d.ts +4 -4
  107. package/package.json +29 -30
@@ -1,100 +1,161 @@
1
- <script>import { fade } from 'svelte/transition';
2
- import { cls } from '@layerstack/tailwind';
3
- import { chartContext } from './../ChartContext.svelte';
4
- import { tooltipContext } from './TooltipContext.svelte';
5
- import { motionStore } from '../../stores/motionStore.js';
6
- /** `x` position of tooltip. By default uses the pointer/mouse, can also snap to data or an explicit fixed position. */
7
- export let x = 'pointer';
8
- /** `y` position of tooltip. By default uses the pointer/mouse, can also snap to data or an explicit fixed position. */
9
- export let y = 'pointer';
10
- /** Offset added to `x` position */
11
- export let xOffset = typeof x === 'number' || typeof y === 'number' ? 0 : 10;
12
- /** Offset added to `y` position */
13
- export let yOffset = typeof x === 'number' || typeof y === 'number' ? 0 : 10;
14
- export let anchor = 'top-left';
15
- export let contained = 'container'; // TODO: Support 'window' using getBoundingClientRect()
16
- export let variant = 'default';
17
- /** Set to `false` to disable spring transitions */
18
- export let motion = true;
19
- export let classes = {};
20
- const { padding, xGet, yGet, containerWidth, containerHeight } = chartContext();
21
- const tooltip = tooltipContext();
22
- let tooltipWidth = 0;
23
- let tooltipHeight = 0;
24
- const xPos = motionStore($tooltip.x, { spring: motion });
25
- const yPos = motionStore($tooltip.y, { spring: motion });
26
- function alignValue(value, align, addlOffset, tooltipSize) {
1
+ <script lang="ts">
2
+ import { fade } from 'svelte/transition';
3
+ import { cls } from '@layerstack/tailwind';
4
+
5
+ import { chartContext } from './../ChartContext.svelte';
6
+ import { tooltipContext } from './TooltipContext.svelte';
7
+ import { motionStore } from '../../stores/motionStore.js';
8
+ import { isScaleBand } from '../../utils/scales.js';
9
+
10
+ /** `x` position of tooltip. By default uses the pointer/mouse, can also snap to data or an explicit fixed position. */
11
+ export let x: 'pointer' | 'data' | number | undefined = 'pointer';
12
+ /** `y` position of tooltip. By default uses the pointer/mouse, can also snap to data or an explicit fixed position. */
13
+ export let y: 'pointer' | 'data' | number | undefined = 'pointer';
14
+
15
+ /** Offset added to `x` position */
16
+ export let xOffset = x === 'pointer' ? 10 : 0;
17
+
18
+ /** Offset added to `y` position */
19
+ export let yOffset = y === 'pointer' ? 10 : 0;
20
+
21
+ /** Align based on edge of tooltip */
22
+ type Placement =
23
+ | 'top-left'
24
+ | 'top'
25
+ | 'top-right'
26
+ | 'left'
27
+ | 'center'
28
+ | 'right'
29
+ | 'bottom-left'
30
+ | 'bottom'
31
+ | 'bottom-right';
32
+ export let anchor: Placement = 'top-left';
33
+
34
+ export let contained: 'container' | false = 'container'; // TODO: Support 'window' using getBoundingClientRect()
35
+ export let variant: 'default' | 'invert' | 'none' = 'default';
36
+
37
+ /** Set to `false` to disable spring transitions */
38
+ export let motion = true;
39
+
40
+ export let classes: {
41
+ root?: string;
42
+ container?: string;
43
+ header?: string;
44
+ content?: string;
45
+ } = {};
46
+
47
+ const { padding, xScale, xGet, yScale, yGet, containerWidth, containerHeight } = chartContext();
48
+ const tooltip = tooltipContext();
49
+
50
+ let tooltipWidth = 0;
51
+ let tooltipHeight = 0;
52
+
53
+ const xPos = motionStore($tooltip.x, { spring: motion });
54
+ const yPos = motionStore($tooltip.y, { spring: motion });
55
+
56
+ type Align = 'start' | 'center' | 'end';
57
+
58
+ function alignValue(value: number, align: Align, addlOffset: number, tooltipSize: number) {
27
59
  const alignOffset = align === 'center' ? tooltipSize / 2 : align === 'end' ? tooltipSize : 0;
28
60
  return value + (align === 'end' ? -addlOffset : addlOffset) - alignOffset;
29
- }
30
- $: if ($tooltip?.data) {
31
- const xValue = typeof x === 'number' ? x : x === 'data' ? $xGet($tooltip.data) + $padding.left : $tooltip.x;
32
- let xAlign = 'start';
61
+ }
62
+
63
+ $: if ($tooltip?.data) {
64
+ const xBandOffset = isScaleBand($xScale)
65
+ ? $xScale.step() / 2 - ($xScale.padding() * $xScale.step()) / 2
66
+ : 0;
67
+
68
+ const xValue: number =
69
+ typeof x === 'number'
70
+ ? x
71
+ : x === 'data'
72
+ ? $xGet($tooltip.data) + $padding.left + xBandOffset
73
+ : $tooltip.x;
74
+
75
+ let xAlign: Align = 'start';
33
76
  switch (anchor) {
34
- case 'top-left':
35
- case 'left':
36
- case 'bottom-left':
37
- xAlign = 'start';
38
- break;
39
- case 'top':
40
- case 'center':
41
- case 'bottom':
42
- xAlign = 'center';
43
- break;
44
- case 'top-right':
45
- case 'right':
46
- case 'bottom-right':
47
- xAlign = 'end';
48
- break;
77
+ case 'top-left':
78
+ case 'left':
79
+ case 'bottom-left':
80
+ xAlign = 'start';
81
+ break;
82
+
83
+ case 'top':
84
+ case 'center':
85
+ case 'bottom':
86
+ xAlign = 'center';
87
+ break;
88
+
89
+ case 'top-right':
90
+ case 'right':
91
+ case 'bottom-right':
92
+ xAlign = 'end';
93
+ break;
49
94
  }
50
- const yValue = typeof y === 'number' ? y : y === 'data' ? $yGet($tooltip.data) + $padding.top : $tooltip.y;
51
- let yAlign = 'start';
95
+
96
+ const yBandOffset = isScaleBand($yScale)
97
+ ? $yScale.step() / 2 - ($yScale.padding() * $yScale.step()) / 2
98
+ : 0;
99
+ const yValue: number =
100
+ typeof y === 'number'
101
+ ? y
102
+ : y === 'data'
103
+ ? $yGet($tooltip.data) + $padding.top + yBandOffset
104
+ : $tooltip.y;
105
+
106
+ let yAlign: Align = 'start';
52
107
  switch (anchor) {
53
- case 'top-left':
54
- case 'top':
55
- case 'top-right':
56
- yAlign = 'start';
57
- break;
58
- case 'left':
59
- case 'center':
60
- case 'right':
61
- yAlign = 'center';
62
- break;
63
- case 'bottom-left':
64
- case 'bottom':
65
- case 'bottom-right':
66
- yAlign = 'end';
67
- break;
108
+ case 'top-left':
109
+ case 'top':
110
+ case 'top-right':
111
+ yAlign = 'start';
112
+ break;
113
+
114
+ case 'left':
115
+ case 'center':
116
+ case 'right':
117
+ yAlign = 'center';
118
+ break;
119
+
120
+ case 'bottom-left':
121
+ case 'bottom':
122
+ case 'bottom-right':
123
+ yAlign = 'end';
124
+ break;
68
125
  }
126
+
69
127
  const rect = {
70
- top: alignValue(yValue, yAlign, yOffset, tooltipHeight),
71
- left: alignValue(xValue, xAlign, xOffset, tooltipWidth),
72
- // set below
73
- bottom: 0,
74
- right: 0,
128
+ top: alignValue(yValue, yAlign, yOffset, tooltipHeight),
129
+ left: alignValue(xValue, xAlign, xOffset, tooltipWidth),
130
+ // set below
131
+ bottom: 0,
132
+ right: 0,
75
133
  };
76
134
  rect.bottom = rect.top + tooltipHeight;
77
135
  rect.right = rect.left + tooltipWidth;
136
+
78
137
  // Check if outside of container and swap align side accordingly
79
138
  if (contained === 'container') {
80
- if ((xAlign === 'start' || xAlign === 'center') && rect.right > $containerWidth) {
81
- rect.left = alignValue(xValue, 'end', xOffset, tooltipWidth);
82
- }
83
- if ((xAlign === 'end' || xAlign === 'center') && rect.left < $padding.left) {
84
- rect.left = alignValue(xValue, 'start', xOffset, tooltipWidth);
85
- }
86
- rect.right = rect.left + tooltipWidth;
87
- if ((yAlign === 'start' || yAlign === 'center') && rect.bottom > $containerHeight) {
88
- rect.top = alignValue(yValue, 'end', yOffset, tooltipHeight);
89
- }
90
- if ((yAlign === 'end' || yAlign === 'center') && rect.top < $padding.top) {
91
- rect.top = alignValue(yValue, 'start', yOffset, tooltipHeight);
92
- }
93
- rect.bottom = rect.top + tooltipHeight;
139
+ if ((xAlign === 'start' || xAlign === 'center') && rect.right > $containerWidth) {
140
+ rect.left = alignValue(xValue, 'end', xOffset, tooltipWidth);
141
+ }
142
+ if ((xAlign === 'end' || xAlign === 'center') && rect.left < $padding.left) {
143
+ rect.left = alignValue(xValue, 'start', xOffset, tooltipWidth);
144
+ }
145
+ rect.right = rect.left + tooltipWidth;
146
+
147
+ if ((yAlign === 'start' || yAlign === 'center') && rect.bottom > $containerHeight) {
148
+ rect.top = alignValue(yValue, 'end', yOffset, tooltipHeight);
149
+ }
150
+ if ((yAlign === 'end' || yAlign === 'center') && rect.top < $padding.top) {
151
+ rect.top = alignValue(yValue, 'start', yOffset, tooltipHeight);
152
+ }
153
+ rect.bottom = rect.top + tooltipHeight;
94
154
  }
155
+
95
156
  $yPos = rect.top;
96
157
  $xPos = rect.left;
97
- }
158
+ }
98
159
  </script>
99
160
 
100
161
  {#if $tooltip.data}
@@ -6,7 +6,7 @@ declare const __propDef: {
6
6
  y?: "pointer" | "data" | number | undefined;
7
7
  xOffset?: number | undefined;
8
8
  yOffset?: number | undefined;
9
- anchor?: ("left" | "right" | "center" | "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
9
+ anchor?: ("center" | "left" | "right" | "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
10
10
  contained?: ("container" | false) | undefined;
11
11
  variant?: ("default" | "invert" | "none") | undefined;
12
12
  motion?: boolean | undefined;