@rokkit/chart 1.0.0-next.86 → 1.0.0-next.88
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/package.json +11 -6
- package/src/Chart.svelte +67 -0
- package/src/PatternDefs.svelte +14 -0
- package/src/Symbol.svelte +17 -0
- package/src/{chart/Texture.svelte → Texture.svelte} +3 -3
- package/src/elements/Bar.svelte +2 -2
- package/src/elements/ContinuousLegend.svelte +3 -2
- package/src/elements/DefinePatterns.svelte +22 -0
- package/src/elements/DiscreteLegend.svelte +1 -1
- package/src/elements/Label.svelte +7 -5
- package/src/elements/SymbolGrid.svelte +23 -0
- package/src/elements/index.js +6 -0
- package/src/index.js +5 -15
- package/src/lib/brewer.js +17 -0
- package/src/lib/chart.js +179 -160
- package/src/lib/grid.js +68 -0
- package/src/lib/index.js +4 -0
- package/src/lib/palette.js +279 -28
- package/src/lib/plots.js +23 -0
- package/src/lib/swatch.js +24 -8
- package/src/lib/ticks.js +19 -0
- package/src/patterns/Brick.svelte +17 -0
- package/src/patterns/Circles.svelte +18 -0
- package/src/patterns/CrossHatch.svelte +14 -0
- package/src/patterns/CurvedWave.svelte +9 -0
- package/src/patterns/Dots.svelte +19 -0
- package/src/patterns/OutlineCircles.svelte +15 -0
- package/src/patterns/Texture.svelte +20 -0
- package/src/patterns/Tile.svelte +17 -0
- package/src/patterns/Triangles.svelte +15 -0
- package/src/patterns/Waves.svelte +13 -0
- package/src/patterns/constants.js +43 -0
- package/src/patterns/index.js +13 -0
- package/src/patterns/paths/NamedPattern.svelte +12 -0
- package/src/patterns/paths/constants.js +7 -0
- package/src/patterns/templates/Circles.svelte +18 -0
- package/src/patterns/templates/Lines.svelte +17 -0
- package/src/patterns/templates/Path.svelte +17 -0
- package/src/patterns/templates/index.js +3 -0
- package/src/plots/Plot.svelte +36 -21
- package/src/plots/index.js +1 -10
- package/src/symbols/Circle.svelte +22 -0
- package/src/symbols/Shape.svelte +31 -0
- package/src/symbols/Square.svelte +27 -0
- package/src/symbols/Triangle.svelte +24 -0
- package/src/symbols/constants/index.js +7 -0
- package/src/symbols/index.js +13 -0
- package/src/chart/Axis.svelte +0 -81
- package/src/chart/AxisGrid.svelte +0 -22
- package/src/chart/Chart.svelte +0 -40
- package/src/chart/FacetGrid.svelte +0 -49
- package/src/chart/Legend.svelte +0 -16
- package/src/chart/Swatch.svelte +0 -84
- package/src/chart/SwatchButton.svelte +0 -29
- package/src/chart/SwatchGrid.svelte +0 -53
- package/src/chart/TexturedShape.svelte +0 -20
- package/src/chart/TimelapseChart.svelte +0 -90
- package/src/chart/Timer.svelte +0 -27
- package/src/elements/Tooltip.svelte +0 -19
- package/src/lib/axis.js +0 -77
- package/src/lib/color.js +0 -55
- package/src/lib/constants.js +0 -41
- package/src/lib/funnel.js +0 -230
- package/src/lib/geom.js +0 -99
- package/src/lib/heatmap.js +0 -68
- package/src/lib/lookup.js +0 -29
- package/src/lib/pattern.js +0 -182
- package/src/lib/rollup.js +0 -49
- package/src/lib/shape.js +0 -46
- package/src/lib/store.js +0 -63
- package/src/lib/summary.js +0 -28
- package/src/lib/theme.js +0 -31
- package/src/lib/utils.js +0 -158
- package/src/plots/BarPlot.svelte +0 -51
- package/src/plots/BarPlot2.svelte +0 -34
- package/src/plots/BoxPlot.svelte +0 -54
- package/src/plots/FunnelPlot.svelte +0 -26
- package/src/plots/HeatMapCalendar.svelte +0 -121
- package/src/plots/LinePlot.svelte +0 -51
- package/src/plots/RankBarPlot.svelte +0 -38
- package/src/plots/ScatterPlot.svelte +0 -28
- package/src/plots/ViolinPlot.svelte +0 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rokkit/chart",
|
|
3
|
-
"version": "1.0.0-next.
|
|
3
|
+
"version": "1.0.0-next.88",
|
|
4
4
|
"description": "Components for making interactive charts.",
|
|
5
5
|
"author": "Jerry Thomas <me@jerrythomas.name>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,9 +22,10 @@
|
|
|
22
22
|
"typescript": "^5.3.3",
|
|
23
23
|
"vite": "^5.1.4",
|
|
24
24
|
"vitest": "~1.3.1",
|
|
25
|
-
"shared-config": "1.0.0-next.
|
|
25
|
+
"shared-config": "1.0.0-next.88"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
+
"@observablehq/plot": "^0.6.13",
|
|
28
29
|
"d3-array": "^3.2.4",
|
|
29
30
|
"d3-collection": "^1.0.7",
|
|
30
31
|
"d3-format": "^3.1.0",
|
|
@@ -34,10 +35,10 @@
|
|
|
34
35
|
"date-fns": "^3.3.1",
|
|
35
36
|
"ramda": "^0.29.1",
|
|
36
37
|
"yootils": "^0.3.1",
|
|
37
|
-
"@rokkit/atoms": "1.0.0-next.
|
|
38
|
-
"@rokkit/core": "1.0.0-next.
|
|
39
|
-
"@rokkit/
|
|
40
|
-
"@rokkit/
|
|
38
|
+
"@rokkit/atoms": "1.0.0-next.88",
|
|
39
|
+
"@rokkit/core": "1.0.0-next.88",
|
|
40
|
+
"@rokkit/molecules": "1.0.0-next.88",
|
|
41
|
+
"@rokkit/stores": "1.0.0-next.88"
|
|
41
42
|
},
|
|
42
43
|
"files": [
|
|
43
44
|
"src/**/*.js",
|
|
@@ -47,6 +48,10 @@
|
|
|
47
48
|
"exports": {
|
|
48
49
|
"./src": "./src",
|
|
49
50
|
"./package.json": "./package.json",
|
|
51
|
+
"./lib": "./src/lib/index.js",
|
|
52
|
+
"./patterns": "./src/patterns/index.js",
|
|
53
|
+
"./symbols": "./src/symbols/index.js",
|
|
54
|
+
"./elements": "./src/elements/index.js",
|
|
50
55
|
".": {
|
|
51
56
|
"types": "./dist/index.d.ts",
|
|
52
57
|
"import": "./src/index.js",
|
package/src/Chart.svelte
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { setContext } from 'svelte'
|
|
3
|
+
import { writable } from 'svelte/store'
|
|
4
|
+
import { chart } from './lib'
|
|
5
|
+
|
|
6
|
+
let config = writable({})
|
|
7
|
+
setContext('chart', config)
|
|
8
|
+
|
|
9
|
+
export let data
|
|
10
|
+
export let x
|
|
11
|
+
export let y
|
|
12
|
+
export let value = y
|
|
13
|
+
export let color = x
|
|
14
|
+
export let fill = x
|
|
15
|
+
export let pattern = x
|
|
16
|
+
export let width = 2048
|
|
17
|
+
export let height = 2048
|
|
18
|
+
export let padding = height / 16
|
|
19
|
+
export let marginLeft = 0
|
|
20
|
+
export let marginRight = 0
|
|
21
|
+
export let marginTop = 0
|
|
22
|
+
export let marginBottom = 0
|
|
23
|
+
export let flipCoords = false
|
|
24
|
+
export let spacing = 0.1
|
|
25
|
+
|
|
26
|
+
$: margin = {
|
|
27
|
+
left: marginLeft,
|
|
28
|
+
right: marginRight,
|
|
29
|
+
top: marginTop,
|
|
30
|
+
bottom: marginBottom
|
|
31
|
+
}
|
|
32
|
+
$: patterns = [...new Set(data.map((d) => d[pattern]))]
|
|
33
|
+
$: fills = [...new Set(data.map((d) => d[fill]))]
|
|
34
|
+
$: colors = [...new Set(data.map((d) => d[color]))]
|
|
35
|
+
$: config.set(
|
|
36
|
+
chart(data, {
|
|
37
|
+
x,
|
|
38
|
+
y,
|
|
39
|
+
value,
|
|
40
|
+
color,
|
|
41
|
+
fill,
|
|
42
|
+
width,
|
|
43
|
+
height,
|
|
44
|
+
padding,
|
|
45
|
+
margin,
|
|
46
|
+
flipCoords,
|
|
47
|
+
spacing
|
|
48
|
+
})
|
|
49
|
+
)
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<svg
|
|
53
|
+
viewBox="0 0 {$config.width} {$config.height}"
|
|
54
|
+
width={$config.width}
|
|
55
|
+
height={$config.height}
|
|
56
|
+
class="w-full h-full chart"
|
|
57
|
+
>
|
|
58
|
+
<rect
|
|
59
|
+
x="0"
|
|
60
|
+
y="0"
|
|
61
|
+
width={$config.width}
|
|
62
|
+
height={$config.height}
|
|
63
|
+
fill="none"
|
|
64
|
+
stroke="currentColor"
|
|
65
|
+
/>
|
|
66
|
+
<slot />
|
|
67
|
+
</svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import Texture from './Texture.svelte'
|
|
3
|
+
|
|
4
|
+
export let thickness = 0.5
|
|
5
|
+
export let patterns = []
|
|
6
|
+
export let size = 10
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<defs>
|
|
10
|
+
{#each patterns as { id, path, fill, stroke }}
|
|
11
|
+
{@const p = typeof path === 'function' ? path(size) : path}
|
|
12
|
+
<Texture {id} path={p} {fill} {stroke} {thickness} {size} />
|
|
13
|
+
{/each}
|
|
14
|
+
</defs>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { components } from './symbols'
|
|
3
|
+
|
|
4
|
+
export let x = 0
|
|
5
|
+
export let y = 0
|
|
6
|
+
export let size = 10
|
|
7
|
+
export let fill = 'currentColor'
|
|
8
|
+
export let stroke = 'currentColor'
|
|
9
|
+
export let shape = 'circle'
|
|
10
|
+
/** @type Object<string, any> */
|
|
11
|
+
export let using = components
|
|
12
|
+
|
|
13
|
+
$: component = using[shape] || using.default
|
|
14
|
+
$: props = using[shape] ? $$restProps : { name: shape, ...$$restProps }
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<svelte:component this={component} {x} {y} {size} {fill} {stroke} {...props} />
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
export let id
|
|
3
|
-
export let fill
|
|
4
3
|
export let path
|
|
5
|
-
export let
|
|
4
|
+
export let fill = 'currentColor'
|
|
5
|
+
export let stroke = 'currentColor'
|
|
6
6
|
export let thickness = 0.5
|
|
7
7
|
export let patternUnits = 'userSpaceOnUse'
|
|
8
8
|
export let size = 10
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
<pattern {id} {patternUnits} width={size} height={size}>
|
|
12
12
|
<rect width={size} height={size} {fill} />
|
|
13
13
|
{#if path}
|
|
14
|
-
<path d={path} fill="none" stroke
|
|
14
|
+
<path d={path} fill="none" {stroke} stroke-width={thickness} />
|
|
15
15
|
{/if}
|
|
16
16
|
</pattern>
|
package/src/elements/Bar.svelte
CHANGED
|
@@ -25,5 +25,5 @@
|
|
|
25
25
|
|
|
26
26
|
<rect x={$scales.x(0)} {y} {width} {height} {fill} opacity={0.5} />
|
|
27
27
|
<rect x={$scales.x(0)} {y} width={5} {height} {fill} />
|
|
28
|
-
<Label x={width} y={y + textHeight + 8} anchor={textAnchor}
|
|
29
|
-
<Label x={width} y={y + height - 14} anchor={textAnchor}
|
|
28
|
+
<Label x={width} y={y + textHeight + 8} anchor={textAnchor} text={name} />
|
|
29
|
+
<Label x={width} y={y + height - 14} anchor={textAnchor} text={formattedValue} small />
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { scaleLinear } from 'd3-scale'
|
|
3
|
-
import { id as uniqueId } from '@rokkit/core'
|
|
3
|
+
// import { id as uniqueId } from '@rokkit/core'
|
|
4
4
|
|
|
5
5
|
export let x = 0
|
|
6
6
|
export let y = 0
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
export let width = 100
|
|
10
10
|
export let tickCount = 5
|
|
11
11
|
export let scale
|
|
12
|
+
export let id = 'legend'
|
|
12
13
|
|
|
13
14
|
$: scaleTicks = scaleLinear()
|
|
14
15
|
.range([x, x + 100])
|
|
@@ -16,7 +17,7 @@
|
|
|
16
17
|
$: ticks = scale.ticks.apply(scale, [tickCount]).map((d) => ({ x: scaleTicks(d), label: d }))
|
|
17
18
|
|
|
18
19
|
$: colors = scale.range()
|
|
19
|
-
$: id = uniqueId('legend-')
|
|
20
|
+
// $: id = uniqueId('legend-')
|
|
20
21
|
</script>
|
|
21
22
|
|
|
22
23
|
<defs>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { uniq } from 'ramda'
|
|
3
|
+
|
|
4
|
+
export let size = 10
|
|
5
|
+
export let patternUnits = 'userSpaceOnUse'
|
|
6
|
+
/** @type {Array<import('./types').Pattern>} */
|
|
7
|
+
export let patterns = []
|
|
8
|
+
|
|
9
|
+
$: names = uniq(patterns.map(({ id }) => id))
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
{#if names.length < patterns.length}
|
|
13
|
+
<error> Patterns should be an array and should have unique names for each pattern </error>
|
|
14
|
+
{:else if patterns.length > 0}
|
|
15
|
+
<defs>
|
|
16
|
+
{#each patterns as { id, component, fill, stroke }}
|
|
17
|
+
<pattern {id} {patternUnits} width={size} height={size}>
|
|
18
|
+
<svelte:component this={component} {size} {fill} {stroke} />
|
|
19
|
+
</pattern>
|
|
20
|
+
{/each}
|
|
21
|
+
</defs>
|
|
22
|
+
{/if}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
export let small = false
|
|
3
|
-
export let label
|
|
4
|
-
export let angle = 0
|
|
5
|
-
export let anchor = 'middle'
|
|
6
2
|
export let x
|
|
7
3
|
export let y
|
|
4
|
+
export let text
|
|
5
|
+
export let angle = 0
|
|
6
|
+
export let small = false
|
|
7
|
+
export let anchor = 'middle'
|
|
8
|
+
|
|
8
9
|
|
|
9
10
|
$: transform = `translate(${x},${y}) rotate(${angle})`
|
|
11
|
+
$: anchor = ['start','middle','end'].includes(anchor) ? anchor : 'middle'
|
|
10
12
|
</script>
|
|
11
13
|
|
|
12
|
-
<text class="label" class:small text-anchor={anchor} {transform}>{
|
|
14
|
+
<text class="label" class:small text-anchor={anchor} {transform}>{text}</text>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
import { swatch, swatchGrid } from '../lib'
|
|
3
|
+
import Symbol from '../Symbol.svelte'
|
|
4
|
+
|
|
5
|
+
export let base = 'teal'
|
|
6
|
+
export let size = 4
|
|
7
|
+
export let shade = 600
|
|
8
|
+
|
|
9
|
+
$: grid = swatchGrid(Object.keys($swatch.symbols).length, size, 10)
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<svg viewBox="0 0 {grid.width} {grid.height}">
|
|
13
|
+
{#each grid.data as { x, y, r }, index}
|
|
14
|
+
<Symbol
|
|
15
|
+
{x}
|
|
16
|
+
{y}
|
|
17
|
+
r={(index + 1) / 2}
|
|
18
|
+
shape={$swatch.keys.symbol[6]}
|
|
19
|
+
fill={$swatch.palette[base][shade]}
|
|
20
|
+
stroke={$swatch.palette[base][shade]}
|
|
21
|
+
/>
|
|
22
|
+
{/each}
|
|
23
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Bar } from './Bar.svelte'
|
|
2
|
+
export { default as ColorRamp } from './ColorRamp.svelte'
|
|
3
|
+
export { default as ContinuousLegend } from './ContinuousLegend.svelte'
|
|
4
|
+
export { default as Label } from './Label.svelte'
|
|
5
|
+
export { default as DefinePatterns } from './DefinePatterns.svelte'
|
|
6
|
+
export { default as SymbolGrid } from './SymbolGrid.svelte'
|
package/src/index.js
CHANGED
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// export {
|
|
4
|
-
// export {
|
|
5
|
-
|
|
6
|
-
// export { default as Axis } from './chart/Axis.svelte'
|
|
7
|
-
export { default as Swatch } from './chart/Swatch.svelte'
|
|
8
|
-
// export { default as AxisTicks } from './chart/AxisTicks.svelte'
|
|
9
|
-
// export { default as AxisGrid } from './chart/AxisGrid.svelte'
|
|
10
|
-
// export { default as AxisLabels } from './chart/AxisLabels.svelte'
|
|
11
|
-
export { default as BarPlot } from './plots/BarPlot.svelte'
|
|
12
|
-
export { default as LinePlot } from './plots/LinePlot.svelte'
|
|
13
|
-
export { default as BoxPlot } from './plots/BoxPlot.svelte'
|
|
14
|
-
export { default as ViolinPlot } from './plots/ViolinPlot.svelte'
|
|
15
|
-
export * from './lib'
|
|
1
|
+
export { default as Chart } from './Chart.svelte'
|
|
2
|
+
export { default as Symbol } from './Symbol.svelte'
|
|
3
|
+
// export { default as Texture } from './Texture.svelte'
|
|
4
|
+
// export { default as PatternDefs } from './PatternDefs.svelte'
|
|
5
|
+
export * from './plots'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export function getFillPatterns(values, swatch, gray = false) {
|
|
2
|
+
const colors = gray ? swatch.keys.gray : swatch.keys.color
|
|
3
|
+
const max_colors = colors.length
|
|
4
|
+
const max_patterns = swatch.keys.pattern.length
|
|
5
|
+
|
|
6
|
+
const mix = values
|
|
7
|
+
.map((value, index) => ({
|
|
8
|
+
[value]: {
|
|
9
|
+
pattern: swatch.keys.pattern[index % max_patterns],
|
|
10
|
+
color: colors[index % max_colors]
|
|
11
|
+
}
|
|
12
|
+
}))
|
|
13
|
+
.reduce((acc, current) => ({ ...acc, ...current }), {})
|
|
14
|
+
return mix
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function getStrokePatterns() {}
|