@rokkit/chart 1.0.0-next.14 → 1.0.0-next.140
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.
- package/LICENSE +1 -1
- package/README.md +150 -46
- package/dist/Plot/index.d.ts +5 -0
- package/dist/elements/index.d.ts +6 -0
- package/dist/index.d.ts +14 -0
- package/dist/lib/brewing/axes.svelte.d.ts +66 -0
- package/dist/lib/brewing/bars.svelte.d.ts +56 -0
- package/dist/lib/brewing/dimensions.svelte.d.ts +35 -0
- package/dist/lib/brewing/index.svelte.d.ts +118 -0
- package/dist/lib/brewing/legends.svelte.d.ts +48 -0
- package/dist/lib/brewing/scales.svelte.d.ts +24 -0
- package/dist/lib/brewing/types.d.ts +162 -0
- package/dist/lib/context.d.ts +13 -0
- package/dist/lib/scales.svelte.d.ts +35 -0
- package/dist/lib/utils.d.ts +60 -0
- package/dist/old_lib/brewer.d.ts +9 -0
- package/dist/old_lib/chart.d.ts +40 -0
- package/dist/old_lib/grid.d.ts +72 -0
- package/dist/old_lib/index.d.ts +4 -0
- package/dist/old_lib/plots.d.ts +3 -0
- package/dist/old_lib/swatch.d.ts +285 -0
- package/dist/old_lib/ticks.d.ts +36 -0
- package/dist/old_lib/utils.d.ts +1 -0
- package/dist/patterns/index.d.ts +9 -0
- package/dist/patterns/paths/constants.d.ts +1 -0
- package/dist/symbols/constants/index.d.ts +1 -0
- package/dist/symbols/index.d.ts +5 -0
- package/dist/template/constants.d.ts +43 -0
- package/dist/template/shapes/index.d.ts +4 -0
- package/package.json +34 -44
- package/src/Plot/Axis.svelte +95 -0
- package/src/Plot/Bar.svelte +96 -0
- package/src/Plot/Grid.svelte +68 -0
- package/src/Plot/Legend.svelte +127 -0
- package/src/Plot/Root.svelte +107 -0
- package/src/Plot/index.js +5 -0
- package/src/Symbol.svelte +21 -0
- package/src/Texture.svelte +18 -0
- package/src/elements/Bar.svelte +22 -24
- package/src/elements/ColorRamp.svelte +20 -22
- package/src/elements/ContinuousLegend.svelte +20 -17
- package/src/elements/DefinePatterns.svelte +24 -0
- package/src/elements/DiscreteLegend.svelte +15 -15
- package/src/elements/Label.svelte +4 -8
- package/src/elements/SymbolGrid.svelte +23 -0
- package/src/elements/index.js +6 -0
- package/src/examples/BarChartExample.svelte +81 -0
- package/src/index.js +18 -16
- package/src/lib/brewing/axes.svelte.js +265 -0
- package/src/lib/brewing/bars.svelte.js +177 -0
- package/src/lib/brewing/dimensions.svelte.js +56 -0
- package/src/lib/brewing/index.svelte.js +205 -0
- package/src/lib/brewing/legends.svelte.js +137 -0
- package/src/lib/brewing/scales.svelte.js +106 -0
- package/src/lib/brewing/types.js +73 -0
- package/src/lib/context.js +133 -0
- package/src/lib/scales.svelte.js +172 -0
- package/src/lib/utils.js +107 -120
- package/src/old_lib/brewer.js +25 -0
- package/src/old_lib/chart.js +213 -0
- package/src/old_lib/grid.js +85 -0
- package/src/old_lib/index.js +4 -0
- package/src/old_lib/plots.js +27 -0
- package/src/old_lib/swatch.js +16 -0
- package/src/old_lib/ticks.js +46 -0
- package/src/old_lib/utils.js +8 -0
- package/src/patterns/Brick.svelte +15 -0
- package/src/patterns/Circles.svelte +18 -0
- package/src/patterns/CrossHatch.svelte +12 -0
- package/src/patterns/CurvedWave.svelte +7 -0
- package/src/patterns/Dots.svelte +20 -0
- package/src/patterns/OutlineCircles.svelte +13 -0
- package/src/patterns/README.md +3 -0
- package/src/patterns/Tile.svelte +16 -0
- package/src/patterns/Triangles.svelte +13 -0
- package/src/patterns/Waves.svelte +9 -0
- package/src/patterns/index.js +14 -0
- package/src/patterns/paths/NamedPattern.svelte +9 -0
- package/src/patterns/paths/constants.js +4 -0
- package/src/symbols/RoundedSquare.svelte +33 -0
- package/src/symbols/Shape.svelte +37 -0
- package/src/symbols/constants/index.js +4 -0
- package/src/symbols/index.js +9 -0
- package/src/symbols/outline.svelte +60 -0
- package/src/symbols/solid.svelte +60 -0
- package/src/template/Texture.svelte +13 -0
- package/src/template/constants.js +43 -0
- package/src/template/shapes/Circles.svelte +15 -0
- package/src/template/shapes/Lines.svelte +16 -0
- package/src/template/shapes/Path.svelte +9 -0
- package/src/template/shapes/Polygons.svelte +15 -0
- package/src/template/shapes/index.js +4 -0
- package/src/chart/FacetGrid.svelte +0 -51
- package/src/chart/Grid.svelte +0 -34
- package/src/chart/Legend.svelte +0 -16
- package/src/chart/PatternDefs.svelte +0 -13
- package/src/chart/Swatch.svelte +0 -93
- package/src/chart/SwatchButton.svelte +0 -29
- package/src/chart/SwatchGrid.svelte +0 -55
- package/src/chart/Symbol.svelte +0 -37
- package/src/chart/Texture.svelte +0 -16
- package/src/chart/TexturedShape.svelte +0 -27
- package/src/chart/TimelapseChart.svelte +0 -97
- package/src/chart/Timer.svelte +0 -27
- package/src/chart.js +0 -9
- package/src/components/charts/Axis.svelte +0 -66
- package/src/components/charts/Chart.svelte +0 -35
- package/src/components/index.js +0 -23
- package/src/components/lib/axis.js +0 -0
- package/src/components/lib/chart.js +0 -187
- package/src/components/lib/color.js +0 -327
- package/src/components/lib/funnel.js +0 -204
- package/src/components/lib/index.js +0 -19
- package/src/components/lib/pattern.js +0 -190
- package/src/components/lib/rollup.js +0 -55
- package/src/components/lib/shape.js +0 -199
- package/src/components/lib/summary.js +0 -145
- package/src/components/lib/theme.js +0 -23
- package/src/components/lib/timer.js +0 -41
- package/src/components/lib/utils.js +0 -165
- package/src/components/plots/BarPlot.svelte +0 -36
- package/src/components/plots/BoxPlot.svelte +0 -54
- package/src/components/plots/ScatterPlot.svelte +0 -30
- package/src/components/store.js +0 -70
- package/src/constants.js +0 -66
- package/src/elements/PatternDefs.svelte +0 -13
- package/src/elements/PatternMask.svelte +0 -20
- package/src/elements/Symbol.svelte +0 -38
- package/src/elements/Tooltip.svelte +0 -23
- package/src/funnel.svelte +0 -35
- package/src/geom.js +0 -105
- package/src/lib/axis.js +0 -75
- package/src/lib/colors.js +0 -32
- package/src/lib/geom.js +0 -4
- package/src/lib/shapes.js +0 -144
- package/src/lib/timer.js +0 -44
- package/src/lookup.js +0 -29
- package/src/plots/BarPlot.svelte +0 -55
- package/src/plots/BoxPlot.svelte +0 -0
- package/src/plots/FunnelPlot.svelte +0 -33
- package/src/plots/HeatMap.svelte +0 -5
- package/src/plots/HeatMapCalendar.svelte +0 -129
- package/src/plots/LinePlot.svelte +0 -55
- package/src/plots/Plot.svelte +0 -25
- package/src/plots/RankBarPlot.svelte +0 -38
- package/src/plots/ScatterPlot.svelte +0 -20
- package/src/plots/ViolinPlot.svelte +0 -11
- package/src/plots/heatmap.js +0 -70
- package/src/plots/index.js +0 -10
- package/src/swatch.js +0 -11
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let lines = $derived([
|
|
5
|
+
{ x1: 0, y1: 0.25 * size, x2: 0.5 * size, y2: 0.25 * size },
|
|
6
|
+
{ x1: 0.5 * size, y1: 0.75 * size, x2: size, y2: 0.75 * size },
|
|
7
|
+
{ x1: 0, y1: 0, x2: 0, y2: size },
|
|
8
|
+
{ x1: size, y1: 0, x2: size, y2: size },
|
|
9
|
+
{ x1: 0.5 * size, y1: 0, x2: 0.5 * size, y2: size }
|
|
10
|
+
])
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
{#each lines as line, index (index)}
|
|
14
|
+
<line {...line} {stroke} stroke-width={thickness} stroke-linecap="round" />
|
|
15
|
+
{/each}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let data = $derived(
|
|
5
|
+
[
|
|
6
|
+
{ cx: 0, cy: 0, r: 0.5 },
|
|
7
|
+
{ cx: 1, cy: 1, r: 0.5 }
|
|
8
|
+
].map(({ cx, cy, r }) => ({
|
|
9
|
+
cx: cx * size,
|
|
10
|
+
cy: cy * size,
|
|
11
|
+
r: r * size
|
|
12
|
+
}))
|
|
13
|
+
)
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
{#each data as { cx, cy, r }, index (index)}
|
|
17
|
+
<circle {cx} {cy} {r} {fill} {stroke} />
|
|
18
|
+
{/each}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let lines = $derived([
|
|
5
|
+
{ x1: 0, y1: 0, x2: size, y2: size },
|
|
6
|
+
{ x1: 0, y1: size, x2: size, y2: 0 }
|
|
7
|
+
])
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
{#each lines as line, index (index)}
|
|
11
|
+
<line {...line} {stroke} stroke-width={thickness} stroke-linecap="round" />
|
|
12
|
+
{/each}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, fill = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let data = $derived(
|
|
5
|
+
[
|
|
6
|
+
{ cx: 0.2 * size, cy: 0.2 * size },
|
|
7
|
+
{ cx: 0.4 * size, cy: 0.4 * size },
|
|
8
|
+
{ cx: 0.6 * size, cy: 0.6 * size },
|
|
9
|
+
{ cx: 0.8 * size, cy: 0.8 * size },
|
|
10
|
+
{ cx: 0.8 * size, cy: 0.2 * size },
|
|
11
|
+
{ cx: 0.6 * size, cy: 0.4 * size },
|
|
12
|
+
{ cx: 0.4 * size, cy: 0.6 * size },
|
|
13
|
+
{ cx: 0.2 * size, cy: 0.8 * size }
|
|
14
|
+
].map((x) => ({ ...x, r: 0.08 * size }))
|
|
15
|
+
)
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
{#each data as { cx, cy, r }, index (index)}
|
|
19
|
+
<circle {cx} {cy} {r} {fill} />
|
|
20
|
+
{/each}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let centres = $derived([
|
|
5
|
+
{ cx: 0, cy: 0 },
|
|
6
|
+
{ cx: size, cy: size }
|
|
7
|
+
])
|
|
8
|
+
let r = $derived(0.5 * size)
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
{#each centres as { cx, cy }, index (index)}
|
|
12
|
+
<circle {cx} {cy} {r} {fill} {stroke} />
|
|
13
|
+
{/each}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
const thickness = 0.5
|
|
3
|
+
let { size = 10, stroke = 'currentColor' } = $props()
|
|
4
|
+
|
|
5
|
+
let lines = $derived([
|
|
6
|
+
{ x1: 0, y1: 0.25 * size, x2: 0.5 * size, y2: 0.25 * size },
|
|
7
|
+
{ x1: 0.5 * size, y1: 0.75 * size, x2: size, y2: 0.75 * size },
|
|
8
|
+
{ x1: 0, y1: 0, x2: 0, y2: size },
|
|
9
|
+
{ x1: size, y1: 0, x2: size, y2: size },
|
|
10
|
+
{ x1: 0.5 * size, y1: 0, x2: 0.5 * size, y2: size }
|
|
11
|
+
])
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
{#each lines as line, index (index)}
|
|
15
|
+
<line {...line} {stroke} stroke-width={thickness} stroke-linecap="round" />
|
|
16
|
+
{/each}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
|
|
3
|
+
|
|
4
|
+
let polygons = $derived([
|
|
5
|
+
[0, 0.5 * size, 0.5 * size, size, 0, size],
|
|
6
|
+
[0.5 * size, 0, 0, 0, 0, 0.5 * size],
|
|
7
|
+
[size, 0, 0.5 * size, 0.5 * size, size, size]
|
|
8
|
+
])
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
{#each polygons as points, index (index)}
|
|
12
|
+
<polygon points={points.join(', ')} {fill} {stroke} stroke-width="0" />
|
|
13
|
+
{/each}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { scaledPath } from '@rokkit/core'
|
|
3
|
+
|
|
4
|
+
let { size = 10, thickness = 0.5, stroke = 'currentColor', fill = 'none', data = [] } = $props()
|
|
5
|
+
|
|
6
|
+
let d = $derived(scaledPath(size, data))
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<path {d} {stroke} stroke-width={thickness} {fill} />
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export { default as Brick } from './Brick.svelte'
|
|
2
|
+
export { default as Circles } from './Circles.svelte'
|
|
3
|
+
export { default as Dots } from './Dots.svelte'
|
|
4
|
+
export { default as CrossHatch } from './CrossHatch.svelte'
|
|
5
|
+
export { default as Waves } from './Waves.svelte'
|
|
6
|
+
// export { default as Squares } from './Squares.svelte'
|
|
7
|
+
export { default as Tile } from './Tile.svelte'
|
|
8
|
+
export { default as Triangles } from './Triangles.svelte'
|
|
9
|
+
// export { default as Waves } from './Waves.svelte'
|
|
10
|
+
// export { default as ZigZag } from './ZigZag.svelte'
|
|
11
|
+
// export { default as Flower } from './Flower.svelte'
|
|
12
|
+
// export { default as NamedPath } from './NamedPath.svelte'
|
|
13
|
+
export { default as CurvedWave } from './CurvedWave.svelte'
|
|
14
|
+
export { default as OutlineCircles } from './OutlineCircles.svelte'
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { patterns } from './constants'
|
|
3
|
+
|
|
4
|
+
let { size = 10, thickness = 0.5, stroke = 'currentColor', name = 'cross-hatch' } = $props()
|
|
5
|
+
|
|
6
|
+
let d = $derived(patterns[name](size))
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<path {d} {stroke} stroke-width={thickness} fill="none" />
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let {
|
|
3
|
+
x = 0,
|
|
4
|
+
y = 0,
|
|
5
|
+
size = 1,
|
|
6
|
+
fill = 'currentColor',
|
|
7
|
+
stroke = 'currentColor',
|
|
8
|
+
onclick,
|
|
9
|
+
onmouseover,
|
|
10
|
+
onmouseleave,
|
|
11
|
+
onfocus,
|
|
12
|
+
...restProps
|
|
13
|
+
} = $props()
|
|
14
|
+
|
|
15
|
+
let r = $derived(size * 3.534)
|
|
16
|
+
let props = $derived({ rx: r * 0.1, ry: r * 0.1, ...restProps })
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<rect
|
|
20
|
+
x={x - r}
|
|
21
|
+
y={y - r}
|
|
22
|
+
width={r * 2}
|
|
23
|
+
height={r * 2}
|
|
24
|
+
{fill}
|
|
25
|
+
{stroke}
|
|
26
|
+
{...props}
|
|
27
|
+
role="button"
|
|
28
|
+
{onclick}
|
|
29
|
+
{onmouseover}
|
|
30
|
+
{onmouseleave}
|
|
31
|
+
{onfocus}
|
|
32
|
+
tabindex="0"
|
|
33
|
+
/>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { namedShapes } from './constants'
|
|
3
|
+
|
|
4
|
+
let {
|
|
5
|
+
x = 0,
|
|
6
|
+
y = 0,
|
|
7
|
+
size = 1,
|
|
8
|
+
fill = 'none',
|
|
9
|
+
stroke = 'currentColor',
|
|
10
|
+
thickness = 1,
|
|
11
|
+
name = 'circle',
|
|
12
|
+
onclick,
|
|
13
|
+
onmouseover,
|
|
14
|
+
onmouseleave,
|
|
15
|
+
onfocus,
|
|
16
|
+
onblur
|
|
17
|
+
} = $props()
|
|
18
|
+
|
|
19
|
+
let d = $derived(name in namedShapes ? namedShapes[name](size) : namedShapes['circle'](size))
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
23
|
+
<path
|
|
24
|
+
{d}
|
|
25
|
+
{fill}
|
|
26
|
+
{stroke}
|
|
27
|
+
transform="translate({x},{y})"
|
|
28
|
+
stroke-width={thickness}
|
|
29
|
+
fill-rule="evenodd"
|
|
30
|
+
role="button"
|
|
31
|
+
{onclick}
|
|
32
|
+
{onmouseover}
|
|
33
|
+
{onmouseleave}
|
|
34
|
+
{onfocus}
|
|
35
|
+
{onblur}
|
|
36
|
+
tabindex="0"
|
|
37
|
+
/>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { namedShapes } from './constants'
|
|
2
|
+
import { default as Shape } from './Shape.svelte'
|
|
3
|
+
import { default as RoundedSquare } from './RoundedSquare.svelte'
|
|
4
|
+
|
|
5
|
+
export const shapes = [...Object.keys(namedShapes), 'rounded-square']
|
|
6
|
+
export const components = {
|
|
7
|
+
default: Shape,
|
|
8
|
+
'rounded-square': RoundedSquare
|
|
9
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
class="plot"
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
font-family="system-ui, sans-serif"
|
|
5
|
+
font-size="10"
|
|
6
|
+
text-anchor="middle"
|
|
7
|
+
width="688"
|
|
8
|
+
height="60"
|
|
9
|
+
viewBox="0 0 688 60"
|
|
10
|
+
>
|
|
11
|
+
<style>
|
|
12
|
+
:where(.plot) {
|
|
13
|
+
--plot-background: white;
|
|
14
|
+
display: block;
|
|
15
|
+
height: auto;
|
|
16
|
+
height: intrinsic;
|
|
17
|
+
max-width: 100%;
|
|
18
|
+
}
|
|
19
|
+
:where(.plot text),
|
|
20
|
+
:where(.plot tspan) {
|
|
21
|
+
white-space: pre;
|
|
22
|
+
}
|
|
23
|
+
</style>
|
|
24
|
+
<g aria-label="x-axis tick" fill="none" stroke="currentColor"
|
|
25
|
+
><path transform="translate(68,30)" d="M0,0L0,6"></path><path
|
|
26
|
+
transform="translate(160,30)"
|
|
27
|
+
d="M0,0L0,6"
|
|
28
|
+
></path><path transform="translate(252,30)" d="M0,0L0,6"></path><path
|
|
29
|
+
transform="translate(344,30)"
|
|
30
|
+
d="M0,0L0,6"
|
|
31
|
+
></path><path transform="translate(436,30)" d="M0,0L0,6"></path><path
|
|
32
|
+
transform="translate(528,30)"
|
|
33
|
+
d="M0,0L0,6"
|
|
34
|
+
></path><path transform="translate(620,30)" d="M0,0L0,6"></path></g
|
|
35
|
+
><g aria-label="x-axis tick label" transform="translate(0,9)"
|
|
36
|
+
><text y="0.71em" transform="translate(68,30)">asterisk</text><text
|
|
37
|
+
y="0.71em"
|
|
38
|
+
transform="translate(160,30)">circle</text
|
|
39
|
+
><text y="0.71em" transform="translate(252,30)">diamond2</text><text
|
|
40
|
+
y="0.71em"
|
|
41
|
+
transform="translate(344,30)">plus</text
|
|
42
|
+
><text y="0.71em" transform="translate(436,30)">square2</text><text
|
|
43
|
+
y="0.71em"
|
|
44
|
+
transform="translate(528,30)">times</text
|
|
45
|
+
><text y="0.71em" transform="translate(620,30)">triangle2</text></g
|
|
46
|
+
><g aria-label="dot" fill="none" stroke="currentColor" stroke-width="1.5"
|
|
47
|
+
><path transform="translate(160,15.25)" d="M4.5,0A4.5,4.5,0,1,1,-4.5,0A4.5,4.5,0,1,1,4.5,0"
|
|
48
|
+
></path><path transform="translate(344,15.25)" d="M-6.873,0L6.873,0M0,6.873L0,-6.873"
|
|
49
|
+
></path><path transform="translate(528,15.25)" d="M-4.87,-4.87L4.87,4.87M-4.87,4.87L4.87,-4.87"
|
|
50
|
+
></path><path transform="translate(620,15.25)" d="M0,-5.443L4.714,2.721L-4.714,2.721Z"
|
|
51
|
+
></path><path
|
|
52
|
+
transform="translate(68,15.25)"
|
|
53
|
+
d="M0,4.769L0,-4.769M-4.13,-2.384L4.13,2.384M-4.13,2.384L4.13,-2.384"
|
|
54
|
+
></path><path
|
|
55
|
+
transform="translate(436,15.25)"
|
|
56
|
+
d="M3.534,3.534L3.534,-3.534L-3.534,-3.534L-3.534,3.534Z"
|
|
57
|
+
></path><path transform="translate(252,15.25)" d="M0,-4.995L4.995,0L0,4.995L-4.995,0Z"
|
|
58
|
+
></path></g
|
|
59
|
+
></svg
|
|
60
|
+
>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<svg
|
|
2
|
+
class="plot"
|
|
3
|
+
fill="currentColor"
|
|
4
|
+
font-family="system-ui, sans-serif"
|
|
5
|
+
font-size="10"
|
|
6
|
+
text-anchor="middle"
|
|
7
|
+
width="688"
|
|
8
|
+
height="60"
|
|
9
|
+
viewBox="0 0 688 60"
|
|
10
|
+
><style>
|
|
11
|
+
:where(.plot) {
|
|
12
|
+
--plot-background: white;
|
|
13
|
+
display: block;
|
|
14
|
+
height: auto;
|
|
15
|
+
height: intrinsic;
|
|
16
|
+
max-width: 100%;
|
|
17
|
+
}
|
|
18
|
+
:where(.plot text),
|
|
19
|
+
:where(.plot tspan) {
|
|
20
|
+
white-space: pre;
|
|
21
|
+
}
|
|
22
|
+
</style><g aria-label="x-axis tick" fill="none" stroke="currentColor"
|
|
23
|
+
><path transform="translate(68,30)" d="M0,0L0,6"></path><path
|
|
24
|
+
transform="translate(160,30)"
|
|
25
|
+
d="M0,0L0,6"
|
|
26
|
+
></path><path transform="translate(252,30)" d="M0,0L0,6"></path><path
|
|
27
|
+
transform="translate(344,30)"
|
|
28
|
+
d="M0,0L0,6"
|
|
29
|
+
></path><path transform="translate(436,30)" d="M0,0L0,6"></path><path
|
|
30
|
+
transform="translate(528,30)"
|
|
31
|
+
d="M0,0L0,6"
|
|
32
|
+
></path><path transform="translate(620,30)" d="M0,0L0,6"></path></g
|
|
33
|
+
><g aria-label="x-axis tick label" transform="translate(0,9)"
|
|
34
|
+
><text y="0.71em" transform="translate(68,30)">circle</text><text
|
|
35
|
+
y="0.71em"
|
|
36
|
+
transform="translate(160,30)">cross</text
|
|
37
|
+
><text y="0.71em" transform="translate(252,30)">diamond</text><text
|
|
38
|
+
y="0.71em"
|
|
39
|
+
transform="translate(344,30)">square</text
|
|
40
|
+
><text y="0.71em" transform="translate(436,30)">star</text><text
|
|
41
|
+
y="0.71em"
|
|
42
|
+
transform="translate(528,30)">triangle</text
|
|
43
|
+
><text y="0.71em" transform="translate(620,30)">wye</text></g
|
|
44
|
+
><g aria-label="dot"
|
|
45
|
+
><path transform="translate(68,15.25)" d="M4.5,0A4.5,4.5,0,1,1,-4.5,0A4.5,4.5,0,1,1,4.5,0"
|
|
46
|
+
></path><path
|
|
47
|
+
transform="translate(160,15.25)"
|
|
48
|
+
d="M-5.35,-1.783L-1.783,-1.783L-1.783,-5.35L1.783,-5.35L1.783,-1.783L5.35,-1.783L5.35,1.783L1.783,1.783L1.783,5.35L-1.783,5.35L-1.783,1.783L-5.35,1.783Z"
|
|
49
|
+
></path><path transform="translate(252,15.25)" d="M0,-7.423L4.285,0L0,7.423L-4.285,0Z"
|
|
50
|
+
></path><path transform="translate(344,15.25)" d="M-3.988,-3.988h7.976v7.976h-7.976Z"
|
|
51
|
+
></path><path
|
|
52
|
+
transform="translate(436,15.25)"
|
|
53
|
+
d="M0,-7.528L1.69,-2.326L7.16,-2.326L2.735,0.889L4.425,6.09L0,2.875L-4.425,6.09L-2.735,0.889L-7.16,-2.326L-1.69,-2.326Z"
|
|
54
|
+
></path><path transform="translate(528,15.25)" d="M0,-6.998L6.06,3.499L-6.06,3.499Z"
|
|
55
|
+
></path><path
|
|
56
|
+
transform="translate(620,15.25)"
|
|
57
|
+
d="M2.152,1.243L2.152,5.547L-2.152,5.547L-2.152,1.243L-5.88,-0.91L-3.728,-4.638L0,-2.485L3.728,-4.638L5.88,-0.91Z"
|
|
58
|
+
></path></g
|
|
59
|
+
></svg
|
|
60
|
+
>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { library } from './constants'
|
|
3
|
+
import * as templates from './shapes'
|
|
4
|
+
import { pick } from 'ramda'
|
|
5
|
+
|
|
6
|
+
let { size = 10, fill = 'none', stroke = 'none', thickness = 0.5, name = 'Waves' } = $props()
|
|
7
|
+
|
|
8
|
+
let pattern = $derived(library[name])
|
|
9
|
+
let props = $derived(pick(pattern.allowed ?? [], { fill, stroke, thickness }))
|
|
10
|
+
let Component = $derived(templates[pattern.component])
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<Component {size} {...props} data={pattern.data} />
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export const library = {
|
|
2
|
+
Brick: {
|
|
3
|
+
component: 'Lines',
|
|
4
|
+
allowed: ['stroke'],
|
|
5
|
+
data: [
|
|
6
|
+
{ x1: 0, y1: 0.25, x2: 0.5, y2: 0.25 },
|
|
7
|
+
{ x1: 0.5, y1: 0.75, x2: 1, y2: 0.75 },
|
|
8
|
+
{ x1: 0, y1: 0, x2: 0, y2: 1 },
|
|
9
|
+
{ x1: 1, y1: 0, x2: 1, y2: 1 },
|
|
10
|
+
{ x1: 0.5, y1: 0, x2: 0.5, y2: 1 }
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
Circles: {
|
|
14
|
+
component: 'Circles',
|
|
15
|
+
allowed: ['fill', 'stroke'],
|
|
16
|
+
data: [
|
|
17
|
+
{ cx: 0, cy: 0, r: 0.5 },
|
|
18
|
+
{ cx: 1, cy: 1, r: 0.5 }
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
Dominoes: {
|
|
22
|
+
component: 'Circles',
|
|
23
|
+
allowed: ['fill'],
|
|
24
|
+
data: [
|
|
25
|
+
{ cx: 0.2, cy: 0.2, r: 0.8 },
|
|
26
|
+
{ cx: 0.4, cy: 0.4, r: 0.8 },
|
|
27
|
+
{ cx: 0.6, cy: 0.6, r: 0.8 },
|
|
28
|
+
{ cx: 0.8, cy: 0.8, r: 0.8 },
|
|
29
|
+
{ cx: 0.8, cy: 0.2, r: 0.8 },
|
|
30
|
+
{ cx: 0.6, cy: 0.4, r: 0.8 },
|
|
31
|
+
{ cx: 0.4, cy: 0.6, r: 0.8 },
|
|
32
|
+
{ cx: 0.2, cy: 0.8, r: 0.8 }
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
Waves: {
|
|
36
|
+
component: 'Path',
|
|
37
|
+
stroke: true,
|
|
38
|
+
data: [
|
|
39
|
+
['M', 0, 0.25],
|
|
40
|
+
['A', 0.6, 0.5, 0, 0, 0, 1, 0.25]
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, fill = 'currentColor', stroke = 'currentColor', data } = $props()
|
|
3
|
+
|
|
4
|
+
let circles = $derived(
|
|
5
|
+
data.map(({ cx, cy, r }) => ({
|
|
6
|
+
cx: cx * size,
|
|
7
|
+
cy: cy * size,
|
|
8
|
+
r: r * size
|
|
9
|
+
}))
|
|
10
|
+
)
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
{#each circles as { cx, cy, r }, index (index)}
|
|
14
|
+
<circle {cx} {cy} {r} {fill} {stroke} />
|
|
15
|
+
{/each}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let { size = 10, thickness = 0.5, stroke = 'currentColor', data = [] } = $props()
|
|
3
|
+
|
|
4
|
+
let lines = $derived(
|
|
5
|
+
data.map(({ x1, y1, x2, y2 }) => ({
|
|
6
|
+
x1: x1 * size,
|
|
7
|
+
y1: y1 * size,
|
|
8
|
+
x2: x2 * size,
|
|
9
|
+
y2: y2 * size
|
|
10
|
+
}))
|
|
11
|
+
)
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
{#each lines as line, index (index)}
|
|
15
|
+
<line {...line} {stroke} stroke-width={thickness} stroke-linecap="round" />
|
|
16
|
+
{/each}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
let {
|
|
3
|
+
size = 10,
|
|
4
|
+
thickness = 0.5,
|
|
5
|
+
fill = 'currentColor',
|
|
6
|
+
stroke = 'currentColor',
|
|
7
|
+
data = []
|
|
8
|
+
} = $props()
|
|
9
|
+
|
|
10
|
+
let polygons = $derived(data.map((points) => points.map((point) => point * size).join(', ')))
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
{#each polygons as points, index (index)}
|
|
14
|
+
<polygon {points} {fill} {stroke} stroke-width={thickness} />
|
|
15
|
+
{/each}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import Chart from './Chart.svelte'
|
|
3
|
-
import AxisGrid from './AxisGrid.svelte'
|
|
4
|
-
import Axis from './Axis.svelte'
|
|
5
|
-
import AxisTicks from './AxisTicks.svelte'
|
|
6
|
-
import AxisLabels from './AxisLabels.svelte'
|
|
7
|
-
|
|
8
|
-
export let data
|
|
9
|
-
export let row
|
|
10
|
-
export let col
|
|
11
|
-
export let plot
|
|
12
|
-
export let x
|
|
13
|
-
export let y
|
|
14
|
-
export let labels = { x: true, y: true }
|
|
15
|
-
|
|
16
|
-
$: rowValues = [...new Set(data.map((d) => d[row]))]
|
|
17
|
-
$: colValues = [...new Set(data.map((d) => d[col]))]
|
|
18
|
-
</script>
|
|
19
|
-
|
|
20
|
-
<div class="flex flex-col">
|
|
21
|
-
{#each rowValues as rowItem}
|
|
22
|
-
{@const dataFilteredByRow = data.filter((d) => d[row] === rowItem)}
|
|
23
|
-
|
|
24
|
-
<div class="flex flex-row">
|
|
25
|
-
{#each colValues as colItem}
|
|
26
|
-
{@const dataFilteredByCol = dataFilteredByRow.filter(
|
|
27
|
-
(d) => d[col] === colItem
|
|
28
|
-
)}
|
|
29
|
-
|
|
30
|
-
<Chart data={dataFilteredByCol} {x} {y}>
|
|
31
|
-
<Axis name="x" count={7} gap={10}>
|
|
32
|
-
<AxisTicks side="bottom">
|
|
33
|
-
{#if labels.x}
|
|
34
|
-
<AxisLabels angle={-60} />
|
|
35
|
-
{/if}
|
|
36
|
-
</AxisTicks>
|
|
37
|
-
</Axis>
|
|
38
|
-
<Axis name="y" gap={10}>
|
|
39
|
-
<AxisTicks side="left">
|
|
40
|
-
{#if labels.y}
|
|
41
|
-
<AxisLabels />
|
|
42
|
-
{/if}
|
|
43
|
-
</AxisTicks>
|
|
44
|
-
<AxisGrid />
|
|
45
|
-
</Axis>
|
|
46
|
-
<svelte:component this={plot} />
|
|
47
|
-
</Chart>
|
|
48
|
-
{/each}
|
|
49
|
-
</div>
|
|
50
|
-
{/each}
|
|
51
|
-
</div>
|
package/src/chart/Grid.svelte
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { getContext } from 'svelte'
|
|
3
|
-
|
|
4
|
-
export let opacity = 1
|
|
5
|
-
export let hideVertical = false
|
|
6
|
-
export let hideHorizontal = false
|
|
7
|
-
let chart = getContext('chart')
|
|
8
|
-
|
|
9
|
-
$: opacityV = hideVertical ? 0 : opacity
|
|
10
|
-
$: opacityH = hideHorizontal ? 0 : opacity
|
|
11
|
-
$: xRange = $chart.axis.x.scale.range()
|
|
12
|
-
$: yRange = $chart.axis.y.scale.range()
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<g class="grid">
|
|
16
|
-
{#each $chart.axis.x.ticks as tick}
|
|
17
|
-
<line
|
|
18
|
-
x1={tick.position}
|
|
19
|
-
x2={tick.position}
|
|
20
|
-
y1={yRange[0]}
|
|
21
|
-
y2={yRange[1]}
|
|
22
|
-
opacity={opacityV}
|
|
23
|
-
/>
|
|
24
|
-
{/each}
|
|
25
|
-
{#each $chart.axis.y.ticks as tick}
|
|
26
|
-
<line
|
|
27
|
-
y1={tick.position}
|
|
28
|
-
y2={tick.position}
|
|
29
|
-
x1={xRange[0]}
|
|
30
|
-
x2={xRange[1]}
|
|
31
|
-
opacity={opacityH}
|
|
32
|
-
/>
|
|
33
|
-
{/each}
|
|
34
|
-
</g>
|
package/src/chart/Legend.svelte
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
export let title
|
|
3
|
-
export let items = []
|
|
4
|
-
</script>
|
|
5
|
-
|
|
6
|
-
<ul class="flex flex-col">
|
|
7
|
-
<p>{title}</p>
|
|
8
|
-
{#each items as item}
|
|
9
|
-
<li class="flex flex-row gap-5">
|
|
10
|
-
<svg width="42" height="42" viewBox="0 0 42 42">
|
|
11
|
-
<rect width="42" height="42" fill={item.fillUrl || item.fill} />
|
|
12
|
-
</svg>
|
|
13
|
-
<p class="flex flex-grow">{item.label}</p>
|
|
14
|
-
</li>
|
|
15
|
-
{/each}
|
|
16
|
-
</ul>
|