layerchart 0.54.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 (99) 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 +205 -155
  5. package/dist/components/Bar.svelte +72 -45
  6. package/dist/components/Bars.svelte +45 -34
  7. package/dist/components/Blur.svelte +5 -3
  8. package/dist/components/Bounds.svelte +37 -21
  9. package/dist/components/Brush.svelte +181 -110
  10. package/dist/components/Calendar.svelte +51 -38
  11. package/dist/components/Chart.svelte +295 -74
  12. package/dist/components/Chart.svelte.d.ts +17 -17
  13. package/dist/components/ChartClipPath.svelte +8 -5
  14. package/dist/components/ChartContext.svelte +243 -93
  15. package/dist/components/ChartContext.svelte.d.ts +15 -23
  16. package/dist/components/Circle.svelte +25 -16
  17. package/dist/components/CircleClipPath.svelte +16 -10
  18. package/dist/components/ClipPath.svelte +11 -7
  19. package/dist/components/ColorRamp.svelte +12 -10
  20. package/dist/components/ForceSimulation.svelte +185 -116
  21. package/dist/components/Frame.svelte +10 -6
  22. package/dist/components/GeoCircle.svelte +15 -9
  23. package/dist/components/GeoContext.svelte +109 -62
  24. package/dist/components/GeoEdgeFade.svelte +20 -14
  25. package/dist/components/GeoPath.svelte +107 -69
  26. package/dist/components/GeoPoint.svelte +32 -18
  27. package/dist/components/GeoSpline.svelte +30 -22
  28. package/dist/components/GeoTile.svelte +40 -30
  29. package/dist/components/GeoVisible.svelte +10 -7
  30. package/dist/components/Graticule.svelte +14 -8
  31. package/dist/components/Grid.svelte +75 -48
  32. package/dist/components/Group.svelte +43 -31
  33. package/dist/components/Highlight.svelte +284 -243
  34. package/dist/components/HitCanvas.svelte +75 -42
  35. package/dist/components/Hull.svelte +40 -20
  36. package/dist/components/Labels.svelte +81 -70
  37. package/dist/components/Legend.svelte +105 -74
  38. package/dist/components/Legend.svelte.d.ts +1 -1
  39. package/dist/components/Line.svelte +29 -19
  40. package/dist/components/LinearGradient.svelte +21 -15
  41. package/dist/components/Link.svelte +44 -22
  42. package/dist/components/MonthPath.svelte +23 -16
  43. package/dist/components/MotionPath.svelte +34 -25
  44. package/dist/components/Pack.svelte +21 -14
  45. package/dist/components/Partition.svelte +35 -20
  46. package/dist/components/Pattern.svelte +8 -6
  47. package/dist/components/Pie.svelte +76 -57
  48. package/dist/components/Point.svelte +11 -7
  49. package/dist/components/Points.svelte +178 -143
  50. package/dist/components/RadialGradient.svelte +25 -18
  51. package/dist/components/Rect.svelte +33 -19
  52. package/dist/components/RectClipPath.svelte +16 -11
  53. package/dist/components/Rule.svelte +50 -42
  54. package/dist/components/Sankey.svelte +55 -30
  55. package/dist/components/Spline.svelte +118 -96
  56. package/dist/components/Text.svelte +137 -104
  57. package/dist/components/Threshold.svelte +18 -7
  58. package/dist/components/TileImage.svelte +56 -50
  59. package/dist/components/TransformContext.svelte +235 -135
  60. package/dist/components/TransformControls.svelte +57 -29
  61. package/dist/components/TransformControls.svelte.d.ts +1 -1
  62. package/dist/components/Tree.svelte +33 -23
  63. package/dist/components/Treemap.svelte +69 -41
  64. package/dist/components/Voronoi.svelte +55 -28
  65. package/dist/components/charts/AreaChart.svelte +128 -77
  66. package/dist/components/charts/AreaChart.svelte.d.ts +1 -1
  67. package/dist/components/charts/BarChart.svelte +169 -104
  68. package/dist/components/charts/BarChart.svelte.d.ts +1 -1
  69. package/dist/components/charts/LineChart.svelte +87 -43
  70. package/dist/components/charts/LineChart.svelte.d.ts +1 -1
  71. package/dist/components/charts/PieChart.svelte +102 -52
  72. package/dist/components/charts/PieChart.svelte.d.ts +1 -1
  73. package/dist/components/charts/ScatterChart.svelte +73 -38
  74. package/dist/components/charts/ScatterChart.svelte.d.ts +1 -1
  75. package/dist/components/layout/Canvas.svelte +63 -43
  76. package/dist/components/layout/Html.svelte +28 -18
  77. package/dist/components/layout/Svg.svelte +47 -32
  78. package/dist/components/tooltip/Tooltip.svelte +137 -91
  79. package/dist/components/tooltip/Tooltip.svelte.d.ts +1 -1
  80. package/dist/components/tooltip/TooltipContext.svelte +315 -249
  81. package/dist/components/tooltip/TooltipHeader.svelte +9 -3
  82. package/dist/components/tooltip/TooltipItem.svelte +17 -9
  83. package/dist/components/tooltip/TooltipList.svelte +2 -1
  84. package/dist/components/tooltip/TooltipSeparator.svelte +3 -2
  85. package/dist/docs/Blockquote.svelte +4 -3
  86. package/dist/docs/Code.svelte +15 -8
  87. package/dist/docs/CurveMenuField.svelte +17 -12
  88. package/dist/docs/GeoDebug.svelte +13 -9
  89. package/dist/docs/Header1.svelte +2 -1
  90. package/dist/docs/Json.svelte +6 -4
  91. package/dist/docs/Layout.svelte +6 -6
  92. package/dist/docs/PathDataMenuField.svelte +52 -44
  93. package/dist/docs/Preview.svelte +39 -33
  94. package/dist/docs/TilesetField.svelte +80 -62
  95. package/dist/docs/TransformDebug.svelte +8 -5
  96. package/dist/docs/ViewSourceButton.svelte +13 -9
  97. package/dist/stores/motionStore.d.ts +1 -1
  98. package/dist/utils/scales.d.ts +3 -3
  99. package/package.json +29 -30
@@ -1,171 +1,206 @@
1
- <script context="module">export {};
1
+ <script lang="ts" context="module">
2
+ export type Point = { x: number; y: number; r: number; xValue: any; yValue: any; data: any };
2
3
  </script>
3
4
 
4
- <script>import { getContext } from 'svelte';
5
- import { extent } from 'd3-array';
6
- import { pointRadial } from 'd3-shape';
7
- import { notNull } from '@layerstack/utils/typeGuards';
8
- import { chartContext } from './ChartContext.svelte';
9
- import Circle from './Circle.svelte';
10
- import Link from './Link.svelte';
11
- import { isScaleBand } from '../utils/scales.js';
12
- const context = chartContext();
13
- const { data: contextData, x, xScale, xGet, y, yScale, yGet, cGet, rGet, padding, containerWidth, containerHeight, config, radial, } = context;
14
- /** Override data instead of using context */
15
- export let data = undefined;
16
- export let r = 5;
17
- export let offsetX = undefined;
18
- export let offsetY = undefined;
19
- /** Enable showing links between related points (array x/y accessors) */
20
- export let links = false;
21
- export let fill = undefined;
22
- export let stroke = undefined;
23
- export let strokeWidth = undefined;
24
- /** Render to canvas */
25
- export let render = undefined;
26
- let className = undefined;
27
- export { className as class };
28
- const canvas = getContext('canvas');
29
- const DEFAULT_FILL = 'rgb(0, 0, 0)';
30
- function getOffset(value, offset, scale) {
5
+ <script lang="ts">
6
+ import { getContext, type ComponentProps } from 'svelte';
7
+ import type { Readable } from 'svelte/store';
8
+ import { extent } from 'd3-array';
9
+ import { pointRadial } from 'd3-shape';
10
+ import { notNull } from '@layerstack/utils/typeGuards';
11
+
12
+ import { chartContext } from './ChartContext.svelte';
13
+ import Circle from './Circle.svelte';
14
+ import Link from './Link.svelte';
15
+ import { isScaleBand, type AnyScale } from '../utils/scales.js';
16
+
17
+ const context = chartContext() as any;
18
+ const {
19
+ data: contextData,
20
+ x,
21
+ xScale,
22
+ xGet,
23
+ y,
24
+ yScale,
25
+ yGet,
26
+ cGet,
27
+ rGet,
28
+ padding,
29
+ containerWidth,
30
+ containerHeight,
31
+ config,
32
+ radial,
33
+ } = context;
34
+
35
+ type Offset = number | ((value: number, context: any) => number) | undefined;
36
+
37
+ /** Override data instead of using context */
38
+ export let data: any = undefined;
39
+
40
+ export let r = 5;
41
+ export let offsetX: Offset = undefined;
42
+ export let offsetY: Offset = undefined;
43
+
44
+ /** Enable showing links between related points (array x/y accessors) */
45
+ export let links: boolean | Partial<ComponentProps<Link>> = false;
46
+
47
+ export let fill: string | undefined = undefined;
48
+ export let stroke: string | undefined = undefined;
49
+ export let strokeWidth: number | string | undefined = undefined;
50
+
51
+ /** Render to canvas */
52
+ export let render: ((ctx: CanvasRenderingContext2D, points: Point[]) => any) | undefined =
53
+ undefined;
54
+
55
+ let className: string | undefined = undefined;
56
+ export { className as class };
57
+
58
+ const canvas = getContext<{ ctx: Readable<CanvasRenderingContext2D> }>('canvas');
59
+ const DEFAULT_FILL = 'rgb(0, 0, 0)';
60
+
61
+ function getOffset(value: any, offset: Offset, scale: AnyScale) {
31
62
  if (typeof offset === 'function') {
32
- return offset(value, context);
33
- }
34
- else if (offset != null) {
35
- return offset;
36
- }
37
- else if (isScaleBand(scale) && !$radial) {
38
- return scale.bandwidth() / 2;
63
+ return offset(value, context);
64
+ } else if (offset != null) {
65
+ return offset;
66
+ } else if (isScaleBand(scale) && !$radial) {
67
+ return scale.bandwidth() / 2;
68
+ } else {
69
+ return 0;
39
70
  }
40
- else {
41
- return 0;
42
- }
43
- }
44
- $: pointsData = data ?? $contextData;
45
- $: points = pointsData
46
- .flatMap((d) => {
47
- const xValue = $x(d);
48
- const yValue = $y(d);
49
- if (Array.isArray(xValue)) {
50
- /*
51
- x={["prop1" ,"prop2"]}
52
- y="prop3"
53
- */
54
- return xValue.filter(notNull).map((xValue) => {
55
- return {
56
- x: $xScale(xValue) + getOffset($xScale(xValue), offsetX, $xScale),
57
- y: $yScale(yValue) + getOffset($yScale(yValue), offsetY, $yScale),
58
- r: $config.r ? $rGet(d) : r,
59
- xValue,
60
- yValue,
61
- data: d,
62
- };
63
- });
64
- }
65
- else if (Array.isArray(yValue)) {
71
+ }
72
+
73
+ $: pointsData = data ?? $contextData;
74
+
75
+ $: points = pointsData
76
+ .flatMap((d: any) => {
77
+ const xValue = $x(d);
78
+ const yValue = $y(d);
79
+
80
+ if (Array.isArray(xValue)) {
66
81
  /*
67
- x="prop1"
68
- y={["prop2" ,"prop3"]}
69
- */
70
- return yValue.filter(notNull).map((yValue) => {
71
- return {
72
- x: $xScale(xValue) + getOffset($xScale(xValue), offsetX, $xScale),
73
- y: $yScale(yValue) + getOffset($yScale(yValue), offsetY, $yScale),
74
- r: $config.r ? $rGet(d) : r,
75
- xValue,
76
- yValue,
77
- data: d,
78
- };
82
+ x={["prop1" ,"prop2"]}
83
+ y="prop3"
84
+ */
85
+ return xValue.filter(notNull).map((xValue: number) => {
86
+ return {
87
+ x: $xScale(xValue) + getOffset($xScale(xValue), offsetX, $xScale),
88
+ y: $yScale(yValue) + getOffset($yScale(yValue), offsetY, $yScale),
89
+ r: $config.r ? $rGet(d) : r,
90
+ xValue,
91
+ yValue,
92
+ data: d,
93
+ };
79
94
  });
80
- }
81
- else if (xValue != null && yValue != null) {
95
+ } else if (Array.isArray(yValue)) {
82
96
  /*
83
- x="prop1"
84
- y="prop2"
85
- */
86
- return {
97
+ x="prop1"
98
+ y={["prop2" ,"prop3"]}
99
+ */
100
+ return yValue.filter(notNull).map((yValue: number) => {
101
+ return {
87
102
  x: $xScale(xValue) + getOffset($xScale(xValue), offsetX, $xScale),
88
103
  y: $yScale(yValue) + getOffset($yScale(yValue), offsetY, $yScale),
89
104
  r: $config.r ? $rGet(d) : r,
90
105
  xValue,
91
106
  yValue,
92
107
  data: d,
108
+ };
109
+ });
110
+ } else if (xValue != null && yValue != null) {
111
+ /*
112
+ x="prop1"
113
+ y="prop2"
114
+ */
115
+ return {
116
+ x: $xScale(xValue) + getOffset($xScale(xValue), offsetX, $xScale),
117
+ y: $yScale(yValue) + getOffset($yScale(yValue), offsetY, $yScale),
118
+ r: $config.r ? $rGet(d) : r,
119
+ xValue,
120
+ yValue,
121
+ data: d,
93
122
  };
94
- }
95
- })
96
- .filter((p) => p);
97
- $: _links = pointsData.flatMap((d) => {
123
+ }
124
+ })
125
+ .filter((p: Point) => p) as Point[];
126
+
127
+ $: _links = pointsData.flatMap((d: any) => {
98
128
  const xValue = $x(d);
99
129
  const yValue = $y(d);
130
+
100
131
  if (Array.isArray(xValue)) {
101
- /*
102
- x={["prop1" ,"prop2"]}
103
- y="prop3"
104
- */
105
- const [xMin, xMax] = extent($xGet(d));
106
- const y = $yGet(d) + getOffset($yGet(d), offsetY, $yScale);
107
- return {
108
- source: {
109
- x: xMin + getOffset(xMin, offsetX, $xScale) + ($config.r ? $rGet(d) : r),
110
- y,
111
- },
112
- target: {
113
- x: xMax + getOffset(xMax, offsetX, $xScale) - ($config.r ? $rGet(d) : r),
114
- y: y,
115
- },
116
- };
132
+ /*
133
+ x={["prop1" ,"prop2"]}
134
+ y="prop3"
135
+ */
136
+ const [xMin, xMax] = extent($xGet(d)) as unknown as [number, number];
137
+ const y = $yGet(d) + getOffset($yGet(d), offsetY, $yScale);
138
+ return {
139
+ source: {
140
+ x: xMin + getOffset(xMin, offsetX, $xScale) + ($config.r ? $rGet(d) : r),
141
+ y,
142
+ },
143
+ target: {
144
+ x: xMax + getOffset(xMax, offsetX, $xScale) - ($config.r ? $rGet(d) : r),
145
+ y: y,
146
+ },
147
+ };
148
+ } else if (Array.isArray(yValue)) {
149
+ /*
150
+ x="prop1"
151
+ y={["prop2" ,"prop3"]}
152
+ */
153
+ const x = $xGet(d) + getOffset($xGet(d), offsetX, $xScale);
154
+ const [yMin, yMax] = extent($yGet(d)) as unknown as [number, number];
155
+ return {
156
+ source: {
157
+ x: x,
158
+ y: yMin + getOffset(yMin, offsetY, $yScale),
159
+ },
160
+ target: {
161
+ x: x,
162
+ y: yMax + getOffset(yMax, offsetY, $yScale),
163
+ },
164
+ };
117
165
  }
118
- else if (Array.isArray(yValue)) {
119
- /*
120
- x="prop1"
121
- y={["prop2" ,"prop3"]}
122
- */
123
- const x = $xGet(d) + getOffset($xGet(d), offsetX, $xScale);
124
- const [yMin, yMax] = extent($yGet(d));
125
- return {
126
- source: {
127
- x: x,
128
- y: yMin + getOffset(yMin, offsetY, $yScale),
129
- },
130
- target: {
131
- x: x,
132
- y: yMax + getOffset(yMax, offsetY, $yScale),
133
- },
134
- };
135
- }
136
- });
137
- $: renderContext = canvas ? 'canvas' : 'svg';
138
- $: ctx = canvas?.ctx;
139
- $: if (renderContext === 'canvas' && $ctx) {
140
- let computedStyles = {};
166
+ });
167
+
168
+ $: renderContext = canvas ? 'canvas' : 'svg';
169
+ $: ctx = canvas?.ctx;
170
+ $: if (renderContext === 'canvas' && $ctx) {
171
+ let computedStyles: Partial<CSSStyleDeclaration> = {};
172
+
141
173
  // Transfer classes defined on <GeoPath> to <canvas> to enable window.getComputedStyle() retrieval (Tailwind classes, etc)
142
174
  if (className) {
143
- $ctx.canvas.classList.add(...className.split(' '));
144
- computedStyles = window.getComputedStyle($ctx.canvas);
175
+ $ctx.canvas.classList.add(...className.split(' '));
176
+ computedStyles = window.getComputedStyle($ctx.canvas);
145
177
  }
178
+
146
179
  // Clear with negative offset due to Canvas `context.translate(...)`
147
180
  $ctx.clearRect(-$padding.left, -$padding.top, $containerWidth, $containerHeight);
181
+
148
182
  if (render) {
149
- render($ctx, points);
150
- }
151
- else {
152
- points.forEach((point) => {
153
- $ctx.beginPath();
154
- $ctx.arc(point.x, point.y, point.r, 0, 2 * Math.PI, false);
155
- $ctx.lineWidth = Number(strokeWidth ?? 0);
156
- $ctx.strokeStyle =
157
- (stroke ?? computedStyles.stroke === 'none')
158
- ? 'transparent'
159
- : (computedStyles.stroke ?? '');
160
- $ctx.stroke();
161
- $ctx.fillStyle =
162
- fill ??
163
- (computedStyles.fill !== DEFAULT_FILL ? computedStyles.fill : undefined) ??
164
- 'transparent';
165
- $ctx.fill();
166
- });
183
+ render($ctx, points);
184
+ } else {
185
+ points.forEach((point) => {
186
+ $ctx.beginPath();
187
+ $ctx.arc(point.x, point.y, point.r, 0, 2 * Math.PI, false);
188
+
189
+ $ctx.lineWidth = Number(strokeWidth ?? 0);
190
+ $ctx.strokeStyle =
191
+ (stroke ?? computedStyles.stroke === 'none')
192
+ ? 'transparent'
193
+ : (computedStyles.stroke ?? '');
194
+ $ctx.stroke();
195
+
196
+ $ctx.fillStyle =
197
+ fill ??
198
+ (computedStyles.fill !== DEFAULT_FILL ? computedStyles.fill : undefined) ??
199
+ 'transparent';
200
+ $ctx.fill();
201
+ });
167
202
  }
168
- }
203
+ }
169
204
  </script>
170
205
 
171
206
  <slot {points}>
@@ -1,23 +1,30 @@
1
- <script>import { uniqueId } from '@layerstack/utils';
2
- /** Unique id for linearGradient */
3
- export let id = uniqueId('radialGradient-');
4
- /** Array array of strings (colors), will equally distributed from 0-100%. If array of tuples, will use first value as the offset, and second as color */
5
- export let stops = [
1
+ <script lang="ts">
2
+ import { uniqueId } from '@layerstack/utils';
3
+
4
+ /** Unique id for linearGradient */
5
+ export let id: string = uniqueId('radialGradient-');
6
+
7
+ /** Array array of strings (colors), will equally distributed from 0-100%. If array of tuples, will use first value as the offset, and second as color */
8
+ export let stops: string[] | [string | number, string][] = [
6
9
  'var(--tw-gradient-from)',
7
10
  'var(--tw-gradient-to)',
8
- ];
9
- export let cx = '50%';
10
- export let cy = '50%';
11
- export let fx = cx;
12
- export let fy = cy;
13
- export let r = '50%';
14
- // TODO: Svelte / Typescript does not know `<radialRadiant fr="...">`
15
- // export let fr = '0%';
16
- /** Indicates how the gradient behaves if it starts or ends inside the bounds of the shape containing the gradient */
17
- export let spreadMethod = 'pad';
18
- export let transform = undefined;
19
- /** Define the coordinate system for attributes (i.e. gradientUnits) */
20
- export let units = 'objectBoundingBox';
11
+ ];
12
+
13
+ export let cx = '50%';
14
+ export let cy = '50%';
15
+ export let fx = cx;
16
+ export let fy = cy;
17
+ export let r = '50%';
18
+ // TODO: Svelte / Typescript does not know `<radialRadiant fr="...">`
19
+ // export let fr = '0%';
20
+
21
+ /** Indicates how the gradient behaves if it starts or ends inside the bounds of the shape containing the gradient */
22
+ export let spreadMethod: 'pad' | 'reflect' | 'repeat' = 'pad';
23
+
24
+ export let transform: string | null | undefined = undefined;
25
+
26
+ /** Define the coordinate system for attributes (i.e. gradientUnits) */
27
+ export let units: 'objectBoundingBox' | 'userSpaceOnUse' = 'objectBoundingBox';
21
28
  </script>
22
29
 
23
30
  <defs>
@@ -1,26 +1,40 @@
1
- <script>import { tick } from 'svelte';
2
- import { cls } from '@layerstack/tailwind';
3
- import { motionStore, resolveOptions, } from '../stores/motionStore.js';
4
- export let x = 0;
5
- export let initialX = x;
6
- export let y = 0;
7
- export let initialY = y;
8
- export let width;
9
- export let initialWidth = width;
10
- export let height;
11
- export let initialHeight = height;
12
- export let spring = undefined;
13
- export let tweened = undefined;
14
- let tweened_x = motionStore(initialX, resolveOptions('x', { spring, tweened }));
15
- let tweened_y = motionStore(initialY, resolveOptions('y', { spring, tweened }));
16
- let tweened_width = motionStore(initialWidth, resolveOptions('width', { spring, tweened }));
17
- let tweened_height = motionStore(initialHeight, resolveOptions('height', { spring, tweened }));
18
- $: tick().then(() => {
1
+ <script lang="ts">
2
+ import { tick } from 'svelte';
3
+ import { cls } from '@layerstack/tailwind';
4
+
5
+ import {
6
+ motionStore,
7
+ resolveOptions,
8
+ type SpringOptions,
9
+ type TweenedOptions,
10
+ } from '../stores/motionStore.js';
11
+
12
+ export let x = 0;
13
+ export let initialX = x;
14
+
15
+ export let y = 0;
16
+ export let initialY = y;
17
+
18
+ export let width: number;
19
+ export let initialWidth = width;
20
+
21
+ export let height: number;
22
+ export let initialHeight = height;
23
+
24
+ export let spring: boolean | SpringOptions | { [prop: string]: SpringOptions } = undefined;
25
+ export let tweened: boolean | TweenedOptions | { [prop: string]: TweenedOptions } = undefined;
26
+
27
+ let tweened_x = motionStore(initialX, resolveOptions('x', { spring, tweened }));
28
+ let tweened_y = motionStore(initialY, resolveOptions('y', { spring, tweened }));
29
+ let tweened_width = motionStore(initialWidth, resolveOptions('width', { spring, tweened }));
30
+ let tweened_height = motionStore(initialHeight, resolveOptions('height', { spring, tweened }));
31
+
32
+ $: tick().then(() => {
19
33
  tweened_x.set(x);
20
34
  tweened_y.set(y);
21
35
  tweened_width.set(width);
22
36
  tweened_height.set(height);
23
- });
37
+ });
24
38
  </script>
25
39
 
26
40
  <!-- svelte-ignore a11y-mouse-events-have-key-events -->
@@ -1,14 +1,19 @@
1
- <script>import { uniqueId } from '@layerstack/utils';
2
- import ClipPath from './ClipPath.svelte';
3
- import Rect from './Rect.svelte';
4
- /** Unique id for clipPath */
5
- export let id = uniqueId('clipPath-');
6
- export let x = 0;
7
- export let y = 0;
8
- export let width;
9
- export let height;
10
- export let spring = undefined;
11
- export let tweened = undefined;
1
+ <script lang="ts">
2
+ import type { ComponentProps } from 'svelte';
3
+ import { uniqueId } from '@layerstack/utils';
4
+
5
+ import ClipPath from './ClipPath.svelte';
6
+ import Rect from './Rect.svelte';
7
+
8
+ /** Unique id for clipPath */
9
+ export let id: string = uniqueId('clipPath-');
10
+
11
+ export let x: number = 0;
12
+ export let y: number = 0;
13
+ export let width: number;
14
+ export let height: number;
15
+ export let spring: ComponentProps<Rect>['spring'] = undefined;
16
+ export let tweened: ComponentProps<Rect>['tweened'] = undefined;
12
17
  </script>
13
18
 
14
19
  <ClipPath {id} let:url>
@@ -1,47 +1,55 @@
1
- <script>import { extent } from 'd3-array';
2
- import { pointRadial } from 'd3-shape';
3
- import { cls } from '@layerstack/tailwind';
4
- import { chartContext } from './ChartContext.svelte';
5
- import Circle from './Circle.svelte';
6
- import Line from './Line.svelte';
7
- const { xScale, yScale, xRange, yRange, radial } = chartContext();
8
- $: [xRangeMin, xRangeMax] = extent($xRange);
9
- $: [yRangeMin, yRangeMax] = extent($yRange);
10
- /**
11
- * Create a vertical `x` line
12
- * - If true or 'left', will draw at chart left (xRange[0])
13
- * - If 'right', will draw at chart right (xRange[1])
14
- * - Use `0` for baseline (yScale(0))
15
- * - Use number | Date value for annotation (yScale(value))
16
- */
17
- export let x = false;
18
- /** Pixel offset to apply to `x` coordinate */
19
- export let xOffset = 0;
20
- /**
21
- * Create a horizontal `y` line
22
- * - If true or 'bottom', will draw at chart bottom (yRange[0])
23
- * - If 'top', will draw at chart top (yRange[1])
24
- * - Use `0` for baseline (xScale(0))
25
- * - Use number | Date value for annotation (xScale(value))
26
- */
27
- export let y = false;
28
- /** Pixel offset to apply to `y` coordinate */
29
- export let yOffset = 0;
30
- function showRule(value, axis) {
1
+ <script lang="ts">
2
+ import { extent } from 'd3-array';
3
+ import { pointRadial } from 'd3-shape';
4
+ import { cls } from '@layerstack/tailwind';
5
+
6
+ import { chartContext } from './ChartContext.svelte';
7
+ import Circle from './Circle.svelte';
8
+ import Line from './Line.svelte';
9
+
10
+ const { xScale, yScale, xRange, yRange, radial } = chartContext();
11
+
12
+ $: [xRangeMin, xRangeMax] = extent<number | Date>($xRange);
13
+ $: [yRangeMin, yRangeMax] = extent<number | Date>($yRange);
14
+
15
+ /**
16
+ * Create a vertical `x` line
17
+ * - If true or 'left', will draw at chart left (xRange[0])
18
+ * - If 'right', will draw at chart right (xRange[1])
19
+ * - Use `0` for baseline (yScale(0))
20
+ * - Use number | Date value for annotation (yScale(value))
21
+ */
22
+ export let x: number | Date | boolean | 'left' | 'right' = false;
23
+
24
+ /** Pixel offset to apply to `x` coordinate */
25
+ export let xOffset = 0;
26
+
27
+ /**
28
+ * Create a horizontal `y` line
29
+ * - If true or 'bottom', will draw at chart bottom (yRange[0])
30
+ * - If 'top', will draw at chart top (yRange[1])
31
+ * - Use `0` for baseline (xScale(0))
32
+ * - Use number | Date value for annotation (xScale(value))
33
+ */
34
+ export let y: number | Date | boolean | 'top' | 'bottom' = false;
35
+
36
+ /** Pixel offset to apply to `y` coordinate */
37
+ export let yOffset = 0;
38
+
39
+ $: showRule = (value: typeof x | typeof y, axis: 'x' | 'y') => {
31
40
  switch (typeof value) {
32
- case 'boolean':
33
- return value;
34
- case 'string':
35
- return true;
36
- default:
37
- if (axis === 'x') {
38
- return $xScale(value) >= xRangeMin && $xScale(value) <= xRangeMax;
39
- }
40
- else {
41
- return $yScale(value) >= yRangeMin && $yScale(value) <= yRangeMax;
42
- }
41
+ case 'boolean':
42
+ return value;
43
+ case 'string':
44
+ return true;
45
+ default:
46
+ if (axis === 'x') {
47
+ return $xScale(value) >= xRangeMin! && $xScale(value) <= xRangeMax!;
48
+ } else {
49
+ return $yScale(value) >= yRangeMin! && $yScale(value) <= yRangeMax!;
50
+ }
43
51
  }
44
- }
52
+ };
45
53
  </script>
46
54
 
47
55
  <g class="rule">