diff --git a/README.md b/README.md index 080a407e..9f2740e3 100644 --- a/README.md +++ b/README.md @@ -2,15 +2,15 @@ Heat.js [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Heat.js%2C%20a%20free%20JavaScript%heat%20map&url=https://github.com/williamtroup/Heat.js&hashtags=javascript,heat,map) -[![npm](https://img.shields.io/badge/npmjs-v2.8.0-blue)](https://www.npmjs.com/package/jheat.js) -[![nuget](https://img.shields.io/badge/nuget-v2.8.0-purple)](https://www.nuget.org/packages/jHeat.js/) +[![npm](https://img.shields.io/badge/npmjs-v3.0.0-blue)](https://www.npmjs.com/package/jheat.js) +[![nuget](https://img.shields.io/badge/nuget-v3.0.0-purple)](https://www.nuget.org/packages/jHeat.js/) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt) [![discussions Welcome](https://img.shields.io/badge/discussions-Welcome-red)](https://github.com/williamtroup/Heat.js/discussions) [![coded by William Troup](https://img.shields.io/badge/coded_by-William_Troup-yellow)](https://william-troup.com/) >

🌞 A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends.

->

v2.8.0

+>

v3.0.0


![Heat.js](docs/images/main.png) @@ -23,7 +23,8 @@ Heat.js - Full API available via public functions. - Fully styled in CSS/SASS, fully responsive, and compatible with the Bootstrap library. - Full CSS theme support (using :root variables). -- 3 views supported: Map, Chart and Statistics! +- 4 views supported: Map, Chart, Days, and Statistics! +- Configuration dialog support per view. - Fully configurable per DOM element. - Toggling colors on/off support. - Export all data to CSV, JSON, XML, and TXT. diff --git a/README_NUGET.md b/README_NUGET.md index 807b5d7f..3fe64279 100644 --- a/README_NUGET.md +++ b/README_NUGET.md @@ -1,8 +1,8 @@ -# Heat.js v2.8.0 +# Heat.js v3.0.0 [![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=Heat.js%2C%20a%20free%20JavaScript%heat%20map&url=https://github.com/williamtroup/Heat.js&hashtags=javascript,heat,map) -[![npm](https://img.shields.io/badge/npmjs-v2.8.0-blue)](https://www.npmjs.com/package/jheat.js) -[![nuget](https://img.shields.io/badge/nuget-v2.8.0-purple)](https://www.nuget.org/packages/jHeat.js/) +[![npm](https://img.shields.io/badge/npmjs-v3.0.0-blue)](https://www.npmjs.com/package/jheat.js) +[![nuget](https://img.shields.io/badge/nuget-v3.0.0-purple)](https://www.nuget.org/packages/jHeat.js/) [![license](https://img.shields.io/badge/license-MIT-green)](https://github.com/williamtroup/Heat.js/blob/main/LICENSE.txt) [![discussions Welcome](https://img.shields.io/badge/discussions-Welcome-red)](https://github.com/williamtroup/Heat.js/discussions) [![coded by William Troup](https://img.shields.io/badge/coded_by-William_Troup-yellow)](https://william-troup.com/) @@ -16,7 +16,8 @@ - Full API available via public functions. - Fully styled in CSS/SASS, fully responsive, and compatible with the Bootstrap library. - Full CSS theme support (using :root variables). -- 3 views supported: Map, Chart and Statistics! +- 4 views supported: Map, Chart, Days, and Statistics! +- Configuration dialog support per view. - Fully configurable per DOM element. - Toggling colors on/off support. - Export all data to CSV, JSON, XML, and TXT. diff --git a/dist/heat.js b/dist/heat.js index 7daf20ee..a0568efa 100644 --- a/dist/heat.js +++ b/dist/heat.js @@ -1,7 +1,7 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ (function() { var _parameter_Document = null, _parameter_Window = null, _parameter_Math = null, _parameter_JSON = null, _public = {}, _configuration = {}, _string = {empty:"", space:" ", newLine:"\n", dash:"-", underscore:"_", plus:"+", zero:"0", colon:":", comma:","}, _value = {notFound:-1}, _internal_Name_Holiday = "HOLIDAY", _local_Storage_Start_ID = "HJS_", _default_MonthsToShow = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], _default_DaysToShow = [1, 2, 3, 4, 5, 6, 7], _elements_Type = {}, _elements_Day_Width = - null, _elements_DateCounts = {}, _elements_View_Name_Map = "map", _elements_View_Name_Chart = "chart", _elements_View_Name_Statistics = "statistics", _elements_View_Map = 1, _elements_View_Chart = 2, _elements_View_Statistics = 3, _export_Type_Csv = "csv", _export_Type_Json = "json", _export_Type_Xml = "xml", _export_Type_Txt = "txt", _attribute_Name_Options = "data-heat-options"; + null, _elements_DateCounts = {}, _elements_View_Name_Map = "map", _elements_View_Name_Chart = "chart", _elements_View_Name_Days = "days", _elements_View_Name_Statistics = "statistics", _elements_View_Map = 1, _elements_View_Chart = 2, _elements_View_Days = 3, _elements_View_Statistics = 4, _export_Type_Csv = "csv", _export_Type_Json = "json", _export_Type_Xml = "xml", _export_Type_Txt = "txt", _attribute_Name_Options = "data-heat-options"; function render() { var tagTypes = _configuration.domElementTypes, tagTypesLength = tagTypes.length; for (var tagTypeIndex = 0; tagTypeIndex < tagTypesLength; tagTypeIndex++) { @@ -40,6 +40,10 @@ var bindingOptions = buildAttributeOptions(data), view = !isDefinedString(bindingOptions.view) ? _string.empty : bindingOptions.view.toLowerCase(); bindingOptions.currentView = {}; bindingOptions.currentView.element = element; + bindingOptions.currentView.disabledBackground = null; + bindingOptions.currentView.configurationDialog = null; + bindingOptions.currentView.dayCheckBoxes = {}; + bindingOptions.currentView.monthCheckBoxes = {}; bindingOptions.currentView.tooltip = null; bindingOptions.currentView.tooltipTimer = null; bindingOptions.currentView.mapContents = null; @@ -53,6 +57,10 @@ bindingOptions.currentView.chartContents = null; bindingOptions.currentView.chartContentsScrollLeft = 0; } + if (bindingOptions.views.days.enabled) { + bindingOptions.currentView.daysContents = null; + bindingOptions.currentView.daysContentsScrollLeft = 0; + } if (bindingOptions.views.statistics.enabled) { bindingOptions.currentView.statisticsContents = null; bindingOptions.currentView.statisticsContentsScrollLeft = 0; @@ -61,6 +69,8 @@ bindingOptions.currentView.view = _elements_View_Map; } else if (view === _elements_View_Name_Chart) { bindingOptions.currentView.view = _elements_View_Chart; + } else if (view === _elements_View_Name_Days) { + bindingOptions.currentView.view = _elements_View_Days; } else if (view === _elements_View_Name_Statistics) { bindingOptions.currentView.view = _elements_View_Statistics; } else { @@ -95,6 +105,9 @@ if (bindingOptions.views.chart.enabled && isDefined(bindingOptions.currentView.chartContents)) { bindingOptions.currentView.chartContentsScrollLeft = bindingOptions.currentView.chartContents.scrollLeft; } + if (bindingOptions.views.days.enabled && isDefined(bindingOptions.currentView.daysContents)) { + bindingOptions.currentView.daysContentsScrollLeft = bindingOptions.currentView.daysContents.scrollLeft; + } if (bindingOptions.views.statistics.enabled && isDefined(bindingOptions.currentView.statisticsContents)) { bindingOptions.currentView.statisticsContentsScrollLeft = bindingOptions.currentView.statisticsContents.scrollLeft; } @@ -102,6 +115,10 @@ bindingOptions.currentView.yearsAvailable = getYearsAvailableInData(bindingOptions); hideToolTip(bindingOptions); startDataPullTimer(bindingOptions); + if (bindingOptions.showConfigurationButton) { + renderDisabledBackground(bindingOptions); + renderConfigurationDialog(bindingOptions); + } renderControlToolTip(bindingOptions); renderControlTitleBar(bindingOptions); renderControlMap(bindingOptions, isForViewSwitch); @@ -109,6 +126,10 @@ renderControlChart(bindingOptions, isForViewSwitch); bindingOptions.currentView.chartContents.style.display = "none"; } + if (bindingOptions.views.days.enabled) { + renderControlDays(bindingOptions, isForViewSwitch); + bindingOptions.currentView.daysContents.style.display = "none"; + } if (bindingOptions.views.statistics.enabled) { renderControlStatistics(bindingOptions, isForViewSwitch); bindingOptions.currentView.statisticsContents.style.display = "none"; @@ -118,6 +139,8 @@ bindingOptions.currentView.mapContents.style.display = "block"; } else if (bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart) { bindingOptions.currentView.chartContents.style.display = "block"; + } else if (bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days) { + bindingOptions.currentView.daysContents.style.display = "block"; } else if (bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics) { bindingOptions.currentView.statisticsContents.style.display = "block"; } else { @@ -125,18 +148,138 @@ bindingOptions.currentView.mapContents.style.display = "block"; } } + function renderDisabledBackground(bindingOptions) { + bindingOptions.currentView.disabledBackground = createElement(bindingOptions.currentView.element, "div", "disabled"); + } + function showDisabledBackground(bindingOptions) { + if (isDefined(bindingOptions.currentView.disabledBackground) && bindingOptions.currentView.disabledBackground.style.display !== "block") { + bindingOptions.currentView.disabledBackground.style.display = "block"; + } + } + function hideDisabledBackground(bindingOptions) { + if (isDefined(bindingOptions.currentView.disabledBackground) && bindingOptions.currentView.disabledBackground.style.display !== "none") { + bindingOptions.currentView.disabledBackground.style.display = "none"; + } + } + function renderConfigurationDialog(bindingOptions) { + bindingOptions.currentView.configurationDialog = createElement(bindingOptions.currentView.disabledBackground, "div", "dialog configuration"); + var titleBar = createElement(bindingOptions.currentView.configurationDialog, "div", "dialog-title-bar"), contents = createElement(bindingOptions.currentView.configurationDialog, "div", "dialog-contents"), closeButton = createElement(titleBar, "div", "dialog-close"), daysContainer = createElement(contents, "div", "side-container panel"), monthsContainer = createElement(contents, "div", "side-container panel"); + createElementWithHTML(titleBar, "span", "dialog-title-bar-text", _configuration.configurationTitleText); + createElementWithHTML(daysContainer, "div", "side-container-title-text", _configuration.visibleDaysText + _string.colon); + createElementWithHTML(monthsContainer, "div", "side-container-title-text", _configuration.visibleMonthsText + _string.colon); + var months1Container = createElement(monthsContainer, "div", "side-container"), months2Container = createElement(monthsContainer, "div", "side-container"); + closeButton.onclick = function() { + hideConfigurationDialog(bindingOptions); + }; + for (var dayIndex = 0; dayIndex < 7; dayIndex++) { + bindingOptions.currentView.dayCheckBoxes[dayIndex] = buildCheckBox(daysContainer, _configuration.dayNames[dayIndex]).input; + } + for (var monthIndex1 = 0; monthIndex1 < 7; monthIndex1++) { + bindingOptions.currentView.monthCheckBoxes[monthIndex1] = buildCheckBox(months1Container, _configuration.monthNames[monthIndex1]).input; + } + for (var monthIndex2 = 7; monthIndex2 < 12; monthIndex2++) { + bindingOptions.currentView.monthCheckBoxes[monthIndex2] = buildCheckBox(months2Container, _configuration.monthNames[monthIndex2]).input; + } + addToolTip(closeButton, bindingOptions, _configuration.closeToolTipText); + } + function showConfigurationDialog(bindingOptions) { + showDisabledBackground(bindingOptions); + if (isDefined(bindingOptions.currentView.configurationDialog) && bindingOptions.currentView.configurationDialog.style.display !== "block") { + bindingOptions.currentView.configurationDialog.style.display = "block"; + } + var daysToShow = [], monthsToShow = []; + if (bindingOptions.currentView.view === _elements_View_Map) { + daysToShow = bindingOptions.views.map.daysToShow; + monthsToShow = bindingOptions.views.map.monthsToShow; + } else if (bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart) { + daysToShow = bindingOptions.views.chart.daysToShow; + monthsToShow = bindingOptions.views.chart.monthsToShow; + } else if (bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days) { + daysToShow = bindingOptions.views.days.daysToShow; + monthsToShow = bindingOptions.views.days.monthsToShow; + } else if (bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics) { + daysToShow = bindingOptions.views.statistics.daysToShow; + monthsToShow = bindingOptions.views.statistics.monthsToShow; + } else { + daysToShow = bindingOptions.views.map.daysToShow; + monthsToShow = bindingOptions.views.map.monthsToShow; + } + for (var dayIndex = 0; dayIndex < 7; dayIndex++) { + bindingOptions.currentView.dayCheckBoxes[dayIndex].checked = isDayVisible(daysToShow, dayIndex + 1); + } + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { + bindingOptions.currentView.monthCheckBoxes[monthIndex].checked = isMonthVisible(monthsToShow, monthIndex); + } + hideToolTip(bindingOptions); + } + function hideConfigurationDialog(bindingOptions) { + hideDisabledBackground(bindingOptions); + if (isDefined(bindingOptions.currentView.configurationDialog) && bindingOptions.currentView.configurationDialog.style.display !== "none") { + bindingOptions.currentView.configurationDialog.style.display = "none"; + } + var daysChecked = [], monthsChecked = [], render = false; + for (var dayIndex = 0; dayIndex < 7; dayIndex++) { + if (bindingOptions.currentView.dayCheckBoxes[dayIndex].checked) { + daysChecked.push(dayIndex + 1); + } + } + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { + if (bindingOptions.currentView.monthCheckBoxes[monthIndex].checked) { + monthsChecked.push(monthIndex + 1); + } + } + if (daysChecked.length >= 1) { + if (bindingOptions.currentView.view === _elements_View_Map) { + bindingOptions.views.map.daysToShow = daysChecked; + } else if (bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart) { + bindingOptions.views.chart.daysToShow = daysChecked; + } else if (bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days) { + bindingOptions.views.days.daysToShow = daysChecked; + } else if (bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics) { + bindingOptions.views.statistics.daysToShow = daysChecked; + } else { + bindingOptions.views.map.daysToShow = daysChecked; + } + render = true; + } + if (monthsChecked.length >= 1) { + if (bindingOptions.currentView.view === _elements_View_Map) { + bindingOptions.views.map.monthsToShow = monthsChecked; + } else if (bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart) { + bindingOptions.views.chart.monthsToShow = monthsChecked; + } else if (bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days) { + bindingOptions.views.days.monthsToShow = monthsChecked; + } else if (bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics) { + bindingOptions.views.statistics.monthsToShow = monthsChecked; + } else { + bindingOptions.views.map.monthsToShow = monthsChecked; + } + render = true; + } + if (render) { + renderControlContainer(bindingOptions); + fireCustomTrigger(bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions); + } else { + hideToolTip(bindingOptions); + } + } function renderControlToolTip(bindingOptions) { if (!isDefined(bindingOptions.currentView.tooltip)) { bindingOptions.currentView.tooltip = createElement(_parameter_Document.body, "div", "heat-js-tooltip"); bindingOptions.currentView.tooltip.style.display = "none"; - _parameter_Document.body.addEventListener("mousemove", function() { - hideToolTip(bindingOptions); - }); - _parameter_Document.addEventListener("scroll", function() { - hideToolTip(bindingOptions); - }); + assignToolTipEvents(bindingOptions); } } + function assignToolTipEvents(bindingOptions, add) { + add = getDefaultBoolean(add, true); + var addEventListener_Window = add ? _parameter_Window.addEventListener : _parameter_Window.removeEventListener, addEventListener_Document = add ? _parameter_Document.addEventListener : _parameter_Document.removeEventListener; + addEventListener_Window("mousemove", function() { + hideToolTip(bindingOptions); + }); + addEventListener_Document("scroll", function() { + hideToolTip(bindingOptions); + }); + } function addToolTip(element, bindingOptions, text) { if (element !== null) { element.onmousemove = function(e) { @@ -159,7 +302,7 @@ clearTimeout(bindingOptions.currentView.tooltipTimer); bindingOptions.currentView.tooltipTimer = null; } - if (bindingOptions.currentView.tooltip.style.display === "block") { + if (bindingOptions.currentView.tooltip.style.display !== "none") { bindingOptions.currentView.tooltip.style.display = "none"; } } @@ -167,7 +310,7 @@ function renderControlTitleBar(bindingOptions) { if (bindingOptions.showTitle || bindingOptions.showYearSelector || bindingOptions.showRefreshButton || bindingOptions.showExportButton || bindingOptions.showImportButton) { var titleBar = createElement(bindingOptions.currentView.element, "div", "title-bar"), title = createElement(titleBar, "div", "title"); - if (bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled) { + if (bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled) { createElement(title, "div", "down-arrow"); } else { addClass(title, "no-click"); @@ -175,17 +318,8 @@ if (bindingOptions.showTitle) { title.innerHTML += bindingOptions.titleText; } - if (bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled) { - var titlesList = createElement(title, "div", "titles-list"), titles = createElement(titlesList, "div", "titles"), optionMap = createElementWithHTML(titles, "div", "title", _configuration.mapText); - renderTitleDropDownClickEvent(bindingOptions, optionMap, _elements_View_Map, _elements_View_Name_Map); - if (bindingOptions.views.chart.enabled) { - var optionChart = createElementWithHTML(titles, "div", "title", _configuration.chartText); - renderTitleDropDownClickEvent(bindingOptions, optionChart, _elements_View_Chart, _elements_View_Name_Chart); - } - if (bindingOptions.views.statistics.enabled) { - var statisticsChart = createElementWithHTML(titles, "div", "title", _configuration.statisticsText); - renderTitleDropDownClickEvent(bindingOptions, statisticsChart, _elements_View_Statistics, _elements_View_Name_Statistics); - } + if (bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled) { + renderTitleDropDownMenu(bindingOptions, title); } if (bindingOptions.showImportButton && !bindingOptions.currentView.isInFetchMode) { var importData = createElementWithHTML(titleBar, "button", "import", _configuration.importButtonText); @@ -216,26 +350,17 @@ } bindingOptions.currentView.yearText = createElementWithHTML(titleBar, "div", "year-text", bindingOptions.currentView.year); if (bindingOptions.showYearSelectionDropDown) { - createElement(bindingOptions.currentView.yearText, "div", "down-arrow"); - var yearList = createElement(bindingOptions.currentView.yearText, "div", "years-list"), years = createElement(yearList, "div", "years"), thisYear = (new Date()).getFullYear(), activeYear = null; - yearList.style.display = "block"; - yearList.style.visibility = "hidden"; - for (var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++) { - if (isYearVisible(bindingOptions, currentYear)) { - var year = renderControlTitleBarYear(bindingOptions, years, currentYear, thisYear); - if (!isDefined(activeYear)) { - activeYear = year; - } - } - } - if (isDefined(activeYear)) { - years.scrollTop = activeYear.offsetTop - years.offsetHeight / 2; - } - yearList.style.display = "none"; - yearList.style.visibility = "visible"; + renderYearDropDownMenu(bindingOptions); } else { addClass(bindingOptions.currentView.yearText, "no-click"); } + if (bindingOptions.showConfigurationButton) { + var configureButton = createElement(titleBar, "div", "configure"); + addToolTip(configureButton, bindingOptions, _configuration.configurationToolTipText); + configureButton.onclick = function() { + showConfigurationDialog(bindingOptions); + }; + } var next = createElementWithHTML(titleBar, "button", "next", _configuration.nextButtonText); next.onclick = function() { moveToNextYear(bindingOptions); @@ -246,9 +371,29 @@ } } } - function renderTitleDropDownClickEvent(bindingOptions, option, view, viewName) { + function renderTitleDropDownMenu(bindingOptions, title) { + var titlesMenuContainer = createElement(title, "div", "titles-menu-container"), titlesMenu = createElement(titlesMenuContainer, "div", "titles-menu"); + createElementWithHTML(titlesMenu, "div", "title-menu-header", _configuration.dataText + _string.colon); + var menuItemMap = createElementWithHTML(titlesMenu, "div", "title-menu-item", _configuration.mapText); + renderTitleDropDownMenuItemClickEvent(bindingOptions, menuItemMap, _elements_View_Map, _elements_View_Name_Map); + if (bindingOptions.views.chart.enabled) { + var menuItemChart = createElementWithHTML(titlesMenu, "div", "title-menu-item", _configuration.chartText); + renderTitleDropDownMenuItemClickEvent(bindingOptions, menuItemChart, _elements_View_Chart, _elements_View_Name_Chart); + } + if (bindingOptions.views.days.enabled) { + createElementWithHTML(titlesMenu, "div", "title-menu-header", _configuration.yearText + _string.colon); + var menuItemDays = createElementWithHTML(titlesMenu, "div", "title-menu-item", _configuration.daysText); + renderTitleDropDownMenuItemClickEvent(bindingOptions, menuItemDays, _elements_View_Days, _elements_View_Name_Days); + } + if (bindingOptions.views.statistics.enabled) { + createElementWithHTML(titlesMenu, "div", "title-menu-header", _configuration.statisticsText + _string.colon); + var menuItemStatistics = createElementWithHTML(titlesMenu, "div", "title-menu-item", _configuration.colorRangesText); + renderTitleDropDownMenuItemClickEvent(bindingOptions, menuItemStatistics, _elements_View_Statistics, _elements_View_Name_Statistics); + } + } + function renderTitleDropDownMenuItemClickEvent(bindingOptions, option, view, viewName) { if (bindingOptions.currentView.view === view) { - addClass(option, "title-active"); + addClass(option, "title-menu-item-active"); } else { option.onclick = function() { bindingOptions.currentView.view = view; @@ -257,8 +402,27 @@ }; } } - function renderControlTitleBarYear(bindingOptions, years, currentYear, actualYear) { - var result = null, year = createElementWithHTML(years, "div", "year", currentYear); + function renderYearDropDownMenu(bindingOptions) { + createElement(bindingOptions.currentView.yearText, "div", "down-arrow"); + var yearsMenuContainer = createElement(bindingOptions.currentView.yearText, "div", "years-menu-container"), yearsMenu = createElement(yearsMenuContainer, "div", "years-menu"), thisYear = (new Date()).getFullYear(), activeYearMenuItem = null; + yearsMenuContainer.style.display = "block"; + yearsMenuContainer.style.visibility = "hidden"; + for (var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++) { + if (isYearVisible(bindingOptions, currentYear)) { + var yearMenuItem = renderYearDropDownMenuItem(bindingOptions, yearsMenu, currentYear, thisYear); + if (!isDefined(activeYearMenuItem)) { + activeYearMenuItem = yearMenuItem; + } + } + } + if (isDefined(activeYearMenuItem)) { + yearsMenu.scrollTop = activeYearMenuItem.offsetTop - yearsMenu.offsetHeight / 2; + } + yearsMenuContainer.style.display = "none"; + yearsMenuContainer.style.visibility = "visible"; + } + function renderYearDropDownMenuItem(bindingOptions, years, currentYear, actualYear) { + var result = null, year = createElementWithHTML(years, "div", "year-menu-item", currentYear); if (bindingOptions.currentView.year !== currentYear) { year.onclick = function() { bindingOptions.currentView.year = currentYear; @@ -266,10 +430,10 @@ fireCustomTrigger(bindingOptions.onSetYear, bindingOptions.currentView.year); }; if (currentYear === actualYear) { - addClass(year, "year-current"); + addClass(year, "year-menu-item-current"); } } else { - addClass(year, "year-active"); + addClass(year, "year-menu-item-active"); result = year; } return result; @@ -279,6 +443,9 @@ if (bindingOptions.views.chart.enabled) { renderControlChartContents(bindingOptions); } + if (bindingOptions.views.days.enabled) { + renderControlDaysContents(bindingOptions); + } if (bindingOptions.views.statistics.enabled) { renderControlStatisticsContents(bindingOptions); } @@ -533,6 +700,91 @@ } return result; } + function renderControlDaysContents(bindingOptions) { + bindingOptions.currentView.daysContents = createElement(bindingOptions.currentView.element, "div", "days-contents"); + makeAreaDroppable(bindingOptions.currentView.daysContents, bindingOptions); + } + function renderControlDays(bindingOptions, isForViewSwitch) { + var days = createElement(bindingOptions.currentView.daysContents, "div", "days"), dayNames = createElement(bindingOptions.currentView.daysContents, "div", "day-names"), labels = createElement(days, "div", "y-labels"), dayLines = createElement(days, "div", "day-lines"), dayValuesForCurrentYear = getLargestValuesForEachDay(bindingOptions); + if (isForViewSwitch) { + addClass(days, "view-switch"); + } + if (dayValuesForCurrentYear.largestValue > 0 && bindingOptions.views.days.showChartYLabels) { + var topLabel = createElementWithHTML(labels, "div", "label-0", dayValuesForCurrentYear.largestValue.toString()); + createElementWithHTML(labels, "div", "label-25", (_parameter_Math.floor(dayValuesForCurrentYear.largestValue / 4) * 3).toString()); + createElementWithHTML(labels, "div", "label-50", _parameter_Math.floor(dayValuesForCurrentYear.largestValue / 2).toString()); + createElementWithHTML(labels, "div", "label-75", _parameter_Math.floor(dayValuesForCurrentYear.largestValue / 4).toString()); + createElementWithHTML(labels, "div", "label-100", _string.zero); + labels.style.width = topLabel.offsetWidth + "px"; + dayNames.style.paddingLeft = labels.offsetWidth + getStyleValueByName(labels, "margin-right", true) + "px"; + } else { + labels.parentNode.removeChild(labels); + labels = null; + } + if (dayValuesForCurrentYear.largestValue === 0) { + bindingOptions.currentView.daysContents.style.minHeight = bindingOptions.currentView.mapContents.offsetHeight + "px"; + days.parentNode.removeChild(days); + dayNames.parentNode.removeChild(dayNames); + var noDataMessage = createElementWithHTML(bindingOptions.currentView.daysContents, "div", "no-days-message", _configuration.noDaysDataMessage); + if (isForViewSwitch) { + addClass(noDataMessage, "view-switch"); + } + } else { + var pixelsPerNumbers = bindingOptions.currentView.mapContents.offsetHeight / dayValuesForCurrentYear.largestValue; + for (var day in dayValuesForCurrentYear.days) { + if (dayValuesForCurrentYear.days.hasOwnProperty(day) && isDayVisible(bindingOptions.views.days.daysToShow, parseInt(day))) { + renderControlDaysDayLine(dayLines, day, dayValuesForCurrentYear.days[day], bindingOptions, pixelsPerNumbers); + if (bindingOptions.views.days.showDayNames) { + createElementWithHTML(dayNames, "div", "day-name", _configuration.dayNames[day - 1]); + } + } + } + if (bindingOptions.views.days.showInReverseOrder) { + reverseElementsOrder(dayLines); + reverseElementsOrder(dayNames); + } + if (bindingOptions.keepScrollPositions) { + bindingOptions.currentView.daysContents.scrollLeft = bindingOptions.currentView.daysContentsScrollLeft; + } + } + } + function renderControlDaysDayLine(dayLines, dayNumber, dayCount, bindingOptions, pixelsPerNumbers) { + var dayLine = createElement(dayLines, "div", "day-line"), dayLineHeight = dayCount * pixelsPerNumbers; + dayLine.style.height = dayLineHeight + "px"; + if (dayLineHeight <= 0) { + dayLine.style.visibility = "hidden"; + } + addToolTip(dayLine, bindingOptions, dayCount.toString()); + if (isDefinedFunction(bindingOptions.onWeekDayClick)) { + dayLine.onclick = function() { + fireCustomTrigger(bindingOptions.onWeekDayClick, dayNumber, dayCount); + }; + } else { + addClass(dayLine, "no-hover"); + } + if (bindingOptions.views.days.showDayNumbers && dayCount > 0) { + addClass(dayLine, "day-line-number"); + createElementWithHTML(dayLine, "div", "count", dayCount); + } + } + function getLargestValuesForEachDay(bindingOptions) { + var largestValue = 0, data = getCurrentViewData(bindingOptions); + var days = {1:0, 2:0, 3:0, 4:0, 5:0, 6:0, 7:0,}; + for (var monthIndex = 0; monthIndex < 12; monthIndex++) { + var totalDaysInMonth = getTotalDaysInMonth(bindingOptions.currentView.year, monthIndex); + for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { + var storageDate = toStorageDate(new Date(bindingOptions.currentView.year, monthIndex, dayIndex + 1)); + if (data.hasOwnProperty(storageDate)) { + var storageDateParts = getStorageDate(storageDate), storageDateObject = new Date(storageDateParts[2], storageDateParts[1], storageDateParts[0]), weekDayNumber = getWeekdayNumber(storageDateObject) + 1; + if (!isHoliday(bindingOptions, storageDateObject).matched && isMonthVisible(bindingOptions.views.days.monthsToShow, storageDateObject.getMonth()) && isDayVisible(bindingOptions.views.days.daysToShow, weekDayNumber)) { + days[weekDayNumber] += data[storageDate]; + largestValue = _parameter_Math.max(largestValue, days[weekDayNumber]); + } + } + } + } + return {days:days, largestValue:largestValue}; + } function renderControlStatisticsContents(bindingOptions) { bindingOptions.currentView.statisticsContents = createElement(bindingOptions.currentView.element, "div", "statistics-contents"); makeAreaDroppable(bindingOptions.currentView.statisticsContents, bindingOptions); @@ -623,7 +875,7 @@ for (var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++) { var storageDate = toStorageDate(new Date(bindingOptions.currentView.year, monthIndex, dayIndex + 1)); if (data.hasOwnProperty(storageDate)) { - var storageDateParts = getStorageDate(storageDate), storageDateObject = new Date(storageDateParts[2], storageDateParts[1], storageDateParts[0]), weekDayNumber = getWeekdayNumber(storageDateObject); + var storageDateParts = getStorageDate(storageDate), storageDateObject = new Date(storageDateParts[2], storageDateParts[1], storageDateParts[0]), weekDayNumber = getWeekdayNumber(storageDateObject) + 1; if (!isHoliday(bindingOptions, storageDateObject).matched && isMonthVisible(bindingOptions.views.statistics.monthsToShow, storageDateObject.getMonth()) && isDayVisible(bindingOptions.views.statistics.daysToShow, weekDayNumber)) { var useColorRange = getColorRange(bindingOptions, colorRanges, data[storageDate]); if (!isDefined(useColorRange)) { @@ -1212,10 +1464,12 @@ options.dataFetchDelay = getDefaultNumber(options.dataFetchDelay, 60000); options.showOnlyDataForYearsAvailable = getDefaultBoolean(options.showOnlyDataForYearsAvailable, false); options.showHolidaysInDayToolTips = getDefaultBoolean(options.showHolidaysInDayToolTips, false); + options.showConfigurationButton = getDefaultBoolean(options.showConfigurationButton, true); options = buildAttributeOptionColorRanges(options); options = buildAttributeOptionHolidays(options); options = buildAttributeOptionMapView(options); options = buildAttributeOptionChartView(options); + options = buildAttributeOptionDaysView(options); options = buildAttributeOptionStatisticsView(options); options = buildAttributeOptionStrings(options); options = buildAttributeOptionCustomTriggers(options); @@ -1289,6 +1543,21 @@ } return options; } + function buildAttributeOptionDaysView(options) { + options.views.days = !isDefinedObject(options.views.days) ? {} : options.views.days; + options.views.days.enabled = getDefaultBoolean(options.views.days.enabled, true); + options.views.days.showChartYLabels = getDefaultBoolean(options.views.days.showChartYLabels, true); + options.views.days.showDayNames = getDefaultBoolean(options.views.days.showDayNames, true); + options.views.days.showInReverseOrder = getDefaultBoolean(options.views.days.showInReverseOrder, false); + options.views.days.showDayNumbers = getDefaultBoolean(options.views.days.showDayNumbers, false); + if (isInvalidOptionArray(options.views.days.monthsToShow)) { + options.views.days.monthsToShow = _default_MonthsToShow; + } + if (isInvalidOptionArray(options.views.days.daysToShow)) { + options.views.days.daysToShow = _default_DaysToShow; + } + return options; + } function buildAttributeOptionStatisticsView(options) { options.views.statistics = !isDefinedObject(options.views.statistics) ? {} : options.views.statistics; options.views.statistics.enabled = getDefaultBoolean(options.views.statistics.enabled, true); @@ -1332,6 +1601,8 @@ options.onDataFetch = getDefaultFunction(options.onDataFetch, null); options.onClear = getDefaultFunction(options.onClear, null); options.onUpdate = getDefaultFunction(options.onUpdate, null); + options.onOptionsUpdate = getDefaultFunction(options.onOptionsUpdate, null); + options.onWeekDayClick = getDefaultFunction(options.onWeekDayClick, null); return options; } function getTotalDaysInMonth(year, month) { @@ -1476,6 +1747,19 @@ parent.appendChild(children[childrenLength]); } } + function buildCheckBox(container, labelText, checked, onClick) { + var lineContainer = createElement(container, "div"), label = createElement(lineContainer, "label", "checkbox"), input = createElement(label, "input"); + input.type = "checkbox"; + if (isDefined(onClick)) { + input.onclick = onClick; + } + if (isDefined(checked)) { + input.checked = checked; + } + createElement(label, "span", "check-mark"); + createElementWithHTML(label, "span", "text", labelText); + return {input:input, label:label}; + } function fireCustomTrigger(triggerFunction) { var result = null; if (isDefinedFunction(triggerFunction)) { @@ -1821,6 +2105,8 @@ view = _elements_View_Map; } else if (viewName.toLowerCase() === _elements_View_Name_Chart) { view = _elements_View_Chart; + } else if (viewName.toLowerCase() === _elements_View_Name_Days) { + view = _elements_View_Days; } else if (viewName.toLowerCase() === _elements_View_Name_Statistics) { view = _elements_View_Statistics; } @@ -1855,6 +2141,7 @@ if (optionChanged) { renderControlContainer(bindingOptions, true); fireCustomTrigger(bindingOptions.onRefresh, bindingOptions.currentView.element); + fireCustomTrigger(bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions); } } return _public; @@ -1916,6 +2203,7 @@ function destroyElement(bindingOptions) { bindingOptions.currentView.element.innerHTML = _string.empty; removeClass(bindingOptions.currentView.element, "heat-js"); + assignToolTipEvents(bindingOptions, false); _parameter_Document.body.removeChild(bindingOptions.currentView.tooltip); if (bindingOptions.currentView.isInFetchMode && isDefined(bindingOptions.currentView.isInFetchModeTimer)) { clearInterval(bindingOptions.currentView.isInFetchModeTimer); @@ -1972,6 +2260,16 @@ _configuration.objectErrorText = getDefaultString(_configuration.objectErrorText, "Errors in object: {{error_1}}, {{error_2}}"); _configuration.attributeNotValidErrorText = getDefaultString(_configuration.attributeNotValidErrorText, "The attribute '{{attribute_name}}' is not a valid object."); _configuration.attributeNotSetErrorText = getDefaultString(_configuration.attributeNotSetErrorText, "The attribute '{{attribute_name}}' has not been set correctly."); + _configuration.closeToolTipText = getDefaultString(_configuration.closeToolTipText, "Close"); + _configuration.configurationToolTipText = getDefaultString(_configuration.configurationToolTipText, "Configuration"); + _configuration.configurationTitleText = getDefaultString(_configuration.configurationTitleText, "Configuration"); + _configuration.visibleMonthsText = getDefaultString(_configuration.visibleMonthsText, "Visible Months"); + _configuration.visibleDaysText = getDefaultString(_configuration.visibleDaysText, "Visible Days"); + _configuration.dataText = getDefaultString(_configuration.dataText, "Data"); + _configuration.colorRangesText = getDefaultString(_configuration.colorRangesText, "Color Ranges"); + _configuration.yearText = getDefaultString(_configuration.yearText, "Year"); + _configuration.daysText = getDefaultString(_configuration.daysText, "Days"); + _configuration.noDaysDataMessage = getDefaultString(_configuration.noDaysDataMessage, "There are currently no days to view."); } function buildDefaultConfigurationArrays() { if (isInvalidOptionArray(_configuration.monthNames, 12)) { @@ -1995,7 +2293,7 @@ return result; }; _public.getVersion = function() { - return "2.8.0"; + return "3.0.0"; }; (function(documentObject, windowObject, mathObject, jsonObject) { _parameter_Document = documentObject; diff --git a/dist/heat.js.css b/dist/heat.js.css index 34715ec2..fff47359 100644 --- a/dist/heat.js.css +++ b/dist/heat.js.css @@ -1,5 +1,5 @@ /* - * Heat.js Library v2.8.0 + * Heat.js Library v3.0.0 * * Copyright 2024 Bunoon * Released under the MIT License @@ -8,6 +8,7 @@ --heat-js-default-font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --heat-js-text-bold-weight: 400; --heat-js-title-bold-weight: 900; + --heat-js-sub-title-bold-weight: 700; --heat-js-text-bold-weight-active: 900; --heat-js-color-black: #3b3a3a; --heat-js-color-white: #adbac7; @@ -15,6 +16,9 @@ --heat-js-color-gray: #AAAAAA; --heat-js-container-background-color: #22272e; --heat-js-container-border-color: #454c56; + --heat-js-dialog-background-color: var(--heat-js-container-background-color); + --heat-js-dialog-border-color: var(--heat-js-container-border-color); + --heat-js-dialog-text-color: var(--heat-js-color-white); --heat-js-tooltip-background-color: var(--heat-js-container-background-color); --heat-js-tooltip-border-color: var(--heat-js-container-border-color); --heat-js-tooltip-text-color: var(--heat-js-color-white); @@ -52,6 +56,9 @@ --heat-js-day-color-4-background-color: rgba( 80, 200, 120, 1 ); --heat-js-day-color-4-border-color: rgba( 80, 200, 120, 0.75 ); --heat-js-day-color-4-text-color: var(--heat-js-color-black); + --heat-js-view-days-background-color: var(--heat-js-day-color-4-background-color); + --heat-js-view-days-border-color: var(--heat-js-day-color-4-border-color); + --heat-js-view-days-text-color: var(--heat-js-day-color-4-text-color); --heat-js-button-background-color: var(--heat-js-day-background-color); --heat-js-button-border-color: var(--heat-js-container-border-color); --heat-js-button-text-color: var(--heat-js-color-white); @@ -59,6 +66,13 @@ --heat-js-button-text-color-hover: var(--heat-js-color-snow-white); --heat-js-button-background-color-active: #616b79; --heat-js-button-text-color-active: var(--heat-js-color-snow-white); + --heat-js-checkbox-background-color-checked: rgba( 80, 200, 120, 1 ); + --heat-js-checkbox-background-color: var(--heat-js-color-black); + --heat-js-checkbox-border-color-checked: --heat-js-checkbox-background-color-checked; + --heat-js-checkbox-border-color: var(--heat-js-color-white); + --heat-js-panel-background-color: var(--heat-js-day-background-color); + --heat-js-panel-border-color: var(--heat-js-container-border-color); + --heat-js-border-control-radius: 0.25rem; --heat-js-border-radius: 0.5rem; --heat-js-border-radius-day: 0.35rem; --heat-js-border-size: 0.5px; @@ -70,11 +84,6 @@ --heat-js-animation-length: 0.5s; } -/* - ------------------------------------------------------------------------- - Heat.js - Mixins - ------------------------------------------------------------------------- -*/ /* ------------------------------------------------------------------------- Heat.js - Container @@ -117,6 +126,106 @@ div.heat-js *::before, div.heat-js *::after { line-height: normal; } +/* + ------------------------------------------------------------------------- + Heat.js - Disabled Background + ------------------------------------------------------------------------- +*/ +div.heat-js div.disabled { + display: none; + z-index: 1000; + position: absolute; + background-color: rgba(0, 0, 0, 0.3); + top: 0; + left: 0; + height: 100%; + width: 100%; + animation: fade-in-animation var(--heat-js-animation-length); +} +div.heat-js div.disabled div.dialog { + display: none; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + max-width: 450px; + width: calc(100% - var(--heat-js-spacing) * 2); + background-color: var(--heat-js-dialog-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-dialog-border-color); + color: var(--heat-js-dialog-text-color); + border-radius: var(--heat-js-border-radius); + animation: fade-in-animation var(--heat-js-animation-length); +} +div.heat-js div.disabled div.dialog div.dialog-title-bar { + position: relative; + padding: var(--heat-js-spacing); + text-align: left; +} +div.heat-js div.disabled div.dialog div.dialog-title-bar span.dialog-title-bar-text { + font-weight: var(--heat-js-title-bold-weight); +} +div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close { + float: right; + width: 16px; + height: 16px; + position: relative; + cursor: pointer; +} +div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before, div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after { + content: ""; + position: absolute; + height: 16px; + width: 3px; + left: 6.5px; + top: 0; + background-color: var(--heat-js-color-white); + border-radius: var(--heat-js-border-radius); + transition: var(--heat-js-transition); +} +div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before { + transform: rotate(45deg); +} +div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after { + transform: rotate(-45deg); +} +div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::before, div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::after { + background-color: var(--heat-js-color-gray); +} +div.heat-js div.disabled div.dialog div.dialog-contents { + padding: var(--heat-js-spacing); + overflow-x: scroll; + overflow-y: hidden; +} + +/* + ------------------------------------------------------------------------- + Heat.js - Configuration Dialog + ------------------------------------------------------------------------- +*/ +div.heat-js div.disabled div.configuration div.dialog-contents div.panel { + background-color: var(--heat-js-panel-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-panel-border-color); + border-radius: var(--heat-js-border-radius); + padding: var(--heat-js-spacing); +} +div.heat-js div.disabled div.configuration div.dialog-contents div.side-container { + vertical-align: top; + display: inline-block; + width: calc(50% - var(--heat-js-spacing)); + margin-right: var(--heat-js-spacing); +} +div.heat-js div.disabled div.configuration div.dialog-contents div.side-container:last-child { + margin-right: 0; + width: 50%; +} +div.heat-js div.disabled div.configuration div.dialog-contents div.side-container div.side-container-title-text { + margin-bottom: var(--heat-js-spacing); + font-weight: var(--heat-js-sub-title-bold-weight); +} +div.heat-js div.disabled div.configuration div.dialog-contents div.side-container label.checkbox { + margin-left: var(--heat-js-spacing); +} + /* ------------------------------------------------------------------------- Heat.js - Title Bar @@ -126,6 +235,100 @@ div.heat-js div.title-bar { text-align: right; margin-bottom: calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2); } +div.heat-js div.title-bar button { + background-color: var(--heat-js-button-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-button-border-color); + color: var(--heat-js-button-text-color); + border-radius: var(--heat-js-border-radius); + padding-top: 5px; + padding-bottom: 5px; + padding-left: 9px; + padding-right: 9px; + outline: none; + transition: var(--heat-js-transition); +} +div.heat-js div.title-bar button:disabled { + color: var(--heat-js-button-border-color); +} +div.heat-js div.title-bar button:not(.active):not(:disabled):active { + background: var(--heat-js-button-background-color-active) !important; + color: var(--heat-js-button-text-color-active) !important; +} +div.heat-js div.title-bar button:not(.active):not(:disabled):hover { + cursor: pointer; + background: var(--heat-js-button-background-color-hover); + color: var(--heat-js-button-text-color-hover); +} +div.heat-js div.title-bar button.active { + cursor: default; + background: var(--heat-js-button-background-color-hover); + color: var(--heat-js-button-text-color-hover); + transition: var(--heat-js-transition); + font-weight: var(--heat-js-text-bold-weight-active); +} +div.heat-js div.title-bar button.back { + margin-left: calc(var(--heat-js-spacing) * 2) !important; +} +div.heat-js div.title-bar button.export, +div.heat-js div.title-bar button.import { + margin-right: calc(var(--heat-js-spacing) / 2) !important; +} +div.heat-js div.title-bar div.configure { + display: inline-block; + width: 8.5px; + height: 8.5px; + position: relative; + margin-right: var(--heat-js-spacing); + transition: var(--heat-js-transition); +} +div.heat-js div.title-bar div.configure:hover::before, div.heat-js div.title-bar div.configure:hover::after { + border-color: var(--heat-js-title-opener-text-color-hover); + cursor: pointer; +} +div.heat-js div.title-bar div.configure::before { + content: ""; + position: absolute; + height: 8.5px; + width: 8.5px; + border-color: var(--heat-js-color-white); + border-width: 2px; + border-style: solid; + transform: rotate(-45deg); + top: 0; + left: 0; + transition: var(--heat-js-transition); +} +div.heat-js div.title-bar div.configure::after { + content: ""; + position: absolute; + height: 8.5px; + width: 8.5px; + border-color: var(--heat-js-color-white); + border-width: 2px; + border-style: solid; + transform: rotate(90deg); + top: 0; + left: 0; + transition: var(--heat-js-transition); +} +div.heat-js div.title-bar button.export, +div.heat-js div.title-bar button.refresh, +div.heat-js div.title-bar button.import { + display: none; +} +@media (min-width: 768px) { + div.heat-js div.title-bar button.export, + div.heat-js div.title-bar button.refresh, + div.heat-js div.title-bar button.import { + display: inline-block; + } +} + +/* + ------------------------------------------------------------------------- + Heat.js - Title Bar - Title Drop-Down + ------------------------------------------------------------------------- +*/ div.heat-js div.title-bar div.title { float: left; font-weight: var(--heat-js-title-bold-weight); @@ -140,7 +343,7 @@ div.heat-js div.title-bar div.title:hover { div.heat-js div.title-bar div.title:hover div.down-arrow { border-top-color: var(--heat-js-title-opener-text-color-hover); } -div.heat-js div.title-bar div.title:hover div.titles-list { +div.heat-js div.title-bar div.title:hover div.titles-menu-container { display: block; } div.heat-js div.title-bar div.title div.down-arrow { @@ -153,87 +356,81 @@ div.heat-js div.title-bar div.title div.down-arrow { transition: var(--heat-js-transition); margin-right: var(--heat-js-spacing); } -div.heat-js div.title-bar div.title div.titles-list { +div.heat-js div.title-bar div.title div.titles-menu-container { animation: fade-in-animation var(--heat-js-animation-length); padding-top: 3px; display: none; position: absolute; - width: 100px; + min-width: 100px; margin-top: 3px; z-index: 1000; } -div.heat-js div.title-bar div.title div.titles-list div.titles { +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu { border-radius: var(--heat-js-border-radius); background-color: var(--heat-js-title-background-color); border: var(--heat-js-border-size) solid var(--heat-js-title-border-color); color: var(--heat-js-title-text-color); overflow-y: scroll; } -div.heat-js div.title-bar div.title div.titles-list div.titles div.title { +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-header { + color: var(--heat-js-color-white); + font-weight: var(--heat-js-title-bold-weight); + padding: var(--heat-js-spacing); + padding-right: calc(var(--heat-js-spacing) * 3); + text-align: left; + width: 100%; + font-size: var(--heat-js-spacing-font-size) !important; + cursor: default; +} +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item { color: var(--heat-js-color-white); font-weight: var(--heat-js-text-bold-weight); - border-bottom: var(--heat-js-border-size) dashed var(--heat-js-container-border-color); padding: var(--heat-js-spacing); + padding-right: calc(var(--heat-js-spacing) * 3); + padding-left: calc(var(--heat-js-spacing) * 3); text-align: left; width: 100%; transition: var(--heat-js-transition); font-size: var(--heat-js-spacing-font-size) !important; + position: relative; } -div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):active { +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item::before { + content: ""; + position: absolute; + left: var(--heat-js-spacing); + top: 50%; + transform: translate(0, -50%); + border-radius: 50%; + width: 8px; + height: 8px; + background-color: var(--heat-js-color-white); +} +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):active { opacity: 0.5 !important; } -div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):hover { +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):hover { cursor: pointer; background-color: var(--heat-js-title-background-color-hover); color: var(--heat-js-title-text-color-hover); } -div.heat-js div.title-bar div.title div.titles-list div.titles div.title:last-child { - border-bottom: none; +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):hover::before { + background-color: var(--heat-js-title-text-color-hover); } -div.heat-js div.title-bar div.title div.titles-list div.titles div.title-active { +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item-active { background-color: var(--heat-js-title-background-color-hover); color: var(--heat-js-title-text-color-hover); font-weight: var(--heat-js-text-bold-weight-active); cursor: default !important; } -div.heat-js div.title-bar button { - background-color: var(--heat-js-button-background-color); - border: var(--heat-js-border-size) solid var(--heat-js-button-border-color); - color: var(--heat-js-button-text-color); - border-radius: var(--heat-js-border-radius); - padding-top: 5px; - padding-bottom: 5px; - padding-left: 9px; - padding-right: 9px; - outline: none; - transition: var(--heat-js-transition); -} -div.heat-js div.title-bar button:disabled { - color: var(--heat-js-button-border-color); -} -div.heat-js div.title-bar button:not(.active):not(:disabled):active { - background: var(--heat-js-button-background-color-active) !important; - color: var(--heat-js-button-text-color-active) !important; -} -div.heat-js div.title-bar button:not(.active):not(:disabled):hover { - cursor: pointer; - background: var(--heat-js-button-background-color-hover); - color: var(--heat-js-button-text-color-hover); -} -div.heat-js div.title-bar button.active { - cursor: default; - background: var(--heat-js-button-background-color-hover); - color: var(--heat-js-button-text-color-hover); - transition: var(--heat-js-transition); - font-weight: var(--heat-js-text-bold-weight-active); -} -div.heat-js div.title-bar button.back { - margin-left: calc(var(--heat-js-spacing) * 2) !important; -} -div.heat-js div.title-bar button.export, -div.heat-js div.title-bar button.import { - margin-right: calc(var(--heat-js-spacing) / 2) !important; +div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item-active::before { + background-color: var(--heat-js-title-text-color-hover); } + +/* + ------------------------------------------------------------------------- + Heat.js - Title Bar - Year Drop-Down + ------------------------------------------------------------------------- +*/ div.heat-js div.title-bar div.year-text { margin-left: var(--heat-js-spacing); margin-right: var(--heat-js-spacing); @@ -251,7 +448,7 @@ div.heat-js div.title-bar div.year-text:hover { div.heat-js div.title-bar div.year-text:hover div.down-arrow { border-top-color: var(--heat-js-title-opener-text-color-hover); } -div.heat-js div.title-bar div.year-text:hover div.years-list { +div.heat-js div.title-bar div.year-text:hover div.years-menu-container { display: block !important; } div.heat-js div.title-bar div.year-text div.down-arrow { @@ -264,7 +461,7 @@ div.heat-js div.title-bar div.year-text div.down-arrow { transition: var(--heat-js-transition); margin-left: calc(var(--heat-js-spacing) / 2); } -div.heat-js div.title-bar div.year-text div.years-list { +div.heat-js div.title-bar div.year-text div.years-menu-container { animation: fade-in-animation var(--heat-js-animation-length); padding-top: 5px; display: none; @@ -275,7 +472,7 @@ div.heat-js div.title-bar div.year-text div.years-list { margin-top: 5px; z-index: 1000; } -div.heat-js div.title-bar div.year-text div.years-list div.years { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu { border-radius: var(--heat-js-border-radius); background-color: var(--heat-js-years-background-color); border: var(--heat-js-border-size) solid var(--heat-js-years-border-color); @@ -285,7 +482,7 @@ div.heat-js div.title-bar div.year-text div.years-list div.years { overflow-y: scroll; scroll-snap-type: y mandatory; } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item { color: var(--heat-js-color-white); font-weight: var(--heat-js-text-bold-weight); border-bottom: var(--heat-js-border-size) dashed var(--heat-js-container-border-color); @@ -295,43 +492,31 @@ div.heat-js div.title-bar div.year-text div.years-list div.years div.year { transition: var(--heat-js-transition); scroll-snap-align: start; } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):active { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-active):active { opacity: 0.5 !important; } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):hover { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-active):hover { cursor: pointer; background-color: var(--heat-js-years-background-color-hover); color: var(--heat-js-years-text-color-hover); } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year:last-child { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:last-child { border-bottom: none; } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year-active { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item-active { background-color: var(--heat-js-years-background-color-hover); color: var(--heat-js-years-text-color-hover); font-weight: var(--heat-js-text-bold-weight-active); cursor: default !important; } -div.heat-js div.title-bar div.year-text div.years-list div.years div.year-current { +div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item-current { font-style: italic; font-weight: var(--heat-js-text-bold-weight-active); } -div.heat-js div.title-bar button.export, -div.heat-js div.title-bar button.refresh, -div.heat-js div.title-bar button.import { - display: none; -} -@media (min-width: 768px) { - div.heat-js div.title-bar button.export, - div.heat-js div.title-bar button.refresh, - div.heat-js div.title-bar button.import { - display: inline-block; - } -} /* ------------------------------------------------------------------------- - Heat.js - Map + Heat.js - View - Map ------------------------------------------------------------------------- */ div.heat-js div.map-contents { @@ -441,7 +626,7 @@ div.heat-js div.map-contents div.map div.months div.month div.day-columns div.da /* ------------------------------------------------------------------------- - Heat.js - Chart + Heat.js - View - Chart ------------------------------------------------------------------------- */ div.heat-js div.chart-contents { @@ -572,7 +757,148 @@ div.heat-js div.chart-contents div.chart-months div.month-name-space { /* ------------------------------------------------------------------------- - Heat.js - Statistics + Heat.js - View - Days + ------------------------------------------------------------------------- +*/ +div.heat-js div.days-contents { + display: flex; + overflow: hidden; + text-wrap: nowrap; + white-space: nowrap; + position: relative; +} +div.heat-js div.days-contents div.no-days-message { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + font-weight: var(--heat-js-text-bold-weight); +} +div.heat-js div.days-contents div.days { + display: flex; + flex-direction: row; +} +div.heat-js div.days-contents div.days div.y-labels { + background-color: var(--heat-js-container-background-color); + padding-right: calc(var(--heat-js-spacing) * 3); + padding-top: calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px); + position: sticky; + left: 0; + display: none; + border-right: var(--heat-js-border-size) solid var(--heat-js-container-border-color); + z-index: 50; +} +@media (min-width: 768px) { + div.heat-js div.days-contents div.days div.y-labels { + display: block; + } +} +div.heat-js div.days-contents div.days div.y-labels div.label-0, +div.heat-js div.days-contents div.days div.y-labels div.label-25, +div.heat-js div.days-contents div.days div.y-labels div.label-50, +div.heat-js div.days-contents div.days div.y-labels div.label-75, +div.heat-js div.days-contents div.days div.y-labels div.label-100 { + font-weight: var(--heat-js-text-bold-weight); + text-align: left !important; + height: var(--heat-js-day-size); + display: inline-flex; + justify-content: center; + flex-direction: column; + position: absolute; + left: 0; + padding-right: var(--heat-js-spacing); +} +div.heat-js div.days-contents div.days div.y-labels div.label-0 { + top: 0; +} +div.heat-js div.days-contents div.days div.y-labels div.label-25 { + top: 25%; + transform: translateY(-25%); +} +div.heat-js div.days-contents div.days div.y-labels div.label-50 { + top: 50%; + transform: translateY(-50%); +} +div.heat-js div.days-contents div.days div.y-labels div.label-75 { + top: 75%; + transform: translateY(-75%); +} +div.heat-js div.days-contents div.days div.y-labels div.label-100 { + bottom: 0; +} +div.heat-js div.days-contents div.days div.day-lines { + display: flex; + align-items: baseline; + flex: 1; + border-bottom: var(--heat-js-border-size) solid var(--heat-js-container-border-color); + justify-content: space-between; +} +div.heat-js div.days-contents div.days div.day-lines div.day-line-number { + font-size: var(--heat-js-spacing-day-font-size); + padding: calc(var(--heat-js-spacing) / 2); + position: relative; + overflow: hidden; +} +div.heat-js div.days-contents div.days div.day-lines div.day-line-number div.count { + position: absolute; + top: calc(var(--heat-js-spacing) / 2); + left: 50%; + transform: translateX(-50%); + color: var(--heat-js-view-days-text-color); +} +div.heat-js div.days-contents div.days div.day-lines div.day-line { + border-top-left-radius: var(--heat-js-border-radius-day); + border-top-right-radius: var(--heat-js-border-radius-day); + background-color: var(--heat-js-view-days-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-view-days-border-color); + border-bottom: none !important; + vertical-align: bottom; + flex: 1 100%; + margin-right: var(--heat-js-spacing); + display: inline-block; + transition: var(--heat-js-transition); +} +@media (min-width: 768px) { + div.heat-js div.days-contents div.days div.day-lines div.day-line:first-child { + margin-left: calc(var(--heat-js-spacing) / 2); + } +} +div.heat-js div.days-contents div.days div.day-lines div.day-line:last-child { + margin-right: 0; +} +div.heat-js div.days-contents div.days div.day-lines div.day-line:not(.no-hover):hover { + cursor: pointer; + opacity: var(--heat-js-day-opacity-hover); +} +div.heat-js div.days-contents div.day-names { + display: flex; + flex: 1; + position: relative; + justify-content: space-between; + align-items: baseline; + height: calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px); +} +div.heat-js div.days-contents div.day-names div.day-name { + flex: 1 100%; + margin-top: var(--heat-js-spacing); + font-weight: var(--heat-js-text-bold-weight); + text-align: center !important; + overflow: hidden; + text-overflow: ellipsis; + margin-right: var(--heat-js-spacing); +} +@media (min-width: 768px) { + div.heat-js div.days-contents div.day-names div.day-name:first-child { + margin-left: calc(var(--heat-js-spacing) / 2); + } +} +div.heat-js div.days-contents div.day-names div.day-name:last-child { + margin-right: 0; +} + +/* + ------------------------------------------------------------------------- + Heat.js - View - Statistics ------------------------------------------------------------------------- */ div.heat-js div.statistics-contents { @@ -699,6 +1025,15 @@ div.heat-js div.statistics-contents div.statistics-ranges div.range-name { text-align: center !important; overflow: hidden; text-overflow: ellipsis; + margin-right: var(--heat-js-spacing); +} +@media (min-width: 768px) { + div.heat-js div.statistics-contents div.statistics-ranges div.range-name:first-child { + margin-left: calc(var(--heat-js-spacing) / 2); + } +} +div.heat-js div.statistics-contents div.statistics-ranges div.range-name:last-child { + margin-right: 0; } /* @@ -899,6 +1234,65 @@ div.heat-js div.guide div.map-toggles div.days div.day:not(.no-hover):hover { background: var(--heat-js-day-background-color-hover); } +/* + ------------------------------------------------------------------------- + Heat.js - CheckBox + ------------------------------------------------------------------------- +*/ +div.heat-js label.checkbox { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + -o-user-select: none; + user-select: none; + cursor: default; + display: inline-block; + position: relative; + padding-left: 20px; + padding-top: 1px; + padding-bottom: 2px; + color: var(--heat-js-color-white); +} +div.heat-js label.checkbox input { + display: none !important; +} +div.heat-js label.checkbox input:checked ~ span.check-mark { + background-color: var(--heat-js-checkbox-background-color-checked); + border: var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color-checked); +} +div.heat-js label.checkbox input:checked ~ span.check-mark::before { + display: block; +} +div.heat-js label.checkbox input:disabled ~ span.check-mark, div.heat-js label.checkbox input:disabled ~ span.text { + opacity: 0.5; +} +div.heat-js label.checkbox input:disabled ~ span.check-mark { + border: var(--heat-js-border-size) solid var(--heat-js-color-black) !important; +} +div.heat-js label.checkbox span.check-mark { + position: absolute; + top: 1px; + left: 0; + height: 15px; + width: 15px; + background-color: var(--heat-js-checkbox-background-color); + border-radius: var(--heat-js-border-control-radius); + border: var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color); + transition: var(--heat-js-transition); +} +div.heat-js label.checkbox span.check-mark::before { + content: ""; + transform: rotate(45deg); + position: absolute; + display: none; + left: 4.5px; + top: 1px; + width: 6px; + height: 11px; + border: solid var(--heat-js-color-black); + border-width: 0 3px 3px 0; +} + /* ------------------------------------------------------------------------- Heat.js - Colors diff --git a/dist/heat.js.css.map b/dist/heat.js.css.map index 9b03e6c0..1eee53e4 100644 --- a/dist/heat.js.css.map +++ b/dist/heat.js.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../src/heat.js.scss","../src/foundation/_styles.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;EAEI;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AA+JA;AAAA;AAAA;AAAA;AAAA;AAMA;ECxQI;EACA;EACA;EACA;EACA;EACA;EDwPA;EACA;EAaA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EAnCA;EACA;;AAqCI;EAtCJ;EACA;;;AA6CJ;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;;AAEA;EAGI;EACA;EACA;EACA,gBALe;EAMf;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAzLZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EAGI,cAXuF;;AA+LvF;EACI;EACA,aAzBW;EA0BX;EACA;EACA;EACA,YA7BW;EA8BX;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAjRpB;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAwPA;EACI;;AAGJ;AAAA;EAEI;;AAGJ;EAGI;EACA;EACA;EACA;EACA;EACA,aAPc;EAQd,gBARc;EASd;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;AAlRZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EAMI,aAwQsC;;AAEtC;EACI;EACA,aA5BU;EA6BV;EACA;EACA;EACA;EACA;EACA,YAlCU;EAmCV;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;AAMhB;AAAA;AAAA;EAGI;;AAEA;EALJ;AAAA;AAAA;IAMQ;;;;AAOhB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;;AAEA;EArSJ;EACA;EACA;EACA;EACA;;AAqSI;EACI;EACA;;AAEA;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAVJ;AAAA;IAWQ;;;AAGJ;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAMgB;EACI;;AAOpB;AAAA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGI;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;;AAWpC;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EA1aJ;EACA;EACA;EACA;EACA;;AA0aI;EACI;EACA;;AAEA;EAxeR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EA+dQ;IA9dJ;;;AAGJ;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AA2bI;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;;AAMhB;EACI;EACA;;AAEA;AAAA;EAEI;EACA;EACA;EACA;;AAGJ;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;EACA;;;AAOhB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;;AAEA;EA7gBJ;EACA;EACA;EACA;EACA;;AA6gBI;EACI;EACA;;AAEA;EA3kBR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAkkBQ;IAjkBJ;;;AAGJ;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AA8hBI;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;;AAMhB;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;;;AAMhB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EAjmBJ;;AAmmBI;EAJJ;IAKQ;;;AAlmBR;EA6lBA;IA5lBI;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;;AAGJ;EACI;;;AAslBZ;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;;AAEA;EAHJ;IAIQ;;;AAGJ;AAAA;EAEI;EACA;;AAEA;EALJ;AAAA;IAMQ;;;AAIR;EACI;EACA;EACA;EAvoBR;;AAyoBQ;EALJ;IAMQ;IACA;IACA;IACA;;;AApwBZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAwFJ;EAkoBI;IAjoBA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;;AAGJ;EACI;;AA6nBA;EACI;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EANJ;IAOQ;IACA;IACA;;;AAGJ;AAAA;EAEI;EACA;EACA;;AAEA;AAAA;EACI;EACA;;AAGJ;AAAA;EACI;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;AASxB;AAAA;AAAA;AAAA;AAAA;AAYQ;AAAA;AAAA;AAAA;AAAA;EACI;;AAGJ;AAAA;AAAA;AAAA;AAAA;EACI;EACA;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;;AAKR;AAAA;AAAA;AAAA;AAAA;AAMA;ECngCI;EACA;EACA;EACA;EACA;EACA;EDwPA;EACA;EAwwBA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAMA;EACI;IACI;;EAEJ;IACI","file":"heat.js.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../src/heat.js.scss","../src/foundation/_styles.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA;EAEI;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EAGA;EACA;EAGA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EAGA;EACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAMA;EC/HI;EACA;EACA;EACA;EACA;EACA;EAuJA;EACA;ED3BA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;ECKA;EACA;;ADHI;ECEJ;EACA;;;ADKJ;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;;AAEA;EACI;;AAGJ;EAII;EACA,OAJoB;EAKpB,QALoB;EAMpB;EACA;;AAEA;EAEI;EACA;EACA,QAbgB;EAchB,OAbiB;EAcjB;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EAEI;;AAKZ;EACI;EACA;EACA;;;AAMhB;AAAA;AAAA;AAAA;AAAA;AAUgB;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;;AASxB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;;ACrSJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;ADwQA;EACI;;AAGJ;AAAA;EAEI;;AAGJ;EAGI;EACA,OAHc;EAId,QAJc;EAKd;EACA;EACA;;AAEA;EAEI;EACA;;AAGJ;EACI;EACA;EACA,QAlBU;EAmBV,OAnBU;EAoBV;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA,QAhCU;EAiCV,OAjCU;EAkCV;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;AAAA;AAAA;EAGI;;AAEA;EALJ;AAAA;AAAA;IAMQ;;;;AAOhB;AAAA;AAAA;AAAA;AAAA;AAQQ;EAGI;EACA;EACA;EACA,gBALe;EAMf;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;ACjWZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EAGI,cAXuF;;ADuWvF;EACI;EACA,aAzBW;EA0BX;EACA;EACA;EACA,YA7BW;EA8BX;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;;AAKZ;EACI;EACA;EACA;EACA;;AAEA;EACI;;;AAU5B;AAAA;AAAA;AAAA;AAAA;AAQQ;EAGI;EACA;EACA;EACA;EACA;EACA,aAPc;EAQd,gBARc;EASd;EACA;;AAEA;EACI;;AAGJ;EACI;;AAGJ;EACI;;ACvdZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EAMI,aD6csC;;AAEtC;EACI;EACA,aA5BU;EA6BV;EACA;EACA;EACA;EACA;EACA,YAlCU;EAmCV;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;;AAGJ;EACI;EACA;;;AASxB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;;AAEA;ECheJ;EACA;EACA;EACA;EACA;;ADgeI;EACI;EACA;;AAEA;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAVJ;AAAA;IAWQ;;;AAGJ;AAAA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;;AAMgB;EACI;;AAOpB;AAAA;EAEI;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGI;AAAA;EAEI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;;;AAYpC;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;ECtmBJ;EACA;EACA;EACA;EACA;;ADsmBI;EACI;EACA;;AAEA;ECpqBR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ED2pBQ;IC1pBJ;;;AAGJ;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;ADunBI;EACI;EACA;;AAEA;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;;AAMhB;EACI;EACA;;AAEA;AAAA;EAEI;EACA;EACA;EACA;;AAGJ;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;EACA;EACA;;;AAOhB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;;AAEA;ECzsBJ;EACA;EACA;EACA;EACA;;ADysBI;EACI;EACA;;AAEA;ECvwBR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ED8vBQ;IC7vBJ;;;AAGJ;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;AD0tBI;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;;AAMhB;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;;AAQpB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;EACA;EACA;EACA;;AAEA;ECvzBJ;EACA;EACA;EACA;EACA;;ADuzBI;EACI;EACA;;AAEA;ECr3BR;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ED42BQ;IC32BJ;;;AAGJ;AAAA;AAAA;AAAA;AAAA;EAKI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;;AAGJ;EACI;;ADw0BI;EACI;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;AAGJ;EACI;EACA;;AAMhB;EACI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;IACI;;;AAIR;EACI;;;AAQpB;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;EACA;ECv5BJ;;ADy5BI;EAJJ;IAKQ;;;ACx5BR;EDm5BA;ICl5BI;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;;AAGJ;EACI;;;AD44BZ;AAAA;AAAA;AAAA;AAAA;AAOI;EACI;;AAEA;EAHJ;IAIQ;;;AAGJ;AAAA;EAEI;EACA;;AAEA;EALJ;AAAA;IAMQ;;;AAIR;EACI;EACA;EACA;EC77BR;;AD+7BQ;EALJ;IAMQ;IACA;IACA;IACA;;;AC1jCZ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;AAGJ;EACI;EACA;EACA;;AAIR;EACI;EACA;EACA;EACA;EACA;;AAwFJ;EDw7BI;ICv7BA;;;AAGJ;AAAA;AAAA;EAGI;EACA;EACA;;AAGJ;EACI;;AAEA;EACI;;AAGJ;EACI;;ADm7BA;EACI;EACA;;AAIR;EACI;EACA;EACA;EACA;;AAEA;EANJ;IAOQ;IACA;IACA;;;AAGJ;AAAA;EAEI;EACA;EACA;;AAEA;AAAA;EACI;EACA;;AAGJ;AAAA;EACI;;AAIR;EACI;;AAGJ;EACI;;AAGJ;EACI;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAGJ;EACI;EACA;;;AASxB;AAAA;AAAA;AAAA;AAAA;AAOI;ECnqCA;EACA;EACA;EACA;EACA;EACA;EDgqCI;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;;AAEA;EACI;EACA;;AAGJ;EACI;;AAGJ;EAEI;;AAGJ;EACI;;AAIR;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACI;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAOhB;AAAA;AAAA;AAAA;AAAA;AAYQ;AAAA;AAAA;AAAA;AAAA;EACI;;AAGJ;AAAA;AAAA;AAAA;AAAA;EACI;EACA;;AAIR;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;AAGJ;EACI;EACA;EACA;;;AAKR;AAAA;AAAA;AAAA;AAAA;AAMA;EC1xCI;EACA;EACA;EACA;EACA;EACA;EAuJA;EACA;EDgoCA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;AAAA;AAAA;AAAA;AAMA;EACI;IACI;;EAEJ;IACI","file":"heat.js.css"} \ No newline at end of file diff --git a/dist/heat.js.min.css b/dist/heat.js.min.css index 7182956b..827c36be 100644 --- a/dist/heat.js.min.css +++ b/dist/heat.js.min.css @@ -1,2 +1,2 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ -:root{--heat-js-default-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--heat-js-text-bold-weight:400;--heat-js-title-bold-weight:900;--heat-js-text-bold-weight-active:900;--heat-js-color-black:#3b3a3a;--heat-js-color-white:#adbac7;--heat-js-color-snow-white:#F5F5F5;--heat-js-color-gray:#AAAAAA;--heat-js-container-background-color:#22272e;--heat-js-container-border-color:#454c56;--heat-js-tooltip-background-color:var(--heat-js-container-background-color);--heat-js-tooltip-border-color:var(--heat-js-container-border-color);--heat-js-tooltip-text-color:var(--heat-js-color-white);--heat-js-years-background-color:var(--heat-js-container-background-color);--heat-js-years-border-color:var(--heat-js-container-border-color);--heat-js-years-text-color:var(--heat-js-color-white);--heat-js-years-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-years-text-color-hover:var(--heat-js-color-snow-white);--heat-js-title-opener-text-color-hover:var(--heat-js-color-gray);--heat-js-title-background-color:var(--heat-js-container-background-color);--heat-js-title-border-color:var(--heat-js-container-border-color);--heat-js-title-text-color:var(--heat-js-color-white);--heat-js-title-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-title-text-color-hover:var(--heat-js-color-snow-white);--heat-js-holiday-background-color:rgba( 210, 43, 43, 0.75 );--heat-js-holiday-border-color:rgba( 210, 43, 43, 0.5 );--heat-js-holiday-text-color:var(--heat-js-color-black);--heat-js-day-background-color:#2d333b;--heat-js-day-border-color:var(--heat-js-container-border-color);--heat-js-day-background-color-hover:var(--heat-js-container-border-color);--heat-js-day-spacing:6.3px;--heat-js-day-opacity-hover:0.7;--heat-js-day-opacity-active:0.5;--heat-js-day-size:1.1rem;--heat-js-day-chart-width:10px;--heat-js-day-color-1-background-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-1-border-color:rgba( 80, 200, 120, 0.15 );--heat-js-day-color-1-text-color:var(--heat-js-color-white);--heat-js-day-color-2-background-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-2-border-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-2-text-color:var(--heat-js-color-white);--heat-js-day-color-3-background-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-3-border-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-3-text-color:var(--heat-js-color-black);--heat-js-day-color-4-background-color:rgba( 80, 200, 120, 1 );--heat-js-day-color-4-border-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-4-text-color:var(--heat-js-color-black);--heat-js-button-background-color:var(--heat-js-day-background-color);--heat-js-button-border-color:var(--heat-js-container-border-color);--heat-js-button-text-color:var(--heat-js-color-white);--heat-js-button-background-color-hover:var(--heat-js-container-border-color);--heat-js-button-text-color-hover:var(--heat-js-color-snow-white);--heat-js-button-background-color-active:#616b79;--heat-js-button-text-color-active:var(--heat-js-color-snow-white);--heat-js-border-radius:0.5rem;--heat-js-border-radius-day:0.35rem;--heat-js-border-size:0.5px;--heat-js-border-size-day:1px;--heat-js-spacing:10px;--heat-js-spacing-font-size:0.85rem;--heat-js-spacing-day-font-size:0.6rem;--heat-js-transition:all .3s;--heat-js-animation-length:0.5s}div.heat-js{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);display:inline-block;position:relative;border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-container-background-color);color:var(--heat-js-color-white);border:var(--heat-js-border-size) solid var(--heat-js-container-border-color);padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);width:100%;max-width:700px;margin:0!important}div.heat-js div.view-switch{animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.no-click{pointer-events:none!important}div.heat-js *{box-sizing:border-box;line-height:normal}div.heat-js *::before,div.heat-js *::after{box-sizing:border-box;line-height:normal}div.heat-js div.title-bar{text-align:right;margin-bottom:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.title{float:left;font-weight:var(--heat-js-title-bold-weight);font-size:1.2rem;padding-bottom:3px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.title:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.titles-list{display:block}div.heat-js div.title-bar div.title div.down-arrow{display:inline-block;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:14px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-right:var(--heat-js-spacing)}div.heat-js div.title-bar div.title div.titles-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:3px;display:none;position:absolute;width:100px;margin-top:3px;z-index:1000}div.heat-js div.title-bar div.title div.titles-list div.titles{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-title-background-color);border:var(--heat-js-border-size) solid var(--heat-js-title-border-color);color:var(--heat-js-title-text-color);overflow-y:scroll}div.heat-js div.title-bar div.title div.titles-list div.titles div.title{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:left;width:100%;transition:var(--heat-js-transition);font-size:var(--heat-js-spacing-font-size)!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):active{opacity:0.5!important}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:not(.title-active):hover{cursor:pointer;background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-list div.titles div.title:last-child{border-bottom:none}div.heat-js div.title-bar div.title div.titles-list div.titles div.title-active{background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.title-bar button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.title-bar button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.title-bar button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.title-bar button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.back{margin-left:calc(var(--heat-js-spacing) * 2)!important}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.import{margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.title-bar div.year-text{margin-left:var(--heat-js-spacing);margin-right:var(--heat-js-spacing);display:inline-block;font-weight:var(--heat-js-title-bold-weight);position:relative;padding-top:5px;padding-bottom:5px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.year-text:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.years-list{display:block!important}div.heat-js div.title-bar div.year-text div.down-arrow{display:inline-block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:9px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-left:calc(var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.year-text div.years-list{animation:fade-in-animation var(--heat-js-animation-length);padding-top:5px;display:none;position:absolute;width:80px;left:50%;transform:translateX(-50%);margin-top:5px;z-index:1000}div.heat-js div.title-bar div.year-text div.years-list div.years{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-years-background-color);border:var(--heat-js-border-size) solid var(--heat-js-years-border-color);color:var(--heat-js-years-text-color);max-height:183px;height:100%;overflow-y:scroll;scroll-snap-type:y mandatory}div.heat-js div.title-bar div.year-text div.years-list div.years div.year{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:center;width:100%;transition:var(--heat-js-transition);scroll-snap-align:start}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):active{opacity:0.5!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:not(.year-active):hover{cursor:pointer;background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover)}div.heat-js div.title-bar div.year-text div.years-list div.years div.year:last-child{border-bottom:none}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-active{background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar div.year-text div.years-list div.years div.year-current{font-style:italic;font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:none}@media (min-width:768px){div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:inline-block}}div.heat-js div.map-contents{overflow-x:scroll;overflow-y:hidden;min-height:191px;position:relative}div.heat-js div.map-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.map-contents div.map{display:inline-flex;flex-direction:row}div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;z-index:50}@media (min-width:768px){div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{display:block}}div.heat-js div.map-contents div.map div.days div.day-name,div.heat-js div.map-contents div.map div.days-months-bottom div.day-name{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);margin-bottom:var(--heat-js-day-spacing);display:flex;justify-content:center;flex-direction:column}div.heat-js div.map-contents div.map div.days-months-bottom{padding-top:0!important}div.heat-js div.map-contents div.map div.months{display:flex;justify-content:space-between;flex-grow:1}div.heat-js div.map-contents div.map div.months div.month{flex:1;pointer-events:none}div.heat-js div.map-contents div.map div.months div.month:last-child div.day-columns div.day-column:last-child div.day{margin-right:0!important}div.heat-js div.map-contents div.map div.months div.month div.month-name,div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.heat-js div.map-contents div.map div.months div.month div.month-name{margin-bottom:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{margin-top:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.day-columns{display:flex;justify-content:space-between}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled{display:flex;border-radius:var(--heat-js-border-radius-day);width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);margin-bottom:var(--heat-js-day-spacing);font-size:var(--heat-js-spacing-day-font-size);justify-content:center;align-items:center;overflow:hidden}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:last-child,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled:last-child{margin-bottom:0}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day{pointer-events:all;background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);transition:var(--heat-js-transition);transition-property:opacity,background-color,color,border-color}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents{display:flex;overflow-x:scroll;overflow-y:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.chart-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.chart-contents div.chart{display:inline-flex;flex-direction:row}div.heat-js div.chart-contents div.chart div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.y-labels{display:block}}div.heat-js div.chart-contents div.chart div.y-labels div.label-0,div.heat-js div.chart-contents div.chart div.y-labels div.label-25,div.heat-js div.chart-contents div.chart div.y-labels div.label-50,div.heat-js div.chart-contents div.chart div.y-labels div.label-75,div.heat-js div.chart-contents div.chart div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.chart-contents div.chart div.y-labels div.label-0{top:0}div.heat-js div.chart-contents div.chart div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-100{bottom:0}div.heat-js div.chart-contents div.chart div.day-lines{flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color)}div.heat-js div.chart-contents div.chart div.day-lines div.day-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);overflow:hidden}div.heat-js div.chart-contents div.chart div.day-lines div.day-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;min-width:var(--heat-js-day-chart-width);margin-right:1px;display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents div.chart-months{position:relative;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing))}div.heat-js div.chart-contents div.chart-months div.month-name,div.heat-js div.chart-contents div.chart-months div.month-name-space{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;position:absolute;bottom:0}@media (min-width:768px){div.heat-js div.chart-contents div.chart-months div.month-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart-months div.month-name:nth-child(2){margin-left:var(--heat-js-day-chart-width)}div.heat-js div.chart-contents div.chart-months div.month-name-space{left:0;top:0;position:sticky;background-color:var(--heat-js-container-background-color)}div.heat-js div.statistics-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.statistics-contents div.no-statistics-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.statistics-contents div.statistics{display:flex;flex-direction:row}div.heat-js div.statistics-contents div.statistics div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.y-labels{display:block}}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0{top:0}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{bottom:0}div.heat-js div.statistics-contents div.statistics div.range-lines{display:flex;align-items:baseline;flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color);justify-content:space-between}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);position:relative;overflow:hidden}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%)}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;flex:1 100%;margin-right:var(--heat-js-spacing);display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:last-child{margin-right:0}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.statistics-contents div.statistics-ranges{display:flex;flex:1;position:relative;justify-content:space-between;align-items:baseline;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px)}div.heat-js div.statistics-contents div.statistics-ranges div.range-name{flex:1 100%;margin-top:var(--heat-js-spacing);font-weight:var(--heat-js-text-bold-weight);text-align:center!important;overflow:hidden;text-overflow:ellipsis}div.heat-js div.description{text-align:center;margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);text-align:center}@media (min-width:768px){div.heat-js div.description{text-align:left}}@media (min-width:768px){div.heat-js div.description{text-align:left}}div.heat-js div.description span.label,div.heat-js div.description a.label,div.heat-js div.description a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.description a.label{transition:var(--heat-js-transition)}div.heat-js div.description a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.description a.label:hover{text-decoration:underline}div.heat-js div.guide{display:block}@media (min-width:768px){div.heat-js div.guide{display:flex}}div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);width:100%}@media (min-width:768px){div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-bottom:0}}div.heat-js div.guide div.map-types{text-align:center;flex-grow:unset;margin-right:0;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left;width:unset;flex-grow:1;margin-right:var(--heat-js-spacing)}}div.heat-js div.guide div.map-types button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.guide div.map-types button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left}}div.heat-js div.guide div.map-types span.label,div.heat-js div.guide div.map-types a.label,div.heat-js div.guide div.map-types a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.guide div.map-types a.label{transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-types a.label:hover{text-decoration:underline}div.heat-js div.guide div.map-types button{margin-left:0!important;margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.guide div.map-toggles{display:flex;align-items:center;justify-content:center;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-toggles{text-align:right;justify-content:right;width:auto}}div.heat-js div.guide div.map-toggles div.less-text,div.heat-js div.guide div.map-toggles div.more-text{display:inline-block;font-weight:var(--heat-js-text-bold-weight);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.less-text:hover,div.heat-js div.guide div.map-toggles div.more-text:hover{cursor:pointer;text-decoration:underline}div.heat-js div.guide div.map-toggles div.less-text:active,div.heat-js div.guide div.map-toggles div.more-text:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-toggles div.less-text{margin-right:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.more-text{margin-left:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.days{display:inline-flex;align-items:center;justify-content:right}div.heat-js div.guide div.map-toggles div.days div.day-number{display:inline-flex!important;justify-content:center;align-items:center;overflow:hidden;text-align:center;font-size:var(--heat-js-spacing-day-font-size);padding-left:calc(var(--heat-js-spacing) / 2);padding-right:calc(var(--heat-js-spacing) / 2)}div.heat-js div.guide div.map-toggles div.days div.day{background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);display:inline-block;border-radius:var(--heat-js-border-radius-day);min-width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.days div.day:last-child{margin-right:0}div.heat-js div.guide div.map-toggles div.days div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.day-color-1:not(.no-hover):active,div.heat-js div.day-color-2:not(.no-hover):active,div.heat-js div.day-color-3:not(.no-hover):active,div.heat-js div.day-color-4:not(.no-hover):active,div.heat-js div.holiday:not(.no-hover):active{opacity:var(--heat-js-day-opacity-active)!important}div.heat-js div.day-color-1:not(.no-hover):hover,div.heat-js div.day-color-2:not(.no-hover):hover,div.heat-js div.day-color-3:not(.no-hover):hover,div.heat-js div.day-color-4:not(.no-hover):hover,div.heat-js div.holiday:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.holiday{background-color:var(--heat-js-holiday-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-holiday-border-color)!important;color:var(--heat-js-holiday-text-color)}div.heat-js div.day-color-1{background-color:var(--heat-js-day-color-1-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-1-border-color)!important;color:var(--heat-js-day-color-1-text-color)}div.heat-js div.day-color-2{background-color:var(--heat-js-day-color-2-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-2-border-color)!important;color:var(--heat-js-day-color-2-text-color)}div.heat-js div.day-color-3{background-color:var(--heat-js-day-color-3-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-3-border-color)!important;color:var(--heat-js-day-color-3-text-color)}div.heat-js div.day-color-4{background-color:var(--heat-js-day-color-4-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-4-border-color)!important;color:var(--heat-js-day-color-4-text-color)}div.heat-js-tooltip{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);animation:fade-in-animation var(--heat-js-animation-length);position:absolute;background-color:var(--heat-js-tooltip-background-color);border:var(--heat-js-border-size) solid var(--heat-js-tooltip-border-color);color:var(--heat-js-tooltip-text-color);border-radius:var(--heat-js-border-radius);z-index:2000;max-width:300px;padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);font-weight:var(--heat-js-text-bold-weight);display:none}@keyframes fade-in-animation{0%{opacity:0}100%{opacity:1}} \ No newline at end of file +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ +:root{--heat-js-default-font:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--heat-js-text-bold-weight:400;--heat-js-title-bold-weight:900;--heat-js-sub-title-bold-weight:700;--heat-js-text-bold-weight-active:900;--heat-js-color-black:#3b3a3a;--heat-js-color-white:#adbac7;--heat-js-color-snow-white:#F5F5F5;--heat-js-color-gray:#AAAAAA;--heat-js-container-background-color:#22272e;--heat-js-container-border-color:#454c56;--heat-js-dialog-background-color:var(--heat-js-container-background-color);--heat-js-dialog-border-color:var(--heat-js-container-border-color);--heat-js-dialog-text-color:var(--heat-js-color-white);--heat-js-tooltip-background-color:var(--heat-js-container-background-color);--heat-js-tooltip-border-color:var(--heat-js-container-border-color);--heat-js-tooltip-text-color:var(--heat-js-color-white);--heat-js-years-background-color:var(--heat-js-container-background-color);--heat-js-years-border-color:var(--heat-js-container-border-color);--heat-js-years-text-color:var(--heat-js-color-white);--heat-js-years-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-years-text-color-hover:var(--heat-js-color-snow-white);--heat-js-title-opener-text-color-hover:var(--heat-js-color-gray);--heat-js-title-background-color:var(--heat-js-container-background-color);--heat-js-title-border-color:var(--heat-js-container-border-color);--heat-js-title-text-color:var(--heat-js-color-white);--heat-js-title-background-color-hover:var(--heat-js-button-background-color-hover);--heat-js-title-text-color-hover:var(--heat-js-color-snow-white);--heat-js-holiday-background-color:rgba( 210, 43, 43, 0.75 );--heat-js-holiday-border-color:rgba( 210, 43, 43, 0.5 );--heat-js-holiday-text-color:var(--heat-js-color-black);--heat-js-day-background-color:#2d333b;--heat-js-day-border-color:var(--heat-js-container-border-color);--heat-js-day-background-color-hover:var(--heat-js-container-border-color);--heat-js-day-spacing:6.3px;--heat-js-day-opacity-hover:0.7;--heat-js-day-opacity-active:0.5;--heat-js-day-size:1.1rem;--heat-js-day-chart-width:10px;--heat-js-day-color-1-background-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-1-border-color:rgba( 80, 200, 120, 0.15 );--heat-js-day-color-1-text-color:var(--heat-js-color-white);--heat-js-day-color-2-background-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-2-border-color:rgba( 80, 200, 120, 0.25 );--heat-js-day-color-2-text-color:var(--heat-js-color-white);--heat-js-day-color-3-background-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-3-border-color:rgba( 80, 200, 120, 0.50 );--heat-js-day-color-3-text-color:var(--heat-js-color-black);--heat-js-day-color-4-background-color:rgba( 80, 200, 120, 1 );--heat-js-day-color-4-border-color:rgba( 80, 200, 120, 0.75 );--heat-js-day-color-4-text-color:var(--heat-js-color-black);--heat-js-view-days-background-color:var(--heat-js-day-color-4-background-color);--heat-js-view-days-border-color:var(--heat-js-day-color-4-border-color);--heat-js-view-days-text-color:var(--heat-js-day-color-4-text-color);--heat-js-button-background-color:var(--heat-js-day-background-color);--heat-js-button-border-color:var(--heat-js-container-border-color);--heat-js-button-text-color:var(--heat-js-color-white);--heat-js-button-background-color-hover:var(--heat-js-container-border-color);--heat-js-button-text-color-hover:var(--heat-js-color-snow-white);--heat-js-button-background-color-active:#616b79;--heat-js-button-text-color-active:var(--heat-js-color-snow-white);--heat-js-checkbox-background-color-checked:rgba( 80, 200, 120, 1 );--heat-js-checkbox-background-color:var(--heat-js-color-black);--heat-js-checkbox-border-color-checked:--heat-js-checkbox-background-color-checked;--heat-js-checkbox-border-color:var(--heat-js-color-white);--heat-js-panel-background-color:var(--heat-js-day-background-color);--heat-js-panel-border-color:var(--heat-js-container-border-color);--heat-js-border-control-radius:0.25rem;--heat-js-border-radius:0.5rem;--heat-js-border-radius-day:0.35rem;--heat-js-border-size:0.5px;--heat-js-border-size-day:1px;--heat-js-spacing:10px;--heat-js-spacing-font-size:0.85rem;--heat-js-spacing-day-font-size:0.6rem;--heat-js-transition:all .3s;--heat-js-animation-length:0.5s}div.heat-js{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);display:inline-block;position:relative;border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-container-background-color);color:var(--heat-js-color-white);border:var(--heat-js-border-size) solid var(--heat-js-container-border-color);padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);width:100%;max-width:700px;margin:0!important}div.heat-js div.view-switch{animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.no-click{pointer-events:none!important}div.heat-js *{box-sizing:border-box;line-height:normal}div.heat-js *::before,div.heat-js *::after{box-sizing:border-box;line-height:normal}div.heat-js div.disabled{display:none;z-index:1000;position:absolute;background-color:rgba(0,0,0,.3);top:0;left:0;height:100%;width:100%;animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.disabled div.dialog{display:none;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);max-width:450px;width:calc(100% - var(--heat-js-spacing) * 2);background-color:var(--heat-js-dialog-background-color);border:var(--heat-js-border-size) solid var(--heat-js-dialog-border-color);color:var(--heat-js-dialog-text-color);border-radius:var(--heat-js-border-radius);animation:fade-in-animation var(--heat-js-animation-length)}div.heat-js div.disabled div.dialog div.dialog-title-bar{position:relative;padding:var(--heat-js-spacing);text-align:left}div.heat-js div.disabled div.dialog div.dialog-title-bar span.dialog-title-bar-text{font-weight:var(--heat-js-title-bold-weight)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close{float:right;width:16px;height:16px;position:relative;cursor:pointer}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before,div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after{content:"";position:absolute;height:16px;width:3px;left:6.5px;top:0;background-color:var(--heat-js-color-white);border-radius:var(--heat-js-border-radius);transition:var(--heat-js-transition)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::before{transform:rotate(45deg)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close::after{transform:rotate(-45deg)}div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::before,div.heat-js div.disabled div.dialog div.dialog-title-bar div.dialog-close:hover::after{background-color:var(--heat-js-color-gray)}div.heat-js div.disabled div.dialog div.dialog-contents{padding:var(--heat-js-spacing);overflow-x:scroll;overflow-y:hidden}div.heat-js div.disabled div.configuration div.dialog-contents div.panel{background-color:var(--heat-js-panel-background-color);border:var(--heat-js-border-size) solid var(--heat-js-panel-border-color);border-radius:var(--heat-js-border-radius);padding:var(--heat-js-spacing)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container{vertical-align:top;display:inline-block;width:calc(50% - var(--heat-js-spacing));margin-right:var(--heat-js-spacing)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container:last-child{margin-right:0;width:50%}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container div.side-container-title-text{margin-bottom:var(--heat-js-spacing);font-weight:var(--heat-js-sub-title-bold-weight)}div.heat-js div.disabled div.configuration div.dialog-contents div.side-container label.checkbox{margin-left:var(--heat-js-spacing)}div.heat-js div.title-bar{text-align:right;margin-bottom:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2)}div.heat-js div.title-bar button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.title-bar button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.title-bar button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.title-bar button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.title-bar button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.title-bar button.back{margin-left:calc(var(--heat-js-spacing) * 2)!important}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.import{margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.title-bar div.configure{display:inline-block;width:8.5px;height:8.5px;position:relative;margin-right:var(--heat-js-spacing);transition:var(--heat-js-transition)}div.heat-js div.title-bar div.configure:hover::before,div.heat-js div.title-bar div.configure:hover::after{border-color:var(--heat-js-title-opener-text-color-hover);cursor:pointer}div.heat-js div.title-bar div.configure::before{content:"";position:absolute;height:8.5px;width:8.5px;border-color:var(--heat-js-color-white);border-width:2px;border-style:solid;transform:rotate(-45deg);top:0;left:0;transition:var(--heat-js-transition)}div.heat-js div.title-bar div.configure::after{content:"";position:absolute;height:8.5px;width:8.5px;border-color:var(--heat-js-color-white);border-width:2px;border-style:solid;transform:rotate(90deg);top:0;left:0;transition:var(--heat-js-transition)}div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:none}@media (min-width:768px){div.heat-js div.title-bar button.export,div.heat-js div.title-bar button.refresh,div.heat-js div.title-bar button.import{display:inline-block}}div.heat-js div.title-bar div.title{float:left;font-weight:var(--heat-js-title-bold-weight);font-size:1.2rem;padding-bottom:3px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.title:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.title:hover div.titles-menu-container{display:block}div.heat-js div.title-bar div.title div.down-arrow{display:inline-block;width:0;height:0;border-left:8px solid transparent;border-right:8px solid transparent;border-top:14px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-right:var(--heat-js-spacing)}div.heat-js div.title-bar div.title div.titles-menu-container{animation:fade-in-animation var(--heat-js-animation-length);padding-top:3px;display:none;position:absolute;min-width:100px;margin-top:3px;z-index:1000}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-title-background-color);border:var(--heat-js-border-size) solid var(--heat-js-title-border-color);color:var(--heat-js-title-text-color);overflow-y:scroll}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-header{color:var(--heat-js-color-white);font-weight:var(--heat-js-title-bold-weight);padding:var(--heat-js-spacing);padding-right:calc(var(--heat-js-spacing) * 3);text-align:left;width:100%;font-size:var(--heat-js-spacing-font-size)!important;cursor:default}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);padding:var(--heat-js-spacing);padding-right:calc(var(--heat-js-spacing) * 3);padding-left:calc(var(--heat-js-spacing) * 3);text-align:left;width:100%;transition:var(--heat-js-transition);font-size:var(--heat-js-spacing-font-size)!important;position:relative}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item::before{content:"";position:absolute;left:var(--heat-js-spacing);top:50%;transform:translate(0,-50%);border-radius:50%;width:8px;height:8px;background-color:var(--heat-js-color-white)}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):active{opacity:0.5!important}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):hover{cursor:pointer;background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item:not(.title-menu-item-active):hover::before{background-color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item-active{background-color:var(--heat-js-title-background-color-hover);color:var(--heat-js-title-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar div.title div.titles-menu-container div.titles-menu div.title-menu-item-active::before{background-color:var(--heat-js-title-text-color-hover)}div.heat-js div.title-bar div.year-text{margin-left:var(--heat-js-spacing);margin-right:var(--heat-js-spacing);display:inline-block;font-weight:var(--heat-js-title-bold-weight);position:relative;padding-top:5px;padding-bottom:5px;transition:var(--heat-js-transition);cursor:pointer}div.heat-js div.title-bar div.year-text:hover{color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.down-arrow{border-top-color:var(--heat-js-title-opener-text-color-hover)}div.heat-js div.title-bar div.year-text:hover div.years-menu-container{display:block!important}div.heat-js div.title-bar div.year-text div.down-arrow{display:inline-block;width:0;height:0;border-left:6px solid transparent;border-right:6px solid transparent;border-top:9px solid var(--heat-js-color-white);transition:var(--heat-js-transition);margin-left:calc(var(--heat-js-spacing) / 2)}div.heat-js div.title-bar div.year-text div.years-menu-container{animation:fade-in-animation var(--heat-js-animation-length);padding-top:5px;display:none;position:absolute;width:80px;left:50%;transform:translateX(-50%);margin-top:5px;z-index:1000}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu{border-radius:var(--heat-js-border-radius);background-color:var(--heat-js-years-background-color);border:var(--heat-js-border-size) solid var(--heat-js-years-border-color);color:var(--heat-js-years-text-color);max-height:183px;height:100%;overflow-y:scroll;scroll-snap-type:y mandatory}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);border-bottom:var(--heat-js-border-size) dashed var(--heat-js-container-border-color);padding:var(--heat-js-spacing);text-align:center;width:100%;transition:var(--heat-js-transition);scroll-snap-align:start}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-active):active{opacity:0.5!important}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:not(.year-menu-item-active):hover{cursor:pointer;background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover)}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item:last-child{border-bottom:none}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item-active{background-color:var(--heat-js-years-background-color-hover);color:var(--heat-js-years-text-color-hover);font-weight:var(--heat-js-text-bold-weight-active);cursor:default!important}div.heat-js div.title-bar div.year-text div.years-menu-container div.years-menu div.year-menu-item-current{font-style:italic;font-weight:var(--heat-js-text-bold-weight-active)}div.heat-js div.map-contents{overflow-x:scroll;overflow-y:hidden;min-height:191px;position:relative}div.heat-js div.map-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.map-contents div.map{display:inline-flex;flex-direction:row}div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;z-index:50}@media (min-width:768px){div.heat-js div.map-contents div.map div.days,div.heat-js div.map-contents div.map div.days-months-bottom{display:block}}div.heat-js div.map-contents div.map div.days div.day-name,div.heat-js div.map-contents div.map div.days-months-bottom div.day-name{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);margin-bottom:var(--heat-js-day-spacing);display:flex;justify-content:center;flex-direction:column}div.heat-js div.map-contents div.map div.days-months-bottom{padding-top:0!important}div.heat-js div.map-contents div.map div.months{display:flex;justify-content:space-between;flex-grow:1}div.heat-js div.map-contents div.map div.months div.month{flex:1;pointer-events:none}div.heat-js div.map-contents div.map div.months div.month:last-child div.day-columns div.day-column:last-child div.day{margin-right:0!important}div.heat-js div.map-contents div.map div.months div.month div.month-name,div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}div.heat-js div.map-contents div.map div.months div.month div.month-name{margin-bottom:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.month-name-bottom{margin-top:var(--heat-js-spacing)}div.heat-js div.map-contents div.map div.months div.month div.day-columns{display:flex;justify-content:space-between}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled{display:flex;border-radius:var(--heat-js-border-radius-day);width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);margin-bottom:var(--heat-js-day-spacing);font-size:var(--heat-js-spacing-day-font-size);justify-content:center;align-items:center;overflow:hidden}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:last-child,div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day-disabled:last-child{margin-bottom:0}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day{pointer-events:all;background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);transition:var(--heat-js-transition);transition-property:opacity,background-color,color,border-color}div.heat-js div.map-contents div.map div.months div.month div.day-columns div.day-column div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents{display:flex;overflow-x:scroll;overflow-y:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.chart-contents div.no-data-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.chart-contents div.chart{display:inline-flex;flex-direction:row}div.heat-js div.chart-contents div.chart div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.y-labels{display:block}}div.heat-js div.chart-contents div.chart div.y-labels div.label-0,div.heat-js div.chart-contents div.chart div.y-labels div.label-25,div.heat-js div.chart-contents div.chart div.y-labels div.label-50,div.heat-js div.chart-contents div.chart div.y-labels div.label-75,div.heat-js div.chart-contents div.chart div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.chart-contents div.chart div.y-labels div.label-0{top:0}div.heat-js div.chart-contents div.chart div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.chart-contents div.chart div.y-labels div.label-100{bottom:0}div.heat-js div.chart-contents div.chart div.day-lines{flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color)}div.heat-js div.chart-contents div.chart div.day-lines div.day-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);overflow:hidden}div.heat-js div.chart-contents div.chart div.day-lines div.day-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;min-width:var(--heat-js-day-chart-width);margin-right:1px;display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.chart-contents div.chart div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.chart-contents div.chart div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.chart-contents div.chart-months{position:relative;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing))}div.heat-js div.chart-contents div.chart-months div.month-name,div.heat-js div.chart-contents div.chart-months div.month-name-space{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;position:absolute;bottom:0}@media (min-width:768px){div.heat-js div.chart-contents div.chart-months div.month-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.chart-contents div.chart-months div.month-name:nth-child(2){margin-left:var(--heat-js-day-chart-width)}div.heat-js div.chart-contents div.chart-months div.month-name-space{left:0;top:0;position:sticky;background-color:var(--heat-js-container-background-color)}div.heat-js div.days-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.days-contents div.no-days-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.days-contents div.days{display:flex;flex-direction:row}div.heat-js div.days-contents div.days div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.days-contents div.days div.y-labels{display:block}}div.heat-js div.days-contents div.days div.y-labels div.label-0,div.heat-js div.days-contents div.days div.y-labels div.label-25,div.heat-js div.days-contents div.days div.y-labels div.label-50,div.heat-js div.days-contents div.days div.y-labels div.label-75,div.heat-js div.days-contents div.days div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.days-contents div.days div.y-labels div.label-0{top:0}div.heat-js div.days-contents div.days div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.days-contents div.days div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.days-contents div.days div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.days-contents div.days div.y-labels div.label-100{bottom:0}div.heat-js div.days-contents div.days div.day-lines{display:flex;align-items:baseline;flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color);justify-content:space-between}div.heat-js div.days-contents div.days div.day-lines div.day-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);position:relative;overflow:hidden}div.heat-js div.days-contents div.days div.day-lines div.day-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%);color:var(--heat-js-view-days-text-color)}div.heat-js div.days-contents div.days div.day-lines div.day-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-view-days-background-color);border:var(--heat-js-border-size) solid var(--heat-js-view-days-border-color);border-bottom:none!important;vertical-align:bottom;flex:1 100%;margin-right:var(--heat-js-spacing);display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.days-contents div.days div.day-lines div.day-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.days-contents div.days div.day-lines div.day-line:last-child{margin-right:0}div.heat-js div.days-contents div.days div.day-lines div.day-line:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.days-contents div.day-names{display:flex;flex:1;position:relative;justify-content:space-between;align-items:baseline;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px)}div.heat-js div.days-contents div.day-names div.day-name{flex:1 100%;margin-top:var(--heat-js-spacing);font-weight:var(--heat-js-text-bold-weight);text-align:center!important;overflow:hidden;text-overflow:ellipsis;margin-right:var(--heat-js-spacing)}@media (min-width:768px){div.heat-js div.days-contents div.day-names div.day-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.days-contents div.day-names div.day-name:last-child{margin-right:0}div.heat-js div.statistics-contents{display:flex;overflow:hidden;text-wrap:nowrap;white-space:nowrap;position:relative}div.heat-js div.statistics-contents div.no-statistics-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font-weight:var(--heat-js-text-bold-weight)}div.heat-js div.statistics-contents div.statistics{display:flex;flex-direction:row}div.heat-js div.statistics-contents div.statistics div.y-labels{background-color:var(--heat-js-container-background-color);padding-right:calc(var(--heat-js-spacing) * 3);padding-top:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px);position:sticky;left:0;display:none;border-right:var(--heat-js-border-size) solid var(--heat-js-container-border-color);z-index:50}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.y-labels{display:block}}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75,div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{font-weight:var(--heat-js-text-bold-weight);text-align:left!important;height:var(--heat-js-day-size);display:inline-flex;justify-content:center;flex-direction:column;position:absolute;left:0;padding-right:var(--heat-js-spacing)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-0{top:0}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-25{top:25%;transform:translateY(-25%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-50{top:50%;transform:translateY(-50%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-75{top:75%;transform:translateY(-75%)}div.heat-js div.statistics-contents div.statistics div.y-labels div.label-100{bottom:0}div.heat-js div.statistics-contents div.statistics div.range-lines{display:flex;align-items:baseline;flex:1;border-bottom:var(--heat-js-border-size) solid var(--heat-js-container-border-color);justify-content:space-between}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number{font-size:var(--heat-js-spacing-day-font-size);padding:calc(var(--heat-js-spacing) / 2);position:relative;overflow:hidden}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line-number div.count{position:absolute;top:calc(var(--heat-js-spacing) / 2);left:50%;transform:translateX(-50%)}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line{border-top-left-radius:var(--heat-js-border-radius-day);border-top-right-radius:var(--heat-js-border-radius-day);background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);border-bottom:none!important;vertical-align:bottom;flex:1 100%;margin-right:var(--heat-js-spacing);display:inline-block;transition:var(--heat-js-transition)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:last-child{margin-right:0}div.heat-js div.statistics-contents div.statistics div.range-lines div.range-line:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js div.statistics-contents div.statistics-ranges{display:flex;flex:1;position:relative;justify-content:space-between;align-items:baseline;height:calc(var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px)}div.heat-js div.statistics-contents div.statistics-ranges div.range-name{flex:1 100%;margin-top:var(--heat-js-spacing);font-weight:var(--heat-js-text-bold-weight);text-align:center!important;overflow:hidden;text-overflow:ellipsis;margin-right:var(--heat-js-spacing)}@media (min-width:768px){div.heat-js div.statistics-contents div.statistics-ranges div.range-name:first-child{margin-left:calc(var(--heat-js-spacing) / 2)}}div.heat-js div.statistics-contents div.statistics-ranges div.range-name:last-child{margin-right:0}div.heat-js div.description{text-align:center;margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);text-align:center}@media (min-width:768px){div.heat-js div.description{text-align:left}}@media (min-width:768px){div.heat-js div.description{text-align:left}}div.heat-js div.description span.label,div.heat-js div.description a.label,div.heat-js div.description a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.description a.label{transition:var(--heat-js-transition)}div.heat-js div.description a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.description a.label:hover{text-decoration:underline}div.heat-js div.guide{display:block}@media (min-width:768px){div.heat-js div.guide{display:flex}}div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-top:calc(var(--heat-js-spacing) + var(--heat-js-spacing) / 2);width:100%}@media (min-width:768px){div.heat-js div.guide div.map-types,div.heat-js div.guide div.map-toggles{margin-bottom:0}}div.heat-js div.guide div.map-types{text-align:center;flex-grow:unset;margin-right:0;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left;width:unset;flex-grow:1;margin-right:var(--heat-js-spacing)}}div.heat-js div.guide div.map-types button{background-color:var(--heat-js-button-background-color);border:var(--heat-js-border-size) solid var(--heat-js-button-border-color);color:var(--heat-js-button-text-color);border-radius:var(--heat-js-border-radius);padding-top:5px;padding-bottom:5px;padding-left:9px;padding-right:9px;outline:none;transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types button:disabled{color:var(--heat-js-button-border-color)}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):active{background:var(--heat-js-button-background-color-active)!important;color:var(--heat-js-button-text-color-active)!important}div.heat-js div.guide div.map-types button:not(.active):not(:disabled):hover{cursor:pointer;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover)}div.heat-js div.guide div.map-types button.active{cursor:default;background:var(--heat-js-button-background-color-hover);color:var(--heat-js-button-text-color-hover);transition:var(--heat-js-transition);font-weight:var(--heat-js-text-bold-weight-active)}@media (min-width:768px){div.heat-js div.guide div.map-types{text-align:left}}div.heat-js div.guide div.map-types span.label,div.heat-js div.guide div.map-types a.label,div.heat-js div.guide div.map-types a.label:visited{color:var(--heat-js-color-white);font-weight:var(--heat-js-text-bold-weight);text-decoration:none}div.heat-js div.guide div.map-types a.label{transition:var(--heat-js-transition)}div.heat-js div.guide div.map-types a.label:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-types a.label:hover{text-decoration:underline}div.heat-js div.guide div.map-types button{margin-left:0!important;margin-right:calc(var(--heat-js-spacing) / 2)!important}div.heat-js div.guide div.map-toggles{display:flex;align-items:center;justify-content:center;text-align:center}@media (min-width:768px){div.heat-js div.guide div.map-toggles{text-align:right;justify-content:right;width:auto}}div.heat-js div.guide div.map-toggles div.less-text,div.heat-js div.guide div.map-toggles div.more-text{display:inline-block;font-weight:var(--heat-js-text-bold-weight);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.less-text:hover,div.heat-js div.guide div.map-toggles div.more-text:hover{cursor:pointer;text-decoration:underline}div.heat-js div.guide div.map-toggles div.less-text:active,div.heat-js div.guide div.map-toggles div.more-text:active{color:var(--heat-js-color-gray)}div.heat-js div.guide div.map-toggles div.less-text{margin-right:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.more-text{margin-left:var(--heat-js-spacing)}div.heat-js div.guide div.map-toggles div.days{display:inline-flex;align-items:center;justify-content:right}div.heat-js div.guide div.map-toggles div.days div.day-number{display:inline-flex!important;justify-content:center;align-items:center;overflow:hidden;text-align:center;font-size:var(--heat-js-spacing-day-font-size);padding-left:calc(var(--heat-js-spacing) / 2);padding-right:calc(var(--heat-js-spacing) / 2)}div.heat-js div.guide div.map-toggles div.days div.day{background-color:var(--heat-js-day-background-color);border:var(--heat-js-border-size) solid var(--heat-js-day-border-color);display:inline-block;border-radius:var(--heat-js-border-radius-day);min-width:var(--heat-js-day-size);height:var(--heat-js-day-size);margin-right:var(--heat-js-day-spacing);transition:var(--heat-js-transition)}div.heat-js div.guide div.map-toggles div.days div.day:last-child{margin-right:0}div.heat-js div.guide div.map-toggles div.days div.day:not(.no-hover):hover{cursor:pointer;background:var(--heat-js-day-background-color-hover)}div.heat-js label.checkbox{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;display:inline-block;position:relative;padding-left:20px;padding-top:1px;padding-bottom:2px;color:var(--heat-js-color-white)}div.heat-js label.checkbox input{display:none!important}div.heat-js label.checkbox input:checked~span.check-mark{background-color:var(--heat-js-checkbox-background-color-checked);border:var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color-checked)}div.heat-js label.checkbox input:checked~span.check-mark::before{display:block}div.heat-js label.checkbox input:disabled~span.check-mark,div.heat-js label.checkbox input:disabled~span.text{opacity:.5}div.heat-js label.checkbox input:disabled~span.check-mark{border:var(--heat-js-border-size) solid var(--heat-js-color-black)!important}div.heat-js label.checkbox span.check-mark{position:absolute;top:1px;left:0;height:15px;width:15px;background-color:var(--heat-js-checkbox-background-color);border-radius:var(--heat-js-border-control-radius);border:var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color);transition:var(--heat-js-transition)}div.heat-js label.checkbox span.check-mark::before{content:"";transform:rotate(45deg);position:absolute;display:none;left:4.5px;top:1px;width:6px;height:11px;border:solid var(--heat-js-color-black);border-width:0 3px 3px 0}div.heat-js div.day-color-1:not(.no-hover):active,div.heat-js div.day-color-2:not(.no-hover):active,div.heat-js div.day-color-3:not(.no-hover):active,div.heat-js div.day-color-4:not(.no-hover):active,div.heat-js div.holiday:not(.no-hover):active{opacity:var(--heat-js-day-opacity-active)!important}div.heat-js div.day-color-1:not(.no-hover):hover,div.heat-js div.day-color-2:not(.no-hover):hover,div.heat-js div.day-color-3:not(.no-hover):hover,div.heat-js div.day-color-4:not(.no-hover):hover,div.heat-js div.holiday:not(.no-hover):hover{cursor:pointer;opacity:var(--heat-js-day-opacity-hover)}div.heat-js div.holiday{background-color:var(--heat-js-holiday-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-holiday-border-color)!important;color:var(--heat-js-holiday-text-color)}div.heat-js div.day-color-1{background-color:var(--heat-js-day-color-1-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-1-border-color)!important;color:var(--heat-js-day-color-1-text-color)}div.heat-js div.day-color-2{background-color:var(--heat-js-day-color-2-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-2-border-color)!important;color:var(--heat-js-day-color-2-text-color)}div.heat-js div.day-color-3{background-color:var(--heat-js-day-color-3-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-3-border-color)!important;color:var(--heat-js-day-color-3-text-color)}div.heat-js div.day-color-4{background-color:var(--heat-js-day-color-4-background-color)!important;border:var(--heat-js-border-size-day) solid var(--heat-js-day-color-4-border-color)!important;color:var(--heat-js-day-color-4-text-color)}div.heat-js-tooltip{-moz-user-select:none;-webkit-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;cursor:default;box-sizing:border-box;line-height:normal;font-family:var(--heat-js-default-font);animation:fade-in-animation var(--heat-js-animation-length);position:absolute;background-color:var(--heat-js-tooltip-background-color);border:var(--heat-js-border-size) solid var(--heat-js-tooltip-border-color);color:var(--heat-js-tooltip-text-color);border-radius:var(--heat-js-border-radius);z-index:2000;max-width:300px;padding:var(--heat-js-spacing);font-size:var(--heat-js-spacing-font-size);font-weight:var(--heat-js-text-bold-weight);display:none}@keyframes fade-in-animation{0%{opacity:0}100%{opacity:1}} \ No newline at end of file diff --git a/dist/heat.min.js b/dist/heat.min.js index 4e11028b..4c4d295d 100644 --- a/dist/heat.min.js +++ b/dist/heat.min.js @@ -1,75 +1,90 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ -(function(){function Aa(){for(var a=h.domElementTypes,b=a.length,c=0;c -g;g++)a.views.map.daysToShow.indexOf(g+1)>N.notFound&&v(e,"div","day-name",f&&0!==g%3?p.space:h.dayNames[g]);a.views.map.showDaysInReverseOrder&&S(e)}e=u(d,"div","months");d=fa(a);for(f=0;12>f;f++)if(ha(a.views.map.monthsToShow,f)){g=u(e,"div","month");var r=u(g,"div","day-columns");var A=aa(m,f),E=u(r,"div","day-column"),D=!1,J=sa(new Date(m,f,1)),F=1;A+=J;for(var G=0;G=J?D=!0:a.views.map.daysToShow.indexOf(F)>N.notFound&&u(E,"div","day-disabled");if(D){var L=null;a.views.map.daysToShow.indexOf(F)> -N.notFound&&(L=Ta(a,E,G-J,f,m,d));if(0===(G+1)%7&&(a.views.map.showDaysInReverseOrder&&S(E),E=u(r,"div","day-column"),F=0,!w(Y)&&w(L))){var Ua=ia(L,"margin-left",!0),Va=ia(L,"margin-right",!0);Y=L.offsetWidth+Ua+Va}}F++}a.views.map.showMonthNames&&(E=g.offsetWidth,A=a.views.map.placeMonthNamesOnTheBottom?v(g,"div","month-name-bottom",h.monthNames[f]):v(g,"div","month-name",h.monthNames[f],r),w(A)&&(A.style.width=a.views.map.showMonthDayGaps?E+"px":E-Y+"px"));b&&w(Y)&&(0A;A++)for(E=aa(a.currentView.year,A),D=0;DN.notFound&&(F=ua(a,b,J[F]),w(F)?(e.hasOwnProperty(F.minimum.toString())||(e[F.minimum.toString()]=0),e[F.minimum]++,r=K.max(r,e[F.minimum])): -e[p.zero]++));d&&y(f,"view-switch");0B.innerWidth?e-=d.offsetWidth:e++;f+d.offsetHeight>B.innerHeight?f-=d.offsetHeight:f++;e=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length- -1]&&(b.disabled=!0)}}}function va(a,b,c,d){a.currentView.view===c?y(b,"title-active"):b.onclick=function(){a.currentView.view=c;x(a.onViewSwitch,d);z(a,!1,!0)}}function $a(a,b,c,d){var e=null;b=v(b,"div","year",c);a.currentView.year!==c?(b.onclick=function(){a.currentView.year=c;z(a);x(a.onSetYear,a.currentView.year)},c===d&&y(b,"year-current")):(y(b,"year-active"),e=b);return e}function Ta(a,b,c,d,e,f){c+=1;b=u(b,"div","day");var g=new Date(e,d,c),m=k[a.currentView.element.id].type[a.currentView.type][O(g)]; -m=V(m,0);Ha(a,b,g,m);a.views.map.showDayNumbers&&0g;g++)if(ha(a.views.chart.monthsToShow,g)){A=aa(m,g);var E=1;c++;for(var D=0;DN.notFound&&bb(e,a,D+1,g,m,f,b),0===(D+1)%7&&(E=0),E++,d++}a.views.chart.showInReverseOrder&&S(e);if(a.views.chart.showMonthNames){var J=u(a.currentView.chartContents,"div","chart-months"),F=e.offsetWidth/c,G=0;f=function(L){ha(a.views.chart.monthsToShow,L)&&(v(J,"div","month-name",h.monthNames[L]).style.left= -r+F*G+"px",G++)};if(a.views.chart.showInReverseOrder)for(m=12;m--;)f(m);else for(m=0;12>m;m++)f(m);J.style.width=e.offsetWidth+"px";e=u(J,"div","month-name-space");e.style.height=J.offsetHeight+"px";e.style.width=r+"px"}a.keepScrollPositions&&(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}}function bb(a,b,c,d,e,f,g){var m=new Date(e,d,c);a=u(a,"div","day-line");var r=M(b)[O(m)];r=V(r,0);Ha(b,a,m,r);b.views.chart.showLineNumbers&&0=g&&(a.style.visibility="hidden");P(b.onDayClick)?a.onclick=function(){x(b.onDayClick,m,r)}:y(a,"no-hover");f=ua(b,f,r,m);w(f)&&ka(b,f.id)&&(t(f.chartCssClassName)?y(a,f.chartCssClassName):y(a,f.cssClassName))}function ab(a){for(var b=0,c=M(a),d=0;12>d;d++)for(var e=aa(a.currentView.year,d),f=0;f=a&&(b.style.visibility="hidden");ja(b,d,c.toString());d.views.statistics.showRangeNumbers&&0N.notFound}function Oa(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=M(a);for(var c in a)if(a.hasOwnProperty(c)){var d=parseInt(c.split(p.dash)[0]);b.indexOf(d)===N.notFound&&b.push(d)}}return b=b.sort(function(e,f){return e-f})}function U(a,b){return a.yearsToHide.indexOf(b)===N.notFound&&(0===a.currentView.yearsAvailable.length||a.currentView.yearsAvailable.indexOf(b)>N.notFound)} -function Pa(a){a.currentView.isInFetchMode&&(w(a.currentView.isInFetchModeTimer)||Ka(a),w(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Ka(a);z(a)},a.dataFetchDelay)))}function Ka(a){var b=a.currentView.element.id,c=x(a.onDataFetch,b);if(I(c)){qa(b,a,!1);for(var d in c)c.hasOwnProperty(d)&&(k[b].type[h.unknownTrendText].hasOwnProperty(d)||(k[b].type[h.unknownTrendText][d]=0),k[b].type[h.unknownTrendText][d]+=c[d])}}function ka(a,b){var c=!1;if("HOLIDAY"=== -b)c=!0;else for(var d=a.colorRanges.length,e=0;e=f.minimum)e=f;else break}return e}function Fa(a,b){for(var c= -a.length,d=null,e=0;e'); -f.push("");for(e in g)g.hasOwnProperty(e)&&(f.push(""),f.push(""+e+""),f.push(""+g[e]+""),f.push(""));f.push("");c=f.join(p.newLine)}else if("txt"===b){g=la(a);e=[];for(f in g)g.hasOwnProperty(f)&&e.push(f+p.colon+p.space+g[f].toString());c=e.join(p.newLine)}t(c)&&(g=u(H.body,"a"),g.style.display="none",g.setAttribute("target","_blank"),g.setAttribute("href","data:"+d+";charset=utf-8,"+encodeURIComponent(c)),d=g.setAttribute,f=new Date, -e=Q(f.getDate())+p.dash+Q(f.getMonth()+1)+p.dash+f.getFullYear(),f=Q(f.getHours())+p.dash+Q(f.getMinutes()),c=p.empty,a.currentView.type!==h.unknownTrendText&&(c=a.currentView.type.toLowerCase().replace(p.space,p.underscore)+p.underscore),e=c+e+p.underscore+f+"."+a.exportType.toLowerCase(),d.call(g,"download",e),g.click(),H.body.removeChild(g),x(a.onExport,a.currentView.element))}function la(a){var b={},c=M(a);if(a.exportOnlyYearBeingViewed)for(var d=0;12>d;d++)for(var e=aa(a.currentView.year,d), -f=0;fa.getDay()-1?6:a.getDay()-1}function w(a){return null!==a&&void 0!==a&&a!==p.empty}function I(a){return w(a)&&"object"=== -typeof a}function xa(a){return w(a)&&"boolean"===typeof a}function t(a){return w(a)&&"string"===typeof a}function P(a){return w(a)&&"function"===typeof a}function na(a){return w(a)&&"number"===typeof a}function W(a){return I(a)&&a instanceof Array}function oa(a){return I(a)&&a instanceof Date}function eb(a){a=a.toLowerCase();var b="text"===a;Z.hasOwnProperty(a)||(Z[a]=b?H.createTextNode(p.empty):H.createElement(a));return Z[a].cloneNode(!1)}function u(a,b,c,d){b=b.toLowerCase();var e="text"===b;Z.hasOwnProperty(b)|| -(Z[b]=e?H.createTextNode(p.empty):H.createElement(b));b=Z[b].cloneNode(!1);w(c)&&(b.className=c);w(d)?a.insertBefore(b,d):a.appendChild(b);return b}function v(a,b,c,d,e){a=u(a,b,c,e);a.innerHTML=d;return a}function ia(a,b,c){var d=null;c=n(c,!1);B.getComputedStyle?d=H.defaultView.getComputedStyle(a,null).getPropertyValue(b):a.currentStyle&&(d=a.currentStyle[b]);c&&(d=parseFloat(d,10));return d}function y(a,b){a.className+=p.space+b;a.className=a.className.trim()}function ba(a){a.preventDefault(); -a.cancelBubble=!0}function S(a){for(var b=a.children,c=b.length-1;c--;)a.appendChild(b[c])}function x(a){var b=null;P(a)&&(b=a.apply(null,[].slice.call(arguments,1)));return b}function q(a,b){return t(a)?a:b}function n(a,b){return xa(a)?a:b}function C(a,b){return P(a)?a:b}function V(a,b){return na(a)?a:b}function pa(a){var b=!0,c=null;try{t(a)&&(c=da.parse(a))}catch(d){try{c=eval("("+a+")"),P(c)&&(c=c())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}",d.message).replace("{{error_2}}", -e.message)),b=!1),c=null}}return{parsed:b,result:c}}function X(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&&16!==b&&20!==b||a.push(p.dash);var c=K.floor(16*K.random()).toString(16);a.push(c)}return a.join(p.empty)}function Q(a){a=a.toString();return 1===a.length?p.zero+a:a}function Ea(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function O(a){return a.getFullYear()+p.dash+Q(a.getMonth()+1)+p.dash+Q(a.getDate())}function wa(a,b){b=n(b,!0);var c=!0,d=a.currentView.year;for(d--;!U(a, -d);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){c=!1;break}d++}c&&(a.currentView.year=d,z(a),b&&x(a.onBackYear,a.currentView.year))}function Ma(a){a.currentView.element.innerHTML=p.empty;var b= -a.currentView.element;b.className=b.className.replace("heat-js",p.empty);b.className=b.className.trim();H.body.removeChild(a.currentView.tooltip);a.currentView.isInFetchMode&&w(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);x(a.onDestroy,a.currentView.element)}function Na(a){h=I(a)?a:{};h.safeMode=n(h.safeMode,!0);a=h;var b=h.domElementTypes,c=["*"];t(b)?(b=b.split(p.space),0===b.length&&(b=c)):b=W(b)?b:c;a.domElementTypes=b;h.stText=q(h.stText,"st");h.ndText=q(h.ndText, -"nd");h.rdText=q(h.rdText,"rd");h.thText=q(h.thText,"th");h.backButtonText=q(h.backButtonText,"Back");h.nextButtonText=q(h.nextButtonText,"Next");h.refreshButtonText=q(h.refreshButtonText,"Refresh");h.exportButtonText=q(h.exportButtonText,"Export");h.lessText=q(h.lessText,"Less");h.moreText=q(h.moreText,"More");h.dateText=q(h.dateText,"Date");h.countText=q(h.countText,"Count");h.mapText=q(h.mapText,"Map");h.chartText=q(h.chartText,"Chart");h.noChartDataMessage=q(h.noChartDataMessage,"There is currently no data to view."); -h.statisticsText=q(h.statisticsText,"Statistics");h.noStatisticsDataMessage=q(h.noStatisticsDataMessage,"There are currently no statistics to view.");h.unknownTrendText=q(h.unknownTrendText,"Unknown");h.importButtonText=q(h.importButtonText,"Import");h.noMapDataMessage=q(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=q(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=q(h.attributeNotValidErrorText,"The attribute '{{attribute_name}}' is not a valid object."); -h.attributeNotSetErrorText=q(h.attributeNotSetErrorText,"The attribute '{{attribute_name}}' has not been set correctly.");R(h.monthNames,12)&&(h.monthNames="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));R(h.dayNames,7)&&(h.dayNames="Mon Tue Wed Thu Fri Sat Sun".split(" "))}function R(a,b){b=na(b)?b:1;return!W(a)||a.lengthc&&(a.currentView.year= -c,U(a,a.currentView.year)?z(a):wa(a,!1),x(a.onSetYear,a.currentView.year))}return l};l.moveToPreviousYear=function(a){t(a)&&k.hasOwnProperty(a)&&wa(k[a].options);return l};l.moveToNextYear=function(a){t(a)&&k.hasOwnProperty(a)&&ca(k[a].options);return l};l.moveToCurrentYear=function(a){t(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),U(a,a.currentView.year)?z(a):ca(a,!1),x(a.onSetYear,a.currentView.year));return l};l.getYear=function(a){var b=null;t(a)&&k.hasOwnProperty(a)&& -(b=k[a].options.currentView.year);return b};l.render=function(a,b){I(a)&&I(b)&&Ba(Ca(b,a));return l};l.renderAll=function(){Aa();return l};l.switchView=function(a,b){if(t(a)&&t(b)&&k.hasOwnProperty(a)){a=k[a].options;var c=null;"map"===b.toLowerCase()?c=1:"chart"===b.toLowerCase()?c=2:"statistics"===b.toLowerCase()&&(c=3);na(c)&&(a.currentView.view=c,x(a.onViewSwitch,b),z(a,!1,!0))}return l};l.switchType=function(a,b){t(a)&&t(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)&&(a=k[a].options,a.currentView.type!== -b&&(a.currentView.type=b,x(a.onTypeSwitch,b),z(a)));return l};l.updateOptions=function(a,b){if(t(a)&&I(b)&&k.hasOwnProperty(a)){a=k[a].options;b=Da(b);var c=!1,d;for(d in b)b.hasOwnProperty(d)&&a.hasOwnProperty(d)&&a[d]!==b[d]&&(a[d]=b[d],c=!0);c&&(z(a,!0),x(a.onRefresh,a.currentView.element))}return l};l.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&&Ma(k[a].options);k={};return l};l.destroy=function(a){t(a)&&k.hasOwnProperty(a)&&(Ma(k[a].options),delete k[a]);return l};l.setConfiguration= -function(a,b){if(I(a)){var c=!1,d;for(d in a)a.hasOwnProperty(d)&&h.hasOwnProperty(d)&&h[d]!==a[d]&&(h[d]=a[d],c=!0);c&&(b=n(b,!0),Na(h),b&&l.refreshAll())}return l};l.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};l.getVersion=function(){return"2.8.0"};(function(a,b,c,d){H=a;B=b;K=c;da=d;Na();H.addEventListener("DOMContentLoaded",function(){Aa()});B.addEventListener("pagehide",function(){for(var e in k)if(k.hasOwnProperty(e)){var f=k[e].options;w(f.currentView.isInFetchModeTimer)&& -clearInterval(f.currentView.isInFetchModeTimer)}});w(B.$heat)||(B.$heat=l)})(document,window,Math,JSON)})(); \ No newline at end of file +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ +(function(){function Da(){for(var a=h.domElementTypes,b=a.length,d=0;dc;c++)S(a.views.map.daysToShow,c+1)&&u(f,"div","day-name",g&&0!==c%3?q.space:h.dayNames[c]);a.views.map.showDaysInReverseOrder&&R(f)}f=n(e,"div","months");e=ma(a);for(g=0;12>g;g++)if(ba(a.views.map.monthsToShow,g)){c=n(f,"div","month");var t= +n(c,"div","day-columns");var y=ca(l,g),E=n(t,"div","day-column"),B=!1,F=na(new Date(l,g,1)),G=1;y+=F;for(var H=0;H=F?B=!0:S(a.views.map.daysToShow,G)&&n(E,"div","day-disabled");if(B){var L=null;S(a.views.map.daysToShow,G)&&(L=Xa(a,E,H-F,g,l,e));if(0===(H+1)%7&&(a.views.map.showDaysInReverseOrder&&R(E),E=n(t,"div","day-column"),G=0,!w(da)&&w(L))){var Ya=fa(L,"margin-left",!0),Za=fa(L,"margin-right",!0);da=L.offsetWidth+Ya+Za}}G++}a.views.map.showMonthNames&&(E=c.offsetWidth,y=a.views.map.placeMonthNamesOnTheBottom? +u(c,"div","month-name-bottom",h.monthNames[g]):u(c,"div","month-name",h.monthNames[g],t),w(y)&&(y.style.width=a.views.map.showMonthDayGaps?E+"px":E-da+"px"));b&&w(da)&&(0y;y++)for(E=ca(a.currentView.year,y),B=0;BF;F++)for(y=ca(a.currentView.year,F),E=0;Ey;y++)a.currentView.dayCheckBoxes[y].checked&&g.push(y+1);for(y=0;12>y;y++)a.currentView.monthCheckBoxes[y].checked&&l.push(y+1);1<=g.length&&(1===a.currentView.view? +a.views.map.daysToShow=g:a.views.chart.enabled&&2===a.currentView.view?a.views.chart.daysToShow=g:a.views.days.enabled&&3===a.currentView.view?a.views.days.daysToShow=g:a.views.statistics.enabled&&4===a.currentView.view?a.views.statistics.daysToShow=g:a.views.map.daysToShow=g,t=!0);1<=l.length&&(1===a.currentView.view?a.views.map.monthsToShow=l:a.views.chart.enabled&&2===a.currentView.view?a.views.chart.monthsToShow=l:a.views.days.enabled&&3===a.currentView.view?a.views.days.monthsToShow=l:a.views.statistics.enabled&& +4===a.currentView.view?a.views.statistics.monthsToShow=l:a.views.map.monthsToShow=l,t=!0);t?(A(a),z(a.onOptionsUpdate,a.currentView.element,a)):aa(a)};for(var f=0;7>f;f++)a.currentView.dayCheckBoxes[f]=Aa(e,h.dayNames[f]).input;for(e=0;7>e;e++)a.currentView.monthCheckBoxes[e]=Aa(b,h.monthNames[e]).input;for(e=7;12>e;e++)a.currentView.monthCheckBoxes[e]=Aa(d,h.monthNames[e]).input;V(c,a,h.closeToolTipText)}function Ia(a,b){var d=(b=m(b,!0))?K.addEventListener:K.removeEventListener;(b?C.addEventListener: +C.removeEventListener)("mousemove",function(){aa(a)});d("scroll",function(){aa(a)})}function V(a,b,d){null!==a&&(a.onmousemove=function(c){cb(c,b,d)})}function cb(a,b,d){ha(a);aa(b);b.currentView.tooltipTimer=setTimeout(function(){b.currentView.tooltip.innerHTML=d;b.currentView.tooltip.style.display="block";var c=b.currentView.tooltip,e=a.pageX,f=a.pageY;var g=K.documentElement;var l=(C.pageXOffset||g.scrollLeft)-(g.clientLeft||0);g=(C.pageYOffset||g.scrollTop)-(g.clientTop||0);c.style.display="block"; +e+c.offsetWidth>C.innerWidth?e-=c.offsetWidth:e++;f+c.offsetHeight>C.innerHeight?f-=c.offsetHeight:f++;ef;f++)a.currentView.dayCheckBoxes[f].checked=S(c,f+1);for(c=0;12>c;c++)a.currentView.monthCheckBoxes[c].checked=ba(e,c);aa(a)}),b=u(b, +"button","next",h.nextButtonText),b.onclick=function(){ia(a)},0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]&&(b.disabled=!0))}}function db(a,b){b=n(b,"div","titles-menu-container");b=n(b,"div","titles-menu");u(b,"div","title-menu-header",h.dataText+q.colon);var d=u(b,"div","title-menu-item",h.mapText);pa(a,d,1,"map");a.views.chart.enabled&&(d=u(b,"div","title-menu-item",h.chartText),pa(a,d,2,"chart"));a.views.days.enabled&& +(u(b,"div","title-menu-header",h.yearText+q.colon),d=u(b,"div","title-menu-item",h.daysText),pa(a,d,3,"days"));a.views.statistics.enabled&&(u(b,"div","title-menu-header",h.statisticsText+q.colon),b=u(b,"div","title-menu-item",h.colorRangesText),pa(a,b,4,"statistics"))}function pa(a,b,d,c){a.currentView.view===d?x(b,"title-menu-item-active"):b.onclick=function(){a.currentView.view=d;z(a.onViewSwitch,c);A(a,!1,!0)}}function fb(a){n(a.currentView.yearText,"div","down-arrow");var b=n(a.currentView.yearText, +"div","years-menu-container"),d=n(b,"div","years-menu"),c=(new Date).getFullYear(),e=null;b.style.display="block";b.style.visibility="hidden";for(var f=c-a.extraSelectionYears;fg;g++)if(ba(a.views.chart.monthsToShow,g)){y=ca(l,g);var E=1;d++;for(var B=0;Bl;l++)f(l);F.style.width=e.offsetWidth+"px";e=n(F,"div","month-name-space");e.style.height=F.offsetHeight+"px";e.style.width=t+"px"}a.keepScrollPositions&&(a.currentView.chartContents.scrollLeft=a.currentView.chartContentsScrollLeft)}}function ib(a,b,d,c,e,f,g){var l=new Date(e, +c,d);a=n(a,"div","day-line");var t=M(b)[N(l)];t=X(t,0);La(b,a,l,t);b.views.chart.showLineNumbers&&0=g&&(a.style.visibility="hidden");Q(b.onDayClick)?a.onclick=function(){z(b.onDayClick,l,t)}:x(a,"no-hover");f=za(b,f,t,l);w(f)&&qa(b,f.id)&&(v(f.chartCssClassName)?x(a,f.chartCssClassName):x(a,f.cssClassName))}function hb(a){for(var b=0,d=M(a),c=0;12>c;c++)for(var e=ca(a.currentView.year,c),f=0;f=e&&(a.style.visibility="hidden");V(a,c,d.toString());Q(c.onWeekDayClick)?a.onclick=function(){z(c.onWeekDayClick,b,d)}:x(a,"no-hover");c.views.days.showDayNumbers&&0=a&&(b.style.visibility="hidden");V(b,c,d.toString()); +c.views.statistics.showRangeNumbers&&0ja.notFound}function S(a,b){return a.indexOf(b)>ja.notFound}function Sa(a){var b=[];if(a.showOnlyDataForYearsAvailable){a=M(a);for(var d in a)if(a.hasOwnProperty(d)){var c=parseInt(d.split(q.dash)[0]);b.indexOf(c)===ja.notFound&&b.push(c)}}return b=b.sort(function(e,f){return e-f})}function W(a,b){return a.yearsToHide.indexOf(b)===ja.notFound&&(0===a.currentView.yearsAvailable.length|| +a.currentView.yearsAvailable.indexOf(b)>ja.notFound)}function Ta(a){a.currentView.isInFetchMode&&(w(a.currentView.isInFetchModeTimer)||Oa(a),w(a.currentView.isInFetchModeTimer)||(a.currentView.isInFetchModeTimer=setInterval(function(){Oa(a);A(a)},a.dataFetchDelay)))}function Oa(a){var b=a.currentView.element.id,d=z(a.onDataFetch,b);if(J(d)){ya(b,a,!1);for(var c in d)d.hasOwnProperty(c)&&(k[b].type[h.unknownTrendText].hasOwnProperty(c)||(k[b].type[h.unknownTrendText][c]=0),k[b].type[h.unknownTrendText][c]+= +d[c])}}function qa(a,b){var d=!1;if("HOLIDAY"===b)d=!0;else for(var c=a.colorRanges.length,e=0;e=f.minimum)e= +f;else break}return e}function Ja(a,b){for(var d=a.length,c=null,e=0;e');f.push("");for(e in g)g.hasOwnProperty(e)&&(f.push(""),f.push(""+e+""),f.push(""+g[e]+""),f.push(""));f.push("");d=f.join(q.newLine)}else if("txt"===b){g=ra(a);e=[];for(f in g)g.hasOwnProperty(f)&&e.push(f+q.colon+q.space+g[f].toString());d=e.join(q.newLine)}v(d)&&(g=n(K.body,"a"),g.style.display="none",g.setAttribute("target","_blank"),g.setAttribute("href","data:"+ +c+";charset=utf-8,"+encodeURIComponent(d)),c=g.setAttribute,f=new Date,e=T(f.getDate())+q.dash+T(f.getMonth()+1)+q.dash+f.getFullYear(),f=T(f.getHours())+q.dash+T(f.getMinutes()),d=q.empty,a.currentView.type!==h.unknownTrendText&&(d=a.currentView.type.toLowerCase().replace(q.space,q.underscore)+q.underscore),e=d+e+q.underscore+f+"."+a.exportType.toLowerCase(),c.call(g,"download",e),g.click(),K.body.removeChild(g),z(a.onExport,a.currentView.element))}function ra(a){var b={},d=M(a);if(a.exportOnlyYearBeingViewed)for(var c= +0;12>c;c++)for(var e=ca(a.currentView.year,c),f=0;fa.getDay()-1?6:a.getDay()-1}function w(a){return null!==a&&void 0!==a&&a!==q.empty}function J(a){return w(a)&&"object"===typeof a}function Ca(a){return w(a)&&"boolean"===typeof a}function v(a){return w(a)&&"string"===typeof a}function Q(a){return w(a)&&"function"===typeof a}function va(a){return w(a)&&"number"===typeof a}function Y(a){return J(a)&&a instanceof Array}function wa(a){return J(a)&&a instanceof Date}function lb(a){a=a.toLowerCase(); +var b="text"===a;ea.hasOwnProperty(a)||(ea[a]=b?K.createTextNode(q.empty):K.createElement(a));return ea[a].cloneNode(!1)}function n(a,b,d,c){b=b.toLowerCase();var e="text"===b;ea.hasOwnProperty(b)||(ea[b]=e?K.createTextNode(q.empty):K.createElement(b));b=ea[b].cloneNode(!1);w(d)&&(b.className=d);w(c)?a.insertBefore(b,c):a.appendChild(b);return b}function u(a,b,d,c,e){a=n(a,b,d,e);a.innerHTML=c;return a}function fa(a,b,d){var c=null;d=m(d,!1);C.getComputedStyle?c=K.defaultView.getComputedStyle(a,null).getPropertyValue(b): +a.currentStyle&&(c=a.currentStyle[b]);d&&(c=parseFloat(c,10));return c}function x(a,b){a.className+=q.space+b;a.className=a.className.trim()}function ha(a){a.preventDefault();a.cancelBubble=!0}function R(a){for(var b=a.children,d=b.length-1;d--;)a.appendChild(b[d])}function Aa(a,b,d,c){a=n(a,"div");a=n(a,"label","checkbox");var e=n(a,"input");e.type="checkbox";w(c)&&(e.onclick=c);w(d)&&(e.checked=d);n(a,"span","check-mark");u(a,"span","text",b);return{input:e,label:a}}function z(a){var b=null;Q(a)&& +(b=a.apply(null,[].slice.call(arguments,1)));return b}function r(a,b){return v(a)?a:b}function m(a,b){return Ca(a)?a:b}function D(a,b){return Q(a)?a:b}function X(a,b){return va(a)?a:b}function xa(a){var b=!0,d=null;try{v(a)&&(d=ka.parse(a))}catch(c){try{d=eval("("+a+")"),Q(d)&&(d=d())}catch(e){h.safeMode||(console.error(h.objectErrorText.replace("{{error_1}}",c.message).replace("{{error_2}}",e.message)),b=!1),d=null}}return{parsed:b,result:d}}function Z(){for(var a=[],b=0;32>b;b++){8!==b&&12!==b&& +16!==b&&20!==b||a.push(q.dash);var d=I.floor(16*I.random()).toString(16);a.push(d)}return a.join(q.empty)}function T(a){a=a.toString();return 1===a.length?q.zero+a:a}function Ha(a,b){return a.substring(0,b.length).toLowerCase()===b.toLowerCase()}function N(a){return a.getFullYear()+q.dash+T(a.getMonth()+1)+q.dash+T(a.getDate())}function Ba(a,b){b=m(b,!0);var d=!0,c=a.currentView.year;for(c--;!W(a,c);){if(0=a.currentView.yearsAvailable[a.currentView.yearsAvailable.length-1]){d=!1;break}c++}d&&(a.currentView.year=c,A(a),b&&z(a.onBackYear,a.currentView.year))}function Qa(a){a.currentView.element.innerHTML=q.empty;var b=a.currentView.element;b.className=b.className.replace("heat-js",q.empty);b.className=b.className.trim(); +Ia(a,!1);K.body.removeChild(a.currentView.tooltip);a.currentView.isInFetchMode&&w(a.currentView.isInFetchModeTimer)&&clearInterval(a.currentView.isInFetchModeTimer);z(a.onDestroy,a.currentView.element)}function Ra(a){h=J(a)?a:{};h.safeMode=m(h.safeMode,!0);a=h;var b=h.domElementTypes,d=["*"];v(b)?(b=b.split(q.space),0===b.length&&(b=d)):b=Y(b)?b:d;a.domElementTypes=b;h.stText=r(h.stText,"st");h.ndText=r(h.ndText,"nd");h.rdText=r(h.rdText,"rd");h.thText=r(h.thText,"th");h.backButtonText=r(h.backButtonText, +"Back");h.nextButtonText=r(h.nextButtonText,"Next");h.refreshButtonText=r(h.refreshButtonText,"Refresh");h.exportButtonText=r(h.exportButtonText,"Export");h.lessText=r(h.lessText,"Less");h.moreText=r(h.moreText,"More");h.dateText=r(h.dateText,"Date");h.countText=r(h.countText,"Count");h.mapText=r(h.mapText,"Map");h.chartText=r(h.chartText,"Chart");h.noChartDataMessage=r(h.noChartDataMessage,"There is currently no data to view.");h.statisticsText=r(h.statisticsText,"Statistics");h.noStatisticsDataMessage= +r(h.noStatisticsDataMessage,"There are currently no statistics to view.");h.unknownTrendText=r(h.unknownTrendText,"Unknown");h.importButtonText=r(h.importButtonText,"Import");h.noMapDataMessage=r(h.noMapDataMessage,"There is currently no data to view.");h.objectErrorText=r(h.objectErrorText,"Errors in object: {{error_1}}, {{error_2}}");h.attributeNotValidErrorText=r(h.attributeNotValidErrorText,"The attribute '{{attribute_name}}' is not a valid object.");h.attributeNotSetErrorText=r(h.attributeNotSetErrorText, +"The attribute '{{attribute_name}}' has not been set correctly.");h.closeToolTipText=r(h.closeToolTipText,"Close");h.configurationToolTipText=r(h.configurationToolTipText,"Configuration");h.configurationTitleText=r(h.configurationTitleText,"Configuration");h.visibleMonthsText=r(h.visibleMonthsText,"Visible Months");h.visibleDaysText=r(h.visibleDaysText,"Visible Days");h.dataText=r(h.dataText,"Data");h.colorRangesText=r(h.colorRangesText,"Color Ranges");h.yearText=r(h.yearText,"Year");h.daysText=r(h.daysText, +"Days");h.noDaysDataMessage=r(h.noDaysDataMessage,"There are currently no days to view.");P(h.monthNames,12)&&(h.monthNames="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "));P(h.dayNames,7)&&(h.dayNames="Mon Tue Wed Thu Fri Sat Sun".split(" "))}function P(a,b){b=va(b)?b:1;return!Y(a)||a.lengthd&&(a.currentView.year=d,W(a,a.currentView.year)?A(a):Ba(a,!1),z(a.onSetYear, +a.currentView.year))}return p};p.moveToPreviousYear=function(a){v(a)&&k.hasOwnProperty(a)&&Ba(k[a].options);return p};p.moveToNextYear=function(a){v(a)&&k.hasOwnProperty(a)&&ia(k[a].options);return p};p.moveToCurrentYear=function(a){v(a)&&k.hasOwnProperty(a)&&(a=k[a].options,a.currentView.year=(new Date).getFullYear(),W(a,a.currentView.year)?A(a):ia(a,!1),z(a.onSetYear,a.currentView.year));return p};p.getYear=function(a){var b=null;v(a)&&k.hasOwnProperty(a)&&(b=k[a].options.currentView.year);return b}; +p.render=function(a,b){J(a)&&J(b)&&Ea(Fa(b,a));return p};p.renderAll=function(){Da();return p};p.switchView=function(a,b){if(v(a)&&v(b)&&k.hasOwnProperty(a)){a=k[a].options;var d=null;"map"===b.toLowerCase()?d=1:"chart"===b.toLowerCase()?d=2:"days"===b.toLowerCase()?d=3:"statistics"===b.toLowerCase()&&(d=4);va(d)&&(a.currentView.view=d,z(a.onViewSwitch,b),A(a,!1,!0))}return p};p.switchType=function(a,b){v(a)&&v(b)&&k.hasOwnProperty(a)&&k[a].type.hasOwnProperty(b)&&(a=k[a].options,a.currentView.type!== +b&&(a.currentView.type=b,z(a.onTypeSwitch,b),A(a)));return p};p.updateOptions=function(a,b){if(v(a)&&J(b)&&k.hasOwnProperty(a)){a=k[a].options;b=Ga(b);var d=!1,c;for(c in b)b.hasOwnProperty(c)&&a.hasOwnProperty(c)&&a[c]!==b[c]&&(a[c]=b[c],d=!0);d&&(A(a,!0),z(a.onRefresh,a.currentView.element),z(a.onOptionsUpdate,a.currentView.element,a))}return p};p.destroyAll=function(){for(var a in k)k.hasOwnProperty(a)&&Qa(k[a].options);k={};return p};p.destroy=function(a){v(a)&&k.hasOwnProperty(a)&&(Qa(k[a].options), +delete k[a]);return p};p.setConfiguration=function(a,b){if(J(a)){var d=!1,c;for(c in a)a.hasOwnProperty(c)&&h.hasOwnProperty(c)&&h[c]!==a[c]&&(h[c]=a[c],d=!0);d&&(b=m(b,!0),Ra(h),b&&p.refreshAll())}return p};p.getIds=function(){var a=[],b;for(b in k)k.hasOwnProperty(b)&&a.push(b);return a};p.getVersion=function(){return"3.0.0"};(function(a,b,d,c){K=a;C=b;I=d;ka=c;Ra();K.addEventListener("DOMContentLoaded",function(){Da()});C.addEventListener("pagehide",function(){for(var e in k)if(k.hasOwnProperty(e)){var f= +k[e].options;w(f.currentView.isInFetchModeTimer)&&clearInterval(f.currentView.isInFetchModeTimer)}});w(C.$heat)||(C.$heat=p)})(document,window,Math,JSON)})(); \ No newline at end of file diff --git a/dist/themes/dark/heat.js.dark.bright-blue.theme.css b/dist/themes/dark/heat.js.dark.bright-blue.theme.css index a7b05bb2..b09fa6da 100644 --- a/dist/themes/dark/heat.js.dark.bright-blue.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-blue.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 210, 43, 43, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-orange.theme.css b/dist/themes/dark/heat.js.dark.bright-orange.theme.css index 1769ede1..2830c910 100644 --- a/dist/themes/dark/heat.js.dark.bright-orange.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-orange.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-purple.theme.css b/dist/themes/dark/heat.js.dark.bright-purple.theme.css index 94f7b069..76ddb39c 100644 --- a/dist/themes/dark/heat.js.dark.bright-purple.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-purple.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.bright-yellow.theme.css b/dist/themes/dark/heat.js.dark.bright-yellow.theme.css index 7eafbbb9..ce518422 100644 --- a/dist/themes/dark/heat.js.dark.bright-yellow.theme.css +++ b/dist/themes/dark/heat.js.dark.bright-yellow.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.cadmium-red.theme.css b/dist/themes/dark/heat.js.dark.cadmium-red.theme.css index aaf39b8b..6d10f5ff 100644 --- a/dist/themes/dark/heat.js.dark.cadmium-red.theme.css +++ b/dist/themes/dark/heat.js.dark.cadmium-red.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 31, 81, 255, 0.75 ); diff --git a/dist/themes/dark/heat.js.dark.github.theme.css b/dist/themes/dark/heat.js.dark.github.theme.css index 9d7131c3..3c5797d3 100644 --- a/dist/themes/dark/heat.js.dark.github.theme.css +++ b/dist/themes/dark/heat.js.dark.github.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Holidays */ --heat-js-holiday-background-color: rgba( 210, 43, 43, 0.75 ); diff --git a/dist/themes/light/heat.js.light.bright-orange.theme.css b/dist/themes/light/heat.js.light.bright-orange.theme.css index 36abfce2..9097e3b3 100644 --- a/dist/themes/light/heat.js.light.bright-orange.theme.css +++ b/dist/themes/light/heat.js.light.bright-orange.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.bright-purple.theme.css b/dist/themes/light/heat.js.light.bright-purple.theme.css index 1a09e4a4..b4428e91 100644 --- a/dist/themes/light/heat.js.light.bright-purple.theme.css +++ b/dist/themes/light/heat.js.light.bright-purple.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.gamboge.theme.css b/dist/themes/light/heat.js.light.gamboge.theme.css index d16c9b1b..58a7612b 100644 --- a/dist/themes/light/heat.js.light.gamboge.theme.css +++ b/dist/themes/light/heat.js.light.gamboge.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.neon-blue.theme.css b/dist/themes/light/heat.js.light.neon-blue.theme.css index bf917a35..d5572986 100644 --- a/dist/themes/light/heat.js.light.neon-blue.theme.css +++ b/dist/themes/light/heat.js.light.neon-blue.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.red.theme.css b/dist/themes/light/heat.js.light.red.theme.css index 8babb8ab..7f044078 100644 --- a/dist/themes/light/heat.js.light.red.theme.css +++ b/dist/themes/light/heat.js.light.red.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/themes/light/heat.js.light.shamrock-green.theme.css b/dist/themes/light/heat.js.light.shamrock-green.theme.css index 3715f8c0..a532f0fa 100644 --- a/dist/themes/light/heat.js.light.shamrock-green.theme.css +++ b/dist/themes/light/heat.js.light.shamrock-green.theme.css @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 | (c) Bunoon 2024 | MIT License */ :root { /* Colors */ --heat-js-color-black: #F5F5F5; diff --git a/dist/translations/heat.translations.af.js b/dist/translations/heat.translations.af.js index 2d20a685..5e189db2 100644 --- a/dist/translations/heat.translations.af.js +++ b/dist/translations/heat.translations.af.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Afrikaans | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Afrikaans | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Foute in voorwerp: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Die kenmerk '{{attribute_name}}' is nie 'n geldige voorwerp nie.", "attributeNotSetErrorText": "Die kenmerk '{{attribute_name}}' is nie korrek ingestel nie.", + "closeToolTipText": "Naby", + "configurationToolTipText": "Konfigurasie", + "configurationTitleText": "Konfigurasie", + "visibleMonthsText": "Sigbare maande", + "visibleDaysText": "Sigbare dae", + "dataText": "Data", + "colorRangesText": "Kleurreekse", + "yearText": "Jaar", + "daysText": "Dae", + "noDaysDataMessage": "Daar is tans geen dae om te bekyk nie.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.ar.js b/dist/translations/heat.translations.ar.js index 5bdd9b81..6ea60445 100644 --- a/dist/translations/heat.translations.ar.js +++ b/dist/translations/heat.translations.ar.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Arabic | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Arabic | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "أخطاء في الكائن: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "السمة '{{attribute_name}}' ليس كائنًا صالحًا.", "attributeNotSetErrorText": "السمة '{{attribute_name}}\"لم يتم ضبطه بشكل صحيح.", + "closeToolTipText": "يغلق", + "configurationToolTipText": "إعدادات", + "configurationTitleText": "إعدادات", + "visibleMonthsText": "الأشهر المرئية", + "visibleDaysText": "أيام مرئية", + "dataText": "بيانات", + "colorRangesText": "نطاقات الألوان", + "yearText": "سنة", + "daysText": "أيام", + "noDaysDataMessage": "لا يوجد حاليا أي أيام للعرض.", "monthNames": [ "يناير", "فبراير", diff --git a/dist/translations/heat.translations.be.js b/dist/translations/heat.translations.be.js index 5e5b62e9..128fcc18 100644 --- a/dist/translations/heat.translations.be.js +++ b/dist/translations/heat.translations.be.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Belarusian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Belarusian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Памылкі ў аб'екце: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Атрыбут '{{attribute_name}}' не з'яўляецца дапушчальным аб'ектам.", "attributeNotSetErrorText": "Атрыбут '{{attribute_name}}' не быў усталяваны правільна.", + "closeToolTipText": "Блізка", + "configurationToolTipText": "Канфігурацыя", + "configurationTitleText": "Канфігурацыя", + "visibleMonthsText": "Бачныя месяцы", + "visibleDaysText": "Бачныя дні", + "dataText": "даныя", + "colorRangesText": "Каляровыя дыяпазоны", + "yearText": "год", + "daysText": "дзён", + "noDaysDataMessage": "Зараз няма дзён для прагляду.", "monthNames": [ "Ян", "люты", diff --git a/dist/translations/heat.translations.bg.js b/dist/translations/heat.translations.bg.js index 3e2c717d..0340cb31 100644 --- a/dist/translations/heat.translations.bg.js +++ b/dist/translations/heat.translations.bg.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Bulgarian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Bulgarian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Грешки в обекта: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Атрибутът \"{{attribute_name}}' не е валиден обект.", "attributeNotSetErrorText": "Атрибутът \"{{attribute_name}}' не е зададен правилно.", + "closeToolTipText": "Близо", + "configurationToolTipText": "Конфигурация", + "configurationTitleText": "Конфигурация", + "visibleMonthsText": "Видими месеци", + "visibleDaysText": "Видими дни", + "dataText": "Данни", + "colorRangesText": "Цветови гами", + "yearText": "година", + "daysText": "Дни", + "noDaysDataMessage": "В момента няма дни за преглед.", "monthNames": [ "януари", "февр", diff --git a/dist/translations/heat.translations.bn.js b/dist/translations/heat.translations.bn.js index 5e3fcdbe..cf7f92fa 100644 --- a/dist/translations/heat.translations.bn.js +++ b/dist/translations/heat.translations.bn.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Bengali | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Bengali | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "বস্তুর ত্রুটি: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "বৈশিষ্ট্য '{{attribute_name}}' একটি বৈধ বস্তু নয়।", "attributeNotSetErrorText": "বৈশিষ্ট্য '{{attribute_name}}' সঠিকভাবে সেট করা হয়নি।", + "closeToolTipText": "বন্ধ", + "configurationToolTipText": "কনফিগারেশন", + "configurationTitleText": "কনফিগারেশন", + "visibleMonthsText": "দৃশ্যমান মাস", + "visibleDaysText": "দৃশ্যমান দিন", + "dataText": "ডেটা", + "colorRangesText": "কালার রেঞ্জ", + "yearText": "বছর", + "daysText": "দিন", + "noDaysDataMessage": "দেখার জন্য বর্তমানে কোন দিন নেই.", "monthNames": [ "জান", "ফেব্রুয়ারী", diff --git a/dist/translations/heat.translations.ca.js b/dist/translations/heat.translations.ca.js index 1ae9d2c4..95bb520c 100644 --- a/dist/translations/heat.translations.ca.js +++ b/dist/translations/heat.translations.ca.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Catalan | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Catalan | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Errors a l'objecte: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "L'atribut '{{attribute_name}}' no és un objecte vàlid.", "attributeNotSetErrorText": "L'atribut '{{attribute_name}}' no s'ha configurat correctament.", + "closeToolTipText": "Tanca", + "configurationToolTipText": "Configuració", + "configurationTitleText": "Configuració", + "visibleMonthsText": "Mesos visibles", + "visibleDaysText": "Dies visibles", + "dataText": "Dades", + "colorRangesText": "Gammes de colors", + "yearText": "Curs", + "daysText": "Dies", + "noDaysDataMessage": "Actualment no hi ha dies per veure.", "monthNames": [ "Jan", "Febrer", diff --git a/dist/translations/heat.translations.da.js b/dist/translations/heat.translations.da.js index 2f2f17c6..b8f0b0e7 100644 --- a/dist/translations/heat.translations.da.js +++ b/dist/translations/heat.translations.da.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Danish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Danish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Fejl i objektet: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Attributten '{{attribute_name}}' er ikke et gyldigt objekt.", "attributeNotSetErrorText": "Attributten '{{attribute_name}}' er ikke indstillet korrekt.", + "closeToolTipText": "Tæt", + "configurationToolTipText": "Konfiguration", + "configurationTitleText": "Konfiguration", + "visibleMonthsText": "Synlige måneder", + "visibleDaysText": "Synlige dage", + "dataText": "Data", + "colorRangesText": "Farveintervaller", + "yearText": "År", + "daysText": "Dage", + "noDaysDataMessage": "Der er i øjeblikket ingen dage at se.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.de.js b/dist/translations/heat.translations.de.js index 425c0ac6..1f46b495 100644 --- a/dist/translations/heat.translations.de.js +++ b/dist/translations/heat.translations.de.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - German | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - German | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Fehler im Objekt: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Das Attribut '{{attribute_name}}' ist kein gültiges Objekt.", "attributeNotSetErrorText": "Das Attribut '{{attribute_name}}' wurde nicht richtig eingestellt.", + "closeToolTipText": "Schließen", + "configurationToolTipText": "Aufbau", + "configurationTitleText": "Aufbau", + "visibleMonthsText": "Sichtbare Monate", + "visibleDaysText": "Sichtbare Tage", + "dataText": "Daten", + "colorRangesText": "Farbbereiche", + "yearText": "Jahr", + "daysText": "Tage", + "noDaysDataMessage": "Derzeit sind keine Tage zur Ansicht vorhanden.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.el.js b/dist/translations/heat.translations.el.js index 140b3395..5fcf41dd 100644 --- a/dist/translations/heat.translations.el.js +++ b/dist/translations/heat.translations.el.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Greek | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Greek | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Σφάλματα στο αντικείμενο: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Η ιδιότητα '{{attribute_name}}' δεν είναι έγκυρο αντικείμενο.", "attributeNotSetErrorText": "Η ιδιότητα '{{attribute_name}}' δεν έχει ρυθμιστεί σωστά.", + "closeToolTipText": "Κλείσε", + "configurationToolTipText": "Διαμόρφωση", + "configurationTitleText": "Διαμόρφωση", + "visibleMonthsText": "Ορατοί Μήνες", + "visibleDaysText": "Ορατές μέρες", + "dataText": "Δεδομένα", + "colorRangesText": "Σειρές χρωμάτων", + "yearText": "Ετος", + "daysText": "Ημέρες", + "noDaysDataMessage": "Προς το παρόν δεν υπάρχουν μέρες για προβολή.", "monthNames": [ "Ιαν", "Φεβ", diff --git a/dist/translations/heat.translations.en.js b/dist/translations/heat.translations.en.js index 882d6b8c..647c503f 100644 --- a/dist/translations/heat.translations.en.js +++ b/dist/translations/heat.translations.en.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - English | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - English | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "st", "ndText": "nd", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Errors in object: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "The attribute '{{attribute_name}}' is not a valid object.", "attributeNotSetErrorText": "The attribute '{{attribute_name}}' has not been set correctly.", + "closeToolTipText": "Close", + "configurationToolTipText": "Configuration", + "configurationTitleText": "Configuration", + "visibleMonthsText": "Visible Months", + "visibleDaysText": "Visible Days", + "dataText": "Data", + "colorRangesText": "Color Ranges", + "yearText": "Year", + "daysText": "Days", + "noDaysDataMessage": "There are currently no days to view.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.eo.js b/dist/translations/heat.translations.eo.js index 887de491..0eab179b 100644 --- a/dist/translations/heat.translations.eo.js +++ b/dist/translations/heat.translations.eo.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Esperanto | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Esperanto | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Eraroj en objekto: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "La atributo '{{attribute_name}}' ne estas valida objekto.", "attributeNotSetErrorText": "La atributo '{{attribute_name}}' ne estis agordita ĝuste.", + "closeToolTipText": "Fermu", + "configurationToolTipText": "Agordo", + "configurationTitleText": "Agordo", + "visibleMonthsText": "Videblaj Monatoj", + "visibleDaysText": "Videblaj Tagoj", + "dataText": "Datumoj", + "colorRangesText": "Koloraj Gamoj", + "yearText": "Jaro", + "daysText": "Tagoj", + "noDaysDataMessage": "Nuntempe ne estas tagoj por vidi.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.es.js b/dist/translations/heat.translations.es.js index a639426e..f3ecaf80 100644 --- a/dist/translations/heat.translations.es.js +++ b/dist/translations/heat.translations.es.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Spanish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Spanish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Errores en el objeto: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "El atributo '{{attribute_name}}' no es un objeto válido.", "attributeNotSetErrorText": "El atributo '{{attribute_name}}' no se ha configurado correctamente.", + "closeToolTipText": "Cerca", + "configurationToolTipText": "Configuración", + "configurationTitleText": "Configuración", + "visibleMonthsText": "Meses visibles", + "visibleDaysText": "Días visibles", + "dataText": "Datos", + "colorRangesText": "Gamas de colores", + "yearText": "Año", + "daysText": "Días", + "noDaysDataMessage": "Actualmente no hay días para ver.", "monthNames": [ "Ene", "Feb", diff --git a/dist/translations/heat.translations.et.js b/dist/translations/heat.translations.et.js index 85d38d02..cadead99 100644 --- a/dist/translations/heat.translations.et.js +++ b/dist/translations/heat.translations.et.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Estonian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Estonian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Vead objektil: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "atribuut '{{attribute_name}}' ei ole kehtiv objekt.", "attributeNotSetErrorText": "atribuut '{{attribute_name}}' pole õigesti seadistatud.", + "closeToolTipText": "Sulge", + "configurationToolTipText": "Seadistamine", + "configurationTitleText": "Seadistamine", + "visibleMonthsText": "Nähtavad kuud", + "visibleDaysText": "Nähtavad päevad", + "dataText": "Andmed", + "colorRangesText": "Värvivahemikud", + "yearText": "aasta", + "daysText": "Päevad", + "noDaysDataMessage": "Praegu pole vaatamiseks päevi.", "monthNames": [ "jaan", "veebr", diff --git a/dist/translations/heat.translations.fa.js b/dist/translations/heat.translations.fa.js index 127ee752..beb232ea 100644 --- a/dist/translations/heat.translations.fa.js +++ b/dist/translations/heat.translations.fa.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Farsi | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Farsi | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "خطا در شی: {{error_1}}، {{error_2}}", "attributeNotValidErrorText": "ویژگی '{{attribute_name}}' یک شی معتبر نیست.", "attributeNotSetErrorText": "ویژگی '{{attribute_name}}' به درستی تنظیم نشده است.", + "closeToolTipText": "بستن", + "configurationToolTipText": "پیکربندی", + "configurationTitleText": "پیکربندی", + "visibleMonthsText": "ماه های قابل مشاهده", + "visibleDaysText": "روزهای قابل مشاهده", + "dataText": "داده ها", + "colorRangesText": "محدوده رنگ", + "yearText": "سال", + "daysText": "روزها", + "noDaysDataMessage": "در حال حاضر هیچ روزی برای مشاهده وجود ندارد.", "monthNames": [ "ژان", "فوریه", diff --git a/dist/translations/heat.translations.fi.js b/dist/translations/heat.translations.fi.js index a5646369..368b195d 100644 --- a/dist/translations/heat.translations.fi.js +++ b/dist/translations/heat.translations.fi.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Finnish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Finnish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Virheet objektissa: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "attribuutti '{{attribute_name}}' ei ole kelvollinen objekti.", "attributeNotSetErrorText": "attribuutti '{{attribute_name}}' ei ole asetettu oikein.", + "closeToolTipText": "kiinni", + "configurationToolTipText": "Kokoonpano", + "configurationTitleText": "Kokoonpano", + "visibleMonthsText": "Näkyvät kuukaudet", + "visibleDaysText": "Näkyviä päiviä", + "dataText": "Data", + "colorRangesText": "Värialueet", + "yearText": "vuosi", + "daysText": "päivää", + "noDaysDataMessage": "Tällä hetkellä ei ole päiviä katsottavaksi.", "monthNames": [ "tammikuu", "helmikuuta", diff --git a/dist/translations/heat.translations.fr.js b/dist/translations/heat.translations.fr.js index 5cf02790..85e56eca 100644 --- a/dist/translations/heat.translations.fr.js +++ b/dist/translations/heat.translations.fr.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - French | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - French | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Erreurs dans l'objet : {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "L'attribut '{{attribute_name}}' n'est pas un objet valide.", "attributeNotSetErrorText": "L'attribut '{{attribute_name}}' n'a pas été défini correctement.", + "closeToolTipText": "Fermer", + "configurationToolTipText": "Configuration", + "configurationTitleText": "Configuration", + "visibleMonthsText": "Mois visibles", + "visibleDaysText": "Jours visibles", + "dataText": "Données", + "colorRangesText": "Gammes de couleurs", + "yearText": "Année", + "daysText": "Jours", + "noDaysDataMessage": "Il n'y a actuellement aucun jour à consulter.", "monthNames": [ "Janv", "Févr", diff --git a/dist/translations/heat.translations.fy.js b/dist/translations/heat.translations.fy.js index 2338957c..14dfb534 100644 --- a/dist/translations/heat.translations.fy.js +++ b/dist/translations/heat.translations.fy.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Frisian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Frisian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Flaters yn objekt: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "It attribút '{{attribute_name}}' is gjin jildich objekt.", "attributeNotSetErrorText": "It attribút '{{attribute_name}}' is net goed ynsteld.", + "closeToolTipText": "Slute", + "configurationToolTipText": "Konfiguraasje", + "configurationTitleText": "Konfiguraasje", + "visibleMonthsText": "Visible Moannen", + "visibleDaysText": "Visible Days", + "dataText": "Data", + "colorRangesText": "Kleur Ranges", + "yearText": "Jier", + "daysText": "Dagen", + "noDaysDataMessage": "D'r binne op it stuit gjin dagen om te besjen.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.ga.js b/dist/translations/heat.translations.ga.js index 21951d94..9eb44bb3 100644 --- a/dist/translations/heat.translations.ga.js +++ b/dist/translations/heat.translations.ga.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Irish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Irish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Earráidí san oibiacht: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "an tréith '{{attribute_name}}Ní réad bailí é '.", "attributeNotSetErrorText": "an tréith '{{attribute_name}}' nach bhfuil socraithe i gceart.", + "closeToolTipText": "Dún", + "configurationToolTipText": "Cumraíocht", + "configurationTitleText": "Cumraíocht", + "visibleMonthsText": "Míonna Infheicthe", + "visibleDaysText": "Laethanta Infheicthe", + "dataText": "Sonraí", + "colorRangesText": "Raonta Dath", + "yearText": "Bliain", + "daysText": "Laethanta", + "noDaysDataMessage": "Níl aon laethanta le féachaint faoi láthair.", "monthNames": [ "Ean", "Feabh", diff --git a/dist/translations/heat.translations.gl.js b/dist/translations/heat.translations.gl.js index fccb42a4..a05f367e 100644 --- a/dist/translations/heat.translations.gl.js +++ b/dist/translations/heat.translations.gl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Galician | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Galician | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Erros no obxecto: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "O atributo '{{attribute_name}}' non é un obxecto válido.", "attributeNotSetErrorText": "O atributo '{{attribute_name}}' non se axustou correctamente.", + "closeToolTipText": "Pechar", + "configurationToolTipText": "Configuración", + "configurationTitleText": "Configuración", + "visibleMonthsText": "Meses visibles", + "visibleDaysText": "Días visibles", + "dataText": "Datos", + "colorRangesText": "Gamas de cores", + "yearText": "Ano", + "daysText": "Días", + "noDaysDataMessage": "Actualmente non hai días para ver.", "monthNames": [ "Xaneiro", "febreiro", diff --git a/dist/translations/heat.translations.he.js b/dist/translations/heat.translations.he.js index f0597f03..0b3c904c 100644 --- a/dist/translations/heat.translations.he.js +++ b/dist/translations/heat.translations.he.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Hebrew | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Hebrew | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "שגיאות באובייקט: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "התכונה'{{attribute_name}}' אינו אובייקט חוקי.", "attributeNotSetErrorText": "התכונה'{{attribute_name}}' לא הוגדר כהלכה.", + "closeToolTipText": "סגור", + "configurationToolTipText": "תְצוּרָה", + "configurationTitleText": "תְצוּרָה", + "visibleMonthsText": "חודשים גלויים", + "visibleDaysText": "ימים גלויים", + "dataText": "נתונים", + "colorRangesText": "טווחי צבעים", + "yearText": "שָׁנָה", + "daysText": "ימים", + "noDaysDataMessage": "כרגע אין ימים לצפייה.", "monthNames": [ "ינואר", "פברואר", diff --git a/dist/translations/heat.translations.hi.js b/dist/translations/heat.translations.hi.js index 39bd2209..7b71b35a 100644 --- a/dist/translations/heat.translations.hi.js +++ b/dist/translations/heat.translations.hi.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Hindi | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Hindi | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "वस्तु में त्रुटियाँ: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "विशेषता '{{attribute_name}}' एक वैध वस्तु नहीं है.", "attributeNotSetErrorText": "विशेषता '{{attribute_name}}'सही ढंग से सेट नहीं किया गया है.", + "closeToolTipText": "बंद करना", + "configurationToolTipText": "विन्यास", + "configurationTitleText": "विन्यास", + "visibleMonthsText": "दृश्यमान महीने", + "visibleDaysText": "दर्शनीय दिन", + "dataText": "डेटा", + "colorRangesText": "रंग श्रेणियाँ", + "yearText": "वर्ष", + "daysText": "दिन", + "noDaysDataMessage": "देखने के लिए फिलहाल कोई दिन नहीं है।", "monthNames": [ "जनवरी", "फ़रवरी", diff --git a/dist/translations/heat.translations.hu.js b/dist/translations/heat.translations.hu.js index 60167571..5bb3f778 100644 --- a/dist/translations/heat.translations.hu.js +++ b/dist/translations/heat.translations.hu.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Hungarian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Hungarian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Hibák az objektumban: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "attribútum{{attribute_name}}' nem érvényes objektum.", "attributeNotSetErrorText": "attribútum{{attribute_name}}' nincs megfelelően beállítva.", + "closeToolTipText": "Bezárás", + "configurationToolTipText": "Konfiguráció", + "configurationTitleText": "Konfiguráció", + "visibleMonthsText": "Látható hónapok", + "visibleDaysText": "Látható napok", + "dataText": "Adat", + "colorRangesText": "Színtartományok", + "yearText": "Év", + "daysText": "Napok", + "noDaysDataMessage": "Jelenleg nincs megtekintési nap.", "monthNames": [ "jan", "Február", diff --git a/dist/translations/heat.translations.hy.js b/dist/translations/heat.translations.hy.js index 58f19e80..0599cddf 100644 --- a/dist/translations/heat.translations.hy.js +++ b/dist/translations/heat.translations.hy.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Armenian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Armenian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Սխալներ օբյեկտում. {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "հատկանիշը'{{attribute_name}}' վավեր օբյեկտ չէ:", "attributeNotSetErrorText": "հատկանիշը'{{attribute_name}}' ճիշտ չի սահմանվել:", + "closeToolTipText": "փակել", + "configurationToolTipText": "Կոնֆիգուրացիա", + "configurationTitleText": "Կոնֆիգուրացիա", + "visibleMonthsText": "Տեսանելի ամիսներ", + "visibleDaysText": "Տեսանելի օրեր", + "dataText": "Տվյալներ", + "colorRangesText": "Գույնի միջակայքեր", + "yearText": "Տարի", + "daysText": "Օրեր", + "noDaysDataMessage": "Ներկայումս դիտելու օրեր չկան:", "monthNames": [ "հուն", "փետր", diff --git a/dist/translations/heat.translations.id.js b/dist/translations/heat.translations.id.js index 929d75d5..cc7d0f19 100644 --- a/dist/translations/heat.translations.id.js +++ b/dist/translations/heat.translations.id.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Indonesian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Indonesian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Kesalahan pada objek: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Atribut '{{attribute_name}}' bukan objek yang valid.", "attributeNotSetErrorText": "Atribut '{{attribute_name}}' belum diatur dengan benar.", + "closeToolTipText": "Menutup", + "configurationToolTipText": "Konfigurasi", + "configurationTitleText": "Konfigurasi", + "visibleMonthsText": "Bulan Terlihat", + "visibleDaysText": "Hari Terlihat", + "dataText": "Data", + "colorRangesText": "Rentang Warna", + "yearText": "Tahun", + "daysText": "hari", + "noDaysDataMessage": "Saat ini tidak ada hari untuk dilihat.", "monthNames": [ "Januari", "Februari", diff --git a/dist/translations/heat.translations.is.js b/dist/translations/heat.translations.is.js index 3d897086..f378e939 100644 --- a/dist/translations/heat.translations.is.js +++ b/dist/translations/heat.translations.is.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Icelandic | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Icelandic | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Villur í hlut: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Eigindin '{{attribute_name}}' er ekki gildur hlutur.", "attributeNotSetErrorText": "Eigindin '{{attribute_name}}' hefur ekki verið stillt rétt.", + "closeToolTipText": "Loka", + "configurationToolTipText": "Stillingar", + "configurationTitleText": "Stillingar", + "visibleMonthsText": "Sýnilegir mánuðir", + "visibleDaysText": "Sýnilegir dagar", + "dataText": "Gögn", + "colorRangesText": "Litasvið", + "yearText": "Ár", + "daysText": "Dagar", + "noDaysDataMessage": "Það eru engir dagar til að skoða eins og er.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.it.js b/dist/translations/heat.translations.it.js index aa80f61f..9f505a53 100644 --- a/dist/translations/heat.translations.it.js +++ b/dist/translations/heat.translations.it.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Italian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Italian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Errori nell'oggetto: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "L'attributo '{{attribute_name}}' non è un oggetto valido.", "attributeNotSetErrorText": "L'attributo '{{attribute_name}}' non è stato impostato correttamente.", + "closeToolTipText": "Vicino", + "configurationToolTipText": "Configurazione", + "configurationTitleText": "Configurazione", + "visibleMonthsText": "Mesi visibili", + "visibleDaysText": "Giorni visibili", + "dataText": "Dati", + "colorRangesText": "Gamme di colori", + "yearText": "Anno", + "daysText": "Giorni", + "noDaysDataMessage": "Al momento non ci sono giorni da visualizzare.", "monthNames": [ "Gen", "Febbraio", diff --git a/dist/translations/heat.translations.ja.js b/dist/translations/heat.translations.ja.js index 676bb716..aeb84724 100644 --- a/dist/translations/heat.translations.ja.js +++ b/dist/translations/heat.translations.ja.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Japanese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Japanese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "オブジェクト内のエラー: {{error_1}}、 {{error_2}}", "attributeNotValidErrorText": "属性「{{attribute_name}}' は有効なオブジェクトではありません。", "attributeNotSetErrorText": "属性「{{attribute_name}}'が正しく設定されていません。", + "closeToolTipText": "近い", + "configurationToolTipText": "構成", + "configurationTitleText": "構成", + "visibleMonthsText": "表示可能な月", + "visibleDaysText": "見える日", + "dataText": "データ", + "colorRangesText": "色の範囲", + "yearText": "年", + "daysText": "日々", + "noDaysDataMessage": "現在閲覧できる日はありません。", "monthNames": [ "1月", "2月", diff --git a/dist/translations/heat.translations.ka.js b/dist/translations/heat.translations.ka.js index 5c8d39ad..a9161887 100644 --- a/dist/translations/heat.translations.ka.js +++ b/dist/translations/heat.translations.ka.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Georgian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Georgian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "შეცდომები ობიექტში: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "ატრიბუტი '{{attribute_name}}' არ არის სწორი ობიექტი.", "attributeNotSetErrorText": "ატრიბუტი '{{attribute_name}}' არ არის სწორად დაყენებული.", + "closeToolTipText": "დახურვა", + "configurationToolTipText": "კონფიგურაცია", + "configurationTitleText": "კონფიგურაცია", + "visibleMonthsText": "ხილული თვეები", + "visibleDaysText": "ხილული დღეები", + "dataText": "მონაცემები", + "colorRangesText": "ფერის დიაპაზონი", + "yearText": "წელიწადი", + "daysText": "დღეები", + "noDaysDataMessage": "ამჟამად არ არის სანახავი დღეები.", "monthNames": [ "იან", "თებ", diff --git a/dist/translations/heat.translations.ko.js b/dist/translations/heat.translations.ko.js index 684b9bf8..38b218e4 100644 --- a/dist/translations/heat.translations.ko.js +++ b/dist/translations/heat.translations.ko.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Korean | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Korean | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "개체 오류: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "속성 '{{attribute_name}}'은(는) 유효한 개체가 아닙니다.", "attributeNotSetErrorText": "속성 '{{attribute_name}}'가 올바르게 설정되지 않았습니다.", + "closeToolTipText": "닫다", + "configurationToolTipText": "구성", + "configurationTitleText": "구성", + "visibleMonthsText": "보이는 달", + "visibleDaysText": "보이는 날", + "dataText": "데이터", + "colorRangesText": "색상 범위", + "yearText": "년도", + "daysText": "날", + "noDaysDataMessage": "현재 볼 수 있는 날짜가 없습니다.", "monthNames": [ "1월", "2월", diff --git a/dist/translations/heat.translations.lb.js b/dist/translations/heat.translations.lb.js index 2b406454..d0648f57 100644 --- a/dist/translations/heat.translations.lb.js +++ b/dist/translations/heat.translations.lb.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Luxembourgish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Luxembourgish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Feeler am Objet: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Den Attribut'{{attribute_name}}' ass kee gültege Objet.", "attributeNotSetErrorText": "Den Attribut'{{attribute_name}}' ass net richteg agestallt ginn.", + "closeToolTipText": "Zoumaachen", + "configurationToolTipText": "Configuratioun", + "configurationTitleText": "Configuratioun", + "visibleMonthsText": "Siichtbar Méint", + "visibleDaysText": "Siichtbar Deeg", + "dataText": "Daten", + "colorRangesText": "Faarf Ranges", + "yearText": "Joer", + "daysText": "Deeg", + "noDaysDataMessage": "Et gi momentan keng Deeg fir ze kucken.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.lt.js b/dist/translations/heat.translations.lt.js index d3edaa87..01e401d0 100644 --- a/dist/translations/heat.translations.lt.js +++ b/dist/translations/heat.translations.lt.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Lithuanian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Lithuanian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Klaidos objekte: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "atributas '{{attribute_name}}“ nėra tinkamas objektas.", "attributeNotSetErrorText": "atributas '{{attribute_name}}“ nebuvo nustatytas teisingai.", + "closeToolTipText": "Uždaryti", + "configurationToolTipText": "Konfigūracija", + "configurationTitleText": "Konfigūracija", + "visibleMonthsText": "Matomi mėnesiai", + "visibleDaysText": "Matomos dienos", + "dataText": "Duomenys", + "colorRangesText": "Spalvų diapazonai", + "yearText": "Metai", + "daysText": "Dienos", + "noDaysDataMessage": "Šiuo metu nėra dienų, kurias būtų galima peržiūrėti.", "monthNames": [ "sausio mėn", "vasario mėn", diff --git a/dist/translations/heat.translations.lv.js b/dist/translations/heat.translations.lv.js index a85ae700..bf3f2436 100644 --- a/dist/translations/heat.translations.lv.js +++ b/dist/translations/heat.translations.lv.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Latvian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Latvian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Kļūdas objektā: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "atribūts '{{attribute_name}}' nav derīgs objekts.", "attributeNotSetErrorText": "atribūts '{{attribute_name}}' nav pareizi iestatīts.", + "closeToolTipText": "Aizvērt", + "configurationToolTipText": "Konfigurācija", + "configurationTitleText": "Konfigurācija", + "visibleMonthsText": "Redzamie mēneši", + "visibleDaysText": "Redzamās dienas", + "dataText": "Dati", + "colorRangesText": "Krāsu diapazoni", + "yearText": "gads", + "daysText": "Dienas", + "noDaysDataMessage": "Pašlaik nav dienu, ko skatīt.", "monthNames": [ "janvāris", "febr", diff --git a/dist/translations/heat.translations.ms.js b/dist/translations/heat.translations.ms.js index a7e21d73..db5190e2 100644 --- a/dist/translations/heat.translations.ms.js +++ b/dist/translations/heat.translations.ms.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Malay | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Malay | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Ralat dalam objek: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Atribut '{{attribute_name}}' bukan objek yang sah.", "attributeNotSetErrorText": "Atribut '{{attribute_name}}' belum ditetapkan dengan betul.", + "closeToolTipText": "tutup", + "configurationToolTipText": "Konfigurasi", + "configurationTitleText": "Konfigurasi", + "visibleMonthsText": "Bulan Terlihat", + "visibleDaysText": "Hari Kelihatan", + "dataText": "Data", + "colorRangesText": "Julat Warna", + "yearText": "tahun", + "daysText": "hari-hari", + "noDaysDataMessage": "Pada masa ini tiada hari untuk dilihat.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.ne.js b/dist/translations/heat.translations.ne.js index c728e19c..0d183c06 100644 --- a/dist/translations/heat.translations.ne.js +++ b/dist/translations/heat.translations.ne.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Nepali | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Nepali | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "वस्तुमा त्रुटिहरू: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "विशेषता'{{attribute_name}}' मान्य वस्तु होइन।", "attributeNotSetErrorText": "विशेषता'{{attribute_name}}' ठीकसँग सेट गरिएको छैन।", + "closeToolTipText": "बन्द गर्नुहोस्", + "configurationToolTipText": "कन्फिगरेसन", + "configurationTitleText": "कन्फिगरेसन", + "visibleMonthsText": "देखिने महिनाहरू", + "visibleDaysText": "देखिने दिनहरू", + "dataText": "डाटा", + "colorRangesText": "रङ दायराहरू", + "yearText": "वर्ष", + "daysText": "दिनहरू", + "noDaysDataMessage": "हेर्नको लागि हाल कुनै दिनहरू छैनन्।", "monthNames": [ "जनवरी", "फेब्रुअरी", diff --git a/dist/translations/heat.translations.nl.js b/dist/translations/heat.translations.nl.js index b968cf25..e9a8e843 100644 --- a/dist/translations/heat.translations.nl.js +++ b/dist/translations/heat.translations.nl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Dutch | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Dutch | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Fouten in object: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Het attribuut '{{attribute_name}}' is geen geldig object.", "attributeNotSetErrorText": "Het attribuut '{{attribute_name}}' is niet correct ingesteld.", + "closeToolTipText": "Dichtbij", + "configurationToolTipText": "Configuratie", + "configurationTitleText": "Configuratie", + "visibleMonthsText": "Zichtbare maanden", + "visibleDaysText": "Zichtbare dagen", + "dataText": "Gegevens", + "colorRangesText": "Kleurbereiken", + "yearText": "Jaar", + "daysText": "Dagen", + "noDaysDataMessage": "Er zijn momenteel geen kijkdagen.", "monthNames": [ "jan", "februari", diff --git a/dist/translations/heat.translations.no.js b/dist/translations/heat.translations.no.js index 63655426..cb5fcaf7 100644 --- a/dist/translations/heat.translations.no.js +++ b/dist/translations/heat.translations.no.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Norwegian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Norwegian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Feil i objektet: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Attributten '{{attribute_name}}' er ikke et gyldig objekt.", "attributeNotSetErrorText": "Attributten '{{attribute_name}}' er ikke satt riktig.", + "closeToolTipText": "Lukk", + "configurationToolTipText": "Konfigurasjon", + "configurationTitleText": "Konfigurasjon", + "visibleMonthsText": "Synlige måneder", + "visibleDaysText": "Synlige dager", + "dataText": "Data", + "colorRangesText": "Fargeområder", + "yearText": "År", + "daysText": "Dager", + "noDaysDataMessage": "Det er for øyeblikket ingen dager å se.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.pl.js b/dist/translations/heat.translations.pl.js index 90d88f7e..744ee4a9 100644 --- a/dist/translations/heat.translations.pl.js +++ b/dist/translations/heat.translations.pl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Portuguese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Portuguese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Błędy w obiekcie: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Atrybut '{{attribute_name}}' nie jest prawidłowym obiektem.", "attributeNotSetErrorText": "Atrybut '{{attribute_name}}' nie został ustawiony prawidłowo.", + "closeToolTipText": "Zamknąć", + "configurationToolTipText": "Konfiguracja", + "configurationTitleText": "Konfiguracja", + "visibleMonthsText": "Widoczne miesiące", + "visibleDaysText": "Widoczne dni", + "dataText": "Dane", + "colorRangesText": "Zakresy kolorów", + "yearText": "Rok", + "daysText": "Dni", + "noDaysDataMessage": "Obecnie nie ma dni do wyświetlenia.", "monthNames": [ "Sty", "Lut", diff --git a/dist/translations/heat.translations.pt.js b/dist/translations/heat.translations.pt.js index 344d196f..adaf8a77 100644 --- a/dist/translations/heat.translations.pt.js +++ b/dist/translations/heat.translations.pt.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Polish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Polish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Erros no objeto: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "O atributo '{{attribute_name}}' não é um objeto válido.", "attributeNotSetErrorText": "O atributo '{{attribute_name}}'não foi definido corretamente.", + "closeToolTipText": "Fechar", + "configurationToolTipText": "Configuração", + "configurationTitleText": "Configuração", + "visibleMonthsText": "Meses Visíveis", + "visibleDaysText": "Dias Visíveis", + "dataText": "Dados", + "colorRangesText": "Faixas de cores", + "yearText": "Ano", + "daysText": "Dias", + "noDaysDataMessage": "Atualmente não há dias para visualizar.", "monthNames": [ "janeiro", "Fevereiro", diff --git a/dist/translations/heat.translations.ro.js b/dist/translations/heat.translations.ro.js index 753e1c03..0cf5ce26 100644 --- a/dist/translations/heat.translations.ro.js +++ b/dist/translations/heat.translations.ro.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Romanian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Romanian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Erori la obiect: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Atributul '{{attribute_name}}' nu este un obiect valid.", "attributeNotSetErrorText": "Atributul '{{attribute_name}}' nu a fost setat corect.", + "closeToolTipText": "Închide", + "configurationToolTipText": "Configurare", + "configurationTitleText": "Configurare", + "visibleMonthsText": "Luni vizibile", + "visibleDaysText": "Zile vizibile", + "dataText": "Date", + "colorRangesText": "Game de culori", + "yearText": "An", + "daysText": "Zile", + "noDaysDataMessage": "Momentan nu există zile pentru vizualizare.", "monthNames": [ "ian", "feb", diff --git a/dist/translations/heat.translations.si.js b/dist/translations/heat.translations.si.js index c9c89cc4..5e934256 100644 --- a/dist/translations/heat.translations.si.js +++ b/dist/translations/heat.translations.si.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Sinhalese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Sinhalese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "වස්තුවේ දෝෂ: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "ගුණාංගය'{{attribute_name}}' වලංගු වස්තුවක් නොවේ.", "attributeNotSetErrorText": "ගුණාංගය'{{attribute_name}}' නිවැරදිව සකසා නැත.", + "closeToolTipText": "වසන්න", + "configurationToolTipText": "මානකරනය", + "configurationTitleText": "මානකරනය", + "visibleMonthsText": "පෙනෙන මාස", + "visibleDaysText": "පෙනෙන දින", + "dataText": "දත්ත", + "colorRangesText": "වර්ණ පරාසයන්", + "yearText": "අවුරුදු", + "daysText": "දින", + "noDaysDataMessage": "දැනට නැරඹීමට දින නොමැත.", "monthNames": [ "ජන", "පෙබ", diff --git a/dist/translations/heat.translations.sk.js b/dist/translations/heat.translations.sk.js index 899d3672..2b75d389 100644 --- a/dist/translations/heat.translations.sk.js +++ b/dist/translations/heat.translations.sk.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Slovak | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Slovak | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Chyby v objekte: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "atribút '{{attribute_name}}' nie je platný objekt.", "attributeNotSetErrorText": "atribút '{{attribute_name}}“ nie je správne nastavené.", + "closeToolTipText": "Zavrieť", + "configurationToolTipText": "Konfigurácia", + "configurationTitleText": "Konfigurácia", + "visibleMonthsText": "Viditeľné mesiace", + "visibleDaysText": "Viditeľné dni", + "dataText": "Údaje", + "colorRangesText": "Farebné rozsahy", + "yearText": "rok", + "daysText": "Dni", + "noDaysDataMessage": "Momentálne nie sú k dispozícii žiadne dni na zobrazenie.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.sl.js b/dist/translations/heat.translations.sl.js index d1d679d8..23adefe2 100644 --- a/dist/translations/heat.translations.sl.js +++ b/dist/translations/heat.translations.sl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Slovenian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Slovenian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Napake v objektu: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Atribut '{{attribute_name}}' ni veljaven predmet.", "attributeNotSetErrorText": "Atribut '{{attribute_name}}' ni pravilno nastavljen.", + "closeToolTipText": "Zapri", + "configurationToolTipText": "Konfiguracija", + "configurationTitleText": "Konfiguracija", + "visibleMonthsText": "Vidni meseci", + "visibleDaysText": "Vidni dnevi", + "dataText": "podatki", + "colorRangesText": "Barvni razponi", + "yearText": "leto", + "daysText": "Dnevi", + "noDaysDataMessage": "Trenutno ni dni za ogled.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.sv.js b/dist/translations/heat.translations.sv.js index c5b29518..2938aa5c 100644 --- a/dist/translations/heat.translations.sv.js +++ b/dist/translations/heat.translations.sv.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Swedish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Swedish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Fel i objekt: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Attributet '{{attribute_name}}' är inte ett giltigt objekt.", "attributeNotSetErrorText": "Attributet '{{attribute_name}}' har inte ställts in korrekt.", + "closeToolTipText": "Stänga", + "configurationToolTipText": "Konfiguration", + "configurationTitleText": "Konfiguration", + "visibleMonthsText": "Synliga månader", + "visibleDaysText": "Synliga dagar", + "dataText": "Data", + "colorRangesText": "Färgomfång", + "yearText": "År", + "daysText": "dagar", + "noDaysDataMessage": "Det finns för närvarande inga dagar att se.", "monthNames": [ "Jan", "feb", diff --git a/dist/translations/heat.translations.ta.js b/dist/translations/heat.translations.ta.js index b3dc7094..f2e21c96 100644 --- a/dist/translations/heat.translations.ta.js +++ b/dist/translations/heat.translations.ta.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Tamil | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Tamil | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "பொருளில் பிழைகள்: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "பண்பு'{{attribute_name}}' என்பது சரியான பொருள் அல்ல.", "attributeNotSetErrorText": "பண்பு'{{attribute_name}}' சரியாக அமைக்கப்படவில்லை.", + "closeToolTipText": "நெருக்கமான", + "configurationToolTipText": "கட்டமைப்பு", + "configurationTitleText": "கட்டமைப்பு", + "visibleMonthsText": "காணக்கூடிய மாதங்கள்", + "visibleDaysText": "காணக்கூடிய நாட்கள்", + "dataText": "தகவல்கள்", + "colorRangesText": "வண்ண வரம்புகள்", + "yearText": "ஆண்டு", + "daysText": "நாட்களில்", + "noDaysDataMessage": "தற்போது பார்க்க நாட்கள் இல்லை.", "monthNames": [ "ஜன", "பிப்", diff --git a/dist/translations/heat.translations.te.js b/dist/translations/heat.translations.te.js index cfc6786e..1392dc2e 100644 --- a/dist/translations/heat.translations.te.js +++ b/dist/translations/heat.translations.te.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Telugu | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Telugu | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "వస్తువులో లోపాలు: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "లక్షణం'{{attribute_name}}' చెల్లుబాటు అయ్యే వస్తువు కాదు.", "attributeNotSetErrorText": "లక్షణం'{{attribute_name}}' సరిగ్గా సెట్ చేయబడలేదు.", + "closeToolTipText": "దగ్గరగా", + "configurationToolTipText": "ఆకృతీకరణ", + "configurationTitleText": "ఆకృతీకరణ", + "visibleMonthsText": "కనిపించే నెలలు", + "visibleDaysText": "కనిపించే రోజులు", + "dataText": "సమాచారం", + "colorRangesText": "రంగు పరిధులు", + "yearText": "సంవత్సరం", + "daysText": "రోజులు", + "noDaysDataMessage": "ప్రస్తుతం వీక్షించడానికి రోజులు లేవు.", "monthNames": [ "జనవరి", "ఫిబ్రవరి", diff --git a/dist/translations/heat.translations.th.js b/dist/translations/heat.translations.th.js index 0916f52d..cb1447be 100644 --- a/dist/translations/heat.translations.th.js +++ b/dist/translations/heat.translations.th.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Thai | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Thai | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "ข้อผิดพลาดในวัตถุ: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "คุณลักษณะ '{{attribute_name}}' ไม่ใช่วัตถุที่ถูกต้อง", "attributeNotSetErrorText": "คุณลักษณะ '{{attribute_name}}' ไม่ได้ตั้งค่าอย่างถูกต้อง", + "closeToolTipText": "ปิด", + "configurationToolTipText": "การกำหนดค่า", + "configurationTitleText": "การกำหนดค่า", + "visibleMonthsText": "เดือนที่มองเห็นได้", + "visibleDaysText": "วันที่มองเห็นได้", + "dataText": "ข้อมูล", + "colorRangesText": "ช่วงสี", + "yearText": "ปี", + "daysText": "วัน", + "noDaysDataMessage": "ขณะนี้ไม่มีวันที่จะดู", "monthNames": [ "ม.ค", "ก.พ", diff --git a/dist/translations/heat.translations.tl.js b/dist/translations/heat.translations.tl.js index a2686211..b8a3c16c 100644 --- a/dist/translations/heat.translations.tl.js +++ b/dist/translations/heat.translations.tl.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Tagalog | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Tagalog | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Mga error sa object: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Ang katangian '{{attribute_name}}' ay hindi isang wastong bagay.", "attributeNotSetErrorText": "Ang katangian '{{attribute_name}}' ay hindi naitakda nang tama.", + "closeToolTipText": "Isara", + "configurationToolTipText": "Configuration", + "configurationTitleText": "Configuration", + "visibleMonthsText": "Mga Nakikitang Buwan", + "visibleDaysText": "Mga Nakikitang Araw", + "dataText": "Data", + "colorRangesText": "Mga Saklaw ng Kulay", + "yearText": "taon", + "daysText": "Mga araw", + "noDaysDataMessage": "Kasalukuyang walang mga araw upang tingnan.", "monthNames": [ "Jan", "Feb", diff --git a/dist/translations/heat.translations.tr.js b/dist/translations/heat.translations.tr.js index d1c0b6dd..c5db5b27 100644 --- a/dist/translations/heat.translations.tr.js +++ b/dist/translations/heat.translations.tr.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Turkish | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Turkish | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Nesnedeki hatalar: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Özellik '{{attribute_name}}' geçerli bir nesne değil.", "attributeNotSetErrorText": "Özellik '{{attribute_name}}' doğru şekilde ayarlanmadı.", + "closeToolTipText": "Kapalı", + "configurationToolTipText": "Yapılandırma", + "configurationTitleText": "Yapılandırma", + "visibleMonthsText": "Görünür Aylar", + "visibleDaysText": "Görünür Günler", + "dataText": "Veri", + "colorRangesText": "Renk Aralıkları", + "yearText": "Yıl", + "daysText": "Günler", + "noDaysDataMessage": "Şu anda görüntülenecek gün yok.", "monthNames": [ "Ocak", "Şubat", diff --git a/dist/translations/heat.translations.uk.js b/dist/translations/heat.translations.uk.js index fe24ac1b..f3a28314 100644 --- a/dist/translations/heat.translations.uk.js +++ b/dist/translations/heat.translations.uk.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Ukrainian | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Ukrainian | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "Помилки в об'єкті: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "Атрибут '{{attribute_name}}' не є дійсним об'єктом.", "attributeNotSetErrorText": "Атрибут '{{attribute_name}}' не встановлено правильно.", + "closeToolTipText": "Закрити", + "configurationToolTipText": "Конфігурація", + "configurationTitleText": "Конфігурація", + "visibleMonthsText": "Видимі місяці", + "visibleDaysText": "Видимі дні", + "dataText": "Дані", + "colorRangesText": "Колірні діапазони", + "yearText": "рік", + "daysText": "днів", + "noDaysDataMessage": "Наразі немає днів для перегляду.", "monthNames": [ "січня", "лютий", diff --git a/dist/translations/heat.translations.zh-tw.js b/dist/translations/heat.translations.zh-tw.js index 487637d0..f5d0f359 100644 --- a/dist/translations/heat.translations.zh-tw.js +++ b/dist/translations/heat.translations.zh-tw.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Taiwanese | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Taiwanese | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "", "ndText": "", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "物件中的錯誤: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "屬性 '{{attribute_name}}' 不是一個有效的物件。", "attributeNotSetErrorText": "屬性 '{{attribute_name}}' 尚未正確設定。", + "closeToolTipText": "關閉", + "configurationToolTipText": "配置", + "configurationTitleText": "配置", + "visibleMonthsText": "可見月份", + "visibleDaysText": "可見天數", + "dataText": "數據", + "colorRangesText": "色彩範圍", + "yearText": "年", + "daysText": "天", + "noDaysDataMessage": "目前沒有可查看的日期。", "monthNames": [ "揚", "二月", diff --git a/dist/translations/heat.translations.zh.js b/dist/translations/heat.translations.zh.js index 06b6286d..449367fe 100644 --- a/dist/translations/heat.translations.zh.js +++ b/dist/translations/heat.translations.zh.js @@ -1,4 +1,4 @@ -/*! Heat.js v2.8.0 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */ +/*! Heat.js v3.0.0 - Chinese (simplified) | (c) Bunoon 2024 | MIT License */ $heat.setConfiguration( { "stText": "日", "ndText": "日", @@ -23,6 +23,16 @@ $heat.setConfiguration( { "objectErrorText": "对象中的错误: {{error_1}}, {{error_2}}", "attributeNotValidErrorText": "属性 '{{attribute_name}}' 不是一个有效的对象。", "attributeNotSetErrorText": "属性 '{{attribute_name}}' 尚未正确设置。", + "closeToolTipText": "关闭", + "configurationToolTipText": "配置", + "configurationTitleText": "配置", + "visibleMonthsText": "可见月份", + "visibleDaysText": "可见天数", + "dataText": "数据", + "colorRangesText": "颜色范围", + "yearText": "年", + "daysText": "天", + "noDaysDataMessage": "目前没有可查看的日期。", "monthNames": [ "一月", "二月", diff --git a/heat.js.nuspec b/heat.js.nuspec index d585d083..5a7a04bf 100644 --- a/heat.js.nuspec +++ b/heat.js.nuspec @@ -2,7 +2,7 @@ jHeat.js - 2.8.0 + 3.0.0 Heat.js A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends. William Troup diff --git a/package.json b/package.json index 747c30d0..6aeaad4f 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "jheat.js", "title": "Heat.js", "description": "A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends.", - "version": "2.8.0", + "version": "3.0.0", "main": "dist/heat.js", "homepage": "https://www.william-troup.com/heat-js/", "author": { diff --git a/src/foundation/_styles.scss b/src/foundation/_styles.scss index 2594bc9e..d85a2589 100644 --- a/src/foundation/_styles.scss +++ b/src/foundation/_styles.scss @@ -7,4 +7,156 @@ $minimum-width: 768px; -o-user-select: none; user-select: none; cursor: default; +} + +@mixin buttons { + button { + background-color: var(--heat-js-button-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-button-border-color); + color: var(--heat-js-button-text-color); + border-radius: var(--heat-js-border-radius); + padding-top: 5px; + padding-bottom: 5px; + padding-left: 9px; + padding-right: 9px; + outline: none; + transition: var(--heat-js-transition); + + &:disabled { + color: var(--heat-js-button-border-color); + } + + &:not(.active):not(:disabled):active { + background: var(--heat-js-button-background-color-active) !important; + color: var(--heat-js-button-text-color-active) !important; + } + + &:not(.active):not(:disabled):hover { + cursor: pointer; + background: var(--heat-js-button-background-color-hover); + color: var(--heat-js-button-text-color-hover); + } + } + + button.active { + cursor: default; + background: var(--heat-js-button-background-color-hover); + color: var(--heat-js-button-text-color-hover); + transition: var(--heat-js-transition); + font-weight: var(--heat-js-text-bold-weight-active); + } +} + +@mixin down-arrow($left-right-border-size: 8px, $border-top-size: 14px, $left: true, $margin-size: var(--heat-js-spacing)) { + div.down-arrow { + display: inline-block; + width: 0; + height: 0; + border-left: $left-right-border-size solid transparent; + border-right: $left-right-border-size solid transparent; + border-top: $border-top-size solid var(--heat-js-color-white); + transition: var(--heat-js-transition); + + @if ($left) { + margin-right: $margin-size; + } + @else { + margin-left: $margin-size; + } + } +} + +@mixin labels { + background-color: var(--heat-js-container-background-color); + padding-right: calc( var(--heat-js-spacing) * 3 ); + padding-top: calc( var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px ); + position: sticky; + left: 0; + display: none; + border-right: var(--heat-js-border-size) solid var(--heat-js-container-border-color); + z-index: 50; + + @media (min-width: $minimum-width) { + display: block; + } + + div.label-0, + div.label-25, + div.label-50, + div.label-75, + div.label-100 { + font-weight: var(--heat-js-text-bold-weight); + text-align: left !important; + height: var(--heat-js-day-size); + display: inline-flex; + justify-content: center; + flex-direction: column; + position: absolute; + left: 0; + padding-right: var(--heat-js-spacing); + } + + div.label-0 { + top: 0; + } + + div.label-25 { + top: 25%; + transform: translateY( -25% ); + } + + div.label-50 { + top: 50%; + transform: translateY( -50% ); + } + + div.label-75 { + top: 75%; + transform: translateY( -75% ); + } + + div.label-100 { + bottom: 0; + } +} + +@mixin centered-label { + position: absolute; + left: 50%; + top: 50%; + transform: translate( -50%, -50% ); + font-weight: var(--heat-js-text-bold-weight); +} + +@mixin description { + text-align: center; + + @media (min-width: $minimum-width) { + text-align: left; + } + + span.label, + a.label, + a.label:visited { + color: var(--heat-js-color-white); + font-weight: var(--heat-js-text-bold-weight); + text-decoration: none; + } + + a.label { + transition: var(--heat-js-transition); + + &:active { + color: var(--heat-js-color-gray); + } + + &:hover { + text-decoration: underline; + } + } +} + +@mixin box-sizing { + box-sizing: border-box; + line-height: normal; } \ No newline at end of file diff --git a/src/heat.js b/src/heat.js index d9759434..8b0ecfdf 100644 --- a/src/heat.js +++ b/src/heat.js @@ -4,7 +4,7 @@ * A lightweight JavaScript library that generates customizable heat maps, charts, and statistics to visualize date-based activity and trends. * * @file observe.js - * @version v2.8.0 + * @version v3.0.0 * @author Bunoon * @license MIT License * @copyright Bunoon 2024 @@ -64,12 +64,14 @@ // Variables: View (names) _elements_View_Name_Map = "map", _elements_View_Name_Chart = "chart", + _elements_View_Name_Days = "days", _elements_View_Name_Statistics = "statistics", // Variables: View _elements_View_Map = 1, _elements_View_Chart = 2, - _elements_View_Statistics = 3, + _elements_View_Days = 3, + _elements_View_Statistics = 4, // Variables: Export Types _export_Type_Csv = "csv", @@ -140,6 +142,10 @@ bindingOptions.currentView = {}; bindingOptions.currentView.element = element; + bindingOptions.currentView.disabledBackground = null; + bindingOptions.currentView.configurationDialog = null; + bindingOptions.currentView.dayCheckBoxes = {}; + bindingOptions.currentView.monthCheckBoxes = {}; bindingOptions.currentView.tooltip = null; bindingOptions.currentView.tooltipTimer = null; bindingOptions.currentView.mapContents = null; @@ -154,6 +160,11 @@ bindingOptions.currentView.chartContents = null; bindingOptions.currentView.chartContentsScrollLeft = 0; } + + if ( bindingOptions.views.days.enabled ) { + bindingOptions.currentView.daysContents = null; + bindingOptions.currentView.daysContentsScrollLeft = 0; + } if ( bindingOptions.views.statistics.enabled ) { bindingOptions.currentView.statisticsContents = null; @@ -164,6 +175,8 @@ bindingOptions.currentView.view = _elements_View_Map; } else if ( view === _elements_View_Name_Chart ) { bindingOptions.currentView.view = _elements_View_Chart; + } else if ( view === _elements_View_Name_Days ) { + bindingOptions.currentView.view = _elements_View_Days; } else if ( view === _elements_View_Name_Statistics ) { bindingOptions.currentView.view = _elements_View_Statistics; } else { @@ -209,6 +222,10 @@ bindingOptions.currentView.chartContentsScrollLeft = bindingOptions.currentView.chartContents.scrollLeft; } + if ( bindingOptions.views.days.enabled && isDefined( bindingOptions.currentView.daysContents ) ) { + bindingOptions.currentView.daysContentsScrollLeft = bindingOptions.currentView.daysContents.scrollLeft; + } + if ( bindingOptions.views.statistics.enabled && isDefined( bindingOptions.currentView.statisticsContents ) ) { bindingOptions.currentView.statisticsContentsScrollLeft = bindingOptions.currentView.statisticsContents.scrollLeft; } @@ -220,6 +237,11 @@ startDataPullTimer( bindingOptions ); + if ( bindingOptions.showConfigurationButton ) { + renderDisabledBackground( bindingOptions ); + renderConfigurationDialog( bindingOptions ); + } + renderControlToolTip( bindingOptions ); renderControlTitleBar( bindingOptions ); renderControlMap( bindingOptions, isForViewSwitch ); @@ -230,6 +252,12 @@ bindingOptions.currentView.chartContents.style.display = "none"; } + if ( bindingOptions.views.days.enabled ) { + renderControlDays( bindingOptions, isForViewSwitch ); + + bindingOptions.currentView.daysContents.style.display = "none"; + } + if ( bindingOptions.views.statistics.enabled ) { renderControlStatistics( bindingOptions, isForViewSwitch ); @@ -242,6 +270,8 @@ bindingOptions.currentView.mapContents.style.display = "block"; } else if ( bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart ) { bindingOptions.currentView.chartContents.style.display = "block"; + } else if ( bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days ) { + bindingOptions.currentView.daysContents.style.display = "block"; } else if ( bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics ) { bindingOptions.currentView.statisticsContents.style.display = "block"; } else { @@ -251,6 +281,173 @@ } + /* + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + * Render: Disabled Background + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + */ + + function renderDisabledBackground( bindingOptions ) { + bindingOptions.currentView.disabledBackground = createElement( bindingOptions.currentView.element, "div", "disabled" ); + } + + function showDisabledBackground( bindingOptions ) { + if ( isDefined( bindingOptions.currentView.disabledBackground ) && bindingOptions.currentView.disabledBackground.style.display !== "block" ) { + bindingOptions.currentView.disabledBackground.style.display = "block"; + } + } + + function hideDisabledBackground( bindingOptions ) { + if ( isDefined( bindingOptions.currentView.disabledBackground ) && bindingOptions.currentView.disabledBackground.style.display !== "none" ) { + bindingOptions.currentView.disabledBackground.style.display = "none"; + } + } + + + /* + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + * Render: Configuration Dialog + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + */ + + function renderConfigurationDialog( bindingOptions ) { + bindingOptions.currentView.configurationDialog = createElement( bindingOptions.currentView.disabledBackground, "div", "dialog configuration" ); + + var titleBar = createElement( bindingOptions.currentView.configurationDialog, "div", "dialog-title-bar" ), + contents = createElement( bindingOptions.currentView.configurationDialog, "div", "dialog-contents" ), + closeButton = createElement( titleBar, "div", "dialog-close" ), + daysContainer = createElement( contents, "div", "side-container panel" ), + monthsContainer = createElement( contents, "div", "side-container panel" ); + + createElementWithHTML( titleBar, "span", "dialog-title-bar-text", _configuration.configurationTitleText ); + createElementWithHTML( daysContainer, "div", "side-container-title-text", _configuration.visibleDaysText + _string.colon ); + createElementWithHTML( monthsContainer, "div", "side-container-title-text", _configuration.visibleMonthsText + _string.colon ); + + var months1Container = createElement( monthsContainer, "div", "side-container" ), + months2Container = createElement( monthsContainer, "div", "side-container" ); + + closeButton.onclick = function() { + hideConfigurationDialog( bindingOptions ); + }; + + for ( var dayIndex = 0; dayIndex < 7; dayIndex++ ) { + bindingOptions.currentView.dayCheckBoxes[ dayIndex ] = buildCheckBox( daysContainer, _configuration.dayNames[ dayIndex ] ).input; + } + + for ( var monthIndex1 = 0; monthIndex1 < 7; monthIndex1++ ) { + bindingOptions.currentView.monthCheckBoxes[ monthIndex1 ] = buildCheckBox( months1Container, _configuration.monthNames[ monthIndex1 ] ).input; + } + + for ( var monthIndex2 = 7; monthIndex2 < 12; monthIndex2++ ) { + bindingOptions.currentView.monthCheckBoxes[ monthIndex2 ] = buildCheckBox( months2Container, _configuration.monthNames[ monthIndex2 ] ).input; + } + + addToolTip( closeButton, bindingOptions, _configuration.closeToolTipText ); + } + + function showConfigurationDialog( bindingOptions ) { + showDisabledBackground( bindingOptions ); + + if ( isDefined( bindingOptions.currentView.configurationDialog ) && bindingOptions.currentView.configurationDialog.style.display !== "block" ) { + bindingOptions.currentView.configurationDialog.style.display = "block"; + } + + var daysToShow = [], + monthsToShow = []; + + if ( bindingOptions.currentView.view === _elements_View_Map ) { + daysToShow = bindingOptions.views.map.daysToShow; + monthsToShow = bindingOptions.views.map.monthsToShow; + } else if ( bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart ) { + daysToShow = bindingOptions.views.chart.daysToShow; + monthsToShow = bindingOptions.views.chart.monthsToShow; + } else if ( bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days ) { + daysToShow = bindingOptions.views.days.daysToShow; + monthsToShow = bindingOptions.views.days.monthsToShow; + } else if ( bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics ) { + daysToShow = bindingOptions.views.statistics.daysToShow; + monthsToShow = bindingOptions.views.statistics.monthsToShow; + } else { + daysToShow = bindingOptions.views.map.daysToShow; + monthsToShow = bindingOptions.views.map.monthsToShow; + } + + for ( var dayIndex = 0; dayIndex < 7; dayIndex++ ) { + bindingOptions.currentView.dayCheckBoxes[ dayIndex ].checked = isDayVisible( daysToShow, dayIndex + 1 ); + } + + for ( var monthIndex = 0; monthIndex < 12; monthIndex++ ) { + bindingOptions.currentView.monthCheckBoxes[ monthIndex ].checked = isMonthVisible( monthsToShow, monthIndex ); + } + + hideToolTip( bindingOptions ); + } + + function hideConfigurationDialog( bindingOptions ) { + hideDisabledBackground( bindingOptions ); + + if ( isDefined( bindingOptions.currentView.configurationDialog ) && bindingOptions.currentView.configurationDialog.style.display !== "none" ) { + bindingOptions.currentView.configurationDialog.style.display = "none"; + } + + var daysChecked = [], + monthsChecked = [], + render = false; + + for ( var dayIndex = 0; dayIndex < 7; dayIndex++ ) { + if ( bindingOptions.currentView.dayCheckBoxes[ dayIndex ].checked ) { + daysChecked.push( dayIndex + 1 ); + } + } + + for ( var monthIndex = 0; monthIndex < 12; monthIndex++ ) { + if ( bindingOptions.currentView.monthCheckBoxes[ monthIndex ].checked ) { + monthsChecked.push( monthIndex + 1 ); + } + } + + if ( daysChecked.length >= 1 ) { + if ( bindingOptions.currentView.view === _elements_View_Map ) { + bindingOptions.views.map.daysToShow = daysChecked; + } else if ( bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart ) { + bindingOptions.views.chart.daysToShow = daysChecked; + } else if ( bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days ) { + bindingOptions.views.days.daysToShow = daysChecked; + } else if ( bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics ) { + bindingOptions.views.statistics.daysToShow = daysChecked; + } else { + bindingOptions.views.map.daysToShow = daysChecked; + } + + render = true; + } + + if ( monthsChecked.length >= 1 ) { + if ( bindingOptions.currentView.view === _elements_View_Map ) { + bindingOptions.views.map.monthsToShow = monthsChecked; + } else if ( bindingOptions.views.chart.enabled && bindingOptions.currentView.view === _elements_View_Chart ) { + bindingOptions.views.chart.monthsToShow = monthsChecked; + } else if ( bindingOptions.views.days.enabled && bindingOptions.currentView.view === _elements_View_Days ) { + bindingOptions.views.days.monthsToShow = monthsChecked; + } else if ( bindingOptions.views.statistics.enabled && bindingOptions.currentView.view === _elements_View_Statistics ) { + bindingOptions.views.statistics.monthsToShow = monthsChecked; + } else { + bindingOptions.views.map.monthsToShow = monthsChecked; + } + + render = true; + } + + if ( render ) { + renderControlContainer( bindingOptions ); + fireCustomTrigger( bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions ); + + } else { + hideToolTip( bindingOptions ); + } + } + + /* * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- * Render: ToolTip @@ -262,16 +459,25 @@ bindingOptions.currentView.tooltip = createElement( _parameter_Document.body, "div", "heat-js-tooltip" ); bindingOptions.currentView.tooltip.style.display = "none"; - _parameter_Document.body.addEventListener( "mousemove", function() { - hideToolTip( bindingOptions ); - } ); - - _parameter_Document.addEventListener( "scroll", function() { - hideToolTip( bindingOptions ); - } ); + assignToolTipEvents( bindingOptions ); } } + function assignToolTipEvents( bindingOptions, add ) { + add = getDefaultBoolean( add, true ); + + var addEventListener_Window = add ? _parameter_Window.addEventListener : _parameter_Window.removeEventListener, + addEventListener_Document = add ? _parameter_Document.addEventListener : _parameter_Document.removeEventListener; + + addEventListener_Window( "mousemove", function() { + hideToolTip( bindingOptions ); + } ); + + addEventListener_Document( "scroll", function() { + hideToolTip( bindingOptions ); + } ); + } + function addToolTip( element, bindingOptions, text ) { if ( element !== null ) { element.onmousemove = function( e ) { @@ -299,7 +505,7 @@ bindingOptions.currentView.tooltipTimer = null; } - if ( bindingOptions.currentView.tooltip.style.display === "block" ) { + if ( bindingOptions.currentView.tooltip.style.display !== "none" ) { bindingOptions.currentView.tooltip.style.display = "none"; } } @@ -317,7 +523,7 @@ var titleBar = createElement( bindingOptions.currentView.element, "div", "title-bar" ), title = createElement( titleBar, "div", "title" ); - if ( bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled ) { + if ( bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled ) { createElement( title, "div", "down-arrow" ); } else { addClass( title, "no-click" ); @@ -327,24 +533,8 @@ title.innerHTML += bindingOptions.titleText; } - if ( bindingOptions.views.chart.enabled || bindingOptions.views.statistics.enabled ) { - var titlesList = createElement( title, "div", "titles-list" ), - titles = createElement( titlesList, "div", "titles" ), - optionMap = createElementWithHTML( titles, "div", "title", _configuration.mapText ); - - renderTitleDropDownClickEvent( bindingOptions, optionMap, _elements_View_Map, _elements_View_Name_Map ); - - if ( bindingOptions.views.chart.enabled ) { - var optionChart = createElementWithHTML( titles, "div", "title", _configuration.chartText ); - - renderTitleDropDownClickEvent( bindingOptions, optionChart, _elements_View_Chart, _elements_View_Name_Chart ); - } - - if ( bindingOptions.views.statistics.enabled ) { - var statisticsChart = createElementWithHTML( titles, "div", "title", _configuration.statisticsText ); - - renderTitleDropDownClickEvent( bindingOptions, statisticsChart, _elements_View_Statistics, _elements_View_Name_Statistics ); - } + if ( bindingOptions.views.chart.enabled || bindingOptions.views.days.enabled || bindingOptions.views.statistics.enabled ) { + renderTitleDropDownMenu( bindingOptions, title ); } if ( bindingOptions.showImportButton && !bindingOptions.currentView.isInFetchMode ) { @@ -386,35 +576,19 @@ bindingOptions.currentView.yearText = createElementWithHTML( titleBar, "div", "year-text", bindingOptions.currentView.year ); if ( bindingOptions.showYearSelectionDropDown ) { - createElement( bindingOptions.currentView.yearText, "div", "down-arrow" ); - - var yearList = createElement( bindingOptions.currentView.yearText, "div", "years-list" ), - years = createElement( yearList, "div", "years" ), - thisYear = new Date().getFullYear(), - activeYear = null; - - yearList.style.display = "block"; - yearList.style.visibility = "hidden"; - - for ( var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++ ) { - if ( isYearVisible( bindingOptions, currentYear ) ) { - var year = renderControlTitleBarYear( bindingOptions, years, currentYear, thisYear ); - - if ( !isDefined( activeYear ) ) { - activeYear = year; - } - } - } + renderYearDropDownMenu( bindingOptions ); + } else { + addClass( bindingOptions.currentView.yearText, "no-click" ); + } - if ( isDefined( activeYear ) ) { - years.scrollTop = activeYear.offsetTop - ( years.offsetHeight / 2 ); - } + if ( bindingOptions.showConfigurationButton ) { + var configureButton = createElement( titleBar, "div", "configure" ); - yearList.style.display = "none"; - yearList.style.visibility = "visible"; + addToolTip( configureButton, bindingOptions, _configuration.configurationToolTipText ); - } else { - addClass( bindingOptions.currentView.yearText, "no-click" ); + configureButton.onclick = function() { + showConfigurationDialog( bindingOptions ); + }; } var next = createElementWithHTML( titleBar, "button", "next", _configuration.nextButtonText ); @@ -430,9 +604,42 @@ } } - function renderTitleDropDownClickEvent( bindingOptions, option, view, viewName ) { + function renderTitleDropDownMenu( bindingOptions, title ) { + var titlesMenuContainer = createElement( title, "div", "titles-menu-container" ), + titlesMenu = createElement( titlesMenuContainer, "div", "titles-menu" ); + + createElementWithHTML( titlesMenu, "div", "title-menu-header", _configuration.dataText + _string.colon ); + + var menuItemMap = createElementWithHTML( titlesMenu, "div", "title-menu-item", _configuration.mapText ); + + renderTitleDropDownMenuItemClickEvent( bindingOptions, menuItemMap, _elements_View_Map, _elements_View_Name_Map ); + + if ( bindingOptions.views.chart.enabled ) { + var menuItemChart = createElementWithHTML( titlesMenu, "div", "title-menu-item", _configuration.chartText ); + + renderTitleDropDownMenuItemClickEvent( bindingOptions, menuItemChart, _elements_View_Chart, _elements_View_Name_Chart ); + } + + if ( bindingOptions.views.days.enabled ) { + createElementWithHTML( titlesMenu, "div", "title-menu-header", _configuration.yearText + _string.colon ); + + var menuItemDays = createElementWithHTML( titlesMenu, "div", "title-menu-item", _configuration.daysText ); + + renderTitleDropDownMenuItemClickEvent( bindingOptions, menuItemDays, _elements_View_Days, _elements_View_Name_Days ); + } + + if ( bindingOptions.views.statistics.enabled ) { + createElementWithHTML( titlesMenu, "div", "title-menu-header", _configuration.statisticsText + _string.colon ); + + var menuItemStatistics = createElementWithHTML( titlesMenu, "div", "title-menu-item", _configuration.colorRangesText ); + + renderTitleDropDownMenuItemClickEvent( bindingOptions, menuItemStatistics, _elements_View_Statistics, _elements_View_Name_Statistics ); + } + } + + function renderTitleDropDownMenuItemClickEvent( bindingOptions, option, view, viewName ) { if ( bindingOptions.currentView.view === view ) { - addClass( option, "title-active" ); + addClass( option, "title-menu-item-active" ); } else { option.onclick = function() { @@ -444,9 +651,38 @@ } } - function renderControlTitleBarYear( bindingOptions, years, currentYear, actualYear ) { + function renderYearDropDownMenu( bindingOptions ) { + createElement( bindingOptions.currentView.yearText, "div", "down-arrow" ); + + var yearsMenuContainer = createElement( bindingOptions.currentView.yearText, "div", "years-menu-container" ), + yearsMenu = createElement( yearsMenuContainer, "div", "years-menu" ), + thisYear = new Date().getFullYear(), + activeYearMenuItem = null; + + yearsMenuContainer.style.display = "block"; + yearsMenuContainer.style.visibility = "hidden"; + + for ( var currentYear = thisYear - bindingOptions.extraSelectionYears; currentYear < thisYear + bindingOptions.extraSelectionYears; currentYear++ ) { + if ( isYearVisible( bindingOptions, currentYear ) ) { + var yearMenuItem = renderYearDropDownMenuItem( bindingOptions, yearsMenu, currentYear, thisYear ); + + if ( !isDefined( activeYearMenuItem ) ) { + activeYearMenuItem = yearMenuItem; + } + } + } + + if ( isDefined( activeYearMenuItem ) ) { + yearsMenu.scrollTop = activeYearMenuItem.offsetTop - ( yearsMenu.offsetHeight / 2 ); + } + + yearsMenuContainer.style.display = "none"; + yearsMenuContainer.style.visibility = "visible"; + } + + function renderYearDropDownMenuItem( bindingOptions, years, currentYear, actualYear ) { var result = null, - year = createElementWithHTML( years, "div", "year", currentYear ); + year = createElementWithHTML( years, "div", "year-menu-item", currentYear ); if ( bindingOptions.currentView.year !== currentYear ) { year.onclick = function() { @@ -457,11 +693,11 @@ }; if ( currentYear === actualYear ) { - addClass( year, "year-current" ); + addClass( year, "year-menu-item-current" ); } } else { - addClass( year, "year-active" ); + addClass( year, "year-menu-item-active" ); result = year; } @@ -471,7 +707,7 @@ /* * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - * Render: Map + * Render: View: Map * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ @@ -481,6 +717,10 @@ if ( bindingOptions.views.chart.enabled ) { renderControlChartContents( bindingOptions ); } + + if ( bindingOptions.views.days.enabled ) { + renderControlDaysContents( bindingOptions ); + } if ( bindingOptions.views.statistics.enabled ) { renderControlStatisticsContents( bindingOptions ); @@ -683,7 +923,7 @@ /* * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - * Render: Chart + * Render: View: Chart * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ @@ -863,7 +1103,149 @@ /* * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - * Render: Statistics + * Render: View: Days + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + */ + + function renderControlDaysContents( bindingOptions ) { + bindingOptions.currentView.daysContents = createElement( bindingOptions.currentView.element, "div", "days-contents" ); + + makeAreaDroppable( bindingOptions.currentView.daysContents, bindingOptions ); + } + + function renderControlDays( bindingOptions, isForViewSwitch ) { + var days = createElement( bindingOptions.currentView.daysContents, "div", "days" ), + dayNames = createElement( bindingOptions.currentView.daysContents, "div", "day-names" ), + labels = createElement( days, "div", "y-labels" ), + dayLines = createElement( days, "div", "day-lines" ), + dayValuesForCurrentYear = getLargestValuesForEachDay( bindingOptions ); + + if ( isForViewSwitch ) { + addClass( days, "view-switch" ); + } + + if ( dayValuesForCurrentYear.largestValue > 0 && bindingOptions.views.days.showChartYLabels ) { + var topLabel = createElementWithHTML( labels, "div", "label-0", dayValuesForCurrentYear.largestValue.toString() ); + createElementWithHTML( labels, "div", "label-25", ( _parameter_Math.floor( dayValuesForCurrentYear.largestValue / 4 ) * 3 ).toString() ); + createElementWithHTML( labels, "div", "label-50", _parameter_Math.floor( dayValuesForCurrentYear.largestValue / 2 ).toString() ); + createElementWithHTML( labels, "div", "label-75", _parameter_Math.floor( dayValuesForCurrentYear.largestValue / 4 ).toString() ); + createElementWithHTML( labels, "div", "label-100", _string.zero ); + + labels.style.width = topLabel.offsetWidth + "px"; + dayNames.style.paddingLeft = labels.offsetWidth + getStyleValueByName( labels, "margin-right", true ) + "px"; + + } else { + labels.parentNode.removeChild( labels ); + labels = null; + } + + if ( dayValuesForCurrentYear.largestValue === 0 ) { + bindingOptions.currentView.daysContents.style.minHeight = bindingOptions.currentView.mapContents.offsetHeight + "px"; + days.parentNode.removeChild( days ); + dayNames.parentNode.removeChild( dayNames ); + + var noDataMessage = createElementWithHTML( bindingOptions.currentView.daysContents, "div", "no-days-message", _configuration.noDaysDataMessage ); + + if ( isForViewSwitch ) { + addClass( noDataMessage, "view-switch" ); + } + + } else { + var pixelsPerNumbers = bindingOptions.currentView.mapContents.offsetHeight / dayValuesForCurrentYear.largestValue; + + for ( var day in dayValuesForCurrentYear.days ) { + if ( dayValuesForCurrentYear.days.hasOwnProperty( day ) && isDayVisible( bindingOptions.views.days.daysToShow, parseInt( day ) ) ) { + renderControlDaysDayLine( dayLines, day, dayValuesForCurrentYear.days[ day ], bindingOptions, pixelsPerNumbers ); + + if ( bindingOptions.views.days.showDayNames ) { + createElementWithHTML( dayNames, "div", "day-name", _configuration.dayNames[ day - 1 ] ); + } + } + } + + if ( bindingOptions.views.days.showInReverseOrder ) { + reverseElementsOrder( dayLines ); + reverseElementsOrder( dayNames ); + } + + if ( bindingOptions.keepScrollPositions ) { + bindingOptions.currentView.daysContents.scrollLeft = bindingOptions.currentView.daysContentsScrollLeft; + } + } + } + + function renderControlDaysDayLine( dayLines, dayNumber, dayCount, bindingOptions, pixelsPerNumbers ) { + var dayLine = createElement( dayLines, "div", "day-line" ), + dayLineHeight = dayCount * pixelsPerNumbers; + + dayLine.style.height = dayLineHeight + "px"; + + if ( dayLineHeight <= 0 ) { + dayLine.style.visibility = "hidden"; + } + + addToolTip( dayLine, bindingOptions, dayCount.toString() ); + + if ( isDefinedFunction( bindingOptions.onWeekDayClick ) ) { + dayLine.onclick = function() { + fireCustomTrigger( bindingOptions.onWeekDayClick, dayNumber, dayCount ); + }; + + } else { + addClass( dayLine, "no-hover" ); + } + + if ( bindingOptions.views.days.showDayNumbers && dayCount > 0 ) { + addClass( dayLine, "day-line-number" ); + + createElementWithHTML( dayLine, "div", "count", dayCount ); + } + } + + function getLargestValuesForEachDay( bindingOptions ) { + var largestValue = 0, + data = getCurrentViewData( bindingOptions ); + + var days = { + 1: 0, + 2: 0, + 3: 0, + 4: 0, + 5: 0, + 6: 0, + 7: 0, + }; + + for ( var monthIndex = 0; monthIndex < 12; monthIndex++ ) { + var totalDaysInMonth = getTotalDaysInMonth( bindingOptions.currentView.year, monthIndex ); + + for ( var dayIndex = 0; dayIndex < totalDaysInMonth; dayIndex++ ) { + var storageDate = toStorageDate( new Date( bindingOptions.currentView.year, monthIndex, dayIndex + 1 ) ); + + if ( data.hasOwnProperty( storageDate ) ) { + var storageDateParts = getStorageDate( storageDate ), + storageDateObject = new Date( storageDateParts[ 2 ], storageDateParts[ 1 ], storageDateParts[ 0 ] ), + weekDayNumber = getWeekdayNumber( storageDateObject ) + 1; + + if ( !isHoliday( bindingOptions, storageDateObject ).matched && isMonthVisible( bindingOptions.views.days.monthsToShow, storageDateObject.getMonth() ) && isDayVisible( bindingOptions.views.days.daysToShow, weekDayNumber ) ) { + days[ weekDayNumber ] += data[ storageDate ]; + + largestValue = _parameter_Math.max( largestValue, days[ weekDayNumber ] ); + } + } + } + } + + return { + days: days, + largestValue: largestValue + }; + } + + + /* + * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + * Render: View: Statistics * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ @@ -998,7 +1380,7 @@ if ( data.hasOwnProperty( storageDate ) ) { var storageDateParts = getStorageDate( storageDate ), storageDateObject = new Date( storageDateParts[ 2 ], storageDateParts[ 1 ], storageDateParts[ 0 ] ), - weekDayNumber = getWeekdayNumber( storageDateObject ); + weekDayNumber = getWeekdayNumber( storageDateObject ) + 1; if ( !isHoliday( bindingOptions, storageDateObject ).matched && isMonthVisible( bindingOptions.views.statistics.monthsToShow, storageDateObject.getMonth() ) && isDayVisible( bindingOptions.views.statistics.daysToShow, weekDayNumber ) ) { var useColorRange = getColorRange( bindingOptions, colorRanges, data[ storageDate ] ); @@ -1882,11 +2264,13 @@ options.dataFetchDelay = getDefaultNumber( options.dataFetchDelay, 60000 ); options.showOnlyDataForYearsAvailable = getDefaultBoolean( options.showOnlyDataForYearsAvailable, false ); options.showHolidaysInDayToolTips = getDefaultBoolean( options.showHolidaysInDayToolTips, false ); + options.showConfigurationButton = getDefaultBoolean( options.showConfigurationButton, true ); options = buildAttributeOptionColorRanges( options ); options = buildAttributeOptionHolidays( options ); options = buildAttributeOptionMapView( options ); options = buildAttributeOptionChartView( options ); + options = buildAttributeOptionDaysView( options ); options = buildAttributeOptionStatisticsView( options ); options = buildAttributeOptionStrings( options ); options = buildAttributeOptionCustomTriggers( options ); @@ -2013,6 +2397,25 @@ return options; } + function buildAttributeOptionDaysView( options ) { + options.views.days = !isDefinedObject( options.views.days ) ? {} : options.views.days; + options.views.days.enabled = getDefaultBoolean( options.views.days.enabled, true ); + options.views.days.showChartYLabels = getDefaultBoolean( options.views.days.showChartYLabels, true ); + options.views.days.showDayNames = getDefaultBoolean( options.views.days.showDayNames, true ); + options.views.days.showInReverseOrder = getDefaultBoolean( options.views.days.showInReverseOrder, false ); + options.views.days.showDayNumbers = getDefaultBoolean( options.views.days.showDayNumbers, false ); + + if ( isInvalidOptionArray( options.views.days.monthsToShow ) ) { + options.views.days.monthsToShow = _default_MonthsToShow; + } + + if ( isInvalidOptionArray( options.views.days.daysToShow ) ) { + options.views.days.daysToShow = _default_DaysToShow; + } + + return options; + } + function buildAttributeOptionStatisticsView( options ) { options.views.statistics = !isDefinedObject( options.views.statistics ) ? {} : options.views.statistics; options.views.statistics.enabled = getDefaultBoolean( options.views.statistics.enabled, true ); @@ -2062,6 +2465,8 @@ options.onDataFetch = getDefaultFunction( options.onDataFetch, null ); options.onClear = getDefaultFunction( options.onClear, null ); options.onUpdate = getDefaultFunction( options.onUpdate, null ); + options.onOptionsUpdate = getDefaultFunction( options.onOptionsUpdate, null ); + options.onWeekDayClick = getDefaultFunction( options.onWeekDayClick, null ); return options; } @@ -2293,6 +2698,30 @@ } } + function buildCheckBox( container, labelText, checked, onClick ) { + var lineContainer = createElement( container, "div" ), + label = createElement( lineContainer, "label", "checkbox" ), + input = createElement( label, "input" ); + + input.type = "checkbox"; + + if ( isDefined( onClick ) ) { + input.onclick = onClick; + } + + if ( isDefined( checked ) ) { + input.checked = checked; + } + + createElement( label, "span", "check-mark" ); + createElementWithHTML( label, "span", "text", labelText ); + + return { + input: input, + label: label + }; + } + /* * ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- @@ -3082,6 +3511,8 @@ view = _elements_View_Map; } else if ( viewName.toLowerCase() === _elements_View_Name_Chart ) { view = _elements_View_Chart; + } else if ( viewName.toLowerCase() === _elements_View_Name_Days ) { + view = _elements_View_Days; } else if ( viewName.toLowerCase() === _elements_View_Name_Statistics ) { view = _elements_View_Statistics; } @@ -3132,6 +3563,7 @@ * * @public * @fires onRefresh + * @fires onOptionsUpdate * * @param {string} elementId The Heat.js element ID. * @param {Object} newOptions The new options to want to apply to the element. @@ -3154,6 +3586,7 @@ if ( optionChanged ) { renderControlContainer( bindingOptions, true ); fireCustomTrigger( bindingOptions.onRefresh, bindingOptions.currentView.element ); + fireCustomTrigger( bindingOptions.onOptionsUpdate, bindingOptions.currentView.element, bindingOptions ); } } @@ -3271,6 +3704,7 @@ bindingOptions.currentView.element.innerHTML = _string.empty; removeClass( bindingOptions.currentView.element, "heat-js" ); + assignToolTipEvents( bindingOptions, false ); _parameter_Document.body.removeChild( bindingOptions.currentView.tooltip ); @@ -3359,6 +3793,16 @@ _configuration.objectErrorText = getDefaultString( _configuration.objectErrorText, "Errors in object: {{error_1}}, {{error_2}}" ); _configuration.attributeNotValidErrorText = getDefaultString( _configuration.attributeNotValidErrorText, "The attribute '{{attribute_name}}' is not a valid object." ); _configuration.attributeNotSetErrorText = getDefaultString( _configuration.attributeNotSetErrorText, "The attribute '{{attribute_name}}' has not been set correctly." ); + _configuration.closeToolTipText = getDefaultString( _configuration.closeToolTipText, "Close" ); + _configuration.configurationToolTipText = getDefaultString( _configuration.configurationToolTipText, "Configuration" ); + _configuration.configurationTitleText = getDefaultString( _configuration.configurationTitleText, "Configuration" ); + _configuration.visibleMonthsText = getDefaultString( _configuration.visibleMonthsText, "Visible Months" ); + _configuration.visibleDaysText = getDefaultString( _configuration.visibleDaysText, "Visible Days" ); + _configuration.dataText = getDefaultString( _configuration.dataText, "Data" ); + _configuration.colorRangesText = getDefaultString( _configuration.colorRangesText, "Color Ranges" ); + _configuration.yearText = getDefaultString( _configuration.yearText, "Year" ); + _configuration.daysText = getDefaultString( _configuration.daysText, "Days" ); + _configuration.noDaysDataMessage = getDefaultString( _configuration.noDaysDataMessage, "There are currently no days to view." ); } function buildDefaultConfigurationArrays() { @@ -3436,7 +3880,7 @@ * @returns {string} The version number. */ _public.getVersion = function() { - return "2.8.0"; + return "3.0.0"; }; diff --git a/src/heat.js.scss b/src/heat.js.scss index e045a9de..a93d148e 100644 --- a/src/heat.js.scss +++ b/src/heat.js.scss @@ -1,5 +1,5 @@ /* - * Heat.js Library v2.8.0 + * Heat.js Library v3.0.0 * * Copyright 2024 Bunoon * Released under the MIT License @@ -13,6 +13,7 @@ --heat-js-default-font: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; --heat-js-text-bold-weight: 400; --heat-js-title-bold-weight: 900; + --heat-js-sub-title-bold-weight: 700; --heat-js-text-bold-weight-active: 900; // Colors @@ -25,6 +26,11 @@ --heat-js-container-background-color: #22272e; --heat-js-container-border-color: #454c56; + // Dialog + --heat-js-dialog-background-color: var(--heat-js-container-background-color); + --heat-js-dialog-border-color: var(--heat-js-container-border-color); + --heat-js-dialog-text-color: var(--heat-js-color-white); + // ToolTip --heat-js-tooltip-background-color: var(--heat-js-container-background-color); --heat-js-tooltip-border-color: var(--heat-js-container-border-color); @@ -74,6 +80,11 @@ --heat-js-day-color-4-border-color: rgba( 80, 200, 120, 0.75 ); --heat-js-day-color-4-text-color: var(--heat-js-color-black); + // Views - Colors + --heat-js-view-days-background-color: var(--heat-js-day-color-4-background-color); + --heat-js-view-days-border-color: var(--heat-js-day-color-4-border-color); + --heat-js-view-days-text-color: var(--heat-js-day-color-4-text-color); + // Button --heat-js-button-background-color: var(--heat-js-day-background-color); --heat-js-button-border-color: var(--heat-js-container-border-color); @@ -83,7 +94,18 @@ --heat-js-button-background-color-active: #616b79; --heat-js-button-text-color-active: var(--heat-js-color-snow-white); + // CheckBox + --heat-js-checkbox-background-color-checked: rgba( 80, 200, 120, 1 ); + --heat-js-checkbox-background-color: var(--heat-js-color-black); + --heat-js-checkbox-border-color-checked: --heat-js-checkbox-background-color-checked; + --heat-js-checkbox-border-color: var(--heat-js-color-white); + + // Panels + --heat-js-panel-background-color: var(--heat-js-day-background-color); + --heat-js-panel-border-color: var(--heat-js-container-border-color); + // Borders + --heat-js-border-control-radius: 0.25rem; --heat-js-border-radius: 0.5rem; --heat-js-border-radius-day: 0.35rem; --heat-js-border-size: 0.5px; @@ -102,199 +124,251 @@ /* ------------------------------------------------------------------------- - Heat.js - Mixins + Heat.js - Container ------------------------------------------------------------------------- */ -@mixin buttons { - button { - background-color: var(--heat-js-button-background-color); - border: var(--heat-js-border-size) solid var(--heat-js-button-border-color); - color: var(--heat-js-button-text-color); - border-radius: var(--heat-js-border-radius); - padding-top: 5px; - padding-bottom: 5px; - padding-left: 9px; - padding-right: 9px; - outline: none; - transition: var(--heat-js-transition); - - &:disabled { - color: var(--heat-js-button-border-color); - } - - &:not(.active):not(:disabled):active { - background: var(--heat-js-button-background-color-active) !important; - color: var(--heat-js-button-text-color-active) !important; - } +div.heat-js { + @include no-selection-allowed; + @include box-sizing; + font-family: var(--heat-js-default-font); + display: inline-block; + position: relative; + border-radius: var(--heat-js-border-radius); + background-color: var(--heat-js-container-background-color); + color: var(--heat-js-color-white); + border: var(--heat-js-border-size) solid var(--heat-js-container-border-color); + padding: var(--heat-js-spacing); + font-size: var(--heat-js-spacing-font-size); + width: 100%; + max-width: 700px; + margin: 0 !important; - &:not(.active):not(:disabled):hover { - cursor: pointer; - background: var(--heat-js-button-background-color-hover); - color: var(--heat-js-button-text-color-hover); - } + div.view-switch { + animation: fade-in-animation var(--heat-js-animation-length); } - - button.active { - cursor: default; - background: var(--heat-js-button-background-color-hover); - color: var(--heat-js-button-text-color-hover); - transition: var(--heat-js-transition); - font-weight: var(--heat-js-text-bold-weight-active); + + div.no-click { + pointer-events: none !important; } -} -@mixin down-arrow($left-right-border-size: 8px, $border-top-size: 14px, $left: true, $margin-size: var(--heat-js-spacing)) { - div.down-arrow { - display: inline-block; - width: 0; - height: 0; - border-left: $left-right-border-size solid transparent; - border-right: $left-right-border-size solid transparent; - border-top: $border-top-size solid var(--heat-js-color-white); - transition: var(--heat-js-transition); - - @if ($left) { - margin-right: $margin-size; - } - @else { - margin-left: $margin-size; + * { + @include box-sizing; + + &::before, + &::after { + @include box-sizing; } } } -@mixin labels { - background-color: var(--heat-js-container-background-color); - padding-right: calc( var(--heat-js-spacing) * 3 ); - padding-top: calc( var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 1px ); - position: sticky; - left: 0; - display: none; - border-right: var(--heat-js-border-size) solid var(--heat-js-container-border-color); - z-index: 50; - @media (min-width: $minimum-width) { - display: block; - } +/* + ------------------------------------------------------------------------- + Heat.js - Disabled Background + ------------------------------------------------------------------------- +*/ - div.label-0, - div.label-25, - div.label-50, - div.label-75, - div.label-100 { - font-weight: var(--heat-js-text-bold-weight); - text-align: left !important; - height: var(--heat-js-day-size); - display: inline-flex; - justify-content: center; - flex-direction: column; +div.heat-js { + div.disabled { + display: none; + z-index: 1000; position: absolute; + background-color: rgba( 0, 0, 0, 0.3 ); + top: 0; left: 0; - padding-right: var(--heat-js-spacing); - } + height: 100%; + width: 100%; + animation: fade-in-animation var(--heat-js-animation-length); - div.label-0 { - top: 0; - } + div.dialog { + display: none; + position: absolute; + left: 50%; + top: 50%; + transform: translate( -50%, -50% ); + max-width: 450px; + width: calc( 100% - ( var(--heat-js-spacing) * 2 ) ); + background-color: var(--heat-js-dialog-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-dialog-border-color); + color: var(--heat-js-dialog-text-color); + border-radius: var(--heat-js-border-radius); + animation: fade-in-animation var(--heat-js-animation-length); + + div.dialog-title-bar { + position: relative; + padding: var(--heat-js-spacing); + text-align: left; - div.label-25 { - top: 25%; - transform: translateY(-25%); - } + span.dialog-title-bar-text { + font-weight: var(--heat-js-title-bold-weight); + } - div.label-50 { - top: 50%; - transform: translateY(-50%); - } + div.dialog-close { + $close-button-size: 16px; + $close-button-width: 3px; - div.label-75 { - top: 75%; - transform: translateY(-75%); - } + float: right; + width: $close-button-size; + height: $close-button-size; + position: relative; + cursor: pointer; - div.label-100 { - bottom: 0; - } -} + &::before, + &::after { + content: ""; + position: absolute; + height: $close-button-size; + width: $close-button-width; + left: calc( ( $close-button-size / 2 ) - ( $close-button-width / 2 ) ); + top: 0; + background-color: var(--heat-js-color-white); + border-radius: var(--heat-js-border-radius); + transition: var(--heat-js-transition); + } -@mixin centered-label { - position: absolute; - left: 50%; - top: 50%; - transform: translate(-50%, -50%); - font-weight: var(--heat-js-text-bold-weight); -} + &::before { + transform: rotate( 45deg ); + } -@mixin description { - text-align: center; + &::after { + transform: rotate( -45deg ); + } - @media (min-width: $minimum-width) { - text-align: left; - } + &:hover::before, + &:hover::after { + background-color: var(--heat-js-color-gray); + } + } + } - span.label, - a.label, - a.label:visited { - color: var(--heat-js-color-white); - font-weight: var(--heat-js-text-bold-weight); - text-decoration: none; + div.dialog-contents { + padding: var(--heat-js-spacing); + overflow-x: scroll; + overflow-y: hidden; + } + } } +} - a.label { - transition: var(--heat-js-transition); +/* + ------------------------------------------------------------------------- + Heat.js - Configuration Dialog + ------------------------------------------------------------------------- +*/ - &:active { - color: var(--heat-js-color-gray); - } +div.heat-js { + div.disabled { + div.configuration { + div.dialog-contents { + div.panel { + background-color: var(--heat-js-panel-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-panel-border-color); + border-radius: var(--heat-js-border-radius); + padding: var(--heat-js-spacing); + } - &:hover { - text-decoration: underline; + div.side-container { + vertical-align: top; + display: inline-block; + width: calc( 50% - var(--heat-js-spacing) ); + margin-right: var(--heat-js-spacing); + + &:last-child { + margin-right: 0; + width: calc( 50% ); + } + + div.side-container-title-text { + margin-bottom: var(--heat-js-spacing); + font-weight: var(--heat-js-sub-title-bold-weight); + } + + label.checkbox { + margin-left: var(--heat-js-spacing); + } + } + } } } } -@mixin box-sizing { - box-sizing: border-box; - line-height: normal; -} - /* ------------------------------------------------------------------------- - Heat.js - Container + Heat.js - Title Bar ------------------------------------------------------------------------- */ div.heat-js { - @include no-selection-allowed; - @include box-sizing; - font-family: var(--heat-js-default-font); - display: inline-block; - position: relative; - border-radius: var(--heat-js-border-radius); - background-color: var(--heat-js-container-background-color); - color: var(--heat-js-color-white); - border: var(--heat-js-border-size) solid var(--heat-js-container-border-color); - padding: var(--heat-js-spacing); - font-size: var(--heat-js-spacing-font-size); - width: 100%; - max-width: 700px; - margin: 0 !important; + div.title-bar { + text-align: right; + margin-bottom: calc( var(--heat-js-spacing) + var(--heat-js-spacing) / 2 ); - div.view-switch { - animation: fade-in-animation var(--heat-js-animation-length); - } - - div.no-click { - pointer-events: none !important; - } + @include buttons; - * { - @include box-sizing; + button.back { + margin-left: calc( var(--heat-js-spacing) * 2 ) !important; + } - &::before, - &::after { - @include box-sizing; + button.export, + button.import { + margin-right: calc( var(--heat-js-spacing) / 2 ) !important; + } + + div.configure { + $button-size: 8.5px; + + display: inline-block; + width: $button-size; + height: $button-size; + position: relative; + margin-right: var(--heat-js-spacing); + transition: var(--heat-js-transition); + + &:hover::before, + &:hover::after { + border-color: var(--heat-js-title-opener-text-color-hover); + cursor: pointer; + } + + &::before { + content: ""; + position: absolute; + height: $button-size; + width: $button-size; + border-color: var(--heat-js-color-white); + border-width: 2px; + border-style: solid; + transform: rotate( -45deg ); + top: 0; + left: 0; + transition: var(--heat-js-transition); + } + + &::after { + content: ""; + position: absolute; + height: $button-size; + width: $button-size; + border-color: var(--heat-js-color-white); + border-width: 2px; + border-style: solid; + transform: rotate( 90deg ); + top: 0; + left: 0; + transition: var(--heat-js-transition); + } + } + + button.export, + button.refresh, + button.import { + display: none; + + @media (min-width: $minimum-width) { + display: inline-block; + } } } } @@ -302,15 +376,12 @@ div.heat-js { /* ------------------------------------------------------------------------- - Heat.js - Title Bar + Heat.js - Title Bar - Title Drop-Down ------------------------------------------------------------------------- */ div.heat-js { div.title-bar { - text-align: right; - margin-bottom: calc( var(--heat-js-spacing) + var(--heat-js-spacing) / 2 ); - div.title { $title-margin: 3px; @@ -329,74 +400,103 @@ div.heat-js { border-top-color: var(--heat-js-title-opener-text-color-hover); } - &:hover div.titles-list { + &:hover div.titles-menu-container { display: block; } @include down-arrow; - div.titles-list { + div.titles-menu-container { animation: fade-in-animation var(--heat-js-animation-length); padding-top: $title-margin; display: none; position: absolute; - width: 100px; + min-width: 100px; margin-top: $title-margin; z-index: 1000; - div.titles { + div.titles-menu { border-radius: var(--heat-js-border-radius); background-color: var(--heat-js-title-background-color); border: var(--heat-js-border-size) solid var(--heat-js-title-border-color); color: var(--heat-js-title-text-color); overflow-y: scroll; - div.title { + div.title-menu-header { + color: var(--heat-js-color-white); + font-weight: var(--heat-js-title-bold-weight); + padding: var(--heat-js-spacing); + padding-right: calc( var(--heat-js-spacing) * 3 ); + text-align: left; + width: 100%; + font-size: var(--heat-js-spacing-font-size) !important; + cursor: default; + } + + div.title-menu-item { color: var(--heat-js-color-white); font-weight: var(--heat-js-text-bold-weight); - border-bottom: var(--heat-js-border-size) dashed var(--heat-js-container-border-color); padding: var(--heat-js-spacing); + padding-right: calc( var(--heat-js-spacing) * 3 ); + padding-left: calc( var(--heat-js-spacing) * 3 ); text-align: left; width: 100%; transition: var(--heat-js-transition); font-size: var(--heat-js-spacing-font-size) !important; + position: relative; + + &::before { + content: ""; + position: absolute; + left: var(--heat-js-spacing); + top: 50%; + transform: translate( 0, -50% ); + border-radius: 50%; + width: 8px; + height: 8px; + background-color: var(--heat-js-color-white); + } - &:not(.title-active):active { + &:not(.title-menu-item-active):active { opacity: 0.5 !important; } - &:not(.title-active):hover { + &:not(.title-menu-item-active):hover { cursor: pointer; background-color: var(--heat-js-title-background-color-hover); color: var(--heat-js-title-text-color-hover); - } - - &:last-child { - border-bottom: none; + + &::before { + background-color: var(--heat-js-title-text-color-hover); + } } } - div.title-active { + div.title-menu-item-active { background-color: var(--heat-js-title-background-color-hover); color: var(--heat-js-title-text-color-hover); font-weight: var(--heat-js-text-bold-weight-active); cursor: default !important; + + &::before { + background-color: var(--heat-js-title-text-color-hover); + } } } } } + } +} - @include buttons; - - button.back { - margin-left: calc( var(--heat-js-spacing) * 2 ) !important; - } - button.export, - button.import { - margin-right: calc( var(--heat-js-spacing) / 2 ) !important; - } +/* + ------------------------------------------------------------------------- + Heat.js - Title Bar - Year Drop-Down + ------------------------------------------------------------------------- +*/ +div.heat-js { + div.title-bar { div.year-text { $year-margin: 5px; @@ -418,24 +518,24 @@ div.heat-js { border-top-color: var(--heat-js-title-opener-text-color-hover); } - &:hover div.years-list { + &:hover div.years-menu-container { display: block !important; } @include down-arrow( 6px, 9px, false, calc( var(--heat-js-spacing) / 2 ) ); - div.years-list { + div.years-menu-container { animation: fade-in-animation var(--heat-js-animation-length); padding-top: $year-margin; display: none; position: absolute; width: 80px; left: 50%; - transform: translateX(-50%); + transform: translateX( -50% ); margin-top: $year-margin; z-index: 1000; - div.years { + div.years-menu { border-radius: var(--heat-js-border-radius); background-color: var(--heat-js-years-background-color); border: var(--heat-js-border-size) solid var(--heat-js-years-border-color); @@ -445,7 +545,7 @@ div.heat-js { overflow-y: scroll; scroll-snap-type: y mandatory; - div.year { + div.year-menu-item { color: var(--heat-js-color-white); font-weight: var(--heat-js-text-bold-weight); border-bottom: var(--heat-js-border-size) dashed var(--heat-js-container-border-color); @@ -455,11 +555,11 @@ div.heat-js { transition: var(--heat-js-transition); scroll-snap-align: start; - &:not(.year-active):active { + &:not(.year-menu-item-active):active { opacity: 0.5 !important; } - &:not(.year-active):hover { + &:not(.year-menu-item-active):hover { cursor: pointer; background-color: var(--heat-js-years-background-color-hover); color: var(--heat-js-years-text-color-hover); @@ -470,37 +570,27 @@ div.heat-js { } } - div.year-active { + div.year-menu-item-active { background-color: var(--heat-js-years-background-color-hover); color: var(--heat-js-years-text-color-hover); font-weight: var(--heat-js-text-bold-weight-active); cursor: default !important; } - div.year-current { + div.year-menu-item-current { font-style: italic; font-weight: var(--heat-js-text-bold-weight-active); } } } } - - button.export, - button.refresh, - button.import { - display: none; - - @media (min-width: $minimum-width) { - display: inline-block; - } - } } } /* ------------------------------------------------------------------------- - Heat.js - Map + Heat.js - View - Map ------------------------------------------------------------------------- */ @@ -629,9 +719,10 @@ div.heat-js { } } + /* ------------------------------------------------------------------------- - Heat.js - Chart + Heat.js - View - Chart ------------------------------------------------------------------------- */ @@ -731,7 +822,117 @@ div.heat-js { /* ------------------------------------------------------------------------- - Heat.js - Statistics + Heat.js - View - Days + ------------------------------------------------------------------------- +*/ + +div.heat-js { + div.days-contents { + display: flex; + overflow: hidden; + text-wrap: nowrap; + white-space: nowrap; + position: relative; + + div.no-days-message { + @include centered-label; + } + + div.days { + display: flex; + flex-direction: row; + + div.y-labels { + @include labels; + } + + div.day-lines { + display: flex; + align-items: baseline; + flex: 1; + border-bottom: var(--heat-js-border-size) solid var(--heat-js-container-border-color); + justify-content: space-between; + + div.day-line-number { + font-size: var(--heat-js-spacing-day-font-size); + padding: calc( var(--heat-js-spacing) / 2 ); + position: relative; + overflow: hidden; + + div.count { + position: absolute; + top: calc( var(--heat-js-spacing) / 2 ); + left: 50%; + transform: translateX( -50% ); + color: var(--heat-js-view-days-text-color); + } + } + + div.day-line { + border-top-left-radius: var(--heat-js-border-radius-day); + border-top-right-radius: var(--heat-js-border-radius-day); + background-color: var(--heat-js-view-days-background-color); + border: var(--heat-js-border-size) solid var(--heat-js-view-days-border-color); + border-bottom: none !important; + vertical-align: bottom; + flex: 1 100%; + margin-right: var(--heat-js-spacing); + display: inline-block; + transition: var(--heat-js-transition); + + @media (min-width: $minimum-width) { + &:first-child { + margin-left: calc( var(--heat-js-spacing) / 2 ); + } + } + + &:last-child { + margin-right: 0; + } + + &:not(.no-hover):hover { + cursor: pointer; + opacity: var(--heat-js-day-opacity-hover); + } + } + } + } + + div.day-names { + display: flex; + flex: 1; + position: relative; + justify-content: space-between; + align-items: baseline; + height: calc( var(--heat-js-spacing-font-size) + var(--heat-js-spacing) + 3px ); + + div.day-name { + flex: 1 100%; + margin-top: var(--heat-js-spacing); + font-weight: var(--heat-js-text-bold-weight); + text-align: center !important; + overflow: hidden; + text-overflow: ellipsis; + margin-right: var(--heat-js-spacing); + + @media (min-width: $minimum-width) { + &:first-child { + margin-left: calc( var(--heat-js-spacing) / 2 ); + } + } + + &:last-child { + margin-right: 0; + } + } + } + } +} + + +/* + ------------------------------------------------------------------------- + Heat.js - View - Statistics ------------------------------------------------------------------------- */ @@ -772,7 +973,7 @@ div.heat-js { position: absolute; top: calc( var(--heat-js-spacing) / 2 ); left: 50%; - transform: translateX(-50%); + transform: translateX( -50% ); } } @@ -821,11 +1022,23 @@ div.heat-js { text-align: center !important; overflow: hidden; text-overflow: ellipsis; + margin-right: var(--heat-js-spacing); + + @media (min-width: $minimum-width) { + &:first-child { + margin-left: calc( var(--heat-js-spacing) / 2 ); + } + } + + &:last-child { + margin-right: 0; + } } } } } + /* ------------------------------------------------------------------------- Heat.js - Description @@ -968,6 +1181,72 @@ div.heat-js { } +/* + ------------------------------------------------------------------------- + Heat.js - CheckBox + ------------------------------------------------------------------------- +*/ + +div.heat-js { + label.checkbox { + @include no-selection-allowed; + display: inline-block; + position: relative; + padding-left: 20px; + padding-top: 1px; + padding-bottom: 2px; + color: var(--heat-js-color-white); + + input { + display: none !important; + + &:checked ~ span.check-mark { + background-color: var(--heat-js-checkbox-background-color-checked); + border: var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color-checked); + } + + &:checked ~ span.check-mark::before { + display: block; + } + + &:disabled ~ span.check-mark, + &:disabled ~ span.text { + opacity: 0.5; + } + + &:disabled ~ span.check-mark { + border: var(--heat-js-border-size) solid var(--heat-js-color-black) !important; + } + } + + span.check-mark { + position: absolute; + top: 1px; + left: 0; + height: 15px; + width: 15px; + background-color: var(--heat-js-checkbox-background-color); + border-radius: var(--heat-js-border-control-radius); + border: var(--heat-js-border-size) solid var(--heat-js-checkbox-border-color); + transition: var(--heat-js-transition); + + &::before { + content: ""; + transform: rotate( 45deg ); + position: absolute; + display: none; + left: 4.5px; + top: 1px; + width: 6px; + height: 11px; + border: solid var(--heat-js-color-black); + border-width: 0 3px 3px 0; + } + } + } +} + + /* ------------------------------------------------------------------------- Heat.js - Colors diff --git a/test/dist/heat.js.bootstrap.html b/test/dist/heat.js.bootstrap.html index 6208d752..b88f76bf 100644 --- a/test/dist/heat.js.bootstrap.html +++ b/test/dist/heat.js.bootstrap.html @@ -17,13 +17,13 @@

Heat.js - Bootstrap

-
+


-
+


-
+


@@ -115,6 +115,11 @@

Manage Instances:


+ + + + +
@@ -224,6 +229,10 @@

Additional Data:

console.log( "Statistic clicked for: " + JSON.stringify( colorRange ) ); } + function onWeekDayClick( day, count ) { + console.log( "Week day clicked for: " + day + ", Count: " + count ); + } + function onDayToolTipRenderEvent( date, count ) { return "This date '" + date.toString() + "' has " + count.toString() + " events in it."; } diff --git a/test/dist/heat.js.map-only.html b/test/dist/heat.js.map-only.html index aef4ee82..1d9323be 100644 --- a/test/dist/heat.js.map-only.html +++ b/test/dist/heat.js.map-only.html @@ -16,7 +16,7 @@

Heat.js - Only Map

-
+
diff --git a/test/dist/heat.js.numbers.html b/test/dist/heat.js.numbers.html index 341268ee..51442633 100644 --- a/test/dist/heat.js.numbers.html +++ b/test/dist/heat.js.numbers.html @@ -16,7 +16,7 @@

Heat.js - Numbers

-
+
diff --git a/test/src/heat.js.bootstrap.html b/test/src/heat.js.bootstrap.html index 16f24092..600dba9d 100644 --- a/test/src/heat.js.bootstrap.html +++ b/test/src/heat.js.bootstrap.html @@ -17,13 +17,13 @@

Heat.js - Bootstrap

-
+


-
+


-
+


@@ -115,6 +115,11 @@

Manage Instances:


+ + + + +
@@ -224,6 +229,10 @@

Additional Data:

console.log( "Statistic clicked for: " + JSON.stringify( colorRange ) ); } + function onWeekDayClick( day, count ) { + console.log( "Week day clicked for: " + day + ", Count: " + count ); + } + function onDayToolTipRenderEvent( date, count ) { return "This date '" + date.toString() + "' has " + count.toString() + " events in it."; } diff --git a/test/src/heat.js.map-only.html b/test/src/heat.js.map-only.html index 3de7adcd..41b0702a 100644 --- a/test/src/heat.js.map-only.html +++ b/test/src/heat.js.map-only.html @@ -16,7 +16,7 @@

Heat.js - Only Map

-
+
diff --git a/test/src/heat.js.numbers.html b/test/src/heat.js.numbers.html index ed32104d..aed501fa 100644 --- a/test/src/heat.js.numbers.html +++ b/test/src/heat.js.numbers.html @@ -16,7 +16,7 @@

Heat.js - Numbers

-
+