layerchart 0.36.2 → 0.36.4

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.
@@ -33,6 +33,7 @@ $: getDimensions = createDimensionGetter(getContext('LayerCake'), {
33
33
  outer: groupPaddingOuter,
34
34
  },
35
35
  });
36
+ $: dimensions = $getDimensions(bar);
36
37
  </script>
37
38
 
38
39
  <Rect
@@ -42,7 +43,7 @@ $: getDimensions = createDimensionGetter(getContext('LayerCake'), {
42
43
  {stroke}
43
44
  stroke-width={strokeWidth}
44
45
  rx={radius}
45
- {...$getDimensions(bar)}
46
+ {...dimensions}
46
47
  {...$$restProps}
47
48
  on:click
48
49
  />
@@ -2,6 +2,7 @@
2
2
  import { scaleCanvas } from 'layercake';
3
3
  import { geoContext } from './GeoContext.svelte';
4
4
  import Circle from './Circle.svelte';
5
+ import Group from './Group.svelte';
5
6
  /** Latitude */
6
7
  export let lat;
7
8
  /** Longitude */
@@ -27,9 +28,9 @@ $: if (renderContext === 'canvas' && $ctx) {
27
28
 
28
29
  {#if renderContext === 'svg'}
29
30
  {#if $$slots.default}
30
- <g transform="translate({x},{y})">
31
+ <Group {x} {y} {...$$restProps}>
31
32
  <slot />
32
- </g>
33
+ </Group>
33
34
  {:else}
34
35
  <Circle cx={x} cy={y} {...$$restProps} />
35
36
  {/if}
@@ -14,13 +14,13 @@ const geo = geoContext();
14
14
  $: tile = d3Tile()
15
15
  .size([$width, $height])
16
16
  .scale($geo.scale() * 2 * Math.PI)
17
- .translate($geo([0, 0]))
17
+ .translate($geo([0, 0]) ?? [0, 0]) // TODO: Only works with Mercator
18
18
  .tileSize(tileSize)
19
19
  .zoomDelta(zoomDelta);
20
20
  $: tiles = tile();
21
21
  $: ({
22
22
  translate: [tx, ty],
23
- scale: k
23
+ scale: k,
24
24
  } = tiles);
25
25
  $: renderContext = canvas ? 'canvas' : 'svg';
26
26
  $: ctx = canvas?.ctx;
@@ -6,32 +6,35 @@ const geo = geoContext();
6
6
  let showCenter = false;
7
7
  </script>
8
8
 
9
- <div class={cls('bg-black/5 rounded m-1 backdrop-blur p-2', $$props.class)}>
10
- <div class="grid gap-2 ml-2 text-xs">
11
- <div><span class="text-surface-content/50">scale:</span> {format($geo.scale(), 'decimal')}</div>
9
+ <div class={cls('bg-surface-300/50 rounded m-1 backdrop-blur p-2 tabular-nums', $$props.class)}>
10
+ <div class="grid gap-2 text-xs">
11
+ <div><span class="opacity-50">scale:</span> {format($geo.scale(), 'decimal')}</div>
12
12
 
13
13
  <div>
14
- <span class="text-surface-content/50">translate:</span>
14
+ <span class="opacity-50">translate:</span>
15
15
  {#each $geo.translate() as coord}
16
- <div class="ml-2">{format(coord, 'decimal')}</div>
16
+ <div class="text-right">{format(coord, 'decimal')}</div>
17
17
  {/each}
18
18
  </div>
19
19
 
20
20
  <div>
21
- <span class="text-surface-content/50">rotate:</span>
21
+ <span class="opacity-50">rotate:</span>
22
22
  {#each $geo.rotate() as angle}
23
- <div class="ml-2">{format(angle, 'decimal')}</div>
23
+ <div class="text-right">{format(angle, 'decimal')}</div>
24
24
  {/each}
25
25
  </div>
26
26
 
27
- <div><span class="text-surface-content/50">center:</span> {$geo.center?.()}</div>
27
+ <div class="grid grid-cols-[auto,1fr]">
28
+ <span class="opacity-50">center:</span>
29
+ <span class="text-right">
30
+ {$geo.center?.()}
31
+ </span>
32
+ </div>
28
33
 
29
34
  <div>
30
- <span class="text-surface-content/50"
31
- >long/lat: <Checkbox bind:checked={showCenter} size="xs" /></span
32
- >
35
+ <span class="opacity-50">long/lat: <Checkbox bind:checked={showCenter} size="xs" /></span>
33
36
  {#each $geo.invert?.([$width / 2, $height / 2]) as coord}
34
- <div class="ml-2">{format(coord, 'decimal')}</div>
37
+ <div class="text-right">{format(coord, 'decimal')}</div>
35
38
  {/each}
36
39
  </div>
37
40
  </div>
@@ -7,7 +7,7 @@ export let orientation = 'vertical';
7
7
 
8
8
  <div
9
9
  class={cls(
10
- 'bg-surface-content/5 rounded-full m-1 backdrop-blur z-10 flex',
10
+ 'bg-surface-300/50 rounded-full m-1 backdrop-blur z-10 flex',
11
11
  orientation === 'vertical' && 'flex-col',
12
12
  {
13
13
  'top-left': 'absolute top-0 left-0',
@@ -26,28 +26,28 @@ export let orientation = 'vertical';
26
26
  <Button
27
27
  icon={mdiMagnifyPlusOutline}
28
28
  on:click={() => transform.zoomIn()}
29
- class="text-surface-content/50 p-2"
29
+ class="text-surface-content p-2"
30
30
  />
31
31
  </Tooltip>
32
32
  <Tooltip title="Zoom out">
33
33
  <Button
34
34
  icon={mdiMagnifyMinusOutline}
35
35
  on:click={() => transform.zoomOut()}
36
- class="text-surface-content/50 p-2"
36
+ class="text-surface-content p-2"
37
37
  />
38
38
  </Tooltip>
39
39
  <Tooltip title="Center">
40
40
  <Button
41
41
  icon={mdiImageFilterCenterFocus}
42
42
  on:click={() => transform.translateCenter()}
43
- class="text-surface-content/50 p-2"
43
+ class="text-surface-content p-2"
44
44
  />
45
45
  </Tooltip>
46
46
  <Tooltip title="Reset">
47
47
  <Button
48
48
  icon={mdiArrowULeftTop}
49
49
  on:click={() => transform.reset()}
50
- class="text-surface-content/50 p-2"
50
+ class="text-surface-content p-2"
51
51
  />
52
52
  </Tooltip>
53
53
  </div>
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { Svg, Html } from 'layercake';
1
+ export { Canvas, Html, Svg, WebGL } from 'layercake';
2
2
  export * from './components/index.js';
3
3
  export * from './utils/index.js';
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { Svg, Html } from 'layercake';
1
+ export { Canvas, Html, Svg, WebGL } from 'layercake';
2
2
  export * from './components/index.js';
3
3
  export * from './utils/index.js';
@@ -3,10 +3,13 @@ import { max, min } from 'd3-array';
3
3
  import { groupScaleBand, isScaleBand } from './scales.js';
4
4
  // TOOD: Pass in overrides for `x` and `y` accessors
5
5
  export function createDimensionGetter(context, options) {
6
- const { flatData, xGet, yGet, xRange, yRange, xScale, yScale, x: xAccessor, y: yAccessor, } = context;
6
+ const { flatData, xGet, yGet, xScale, yScale, x: xAccessor, y: yAccessor } = context;
7
7
  const groupBy = options?.groupBy;
8
8
  const inset = options?.inset ?? 0;
9
- return derived([flatData, xGet, yGet, xRange, yRange, xScale, yScale, xAccessor, yAccessor], ([$flatData, $xGet, $yGet, $xRange, $yRange, $xScale, $yScale, $xAccessor, $yAccessor]) => {
9
+ return derived([flatData, xGet, yGet, xScale, yScale, xAccessor, yAccessor], ([$flatData, $xGet, $yGet, $xScale, $yScale, $xAccessor, $yAccessor]) => {
10
+ // Use `xscale.domain()` instead of `$xDomain` to include `nice()` being applied
11
+ const [minXDomain, maxXDomain] = $xScale.domain();
12
+ const [minYDomain, maxYDomain] = $yScale.domain();
10
13
  return function getter(item) {
11
14
  if (isScaleBand($yScale)) {
12
15
  // Horizontal band
@@ -35,13 +38,13 @@ export function createDimensionGetter(context, options) {
35
38
  }
36
39
  else if (xValue > 0) {
37
40
  // Positive value
38
- left = min($xRange); // or `0`?
41
+ left = max([0, minXDomain]);
39
42
  right = xValue;
40
43
  }
41
44
  else {
42
45
  // Negative value
43
46
  left = xValue;
44
- right = min($xRange); // or `0`?
47
+ right = min([0, maxXDomain]);
45
48
  }
46
49
  return {
47
50
  x: $xScale(left),
@@ -78,11 +81,11 @@ export function createDimensionGetter(context, options) {
78
81
  else if (yValue > 0) {
79
82
  // Positive value
80
83
  top = yValue;
81
- bottom = min($yRange); // or `0`?
84
+ bottom = max([0, minYDomain]);
82
85
  }
83
86
  else {
84
87
  // Negative value
85
- top = min($yRange); // or `0`?
88
+ top = min([0, maxYDomain]);
86
89
  bottom = yValue;
87
90
  }
88
91
  return {
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "author": "Sean Lynch <techniq35@gmail.com>",
5
5
  "license": "MIT",
6
6
  "repository": "techniq/layerchart",
7
- "version": "0.36.2",
7
+ "version": "0.36.4",
8
8
  "devDependencies": {
9
9
  "@changesets/cli": "^2.27.1",
10
10
  "@mdi/js": "^7.4.47",