From fa93c9a2fba719fe4424cfbf509f6914612e832d Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 9 May 2023 20:03:07 +0200 Subject: [PATCH 01/68] feat: add dark mode support --- package.json | 2 +- src/App.js | 63 +- src/components/AppHeader.js | 61 +- src/components/header/AppHeaderDropdown.js | 4 +- src/layout/DefaultLayout.js | 2 +- src/scss/_example.scss | 41 +- src/scss/_variables.scss | 1792 +------------------- src/store.js | 6 + src/views/charts/MainChart.js | 107 ++ src/views/dashboard/Dashboard.js | 90 +- src/views/pages/login/Login.js | 2 +- src/views/pages/page404/Page404.js | 2 +- src/views/pages/page500/Page500.js | 2 +- src/views/pages/register/Register.js | 2 +- 14 files changed, 255 insertions(+), 1921 deletions(-) create mode 100644 src/views/charts/MainChart.js diff --git a/package.json b/package.json index da08efaab..accecf866 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "dependencies": { "@coreui/chartjs": "^3.1.1", - "@coreui/coreui": "^4.2.6", + "@coreui/coreui": "4.3.0-alpha.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.1.0", "@coreui/react": "^4.6.0", diff --git a/src/App.js b/src/App.js index 7c2488188..dd068fe6f 100644 --- a/src/App.js +++ b/src/App.js @@ -1,13 +1,29 @@ -import React, { Component, Suspense } from 'react' +import React, { Suspense, useEffect } from 'react' import { HashRouter, Route, Routes } from 'react-router-dom' +import { useSelector } from 'react-redux' + +import { CSpinner } from '@coreui/react' import './scss/style.scss' const loading = (
-
+
) +const getPreferredTheme = (storedTheme) => { + if (storedTheme) { + return storedTheme + } + + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' +} + +const setTheme = (theme) => { + document.documentElement.dataset.coreuiTheme = + theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : theme +} + // Containers const DefaultLayout = React.lazy(() => import('./layout/DefaultLayout')) @@ -17,22 +33,35 @@ const Register = React.lazy(() => import('./views/pages/register/Register')) const Page404 = React.lazy(() => import('./views/pages/page404/Page404')) const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) -class App extends Component { - render() { - return ( - - - - } /> - } /> - } /> - } /> - } /> - - - - ) +const App = () => { + const theme = useSelector((state) => state.theme) + + if (theme) { + document.documentElement.dataset.coreuiTheme = + theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : theme } + + useEffect(() => { + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { + if (theme !== 'light' || theme !== 'dark') { + setTheme(getPreferredTheme(theme)) + } + }) + }, []) + + return ( + + + + } /> + } /> + } /> + } /> + } /> + + + + ) } export default App diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index dd5f544e3..25443a13d 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -3,6 +3,10 @@ import { NavLink } from 'react-router-dom' import { useSelector, useDispatch } from 'react-redux' import { CContainer, + CDropdown, + CDropdownItem, + CDropdownMenu, + CDropdownToggle, CHeader, CHeaderBrand, CHeaderDivider, @@ -12,7 +16,15 @@ import { CNavItem, } from '@coreui/react' import CIcon from '@coreui/icons-react' -import { cilBell, cilEnvelopeOpen, cilList, cilMenu } from '@coreui/icons' +import { + cilBell, + cilContrast, + cilEnvelopeOpen, + cilList, + cilMenu, + cilMoon, + cilSun, +} from '@coreui/icons' import { AppBreadcrumb } from './index' import { AppHeaderDropdown } from './header/index' @@ -21,6 +33,7 @@ import { logo } from 'src/assets/brand/logo' const AppHeader = () => { const dispatch = useDispatch() const sidebarShow = useSelector((state) => state.sidebarShow) + const theme = useSelector((state) => state.theme) return ( @@ -63,6 +76,52 @@ const AppHeader = () => { +
  • +
    +
  • + + + {theme === 'dark' ? ( + + ) : theme === 'auto' ? ( + + ) : ( + + )} + + + dispatch({ type: 'setTheme', theme: 'light' })} + > + Light + + dispatch({ type: 'setTheme', theme: 'dark' })} + > + Dark + + dispatch({ type: 'setTheme', theme: 'auto' })} + > + Auto + + + +
  • +
    +
  • diff --git a/src/components/header/AppHeaderDropdown.js b/src/components/header/AppHeaderDropdown.js index 5be919ee9..4332d8e52 100644 --- a/src/components/header/AppHeaderDropdown.js +++ b/src/components/header/AppHeaderDropdown.js @@ -31,7 +31,7 @@ const AppHeaderDropdown = () => { - Account + Account Updates @@ -60,7 +60,7 @@ const AppHeaderDropdown = () => { 42 - Settings + Settings Profile diff --git a/src/layout/DefaultLayout.js b/src/layout/DefaultLayout.js index 43bd64432..0b6311774 100644 --- a/src/layout/DefaultLayout.js +++ b/src/layout/DefaultLayout.js @@ -5,7 +5,7 @@ const DefaultLayout = () => { return (
    -
    +
    diff --git a/src/scss/_example.scss b/src/scss/_example.scss index f8791fb21..fdf64254b 100644 --- a/src/scss/_example.scss +++ b/src/scss/_example.scss @@ -1,33 +1,23 @@ +/* stylelint-disable declaration-no-important, scss/selector-no-redundant-nesting-selector */ +@import "@coreui/coreui/scss/functions"; +@import "@coreui/coreui/scss/variables"; +@import "@coreui/coreui/scss/mixins"; + .example { &:not(:first-child) { margin-top: 1.5rem; } .tab-content { - background-color: $light-50 !important; - - @at-root .dark-theme & { - background-color: rgba(255, 255, 255, .1) !important; - } - } - - code[class*="language-"], - pre[class*="language-"] { - font-size: .875rem !important; - } - - :not(pre) > code[class*="language-"], - pre[class*="language-"] { - background: transparent; + background-color: var(--#{$prefix}tertiary-bg) !important; } & + p { - margin-top: 1.5rem + margin-top: 1.5rem; } // Components examples - .preview, - .preview .col { + .preview { + p { margin-top: 2rem; } @@ -105,5 +95,20 @@ margin-top: .5rem; margin-bottom: .5rem; } + + .docs-example-modal { + .modal { + position: static; + display: block; + } + } } } + +@if $enable-dark-mode { + @include color-mode(dark) { + .example .tab-content { + background-color: var(--#{$prefix}secondary-bg) !important; + } + } +} \ No newline at end of file diff --git a/src/scss/_variables.scss b/src/scss/_variables.scss index 373dbeec2..697b08ade 100644 --- a/src/scss/_variables.scss +++ b/src/scss/_variables.scss @@ -1,1791 +1,3 @@ -// Variables +// Variable overrides // -// If you want to customize your project please uncomment and update one of the following variables. - -// Color system - -// scss-docs-start gray-color-variables -// $white: #fff !default; -// $gray-base: #3c4b64 !default; -// $gray-100: #ebedef !default; -// $gray-200: #d8dbe0 !default; -// $gray-300: #c4c9d0 !default; -// $gray-400: #b1b7c1 !default; -// $gray-500: #9da5b1 !default; -// $gray-600: #8a93a2 !default; -// $gray-700: #768192 !default; -// $gray-800: #636f83 !default; -// $gray-900: #4f5d73 !default; -// $black: #000015 !default; -// scss-docs-end gray-color-variables - -// fusv-disable -// scss-docs-start gray-colors-map -// $grays: ( -// "100": $gray-100, -// "200": $gray-200, -// "300": $gray-300, -// "400": $gray-400, -// "500": $gray-500, -// "600": $gray-600, -// "700": $gray-700, -// "800": $gray-800, -// "900": $gray-900 -// ) !default; -// scss-docs-end gray-colors-map -// fusv-enable - -// $high-emphasis: rgba(shift-color($gray-base, +26), .95) !default; -// $medium-emphasis: rgba(shift-color($gray-base, +26), .681) !default; -// $disabled: rgba(shift-color($gray-base, +26), .38) !default; - -// $high-emphasis-inverse: rgba($white, .87) !default; -// $medium-emphasis-inverse: rgba($white, .6) !default; -// $disabled-inverse: rgba($white, .38) !default; - -// scss-docs-start color-variables -// $blue: #0d6efd !default; -// $indigo: #6610f2 !default; -// $purple: #6f42c1 !default; -// $pink: #d63384 !default; -// $red: #dc3545 !default; -// $orange: #fd7e14 !default; -// $yellow: #ffc107 !default; -// $green: #198754 !default; -// $teal: #20c997 !default; -// $cyan: #0dcaf0 !default; -// scss-docs-end color-variables - -// scss-docs-start colors-map -// $colors: ( -// "blue": $blue, -// "indigo": $indigo, -// "purple": $purple, -// "pink": $pink, -// "red": $red, -// "orange": $orange, -// "yellow": $yellow, -// "green": $green, -// "teal": $teal, -// "cyan": $cyan, -// "white": $white, -// "gray": $gray-600, -// "gray-dark": $gray-800 -// ) !default; -// scss-docs-end colors-map - -// fusv-disable -// $primary-dark: #1f1498 !default; -// $primary-base: #321fdb !default; -// $primary-50: #988fed !default; -// $primary-25: #ccc7f6 !default; - -// $secondary-dark: #212233 !default; -// $secondary-base: #9da5b1 !default; -// $secondary-50: #9da5b1 !default; -// $secondary-25: #ced2d8 !default; - -// $success-dark: #1b9e3e !default; -// $success-base: #2eb85c !default; -// $success-50: #96dbad !default; -// $success-25: #cbedd6 !default; - -// $info-dark: #2982cc !default; -// $info-base: #39f !default; -// $info-50: #80c6ff !default; -// $info-25: #c0e6ff !default; - -// $warning-dark: #f6960b !default; -// $warning-base: #f9b115 !default; -// $warning-50: #fcd88a !default; -// $warning-25: #feecc5 !default; - -// $danger-dark: #d93737 !default; -// $danger-base: #e55353 !default; -// $danger-50: #f2a9a9 !default; -// $danger-25: #f9d4d4 !default; - -// $light-dark: $gray-100 !default; -// $light-base: $gray-100 !default; -// $light-50: shift-color($light-base, -70) !default; -// $light-25: shift-color($light-base, -80) !default; - -// $dark-dark: $gray-900 !default; -// $dark-base: $gray-900 !default; -// $dark-50: shift-color($dark-base, -70) !default; -// $dark-25: shift-color($dark-base, -80) !default; -// fusv-enable - -// scss-docs-start theme-color-variables -// $primary: $primary-base !default; -// $secondary: $secondary-base !default; -// $success: $success-base !default; -// $info: $info-base !default; -// $warning: $warning-base !default; -// $danger: $danger-base !default; -// $light: $light-base !default; -// $dark: $dark-base !default; -// scss-docs-end theme-color-variables - -// scss-docs-start theme-colors-map -// $theme-colors: ( -// "primary": $primary, -// "secondary": $secondary, -// "success": $success, -// "info": $info, -// "warning": $warning, -// "danger": $danger, -// "light": $light, -// "dark": $dark -// ) !default; -// scss-docs-end theme-colors-map - -// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. -// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast -// $min-contrast-ratio: 4.5 !default; - -// Customize the light and dark text colors for use in our color contrast function. -// $color-contrast-dark: $high-emphasis-inverse !default; -// $color-contrast-light: $high-emphasis !default; - -// fusv-disable -// $blue-100: tint-color($blue, 80%) !default; -// $blue-200: tint-color($blue, 60%) !default; -// $blue-300: tint-color($blue, 40%) !default; -// $blue-400: tint-color($blue, 20%) !default; -// $blue-500: $blue !default; -// $blue-600: shade-color($blue, 20%) !default; -// $blue-700: shade-color($blue, 40%) !default; -// $blue-800: shade-color($blue, 60%) !default; -// $blue-900: shade-color($blue, 80%) !default; - -// $indigo-100: tint-color($indigo, 80%) !default; -// $indigo-200: tint-color($indigo, 60%) !default; -// $indigo-300: tint-color($indigo, 40%) !default; -// $indigo-400: tint-color($indigo, 20%) !default; -// $indigo-500: $indigo !default; -// $indigo-600: shade-color($indigo, 20%) !default; -// $indigo-700: shade-color($indigo, 40%) !default; -// $indigo-800: shade-color($indigo, 60%) !default; -// $indigo-900: shade-color($indigo, 80%) !default; - -// $purple-100: tint-color($purple, 80%) !default; -// $purple-200: tint-color($purple, 60%) !default; -// $purple-300: tint-color($purple, 40%) !default; -// $purple-400: tint-color($purple, 20%) !default; -// $purple-500: $purple !default; -// $purple-600: shade-color($purple, 20%) !default; -// $purple-700: shade-color($purple, 40%) !default; -// $purple-800: shade-color($purple, 60%) !default; -// $purple-900: shade-color($purple, 80%) !default; - -// $pink-100: tint-color($pink, 80%) !default; -// $pink-200: tint-color($pink, 60%) !default; -// $pink-300: tint-color($pink, 40%) !default; -// $pink-400: tint-color($pink, 20%) !default; -// $pink-500: $pink !default; -// $pink-600: shade-color($pink, 20%) !default; -// $pink-700: shade-color($pink, 40%) !default; -// $pink-800: shade-color($pink, 60%) !default; -// $pink-900: shade-color($pink, 80%) !default; - -// $red-100: tint-color($red, 80%) !default; -// $red-200: tint-color($red, 60%) !default; -// $red-300: tint-color($red, 40%) !default; -// $red-400: tint-color($red, 20%) !default; -// $red-500: $red !default; -// $red-600: shade-color($red, 20%) !default; -// $red-700: shade-color($red, 40%) !default; -// $red-800: shade-color($red, 60%) !default; -// $red-900: shade-color($red, 80%) !default; - -// $orange-100: tint-color($orange, 80%) !default; -// $orange-200: tint-color($orange, 60%) !default; -// $orange-300: tint-color($orange, 40%) !default; -// $orange-400: tint-color($orange, 20%) !default; -// $orange-500: $orange !default; -// $orange-600: shade-color($orange, 20%) !default; -// $orange-700: shade-color($orange, 40%) !default; -// $orange-800: shade-color($orange, 60%) !default; -// $orange-900: shade-color($orange, 80%) !default; - -// $yellow-100: tint-color($yellow, 80%) !default; -// $yellow-200: tint-color($yellow, 60%) !default; -// $yellow-300: tint-color($yellow, 40%) !default; -// $yellow-400: tint-color($yellow, 20%) !default; -// $yellow-500: $yellow !default; -// $yellow-600: shade-color($yellow, 20%) !default; -// $yellow-700: shade-color($yellow, 40%) !default; -// $yellow-800: shade-color($yellow, 60%) !default; -// $yellow-900: shade-color($yellow, 80%) !default; - -// $green-100: tint-color($green, 80%) !default; -// $green-200: tint-color($green, 60%) !default; -// $green-300: tint-color($green, 40%) !default; -// $green-400: tint-color($green, 20%) !default; -// $green-500: $green !default; -// $green-600: shade-color($green, 20%) !default; -// $green-700: shade-color($green, 40%) !default; -// $green-800: shade-color($green, 60%) !default; -// $green-900: shade-color($green, 80%) !default; - -// $teal-100: tint-color($teal, 80%) !default; -// $teal-200: tint-color($teal, 60%) !default; -// $teal-300: tint-color($teal, 40%) !default; -// $teal-400: tint-color($teal, 20%) !default; -// $teal-500: $teal !default; -// $teal-600: shade-color($teal, 20%) !default; -// $teal-700: shade-color($teal, 40%) !default; -// $teal-800: shade-color($teal, 60%) !default; -// $teal-900: shade-color($teal, 80%) !default; - -// $cyan-100: tint-color($cyan, 80%) !default; -// $cyan-200: tint-color($cyan, 60%) !default; -// $cyan-300: tint-color($cyan, 40%) !default; -// $cyan-400: tint-color($cyan, 20%) !default; -// $cyan-500: $cyan !default; -// $cyan-600: shade-color($cyan, 20%) !default; -// $cyan-700: shade-color($cyan, 40%) !default; -// $cyan-800: shade-color($cyan, 60%) !default; -// $cyan-900: shade-color($cyan, 80%) !default; -// fusv-enable - -// Characters which are escaped by the escape-svg function -// $escaped-characters: ( -// ("<", "%3c"), -// (">", "%3e"), -// ("#", "%23"), -// ("(", "%28"), -// (")", "%29"), -// ) !default; - -// Options -// -// Quickly modify global styling by enabling or disabling optional features. - -// $enable-caret: true !default; -// $enable-rounded: true !default; -// $enable-shadows: false !default; -// $enable-gradients: false !default; -// $enable-transitions: true !default; -// $enable-reduced-motion: true !default; -// $enable-smooth-scroll: true !default; -// $enable-grid-classes: true !default; -// $enable-button-pointers: true !default; -// $enable-rfs: true !default; -// $enable-validation-icons: true !default; -// $enable-negative-margins: false !default; -// $enable-deprecation-messages: true !default; -// $enable-important-utilities: true !default; -// $enable-contrast-ratio-correction: true !default; -// $enable-contrast-ratio-warnings: false !default; -// $enable-ltr: true !default; -// $enable-rtl: false !default; - -// Set mobile breakpoint - -// $mobile-breakpoint: md !default; - -// Prefix for :root CSS variables - -// $variable-prefix: cui- !default; - -// Gradient -// -// The gradient which is added to components if `$enable-gradients` is `true` -// This gradient is also added to elements with `.bg-gradient` -// scss-docs-start variable-gradient -// $gradient: linear-gradient(180deg, rgba($white, .15), rgba($white, 0)) !default; -// scss-docs-end variable-gradient - -// Spacing -// -// Control the default styling of most Bootstrap elements by modifying these -// variables. Mostly focused on spacing. -// You can add more entries to the $spacers map, should you need more variation. - -// scss-docs-start spacer-variables-maps -// $spacer: 1rem !default; -// $spacers: ( -// 0: 0, -// 1: $spacer / 4, -// 2: $spacer / 2, -// 3: $spacer, -// 4: $spacer * 1.5, -// 5: $spacer * 3, -// ) !default; - -// $negative-spacers: if($enable-negative-margins, negativify-map($spacers), null) !default; -// scss-docs-end spacer-variables-maps - -// Position -// -// Define the edge positioning anchors of the position utilities. - -// scss-docs-start position-map -// $position-values: ( -// 0: 0, -// 50: 50%, -// 100: 100% -// ) !default; -// scss-docs-end position-map - -// Body -// -// Settings for the `` element. - -// $body-bg: $white !default; -// $body-color: $high-emphasis !default; -// $body-text-align: null !default; - - -// Links -// -// Style anchor elements. - -// $link-color: $primary !default; -// $link-decoration: underline !default; -// $link-shade-percentage: 20% !default; -// $link-hover-color: shift-color($link-color, $link-shade-percentage) !default; -// $link-hover-decoration: null !default; - -// $stretched-link-pseudo-element: after !default; -// $stretched-link-z-index: 1 !default; - -// Paragraphs -// -// Style p element. - -// $paragraph-margin-bottom: 1rem !default; - - -// Grid breakpoints -// -// Define the minimum dimensions at which your layout will change, -// adapting to different screen sizes, for use in media queries. - -// scss-docs-start grid-breakpoints -// $grid-breakpoints: ( -// xs: 0, -// sm: 576px, -// md: 768px, -// lg: 992px, -// xl: 1200px, -// xxl: 1400px -// ) !default; -// scss-docs-end grid-breakpoints - -// @include _assert-ascending($grid-breakpoints, "$grid-breakpoints"); -// @include _assert-starts-at-zero($grid-breakpoints, "$grid-breakpoints"); - - -// Grid containers -// -// Define the maximum width of `.container` for different screen sizes. - -// scss-docs-start container-max-widths -// $container-max-widths: ( -// sm: 540px, -// md: 720px, -// lg: 960px, -// xl: 1140px, -// xxl: 1320px -// ) !default; -// scss-docs-end container-max-widths - -// @include _assert-ascending($container-max-widths, "$container-max-widths"); - - -// Grid columns -// -// Set the number of columns and specify the width of the gutters. - -// $grid-columns: 12 !default; -// $grid-gutter-width: 1.5rem !default; -// $grid-row-columns: 6 !default; - -// $gutters: $spacers !default; - -// Container padding - -// $container-padding-x: $grid-gutter-width / 2 !default; - - -// Components -// -// Define common padding and border radius sizes and more. - -// scss-docs-start border-variables -// $border-width: 1px !default; -// $border-widths: ( -// 1: 1px, -// 2: 2px, -// 3: 3px, -// 4: 4px, -// 5: 5px -// ) !default; - -// $border-color: $gray-200 !default; -// scss-docs-end border-variables - -// scss-docs-start border-radius-variables -// $border-radius: .25rem !default; -// $border-radius-sm: .2rem !default; -// $border-radius-lg: .3rem !default; -// $border-radius-pill: 50rem !default; -// scss-docs-end border-radius-variables - -// scss-docs-start box-shadow-variables -// $box-shadow: 0 .5rem 1rem rgba($black, .15) !default; -// $box-shadow-sm: 0 .125rem .25rem rgba($black, .075) !default; -// $box-shadow-lg: 0 1rem 3rem rgba($black, .175) !default; -// $box-shadow-inset: inset 0 1px 2px rgba($black, .075) !default; -// scss-docs-end box-shadow-variables - -// $component-active-color: $high-emphasis-inverse !default; -// $component-active-bg: $primary !default; - -// scss-docs-start caret-variables -// $caret-width: .3em !default; -// $caret-vertical-align: $caret-width * .85 !default; -// $caret-spacing: $caret-width * .85 !default; -// scss-docs-end caret-variables - -// $transition-base: all .2s ease-in-out !default; -// $transition-fade: opacity .15s linear !default; -// scss-docs-start collapse-transition -// $transition-collapse: height .35s ease !default; -// scss-docs-end collapse-transition - -// stylelint-disable function-disallowed-list -// scss-docs-start aspect-ratios -// $aspect-ratios: ( -// "1x1": 100%, -// "4x3": calc(3 / 4 * 100%), -// "16x9": calc(9 / 16 * 100%), -// "21x9": calc(9 / 21 * 100%) -// ) !default; -// scss-docs-end aspect-ratios -// stylelint-enable function-disallowed-list - -// Typography -// -// Font, line-height, and color for body text, headings, and more. - -// scss-docs-start font-variables -// stylelint-disable value-keyword-case -// $font-family-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" !default; -// $font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default; -// stylelint-enable value-keyword-case -// $font-family-base: var(--#{$variable-prefix}font-sans-serif) !default; -// $font-family-code: var(--#{$variable-prefix}font-monospace) !default; - -// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins -// $font-size-base effects the font size of the body text -// $font-size-root: null !default; -// $font-size-base: 1rem !default; // Assumes the browser default, typically `16px` -// $font-size-sm: $font-size-base * .875 !default; -// $font-size-lg: $font-size-base * 1.25 !default; - -// $font-weight-lighter: lighter !default; -// $font-weight-light: 300 !default; -// $font-weight-normal: 400 !default; -// $font-weight-medium: 500 !default; -// $font-weight-semibold: 600 !default; -// $font-weight-bold: 700 !default; -// $font-weight-bolder: bolder !default; - -// $font-weight-base: $font-weight-normal !default; - -// $line-height-base: 1.5 !default; -// $line-height-sm: 1.25 !default; -// $line-height-lg: 2 !default; - -// $h1-font-size: $font-size-base * 2.5 !default; -// $h2-font-size: $font-size-base * 2 !default; -// $h3-font-size: $font-size-base * 1.75 !default; -// $h4-font-size: $font-size-base * 1.5 !default; -// $h5-font-size: $font-size-base * 1.25 !default; -// $h6-font-size: $font-size-base !default; -// scss-docs-end font-variables - -// scss-docs-start font-sizes -// $font-sizes: ( -// 1: $h1-font-size, -// 2: $h2-font-size, -// 3: $h3-font-size, -// 4: $h4-font-size, -// 5: $h5-font-size, -// 6: $h6-font-size -// ) !default; -// scss-docs-end font-sizes - -// scss-docs-start headings-variables -// $headings-margin-bottom: $spacer / 2 !default; -// $headings-font-family: null !default; -// $headings-font-style: null !default; -// $headings-font-weight: 500 !default; -// $headings-line-height: 1.2 !default; -// $headings-color: unset !default; -// scss-docs-end headings-variables - -// scss-docs-start display-headings -// $display-font-sizes: ( -// 1: 5rem, -// 2: 4.5rem, -// 3: 4rem, -// 4: 3.5rem, -// 5: 3rem, -// 6: 2.5rem -// ) !default; - -// $display-font-weight: 300 !default; -// $display-line-height: $headings-line-height !default; -// scss-docs-end display-headings - -// scss-docs-start type-variables -// $lead-font-size: $font-size-base * 1.25 !default; -// $lead-font-weight: 300 !default; - -// $small-font-size: .875em !default; - -// $sub-sup-font-size: .75em !default; - -// $text-high-emphasis: $high-emphasis !default; -// $text-medium-emphasis: $medium-emphasis !default; -// $text-disabled: $disabled !default; -// $text-muted: $disabled !default; - -// $text-high-emphasis-inverse: $high-emphasis-inverse !default; -// $text-medium-emphasis-inverse: $medium-emphasis-inverse !default; -// $text-disabled-inverse: $disabled-inverse !default; - -// $initialism-font-size: $small-font-size !default; - -// $blockquote-margin-y: $spacer !default; -// $blockquote-font-size: $font-size-base * 1.25 !default; -// $blockquote-footer-color: $gray-600 !default; -// $blockquote-footer-font-size: $small-font-size !default; - -// $hr-margin-y: $spacer !default; -// $hr-color: inherit !default; -// $hr-height: $border-width !default; -// $hr-opacity: .25 !default; - -// $vr-color: inherit !default; -// $vr-width: $border-width !default; -// $vr-opacity: .25 !default; - -// $legend-margin-bottom: .5rem !default; -// $legend-font-size: 1.5rem !default; -// $legend-font-weight: null !default; - -// $mark-padding: .2em !default; - -// $dt-font-weight: $font-weight-bold !default; - -// $nested-kbd-font-weight: $font-weight-bold !default; - -// $list-inline-padding: .5rem !default; - -// $mark-bg: #fcf8e3 !default; -// scss-docs-end type-variables - -// Icons -// $icon-size-base: 1rem !default; -// $icon-size-sm: $icon-size-base * .875 !default; -// $icon-size-lg: $icon-size-base * 1.25 !default; -// $icon-size-xl: $icon-size-base * 1.5 !default; - - -// Tables -// -// Customizes the `.table` component with basic values, each used across all table variations. - -// scss-docs-start table-variables -// $table-cell-padding-y: .5rem !default; -// $table-cell-padding-x: .5rem !default; -// $table-cell-padding-y-sm: .25rem !default; -// $table-cell-padding-x-sm: .25rem !default; - -// $table-cell-vertical-align: top !default; - -// $table-color: $body-color !default; -// $table-bg: transparent !default; - -// $table-th-font-weight: 600 !default; - -// $table-striped-color: $table-color !default; -// $table-striped-bg-factor: .05 !default; -// $table-striped-bg: rgba($black, $table-striped-bg-factor) !default; - -// $table-active-color: $table-color !default; -// $table-active-bg-factor: .1 !default; -// $table-active-bg: rgba($black, $table-active-bg-factor) !default; - -// $table-hover-color: $table-color !default; -// $table-hover-bg-factor: .075 !default; -// $table-hover-bg: rgba($black, $table-hover-bg-factor) !default; - -// $table-border-factor: .1 !default; -// $table-border-width: $border-width !default; -// $table-border-color: $border-color !default; - -// $table-striped-order: odd !default; - -// $table-group-separator-color: currentColor !default; - -// $table-caption-color: $text-muted !default; - -// $table-bg-scale: -80% !default; -// scss-docs-end table-variables - -// scss-docs-start table-loop -// $table-variants: ( -// "primary": table-color-map(shift-color($primary, $table-bg-scale)), -// "secondary": table-color-map(shift-color($secondary, $table-bg-scale)), -// "success": table-color-map(shift-color($success, $table-bg-scale)), -// "danger": table-color-map(shift-color($danger, $table-bg-scale)), -// "warning": table-color-map(shift-color($warning, $table-bg-scale)), -// "info": table-color-map(shift-color($info, $table-bg-scale)), -// "light": table-color-map(shift-color($light, $table-bg-scale)), -// "dark": table-color-map(shift-color($dark, $table-bg-scale)) -// ) !default; -// scss-docs-end table-loop - - -// Buttons + Forms -// -// Shared variables that are reassigned to `$input-` and `$btn-` specific variables. - -// scss-docs-start input-btn-variables -// $input-btn-padding-y: .375rem !default; -// $input-btn-padding-x: .75rem !default; -// $input-btn-font-family: null !default; -// $input-btn-font-size: $font-size-base !default; -// $input-btn-line-height: $line-height-base !default; - -// $input-btn-focus-width: .25rem !default; -// $input-btn-focus-color-opacity: .25 !default; -// $input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default; -// $input-btn-focus-blur: 0 !default; -// $input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default; - -// $input-btn-padding-y-sm: .25rem !default; -// $input-btn-padding-x-sm: .5rem !default; -// $input-btn-font-size-sm: $font-size-sm !default; - -// $input-btn-padding-y-lg: .5rem !default; -// $input-btn-padding-x-lg: 1rem !default; -// $input-btn-font-size-lg: $font-size-lg !default; - -// $input-btn-border-width: $border-width !default; -// scss-docs-end input-btn-variables - - -// Buttons -// -// For each of Bootstrap's buttons, define text, background, and border color. - -// scss-docs-start btn-variables -// $btn-padding-y: $input-btn-padding-y !default; -// $btn-padding-x: $input-btn-padding-x !default; -// $btn-font-family: $input-btn-font-family !default; -// $btn-font-size: $input-btn-font-size !default; -// $btn-line-height: $input-btn-line-height !default; -// $btn-white-space: null !default; // Set to `nowrap` to prevent text wrapping - -// $btn-padding-y-sm: $input-btn-padding-y-sm !default; -// $btn-padding-x-sm: $input-btn-padding-x-sm !default; -// $btn-font-size-sm: $input-btn-font-size-sm !default; - -// $btn-padding-y-lg: $input-btn-padding-y-lg !default; -// $btn-padding-x-lg: $input-btn-padding-x-lg !default; -// $btn-font-size-lg: $input-btn-font-size-lg !default; - -// $btn-border-width: $input-btn-border-width !default; - -// $btn-font-weight: $font-weight-normal !default; -// $btn-box-shadow: inset 0 1px 0 rgba($white, .15), 0 1px 1px rgba($black, .075) !default; -// $btn-focus-width: $input-btn-focus-width !default; -// $btn-focus-box-shadow: $input-btn-focus-box-shadow !default; -// $btn-disabled-opacity: .65 !default; -// $btn-active-box-shadow: inset 0 3px 5px rgba($black, .125) !default; - -// $btn-link-color: $link-color !default; -// $btn-link-hover-color: $link-hover-color !default; -// $btn-link-disabled-color: $gray-600 !default; - -// Allows for customizing button radius independently from global border radius -// $btn-border-radius: $border-radius !default; -// $btn-border-radius-sm: $border-radius-sm !default; -// $btn-border-radius-lg: $border-radius-lg !default; - -// $btn-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; - -// $btn-hover-bg-shade-amount: 15% !default; -// $btn-hover-bg-tint-amount: 15% !default; -// $btn-hover-border-shade-amount: 20% !default; -// $btn-hover-border-tint-amount: 10% !default; -// $btn-active-bg-shade-amount: 20% !default; -// $btn-active-bg-tint-amount: 20% !default; -// $btn-active-border-shade-amount: 25% !default; -// $btn-active-border-tint-amount: 10% !default; - -// $button-variants: ( -// "primary": btn-color-map($primary, $primary), -// "secondary": btn-color-map($secondary, $secondary), -// "success": btn-color-map($success, $success), -// "danger": btn-color-map($danger, $danger), -// "warning": btn-color-map($warning, $warning), -// "info": btn-color-map($info, $info), -// "light": btn-color-map($light, $light), -// "dark": btn-color-map($dark, $dark) -// ) !default; - -// $button-outline-ghost-variants: ( -// "primary": btn-outline-color-map($primary), -// "secondary": btn-outline-color-map($secondary), -// "success": btn-outline-color-map($success), -// "danger": btn-outline-color-map($danger), -// "warning": btn-outline-color-map($warning), -// "info": btn-outline-color-map($info), -// "light": btn-outline-color-map($light), -// "dark": btn-outline-color-map($dark) -// ) !default; -// scss-docs-end btn-variables - - -// Forms -// scss-docs-start form-variables -// scss-docs-start form-text-variables -// $form-text-margin-top: .25rem !default; -// $form-text-font-size: $small-font-size !default; -// $form-text-font-style: null !default; -// $form-text-font-weight: null !default; -// $form-text-color: $text-muted !default; -// scss-docs-end form-text-variables - -// scss-docs-start form-label-variables -// $form-label-margin-bottom: .5rem !default; -// $form-label-font-size: null !default; -// $form-label-font-style: null !default; -// $form-label-font-weight: null !default; -// $form-label-color: null !default; -// scss-docs-end form-label-variables - -// scss-docs-start form-input-variables -// $input-padding-y: $input-btn-padding-y !default; -// $input-padding-x: $input-btn-padding-x !default; -// $input-font-family: $input-btn-font-family !default; -// $input-font-size: $input-btn-font-size !default; -// $input-font-weight: $font-weight-base !default; -// $input-line-height: $input-btn-line-height !default; - -// $input-padding-y-sm: $input-btn-padding-y-sm !default; -// $input-padding-x-sm: $input-btn-padding-x-sm !default; -// $input-font-size-sm: $input-btn-font-size-sm !default; - -// $input-padding-y-lg: $input-btn-padding-y-lg !default; -// $input-padding-x-lg: $input-btn-padding-x-lg !default; -// $input-font-size-lg: $input-btn-font-size-lg !default; - -// $input-bg: $white !default; -// $input-disabled-bg: $gray-200 !default; -// $input-disabled-border-color: $gray-400 !default; - -// $input-color: $body-color !default; -// $input-border-color: $gray-400 !default; -// $input-border-width: $input-btn-border-width !default; -// $input-box-shadow: $box-shadow-inset !default; - -// $input-border-radius: $border-radius !default; -// $input-border-radius-sm: $border-radius-sm !default; -// $input-border-radius-lg: $border-radius-lg !default; - -// $input-focus-bg: $input-bg !default; -// $input-focus-border-color: tint-color($component-active-bg, 50%) !default; -// $input-focus-color: $input-color !default; -// $input-focus-width: $input-btn-focus-width !default; -// $input-focus-box-shadow: $input-btn-focus-box-shadow !default; - -// $input-placeholder-color: $gray-600 !default; -// $input-plaintext-color: $body-color !default; - -// $input-height-border: $input-border-width * 2 !default; - -// $input-height-inner: add($input-line-height * 1em, $input-padding-y * 2) !default; -// $input-height-inner-half: add($input-line-height * .5em, $input-padding-y) !default; -// $input-height-inner-quarter: add($input-line-height * .25em, $input-padding-y / 2) !default; - -// $input-height: add($input-line-height * 1em, add($input-padding-y * 2, $input-height-border, false)) !default; -// $input-height-sm: add($input-line-height * 1em, add($input-padding-y-sm * 2, $input-height-border, false)) !default; -// $input-height-lg: add($input-line-height * 1em, add($input-padding-y-lg * 2, $input-height-border, false)) !default; - -// $input-transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; -// scss-docs-end form-input-variables - -// scss-docs-start form-check-variables -// $form-check-input-width: 1em !default; -// $form-check-min-height: $font-size-base * $line-height-base !default; -// $form-check-padding-start: $form-check-input-width + .5em !default; -// $form-check-margin-bottom: .125rem !default; -// $form-check-label-color: unset !default; -// $form-check-label-cursor: null !default; -// $form-check-transition: null !default; - -// $form-check-input-active-filter: brightness(90%) !default; - -// $form-check-input-bg: $input-bg !default; -// $form-check-input-border: 1px solid rgba($black, .25) !default; -// $form-check-input-border-radius: .25em !default; -// $form-check-radio-border-radius: 50% !default; -// $form-check-input-focus-border: $input-focus-border-color !default; -// $form-check-input-focus-box-shadow: $input-btn-focus-box-shadow !default; - -// $form-check-input-checked-color: $component-active-color !default; -// $form-check-input-checked-bg-color: $component-active-bg !default; -// $form-check-input-checked-border-color: $form-check-input-checked-bg-color !default; -// $form-check-input-checked-bg-image: url("data:image/svg+xml,") !default; -// $form-check-radio-checked-bg-image: url("data:image/svg+xml,") !default; - -// $form-check-input-indeterminate-color: $component-active-color !default; -// $form-check-input-indeterminate-bg-color: $component-active-bg !default; -// $form-check-input-indeterminate-border-color: $form-check-input-indeterminate-bg-color !default; -// $form-check-input-indeterminate-bg-image: url("data:image/svg+xml,") !default; - -// $form-check-input-disabled-opacity: .5 !default; -// $form-check-label-disabled-opacity: $form-check-input-disabled-opacity !default; -// $form-check-btn-check-disabled-opacity: $btn-disabled-opacity !default; - -// $form-check-inline-margin-end: 1rem !default; -// scss-docs-end form-check-variables - -// scss-docs-start form-switch-variables -// $form-switch-color: rgba(0, 0, 0, .25) !default; -// $form-switch-width: 1.5em !default; -// $form-switch-padding-start: $form-switch-width + .5em !default; -// $form-switch-bg-image: url("data:image/svg+xml,") !default; -// $form-switch-border-radius: $form-switch-width !default; -// $form-switch-transition: background-position .15s ease-in-out !default; - -// $form-switch-focus-color: $input-focus-border-color !default; -// $form-switch-focus-bg-image: url("data:image/svg+xml,") !default; - -// $form-switch-checked-color: $component-active-color !default; -// $form-switch-checked-bg-image: url("data:image/svg+xml,") !default; -// $form-switch-checked-bg-position: right center !default; - -// $form-switch-widths: ( -// lg: ( -// width: 1.75em, -// height: 1.25em -// ), -// xl: ( -// width: 2em, -// height: 1.5em -// ) -// ) !default; -// scss-docs-end form-switch-variables - -// $form-check-inline-margin-end: 1rem !default; - -// scss-docs-start input-group-variables -// $input-group-addon-padding-y: $input-padding-y !default; -// $input-group-addon-padding-x: $input-padding-x !default; -// $input-group-addon-font-weight: $input-font-weight !default; -// $input-group-addon-color: $input-color !default; -// $input-group-addon-bg: $gray-200 !default; -// $input-group-addon-border-color: $input-border-color !default; -// scss-docs-end input-group-variables - -// scss-docs-start form-select-variables -// $form-select-padding-y: $input-padding-y !default; -// $form-select-padding-x: $input-padding-x !default; -// $form-select-font-family: $input-font-family !default; -// $form-select-font-size: $input-font-size !default; -// $form-select-indicator-padding: $form-select-padding-x * 3 !default; // Extra padding for background-image -// $form-select-font-weight: $input-font-weight !default; -// $form-select-line-height: $input-line-height !default; -// $form-select-color: $input-color !default; -// $form-select-bg: $input-bg !default; -// $form-select-disabled-color: null !default; -// $form-select-disabled-bg: $gray-200 !default; -// $form-select-disabled-border-color: $input-disabled-border-color !default; -// $form-select-bg-position: right $form-select-padding-x center !default; -// $form-select-bg-size: 16px 12px !default; // In pixels because image dimensions -// $form-select-indicator-color: $gray-800 !default; -// $form-select-indicator: url("data:image/svg+xml,") !default; - -// $form-select-feedback-icon-padding-end: $form-select-padding-x * 2.5 + $form-select-indicator-padding !default; -// $form-select-feedback-icon-position: center right $form-select-indicator-padding !default; -// $form-select-feedback-icon-size: $input-height-inner-half $input-height-inner-half !default; - -// $form-select-border-width: $input-border-width !default; -// $form-select-border-color: $input-border-color !default; -// $form-select-border-radius: $border-radius !default; -// $form-select-box-shadow: $box-shadow-inset !default; - -// $form-select-focus-border-color: $input-focus-border-color !default; -// $form-select-focus-width: $input-focus-width !default; -// $form-select-focus-box-shadow: 0 0 0 $form-select-focus-width $input-btn-focus-color !default; - -// $form-select-padding-y-sm: $input-padding-y-sm !default; -// $form-select-padding-x-sm: $input-padding-x-sm !default; -// $form-select-font-size-sm: $input-font-size-sm !default; - -// $form-select-padding-y-lg: $input-padding-y-lg !default; -// $form-select-padding-x-lg: $input-padding-x-lg !default; -// $form-select-font-size-lg: $input-font-size-lg !default; -// scss-docs-end form-select-variables - -// scss-docs-start form-range-variables -// $form-range-track-width: 100% !default; -// $form-range-track-height: .5rem !default; -// $form-range-track-cursor: pointer !default; -// $form-range-track-bg: $gray-300 !default; -// $form-range-track-border-radius: 1rem !default; -// $form-range-track-box-shadow: $box-shadow-inset !default; - -// $form-range-thumb-width: 1rem !default; -// $form-range-thumb-height: $form-range-thumb-width !default; -// $form-range-thumb-bg: $component-active-bg !default; -// $form-range-thumb-border: 0 !default; -// $form-range-thumb-border-radius: 1rem !default; -// $form-range-thumb-box-shadow: 0 .1rem .25rem rgba($black, .1) !default; -// $form-range-thumb-focus-box-shadow: 0 0 0 1px $body-bg, $input-focus-box-shadow !default; -// $form-range-thumb-focus-box-shadow-width: $input-focus-width !default; // For focus box shadow issue in Edge -// $form-range-thumb-active-bg: tint-color($component-active-bg, 70%) !default; -// $form-range-thumb-disabled-bg: $gray-500 !default; -// $form-range-thumb-transition: background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; -// scss-docs-end form-range-variables - -// scss-docs-start form-file-variables -// $form-file-button-color: $input-color !default; -// $form-file-button-bg: $input-group-addon-bg !default; -// $form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default; -// scss-docs-end form-file-variables - -// scss-docs-start form-floating-variables -// $form-floating-height: add(3.5rem, $input-height-border) !default; -// $form-floating-padding-x: $input-padding-x !default; -// $form-floating-padding-y: 1rem !default; -// $form-floating-input-padding-t: 1.625rem !default; -// $form-floating-input-padding-b: .625rem !default; -// $form-floating-label-opacity: .65 !default; -// $form-floating-label-transform: scale(.85) translateY(-.5rem) translateX(.15rem) !default; -// $form-floating-transition: opacity .1s ease-in-out, transform .1s ease-in-out !default; -// scss-docs-end form-floating-variables - -// Form validation - -// scss-docs-start form-feedback-variables -// $form-feedback-margin-top: $form-text-margin-top !default; -// $form-feedback-font-size: $form-text-font-size !default; -// $form-feedback-font-style: $form-text-font-style !default; -// $form-feedback-valid-color: $success !default; -// $form-feedback-invalid-color: $danger !default; - -// $form-feedback-icon-valid-color: $form-feedback-valid-color !default; -// $form-feedback-icon-valid: url("data:image/svg+xml,") !default; -// $form-feedback-icon-invalid-color: $form-feedback-invalid-color !default; -// $form-feedback-icon-invalid: url("data:image/svg+xml,") !default; -// scss-docs-end form-feedback-variables - -// scss-docs-start form-validation-states -// $form-validation-states: ( -// "valid": ( -// "color": $form-feedback-valid-color, -// "icon": $form-feedback-icon-valid -// ), -// "invalid": ( -// "color": $form-feedback-invalid-color, -// "icon": $form-feedback-icon-invalid -// ) -// ) !default; -// scss-docs-end form-validation-states -// scss-docs-end form-variables -// Z-index master list -// -// Warning: Avoid customizing these values. They're used for a bird's eye view -// of components dependent on the z-axis and are designed to all work together. - -// scss-docs-start zindex-stack -// $zindex-dropdown: 1000 !default; -// $zindex-sticky: 1020 !default; -// $zindex-fixed: 1030 !default; -// $zindex-modal-backdrop: 1040 !default; -// $zindex-offcanvas: 1050 !default; -// $zindex-modal: 1060 !default; -// $zindex-popover: 1070 !default; -// $zindex-tooltip: 1080 !default; -// $zindex-toaster: 1090 !default; -// scss-docs-end zindex-stack - - -// Navs -// scss-docs-start nav-variables -// $nav-link-padding-y: .5rem !default; -// $nav-link-padding-x: 1rem !default; -// $nav-link-font-size: null !default; -// $nav-link-font-weight: null !default; -// $nav-link-color: $link-color !default; -// $nav-link-hover-color: $link-hover-color !default; -// $nav-link-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out !default; -// $nav-link-disabled-color: $gray-600 !default; - -// $nav-tabs-border-color: $gray-300 !default; -// $nav-tabs-border-width: $border-width !default; -// $nav-tabs-border-radius: $border-radius !default; -// $nav-tabs-link-hover-border-color: $gray-200 $gray-200 $nav-tabs-border-color !default; -// $nav-tabs-link-active-color: $gray-700 !default; -// $nav-tabs-link-active-bg: $body-bg !default; -// $nav-tabs-link-active-border-color: $gray-300 $gray-300 $nav-tabs-link-active-bg !default; - -// $nav-pills-border-radius: $border-radius !default; -// $nav-pills-link-active-color: $component-active-color !default; -// $nav-pills-link-active-bg: $component-active-bg !default; -// scss-docs-end nav-variables - - -// Navbar - -// scss-docs-start navbar-variables -// $navbar-padding-y: $spacer / 2 !default; -// $navbar-padding-x: null !default; - -// $navbar-nav-link-padding-x: .5rem !default; - -// $navbar-brand-font-size: $font-size-lg !default; -// Compute the navbar-brand padding-y so the navbar-brand will have the same height as navbar-text and nav-link -// $nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default; -// $navbar-brand-height: $navbar-brand-font-size * $line-height-base !default; -// $navbar-brand-padding-y: ($nav-link-height - $navbar-brand-height) / 2 !default; -// $navbar-brand-margin-end: 1rem !default; - -// $navbar-toggler-padding-y: .25rem !default; -// $navbar-toggler-padding-x: .75rem !default; -// $navbar-toggler-font-size: $font-size-lg !default; -// $navbar-toggler-border-radius: $btn-border-radius !default; -// $navbar-toggler-focus-width: $btn-focus-width !default; -// $navbar-toggler-transition: box-shadow .15s ease-in-out !default; -// scss-docs-end navbar-variables - -// scss-docs-start navbar-theme-variables -// $navbar-dark-color: $medium-emphasis-inverse !default; -// $navbar-dark-hover-color: $high-emphasis-inverse !default; -// $navbar-dark-active-color: $high-emphasis-inverse !default; -// $navbar-dark-disabled-color: $disabled-inverse !default; -// $navbar-dark-toggler-icon-bg: url("data:image/svg+xml,") !default; -// $navbar-dark-toggler-border-color: rgba($white, .1) !default; - -// $navbar-light-color: $medium-emphasis !default; -// $navbar-light-hover-color: $high-emphasis !default; -// $navbar-light-active-color: $high-emphasis !default; -// $navbar-light-disabled-color: $disabled !default; -// $navbar-light-toggler-icon-bg: url("data:image/svg+xml,") !default; -// $navbar-light-toggler-border-color: rgba($black, .1) !default; - -// $navbar-light-brand-color: $navbar-light-active-color !default; -// $navbar-light-brand-hover-color: $navbar-light-active-color !default; -// $navbar-dark-brand-color: $navbar-dark-active-color !default; -// $navbar-dark-brand-hover-color: $navbar-dark-active-color !default; -// scss-docs-end navbar-theme-variables - - -// Dropdowns -// -// Dropdown menu container and contents. -// scss-docs-start dropdown-variables -// $dropdown-min-width: 10rem !default; -// $dropdown-padding-x: 0 !default; -// $dropdown-padding-y: .5rem !default; -// $dropdown-spacer: .125rem !default; -// $dropdown-font-size: $font-size-base !default; -// $dropdown-color: $body-color !default; -// $dropdown-bg: $white !default; -// $dropdown-border-color: rgba($black, .15) !default; -// $dropdown-border-radius: $border-radius !default; -// $dropdown-border-width: $border-width !default; -// $dropdown-inner-border-radius: subtract($dropdown-border-radius, $dropdown-border-width) !default; -// $dropdown-divider-bg: $dropdown-border-color !default; -// $dropdown-divider-margin-y: $spacer / 2 !default; -// $dropdown-box-shadow: $box-shadow !default; - -// $dropdown-link-color: $gray-900 !default; -// $dropdown-link-hover-color: shade-color($gray-900, 10%) !default; -// $dropdown-link-hover-bg: $gray-200 !default; - -// $dropdown-link-active-color: $component-active-color !default; -// $dropdown-link-active-bg: $component-active-bg !default; - -// $dropdown-link-disabled-color: $gray-500 !default; - -// $dropdown-item-padding-y: $spacer / 4 !default; -// $dropdown-item-padding-x: $spacer !default; - -// $dropdown-header-color: $gray-600 !default; -// $dropdown-header-padding: $dropdown-padding-y $dropdown-item-padding-x !default; -// scss-docs-end dropdown-variables - -// scss-docs-start dropdown-dark-variables -// $dropdown-dark-color: $gray-300 !default; -// $dropdown-dark-bg: $gray-800 !default; -// $dropdown-dark-border-color: $dropdown-border-color !default; -// $dropdown-dark-divider-bg: $dropdown-divider-bg !default; -// $dropdown-dark-box-shadow: null !default; -// $dropdown-dark-link-color: $dropdown-dark-color !default; -// $dropdown-dark-link-hover-color: $high-emphasis-inverse !default; -// $dropdown-dark-link-hover-bg: rgba($white, .15) !default; -// $dropdown-dark-link-active-color: $dropdown-link-active-color !default; -// $dropdown-dark-link-active-bg: $dropdown-link-active-bg !default; -// $dropdown-dark-link-disabled-color: $gray-500 !default; -// $dropdown-dark-header-color: $gray-500 !default; -// scss-docs-end dropdown-dark-variables - - -// Pagination - -// scss-docs-start pagination-variables -// $pagination-padding-y: .375rem !default; -// $pagination-padding-x: .75rem !default; -// $pagination-padding-y-sm: .25rem !default; -// $pagination-padding-x-sm: .5rem !default; -// $pagination-padding-y-lg: .75rem !default; -// $pagination-padding-x-lg: 1.5rem !default; - -// $pagination-color: $link-color !default; -// $pagination-bg: $white !default; -// $pagination-border-width: $border-width !default; -// $pagination-border-radius: $border-radius !default; -// $pagination-margin-start: -$pagination-border-width !default; -// $pagination-border-color: $gray-300 !default; - -// $pagination-focus-color: $link-hover-color !default; -// $pagination-focus-bg: $gray-200 !default; -// $pagination-focus-box-shadow: $input-btn-focus-box-shadow !default; -// $pagination-focus-outline: 0 !default; - -// $pagination-hover-color: $link-hover-color !default; -// $pagination-hover-bg: $gray-200 !default; -// $pagination-hover-border-color: $gray-300 !default; - -// $pagination-active-color: $component-active-color !default; -// $pagination-active-bg: $component-active-bg !default; -// $pagination-active-border-color: $pagination-active-bg !default; - -// $pagination-disabled-color: $gray-600 !default; -// $pagination-disabled-bg: $white !default; -// $pagination-disabled-border-color: $gray-300 !default; - -// $pagination-transition: color .15s ease-in-out, background-color .15s ease-in-out, border-color .15s ease-in-out, box-shadow .15s ease-in-out !default; -// scss-docs-end pagination-variables - -// $pagination-border-radius-sm: $border-radius-sm !default; -// $pagination-border-radius-lg: $border-radius-lg !default; -// scss-docs-end pagination-variables - - -// Cards -// scss-docs-start card-variables -// $card-spacer-y: $spacer !default; -// $card-spacer-x: $spacer !default; -// $card-title-spacer-y: $spacer / 2 !default; -// $card-border-width: $border-width !default; -// $card-border-radius: $border-radius !default; -// $card-border-color: rgba($black, .125) !default; -// $card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default; -// $card-cap-padding-y: $card-spacer-y / 2 !default; -// $card-cap-padding-x: $card-spacer-x !default; -// $card-cap-bg: rgba($black, .03) !default; -// $card-cap-color: unset !default; -// $card-height: null !default; -// $card-color: unset !default; -// $card-bg: $white !default; -// $card-img-overlay-padding: $spacer !default; -// $card-group-margin: $grid-gutter-width / 2 !default; -// scss-docs-end card-variables - -// Accordion -// scss-docs-start accordion-variables -// $accordion-padding-y: 1rem !default; -// $accordion-padding-x: 1.25rem !default; -// $accordion-color: $body-color !default; -// $accordion-bg: $body-bg !default; -// $accordion-border-width: $border-width !default; -// $accordion-border-color: rgba($black, .125) !default; -// $accordion-border-radius: $border-radius !default; -// $accordion-inner-border-radius: subtract($accordion-border-radius, $accordion-border-width) !default; - -// $accordion-body-padding-y: $accordion-padding-y !default; -// $accordion-body-padding-x: $accordion-padding-x !default; - -// $accordion-button-padding-y: $accordion-padding-y !default; -// $accordion-button-padding-x: $accordion-padding-x !default; -// $accordion-button-color: $accordion-color !default; -// $accordion-button-bg: $accordion-bg !default; -// $accordion-transition: $btn-transition, border-radius .15s ease !default; -// $accordion-button-active-bg: tint-color($component-active-bg, 90%) !default; -// $accordion-button-active-color: shade-color($primary, 10%) !default; - -// $accordion-button-focus-border-color: $input-focus-border-color !default; -// $accordion-button-focus-box-shadow: $btn-focus-box-shadow !default; - -// $accordion-icon-width: 1.25rem !default; -// $accordion-icon-color: $accordion-color !default; -// $accordion-icon-active-color: $accordion-button-active-color !default; -// $accordion-icon-transition: transform .2s ease-in-out !default; -// $accordion-icon-transform: rotate(-180deg) !default; - -// $accordion-button-icon: url("data:image/svg+xml,") !default; -// $accordion-button-active-icon: url("data:image/svg+xml,") !default; -// scss-docs-end accordion-variables - -// Tooltips - -// scss-docs-start tooltip-variables -// $tooltip-font-size: $font-size-sm !default; -// $tooltip-max-width: 200px !default; -// $tooltip-color: $high-emphasis-inverse !default; -// $tooltip-bg: $black !default; -// $tooltip-border-radius: $border-radius !default; -// $tooltip-opacity: .9 !default; -// $tooltip-padding-y: $spacer / 4 !default; -// $tooltip-padding-x: $spacer / 2 !default; -// $tooltip-margin: 0 !default; - -// $tooltip-arrow-width: .8rem !default; -// $tooltip-arrow-height: .4rem !default; -// $tooltip-arrow-color: $tooltip-bg !default; -// scss-docs-end tooltip-variables - -// Form tooltips must come after regular tooltips -// scss-docs-start tooltip-feedback-variables -// $form-feedback-tooltip-padding-y: $tooltip-padding-y !default; -// $form-feedback-tooltip-padding-x: $tooltip-padding-x !default; -// $form-feedback-tooltip-font-size: $tooltip-font-size !default; -// $form-feedback-tooltip-line-height: null !default; -// $form-feedback-tooltip-opacity: $tooltip-opacity !default; -// $form-feedback-tooltip-border-radius: $tooltip-border-radius !default; -// scss-docs-end tooltip-feedback-variables - - -// Popovers -// scss-docs-start popover-variables -// $popover-font-size: $font-size-sm !default; -// $popover-bg: $white !default; -// $popover-max-width: 276px !default; -// $popover-border-width: $border-width !default; -// $popover-border-color: rgba($black, .2) !default; -// $popover-border-radius: $border-radius-lg !default; -// $popover-inner-border-radius: subtract($popover-border-radius, $popover-border-width) !default; -// $popover-box-shadow: $box-shadow !default; - -// $popover-header-bg: shade-color($popover-bg, 6%) !default; -// $popover-header-color: $headings-color !default; -// $popover-header-padding-y: .5rem !default; -// $popover-header-padding-x: $spacer !default; - -// $popover-body-color: $body-color !default; -// $popover-body-padding-y: $spacer !default; -// $popover-body-padding-x: $spacer !default; - -// $popover-arrow-width: 1rem !default; -// $popover-arrow-height: .5rem !default; -// $popover-arrow-color: $popover-bg !default; - -// $popover-arrow-outer-color: fade-in($popover-border-color, .05) !default; -// scss-docs-end popover-variables - - -// Toasts -// scss-docs-start toast-variables -// $toast-max-width: 350px !default; -// $toast-padding-x: .75rem !default; -// $toast-padding-y: .5rem !default; -// $toast-font-size: .875rem !default; -// $toast-color: unset !default; -// $toast-background-color: rgba($white, .85) !default; -// $toast-border-width: 1px !default; -// $toast-border-color: rgba(0, 0, 0, .1) !default; -// $toast-border-radius: $border-radius !default; -// $toast-box-shadow: $box-shadow !default; -// $toast-spacing: $container-padding-x !default; - -// $toast-header-color: $gray-600 !default; -// $toast-header-background-color: rgba($white, .85) !default; -// $toast-header-border-color: rgba(0, 0, 0, .05) !default; -// scss-docs-end toast-variables - - -// Badges -// scss-docs-start badge-variables -// $badge-font-size: .75em !default; -// $badge-font-weight: $font-weight-bold !default; -// $badge-color: $high-emphasis-inverse !default; -// $badge-padding-y: .35em !default; -// $badge-padding-x: .65em !default; -// $badge-border-radius: $border-radius !default; -// scss-docs-end badge-variables - -// $badge-font-size-sm: .65em !default; -// $badge-padding-y-sm: .3em !default; -// $badge-padding-x-sm: .5em !default; -// scss-docs-end badge-variables - - -// Modals - -// scss-docs-start modal-variables -// $modal-inner-padding: $spacer !default; - -// $modal-footer-margin-between: .5rem !default; - -// $modal-dialog-margin: .5rem !default; -// $modal-dialog-margin-y-sm-up: 1.75rem !default; - -// $modal-title-line-height: $line-height-base !default; - -// $modal-content-color: unset !default; -// $modal-content-bg: $white !default; -// $modal-content-border-color: rgba($black, .2) !default; -// $modal-content-border-width: $border-width !default; -// $modal-content-border-radius: $border-radius-lg !default; -// $modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default; -// $modal-content-box-shadow-xs: $box-shadow-sm !default; -// $modal-content-box-shadow-sm-up: $box-shadow !default; - -// $modal-backdrop-bg: $black !default; -// $modal-backdrop-opacity: .5 !default; -// $modal-header-border-color: $border-color !default; -// $modal-footer-border-color: $modal-header-border-color !default; -// $modal-header-border-width: $modal-content-border-width !default; -// $modal-footer-border-width: $modal-header-border-width !default; -// $modal-header-padding-y: $modal-inner-padding !default; -// $modal-header-padding-x: $modal-inner-padding !default; -// $modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default; // Keep this for backwards compatibility - -// $modal-sm: 300px !default; -// $modal-md: 500px !default; -// $modal-lg: 800px !default; -// $modal-xl: 1140px !default; - -// $modal-fade-transform: translate(0, -50px) !default; -// $modal-show-transform: none !default; -// $modal-transition: transform .3s ease-out !default; -// $modal-scale-transform: scale(1.02) !default; -// scss-docs-end modal-variables - - -// Avatars -// scss-docs-start avatar-variables -// $avatar-width: 2rem !default; - -// $avatar-widths: ( -// sm: 1.5rem, -// md: 2.5rem, -// lg: 3rem, -// xl: 4rem -// ) !default; - -// $avatar-transition: margin .15s !default; -// scss-docs-end avatar-variables - -// Alerts -// -// Define alert colors, border radius, and padding. - -// scss-docs-start alert-variables -// $alert-padding-y: $spacer !default; -// $alert-padding-x: $spacer !default; -// $alert-margin-bottom: 1rem !default; -// $alert-border-radius: $border-radius !default; -// $alert-link-font-weight: $font-weight-bold !default; -// $alert-border-width: $border-width !default; -// $alert-bg-scale: -80% !default; -// $alert-border-scale: -70% !default; -// $alert-color-scale: 40% !default; -// $alert-dismissible-padding-r: $alert-padding-x * 3 !default; // 3x covers width of x plus default padding on either side -// scss-docs-end alert-variables - -// $alert-variants: ( -// "primary": alert-color-map($primary), -// "secondary": alert-color-map($secondary), -// "success": alert-color-map($success), -// "danger": alert-color-map($danger), -// "warning": alert-color-map($warning), -// "info": alert-color-map($info), -// "light": alert-color-map($light), -// "dark": alert-color-map($dark) -// ) !default; -// scss-docs-end alert-variables - -// Callouts -// scss-docs-start callout-variables -// $callout-padding-y: $spacer !default; -// $callout-padding-x: $spacer !default; -// $callout-margin-y: $spacer !default; -// $callout-margin-x: 0 !default; -// $callout-border-radius: $border-radius !default; -// $callout-border-width: $border-width !default; -// $callout-border-color: $border-color !default; -// $callout-border-left-width: (4 * $callout-border-width) !default; - -// $callout-variants: ( -// "primary": $primary, -// "secondary": $secondary, -// "success": $success, -// "danger": $danger, -// "warning": $warning, -// "info": $info, -// "light": $light, -// "dark": $dark -// ) !default; -// scss-docs-end callout-variables - - -// Progress bars - -// scss-docs-start progress-variables -// $progress-height: 1rem !default; -// $progress-font-size: $font-size-base * .75 !default; -// $progress-bg: $gray-200 !default; -// $progress-border-radius: $border-radius !default; -// $progress-box-shadow: $box-shadow-inset !default; -// $progress-bar-color: $high-emphasis-inverse !default; -// $progress-bar-bg: $primary !default; -// $progress-bar-animation-timing: 1s linear infinite !default; -// $progress-bar-transition: width .6s ease !default; -// scss-docs-end progress-variables - -// List group -// scss-docs-start list-group-variables -// $list-group-color: unset !default; -// $list-group-bg: $white !default; -// $list-group-border-color: rgba($black, .125) !default; -// $list-group-border-width: $border-width !default; -// $list-group-border-radius: $border-radius !default; - -// $list-group-item-padding-y: $spacer / 2 !default; -// $list-group-item-padding-x: $spacer !default; -// $list-group-item-bg-scale: -80% !default; -// $list-group-item-color-scale: 40% !default; - -// $list-group-hover-bg: $gray-100 !default; -// $list-group-active-color: $component-active-color !default; -// $list-group-active-bg: $component-active-bg !default; -// $list-group-active-border-color: $list-group-active-bg !default; - -// $list-group-disabled-color: $gray-600 !default; -// $list-group-disabled-bg: $list-group-bg !default; - -// $list-group-action-color: $gray-700 !default; -// $list-group-action-hover-color: $list-group-action-color !default; - -// $list-group-action-active-color: $body-color !default; -// $list-group-action-active-bg: $gray-200 !default; -// scss-docs-end list-group-variables - -// $list-group-variants: ( -// "primary": list-group-color-map($primary), -// "secondary": list-group-color-map($secondary), -// "success": list-group-color-map($success), -// "danger": list-group-color-map($danger), -// "warning": list-group-color-map($warning), -// "info": list-group-color-map($info), -// "light": list-group-color-map($light), -// "dark": list-group-color-map($dark) -// ) !default; -// scss-docs-end list-group-variables - - -// Header -// scss-docs-start header-variables -// $header-min-height: 4rem !default; -// $header-padding-y: $spacer / 2 !default; -// $header-padding-x: $spacer / 2 !default; -// $header-brand-font-size: $font-size-lg !default; -// $header-color: $medium-emphasis !default; -// $header-bg: $white !default; -// $header-border-color: $border-color !default; -// $header-border-width: 1px !default; -// $header-hover-color: $high-emphasis !default; -// $header-active-color: $high-emphasis !default; -// $header-disabled-color: $disabled !default; - -// Compute the header-brand padding-y so the header-brand will have the same height as header-text and nav-link -// $nav-link-height: $font-size-base * $line-height-base + $nav-link-padding-y * 2 !default; -// $header-brand-height: $header-brand-font-size * $line-height-base !default; -// $header-brand-padding-y: ($nav-link-height - $header-brand-height) / 2 !default; -// $header-brand-margin-end: 1rem !default; -// $header-brand-font-size: $font-size-lg !default; -// $header-brand-color: $gray-900 !default; -// $header-brand-hover-color: shade-color($gray-900, 10%) !default; - -// $header-toggler-padding-y: .25rem !default; -// $header-toggler-padding-x: .75rem !default; -// $header-toggler-font-size: $font-size-lg !default; -// $header-toggler-bg: transparent !default; -// $header-toggler-border: 0 !default; -// $header-toggler-border-radius: $btn-border-radius !default; - -// $header-toggler-icon-bg: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$header-color}' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") !default; -// $header-toggler-hover-icon-bg: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='#{$header-hover-color}' stroke-width='2.25' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E") !default; -// $header-toggler-border-color: rgba($black, .1) !default; - -// $header-nav-link-padding-x: .5rem !default; - -// $header-divider-border-width: 1px !default; -// $header-divider-border-color: $header-border-color !default; -// scss-docs-end header-variables - -// Subheader -// scss-docs-start subheader-variables -// $subheader-min-height: 3rem !default; -// $subheader-padding-y: $spacer / 2 !default; -// $subheader-padding-x: $spacer !default; -// $subheader-border-color: $border-color !default; -// $subheader-border-width: 1px !default; - -// $subheader-nav-link-padding-x: .5rem !default; -// scss-docs-end subheader-variables - -// Default theme -// scss-docs-start subheader-default-themes -// $subheader-bg: $white !default; -// $subheader-color: $medium-emphasis !default; -// $subheader-hover-color: $high-emphasis !default; -// $subheader-active-color: $high-emphasis !default; -// $subheader-disabled-color: $disabled !default; -// scss-docs-end subheader-default-themes - - -// Image thumbnails - -// scss-docs-start thumbnail-variables -// $thumbnail-padding: .25rem !default; -// $thumbnail-bg: $body-bg !default; -// $thumbnail-border-width: $border-width !default; -// $thumbnail-border-color: $gray-300 !default; -// $thumbnail-border-radius: $border-radius !default; -// $thumbnail-box-shadow: $box-shadow-sm !default; -// scss-docs-end thumbnail-variables - - -// Figures - -// scss-docs-start figure-variables -// $figure-caption-font-size: $small-font-size !default; -// $figure-caption-color: $gray-600 !default; -// scss-docs-end figure-variables - - -// Breadcrumbs -// scss-docs-start breadcrumb-variables -// $breadcrumb-font-size: null !default; -// $breadcrumb-padding-y: 0 !default; -// $breadcrumb-padding-x: 0 !default; -// $breadcrumb-item-padding-x: .5rem !default; -// $breadcrumb-margin-bottom: 1rem !default; -// $breadcrumb-bg: unset !default; -// $breadcrumb-divider-color: $gray-600 !default; -// $breadcrumb-active-color: $gray-600 !default; -// $breadcrumb-divider: quote("/") !default; -// $breadcrumb-divider-flipped: $breadcrumb-divider !default; -// $breadcrumb-border-radius: null !default; -// scss-docs-end breadcrumb-variables - -// Carousel -// scss-docs-start carousel-variables -// $carousel-control-color: $high-emphasis-inverse !default; -// $carousel-control-width: 15% !default; -// $carousel-control-opacity: .5 !default; -// $carousel-control-hover-opacity: .9 !default; -// $carousel-control-transition: opacity .15s ease !default; - -// $carousel-indicator-width: 30px !default; -// $carousel-indicator-height: 3px !default; -// $carousel-indicator-hit-area-height: 10px !default; -// $carousel-indicator-spacer: 3px !default; -// $carousel-indicator-opacity: .5 !default; -// $carousel-indicator-active-bg: $white !default; -// $carousel-indicator-active-opacity: 1 !default; -// $carousel-indicator-transition: opacity .6s ease !default; - -// $carousel-caption-width: 70% !default; -// $carousel-caption-color: $high-emphasis-inverse !default; -// $carousel-caption-padding-y: 1.25rem !default; -// $carousel-caption-spacer: 1.25rem !default; - -// $carousel-control-icon-width: 2rem !default; - -// $carousel-control-prev-icon-bg: url("data:image/svg+xml,") !default; -// $carousel-control-next-icon-bg: url("data:image/svg+xml,") !default; - -// $carousel-transition-duration: .6s !default; -// $carousel-transition: transform $carousel-transition-duration ease-in-out !default; // Define transform transition first if using multiple transitions (e.g., `transform 2s ease, opacity .5s ease-out`) - -// $carousel-dark-indicator-active-bg: $black !default; -// $carousel-dark-caption-color: $high-emphasis !default; -// $carousel-dark-control-icon-filter: invert(1) grayscale(100) !default; -// scss-docs-end carousel-variables - -// scss-docs-start sidebar-variables -// $sidebar-width: 16rem !default; -// $sidebar-widths: ( -// sm: 12rem, -// lg: 20rem, -// xl: 24rem -// ) !default; -// $sidebar-padding-y: 0 !default; -// $sidebar-padding-x: 0 !default; -// $sidebar-color: $high-emphasis-inverse !default; -// $sidebar-bg: $gray-base !default; -// $sidebar-border-width: 0 !default; -// $sidebar-border-color: transparent !default; -// $sidebar-transition: margin-left .15s, margin-right .15s, box-shadow .075s, transform .15s, width .15s, z-index 0s ease .15s !default; - -// $sidebar-brand-height: 4rem !default; -// $sidebar-brand-color: $high-emphasis-inverse !default; -// $sidebar-brand-bg: rgba($black, .2) !default; - -// $sidebar-header-height: 4rem !default; -// $sidebar-header-padding-y: .75rem !default; -// $sidebar-header-padding-x: 1rem !default; -// $sidebar-header-bg: rgba($black, .2) !default; -// $sidebar-header-height-transition: height .15s, padding .15s !default; - -// $sidebar-narrow-width: 4rem !default; - -// $sidebar-backdrop-bg: $black !default; -// $sidebar-backdrop-opacity: .5 !default; -// $sidebar-backdrop-transition: opacity .15s linear !default; - -// $sidebar-nav-title-padding-y: .75rem !default; -// $sidebar-nav-title-padding-x: 1rem !default; -// $sidebar-nav-title-margin-top: 1rem !default; -// $sidebar-nav-title-color: $medium-emphasis-inverse !default; -// $sidebar-nav-title-transition: height .15s, margin .15s !default; - -// $sidebar-nav-link-padding-y: .8445rem !default; -// $sidebar-nav-link-padding-x: 1rem !default; -// $sidebar-nav-link-color: $medium-emphasis-inverse !default; -// $sidebar-nav-link-bg: transparent !default; -// $sidebar-nav-link-transition: background .15s ease, color .15s ease !default; -// $sidebar-nav-link-icon-color: $medium-emphasis-inverse !default; - -// $sidebar-nav-link-hover-color: $high-emphasis-inverse !default; -// $sidebar-nav-link-hover-bg: rgba($white, .05) !default; -// $sidebar-nav-link-hover-icon-color: $high-emphasis-inverse !default; - -// $sidebar-nav-link-active-color: $high-emphasis-inverse !default; -// $sidebar-nav-link-active-bg: rgba($white, .05) !default; -// $sidebar-nav-link-active-icon-color: $high-emphasis-inverse !default; - -// $sidebar-nav-link-disabled-color: $disabled-inverse !default; -// $sidebar-nav-link-disabled-icon-color: $sidebar-nav-link-icon-color !default; - -// $sidebar-nav-icon-width: 4rem !default; -// $sidebar-nav-icon-height: 1.25rem !default; -// $sidebar-nav-icon-font-size: $sidebar-nav-icon-height !default; - -// $sidebar-nav-group-bg: rgba(0, 0, 0, .2) !default; -// $sidebar-nav-group-transition: background .15s ease-in-out !default; -// $sidebar-nav-group-items-transition: height .15s ease !default; -// $sidebar-nav-group-toggle-show-color: $sidebar-nav-link-color !default; - -// $sidebar-nav-group-indicator-color: $medium-emphasis-inverse !default; -// $sidebar-nav-group-indicator-icon: url("data:image/svg+xml,") !default; -// $sidebar-nav-group-indicator-hover-color: $sidebar-nav-link-hover-color !default; -// $sidebar-nav-group-indicator-hover-icon: url("data:image/svg+xml,") !default; -// $sidebar-nav-group-indicator-transition: transform .15s !default; - -// $sidebar-footer-height: auto !default; -// $sidebar-footer-padding-y: .75rem !default; -// $sidebar-footer-padding-x: 1rem !default; -// $sidebar-footer-bg: rgba($black, .2) !default; -// $sidebar-footer-height-transition: height .15s, padding .15s !default; - -// $sidebar-toggler-height: 3rem !default; -// $sidebar-toggler-bg: rgba($black, .2) !default; -// $sidebar-toggler-transition: transform .15s !default; - -// $sidebar-toggler-indicator-width: 4rem !default; -// $sidebar-toggler-indicator-height: 3rem !default; -// $sidebar-toggler-indicator-color: $gray-600 !default; -// $sidebar-toggler-indicator-icon: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-toggler-indicator-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E") !default; -// $sidebar-toggler-hover-bg: rgba(0, 0, 0, .3) !default; -// $sidebar-toggler-indicator-hover-color: $sidebar-nav-link-hover-color !default; -// $sidebar-toggler-indicator-hover-icon: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 11 14'%3E%3Cpath fill='#{$sidebar-toggler-indicator-hover-color}' d='M9.148 2.352l-4.148 4.148 4.148 4.148q0.148 0.148 0.148 0.352t-0.148 0.352l-1.297 1.297q-0.148 0.148-0.352 0.148t-0.352-0.148l-5.797-5.797q-0.148-0.148-0.148-0.352t0.148-0.352l5.797-5.797q0.148-0.148 0.352-0.148t0.352 0.148l1.297 1.297q0.148 0.148 0.148 0.352t-0.148 0.352z'/%3E%3C/svg%3E") !default; -// scss-docs-end sidebar-variables - -// Footer -// scss-docs-start footer-variables -// $footer-min-height: 3rem !default; -// $footer-padding-y: $spacer / 2 !default; -// $footer-padding-x: $spacer !default; -// $footer-bg: $gray-100 !default; -// $footer-color: $body-color !default; -// $footer-border-width: 1px !default; -// $footer-border-color: $border-color !default; -// scss-docs-end footer-variables - -// Spinners -// scss-docs-start spinner-variables -// $spinner-width: 2rem !default; -// $spinner-height: $spinner-width !default; -// $spinner-vertical-align: -.125em !default; -// $spinner-border-width: .25em !default; -// $spinner-animation-speed: .75s !default; - -// $spinner-width-sm: 1rem !default; -// $spinner-height-sm: $spinner-width-sm !default; -// $spinner-border-width-sm: .2em !default; -// scss-docs-end spinner-variables - - -// Close -// scss-docs-start close-variables -// $btn-close-width: 1em !default; -// $btn-close-height: $btn-close-width !default; -// $btn-close-padding-x: .25em !default; -// $btn-close-padding-y: $btn-close-padding-x !default; -// $btn-close-color: $high-emphasis !default; -// $btn-close-bg: url("data:image/svg+xml,") !default; -// $btn-close-focus-shadow: $input-btn-focus-box-shadow !default; -// $btn-close-opacity: .5 !default; -// $btn-close-hover-opacity: .75 !default; -// $btn-close-focus-opacity: 1 !default; -// $btn-close-disabled-opacity: .25 !default; -// $btn-close-white-filter: invert(1) grayscale(100%) brightness(200%) !default; -// scss-docs-end close-variables - - -// Offcanvas - -// scss-docs-start offcanvas-variables -// $offcanvas-padding-y: $modal-inner-padding !default; -// $offcanvas-padding-x: $modal-inner-padding !default; -// $offcanvas-horizontal-width: 400px !default; -// $offcanvas-vertical-height: 30vh !default; -// $offcanvas-transition-duration: .3s !default; -// $offcanvas-border-color: $modal-content-border-color !default; -// $offcanvas-border-width: $modal-content-border-width !default; -// $offcanvas-title-line-height: $modal-title-line-height !default; -// $offcanvas-bg-color: $modal-content-bg !default; -// $offcanvas-color: $modal-content-color !default; -// $offcanvas-box-shadow: $modal-content-box-shadow-xs !default; -// scss-docs-end offcanvas-variables - -// Code - -// $code-font-size: $small-font-size !default; -// $code-color: $pink !default; - -// $kbd-padding-y: .2rem !default; -// $kbd-padding-x: .4rem !default; -// $kbd-font-size: $code-font-size !default; -// $kbd-color: $high-emphasis-inverse !default; -// $kbd-bg: $gray-900 !default; - -// $pre-color: unset !default; +// If you want to customize your project please add your variables below. diff --git a/src/store.js b/src/store.js index ab446364c..d0d7df485 100644 --- a/src/store.js +++ b/src/store.js @@ -2,10 +2,16 @@ import { createStore } from 'redux' const initialState = { sidebarShow: true, + theme: localStorage.getItem('coreui-free-react-admin-template-theme') ?? 'light', } const changeState = (state = initialState, { type, ...rest }) => { switch (type) { + case 'setTheme': + const event = new Event('ColorSchemeChange') + document.documentElement.dispatchEvent(event) + localStorage.setItem('coreui-free-react-admin-template-theme', rest.theme) + return { ...state, ...rest } case 'set': return { ...state, ...rest } default: diff --git a/src/views/charts/MainChart.js b/src/views/charts/MainChart.js new file mode 100644 index 000000000..de6c5ff3c --- /dev/null +++ b/src/views/charts/MainChart.js @@ -0,0 +1,107 @@ +import React from 'react' +import { CChartLine } from '@coreui/react-chartjs' +import { getStyle } from '@coreui/utils' + +const MainChart = () => { + const random = () => Math.round(Math.random() * 100) + + return ( + + ) +} + +export default MainChart diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index e979a0c16..e69957c7d 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -18,8 +18,6 @@ import { CTableHeaderCell, CTableRow, } from '@coreui/react' -import { CChartLine } from '@coreui/react-chartjs' -import { getStyle, hexToRgba } from '@coreui/utils' import CIcon from '@coreui/icons-react' import { cibCcAmex, @@ -53,6 +51,7 @@ import avatar6 from 'src/assets/images/avatars/6.jpg' import WidgetsBrand from '../widgets/WidgetsBrand' import WidgetsDropdown from '../widgets/WidgetsDropdown' +import MainChart from '../charts/MainChart' const Dashboard = () => { const random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min) @@ -208,90 +207,7 @@ const Dashboard = () => { - + @@ -400,7 +316,7 @@ const Dashboard = () => {
    - + diff --git a/src/views/pages/login/Login.js b/src/views/pages/login/Login.js index 6b889d530..320cacd4d 100644 --- a/src/views/pages/login/Login.js +++ b/src/views/pages/login/Login.js @@ -18,7 +18,7 @@ import { cilLockLocked, cilUser } from '@coreui/icons' const Login = () => { return ( -
    +
    diff --git a/src/views/pages/page404/Page404.js b/src/views/pages/page404/Page404.js index 09e2cf4b2..c14e859fc 100644 --- a/src/views/pages/page404/Page404.js +++ b/src/views/pages/page404/Page404.js @@ -13,7 +13,7 @@ import { cilMagnifyingGlass } from '@coreui/icons' const Page404 = () => { return ( -
    +
    diff --git a/src/views/pages/page500/Page500.js b/src/views/pages/page500/Page500.js index d7f6db305..11d867b89 100644 --- a/src/views/pages/page500/Page500.js +++ b/src/views/pages/page500/Page500.js @@ -13,7 +13,7 @@ import { cilMagnifyingGlass } from '@coreui/icons' const Page500 = () => { return ( -
    +
    diff --git a/src/views/pages/register/Register.js b/src/views/pages/register/Register.js index ee8afffb8..4dc5b7ae7 100644 --- a/src/views/pages/register/Register.js +++ b/src/views/pages/register/Register.js @@ -16,7 +16,7 @@ import { cilLockLocked, cilUser } from '@coreui/icons' const Register = () => { return ( -
    +
    From 0613a3acb2e900a667eac1d659cd3129287561a2 Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 9 May 2023 23:15:33 +0200 Subject: [PATCH 02/68] docs: update comments --- public/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/index.html b/public/index.html index b25132580..21d293335 100644 --- a/public/index.html +++ b/public/index.html @@ -2,9 +2,9 @@ From ef6012e658eef26ac97500be90e98575a6511360 Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 9 May 2023 23:15:44 +0200 Subject: [PATCH 03/68] chore: clean-up --- src/views/dashboard/Dashboard.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index e69957c7d..73341242e 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -54,8 +54,6 @@ import WidgetsDropdown from '../widgets/WidgetsDropdown' import MainChart from '../charts/MainChart' const Dashboard = () => { - const random = (min, max) => Math.floor(Math.random() * (max - min + 1) + min) - const progressExample = [ { title: 'Visits', value: '29.703 Users', percent: 40, color: 'success' }, { title: 'Unique', value: '24.093 Users', percent: 20, color: 'info' }, From b4541954369519ca1a259ab28df846600319b30b Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 10 May 2023 10:04:45 +0200 Subject: [PATCH 04/68] refactor: update main chart --- src/views/dashboard/Dashboard.js | 2 +- src/views/{charts => dashboard}/MainChart.js | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/views/{charts => dashboard}/MainChart.js (100%) diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index 73341242e..2bb1922a6 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -51,7 +51,7 @@ import avatar6 from 'src/assets/images/avatars/6.jpg' import WidgetsBrand from '../widgets/WidgetsBrand' import WidgetsDropdown from '../widgets/WidgetsDropdown' -import MainChart from '../charts/MainChart' +import MainChart from './MainChart' const Dashboard = () => { const progressExample = [ diff --git a/src/views/charts/MainChart.js b/src/views/dashboard/MainChart.js similarity index 100% rename from src/views/charts/MainChart.js rename to src/views/dashboard/MainChart.js From 88df73ad723ed03387b996808985ef627b586a37 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 12 May 2023 18:40:29 +0200 Subject: [PATCH 05/68] refactor: improve theme switch --- src/App.js | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/App.js b/src/App.js index dd068fe6f..b2ada6a90 100644 --- a/src/App.js +++ b/src/App.js @@ -1,6 +1,6 @@ import React, { Suspense, useEffect } from 'react' import { HashRouter, Route, Routes } from 'react-router-dom' -import { useSelector } from 'react-redux' +import { useDispatch, useSelector } from 'react-redux' import { CSpinner } from '@coreui/react' import './scss/style.scss' @@ -34,14 +34,15 @@ const Page404 = React.lazy(() => import('./views/pages/page404/Page404')) const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) const App = () => { + const dispatch = useDispatch() const theme = useSelector((state) => state.theme) - - if (theme) { - document.documentElement.dataset.coreuiTheme = - theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : theme - } + const urlParams = new URLSearchParams(window.location.href.split('?')[1]) useEffect(() => { + if (urlParams.get('theme')) { + dispatch({ type: 'setTheme', theme: urlParams.get('theme') }) + } + window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { if (theme !== 'light' || theme !== 'dark') { setTheme(getPreferredTheme(theme)) @@ -49,6 +50,10 @@ const App = () => { }) }, []) + useEffect(() => { + setTheme(getPreferredTheme(theme)) + }, [theme]) + return ( From ccd3674280fdb5357b27384e8489107188cb6fd8 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 12 May 2023 18:41:17 +0200 Subject: [PATCH 06/68] chore: update dependencies --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index accecf866..e783eb289 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@coreui/coreui": "4.3.0-alpha.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.1.0", - "@coreui/react": "^4.6.0", + "@coreui/react": "^4.9.0-alpha.1", "@coreui/react-chartjs": "^2.1.2", "@coreui/utils": "^2.0.1", "chart.js": "^3.9.1", From 307e9f5554cc5b9f594bc41b3b6f7bab1924d7fc Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 12 Jun 2023 15:14:59 +0200 Subject: [PATCH 07/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @coreui/chartjs ^3.1.1 → ^3.1.2 @coreui/coreui 4.3.0-alpha.0 → 4.3.0-beta.0 @coreui/react 4.9.0-alpha.0 → 4.9.0-beta.0 @coreui/react-chartjs ^2.1.2 → ^2.1.3 @coreui/utils ^2.0.1 → ^2.0.2 chart.js ^3.9.1 → ^4.3.0 core-js ^3.29.0 → ^3.31.0 eslint-config-prettier ^8.7.0 → ^8.8.0 prettier 2.8.4 → 2.8.8 react-redux ^8.0.5 → ^8.0.7 react-router-dom ^6.8.2 → ^6.12.1 sass ^1.58.3 → ^1.63.3 simplebar-react ^2.4.3 → ^3.2.4 web-vitals ^3.1.1 → ^3.3.2 --- package.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index e783eb289..b4ec91f04 100644 --- a/package.json +++ b/package.json @@ -22,35 +22,35 @@ "test:debug": "react-scripts --inspect-brk test --runInBand" }, "dependencies": { - "@coreui/chartjs": "^3.1.1", - "@coreui/coreui": "4.3.0-alpha.0", + "@coreui/chartjs": "^3.1.2", + "@coreui/coreui": "4.3.0-beta.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.1.0", - "@coreui/react": "^4.9.0-alpha.1", - "@coreui/react-chartjs": "^2.1.2", - "@coreui/utils": "^2.0.1", + "@coreui/react": "^4.9.0-beta.0", + "@coreui/react-chartjs": "^2.1.3", + "@coreui/utils": "^2.0.2", "chart.js": "^3.9.1", "classnames": "^2.3.2", - "core-js": "^3.29.0", + "core-js": "^3.31.0", "prop-types": "^15.8.1", "react": "^18.2.0", "react-app-polyfill": "^3.0.0", "react-dom": "^18.2.0", - "react-redux": "^8.0.5", - "react-router-dom": "^6.8.2", + "react-redux": "^8.0.7", + "react-router-dom": "^6.12.1", "redux": "4.2.1", - "simplebar-react": "^2.4.3" + "simplebar-react": "^3.2.4" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.4.3", - "eslint-config-prettier": "^8.7.0", + "eslint-config-prettier": "^8.8.0", "eslint-plugin-prettier": "^4.2.1", - "prettier": "2.8.4", + "prettier": "2.8.8", "react-scripts": "5.0.1", - "sass": "^1.58.3", - "web-vitals": "^3.1.1" + "sass": "^1.63.3", + "web-vitals": "^3.3.2" }, "engines": { "node": ">=10", From 3504643bce5e17f227fa7179f063934e34bccb89 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 12 Jun 2023 15:54:42 +0200 Subject: [PATCH 08/68] refactor: move useColorModes --- src/App.js | 45 +++++++++---------------------------- src/components/AppHeader.js | 21 +++++++++-------- src/store.js | 6 ----- 3 files changed, 22 insertions(+), 50 deletions(-) diff --git a/src/App.js b/src/App.js index b2ada6a90..b1af84d3d 100644 --- a/src/App.js +++ b/src/App.js @@ -1,29 +1,9 @@ import React, { Suspense, useEffect } from 'react' import { HashRouter, Route, Routes } from 'react-router-dom' -import { useDispatch, useSelector } from 'react-redux' -import { CSpinner } from '@coreui/react' +import { CSpinner, useColorModes } from '@coreui/react' import './scss/style.scss' -const loading = ( -
    - -
    -) - -const getPreferredTheme = (storedTheme) => { - if (storedTheme) { - return storedTheme - } - - return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' -} - -const setTheme = (theme) => { - document.documentElement.dataset.coreuiTheme = - theme === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : theme -} - // Containers const DefaultLayout = React.lazy(() => import('./layout/DefaultLayout')) @@ -34,29 +14,24 @@ const Page404 = React.lazy(() => import('./views/pages/page404/Page404')) const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) const App = () => { - const dispatch = useDispatch() - const theme = useSelector((state) => state.theme) + const { setColorMode } = useColorModes('coreui-free-react-admin-template-theme') const urlParams = new URLSearchParams(window.location.href.split('?')[1]) useEffect(() => { if (urlParams.get('theme')) { - dispatch({ type: 'setTheme', theme: urlParams.get('theme') }) + setColorMode(urlParams.get('theme')) } - - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => { - if (theme !== 'light' || theme !== 'dark') { - setTheme(getPreferredTheme(theme)) - } - }) }, []) - useEffect(() => { - setTheme(getPreferredTheme(theme)) - }, [theme]) - return ( - + + +
    + } + > } /> } /> diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index 25443a13d..8d49845c0 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -14,6 +14,7 @@ import { CHeaderToggler, CNavLink, CNavItem, + useColorModes, } from '@coreui/react' import CIcon from '@coreui/icons-react' import { @@ -31,9 +32,11 @@ import { AppHeaderDropdown } from './header/index' import { logo } from 'src/assets/brand/logo' const AppHeader = () => { + const { getColorMode, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') + const colorMode = getColorMode() + const dispatch = useDispatch() const sidebarShow = useSelector((state) => state.sidebarShow) - const theme = useSelector((state) => state.theme) return ( @@ -81,9 +84,9 @@ const AppHeader = () => { - {theme === 'dark' ? ( + {colorMode === 'dark' ? ( - ) : theme === 'auto' ? ( + ) : colorMode === 'auto' ? ( ) : ( @@ -91,29 +94,29 @@ const AppHeader = () => { dispatch({ type: 'setTheme', theme: 'light' })} + onClick={() => setColorMode('light')} > Light dispatch({ type: 'setTheme', theme: 'dark' })} + onClick={() => setColorMode('dark')} > Dark dispatch({ type: 'setTheme', theme: 'auto' })} + onClick={() => setColorMode('auto')} > Auto diff --git a/src/store.js b/src/store.js index d0d7df485..ab446364c 100644 --- a/src/store.js +++ b/src/store.js @@ -2,16 +2,10 @@ import { createStore } from 'redux' const initialState = { sidebarShow: true, - theme: localStorage.getItem('coreui-free-react-admin-template-theme') ?? 'light', } const changeState = (state = initialState, { type, ...rest }) => { switch (type) { - case 'setTheme': - const event = new Event('ColorSchemeChange') - document.documentElement.dispatchEvent(event) - localStorage.setItem('coreui-free-react-admin-template-theme', rest.theme) - return { ...state, ...rest } case 'set': return { ...state, ...rest } default: From c5533162749f98da06b86294e7ce82d88a8642ba Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 12 Jun 2023 15:54:57 +0200 Subject: [PATCH 09/68] refactor: add color modes support --- src/views/dashboard/MainChart.js | 204 +++++++++++++++------------ src/views/widgets/WidgetsDropdown.js | 25 +++- 2 files changed, 139 insertions(+), 90 deletions(-) diff --git a/src/views/dashboard/MainChart.js b/src/views/dashboard/MainChart.js index de6c5ff3c..b017c23ee 100644 --- a/src/views/dashboard/MainChart.js +++ b/src/views/dashboard/MainChart.js @@ -1,106 +1,132 @@ -import React from 'react' +import React, { useEffect, useRef } from 'react' + import { CChartLine } from '@coreui/react-chartjs' import { getStyle } from '@coreui/utils' const MainChart = () => { + const chartRef = useRef(null) + + useEffect(() => { + document.documentElement.addEventListener('ColorSchemeChange', () => { + if (chartRef.current) { + setTimeout(() => { + chartRef.current.options.scales.x.grid.borderColor = getStyle( + '--cui-border-color-translucent', + ) + chartRef.current.options.scales.x.grid.color = getStyle('--cui-border-color-translucent') + chartRef.current.options.scales.x.ticks.color = getStyle('--cui-body-color') + chartRef.current.options.scales.y.grid.borderColor = getStyle( + '--cui-border-color-translucent', + ) + chartRef.current.options.scales.y.grid.color = getStyle('--cui-border-color-translucent') + chartRef.current.options.scales.y.ticks.color = getStyle('--cui-body-color') + chartRef.current.update() + }) + } + }) + }, [chartRef]) + const random = () => Math.round(Math.random() * 100) return ( - + + }} + /> + ) } diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index 94bbb6f90..478661ebb 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -1,4 +1,4 @@ -import React from 'react' +import React, { useEffect, useRef } from 'react' import { CRow, CCol, @@ -14,6 +14,27 @@ import CIcon from '@coreui/icons-react' import { cilArrowBottom, cilArrowTop, cilOptions } from '@coreui/icons' const WidgetsDropdown = () => { + const widgetChartRef1 = useRef(null) + const widgetChartRef2 = useRef(null) + + useEffect(() => { + document.documentElement.addEventListener('ColorSchemeChange', () => { + if (widgetChartRef1.current) { + setTimeout(() => { + widgetChartRef1.current.data.datasets[0].pointBackgroundColor = getStyle('--cui-primary') + widgetChartRef1.current.update() + }) + } + + if (widgetChartRef2.current) { + setTimeout(() => { + widgetChartRef2.current.data.datasets[0].pointBackgroundColor = getStyle('--cui-info') + widgetChartRef2.current.update() + }) + } + }) + }, [widgetChartRef1, widgetChartRef2]) + return ( @@ -44,6 +65,7 @@ const WidgetsDropdown = () => { } chart={ { } chart={ Date: Mon, 12 Jun 2023 15:56:42 +0200 Subject: [PATCH 10/68] refactor: update SimpleBar to v3 --- src/components/AppSidebar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index a75bf6523..4d81c268e 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -10,7 +10,7 @@ import { logoNegative } from 'src/assets/brand/logo-negative' import { sygnet } from 'src/assets/brand/sygnet' import SimpleBar from 'simplebar-react' -import 'simplebar/dist/simplebar.min.css' +import 'simplebar-react/dist/simplebar.min.css'; // sidebar nav config import navigation from '../_nav' From 3411c2fffa3eb2d28c76354f5bbee18df7025e8c Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 12 Jun 2023 15:56:42 +0200 Subject: [PATCH 11/68] refactor: update SimpleBar to v3 --- src/components/AppSidebar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index a75bf6523..d279a1101 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -10,7 +10,7 @@ import { logoNegative } from 'src/assets/brand/logo-negative' import { sygnet } from 'src/assets/brand/sygnet' import SimpleBar from 'simplebar-react' -import 'simplebar/dist/simplebar.min.css' +import 'simplebar-react/dist/simplebar.min.css' // sidebar nav config import navigation from '../_nav' From efec57820b90a5e094bae41cc22a570773d79837 Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 13 Jun 2023 16:01:54 +0200 Subject: [PATCH 12/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @coreui/react ^4.9.0-beta.0 → ^4.9.0-beta.1 react-redux ^8.0.7 → ^8.1.0 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b4ec91f04..32f972953 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@coreui/coreui": "4.3.0-beta.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.1.0", - "@coreui/react": "^4.9.0-beta.0", + "@coreui/react": "^4.9.0-beta.1", "@coreui/react-chartjs": "^2.1.3", "@coreui/utils": "^2.0.2", "chart.js": "^3.9.1", @@ -36,7 +36,7 @@ "react": "^18.2.0", "react-app-polyfill": "^3.0.0", "react-dom": "^18.2.0", - "react-redux": "^8.0.7", + "react-redux": "^8.1.0", "react-router-dom": "^6.12.1", "redux": "4.2.1", "simplebar-react": "^3.2.4" From 615f93333c23dbacd4884d3bcdb534db5725d026 Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 13 Jun 2023 16:03:40 +0200 Subject: [PATCH 13/68] refactor: improve color modes handling --- src/App.js | 14 +++++++++++--- src/store.js | 1 + 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/App.js b/src/App.js index b1af84d3d..9d50b99c1 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,6 @@ import React, { Suspense, useEffect } from 'react' import { HashRouter, Route, Routes } from 'react-router-dom' +import { useSelector } from 'react-redux' import { CSpinner, useColorModes } from '@coreui/react' import './scss/style.scss' @@ -14,14 +15,21 @@ const Page404 = React.lazy(() => import('./views/pages/page404/Page404')) const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) const App = () => { - const { setColorMode } = useColorModes('coreui-free-react-admin-template-theme') - const urlParams = new URLSearchParams(window.location.href.split('?')[1]) + const { isColorModeSet, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') + const theme = useSelector((state) => state.theme) useEffect(() => { + const urlParams = new URLSearchParams(window.location.href.split('?')[1]) if (urlParams.get('theme')) { setColorMode(urlParams.get('theme')) } - }, []) + + if (isColorModeSet()) { + return + } + + setColorMode(theme) + }, []) // eslint-disable-line react-hooks/exhaustive-deps return ( diff --git a/src/store.js b/src/store.js index ab446364c..559c5983e 100644 --- a/src/store.js +++ b/src/store.js @@ -2,6 +2,7 @@ import { createStore } from 'redux' const initialState = { sidebarShow: true, + theme: 'light', } const changeState = (state = initialState, { type, ...rest }) => { From f399a308d0988986ddc204873903e315dc2701d8 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 14 Jun 2023 15:27:16 +0200 Subject: [PATCH 14/68] refactor: update main view --- src/views/dashboard/Dashboard.js | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index 2bb1922a6..c03b691c1 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -314,16 +314,20 @@ const Dashboard = () => {
    - + - + - User - Country - Usage - Payment Method - Activity + User + + Country + + Usage + + Payment Method + + Activity @@ -334,7 +338,7 @@ const Dashboard = () => {
    {item.user.name}
    -
    +
    {item.user.new ? 'New' : 'Recurring'} | Registered:{' '} {item.user.registered}
    @@ -343,11 +347,9 @@ const Dashboard = () => { -
    -
    - {item.usage.value}% -
    -
    +
    +
    {item.usage.value}%
    +
    {item.usage.period}
    @@ -357,8 +359,8 @@ const Dashboard = () => { -
    Last login
    - {item.activity} +
    Last login
    +
    {item.activity}
    ))} From cfe2ebd5a5eac60b235724a3ecf56ef2f0855e29 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 16 Jun 2023 14:36:35 +0200 Subject: [PATCH 15/68] refactor: improve color modes handling --- src/App.js | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/App.js b/src/App.js index 9d50b99c1..05aa83455 100644 --- a/src/App.js +++ b/src/App.js @@ -16,19 +16,20 @@ const Page500 = React.lazy(() => import('./views/pages/page500/Page500')) const App = () => { const { isColorModeSet, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') - const theme = useSelector((state) => state.theme) + const storedTheme = useSelector((state) => state.theme) useEffect(() => { const urlParams = new URLSearchParams(window.location.href.split('?')[1]) - if (urlParams.get('theme')) { - setColorMode(urlParams.get('theme')) + const theme = urlParams.get('theme').match(/^[A-Za-z0-9\s]+/)[0] + if (theme) { + setColorMode(theme) } if (isColorModeSet()) { return } - setColorMode(theme) + setColorMode(storedTheme) }, []) // eslint-disable-line react-hooks/exhaustive-deps return ( From a1f20124664fea8b8b63171e4147c980b199a7f4 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 28 Jun 2023 11:27:53 +0200 Subject: [PATCH 16/68] refactor: update color modes support --- src/App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/App.js b/src/App.js index 05aa83455..7f8e6d7ea 100644 --- a/src/App.js +++ b/src/App.js @@ -20,7 +20,7 @@ const App = () => { useEffect(() => { const urlParams = new URLSearchParams(window.location.href.split('?')[1]) - const theme = urlParams.get('theme').match(/^[A-Za-z0-9\s]+/)[0] + const theme = urlParams.get('theme') && urlParams.get('theme').match(/^[A-Za-z0-9\s]+/)[0] if (theme) { setColorMode(theme) } From f4f57434047b85fa7e0b6a3addf5f1ef8a930b4b Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 28 Jun 2023 12:54:24 +0200 Subject: [PATCH 17/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit react-redux ^8.1.0 → ^8.1.1 react-router-dom ^6.12.1 → ^6.14.0 sass ^1.63.3 → ^1.63.6 --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 32f972953..a9b35bf24 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "@coreui/coreui": "4.3.0-beta.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.1.0", - "@coreui/react": "^4.9.0-beta.1", + "@coreui/react": "^4.9.0-beta.2", "@coreui/react-chartjs": "^2.1.3", "@coreui/utils": "^2.0.2", "chart.js": "^3.9.1", @@ -36,8 +36,8 @@ "react": "^18.2.0", "react-app-polyfill": "^3.0.0", "react-dom": "^18.2.0", - "react-redux": "^8.1.0", - "react-router-dom": "^6.12.1", + "react-redux": "^8.1.1", + "react-router-dom": "^6.14.0", "redux": "4.2.1", "simplebar-react": "^3.2.4" }, @@ -49,7 +49,7 @@ "eslint-plugin-prettier": "^4.2.1", "prettier": "2.8.8", "react-scripts": "5.0.1", - "sass": "^1.63.3", + "sass": "^1.63.6", "web-vitals": "^3.3.2" }, "engines": { From 00fffd18d2272f413f0589a9434f8f8f84dbafd0 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 28 Jun 2023 12:55:45 +0200 Subject: [PATCH 18/68] refactor: update color modeshandling --- src/components/AppHeader.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/components/AppHeader.js b/src/components/AppHeader.js index 8d49845c0..80bb87dc8 100644 --- a/src/components/AppHeader.js +++ b/src/components/AppHeader.js @@ -32,8 +32,7 @@ import { AppHeaderDropdown } from './header/index' import { logo } from 'src/assets/brand/logo' const AppHeader = () => { - const { getColorMode, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') - const colorMode = getColorMode() + const { colorMode, setColorMode } = useColorModes('coreui-free-react-admin-template-theme') const dispatch = useDispatch() const sidebarShow = useSelector((state) => state.sidebarShow) From 746e0613ca0bce36053f37c5c43685ba0920283b Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 28 Jun 2023 12:56:09 +0200 Subject: [PATCH 19/68] refactor: update examples --- src/components/DocsExample.js | 5 +++-- src/scss/_example.scss | 2 +- src/views/forms/range/Range.js | 8 ++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/DocsExample.js b/src/components/DocsExample.js index 3340cbc80..5fb2a0569 100644 --- a/src/components/DocsExample.js +++ b/src/components/DocsExample.js @@ -5,7 +5,7 @@ import CIcon from '@coreui/icons-react' import { cilCode, cilMediaPlay } from '@coreui/icons' const DocsExample = (props) => { - const { children, href } = props + const { children, href, tabContentClassName } = props const _href = `https://coreui.io/react/docs/${href}` @@ -25,7 +25,7 @@ const DocsExample = (props) => { - + {children} @@ -37,6 +37,7 @@ const DocsExample = (props) => { DocsExample.propTypes = { children: PropTypes.node, href: PropTypes.string, + tabContentClassName: PropTypes.string, } export default React.memo(DocsExample) diff --git a/src/scss/_example.scss b/src/scss/_example.scss index fdf64254b..2ce6eb7f4 100644 --- a/src/scss/_example.scss +++ b/src/scss/_example.scss @@ -9,7 +9,7 @@ } .tab-content { - background-color: var(--#{$prefix}tertiary-bg) !important; + background-color: rgba(var(--#{$prefix}tertiary-bg-rgb), var(--#{$prefix}bg-opacity, 1)) !important; } & + p { diff --git a/src/views/forms/range/Range.js b/src/views/forms/range/Range.js index 905c3134d..1423f7b73 100644 --- a/src/views/forms/range/Range.js +++ b/src/views/forms/range/Range.js @@ -15,7 +15,7 @@ const Range = () => { Create custom <input type="range"> controls with{' '} <CFormRange>.

    - + Example range @@ -32,7 +32,7 @@ const Range = () => { Add the disabled boolean attribute on an input to give it a grayed out appearance and remove pointer events.

    - + Disabled range @@ -50,7 +50,7 @@ const Range = () => { 0 and 100, respectively. You may specify new values for those using the min and max attributes.

    - + Example range @@ -68,7 +68,7 @@ const Range = () => { specify a step value. In the example below, we double the number of steps by using step="0.5".

    - + Example range From a1e9db0b0b137eb621c5ee3ca973df6c41290ff0 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 28 Jun 2023 12:58:22 +0200 Subject: [PATCH 20/68] release: v4.6.0-beta.0 --- package.json | 2 +- public/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a9b35bf24..9f5d8f34b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/coreui-free-react-admin-template", - "version": "4.5.0", + "version": "4.6.0-beta.0", "description": "CoreUI Free React Admin Template", "homepage": ".", "bugs": { diff --git a/public/index.html b/public/index.html index 21d293335..5d2e83841 100644 --- a/public/index.html +++ b/public/index.html @@ -1,7 +1,7 @@ - -### Platinum Sponsors - -Support this project by [becoming a Platinum Sponsor](https://opencollective.com/coreui/contribute/platinum-sponsor-40959/). A large company logo will be added here with a link to your website. - - - -### Gold Sponsors - -Support this project by [becoming a Gold Sponsor](https://opencollective.com/coreui/contribute/gold-sponsor-40960/). A big company logo will be added here with a link to your website. - - - -### Silver Sponsors - -Support this project by [becoming a Silver Sponsor](https://opencollective.com/coreui/contribute/silver-sponsor-40967/). A medium company logo will be added here with a link to your website. - - - -### Bronze Sponsors - -Support this project by [becoming a Bronze Sponsor](https://opencollective.com/coreui/contribute/bronze-sponsor-40966/). The company avatar will show up here with a link to your OpenCollective Profile. - - - -### Backers - -Thanks to all the backers and sponsors! Support this project by [becoming a backer](https://opencollective.com/coreui/contribute/backer-40965/). - - - - +CoreUI is an MIT-licensed open source project and is completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing. You can support development by buying the [CoreUI PRO](https://coreui.io/pricing/?framework=bootstrap&src=github-coreui-free-react-admin-template) or by becoming a sponsor via [Open Collective](https://opencollective.com/coreui/). ## Copyright and License From c43863789242955b13cea7fff11c0d682f6cd485 Mon Sep 17 00:00:00 2001 From: mrholek Date: Tue, 7 Nov 2023 21:17:12 +0100 Subject: [PATCH 40/68] docs: update README --- README.md | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index fdbf2749b..1df83973f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ CoreUI is meant to be the UX game changer. Pure & transparent code is devoid of ## Table of Contents * [Versions](#versions) -* [CoreUI Pro](#coreui-pro) +* [CoreUI PRO](#coreui-pro) * [CoreUI PRO React Admin Templates](#coreui-pro-react-admin-templates) * [Quick Start](#quick-start) * [Installation](#installation) @@ -43,22 +43,22 @@ CoreUI is meant to be the UX game changer. Pure & transparent code is devoid of * [CoreUI Free React.js Admin Template](https://github.com/coreui/coreui-free-react-admin-template) * [CoreUI Free Vue.js Admin Template](https://github.com/coreui/coreui-free-vue-admin-template) -## CoreUI Pro +## CoreUI PRO -* 💪 [CoreUI Pro Angular Admin Template](https://coreui.io/product/angular-dashboard-template/) -* 💪 [CoreUI Pro Bootstrap Admin Template](https://coreui.io/product/bootstrap-dashboard-template/) -* 💪 [CoreUI Pro React Admin Template](https://coreui.io/product/react-dashboard-template/) -* 💪 [CoreUI Pro Vue Admin Template](https://coreui.io/product/vue-dashboard-template/) +* 💪 [CoreUI PRO Angular Admin Template](https://coreui.io/product/angular-dashboard-template/) +* 💪 [CoreUI PRO Bootstrap Admin Template](https://coreui.io/product/bootstrap-dashboard-template/) +* 💪 [CoreUI PRO React Admin Template](https://coreui.io/product/react-dashboard-template/) +* 💪 [CoreUI PRO Vue Admin Template](https://coreui.io/product/vue-dashboard-template/) ## CoreUI PRO React Admin Templates | Default Theme | Light Theme | | --- | --- | -| [![CoreUI Pro React Admin Template](https://coreui.io/images/templates/coreui_pro_default_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=default) | [![CoreUI Pro React Admin Template](https://coreui.io/images/templates/coreui_pro_light_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=light)| [![CoreUI Pro React Admin Template](https://coreui.io/images/templates/coreui_pro_dark_1440.webp)](https://coreui.io/product/react-dashboard-template/?theme=dark) +| [![CoreUI PRO React Admin Template](https://coreui.io/images/templates/coreui_pro_default_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=default) | [![CoreUI PRO React Admin Template](https://coreui.io/images/templates/coreui_pro_light_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=light)| | Default Theme v3 | Light Theme v3 | | --- | --- | -| [![CoreUI Pro React Admin Template](https://coreui.io/images/templates/coreui_pro_default_v3_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=default-v3) | [![CoreUI Pro React Admin Template](https://coreui.io/images/templates/coreui_pro_light_v3_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=light)| +| [![CoreUI PRO React Admin Template](https://coreui.io/images/templates/coreui_pro_default_v3_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=default-v3) | [![CoreUI PRO React Admin Template](https://coreui.io/images/templates/coreui_pro_light_v3_light_dark.webp)](https://coreui.io/product/react-dashboard-template/?theme=light)| ## Quick Start @@ -147,12 +147,19 @@ See [the Releases section of our project](https://github.com/coreui/coreui-free- ## Creators **Łukasz Holeczek** + * * -* -**CoreUI team** -* https://github.com/orgs/coreui/people +**Andrzej Kopański** + +* + +**CoreUI Team** + +* +* +* ## Community @@ -163,7 +170,7 @@ Get updates on CoreUI's development and chat with the project maintainers and co ## Support CoreUI Development -CoreUI is an MIT-licensed open source project and is completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing. You can support development by buying the [CoreUI PRO](https://coreui.io/pricing/?framework=bootstrap&src=github-coreui-free-react-admin-template) or by becoming a sponsor via [Open Collective](https://opencollective.com/coreui/). +CoreUI is an MIT-licensed open source project and is completely free to use. However, the amount of effort needed to maintain and develop new features for the project is not sustainable without proper financial backing. You can support development by buying the [CoreUI PRO](https://coreui.io/pricing/?framework=react&src=github-coreui-free-react-admin-template) or by becoming a sponsor via [Open Collective](https://opencollective.com/coreui/). ## Copyright and License From 2539b121da93109cf5cfb6e07eead012264f3a81 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 8 Nov 2023 13:20:11 +0100 Subject: [PATCH 41/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @coreui/chartjs ^4.0.0-beta.0 → ^4.0.0-beta.1 @coreui/coreui ^5.0.0-beta.1 → ^5.0.0-beta.2 @testing-library/react ^14.0.0 → ^14.1.0 --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index dae126b5e..98a050226 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,8 @@ "test:debug": "react-scripts --inspect-brk test --runInBand" }, "dependencies": { - "@coreui/chartjs": "^4.0.0-beta.0", - "@coreui/coreui": "^5.0.0-beta.1", + "@coreui/chartjs": "^4.0.0-beta.1", + "@coreui/coreui": "^5.0.0-beta.2", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.2.1", "@coreui/react": "^5.0.0-beta.1", @@ -44,7 +44,7 @@ }, "devDependencies": { "@testing-library/jest-dom": "^5.17.0", - "@testing-library/react": "^14.0.0", + "@testing-library/react": "^14.1.0", "@testing-library/user-event": "^14.5.1", "eslint-config-prettier": "^8.10.0", "eslint-plugin-prettier": "^4.2.1", From 1328195e02a868b350a42679e46664e0e9427e07 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 10 Nov 2023 18:33:03 +0100 Subject: [PATCH 42/68] refactor: update examples --- src/components/AppSidebar.js | 3 +- src/views/base/cards/Cards.js | 56 ++++++++++++----- src/views/base/collapses/Collapses.js | 12 +++- src/views/base/jumbotrons/Jumbotrons.js | 4 +- src/views/base/placeholders/Placeholders.js | 4 +- src/views/base/spinners/Spinners.js | 8 +-- src/views/forms/form-control/FormControl.js | 2 +- src/views/forms/layout/Layout.js | 20 +++++-- src/views/notifications/modals/Modals.js | 66 +++++++++++++++------ src/views/notifications/toasts/Toasts.js | 4 +- 10 files changed, 131 insertions(+), 48 deletions(-) diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index 4d0c60036..156ae8014 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -30,7 +30,8 @@ const AppSidebar = () => { return ( { Some quick example text to build on the card title and make up the bulk of the card's content. - Go somewhere + + Go somewhere + @@ -235,7 +237,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere +
    @@ -250,7 +254,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere +
    @@ -278,7 +284,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + 2 days ago @@ -310,7 +318,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -321,7 +331,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -340,7 +352,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -349,7 +363,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere +
    @@ -364,7 +380,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -390,7 +408,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -399,7 +419,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -408,7 +430,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -449,7 +473,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + @@ -477,7 +503,9 @@ const Cards = () => { With supporting text below as a natural lead-in to additional content. - Go somewhere + + Go somewhere + diff --git a/src/views/base/collapses/Collapses.js b/src/views/base/collapses/Collapses.js index 6f98a69cd..218518933 100644 --- a/src/views/base/collapses/Collapses.js +++ b/src/views/base/collapses/Collapses.js @@ -27,7 +27,9 @@ const Collapses = () => { > Link - setVisible(!visible)}>Button + setVisible(!visible)}> + Button + @@ -81,8 +83,12 @@ const Collapses = () => { A <CButton> can show and hide multiple elements.

    - setVisibleA(!visibleA)}>Toggle first element - setVisibleB(!visibleB)}>Toggle second element + setVisibleA(!visibleA)}> + Toggle first element + + setVisibleB(!visibleB)}> + Toggle second element + { setVisibleA(!visibleA) diff --git a/src/views/base/jumbotrons/Jumbotrons.js b/src/views/base/jumbotrons/Jumbotrons.js index 560681367..18c9223b8 100644 --- a/src/views/base/jumbotrons/Jumbotrons.js +++ b/src/views/base/jumbotrons/Jumbotrons.js @@ -18,7 +18,9 @@ const Jumbotrons = () => { previous versions of Bootstrap. Check out the examples below for how you can remix and restyle it to your liking.

    - Example button + + Example button + diff --git a/src/views/base/placeholders/Placeholders.js b/src/views/base/placeholders/Placeholders.js index 9639b168b..4f0e80f21 100644 --- a/src/views/base/placeholders/Placeholders.js +++ b/src/views/base/placeholders/Placeholders.js @@ -39,7 +39,9 @@ const Placeholders = () => { Some quick example text to build on the card title and make up the bulk of the card's content. - Go somewhere + + Go somewhere +
    diff --git a/src/views/base/spinners/Spinners.js b/src/views/base/spinners/Spinners.js index 7347cf0c1..c3b927f54 100644 --- a/src/views/base/spinners/Spinners.js +++ b/src/views/base/spinners/Spinners.js @@ -93,19 +93,19 @@ const Accordion = () => { as needed.

    - + - + - + - + diff --git a/src/views/forms/form-control/FormControl.js b/src/views/forms/form-control/FormControl.js index 5949a79ce..caea5f722 100644 --- a/src/views/forms/form-control/FormControl.js +++ b/src/views/forms/form-control/FormControl.js @@ -183,7 +183,7 @@ const FormControl = () => {
    - + Confirm identity
    diff --git a/src/views/forms/layout/Layout.js b/src/views/forms/layout/Layout.js index 9d2b21fd2..8fdc2a88c 100644 --- a/src/views/forms/layout/Layout.js +++ b/src/views/forms/layout/Layout.js @@ -102,7 +102,9 @@ const Layout = () => { - Sign in + + Sign in + @@ -178,7 +180,9 @@ const Layout = () => {
    - Sign in + + Sign in + @@ -314,7 +318,9 @@ const Layout = () => { - Submit + + Submit + @@ -353,7 +359,9 @@ const Layout = () => { - Submit + + Submit + @@ -400,7 +408,9 @@ const Layout = () => { - Submit + + Submit + diff --git a/src/views/notifications/modals/Modals.js b/src/views/notifications/modals/Modals.js index d65dd44b2..11e375884 100644 --- a/src/views/notifications/modals/Modals.js +++ b/src/views/notifications/modals/Modals.js @@ -21,7 +21,9 @@ const LiveDemo = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Launch demo modal + setVisible(!visible)}> + Launch demo modal + setVisible(false)}> Modal title @@ -42,7 +44,9 @@ const StaticBackdrop = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Launch static backdrop modal + setVisible(!visible)}> + Launch static backdrop modal + setVisible(false)}> Modal title @@ -65,7 +69,9 @@ const ScrollingLongContent = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Launch demo modal + setVisible(!visible)}> + Launch demo modal + setVisible(false)}> Modal title @@ -165,7 +171,9 @@ const ScrollingLongContent2 = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Launch demo modal + setVisible(!visible)}> + Launch demo modal + setVisible(false)}> Modal title @@ -265,7 +273,9 @@ const VerticallyCentered = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Vertically centered modal + setVisible(!visible)}> + Vertically centered modal + setVisible(false)}> Modal title @@ -289,7 +299,9 @@ const VerticallyCentered2 = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Vertically centered scrollable modal + setVisible(!visible)}> + Vertically centered scrollable modal + setVisible(false)}> Modal title @@ -332,7 +344,9 @@ const TooltipsPopovers = () => { const [visible, setVisible] = useState(false) return ( <> - setVisible(!visible)}>Launch demo modal + setVisible(!visible)}> + Launch demo modal + setVisible(false)}> Modal title @@ -342,7 +356,7 @@ const TooltipsPopovers = () => {

    This - button + button {' '} triggers a popover on click.

    @@ -376,9 +390,15 @@ const OptionalSizes = () => { const [visibleSm, setVisibleSm] = useState(false) return ( <> - setVisibleXL(!visibleXL)}>Extra large modal - setVisibleLg(!visibleLg)}>Large modal - setVisibleSm(!visibleSm)}>Small large modal + setVisibleXL(!visibleXL)}> + Extra large modal + + setVisibleLg(!visibleLg)}> + Large modal + + setVisibleSm(!visibleSm)}> + Small large modal + setVisibleXL(false)}> Extra large modal @@ -411,12 +431,24 @@ const FullscreenModal = () => { return ( <> - setVisible(!visible)}>Full screen - setVisibleSm(!visibleSm)}>Full screen below sm - setVisibleMd(!visibleMd)}>Full screen below md - setVisibleLg(!visibleLg)}>Full screen below lg - setVisibleXL(!visibleXL)}>Full screen below xl - setVisibleXXL(!visibleXXL)}>Full screen below xxl + setVisible(!visible)}> + Full screen + + setVisibleSm(!visibleSm)}> + Full screen below sm + + setVisibleMd(!visibleMd)}> + Full screen below md + + setVisibleLg(!visibleLg)}> + Full screen below lg + + setVisibleXL(!visibleXL)}> + Full screen below xl + + setVisibleXXL(!visibleXXL)}> + Full screen below xxl + setVisible(false)}> Full screen diff --git a/src/views/notifications/toasts/Toasts.js b/src/views/notifications/toasts/Toasts.js index 9631a0e83..639b78b48 100644 --- a/src/views/notifications/toasts/Toasts.js +++ b/src/views/notifications/toasts/Toasts.js @@ -39,7 +39,9 @@ const ExampleToast = () => { ) return ( <> - addToast(exampleToast)}>Send a toast + addToast(exampleToast)}> + Send a toast + ) From 6cb34cfc3e9d3ed4173e807a10d3a47657c9ab73 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Nov 2023 19:58:21 +0100 Subject: [PATCH 43/68] fix: make the sidebar close button visible under the `lg` breakpoint --- src/components/AppSidebar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/AppSidebar.js b/src/components/AppSidebar.js index 156ae8014..6e9f3495f 100644 --- a/src/components/AppSidebar.js +++ b/src/components/AppSidebar.js @@ -45,7 +45,7 @@ const AppSidebar = () => { dispatch({ type: 'set', sidebarShow: false })} /> From 8f55012707027a38dba8b39e27ce2f656e6e3af4 Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 13 Nov 2023 20:13:12 +0100 Subject: [PATCH 44/68] refactor: resolve deprecation warning --- src/store.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/store.js b/src/store.js index 559c5983e..8ad30dad6 100644 --- a/src/store.js +++ b/src/store.js @@ -1,4 +1,4 @@ -import { createStore } from 'redux' +import { legacy_createStore as createStore } from 'redux' const initialState = { sidebarShow: true, From f8d4f9f0c6427c79708236a346488d4a34b1f970 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 15 Nov 2023 11:31:41 +0100 Subject: [PATCH 45/68] refactor: improve responsive behavior --- src/components/AppContent.js | 2 +- src/views/dashboard/Dashboard.js | 76 ++++++++------ src/views/theme/colors/Colors.js | 2 +- src/views/widgets/Widgets.js | 146 ++++++++++----------------- src/views/widgets/WidgetsBrand.js | 25 ++--- src/views/widgets/WidgetsDropdown.js | 23 +++-- 6 files changed, 123 insertions(+), 151 deletions(-) diff --git a/src/components/AppContent.js b/src/components/AppContent.js index b72cc6bd6..b9a39ef50 100644 --- a/src/components/AppContent.js +++ b/src/components/AppContent.js @@ -7,7 +7,7 @@ import routes from '../routes' const AppContent = () => { return ( - + }> {routes.map((route, idx) => { diff --git a/src/views/dashboard/Dashboard.js b/src/views/dashboard/Dashboard.js index da59f7818..5b0b61041 100644 --- a/src/views/dashboard/Dashboard.js +++ b/src/views/dashboard/Dashboard.js @@ -1,4 +1,5 @@ import React from 'react' +import classNames from 'classnames' import { CAvatar, @@ -90,12 +91,12 @@ const Dashboard = () => { user: { name: 'Yiorgos Avraamu', new: true, - registered: 'Jan 1, 2021', + registered: 'Jan 1, 2023', }, country: { name: 'USA', flag: cifUs }, usage: { value: 50, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'success', }, payment: { name: 'Mastercard', icon: cibCcMastercard }, @@ -106,12 +107,12 @@ const Dashboard = () => { user: { name: 'Avram Tarasios', new: false, - registered: 'Jan 1, 2021', + registered: 'Jan 1, 2023', }, country: { name: 'Brazil', flag: cifBr }, usage: { value: 22, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'info', }, payment: { name: 'Visa', icon: cibCcVisa }, @@ -119,11 +120,11 @@ const Dashboard = () => { }, { avatar: { src: avatar3, status: 'warning' }, - user: { name: 'Quintin Ed', new: true, registered: 'Jan 1, 2021' }, + user: { name: 'Quintin Ed', new: true, registered: 'Jan 1, 2023' }, country: { name: 'India', flag: cifIn }, usage: { value: 74, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'warning', }, payment: { name: 'Stripe', icon: cibCcStripe }, @@ -131,11 +132,11 @@ const Dashboard = () => { }, { avatar: { src: avatar4, status: 'secondary' }, - user: { name: 'Enéas Kwadwo', new: true, registered: 'Jan 1, 2021' }, + user: { name: 'Enéas Kwadwo', new: true, registered: 'Jan 1, 2023' }, country: { name: 'France', flag: cifFr }, usage: { value: 98, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'danger', }, payment: { name: 'PayPal', icon: cibCcPaypal }, @@ -146,12 +147,12 @@ const Dashboard = () => { user: { name: 'Agapetus Tadeáš', new: true, - registered: 'Jan 1, 2021', + registered: 'Jan 1, 2023', }, country: { name: 'Spain', flag: cifEs }, usage: { value: 22, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'primary', }, payment: { name: 'Google Wallet', icon: cibCcApplePay }, @@ -162,12 +163,12 @@ const Dashboard = () => { user: { name: 'Friderik Dávid', new: true, - registered: 'Jan 1, 2021', + registered: 'Jan 1, 2023', }, country: { name: 'Poland', flag: cifPl }, usage: { value: 43, - period: 'Jun 11, 2021 - Jul 10, 2021', + period: 'Jun 11, 2023 - Jul 10, 2023', color: 'success', }, payment: { name: 'Amex', icon: cibCcAmex }, @@ -177,7 +178,7 @@ const Dashboard = () => { return ( <> - + @@ -185,7 +186,7 @@ const Dashboard = () => {

    Traffic

    -
    January - July 2021
    +
    January - July 2023
    @@ -208,22 +209,31 @@ const Dashboard = () => {
    - - {progressExample.map((item, index) => ( - + + {progressExample.map((item, index, items) => ( +
    {item.title}
    - +
    {item.value} ({item.percent}%) - +
    ))}
    - - - + @@ -232,20 +242,21 @@ const Dashboard = () => { - +
    -
    New Clients
    +
    New Clients
    9,123
    - +
    -
    Recurring Clients
    +
    + Recurring Clients +
    22,643
    -
    {progressGroupExample1.map((item, index) => (
    @@ -259,18 +270,17 @@ const Dashboard = () => {
    ))}
    - - +
    -
    Pageviews
    +
    Pageviews
    78,623
    - +
    -
    Organic
    +
    Organic
    49,123
    @@ -314,7 +324,7 @@ const Dashboard = () => {
    - + diff --git a/src/views/theme/colors/Colors.js b/src/views/theme/colors/Colors.js index 4a1570353..ef844e163 100644 --- a/src/views/theme/colors/Colors.js +++ b/src/views/theme/colors/Colors.js @@ -1,5 +1,5 @@ -import PropTypes from 'prop-types' import React, { useEffect, useState, createRef } from 'react' +import PropTypes from 'prop-types' import classNames from 'classnames' import { CRow, CCol, CCard, CCardHeader, CCardBody } from '@coreui/react' import { rgbToHex } from '@coreui/utils' diff --git a/src/views/widgets/Widgets.js b/src/views/widgets/Widgets.js index c6be871f6..a9bf51e12 100644 --- a/src/views/widgets/Widgets.js +++ b/src/views/widgets/Widgets.js @@ -41,41 +41,37 @@ const Widgets = () => { Widgets - + - - - + + + - + - + - + { - - - + + + { text="Lorem ipsum dolor sit amet enim." /> - + { text="Lorem ipsum dolor sit amet enim." /> - + { text="Lorem ipsum dolor sit amet enim." /> - + { - - + + { }} /> } - className="mb-4" title="title" value="1,123" /> @@ -273,7 +264,6 @@ const Widgets = () => { }} /> } - className="mb-4" title="title" value="1,123" /> @@ -345,7 +335,6 @@ const Widgets = () => { }} /> } - className="mb-4" title="title" value="1,123" /> @@ -425,7 +414,6 @@ const Widgets = () => { }} /> } - className="mb-4" title="title" value="1,123" /> @@ -505,7 +493,6 @@ const Widgets = () => { }} /> } - className="mb-4" title="title" value="1,123" /> @@ -585,45 +572,40 @@ const Widgets = () => { }} /> } - className="mb-4" title="title" value="1,123" /> - - - + + + } title="income" value="$1.999,50" color="primary" /> - + } title="income" value="$1.999,50" color="info" /> - + } title="income" value="$1.999,50" color="warning" /> - + } title="income" value="$1.999,50" @@ -632,11 +614,10 @@ const Widgets = () => { - - - + + + } title="income" value="$1.999,50" @@ -654,9 +635,8 @@ const Widgets = () => { } /> - + } title="income" value="$1.999,50" @@ -674,9 +654,8 @@ const Widgets = () => { } /> - + } title="income" value="$1.999,50" @@ -694,9 +673,8 @@ const Widgets = () => { } /> - + } title="income" value="$1.999,50" @@ -716,11 +694,10 @@ const Widgets = () => { - - - + + + } padding={false} title="income" @@ -728,9 +705,8 @@ const Widgets = () => { color="primary" /> - + } padding={false} title="income" @@ -738,9 +714,8 @@ const Widgets = () => { color="info" /> - + } padding={false} title="income" @@ -748,9 +723,8 @@ const Widgets = () => { color="warning" /> - + } padding={false} title="income" @@ -760,13 +734,13 @@ const Widgets = () => { - + - + - + } @@ -800,67 +774,61 @@ const Widgets = () => { /> - - - + + + } value="87.500" title="Visitors" progress={{ color: 'info', value: 75 }} - className="mb-4" /> - + } value="385" title="New Clients" progress={{ color: 'success', value: 75 }} - className="mb-4" /> - + } value="1238" title="Products sold" progress={{ color: 'warning', value: 75 }} - className="mb-4" /> - + } value="28%" title="Returning Visitors" progress={{ color: 'primary', value: 75 }} - className="mb-4" /> - + } value="5:34:11" title="Avg. Time" progress={{ color: 'danger', value: 75 }} - className="mb-4" /> - + } value="972" - title="comments" + title="Comments" progress={{ color: 'info', value: 75 }} - className="mb-4" /> - - - + + + } @@ -868,10 +836,9 @@ const Widgets = () => { title="Visitors" inverse progress={{ value: 75 }} - className="mb-4" /> - + } @@ -879,10 +846,9 @@ const Widgets = () => { title="New Clients" inverse progress={{ value: 75 }} - className="mb-4" /> - + } @@ -890,10 +856,9 @@ const Widgets = () => { title="Products sold" inverse progress={{ value: 75 }} - className="mb-4" /> - + } @@ -901,10 +866,9 @@ const Widgets = () => { title="Returning Visitors" inverse progress={{ value: 75 }} - className="mb-4" /> - + } @@ -912,18 +876,16 @@ const Widgets = () => { title="Avg. Time" inverse progress={{ value: 75 }} - className="mb-4" /> - + } value="972" - title="comments" + title="Comments" inverse progress={{ value: 75 }} - className="mb-4" /> diff --git a/src/views/widgets/WidgetsBrand.js b/src/views/widgets/WidgetsBrand.js index b5eb528ac..f09393aae 100644 --- a/src/views/widgets/WidgetsBrand.js +++ b/src/views/widgets/WidgetsBrand.js @@ -5,7 +5,7 @@ import CIcon from '@coreui/icons-react' import { cibFacebook, cibLinkedin, cibTwitter, cilCalendar } from '@coreui/icons' import { CChart } from '@coreui/react-chartjs' -const WidgetsBrand = ({ withCharts }) => { +const WidgetsBrand = (props) => { const chartOptions = { elements: { line: { @@ -35,11 +35,10 @@ const WidgetsBrand = ({ withCharts }) => { } return ( - - + + { /> - + { /> - + { /> - + { } WidgetsBrand.propTypes = { + className: PropTypes.string, withCharts: PropTypes.bool, } diff --git a/src/views/widgets/WidgetsDropdown.js b/src/views/widgets/WidgetsDropdown.js index ed4174b23..85e2fc969 100644 --- a/src/views/widgets/WidgetsDropdown.js +++ b/src/views/widgets/WidgetsDropdown.js @@ -1,4 +1,6 @@ import React, { useEffect, useRef } from 'react' +import PropTypes from 'prop-types' + import { CRow, CCol, @@ -13,7 +15,7 @@ import { CChartBar, CChartLine } from '@coreui/react-chartjs' import CIcon from '@coreui/icons-react' import { cilArrowBottom, cilArrowTop, cilOptions } from '@coreui/icons' -const WidgetsDropdown = () => { +const WidgetsDropdown = (props) => { const widgetChartRef1 = useRef(null) const widgetChartRef2 = useRef(null) @@ -36,10 +38,9 @@ const WidgetsDropdown = () => { }, [widgetChartRef1, widgetChartRef2]) return ( - - + + @@ -128,9 +129,8 @@ const WidgetsDropdown = () => { } /> - + @@ -218,9 +218,8 @@ const WidgetsDropdown = () => { } /> - + @@ -291,9 +290,8 @@ const WidgetsDropdown = () => { } /> - + @@ -390,4 +388,9 @@ const WidgetsDropdown = () => { ) } +WidgetsDropdown.propTypes = { + className: PropTypes.string, + withCharts: PropTypes.bool, +} + export default WidgetsDropdown From 004030755bb743316390286a814573038e7c0764 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 15 Nov 2023 11:39:18 +0100 Subject: [PATCH 46/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @coreui/chartjs ^4.0.0-beta.1 → ^4.0.0-rc.0 @coreui/coreui ^5.0.0-beta.2 → ^5.0.0-rc.0 @coreui/react ^5.0.0-beta.1 → ^5.0.0-rc.0 @coreui/react-chartjs ^3.0.0-beta.0 → ^3.0.0-rc.0 @testing-library/jest-dom ^5.17.0 → ^6.1.4 eslint-config-prettier ^8.10.0 → ^9.0.0 eslint-plugin-prettier ^4.2.1 → ^5.0.1 prettier 2.8.8 → 3.1.0 --- package.json | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 98a050226..ee891a24e 100644 --- a/package.json +++ b/package.json @@ -22,12 +22,12 @@ "test:debug": "react-scripts --inspect-brk test --runInBand" }, "dependencies": { - "@coreui/chartjs": "^4.0.0-beta.1", - "@coreui/coreui": "^5.0.0-beta.2", + "@coreui/chartjs": "^4.0.0-rc.0", + "@coreui/coreui": "^5.0.0-rc.0", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.2.1", - "@coreui/react": "^5.0.0-beta.1", - "@coreui/react-chartjs": "^3.0.0-beta.0", + "@coreui/react": "^5.0.0-rc.0", + "@coreui/react-chartjs": "^3.0.0-rc.0", "@coreui/utils": "^2.0.2", "@popperjs/core": "^2.11.8", "chart.js": "^4.4.0", @@ -43,12 +43,13 @@ "simplebar-react": "^3.2.4" }, "devDependencies": { - "@testing-library/jest-dom": "^5.17.0", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", + "@testing-library/jest-dom": "^6.1.4", "@testing-library/react": "^14.1.0", "@testing-library/user-event": "^14.5.1", - "eslint-config-prettier": "^8.10.0", - "eslint-plugin-prettier": "^4.2.1", - "prettier": "2.8.8", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.1", + "prettier": "3.1.0", "react-scripts": "5.0.1", "sass": "^1.69.5", "web-vitals": "^3.5.0" From 30f8ee04a333c4d735cdead1a7799fab3ae93228 Mon Sep 17 00:00:00 2001 From: mrholek Date: Wed, 15 Nov 2023 11:45:52 +0100 Subject: [PATCH 47/68] release: v5.0.0-rc.0 --- package.json | 2 +- public/index.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index ee891a24e..c377ac217 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@coreui/coreui-free-react-admin-template", - "version": "5.0.0-beta.0", + "version": "5.0.0-rc.0", "description": "CoreUI Free React Admin Template", "homepage": ".", "bugs": { diff --git a/public/index.html b/public/index.html index 3fa4ca470..851936cc6 100644 --- a/public/index.html +++ b/public/index.html @@ -1,7 +1,7 @@ diff --git a/src/components/AppFooter.js b/src/components/AppFooter.js index 2f26d8b6e..fd126f460 100644 --- a/src/components/AppFooter.js +++ b/src/components/AppFooter.js @@ -8,7 +8,7 @@ const AppFooter = () => { CoreUI - © 2023 creativeLabs. + © 2024 creativeLabs.
    Powered by From 1d05bd4cd636da9a1ea884ea964085883323b93f Mon Sep 17 00:00:00 2001 From: mrholek Date: Mon, 11 Mar 2024 18:34:00 +0100 Subject: [PATCH 62/68] refactor: migrate from CRA to Vite --- .env | 2 -- .eslintrc.js | 2 -- .prettierignore | 2 +- .prettierrc.js | 6 ++--- README.md | 10 +++++--- index.html | 29 +++++++++++++++++++++ jest.config.js | 17 ------------- jsconfig.json | 6 ----- package.json | 27 ++++++++------------ public/index.html | 50 ------------------------------------ src/App.test.js | 9 ------- src/index.js | 12 +++------ src/reportWebVitals.js | 13 ---------- src/setupTests.js | 5 ---- vite.config.mjs | 57 ++++++++++++++++++++++++++++++++++++++++++ 15 files changed, 110 insertions(+), 137 deletions(-) delete mode 100644 .env create mode 100644 index.html delete mode 100644 jest.config.js delete mode 100644 jsconfig.json delete mode 100644 public/index.html delete mode 100644 src/App.test.js delete mode 100644 src/reportWebVitals.js delete mode 100644 src/setupTests.js create mode 100644 vite.config.mjs diff --git a/.env b/.env deleted file mode 100644 index 0c48d3cda..000000000 --- a/.env +++ /dev/null @@ -1,2 +0,0 @@ -PORT=3000 -CHOKIDAR_USEPOLLING=true diff --git a/.eslintrc.js b/.eslintrc.js index e08f0b57a..e9c55eec0 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,8 +13,6 @@ module.exports = { }, }, extends: [ - 'react-app', - 'react-app/jest', 'plugin:react/recommended', // Uses the recommended rules from @eslint-plugin-react 'plugin:prettier/recommended', // Enables eslint-plugin-prettier and eslint-config-prettier. This will display prettier errors as ESLint errors. Make sure this is always the last configuration in the extends array. ], diff --git a/.prettierignore b/.prettierignore index 849ddff3b..567609b12 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1 @@ -dist/ +build/ diff --git a/.prettierrc.js b/.prettierrc.js index 415ca0578..66f90b933 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,7 +1,7 @@ module.exports = { semi: false, - trailingComma: "all", + trailingComma: 'all', singleQuote: true, printWidth: 100, - tabWidth: 2 -}; \ No newline at end of file + tabWidth: 2, +} diff --git a/README.md b/README.md index 24a987dd0..896332553 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,8 @@ Within the download you'll find the following directories and files, logically g ``` coreui-free-react-admin-template ├── public/ # static files -│ └── index.html # html template +│ ├── favicon.ico +│ └── manifest.json │ ├── src/ # project root │ ├── assets/ # images, icons, etc. @@ -126,12 +127,15 @@ coreui-free-react-admin-template │ ├── views/ # application views │ ├── _nav.js # sidebar navigation config │ ├── App.js -│ ├── ... │ ├── index.js │ ├── routes.js # routes config │ └── store.js # template state example │ -└── package.json +├── index.html # html template +├── ... +├── package.json +├── ... +└── vite.config.mjs # vite config ``` ## Documentation diff --git a/index.html b/index.html new file mode 100644 index 000000000..ceddb2461 --- /dev/null +++ b/index.html @@ -0,0 +1,29 @@ + + + + + + + + + + + CoreUI Free React.js Admin Template + + + + + +
    + + + + diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index abf16ab93..000000000 --- a/jest.config.js +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Copyright (c) 2013-present, creativeLabs Lukasz Holeczek. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -'use strict' - -module.exports = { - collectCoverageFrom: [ - 'src/**/*.{js,jsx}', - '!**/*index.js', - '!src/serviceWorker.js', - '!src/polyfill.js', - ], -} diff --git a/jsconfig.json b/jsconfig.json deleted file mode 100644 index 63f923e44..000000000 --- a/jsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "compilerOptions": { - "baseUrl": "." - }, - "include": ["src"] -} \ No newline at end of file diff --git a/package.json b/package.json index 3b1991bf7..56a6e587a 100644 --- a/package.json +++ b/package.json @@ -13,13 +13,10 @@ "license": "MIT", "author": "The CoreUI Team (https://github.com/orgs/coreui/people)", "scripts": { - "build": "react-scripts build", - "eject": "react-scripts eject", + "build": "vite build", "lint": "eslint \"src/**/*.js\"", - "start": "react-scripts start", - "test": "react-scripts test", - "test:cov": "npm test -- --coverage --watchAll=false", - "test:debug": "react-scripts --inspect-brk test --runInBand" + "serve": "vite preview", + "start": "vite" }, "dependencies": { "@coreui/chartjs": "^4.0.0-rc.0", @@ -35,7 +32,6 @@ "core-js": "^3.36.0", "prop-types": "^15.8.1", "react": "^18.2.0", - "react-app-polyfill": "^3.0.0", "react-dom": "^18.2.0", "react-redux": "^9.1.0", "react-router-dom": "^6.22.3", @@ -43,19 +39,16 @@ "simplebar-react": "^3.2.4" }, "devDependencies": { - "@babel/plugin-proposal-private-property-in-object": "^7.21.11", - "@testing-library/jest-dom": "^6.4.2", - "@testing-library/react": "^14.2.1", - "@testing-library/user-event": "^14.5.2", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.18", + "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react-hooks": "^4.6.0", + "postcss": "^8.4.35", "prettier": "3.2.5", - "react-scripts": "5.0.1", "sass": "^1.71.1", - "web-vitals": "^3.5.2" - }, - "engines": { - "node": ">=10", - "npm": ">=6" + "vite": "^5.1.6" } } diff --git a/public/index.html b/public/index.html deleted file mode 100644 index eeb29ba81..000000000 --- a/public/index.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - CoreUI Free React.js Admin Template - - - - - - - -
    - - - diff --git a/src/App.test.js b/src/App.test.js deleted file mode 100644 index 3a7a8cc56..000000000 --- a/src/App.test.js +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import { render, screen } from '@testing-library/react' -import App from './App' - -test('renders learn react link', () => { - render() - const linkElement = screen.getByText(/learn react/i) - expect(linkElement).toBeInTheDocument() -}) diff --git a/src/index.js b/src/index.js index d19a3bcd3..11d6e8658 100644 --- a/src/index.js +++ b/src/index.js @@ -1,10 +1,9 @@ -import 'react-app-polyfill/stable' -import 'core-js' import React from 'react' import { createRoot } from 'react-dom/client' -import App from './App' -import reportWebVitals from './reportWebVitals' import { Provider } from 'react-redux' +import 'core-js' + +import App from './App' import store from './store' createRoot(document.getElementById('root')).render( @@ -12,8 +11,3 @@ createRoot(document.getElementById('root')).render( , ) - -// If you want to start measuring performance in your app, pass a function -// to log results (for example: reportWebVitals(console.log)) -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals -reportWebVitals() diff --git a/src/reportWebVitals.js b/src/reportWebVitals.js deleted file mode 100644 index dc6ff0781..000000000 --- a/src/reportWebVitals.js +++ /dev/null @@ -1,13 +0,0 @@ -const reportWebVitals = (onPerfEntry) => { - if (onPerfEntry && onPerfEntry instanceof Function) { - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { - getCLS(onPerfEntry) - getFID(onPerfEntry) - getFCP(onPerfEntry) - getLCP(onPerfEntry) - getTTFB(onPerfEntry) - }) - } -} - -export default reportWebVitals diff --git a/src/setupTests.js b/src/setupTests.js deleted file mode 100644 index 52aaef1d2..000000000 --- a/src/setupTests.js +++ /dev/null @@ -1,5 +0,0 @@ -// jest-dom adds custom jest matchers for asserting on DOM nodes. -// allows you to do things like: -// expect(element).toHaveTextContent(/react/i) -// learn more: https://github.com/testing-library/jest-dom -import '@testing-library/jest-dom' diff --git a/vite.config.mjs b/vite.config.mjs new file mode 100644 index 000000000..ee16a3581 --- /dev/null +++ b/vite.config.mjs @@ -0,0 +1,57 @@ +import { defineConfig, loadEnv } from 'vite' +import react from '@vitejs/plugin-react' +import path from 'node:path' +import autoprefixer from 'autoprefixer' + +export default defineConfig(({ mode }) => { + // Load .env + const env = loadEnv(mode, process.cwd(), '') + process.env = { ...process.env, ...env } + + return { + base: './', + build: { + outDir: 'build', + }, + css: { + postcss: { + plugins: [ + autoprefixer({}), // add options if needed + ], + }, + }, + define: { + // vitejs does not support process.env so we have to redefine it + 'process.env': process.env, + }, + esbuild: { + loader: 'jsx', + include: /src\/.*\.jsx?$/, + exclude: [], + }, + optimizeDeps: { + force: true, + esbuildOptions: { + loader: { + '.js': 'jsx', + }, + }, + }, + plugins: [react()], + resolve: { + alias: [ + { + find: 'src/', + replacement: `${path.resolve(__dirname, 'src')}/`, + }, + ], + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss'], + }, + server: { + port: 3000, + proxy: { + // https://vitejs.dev/config/server-options.html + }, + }, + } +}) From b57048543adf84edfc7aaff7808f03eeed961065 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 22 Mar 2024 12:45:41 +0100 Subject: [PATCH 63/68] chore: clean-up --- vite.config.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vite.config.mjs b/vite.config.mjs index ee16a3581..66ffff2cf 100644 --- a/vite.config.mjs +++ b/vite.config.mjs @@ -45,7 +45,7 @@ export default defineConfig(({ mode }) => { replacement: `${path.resolve(__dirname, 'src')}/`, }, ], - extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue', '.scss'], + extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.scss'], }, server: { port: 3000, From 0a7196fc53ff844fe4427f50b4d36de54d299b03 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 22 Mar 2024 13:05:15 +0100 Subject: [PATCH 64/68] chore: update dependencies and devDependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit @coreui/coreui ^5.0.0-rc-2 → ^5.0.0-rc.3 @coreui/react ^5.0.0-rc.2 → ^5.0.0-rc.3 autoprefixer ^10.4.18 → ^10.4.19 core-js ^3.36.0 → ^3.36.1 eslint-plugin-react ^7.34.0 → ^7.34.1 postcss ^8.4.35 → ^8.4.38 sass ^1.71.1 → ^1.72.0 vite ^5.1.6 → ^5.2.2 --- package.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 56a6e587a..e70fe6eff 100644 --- a/package.json +++ b/package.json @@ -23,13 +23,13 @@ "@coreui/coreui": "^5.0.0-rc-2", "@coreui/icons": "^3.0.1", "@coreui/icons-react": "^2.2.1", - "@coreui/react": "^5.0.0-rc.2", + "@coreui/react": "^5.0.0-rc.3", "@coreui/react-chartjs": "^3.0.0-rc.0", "@coreui/utils": "^2.0.2", "@popperjs/core": "^2.11.8", "chart.js": "^4.4.2", "classnames": "^2.5.1", - "core-js": "^3.36.0", + "core-js": "^3.36.1", "prop-types": "^15.8.1", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -40,15 +40,15 @@ }, "devDependencies": { "@vitejs/plugin-react": "^4.2.1", - "autoprefixer": "^10.4.18", + "autoprefixer": "^10.4.19", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-prettier": "^5.1.3", - "eslint-plugin-react": "^7.34.0", + "eslint-plugin-react": "^7.34.1", "eslint-plugin-react-hooks": "^4.6.0", - "postcss": "^8.4.35", + "postcss": "^8.4.38", "prettier": "3.2.5", - "sass": "^1.71.1", - "vite": "^5.1.6" + "sass": "^1.72.0", + "vite": "^5.2.2" } } From cc07a0478c98a23b20634bf0ebfe2917df6ba16f Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 22 Mar 2024 13:06:20 +0100 Subject: [PATCH 65/68] docs: update README --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 896332553..101aa0a32 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ CoreUI is meant to be the UX game changer. Pure & transparent code is devoid of * [CoreUI Free Bootstrap Admin Template](https://github.com/coreui/coreui-free-bootstrap-admin-template) * [CoreUI Free Angular Admin Template](https://github.com/coreui/coreui-free-angular-admin-template) -* [CoreUI Free React.js Admin Template](https://github.com/coreui/coreui-free-react-admin-template) +* [CoreUI Free React.js Admin Template (Vite)](https://github.com/coreui/coreui-free-react-admin-template) +* [CoreUI Free React.js Admin Template (Create React App)](https://github.com/coreui/coreui-free-react-admin-template-cra) * [CoreUI Free Vue.js Admin Template](https://github.com/coreui/coreui-free-vue-admin-template) ## CoreUI PRO @@ -140,7 +141,7 @@ coreui-free-react-admin-template ## Documentation -The documentation for the CoreUI Admin Template is hosted at our website [CoreUI for React](https://coreui.io/react/) +The documentation for the CoreUI Admin Template is hosted at our website [CoreUI for React](https://coreui.io/react/docs/templates/installation/) ## Versioning From 49af4079f9166012c2d76bb806aae5292e7992e9 Mon Sep 17 00:00:00 2001 From: mrholek Date: Fri, 22 Mar 2024 13:06:58 +0100 Subject: [PATCH 66/68] release: v5.0.0-rc.1 --- index.html | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index ceddb2461..2e283fb93 100644 --- a/index.html +++ b/index.html @@ -1,7 +1,7 @@