|
32 | 32 |
|
33 | 33 | <script lang="ts"> |
34 | 34 | import { raise } from 'layercake'; |
35 | | - import { createEventDispatcher } from 'svelte'; |
36 | 35 | import { writable } from 'svelte/store'; |
37 | 36 | import { bisector, max, min } from 'd3-array'; |
38 | 37 | import { Delaunay } from 'd3-delaunay'; |
|
46 | 45 | import { isScaleBand, scaleInvert } from '$lib/utils/scales'; |
47 | 46 | import { quadtreeRects } from '$lib/utils/quadtree'; |
48 | 47 |
|
49 | | - const dispatch = createEventDispatcher<{ click: { data: any } }>(); |
50 | | -
|
51 | 48 | const { flatData, x, xScale, xGet, xRange, y, yScale, yGet, yRange, width, height, padding } = |
52 | 49 | getContext('LayerCake'); |
53 | 50 |
|
|
89 | 86 | /** Enable debug view (show hit targets, etc) */ |
90 | 87 | export let debug = false; |
91 | 88 |
|
| 89 | + export let onClick: ({ data }: { data: any }) => any = () => {}; |
| 90 | +
|
92 | 91 | const tooltip = writable({ y: 0, x: 0, data: null, show: showTooltip, hide: hideTooltip }); |
93 | 92 | setTooltipContext(tooltip); |
94 | 93 |
|
|
319 | 318 | width: Array.isArray(xValue) |
320 | 319 | ? xValue[1] - xValue[0] |
321 | 320 | : isScaleBand($xScale) |
322 | | - ? $xScale.step() |
323 | | - : min($xRange) + x, |
| 321 | + ? $xScale.step() |
| 322 | + : min($xRange) + x, |
324 | 323 | height: Array.isArray(yValue) |
325 | 324 | ? yValue[1] - yValue[0] |
326 | 325 | : isScaleBand($yScale) |
327 | | - ? $yScale.step() |
328 | | - : max($yRange) - y, |
| 326 | + ? $yScale.step() |
| 327 | + : max($yRange) - y, |
329 | 328 | data: d, |
330 | 329 | }; |
331 | 330 | } |
|
349 | 348 | on:mousemove={showTooltip} |
350 | 349 | on:mouseleave={hideTooltip} |
351 | 350 | on:click={(e) => { |
352 | | - dispatch('click', { data: $tooltip?.data }); |
| 351 | + onClick({ data: $tooltip?.data }); |
353 | 352 | }} |
354 | 353 | /> |
355 | 354 | </Html> |
|
365 | 364 | on:mousemove={(e) => showTooltip(e, point.data)} |
366 | 365 | on:mouseleave={hideTooltip} |
367 | 366 | on:click={(e) => { |
368 | | - dispatch('click', { data: point.data }); |
| 367 | + onClick({ data: point.data }); |
369 | 368 | }} |
370 | 369 | /> |
371 | 370 | </g> |
|
386 | 385 | on:mousemove={(e) => showTooltip(e, rect.data)} |
387 | 386 | on:mouseleave={hideTooltip} |
388 | 387 | on:click={(e) => { |
389 | | - dispatch('click', { data: rect.data }); |
| 388 | + onClick({ data: rect.data }); |
390 | 389 | }} |
391 | 390 | /> |
392 | 391 | {/each} |
|
0 commit comments