@rokkit/chart 1.0.0-next.87 → 1.0.0-next.89

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 (80) hide show
  1. package/package.json +11 -6
  2. package/src/Chart.svelte +67 -0
  3. package/src/PatternDefs.svelte +14 -0
  4. package/src/Symbol.svelte +17 -0
  5. package/src/{chart/Texture.svelte → Texture.svelte} +3 -3
  6. package/src/elements/Bar.svelte +2 -2
  7. package/src/elements/ContinuousLegend.svelte +3 -2
  8. package/src/elements/DefinePatterns.svelte +22 -0
  9. package/src/elements/DiscreteLegend.svelte +1 -1
  10. package/src/elements/Label.svelte +7 -5
  11. package/src/elements/SymbolGrid.svelte +23 -0
  12. package/src/elements/index.js +6 -0
  13. package/src/index.js +5 -15
  14. package/src/lib/brewer.js +17 -0
  15. package/src/lib/chart.js +179 -160
  16. package/src/lib/grid.js +68 -0
  17. package/src/lib/index.js +4 -0
  18. package/src/lib/palette.js +279 -28
  19. package/src/lib/plots.js +23 -0
  20. package/src/lib/swatch.js +24 -8
  21. package/src/lib/ticks.js +19 -0
  22. package/src/patterns/Brick.svelte +17 -0
  23. package/src/patterns/Circles.svelte +18 -0
  24. package/src/patterns/CrossHatch.svelte +14 -0
  25. package/src/patterns/CurvedWave.svelte +9 -0
  26. package/src/patterns/Dots.svelte +19 -0
  27. package/src/patterns/OutlineCircles.svelte +15 -0
  28. package/src/patterns/Texture.svelte +20 -0
  29. package/src/patterns/Tile.svelte +17 -0
  30. package/src/patterns/Triangles.svelte +15 -0
  31. package/src/patterns/Waves.svelte +13 -0
  32. package/src/patterns/constants.js +43 -0
  33. package/src/patterns/index.js +13 -0
  34. package/src/patterns/paths/NamedPattern.svelte +12 -0
  35. package/src/patterns/paths/constants.js +7 -0
  36. package/src/patterns/templates/Circles.svelte +18 -0
  37. package/src/patterns/templates/Lines.svelte +17 -0
  38. package/src/patterns/templates/Path.svelte +17 -0
  39. package/src/patterns/templates/index.js +3 -0
  40. package/src/plots/Plot.svelte +36 -21
  41. package/src/plots/index.js +1 -10
  42. package/src/symbols/RoundedSquare.svelte +27 -0
  43. package/src/symbols/Shape.svelte +31 -0
  44. package/src/symbols/constants/index.js +7 -0
  45. package/src/symbols/index.js +9 -0
  46. package/src/chart/Axis.svelte +0 -81
  47. package/src/chart/AxisGrid.svelte +0 -22
  48. package/src/chart/Chart.svelte +0 -40
  49. package/src/chart/FacetGrid.svelte +0 -49
  50. package/src/chart/Legend.svelte +0 -16
  51. package/src/chart/Swatch.svelte +0 -84
  52. package/src/chart/SwatchButton.svelte +0 -29
  53. package/src/chart/SwatchGrid.svelte +0 -53
  54. package/src/chart/TexturedShape.svelte +0 -20
  55. package/src/chart/TimelapseChart.svelte +0 -90
  56. package/src/chart/Timer.svelte +0 -27
  57. package/src/elements/Tooltip.svelte +0 -19
  58. package/src/lib/axis.js +0 -77
  59. package/src/lib/color.js +0 -55
  60. package/src/lib/constants.js +0 -41
  61. package/src/lib/funnel.js +0 -230
  62. package/src/lib/geom.js +0 -99
  63. package/src/lib/heatmap.js +0 -68
  64. package/src/lib/lookup.js +0 -29
  65. package/src/lib/pattern.js +0 -182
  66. package/src/lib/rollup.js +0 -49
  67. package/src/lib/shape.js +0 -46
  68. package/src/lib/store.js +0 -63
  69. package/src/lib/summary.js +0 -28
  70. package/src/lib/theme.js +0 -31
  71. package/src/lib/utils.js +0 -158
  72. package/src/plots/BarPlot.svelte +0 -51
  73. package/src/plots/BarPlot2.svelte +0 -34
  74. package/src/plots/BoxPlot.svelte +0 -54
  75. package/src/plots/FunnelPlot.svelte +0 -26
  76. package/src/plots/HeatMapCalendar.svelte +0 -121
  77. package/src/plots/LinePlot.svelte +0 -51
  78. package/src/plots/RankBarPlot.svelte +0 -38
  79. package/src/plots/ScatterPlot.svelte +0 -28
  80. 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.87",
3
+ "version": "1.0.0-next.89",
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.87"
25
+ "shared-config": "1.0.0-next.89"
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.87",
38
- "@rokkit/core": "1.0.0-next.87",
39
- "@rokkit/molecules": "1.0.0-next.87",
40
- "@rokkit/stores": "1.0.0-next.87"
38
+ "@rokkit/atoms": "1.0.0-next.89",
39
+ "@rokkit/core": "1.0.0-next.89",
40
+ "@rokkit/molecules": "1.0.0-next.89",
41
+ "@rokkit/stores": "1.0.0-next.89"
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",
@@ -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 name = 'circle'
10
+ /** @type Object<string, any> */
11
+ export let using = components
12
+
13
+ $: component = using[name] || using.default
14
+ $: props = using[name] ? $$restProps : { name, ...$$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 contrast
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={contrast} stroke-width={thickness} />
14
+ <path d={path} fill="none" {stroke} stroke-width={thickness} />
15
15
  {/if}
16
16
  </pattern>
@@ -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} label={name} />
29
- <Label x={width} y={y + height - 14} anchor={textAnchor} label={formattedValue} small />
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}
@@ -6,7 +6,7 @@
6
6
  export let space = 2
7
7
  export let padding = 5
8
8
  export let scale
9
- export let tickCount
9
+ export let tickCount = 10
10
10
 
11
11
  $: sizeWithSpace = size + space
12
12
  $: ticks = scale.ticks.apply(scale, [tickCount])
@@ -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}>{label}</text>
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
- // export { aes } from './lib/aes'
2
- // export { timelapse } from './lib/timelapse'
3
- // export { axisTicks } from './lib/axis'
4
- // export { timer, elapsed } from './lib/timer'
5
- // export { default as Chart } from './chart/Chart.svelte'
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() {}