UNPKG

jspreadsheet

Version:

Jspreadsheet is a lightweight, vanilla javascript data grid plugin to create amazing web-based interactive tables and spreadsheets compatible with other spreadsheet software.

1,638 lines (1,365 loc) 42.9 kB
:root { --jss-font-color: #000; --jss-border-color: #ccc; --jss-border-color-light: #e9e9e9; --jss-border-color-highlight: #aaa; --jss-border-outline: #000; --jss-background-color: #fff; --jss-background-color-header: #f8f8f8; --jss-background-color-highlight: #e8e8e8; --jss-background-color-active: #777; --jss-background-color-input: #fff; --jss-icon-color: #555; --jss-warning-color: #ff0000; --jss-color: transparent; } .lm-dark-mode { --jss-font-color: #ddd; --jss-border-color: #444; --jss-border-color-light: #191919; --jss-border-color-highlight: #555; --jss-border-outline: #fff; --jss-background-color: #000; --jss-background-color-header: #222; --jss-background-color-highlight: #333; --jss-background-color-active: #888; --jss-background-color-input: #181818; --jss-icon-color: #ccc; } .jss_container { display: inline-flex; box-sizing: border-box; overscroll-behavior: contain; outline: none; flex-direction: column; color: var(--jss-font-color); } .jss_wait { cursor: wait; } .jss_container.fullscreen { position: fixed; top: 0; left: 0; width: 100% !important; height: 100% !important; margin: 0; background-color: var(--jss-background-color); z-index: 7; } .jss_resizable .jss_content { resize: both; } .jss_container.fullscreen .jtabs-content, .jss_container.jss_content_overflow .jtabs-content { flex: 1; overflow: hidden; } .jss_worksheet { width: 100%; height: 100%; flex-direction: column; align-content: stretch; } .jss_content { display: block; position: relative; box-sizing: border-box; scrollbar-width: thin; scrollbar-color: var(--jss-border-color-highlight) var(--jss-background-color); border-top: 1px solid var(--jss-border-color); box-shadow: inset 1px 0 0 0 var(--jss-border-color); width: 100%; height: 100%; } .jss_container.fullscreen .jss_content, .jss_container.jss_content_overflow .jss_content { overflow: auto; border-right: 1px solid var(--jss-border-color); border-bottom: 1px solid var(--jss-border-color); } .jss_container.fullscreen .jss_table_container, .jss_container.jss_content_overflow .jss_table_container { position: sticky; top: 0; left: 0; } .jss_container.disconnected { pointer-events: none; } .jss_container .lm-menu { font-size: 0.85em; } .jss { border-collapse: separate; border-spacing: 0; table-layout: fixed; white-space: nowrap; empty-cells: show; width: 0; outline: none; box-sizing: border-box; border-top: 0; border-left: 0; border-right: 1px solid var(--jss-border-color); border-bottom: 1px solid var(--jss-border-color); } .jss .error { border:1px solid red; } .jss_red { color: red; } .jss.jss_left > tbody > tr > td, .jss > tbody > tr > td.jss_left { text-align: left; } .jss.jss_center > tbody > tr > td, .jss > tbody > tr > td.jss_center { text-align: center; } .jss.jss_right > tbody > tr > td, .jss > tbody > tr > td.jss_right { text-align: right; } .jss > thead > tr > th { border-top: 1px solid var(--jss-border-color); border-left: 1px solid var(--jss-border-color); border-right: 1px solid transparent; border-bottom: 1px solid transparent; background-color: var(--jss-background-color-header); padding: 6px; box-sizing: border-box; overflow: hidden; text-overflow: ellipsis; position: sticky; top: 0; z-index: 4; line-height: 1; font-size: 1em; font-weight: normal; } .jss > thead > tr:first-child > th { border-top: 1px solid transparent; } .jss > thead > tr > th:first-child:after, .jss > thead > tr.jss_nested > th::before, .jss > thead > tr.jss_nested > th::after { cursor: default; } .jss > thead > tr > th:first-child { box-shadow: 1px 1px 0 0 var(--jss-border-color); } .jss > thead > tr > th.selected { background-color: var(--jss-background-color-highlight); border-bottom: 1px solid transparent; } .jss > thead > tr > th.jss_filters_icon { padding-right: 16px !important; } .jss > tbody > tr > td { border-top: 1px solid var(--jss-border-color); border-left: 1px solid var(--jss-border-color); border-right: 1px solid transparent; border-bottom: 1px solid transparent; box-sizing: border-box; padding: 4px; line-height: 1; height: 24px; text-align: center; white-space: pre; overflow: hidden; } .jss > tbody > tr > td.jss_number { text-align: right; } .jss > tbody > tr > td.jss_wrap { white-space: break-spaces; } .jss > tbody > tr > td.jss_row { position: sticky; z-index: 4; left: 0; background-color: var(--jss-background-color-header); text-align: center; } .jss > tbody > tr.selected > td.jss_row { background-color: var(--jss-background-color-highlight); border-right: 1px solid transparent; } .jss > thead > tr > th:first-child, .jss > tfoot > tr > td:first-child { position: sticky; left: 0; z-index: 5 !important; } .jss_overflow > tbody > tr > td:not(.jss_frozen):has(+td:empty) { overflow: initial; } .jss_overflow > tbody > tr > td:has(+td.jss_hidden:empty) { overflow: hidden; } .jss > tbody > tr > td:last-child { overflow:hidden; } .jss > tbody > tr > td > img { max-width: 40px; vertical-align: bottom; } .jss > tbody > tr > td > img.round { object-fit: cover; border-radius: 40px; height: 40px; } .jss > tbody > tr > td > img.small { width: 24px; height: 24px; } .jss > tbody > tr > td.readonly { color: rgba(0,0,0,0.4) } .jss > tbody > tr > td > select, .jss > tbody > tr > td > input, .jss > tbody > tr > td > textarea { border: 0; border-radius: 0; outline: 0; width: 100%; margin: 0; padding: 0; background-color: transparent; box-sizing: border-box; } .jss > tbody > tr > td > textarea { resize: none; display: block; } .jss > tbody > tr > td > input[type=checkbox], .jss > tbody > tr > td > input[type=radio] { display: block; width: initial; margin: 0 auto; } .jss > tbody > tr > td.readonly > input[type=checkbox], .jss > tbody > tr > td.readonly > input[type=radio] { pointer-events: none; opacity: 0.5; } .jss > tbody > tr > td.jss_dropdown { background-repeat: no-repeat; background-position: top 50% right 0; background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E"); text-overflow: ellipsis; overflow-x: hidden; padding-right: 24px; } .jss > tbody > tr > td.jss_dropdown:hover:not(.readonly) { background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E"); } .jss > tbody > tr > td.jss_dropdown_tags { white-space: pre-wrap; } .jss > tbody > tr > td.jss_dropdown[title] { background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='lightgray'/%3E%3C/svg%3E"), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII='); } .jss > tbody > tr > td.jss_dropdown[title]:hover { background-image: url("data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath d='M7 10l5 5 5-5H7z' fill='gray'/%3E%3C/svg%3E"), url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII='); } .jss > tbody > tr > td[title] { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFuGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOnhtcE1NPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvbW0vIiB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHhtcDpNb2RpZnlEYXRlPSIyMDE5LTAxLTMxVDE4OjU1OjA4WiIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDphMTlhZDJmOC1kMDI2LTI1NDItODhjOS1iZTRkYjkyMmQ0MmQiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDpkOGI5NDUyMS00ZjEwLWQ5NDktYjUwNC0wZmU1N2I3Nzk1MDEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDplMzdjYmE1ZS1hYTMwLWNkNDUtYTAyNS1lOWYxZjk2MzUzOGUiIHN0RXZ0OndoZW49IjIwMTktMDEtMzFUMTg6NTU6MDhaIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmExOWFkMmY4LWQwMjYtMjU0Mi04OGM5LWJlNGRiOTIyZDQyZCIgc3RFdnQ6d2hlbj0iMjAxOS0wMS0zMVQxODo1NTowOFoiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE5IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4En6MDAAAAX0lEQVQYlX3KOw6AIBBAwS32RpJADXfx0pTET+ERZJ8F8RODFtONsG0QAoh0CSDM82dqodaBdQXnfoLZQM7gPai+wjNNE8R4pTuAYNZSKZASqL7CMy0LxNgJp30fKYUDi3+vIqb/+rUAAAAASUVORK5CYII='); background-repeat: no-repeat; background-position: top 0 right -1px; } .jss > tbody > tr > td.jss_html { white-space: initial !important; } .jss > tbody > tr > td > div.jss_notes { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 1; -webkit-box-orient: vertical; text-overflow: ellipsis; } .jss > tbody > tr > td > .color { width:90%; height:10px; margin:auto; pointer-events: none; } .jss > tbody > tr > td.jss_cursor a { text-decoration: underline; color: blue; cursor: pointer; } .jss > tbody > tr > td.jss_progressbar > div { height: 10px; background-color: red; background-clip: content-box; } .jss > tfoot > tr > td { border-top: 1px solid var(--jss-border-color); border-left: 1px solid var(--jss-border-color); border-right: 1px solid transparent; border-bottom: 1px solid transparent; background-color: var(--jss-background-color-header); padding: 2px; box-sizing: border-box; overflow: hidden; text-align: center; position: sticky; bottom: 0; z-index: 1; } .jss tbody .jss_frozen_row { position: sticky; z-index: 1; background-color: var(--jss-background-color); box-shadow: 1px 1px 2px 0 var(--jss-border-color-highlight, #aaa); } .jss tbody .jss_frozen_row.jss_frozen { box-shadow: 1px 1px 2px 0 var(--jss-border-color-highlight, #aaa); z-index: 2; } .jss > tbody > tr > td.jss_row.jss_frozen_row { z-index: 5; box-shadow: 0 2px 0 0 var(--jss-border-color-highlight, #aaa); } .jss_freeze_control_col { border-right: 1px solid var(--jss-border-color-highlight, #aaa) !important; } .jss_freeze_control_row { border-bottom: 1px solid var(--jss-border-color-highlight, #aaa) !important; } .jss thead .jss_frozen { position: sticky; z-index: 5; box-shadow: 2px 0 0 0 var(--jss-border-color-highlight, #aaa); } .jss tfoot .jss_frozen { position: sticky; z-index: 2; box-shadow: 1px 0 0 0 var(--jss-border-color-highlight, #aaa); } .jss tbody .jss_frozen { position: sticky; z-index: 1; background-color: var(--jss-background-color); box-shadow: 1px 1px 2px 0 var(--jss-border-color-highlight, #aaa); } .jss tbody tr:nth-child(odd) td.jss_zebra { background-color: var(--jss-background-color-highlight, #e8e8e8); } .jss_textarea { position: fixed; width: 0; height: 0; opacity: 0; } .jss_about { float: right; font-size: 0.7em; padding: 2px; text-transform: uppercase; letter-spacing: 1px; display: none; } .jss_about a { color: #ccc; text-decoration: none; } .jss_about img { display: none; } .jss_cursor { filter: brightness(90%); background-color: var(--jss-background-color-header); } .jss_dropdown_icon { width: 12px; height: 12px; border-radius: 6px; margin: auto; } .jss_dropdown_tag { display: inline-block; border-radius: 6px; margin-top: 1px; margin-bottom: 1px; margin-right: 2px; padding: 4px 10px 4px 10px; font-size: 0.8em; } .jss_helper { position: absolute; top: 0; left: 0; width: 1px; height: 100%; background-color: transparent; border: 1px solid #DD0000; box-sizing: border-box; z-index: 7; display: none; pointer-events: none; } .jss_helper.jss_helper_row:before { content: ''; position: absolute; margin-top: -5px; margin-left: -8px; width: 0; height: 0; border-top: 5px solid transparent; border-bottom: 5px solid transparent; border-left: 5px solid #DD0000; } .jss_helper.jss_helper_col:before { content: ''; position: absolute; margin-top: -8px; margin-left: -5px; width: 0; height: 0; border-left: 5px solid transparent; border-right: 5px solid transparent; border-top: 5px solid #DD0000; } .jss_helper_border { position: absolute; top: 0; left: 0; width: 1px; height: 1px; background-color: color-mix(in srgb, var(--jss-border-outline) 10%, transparent); box-sizing: border-box; z-index: 7; display: none; pointer-events: none; opacity: 0.6; } .arrow-up { text-decoration: underline; } .arrow-down { text-decoration: underline; } .arrow-up::after { content: '\2191'; margin-left: 2px; text-decoration: initial; display: inline-block } .arrow-down::after { content: '\2193'; margin-left: 2px; text-decoration: initial; display: inline-block } .jss_scroll { position:absolute; min-height: 1px; min-width: 1px; } .jss_selectall { box-shadow: inset 1px 1px 0 0 var(--jss-border-color); } .jss_selectall:after { content: ' '; border-bottom: 12px solid var(--jss-border-color); border-left: 12px solid transparent; width: 0; position: absolute; bottom: 3px; right: 3px; } .fullscreen .jss_content { resize: none !important; } .jss_resize_corner { position: absolute; width: 8px; height: 8px; border-radius: 8px; border: 2px solid white; background-color: red; pointer-events: auto; /* equivalent to 'all' */ } .jss_resize_corner::before { content: ''; position: absolute; top: -12px; left: -12px; right: -12px; bottom: -12px; background-color: transparent; pointer-events: auto; } .jss_zebra tbody tr:nth-child(even) td { background-color: var(--jss-background-color-highlight); } .jss_nogridline > tbody > tr > td { border: 1px solid transparent; } .jss_row > i.material-icons { font-size: 13px; position: absolute; right: 2px; margin-top: 2px; cursor: pointer; } .jss_header > i.material-icons { font-size: 13px; position: absolute; right: 2px; margin-top: 2px; cursor: pointer; } .jss_header.jss_filters_icon > i.material-icons { right: 16px; } .jss_upload { position: absolute !important; display: none; margin-left: -240px; } .jss input[disabled] { opacity: 0.6; } .jss_media > div { z-index: 10; } .jss_media_item[data-type="chart"] { background-color: var(--jss-background-color-input); } .jss_image > img { position: absolute; max-width: 100%; z-index: 10; } .jss_image > img:focus { outline: 2px solid black; } .jss_actions { float: right; display: flex; margin-left: 4px; } .jss_rotate { -ms-writing-mode: tb-rl; -webkit-writing-mode: vertical-rl; writing-mode: vertical-rl; transform: rotate(0deg); white-space: nowrap; } /** Forbidden */ .jss_forbidden { padding: 80px; text-align: center; border: 1px solid var(--jss-border-color); color: #999; max-width: 600px; } .jss_forbidden:before { content: 'Jspreadsheet: Permission Denied'; } .jss_forbidden > div { display: none; } /** Search and pagination */ .jss_search_container { display: flex; justify-content: space-between; background-color: var(--jss-background-color-header); border: 1px solid var(--jss-border-color); margin-bottom: 1px; } .jss_search_container > div { display: inline-block; padding:8px; align-items:center; } .jss_search_container > div:empty { display: none; } .jss_pagination { display:flex; justify-content:space-between; align-items:center; } .jss_pagination > div { display: flex; padding: 8px; font-size: 0.9em } .jss_pagination > div:last-child { padding-right:10px; padding-top:10px; } .jss_pagination > div > div { text-align: center; width: 36px; height: 36px; line-height: 34px; border: 1px solid var(--jss-border-color); box-sizing: border-box; margin-left: 3px; cursor: pointer; border-radius: 18px; } .jss_pagination_dropdown { margin-left: 4px; margin-right: 4px; } .jss_page { font-size:0.8em; } .jss_page_selected { font-weight:bold; background-color:var(--jss-background-color-header); } .jss_searching { position: relative; } .jss_searching:after { content: ''; display: block; position: absolute; right: 16px; top: calc(50% - 7px); width: 12px; height: 12px; border-style: solid; border-color: #888; border-top-color: transparent; border-width: 1px; border-radius: 50%; -webkit-animation: spin .8s linear infinite; animation: spin .8s linear infinite; } @-webkit-keyframes spin { from {-webkit-transform:rotate(0deg);} to {-webkit-transform:rotate(360deg);} } @keyframes spin { from {transform:rotate(0deg);} to {transform:rotate(360deg);} } /** Tooltip */ .jss_tooltip { position: absolute; pointer-events: none; background-color: rgba(0,0,0,0.7); color: #fff; border-radius: 5px; padding: 5px 10px; white-space: nowrap; z-index: 999; display: block; animation: fadeIn 0.5s; } .jss_tooltip:empty { display: none; } /** Borders and corner */ .jss_corner { position:absolute; background-color: var(--jss-border-outline); height: 1px; width: 1px; border: 1px solid var(--jss-background-color); top:-2000px; left:-2000px; cursor:crosshair; box-sizing: initial; z-index: 6; padding: 2px; } .jss, .jss_corner, .jss td, .jss > tbody > tr > td > img { user-select: none; } .jss_border { position: absolute; border: 1px solid transparent; pointer-events: none; opacity:0.6; box-sizing: border-box; z-index: 5; } .jss_border_main { border: 1px solid var(--jss-border-outline); background-color: color-mix(in srgb, var(--jss-border-outline) 10%, transparent); background-origin: content-box; } .jss_border_copying { background-size: 8px 1px, 8px 1px, 1px 8px, 1px 8px; background-position: 0 0, 0 100%, 0 0, 100% 0; background-repeat: repeat-x, repeat-x, repeat-y, repeat-y; background-image: linear-gradient(to right, #fff 50%, #444 50%), linear-gradient(to right, #fff 50%, #444 50%), linear-gradient(to bottom, #fff 50%, #444 50%), linear-gradient(to bottom, #fff 50%, #444 50%); animation: ants 2s; animation-timing-function: linear; animation-iteration-count: infinite; opacity: 1; } .jss_border_cloning { border: 1px dashed var(--jss-border-outline); } .jss_border_ctrl { border: 2px solid var(--jss-background-color); outline: 1px solid var(--lm-background-color-active); outline-offset: -1px; background-color: #5b5b5b50; } .jss_border_reset { border: 1px solid var(--lm-background-color-active); background-color: var(--jss-background-color); z-index: 6; } .jss_border_copying_hide_left { background-size: 0 0, 8px 1px, 0 0, 0 0 !important; } @keyframes ants { 0% { background-position: 0 0, 0 100%, 0 0, 100% 0; } 100% { background-position: 40px 0, -40px 100%, 0 -40px, 100% 40px; } } /** Loading */ .jss_loading { position: absolute; z-index: 5; width: calc(100% - 3px); height: 1px; overflow: hidden; padding-left: 1px; padding-right: 1px; border: 0; box-sizing: border-box; visibility: hidden; margin-top: -1px; margin-left: 1px; } .jss_loading:after { content: ''; position: absolute; height: 3px; width: 25%; background-color: #999; transform: translateX(-100%); animation: jss_loading_transform 1.5s ease-in-out infinite; will-change: transform; /* Hint for GPU acceleration */ } @keyframes jss_loading_transform { 0% { transform: translateX(-100%); } 50% { transform: translateX(400%); } 100% { transform: translateX(-100%); } } .disconnected .jss_loading { display: block; background-color: red; } @keyframes jss_loading { 0% { margin-left: 0; width: 0 } 50% { margin-left: 0; width: 50% } 100% { margin-left: 100%; width: 100% } } /** Warning */ .jss_warning { border-left: 1px solid var(--jss-warning-color); background-color: color-mix(in srgb, var(--jss-warning-color) 12%, transparent); position: relative; } .jss_warning:before { content: 'warning'; font-family: "Material Symbols Outlined", "Material Icons", "FontAwesome"; font-size: 13px; position: absolute; color: var(--jss-warning-color); left: 2px; top: calc(50% - 6px); font-weight: normal; } .jss > tbody > tr > td.jss_warning { padding-left: 16px; } /** Filter **/ .jss > thead > tr > th.jss_filters_icon::before { font-family: "Material Symbols Outlined", "Material Icons", "FontAwesome"; content: 'filter_alt'; position: absolute; right: 5px; font-size: 16px; width: 16px; height: 16px; color: var(--jss-border-color); } .jss > thead > tr > th.jss_filters_active::before { color: var(--jss-icon-color); } .jss_filters { position: absolute; z-index: 11; background-color: var(--jss-background-color); font-size: 0.8em; user-select: none; border: 1px solid var(--jss-border-color); border-radius: 4px; box-shadow: 0 2px 4px 2px color-mix(in srgb, var(--jss-border-color) 20%, transparent); padding: 15px; margin: 0; outline: none; display: none; } .jss_filters > div { box-sizing: border-box; display: block; width: 280px; position: relative; cursor: default; font-family:sans-serif; } .jss_filters > div.jss_filter_search_container { display: flex; margin-bottom: 6px; } .jss_filters label { display: block; line-height: 18px; vertical-align: middle; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .jss_filters_search, .jss_filters_operators { padding: 6px; border: 1px solid var(--jss-border-color); width: 100%; flex: 3; } .jss_filters_search { margin-right: 6px; flex: 4; } .jss_filters_options { border: 1px solid var(--jss-border-color); margin-bottom: 4px; } .jss_filters_options label { display: flex; align-items: center; } .jss_filters_options label > div.color { width: 80px; height: 8px; } .jss_filters_options label > img { width: 18px; height: 18px; border-radius: 10px; } .jss_filters_options label > div.progressbar { background-color: red; height: 8px; } .jss_filters_options label > div.rating > i { line-height: 13px; width: 13px; height: 13px; vertical-align: bottom; } .jss_filters input[type=checkbox] { vertical-align: middle; position: relative; bottom: 1px; margin: 5px; } .jss_filters_actions { text-align: right; } .jss_filters_actions input { padding: 2px 10px; margin: 2px; } div.jss_filters_icon { font-size: 15px; width: 15px; height: 14px; padding: 1px; border-radius: 2px; color: grey; cursor: pointer; display: flex; } div.jss_filters_icon:hover, div.jss_filters_icon.jss_filters_active { color: white; background-color: #d92b04; } div.jss_filters_icon::before { font-family: "Material Symbols Outlined", "Material Icons", "FontAwesome"; content: 'filter_list'; font-weight: normal; } div.jss_filters_icon.jss_filters_active:hover { color: grey; background-color: #f1f1f1; } div.jss_filters_icon.jss_filters_active::before { content: 'filter_alt'; } .jss_result > td:first-child { color: #d92b04; } .jss_filters_sorting { margin-bottom: 6px; padding-bottom: 4px; border-bottom: 1px solid #d9d9d9; } .jss_filters_sorting > div { margin-bottom: 10px; padding: 2px 2px 2px 15px; } .jss_filters_sorting > div:hover { text-decoration: underline; cursor: pointer; } .jss_filters_sorting_up::before { content: '\2191'; position: absolute; margin-top: -2px; margin-left: -15px; } .jss_filters_sorting_down::before { content: '\2193'; position: absolute; margin-top: -2px; margin-left: -15px; } .lm-lazy { position: relative; overflow-y: auto; display: flex; } .lm-lazy-scroll { position: absolute; width: 1px; } .lm-lazy-items { position: sticky; top: 0; } .jss_filters_options .lm-lazy-items { padding: 10px; } /** Picker */ .jss_picker { position: relative; padding: 6px 8px; border: 1px solid var(--jss-border-color); background-color: var(--jss-background-color-input); } .jss_picker:after { content: "highlight_alt"; font-size: 18px; font-family: "Material Symbols Outlined", "Material Icons", "FontAwesome"; color: #000; position: absolute; top: calc(50% - 9px); right: 5px; cursor: pointer; } .jss_picker.active { outline: 2px #FF0000 solid; outline-offset: -2px; animation: blink 1s infinite; } @keyframes blink { 50% { outline: 2px transparent solid; } } /** Tabs */ .jss_container { max-width: initial; } .jss_container .jtabs-headers > div:not(.jtabs-border) { background-color: var(--jss-background-color-header); color: var(--jss-font-color); } .jss_container .jtabs-headers > div.jtabs-selected { background-color: var(--jss-background-color-highlight); } .jss_container .jtabs-content > div.jtabs-selected { display: flex !important; } /** Toolbars */ .jss_toolbar { background-color: var(--jss-background-color-header); border: 1px solid var(--jss-border-color); padding: 4px; position: sticky; top: 0; z-index: 6; min-width: fit-content; margin-top: 1px; margin-bottom: 1px; } .jss_container.fullscreen .jss_toolbar { position: relative; margin-bottom: 1px; margin-right: 0; } .jss_toolbar .jtoolbar-item > .jpicker-header:hover { background-color: var(--jss-background-color-highlight, #e8e8e8); } .jss_toolbar .material-icons { color: var(--jss-icon-color); } .jss_toolbar:empty { display: none; } .jss_toolbar i.jss_toolbar_item { width: 24px; height: 24px; padding: 4px; cursor: pointer; display: inline-block; } .jss_toolbar .jss_toolbar_selected { background-color: var(--jss-background-color-highlight, #e8e8e8); } .jss_toolbar::-webkit-scrollbar { display: none; } .jss_toolbar .jpicker, .jss_toolbar .jpicker-content { background-color: var(--jss-background-color-header); color: var(--jss-font-color); } .jss_toolbar .jcolor-controls div { color: var(--jss-font-color); } .jss_toolbar .jcolor-content { background-color: var(--jss-background-color-header); border: 1px solid var(--jss-border-color); color: var(--jss-font-color); } .jss_toolbar .jpicker-header:hover, .jss_toolbar .jpicker-item:hover, .jss_toolbar .jpicker-content > div:hover { background-color: var(--jss-background-color-highlight); } .jss_toolbar .jcolor-controls { border-color: var(--jss-border-color); } /** Editors */ .jss_editor { pointer-events: none; position: absolute; z-index: 7; opacity: 0; } .jss_input { box-sizing: border-box; white-space: pre-wrap; line-height: 1; outline: none; } .jss_editor.jss_focus { opacity: 1; pointer-events: initial; } .jss_editor.jss_focus .jss_input { padding: 4px; background-color: var(--jss-background-color); } .jss_editor.jss_focus .jss_input.jss_input_flat { padding: 0; } .jss_dialog { height: 240px; width: 350px; user-select: none; box-shadow: 2px 2px 8px 2px var(--jss-border-color); text-align:left; box-sizing: border-box; overflow: auto; scrollbar-width: thin; scrollbar-color: var(--jss-border-color-highlight) var(--jss-background-color); background-color: var(--jss-background-color-header, #f8f8f8); position: relative; } .jss_input > .jss_dialog { max-width: 600px; } .jss_dialog.jclose:after { position: absolute; top: 0; right: 0; margin: 10px; content: 'close'; font-family: "Material Symbols Outlined", "Material Icons", "FontAwesome"; font-size: 24px; width: 24px; height: 24px; line-height: 24px; cursor: pointer; text-shadow: 0 0 5px #fff; } .jss_dialog[title]:before { margin: 10px; content: attr(title); position: absolute; top: 0; right: 0; line-height: 24px; } .jss_dialog .jtoolbar { height: initial; } .jss_percent:after { content: ' %'; } .jss_percent.jss_formula:after { content: ''; } .jss_input.jss_formula { white-space: nowrap; overflow: hidden; } .jss_input.jss_nowrap { display: flex; flex-wrap: nowrap; overflow: hidden; } .jss_input.jss_nowrap.jss_formula { display: inherit; } .jss_editor.jss_focus .jss_notes { width: 320px; height: 240px; padding: 10px; outline: 2px solid black; overflow: auto; } .jss_color:before { content: ''; width: 12px; height: 12px; border-radius: 12px; background-color: var(--jss-color); float: left; margin: 2px 4px; } /** Visibility */ .jss_collapsed_col, .jss_collapsed_row { visibility: collapse; } .jss_collapsed_col { width: 0; } .jss_collapsed_row { height: 0; } .jss_hidden { display: none; } .jss_hidden_index > thead > tr > th:first-child, .jss_hidden_index > tbody > tr > td:first-child, .jss_hidden_index > tfoot > tr > td:first-child, .jss_hidden_index > colgroup > col:first-child { display: none; } .jss_hidden_col, .jss_hidden_row { visibility: collapse; } .jss_hidden_col { width: 0; } .jss_hidden_row { height: 0; } .jss_hidden_col_after { background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="8" height="16"><path d="M40 50 L100 0 L100 100 Z" fill="gray"/></svg>'); background-repeat: no-repeat; background-position: center right 2px; } .jss_hidden_col_before { background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="8" height="16"><path d="M60 50 L0 0 L0 100 Z" fill="gray"/></svg>'); background-repeat: no-repeat; background-position: center left 3px; } .jss_hidden_row_after > td:first-child { background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="16" height="8"><path d="M50 40 L0 100 L100 100 Z" fill="gray"/></svg>'); background-repeat: no-repeat; background-position: left bottom 2px; } .jss_hidden_row_before > td:first-child { background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" width="16" height="8"><path d="M0 0 L100 0 L50 60 Z" fill="gray"/></svg>'); background-repeat: no-repeat; background-position: left top 3px; } /** Tables */ .jss tbody tr td.jss_table { text-align: left; } .jss tbody tr td.jss_table.is-even { background: var(--range-bg, var(--jss-background-color-highlight)); } .jss tbody tr td.jss_table.is-header { font-weight: bold; } .jss tbody tr td.jss_table.is-header, .jss tbody tr td.jss_table.is-top { border-top: var(--range-border, 1px solid #000); } .jss tbody tr td.jss_table.is-left, .jss tbody tr td.jss_table.is-right { font-weight: bold; } .jss tbody tr td.jss_table.is-total { font-weight: bold; } .jss tbody tr td.jss_table.is-total, .jss tbody tr td.jss_table.is-bottom { border-bottom: var(--range-border, 1px solid #000); } /** General style */ .jss_style_row { display:flex; flex-wrap: wrap; flex-direction: row; justify-content: space-between; box-sizing: border-box; align-items: center; } .jss_style_row.container { flex-wrap: nowrap; } .jss_style_row.middle { align-items: center; } .jss_style_row.start { justify-content: flex-start; } .jss_style_col { box-sizing: border-box; } .jss_style_f1 { flex: 1; } .jss_style_form_group { width: 100%; padding-right: 8px; padding-bottom: 8px; box-sizing: border-box; } .jss_style_form_group > label:not([class]) { display: block; padding-bottom: 4px; } .jss_style_form_group input[type="text"], .jss_style_form_group input[type="number"], .jss_style_form_group select, .jss_style_form_group textarea { width: 100%; padding: 6px 8px; border: 1px solid var(--jss-border-color); box-sizing: border-box; color: inherit; font-family: inherit; font-size: inherit; background-color: var(--jss-background-color-input); } .jss_style_form_group select { padding: 5px 8px; } .jss_style_p2 { padding: 2px; } .jss_style_p6 { padding: 6px; } .jss_style_p10 { padding: 10px; } .jss_style_p20 { padding: 20px; } .jss_style_button { width: 100%; padding: 8px 16px 8px 16px; border-radius: 2px; cursor:pointer; background-color: #737373; border: 1px solid transparent; color: #fff; margin-top: 4px; } .jss_style_button[disabled] { opacity: 0.6; } /** Build-in themes :: MODERN **/ .jss_modern table.jss { border-right: 1px solid transparent; } .jss_modern table.jss > thead > tr > th { background-color: #f5f5f5; border-top: 1px solid #ddd; border-right: 1px solid transparent; padding: 8px; } .jss_modern table.jss > thead > tr > th { border-left: 1px solid transparent; } .jss_modern table.jss > thead > tr > th:first-child { box-shadow: 1px 0 0 0 #ddd; } .jss_modern table.jss > thead > tr:last-child > th { border-bottom: 1px solid #000; } .jss_modern table.jss > tfoot > tr > td { border-top: 1px solid #000; border-left: 1px solid transparent; border-right: 1px solid transparent; border-bottom: 1px solid transparent; background-color: #fff; padding: 8px; } .jss_modern table.jss > thead > tr > th.jss_filters_icon { background-position: center right 8px; } .jss_modern table.jss > thead > tr > th.selected { background-color: #eee; } .jss_modern table.jss > tbody > tr > td { border-right: 1px solid transparent; border-left: 1px solid transparent; } .jss_modern table.jss > tbody > tr > td:first-child { background-color: #f5f5f5; } .jss_modern table.jss > tbody > tr.selected > td:first-child { background-color:#eee; } .jss_modern .jss_toolbar { background-color: #f5f5f5; } .jss_modern .jss_toolbar { border-color: #ddd; } .jss_modern .jss_pagination { background-color: #f8f8f8; border: 1px solid #eee; } .jss_modern .jss_pagination > div > div { border: 1px solid transparent; background-color: #fff; } .jss_modern .jss_page_selected { background: linear-gradient(to bottom, #fff 0%, #dcdcdc 100%); border:1px solid #979797 !important; font-weight:normal; color: #333 !important; border-radius:2px; } .jss_modern .jss_search_container { background: initial; border: initial; }