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,30 +1,79 @@
1
- <script generics="TData">import {} from 'svelte';
2
- import { scaleLinear, scaleOrdinal, scaleTime } from 'd3-scale';
3
- import { format } from '@layerstack/utils';
4
- import Axis from '../Axis.svelte';
5
- import Chart from '../Chart.svelte';
6
- import Highlight from '../Highlight.svelte';
7
- import Labels from '../Labels.svelte';
8
- import Legend from '../Legend.svelte';
9
- import Points from '../Points.svelte';
10
- import Rule from '../Rule.svelte';
11
- import Svg from '../layout/Svg.svelte';
12
- import * as Tooltip from '../tooltip/index.js';
13
- import { accessor, chartDataArray } from '../../utils/common.js';
14
- export let data = [];
15
- export let x = undefined;
16
- export let y = undefined;
17
- export let series = [{ key: 'default', data: chartDataArray(data), color: 'hsl(var(--color-primary))' }];
18
- export let axis = true;
19
- export let labels = false;
20
- export let legend = false;
21
- export let rule = true;
22
- export let props = {};
23
- // Default xScale based on first data's `x` value
24
- $: xScale = accessor(x)(chartDataArray(data)[0]) instanceof Date ? scaleTime() : scaleLinear();
25
- let chartData = series
1
+ <script lang="ts" generics="TData">
2
+ import { type ComponentProps } from 'svelte';
3
+ import { scaleLinear, scaleOrdinal, scaleTime } from 'd3-scale';
4
+ import { format } from '@layerstack/utils';
5
+
6
+ import Axis from '../Axis.svelte';
7
+ import Chart from '../Chart.svelte';
8
+ import Grid from '../Grid.svelte';
9
+ import Highlight from '../Highlight.svelte';
10
+ import Labels from '../Labels.svelte';
11
+ import Legend from '../Legend.svelte';
12
+ import Points from '../Points.svelte';
13
+ import Rule from '../Rule.svelte';
14
+ import Svg from '../layout/Svg.svelte';
15
+ import * as Tooltip from '../tooltip/index.js';
16
+
17
+ import { accessor, chartDataArray, type Accessor } from '../../utils/common.js';
18
+
19
+ interface $$Props extends ComponentProps<Chart<TData>> {
20
+ axis?: typeof axis;
21
+ grid?: typeof grid;
22
+ labels?: typeof labels;
23
+ legend?: typeof legend;
24
+ props?: typeof props;
25
+ series?: typeof series;
26
+ }
27
+
28
+ export let data: $$Props['data'] = [];
29
+ export let x: Accessor<TData> = undefined;
30
+ export let y: Accessor<TData> = undefined;
31
+
32
+ export let series: {
33
+ key: string;
34
+ label?: string;
35
+ data: TData[];
36
+ color?: string;
37
+ props?: Partial<ComponentProps<Points>>;
38
+ }[] = [{ key: 'default', data: chartDataArray(data), color: 'hsl(var(--color-primary))' }];
39
+ $: isDefaultSeries = series.length === 1 && series[0].key === 'default';
40
+
41
+ export let axis: ComponentProps<Axis> | 'x' | 'y' | boolean = true;
42
+ export let grid: ComponentProps<Grid> | boolean = true;
43
+ export let labels: ComponentProps<Labels> | boolean = false;
44
+ export let legend: ComponentProps<Legend> | boolean = false;
45
+ export let rule: ComponentProps<Rule> | boolean = true;
46
+
47
+ export let props: {
48
+ xAxis?: Partial<ComponentProps<Axis>>;
49
+ yAxis?: Partial<ComponentProps<Axis>>;
50
+ grid?: Partial<ComponentProps<Grid>>;
51
+ points?: Partial<ComponentProps<Points>>;
52
+ highlight?: Partial<ComponentProps<Highlight>>;
53
+ labels?: Partial<ComponentProps<Labels>>;
54
+ legend?: Partial<ComponentProps<Legend>>;
55
+ rule?: Partial<ComponentProps<Rule>>;
56
+ } = {};
57
+
58
+ // Default xScale based on first data's `x` value
59
+ $: xScale = accessor(x)(chartDataArray(data)[0]) instanceof Date ? scaleTime() : scaleLinear();
60
+
61
+ let chartData = series
26
62
  .flatMap((s) => s.data?.map((d) => ({ seriesKey: s.key, ...d })))
27
- .filter((d) => d);
63
+ .filter((d) => d) as Array<TData>;
64
+
65
+ function getPointsProps(s: (typeof series)[number], i: number) {
66
+ const pointsProps: ComponentProps<Points> = {
67
+ data: s.data,
68
+ stroke: s.color,
69
+ fill: s.color,
70
+ 'fill-opacity': 0.3,
71
+ ...props.points,
72
+ ...s.props,
73
+ };
74
+
75
+ return pointsProps;
76
+ }
28
77
  </script>
29
78
 
30
79
  <Chart
@@ -45,6 +94,8 @@ let chartData = series
45
94
  let:xScale
46
95
  let:y
47
96
  let:yScale
97
+ let:c
98
+ let:cScale
48
99
  let:r
49
100
  let:width
50
101
  let:height
@@ -52,19 +103,24 @@ let chartData = series
52
103
  let:tooltip
53
104
  let:config
54
105
  >
55
- {@const slotProps = { x, xScale, y, yScale, width, height, padding, tooltip, series }}
106
+ {@const slotProps = { x, xScale, y, yScale, c, cScale, width, height, padding, tooltip, series }}
56
107
  {@const activeSeries = tooltip.data
57
108
  ? (series.find((s) => s.key === tooltip.data.seriesKey) ?? series[0])
58
109
  : null}
59
110
 
60
111
  <slot {...slotProps}>
61
112
  <Svg>
113
+ <slot name="grid" {...slotProps}>
114
+ {#if grid}
115
+ <Grid x y {...typeof grid === 'object' ? grid : null} {...props.grid} />
116
+ {/if}
117
+ </slot>
118
+
62
119
  <slot name="axis" {...slotProps}>
63
120
  {#if axis}
64
121
  {#if axis !== 'x'}
65
122
  <Axis
66
123
  placement="left"
67
- grid
68
124
  format={(value) => format(value, undefined, { variant: 'short' })}
69
125
  {...typeof axis === 'object' ? axis : null}
70
126
  {...props.yAxis}
@@ -74,7 +130,6 @@ let chartData = series
74
130
  {#if axis !== 'y'}
75
131
  <Axis
76
132
  placement="bottom"
77
- grid
78
133
  format={(value) => format(value, undefined, { variant: 'short' })}
79
134
  {...typeof axis === 'object' ? axis : null}
80
135
  {...props.xAxis}
@@ -90,15 +145,8 @@ let chartData = series
90
145
  <slot name="below-marks" {...slotProps} />
91
146
 
92
147
  <slot name="marks" {...slotProps}>
93
- {#each series as s}
94
- <Points
95
- data={s.data}
96
- stroke={s.color}
97
- fill={s.color}
98
- fill-opacity={0.3}
99
- {...props.points}
100
- {...s.props}
101
- />
148
+ {#each series as s, i}
149
+ <Points {...getPointsProps(s, i)} />
102
150
  {/each}
103
151
  </slot>
104
152
 
@@ -120,10 +168,12 @@ let chartData = series
120
168
  <slot name="legend" {...slotProps}>
121
169
  {#if legend}
122
170
  <Legend
123
- scale={scaleOrdinal(
124
- series.map((s) => s.label ?? s.key),
125
- series.map((s) => s.color)
126
- )}
171
+ scale={isDefaultSeries
172
+ ? undefined
173
+ : scaleOrdinal(
174
+ series.map((s) => s.label ?? s.key),
175
+ series.map((s) => s.color)
176
+ )}
127
177
  placement="bottom"
128
178
  variant="swatches"
129
179
  {...props.legend}
@@ -1,6 +1,7 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
2
  import { type ComponentProps } from 'svelte';
3
3
  import Axis from '../Axis.svelte';
4
+ import Grid from '../Grid.svelte';
4
5
  import Highlight from '../Highlight.svelte';
5
6
  import Labels from '../Labels.svelte';
6
7
  import Legend from '../Legend.svelte';
@@ -75,7 +76,7 @@ declare class __sveltets_Render<TData> {
75
76
  width: number;
76
77
  height: number;
77
78
  }) => number[] | string[]) | undefined;
78
- cRange?: string[];
79
+ cRange?: string[] | readonly string[];
79
80
  xReverse?: boolean;
80
81
  yReverse?: boolean;
81
82
  zReverse?: boolean;
@@ -130,6 +131,13 @@ declare class __sveltets_Render<TData> {
130
131
  onClick?: ({ data }: {
131
132
  data: any;
132
133
  }) => any;
134
+ tooltip?: import("svelte/store").Writable<{
135
+ y: number;
136
+ x: number;
137
+ data: any;
138
+ show: (e: PointerEvent, tooltipData?: any) => void;
139
+ hide: () => void;
140
+ }>;
133
141
  }> | undefined;
134
142
  transform?: Partial<{
135
143
  mode?: "canvas" | "manual" | "none";
@@ -178,6 +186,14 @@ declare class __sveltets_Render<TData> {
178
186
  setScale?: (value: number, options?: import("../../stores/motionStore").MotionOptions) => void;
179
187
  }> | undefined;
180
188
  transformContext?: import("..").TransformContext;
189
+ geoProjection?: import("svelte/store").Writable<import("d3-geo").GeoProjection> | undefined;
190
+ tooltipContext?: import("svelte/store").Writable<{
191
+ y: number;
192
+ x: number;
193
+ data: any;
194
+ show: (e: PointerEvent, tooltipData?: any) => void;
195
+ hide: () => void;
196
+ }> | undefined;
181
197
  } & {
182
198
  axis?: boolean | "x" | "y" | {
183
199
  [x: string]: any;
@@ -185,7 +201,7 @@ declare class __sveltets_Render<TData> {
185
201
  label?: string | undefined;
186
202
  labelPlacement?: ("start" | "middle" | "end") | undefined;
187
203
  labelProps?: Partial<ComponentProps<import("..").Text>> | undefined;
188
- rule?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
204
+ rule?: (boolean | Partial<ComponentProps<Rule>>) | undefined;
189
205
  grid?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
190
206
  ticks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
191
207
  tickLength?: number | undefined;
@@ -201,8 +217,26 @@ declare class __sveltets_Render<TData> {
201
217
  label?: string;
202
218
  } | undefined;
203
219
  };
220
+ grid?: boolean | {
221
+ [x: string]: any;
222
+ x?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
223
+ y?: (boolean | Pick<import("svelte/elements").SVGAttributes<SVGElement>, "class" | "style">) | undefined;
224
+ xTicks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
225
+ yTicks?: number | any[] | ((scale: import("../../utils/scales").AnyScale) => any) | null | undefined;
226
+ bandAlign?: ("center" | "between") | undefined;
227
+ radialY?: ("circle" | "linear") | undefined;
228
+ spring?: boolean | Parameters<typeof import("svelte/motion").spring>[1];
229
+ tweened?: boolean | Parameters<typeof import("svelte/motion").tweened>[1];
230
+ transitionIn?: (typeof import("svelte/transition").fade | (() => {})) | undefined;
231
+ transitionInParams?: import("svelte-ux").TransitionParams | undefined;
232
+ classes?: {
233
+ root?: string;
234
+ line?: string;
235
+ } | undefined;
236
+ };
204
237
  labels?: boolean | {
205
238
  [x: string]: any;
239
+ value?: Accessor;
206
240
  placement?: ("inside" | "outside" | "center") | undefined;
207
241
  offset?: number | undefined;
208
242
  format?: import("@layerstack/utils").FormatType | undefined;
@@ -218,7 +252,7 @@ declare class __sveltets_Render<TData> {
218
252
  tickValues?: any[] | undefined;
219
253
  tickFontSize?: number | undefined;
220
254
  tickLength?: number | undefined;
221
- placement?: ("left" | "right" | "center" | "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
255
+ placement?: ("center" | "left" | "right" | "bottom" | "top" | "top-left" | "top-right" | "bottom-left" | "bottom-right") | undefined;
222
256
  orientation?: ("horizontal" | "vertical") | undefined;
223
257
  variant?: ("ramp" | "swatches") | undefined;
224
258
  classes?: {
@@ -233,6 +267,7 @@ declare class __sveltets_Render<TData> {
233
267
  props?: {
234
268
  xAxis?: Partial<ComponentProps<Axis>>;
235
269
  yAxis?: Partial<ComponentProps<Axis>>;
270
+ grid?: Partial<ComponentProps<Grid>>;
236
271
  points?: Partial<ComponentProps<Points>>;
237
272
  highlight?: Partial<ComponentProps<Highlight>>;
238
273
  labels?: Partial<ComponentProps<Labels>>;
@@ -252,6 +287,7 @@ declare class __sveltets_Render<TData> {
252
287
  };
253
288
  slots(): {
254
289
  default: any;
290
+ grid: any;
255
291
  axis: any;
256
292
  'below-marks': any;
257
293
  marks: any;
@@ -27,6 +27,7 @@ export { default as GeoSpline } from './GeoSpline.svelte';
27
27
  export { default as GeoTile } from './GeoTile.svelte';
28
28
  export { default as GeoVisible } from './GeoVisible.svelte';
29
29
  export { default as Graticule } from './Graticule.svelte';
30
+ export { default as Grid } from './Grid.svelte';
30
31
  export { default as Group } from './Group.svelte';
31
32
  export { default as Highlight } from './Highlight.svelte';
32
33
  export { default as HitCanvas } from './HitCanvas.svelte';
@@ -28,6 +28,7 @@ export { default as GeoSpline } from './GeoSpline.svelte';
28
28
  export { default as GeoTile } from './GeoTile.svelte';
29
29
  export { default as GeoVisible } from './GeoVisible.svelte';
30
30
  export { default as Graticule } from './Graticule.svelte';
31
+ export { default as Grid } from './Grid.svelte';
31
32
  export { default as Group } from './Group.svelte';
32
33
  export { default as Highlight } from './Highlight.svelte';
33
34
  export { default as HitCanvas } from './HitCanvas.svelte';
@@ -1,53 +1,73 @@
1
- <script>import { onMount, setContext } from 'svelte';
2
- import { writable } from 'svelte/store';
3
- import { scaleCanvas } from 'layercake';
4
- import { cls } from '@layerstack/tailwind';
5
- import { chartContext } from '../ChartContext.svelte';
6
- import { transformContext } from '../TransformContext.svelte';
7
- const { width, height, containerWidth, containerHeight, padding } = chartContext();
8
- /** The `<canvas>` tag. Useful for bindings. */
9
- export let element = undefined;
10
- /** The `<canvas>`'s 2d context. Useful for bindings. */
11
- // @ts-expect-error: set during onMount()
12
- export let context = undefined;
13
- /** Force the use of a software (instead of hardware accelerated) 2D canvas and can save memory when calling getImageData() frequently.
14
- * see: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext#willreadfrequently */
15
- export let willReadFrequently = false;
16
- /** The layer's z-index. */
17
- export let zIndex = undefined;
18
- /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
19
- export let pointerEvents = undefined;
20
- /** Text to display if the browser won't render a canvas tag. You can also set arbitrary HTML via the "fallback" slot but this is fine if you just need text. If you use the "fallback" slot, this prop is ignored. */
21
- export let fallback = '';
22
- /** A string passed to the `aria-label` on the `<canvas>` tag. */
23
- export let label = undefined;
24
- /** A string passed to the `aria-labelledby` on the `<canvas>` tag. */
25
- export let labelledBy = undefined;
26
- /** A string passed to `aria-describedby` property on the `<canvas>` tag. */
27
- export let describedBy = undefined;
28
- const ctx = writable({});
29
- onMount(() => {
30
- context = element?.getContext('2d', { willReadFrequently });
31
- });
32
- const { mode, scale, translate } = transformContext();
33
- $: if (context) {
1
+ <script lang="ts">
2
+ import { onMount, setContext } from 'svelte';
3
+ import { writable } from 'svelte/store';
4
+ import { scaleCanvas } from 'layercake';
5
+ import { cls } from '@layerstack/tailwind';
6
+
7
+ import { chartContext } from '../ChartContext.svelte';
8
+ import { transformContext } from '../TransformContext.svelte';
9
+
10
+ const { width, height, containerWidth, containerHeight, padding } = chartContext();
11
+
12
+ /** The `<canvas>` tag. Useful for bindings. */
13
+ export let element: HTMLCanvasElement | undefined = undefined;
14
+
15
+ /** The `<canvas>`'s 2d context. Useful for bindings. */
16
+ // @ts-expect-error: set during onMount()
17
+ export let context: CanvasRenderingContext2D = undefined;
18
+
19
+ /** Force the use of a software (instead of hardware accelerated) 2D canvas and can save memory when calling getImageData() frequently.
20
+ * see: https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext#willreadfrequently */
21
+ export let willReadFrequently = false;
22
+
23
+ /** The layer's z-index. */
24
+ export let zIndex = undefined;
25
+
26
+ /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
27
+ export let pointerEvents: boolean | undefined = undefined;
28
+
29
+ /** Text to display if the browser won't render a canvas tag. You can also set arbitrary HTML via the "fallback" slot but this is fine if you just need text. If you use the "fallback" slot, this prop is ignored. */
30
+ export let fallback = '';
31
+
32
+ /** A string passed to the `aria-label` on the `<canvas>` tag. */
33
+ export let label: string | undefined = undefined;
34
+
35
+ /** A string passed to the `aria-labelledby` on the `<canvas>` tag. */
36
+ export let labelledBy: string | undefined = undefined;
37
+
38
+ /** A string passed to `aria-describedby` property on the `<canvas>` tag. */
39
+ export let describedBy: string | undefined = undefined;
40
+
41
+ const ctx = writable({});
42
+
43
+ onMount(() => {
44
+ context = element?.getContext('2d', { willReadFrequently }) as CanvasRenderingContext2D;
45
+ });
46
+
47
+ const { mode, scale, translate } = transformContext();
48
+
49
+ $: if (context) {
34
50
  scaleCanvas(context, $containerWidth, $containerHeight);
35
51
  context.clearRect(0, 0, $containerWidth, $containerHeight);
52
+
36
53
  context.translate($padding.left ?? 0, $padding.top ?? 0);
54
+
37
55
  if (mode === 'canvas') {
38
- const center = { x: $width / 2, y: $height / 2 };
39
- const newTranslate = {
40
- x: $translate.x * $scale + center.x - center.x * $scale,
41
- y: $translate.y * $scale + center.y - center.y * $scale,
42
- };
43
- context.translate(newTranslate.x, newTranslate.y);
44
- context.scale($scale, $scale);
56
+ const center = { x: $width / 2, y: $height / 2 };
57
+ const newTranslate = {
58
+ x: $translate.x * $scale + center.x - center.x * $scale,
59
+ y: $translate.y * $scale + center.y - center.y * $scale,
60
+ };
61
+ context.translate(newTranslate.x, newTranslate.y);
62
+ context.scale($scale, $scale);
45
63
  }
64
+
46
65
  // Force children to re-draw
47
66
  $ctx = context;
48
- }
49
- $: ctx.set(context);
50
- setContext('canvas', { ctx });
67
+ }
68
+
69
+ $: ctx.set(context);
70
+ setContext('canvas', { ctx });
51
71
  </script>
52
72
 
53
73
  <canvas
@@ -1,21 +1,31 @@
1
- <script>import { cls } from '@layerstack/tailwind';
2
- import { chartContext } from '../ChartContext.svelte';
3
- /** The layer's outermost `<div>` tag. Useful for bindings. */
4
- export let element = undefined;
5
- /** The layer's z-index. */
6
- export let zIndex = undefined;
7
- /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
8
- export let pointerEvents = undefined;
9
- /** A string passed to the `aria-role` on the `<div>` tag. This is `undefined` by default but will be set by default to `'figure'` if `label`, `labelledby` or `describedby` is set. That default will be overridden by whatever is passed in. */
10
- export let role = undefined;
11
- /** A string passed to the `aria-label` property on the `<div>` tag. */
12
- export let label = undefined;
13
- /** A string passed to the `aria-labelledby property` on the `<div>` tag. */
14
- export let labelledBy = undefined;
15
- /** A string passed to the `aria-describedby` property on the `<div>` tag. */
16
- export let describedBy = undefined;
17
- const { padding } = chartContext();
18
- $: roleVal = role || (label || labelledBy || describedBy ? 'figure' : undefined);
1
+ <script lang="ts">
2
+ import { cls } from '@layerstack/tailwind';
3
+ import { chartContext } from '../ChartContext.svelte';
4
+
5
+ /** The layer's outermost `<div>` tag. Useful for bindings. */
6
+ export let element: HTMLDivElement | undefined = undefined;
7
+
8
+ /** The layer's z-index. */
9
+ export let zIndex = undefined;
10
+
11
+ /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
12
+ export let pointerEvents: boolean | undefined = undefined;
13
+
14
+ /** A string passed to the `aria-role` on the `<div>` tag. This is `undefined` by default but will be set by default to `'figure'` if `label`, `labelledby` or `describedby` is set. That default will be overridden by whatever is passed in. */
15
+ export let role: string | undefined = undefined;
16
+
17
+ /** A string passed to the `aria-label` property on the `<div>` tag. */
18
+ export let label: string | undefined = undefined;
19
+
20
+ /** A string passed to the `aria-labelledby property` on the `<div>` tag. */
21
+ export let labelledBy: string | undefined = undefined;
22
+
23
+ /** A string passed to the `aria-describedby` property on the `<div>` tag. */
24
+ export let describedBy: string | undefined = undefined;
25
+
26
+ const { padding } = chartContext();
27
+
28
+ $: roleVal = role || (label || labelledBy || describedBy ? 'figure' : undefined);
19
29
  </script>
20
30
 
21
31
  <div
@@ -1,41 +1,56 @@
1
- <script>import { cls } from '@layerstack/tailwind';
2
- import { chartContext } from '../ChartContext.svelte';
3
- import { transformContext } from '../TransformContext.svelte';
4
- /** The layer's `<svg>` tag. Useful for bindings. */
5
- export let element = undefined;
6
- /** The layer's `<g>` tag. Useful for bindings. */
7
- export let innerElement = undefined;
8
- /** The layer's z-index. */
9
- export let zIndex = undefined;
10
- /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
11
- export let pointerEvents = undefined;
12
- /** A string passed to the `viewBox` property on the `<svg>` tag. */
13
- export let viewBox = undefined;
14
- /** A string passed to the `aria-label` property on the `<svg>` tag. */
15
- export let label = undefined;
16
- /** A string passed to the `aria-labelledby property` on the `<svg>` tag. */
17
- export let labelledBy = undefined;
18
- /** A string passed to the `aria-describedby` property on the `<svg>` tag. */
19
- export let describedBy = undefined;
20
- /** Shorthand to set the contents of `<title></title>` for accessibility. You can also set arbitrary HTML via the "title" slot but this is a convenient shorthand. If you use the "title" slot, this prop is ignored. */
21
- export let title = undefined;
22
- /**
23
- * Translate children to center, useful for radial layouts
24
- */
25
- export let center = false;
26
- const { containerWidth, containerHeight, width, height, padding } = chartContext();
27
- const { mode, scale, translate } = transformContext();
28
- $: transform = center
1
+ <script lang="ts">
2
+ import { cls } from '@layerstack/tailwind';
3
+
4
+ import { chartContext } from '../ChartContext.svelte';
5
+ import { transformContext } from '../TransformContext.svelte';
6
+
7
+ /** The layer's `<svg>` tag. Useful for bindings. */
8
+ export let element: SVGElement | undefined = undefined;
9
+
10
+ /** The layer's `<g>` tag. Useful for bindings. */
11
+ export let innerElement: SVGGElement | undefined = undefined;
12
+
13
+ /** The layer's z-index. */
14
+ export let zIndex = undefined;
15
+
16
+ /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
17
+ export let pointerEvents: boolean | undefined = undefined;
18
+
19
+ /** A string passed to the `viewBox` property on the `<svg>` tag. */
20
+ export let viewBox: string | undefined = undefined;
21
+
22
+ /** A string passed to the `aria-label` property on the `<svg>` tag. */
23
+ export let label: string | undefined = undefined;
24
+
25
+ /** A string passed to the `aria-labelledby property` on the `<svg>` tag. */
26
+ export let labelledBy: string | undefined = undefined;
27
+
28
+ /** A string passed to the `aria-describedby` property on the `<svg>` tag. */
29
+ export let describedBy: string | undefined = undefined;
30
+
31
+ /** Shorthand to set the contents of `<title></title>` for accessibility. You can also set arbitrary HTML via the "title" slot but this is a convenient shorthand. If you use the "title" slot, this prop is ignored. */
32
+ export let title: string | undefined = undefined;
33
+
34
+ /**
35
+ * Translate children to center, useful for radial layouts
36
+ */
37
+ export let center: boolean | 'x' | 'y' = false;
38
+
39
+ const { containerWidth, containerHeight, width, height, padding } = chartContext();
40
+
41
+ const { mode, scale, translate } = transformContext();
42
+
43
+ $: transform = center
29
44
  ? `translate(${center === 'x' || center === true ? $width / 2 : 0}, ${center === 'y' || center === true ? $height / 2 : 0})`
30
45
  : '';
31
- $: if (mode === 'canvas') {
46
+ $: if (mode === 'canvas') {
32
47
  const center = { x: $width / 2, y: $height / 2 };
33
48
  const newTranslate = {
34
- x: $translate.x * $scale + center.x - center.x * $scale,
35
- y: $translate.y * $scale + center.y - center.y * $scale,
49
+ x: $translate.x * $scale + center.x - center.x * $scale,
50
+ y: $translate.y * $scale + center.y - center.y * $scale,
36
51
  };
37
52
  transform = `translate(${newTranslate.x},${newTranslate.y}) scale(${$scale})`;
38
- }
53
+ }
39
54
  </script>
40
55
 
41
56
  <!-- svelte-ignore a11y-click-events-have-key-events -->