From bcd19f96c471de0031a15e886a3736a72bba0851 Mon Sep 17 00:00:00 2001 From: Sean Lynch Date: Mon, 2 Jun 2025 21:23:26 -0400 Subject: [PATCH] feat(Spline): Add `value` to `startContent` and `endContent` snippets to easily access the `x` and `y` data values --- .changeset/cruel-rats-taste.md | 5 +++ .../src/lib/components/Spline.svelte | 24 +++++++++--- .../docs/components/Spline/+page.svelte | 38 +++++++++++++++++++ 3 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 .changeset/cruel-rats-taste.md diff --git a/.changeset/cruel-rats-taste.md b/.changeset/cruel-rats-taste.md new file mode 100644 index 000000000..076131b31 --- /dev/null +++ b/.changeset/cruel-rats-taste.md @@ -0,0 +1,5 @@ +--- +'layerchart': patch +--- + +feat(Spline): Add `value` to `startContent` and `endContent` snippets to easily access the `x` and `y` data values diff --git a/packages/layerchart/src/lib/components/Spline.svelte b/packages/layerchart/src/lib/components/Spline.svelte index 53862a303..9e36d155c 100644 --- a/packages/layerchart/src/lib/components/Spline.svelte +++ b/packages/layerchart/src/lib/components/Spline.svelte @@ -87,16 +87,16 @@ /** * Add additional content at the start of the line. * - * Receives `{ point: DOMPoint }` as a snippet prop. + * Receives `{ point: DOMPoint; value: { x: number; y: number } }` as a snippet prop. */ - startContent?: Snippet<[{ point: DOMPoint }]>; + startContent?: Snippet<[{ point: DOMPoint; value: { x: number; y: number } }]>; /** * Add additional content at the end of the line. * - * Receives `{ point: DOMPoint }` as a snippet prop. + * Receives `{ point: DOMPoint; value: { x: number; y: number } }` as a snippet prop. */ - endContent?: Snippet<[{ point: DOMPoint }]>; + endContent?: Snippet<[{ point: DOMPoint; value: { x: number; y: number } }]>; /** * A reference to the `` element. @@ -385,13 +385,25 @@ {#if startContent && startPoint} - {@render startContent({ point: startPoint })} + {@render startContent({ + point: startPoint, + value: { + x: ctx.xScale?.invert?.(startPoint.x), + y: ctx.yScale?.invert?.(startPoint.y), + }, + })} {/if} {#if endContent && endPoint.current} - {@render endContent({ point: endPoint.current })} + {@render endContent({ + point: endPoint.current, + value: { + x: ctx.xScale?.invert?.(endPoint.current.x), + y: ctx.yScale?.invert?.(endPoint.current.y), + }, + })} {/if} {/key} diff --git a/packages/layerchart/src/routes/docs/components/Spline/+page.svelte b/packages/layerchart/src/routes/docs/components/Spline/+page.svelte index 662ae27ce..81f5a6f2d 100644 --- a/packages/layerchart/src/routes/docs/components/Spline/+page.svelte +++ b/packages/layerchart/src/routes/docs/components/Spline/+page.svelte @@ -8,6 +8,7 @@ import Blockquote from '$lib/docs/Blockquote.svelte'; import CurveMenuField from '$lib/docs/CurveMenuField.svelte'; import PathDataMenuField from '$lib/docs/PathDataMenuField.svelte'; + import { format } from '@layerstack/utils'; let pointCount = $state(100); let showPoints = $state(false); @@ -284,6 +285,43 @@ +

end slot with draw with value

+ + +
+ + + + + + +
+ + +
+ + + + + {#if show} + + {#snippet endContent({ value })} + + + {/snippet} + + {/if} + + +
+
+
+

Canvas