diff --git a/resources/assets/vendor/libs/animate-css/animate.scss b/resources/assets/vendor/libs/animate-css/animate.scss new file mode 100644 index 0000000..0c9e900 --- /dev/null +++ b/resources/assets/vendor/libs/animate-css/animate.scss @@ -0,0 +1 @@ +@import 'animate.css/animate'; diff --git a/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js b/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js new file mode 100644 index 0000000..4e603b7 --- /dev/null +++ b/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js @@ -0,0 +1,7 @@ +import AOS from 'aos/dist/aos'; + +try { + window.AOS = AOS; +} catch (e) {} + +export { AOS }; diff --git a/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss b/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss new file mode 100644 index 0000000..70f7899 --- /dev/null +++ b/resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss @@ -0,0 +1 @@ +@import 'aos/dist/aos'; diff --git a/resources/assets/vendor/libs/apex-charts/apex-charts.scss b/resources/assets/vendor/libs/apex-charts/apex-charts.scss new file mode 100644 index 0000000..61762ec --- /dev/null +++ b/resources/assets/vendor/libs/apex-charts/apex-charts.scss @@ -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; + } + } +} diff --git a/resources/assets/vendor/libs/apex-charts/apexcharts.js b/resources/assets/vendor/libs/apex-charts/apexcharts.js new file mode 100644 index 0000000..ac2500a --- /dev/null +++ b/resources/assets/vendor/libs/apex-charts/apexcharts.js @@ -0,0 +1,7 @@ +import ApexCharts from 'apexcharts-clevision'; + +try { + window.ApexCharts = ApexCharts; +} catch (e) {} + +export { ApexCharts }; diff --git a/resources/assets/vendor/libs/dropzone/_mixins.scss b/resources/assets/vendor/libs/dropzone/_mixins.scss new file mode 100644 index 0000000..75e2c7f --- /dev/null +++ b/resources/assets/vendor/libs/dropzone/_mixins.scss @@ -0,0 +1,5 @@ +@mixin dropzone-theme($border) { + .dropzone.dz-drag-hover { + border-color: $border !important; + } +} diff --git a/resources/assets/vendor/libs/dropzone/dropzone.js b/resources/assets/vendor/libs/dropzone/dropzone.js new file mode 100644 index 0000000..6122097 --- /dev/null +++ b/resources/assets/vendor/libs/dropzone/dropzone.js @@ -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 }; diff --git a/resources/assets/vendor/libs/dropzone/dropzone.scss b/resources/assets/vendor/libs/dropzone/dropzone.scss new file mode 100644 index 0000000..4224a5c --- /dev/null +++ b/resources/assets/vendor/libs/dropzone/dropzone.scss @@ -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; + } + } + } +} diff --git a/resources/assets/vendor/libs/idletimer/idletimer.js b/resources/assets/vendor/libs/idletimer/idletimer.js new file mode 100644 index 0000000..89af693 --- /dev/null +++ b/resources/assets/vendor/libs/idletimer/idletimer.js @@ -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); diff --git a/resources/assets/vendor/libs/jkanban/jkanban.js b/resources/assets/vendor/libs/jkanban/jkanban.js new file mode 100644 index 0000000..06a987f --- /dev/null +++ b/resources/assets/vendor/libs/jkanban/jkanban.js @@ -0,0 +1 @@ +import 'jkanban/dist/jkanban'; diff --git a/resources/assets/vendor/libs/jkanban/jkanban.scss b/resources/assets/vendor/libs/jkanban/jkanban.scss new file mode 100644 index 0000000..543ad3f --- /dev/null +++ b/resources/assets/vendor/libs/jkanban/jkanban.scss @@ -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; + } + } +} diff --git a/resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js b/resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js new file mode 100644 index 0000000..ae51ee7 --- /dev/null +++ b/resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js @@ -0,0 +1 @@ +import 'jquery.repeater/jquery.repeater'; diff --git a/resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js b/resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js new file mode 100644 index 0000000..206891e --- /dev/null +++ b/resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js @@ -0,0 +1 @@ +import 'jquery-sticky/jquery.sticky'; diff --git a/resources/assets/vendor/libs/jquery-timepicker/_mixins.scss b/resources/assets/vendor/libs/jquery-timepicker/_mixins.scss new file mode 100644 index 0000000..19d71bb --- /dev/null +++ b/resources/assets/vendor/libs/jquery-timepicker/_mixins.scss @@ -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; + } +} diff --git a/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js b/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js new file mode 100644 index 0000000..3b42569 --- /dev/null +++ b/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js @@ -0,0 +1 @@ +import 'timepicker/jquery.timepicker'; diff --git a/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss b/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss new file mode 100644 index 0000000..8b7a563 --- /dev/null +++ b/resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss @@ -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; + } + } +} diff --git a/resources/assets/vendor/libs/jstree/jstree.js b/resources/assets/vendor/libs/jstree/jstree.js new file mode 100644 index 0000000..9a3a55c --- /dev/null +++ b/resources/assets/vendor/libs/jstree/jstree.js @@ -0,0 +1 @@ +import 'jstree/dist/jstree'; diff --git a/resources/assets/vendor/libs/jstree/jstree.scss b/resources/assets/vendor/libs/jstree/jstree.scss new file mode 100644 index 0000000..07a5830 --- /dev/null +++ b/resources/assets/vendor/libs/jstree/jstree.scss @@ -0,0 +1,160 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'jstree/dist/themes/default/style'; +@import 'jstree/dist/themes/default-dark/style'; +@import './themes/theme'; + +.jstree { + .jstree-children { + .jstree-anchor, + .jstree-wholerow { + border-radius: 0; + border: none; + box-shadow: none; + } + } +} +// Light Style +@if $enable-light-style { + .light-style { + // Folder Icons and text colors + .jstree { + .jstree-container-ul { + .jstree-icon.ri-folder-3-line, + .ion-ios-folder { + color: light.$warning; + } + .jstree-icon.ri-file-text-line { + color: light.$primary; + } + .jstree-anchor { + color: light.$headings-color; + } + } + } + .jstree-default .jstree-icon.jstree-checkbox { + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUAAAABgCAYAAABsS6soAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGAGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDUgNzkuMTYzNDk5LCAyMDE4LzA4LzEzLTE2OjQwOjIyICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDgtMThUMTg6NTU6MzIrMDU6MzAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjc1N2M4OTEyLWRmYzMtNDM5YS1hYjJjLTcwMGRjNWQxMDkwMyIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjRlN2RlN2M1LTZlY2MtMDI0Ny1hN2I0LTJmOTU3NDc3MjAzNiIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjNhOWQ5OTMyLWFmNmMtNGFkMy1hNTUzLTFlYjczYjRlMWI2ZCI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6M2E5ZDk5MzItYWY2Yy00YWQzLWE1NTMtMWViNzNiNGUxYjZkIiBzdEV2dDp3aGVuPSIyMDIwLTA4LTE4VDE4OjU1OjMyKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NzU3Yzg5MTItZGZjMy00MzlhLWFiMmMtNzAwZGM1ZDEwOTAzIiBzdEV2dDp3aGVuPSIyMDIwLTA4LTE4VDE5OjI4OjQwKzA1OjMwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOSAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6MDZg5AAAIR0lEQVR42u2dX4gVVRzHZ0mktWuQEeSLErgW2CIp3SJy6SkoCBZ6U0oQjArpIUVCH4rATUyjoKcEHwJ9CKLAiKg3jYoL/aOCRYNICIVKQW9CS8v2+7nnuuPZmbnjvXPmzJ7z+cCP2XV29rhn9nz2O3/PyNzcXHIzTE1NJXAd7bwR2gfw8/u3b9++oX7/RhAgACxVRIBDbY8ASWAkQCABIkAAIAEiQBIYCRBIgAgQAEiACJAERgIEEiACBA8sl1oldaf5uCwzUn9LXTQf0/6gKeup/S1ZrJZqWau6UuenTh7okgBJgLTvhruljkhtHWDbE1K7pS7Q/lACHJPFmZzV90tNiwRnSYAA1bNB6mepSalzN7HdGqmPzQD9JYD2BxnocxW030+A60V+Z2NKgC0ThbummoCv/5OPBJb+Wa80JAG67P8HpL6T2iT1fQ3b5X6fTqfzgyyXmcrjP1O3ttvtqxW2X7if5f/WMl97SmpC2j5t9s9Q7ZvD3zEj9FXW6oum8va560NkLwmw99dgwnSsbwmmd/x6qbNJ2MTW/00SoCaxMufT9FzdsroEaMnvGtL2SEUCLEp/ZXCaEH0kwN4OUR6V+tHjILR3/LC/bEshAab7X1npsf/njIhd9n+TBDgty6sltllhJORcgFnyq1iA9u/bzbJJBOhqTHpJgHaH+EoiWTu+bgH6ILb+R4BGgEZ21041yPfu5smv4kPgJgvQewL0NQjzdnyMCTD0/keACwLcYvp8wpxqGMuSn7angiQB1ifAOgdh3uCLNQGG3v8IcEGA6cG6Q+pYgfwSEmC9AlT0ZskLngafzwQ46LJKAV7fpw7b79f/LtpHgNkCTPrILwYBRpUAyww+EmB4/Y8AFx8Cl5EfCbBGAdZx+KV3xJ/v8zUx3AYTW/8jwBsvgth/hPLkRwKsSYB1nnvKeh6xR9cM0G4SNrH1P/cBpm6DsW94LpAfCbAGATblZtyYiK3/eRLEug/Qvh2mKCGRAKsXYNOeRIiN2PqfZ4E9PgtMAlwswCY+CxwTsfW/nns8LLVtgG2PS+1Jhn8bS7TtN/xRON4GA8HD+wA9tl/wLsAyOH9fIO8DBIBYIQECQLyQAAGABIgAAYAEiAABgASIAAGABIgAAYAEiAABgASIACv9K5QwN/AIvwZAAgQAIAGSAGkfgAQIAEACJAHSPgAJEACABEgCpH0AEiBAEbwP0G/7JEAESALz2L6+EfmI1NYBtj0htTsZ/o3MMbdPAkSA4BHmBPE4JwgJsJwA65ynomlzYjQhga302P+uf/4lOSvc+Pj4Q6Ojo18nDmaFy8KeLrPdbp9OKpgVjgTYX4Dpjq9jYnJmpYur/5fkvMAiwM11CTBrwnQR4EgEAvSeALXjN0p9aT6vo7ObNi+uzwSo/X8l9bmP/j8VUQKcluXVEtusEAFurEOAWfKLSIBeE2BWx9c9AJsiQd/JL+T+R4BGgPaE6Hnyi+gQ2FsCzOt4HwPQtwR9JMCY+h8BLghwi9nnE+ZUx1iW/LQ9FSQJ0I0A8wafzwEYUxKMrf8R4IIA04N1h9SxAvklJEA3AtT7ks7nrPY5AIcdhL0kN+iyqiRZZpk46P8q2nchQQSYLcCkj/xiECAJMMIkGFv/I8DFh8Bl5EcCdCRA3+egerdhFLE6Cffu99j6HwHeeBHE3u958iMBOhRg3iCso7NbZoC1ctZ3zSF6jOcCQ+x/7gNM3QZj3/BcID8SoGMBZg3CoDt7CUgwxP7nSRDrPkD7dpiihEQCdCtAexDW8SQCxNX/PAvMs8CNTYDpQdik53NjlGCo/a93HRyW2jbAtsel9iTDv40l5vZJgCUECOAK3gfI+wAbnwABAEiAAAAkQAAAEiAAAAkQAIAECABAAgQAIAECAJAAAQBIgAAAJEAAABIgAAAJEACABAgAJEAECAAkQAQIACRABBgi/SYjsollciggATZDgJ1O5xZZ3C61UuqK1OV2uz1b1U+79+hRfSPubebTfw7t3DljrdM35/5rrwuEMtNR2jBHC5AA6xCgkd9dUvuldkm9KPWR1J9VSNAIbq3Ua1L3Sm3Xwa2ik3UtI4gPpD6TOqDtyrrZgPZ1vwnJs2CWPiABuhZgSn67jAB7qIiOiAAvVSS/l0wbyufm47+k7kvmJ4C5J92uCPBSQDs7LUD9s5c30Y1OojOFAIEEWIMAC+Sn/Cb1iAhwqFmpTMJ7IyW/Hp9KvZfMz5q1zlq3VgR4LqB9TQIE8JUAJycnVXSj5tMZkdpMCfk9J/VNn8mbyybAx6R2Sz1eYpN3NQWKAEOaDhABAvhIgEZ+enHjQamnTeLSK4wt1/KzUqAeBr/VR4Iqvzf1EDGwCyEcAgP4SIAiQJXPw1JfmH/S82+vSz1Rh/ysJLhB6mCOBN8xgrwQ4FVgEiCApwS4Rha/W//8rdTmDPnpDPY/VS2/VArUq71HM9pW9Jzg3sRcHUaACBBIgFUIUA+rPsmRTh3Jr3f+cVzq/WTxBY80mk5fDlCCHAIDeEqAy03yOiT1ZMaX/Cr1ggv5pZLfM0Zs60okUZXgdi6CIEAgAQ4twJQE9SLE25YEVX7PujrsNQK8I5m/uLHVWqXn/D6UeiVDzOtFgCE9BYEAAXwkwAIJOk1+KQH2EujzycK9gL0LHheT+Wdk02LWdQcDToAcAgP4eBIkJUF9KuOk1Fcu5WdJUNt9VUqf8Lh+q0tqnabEM2bdHzwKhwCBBFipAPVJkE6no8LR0osMs1W+8KCEBItehpC5LhB4GQKA7wTI67C8weuwAJqQAAEASIAAACRAAAASIAAACRAAgAQIAEACBABY4gkQACAU/gfEuTGqiiEZXwAAAABJRU5ErkJggg==); + } + + // Context Menu Styling + + .vakata-context.jstree-contextmenu { + background: light.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(light.$black, 0.1); + li { + a { + padding: 0 1.5rem; + text-shadow: none; + i { + display: none; + } + } + &.vakata-context-hover { + a { + box-shadow: none; + } + } + &.vakata-context-separator { + a { + margin: 0; + } + } + ul { + background: light.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(light.$black, 0.1); + } + } + .vakata-contextmenu-sep { + display: none; + } + } + .jstree-hovered, + .jstree-wholerow-hovered, + .jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered, + .jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered, + .jstree-default-responsive .jstree-wholerow-hovered { + background-color: light.$gray-50; + } + .jstree-clicked, + .jstree-context, + .jstree-wholerow-clicked, + .jstree-default-responsive .jstree-wholerow-clicked { + background-color: rgba(light.$primary, 0.08); + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + // Folder Icons and text colors + .jstree { + .jstree-container-ul { + .jstree-icon.ri-folder-3-line, + .ion-ios-folder { + color: dark.$warning; + } + .jstree-icon.ri-file-text-line { + color: dark.$primary; + } + .jstree-anchor { + color: dark.$headings-color; + } + } + } + + // Context Menu Styling + + .vakata-context.jstree-contextmenu { + background: dark.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(dark.$black, 0.1); + li { + a { + padding: 0 1.5rem; + text-shadow: none; + i { + display: none; + } + } + &.vakata-context-hover { + a { + box-shadow: none; + } + } + &.vakata-context-separator { + a { + margin: 0; + } + } + ul { + background: dark.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(dark.$black, 0.1); + } + } + .vakata-contextmenu-sep { + display: none; + } + } + .jstree-hovered, + .jstree-wholerow-hovered, + .jstree-checkbox-no-clicked .jstree-clicked.jstree-hovered, + .jstree-checkbox-no-clicked > .jstree-wholerow-ul .jstree-wholerow-clicked.jstree-wholerow-hovered, + .jstree-default-responsive .jstree-wholerow-hovered { + background-color: dark.$gray-50; + } + .jstree-clicked, + .jstree-context, + .jstree-wholerow-clicked, + .jstree-default-responsive .jstree-wholerow-clicked { + background-color: rgba(dark.$primary, 0.08); + } + } +} +.jstree-default-dark .jstree-anchor { + text-shadow: none !important; +} diff --git a/resources/assets/vendor/libs/jstree/themes/_theme.scss b/resources/assets/vendor/libs/jstree/themes/_theme.scss new file mode 100644 index 0000000..12af432 --- /dev/null +++ b/resources/assets/vendor/libs/jstree/themes/_theme.scss @@ -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; + } +} diff --git a/resources/assets/vendor/libs/jstree/themes/default-dark/32px.png b/resources/assets/vendor/libs/jstree/themes/default-dark/32px.png new file mode 100644 index 0000000..d6fd721 Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default-dark/32px.png differ diff --git a/resources/assets/vendor/libs/jstree/themes/default-dark/40px.png b/resources/assets/vendor/libs/jstree/themes/default-dark/40px.png new file mode 100644 index 0000000..4fc88e4 Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default-dark/40px.png differ diff --git a/resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif b/resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif new file mode 100644 index 0000000..cd75035 Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif differ diff --git a/resources/assets/vendor/libs/jstree/themes/default/32px.png b/resources/assets/vendor/libs/jstree/themes/default/32px.png new file mode 100644 index 0000000..1532715 Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default/32px.png differ diff --git a/resources/assets/vendor/libs/jstree/themes/default/40px.png b/resources/assets/vendor/libs/jstree/themes/default/40px.png new file mode 100644 index 0000000..1959347 Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default/40px.png differ diff --git a/resources/assets/vendor/libs/jstree/themes/default/throbber.gif b/resources/assets/vendor/libs/jstree/themes/default/throbber.gif new file mode 100644 index 0000000..1b5b2fd Binary files /dev/null and b/resources/assets/vendor/libs/jstree/themes/default/throbber.gif differ diff --git a/resources/assets/vendor/libs/leaflet/images/layers-2x.png b/resources/assets/vendor/libs/leaflet/images/layers-2x.png new file mode 100644 index 0000000..200c333 Binary files /dev/null and b/resources/assets/vendor/libs/leaflet/images/layers-2x.png differ diff --git a/resources/assets/vendor/libs/leaflet/images/layers.png b/resources/assets/vendor/libs/leaflet/images/layers.png new file mode 100644 index 0000000..1a72e57 Binary files /dev/null and b/resources/assets/vendor/libs/leaflet/images/layers.png differ diff --git a/resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png b/resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png new file mode 100644 index 0000000..88f9e50 Binary files /dev/null and b/resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png differ diff --git a/resources/assets/vendor/libs/leaflet/images/marker-icon.png b/resources/assets/vendor/libs/leaflet/images/marker-icon.png new file mode 100644 index 0000000..950edf2 Binary files /dev/null and b/resources/assets/vendor/libs/leaflet/images/marker-icon.png differ diff --git a/resources/assets/vendor/libs/leaflet/images/marker-shadow.png b/resources/assets/vendor/libs/leaflet/images/marker-shadow.png new file mode 100644 index 0000000..9fd2979 Binary files /dev/null and b/resources/assets/vendor/libs/leaflet/images/marker-shadow.png differ diff --git a/resources/assets/vendor/libs/leaflet/leaflet.js b/resources/assets/vendor/libs/leaflet/leaflet.js new file mode 100644 index 0000000..6d76387 --- /dev/null +++ b/resources/assets/vendor/libs/leaflet/leaflet.js @@ -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 }; diff --git a/resources/assets/vendor/libs/leaflet/leaflet.scss b/resources/assets/vendor/libs/leaflet/leaflet.scss new file mode 100644 index 0000000..a8ee3e3 --- /dev/null +++ b/resources/assets/vendor/libs/leaflet/leaflet.scss @@ -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; + } +} diff --git a/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js b/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js new file mode 100644 index 0000000..cf7aab5 --- /dev/null +++ b/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js @@ -0,0 +1,7 @@ +import mapboxgl from 'mapbox-gl'; + +try { + window.mapboxgl = mapboxgl; +} catch (e) {} + +export { mapboxgl }; diff --git a/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss b/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss new file mode 100644 index 0000000..f16a819 --- /dev/null +++ b/resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss @@ -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); +} diff --git a/resources/assets/vendor/libs/masonry/masonry.js b/resources/assets/vendor/libs/masonry/masonry.js new file mode 100644 index 0000000..1b99631 --- /dev/null +++ b/resources/assets/vendor/libs/masonry/masonry.js @@ -0,0 +1,7 @@ +import Masonry from 'masonry-layout'; + +try { + window.Masonry = Masonry; +} catch (e) {} + +export { Masonry }; diff --git a/resources/assets/vendor/libs/quill/_mixins.scss b/resources/assets/vendor/libs/quill/_mixins.scss new file mode 100644 index 0000000..df48b30 --- /dev/null +++ b/resources/assets/vendor/libs/quill/_mixins.scss @@ -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; + } + } +} diff --git a/resources/assets/vendor/libs/quill/editor.scss b/resources/assets/vendor/libs/quill/editor.scss new file mode 100644 index 0000000..b8578ce --- /dev/null +++ b/resources/assets/vendor/libs/quill/editor.scss @@ -0,0 +1,1112 @@ +// Editor +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +// common styles +.ql-container { + display: block; + margin: 0; + position: relative; + + &.ql-disabled .ql-editor ul[data-checked] > li::before { + pointer-events: none; + } + + &.ql-disabled .ql-tooltip { + visibility: hidden; + } +} + +.ql-clipboard { + position: absolute; + overflow-y: hidden; + left: -6250rem; + height: 0.0625rem; + top: 50%; + + @include app-rtl { + left: auto; + right: -6250rem; + } +} + +.ql-editor { + overflow-y: auto; + height: 100%; + tab-size: 4; + -moz-tab-size: 4; + box-sizing: border-box; + display: block; + outline: none; + word-wrap: break-word; + white-space: pre-wrap; + + > * { + cursor: text; + } + + &.ql-blank::before { + font-size: light.$font-size-root; + position: absolute; + content: attr(data-placeholder); + left: 0; + right: 0; + pointer-events: none; + } +} + +// Themes +.ql-snow, +.ql-bubble { + box-sizing: border-box; + + * { + box-sizing: border-box; + } + + .ql-out-bottom, + .ql-out-top { + visibility: hidden; + } + + .ql-hidden { + display: none !important; + } + + .ql-even { + fill-rule: evenodd; + } + + .ql-empty { + fill: none; + } + + .ql-transparent { + opacity: 0.4; + } + + .ql-thin, + .ql-stroke.ql-thin { + stroke-width: 1; + } + + .ql-editor a { + text-decoration: underline; + } + + .ql-direction.ql-active { + svg:last-child { + display: inline; + } + + svg:first-child { + display: none; + } + } + + .ql-direction svg:last-child { + display: none; + } + + &.ql-toolbar, + & .ql-toolbar { + border-top-left-radius: light.$border-radius-lg; + border-top-right-radius: light.$border-radius-lg; + box-sizing: border-box; + padding: 0.5rem; + + &::after { + clear: both; + content: ''; + display: table; + } + + button { + float: left; + display: inline-block; + padding: 0.1875rem 0.3125rem; + height: 1.5rem; + width: 1.75rem; + background: none; + border: none; + cursor: pointer; + + &:active:hover { + outline: none; + } + + @include app-rtl { + float: right; + } + + svg { + height: 100%; + float: left; + + @include app-rtl { + float: right; + } + } + } + + input.ql-image[type='file'] { + display: none; + } + } + + .ql-tooltip { + transform: translateY(0.625rem); + position: absolute; + + &.ql-flip { + transform: translateY(-0.625rem); + } + + a { + cursor: pointer; + text-decoration: none; + } + } + + .ql-formats { + display: inline-block; + margin-right: 0.9375rem; + vertical-align: middle; + + @include app-rtl { + margin-right: 0; + margin-left: 0.9375rem; + } + + &::after { + content: ''; + display: table; + clear: both; + } + } + + .ql-picker { + vertical-align: middle; + position: relative; + height: 1.5rem; + display: inline-block; + float: left; + + @include app-rtl { + float: right; + } + + &.ql-expanded .ql-picker-options { + top: 100%; + display: block; + z-index: 1; + margin-top: -0.0625rem; + } + + &.ql-header, + &.ql-font, + &.ql-size { + .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); + } + } + + &.ql-header { + width: 6.125rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Normal'; + } + + &[data-value='1']::before { + content: 'Heading 1'; + } + + &[data-value='2']::before { + content: 'Heading 2'; + } + + &[data-value='3']::before { + content: 'Heading 3'; + } + + &[data-value='4']::before { + content: 'Heading 4'; + } + + &[data-value='5']::before { + content: 'Heading 5'; + } + + &[data-value='6']::before { + content: 'Heading 6'; + } + } + } + + &.ql-font { + width: 6.75rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Sans Serif'; + } + + &[data-value='serif']::before { + content: 'Serif'; + } + + &[data-value='monospace']::before { + content: 'Monospace'; + } + } + } + + &.ql-size { + width: 6.125rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Normal'; + } + + &[data-value='small']::before { + content: 'Small'; + } + + &[data-value='large']::before { + content: 'Large'; + } + + &[data-value='huge']::before { + content: 'Huge'; + } + } + } + + &:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + top: 50%; + right: 0; + margin-top: -0.5625rem; + width: 1.125rem; + + @include app-rtl { + right: auto; + left: 0; + } + } + } + + .ql-picker-label { + position: relative; + display: inline-block; + padding-right: 0.125rem; + padding-left: 0.5rem; + height: 100%; + width: 100%; + border: 0.0625rem solid transparent; + cursor: pointer; + + &::before { + line-height: 1.375rem; + display: inline-block; + } + } + + .ql-picker-options { + padding: 0.25rem 0.5rem; + min-width: 100%; + position: absolute; + display: none; + white-space: nowrap; + + .ql-picker-item { + padding-bottom: 0.3125rem; + padding-top: 0.3125rem; + display: block; + cursor: pointer; + } + } + + .ql-color-picker, + .ql-icon-picker { + width: 1.75rem; + + .ql-picker-label { + padding: 0.125rem 0.25rem; + } + } + + .ql-icon-picker { + .ql-picker-options { + padding: 0.25rem 0; + } + + .ql-picker-item { + padding: 0.125rem 0.25rem; + width: 1.5rem; + height: 1.5rem; + } + } + + .ql-color-picker { + .ql-picker-options { + padding: 0.1875rem 0.3125rem; + width: 9.5rem; + } + + .ql-picker-item { + float: left; + margin: 0.125rem; + padding: 0; + width: 1rem; + height: 1rem; + border: 0.0625rem solid transparent; + + @include app-rtl { + float: right; + } + } + + &.ql-background .ql-picker-item { + background-color: #fff; + } + + &.ql-color .ql-picker-item { + background-color: #000; + } + } + + @include app-rtl { + .ql-italic svg, + .ql-list svg, + .ql-indent svg, + .ql-direction svg, + .ql-align svg, + .ql-link svg, + .ql-image svg, + .ql-clean svg { + transform: scaleX(-1); + } + } +} + +.ql-snow + .ql-container { + &, + & .ql-editor { + @include light.border-bottom-radius(light.$border-radius-lg); + } +} +.ql-snow { + &.ql-toolbar, + .ql-toolbar { + background: #fff; + background-clip: padding-box; + } + + .ql-editor { + min-height: 15rem; + background: #fff; + } + + .ql-picker.ql-expanded .ql-picker-label { + z-index: 2; + color: #ccc !important; + + .ql-fill { + fill: #ccc !important; + } + + .ql-stroke { + stroke: #ccc !important; + } + } + + .ql-stroke { + fill: none; + stroke-width: 2; + stroke-linejoin: round; + stroke-linecap: round; + } + + .ql-stroke-miter { + fill: none; + stroke-width: 2; + stroke-miterlimit: 10; + } + + .ql-picker-label { + border: 0.0625rem solid transparent; + } + + .ql-picker-options { + border: 0.0625rem solid transparent; + background-color: #fff; + background-clip: padding-box; + } + + .ql-color-picker .ql-picker-item.ql-selected, + .ql-color-picker .ql-picker-item:hover { + border-color: #000; + } + + .ql-tooltip { + display: flex; + padding: 0.3125rem 0.75rem; + background-color: #fff; + background-clip: padding-box; + white-space: nowrap; + + &::before { + content: 'Visit URL:'; + margin-right: 0.5rem; + line-height: 1.625rem; + + @include app-rtl { + margin-right: 0; + margin-left: 0.5rem; + } + } + + input[type='text'] { + display: none; + margin: 0; + padding: 0.1875rem 0.3125rem; + width: 10.625rem; + height: 1.625rem; + font-size: 0.8125rem; + } + + a.ql-preview { + display: inline-block; + vertical-align: top; + max-width: 12.5rem; + overflow-x: hidden; + text-overflow: ellipsis; + } + + a.ql-action::after { + content: 'Edit'; + margin-left: 1rem; + padding-right: 0.5rem; + border-right: 0.0625rem solid #ccc; + + @include app-rtl { + margin-left: 0; + margin-right: 1rem; + padding-left: 0.5rem; + padding-right: 0; + border-right: 0; + border-left: 0.0625rem solid #ccc; + } + } + + a.ql-remove::before { + content: 'Remove'; + margin-left: 0.5rem; + + @include app-rtl { + margin-right: 0.5rem; + margin-left: 0; + } + } + + a { + line-height: 1.625rem; + } + + &.ql-editing a.ql-preview, + &.ql-editing a.ql-remove { + display: none; + } + + &.ql-editing input[type='text'] { + display: inline-block; + } + + &.ql-editing a.ql-action::after { + content: 'Save'; + border-right: 0; + padding-right: 0; + + @include app-rtl { + border-left: 0; + padding-left: 0; + } + } + + &[data-mode='link']::before { + content: 'Enter link:'; + } + + &[data-mode='formula']::before { + content: 'Enter formula:'; + } + + &[data-mode='video']::before { + content: 'Enter video:'; + } + } +} + +.ql-bubble { + &.ql-toolbar, + .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: #fff; + } + + 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: #fff; + } + 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: #fff; + } + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: #ccc; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #ccc; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #ccc; + } + } + } + + .ql-stroke { + fill: none; + stroke: #ccc; + stroke-linejoin: round; + stroke-linecap: round; + stroke-width: 2; + } + + .ql-stroke-miter { + fill: none; + stroke: #ccc; + stroke-miterlimit: 10; + stroke-width: 2; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: #ccc; + } + + .ql-picker { + color: #ccc; + + &.ql-expanded .ql-picker-label { + z-index: 2; + color: #777; + + .ql-fill { + fill: #777; + } + + .ql-stroke { + stroke: #777; + } + } + } + + .ql-picker-options { + background-color: #444; + } + + .ql-color-picker .ql-picker-label svg, + .ql-icon-picker .ql-picker-label svg { + right: 0.25rem; + + @include app-rtl { + right: auto; + left: 0.25rem; + } + } + + .ql-color-picker { + .ql-color-picker svg { + margin: 0.0625rem; + } + + .ql-picker-item.ql-selected, + .ql-picker-item:hover { + border-color: #fff; + } + } + + .ql-toolbar .ql-formats { + margin: 0.5rem 0.75rem 0.5rem 0; + + @include app-rtl { + margin: 0.5rem 0 0.5rem 0.75rem; + } + + &:first-child { + margin-left: 0.75rem; + + @include app-rtl { + margin-right: 0.75rem; + } + } + } + + .ql-tooltip-arrow { + content: ' '; + position: absolute; + display: block; + left: 50%; + margin-left: -0.375rem; + border-right: 0.375rem solid transparent; + border-left: 0.375rem solid transparent; + } + + .ql-tooltip { + background-color: #444; + color: #fff; + + &:not(.ql-flip) .ql-tooltip-arrow { + top: -0.375rem; + border-bottom: 0.375rem solid #444; + } + + &.ql-flip .ql-tooltip-arrow { + bottom: -0.375rem; + border-top: 0.375rem solid #444; + } + + &.ql-editing { + .ql-tooltip-editor { + display: block; + } + + .ql-formats { + visibility: hidden; + } + } + } + + .ql-tooltip-editor { + display: none; + + input[type='text'] { + position: absolute; + padding: 0.625rem 1.25rem; + height: 100%; + width: 100%; + outline: none; + background: transparent; + border: none; + color: #fff; + font-size: 0.8125rem; + } + + a { + position: absolute; + right: 1.25rem; + top: 0.625rem; + + @include app-rtl { + right: auto; + left: 1.25rem; + } + + &::before { + content: '\D7'; + color: #ccc; + font-size: 1rem; + font-weight: light.$font-weight-medium; + } + } + } + + &.ql-container:not(.ql-disabled) a { + white-space: nowrap; + position: relative; + + &::before, + &::after { + margin-left: 50%; + position: absolute; + visibility: hidden; + left: 0; + transition: visibility 0s ease 200ms; + transform: translate(-50%, -100%); + } + + &:hover::before, + &:hover::after { + visibility: visible; + } + + &::before { + content: attr(href); + top: -0.3125rem; + z-index: 1; + overflow: hidden; + padding: 0.3125rem 0.9375rem; + border-radius: 0.9375rem; + background-color: #444; + text-decoration: none; + color: #fff; + font-weight: normal; + font-size: 0.75rem; + } + + &::after { + content: ' '; + top: 0; + height: 0; + width: 0; + border-top: 0.375rem solid #444; + border-right: 0.375rem solid transparent; + border-left: 0.375rem solid transparent; + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .ql-editor.ql-blank:before { + color: light.$input-placeholder-color; + } + + .ql-snow, + .ql-bubble { + &.ql-toolbar .ql-picker-options, + & .ql-toolbar .ql-picker-options { + box-shadow: light.$dropdown-box-shadow; + } + + .ql-picker { + &.ql-header .ql-picker-item { + &[data-value='1']::before { + font-size: light.$h1-font-size; + } + + &[data-value='2']::before { + font-size: light.$h2-font-size; + } + + &[data-value='3']::before { + font-size: light.$h3-font-size; + } + + &[data-value='4']::before { + font-size: light.$h4-font-size; + } + + &[data-value='5']::before { + font-size: light.$h5-font-size; + } + + &[data-value='6']::before { + font-size: light.$h6-font-size; + } + } + + &.ql-font .ql-picker-item { + &[data-value='serif']::before { + font-family: light.$font-family-serif; + } + + &[data-value='monospace']::before { + font-family: light.$font-family-monospace; + } + } + + &.ql-size .ql-picker-item { + &[data-value='small']::before { + font-size: light.$font-size-sm; + } + + &[data-value='large']::before { + font-size: light.$font-size-lg; + } + + &[data-value='huge']::before { + font-size: light.$font-size-xl; + } + } + } + } + + .ql-snow { + .ql-editor.ql-blank::before { + padding: 0 light.$input-padding-x; + } + + &.ql-container { + border: 0.0625rem solid light.$input-border-color; + } + + .ql-editor { + padding: light.$card-spacer-x-sm * 0.5 light.$input-padding-x; + } + + &.ql-toolbar, + & .ql-toolbar { + border: 0.0625rem solid light.$input-border-color; + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: light.$body-color; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: light.$body-color; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: light.$body-color; + } + } + } + + &.ql-toolbar + .ql-container.ql-snow { + border-top: 0; + } + + .ql-stroke { + stroke: light.$body-color; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: light.$body-color; + } + + .ql-stroke-miter { + stroke: light.$body-color; + } + .ql-picker { + color: light.$body-color; + + &.ql-expanded .ql-picker-options { + border-color: light.$dropdown-border-color; + } + + &.ql-expanded .ql-picker-label { + border-color: light.$input-border-color; + } + } + + .ql-tooltip { + border: light.$dropdown-border-width solid light.$dropdown-border-color; + color: light.$body-color; + box-shadow: light.$dropdown-box-shadow; + + input[type='text'] { + border: 0.0625rem solid light.$input-border-color; + } + } + } + + .ql-bubble .ql-tooltip { + border-radius: light.$border-radius; + z-index: light.$zindex-menu-fixed + 10; + } + } +} + +// dark styles +@if $enable-dark-style { + .dark-style { + .ql-editor.ql-blank:before { + color: dark.$input-placeholder-color; + } + + .ql-snow, + .ql-bubble { + .ql-tooltip { + background: dark.$body-bg; + } + &.ql-toolbar .ql-picker-options, + & .ql-toolbar .ql-picker-options { + box-shadow: dark.$dropdown-box-shadow; + } + + .ql-picker { + &.ql-header .ql-picker-item { + &[data-value='1']::before { + font-size: dark.$h1-font-size; + } + + &[data-value='2']::before { + font-size: dark.$h2-font-size; + } + + &[data-value='3']::before { + font-size: dark.$h3-font-size; + } + + &[data-value='4']::before { + font-size: dark.$h4-font-size; + } + + &[data-value='5']::before { + font-size: dark.$h5-font-size; + } + + &[data-value='6']::before { + font-size: dark.$h6-font-size; + } + } + + &.ql-font .ql-picker-item { + &[data-value='serif']::before { + font-family: dark.$font-family-serif; + } + + &[data-value='monospace']::before { + font-family: dark.$font-family-monospace; + } + } + + &.ql-size .ql-picker-item { + &[data-value='small']::before { + font-size: dark.$font-size-sm; + } + + &[data-value='large']::before { + font-size: dark.$font-size-lg; + } + + &[data-value='huge']::before { + font-size: dark.$font-size-xl; + } + } + } + } + + .ql-snow { + .ql-editor.ql-blank::before { + padding: 0 dark.$input-padding-x; + } + + &.ql-container { + border: 0.0625rem solid dark.$input-border-color; + } + + .ql-editor { + padding: dark.$card-spacer-x-sm * 0.5 dark.$input-padding-x; + background: dark.$card-bg; + } + + .ql-picker-options { + background: dark.$card-bg; + } + + &.ql-toolbar, + & .ql-toolbar { + border: 0.0625rem solid dark.$input-border-color; + background: dark.$card-bg; + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: dark.$body-color; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: dark.$body-color; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: dark.$body-color; + } + } + } + + &.ql-toolbar + .ql-container.ql-snow { + border-top: 0; + } + + .ql-stroke-miter { + stroke: dark.$body-color; + } + + .ql-stroke { + stroke: dark.$body-color; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: dark.$body-color; + } + + .ql-picker { + color: dark.$body-color; + + &.ql-expanded .ql-picker-options { + border-color: dark.$dropdown-border-color; + } + + &.ql-expanded .ql-picker-label { + border-color: dark.$input-border-color; + } + } + + .ql-tooltip { + border: dark.$dropdown-border-width solid dark.$dropdown-border-color; + color: dark.$body-color; + box-shadow: dark.$dropdown-box-shadow; + + input[type='text'] { + border: 0.0625rem solid dark.$input-border-color; + } + } + } + + .ql-bubble .ql-tooltip { + border-radius: dark.$border-radius; + z-index: dark.$zindex-menu-fixed + 10; + } + } +} diff --git a/resources/assets/vendor/libs/quill/katex.js b/resources/assets/vendor/libs/quill/katex.js new file mode 100644 index 0000000..ca9f0aa --- /dev/null +++ b/resources/assets/vendor/libs/quill/katex.js @@ -0,0 +1,7 @@ +import katex from 'katex/dist/katex'; + +try { + window.katex = katex; +} catch (e) {} + +export { katex }; diff --git a/resources/assets/vendor/libs/quill/katex.scss b/resources/assets/vendor/libs/quill/katex.scss new file mode 100644 index 0000000..c7a85d5 --- /dev/null +++ b/resources/assets/vendor/libs/quill/katex.scss @@ -0,0 +1 @@ +@import 'katex/dist/katex'; diff --git a/resources/assets/vendor/libs/quill/quill.js b/resources/assets/vendor/libs/quill/quill.js new file mode 100644 index 0000000..e1d3937 --- /dev/null +++ b/resources/assets/vendor/libs/quill/quill.js @@ -0,0 +1,7 @@ +import Quill from 'quill/dist/quill'; + +try { + window.Quill = Quill; +} catch (e) {} + +export { Quill }; diff --git a/resources/assets/vendor/libs/quill/typography.scss b/resources/assets/vendor/libs/quill/typography.scss new file mode 100644 index 0000000..5c882f8 --- /dev/null +++ b/resources/assets/vendor/libs/quill/typography.scss @@ -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; + } + } + } +}