@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.
Files changed (150) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +150 -46
  3. package/dist/Plot/index.d.ts +5 -0
  4. package/dist/elements/index.d.ts +6 -0
  5. package/dist/index.d.ts +14 -0
  6. package/dist/lib/brewing/axes.svelte.d.ts +66 -0
  7. package/dist/lib/brewing/bars.svelte.d.ts +56 -0
  8. package/dist/lib/brewing/dimensions.svelte.d.ts +35 -0
  9. package/dist/lib/brewing/index.svelte.d.ts +118 -0
  10. package/dist/lib/brewing/legends.svelte.d.ts +48 -0
  11. package/dist/lib/brewing/scales.svelte.d.ts +24 -0
  12. package/dist/lib/brewing/types.d.ts +162 -0
  13. package/dist/lib/context.d.ts +13 -0
  14. package/dist/lib/scales.svelte.d.ts +35 -0
  15. package/dist/lib/utils.d.ts +60 -0
  16. package/dist/old_lib/brewer.d.ts +9 -0
  17. package/dist/old_lib/chart.d.ts +40 -0
  18. package/dist/old_lib/grid.d.ts +72 -0
  19. package/dist/old_lib/index.d.ts +4 -0
  20. package/dist/old_lib/plots.d.ts +3 -0
  21. package/dist/old_lib/swatch.d.ts +285 -0
  22. package/dist/old_lib/ticks.d.ts +36 -0
  23. package/dist/old_lib/utils.d.ts +1 -0
  24. package/dist/patterns/index.d.ts +9 -0
  25. package/dist/patterns/paths/constants.d.ts +1 -0
  26. package/dist/symbols/constants/index.d.ts +1 -0
  27. package/dist/symbols/index.d.ts +5 -0
  28. package/dist/template/constants.d.ts +43 -0
  29. package/dist/template/shapes/index.d.ts +4 -0
  30. package/package.json +34 -44
  31. package/src/Plot/Axis.svelte +95 -0
  32. package/src/Plot/Bar.svelte +96 -0
  33. package/src/Plot/Grid.svelte +68 -0
  34. package/src/Plot/Legend.svelte +127 -0
  35. package/src/Plot/Root.svelte +107 -0
  36. package/src/Plot/index.js +5 -0
  37. package/src/Symbol.svelte +21 -0
  38. package/src/Texture.svelte +18 -0
  39. package/src/elements/Bar.svelte +22 -24
  40. package/src/elements/ColorRamp.svelte +20 -22
  41. package/src/elements/ContinuousLegend.svelte +20 -17
  42. package/src/elements/DefinePatterns.svelte +24 -0
  43. package/src/elements/DiscreteLegend.svelte +15 -15
  44. package/src/elements/Label.svelte +4 -8
  45. package/src/elements/SymbolGrid.svelte +23 -0
  46. package/src/elements/index.js +6 -0
  47. package/src/examples/BarChartExample.svelte +81 -0
  48. package/src/index.js +18 -16
  49. package/src/lib/brewing/axes.svelte.js +265 -0
  50. package/src/lib/brewing/bars.svelte.js +177 -0
  51. package/src/lib/brewing/dimensions.svelte.js +56 -0
  52. package/src/lib/brewing/index.svelte.js +205 -0
  53. package/src/lib/brewing/legends.svelte.js +137 -0
  54. package/src/lib/brewing/scales.svelte.js +106 -0
  55. package/src/lib/brewing/types.js +73 -0
  56. package/src/lib/context.js +133 -0
  57. package/src/lib/scales.svelte.js +172 -0
  58. package/src/lib/utils.js +107 -120
  59. package/src/old_lib/brewer.js +25 -0
  60. package/src/old_lib/chart.js +213 -0
  61. package/src/old_lib/grid.js +85 -0
  62. package/src/old_lib/index.js +4 -0
  63. package/src/old_lib/plots.js +27 -0
  64. package/src/old_lib/swatch.js +16 -0
  65. package/src/old_lib/ticks.js +46 -0
  66. package/src/old_lib/utils.js +8 -0
  67. package/src/patterns/Brick.svelte +15 -0
  68. package/src/patterns/Circles.svelte +18 -0
  69. package/src/patterns/CrossHatch.svelte +12 -0
  70. package/src/patterns/CurvedWave.svelte +7 -0
  71. package/src/patterns/Dots.svelte +20 -0
  72. package/src/patterns/OutlineCircles.svelte +13 -0
  73. package/src/patterns/README.md +3 -0
  74. package/src/patterns/Tile.svelte +16 -0
  75. package/src/patterns/Triangles.svelte +13 -0
  76. package/src/patterns/Waves.svelte +9 -0
  77. package/src/patterns/index.js +14 -0
  78. package/src/patterns/paths/NamedPattern.svelte +9 -0
  79. package/src/patterns/paths/constants.js +4 -0
  80. package/src/symbols/RoundedSquare.svelte +33 -0
  81. package/src/symbols/Shape.svelte +37 -0
  82. package/src/symbols/constants/index.js +4 -0
  83. package/src/symbols/index.js +9 -0
  84. package/src/symbols/outline.svelte +60 -0
  85. package/src/symbols/solid.svelte +60 -0
  86. package/src/template/Texture.svelte +13 -0
  87. package/src/template/constants.js +43 -0
  88. package/src/template/shapes/Circles.svelte +15 -0
  89. package/src/template/shapes/Lines.svelte +16 -0
  90. package/src/template/shapes/Path.svelte +9 -0
  91. package/src/template/shapes/Polygons.svelte +15 -0
  92. package/src/template/shapes/index.js +4 -0
  93. package/src/chart/FacetGrid.svelte +0 -51
  94. package/src/chart/Grid.svelte +0 -34
  95. package/src/chart/Legend.svelte +0 -16
  96. package/src/chart/PatternDefs.svelte +0 -13
  97. package/src/chart/Swatch.svelte +0 -93
  98. package/src/chart/SwatchButton.svelte +0 -29
  99. package/src/chart/SwatchGrid.svelte +0 -55
  100. package/src/chart/Symbol.svelte +0 -37
  101. package/src/chart/Texture.svelte +0 -16
  102. package/src/chart/TexturedShape.svelte +0 -27
  103. package/src/chart/TimelapseChart.svelte +0 -97
  104. package/src/chart/Timer.svelte +0 -27
  105. package/src/chart.js +0 -9
  106. package/src/components/charts/Axis.svelte +0 -66
  107. package/src/components/charts/Chart.svelte +0 -35
  108. package/src/components/index.js +0 -23
  109. package/src/components/lib/axis.js +0 -0
  110. package/src/components/lib/chart.js +0 -187
  111. package/src/components/lib/color.js +0 -327
  112. package/src/components/lib/funnel.js +0 -204
  113. package/src/components/lib/index.js +0 -19
  114. package/src/components/lib/pattern.js +0 -190
  115. package/src/components/lib/rollup.js +0 -55
  116. package/src/components/lib/shape.js +0 -199
  117. package/src/components/lib/summary.js +0 -145
  118. package/src/components/lib/theme.js +0 -23
  119. package/src/components/lib/timer.js +0 -41
  120. package/src/components/lib/utils.js +0 -165
  121. package/src/components/plots/BarPlot.svelte +0 -36
  122. package/src/components/plots/BoxPlot.svelte +0 -54
  123. package/src/components/plots/ScatterPlot.svelte +0 -30
  124. package/src/components/store.js +0 -70
  125. package/src/constants.js +0 -66
  126. package/src/elements/PatternDefs.svelte +0 -13
  127. package/src/elements/PatternMask.svelte +0 -20
  128. package/src/elements/Symbol.svelte +0 -38
  129. package/src/elements/Tooltip.svelte +0 -23
  130. package/src/funnel.svelte +0 -35
  131. package/src/geom.js +0 -105
  132. package/src/lib/axis.js +0 -75
  133. package/src/lib/colors.js +0 -32
  134. package/src/lib/geom.js +0 -4
  135. package/src/lib/shapes.js +0 -144
  136. package/src/lib/timer.js +0 -44
  137. package/src/lookup.js +0 -29
  138. package/src/plots/BarPlot.svelte +0 -55
  139. package/src/plots/BoxPlot.svelte +0 -0
  140. package/src/plots/FunnelPlot.svelte +0 -33
  141. package/src/plots/HeatMap.svelte +0 -5
  142. package/src/plots/HeatMapCalendar.svelte +0 -129
  143. package/src/plots/LinePlot.svelte +0 -55
  144. package/src/plots/Plot.svelte +0 -25
  145. package/src/plots/RankBarPlot.svelte +0 -38
  146. package/src/plots/ScatterPlot.svelte +0 -20
  147. package/src/plots/ViolinPlot.svelte +0 -11
  148. package/src/plots/heatmap.js +0 -70
  149. package/src/plots/index.js +0 -10
  150. package/src/swatch.js +0 -11
@@ -0,0 +1,8 @@
1
+ import { scaledPath } from '@rokkit/core'
2
+
3
+ export function scaledPathCollection(paths) {
4
+ return Object.entries(paths).reduce(
5
+ (acc, [key, value]) => ({ ...acc, [key]: (s) => scaledPath(s, value) }),
6
+ {}
7
+ )
8
+ }
@@ -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,7 @@
1
+ <script>
2
+ import NamedPattern from './paths/NamedPattern.svelte'
3
+
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
5
+ </script>
6
+
7
+ <NamedPattern {size} {thickness} {stroke} name="curvedWave" />
@@ -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,3 @@
1
+ # Patterns
2
+
3
+ These patterns are inspired from https://superdesigner.co/tools/svg-backgrounds
@@ -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,4 @@
1
+ import { scaledPathCollection } from '../../old_lib/utils'
2
+ import paths from './patterns.json'
3
+
4
+ export const patterns = scaledPathCollection(paths)
@@ -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,4 @@
1
+ import { scaledPathCollection } from '../../old_lib/utils'
2
+ import paths from './shapes.json' with { type: 'json' }
3
+
4
+ export const namedShapes = scaledPathCollection(paths)
@@ -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,9 @@
1
+ <script>
2
+ import { scaledPath } from '@rokkit/core'
3
+
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor', data = [] } = $props()
5
+
6
+ let d = $derived(scaledPath(size, data))
7
+ </script>
8
+
9
+ <path {d} {stroke} stroke-width={thickness} fill="none" />
@@ -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}
@@ -0,0 +1,4 @@
1
+ export { default as Circles } from './Circles.svelte'
2
+ export { default as Lines } from './Lines.svelte'
3
+ export { default as Path } from './Path.svelte'
4
+ export { default as Polygons } from './Polygons.svelte'
@@ -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>
@@ -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>
@@ -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>
@@ -1,13 +0,0 @@
1
- <script>
2
- import Texture from './Texture.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
- <Texture {...pattern} {thickness} {size} />
12
- {/each}
13
- </defs>