This commit is contained in:
Dr Masroor Ehsan 2025-01-04 13:37:22 +06:00
parent 394d3eea0a
commit 3e5d54eac8
41 changed files with 3071 additions and 0 deletions

View File

@ -0,0 +1 @@
@import 'animate.css/animate';

View File

@ -0,0 +1,7 @@
import AOS from 'aos/dist/aos';
try {
window.AOS = AOS;
} catch (e) {}
export { AOS };

View File

@ -0,0 +1 @@
@import 'aos/dist/aos';

View File

@ -0,0 +1,171 @@
/**
* Apex Charts
*/
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
@import 'apexcharts-clevision/dist/apexcharts';
// Light style
@if $enable-light-style {
.light-style {
.apexcharts-canvas {
.apexcharts-tooltip {
background: light.$card-bg;
border-color: light.$border-color;
box-shadow: light.$box-shadow;
.apexcharts-tooltip-title {
background: light.$card-bg;
border-color: light.$border-color;
font-family: light.$font-family-base !important;
}
&.apexcharts-theme-light {
color: light.$headings-color;
}
&.apexcharts-theme-dark {
color: light.$white;
}
.apexcharts-tooltip-title {
font-weight: light.$headings-font-weight;
}
}
.apexcharts-xaxistooltip,
.apexcharts-yaxistooltip {
background: light.$body-bg;
border-color: light.$border-color;
color: light.$headings-color;
&.apexcharts-xaxistooltip-bottom,
&.apexcharts-yaxistooltip-bottom {
&:after {
border-bottom-color: light.$body-bg;
}
&:before {
border-bottom-color: light.$border-color;
}
}
&.apexcharts-xaxistooltip-left,
&.apexcharts-yaxistooltip-left {
&:after {
border-left-color: light.$body-bg;
}
&:before {
border-left-color: light.$border-color;
}
}
&.apexcharts-xaxistooltip-right,
&.apexcharts-yaxistooltip-right {
&:after {
border-right-color: light.$body-bg;
}
&:before {
border-right-color: light.$border-color;
}
}
&.apexcharts-xaxistooltip-top,
&.apexcharts-yaxistooltip-top {
&:after {
border-top-color: light.$body-bg;
}
&:before {
border-top-color: light.$border-color;
}
}
}
.apexcharts-tooltip-text {
font-family: light.$font-family-base !important;
filter: none;
}
}
}
}
// Dark Style
@if $enable-dark-style {
.dark-style {
#radarChart {
.apexcharts-canvas {
.apexcharts-grid line {
opacity: 0;
}
}
}
.apexcharts-canvas {
.apexcharts-tooltip {
background: dark.$body-bg;
border-color: dark.$border-color;
box-shadow: dark.$box-shadow;
.apexcharts-tooltip-title {
background: dark.$body-bg;
border-color: dark.$border-color;
font-family: dark.$font-family-base !important;
}
&.apexcharts-theme-light {
color: dark.$headings-color;
}
&.apexcharts-theme-dark {
color: dark.$white;
}
.apexcharts-tooltip-title {
font-weight: dark.$headings-font-weight;
}
}
.apexcharts-xaxistooltip,
.apexcharts-yaxistooltip {
background: dark.$body-bg;
color: dark.$headings-color;
border-color: dark.$border-color;
&.apexcharts-xaxistooltip-bottom,
&.apexcharts-yaxistooltip-bottom {
&:after {
border-bottom-color: dark.$body-bg;
}
&:before {
border-bottom-color: dark.$border-color;
}
}
&.apexcharts-xaxistooltip-left,
&.apexcharts-yaxistooltip-left {
&:after {
border-left-color: dark.$body-bg;
}
&:before {
border-left-color: dark.$border-color;
}
}
&.apexcharts-xaxistooltip-right,
&.apexcharts-yaxistooltip-right {
&:after {
border-right-color: dark.$body-bg;
}
&:before {
border-right-color: dark.$border-color;
}
}
&.apexcharts-xaxistooltip-top,
&.apexcharts-yaxistooltip-top {
&:after {
border-top-color: dark.$body-bg;
}
&:before {
border-top-color: dark.$border-color;
}
}
}
}
}
}
// RTL
@include app-rtl(false) {
.apexcharts-canvas {
.apexcharts-yaxis {
text {
text-anchor: start;
}
}
.apexcharts-legend-marker,
.apexcharts-tooltip-marker {
margin-right: 0;
margin-left: 0.5rem;
}
}
}

View File

@ -0,0 +1,7 @@
import ApexCharts from 'apexcharts-clevision';
try {
window.ApexCharts = ApexCharts;
} catch (e) {}
export { ApexCharts };

View File

@ -0,0 +1,5 @@
@mixin dropzone-theme($border) {
.dropzone.dz-drag-hover {
border-color: $border !important;
}
}

View File

@ -0,0 +1,56 @@
import Dropzone from 'dropzone/dist/dropzone';
Dropzone.autoDiscover = false;
// File upload progress animation
Dropzone.prototype.uploadFiles = function (files) {
const minSteps = 6;
const maxSteps = 60;
const timeBetweenSteps = 100;
const bytesPerStep = 100000;
const isUploadSuccess = true;
const self = this;
for (let i = 0; i < files.length; i++) {
const file = files[i];
const totalSteps = Math.round(Math.min(maxSteps, Math.max(minSteps, file.size / bytesPerStep)));
for (let step = 0; step < totalSteps; step++) {
const duration = timeBetweenSteps * (step + 1);
setTimeout(
(function (file, totalSteps, step) {
return function () {
file.upload = {
progress: (100 * (step + 1)) / totalSteps,
total: file.size,
bytesSent: ((step + 1) * file.size) / totalSteps
};
self.emit('uploadprogress', file, file.upload.progress, file.upload.bytesSent);
if (file.upload.progress === 100) {
if (isUploadSuccess) {
file.status = Dropzone.SUCCESS;
self.emit('success', file, 'success', null);
} else {
file.status = Dropzone.ERROR;
self.emit('error', file, 'Some upload error', null);
}
self.emit('complete', file);
self.processQueue();
}
};
})(file, totalSteps, step),
duration
);
}
}
};
try {
window.Dropzone = Dropzone;
} catch (e) {}
export { Dropzone };

View File

@ -0,0 +1,423 @@
// Dropzone
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
$dz-box-padding: 1.25rem !default;
$dz-icon-size: 1.875rem !default;
$dz-thumbnail-width: 10rem !default;
$dz-thumbnail-height: 7.5rem !default;
$dz-preview-padding: 0.625rem !default;
$dz-progress-height: 0.5rem !default;
$dz-icon-block-size: 3.75rem !default;
// common styles
.dropzone {
width: 100%;
position: relative;
cursor: pointer;
border-radius: light.$border-radius-lg;
padding-bottom: 1rem;
// Disabled
&:not(.dz-clickable) {
opacity: 0.5;
cursor: not-allowed;
}
// Hover
&.dz-drag-hover {
border-style: solid;
.dz-message {
opacity: 0.5;
}
}
}
.dz-message {
font-size: light.$h4-font-size;
line-height: light.$h4-line-height;
.note {
font-size: light.$font-size-base;
line-height: light.$line-height-base;
}
}
// Fallback
.dz-browser-not-supported {
&.dropzone-box {
min-height: auto !important;
border: none !important;
border-radius: 0 !important;
padding: 0 !important;
width: auto !important;
cursor: default !important;
transition: none;
}
.dz-message {
display: none !important;
}
}
// Default message
.dz-started .dz-message {
display: none;
}
.dz-message {
margin: 5rem 0;
font-weight: light.$font-weight-medium;
text-align: center;
.note {
display: block;
margin-top: 0.5rem;
font-weight: light.$font-weight-normal;
}
}
// Preview
.dz-preview {
position: relative;
vertical-align: top;
margin-left: 1rem;
margin-top: 1rem;
background: #fff;
font-size: 0.8125rem;
box-sizing: content-box;
cursor: default;
@include light.media-breakpoint-down(sm) {
margin: $dz-box-padding - 0.5;
}
}
// File information
.dz-filename {
position: absolute;
width: 100%;
overflow: hidden;
padding: $dz-preview-padding $dz-preview-padding 0 $dz-preview-padding;
background: #fff;
white-space: nowrap;
text-overflow: ellipsis;
&:hover {
white-space: normal;
text-overflow: inherit;
}
}
.dz-size {
padding: 1.875rem $dz-preview-padding $dz-preview-padding $dz-preview-padding;
font-size: 0.6875rem;
font-style: italic;
}
// Progressbar
.dz-preview .progress,
.dz-preview .progess-bar {
height: $dz-progress-height;
}
.dz-preview .progress {
position: absolute;
left: 1.25rem;
right: 1.25rem;
top: 50%;
margin-top: -$dz-progress-height * 0.5;
z-index: 30;
}
.dz-complete .progress {
display: none;
}
// Thumbnail
.dz-thumbnail {
position: relative;
padding: $dz-preview-padding;
height: $dz-thumbnail-height;
text-align: center;
box-sizing: content-box;
> img,
.dz-nopreview {
top: 50%;
position: relative;
transform: translateY(-50%) scale(1);
margin: 0 auto;
display: block;
}
> img {
max-height: 100%;
max-width: 100%;
}
}
.dz-nopreview {
font-weight: light.$font-weight-medium;
text-transform: uppercase;
font-size: 0.6875rem;
}
.dz-thumbnail img[src] ~ .dz-nopreview {
display: none;
}
// Remove link
.dz-remove {
display: block;
text-align: center;
padding: 0.375rem 0;
font-size: 0.75rem;
&:hover,
&:focus {
text-decoration: none;
border-top-color: transparent;
}
}
// error/success states
.dz-error-mark,
.dz-success-mark {
position: absolute;
left: 50%;
top: 50%;
display: none;
margin-left: -$dz-icon-block-size * 0.5;
margin-top: -$dz-icon-block-size * 0.5;
height: $dz-icon-block-size;
width: $dz-icon-block-size;
border-radius: 50%;
background-position: center center;
background-size: $dz-icon-size $dz-icon-size;
background-repeat: no-repeat;
box-shadow: 0 0 1.25rem rgba(0, 0, 0, 0.06);
}
.dz-success-mark {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");
}
.dz-error-mark {
background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");
}
.dz-error-message {
position: absolute;
top: -1px;
left: -1px;
bottom: -1px;
right: -1px;
display: none;
color: #fff;
z-index: 40;
padding: 0.75rem;
text-align: left;
overflow: auto;
font-weight: light.$font-weight-medium;
@include app-rtl {
text-align: right;
}
}
// Error state
.dz-error {
.dz-error-message {
display: none;
}
.dz-error-mark {
display: block;
}
&:hover {
.dz-error-message {
display: block;
}
.dz-error-mark {
display: none;
}
}
}
// Success state
.dz-success .dz-success-mark {
display: block;
}
// RTL
@include app-rtl(false) {
.dz-hidden-input {
left: auto !important;
right: 0 !important;
}
}
// Light style
@if $enable-light-style {
.light-style {
$dz-overlay-bg: light.$dark;
$dz-thumbnail-bg: light.$gray-25;
$dz-border-color: light.$card-border-color;
.dropzone {
border: 2px dashed $dz-border-color;
}
.dz-preview {
border: light.$card-border-width solid $dz-border-color;
border-radius: light.$border-radius;
box-shadow: light.$card-box-shadow;
}
.dz-message {
color: light.$headings-color;
.note {
color: light.$body-color;
}
}
.dz-thumbnail {
border-bottom: 1px solid light.rgba-to-hex($dz-border-color);
background: $dz-thumbnail-bg;
@include light.border-top-radius(if(light.$border-radius, calc(#{light.$border-radius} - 1px), 0));
}
.dz-size {
color: light.$text-muted;
}
.dz-remove {
color: light.$body-color;
border-top: 1px solid light.rgba-to-hex($dz-border-color);
@include light.border-bottom-radius(if(light.$border-radius, calc(#{light.$border-radius} - 1px), 0));
&:hover,
&:focus {
color: light.$body-color;
background: light.$gray-100;
}
}
.dz-nopreview {
color: light.$text-muted;
}
.dz-error-mark,
.dz-success-mark {
background-color: rgba($dz-overlay-bg, 0.5);
}
.dz-error-message {
background: rgba(map-get(light.$theme-colors, danger), 0.8);
@include light.border-top-radius(light.$border-radius);
}
@include light.media-breakpoint-up(sm) {
.dz-preview {
display: inline-block;
width: $dz-thumbnail-width + ($dz-preview-padding * 2);
}
.dz-thumbnail {
width: $dz-thumbnail-width;
}
}
}
}
// dark style
@if $enable-dark-style {
.dark-style {
$dz-overlay-bg: dark.$dark;
$dz-thumbnail-bg: dark.$gray-25;
$dz-border-color: dark.$card-border-color;
.dropzone {
border: 2px dashed $dz-border-color;
}
.dz-preview {
background: dark.$card-bg;
border: dark.$card-border-width solid $dz-border-color;
border-radius: dark.$border-radius;
box-shadow: dark.$card-box-shadow;
}
.dz-message {
color: dark.$headings-color;
.note {
color: dark.$body-color;
}
}
.dz-filename {
background: dark.$card-bg;
padding-top: 0.25rem;
padding-bottom: 0.25rem;
border-bottom: dark.$card-border-width solid $dz-border-color;
}
.dz-size {
color: dark.$text-muted;
}
.dz-thumbnail {
border-bottom: 1px solid $dz-border-color;
background: $dz-thumbnail-bg;
@include dark.border-top-radius(if(dark.$border-radius, calc(#{dark.$border-radius} - 1px), 0));
}
.dz-nopreview {
color: dark.$text-muted;
}
.dz-remove {
color: dark.$body-color;
border-top: 1px solid $dz-border-color;
@include dark.border-bottom-radius(if(dark.$border-radius, calc(#{dark.$border-radius} - 1px), 0));
&:hover,
&:focus {
color: dark.$body-color;
background: dark.$gray-100;
}
}
.dz-error-mark,
.dz-success-mark {
background-color: rgba($dz-overlay-bg, 0.5);
}
.dz-error-message {
background: rgba(map-get(dark.$theme-colors, danger), 0.8);
@include dark.border-top-radius(dark.$border-radius);
}
@include dark.media-breakpoint-up(sm) {
.dz-preview {
display: inline-block;
width: $dz-thumbnail-width + ($dz-preview-padding * 2);
}
.dz-thumbnail {
width: $dz-thumbnail-width;
}
}
}
}

View File

@ -0,0 +1,339 @@
/*! Idle Timer - v1.1.1 - 2020-06-25
* https://github.com/thorst/jquery-idletimer
* Copyright (c) 2020 Paul Irish; Licensed MIT */
/*
mousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari
DOMMouseScroll (deprecated) -> Firefox 1.0
wheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0
//No need to use, use DOMMouseScroll
MozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0
//Events
WheelEvent -> see wheel
MouseWheelEvent -> see mousewheel
MouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0
*/
(function ($) {
$.idleTimer = function (firstParam, elem) {
var opts;
if (typeof firstParam === 'object') {
opts = firstParam;
firstParam = null;
} else if (typeof firstParam === 'number') {
opts = { timeout: firstParam };
firstParam = null;
}
// element to watch
elem = elem || document;
// defaults that are to be stored as instance props on the elem
opts = $.extend(
{
idle: false, // indicates if the user is idle
timeout: 30000, // the amount of time (ms) before the user is considered idle
events:
'mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove' // define active events
},
opts
);
var jqElem = $(elem),
obj = jqElem.data('idleTimerObj') || {},
/* (intentionally not documented)
* Toggles the idle state and fires an appropriate event.
* @return {void}
*/
toggleIdleState = function (e) {
var obj = $.data(elem, 'idleTimerObj') || {};
// toggle the state
obj.idle = !obj.idle;
// store toggle state date time
obj.olddate = +new Date();
// create a custom event, with state and name space
var event = $.Event((obj.idle ? 'idle' : 'active') + '.idleTimer');
// trigger event on object with elem and copy of obj
$(elem).trigger(event, [elem, $.extend({}, obj), e]);
},
/**
* Handle event triggers
* @return {void}
* @method event
* @static
*/
handleEvent = function (e) {
var obj = $.data(elem, 'idleTimerObj') || {};
// ignore writting to storage unless related to idleTimer
if (e.type === 'storage' && e.originalEvent.key !== obj.timerSyncId) {
return;
}
// this is already paused, ignore events for now
if (obj.remaining != null) {
return;
}
/*
mousemove is kinda buggy, it can be triggered when it should be idle.
Typically is happening between 115 - 150 milliseconds after idle triggered.
@psyafter & @kaellis report "always triggered if using modal (jQuery ui, with overlay)"
@thorst has similar issues on ios7 "after $.scrollTop() on text area"
*/
if (e.type === 'mousemove') {
// if coord are same, it didn't move
if (e.pageX === obj.pageX && e.pageY === obj.pageY) {
return;
}
// if coord don't exist how could it move
if (typeof e.pageX === 'undefined' && typeof e.pageY === 'undefined') {
return;
}
// under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this
var elapsed = +new Date() - obj.olddate;
if (elapsed < 200) {
return;
}
}
// clear any existing timeout
clearTimeout(obj.tId);
// if the idle timer is enabled, flip
if (obj.idle) {
toggleIdleState(e);
}
// store when user was last active
obj.lastActive = +new Date();
// update mouse coord
obj.pageX = e.pageX;
obj.pageY = e.pageY;
// sync lastActive
if (e.type !== 'storage' && obj.timerSyncId) {
if (typeof localStorage !== 'undefined') {
localStorage.setItem(obj.timerSyncId, obj.lastActive);
}
}
// set a new timeout
obj.tId = setTimeout(toggleIdleState, obj.timeout);
},
/**
* Restore initial settings and restart timer
* @return {void}
* @method reset
* @static
*/
reset = function () {
var obj = $.data(elem, 'idleTimerObj') || {};
// reset settings
obj.idle = obj.idleBackup;
obj.olddate = +new Date();
obj.lastActive = obj.olddate;
obj.remaining = null;
// reset Timers
clearTimeout(obj.tId);
if (!obj.idle) {
obj.tId = setTimeout(toggleIdleState, obj.timeout);
}
},
/**
* Store remaining time, stop timer
* You can pause from an idle OR active state
* @return {void}
* @method pause
* @static
*/
pause = function () {
var obj = $.data(elem, 'idleTimerObj') || {};
// this is already paused
if (obj.remaining != null) {
return;
}
// define how much is left on the timer
obj.remaining = obj.timeout - (+new Date() - obj.olddate);
// clear any existing timeout
clearTimeout(obj.tId);
},
/**
* Start timer with remaining value
* @return {void}
* @method resume
* @static
*/
resume = function () {
var obj = $.data(elem, 'idleTimerObj') || {};
// this isn't paused yet
if (obj.remaining == null) {
return;
}
// start timer
if (!obj.idle) {
obj.tId = setTimeout(toggleIdleState, obj.remaining);
}
// clear remaining
obj.remaining = null;
},
/**
* Stops the idle timer. This removes appropriate event handlers
* and cancels any pending timeouts.
* @return {void}
* @method destroy
* @static
*/
destroy = function () {
var obj = $.data(elem, 'idleTimerObj') || {};
//clear any pending timeouts
clearTimeout(obj.tId);
//Remove data
jqElem.removeData('idleTimerObj');
//detach the event handlers
jqElem.off('._idleTimer');
},
/**
* Returns the time until becoming idle
* @return {number}
* @method remainingtime
* @static
*/
remainingtime = function () {
var obj = $.data(elem, 'idleTimerObj') || {};
//If idle there is no time remaining
if (obj.idle) {
return 0;
}
//If its paused just return that
if (obj.remaining != null) {
return obj.remaining;
}
//Determine remaining, if negative idle didn't finish flipping, just return 0
var remaining = obj.timeout - (+new Date() - obj.lastActive);
if (remaining < 0) {
remaining = 0;
}
//If this is paused return that number, else return current remaining
return remaining;
};
// determine which function to call
if (firstParam === null && typeof obj.idle !== 'undefined') {
// they think they want to init, but it already is, just reset
reset();
return jqElem;
} else if (firstParam === null) {
// they want to init
} else if (firstParam !== null && typeof obj.idle === 'undefined') {
// they want to do something, but it isnt init
// not sure the best way to handle this
return false;
} else if (firstParam === 'destroy') {
destroy();
return jqElem;
} else if (firstParam === 'pause') {
pause();
return jqElem;
} else if (firstParam === 'resume') {
resume();
return jqElem;
} else if (firstParam === 'reset') {
reset();
return jqElem;
} else if (firstParam === 'getRemainingTime') {
return remainingtime();
} else if (firstParam === 'getElapsedTime') {
return +new Date() - obj.olddate;
} else if (firstParam === 'getLastActiveTime') {
return obj.lastActive;
} else if (firstParam === 'isIdle') {
return obj.idle;
}
// Test via a getter in the options object to see if the passive property is accessed
// This isnt working in jquery, though is planned for 4.0
// https://github.com/jquery/jquery/issues/2871
/*var supportsPassive = false;
try {
var Popts = Object.defineProperty({}, "passive", {
get: function() {
supportsPassive = true;
}
});
window.addEventListener("test", null, Popts);
} catch (e) {}
*/
/* (intentionally not documented)
* Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer
* @param {Event} event A DOM2-normalized event object.
* @return {void}
*/
jqElem.on((opts.events + ' ').split(' ').join('._idleTimer ').trim(), function (e) {
handleEvent(e);
});
//}, supportsPassive ? { passive: true } : false);
if (opts.timerSyncId) {
$(window).on('storage', handleEvent);
}
// Internal Object Properties, This isn't all necessary, but we
// explicitly define all keys here so we know what we are working with
obj = $.extend(
{},
{
olddate: +new Date(), // the last time state changed
lastActive: +new Date(), // the last time timer was active
idle: opts.idle, // current state
idleBackup: opts.idle, // backup of idle parameter since it gets modified
timeout: opts.timeout, // the interval to change state
remaining: null, // how long until state changes
timerSyncId: opts.timerSyncId, // localStorage key to use for syncing this timer
tId: null, // the idle timer setTimeout
pageX: null, // used to store the mouse coord
pageY: null
}
);
// set a timeout to toggle state. May wish to omit this in some situations
if (!obj.idle) {
obj.tId = setTimeout(toggleIdleState, obj.timeout);
}
// store our instance on the object
$.data(elem, 'idleTimerObj', obj);
return jqElem;
};
// This allows binding to element
$.fn.idleTimer = function (firstParam) {
if (this[0]) {
return $.idleTimer(firstParam, this[0]);
}
return this;
};
})(jQuery);

View File

@ -0,0 +1 @@
import 'jkanban/dist/jkanban';

View File

@ -0,0 +1,28 @@
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
@import 'jkanban/dist/jkanban';
// Light layout
@if $enable-light-style {
.light-style {
.kanban-board {
background: light.$border-color;
}
.kanban-item {
background: light.$card-bg;
}
}
}
// Dark layout
@if $enable-dark-style {
.dark-style {
.kanban-board {
background: dark.$border-color;
}
.kanban-item {
background: dark.$card-bg;
}
}
}

View File

@ -0,0 +1 @@
import 'jquery.repeater/jquery.repeater';

View File

@ -0,0 +1 @@
import 'jquery-sticky/jquery.sticky';

View File

@ -0,0 +1,11 @@
@import '../../scss/_bootstrap-extended/_functions';
@mixin timepicker-theme($background, $color: null) {
$color: if($color, $color, color-contrast($background));
li.ui-timepicker-selected,
.ui-timepicker-list .ui-timepicker-selected:hover {
color: $color !important;
background: $background !important;
}
}

View File

@ -0,0 +1 @@
import 'timepicker/jquery.timepicker';

View File

@ -0,0 +1,116 @@
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
.ui-timepicker-wrapper {
max-height: 10rem;
overflow-y: auto;
margin: 0.125rem 0;
background: #fff;
background-clip: padding-box;
outline: none;
}
.ui-timepicker-list {
list-style: none;
padding: 0.125rem 0;
margin: 0;
}
.ui-timepicker-duration {
margin-left: 0.25rem;
@include app-rtl {
margin-left: 0;
margin-right: 0.25rem;
}
}
.ui-timepicker-list li {
padding: 0.4rem 0.75rem;
margin: 0.2rem 0.51rem;
white-space: nowrap;
cursor: pointer;
list-style: none;
border-radius: light.$border-radius-lg;
&.ui-timepicker-disabled,
&.ui-timepicker-selected.ui-timepicker-disabled {
background: #fff !important;
cursor: default !important;
}
}
@if $enable-light-style {
.light-style {
.ui-timepicker-wrapper {
padding: light.$dropdown-padding-y + 0;
z-index: light.$zindex-popover;
background: light.$dropdown-bg;
box-shadow: light.$card-box-shadow;
border: light.$dropdown-border-width solid light.$dropdown-border-color;
@include light.border-radius(light.$border-radius);
}
.ui-timepicker-list li {
color: light.$dropdown-link-color;
&:hover {
background: light.$dropdown-link-hover-bg;
}
&:not(.ui-timepicker-selected) {
.ui-timepicker-duration {
color: light.$text-muted;
.ui-timepicker-list:hover & {
color: light.$text-muted;
}
}
}
}
.ui-timepicker-list li.ui-timepicker-disabled,
.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {
background: light.$dropdown-bg !important;
color: light.$dropdown-link-disabled-color !important;
}
}
}
@if $enable-dark-style {
.dark-style {
.ui-timepicker-wrapper {
border: dark.$dropdown-border-width solid dark.$dropdown-border-color;
padding: dark.$dropdown-padding-y 0;
z-index: dark.$zindex-popover;
background: dark.$dropdown-bg;
box-shadow: dark.$card-box-shadow;
@include dark.border-radius(dark.$border-radius);
}
.ui-timepicker-list li {
color: dark.$dropdown-link-color;
&:hover {
background: dark.$dropdown-link-hover-bg;
}
&:not(.ui-timepicker-selected) {
.ui-timepicker-duration {
color: dark.$text-muted;
.ui-timepicker-list:hover & {
color: dark.$text-muted;
}
}
}
}
.ui-timepicker-list li.ui-timepicker-disabled,
.ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled {
color: dark.$dropdown-link-disabled-color !important;
background: dark.$dropdown-bg !important;
}
}
}

View File

@ -0,0 +1 @@
import 'jstree/dist/jstree';

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,123 @@
@import '../../../scss/_bootstrap-extended/include'; // imported for media query mixin
// Light Style
@if $enable-light-style {
$theme-name: 'default';
$throbber-bg: "url('./themes/default/throbber.gif')";
$small-bg: "url('./themes/default/32px.png')";
$big-bg: "url('./themes/default/40px.png')";
.jstree-#{$theme-name} {
background: transparent;
}
.jstree-#{$theme-name} > .jstree-container-ul .jstree-loading > .jstree-ocl,
.jstree-#{$theme-name}-small > .jstree-container-ul .jstree-loading > .jstree-ocl,
.jstree-#{$theme-name}-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
background-image: #{$throbber-bg};
}
.jstree-#{$theme-name} .jstree-node,
.jstree-#{$theme-name} .jstree-icon,
.jstree-#{$theme-name} .jstree-file,
.jstree-#{$theme-name} .jstree-folder,
#jstree-dnd.jstree-#{$theme-name} .jstree-ok,
#jstree-dnd.jstree-#{$theme-name} .jstree-er,
.jstree-#{$theme-name}-small .jstree-node,
.jstree-#{$theme-name}-small .jstree-icon,
.jstree-#{$theme-name}-small .jstree-file,
.jstree-#{$theme-name}-small .jstree-folder,
#jstree-dnd.jstree-#{$theme-name}-small .jstree-ok,
#jstree-dnd.jstree-#{$theme-name}-small .jstree-er,
.jstree-#{$theme-name}-large .jstree-node,
.jstree-#{$theme-name}-large .jstree-icon,
.jstree-#{$theme-name}-large .jstree-file,
.jstree-#{$theme-name}-large .jstree-folder,
#jstree-dnd.jstree-#{$theme-name}-large .jstree-ok,
#jstree-dnd.jstree-#{$theme-name}-large .jstree-er {
background-image: #{$small-bg};
}
@include media-breakpoint-down(md) {
#jstree-dnd.jstree-dnd-responsive > .jstree-ok,
#jstree-dnd.jstree-dnd-responsive > .jstree-er,
.jstree-#{$theme-name}-responsive .jstree-icon,
.jstree-#{$theme-name}-responsive .jstree-node,
.jstree-#{$theme-name}-responsive .jstree-icon,
.jstree-#{$theme-name}-responsive .jstree-node > .jstree-ocl,
.jstree-#{$theme-name}-responsive .jstree-themeicon,
.jstree-#{$theme-name}-responsive .jstree-checkbox,
.jstree-#{$theme-name}-responsive .jstree-file,
.jstree-#{$theme-name}-responsive .jstree-folder {
background-image: #{$big-bg};
}
}
.jstree-#{$theme-name} .jstree-last,
.jstree-#{$theme-name} > .jstree-no-dots .jstree-node,
.jstree-#{$theme-name} > .jstree-no-dots .jstree-leaf > .jstree-ocl,
.jstree-#{$theme-name} .jstree-disabled,
.jstree-#{$theme-name} .jstree-themeicon-custom:not(.jstree-file):not(.jstree-folder) {
background: transparent !important;
}
}
// Dark Style
@if $enable-dark-style {
$theme-name: 'default-dark';
$throbber-bg: "url('./themes/default-dark/throbber.gif')";
$small-bg: "url('./themes/default-dark/32px.png')";
$big-bg: "url('./themes/default-dark/40px.png')";
.jstree-#{$theme-name} {
background: transparent;
}
.jstree-#{$theme-name} > .jstree-container-ul .jstree-loading > .jstree-ocl,
.jstree-#{$theme-name}-small > .jstree-container-ul .jstree-loading > .jstree-ocl,
.jstree-#{$theme-name}-large > .jstree-container-ul .jstree-loading > .jstree-ocl {
background-image: #{$throbber-bg};
}
.jstree-#{$theme-name} .jstree-node,
.jstree-#{$theme-name} .jstree-icon,
.jstree-#{$theme-name} .jstree-file,
.jstree-#{$theme-name} .jstree-folder,
#jstree-dnd.jstree-#{$theme-name} .jstree-ok,
#jstree-dnd.jstree-#{$theme-name} .jstree-er,
.jstree-#{$theme-name}-small .jstree-node,
.jstree-#{$theme-name}-small .jstree-icon,
.jstree-#{$theme-name}-small .jstree-file,
.jstree-#{$theme-name}-small .jstree-folder,
#jstree-dnd.jstree-#{$theme-name}-small .jstree-ok,
#jstree-dnd.jstree-#{$theme-name}-small .jstree-er,
.jstree-#{$theme-name}-large .jstree-node,
.jstree-#{$theme-name}-large .jstree-icon,
.jstree-#{$theme-name}-large .jstree-file,
.jstree-#{$theme-name}-large .jstree-folder,
#jstree-dnd.jstree-#{$theme-name}-large .jstree-ok,
#jstree-dnd.jstree-#{$theme-name}-large .jstree-er {
background-image: #{$small-bg};
}
@include media-breakpoint-down(md) {
#jstree-dnd.jstree-dnd-responsive > .jstree-ok,
#jstree-dnd.jstree-dnd-responsive > .jstree-er,
.jstree-#{$theme-name}-responsive .jstree-icon,
.jstree-#{$theme-name}-responsive .jstree-node,
.jstree-#{$theme-name}-responsive .jstree-icon,
.jstree-#{$theme-name}-responsive .jstree-node > .jstree-ocl,
.jstree-#{$theme-name}-responsive .jstree-themeicon,
.jstree-#{$theme-name}-responsive .jstree-checkbox,
.jstree-#{$theme-name}-responsive .jstree-file,
.jstree-#{$theme-name}-responsive .jstree-folder {
background-image: #{$big-bg};
}
}
.jstree-#{$theme-name} .jstree-last,
.jstree-#{$theme-name} > .jstree-no-dots .jstree-node,
.jstree-#{$theme-name} > .jstree-no-dots .jstree-leaf > .jstree-ocl,
.jstree-#{$theme-name} .jstree-disabled,
.jstree-#{$theme-name} .jstree-themeicon-custom:not(.jstree-file):not(.jstree-folder) {
background: transparent !important;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 618 B

View File

@ -0,0 +1,19 @@
import leaFlet from 'leaflet';
import markerIcon2x from 'leaflet/dist/images/marker-icon-2x.png';
import markerIcon from 'leaflet/dist/images/marker-icon.png';
import markerShadow from 'leaflet/dist/images/marker-shadow.png';
delete leaFlet.Icon.Default.prototype._getIconUrl;
leaFlet.Icon.Default.mergeOptions({
iconRetinaUrl: markerIcon2x,
iconUrl: markerIcon,
shadowUrl: markerShadow
});
try {
window.leaFlet = leaFlet;
} catch (e) {}
export { leaFlet };

View File

@ -0,0 +1,46 @@
@import '../../scss/_bootstrap-extended/include';
@import '../../scss/_custom-variables/libs';
@import 'leaflet/dist/leaflet';
.leaflet-map {
height: 400px;
}
.leaflet-pane {
z-index: 1;
}
// RTL
@include app-rtl(false) {
.leaflet-map {
.leaflet-control-container {
.leaflet-left {
right: 0;
left: unset;
.leaflet-control-zoom,
.leaflet-control-layers {
margin-left: 0;
margin-right: 10px;
}
}
.leaflet-right {
left: 0;
right: unset;
.leaflet-control-zoom,
.leaflet-control-layers {
margin-left: 10px;
margin-right: 0px;
}
}
}
}
}
//Map tooltip border radius
.leaflet-popup {
.leaflet-popup-content-wrapper {
border-radius: $border-radius;
}
}

View File

@ -0,0 +1,7 @@
import mapboxgl from 'mapbox-gl';
try {
window.mapboxgl = mapboxgl;
} catch (e) {}
export { mapboxgl };

View File

@ -0,0 +1,8 @@
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
@import 'mapbox-gl/dist/mapbox-gl';
.marker-focus {
filter: drop-shadow(0px 0px 7px light.$primary);
}

View File

@ -0,0 +1,7 @@
import Masonry from 'masonry-layout';
try {
window.Masonry = Masonry;
} catch (e) {}
export { Masonry };

View File

@ -0,0 +1,115 @@
@mixin quill-generate-lists($indent) {
$quill-list-types: (
1: lower-alpha,
2: lower-roman,
3: decimal,
4: lower-alpha,
5: lower-roman,
6: decimal,
7: lower-alpha,
8: lower-roman,
9: decimal
);
@for $i from 1 through 9 {
ol li.ql-indent-#{$i} {
counter-increment: list-#{$i};
@if $i < 9 {
$lists: '';
@for $l from $i + 1 through 9 {
$lists: '#{$lists} list-#{$l}';
}
counter-reset: #{$lists};
}
&::before {
content: counter(list-#{$i}, map-get($quill-list-types, $i)) '. ';
}
}
.ql-indent-#{$i}:not(.ql-direction-rtl) {
padding-left: $indent * $i;
[dir='rtl'] & {
padding-right: $indent * $i;
padding-left: 0;
}
}
li.ql-indent-#{$i}:not(.ql-direction-rtl) {
padding-left: $indent * ($i + 1);
[dir='rtl'] & {
padding-right: $indent * ($i + 1);
padding-left: 0;
}
}
.ql-indent-#{$i}.ql-direction-rtl.ql-align-right {
padding-right: $indent * $i;
[dir='rtl'] & {
padding-right: 0;
padding-left: $indent * $i;
}
}
li.ql-indent-#{$i}.ql-direction-rtl.ql-align-right {
padding-right: $indent * ($i + 1);
[dir='rtl'] & {
padding-right: 0;
padding-left: $indent * ($i + 1);
}
}
}
}
@mixin quill-theme($color) {
.ql-snow.ql-toolbar,
.ql-snow .ql-toolbar {
button:hover,
button:focus,
button.ql-active,
.ql-picker-label:hover,
.ql-picker-label.ql-active,
.ql-picker-item:hover,
.ql-picker-item.ql-selected {
color: $color !important;
}
button:hover .ql-fill,
button:focus .ql-fill,
button.ql-active .ql-fill,
.ql-picker-label:hover .ql-fill,
.ql-picker-label.ql-active .ql-fill,
.ql-picker-item:hover .ql-fill,
.ql-picker-item.ql-selected .ql-fill,
button:hover .ql-stroke.ql-fill,
button:focus .ql-stroke.ql-fill,
button.ql-active .ql-stroke.ql-fill,
.ql-picker-label:hover .ql-stroke.ql-fill,
.ql-picker-label.ql-active .ql-stroke.ql-fill,
.ql-picker-item:hover .ql-stroke.ql-fill,
.ql-picker-item.ql-selected .ql-stroke.ql-fill {
fill: $color !important;
}
button:hover .ql-stroke,
button:focus .ql-stroke,
button.ql-active .ql-stroke,
.ql-picker-label:hover .ql-stroke,
.ql-picker-label.ql-active .ql-stroke,
.ql-picker-item:hover .ql-stroke,
.ql-picker-item.ql-selected .ql-stroke,
button:hover .ql-stroke-miter,
button:focus .ql-stroke-miter,
button.ql-active .ql-stroke-miter,
.ql-picker-label:hover .ql-stroke-miter,
.ql-picker-label.ql-active .ql-stroke-miter,
.ql-picker-item:hover .ql-stroke-miter,
.ql-picker-item.ql-selected .ql-stroke-miter {
stroke: $color !important;
}
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,7 @@
import katex from 'katex/dist/katex';
try {
window.katex = katex;
} catch (e) {}
export { katex };

View File

@ -0,0 +1 @@
@import 'katex/dist/katex';

View File

@ -0,0 +1,7 @@
import Quill from 'quill/dist/quill';
try {
window.Quill = Quill;
} catch (e) {}
export { Quill };

View File

@ -0,0 +1,289 @@
@use '../../scss/_bootstrap-extended/include' as light;
@use '../../scss/_bootstrap-extended/include-dark' as dark;
@import '../../scss/_custom-variables/libs';
@import 'mixins';
.ql-editor,
.ql-content {
$quill-indent: 2rem;
p,
ol,
ul,
pre,
blockquote,
h1,
h2,
h3,
h4,
h5,
h6 {
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
}
ol,
ul {
margin-right: 0;
margin-left: 0;
padding-right: 0;
padding-left: 0;
}
ol > li,
ul > li {
list-style-type: none;
&:not(.ql-direction-rtl) {
padding-left: $quill-indent;
@include app-rtl {
padding-right: $quill-indent;
padding-left: 0;
}
}
&.ql-direction-rtl {
padding-right: $quill-indent;
@include app-rtl {
padding-right: 0;
padding-left: $quill-indent;
}
}
}
ul > li::before {
content: '\2022';
}
ul[data-checked='true'],
ul[data-checked='false'] {
pointer-events: none;
> li * {
pointer-events: all;
&::before {
pointer-events: all;
cursor: pointer;
color: #777;
}
}
}
ul[data-checked='false'] > li::before {
content: '\2610';
}
ul[data-checked='true'] > li::before {
content: '\2611';
}
li::before {
display: inline-block;
width: calc(#{$quill-indent} - 0.3em);
white-space: nowrap;
}
li.ql-direction-rtl::before {
margin-right: -$quill-indent;
margin-left: 0.3em;
text-align: left;
@include app-rtl {
margin-right: 0.3em;
margin-left: -$quill-indent;
text-align: right;
}
}
li:not(.ql-direction-rtl)::before {
text-align: right;
margin-left: -$quill-indent;
margin-right: 0.3em;
@include app-rtl {
text-align: left;
margin-left: 0.3em;
margin-right: -$quill-indent;
}
}
ol li {
counter-increment: list-0;
counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9;
&::before {
content: counter(list-0, decimal) '. ';
}
}
@include quill-generate-lists($quill-indent);
.ql-video {
max-width: 100%;
display: block;
&.ql-align-right {
margin: 0 0 0 auto;
@include app-rtl {
margin: 0 auto 0 0;
}
}
&.ql-align-center {
margin: 0 auto;
}
}
.ql-bg-red {
background-color: #e60000;
}
.ql-bg-black {
background-color: #000;
}
.ql-bg-yellow {
background-color: #ff0;
}
.ql-bg-orange {
background-color: #f90;
}
.ql-bg-purple {
background-color: #93f;
}
.ql-bg-blue {
background-color: #06c;
}
.ql-bg-green {
background-color: #008a00;
}
.ql-color-red {
color: #e60000;
}
.ql-color-white {
color: #fff;
}
.ql-color-yellow {
color: #ff0;
}
.ql-color-orange {
color: #f90;
}
.ql-color-purple {
color: #93f;
}
.ql-color-blue {
color: #06c;
}
.ql-color-green {
color: #008a00;
}
.ql-direction-rtl {
direction: rtl;
text-align: inherit;
@include app-rtl {
direction: ltr;
text-align: inherit;
}
}
.ql-align-center {
text-align: center;
}
.ql-align-justify {
text-align: justify;
}
.ql-align-right {
text-align: right;
@include app-rtl {
text-align: left;
}
}
img {
max-width: 100%;
}
}
// Light style
@if $enable-light-style {
.light-style {
.ql-editor,
.ql-content {
blockquote {
font-size: light.$blockquote-font-size;
margin-bottom: light.$spacer;
}
.ql-font-serif {
font-family: light.$font-family-serif;
}
.ql-font-monospace {
font-family: light.$font-family-monospace;
}
.ql-size-large {
font-size: light.$font-size-lg;
}
.ql-size-huge {
font-size: light.$font-size-xl;
}
.ql-size-small {
font-size: light.$font-size-sm;
}
}
}
}
// Dark style
@if $enable-dark-style {
.dark-style {
.ql-editor,
.ql-content {
blockquote {
font-size: dark.$blockquote-font-size;
margin-bottom: dark.$spacer;
}
.ql-font-monospace {
font-family: dark.$font-family-monospace;
}
.ql-font-serif {
font-family: dark.$font-family-serif;
}
.ql-size-huge {
font-size: dark.$font-size-xl;
}
.ql-size-large {
font-size: dark.$font-size-lg;
}
.ql-size-small {
font-size: dark.$font-size-sm;
}
}
}
}