diff --git a/.eslintrc.json b/.eslintrc.json index 485190ca6c..c598d751dd 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,7 +1,8 @@ { "root": true, + "parser": "vue-eslint-parser", "parserOptions": { - "ecmaVersion": 9, + "ecmaVersion": 2020, "sourceType": "module" //"parser": "babel-eslint" }, @@ -12,6 +13,6 @@ }, "extends": [ "eslint:recommended", - "plugin:vue/recommended" + "plugin:vue/vue3-recommended" ] } \ No newline at end of file diff --git a/.postcssrc.js b/.postcssrc.js new file mode 100644 index 0000000000..e81a10ec6c --- /dev/null +++ b/.postcssrc.js @@ -0,0 +1,16 @@ +const tailwindcss = require('tailwindcss'); + +const plugins = [ + tailwindcss, + require('autoprefixer'), +] + +if (process.env.QUASAR_RTL) { + plugins.push( + require('postcss-rtl')({}) + ) +} + +module.exports = { + plugins +} diff --git a/assets/css/app.scss b/assets/css/app.scss index dd9f566f1e..9533c573bc 100644 --- a/assets/css/app.scss +++ b/assets/css/app.scss @@ -1,15 +1,101 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; -@import 'bootstrap.scss'; +// Disable bootstrap +//@import 'bootstrap.scss'; +// undo @import "~@fortawesome/fontawesome-free/css/all.css"; @import '~cropper/dist/cropper.css'; @import '~flag-icon-css/sass/flag-icon.scss'; @import "~select2/dist/css/select2.css"; @import "~bootstrap-daterangepicker/daterangepicker.css"; -//@import "~bootstrap-select/sass/bootstrap-select"; -//@import '~pretty-checkbox/src/pretty-checkbox.scss'; -//@import '~jquery-ui/themes/base/all.css'; -@import "scss/index.scss"; +@import "~bootstrap-select/sass/bootstrap-select"; +@import '~pretty-checkbox/src/pretty-checkbox.scss'; +@import '~jquery-ui/themes/base/all.css'; + +//@import "scss/index.scss"; + +@layer components { + //ripple + .btn { + //@apply inline-block text-black px-4 py-2 text-xs font-medium leading-6 text-center bg-gray-100 uppercase transition rounded shadow hover:shadow-lg focus:outline-none; + //disabled:cursor-not-allowed + //@apply block px-4 py-2 transition duration-100 ease-in-out focus:border-blue-500 focus:ring-2 focus:ring-blue-500 focus:outline-none focus:ring-opacity-50 disabled:opacity-50 ; + @apply inline-flex items-center px-4 py-2 border border-gray-300 rounded-md shadow-sm text-sm font-medium text-gray-700 bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500; + } + + .btn-primary { + @apply text-white bg-blue-700 hover:bg-blue-800; + } + .btn > .fa { + @apply -ml-1 mr-1 h-4 w-5 fill-current ; + } + + .help-block { + @apply mt-2 text-xs text-gray-500; + } + + .has-error .ch-form-label { + @apply h-8 text-red-500; + } + + .has-error .help-block { + @apply text-red-500 italic text-xs; + } + + .has-error .ch-form-control { + @apply border-red-500; + } + + table { + @apply min-w-full divide-y divide-gray-200; + } + + table thead { + @apply bg-gray-50; + } + + table tbody { + @apply bg-white divide-y divide-gray-200; + } + + //.q-card { + // @apply max-w-sm rounded bg-white overflow-hidden shadow-lg mt-6; + //} + + //.ch-form-control { + // @apply appearance-none block w-full text-gray-700 border-blue-500 rounded py-3 px-4 mb-3 leading-tight; + //} + // + //// + //.ch-form-label { + // @apply text-gray-500 font-bold; + //} + .p-component { + font-size: 13px; + } + + .p-datatable .p-datatable-tbody > tr > td { + } + + legend { + float: left; + width: 100%; + padding: 0; + margin-bottom: 0.5rem; + font-size: calc(1.275rem + 0.3vw); + line-height: inherit; + } + + fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; + } +} //@import "~jquery-ui-timepicker-addon/dist/jquery-ui-timepicker-addon.css"; // diff --git a/assets/css/bootstrap.scss b/assets/css/bootstrap.scss index d08cd39d44..4bd267b0b2 100644 --- a/assets/css/bootstrap.scss +++ b/assets/css/bootstrap.scss @@ -1,3 +1,62 @@ - -@import '~bootstrap/scss/bootstrap'; -@import '~bootstrap-vue/src/index.scss'; \ No newline at end of file +// +////import 'primevue/resources/themes/saga-blue/theme.css'; +////import 'primevue/resources/primevue.min.css'; +////@import '~bootstrap/scss/bootstrap'; +// +@import "~bootstrap/scss/functions"; +@import "~bootstrap/scss/variables"; +@import "~bootstrap/scss/mixins"; +@import "~bootstrap/scss/utilities"; +// +//// Layout & components +////@import "~bootstrap/scss/root"; +////@import "~bootstrap/scss/reboot"; +////@import "~bootstrap/scss/type"; +////@import "~bootstrap/scss/images"; +////@import "~bootstrap/scss/containers"; +////@import "~bootstrap/scss/grid"; +//@import "~bootstrap/scss/tables"; +////@import "~bootstrap/scss/forms"; +////@import "~bootstrap/scss/buttons"; +////@import "~bootstrap/scss/transitions"; +////@import "~bootstrap/scss/dropdown"; +//@import "~bootstrap/scss/button-group"; +@import "~bootstrap/scss/nav"; +////@import "~bootstrap/scss/navbar"; +//@import "~bootstrap/scss/card"; +//@import "~bootstrap/scss/accordion"; +//@import "~bootstrap/scss/breadcrumb"; +//@import "~bootstrap/scss/pagination"; +//@import "~bootstrap/scss/badge"; +//@import "~bootstrap/scss/alert"; +//@import "~bootstrap/scss/progress"; +@import "~bootstrap/scss/list-group"; +//@import "~bootstrap/scss/close"; +//@import "~bootstrap/scss/toasts"; +//@import "~bootstrap/scss/modal"; +//@import "~bootstrap/scss/tooltip"; +//@import "~bootstrap/scss/popover"; +//@import "~bootstrap/scss/carousel"; +//@import "~bootstrap/scss/spinners"; +//@import "~bootstrap/scss/offcanvas"; +// +// +////@import '~mdb-ui-kit/css/mdb.min.css'; +////@import 'node_modules/mdb-ui-kit/src/scss/mdb.core'; +////@import 'node_modules/mdb-ui-kit/src/scss/mdb.free'; +// +////[class*="q-"].row { +//// margin-left: unset; +//// margin-right: unset; +////} +// +//header .row>* { +// width: auto !important; +// --bs-gutter-x: 0rem !important; +// --bs-gutter-y: 0rem !important; +//} +// +//.q-menu .row { +// --bs-gutter-x: 0rem !important; +// --bs-gutter-y: 0rem !important; +//} \ No newline at end of file diff --git a/assets/js/app.js b/assets/js/app.js index e3ba600458..cc8605a4b1 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -14,12 +14,15 @@ global.$ = global.jQuery = $ Routing.setRoutingData(routes); const locale = document.querySelector('html').lang; -const moment = require('moment'); -global.moment = moment; -require('select2/dist/js/select2.full.min'); -require('flatpickr'); +// moment +const { DateTime } = require("luxon"); +window.luxon = global.luxon = DateTime; +import 'select2/dist/js/select2.full.min'; +import 'select2/dist/css/select2.min.css'; + +//require('flatpickr'); //import('bootstrap-vue'); -import('bootstrap'); +//import('bootstrap'); require('webpack-jquery-ui'); require('webpack-jquery-ui/css'); @@ -29,7 +32,7 @@ require('webpack-jquery-ui/css'); // window.frameReady = frameReady; require('./vendor'); -import('./main'); +import './main'; require('bootstrap-daterangepicker'); import('qtip2'); //require('bootstrap-daterangepicker/daterangepicker.js'); diff --git a/assets/vue/App.vue b/assets/vue/App.vue index 591fb23534..00a07ed944 100644 --- a/assets/vue/App.vue +++ b/assets/vue/App.vue @@ -1,73 +1,414 @@ - - \ No newline at end of file diff --git a/assets/vue/components/ActionCell.vue b/assets/vue/components/ActionCell.vue index 91c6ecb832..128c406ec0 100644 --- a/assets/vue/components/ActionCell.vue +++ b/assets/vue/components/ActionCell.vue @@ -1,47 +1,80 @@ diff --git a/assets/vue/components/Breadcrumb.vue b/assets/vue/components/Breadcrumb.vue index 901a60b4c3..49180c513b 100644 --- a/assets/vue/components/Breadcrumb.vue +++ b/assets/vue/components/Breadcrumb.vue @@ -1,8 +1,8 @@