Merge branch 'ui-refacto2' into develop-unstable
commit
f4eb5da49d
|
@ -13,7 +13,7 @@ $routes->plugin(
|
||||||
['controller' => 'Tags']
|
['controller' => 'Tags']
|
||||||
);
|
);
|
||||||
|
|
||||||
// $routes->get('/', ['controller' => 'Tags']);
|
$routes->get('/', ['controller' => 'Tags', 'action' => 'index']);
|
||||||
// $routes->get('/{id}', ['controller' => 'Tags', 'action' => 'view']);
|
// $routes->get('/{id}', ['controller' => 'Tags', 'action' => 'view']);
|
||||||
// $routes->put('/{id}', ['controller' => 'Tags', 'action' => 'edit']);
|
// $routes->put('/{id}', ['controller' => 'Tags', 'action' => 'edit']);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,9 @@ class InstanceController extends AppController
|
||||||
|
|
||||||
public function home()
|
public function home()
|
||||||
{
|
{
|
||||||
$this->set('md', file_get_contents(ROOT . '/README.md'));
|
// $this->set('md', file_get_contents(ROOT . '/README.md'));
|
||||||
|
$statistics = $this->Instance->getStatistics();
|
||||||
|
$this->set('statistics', $statistics);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function status()
|
public function status()
|
||||||
|
|
|
@ -4,6 +4,7 @@ namespace App\Model\Table;
|
||||||
|
|
||||||
use App\Model\Table\AppTable;
|
use App\Model\Table\AppTable;
|
||||||
use Cake\ORM\Table;
|
use Cake\ORM\Table;
|
||||||
|
use Cake\ORM\TableRegistry;
|
||||||
use Cake\Validation\Validator;
|
use Cake\Validation\Validator;
|
||||||
use Migrations\Migrations;
|
use Migrations\Migrations;
|
||||||
|
|
||||||
|
@ -21,6 +22,47 @@ class InstanceTable extends AppTable
|
||||||
return $validator;
|
return $validator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function getStatistics($days=7): array
|
||||||
|
{
|
||||||
|
$models = ['Individuals', 'Organisations', 'Alignments', 'EncryptionKeys', 'SharingGroups', 'Users', 'Tags.Tags'];
|
||||||
|
foreach ($models as $model) {
|
||||||
|
$table = TableRegistry::getTableLocator()->get($model);
|
||||||
|
$statistics[$model]['amount'] = $table->find()->all()->count();
|
||||||
|
if ($table->behaviors()->has('Timestamp')) {
|
||||||
|
$query = $table->find();
|
||||||
|
$query->select([
|
||||||
|
'count' => $query->func()->count('id'),
|
||||||
|
'date' => 'DATE(modified)',
|
||||||
|
])
|
||||||
|
->where(['modified >' => new \DateTime("-{$days} days")])
|
||||||
|
->group(['date'])
|
||||||
|
->order(['date']);
|
||||||
|
$data = $query->toArray();
|
||||||
|
$interval = new \DateInterval('P1D');
|
||||||
|
$period = new \DatePeriod(new \DateTime("-{$days} days"), $interval ,new \DateTime());
|
||||||
|
$timeline = [];
|
||||||
|
foreach($period as $date){
|
||||||
|
$timeline[$date->format("Y-m-d")] = [
|
||||||
|
'time' => $date->format("Y-m-d"),
|
||||||
|
'count' => 0
|
||||||
|
];
|
||||||
|
}
|
||||||
|
foreach ($data as $entry) {
|
||||||
|
$timeline[$entry->date]['count'] = $entry->count;
|
||||||
|
}
|
||||||
|
$statistics[$model]['timeline'] = array_values($timeline);
|
||||||
|
|
||||||
|
$startCount = $table->find()->where(['modified <' => new \DateTime("-{$days} days")])->all()->count();
|
||||||
|
$endCount = $statistics[$model]['amount'];
|
||||||
|
$statistics[$model]['variation'] = $endCount - $startCount;
|
||||||
|
} else {
|
||||||
|
$statistics[$model]['timeline'] = [];
|
||||||
|
$statistics[$model]['variation'] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $statistics;
|
||||||
|
}
|
||||||
|
|
||||||
public function getMigrationStatus()
|
public function getMigrationStatus()
|
||||||
{
|
{
|
||||||
$migrations = new Migrations();
|
$migrations = new Migrations();
|
||||||
|
|
|
@ -1177,6 +1177,7 @@ class BoostrapCard extends BootstrapGeneric
|
||||||
'headerHTML' => '',
|
'headerHTML' => '',
|
||||||
'footerHTML' => '',
|
'footerHTML' => '',
|
||||||
'bodyHTML' => '',
|
'bodyHTML' => '',
|
||||||
|
'class' => '',
|
||||||
'headerClass' => '',
|
'headerClass' => '',
|
||||||
'bodyClass' => '',
|
'bodyClass' => '',
|
||||||
'footerClass' => '',
|
'footerClass' => '',
|
||||||
|
@ -1208,6 +1209,7 @@ class BoostrapCard extends BootstrapGeneric
|
||||||
'card',
|
'card',
|
||||||
!empty($this->options['variant']) ? "bg-{$this->options['variant']}" : '',
|
!empty($this->options['variant']) ? "bg-{$this->options['variant']}" : '',
|
||||||
!empty($this->options['variant']) ? $this->getTextClassForVariant($this->options['variant']) : '',
|
!empty($this->options['variant']) ? $this->getTextClassForVariant($this->options['variant']) : '',
|
||||||
|
h($this->options['class']),
|
||||||
],
|
],
|
||||||
], implode('', [$this->genHeader(), $this->genBody(), $this->genFooter()]));
|
], implode('', [$this->genHeader(), $this->genBody(), $this->genFooter()]));
|
||||||
return $card;
|
return $card;
|
||||||
|
|
|
@ -1,3 +1,30 @@
|
||||||
<?php
|
<?php
|
||||||
$Parsedown = new Parsedown();
|
// $Parsedown = new Parsedown();
|
||||||
echo $Parsedown->text($md);
|
// echo $Parsedown->text($md);
|
||||||
|
?>
|
||||||
|
|
||||||
|
<h2><?= __('Home') ?></h2>
|
||||||
|
<div class="row">
|
||||||
|
<?php foreach ($statistics as $modelName => $statistics): ?>
|
||||||
|
<div class="col-sm-6 col-md-4 col-l-3 col-xl-2 mb-2">
|
||||||
|
<?php
|
||||||
|
$exploded = explode('.', $modelName);
|
||||||
|
$modelForDisplay = $exploded[count($exploded)-1];
|
||||||
|
$panelTitle = $this->Html->link(
|
||||||
|
h($modelForDisplay),
|
||||||
|
$this->Url->build([
|
||||||
|
'controller' => $modelForDisplay,
|
||||||
|
'action' => 'index',
|
||||||
|
]),
|
||||||
|
['class' => 'text-white']
|
||||||
|
);
|
||||||
|
echo $this->element('widgets/highlight-panel', [
|
||||||
|
'titleHtml' => $panelTitle,
|
||||||
|
'number' => $statistics['amount'],
|
||||||
|
'variation' => $statistics['variation'] ?? '',
|
||||||
|
'chartData' => $statistics['timeline'] ?? []
|
||||||
|
]);
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
<?php endforeach ?>
|
||||||
|
</div>
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$chartOptions = $chartOptions ?? [];
|
||||||
|
$chartData = $chartData ?? [];
|
||||||
|
$seed = mt_rand();
|
||||||
|
$chartId = "chart-{$seed}";
|
||||||
|
|
||||||
|
// Transform the chart data into the expected format
|
||||||
|
$data = [];
|
||||||
|
foreach ($chartData as $i => $entry) {
|
||||||
|
$data[] = $entry['count'];
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<div id="<?= $chartId ?>"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
$(document).ready(function() {
|
||||||
|
const passedOptions = <?= json_encode($chartOptions) ?>;
|
||||||
|
const defaultOptions = {
|
||||||
|
chart: {
|
||||||
|
id: '<?= $chartId ?>',
|
||||||
|
type: 'bar',
|
||||||
|
sparkline: {
|
||||||
|
enabled: true
|
||||||
|
},
|
||||||
|
dropShadow: {
|
||||||
|
enabled: true,
|
||||||
|
top: 1,
|
||||||
|
left: 1,
|
||||||
|
blur: 2,
|
||||||
|
opacity: 0.2,
|
||||||
|
},
|
||||||
|
animations: {
|
||||||
|
enabled: false
|
||||||
|
},
|
||||||
|
},
|
||||||
|
series: [{
|
||||||
|
data: <?= json_encode($data) ?>,
|
||||||
|
}],
|
||||||
|
colors: ['var(--success)'],
|
||||||
|
tooltip: {
|
||||||
|
x: {
|
||||||
|
show: false
|
||||||
|
},
|
||||||
|
y: {
|
||||||
|
title: {
|
||||||
|
formatter: function formatter(val) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
theme: '<?= !empty($darkMode) ? 'dark' : 'light' ?>'
|
||||||
|
},
|
||||||
|
}
|
||||||
|
const chartOptions = Object.assign({}, defaultOptions, passedOptions)
|
||||||
|
new ApexCharts(document.querySelector('#<?= $chartId ?>'), chartOptions).render();
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.apexcharts-tooltip.apexcharts-theme-light {
|
||||||
|
color: black !important
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<?php
|
||||||
|
$variationIcon = '';
|
||||||
|
$variationClass = '';
|
||||||
|
if ($variation == 0) {
|
||||||
|
$variationIcon = 'minus';
|
||||||
|
} elseif ($variation > 0) {
|
||||||
|
$variationIcon = 'arrow-up';
|
||||||
|
$variationClass = 'text-success';
|
||||||
|
} else {
|
||||||
|
$variationIcon = 'arrow-down';
|
||||||
|
$variationClass = 'text-danger';
|
||||||
|
}
|
||||||
|
|
||||||
|
$variationHtml = sprintf('<div class="%s"><span class="%s mr-2"></span>%s</div>',
|
||||||
|
$variationClass,
|
||||||
|
$this->FontAwesome->getClass($variationIcon),
|
||||||
|
!empty($variation) ? h($variation) : ''
|
||||||
|
);
|
||||||
|
|
||||||
|
$titleHtml = isset($title) ? h($title) : ($titleHtml ?? '');
|
||||||
|
$leftContent = sprintf('<div class="">%s</div><h2 class="my-2">%s</h2>%s',
|
||||||
|
$titleHtml,
|
||||||
|
h($number ?? ''),
|
||||||
|
$variationHtml
|
||||||
|
);
|
||||||
|
$rightContent = sprintf('<div class="">%s</div>', $this->element('charts/bar', [
|
||||||
|
'chartData' => $chartData
|
||||||
|
]));
|
||||||
|
|
||||||
|
$cardContent = sprintf('<div class="highlight-panel-container d-flex align-items-center justify-content-between"><div class="number-container">%s</div><div class="chart-container w-50">%s</div></div>', $leftContent, $rightContent);
|
||||||
|
|
||||||
|
echo $this->Bootstrap->card([
|
||||||
|
'variant' => 'secondary',
|
||||||
|
'bodyHTML' => $cardContent,
|
||||||
|
'bodyClass' => 'p-3'
|
||||||
|
]);
|
||||||
|
|
||||||
|
?>
|
|
@ -56,6 +56,9 @@ $cakeDescription = 'Cerebrate';
|
||||||
<?= $this->Html->css('CodeMirror/addon/lint/lint') ?>
|
<?= $this->Html->css('CodeMirror/addon/lint/lint') ?>
|
||||||
<?= $this->Html->css('select2.min') ?>
|
<?= $this->Html->css('select2.min') ?>
|
||||||
<?= $this->Html->css('select2-bootstrap4.min') ?>
|
<?= $this->Html->css('select2-bootstrap4.min') ?>
|
||||||
|
<?= $this->Html->script('apexcharts.min') ?>
|
||||||
|
<?= $this->Html->css('apexcharts') ?>
|
||||||
|
|
||||||
<?= $this->fetch('meta') ?>
|
<?= $this->fetch('meta') ?>
|
||||||
<?= $this->fetch('css') ?>
|
<?= $this->fetch('css') ?>
|
||||||
<?= $this->fetch('script') ?>
|
<?= $this->fetch('script') ?>
|
||||||
|
|
|
@ -0,0 +1,687 @@
|
||||||
|
.apexcharts-canvas {
|
||||||
|
position: relative;
|
||||||
|
user-select: none;
|
||||||
|
/* cannot give overflow: hidden as it will crop tooltips which overflow outside chart area */
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* scrollbar is not visible by default for legend, hence forcing the visibility */
|
||||||
|
.apexcharts-canvas ::-webkit-scrollbar {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
width: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-canvas ::-webkit-scrollbar-thumb {
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgba(0, 0, 0, .5);
|
||||||
|
box-shadow: 0 0 1px rgba(255, 255, 255, .5);
|
||||||
|
-webkit-box-shadow: 0 0 1px rgba(255, 255, 255, .5);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.apexcharts-inner {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-text tspan {
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
.legend-mouseover-inactive {
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
opacity: 0.20;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-series-collapsed {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip {
|
||||||
|
border-radius: 5px;
|
||||||
|
box-shadow: 2px 2px 6px -4px #999;
|
||||||
|
cursor: default;
|
||||||
|
font-size: 14px;
|
||||||
|
left: 62px;
|
||||||
|
opacity: 0;
|
||||||
|
pointer-events: none;
|
||||||
|
position: absolute;
|
||||||
|
top: 20px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
overflow: hidden;
|
||||||
|
white-space: nowrap;
|
||||||
|
z-index: 12;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip.apexcharts-active {
|
||||||
|
opacity: 1;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip.apexcharts-theme-light {
|
||||||
|
border: 1px solid #e3e3e3;
|
||||||
|
background: rgba(255, 255, 255, 0.96);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip.apexcharts-theme-dark {
|
||||||
|
color: #fff;
|
||||||
|
background: rgba(30, 30, 30, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip * {
|
||||||
|
font-family: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.apexcharts-tooltip-title {
|
||||||
|
padding: 6px;
|
||||||
|
font-size: 15px;
|
||||||
|
margin-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip.apexcharts-theme-light .apexcharts-tooltip-title {
|
||||||
|
background: #ECEFF1;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip.apexcharts-theme-dark .apexcharts-tooltip-title {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
border-bottom: 1px solid #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-text-y-value,
|
||||||
|
.apexcharts-tooltip-text-goals-value,
|
||||||
|
.apexcharts-tooltip-text-z-value {
|
||||||
|
display: inline-block;
|
||||||
|
font-weight: 600;
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-text-y-label:empty,
|
||||||
|
.apexcharts-tooltip-text-y-value:empty,
|
||||||
|
.apexcharts-tooltip-text-goals-label:empty,
|
||||||
|
.apexcharts-tooltip-text-goals-value:empty,
|
||||||
|
.apexcharts-tooltip-text-z-value:empty {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-text-y-value,
|
||||||
|
.apexcharts-tooltip-text-goals-value,
|
||||||
|
.apexcharts-tooltip-text-z-value {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-text-goals-label,
|
||||||
|
.apexcharts-tooltip-text-goals-value {
|
||||||
|
padding: 6px 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-goals-group,
|
||||||
|
.apexcharts-tooltip-text-goals-label,
|
||||||
|
.apexcharts-tooltip-text-goals-value {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
.apexcharts-tooltip-text-goals-label:not(:empty),
|
||||||
|
.apexcharts-tooltip-text-goals-value:not(:empty) {
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-marker {
|
||||||
|
width: 12px;
|
||||||
|
height: 12px;
|
||||||
|
position: relative;
|
||||||
|
top: 0px;
|
||||||
|
margin-right: 10px;
|
||||||
|
border-radius: 50%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-series-group {
|
||||||
|
padding: 0 10px;
|
||||||
|
display: none;
|
||||||
|
text-align: left;
|
||||||
|
justify-content: left;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-series-group.apexcharts-active .apexcharts-tooltip-marker {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-series-group.apexcharts-active,
|
||||||
|
.apexcharts-tooltip-series-group:last-child {
|
||||||
|
padding-bottom: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-series-group-hidden {
|
||||||
|
opacity: 0;
|
||||||
|
height: 0;
|
||||||
|
line-height: 0;
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-y-group {
|
||||||
|
padding: 6px 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-box, .apexcharts-custom-tooltip {
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-boxPlot {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-box>div {
|
||||||
|
margin: 4px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-box span.value {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-rangebar {
|
||||||
|
padding: 5px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-rangebar .category {
|
||||||
|
font-weight: 600;
|
||||||
|
color: #777;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-tooltip-rangebar .series-name {
|
||||||
|
font-weight: bold;
|
||||||
|
display: block;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip {
|
||||||
|
opacity: 0;
|
||||||
|
padding: 9px 10px;
|
||||||
|
pointer-events: none;
|
||||||
|
color: #373d3f;
|
||||||
|
font-size: 13px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 2px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
background: #ECEFF1;
|
||||||
|
border: 1px solid #90A4AE;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip.apexcharts-theme-dark {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip:after,
|
||||||
|
.apexcharts-xaxistooltip:before {
|
||||||
|
left: 50%;
|
||||||
|
border: solid transparent;
|
||||||
|
content: " ";
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip:after {
|
||||||
|
border-color: rgba(236, 239, 241, 0);
|
||||||
|
border-width: 6px;
|
||||||
|
margin-left: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip:before {
|
||||||
|
border-color: rgba(144, 164, 174, 0);
|
||||||
|
border-width: 7px;
|
||||||
|
margin-left: -7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-bottom:after,
|
||||||
|
.apexcharts-xaxistooltip-bottom:before {
|
||||||
|
bottom: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-top:after,
|
||||||
|
.apexcharts-xaxistooltip-top:before {
|
||||||
|
top: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-bottom:after {
|
||||||
|
border-bottom-color: #ECEFF1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-bottom:before {
|
||||||
|
border-bottom-color: #90A4AE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:after {
|
||||||
|
border-bottom-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-bottom.apexcharts-theme-dark:before {
|
||||||
|
border-bottom-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-top:after {
|
||||||
|
border-top-color: #ECEFF1
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-top:before {
|
||||||
|
border-top-color: #90A4AE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-top.apexcharts-theme-dark:after {
|
||||||
|
border-top-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip-top.apexcharts-theme-dark:before {
|
||||||
|
border-top-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xaxistooltip.apexcharts-active {
|
||||||
|
opacity: 1;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip {
|
||||||
|
opacity: 0;
|
||||||
|
padding: 4px 10px;
|
||||||
|
pointer-events: none;
|
||||||
|
color: #373d3f;
|
||||||
|
font-size: 13px;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 2px;
|
||||||
|
position: absolute;
|
||||||
|
z-index: 10;
|
||||||
|
background: #ECEFF1;
|
||||||
|
border: 1px solid #90A4AE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip.apexcharts-theme-dark {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
border: 1px solid rgba(0, 0, 0, 0.5);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip:after,
|
||||||
|
.apexcharts-yaxistooltip:before {
|
||||||
|
top: 50%;
|
||||||
|
border: solid transparent;
|
||||||
|
content: " ";
|
||||||
|
height: 0;
|
||||||
|
width: 0;
|
||||||
|
position: absolute;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip:after {
|
||||||
|
border-color: rgba(236, 239, 241, 0);
|
||||||
|
border-width: 6px;
|
||||||
|
margin-top: -6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip:before {
|
||||||
|
border-color: rgba(144, 164, 174, 0);
|
||||||
|
border-width: 7px;
|
||||||
|
margin-top: -7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-left:after,
|
||||||
|
.apexcharts-yaxistooltip-left:before {
|
||||||
|
left: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-right:after,
|
||||||
|
.apexcharts-yaxistooltip-right:before {
|
||||||
|
right: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-left:after {
|
||||||
|
border-left-color: #ECEFF1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-left:before {
|
||||||
|
border-left-color: #90A4AE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-left.apexcharts-theme-dark:after {
|
||||||
|
border-left-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-left.apexcharts-theme-dark:before {
|
||||||
|
border-left-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-right:after {
|
||||||
|
border-right-color: #ECEFF1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-right:before {
|
||||||
|
border-right-color: #90A4AE;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-right.apexcharts-theme-dark:after {
|
||||||
|
border-right-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-right.apexcharts-theme-dark:before {
|
||||||
|
border-right-color: rgba(0, 0, 0, 0.5);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip.apexcharts-active {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-yaxistooltip-hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xcrosshairs,
|
||||||
|
.apexcharts-ycrosshairs {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-xcrosshairs.apexcharts-active,
|
||||||
|
.apexcharts-ycrosshairs.apexcharts-active {
|
||||||
|
opacity: 1;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-ycrosshairs-hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-selection-rect {
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg_select_boundingRect, .svg_select_points_rot {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
.apexcharts-selection-rect + g .svg_select_boundingRect,
|
||||||
|
.apexcharts-selection-rect + g .svg_select_points_rot {
|
||||||
|
opacity: 0;
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-selection-rect + g .svg_select_points_l,
|
||||||
|
.apexcharts-selection-rect + g .svg_select_points_r {
|
||||||
|
cursor: ew-resize;
|
||||||
|
opacity: 1;
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
.svg_select_points {
|
||||||
|
fill: #efefef;
|
||||||
|
stroke: #333;
|
||||||
|
rx: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-svg.apexcharts-zoomable.hovering-zoom {
|
||||||
|
cursor: crosshair
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-svg.apexcharts-zoomable.hovering-pan {
|
||||||
|
cursor: move
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-zoom-icon,
|
||||||
|
.apexcharts-zoomin-icon,
|
||||||
|
.apexcharts-zoomout-icon,
|
||||||
|
.apexcharts-reset-icon,
|
||||||
|
.apexcharts-pan-icon,
|
||||||
|
.apexcharts-selection-icon,
|
||||||
|
.apexcharts-menu-icon,
|
||||||
|
.apexcharts-toolbar-custom-icon {
|
||||||
|
cursor: pointer;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
line-height: 24px;
|
||||||
|
color: #6E8192;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-zoom-icon svg,
|
||||||
|
.apexcharts-zoomin-icon svg,
|
||||||
|
.apexcharts-zoomout-icon svg,
|
||||||
|
.apexcharts-reset-icon svg,
|
||||||
|
.apexcharts-menu-icon svg {
|
||||||
|
fill: #6E8192;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-selection-icon svg {
|
||||||
|
fill: #444;
|
||||||
|
transform: scale(0.76)
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-theme-dark .apexcharts-zoom-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-zoomin-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-zoomout-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-reset-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-pan-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-selection-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-menu-icon svg,
|
||||||
|
.apexcharts-theme-dark .apexcharts-toolbar-custom-icon svg {
|
||||||
|
fill: #f3f4f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-canvas .apexcharts-zoom-icon.apexcharts-selected svg,
|
||||||
|
.apexcharts-canvas .apexcharts-selection-icon.apexcharts-selected svg,
|
||||||
|
.apexcharts-canvas .apexcharts-reset-zoom-icon.apexcharts-selected svg {
|
||||||
|
fill: #008FFB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-theme-light .apexcharts-selection-icon:not(.apexcharts-selected):hover svg,
|
||||||
|
.apexcharts-theme-light .apexcharts-zoom-icon:not(.apexcharts-selected):hover svg,
|
||||||
|
.apexcharts-theme-light .apexcharts-zoomin-icon:hover svg,
|
||||||
|
.apexcharts-theme-light .apexcharts-zoomout-icon:hover svg,
|
||||||
|
.apexcharts-theme-light .apexcharts-reset-icon:hover svg,
|
||||||
|
.apexcharts-theme-light .apexcharts-menu-icon:hover svg {
|
||||||
|
fill: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-selection-icon,
|
||||||
|
.apexcharts-menu-icon {
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-reset-icon {
|
||||||
|
margin-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-zoom-icon,
|
||||||
|
.apexcharts-reset-icon,
|
||||||
|
.apexcharts-menu-icon {
|
||||||
|
transform: scale(0.85);
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-zoomin-icon,
|
||||||
|
.apexcharts-zoomout-icon {
|
||||||
|
transform: scale(0.7)
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-zoomout-icon {
|
||||||
|
margin-right: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pan-icon {
|
||||||
|
transform: scale(0.62);
|
||||||
|
position: relative;
|
||||||
|
left: 1px;
|
||||||
|
top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pan-icon svg {
|
||||||
|
fill: #fff;
|
||||||
|
stroke: #6E8192;
|
||||||
|
stroke-width: 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pan-icon.apexcharts-selected svg {
|
||||||
|
stroke: #008FFB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pan-icon:not(.apexcharts-selected):hover svg {
|
||||||
|
stroke: #333;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-toolbar {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 11;
|
||||||
|
max-width: 176px;
|
||||||
|
text-align: right;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 0px 6px 2px 6px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-menu {
|
||||||
|
background: #fff;
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
border: 1px solid #ddd;
|
||||||
|
border-radius: 3px;
|
||||||
|
padding: 3px;
|
||||||
|
right: 10px;
|
||||||
|
opacity: 0;
|
||||||
|
min-width: 110px;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-menu.apexcharts-menu-open {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: all;
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-menu-item {
|
||||||
|
padding: 6px 7px;
|
||||||
|
font-size: 12px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-theme-light .apexcharts-menu-item:hover {
|
||||||
|
background: #eee;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-theme-dark .apexcharts-menu {
|
||||||
|
background: rgba(0, 0, 0, 0.7);
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 768px) {
|
||||||
|
.apexcharts-canvas:hover .apexcharts-toolbar {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-datalabel.apexcharts-element-hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pie-label,
|
||||||
|
.apexcharts-datalabels,
|
||||||
|
.apexcharts-datalabel,
|
||||||
|
.apexcharts-datalabel-label,
|
||||||
|
.apexcharts-datalabel-value {
|
||||||
|
cursor: default;
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-pie-label-delay {
|
||||||
|
opacity: 0;
|
||||||
|
animation-name: opaque;
|
||||||
|
animation-duration: 0.3s;
|
||||||
|
animation-fill-mode: forwards;
|
||||||
|
animation-timing-function: ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-canvas .apexcharts-element-hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-hide .apexcharts-series-points {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.apexcharts-gridline,
|
||||||
|
.apexcharts-annotation-rect,
|
||||||
|
.apexcharts-tooltip .apexcharts-marker,
|
||||||
|
.apexcharts-area-series .apexcharts-area,
|
||||||
|
.apexcharts-line,
|
||||||
|
.apexcharts-zoom-rect,
|
||||||
|
.apexcharts-toolbar svg,
|
||||||
|
.apexcharts-area-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,
|
||||||
|
.apexcharts-line-series .apexcharts-series-markers .apexcharts-marker.no-pointer-events,
|
||||||
|
.apexcharts-radar-series path,
|
||||||
|
.apexcharts-radar-series polygon {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* markers */
|
||||||
|
|
||||||
|
.apexcharts-marker {
|
||||||
|
transition: 0.15s ease all;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes opaque {
|
||||||
|
0% {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
100% {
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Resize generated styles */
|
||||||
|
|
||||||
|
@keyframes resizeanim {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-triggers {
|
||||||
|
animation: 1ms resizeanim;
|
||||||
|
visibility: hidden;
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-triggers,
|
||||||
|
.resize-triggers>div,
|
||||||
|
.contract-trigger:before {
|
||||||
|
content: " ";
|
||||||
|
display: block;
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
height: 100%;
|
||||||
|
width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.resize-triggers>div {
|
||||||
|
background: #eee;
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contract-trigger:before {
|
||||||
|
width: 200%;
|
||||||
|
height: 200%;
|
||||||
|
}
|
|
@ -1,3 +1,7 @@
|
||||||
|
:root {
|
||||||
|
--cerebrate: #924da6;
|
||||||
|
}
|
||||||
|
|
||||||
.pagination li.page-item > a.page-link > .ellipsis {
|
.pagination li.page-item > a.page-link > .ellipsis {
|
||||||
line-height: 12px;
|
line-height: 12px;
|
||||||
vertical-align: top;
|
vertical-align: top;
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue