diff --git a/src/SvelteHeatmap.svelte b/src/SvelteHeatmap.svelte index 23d19d8..487b4f8 100644 --- a/src/SvelteHeatmap.svelte +++ b/src/SvelteHeatmap.svelte @@ -1,4 +1,5 @@ - +
+ {#if view === 'monthly'} {#each chunks as chunk, index} {/each} {:else} @@ -39,6 +42,8 @@ days={chunk} index={index} monthLabelHeight={monthLabelHeight} + on:hover-cell="{event => onHoverCell(event, index)}" + on:leave-cell="{() => showTooltip = false}" /> {#if monthLabelHeight > 0 && isNewMonth(chunks, index)} {/if} - + + {#if showTooltip} + + {/if} +
\ No newline at end of file diff --git a/src/utils/date.js b/src/utils/date.js index 30edd9f..504188c 100644 --- a/src/utils/date.js +++ b/src/utils/date.js @@ -85,3 +85,24 @@ export function normalizeDate(value) { export function stringifyDate(date) { return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')}` } + +/** + * Format a date as "yyyy-mm-dd". + * + * @param {Date} date + * + * @returns {string} + */ +export function formatDate(date) { + let d = new Date(date), + month = '' + (d.getMonth() + 1), + day = '' + d.getDate(), + year = d.getFullYear(); + + if (month.length < 2) + month = '0' + month; + if (day.length < 2) + day = '0' + day; + + return [year, month, day].join('-'); +} \ No newline at end of file diff --git a/src/views/Cell.svelte b/src/views/Cell.svelte index 9d6ad9e..7c97cbf 100644 --- a/src/views/Cell.svelte +++ b/src/views/Cell.svelte @@ -7,9 +7,12 @@ width={size} x={x} y={y} + on:mouseover="{onMouseOver}" + on:mouseout="{onMouseOut}" /> diff --git a/src/views/Month.svelte b/src/views/Month.svelte index 9a45594..999189c 100644 --- a/src/views/Month.svelte +++ b/src/views/Month.svelte @@ -8,6 +8,8 @@ value={day.value} x={day.date.getDay() * cellRect} y={(getWeekIndex(day.date) * cellRect) + monthLabelHeight} + on:hover-cell + on:leave-cell /> {/each} {#if monthLabelHeight > 0} diff --git a/src/views/Tooltip.svelte b/src/views/Tooltip.svelte new file mode 100644 index 0000000..0041c80 --- /dev/null +++ b/src/views/Tooltip.svelte @@ -0,0 +1,31 @@ + + +
+ {value ? `${value} ${unit.pural}` : `No ${unit.single}`} on {formatDate(date)} +
+ + diff --git a/src/views/Week.svelte b/src/views/Week.svelte index 5218050..802e165 100644 --- a/src/views/Week.svelte +++ b/src/views/Week.svelte @@ -7,6 +7,8 @@ size={cellSize} value={day.value} y={day.date.getDay() * cellRect} + on:hover-cell + on:leave-cell /> {/each}