<!DOCTYPE html>
<html class="zg-html">
<head>
<meta charset="utf-8">
<title>ZingGrid: Blank Grid</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet">
<script nonce="undefined" src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<script nonce="undefined" src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
<style>
* {
--md-red: #f44336;
--md-orange: #ff9800;
--md-yellow: #ffeb3b;
--md-green: #4caf50;
--md-blue: #2196f3;
--md-purple: #673ab7;
--md-indigo: #3f51b5;
--md-black: #000;
--md-white: #FFF;
font-family: 'Roboto', sans-serif;
/* BOOTSTRAP COLORS*/
/* Bootstrap 4 has some css variables exposes, mostly colors. */
/* RE-USABLE ZINGGRID VARS
----------------------------------------------------- */
/* BACKGROUND */
--theme-background-color: var(--mdc-theme-background);
--theme-background-zebra: var(--light);
/* BORDER */
--theme-border-color_alt: var(--light);
--theme-border-color_alt2: var(--secondary);
--zg-button-focus: var(--light);
/* COLOR */
--theme-color-primary: var(--md-indigo);
/* FONT */
--zg-caption-color: var(--md-black);
--theme-font-family: initial;
--theme-padding_x: 2rem;
--theme-padding_y: 0.75rem;
/* -------------------------------------------------- */
/* ZG-GRID
----------------------------------------------------- */
/* padding: var(--theme-padding_x) var(--theme-padding_y); */
/* box-sizing: border-box; */
--zing-grid-box-shadow: 0 15px 35px rgba(50, 50, 93, .1), 0 5px 15px rgba(0, 0, 0, .07);
/* ZG-BODY
----------------------------------------------------- */
--zg-body-background: var(--white);
--zg-body-card-background: transparent;
/* Hover */
--zg-row-body-color_even_hover: var(--zg-row-body-color);
--zg-row-body-color_odd_hover: var(--zg-row-body-color);
/* ZG-BUTTON
----------------------------------------------------- */
--zg-button-opacity_disabled: .5;
/* ZG-BUTTON-CUSTOM
----------------------------------------------------- */
--zg-button-background_custom: var(--theme-color-primary);
--zg-button-color: var(--white);
--zg-button-border_custom: none;
--zg-button-box-shadow_custom: none;
--zg-button-border_custom_hover: none;
--zg-button-background_custom_hover: #0069d9;
/* ZG-CAPTION
----------------------------------------------------- */
--zg-caption-background: var(--md-white);
--zg-caption-border-bottom: 0;
--zg-caption-color: var(--md-black);
--zg-caption-icon-color: var(--md-black);
/* ZG-CELL
----------------------------------------------------- */
--zg-cell-background_sorted: rgba(62, 117, 167, .2);
/* ZG-CONTROL-BAR
----------------------------------------------------- */
--zg-control-bar-background: var(--md-white);
--zg-control-bar-border-bottom: 0;
/* ZG-EDITOR_ROW
----------------------------------------------------- */
--zg-editor-row-input-background: var(--md-white);
--zg-editor-row-input-color: var(--md-white);
--zg-editor-row-input-background_focus: #00203d;
--zg-editor-row-input-box-shadow_focus: none;
/* ZG-FILTER
----------------------------------------------------- */
--zg-filter-background: var(--light);
--zg-filter-background_sorted: rgba(62, 117, 167, .2);
--zg-filter-border: none;
/* Input */
--zg-filter-input-height: calc(1.5em + .75rem + 2px);
--zg-filter-input-padding: .375rem .75rem .375rem .375rem;
--zg-filter-input-border-radius: .25rem;
--zg-filter-input-border: 1px solid #ced4da;
--zg-filter-input-background: var(--md-white);
--zg-filter-input-border-width: 1px;
--zg-filter-input-margin: .375rem;
/* ZG-FOCUS
----------------------------------------------------- */
--zg-focus-border: 1px solid #80bdff;
--zg-focus-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
--zg-focus-outline: 0;
--zg-focus-bottom-transform: translateY(1px);
--zg-focus-right-transform: translateX(1px);
/* ZG-HEAD
----------------------------------------------------- */
--zg-head-background: var(--md-white);
/* ZG-MENUITEM
----------------------------------------------------- */
--zg-menu-background: var(--md-black);
/* ZG-INPUT
----------------------------------------------------- */
--zg-input-color: #00549c;
;
--zg-input-border-bottom: 1px solid var(--theme-border-color_alt);
--zg-input-border-left: 1px solid var(--theme-border-color_alt);
--zg-input-border-right: 1px solid var(--theme-border-color_alt);
--zg-input-border-top: 1px solid var(--theme-border-color_alt);
/* ZG-PAGER
----------------------------------------------------- */
--zg-pager-background: transparent;
--zg-pager-border-top: 0;
--zg-pager-card-nonmobile-border-top: 1px solid var(--theme-background-color);
--zg-pager-color: var(--zg-head-cell-color);
/* ZG-ROW
----------------------------------------------------- */
--zg-row-border: 1px solid var(--grey);
/* Card */
--zg-row-card-background: var(--zg-body-background);
/* ZG-SOURCE
----------------------------------------------------- */
--zg-source-background: #fbfbfb;
--zg-source-border-bottom_top: 1px solid #f4f4f4;
--zg-source-border-top_top: 1px solid #f4f4f4;
--zg-source-border-top_bottom: 1px solid #f4f4f4;
--zg-source-color: var(--theme-color-primary);
/* ZG-WATERMARK
----------------------------------------------------- */
--zg-watermark-background: transparent;
--zg-watermark-border-bottom: 0;
--zg-watermark-border-left: 0;
--zg-watermark-border-right: 0;
--zg-watermark-border-top: 0;
--zg-watermark-font-size: 10px;
--zg-watermark-padding: 0 var(--theme-padding_x);
}
.chip-primary {
background: var(--md-indigo);
}
.chip-secondary {
background: var(--md-gray);
}
.chip-success {
background: var(--md-green);
}
.chip-danger {
background: var(--md-red);
}
.chip-warning {
background: var(--md-yellow);
}
.progress-wrapper {
width: 200px;
}
.mdc-linear-progress__buffer-bar {
height: 3px;
}
.mdc-linear-progress__buffer-dots {
height: 3px;
}
zing-grid[loading] {
height: 472px;
}
</style>
</head>
<body class="zg-body">
<!-- Most features can be toggled on the toplevel zing-grid tag -->
<zing-grid caption="Users" theme="zg-bootstrap.css" search pager sorting data='[
{
"first": "Mark",
"last": "Otto",
"username": "@ZTfer",
"category": "primary",
"progress": "12"
},
{
"first": "Jacob",
"last": "Thorton",
"username": "@jacobthorton",
"category": "secondary",
"progress": "62"
},
{
"first": "Duncan",
"last": "Mattheson",
"username": "@dmattheson",
"category": "danger",
"progress": "84"
},
{
"first": "David",
"last": "Jose Perez",
"username": "@djp",
"category": "info",
"progress": "45"
},
{
"first": "Dave",
"last": "Phillipson",
"username": "@phillipson",
"category": "warning",
"progress": "30"
}
]'>
<zg-colgroup>
<zg-column index="first">[[index.first]]</zg-column>
<zg-column index="last">[[index.last]]</zg-column>
<zg-column index="username">[[index.username]]</zg-column>
<zg-column index="category">
<div class="mdc-chip chip-[[index.category]]" role="row">
<div class="mdc-chip__ripple"></div>
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text">[[index.category]]</span>
</span>
</span>
</div>
</zg-column>
<zg-column index="progress" renderer="progressBar">
<div class="progress-wrapper">
<div role="progressbar" class="mdc-linear-progress" aria-valuemin="0" aria-valuemax="1">
<div class="mdc-linear-progress__buffer">
<div class="mdc-linear-progress__buffer-bar"></div>
<div class="mdc-linear-progress__buffer-dots">[[index.progress]]</div>
</div>
</div>
</div>
</zg-column>
</zg-colgroup>
</zing-grid>
<script>
ZingGrid.setLicense(['26ccbfec16b8be9ee98c7d57bee6e498']);
const primaryBar = 'linear-gradient(45deg, #4452B8, #65C7F7, #9CECFB)';
const primaryDot = '#9CECFB';
const secondaryBar = 'linear-gradient( 45deg, #edf6fa, #F6F6F6)';
const secondaryDot = '#F6F6F6';
const dangerBar = 'linear-gradient(45deg, #EA402F, #E25C4E, #E3928A, #E4B0AB)';
const dangerDot = '#E4B0AB';
const infoBar = 'linear-gradient(45deg, #777777, #9E9E9E, #CDCACA)';
const infoDot = '#CDCACA';
const warningBar = 'linear-gradient(45deg, #FCEA1B, #FFF688, #FFF9BA)';
const warningDot = '#FFF9BA';
window.progressBar = function(customIndex, domCell) {
const bar = domCell.querySelector('.mdc-linear-progress__buffer-bar');
const dots = domCell.querySelector('.mdc-linear-progress__buffer-dots');
dots.style.width = `${dots.innerHTML}%`;
const value = dots.innerHTML;
if (value >= 80) {
bar.style.background = dangerBar;
dots.style.backgroundColor = dangerDot;
} else if (value >= 60) {
bar.style.background = secondaryBar;
dots.style.backgroundColor = secondaryDot;
} else if (value >= 40) {
bar.style.background = infoBar;
dots.style.backgroundColor = infoDot;
} else if (value >= 20) {
bar.style.background = warningBar;
dots.style.backgroundColor = warningDot;
} else {
bar.style.background = primaryBar;
dots.style.backgroundColor = primaryDot;
}
};
</script>
</body>
</html>
<!DOCTYPE html>
<html class="zg-html">
<head>
<meta charset="utf-8">
<title>ZingGrid: Blank Grid</title>
<link rel="preconnect" href="https://fonts.gstatic.com">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link href="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.css" rel="stylesheet">
<script src="https://unpkg.com/material-components-web@latest/dist/material-components-web.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
<script src="https://cdn.zinggrid.com/zinggrid.min.js"></script>
</head>
<body class="zg-body">
<!-- Most features can be toggled on the toplevel zing-grid tag -->
<zing-grid caption="Users" theme="zg-bootstrap.css" search pager sorting data='[
{
"first": "Mark",
"last": "Otto",
"username": "@ZTfer",
"category": "primary",
"progress": "12"
},
{
"first": "Jacob",
"last": "Thorton",
"username": "@jacobthorton",
"category": "secondary",
"progress": "62"
},
{
"first": "Duncan",
"last": "Mattheson",
"username": "@dmattheson",
"category": "danger",
"progress": "84"
},
{
"first": "David",
"last": "Jose Perez",
"username": "@djp",
"category": "info",
"progress": "45"
},
{
"first": "Dave",
"last": "Phillipson",
"username": "@phillipson",
"category": "warning",
"progress": "30"
}
]'>
<zg-colgroup>
<zg-column index="first">[[index.first]]</zg-column>
<zg-column index="last">[[index.last]]</zg-column>
<zg-column index="username">[[index.username]]</zg-column>
<zg-column index="category">
<div class="mdc-chip chip-[[index.category]]" role="row">
<div class="mdc-chip__ripple"></div>
<span role="gridcell">
<span role="button" tabindex="0" class="mdc-chip__primary-action">
<span class="mdc-chip__text">[[index.category]]</span>
</span>
</span>
</div>
</zg-column>
<zg-column index="progress" renderer="progressBar">
<div class="progress-wrapper">
<div role="progressbar" class="mdc-linear-progress" aria-valuemin="0" aria-valuemax="1">
<div class="mdc-linear-progress__buffer">
<div class="mdc-linear-progress__buffer-bar"></div>
<div class="mdc-linear-progress__buffer-dots">[[index.progress]]</div>
</div>
</div>
</div>
</zg-column>
</zg-colgroup>
</zing-grid>
</body>
</html>
* {
--md-red: #f44336;
--md-orange: #ff9800;
--md-yellow: #ffeb3b;
--md-green: #4caf50;
--md-blue: #2196f3;
--md-purple: #673ab7;
--md-indigo: #3f51b5;
--md-black: #000;
--md-white: #FFF;
font-family: 'Roboto', sans-serif;
/* BOOTSTRAP COLORS*/
/* Bootstrap 4 has some css variables exposes, mostly colors. */
/* RE-USABLE ZINGGRID VARS
----------------------------------------------------- */
/* BACKGROUND */
--theme-background-color: var(--mdc-theme-background);
--theme-background-zebra: var(--light);
/* BORDER */
--theme-border-color_alt: var(--light);
--theme-border-color_alt2: var(--secondary);
--zg-button-focus: var(--light);
/* COLOR */
--theme-color-primary: var(--md-indigo);
/* FONT */
--zg-caption-color: var(--md-black);
--theme-font-family: initial;
--theme-padding_x: 2rem;
--theme-padding_y: 0.75rem;
/* -------------------------------------------------- */
/* ZG-GRID
----------------------------------------------------- */
/* padding: var(--theme-padding_x) var(--theme-padding_y); */
/* box-sizing: border-box; */
--zing-grid-box-shadow: 0 15px 35px rgba(50, 50, 93, .1), 0 5px 15px rgba(0, 0, 0, .07);
/* ZG-BODY
----------------------------------------------------- */
--zg-body-background: var(--white);
--zg-body-card-background: transparent;
/* Hover */
--zg-row-body-color_even_hover: var(--zg-row-body-color);
--zg-row-body-color_odd_hover: var(--zg-row-body-color);
/* ZG-BUTTON
----------------------------------------------------- */
--zg-button-opacity_disabled: .5;
/* ZG-BUTTON-CUSTOM
----------------------------------------------------- */
--zg-button-background_custom: var(--theme-color-primary);
--zg-button-color: var(--white);
--zg-button-border_custom: none;
--zg-button-box-shadow_custom: none;
--zg-button-border_custom_hover: none;
--zg-button-background_custom_hover: #0069d9;
/* ZG-CAPTION
----------------------------------------------------- */
--zg-caption-background: var(--md-white);
--zg-caption-border-bottom: 0;
--zg-caption-color: var(--md-black);
--zg-caption-icon-color: var(--md-black);
/* ZG-CELL
----------------------------------------------------- */
--zg-cell-background_sorted: rgba(62, 117, 167, .2);
/* ZG-CONTROL-BAR
----------------------------------------------------- */
--zg-control-bar-background: var(--md-white);
--zg-control-bar-border-bottom: 0;
/* ZG-EDITOR_ROW
----------------------------------------------------- */
--zg-editor-row-input-background: var(--md-white);
--zg-editor-row-input-color: var(--md-white);
--zg-editor-row-input-background_focus: #00203d;
--zg-editor-row-input-box-shadow_focus: none;
/* ZG-FILTER
----------------------------------------------------- */
--zg-filter-background: var(--light);
--zg-filter-background_sorted: rgba(62, 117, 167, .2);
--zg-filter-border: none;
/* Input */
--zg-filter-input-height: calc(1.5em + .75rem + 2px);
--zg-filter-input-padding: .375rem .75rem .375rem .375rem;
--zg-filter-input-border-radius: .25rem;
--zg-filter-input-border: 1px solid #ced4da;
--zg-filter-input-background: var(--md-white);
--zg-filter-input-border-width: 1px;
--zg-filter-input-margin: .375rem;
/* ZG-FOCUS
----------------------------------------------------- */
--zg-focus-border: 1px solid #80bdff;
--zg-focus-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
--zg-focus-outline: 0;
--zg-focus-bottom-transform: translateY(1px);
--zg-focus-right-transform: translateX(1px);
/* ZG-HEAD
----------------------------------------------------- */
--zg-head-background: var(--md-white);
/* ZG-MENUITEM
----------------------------------------------------- */
--zg-menu-background: var(--md-black);
/* ZG-INPUT
----------------------------------------------------- */
--zg-input-color: #00549c;
;
--zg-input-border-bottom: 1px solid var(--theme-border-color_alt);
--zg-input-border-left: 1px solid var(--theme-border-color_alt);
--zg-input-border-right: 1px solid var(--theme-border-color_alt);
--zg-input-border-top: 1px solid var(--theme-border-color_alt);
/* ZG-PAGER
----------------------------------------------------- */
--zg-pager-background: transparent;
--zg-pager-border-top: 0;
--zg-pager-card-nonmobile-border-top: 1px solid var(--theme-background-color);
--zg-pager-color: var(--zg-head-cell-color);
/* ZG-ROW
----------------------------------------------------- */
--zg-row-border: 1px solid var(--grey);
/* Card */
--zg-row-card-background: var(--zg-body-background);
/* ZG-SOURCE
----------------------------------------------------- */
--zg-source-background: #fbfbfb;
--zg-source-border-bottom_top: 1px solid #f4f4f4;
--zg-source-border-top_top: 1px solid #f4f4f4;
--zg-source-border-top_bottom: 1px solid #f4f4f4;
--zg-source-color: var(--theme-color-primary);
/* ZG-WATERMARK
----------------------------------------------------- */
--zg-watermark-background: transparent;
--zg-watermark-border-bottom: 0;
--zg-watermark-border-left: 0;
--zg-watermark-border-right: 0;
--zg-watermark-border-top: 0;
--zg-watermark-font-size: 10px;
--zg-watermark-padding: 0 var(--theme-padding_x);
}
.chip-primary {
background: var(--md-indigo);
}
.chip-secondary {
background: var(--md-gray);
}
.chip-success {
background: var(--md-green);
}
.chip-danger {
background: var(--md-red);
}
.chip-warning {
background: var(--md-yellow);
}
.progress-wrapper {
width: 200px;
}
.mdc-linear-progress__buffer-bar {
height: 3px;
}
.mdc-linear-progress__buffer-dots {
height: 3px;
}
const primaryBar = 'linear-gradient(45deg, #4452B8, #65C7F7, #9CECFB)';
const primaryDot = '#9CECFB';
const secondaryBar = 'linear-gradient( 45deg, #edf6fa, #F6F6F6)';
const secondaryDot = '#F6F6F6';
const dangerBar = 'linear-gradient(45deg, #EA402F, #E25C4E, #E3928A, #E4B0AB)';
const dangerDot = '#E4B0AB';
const infoBar = 'linear-gradient(45deg, #777777, #9E9E9E, #CDCACA)';
const infoDot = '#CDCACA';
const warningBar = 'linear-gradient(45deg, #FCEA1B, #FFF688, #FFF9BA)';
const warningDot = '#FFF9BA';
window.progressBar = function(customIndex, domCell) {
const bar = domCell.querySelector('.mdc-linear-progress__buffer-bar');
const dots = domCell.querySelector('.mdc-linear-progress__buffer-dots');
dots.style.width = `${dots.innerHTML}%`;
const value = dots.innerHTML;
if (value >= 80) {
bar.style.background = dangerBar;
dots.style.backgroundColor = dangerDot;
} else if (value >= 60) {
bar.style.background = secondaryBar;
dots.style.backgroundColor = secondaryDot;
} else if (value >= 40) {
bar.style.background = infoBar;
dots.style.backgroundColor = infoDot;
} else if (value >= 20) {
bar.style.background = warningBar;
dots.style.backgroundColor = warningDot;
} else {
bar.style.background = primaryBar;
dots.style.backgroundColor = primaryDot;
}
};