layerchart 2.0.0-next.1 → 2.0.0-next.11

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 (275) hide show
  1. package/dist/actions/movable.d.ts +28 -0
  2. package/dist/actions/movable.js +91 -0
  3. package/dist/components/AnnotationLine.svelte +143 -0
  4. package/dist/components/AnnotationLine.svelte.d.ts +30 -0
  5. package/dist/components/AnnotationPoint.svelte +119 -0
  6. package/dist/components/AnnotationPoint.svelte.d.ts +34 -0
  7. package/dist/components/AnnotationRange.svelte +147 -0
  8. package/dist/components/AnnotationRange.svelte.d.ts +40 -0
  9. package/dist/components/Arc.svelte +344 -151
  10. package/dist/components/Arc.svelte.d.ts +138 -0
  11. package/dist/components/Area.svelte +165 -149
  12. package/dist/components/Area.svelte.d.ts +45 -0
  13. package/dist/components/Axis.svelte +320 -179
  14. package/dist/components/Axis.svelte.d.ts +127 -0
  15. package/dist/components/Bar.svelte +166 -107
  16. package/dist/components/Bar.svelte.d.ts +51 -0
  17. package/dist/components/Bars.svelte +56 -67
  18. package/dist/components/Bars.svelte.d.ts +27 -0
  19. package/dist/components/Blur.svelte +42 -12
  20. package/dist/components/Blur.svelte.d.ts +23 -21
  21. package/dist/components/Bounds.svelte +49 -19
  22. package/dist/components/Bounds.svelte.d.ts +24 -50
  23. package/dist/components/BrushContext.svelte +296 -168
  24. package/dist/components/BrushContext.svelte.d.ts +97 -65
  25. package/dist/components/Calendar.svelte +116 -59
  26. package/dist/components/Calendar.svelte.d.ts +50 -31
  27. package/dist/components/Chart.svelte +1289 -398
  28. package/dist/components/Chart.svelte.d.ts +535 -410
  29. package/dist/components/ChartClipPath.svelte +37 -15
  30. package/dist/components/ChartClipPath.svelte.d.ts +21 -19
  31. package/dist/components/Circle.svelte +124 -85
  32. package/dist/components/Circle.svelte.d.ts +52 -0
  33. package/dist/components/CircleClipPath.svelte +76 -16
  34. package/dist/components/CircleClipPath.svelte.d.ts +46 -0
  35. package/dist/components/ClipPath.svelte +71 -21
  36. package/dist/components/ClipPath.svelte.d.ts +40 -27
  37. package/dist/components/ColorRamp.svelte +75 -9
  38. package/dist/components/ColorRamp.svelte.d.ts +37 -19
  39. package/dist/components/ComputedStyles.svelte +17 -5
  40. package/dist/components/ComputedStyles.svelte.d.ts +11 -19
  41. package/dist/components/Connector.svelte +149 -0
  42. package/dist/components/Connector.svelte.d.ts +51 -0
  43. package/dist/components/Dagre.svelte +211 -122
  44. package/dist/components/Dagre.svelte.d.ts +119 -56
  45. package/dist/components/ForceSimulation.svelte +215 -90
  46. package/dist/components/ForceSimulation.svelte.d.ts +82 -35
  47. package/dist/components/Frame.svelte +33 -13
  48. package/dist/components/Frame.svelte.d.ts +13 -17
  49. package/dist/components/GeoCircle.svelte +29 -16
  50. package/dist/components/GeoCircle.svelte.d.ts +22 -24
  51. package/dist/components/GeoContext.svelte +113 -72
  52. package/dist/components/GeoContext.svelte.d.ts +49 -41
  53. package/dist/components/GeoEdgeFade.svelte +49 -13
  54. package/dist/components/GeoEdgeFade.svelte.d.ts +17 -19
  55. package/dist/components/GeoPath.svelte +157 -127
  56. package/dist/components/GeoPath.svelte.d.ts +48 -36
  57. package/dist/components/GeoPoint.svelte +52 -20
  58. package/dist/components/GeoPoint.svelte.d.ts +25 -22
  59. package/dist/components/GeoSpline.svelte +75 -26
  60. package/dist/components/GeoSpline.svelte.d.ts +29 -20
  61. package/dist/components/GeoTile.svelte +100 -49
  62. package/dist/components/GeoTile.svelte.d.ts +38 -23
  63. package/dist/components/GeoVisible.svelte +17 -9
  64. package/dist/components/GeoVisible.svelte.d.ts +10 -18
  65. package/dist/components/Graticule.svelte +30 -14
  66. package/dist/components/Graticule.svelte.d.ts +11 -52
  67. package/dist/components/Grid.svelte +230 -117
  68. package/dist/components/Grid.svelte.d.ts +71 -0
  69. package/dist/components/Group.svelte +173 -106
  70. package/dist/components/Group.svelte.d.ts +81 -0
  71. package/dist/components/Highlight.svelte +410 -308
  72. package/dist/components/Highlight.svelte.d.ts +107 -0
  73. package/dist/components/Hull.svelte +97 -46
  74. package/dist/components/Hull.svelte.d.ts +40 -30
  75. package/dist/components/Labels.svelte +127 -47
  76. package/dist/components/Labels.svelte.d.ts +70 -27
  77. package/dist/components/Legend.svelte +374 -190
  78. package/dist/components/Legend.svelte.d.ts +95 -44
  79. package/dist/components/Line.svelte +163 -125
  80. package/dist/components/Line.svelte.d.ts +75 -0
  81. package/dist/components/LinearGradient.svelte +153 -78
  82. package/dist/components/LinearGradient.svelte.d.ts +66 -31
  83. package/dist/components/Link.svelte +160 -104
  84. package/dist/components/Link.svelte.d.ts +54 -0
  85. package/dist/components/Marker.svelte +100 -39
  86. package/dist/components/Marker.svelte.d.ts +59 -27
  87. package/dist/components/MarkerWrapper.svelte +35 -0
  88. package/dist/components/MarkerWrapper.svelte.d.ts +18 -0
  89. package/dist/components/MonthPath.svelte +65 -20
  90. package/dist/components/MonthPath.svelte.d.ts +23 -17
  91. package/dist/components/MotionPath.svelte +80 -24
  92. package/dist/components/MotionPath.svelte.d.ts +46 -27
  93. package/dist/components/Pack.svelte +53 -17
  94. package/dist/components/Pack.svelte.d.ts +42 -21
  95. package/dist/components/Partition.svelte +64 -22
  96. package/dist/components/Partition.svelte.d.ts +49 -26
  97. package/dist/components/Pattern.svelte +297 -11
  98. package/dist/components/Pattern.svelte.d.ts +103 -19
  99. package/dist/components/Pie.svelte +122 -76
  100. package/dist/components/Pie.svelte.d.ts +65 -51
  101. package/dist/components/Point.svelte +20 -9
  102. package/dist/components/Point.svelte.d.ts +16 -20
  103. package/dist/components/Points.svelte +148 -137
  104. package/dist/components/Points.svelte.d.ts +45 -34
  105. package/dist/components/RadialGradient.svelte +148 -77
  106. package/dist/components/RadialGradient.svelte.d.ts +69 -31
  107. package/dist/components/Rect.svelte +121 -102
  108. package/dist/components/Rect.svelte.d.ts +36 -0
  109. package/dist/components/RectClipPath.svelte +82 -18
  110. package/dist/components/RectClipPath.svelte.d.ts +55 -0
  111. package/dist/components/Rule.svelte +107 -63
  112. package/dist/components/Rule.svelte.d.ts +40 -19
  113. package/dist/components/Sankey.svelte +132 -55
  114. package/dist/components/Sankey.svelte.d.ts +61 -31
  115. package/dist/components/Spline.svelte +281 -218
  116. package/dist/components/Spline.svelte.d.ts +95 -0
  117. package/dist/components/Text.svelte +463 -197
  118. package/dist/components/Text.svelte.d.ts +136 -0
  119. package/dist/components/Threshold.svelte +48 -16
  120. package/dist/components/Threshold.svelte.d.ts +29 -31
  121. package/dist/components/TileImage.svelte +103 -30
  122. package/dist/components/TileImage.svelte.d.ts +48 -23
  123. package/dist/components/TransformContext.svelte +365 -171
  124. package/dist/components/TransformControls.svelte +50 -26
  125. package/dist/components/TransformControls.svelte.d.ts +27 -19
  126. package/dist/components/Tree.svelte +74 -33
  127. package/dist/components/Tree.svelte.d.ts +42 -30
  128. package/dist/components/Treemap.svelte +119 -42
  129. package/dist/components/Treemap.svelte.d.ts +75 -27
  130. package/dist/components/Voronoi.svelte +153 -103
  131. package/dist/components/Voronoi.svelte.d.ts +42 -41
  132. package/dist/components/charts/ArcChart.svelte +464 -0
  133. package/dist/components/charts/ArcChart.svelte.d.ts +90 -0
  134. package/dist/components/charts/AreaChart.svelte +444 -393
  135. package/dist/components/charts/AreaChart.svelte.d.ts +61 -0
  136. package/dist/components/charts/BarChart.svelte +463 -389
  137. package/dist/components/charts/BarChart.svelte.d.ts +76 -0
  138. package/dist/components/charts/ChartAnnotations.svelte +37 -0
  139. package/dist/components/charts/ChartAnnotations.svelte.d.ts +10 -0
  140. package/dist/components/charts/DefaultTooltip.svelte +60 -0
  141. package/dist/components/charts/DefaultTooltip.svelte.d.ts +10 -0
  142. package/dist/components/charts/LineChart.svelte +366 -315
  143. package/dist/components/charts/LineChart.svelte.d.ts +53 -0
  144. package/dist/components/charts/PieChart.svelte +458 -316
  145. package/dist/components/charts/PieChart.svelte.d.ts +137 -353
  146. package/dist/components/charts/ScatterChart.svelte +332 -296
  147. package/dist/components/charts/ScatterChart.svelte.d.ts +39 -0
  148. package/dist/components/charts/index.d.ts +8 -0
  149. package/dist/components/charts/index.js +7 -0
  150. package/dist/components/charts/types.d.ts +253 -0
  151. package/dist/components/charts/utils.svelte.d.ts +30 -0
  152. package/dist/components/charts/utils.svelte.js +59 -0
  153. package/dist/components/index.d.ts +76 -4
  154. package/dist/components/index.js +76 -5
  155. package/dist/components/layout/Canvas.svelte +347 -171
  156. package/dist/components/layout/Canvas.svelte.d.ts +110 -55
  157. package/dist/components/layout/Html.svelte +82 -42
  158. package/dist/components/layout/Html.svelte.d.ts +39 -28
  159. package/dist/components/layout/Layer.svelte +39 -0
  160. package/dist/components/layout/Layer.svelte.d.ts +17 -0
  161. package/dist/components/layout/Svg.svelte +122 -70
  162. package/dist/components/layout/Svg.svelte.d.ts +53 -34
  163. package/dist/components/layout/WebGL.svelte +135 -0
  164. package/dist/components/layout/WebGL.svelte.d.ts +50 -0
  165. package/dist/components/tooltip/Tooltip.svelte +253 -78
  166. package/dist/components/tooltip/Tooltip.svelte.d.ts +149 -31
  167. package/dist/components/tooltip/TooltipContext.svelte +426 -271
  168. package/dist/components/tooltip/TooltipContext.svelte.d.ts +86 -55
  169. package/dist/components/tooltip/TooltipHeader.svelte +100 -11
  170. package/dist/components/tooltip/TooltipHeader.svelte.d.ts +43 -23
  171. package/dist/components/tooltip/TooltipItem.svelte +167 -27
  172. package/dist/components/tooltip/TooltipItem.svelte.d.ts +63 -31
  173. package/dist/components/tooltip/TooltipList.svelte +22 -3
  174. package/dist/components/tooltip/TooltipList.svelte.d.ts +6 -17
  175. package/dist/components/tooltip/TooltipSeparator.svelte +27 -1
  176. package/dist/components/tooltip/TooltipSeparator.svelte.d.ts +6 -15
  177. package/dist/components/tooltip/index.d.ts +6 -0
  178. package/dist/components/tooltip/index.js +6 -0
  179. package/dist/components/tooltip/tooltipMetaContext.d.ts +79 -0
  180. package/dist/components/tooltip/tooltipMetaContext.js +139 -0
  181. package/dist/components/types.d.ts +1 -0
  182. package/dist/components/types.js +1 -0
  183. package/dist/docs/Blockquote.svelte +3 -1
  184. package/dist/docs/Blockquote.svelte.d.ts +5 -16
  185. package/dist/docs/Code.svelte +20 -12
  186. package/dist/docs/Code.svelte.d.ts +12 -22
  187. package/dist/docs/ConnectorSweepMenuField.svelte +17 -0
  188. package/dist/docs/ConnectorSweepMenuField.svelte.d.ts +7 -0
  189. package/dist/docs/ConnectorTypeMenuField.svelte +17 -0
  190. package/dist/docs/ConnectorTypeMenuField.svelte.d.ts +7 -0
  191. package/dist/docs/CurveMenuField.svelte +14 -3
  192. package/dist/docs/CurveMenuField.svelte.d.ts +9 -18
  193. package/dist/docs/GeoDebug.svelte +47 -42
  194. package/dist/docs/GeoDebug.svelte.d.ts +4 -16
  195. package/dist/docs/Header1.svelte +4 -2
  196. package/dist/docs/Header1.svelte.d.ts +5 -18
  197. package/dist/docs/Json.svelte +11 -3
  198. package/dist/docs/Json.svelte.d.ts +9 -17
  199. package/dist/docs/Layout.svelte +10 -7
  200. package/dist/docs/Layout.svelte.d.ts +5 -15
  201. package/dist/docs/Link.svelte +7 -3
  202. package/dist/docs/Link.svelte.d.ts +5 -27
  203. package/dist/docs/PathDataMenuField.svelte +14 -10
  204. package/dist/docs/PathDataMenuField.svelte.d.ts +8 -18
  205. package/dist/docs/Preview.svelte +20 -7
  206. package/dist/docs/Preview.svelte.d.ts +12 -22
  207. package/dist/docs/TilesetField.svelte +20 -19
  208. package/dist/docs/TilesetField.svelte.d.ts +6 -19
  209. package/dist/docs/TransformDebug.svelte +5 -6
  210. package/dist/docs/TransformDebug.svelte.d.ts +18 -14
  211. package/dist/docs/ViewSourceButton.svelte +7 -4
  212. package/dist/docs/ViewSourceButton.svelte.d.ts +8 -18
  213. package/dist/types/d3-shape-extentions.d.ts +7 -0
  214. package/dist/utils/afterTick.d.ts +5 -0
  215. package/dist/utils/afterTick.js +8 -0
  216. package/dist/utils/arcText.svelte.d.ts +57 -0
  217. package/dist/utils/arcText.svelte.js +262 -0
  218. package/dist/utils/array.d.ts +9 -1
  219. package/dist/utils/array.js +13 -0
  220. package/dist/utils/attributes.d.ts +29 -0
  221. package/dist/utils/attributes.js +40 -0
  222. package/dist/utils/canvas.js +47 -10
  223. package/dist/utils/chart.d.ts +78 -0
  224. package/dist/utils/chart.js +512 -0
  225. package/dist/utils/color.d.ts +1 -0
  226. package/dist/utils/color.js +8 -0
  227. package/dist/utils/common.d.ts +3 -5
  228. package/dist/utils/common.js +3 -2
  229. package/dist/utils/connectorUtils.d.ts +21 -0
  230. package/dist/utils/connectorUtils.js +111 -0
  231. package/dist/utils/createId.d.ts +7 -0
  232. package/dist/utils/createId.js +9 -0
  233. package/dist/utils/debug.d.ts +1 -0
  234. package/dist/utils/debug.js +84 -0
  235. package/dist/utils/filterObject.d.ts +9 -0
  236. package/dist/utils/filterObject.js +12 -0
  237. package/dist/utils/graph/dagre.d.ts +34 -0
  238. package/dist/utils/graph/dagre.js +78 -0
  239. package/dist/utils/graph/dagre.test.d.ts +1 -0
  240. package/dist/utils/{graph.test.js → graph/dagre.test.js} +19 -33
  241. package/dist/utils/graph/sankey.d.ts +28 -0
  242. package/dist/utils/{graph.js → graph/sankey.js} +13 -41
  243. package/dist/utils/index.d.ts +3 -1
  244. package/dist/utils/index.js +3 -1
  245. package/dist/utils/key.svelte.d.ts +3 -0
  246. package/dist/utils/key.svelte.js +11 -0
  247. package/dist/utils/legendPayload.d.ts +7 -0
  248. package/dist/utils/legendPayload.js +8 -0
  249. package/dist/utils/motion.svelte.d.ts +140 -0
  250. package/dist/utils/motion.svelte.js +180 -0
  251. package/dist/utils/motion.test.d.ts +1 -0
  252. package/dist/utils/motion.test.js +213 -0
  253. package/dist/utils/{rect.d.ts → rect.svelte.d.ts} +7 -4
  254. package/dist/utils/rect.svelte.js +105 -0
  255. package/dist/utils/scales.svelte.d.ts +91 -0
  256. package/dist/utils/scales.svelte.js +201 -0
  257. package/dist/utils/stack.d.ts +2 -3
  258. package/dist/utils/stack.js +1 -1
  259. package/dist/utils/string.js +87 -0
  260. package/dist/utils/ticks.d.ts +9 -3
  261. package/dist/utils/ticks.js +122 -147
  262. package/dist/utils/ticks.test.d.ts +1 -0
  263. package/dist/utils/ticks.test.js +57 -0
  264. package/dist/utils/types.d.ts +81 -0
  265. package/package.json +28 -24
  266. package/dist/components/ChartContext.svelte +0 -295
  267. package/dist/components/ChartContext.svelte.d.ts +0 -139
  268. package/dist/components/TransformContext.svelte.d.ts +0 -158
  269. package/dist/stores/motionStore.d.ts +0 -30
  270. package/dist/stores/motionStore.js +0 -62
  271. package/dist/utils/graph.d.ts +0 -37
  272. package/dist/utils/rect.js +0 -107
  273. package/dist/utils/scales.d.ts +0 -66
  274. package/dist/utils/scales.js +0 -136
  275. /package/dist/{utils/graph.test.d.ts → components/charts/types.js} +0 -0
@@ -1,97 +1,149 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+ import type { Without } from '../../utils/types.js';
4
+ import type { SVGAttributes } from 'svelte/elements';
5
+
6
+ type SVGPropsWithoutHTML = {
7
+ /**
8
+ * A reference to the layer's `<svg>` tag.
9
+ *
10
+ * @bindable
11
+ */
12
+ ref?: SVGSVGElement;
13
+
14
+ /**
15
+ * A reference to the layer's `<g>` tag.
16
+ *
17
+ * @bindable
18
+ */
19
+ innerRef?: SVGGElement;
20
+
21
+ /**
22
+ * The layer's z-index.
23
+ */
24
+ zIndex?: number;
25
+
26
+ /**
27
+ * Set this to `false` to set `pointer-events: none;` on the entire layer.
28
+ */
29
+ pointerEvents?: boolean;
30
+
31
+ /**
32
+ * A string passed to the `viewBox` property on the `<svg>` tag.
33
+ */
34
+ viewBox?: string;
35
+
36
+ /**
37
+ * Shorthand to set the contents of `<title></title>` for accessibility.
38
+ * You can also set arbitrary HTML via the title snippet but this is a convenient shorthand.
39
+ */
40
+ title?: string | Snippet;
41
+
42
+ /**
43
+ * The inner content of the `<defs>` tag.
44
+ */
45
+ defs?: Snippet;
46
+
47
+ /**
48
+ * Translate children to center (useful for radial layouts)
49
+ */
50
+ center?: boolean | 'x' | 'y';
51
+
52
+ /**
53
+ * Ignore TransformContext.
54
+ * Useful to add static elements such as legends.
55
+ */
56
+ ignoreTransform?: boolean;
57
+
58
+ children?: Snippet<[{ ref: SVGElement }]>;
59
+ };
60
+
61
+ export type SVGProps = SVGPropsWithoutHTML &
62
+ Without<SVGAttributes<SVGElement>, SVGPropsWithoutHTML>;
63
+ </script>
64
+
1
65
  <script lang="ts">
2
66
  import { cls } from '@layerstack/tailwind';
3
-
4
- import { setRenderContext } from '../Chart.svelte';
5
- import { chartContext } from '../ChartContext.svelte';
6
- import { transformContext } from '../TransformContext.svelte';
7
-
8
- /** The layer's `<svg>` tag. Useful for bindings. */
9
- export let element: SVGElement | undefined = undefined;
10
-
11
- /** The layer's `<g>` tag. Useful for bindings. */
12
- export let innerElement: SVGGElement | undefined = undefined;
13
-
14
- /** The layer's z-index. */
15
- export let zIndex = undefined;
16
-
17
- /** Set this to `false` to set `pointer-events: none;` on the entire layer. */
18
- export let pointerEvents: boolean | undefined = undefined;
19
-
20
- /** A string passed to the `viewBox` property on the `<svg>` tag. */
21
- export let viewBox: string | undefined = undefined;
22
-
23
- /** A string passed to the `aria-label` property on the `<svg>` tag. */
24
- export let label: string | undefined = undefined;
25
-
26
- /** A string passed to the `aria-labelledby property` on the `<svg>` tag. */
27
- export let labelledBy: string | undefined = undefined;
28
-
29
- /** A string passed to the `aria-describedby` property on the `<svg>` tag. */
30
- export let describedBy: string | undefined = undefined;
31
-
32
- /** 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. */
33
- export let title: string | undefined = undefined;
34
-
35
- /**
36
- * Translate children to center (useful for radial layouts)
37
- */
38
- export let center: boolean | 'x' | 'y' = false;
39
-
40
- /** Ignore TransformContext. Useful to add static elements such as legends. */
41
- export let ignoreTransform = false;
42
-
43
- const { containerWidth, containerHeight, width, height, padding } = chartContext();
44
- const { mode, scale, translate } = transformContext();
45
-
46
- let transform = '';
47
- $: if (mode === 'canvas' && !ignoreTransform) {
48
- transform = `translate(${$translate.x},${$translate.y}) scale(${$scale})`;
49
- } else if (center) {
50
- transform = `translate(${center === 'x' || center === true ? $width / 2 : 0}, ${center === 'y' || center === true ? $height / 2 : 0})`;
51
- }
67
+ import { getTransformContext } from '../TransformContext.svelte';
68
+
69
+ import { getChartContext, setRenderContext } from '../Chart.svelte';
70
+ import { layerClass } from '../../utils/attributes.js';
71
+
72
+ let {
73
+ ref: refProp = $bindable(),
74
+ innerRef: innerRefProp = $bindable(),
75
+ zIndex = 0,
76
+ pointerEvents,
77
+ viewBox,
78
+ ignoreTransform = false,
79
+ center = false,
80
+ class: className,
81
+ title,
82
+ defs,
83
+ children,
84
+ ...restProps
85
+ }: SVGProps = $props();
86
+
87
+ let ref = $state<SVGSVGElement>();
88
+ let innerRef = $state<SVGGElement>();
89
+
90
+ $effect.pre(() => {
91
+ refProp = ref;
92
+ });
93
+ $effect.pre(() => {
94
+ innerRefProp = innerRef;
95
+ });
96
+
97
+ const ctx = getChartContext();
98
+ const transformCtx = getTransformContext();
99
+
100
+ const transform = $derived.by(() => {
101
+ if (transformCtx.mode === 'canvas' && !ignoreTransform) {
102
+ return `translate(${transformCtx.translate.x},${transformCtx.translate.y}) scale(${transformCtx.scale})`;
103
+ } else if (center) {
104
+ return `translate(${center === 'x' || center === true ? ctx.width / 2 : 0}, ${center === 'y' || center === true ? ctx.height / 2 : 0})`;
105
+ }
106
+ });
52
107
 
53
108
  setRenderContext('svg');
54
109
  </script>
55
110
 
56
- <!-- svelte-ignore a11y-click-events-have-key-events -->
57
- <!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
58
111
  <svg
59
- bind:this={element}
112
+ bind:this={ref}
60
113
  {viewBox}
61
- width={$containerWidth}
62
- height={$containerHeight}
114
+ width={ctx.containerWidth}
115
+ height={ctx.containerHeight}
63
116
  style:z-index={zIndex}
64
117
  class={cls(
65
- 'layercake-layout-svg',
118
+ layerClass('layout-svg'),
66
119
  'absolute top-0 left-0 overflow-visible',
67
120
  pointerEvents === false && 'pointer-events-none',
68
- $$props.class
121
+ className
69
122
  )}
70
- aria-label={label}
71
- aria-labelledby={labelledBy}
72
- aria-describedby={describedBy}
73
- on:click
74
123
  role="figure"
124
+ {...restProps}
75
125
  >
76
- <slot name="title">
77
- {#if title}<title>{title}</title>{/if}
78
- </slot>
126
+ {#if typeof title === 'function'}
127
+ {@render title()}
128
+ {:else if title}
129
+ <title class={layerClass('layout-svg-title')}>{title}</title>
130
+ {/if}
79
131
 
80
132
  <defs>
81
- <slot name="defs"></slot>
133
+ {@render defs?.()}
82
134
  </defs>
83
135
 
84
136
  <g
85
- bind:this={innerElement}
86
- class="layercake-layout-svg_g"
87
- transform="translate({$padding.left}, {$padding.top})"
137
+ bind:this={innerRef}
138
+ class={layerClass('layout-svg-g')}
139
+ transform="translate({ctx.padding.left}, {ctx.padding.top})"
88
140
  >
89
141
  {#if transform}
90
- <g {transform}>
91
- <slot {element}></slot>
142
+ <g {transform} class={layerClass('layout-svg-g-transform')}>
143
+ {@render children?.({ ref })}
92
144
  </g>
93
145
  {:else}
94
- <slot {element}></slot>
146
+ {@render children?.({ ref })}
95
147
  {/if}
96
148
  </g>
97
149
  </svg>
@@ -1,35 +1,54 @@
1
- import { SvelteComponentTyped } from "svelte";
2
- declare const __propDef: {
3
- props: {
4
- [x: string]: any;
5
- element?: SVGElement | undefined;
6
- innerElement?: SVGGElement | undefined;
7
- zIndex?: undefined;
8
- pointerEvents?: boolean | undefined | undefined;
9
- viewBox?: string | undefined | undefined;
10
- label?: string | undefined | undefined;
11
- labelledBy?: string | undefined | undefined;
12
- describedBy?: string | undefined | undefined;
13
- title?: string | undefined | undefined;
14
- center?: boolean | "x" | "y" | undefined;
15
- ignoreTransform?: boolean | undefined;
16
- };
17
- events: {
18
- click: MouseEvent;
19
- } & {
20
- [evt: string]: CustomEvent<any>;
21
- };
22
- slots: {
23
- title: {};
24
- defs: {};
25
- default: {
26
- element: SVGElement | undefined;
27
- };
28
- };
1
+ import type { Snippet } from 'svelte';
2
+ import type { Without } from '../../utils/types.js';
3
+ import type { SVGAttributes } from 'svelte/elements';
4
+ type SVGPropsWithoutHTML = {
5
+ /**
6
+ * A reference to the layer's `<svg>` tag.
7
+ *
8
+ * @bindable
9
+ */
10
+ ref?: SVGSVGElement;
11
+ /**
12
+ * A reference to the layer's `<g>` tag.
13
+ *
14
+ * @bindable
15
+ */
16
+ innerRef?: SVGGElement;
17
+ /**
18
+ * The layer's z-index.
19
+ */
20
+ zIndex?: number;
21
+ /**
22
+ * Set this to `false` to set `pointer-events: none;` on the entire layer.
23
+ */
24
+ pointerEvents?: boolean;
25
+ /**
26
+ * A string passed to the `viewBox` property on the `<svg>` tag.
27
+ */
28
+ viewBox?: string;
29
+ /**
30
+ * Shorthand to set the contents of `<title></title>` for accessibility.
31
+ * You can also set arbitrary HTML via the title snippet but this is a convenient shorthand.
32
+ */
33
+ title?: string | Snippet;
34
+ /**
35
+ * The inner content of the `<defs>` tag.
36
+ */
37
+ defs?: Snippet;
38
+ /**
39
+ * Translate children to center (useful for radial layouts)
40
+ */
41
+ center?: boolean | 'x' | 'y';
42
+ /**
43
+ * Ignore TransformContext.
44
+ * Useful to add static elements such as legends.
45
+ */
46
+ ignoreTransform?: boolean;
47
+ children?: Snippet<[{
48
+ ref: SVGElement;
49
+ }]>;
29
50
  };
30
- export type SvgProps = typeof __propDef.props;
31
- export type SvgEvents = typeof __propDef.events;
32
- export type SvgSlots = typeof __propDef.slots;
33
- export default class Svg extends SvelteComponentTyped<SvgProps, SvgEvents, SvgSlots> {
34
- }
35
- export {};
51
+ export type SVGProps = SVGPropsWithoutHTML & Without<SVGAttributes<SVGElement>, SVGPropsWithoutHTML>;
52
+ declare const Svg: import("svelte").Component<SVGProps, {}, "ref" | "innerRef">;
53
+ type Svg = ReturnType<typeof Svg>;
54
+ export default Svg;
@@ -0,0 +1,135 @@
1
+ <script lang="ts" module>
2
+ export type WebGLProps = {
3
+ /**
4
+ * A reference to the `<canvas>` element.
5
+ *
6
+ * @bindable
7
+ */
8
+ ref?: HTMLCanvasElement;
9
+
10
+ /**
11
+ * The layer's z-index.
12
+ */
13
+ zIndex?: number;
14
+
15
+ /**
16
+ * Set this to `false` to set `pointer-events: none;` on the entire layer.
17
+ *
18
+ * @default true
19
+ */
20
+ pointerEvents?: boolean;
21
+
22
+ /**
23
+ * The second argument passed to canvas.getContext.
24
+ *
25
+ * See the WebGL docs [for more info](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext).
26
+ */
27
+ contextAttributes?: Parameters<HTMLCanvasElement['getContext']>[1];
28
+
29
+ /**
30
+ * The `<canvas>`'s WebGL context.
31
+ * @bindable
32
+ */
33
+ context?: WebGLRenderingContext;
34
+
35
+ /**
36
+ * Text to display if the browser won't render a canvas tag.
37
+ * You can also set arbitrary HTML via the `fallback` snippet but this is fine
38
+ * if you just need text. If you use the `fallback` snippet, this prop is ignored.
39
+ */
40
+ fallback?: string | Snippet;
41
+
42
+ children?: Snippet<
43
+ [{ ref: HTMLCanvasElement; webGLContext: WebGLRenderingContext | undefined }]
44
+ >;
45
+ };
46
+
47
+ export type WebGLContextValue = {
48
+ gl: WebGLRenderingContext | null;
49
+ };
50
+
51
+ const _WebGLContext = new Context<WebGLContextValue>('WebGL');
52
+
53
+ export function setWebGLContext(context: WebGLContextValue) {
54
+ return _WebGLContext.set(context);
55
+ }
56
+
57
+ export function getWebGLContext() {
58
+ const defaultContext: WebGLContextValue = $state({ gl: null });
59
+ return _WebGLContext.getOr(defaultContext);
60
+ }
61
+ </script>
62
+
63
+ <script lang="ts">
64
+ import { onMount, type Snippet } from 'svelte';
65
+ import { getChartContext } from '../Chart.svelte';
66
+ import { Context } from 'runed';
67
+ import { extractLayerProps } from '../../utils/attributes.js';
68
+
69
+ let {
70
+ context = $bindable(),
71
+ ref: refProp = $bindable(),
72
+ contextAttributes,
73
+ fallback = '',
74
+ pointerEvents = true,
75
+ zIndex = 0,
76
+ children,
77
+ ...restProps
78
+ }: WebGLProps = $props();
79
+
80
+ let ref = $state<HTMLCanvasElement>();
81
+ $effect.pre(() => {
82
+ refProp = ref;
83
+ });
84
+
85
+ let testGl;
86
+
87
+ const ctx = getChartContext();
88
+
89
+ onMount(() => {
90
+ /* --------------------------------------------
91
+ * Try to find a working webgl context
92
+ */
93
+ const contexts = ['webgl', 'experimental-webgl', 'moz-webgl', 'webkit-3d'];
94
+ for (let j = 0; j < contexts.length; j++) {
95
+ testGl = ref?.getContext(contexts[j], contextAttributes);
96
+ if (testGl) {
97
+ // @ts-ignore
98
+ context = testGl;
99
+ break;
100
+ }
101
+ }
102
+ });
103
+
104
+ setWebGLContext({
105
+ get gl() {
106
+ return context ?? null;
107
+ },
108
+ set gl(v: WebGLRenderingContext | null) {
109
+ if (v) {
110
+ context = v;
111
+ }
112
+ context = undefined;
113
+ },
114
+ });
115
+ </script>
116
+
117
+ <canvas
118
+ bind:this={ref}
119
+ style:z-index={zIndex}
120
+ style:pointer-events={pointerEvents === false ? 'none' : null}
121
+ style:top={ctx.padding.top + 'px'}
122
+ style:right={ctx.padding.right + 'px'}
123
+ style:bottom={ctx.padding.bottom + 'px'}
124
+ style:left={ctx.padding.left + 'px'}
125
+ style="width:100%;height:100%;position:absolute;"
126
+ {...extractLayerProps(restProps, 'layout-webgl')}
127
+ >
128
+ {#if typeof fallback === 'function'}
129
+ {@render fallback()}
130
+ {:else if fallback}
131
+ {fallback}
132
+ {/if}
133
+ </canvas>
134
+
135
+ {@render children?.({ ref, webGLContext: context })}
@@ -0,0 +1,50 @@
1
+ export type WebGLProps = {
2
+ /**
3
+ * A reference to the `<canvas>` element.
4
+ *
5
+ * @bindable
6
+ */
7
+ ref?: HTMLCanvasElement;
8
+ /**
9
+ * The layer's z-index.
10
+ */
11
+ zIndex?: number;
12
+ /**
13
+ * Set this to `false` to set `pointer-events: none;` on the entire layer.
14
+ *
15
+ * @default true
16
+ */
17
+ pointerEvents?: boolean;
18
+ /**
19
+ * The second argument passed to canvas.getContext.
20
+ *
21
+ * See the WebGL docs [for more info](https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext).
22
+ */
23
+ contextAttributes?: Parameters<HTMLCanvasElement['getContext']>[1];
24
+ /**
25
+ * The `<canvas>`'s WebGL context.
26
+ * @bindable
27
+ */
28
+ context?: WebGLRenderingContext;
29
+ /**
30
+ * Text to display if the browser won't render a canvas tag.
31
+ * You can also set arbitrary HTML via the `fallback` snippet but this is fine
32
+ * if you just need text. If you use the `fallback` snippet, this prop is ignored.
33
+ */
34
+ fallback?: string | Snippet;
35
+ children?: Snippet<[
36
+ {
37
+ ref: HTMLCanvasElement;
38
+ webGLContext: WebGLRenderingContext | undefined;
39
+ }
40
+ ]>;
41
+ };
42
+ export type WebGLContextValue = {
43
+ gl: WebGLRenderingContext | null;
44
+ };
45
+ export declare function setWebGLContext(context: WebGLContextValue): WebGLContextValue;
46
+ export declare function getWebGLContext(): WebGLContextValue;
47
+ import { type Snippet } from 'svelte';
48
+ declare const WebGl: import("svelte").Component<WebGLProps, {}, "ref" | "context">;
49
+ type WebGl = ReturnType<typeof WebGl>;
50
+ export default WebGl;