@rokkit/chart 1.0.0-next.16 → 1.0.0-next.161

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 (173) hide show
  1. package/README.md +150 -46
  2. package/package.json +42 -45
  3. package/src/AnimatedPlot.svelte +383 -0
  4. package/src/Chart.svelte +95 -0
  5. package/src/ChartProvider.svelte +10 -0
  6. package/src/FacetPlot/Panel.svelte +37 -0
  7. package/src/FacetPlot.svelte +114 -0
  8. package/src/Plot/Arc.svelte +29 -0
  9. package/src/Plot/Area.svelte +32 -0
  10. package/src/Plot/Axis.svelte +95 -0
  11. package/src/Plot/Bar.svelte +54 -0
  12. package/src/Plot/Grid.svelte +34 -0
  13. package/src/Plot/Legend.svelte +233 -0
  14. package/src/Plot/Line.svelte +37 -0
  15. package/src/Plot/Point.svelte +40 -0
  16. package/src/Plot/Root.svelte +62 -0
  17. package/src/Plot/Timeline.svelte +95 -0
  18. package/src/Plot/Tooltip.svelte +87 -0
  19. package/src/Plot/index.js +9 -0
  20. package/src/Plot.svelte +297 -0
  21. package/src/PlotState.svelte.js +350 -0
  22. package/src/Sparkline.svelte +108 -0
  23. package/src/Symbol.svelte +21 -0
  24. package/src/Texture.svelte +18 -0
  25. package/src/charts/AreaChart.svelte +27 -0
  26. package/src/charts/BarChart.svelte +28 -0
  27. package/src/charts/BoxPlot.svelte +21 -0
  28. package/src/charts/BubbleChart.svelte +23 -0
  29. package/src/charts/LineChart.svelte +26 -0
  30. package/src/charts/PieChart.svelte +35 -0
  31. package/src/charts/ScatterPlot.svelte +26 -0
  32. package/src/charts/ViolinPlot.svelte +21 -0
  33. package/src/crossfilter/CrossFilter.svelte +42 -0
  34. package/src/crossfilter/FilterBar.svelte +24 -0
  35. package/src/crossfilter/FilterHistogram.svelte +290 -0
  36. package/src/crossfilter/FilterSlider.svelte +83 -0
  37. package/src/crossfilter/createCrossFilter.svelte.js +124 -0
  38. package/src/elements/Bar.svelte +22 -24
  39. package/src/elements/ColorRamp.svelte +20 -22
  40. package/src/elements/ContinuousLegend.svelte +20 -17
  41. package/src/elements/DefinePatterns.svelte +24 -0
  42. package/src/elements/DiscreteLegend.svelte +15 -15
  43. package/src/elements/Label.svelte +4 -8
  44. package/src/elements/SymbolGrid.svelte +22 -0
  45. package/src/elements/index.js +6 -0
  46. package/src/examples/BarChartExample.svelte +81 -0
  47. package/src/geoms/Arc.svelte +126 -0
  48. package/src/geoms/Area.svelte +78 -0
  49. package/src/geoms/Bar.svelte +200 -0
  50. package/src/geoms/Box.svelte +113 -0
  51. package/src/geoms/LabelPill.svelte +17 -0
  52. package/src/geoms/Line.svelte +123 -0
  53. package/src/geoms/Point.svelte +145 -0
  54. package/src/geoms/Violin.svelte +56 -0
  55. package/src/geoms/lib/areas.js +154 -0
  56. package/src/geoms/lib/bars.js +223 -0
  57. package/src/index.js +74 -16
  58. package/src/lib/brewer.js +25 -0
  59. package/src/lib/brewing/BoxBrewer.svelte.js +14 -0
  60. package/src/lib/brewing/CartesianBrewer.svelte.js +21 -0
  61. package/src/lib/brewing/PieBrewer.svelte.js +14 -0
  62. package/src/lib/brewing/QuartileBrewer.svelte.js +51 -0
  63. package/src/lib/brewing/ViolinBrewer.svelte.js +14 -0
  64. package/src/lib/brewing/axes.svelte.js +270 -0
  65. package/src/lib/brewing/bars.svelte.js +201 -0
  66. package/src/lib/brewing/brewer.svelte.js +277 -0
  67. package/src/lib/brewing/colors.js +51 -0
  68. package/src/lib/brewing/dimensions.svelte.js +56 -0
  69. package/src/lib/brewing/index.svelte.js +205 -0
  70. package/src/lib/brewing/legends.svelte.js +137 -0
  71. package/src/lib/brewing/marks/arcs.js +43 -0
  72. package/src/lib/brewing/marks/areas.js +72 -0
  73. package/src/lib/brewing/marks/bars.js +49 -0
  74. package/src/lib/brewing/marks/boxes.js +75 -0
  75. package/src/lib/brewing/marks/lines.js +55 -0
  76. package/src/lib/brewing/marks/points.js +105 -0
  77. package/src/lib/brewing/marks/violins.js +90 -0
  78. package/src/lib/brewing/patterns.js +45 -0
  79. package/src/lib/brewing/scales.js +51 -0
  80. package/src/lib/brewing/scales.svelte.js +82 -0
  81. package/src/lib/brewing/stats.js +74 -0
  82. package/src/lib/brewing/symbols.js +10 -0
  83. package/src/lib/brewing/types.js +73 -0
  84. package/src/lib/chart.js +221 -0
  85. package/src/lib/context.js +131 -0
  86. package/src/lib/grid.js +85 -0
  87. package/src/lib/keyboard-nav.js +37 -0
  88. package/src/lib/plot/chartProps.js +76 -0
  89. package/src/lib/plot/crossfilter.js +16 -0
  90. package/src/lib/plot/facet.js +58 -0
  91. package/src/lib/plot/frames.js +81 -0
  92. package/src/lib/plot/helpers.js +14 -0
  93. package/src/lib/plot/preset.js +67 -0
  94. package/src/lib/plot/scales.js +81 -0
  95. package/src/lib/plot/stat.js +92 -0
  96. package/src/lib/plot/types.js +65 -0
  97. package/src/lib/preset.js +41 -0
  98. package/src/lib/scales.svelte.js +151 -0
  99. package/src/lib/swatch.js +13 -0
  100. package/src/lib/ticks.js +46 -0
  101. package/src/lib/utils.js +111 -118
  102. package/src/lib/xscale.js +31 -0
  103. package/src/patterns/DefinePatterns.svelte +32 -0
  104. package/src/patterns/PatternDef.svelte +27 -0
  105. package/src/patterns/index.js +4 -0
  106. package/src/patterns/patterns.js +360 -0
  107. package/src/patterns/scale.js +116 -0
  108. package/src/spec/chart-spec.js +72 -0
  109. package/src/symbols/RoundedSquare.svelte +33 -0
  110. package/src/symbols/Shape.svelte +37 -0
  111. package/src/symbols/constants/index.js +4 -0
  112. package/src/symbols/index.js +9 -0
  113. package/src/symbols/outline.svelte +60 -0
  114. package/src/symbols/solid.svelte +60 -0
  115. package/LICENSE +0 -21
  116. package/src/chart/FacetGrid.svelte +0 -51
  117. package/src/chart/Grid.svelte +0 -34
  118. package/src/chart/Legend.svelte +0 -16
  119. package/src/chart/PatternDefs.svelte +0 -13
  120. package/src/chart/Swatch.svelte +0 -93
  121. package/src/chart/SwatchButton.svelte +0 -29
  122. package/src/chart/SwatchGrid.svelte +0 -55
  123. package/src/chart/Symbol.svelte +0 -37
  124. package/src/chart/Texture.svelte +0 -16
  125. package/src/chart/TexturedShape.svelte +0 -27
  126. package/src/chart/TimelapseChart.svelte +0 -97
  127. package/src/chart/Timer.svelte +0 -27
  128. package/src/chart.js +0 -9
  129. package/src/components/charts/Axis.svelte +0 -66
  130. package/src/components/charts/Chart.svelte +0 -35
  131. package/src/components/index.js +0 -23
  132. package/src/components/lib/axis.js +0 -0
  133. package/src/components/lib/chart.js +0 -187
  134. package/src/components/lib/color.js +0 -327
  135. package/src/components/lib/funnel.js +0 -204
  136. package/src/components/lib/index.js +0 -19
  137. package/src/components/lib/pattern.js +0 -190
  138. package/src/components/lib/rollup.js +0 -55
  139. package/src/components/lib/shape.js +0 -199
  140. package/src/components/lib/summary.js +0 -145
  141. package/src/components/lib/theme.js +0 -23
  142. package/src/components/lib/timer.js +0 -41
  143. package/src/components/lib/utils.js +0 -165
  144. package/src/components/plots/BarPlot.svelte +0 -36
  145. package/src/components/plots/BoxPlot.svelte +0 -54
  146. package/src/components/plots/ScatterPlot.svelte +0 -30
  147. package/src/components/store.js +0 -70
  148. package/src/constants.js +0 -66
  149. package/src/elements/PatternDefs.svelte +0 -13
  150. package/src/elements/PatternMask.svelte +0 -20
  151. package/src/elements/Symbol.svelte +0 -38
  152. package/src/elements/Tooltip.svelte +0 -23
  153. package/src/funnel.svelte +0 -35
  154. package/src/geom.js +0 -105
  155. package/src/lib/axis.js +0 -75
  156. package/src/lib/colors.js +0 -32
  157. package/src/lib/geom.js +0 -4
  158. package/src/lib/shapes.js +0 -144
  159. package/src/lib/timer.js +0 -44
  160. package/src/lookup.js +0 -29
  161. package/src/plots/BarPlot.svelte +0 -55
  162. package/src/plots/BoxPlot.svelte +0 -0
  163. package/src/plots/FunnelPlot.svelte +0 -33
  164. package/src/plots/HeatMap.svelte +0 -5
  165. package/src/plots/HeatMapCalendar.svelte +0 -129
  166. package/src/plots/LinePlot.svelte +0 -55
  167. package/src/plots/Plot.svelte +0 -25
  168. package/src/plots/RankBarPlot.svelte +0 -38
  169. package/src/plots/ScatterPlot.svelte +0 -20
  170. package/src/plots/ViolinPlot.svelte +0 -11
  171. package/src/plots/heatmap.js +0 -70
  172. package/src/plots/index.js +0 -10
  173. package/src/swatch.js +0 -11
@@ -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
- />
@@ -1,23 +0,0 @@
1
- <script>
2
- export let left
3
- export let top
4
- export let hidden = true
5
- </script>
6
-
7
- <div
8
- class="tooltip {$$props.class}"
9
- {hidden}
10
- style="--top: {top};--left: {left}"
11
- >
12
- <slot />
13
- </div>
14
-
15
- <style lang="postcss">
16
- .tooltip {
17
- padding: 1em 0.5em;
18
- left: var(--left);
19
- top: var(--top);
20
- position: absolute;
21
- z-index: 10;
22
- }
23
- </style>
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/axis.js DELETED
@@ -1,75 +0,0 @@
1
- export function axis(scale) {
2
- const origin = {
3
- x: scale.x.ticks
4
- ? scale.x(Math.max(0, Math.min(...scale.x.domain())))
5
- : scale.x.range()[0],
6
- y: scale.y.ticks
7
- ? scale.y(Math.max(0, Math.min(...scale.y.domain())))
8
- : scale.y.range()[0]
9
- }
10
- const ticks = {
11
- x: axisTicks(scale.x, { axis: 'x', origin }),
12
- y: axisTicks(scale.y, { axis: 'y', origin })
13
- }
14
- return { origin, ticks }
15
- }
16
-
17
- export function axisTicks(scale, opts) {
18
- let [minRange, maxRange] = scale.range()
19
- let count = Math.abs((maxRange - minRange) / 40)
20
- let ticks = scale.domain()
21
- let offset = 0
22
- let { axis, format, origin } = {
23
- axis: 'x',
24
- format: (x) => x,
25
- origin: { x: 0, y: 0 },
26
- ...opts
27
- }
28
- if (scale.ticks) {
29
- ticks = scale.ticks(count)
30
- } else {
31
- offset = Math.sign(maxRange - minRange) * (scale.bandwidth() / 2)
32
- count = Math.min(Math.round(count), scale.domain().length)
33
- if (count < scale.domain().length) {
34
- let diff = scale.domain().length - count
35
- ticks = ticks.filter((d, i) => i % diff == 0)
36
- }
37
- // let diff = scale.domain().length - count
38
- }
39
- ticks = ticks
40
- .map((t) => ({
41
- label: format(t),
42
- pos: scale(t)
43
- }))
44
- .map(({ label, pos }) => ({
45
- label,
46
- offset: { x: axis === 'x' ? offset : 0, y: axis === 'y' ? offset : 0 },
47
- x: axis === 'x' ? pos : origin.x,
48
- y: axis === 'y' ? pos : origin.y
49
- }))
50
-
51
- return ticks
52
- }
53
-
54
- export class Axis {
55
- constructor(name, chart, offset) {
56
- this.name = ['x', 'y'].includes(name) ? name : 'x'
57
- this.chart = chart
58
- this.offset = offset
59
- }
60
-
61
- set offset(value) {
62
- const [min, max] = this.chart.scale[this.name].range()
63
- const otherAxis = this.name === 'x' ? 'y' : 'x'
64
- const origin = this.chart.origin[otherAxis]
65
-
66
- this.offset = value * (origin == min ? 1 : origin == max ? -1 : 0)
67
- }
68
-
69
- // get domain() {
70
- // let coords =
71
- // (coords[axis + '1'] =
72
- // coords[axis + '2'] =
73
- // origin[axis] - offset[axis])
74
- // }
75
- }
package/src/lib/colors.js DELETED
@@ -1,32 +0,0 @@
1
- // import { writable } from 'svelte/store'
2
- import { repeatAcross } from '../lib/utils'
3
-
4
- const palette = [
5
- '#FFDE6B',
6
- '#EF89EE',
7
- '#F79F1E',
8
- '#02B8FF',
9
- '#9F84EC',
10
- '#15CBC4',
11
- '#0092FD',
12
- '#F63A57',
13
- '#A2CB39',
14
- '#FF6E2F',
15
- '#FEB8B9',
16
- '#af7aa1',
17
- '#7EFFF5'
18
- ]
19
-
20
- export class Palette {
21
- constructor(colors = palette) {
22
- this.colors = colors
23
- }
24
-
25
- set colors(value) {
26
- if (value && Array.isArray(value)) this.colors = value
27
- }
28
- }
29
-
30
- export function colorBrewer(values) {
31
- return repeatAcross(palette, [...new Set(values)])
32
- }
package/src/lib/geom.js DELETED
@@ -1,4 +0,0 @@
1
- // export function violin(data, mapping) {}
2
- // export function bar(data, mapping) {}
3
- // export function scatter(data, mapping) {}
4
- // export function line(data, mapping) {}
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
- }
package/src/lib/timer.js DELETED
@@ -1,44 +0,0 @@
1
- import { writable } from 'svelte/store'
2
-
3
- let req
4
- let prev
5
- const elapsed = writable(0)
6
-
7
- const tick = (timestamp) => {
8
- if (!prev) prev = timestamp
9
- const diff = Math.round(timestamp - prev)
10
-
11
- if (diff > 0) {
12
- prev = timestamp
13
- }
14
- elapsed.update((e) => e + diff)
15
- req = window.requestAnimationFrame(tick)
16
- }
17
-
18
- const timer = {
19
- start() {
20
- if (typeof window === 'undefined') return
21
- else if (!req) {
22
- prev = null
23
- req = window.requestAnimationFrame(tick)
24
- }
25
- },
26
- stop() {
27
- if (typeof window === 'undefined') return
28
- else if (req) {
29
- window.cancelAnimationFrame(req)
30
- req = null
31
- }
32
- },
33
- toggle() {
34
- req ? timer.stop() : timer.start()
35
- },
36
- set(val) {
37
- if (typeof val === 'number') elapsed.set(val)
38
- },
39
- reset() {
40
- timer.set(0)
41
- }
42
- }
43
-
44
- export { timer, elapsed }
package/src/lookup.js DELETED
@@ -1,29 +0,0 @@
1
- import { writable } from 'svelte/store'
2
-
3
- // import { __patterns__, __colors__, __shapes__ } from './constants'
4
-
5
- export const swatchStore = writable({})
6
-
7
- // export function swatch(colors, patterns, shapes, defaults) {
8
- // const limit = min([colors.length, patterns.length, shapes.length])
9
-
10
- // swatchStore.set({
11
- // colors: colors.slice(0, limit),
12
- // patterns: patterns.slice(0, limit),
13
- // shapes: shapes.slice(0, limit),
14
- // defaults: {
15
- // color: '#eeeeee',
16
- // shape: __shapes__.circle,
17
- // pattern: __patterns__.empty,
18
- // ...defaults
19
- // }
20
- // })
21
- // }
22
-
23
- export function spread(values, across, filler) {
24
- const unique = [...new Set(values)]
25
- const lookup = unique.map((k, i) => ({
26
- [k]: i < across.length ? across[i] : filler
27
- }))
28
- return (k) => lookup[k]
29
- }
@@ -1,55 +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 labels = false
8
- export let fontSize = $chart.height / 32
9
- export let color = 'white'
10
-
11
- $: fills = colorBrewer($chart.data.map((d) => d.fill))
12
- // export let limit = 8
13
-
14
- $: data = $chart.data.map((d) => ({
15
- x: $chart.flipCoords ? $chart.scale.x(0) : $chart.scale.x(d.x),
16
- y: $chart.flipCoords ? $chart.scale.y(d.y) : $chart.scale.y(d.y),
17
- y0: $chart.scale.y(0),
18
- width: $chart.flipCoords
19
- ? $chart.scale.x(d.x) - $chart.scale.x(0)
20
- : $chart.scale.x.bandwidth(),
21
- height: $chart.flipCoords
22
- ? $chart.scale.y.bandwidth()
23
- : $chart.scale.y(0) - $chart.scale.y(d.y),
24
- fill: fills[d.fill],
25
- label: {
26
- x: $chart.flipCoords
27
- ? $chart.scale.x(d.x) - $chart.scale.x(0) - 10
28
- : $chart.scale.x.bandwidth() / 2,
29
- y: $chart.flipCoords ? $chart.scale.y.bandwidth() / 2 : 10,
30
- angle: $chart.flipCoords ? 0 : -90,
31
- text: $chart.flipCoords ? d.y + ' (' + d.x + ')' : d.x + ' (' + d.y + ')'
32
- }
33
- }))
34
-
35
- // $: console.log(data)
36
- </script>
37
-
38
- {#each data as { x, y, width, height, fill, label }}
39
- <rect {x} {y} {width} {height} {fill} />
40
- {#if labels}
41
- {@const tx = x + label.x}
42
- {@const ty = y + label.y}
43
- <text
44
- x={tx}
45
- y={ty}
46
- transform="rotate({label.angle},{tx},{ty})"
47
- font-size={fontSize}
48
- text-anchor="end"
49
- alignment-baseline="middle"
50
- fill={color}
51
- >
52
- {label.text}
53
- </text>
54
- {/if}
55
- {/each}
File without changes
@@ -1,33 +0,0 @@
1
- <script>
2
- import { getContext } from 'svelte'
3
- import { compact } from '../components/lib/utils'
4
- import { funnel } from '../components/lib/funnel'
5
-
6
- const chart = getContext('chart')
7
-
8
- export let x
9
- export let y
10
- export let fill
11
- export let curve = 'bump'
12
- export let stat = 'count'
13
-
14
- $: aes = { ...$chart.aes, ...compact({ x, y, fill, stat, curve }) }
15
- $: data = funnel($chart.data, aes, $chart.width, $chart.height)
16
- // $: console.log(data)
17
- </script>
18
-
19
- {#each data.stats as stat, i}
20
- <path d={data.path(stat.value)} fill={$chart.theme.colors[i]} />
21
- {/each}
22
- {#each data.labels as label, index}
23
- {#if index < data.labels.length - 1}
24
- <line
25
- x1={label.x1}
26
- x2={label.x2}
27
- y1={label.y1}
28
- y2={label.y2}
29
- stroke="currentColor"
30
- />
31
- {/if}
32
- <text x={label.x} y={label.y} fill="currentColor">{label.label}</text>
33
- {/each}
@@ -1,5 +0,0 @@
1
- <script>
2
- let y // axis (day of week)
3
- let x // week Number (week starts sunday)
4
- let weeks //weeks
5
- </script>