@rokkit/chart 1.0.0-next.124 → 1.0.0-next.127

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/README.md CHANGED
@@ -5,7 +5,7 @@ Data-driven chart components for Svelte inspired by [dc.js](https://dc-js.github
5
5
  ## Installation
6
6
 
7
7
  ```bash
8
- npm install @rokkit/chart
8
+ bun add @rokkit/chart
9
9
  ```
10
10
 
11
11
  ## Usage
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rokkit/chart",
3
- "version": "1.0.0-next.124",
3
+ "version": "1.0.0-next.127",
4
4
  "type": "module",
5
5
  "description": "Data-driven chart components",
6
6
  "author": "Jerry Thomas <me@jerrythomas.name>",
@@ -35,13 +35,13 @@
35
35
  "@rokkit/core": "latest",
36
36
  "@rokkit/data": "latest",
37
37
  "@rokkit/states": "latest",
38
- "bits-ui": "^2.10.0",
39
38
  "d3-array": "^3.2.4",
39
+ "d3-format": "^3.1.2",
40
40
  "d3-axis": "^3.0.0",
41
41
  "d3-scale": "^4.0.2",
42
42
  "d3-scale-chromatic": "^3.1.0",
43
43
  "d3-selection": "^3.0.0",
44
44
  "d3-transition": "^3.0.1",
45
- "ramda": "^0.31.3"
45
+ "ramda": "^0.32.0"
46
46
  }
47
47
  }
@@ -60,6 +60,7 @@
60
60
  {@const barY = initialY > 0 ? brewer.getDimensions().innerHeight : bar.y}
61
61
  {@const barHeight = initialHeight > 0 ? 0 : bar.height}
62
62
 
63
+ <!-- svelte-ignore a11y_no_noninteractive_element_interactions, a11y_click_events_have_key_events -->
63
64
  <rect
64
65
  class="bar"
65
66
  x={bar.x}
@@ -68,11 +69,11 @@
68
69
  height={barHeight}
69
70
  fill={bar.color}
70
71
  {opacity}
71
- on:click={(event) => handleClick(event, bar)}
72
- on:mouseenter={(event) => {
72
+ onclick={(event) => handleClick(event, bar)}
73
+ onmouseenter={(event) => {
73
74
  event.target.setAttribute('opacity', Math.min(opacity + 0.2, 1))
74
75
  }}
75
- on:mouseleave={(event) => {
76
+ onmouseleave={(event) => {
76
77
  event.target.setAttribute('opacity', opacity)
77
78
  }}
78
79
  style="transition: y {animationDuration}ms ease, height {animationDuration}ms ease;"
@@ -9,18 +9,16 @@
9
9
  margin = { top: 20, right: 30, bottom: 40, left: 50 },
10
10
  fill = null,
11
11
  responsive = true,
12
- animationDuration = 300
12
+ animationDuration = 300,
13
+ children
13
14
  } = $props()
14
15
 
15
16
  // Create chart brewer instance
16
- let brewer = $state(
17
- new ChartBrewer({
18
- width,
19
- height,
20
- margin,
21
- animationDuration
22
- })
23
- )
17
+ let brewer = $state(new ChartBrewer())
18
+
19
+ $effect(() => {
20
+ brewer.setDimensions({ width, height, margin })
21
+ })
24
22
 
25
23
  // Chart dimensions derived from brewer
26
24
  let dimensions = $derived(brewer.getDimensions())
@@ -38,11 +36,6 @@
38
36
  brewer.createScales()
39
37
  })
40
38
 
41
- // Update chart dimensions when props change
42
- $effect(() => {
43
- brewer.setDimensions({ width, height, margin })
44
- })
45
-
46
39
  // Provide chart context to child components
47
40
  setContext('chart-brewer', brewer)
48
41
 
@@ -91,7 +84,7 @@
91
84
  transform="translate({dimensions.margin.left}, {dimensions.margin.top})"
92
85
  data-plot-canvas
93
86
  >
94
- <slot />
87
+ {@render children?.()}
95
88
  </g>
96
89
  </svg>
97
90
  </div>
@@ -1,11 +1,5 @@
1
1
  <script>
2
- export let id
3
- export let path
4
- export let fill = 'currentColor'
5
- export let stroke = 'currentColor'
6
- export let thickness = 0.5
7
- export let patternUnits = 'userSpaceOnUse'
8
- export let size = 10
2
+ let { id, path, fill = 'currentColor', stroke = 'currentColor', thickness = 0.5, patternUnits = 'userSpaceOnUse', size = 10 } = $props()
9
3
  </script>
10
4
 
11
5
  <pattern {id} {patternUnits} width={size} height={size}>
@@ -1,29 +1,33 @@
1
1
  <script>
2
2
  import { format } from 'd3-format'
3
+ import { get } from 'svelte/store'
3
4
  import Label from './Label.svelte'
4
5
 
5
- export let rank
6
- export let value
7
- export let name
8
- export let formatString = '.1%'
9
- export let scales
10
- export let height = 60
11
- export let fill
12
- export let spaceBetween = 5
6
+ let {
7
+ rank,
8
+ value,
9
+ name,
10
+ formatString = '.1%',
11
+ scales,
12
+ height = 60,
13
+ fill,
14
+ spaceBetween = 5
15
+ } = $props()
13
16
 
14
17
  const textHeight = 16
15
18
  const charWidth = 12
16
- $: y = rank * (height + spaceBetween)
17
- $: width = $scales.x(value)
19
+ let y = $derived(rank * (height + spaceBetween))
20
+ let width = $derived(get(scales).x(value))
18
21
 
19
- $: textWidth = name.length * charWidth
20
- $: textOffset = width <= textWidth ? width + charWidth : width
21
- $: textAnchor = textOffset > width ? 'start' : 'end'
22
+ let textWidth = $derived(name.length * charWidth)
23
+ let textOffset = $derived(width <= textWidth ? width + charWidth : width)
24
+ let textAnchor = $derived(textOffset > width ? 'start' : 'end')
22
25
 
23
- $: formattedValue = format(formatString)(value)
26
+ let formattedValue = $derived(format(formatString)(value))
27
+ let xOrigin = $derived(get(scales).x(0))
24
28
  </script>
25
29
 
26
- <rect x={$scales.x(0)} {y} {width} {height} {fill} opacity={0.5} />
27
- <rect x={$scales.x(0)} {y} width={5} {height} {fill} />
30
+ <rect x={xOrigin} {y} {width} {height} {fill} opacity={0.5} />
31
+ <rect x={xOrigin} {y} width={5} {height} {fill} />
28
32
  <Label x={width} y={y + textHeight + 8} anchor={textAnchor} text={name} />
29
33
  <Label x={width} y={y + height - 14} anchor={textAnchor} text={formattedValue} small />
@@ -1,23 +1,27 @@
1
1
  <script>
2
2
  import { scaleLinear } from 'd3-scale'
3
- // import { id as uniqueId } from '@rokkit/core'
4
3
 
5
- export let x = 0
6
- export let y = 0
7
- export let textSize = 5
8
- export let height = 10
9
- export let width = 100
10
- export let tickCount = 5
11
- export let scale
12
- export let id = 'legend'
4
+ let {
5
+ x = 0,
6
+ y = 0,
7
+ textSize = 5,
8
+ height = 10,
9
+ width = 100,
10
+ tickCount = 5,
11
+ scale,
12
+ id = 'legend'
13
+ } = $props()
13
14
 
14
- $: scaleTicks = scaleLinear()
15
- .range([x, x + 100])
16
- .domain(scale.domain())
17
- $: ticks = scale.ticks.apply(scale, [tickCount]).map((d) => ({ x: scaleTicks(d), label: d }))
15
+ let scaleTicks = $derived(
16
+ scaleLinear()
17
+ .range([x, x + 100])
18
+ .domain(scale.domain())
19
+ )
20
+ let ticks = $derived(
21
+ scale.ticks.apply(scale, [tickCount]).map((d) => ({ x: scaleTicks(d), label: d }))
22
+ )
18
23
 
19
- $: colors = scale.range()
20
- // $: id = uniqueId('legend-')
24
+ let colors = $derived(scale.range())
21
25
  </script>
22
26
 
23
27
  <defs>
@@ -1,21 +1,23 @@
1
1
  <script>
2
2
  import { uniq } from 'ramda'
3
3
 
4
- export let size = 10
5
- export let patternUnits = 'userSpaceOnUse'
6
- /** @type {Array<import('./types').Pattern>} */
7
- export let patterns = []
4
+ let {
5
+ size = 10,
6
+ patternUnits = 'userSpaceOnUse',
7
+ /** @type {Array<import('./types').Pattern>} */
8
+ patterns = []
9
+ } = $props()
8
10
 
9
- $: names = uniq(patterns.map(({ id }) => id))
11
+ let names = $derived(uniq(patterns.map(({ id }) => id)))
10
12
  </script>
11
13
 
12
14
  {#if names.length < patterns.length}
13
15
  <error> Patterns should be an array and should have unique names for each pattern </error>
14
16
  {:else if patterns.length > 0}
15
17
  <defs>
16
- {#each patterns as { id, component, fill, stroke }, index (index)}
18
+ {#each patterns as { id, component: Component, fill, stroke }, index (index)}
17
19
  <pattern {id} {patternUnits} width={size} height={size}>
18
- <svelte:component this={component} {size} {fill} {stroke} />
20
+ <Component {size} {fill} {stroke} />
19
21
  </pattern>
20
22
  {/each}
21
23
  </defs>
@@ -1,15 +1,17 @@
1
1
  <script>
2
- export let x = 0
3
- export let y = 0
4
- export let textSize = 5
5
- export let size = 10
6
- export let space = 2
7
- export let padding = 5
8
- export let scale
9
- export let tickCount = 10
2
+ let {
3
+ x = 0,
4
+ y = 0,
5
+ textSize = 5,
6
+ size = 10,
7
+ space = 2,
8
+ padding = 5,
9
+ scale,
10
+ tickCount = 10
11
+ } = $props()
10
12
 
11
- $: sizeWithSpace = size + space
12
- $: ticks = scale.ticks.apply(scale, [tickCount])
13
+ let sizeWithSpace = $derived(size + space)
14
+ let ticks = $derived(scale.ticks.apply(scale, [tickCount]))
13
15
  </script>
14
16
 
15
17
  {#each ticks as tick, i (i)}
@@ -1,13 +1,15 @@
1
1
  <script>
2
- export let x
3
- export let y
4
- export let text
5
- export let angle = 0
6
- export let small = false
7
- export let anchor = 'middle'
2
+ let {
3
+ x,
4
+ y,
5
+ text,
6
+ angle = 0,
7
+ small = false,
8
+ anchor = 'middle'
9
+ } = $props()
8
10
 
9
- $: transform = `translate(${x},${y}) rotate(${angle})`
10
- $: anchor = ['start', 'middle', 'end'].includes(anchor) ? anchor : 'middle'
11
+ let transform = $derived(`translate(${x},${y}) rotate(${angle})`)
12
+ let validAnchor = $derived(['start', 'middle', 'end'].includes(anchor) ? anchor : 'middle')
11
13
  </script>
12
14
 
13
- <text class="label" class:small text-anchor={anchor} {transform}>{text}</text>
15
+ <text class="label" class:small text-anchor={validAnchor} {transform}>{text}</text>
@@ -1,12 +1,16 @@
1
1
  <script>
2
+ import { get } from 'svelte/store'
2
3
  import { swatch, swatchGrid } from '../old_lib'
3
4
  import Symbol from '../Symbol.svelte'
4
5
 
5
- export let base = 'teal'
6
- export let size = 4
7
- export let shade = 600
6
+ let {
7
+ base = 'teal',
8
+ size = 4,
9
+ shade = 600
10
+ } = $props()
8
11
 
9
- $: grid = swatchGrid($swatch.keys.symbol.length, size, 10)
12
+ let swatchValue = $derived(get(swatch))
13
+ let grid = $derived(swatchGrid(swatchValue.keys.symbol.length, size, 10))
10
14
  </script>
11
15
 
12
16
  <svg viewBox="0 0 {grid.width} {grid.height}">
@@ -15,9 +19,9 @@
15
19
  {x}
16
20
  {y}
17
21
  size={r * 2}
18
- name={$swatch.keys.symbol[index]}
19
- fill={$swatch.palette[base][shade]}
20
- stroke={$swatch.palette[base][shade]}
22
+ name={swatchValue.keys.symbol[index]}
23
+ fill={swatchValue.palette[base][shade]}
24
+ stroke={swatchValue.palette[base][shade]}
21
25
  />
22
26
  {/each}
23
27
  </svg>
@@ -1,15 +1,13 @@
1
1
  <script>
2
- export let size = 10
3
- export let thickness = 0.5
4
- export let stroke = 'currentColor'
2
+ let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
5
3
 
6
- $: lines = [
4
+ let lines = $derived([
7
5
  { x1: 0, y1: 0.25 * size, x2: 0.5 * size, y2: 0.25 * size },
8
6
  { x1: 0.5 * size, y1: 0.75 * size, x2: size, y2: 0.75 * size },
9
7
  { x1: 0, y1: 0, x2: 0, y2: size },
10
8
  { x1: size, y1: 0, x2: size, y2: size },
11
9
  { x1: 0.5 * size, y1: 0, x2: 0.5 * size, y2: size }
12
- ]
10
+ ])
13
11
  </script>
14
12
 
15
13
  {#each lines as line, index (index)}
@@ -1,16 +1,16 @@
1
1
  <script>
2
- export let size = 10
3
- export let fill = 'currentColor'
4
- export let stroke = 'currentColor'
2
+ let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
5
3
 
6
- $: data = [
7
- { cx: 0, cy: 0, r: 0.5 },
8
- { cx: 1, cy: 1, r: 0.5 }
9
- ].map(({ cx, cy, r }) => ({
10
- cx: cx * size,
11
- cy: cy * size,
12
- r: r * size
13
- }))
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
14
  </script>
15
15
 
16
16
  {#each data as { cx, cy, r }, index (index)}
@@ -1,12 +1,10 @@
1
1
  <script>
2
- export let size = 10
3
- export let thickness = 0.5
4
- export let stroke = 'currentColor'
2
+ let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
5
3
 
6
- $: lines = [
4
+ let lines = $derived([
7
5
  { x1: 0, y1: 0, x2: size, y2: size },
8
6
  { x1: 0, y1: size, x2: size, y2: 0 }
9
- ]
7
+ ])
10
8
  </script>
11
9
 
12
10
  {#each lines as line, index (index)}
@@ -1,9 +1,7 @@
1
1
  <script>
2
2
  import NamedPattern from './paths/NamedPattern.svelte'
3
3
 
4
- export let size = 10
5
- export let thickness = 0.5
6
- export let stroke = 'currentColor'
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor' } = $props()
7
5
  </script>
8
6
 
9
7
  <NamedPattern {size} {thickness} {stroke} name="curvedWave" />
@@ -1,17 +1,18 @@
1
1
  <script>
2
- export let size = 10
3
- export let fill = 'currentColor'
2
+ let { size = 10, fill = 'currentColor' } = $props()
4
3
 
5
- $: data = [
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 }))
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
+ )
15
16
  </script>
16
17
 
17
18
  {#each data as { cx, cy, r }, index (index)}
@@ -1,13 +1,11 @@
1
1
  <script>
2
- export let size = 10
3
- export let fill = 'currentColor'
4
- export let stroke = 'currentColor'
2
+ let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
5
3
 
6
- const centres = [
4
+ let centres = $derived([
7
5
  { cx: 0, cy: 0 },
8
6
  { cx: size, cy: size }
9
- ]
10
- $: r = 0.5 * size
7
+ ])
8
+ let r = $derived(0.5 * size)
11
9
  </script>
12
10
 
13
11
  {#each centres as { cx, cy }, index (index)}
@@ -1,15 +1,14 @@
1
1
  <script>
2
2
  const thickness = 0.5
3
- export let size = 10
4
- export let stroke = 'currentColor'
3
+ let { size = 10, stroke = 'currentColor' } = $props()
5
4
 
6
- const lines = [
5
+ let lines = $derived([
7
6
  { x1: 0, y1: 0.25 * size, x2: 0.5 * size, y2: 0.25 * size },
8
7
  { x1: 0.5 * size, y1: 0.75 * size, x2: size, y2: 0.75 * size },
9
8
  { x1: 0, y1: 0, x2: 0, y2: size },
10
9
  { x1: size, y1: 0, x2: size, y2: size },
11
10
  { x1: 0.5 * size, y1: 0, x2: 0.5 * size, y2: size }
12
- ]
11
+ ])
13
12
  </script>
14
13
 
15
14
  {#each lines as line, index (index)}
@@ -1,13 +1,11 @@
1
1
  <script>
2
- export let size = 10
3
- export let fill = 'currentColor'
4
- export let stroke = 'currentColor'
2
+ let { size = 10, fill = 'currentColor', stroke = 'currentColor' } = $props()
5
3
 
6
- const polygons = [
4
+ let polygons = $derived([
7
5
  [0, 0.5 * size, 0.5 * size, size, 0, size],
8
6
  [0.5 * size, 0, 0, 0, 0, 0.5 * size],
9
7
  [size, 0, 0.5 * size, 0.5 * size, size, size]
10
- ]
8
+ ])
11
9
  </script>
12
10
 
13
11
  {#each polygons as points, index (index)}
@@ -1,13 +1,9 @@
1
1
  <script>
2
2
  import { scaledPath } from '@rokkit/core'
3
3
 
4
- export let size = 10
5
- export let thickness = 0.5
6
- export let stroke = 'currentColor'
7
- export let fill = 'none'
8
- export let data = []
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor', fill = 'none', data = [] } = $props()
9
5
 
10
- $: d = scaledPath(size, data)
6
+ let d = $derived(scaledPath(size, data))
11
7
  </script>
12
8
 
13
9
  <path {d} {stroke} stroke-width={thickness} {fill} />
@@ -1,12 +1,9 @@
1
1
  <script>
2
2
  import { patterns } from './constants'
3
3
 
4
- export let size = 10
5
- export let thickness = 0.5
6
- export let stroke = 'currentColor'
7
- export let name = 'cross-hatch'
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor', name = 'cross-hatch' } = $props()
8
5
 
9
- $: d = patterns[name](size)
6
+ let d = $derived(patterns[name](size))
10
7
  </script>
11
8
 
12
9
  <path {d} {stroke} stroke-width={thickness} fill="none" />
@@ -1,12 +1,8 @@
1
1
  <script>
2
- export let x = 0
3
- export let y = 0
4
- export let size = 1
5
- export let fill = 'currentColor'
6
- export let stroke = 'currentColor'
2
+ let { x = 0, y = 0, size = 1, fill = 'currentColor', stroke = 'currentColor', onclick, onmouseover, onmouseleave, onfocus, ...restProps } = $props()
7
3
 
8
- $: r = size * 3.534
9
- $: props = { rx: r * 0.1, ry: r * 0.1, ...$$restProps }
4
+ let r = $derived(size * 3.534)
5
+ let props = $derived({ rx: r * 0.1, ry: r * 0.1, ...restProps })
10
6
  </script>
11
7
 
12
8
  <rect
@@ -18,9 +14,9 @@
18
14
  {stroke}
19
15
  {...props}
20
16
  role="button"
21
- on:click
22
- on:mouseover
23
- on:mouseleave
24
- on:focus
17
+ {onclick}
18
+ {onmouseover}
19
+ {onmouseleave}
20
+ {onfocus}
25
21
  tabindex="0"
26
22
  />
@@ -1,19 +1,12 @@
1
1
  <script>
2
2
  import { namedShapes } from './constants'
3
3
 
4
- export let x = 0
5
- export let y = 0
6
- export let size = 1
7
- export let fill = 'none'
8
- export let stroke = 'currentColor'
9
- export let thickness = 1
4
+ let { x = 0, y = 0, size = 1, fill = 'none', stroke = 'currentColor', thickness = 1, name = 'circle', onclick, onmouseover, onmouseleave, onfocus, onblur } = $props()
10
5
 
11
- export let name = 'circle'
12
-
13
- $: d = name in namedShapes ? namedShapes[name](size) : namedShapes['circle'](size)
6
+ let d = $derived(name in namedShapes ? namedShapes[name](size) : namedShapes['circle'](size))
14
7
  </script>
15
8
 
16
- <!-- svelte-ignore a11y-click-events-have-key-events -->
9
+ <!-- svelte-ignore a11y_click_events_have_key_events -->
17
10
  <path
18
11
  {d}
19
12
  {fill}
@@ -22,10 +15,10 @@
22
15
  stroke-width={thickness}
23
16
  fill-rule="evenodd"
24
17
  role="button"
25
- on:click
26
- on:mouseover
27
- on:mouseleave
28
- on:focus
29
- on:blur
18
+ {onclick}
19
+ {onmouseover}
20
+ {onmouseleave}
21
+ {onfocus}
22
+ {onblur}
30
23
  tabindex="0"
31
24
  />
@@ -3,14 +3,11 @@
3
3
  import * as templates from './shapes'
4
4
  import { pick } from 'ramda'
5
5
 
6
- export let size = 10
7
- export let fill = 'none'
8
- export let stroke = 'none'
9
- export let thickness = 0.5
10
- export let name = 'Waves'
6
+ let { size = 10, fill = 'none', stroke = 'none', thickness = 0.5, name = 'Waves' } = $props()
11
7
 
12
- $: pattern = library[name]
13
- $: props = pick(pattern.allowed ?? [], { fill, stroke, thickness })
8
+ let pattern = $derived(library[name])
9
+ let props = $derived(pick(pattern.allowed ?? [], { fill, stroke, thickness }))
10
+ let Component = $derived(templates[pattern.component])
14
11
  </script>
15
12
 
16
- <svelte:component this={templates[pattern.component]} {size} {...props} data={pattern.data} />
13
+ <Component {size} {...props} data={pattern.data} />
@@ -1,14 +1,11 @@
1
1
  <script>
2
- export let size = 10
3
- export let fill = 'currentColor'
4
- export let stroke = 'currentColor'
5
- export let data
2
+ let { size = 10, fill = 'currentColor', stroke = 'currentColor', data } = $props()
6
3
 
7
- $: circles = data.map(({ cx, cy, r }) => ({
4
+ let circles = $derived(data.map(({ cx, cy, r }) => ({
8
5
  cx: cx * size,
9
6
  cy: cy * size,
10
7
  r: r * size
11
- }))
8
+ })))
12
9
  </script>
13
10
 
14
11
  {#each circles as { cx, cy, r }, index (index)}
@@ -1,15 +1,12 @@
1
1
  <script>
2
- export let size = 10
3
- export let thickness = 0.5
4
- export let stroke = 'currentColor'
5
- export let data = []
2
+ let { size = 10, thickness = 0.5, stroke = 'currentColor', data = [] } = $props()
6
3
 
7
- $: lines = data.map(({ x1, y1, x2, y2 }) => ({
4
+ let lines = $derived(data.map(({ x1, y1, x2, y2 }) => ({
8
5
  x1: x1 * size,
9
6
  y1: y1 * size,
10
7
  x2: x2 * size,
11
8
  y2: y2 * size
12
- }))
9
+ })))
13
10
  </script>
14
11
 
15
12
  {#each lines as line, index (index)}
@@ -1,12 +1,9 @@
1
1
  <script>
2
2
  import { scaledPath } from '@rokkit/core'
3
3
 
4
- export let size = 10
5
- export let thickness = 0.5
6
- export let stroke = 'currentColor'
7
- export let data = []
4
+ let { size = 10, thickness = 0.5, stroke = 'currentColor', data = [] } = $props()
8
5
 
9
- $: d = scaledPath(size, data)
6
+ let d = $derived(scaledPath(size, data))
10
7
  </script>
11
8
 
12
9
  <path {d} {stroke} stroke-width={thickness} fill="none" />
@@ -1,16 +1,7 @@
1
1
  <script>
2
- export let size = 10
3
- export let thickness = 0.5
4
- export let fill = 'currentColor'
5
- export let stroke = 'currentColor'
6
- export let data = []
2
+ let { size = 10, thickness = 0.5, fill = 'currentColor', stroke = 'currentColor', data = [] } = $props()
7
3
 
8
- const polygons = data.map((points) => points.map((point) => point * size).join(', '))
9
- // [
10
- // [0, 0.5 * size, 0.5 * size, size, 0, size],
11
- // [0.5 * size, 0, 0, 0, 0, 0.5 * size],
12
- // [size, 0, 0.5 * size, 0.5 * size, size, size]
13
- // ]
4
+ let polygons = $derived(data.map((points) => points.map((point) => point * size).join(', ')))
14
5
  </script>
15
6
 
16
7
  {#each polygons as points, index (index)}