@rokkit/chart 1.0.0-next.35 → 1.0.0-next.37

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 (51) hide show
  1. package/package.json +14 -12
  2. package/src/chart/FacetGrid.svelte +6 -6
  3. package/src/chart/Swatch.svelte +2 -3
  4. package/src/chart/SwatchGrid.svelte +1 -2
  5. package/src/chart/TexturedShape.svelte +1 -1
  6. package/src/chart/TimelapseChart.svelte +3 -4
  7. package/src/elements/ColorRamp.svelte +1 -1
  8. package/src/elements/ContinuousLegend.svelte +1 -1
  9. package/src/index.js +1 -2
  10. package/src/{components/lib → lib}/chart.js +12 -6
  11. package/src/lib/color.js +59 -0
  12. package/src/{components/lib/color.js → lib/constants.js} +111 -56
  13. package/src/{components/lib → lib}/funnel.js +0 -2
  14. package/src/lib/geom.js +106 -0
  15. package/src/{plots → lib}/heatmap.js +2 -2
  16. package/src/lib/index.js +0 -0
  17. package/src/lib/{colors.js → palette.js} +3 -3
  18. package/src/{components/lib → lib}/rollup.js +1 -1
  19. package/src/lib/shape.js +52 -0
  20. package/src/{components → lib}/store.js +2 -2
  21. package/src/{components/lib → lib}/summary.js +0 -2
  22. package/src/{swatch.js → lib/swatch.js} +4 -4
  23. package/src/{components/lib/utils.js → lib/utils-2.js} +1 -41
  24. package/src/lib/utils.js +4 -0
  25. package/src/plots/BarPlot.svelte +2 -2
  26. package/src/{components/plots/BarPlot.svelte → plots/BarPlot2.svelte} +0 -2
  27. package/src/plots/FunnelPlot.svelte +2 -3
  28. package/src/plots/HeatMapCalendar.svelte +1 -1
  29. package/src/plots/LinePlot.svelte +1 -2
  30. package/src/plots/Plot.svelte +1 -1
  31. package/src/plots/ScatterPlot.svelte +1 -1
  32. package/src/plots/ViolinPlot.svelte +0 -1
  33. package/src/chart/PatternDefs.svelte +0 -13
  34. package/src/chart/Symbol.svelte +0 -40
  35. package/src/chart.js +0 -11
  36. package/src/components/index.js +0 -23
  37. package/src/components/lib/index.js +0 -19
  38. package/src/components/lib/shape.js +0 -199
  39. package/src/components/lib/timer.js +0 -41
  40. package/src/constants.js +0 -66
  41. package/src/elements/PatternDefs.svelte +0 -13
  42. package/src/elements/PatternMask.svelte +0 -20
  43. package/src/elements/Symbol.svelte +0 -38
  44. package/src/funnel.svelte +0 -35
  45. package/src/geom.js +0 -105
  46. package/src/lib/shapes.js +0 -144
  47. package/src/plots/old_ScatterPlot.svelte +0 -20
  48. /package/src/chart/{Grid.svelte → AxisGrid.svelte} +0 -0
  49. /package/src/{lookup.js → lib/lookup.js} +0 -0
  50. /package/src/{components/lib → lib}/pattern.js +0 -0
  51. /package/src/{components/lib → lib}/theme.js +0 -0
@@ -1,13 +0,0 @@
1
- <script>
2
- import PatternMask from './PatternMask.svelte'
3
- const size = 10
4
-
5
- export let thickness = 0.5
6
- export let patterns
7
- </script>
8
-
9
- <defs>
10
- {#each patterns as pattern}
11
- <PatternMask {...pattern} {thickness} {size} />
12
- {/each}
13
- </defs>
@@ -1,20 +0,0 @@
1
- <script>
2
- export let id
3
- // export let fill
4
- export let path
5
- // export let contrast
6
- export let thickness = 0.5
7
- export let patternUnits = 'userSpaceOnUse'
8
- export let size = 10
9
- </script>
10
-
11
- <pattern id="p-{id}" {patternUnits} width={size} height={size}>
12
- {#if path}
13
- <path d={path} fill="none" stroke="white" stroke-width={thickness} />
14
- <!-- {:else}
15
- <rect width={size} height={size} {fill} /> -->
16
- {/if}
17
- </pattern>
18
- <mask {id}>
19
- <rect x="0" y="0" width="100%" height="100%" fill="url(#p-{id})" />
20
- </mask>
@@ -1,38 +0,0 @@
1
- <script>
2
- // import { namedShapes } from '../lib/shape'
3
- import { swatchStore } from '../swatch'
4
-
5
- export let x = 0
6
- export let y = 0
7
- export let size = 10
8
- export let fill = 'none'
9
- export let stroke = 'currentColor'
10
- export let thickness = 0.5
11
-
12
- export let name = 'circle'
13
- // export let shape = null
14
-
15
- $: x = x - size / 2
16
- $: y = y - size / 2
17
-
18
- $: d = $swatchStore['shapes'][name](size)
19
- // typeof shape === 'function'
20
- // ? shape(size)
21
- // : (shape || name) in namedShapes
22
- // ? namedShapes[shape || name](size)
23
- // : namedShapes.circle(size)
24
- </script>
25
-
26
- <!-- svelte-ignore a11y-click-events-have-key-events -->
27
- <path
28
- {d}
29
- {fill}
30
- {stroke}
31
- transform="translate({x},{y})"
32
- stroke-width={thickness}
33
- fill-rule="evenodd"
34
- on:click
35
- on:mouseover
36
- on:mouseleave
37
- on:focus
38
- />
package/src/funnel.svelte DELETED
@@ -1,35 +0,0 @@
1
- <!-- <script context="module">
2
- /**
3
- * @type {import('@sveltejs/kit').Load}
4
- */
5
- export async function load({ page, fetch, session, stuff }) {
6
- const url = '/api/data/funnel'
7
- const response = await fetch(url)
8
-
9
- if (response.ok) {
10
- let result = await response.json()
11
-
12
- return {
13
- props: { data: result }
14
- }
15
- }
16
-
17
- return {
18
- status: response.status,
19
- error: new Error(`Could not load ${url}`)
20
- }
21
- }
22
- </script> -->
23
-
24
- <script>
25
- import { FunnelPlot, Chart } from '@rokkit/chart'
26
- export let data
27
-
28
- // let names = ['one', 'two', 'three'] // each one is a separate segment. max of Combined value at each stage is overall height/width
29
- // let groups = ['a', 'b', 'c'] // each group should have a value. individual values are used for each band height
30
- </script>
31
-
32
- <h1>Funnel</h1>
33
- <Chart {data} width={1200}>
34
- <FunnelPlot x="stage" y="count" fill="client" stat="sum" />
35
- </Chart>
package/src/geom.js DELETED
@@ -1,105 +0,0 @@
1
- import {
2
- sum,
3
- min,
4
- max,
5
- mean,
6
- mode,
7
- median,
8
- deviation,
9
- variance,
10
- flatRollup
11
- } from 'd3-array'
12
-
13
- const summaries = {
14
- identity: (value) => value,
15
- count: (values) => values.length,
16
- sum: (values) => sum(values),
17
- min: (values) => min(values),
18
- max: (values) => max(values),
19
- mean: (values) => mean(values),
20
- median: (values) => median(values),
21
- mode: (values) => mode(values),
22
- variance: (values) => variance(values),
23
- deviation: (values) => deviation(values)
24
- }
25
-
26
- /**
27
- * Returns an aggregator function for an input string or function.
28
- *
29
- * @param {string|function} stat
30
- * @returns
31
- */
32
- export function rollup(stat) {
33
- if (typeof stat === 'function') return stat
34
- if (typeof stat !== 'string')
35
- throw new TypeError('stat must be a string or function')
36
- if (!(stat in summaries)) throw new TypeError('Unknown stat: ' + stat)
37
-
38
- return summaries[stat]
39
- }
40
-
41
- /**
42
- * Aesthetics for a chart.
43
- *
44
- * @typedef Aesthetics
45
- * @property {string} x
46
- * @property {string} y
47
- * @property {string} [fill]
48
- * @property {string} [size]
49
- * @property {string} [color]
50
- * @property {string} [shape]
51
- * @property {string} [pattern]
52
- */
53
-
54
- /**
55
- *
56
- * @param {Array<any>} data
57
- * @param {Aesthetics} aes
58
- * @param {function|string} stat
59
- * @returns
60
- */
61
- export function aggregate(data, aes, stat = 'identity') {
62
- const agg = rollup(stat)
63
- const keys = ['color', 'fill', 'pattern', 'shape', 'size'].filter((k) =>
64
- Object.keys(aes).includes(k)
65
- )
66
-
67
- let groups = keys.map((k) => (d) => d[aes[k]])
68
-
69
- return flatRollup(
70
- data,
71
- (v) => agg(v.map((d) => d[aes.y])),
72
- (d) => d[aes.x],
73
- ...groups
74
- )
75
- }
76
-
77
- // export function geomBars(chart, aes) {
78
- // const { x, y, fill, color, pattern } = { ...aes, ...chart.aes }
79
- // return aggregate(chart.data, { x, y, fill, color, pattern })
80
- // }
81
-
82
- // export function geomLines(chart, aes) {
83
- // const { x, y, color } = { ...aes, ...chart.aes }
84
- // return aggregate(chart.data, { x, y, color })
85
- // }
86
-
87
- // export function geomViolin(chart, aes) {
88
- // const { x, y, fill, color, pattern } = { ...aes, ...chart.aes }
89
- // return { x, y, fill, color, pattern, ...opts }
90
- // }
91
-
92
- // export function geomArea(chart, aes) {
93
- // const { x, y, fill, color, pattern } = { ...aes, ...chart.aes }
94
- // return { x, y, fill, color, pattern, ...opts }
95
- // }
96
-
97
- // export function geomTrend(chart, aes) {
98
- // const { x, y, fill, color, pattern } = { ...aes, ...chart.aes }
99
- // return { x, y, fill, color, pattern, ...opts }
100
- // }
101
-
102
- // export function geomPoints(chart, aes) {
103
- // const { x, y, fill, color, shape, size } = { ...aes, ...chart.aes }
104
- // return { x, y, fill, color, shape, size, ...opts }
105
- // }
package/src/lib/shapes.js DELETED
@@ -1,144 +0,0 @@
1
- const names = [
2
- 'circle',
3
- 'square',
4
- 'triangle',
5
- 'diamond',
6
- 'star',
7
- 'rhombus',
8
- 'heart'
9
- ]
10
- const data = {
11
- square: ['M', 1, 1, 'L', 9, 1, 'L', 9, 9, 'L', 1, 9, 'Z'],
12
- circle: [
13
- ['M', 0, 5],
14
- ['A', 5, 5, 0, 0, 0, 10, 5],
15
- ['A', 5, 5, 0, 0, 0, 0, 5]
16
- ],
17
- triangle: ['M', 5, 0, 'L', 10, 10, 'L', 0, 10, 'Z'],
18
- diamond: [
19
- ['M', 5, 0],
20
- ['A', 7, 7, 0, 0, 0, 10, 5],
21
- ['A', 7, 7, 0, 0, 0, 5, 10],
22
- ['A', 7, 7, 0, 0, 0, 0, 5],
23
- ['A', 7, 7, 0, 0, 0, 5, 0]
24
- ],
25
- rhombus: ['M', 0, 5, 'L', 5, 0, 'L', 10, 5, 'L', 5, 10, 'Z'],
26
- heart: [
27
- ['M', 9, 5],
28
- ['A', 0.8, 0.8, 0, 0, 0, 5, 2],
29
- ['A', 0.8, 0.8, 0, 0, 0, 1, 5],
30
- ['L', 5, 9],
31
- ['L', 9, 5]
32
- ],
33
- star: [
34
- ['M', 4.80001, 0],
35
- ['L', 5.92258, 3.45491],
36
- ['H', 9.55529],
37
- ['L', 6.61637, 5.59017],
38
- ['L', 7.73894, 9.04509],
39
- ['L', 4.80001, 6.90983],
40
- ['L', 1.86108, 9.04509],
41
- ['L', 2.98365, 5.59017],
42
- ['L', 0.0447266, 3.45491],
43
- ['H', 3.67744],
44
- ['L', 4.80001, 0],
45
- ['Z']
46
- ]
47
- }
48
-
49
- function scaledPath(size, x) {
50
- if (Array.isArray(x)) return x.map((x) => scaledPath(size, x)).join(' ')
51
- return typeof size === 'number' ? x * size : x
52
- }
53
-
54
- export const shapes = names.map((name) => ({
55
- name,
56
- path: (s) => scaledPath(s, data[name])
57
- }))
58
-
59
- export const namedShapes = {
60
- square: (s) =>
61
- `M${0.1 * s} 0` +
62
- `A${0.1 * s} ${0.1 * s} 0 0 0 0 ${0.1 * s}V${0.9 * s}` +
63
- `A${0.1 * s} ${0.1 * s} 0 0 0 ${0.1 * s} ${s}H${0.9 * s}` +
64
- `A${0.1 * s} ${0.1 * s} 0 0 0 ${s} ${0.9 * s}V${0.1 * s}` +
65
- `A${0.1 * s} ${0.1 * s} 0 0 0 ${0.9 * s} 0Z`,
66
- circle: (s) =>
67
- `M0 ${0.5 * s}` +
68
- `A${0.5 * s} ${0.5 * s} 0 0 0 ${s} ${0.5 * s}` +
69
- `A${0.5 * s} ${0.5 * s} 0 0 0 0 ${0.5 * s}`,
70
- diamond: (s) =>
71
- `M${0.5 * s} 0` +
72
- `A${0.6 * s} ${0.6 * s} 0 0 0 ${s} ${0.5 * s}` +
73
- `A${0.6 * s} ${0.6 * s} 0 0 0 ${0.5 * s} ${s}` +
74
- `A${0.6 * s} ${0.6 * s} 0 0 0 0 ${0.5 * s}` +
75
- `A${0.6 * s} ${0.6 * s} 0 0 0 ${0.5 * s} 0`,
76
- triangle: (s) =>
77
- `M${0.5 * s} ${0.0866 * s}L0 ${0.9234 * s}L${s} ${0.9234 * s}Z`,
78
- rhombus: (s) =>
79
- `M${0.5 * s} 0` +
80
- `L${s} ${0.5 * s}` +
81
- `L${0.5 * s} ${s}` +
82
- `L0 ${0.5 * s}Z`,
83
- star: (s) =>
84
- `M${0.5 * s} ${0.05 * s}` +
85
- `L${0.606 * s} ${0.36 * s}` +
86
- `L${s} ${0.36 * s}` +
87
- `L${0.685 * s} ${0.59 * s}` +
88
- `L${0.81 * s} ${0.95 * s}` +
89
- `L${0.5 * s} ${0.725 * s}` +
90
- `L${0.19 * s} ${0.95 * s}` +
91
- `L${0.315 * s} ${0.59 * s}` +
92
- `L0 ${0.36 * s}` +
93
- `L${0.394 * s} ${0.36 * s}Z`,
94
- heart: (s) =>
95
- `M${0.9 * s} ${0.5 * s}` +
96
- `A${0.08 * s} ${0.08 * s} 0 0 0 ${0.5 * s} ${0.2 * s}` +
97
- `A${0.08 * s} ${0.08 * s} 0 0 0 ${0.1 * s} ${0.5 * s}` +
98
- `L${0.5 * s} ${0.9 * s}` +
99
- `L${0.9 * s} ${0.5 * s}`,
100
- shurikan: (s) =>
101
- `M${0.3 * s} ${0.1 * s}L${0.5 * s} 0L${0.7 * s} ${0.1 * s}` +
102
- `A ${0.05 * s} ${0.05 * s} 0 0 0 ${0.9 * s} ${0.35 * s}` +
103
- `L${s} ${0.5 * s}L${0.9 * s} ${0.7 * s}` +
104
- `A ${0.05 * s} ${0.05 * s} 0 0 0 ${0.7 * s} ${0.9 * s}` +
105
- `L${0.5 * s} ${s}L${0.3 * s} ${0.9 * s}` +
106
- `A${0.05 * s} ${0.05 * s} 0 0 0 ${0.1 * s} ${0.7 * s}` +
107
- `L0 ${0.5 * s}L${0.1 * s} ${0.3 * s}` +
108
- `A${0.05 * s} ${0.05 * s} 0 0 0 ${0.3 * s} ${0.1 * s}` +
109
- `M${0.4 * s} ${0.5 * s}` +
110
- `A${0.1 * s} ${0.1 * s} 0 0 0 ${0.6 * s} ${0.5 * s}` +
111
- `A${0.1 * s} ${0.1 * s} 0 0 0 ${0.4 * s} ${0.5 * s}`,
112
- crosshair: (s) =>
113
- `M${0.2 * s} ${0.5 * s}` +
114
- `A${0.3 * s} ${0.3 * s} 0 0 0 ${0.8 * s} ${0.5 * s}` +
115
- `A${0.3 * s} ${0.3 * s} 0 0 0 ${0.2 * s} ${0.5 * s}` +
116
- `M0 ${0.5 * s}` +
117
- `L${s} ${0.5 * s}` +
118
- `M${0.5 * s} 0` +
119
- `L${0.5 * s} ${s}`,
120
- crossboats: (s) =>
121
- `M0 ${0.5 * s}` +
122
- `A${0.6 * s} ${0.4 * s} 0 0 0 ${s} ${0.5 * s}` +
123
- `A${0.6 * s} ${0.4 * s} 0 0 0 0 ${0.5 * s}` +
124
- `M${0.5 * s} 0` +
125
- `A${0.4 * s} ${0.6 * s} 0 0 0 ${0.5 * s} ${s}` +
126
- `A${0.4 * s} ${0.6 * s} 0 0 0 ${0.5 * s} 0`,
127
- curvedrhombus: (s) =>
128
- `M${0.1 * s} ${0.1 * s}` +
129
- `A${0.5 * s} ${0.5 * s} 0 0 0 ${0.9 * s} ${0.1 * s}` +
130
- `A${0.5 * s} ${0.5 * s} 0 0 0 ${0.9 * s} ${0.9 * s}` +
131
- `A${0.5 * s} ${0.5 * s} 0 0 0 ${0.1 * s} ${0.9 * s}` +
132
- `A${0.5 * s} ${0.5 * s} 0 0 0 ${0.1 * s} ${0.1 * s}`,
133
- fourflags: (s) =>
134
- `M${0.5 * s} ${0.3 * s}` +
135
- `A${0.2 * s} ${0.1 * s} 0 0 0 ${0.5 * s} ${0.1 * s}` +
136
- `L${0.5 * s} ${0.9 * s}` +
137
- `M${0.5 * s} ${0.7 * s}` +
138
- `A${0.2 * s} ${0.1 * s} 0 0 0 ${0.5 * s} ${0.9 * s}` +
139
- `M${0.3 * s} ${0.5 * s}` +
140
- `A${0.1 * s} ${0.2 * s} 0 0 0 ${0.1 * s} ${0.5 * s}` +
141
- `L${0.9 * s} ${0.5 * s}` +
142
- `M${0.7 * s} ${0.5 * s}` +
143
- `A${0.1 * s} ${0.2 * s} 0 0 0 ${0.9 * s} ${0.5 * s}`
144
- }
@@ -1,20 +0,0 @@
1
- <script>
2
- import { getContext } from 'svelte'
3
- import { colorBrewer } from '../lib/colors'
4
-
5
- let chart = getContext('chart')
6
-
7
- export let size = $chart.height / 128
8
-
9
- $: colors = colorBrewer($chart.data.map((d) => d.fill))
10
- $: points = $chart.data.map((d) => ({
11
- cx: $chart.scale.x(d.x),
12
- cy: $chart.scale.y(d.y),
13
- fill: colors[d.fill]
14
- }))
15
- // support shapes and sizes for scatter
16
- </script>
17
-
18
- {#each points as { cx, cy, fill }}
19
- <circle {cx} {cy} r={size} {fill} fill-opacity="0.5" />
20
- {/each}
File without changes
File without changes
File without changes
File without changes