{"version":3,"file":"calendar-heatmap.min.js","mappings":"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;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA,wDAAwD;;AAExD;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;;AAEA,kBAAkB,wBAAwB;AAC1C;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA,kBAAkB,iBAAiB;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA,gBAAgB,KAAwC,GAAG,sBAAiB,GAAG,CAAI;;AAEnF;AACA;AACA;AACA;;AAEA;AACA;AACA,GAAG;;AAEH;AACA;AACA,IAAI;AACJ;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA,qEAAqE,qBAAqB,cAAc;;AAExG;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA,yDAAyD;AACzD,IAAI;;AAEJ;;;AAGA;AACA;AACA,IAAI;AACJ;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,IAAI;AACJ;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM;AACN;AACA;AACA;AACA;;AAEA;AACA,2BAA2B;AAC3B;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,oBAAoB,4BAA4B;AAChD;AACA;AACA;AACA;;AAEA;;AAEA,qBAAqB,6BAA6B;AAClD;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;;;;;;AC5QA;;;;;;;ACAA;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA;WACA,iCAAiC,WAAW;WAC5C;WACA;;;;;WCPA;WACA;WACA;WACA;WACA,yCAAyC,wCAAwC;WACjF;WACA;WACA;;;;;WCPA;;;;;WCAA;WACA;WACA;WACA,uDAAuD,iBAAiB;WACxE;WACA,gDAAgD,aAAa;WAC7D;;;;;UENA;UACA;UACA;UACA","sources":["webpack://CalendarHeatmap/webpack/universalModuleDefinition","webpack://CalendarHeatmap/./src/calendar-heatmap.component.js","webpack://CalendarHeatmap/./src/index.js","webpack://CalendarHeatmap/./src/calendar-heatmap.css","webpack://CalendarHeatmap/./node_modules/css-loader/dist/runtime/api.js","webpack://CalendarHeatmap/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://CalendarHeatmap/./src/calendar-heatmap.css?eb73","webpack://CalendarHeatmap/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://CalendarHeatmap/external umd \"d3\"","webpack://CalendarHeatmap/external umd \"moment\"","webpack://CalendarHeatmap/external umd {\"root\":\"React\",\"commonjs2\":\"react\",\"commonjs\":\"react\",\"amd\":\"react\",\"umd\":\"react\"}","webpack://CalendarHeatmap/webpack/bootstrap","webpack://CalendarHeatmap/webpack/runtime/compat get default export","webpack://CalendarHeatmap/webpack/runtime/define property getters","webpack://CalendarHeatmap/webpack/runtime/hasOwnProperty shorthand","webpack://CalendarHeatmap/webpack/runtime/make namespace object","webpack://CalendarHeatmap/webpack/before-startup","webpack://CalendarHeatmap/webpack/startup","webpack://CalendarHeatmap/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"react\"), require(\"moment\"), require(\"d3\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"react\", \"moment\", \"d3\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"CalendarHeatmap\"] = factory(require(\"react\"), require(\"moment\"), require(\"d3\"));\n\telse\n\t\troot[\"CalendarHeatmap\"] = factory(root[\"React\"], root[\"moment\"], root[\"d3\"]);\n})(self, function(__WEBPACK_EXTERNAL_MODULE__244__, __WEBPACK_EXTERNAL_MODULE__192__, __WEBPACK_EXTERNAL_MODULE__990__) {\nreturn ","import * as React from 'react'\n\nimport moment from 'moment'\nimport * as d3 from 'd3'\n\nimport styles from './calendar-heatmap.css'\n\n\nclass CalendarHeatmap extends React.Component {\n\n constructor(props) {\n super(props)\n\n this.settings = {\n gutter: 5,\n item_gutter: 1,\n width: 1000,\n height: 200,\n item_size: 10,\n label_padding: 40,\n max_block_height: 20,\n transition_duration: 500,\n tooltip_width: 250,\n tooltip_padding: 15,\n }\n\n this.in_transition = false\n this.overview = this.props.overview\n this.history = ['global']\n this.selected = {}\n\n this.calcDimensions = this.calcDimensions.bind(this)\n }\n\n componentDidMount() {\n this.createElements()\n this.parseData()\n this.drawChart()\n\n window.addEventListener('resize', this.calcDimensions)\n }\n\n componentDidUpdate() {\n this.parseData()\n this.drawChart()\n }\n\n componentWillUnmount() {\n window.removeEventListener('resize', this.calcDimensions)\n }\n\n createElements() {\n // Create svg element\n this.svg = d3.select('#calendar-heatmap')\n .append('svg')\n .attr('class', 'svg')\n\n // Create other svg elements\n this.items = this.svg.append('g')\n this.labels = this.svg.append('g')\n this.buttons = this.svg.append('g')\n\n // Add tooltip to the same element as main svg\n this.tooltip = d3.select('#calendar-heatmap')\n .append('div')\n .attr('class', styles.heatmapTooltip)\n .style('opacity', 0)\n .style('pointer-events', 'none')\n .style('position', 'absolute')\n .style('z-index', 9999)\n .style('width', '250px')\n .style('max-width', '250px')\n .style('overflow', 'hidden')\n .style('padding', '15px')\n .style('font-size', '12px')\n .style('line-height', '14px')\n .style('color', 'rgb(51, 51, 51)')\n .style('background', 'rgba(255, 255, 255, 0.75)')\n\n this.calcDimensions()\n }\n\n // Calculate dimensions based on available width\n calcDimensions() {\n let dayIndex = Math.round((moment() - moment().subtract(1, 'year').startOf('week')) / 86400000)\n let colIndex = Math.trunc(dayIndex / 7)\n let numWeeks = colIndex + 1\n\n this.settings.width = this.container.offsetWidth < 1000 ? 1000 : this.container.offsetWidth\n this.settings.item_size = ((this.settings.width - this.settings.label_padding) / numWeeks - this.settings.gutter)\n this.settings.height = this.settings.label_padding + 7 * (this.settings.item_size + this.settings.gutter)\n this.svg.attr('width', this.settings.width)\n .attr('height', this.settings.height)\n\n if ( !!this.props.data && !!this.props.data[0].summary ) {\n this.drawChart()\n }\n }\n\n parseData() {\n if ( !this.props.data ) { return }\n\n // Get daily summary if that was not provided\n if ( !this.props.data[0].summary ) {\n this.props.data.map(d => {\n let summary = d.details.reduce((uniques, project) => {\n if (!uniques[project.name]) {\n uniques[project.name] = {\n 'value': project.value\n }\n } else {\n uniques[project.name].value += project.value\n }\n return uniques\n }, {})\n let unsorted_summary = Object.keys(summary).map(key => {\n return {\n 'name': key,\n 'value': summary[key].value\n }\n })\n d.summary = unsorted_summary.sort((a, b) => {\n return b.value - a.value\n })\n return d\n })\n }\n }\n\n drawChart() {\n if ( this.overview === 'global' ) {\n this.drawGlobalOverview()\n } else if ( this.overview === 'year' ) {\n this.drawYearOverview()\n } else if ( this.overview === 'month' ) {\n this.drawMonthOverview()\n } else if ( this.overview === 'week' ) {\n this.drawWeekOverview()\n } else if ( this.overview === 'day' ) {\n this.drawDayOverview()\n }\n }\n\n\n /**\n * Draw global overview (multiple years)\n */\n drawGlobalOverview() {\n\n // Add current overview to the history\n if (this.history[this.history.length - 1] !== this.overview) {\n this.history.push(this.overview)\n }\n\n // Define start and end of the dataset\n let start = moment(this.props.data[0].date).startOf('year')\n let end = moment(this.props.data[this.props.data.length - 1].date).endOf('year')\n\n // Define array of years and total values\n let year_data = d3.timeYears(start, end).map(d => {\n let date = moment(d)\n let getSummary = () => {\n let summary = this.props.data.reduce((summary, d) => {\n if (moment(d.date).year() === date.year()) {\n d.summary.map(item => {\n if (!summary[item.name]) {\n summary[item.name] = {\n 'value': item.value,\n }\n } else {\n summary[item.name].value += item.value\n }\n })\n }\n return summary\n }, {})\n let unsorted_summary = Object.keys(summary).map(key => {\n return {\n 'name': key,\n 'value': summary[key].value\n }\n })\n return unsorted_summary.sort((a, b) => {\n return b.value - a.value\n })\n }\n return {\n 'date': date,\n 'total': this.props.data.reduce((prev, current) => {\n if (moment(current.date).year() === date.year()) {\n prev += current.total\n }\n return prev\n }, 0),\n 'summary': getSummary(),\n }\n })\n\n // Calculate max value of all the years in the dataset\n let max_value = d3.max(year_data, d => {\n return d.total\n })\n\n // Define year labels and axis\n let year_labels = d3.timeYears(start, end).map(d => {\n return moment(d)\n })\n let yearScale = d3.scaleBand()\n .rangeRound([0, this.settings.width])\n .padding([0.05])\n .domain(year_labels.map(d => {\n return d.year()\n }))\n\n // Add global data items to the overview\n this.items.selectAll('.item-block-year').remove()\n let item_block = this.items.selectAll('.item-block-year')\n .data(year_data)\n .enter()\n .append('rect')\n .attr('class', 'item item-block-year')\n .style('cursor', 'pointer')\n .attr('width', () => {\n return (this.settings.width - this.settings.label_padding) / year_labels.length - this.settings.gutter * 5\n })\n .attr('height', () => {\n return this.settings.height - this.settings.label_padding\n })\n .attr('transform', d => {\n return 'translate(' + yearScale(d.date.year()) + ',' + this.settings.tooltip_padding * 2 + ')'\n })\n .attr('fill', d => {\n let color = d3.scaleLinear()\n .range(['#ffffff', this.props.color])\n .domain([-0.15 * max_value, max_value])\n return color(d.total) || '#ff4500'\n })\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Set in_transition flag\n this.in_transition = true\n\n // Set selected date to the one clicked on\n this.selected = { date: d.date }\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all global overview related items and labels\n this.removeGlobalOverview()\n\n // Redraw the chart\n this.overview = 'year'\n this.drawChart()\n })\n .style('opacity', 0)\n .on('mouseover', (event, d) => {\n if (this.in_transition) { return }\n\n // Construct tooltip\n let tooltip_html = ''\n tooltip_html += '
Total time tracked:'\n\n let sec = parseInt(d.total, 10)\n let days = Math.floor(sec / 86400)\n if (days > 0) {\n tooltip_html += '' + (days === 1 ? '1 day' : days + ' days') + '
'\n }\n let hours = Math.floor((sec - (days * 86400)) / 3600)\n if (hours > 0) {\n if (days > 0) {\n tooltip_html += '
' + (hours === 1 ? '1 hour' : hours + ' hours') + '
'\n } else {\n tooltip_html += '' + (hours === 1 ? '1 hour' : hours + ' hours') + ''\n }\n }\n let minutes = Math.floor((sec - (days * 86400) - (hours * 3600)) / 60)\n if (minutes > 0) {\n if (days > 0 || hours > 0) {\n tooltip_html += '
' + (minutes === 1 ? '1 minute' : minutes + ' minutes') + '
'\n } else {\n tooltip_html += '' + (minutes === 1 ? '1 minute' : minutes + ' minutes') + ''\n }\n }\n tooltip_html += '
'\n\n // Add summary to the tooltip\n if (d.summary.length <= 5) {\n let counter = 0\n while ( counter < d.summary.length ) {\n tooltip_html += '
' + d.summary[counter].name + ''\n tooltip_html += '' + this.formatTime(d.summary[counter].value) + '
'\n counter++\n }\n } else {\n let counter = 0\n while ( counter < 5 ) {\n tooltip_html += '
' + d.summary[counter].name + ''\n tooltip_html += '' + this.formatTime(d.summary[counter].value) + '
'\n counter++\n }\n\n tooltip_html += '
'\n\n counter = 5\n let other_projects_sum = 0\n while ( counter < d.summary.length ) {\n other_projects_sum = +d.summary[counter].value\n counter++\n }\n tooltip_html += '
Other:'\n tooltip_html += '' + this.formatTime(other_projects_sum) + '
'\n }\n\n // Calculate tooltip position\n let x = yearScale(d.date.year()) + this.settings.tooltip_padding * 2\n while (this.settings.width - x < (this.settings.tooltip_width + this.settings.tooltip_padding * 5)) {\n x -= 10\n }\n let y = this.settings.tooltip_padding * 3\n\n // Show tooltip\n this.tooltip.html(tooltip_html)\n .style('left', x + 'px')\n .style('top', y + 'px')\n .transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n this.hideTooltip()\n })\n .transition()\n .delay((d, i) => {\n return this.settings.transition_duration * (i + 1) / 10\n })\n .duration(() => {\n return this.settings.transition_duration\n })\n .ease(d3.easeLinear)\n .style('opacity', 1)\n .call((transition, callback) => {\n if (transition.empty()) {\n callback()\n }\n let n = 0\n transition\n .each(() => {++n })\n .on('end', function() {\n if (!--n) {\n callback.apply(this, arguments)\n }\n })\n }, () => {\n this.in_transition = false\n })\n\n // Add year labels\n this.labels.selectAll('.label-year').remove()\n this.labels.selectAll('.label-year')\n .data(year_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-year')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return d.year()\n })\n .attr('x', d => {\n return yearScale(d.year())\n })\n .attr('y', this.settings.label_padding / 2)\n .on('mouseenter', (event, year_label) => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-year')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).year() === year_label.year()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-year')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Set in_transition flag\n this.in_transition = true\n\n // Set selected year to the one clicked on\n this.selected = { date: d }\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all global overview related items and labels\n this.removeGlobalOverview()\n\n // Redraw the chart\n this.overview = 'year'\n this.drawChart()\n })\n }\n\n\n /**\n * Draw year overview\n */\n drawYearOverview() {\n // Add current overview to the history\n if (this.history[this.history.length - 1] !== this.overview) {\n this.history.push(this.overview)\n }\n\n // Define start and end date of the selected year\n let start_of_year = moment(this.selected.date).startOf('year')\n let end_of_year = moment(this.selected.date).endOf('year')\n\n // Filter data down to the selected year\n let year_data = this.props.data.filter(d => {\n return start_of_year <= moment(d.date) && moment(d.date) < end_of_year\n })\n\n // Calculate max value of the year data\n let max_value = d3.max(year_data, d => d.total)\n\n let color = d3.scaleLinear()\n .range(['#ffffff', this.props.color])\n .domain([-0.15 * max_value, max_value])\n\n let calcItemX = (d) => {\n let date = moment(d.date)\n let dayIndex = Math.round((date - moment(start_of_year).startOf('week')) / 86400000)\n let colIndex = Math.trunc(dayIndex / 7)\n return colIndex * (this.settings.item_size + this.settings.gutter) + this.settings.label_padding\n }\n\n let calcItemY = d => {\n return this.settings.label_padding + moment(d.date).weekday() * (this.settings.item_size + this.settings.gutter)\n }\n\n let calcItemSize = d => {\n if ( max_value <= 0 ) {\n return this.settings.item_size\n }\n return this.settings.item_size * 0.75 + (this.settings.item_size * d.total / max_value) * 0.25\n }\n\n this.items.selectAll('.item-circle').remove()\n this.items.selectAll('.item-circle')\n .data(year_data)\n .enter()\n .append('rect')\n .attr('class', 'item item-circle')\n .style('cursor', 'pointer')\n .style('opacity', 0)\n .attr('x', d => {\n return calcItemX(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('y', d => {\n return calcItemY(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('rx', d => {\n return calcItemSize(d)\n })\n .attr('ry', d => {\n return calcItemSize(d)\n })\n .attr('width', d => {\n return calcItemSize(d)\n })\n .attr('height', d => {\n return calcItemSize(d)\n })\n .attr('fill', d => {\n return (d.total > 0) ? color(d.total) : 'transparent'\n })\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Don't transition if there is no data to show\n if (d.total === 0) { return }\n\n this.in_transition = true\n\n // Set selected date to the one clicked on\n this.selected = d\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all year overview related items and labels\n this.removeYearOverview()\n\n // Redraw the chart\n this.overview = 'day'\n this.drawChart()\n })\n .on('mouseover', (event, d) => {\n if (this.in_transition) { return }\n\n // Pulsating animation\n let circle = d3.select(event.currentTarget)\n let repeat = () => {\n circle = circle.transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .attr('x', d => {\n return calcItemX(d) - (this.settings.item_size * 1.1 - this.settings.item_size) / 2\n })\n .attr('y', d => {\n return calcItemY(d) - (this.settings.item_size * 1.1 - this.settings.item_size) / 2\n })\n .attr('width', this.settings.item_size * 1.1)\n .attr('height', this.settings.item_size * 1.1)\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .attr('x', d => {\n return calcItemX(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('y', d => {\n return calcItemY(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('width', d => {\n return calcItemSize(d)\n })\n .attr('height', d => {\n return calcItemSize(d)\n })\n .on('end', repeat)\n }\n repeat()\n\n // Construct tooltip\n let tooltip_html = ''\n tooltip_html += `
${d.total ? this.formatTime(d.total) : 'No time'} tracked
`\n tooltip_html += '
on ' + moment(d.date).format('dddd, MMM Do YYYY') + '

'\n\n // Add summary to the tooltip\n let counter = 0\n while ( counter < d.summary.length ) {\n tooltip_html += '
' + d.summary[counter].name + ''\n tooltip_html += '' + this.formatTime(d.summary[counter].value) + '
'\n counter++\n }\n\n // Calculate tooltip position\n let x = calcItemX(d) + this.settings.item_size\n if (this.settings.width - x < (this.settings.tooltip_width + this.settings.tooltip_padding * 3)) {\n x -= this.settings.tooltip_width + this.settings.tooltip_padding * 2\n }\n let y = calcItemY(d) + this.settings.item_size\n\n // Show tooltip\n this.tooltip.html(tooltip_html)\n .style('left', x + 'px')\n .style('top', y + 'px')\n .transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('mouseout', (event, d) => {\n if (this.in_transition) { return }\n\n // Set circle radius back to what its supposed to be\n d3.select(event.currentTarget).transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .attr('x', d => {\n return calcItemX(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('y', d => {\n return calcItemY(d) + (this.settings.item_size - calcItemSize(d)) / 2\n })\n .attr('width', d => {\n return calcItemSize(d)\n })\n .attr('height', d => {\n return calcItemSize(d)\n })\n\n // Hide tooltip\n this.hideTooltip()\n })\n .transition()\n .delay(() => {\n return (Math.cos(Math.PI * Math.random()) + 1) * this.settings.transition_duration\n })\n .duration(() => {\n return this.settings.transition_duration\n })\n .ease(d3.easeLinear)\n .style('opacity', 1)\n .call((transition, callback) => {\n if (transition.empty()) {\n callback()\n }\n let n = 0\n transition\n .each(() => ++n)\n .on('end', function() {\n if (!--n) {\n callback.apply(this, arguments)\n }\n })\n }, () => {\n this.in_transition = false\n })\n\n // Add month labels\n let month_labels = d3.timeMonths(start_of_year, end_of_year)\n let monthScale = d3.scaleLinear()\n .range([0, this.settings.width])\n .domain([0, month_labels.length])\n this.labels.selectAll('.label-month').remove()\n this.labels.selectAll('.label-month')\n .data(month_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-month')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return d.toLocaleDateString('en-us', { month: 'short' })\n })\n .attr('x', (d, i) => {\n return monthScale(i) + (monthScale(i) - monthScale(i - 1)) / 2\n })\n .attr('y', this.settings.label_padding / 2)\n .on('mouseenter', (event, d) => {\n if (this.in_transition) { return }\n\n let selected_month = moment(d)\n this.items.selectAll('.item-circle')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return moment(d.date).isSame(selected_month, 'month') ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-circle')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Check month data\n let month_data = this.props.data.filter(e => {\n return moment(d).startOf('month') <= moment(e.date) && moment(e.date) < moment(d).endOf('month')\n })\n\n // Don't transition if there is no data to show\n if (!month_data.length) { return }\n\n // Set selected month to the one clicked on\n this.selected = { date: d }\n\n this.in_transition = true\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all year overview related items and labels\n this.removeYearOverview()\n\n // Redraw the chart\n this.overview = 'month'\n this.drawChart()\n })\n\n // Add day labels\n let day_labels = d3.timeDays(moment().startOf('week'), moment().endOf('week'))\n let dayScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.height])\n .domain(day_labels.map(d => {\n return moment(d).weekday()\n }))\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-day')\n .data(day_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-day')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('x', this.settings.label_padding / 3)\n .attr('y', (d, i) => {\n return dayScale(i) + dayScale.bandwidth() / 1.75\n })\n .style('text-anchor', 'left')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return moment(d).format('dddd')[0]\n })\n .on('mouseenter', (event, d) => {\n if (this.in_transition) { return }\n\n let selected_day = moment(d)\n this.items.selectAll('.item-circle')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-circle')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n\n // Add button to switch back to previous overview\n this.drawButton()\n }\n\n\n /**\n * Draw month overview\n */\n drawMonthOverview() {\n // Add current overview to the history\n if (this.history[this.history.length - 1] !== this.overview) {\n this.history.push(this.overview)\n }\n\n // Define beginning and end of the month\n let start_of_month = moment(this.selected.date).startOf('month')\n let end_of_month = moment(this.selected.date).endOf('month')\n\n // Filter data down to the selected month\n let month_data = this.props.data.filter(d => {\n return start_of_month <= moment(d.date) && moment(d.date) < end_of_month\n })\n let max_value = d3.max(month_data, d => {\n return d3.max(d.summary, d => {\n return d.value\n })\n })\n\n // Define day labels and axis\n let day_labels = d3.timeDays(moment().startOf('week'), moment().endOf('week'))\n let dayScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.height])\n .domain(day_labels.map(d => {\n return moment(d).weekday()\n }))\n\n // Define week labels and axis\n let week_labels = [start_of_month.clone()]\n while (start_of_month.week() !== end_of_month.week()) {\n week_labels.push(start_of_month.add(1, 'week').clone())\n }\n let weekScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.width])\n .padding([0.05])\n .domain(week_labels.map(weekday => {\n return weekday.week()\n }))\n\n // Add month data items to the overview\n this.items.selectAll('.item-block-month').remove()\n let item_block = this.items.selectAll('.item-block-month')\n .data(month_data)\n .enter()\n .append('g')\n .attr('class', 'item item-block-month')\n .style('cursor', 'pointer')\n .attr('width', () => {\n return (this.settings.width - this.settings.label_padding) / week_labels.length - this.settings.gutter * 5\n })\n .attr('height', () => {\n return Math.min(dayScale.bandwidth(), this.settings.max_block_height)\n })\n .attr('transform', d => {\n return 'translate(' + weekScale(moment(d.date).week()) + ',' + ((dayScale(moment(d.date).weekday()) + dayScale.bandwidth() / 1.75) - 15) + ')'\n })\n .attr('total', d => {\n return d.total\n })\n .attr('date', d => {\n return d.date\n })\n .attr('offset', 0)\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Don't transition if there is no data to show\n if (d.total === 0) { return }\n\n this.in_transition = true\n\n // Set selected date to the one clicked on\n this.selected = d\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all month overview related items and labels\n this.removeMonthOverview()\n\n // Redraw the chart\n this.overview = 'day'\n this.drawChart()\n })\n\n let item_width = (this.settings.width - this.settings.label_padding) / week_labels.length - this.settings.gutter * 5\n let itemScale = d3.scaleLinear()\n .rangeRound([0, item_width])\n\n let item_gutter = this.settings.item_gutter\n item_block.selectAll('.item-block-rect')\n .data(d => d.summary)\n .enter()\n .append('rect')\n .attr('class', 'item item-block-rect')\n .style('cursor', 'pointer')\n .attr('x', function(d) {\n let total = parseInt(d3.select(this.parentNode).attr('total'))\n let offset = parseInt(d3.select(this.parentNode).attr('offset'))\n itemScale.domain([0, total])\n d3.select(this.parentNode).attr('offset', offset + itemScale(d.value))\n return offset\n })\n .attr('width', function(d) {\n let total = parseInt(d3.select(this.parentNode).attr('total'))\n itemScale.domain([0, total])\n return Math.max((itemScale(d.value) - item_gutter), 1)\n })\n .attr('height', () => {\n return Math.min(dayScale.bandwidth(), this.settings.max_block_height)\n })\n .attr('fill', d => {\n let color = d3.scaleLinear()\n .range(['#ffffff', this.props.color])\n .domain([-0.15 * max_value, max_value])\n return color(d.value) || '#ff4500'\n })\n .style('opacity', 0)\n .on('mouseover', (event, d) => {\n if (this.in_transition) { return }\n\n // Get date from the parent node\n let parentNode = d3.select(event.currentTarget.parentNode)\n let date = new Date(parentNode.attr('date'))\n\n // Construct tooltip\n let tooltip_html = ''\n tooltip_html += `
${d.name}

`\n tooltip_html += '
' + (d.value ? this.formatTime(d.value) : 'No time') + ' tracked
'\n tooltip_html += '
on ' + moment(date).format('dddd, MMM Do YYYY') + '
'\n\n // Calculate tooltip position\n let x = weekScale(moment(date).week()) + this.settings.tooltip_padding\n while (this.settings.width - x < (this.settings.tooltip_width + this.settings.tooltip_padding * 3)) {\n x -= 10\n }\n let y = dayScale(moment(date).weekday()) + this.settings.tooltip_padding * 2\n\n // Show tooltip\n this.tooltip.html(tooltip_html)\n .style('left', x + 'px')\n .style('top', y + 'px')\n .transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n this.hideTooltip()\n })\n .transition()\n .delay(() => {\n return (Math.cos(Math.PI * Math.random()) + 1) * this.settings.transition_duration\n })\n .duration(() => {\n return this.settings.transition_duration\n })\n .ease(d3.easeLinear)\n .style('opacity', 1)\n .call((transition, callback) => {\n if (transition.empty()) {\n callback()\n }\n let n = 0\n transition\n .each(() => ++n)\n .on('end', function() {\n if (!--n) {\n callback.apply(this, arguments)\n }\n })\n }, () => {\n this.in_transition = false\n })\n\n // Add week labels\n this.labels.selectAll('.label-week').remove()\n this.labels.selectAll('.label-week')\n .data(week_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-week')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return 'Week ' + d.week()\n })\n .attr('x', d => {\n return weekScale(d.week())\n })\n .attr('y', this.settings.label_padding / 2)\n .on('mouseenter', (event, weekday) => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-month')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).week() === weekday.week()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-month')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Check week data\n let week_data = this.props.data.filter(e => {\n return d.startOf('week') <= moment(e.date) && moment(e.date) < d.endOf('week')\n })\n\n // Don't transition if there is no data to show\n if (!week_data.length) { return }\n\n this.in_transition = true\n\n // Set selected month to the one clicked on\n this.selected = { date: d }\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all year overview related items and labels\n this.removeMonthOverview()\n\n // Redraw the chart\n this.overview = 'week'\n this.drawChart()\n })\n\n // Add day labels\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-day')\n .data(day_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-day')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('x', this.settings.label_padding / 3)\n .attr('y', (d, i) => {\n return dayScale(i) + dayScale.bandwidth() / 1.75\n })\n .style('text-anchor', 'left')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return moment(d).format('dddd')[0]\n })\n .on('mouseenter', (event, d) => {\n if (this.in_transition) { return }\n\n let selected_day = moment(d)\n this.items.selectAll('.item-block-month')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-month')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n\n // Add button to switch back to previous overview\n this.drawButton()\n }\n\n\n /**\n * Draw week overview\n */\n drawWeekOverview() {\n // Add current overview to the history\n if (this.history[this.history.length - 1] !== this.overview) {\n this.history.push(this.overview)\n }\n\n // Define beginning and end of the week\n let start_of_week = moment(this.selected.date).startOf('week')\n let end_of_week = moment(this.selected.date).endOf('week')\n\n // Filter data down to the selected week\n let week_data = this.props.data.filter(d => {\n return start_of_week <= moment(d.date) && moment(d.date) < end_of_week\n })\n let max_value = d3.max(week_data, d => {\n return d3.max(d.summary, d => {\n return d.value\n })\n })\n\n // Define day labels and axis\n let day_labels = d3.timeDays(moment().startOf('week'), moment().endOf('week'))\n let dayScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.height])\n .domain(day_labels.map(d => {\n return moment(d).weekday()\n }))\n\n // Define week labels and axis\n let week_labels = [start_of_week]\n let weekScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.width])\n .padding([0.01])\n .domain(week_labels.map(weekday => {\n return weekday.week()\n }))\n\n // Add week data items to the overview\n this.items.selectAll('.item-block-week').remove()\n let item_block = this.items.selectAll('.item-block-week')\n .data(week_data)\n .enter()\n .append('g')\n .attr('class', 'item item-block-week')\n .style('cursor', 'pointer')\n .attr('width', () => {\n return (this.settings.width - this.settings.label_padding) / week_labels.length - this.settings.gutter * 5\n })\n .attr('height', () => {\n return Math.min(dayScale.bandwidth(), this.settings.max_block_height)\n })\n .attr('transform', d => {\n return 'translate(' + weekScale(moment(d.date).week()) + ',' + ((dayScale(moment(d.date).weekday()) + dayScale.bandwidth() / 1.75) - 15) + ')'\n })\n .attr('total', d =>{\n return d.total\n })\n .attr('date', d => {\n return d.date\n })\n .attr('offset', 0)\n .on('click', (event, d) => {\n if (this.in_transition) { return }\n\n // Don't transition if there is no data to show\n if (d.total === 0) { return }\n\n this.in_transition = true\n\n // Set selected date to the one clicked on\n this.selected = d\n\n // Hide tooltip\n this.hideTooltip()\n\n // Remove all week overview related items and labels\n this.removeWeekOverview()\n\n // Redraw the chart\n this.overview = 'day'\n this.drawChart()\n })\n\n let item_width = (this.settings.width - this.settings.label_padding) / week_labels.length - this.settings.gutter * 5\n let itemScale = d3.scaleLinear()\n .rangeRound([0, item_width])\n\n let item_gutter = this.settings.item_gutter\n item_block.selectAll('.item-block-rect')\n .data(d => d.summary)\n .enter()\n .append('rect')\n .attr('class', 'item item-block-rect')\n .style('cursor', 'pointer')\n .attr('x', function(d) {\n let total = parseInt(d3.select(this.parentNode).attr('total'))\n let offset = parseInt(d3.select(this.parentNode).attr('offset'))\n itemScale.domain([0, total])\n d3.select(this.parentNode).attr('offset', offset + itemScale(d.value))\n return offset\n })\n .attr('width', function(d) {\n let total = parseInt(d3.select(this.parentNode).attr('total'))\n itemScale.domain([0, total])\n return Math.max((itemScale(d.value) - item_gutter), 1)\n })\n .attr('height', () => {\n return Math.min(dayScale.bandwidth(), this.settings.max_block_height)\n })\n .attr('fill', d => {\n let color = d3.scaleLinear()\n .range(['#ffffff', this.props.color])\n .domain([-0.15 * max_value, max_value])\n return color(d.value) || '#ff4500'\n })\n .style('opacity', 0)\n .on('mouseover', (event, d) => {\n if (this.in_transition) { return }\n\n // Get date from the parent node\n let parentNode = d3.select(event.currentTarget.parentNode)\n let date = new Date(parentNode.attr('date'))\n\n // Construct tooltip\n let tooltip_html = ''\n tooltip_html += `
${d.name}

`\n tooltip_html += '
' + (d.value ? this.formatTime(d.value) : 'No time') + ' tracked
'\n tooltip_html += '
on ' + moment(date).format('dddd, MMM Do YYYY') + '
'\n\n // Calculate tooltip position\n let total = parseInt(parentNode.attr('total'))\n itemScale.domain([0, total])\n let x = parseInt(d3.select(event.currentTarget).attr('x')) + itemScale(d.value) / 4 + this.settings.tooltip_width / 4\n while (this.settings.width - x < (this.settings.tooltip_width + this.settings.tooltip_padding * 3)) {\n x -= 10\n }\n let y = dayScale(moment(date).weekday()) + this.settings.tooltip_padding * 1.5\n\n // Show tooltip\n this.tooltip.html(tooltip_html)\n .style('left', x + 'px')\n .style('top', y + 'px')\n .transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n this.hideTooltip()\n })\n .transition()\n .delay(() => {\n return (Math.cos(Math.PI * Math.random()) + 1) * this.settings.transition_duration\n })\n .duration(() => {\n return this.settings.transition_duration\n })\n .ease(d3.easeLinear)\n .style('opacity', 1)\n .call((transition, callback) => {\n if (transition.empty()) {\n callback()\n }\n let n = 0\n transition\n .each(() => ++n)\n .on('end', function() {\n if (!--n) {\n callback.apply(this, arguments)\n }\n })\n }, () => {\n this.in_transition = false\n })\n\n // Add week labels\n this.labels.selectAll('.label-week').remove()\n this.labels.selectAll('.label-week')\n .data(week_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-week')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return 'Week ' + d.week()\n })\n .attr('x', d => {\n return weekScale(d.week())\n })\n .attr('y', this.settings.label_padding / 2)\n .on('mouseenter', (event, weekday) => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-week')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).week() === weekday.week()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-week')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n\n // Add day labels\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-day')\n .data(day_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-day')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('x', this.settings.label_padding / 3)\n .attr('y', (d, i) => {\n return dayScale(i) + dayScale.bandwidth() / 1.75\n })\n .style('text-anchor', 'left')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return moment(d).format('dddd')[0]\n })\n .on('mouseenter', (event, d) => {\n if (this.in_transition) { return }\n\n let selected_day = moment(d)\n this.items.selectAll('.item-block-week')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (moment(d.date).day() === selected_day.day()) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block-week')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n\n // Add button to switch back to previous overview\n this.drawButton()\n }\n\n\n /**\n * Draw day overview\n */\n drawDayOverview() {\n // Add current overview to the history\n if (this.history[this.history.length - 1] !== this.overview) {\n this.history.push(this.overview)\n }\n\n // Initialize selected date to today if it was not set\n if (!Object.keys(this.selected).length) {\n this.selected = this.props.data[this.props.data.length - 1]\n }\n\n let project_labels = this.selected.summary.map(project => {\n return project.name\n })\n let projectScale = d3.scaleBand()\n .rangeRound([this.settings.label_padding, this.settings.height])\n .domain(project_labels)\n\n let itemScale = d3.scaleTime()\n .range([this.settings.label_padding * 2, this.settings.width])\n .domain([moment(this.selected.date).startOf('day'), moment(this.selected.date).endOf('day')])\n this.items.selectAll('.item-block').remove()\n this.items.selectAll('.item-block')\n .data(this.selected.details)\n .enter()\n .append('rect')\n .attr('class', 'item item-block')\n .style('cursor', 'pointer')\n .attr('x', d => {\n return itemScale(moment(d.date))\n })\n .attr('y', d => {\n return (projectScale(d.name) + projectScale.bandwidth() / 2) - 15\n })\n .attr('width', d => {\n let end = itemScale(d3.timeSecond.offset(moment(d.date), d.value))\n return Math.max((end - itemScale(moment(d.date))), 1)\n })\n .attr('height', () => {\n return Math.min(projectScale.bandwidth(), this.settings.max_block_height)\n })\n .attr('fill', () => {\n return this.props.color\n })\n .style('opacity', 0)\n .on('mouseover', (event, d) => {\n if (this.in_transition) { return }\n\n // Construct tooltip\n let tooltip_html = ''\n tooltip_html += `
${d.name}

`\n tooltip_html += '
' + (d.value ? this.formatTime(d.value) : 'No time') + ' tracked
'\n tooltip_html += '
on ' + moment(d.date).format('dddd, MMM Do YYYY HH:mm') + '
'\n\n // Calculate tooltip position\n let x = d.value * 100 / (60 * 60 * 24) + itemScale(moment(d.date))\n while (this.settings.width - x < (this.settings.tooltip_width + this.settings.tooltip_padding * 3)) {\n x -= 10\n }\n let y = projectScale(d.name) + projectScale.bandwidth() / 2 + this.settings.tooltip_padding / 2\n\n // Show tooltip\n this.tooltip.html(tooltip_html)\n .style('left', x + 'px')\n .style('top', y + 'px')\n .transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n this.hideTooltip()\n })\n .on('click', (event, d) => {\n if (!!this.props.handler && typeof this.props.handler == 'function') {\n this.props.handler(d)\n }\n })\n .transition()\n .delay(() => {\n return (Math.cos(Math.PI * Math.random()) + 1) * this.settings.transition_duration\n })\n .duration(() => {\n return this.settings.transition_duration\n })\n .ease(d3.easeLinear)\n .style('opacity', 0.5)\n .call((transition, callback) => {\n if (transition.empty()) {\n callback()\n }\n let n = 0\n transition\n .each(() => ++n)\n .on('end', function() {\n if (!--n) {\n callback.apply(this, arguments)\n }\n })\n }, () => {\n this.in_transition = false\n })\n\n // Add time labels\n let timeLabels = d3.timeHours(\n moment(this.selected.date).startOf('day'),\n moment(this.selected.date).endOf('day')\n )\n let timeScale = d3.scaleTime()\n .range([this.settings.label_padding * 2, this.settings.width])\n .domain([0, timeLabels.length])\n this.labels.selectAll('.label-time').remove()\n this.labels.selectAll('.label-time')\n .data(timeLabels)\n .enter()\n .append('text')\n .attr('class', 'label label-time')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => {\n return moment(d).format('HH:mm')\n })\n .attr('x', (d, i) => {\n return timeScale(i)\n })\n .attr('y', this.settings.label_padding / 2)\n .on('mouseenter', (event, d) => {\n if (this.in_transition) { return }\n\n let selected = itemScale(moment(d))\n this.items.selectAll('.item-block')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n let start = itemScale(moment(d.date))\n let end = itemScale(moment(d.date).add(d.value, 'seconds'))\n return (selected >= start && selected <= end) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0.5)\n })\n\n // Add project labels\n let label_padding = this.settings.label_padding\n this.labels.selectAll('.label-project').remove()\n this.labels.selectAll('.label-project')\n .data(project_labels)\n .enter()\n .append('text')\n .attr('class', 'label label-project')\n .style('cursor', 'pointer')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('x', this.settings.gutter)\n .attr('y', d => {\n return projectScale(d) + projectScale.bandwidth() / 2\n })\n .attr('min-height', () => {\n return projectScale.bandwidth()\n })\n .style('text-anchor', 'left')\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .text(d => d)\n .each(function() {\n let obj = d3.select(this),\n text_length = obj.node().getComputedTextLength(),\n text = obj.text()\n while (text_length > (label_padding * 1.5) && text.length > 0) {\n text = text.slice(0, -1)\n obj.text(text + '...')\n text_length = obj.node().getComputedTextLength()\n }\n })\n .on('mouseenter', (event, project) => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', d => {\n return (d.name === project) ? 1 : 0.1\n })\n })\n .on('mouseout', () => {\n if (this.in_transition) { return }\n\n this.items.selectAll('.item-block')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0.5)\n })\n\n // Add button to switch back to previous overview\n this.drawButton()\n }\n\n\n /**\n * Draw the button for navigation purposes\n */\n drawButton() {\n this.buttons.selectAll('.button').remove()\n let button = this.buttons.append('g')\n .attr('class', 'button button-back')\n .style('cursor', 'pointer')\n .attr('fill', 'transparent')\n .style('opacity', 0)\n .style('stroke-width', 2)\n .style('stroke', 'rgb(170, 170, 170)')\n .on('click', () => {\n if (this.in_transition) { return }\n\n // Set transition boolean\n this.in_transition = true\n\n // Clean the canvas from whichever overview type was on\n if (this.overview === 'year') {\n this.removeYearOverview()\n } else if (this.overview === 'month') {\n this.removeMonthOverview()\n } else if (this.overview === 'week') {\n this.removeWeekOverview()\n } else if (this.overview === 'day') {\n this.removeDayOverview()\n }\n\n // Redraw the chart\n this.history.pop()\n this.overview = this.history.pop()\n this.drawChart()\n })\n button.append('circle')\n .attr('cx', this.settings.label_padding / 2.25)\n .attr('cy', this.settings.label_padding / 2.5)\n .attr('r', this.settings.item_size / 2)\n button.append('text')\n .style('stroke-width', 1)\n .style('text-anchor', 'middle')\n .style('fill', 'rgb(170, 170, 170)')\n .attr('x', this.settings.label_padding / 2.25)\n .attr('y', this.settings.label_padding / 2.5)\n .attr('dy', () => {\n return Math.floor(this.settings.width / 100) / 3\n })\n .attr('font-size', () => {\n return Math.floor(this.settings.label_padding / 3) + 'px'\n })\n .html('←')\n button.transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 1)\n }\n\n\n /**\n * Transition and remove items and labels related to global overview\n */\n removeGlobalOverview() {\n this.items.selectAll('.item-block-year')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .remove()\n this.labels.selectAll('.label-year').remove()\n }\n\n\n /**\n * Transition and remove items and labels related to year overview\n */\n removeYearOverview() {\n this.items.selectAll('.item-circle')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .remove()\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-month').remove()\n this.hideBackButton()\n }\n\n\n /**\n * Transition and remove items and labels related to month overview\n */\n removeMonthOverview() {\n this.items.selectAll('.item-block-month').selectAll('.item-block-rect')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .attr('x', (d, i) => {\n return (i % 2 === 0) ? -this.settings.width / 3 : this.settings.width / 3\n })\n .remove()\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-week').remove()\n this.hideBackButton()\n }\n\n\n /**\n * Transition and remove items and labels related to week overview\n */\n removeWeekOverview() {\n this.items.selectAll('.item-block-week').selectAll('.item-block-rect')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .attr('x', (d, i) => {\n return (i % 2 === 0) ? -this.settings.width / 3 : this.settings.width / 3\n })\n .remove()\n this.labels.selectAll('.label-day').remove()\n this.labels.selectAll('.label-week').remove()\n this.hideBackButton()\n }\n\n\n /**\n * Transition and remove items and labels related to daily overview\n */\n removeDayOverview() {\n this.items.selectAll('.item-block')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .attr('x', (d, i) => {\n return (i % 2 === 0) ? -this.settings.width / 3 : this.settings.width / 3\n })\n .remove()\n this.labels.selectAll('.label-time').remove()\n this.labels.selectAll('.label-project').remove()\n this.hideBackButton()\n }\n\n\n /**\n * Helper function to hide the tooltip\n */\n hideTooltip() {\n this.tooltip.transition()\n .duration(this.settings.transition_duration / 2)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n }\n\n\n /**\n * Helper function to hide the back button\n */\n hideBackButton() {\n this.buttons.selectAll('.button')\n .transition()\n .duration(this.settings.transition_duration)\n .ease(d3.easeLinear)\n .style('opacity', 0)\n .remove()\n }\n\n\n /**\n * Helper function to convert seconds to a human readable format\n * @param seconds Integer\n */\n formatTime(seconds) {\n let hours = Math.floor(seconds / 3600)\n let minutes = Math.floor((seconds - (hours * 3600)) / 60)\n let time = ''\n if (hours > 0) {\n time += hours === 1 ? '1 hour ' : hours + ' hours '\n }\n if (minutes > 0) {\n time += minutes === 1 ? '1 minute' : minutes + ' minutes'\n }\n if (hours === 0 && minutes === 0) {\n time = Math.round(seconds) + ' seconds'\n }\n return time\n }\n\n\n render() {\n return (\n
{this.container = elem}}>\n
\n )\n }\n}\n\n\nCalendarHeatmap.defaultProps = {\n data: [],\n overview: 'year',\n color: '#ff4500',\n handler: undefined,\n}\n\n\nexport default CalendarHeatmap\n","import CalendarHeatmap from './calendar-heatmap.component.js'\n\nexport default CalendarHeatmap\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".calendarHeatmap {\\n font-family: Helvetica, Arial, sans-serif;\\n user-select: none;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n}\\n.calendarHeatmap .heatmapTooltip {\\n pointer-events: none;\\n position: absolute;\\n z-index: 9999;\\n width: 250px;\\n max-width: 250px;\\n overflow: hidden;\\n padding: 15px;\\n font-size: 12px;\\n text-align: left;\\n line-height: 14px;\\n color: rgb(51, 51, 51);\\n font-family: Helvetica, arial, 'Open Sans', sans-serif;\\n background: rgba(255, 255, 255, 0.75);\\n}\\n.calendarHeatmap .heatmapTooltip .header strong {\\n display: inline-block;\\n width: 250px;\\n}\\n.calendarHeatmap .heatmapTooltip span {\\n display: inline-block;\\n width: 50%;\\n padding-right: 10px;\\n box-sizing: border-box;\\n}\\n.calendarHeatmap .heatmapTooltip span,\\n.calendarHeatmap .heatmapTooltip .header strong {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/calendar-heatmap.css\"],\"names\":[],\"mappings\":\"AAAA;EACE,yCAAyC;EACzC,iBAAiB;EACjB,qBAAqB;EACrB,sBAAsB;EACtB,yBAAyB;AAC3B;AACA;EACE,oBAAoB;EACpB,kBAAkB;EAClB,aAAa;EACb,YAAY;EACZ,gBAAgB;EAChB,gBAAgB;EAChB,aAAa;EACb,eAAe;EACf,gBAAgB;EAChB,iBAAiB;EACjB,sBAAsB;EACtB,sDAAsD;EACtD,qCAAqC;AACvC;AACA;EACE,qBAAqB;EACrB,YAAY;AACd;AACA;EACE,qBAAqB;EACrB,UAAU;EACV,mBAAmB;EACnB,sBAAsB;AACxB;AACA;;EAEE,mBAAmB;EACnB,gBAAgB;EAChB,uBAAuB;AACzB\",\"sourcesContent\":[\".calendarHeatmap {\\n font-family: Helvetica, Arial, sans-serif;\\n user-select: none;\\n -ms-user-select: none;\\n -moz-user-select: none;\\n -webkit-user-select: none;\\n}\\n.calendarHeatmap .heatmapTooltip {\\n pointer-events: none;\\n position: absolute;\\n z-index: 9999;\\n width: 250px;\\n max-width: 250px;\\n overflow: hidden;\\n padding: 15px;\\n font-size: 12px;\\n text-align: left;\\n line-height: 14px;\\n color: rgb(51, 51, 51);\\n font-family: Helvetica, arial, 'Open Sans', sans-serif;\\n background: rgba(255, 255, 255, 0.75);\\n}\\n.calendarHeatmap .heatmapTooltip .header strong {\\n display: inline-block;\\n width: 250px;\\n}\\n.calendarHeatmap .heatmapTooltip span {\\n display: inline-block;\\n width: 50%;\\n padding-right: 10px;\\n box-sizing: border-box;\\n}\\n.calendarHeatmap .heatmapTooltip span,\\n.calendarHeatmap .heatmapTooltip .header strong {\\n white-space: nowrap;\\n overflow: hidden;\\n text-overflow: ellipsis;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","import api from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../node_modules/css-loader/dist/cjs.js!./calendar-heatmap.css\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","\"use strict\";\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = typeof __webpack_nonce__ !== 'undefined' ? __webpack_nonce__ : null;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of