From b66809a352864427366c8452bd8452ebba16deee Mon Sep 17 00:00:00 2001 From: Gregor Kleen Date: Wed, 18 Dec 2019 11:47:25 +0100 Subject: [PATCH] refactor: convert to sass & minify output css --- frontend/src/_common.sass | 9 + frontend/src/_common.scss | 8 - frontend/src/app.js | 2 +- frontend/src/app.sass | 1191 +++++++++++++ frontend/src/app.scss | 1517 ----------------- frontend/src/utils/alerts/alerts.js | 2 +- frontend/src/utils/alerts/alerts.sass | 186 ++ frontend/src/utils/alerts/alerts.scss | 221 --- frontend/src/utils/asidenav/asidenav.js | 2 +- frontend/src/utils/asidenav/asidenav.sass | 330 ++++ frontend/src/utils/asidenav/asidenav.scss | 406 ----- frontend/src/utils/async-form/async-form.js | 2 +- frontend/src/utils/async-form/async-form.sass | 71 + frontend/src/utils/async-form/async-form.scss | 78 - .../utils/async-table/async-table-filter.sass | 4 + .../utils/async-table/async-table-filter.scss | 5 - frontend/src/utils/async-table/async-table.js | 4 +- .../src/utils/async-table/async-table.sass | 4 + .../src/utils/async-table/async-table.scss | 5 - .../src/utils/course-teaser/course-teaser.js | 2 +- .../utils/course-teaser/course-teaser.sass | 246 +++ .../utils/course-teaser/course-teaser.scss | 317 ---- frontend/src/utils/form/form.js | 2 +- frontend/src/utils/form/form.sass | 35 + frontend/src/utils/form/form.scss | 45 - .../src/utils/hide-columns/hide-columns.js | 2 +- .../src/utils/hide-columns/hide-columns.sass | 61 + .../src/utils/hide-columns/hide-columns.scss | 71 - frontend/src/utils/inputs/checkbox.js | 2 +- frontend/src/utils/inputs/checkbox.sass | 71 + frontend/src/utils/inputs/checkbox.scss | 83 - frontend/src/utils/inputs/file-input.js | 2 +- frontend/src/utils/inputs/file-input.sass | 2 + frontend/src/utils/inputs/file-input.scss | 3 - frontend/src/utils/inputs/inputs.js | 4 +- frontend/src/utils/inputs/inputs.sass | 211 +++ frontend/src/utils/inputs/inputs.scss | 253 --- frontend/src/utils/inputs/radio.sass | 55 + frontend/src/utils/inputs/radio.scss | 66 - frontend/src/utils/mass-input/mass-input.js | 2 +- frontend/src/utils/mass-input/mass-input.sass | 14 + frontend/src/utils/mass-input/mass-input.scss | 18 - frontend/src/utils/modal/modal.js | 2 +- frontend/src/utils/modal/modal.sass | 103 ++ frontend/src/utils/modal/modal.scss | 120 -- frontend/src/utils/navbar/navbar.js | 2 +- frontend/src/utils/navbar/navbar.sass | 228 +++ frontend/src/utils/navbar/navbar.scss | 305 ---- frontend/src/utils/show-hide/show-hide.js | 2 +- frontend/src/utils/show-hide/show-hide.sass | 44 + frontend/src/utils/show-hide/show-hide.scss | 54 - frontend/src/utils/tabber/tabber.js | 2 +- frontend/src/utils/tabber/tabber.sass | 35 + frontend/src/utils/tabber/tabber.scss | 39 - frontend/src/utils/tooltips/tooltips.js | 2 +- frontend/src/utils/tooltips/tooltips.sass | 92 + frontend/src/utils/tooltips/tooltips.scss | 109 -- package-lock.json | 983 +++++++++++ package.json | 1 + records.json | 234 +++ webpack.config.js | 10 +- 61 files changed, 4238 insertions(+), 3743 deletions(-) create mode 100644 frontend/src/_common.sass delete mode 100644 frontend/src/_common.scss create mode 100644 frontend/src/app.sass delete mode 100644 frontend/src/app.scss create mode 100644 frontend/src/utils/alerts/alerts.sass delete mode 100644 frontend/src/utils/alerts/alerts.scss create mode 100644 frontend/src/utils/asidenav/asidenav.sass delete mode 100644 frontend/src/utils/asidenav/asidenav.scss create mode 100644 frontend/src/utils/async-form/async-form.sass delete mode 100644 frontend/src/utils/async-form/async-form.scss create mode 100644 frontend/src/utils/async-table/async-table-filter.sass delete mode 100644 frontend/src/utils/async-table/async-table-filter.scss create mode 100644 frontend/src/utils/async-table/async-table.sass delete mode 100644 frontend/src/utils/async-table/async-table.scss create mode 100644 frontend/src/utils/course-teaser/course-teaser.sass delete mode 100644 frontend/src/utils/course-teaser/course-teaser.scss create mode 100644 frontend/src/utils/form/form.sass delete mode 100644 frontend/src/utils/form/form.scss create mode 100644 frontend/src/utils/hide-columns/hide-columns.sass delete mode 100644 frontend/src/utils/hide-columns/hide-columns.scss create mode 100644 frontend/src/utils/inputs/checkbox.sass delete mode 100644 frontend/src/utils/inputs/checkbox.scss create mode 100644 frontend/src/utils/inputs/file-input.sass delete mode 100644 frontend/src/utils/inputs/file-input.scss create mode 100644 frontend/src/utils/inputs/inputs.sass delete mode 100644 frontend/src/utils/inputs/inputs.scss create mode 100644 frontend/src/utils/inputs/radio.sass delete mode 100644 frontend/src/utils/inputs/radio.scss create mode 100644 frontend/src/utils/mass-input/mass-input.sass delete mode 100644 frontend/src/utils/mass-input/mass-input.scss create mode 100644 frontend/src/utils/modal/modal.sass delete mode 100644 frontend/src/utils/modal/modal.scss create mode 100644 frontend/src/utils/navbar/navbar.sass delete mode 100644 frontend/src/utils/navbar/navbar.scss create mode 100644 frontend/src/utils/show-hide/show-hide.sass delete mode 100644 frontend/src/utils/show-hide/show-hide.scss create mode 100644 frontend/src/utils/tabber/tabber.sass delete mode 100644 frontend/src/utils/tabber/tabber.scss create mode 100644 frontend/src/utils/tooltips/tooltips.sass delete mode 100644 frontend/src/utils/tooltips/tooltips.scss diff --git a/frontend/src/_common.sass b/frontend/src/_common.sass new file mode 100644 index 000000000..cf4fab2cf --- /dev/null +++ b/frontend/src/_common.sass @@ -0,0 +1,9 @@ +@use "~@fortawesome/fontawesome-pro/scss/fontawesome" with ( $fa-font-path: "~@fortawesome/fontawesome-pro/webfonts" ) + +@forward "~@fortawesome/fontawesome-pro/scss/fontawesome" + +@use "~@fortawesome/fontawesome-pro/scss/solid" + +@use "~typeface-roboto" as roboto + +@use "~typeface-source-sans-pro" as source-sans-pro diff --git a/frontend/src/_common.scss b/frontend/src/_common.scss deleted file mode 100644 index d0652e036..000000000 --- a/frontend/src/_common.scss +++ /dev/null @@ -1,8 +0,0 @@ -@use "~@fortawesome/fontawesome-pro/scss/fontawesome" with ( - $fa-font-path: "~@fortawesome/fontawesome-pro/webfonts" -); -@forward "~@fortawesome/fontawesome-pro/scss/fontawesome"; -@use "~@fortawesome/fontawesome-pro/scss/solid"; - -@use "~typeface-roboto" as roboto; -@use "~typeface-source-sans-pro" as source-sans-pro; diff --git a/frontend/src/app.js b/frontend/src/app.js index 6aa438405..8b26b08a2 100644 --- a/frontend/src/app.js +++ b/frontend/src/app.js @@ -4,7 +4,7 @@ import { I18n } from './services/i18n/i18n'; import { UtilRegistry } from './services/util-registry/util-registry'; import { isValidUtility } from './core/utility'; -import './app.scss'; +import './app.sass'; export class App { httpClient = new HttpClient(); diff --git a/frontend/src/app.sass b/frontend/src/app.sass new file mode 100644 index 000000000..14460cf2a --- /dev/null +++ b/frontend/src/app.sass @@ -0,0 +1,1191 @@ +@use "common" as * + +\:root + // THEME INDEPENDENT COLORS + --color-error: #8c0707 + --color-error-dark: #500303 + --color-warning: #fc9900 + --color-warning-dark: #c27400 + --color-success: #23d160 + --color-success-dark: #1ca64c + --color-info: #c4c4c4 + --color-info-dark: #919191 + --color-lightblack: #1A2A36 + --color-lightwhite: #fcfffa + --color-grey: #B1B5C0 + --color-grey-light: #efefef + --color-grey-lighter: #f5f5f5 + --color-grey-medium: #9A989E + --color-font: #34303a + --color-fontsec: #5b5861 + + // FONTS + --font-base: "Source Sans Pro", "Trebuchet MS", sans-serif + --font-logo: "Roboto", var(--font-base) + + // DIMENSIONS + --header-height: 100px + --header-height-collapsed: 60px + --asidenav-width-xl: 250px + --asidenav-width-lg: 20% + --asidenav-width-md: 60px + +* + box-sizing: border-box + padding: 0 + margin: 0 + -webkit-font-smoothing: antialiased + +body + background-color: white + color: var(--color-font) + font-family: var(--font-base) + font-weight: 400 + font-size: 16px + overflow-y: scroll + +// THEMES + +body + // DEFAULT LMU THEME + --color-lmu-green: #0a9342 + --color-primary: var(--color-lmu-green) + --color-light: #31cc72 + --color-lighter: #35db7a + --color-dark: #087536 + --color-darker: #075728 + --color-link: var(--color-font) + --color-link-hover: var(--color-font) + --color-lmu-box-border: var(--color-lightwhite) + + &.theme--lavender + --color-primary: #584c9c + --color-light: #5969b5 + --color-lighter: #5f7dc2 + --color-dark: #4c4279 + --color-darker: #3c2765 + --color-link: var(--color-dark) + --color-link-hover: var(--color-darker) + + &.theme--neutral-blue + --color-primary: #3E606F + --color-light: rgb(189, 201, 219) + --color-lighter: rgb(145, 159, 170) + --color-dark: rgb(42, 74, 88) + --color-darker: #193441 + + &.theme--aberdeen-reds + --color-primary: #820333 + --color-light: #C9283E + --color-lighter: #F0433A + --color-dark: #540032 + --color-darker: #2E112D + + &.theme--moss-green + --color-primary: #5C996B + --color-light: #7ACC8F + --color-lighter: #99FFB2 + --color-dark: #3D6647 + --color-darker: #1F3324 + + &.theme--sky-love + --color-primary: #87ABE5 + --color-light: #A0C6F2 + --color-lighter: #BAE2FF + --color-dark: #7A95DE + --color-darker: #6B7BC9 + --color-link: var(--color-lightblack) + --color-link-hover: var(--color-darker) + +// END THEMES + +.emph + font-style: italic + +a, +a:visited + text-decoration: none + font-weight: 600 + transition: color .2s ease, background-color .2s ease + +a + color: var(--color-link) + +a:hover + color: var(--color-link-hover) + +ul + margin-left: 20px + +h1, h2, h3, .div-h3, h4, h5 + font-weight: 600 + +h1 + font-size: 32px + margin-bottom: 10px + +h2 + font-size: 24px + margin: 10px 0 + + &:first-child + margin-top: 0 + +h3, .div-h3 + font-size: 20px + margin: 10px 0 + + &:first-child + margin-top: 0 + +h4 + font-size: 16px + margin: 0 + +@media (max-width: 768px) + h1 + font-size: 24px + + h2 + font-size: 20px + + h3, .div-h3 + font-size: 16px + +// LAYOUT +.main + position: relative + +.main__content + position: relative + background-color: white + transition: padding-left .2s ease-out + margin-top: var(--header-height-collapsed) + margin-left: 0 + + > .container + margin: 20px 0 + +.main__content, .modal__content + a + text-decoration: underline + + p, form, .div-p + margin: 0.5rem 0 + + &:last-child + margin: 0.5rem 0 0 + + &:first-child + margin: 0 + +@media (min-width: 426px) + .main__content + margin-left: var(--asidenav-width-md, 50px) + +@media (min-width: 769px) + .main__content + margin-left: var(--asidenav-width-lg, 20%) + margin-top: var(--header-height) + +@media (min-width: 1200px) + .main__content + margin-left: var(--asidenav-width-xl, 250px) + +.main__content-body + padding: 13px + +@media (min-width: 426px) + .main__content-body + padding: 13px 20px + +@media (min-width: 769px) + .main__content-body + padding: 20px 40px + +.pseudo-focus + outline: 5px auto var(--color-light) + outline: 5px auto -webkit-focus-ring-color + +// CONTAINER +.container + + .container + margin-top: 20px + +// GENERAL BUTTON STYLES +input[type="submit"], +input[type="button"], +button, +.btn + outline: 0 + border: 0 + box-shadow: 0 + background-color: var(--color-dark) + color: white + padding: 10px 17px + min-width: 100px + transition: all .1s + font-size: 16px + cursor: pointer + display: inline-block + text-decoration: none + + a:hover + color: white + + &:focus + border-color: #3273dc + box-shadow: 0 0 0 0.25rem rgba(50, 115, 220, 0.25) + outline: 0 + +input[type="submit"][disabled], +input[type="button"][disabled], +button[disabled], +.btn[disabled] + opacity: 0.3 + background-color: var(--color-grey) + cursor: default + +input[type="submit"]:not([disabled]):hover, +input[type="button"]:not([disabled]):hover, +button:not([disabled]):hover, +.btn:not([disabled]):hover + background-color: var(--color-light) + color: white + +.btn-primary + background-color: var(--color-primary) + +.btn-info + background-color: var(--color-info) + +.btn--small + padding: 4px 7px + background-color: var(--color-darker) + +input[type="submit"].btn-info:hover, +input[type="button"].btn-info:hover, +.btn-info:hover + background-color: var(--color-grey) + +// GENERAL TABLE STYLES +.table + margin: 21px 0 + width: 100% + +.table:first-child + margin-top: 0 + +.table:last-child + margin-bottom: 0 + +.table--striped + .table__row:not(.no-stripe):not(.table__row--sum):nth-child(even) + background-color: rgba(0, 0, 0, 0.03) + +.table--hover + .table__row:not(.no-hover):not(.table__row--sum):not(.table__row--head):not(.table__row--foot):hover + background-color: rgba(0, 0, 0, 0.07) + +.table__row--sum td.table__td::before + content: 'Σ' + font-weight: bold + margin-right: .25em + +// SCROLLTABLE +.scrolltable + overflow: auto + +.scrolltable--bordered + box-shadow: 0 0 1px 1px var(--color-grey-light) + +@media (max-width: 425px) + .scrolltable + margin-left: -10px + padding-left: 10px + margin-right: -10px + padding-right: 10px + +// TABLE DESIGN +.table__td, .table__th + padding-top: 14px + padding-bottom: 10px + padding-left: 10px + padding-right: 10px + max-width: 300px + +.table__td + font-size: 16px + color: var(--color-font) + line-height: 1.4 + vertical-align: top + +.table__td--automatic + font-style: oblique + color: var(--color-fontsec) + +.table__td--overriden + font-weight: bold + +.table__th + background-color: var(--color-dark) + position: relative + font-size: 16px + color: white + line-height: 1.4 + padding-top: 10px + padding-bottom: 10px + font-weight: bold + text-align: left + + a + color: white + text-decoration: none + font-weight: bold + + &:hover + color: inherit + + &::before + @extend .fas + + content: fa-content($fa-var-link) + margin-right: 0.25em + +@media (max-width: 1200px) + .table th + padding: 4px 6px + +.table__td-content + max-height: 200px + overflow-y: auto + +.table__th-link + font-weight: bold + + &::before + display: none + +.table--vertical + th + background-color: transparent + color: var(--color-font) + width: 170px + text-align: right + padding-right: 15px + font-weight: 400 + + td + font-weight: 600 + color: var(--color-font) + +.table--condensed + margin: 0 + + .table__th, + .table__td + padding: 4px 8px + +// UNORDERED LIST +.list-ul__item + // padding: 4px 0; + line-height: 25px + +// LIST MODIFIERS +.list--iconless + list-style-type: none + margin-left: 0 + +.list--inline + ul + display: inline-block + margin-left: 0 + + li + display: inline-block + +ul.list--inline + display: inline-block + margin-left: 0 + + li + display: inline-block + +.list--comma-separated li + &::after + content: ', ' + white-space: pre + + &:last-of-type::after + content: none + +.list--space-separated li + &::after + content: ' ' + white-space: pre + + &:last-of-type::after + content: none + +.list--icon-width li + width: 1rem + height: 1rem + +// DEFINITION LIST +.deflist + display: grid + grid-template-columns: 100% + +.deflist__dt, +.deflist__dd + padding: 2px 0 + +.deflist__dt + font-weight: 600 + +.deflist__dd + font-size: 18px + margin-bottom: 10px + + > p, > .div-p + margin-top: 0 + +@media (min-width: 768px) + .deflist + grid-template-columns: fit-content(25vw) 1fr + + .deflist + margin-top: -10px + margin-right: -15px + + .deflist__dd + padding-right: 15px + + .deflist__dt, + .deflist__dd + padding: 12px 0 + margin: 0 + font-size: 16px + + &:last-of-type + border: 0 + + .deflist__dt + padding-right: 50px + + .deflist__dd + padding-right: 15px + +section + padding-bottom: 30px + border-bottom: 1px solid #d3d3d3 + + + section + margin-top: 20px + + &:last-child + border-bottom: none + padding-bottom: 0px + +.pseudonym + font-family: monospace + +.headline-one + margin-bottom: 10px + +// Notification style used as requested by @hamanf in #298, but class was not globally available. Copied from dead-code. For @hamanf to clean up: + +.notification + position: relative + border-radius: 3px + padding: 10px 20px 20px + margin: 40px auto + box-shadow: 0 0 4px 2px inset currentColor + padding-left: 100px + min-height: 100px + max-width: 700px + font-weight: 600 + vertical-align: center + display: grid + grid-column: 2 + + &::before + @extend .fas + + position: absolute + display: flex + left: 0 + top: 0 + height: 100% + width: 100px + font-size: 50px + align-items: center + justify-content: center + + .notification__content + grid-column: 1 + align-self: center + color: var(--color-font) + + &.notification--broad + max-width: none + +.form-section-notification + display: grid + grid-template-columns: 1fr 3fr + grid-gap: 5px + + fieldset + display: grid + grid-template-columns: 1fr 3fr + grid-gap: 5px + grid-column: 1/3 + + .notification + margin: 0 + + + .form-group, + .form-section-legend, + .form-section-notification + margin-top: 11px + + + .form-section-title + margin-top: 40px + +@media (max-width: 768px) + .form-section-notification + grid-template-columns: 1fr + margin-top: 17px + + fieldset + grid-template-columns: 1fr + grid-column: 1/2 + + .notification + grid-column: 1 + max-width: none + padding-left: 40px + + &::before + height: auto + width: 45px + font-size: 40px + top: 15px + +.notification-error + color: var(--color-error) + +.notification-warning + color: var(--color-warning) + +.notification-info + color: var(--color-lightblack) + +.notification-success + color: var(--color-warning) + +// "Heated" element. + Set custom property "--hotness" to a value from 0 to 1 to turn + the element's background to a color on a gradient from green to red. + + TBD: + - move to a proper place + - think about font-weight... + + Example: +
Lorem ipsum + +.heated + --hotness: 0 + --red: calc(var(--hotness) * 200) + --green: calc(255 - calc(var(--hotness) * 255)) + --opacity: calc(calc(var(--red) / 600) + 0.1) + font-weight: var(--weight, 600) + background-color: rgba(var(--red), var(--green), 0, var(--opacity)) + +.uuid + font-family: monospace + +.form--inline + display: inline-block + +.ribbon + position: fixed + top: calc(40px + var(--header-height)) + transition: all 0.2s cubic-bezier(0.03, 0.43, 0.58, 1) + right: -63px + transform: rotate(45deg) + width: 250px + background: var(--color-error) + text-align: center + color: var(--color-lightwhite) + font-weight: 600 + font-size: 1.25rem + line-height: 2em + box-shadow: 0 0 3px rgba(0, 0, 0, 0.4) + z-index: 19 + pointer-events: none + +@media (max-width: 768px) + .ribbon + top: calc(20px + var(--header-height-collapsed)) + right: -83px + transform: rotate(45deg) scale(0.6) + +#admin-studyterms + select, option, input + min-width: 50px + +.allocation__label, .allocation__explanation + color: var(--color-fontsec) + font-style: italic + +.allocation__state + color: var(--color-font) + font-weight: 600 + font-style: normal + +.allocation__courses + margin: 20px 0 0 40px + +.allocation-course + display: grid + grid-template-columns: minmax(105px, 1fr) 9fr + grid-template-areas: 'name name ' '. registered ' 'prio-label prio ' 'instr-label instr ' 'form-label form ' + grid-gap: 5px 7px + margin: 12px 0 + padding: 0 10px 12px 7px + border-left: 1px solid var(--color-grey) + + // &:last-child { + padding: 12px 10px 0 10px; + } + + & + .allocation-course { + border-top: 1px solid var(--color-grey); + } + + &:nth-child(2n) + background-color: rgba(0, 0, 0, 0.015) + + .allocation-course__registered + grid-area: registered + + .allocation-course__priority + grid-area: prio + + .allocation-course__priority-label + grid-area: prio-label + justify-self: end + align-self: center + text-align: right + + .allocation-course__name + grid-area: name + align-self: center + font-size: 1.2rem + + .allocation-course__instructions + grid-area: instr + + .allocation-course__instructions-label + grid-area: instr-label + justify-self: end + text-align: right + + .allocation-course__application + grid-area: form + + .allocation-course__application-label + grid-area: form-label + justify-self: end + text-align: right + padding-top: 6px + +@media (max-width: 426px) + .allocation-course + grid-template-columns: 1fr + grid-template-areas: 'name ' 'registered ' 'prio-label ' 'prio ' 'instr-label' 'instr ' 'form-label ' 'form ' + + .allocation-course__application-label + padding-top: 0 + +.comment + white-space: pre-wrap + font-family: monospace + +th + vertical-align: top + text-align: left + +th, td + padding-bottom: 7px + +.course-news + max-height: 50vh + overflow: auto + + .course-news-item + padding: 12px 0 + border-bottom: 1px solid #d3d3d3 + + &:last-child + padding-bottom: 0 + border-bottom: none + + &:first-child + padding-top: 0 + + .course-news-item__last-edit + color: var(--color-fontsec) + font-style: italic + + .course-news-item__title .modal__trigger-label + font-style: normal + + .course-news-item__summary .modal__trigger-label + font-weight: normal + font-style: normal + color: var(--color-font) + +.bound_explanation + color: var(--color-fontsec) + font-style: italic + +.action + max-width: 800px + padding: 3px 0 + + &:not(:last-child) + margin-bottom: 7px + + &:not(:first-child) + margin-top: 7px + +.action__options + max-height: 450px + overflow-y: auto + +.action__option + display: flex + + &:not(:last-child) + margin-bottom: 10px + +.action__label, +.action__option-label + margin-left: 15px + vertical-align: top + +.action__fieldset + margin: 7px 0 5px 9px + padding: 5px 0 10px + border-left: 1px solid #bcbcbc + padding-left: 16px + position: relative + +.action__toggle-all + display: flex + border-bottom: 1px solid #bcbcbc + padding-bottom: 8px + margin-bottom: 8px + +.action__checked-counter + position: absolute + right: 5px + top: 5px + +.occurrence--not-registered, .no-bonus + text-decoration: line-through + +.result + font-size: 3rem + margin: 30px 30px 0 !important + +.glossary + dt, .dt + font-weight: 600 + + &.sec + font-style: italic + font-size: 0.9rem + font-weight: 600 + color: var(--color-fontsec) + + dd, .dd + margin-left: 12px + + dd + dt, .dd + dt, dd + .dt, .dd + .dt + margin-top: 17px + +// SORTABLE TABLE-HEADERS +.table__th.sortable + position: relative + padding-right: 24px + cursor: pointer + +.table__th.sortable::after, +.table__th.sortable::before + content: '' + position: absolute + top: 50% + right: 4px + width: 0 + height: 0 + border-left: 8px solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid rgba(255, 255, 255, 0.4) + +.table__th.sortable::before + // magic numbers to move arrow back in the right position after flipping it. + this allows us to use the same border for the up and the down arrow + transform: translateY(150%) scale(1, -1) + transform-origin: top + +.table__th.sortable::after + transform: translateY(-150%) + +.table__th.sortable:hover::before, +.table__th.sortable:hover::after + border-bottom-color: rgba(255, 255, 255, 0.7) + +.table__th.sorted-asc::before, +.table__th.sorted-desc::after + border-bottom-color: white !important + +\:root + --color-grey-light: #efefef + --color-grey-lighter: #f5f5f5 + --color-fontsec: #5b5861 + --course-bg-color: var(--color-grey-lighter) + --course-expanded-bg-color: var(--color-grey-light) + +.scrolltable + box-shadow: none !important + +.course-header::after, +.course-header::before + content: '' + position: absolute + right: 10px + top: 20px + width: 0 + height: 0 + border-left: 8px solid transparent + border-right: 8px solid transparent + border-bottom: 8px solid rgba(255, 255, 255, 0.4) + +.course-header::before + // magic numbers to move arrow back in the right position after flipping it. + this allows us to use the same border for the up and the down arrow + transform: translateY(150%) scale(1, -1) + transform-origin: top + +.course-header::after + transform: translateY(-150%) + +.course-header:hover::before, +.course-header:hover::after + border-bottom-color: rgba(255, 255, 255, 0.7) + +.sorted-asc::before, +.sorted-desc::after + border-bottom-color: white !important + +.csv-export + margin-bottom: 13px + +.csv-import + margin-bottom: 13px + +.table-filter + margin-bottom: 13px + +.table-filter__toggle + padding: 3px 7px + +// TABLE HEADER +.table-header + display: flex + flex-flow: row-reverse + justify-content: space-between + margin-bottom: 15px + +// TABLE FOOTER +.table-footer + display: flex + flex-flow: row-reverse + justify-content: space-between + margin-top: 15px + +// PAGINATION +.pagination + margin-top: 20px + overflow: auto + + .pages + text-align: center + white-space: nowrap + margin: 0 + + .page-link + margin-top: 7px + display: inline-block + background-color: var(--color-grey-medium) + + + .page-link + margin-left: 7px + + a + color: var(--color-lightwhite) + padding: 7px 13px + display: inline-block + text-decoration: none + + &:not(.current):hover + background-color: var(--color-primary) + + a + color: var(--color-lightwhite) + + &.current + pointer-events: none + background-color: var(--color-dark) + + a + pointer-events: none + +#changelog + font-size: 14px + white-space: pre-wrap + font-family: monospace + +#gitrev + font-size: 12px + white-space: pre-wrap + font-family: monospace + +.breadcrumbs__container + position: relative + color: var(--color-lightwhite) + padding: 4px 13px + background-color: var(--color-dark) + line-height: 30px + +@media (min-width: 426px) + .breadcrumbs__container + padding: 7px 20px + +@media (min-width: 769px) + .breadcrumbs__container + padding: 7px 40px + +.breadcrumbs__link + color: var(--color-lightwhite) + + &:hover + color: var(--color-white) + +.breadcrumbs__item + padding-right: 14px + position: relative + line-height: 28px + opacity: 0.8 + z-index: 1 + margin-right: 10px + + &:hover + opacity: 1 + + &::after + content: '' + position: absolute + top: 11px + right: 0 + width: 7px + height: 7px + border-style: solid + border-width: 0 + border-bottom-width: 1px + border-right-width: 1px + border-color: var(--color-white) + transform: rotate(-45deg) + z-index: 10 + +.breadcrumbs__last-item + line-height: 28px + vertical-align: bottom + font-weight: 600 + +.recipient-category + max-width: 400px + padding: 3px 0 + + &:not(:last-child) + margin-bottom: 7px + + &:not(:first-child) + margin-top: 7px + +.recipient-category__options + max-height: 150px + overflow-y: auto + +.recipient-category__option + display: flex + + &:not(:last-child) + margin-bottom: 10px + +.recipient-category__label, +.recipient-category__option-label + margin-left: 15px + vertical-align: top + +.recipient-category__fieldset + margin: 7px 0 5px 9px + padding: 5px 0 10px + border-left: 1px solid #bcbcbc + padding-left: 16px + position: relative + +.recipient-category__option-add + display: flex + + .btn-mass-input-add + margin-left: 10px + padding: 10px 0 + +.recipient-category__options + .recipient-category__option-add + margin-top: 10px + +.recipient-category__toggle-all + display: flex + border-bottom: 1px solid #bcbcbc + padding-bottom: 8px + margin-bottom: 8px + +.recipient-category__checked-counter + position: absolute + right: 5px + top: 5px + +.table__td--csv, .table__th--csv + font-family: monospace + +.confirmationText + white-space: pre-wrap + font-size: 14px + font-family: monospace + +.func-field__wrapper + max-height: 75vh + overflow: auto + +.footer + text-align: center + padding: 20px + position: relative + margin: 40px 0 + + &::before + content: '' + position: absolute + top: 0 + left: 10% + width: 80% + height: 2px + background-color: var(--color-grey-light) + +.footer-links * + margin-right: 0.5em + + &:last + margin-right: 0 + +.table--grading-key + th, td + padding: 3px + +.btn.btn-mass-input-delete, +.btn.btn-mass-input-add + background-color: #999 + min-width: 50px + padding: 5px 15px + font-weight: 700 + font-size: 1.3rem + +.file-input__unpack + font-size: .9rem + display: flex + align-items: center + margin-top: 10px + + .checkbox + display: inline-block + margin-left: 7px + +.pagenav + display: flex + align-items: flex-start + padding-bottom: 15px + margin-bottom: 20px + border-bottom: 1px solid #eee + +.pagenav__list-item + flex: 1 + position: relative + display: inline-flex + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.6) + margin: 10px 10px 0 0 + +.pagenav__link-wrapper + flex: 1 + padding: 10px 10px 12px + text-decoration: none !important + + &:hover + background-color: var(--color-grey-light) + +@media (max-width: 1024px) + .pagenav + flex-direction: column + +@media (min-width: 1025px) + .pagenav-secondary + position: relative + overflow: visible + padding-top: 10px + + &::after + content: '\2026' + display: inline-block + padding: 10px 10px 12px + width: 40px + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.6) + box-sizing: border-box + text-align: center + transition: box-shadow 0.2s ease + + &:hover + &::after + box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8) + + .pagenav-secondary__list + display: block + + .pagenav-secondary__list + position: absolute + display: none + right: 0 + top: 50px + width: 250px + background-color: white + box-shadow: 0 0 6px 3px var(--color-grey-light) + z-index: 18 + + .pagenav__list-item--secondary + display: flex + box-shadow: none + margin: 0 + + &:hover + background-color: var(--color-grey-light) diff --git a/frontend/src/app.scss b/frontend/src/app.scss deleted file mode 100644 index fd0d6f93c..000000000 --- a/frontend/src/app.scss +++ /dev/null @@ -1,1517 +0,0 @@ -@use "common" as *; - -:root { - /* THEME INDEPENDENT COLORS */ - --color-error: #8c0707; - --color-error-dark: #500303; - --color-warning: #fc9900; - --color-warning-dark: #c27400; - --color-success: #23d160; - --color-success-dark: #1ca64c; - --color-info: #c4c4c4; - --color-info-dark: #919191; - --color-lightblack: #1A2A36; - --color-lightwhite: #fcfffa; - --color-grey: #B1B5C0; - --color-grey-light: #efefef; - --color-grey-lighter: #f5f5f5; - --color-grey-medium: #9A989E; - --color-font: #34303a; - --color-fontsec: #5b5861; - - - /* FONTS */ - --font-base: "Source Sans Pro", "Trebuchet MS", sans-serif; - --font-logo: "Roboto", var(--font-base); - - /* DIMENSIONS */ - --header-height: 100px; - --header-height-collapsed: 60px; - - --asidenav-width-xl: 250px; - --asidenav-width-lg: 20%; - --asidenav-width-md: 60px; -} - -* { - box-sizing: border-box; - padding: 0; - margin: 0; - -webkit-font-smoothing: antialiased; -} - -body { - background-color: white; - color: var(--color-font); - font-family: var(--font-base); - font-weight: 400; - font-size: 16px; - overflow-y: scroll; -} - -/* THEMES */ - -body { - /* DEFAULT LMU THEME */ - --color-lmu-green: #0a9342; - --color-primary: var(--color-lmu-green); - --color-light: #31cc72; - --color-lighter: #35db7a; - --color-dark: #087536; - --color-darker: #075728; - --color-link: var(--color-font); - --color-link-hover: var(--color-font); - --color-lmu-box-border: var(--color-lightwhite); - - &.theme--lavender { - --color-primary: #584c9c; - --color-light: #5969b5; - --color-lighter: #5f7dc2; - --color-dark: #4c4279; - --color-darker: #3c2765; - --color-link: var(--color-dark); - --color-link-hover: var(--color-darker); - } - - &.theme--neutral-blue { - --color-primary: #3E606F; - --color-light: rgb(189, 201, 219); - --color-lighter: rgb(145, 159, 170); - --color-dark: rgb(42, 74, 88); - --color-darker: #193441; - } - - &.theme--aberdeen-reds { - --color-primary: #820333; - --color-light: #C9283E; - --color-lighter: #F0433A; - --color-dark: #540032; - --color-darker: #2E112D; - } - - &.theme--moss-green { - --color-primary: #5C996B; - --color-light: #7ACC8F; - --color-lighter: #99FFB2; - --color-dark: #3D6647; - --color-darker: #1F3324; - } - - &.theme--sky-love { - --color-primary: #87ABE5; - --color-light: #A0C6F2; - --color-lighter: #BAE2FF; - --color-dark: #7A95DE; - --color-darker: #6B7BC9; - --color-link: var(--color-lightblack); - --color-link-hover: var(--color-darker); - } -} - -/* END THEMES */ - -.emph { - font-style: italic; -} - -a, -a:visited { - text-decoration: none; - font-weight: 600; - transition: color .2s ease, background-color .2s ease; -} - -a { - color: var(--color-link); -} - -a:hover { - color: var(--color-link-hover); -} - - -ul { - margin-left: 20px; -} - -h1, h2, h3, .div-h3 , h4, h5 { - font-weight: 600; -} -h1 { - font-size: 32px; - margin-bottom: 10px; -} -h2 { - font-size: 24px; - margin: 10px 0; - - &:first-child { - margin-top: 0; - } -} -h3, .div-h3 { - font-size: 20px; - margin: 10px 0; - - &:first-child { - margin-top: 0; - } -} -h4 { - font-size: 16px; - margin: 0; -} - -@media (max-width: 768px) { - - h1 { - font-size: 24px; - } - - h2 { - font-size: 20px; - } - - h3, .div-h3 { - font-size: 16px; - } -} - -/* LAYOUT */ -.main { - position: relative; -} - -.main__content { - position: relative; - background-color: white; - transition: padding-left .2s ease-out; - margin-top: var(--header-height-collapsed); - margin-left: 0; - - > .container { - margin: 20px 0; - } -} - -.main__content, .modal__content { - a { - text-decoration: underline; - } - - p, form, .div-p { - margin: 0.5rem 0; - - &:last-child { - margin: 0.5rem 0 0; - - &:first-child { - margin: 0; - } - } - } -} - -@media (min-width: 426px) { - .main__content { - margin-left: var(--asidenav-width-md, 50px); - } -} - -@media (min-width: 769px) { - .main__content { - margin-left: var(--asidenav-width-lg, 20%); - margin-top: var(--header-height); - } -} - -@media (min-width: 1200px) { - .main__content { - margin-left: var(--asidenav-width-xl, 250px); - } -} - -.main__content-body { - padding: 13px; -} - -@media (min-width: 426px) { - .main__content-body { - padding: 13px 20px; - } -} - -@media (min-width: 769px) { - .main__content-body { - padding: 20px 40px; - } -} - -.pseudo-focus { - outline: 5px auto var(--color-light); - outline: 5px auto -webkit-focus-ring-color; -} - -/* CONTAINER */ -.container { - - + .container { - margin-top: 20px; - } -} - -/* GENERAL BUTTON STYLES */ -input[type="submit"], -input[type="button"], -button, -.btn { - outline: 0; - border: 0; - box-shadow: 0; - background-color: var(--color-dark); - color: white; - padding: 10px 17px; - min-width: 100px; - transition: all .1s; - font-size: 16px; - cursor: pointer; - display: inline-block; - text-decoration: none; - - a:hover { - color: white; - } - - &:focus { - border-color: #3273dc; - box-shadow: 0 0 0 0.25rem rgba(50,115,220,.25); - outline: 0; - } -} - -input[type="submit"][disabled], -input[type="button"][disabled], -button[disabled], -.btn[disabled] { - opacity: 0.3; - background-color: var(--color-grey); - cursor: default; -} - -input[type="submit"]:not([disabled]):hover, -input[type="button"]:not([disabled]):hover, -button:not([disabled]):hover, -.btn:not([disabled]):hover { - background-color: var(--color-light); - color: white; -} - -.btn-primary { - background-color: var(--color-primary); -} - -.btn-info { - background-color: var(--color-info) -} - -.btn--small { - padding: 4px 7px; - background-color: var(--color-darker); -} - -input[type="submit"].btn-info:hover, -input[type="button"].btn-info:hover, -.btn-info:hover { - background-color: var(--color-grey) -} - -/* GENERAL TABLE STYLES */ -.table { - margin: 21px 0; - width: 100%; -} - -.table:first-child { - margin-top: 0; -} - -.table:last-child { - margin-bottom: 0; -} - -.table--striped { - - .table__row:not(.no-stripe):not(.table__row--sum):nth-child(even) { - background-color: rgba(0, 0, 0, 0.03); - } -} - -.table--hover { - - .table__row:not(.no-hover):not(.table__row--sum):not(.table__row--head):not(.table__row--foot):hover { - background-color: rgba(0, 0, 0, 0.07); - } -} - -.table__row--sum td.table__td::before { - content: 'Σ'; - font-weight: bold; - margin-right: .25em; -} - -/* SCROLLTABLE */ -.scrolltable { - overflow: auto; -} - -.scrolltable--bordered { - box-shadow: 0 0 1px 1px var(--color-grey-light); -} - -@media (max-width: 425px) { - - .scrolltable { - margin-left: -10px; - padding-left: 10px; - margin-right: -10px; - padding-right: 10px; - } -} - -/* TABLE DESIGN */ -.table__td, .table__th { - padding-top: 14px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 10px; - max-width: 300px; -} - -.table__td { - font-size: 16px; - color: var(--color-font); - line-height: 1.4; - vertical-align: top; -} - -.table__td--automatic { - font-style: oblique; - color: var(--color-fontsec); -} - -.table__td--overriden { - font-weight: bold; -} - -.table__th { - background-color: var(--color-dark); - position: relative; - font-size: 16px; - color: white; - line-height: 1.4; - padding-top: 10px; - padding-bottom: 10px; - font-weight: bold; - text-align: left; - - a { - color: white; - text-decoration: none; - font-weight: bold; - - &:hover { - color: inherit; - } - - &::before { - @extend .fas; - content: fa-content($fa-var-link); - margin-right: 0.25em; - } - } -} - -@media (max-width: 1200px) { - - .table th { - padding: 4px 6px; - } -} - -.table__td-content { - max-height: 200px; - overflow-y: auto; -} - -.table__th-link { - font-weight: bold; - - &::before { - display: none; - } -} - -.table--vertical { - - th { - background-color: transparent; - color: var(--color-font); - width: 170px; - text-align: right; - padding-right: 15px; - font-weight: 400; - } - - td { - font-weight: 600; - color: var(--color-font); - } -} - -.table--condensed { - margin: 0; - - .table__th, - .table__td { - padding: 4px 8px; - } -} - -/* UNORDERED LIST */ -.list-ul__item { - // padding: 4px 0; - line-height: 25px; -} - -/* LIST MODIFIERS */ -.list--iconless { - list-style-type: none; - margin-left: 0; -} - -.list--inline { - ul { - display: inline-block; - margin-left: 0; - - li { - display: inline-block; - } - } -} - -ul.list--inline { - - display: inline-block; - margin-left: 0; - - li { - display: inline-block; - } -} - -.list--comma-separated li { - &::after { - content: ', '; - white-space: pre; - } - - &:last-of-type::after { - content: none; - } -} - -.list--space-separated li { - &::after { - content: ' '; - white-space: pre; - } - - &:last-of-type::after { - content: none; - } -} - -.list--icon-width li { - width: 1rem; - height: 1rem; -} - -/* DEFINITION LIST */ -.deflist { - display: grid; - grid-template-columns: 100%; -} -.deflist__dt, -.deflist__dd { - padding: 2px 0; -} - -.deflist__dt { - font-weight: 600; -} - -.deflist__dd { - font-size: 18px; - margin-bottom: 10px; - - > p, > .div-p { - margin-top: 0; - } -} - -@media (min-width: 768px) { - - .deflist { - grid-template-columns: fit-content(25vw) 1fr; - - .deflist { - margin-top: -10px; - margin-right: -15px; - - .deflist__dd { - padding-right: 15px; - } - } - } - - .deflist__dt, - .deflist__dd { - padding: 12px 0; - margin: 0; - font-size: 16px; - - &:last-of-type { - border: 0; - } - } - - .deflist__dt { - padding-right: 50px; - } - - .deflist__dd { - padding-right: 15px; - } -} - -section { - padding-bottom: 30px; - border-bottom: 1px solid #d3d3d3; - - + section { - margin-top: 20px; - } - - &:last-child { - border-bottom: none; - padding-bottom: 0px; - } -} - -.pseudonym { - font-family: monospace; -} - -.headline-one { - margin-bottom: 10px; -} - -/* Notification style used as requested by @hamanf in #298, but class was not globally available. Copied from dead-code. For @hamanf to clean up: */ - -.notification { - position: relative; - border-radius: 3px; - padding: 10px 20px 20px; - margin: 40px auto; - box-shadow: 0 0 4px 2px inset currentColor; - padding-left: 100px; - min-height: 100px; - max-width: 700px; - font-weight: 600; - vertical-align: center; - display: grid; - grid-column: 2; - - &::before { - @extend .fas; - position: absolute; - display: flex; - left: 0; - top: 0; - height: 100%; - width: 100px; - font-size: 50px; - align-items: center; - justify-content: center; - } - - .notification__content { - grid-column: 1; - align-self: center; - - color: var(--color-font); - } - - &.notification--broad { - max-width: none; - } -} - -.form-section-notification { - display: grid; - grid-template-columns: 1fr 3fr; - grid-gap: 5px; - - fieldset { - display: grid; - grid-template-columns: 1fr 3fr; - grid-gap: 5px; - grid-column: 1/3; - } - - .notification { - margin: 0; - } - - + .form-group, + .form-section-legend, + .form-section-notification { - margin-top: 11px; - } - - + .form-section-title { - margin-top: 40px; - } -} - -@media (max-width: 768px) { - .form-section-notification { - grid-template-columns: 1fr; - margin-top: 17px; - - fieldset { - grid-template-columns: 1fr; - grid-column: 1/2; - } - } - - .notification { - grid-column: 1; - - max-width: none; - - padding-left: 40px; - - &::before { - height: auto; - width: 45px; - font-size: 40px; - top: 15px; - } - } -} - -.notification-error { - color: var(--color-error) ; -} - -.notification-warning { - color: var(--color-warning) ; -} - -.notification-info { - color: var(--color-lightblack) ; -} - -.notification-success { - color: var(--color-warning) ; -} - - - - -/* - "Heated" element. - Set custom property "--hotness" to a value from 0 to 1 to turn - the element's background to a color on a gradient from green to red. - - TBD: - - move to a proper place - - think about font-weight... - - Example: -
Lorem ipsum -*/ - -.heated { - --hotness: 0; - --red: calc(var(--hotness) * 200); - --green: calc(255 - calc(var(--hotness) * 255)); - --opacity: calc(calc(var(--red) / 600) + 0.1); - - font-weight: var(--weight, 600); - background-color: rgba(var(--red), var(--green), 0, var(--opacity)); -} - - -.uuid { - font-family: monospace; -} - - -.form--inline { - display: inline-block; -} - - -.ribbon { - position: fixed; - top: calc(40px + var(--header-height)); - transition: all .2s cubic-bezier(0.03, 0.43, 0.58, 1); - right: -63px; - transform: rotate(45deg); - width: 250px; - background: var(--color-error); - text-align: center; - color: var(--color-lightwhite); - font-weight: 600; - font-size: 1.25rem; - line-height: 2em; - box-shadow: 0 0 3px rgba(0, 0, 0, 0.4); - z-index: 19; - pointer-events: none; -} - -@media (max-width: 768px) { - .ribbon { - top: calc(20px + var(--header-height-collapsed)); - right: -83px; - transform: rotate(45deg) scale(0.6); - } -} - -#admin-studyterms { - select, option, input { - min-width: 50px; - } -} - -.allocation__label, .allocation__explanation { - color: var(--color-fontsec); - font-style: italic; -} - -.allocation__state { - color: var(--color-font); - font-weight: 600; - font-style: normal; -} - -.allocation__courses { - margin: 20px 0 0 40px; -} - -.allocation-course { - display: grid; - grid-template-columns: minmax(105px, 1fr) 9fr; - grid-template-areas: - 'name name ' - '. registered ' - 'prio-label prio ' - 'instr-label instr ' - 'form-label form '; - - grid-gap: 5px 7px; - margin: 12px 0; - padding: 0 10px 12px 7px; - - border-left: 1px solid var(--color-grey); - - /* &:last-child { - * padding: 12px 10px 0 10px; - * } - * - * & + .allocation-course { - * border-top: 1px solid var(--color-grey); - * } - */ - - &:nth-child(2n) { - background-color: rgba(0, 0, 0, 0.015); - } - - .allocation-course__registered { - grid-area: registered; - } - - .allocation-course__priority { - grid-area: prio; - } - .allocation-course__priority-label { - grid-area: prio-label; - justify-self: end; - align-self: center; - text-align: right; - } - - .allocation-course__name { - grid-area: name; - - align-self: center; - - font-size: 1.2rem; - } - - .allocation-course__instructions { - grid-area: instr; - } - .allocation-course__instructions-label { - grid-area: instr-label; - justify-self: end; - text-align: right; - } - - .allocation-course__application { - grid-area: form; - } - .allocation-course__application-label { - grid-area: form-label; - justify-self: end; - text-align: right; - padding-top: 6px; - } -} - -@media (max-width: 426px) { - .allocation-course { - grid-template-columns: 1fr; - grid-template-areas: - 'name ' - 'registered ' - 'prio-label ' - 'prio ' - 'instr-label' - 'instr ' - 'form-label ' - 'form '; - } - - .allocation-course__application-label { - padding-top: 0; - } -} - - -.comment { - white-space: pre-wrap; - font-family: monospace; -} - -th { - vertical-align: top; - text-align: left; -} - -th, td { - padding-bottom: 7px; -} - -.course-news { - max-height: 50vh; - overflow: auto; - - .course-news-item { - padding: 12px 0; - border-bottom: 1px solid #d3d3d3; - - &:last-child { - padding-bottom: 0; - border-bottom: none; - } - - &:first-child { - padding-top: 0; - } - - .course-news-item__last-edit { - color: var(--color-fontsec); - font-style: italic; - } - - .course-news-item__title .modal__trigger-label { - font-style: normal; - } - - .course-news-item__summary .modal__trigger-label { - font-weight: normal; - font-style: normal; - color: var(--color-font); - } - } -} - - -.bound_explanation { - color: var(--color-fontsec); - font-style: italic; -} - - -.action { - max-width: 800px; - padding: 3px 0; - - &:not(:last-child) { - margin-bottom: 7px; - } - - &:not(:first-child) { - margin-top: 7px; - } -} - -.action__options { - max-height: 450px; - overflow-y: auto; -} - -.action__option { - display: flex; - - &:not(:last-child) { - margin-bottom: 10px; - } -} - -.action__label, -.action__option-label { - margin-left: 15px; - vertical-align: top; -} - -.action__fieldset { - margin: 7px 0 5px 9px; - padding: 5px 0 10px; - border-left: 1px solid #bcbcbc; - padding-left: 16px; - position: relative; -} - -.action__toggle-all { - display: flex; - border-bottom: 1px solid #bcbcbc; - padding-bottom: 8px; - margin-bottom: 8px; -} - -.action__checked-counter { - position: absolute; - right: 5px; - top: 5px; -} - - -.occurrence--not-registered, .no-bonus { - text-decoration: line-through; -} - -.result { - font-size: 3rem; - margin: 30px 30px 0 !important; -} - - -.glossary { - dt, .dt { - font-weight: 600; - } - - &.sec { - font-style: italic; - font-size: 0.9rem; - font-weight: 600; - color: var(--color-fontsec); - } - dd, .dd { - margin-left: 12px; - } - - dd + dt, .dd + dt, dd + .dt, .dd + .dt { - margin-top: 17px; - } -} - - -/* SORTABLE TABLE-HEADERS*/ -.table__th.sortable { - position: relative; - padding-right: 24px; - cursor: pointer; -} - -.table__th.sortable::after, -.table__th.sortable::before { - content: ''; - position: absolute; - top: 50%; - right: 4px; - width: 0; - height: 0; - border-left: 8px solid transparent; - border-right: 8px solid transparent; - border-bottom: 8px solid rgba(255, 255, 255, 0.4); -} - -.table__th.sortable::before { - /* magic numbers to move arrow back in the right position after flipping it. - this allows us to use the same border for the up and the down arrow */ - transform: translateY(150%) scale(1, -1); - transform-origin: top; -} - -.table__th.sortable::after { - transform: translateY(-150%); -} - -.table__th.sortable:hover::before, -.table__th.sortable:hover::after { - border-bottom-color: rgba(255, 255, 255, 0.7); -} - -.table__th.sorted-asc::before, -.table__th.sorted-desc::after { - border-bottom-color: white !important; -} - - -:root { - --color-grey-light: #efefef; - --color-grey-lighter: #f5f5f5; - --color-fontsec: #5b5861; - --course-bg-color: var(--color-grey-lighter); - --course-expanded-bg-color: var(--color-grey-light); -} - -.scrolltable { - box-shadow: none!important; -} - -.course-header::after, -.course-header::before { - content: ''; - position: absolute; - right: 10px; - top: 20px; - width: 0; - height: 0; - border-left: 8px solid transparent; - border-right: 8px solid transparent; - border-bottom: 8px solid rgba(255, 255, 255, 0.4); -} - -.course-header::before { - /* magic numbers to move arrow back in the right position after flipping it. - this allows us to use the same border for the up and the down arrow */ - transform: translateY(150%) scale(1, -1); - transform-origin: top; -} - -.course-header::after { - transform: translateY(-150%); -} - -.course-header:hover::before, -.course-header:hover::after { - border-bottom-color: rgba(255, 255, 255, 0.7); -} - -.sorted-asc::before, -.sorted-desc::after { - border-bottom-color: white !important; -} - -.csv-export { - margin-bottom: 13px; - -} - -.csv-import { - margin-bottom: 13px; -} - - -.table-filter { - margin-bottom: 13px; -} - -.table-filter__toggle { - padding: 3px 7px; -} - - -/* TABLE HEADER */ -.table-header { - display: flex; - flex-flow: row-reverse; - justify-content: space-between; - margin-bottom: 15px; -} - -/* TABLE FOOTER */ -.table-footer { - display: flex; - flex-flow: row-reverse; - justify-content: space-between; - margin-top: 15px; -} - -/* PAGINATION */ -.pagination { - margin-top: 20px; - overflow: auto; - - .pages { - text-align: center; - white-space: nowrap; - margin: 0; - - .page-link { - margin-top: 7px; - display: inline-block; - background-color: var(--color-grey-medium); - - + .page-link { - margin-left: 7px; - } - - a { - color: var(--color-lightwhite); - padding: 7px 13px; - display: inline-block; - text-decoration: none; - } - - &:not(.current):hover { - background-color: var(--color-primary); - - a { - color: var(--color-lightwhite); - } - } - - &.current { - pointer-events: none; - background-color: var(--color-dark); - - a { - pointer-events: none; - } - } - } - } -} - - -#changelog { - font-size: 14px; - white-space: pre-wrap; - font-family: monospace; -} - -#gitrev { - font-size: 12px; - white-space: pre-wrap; - font-family: monospace; -} - - -.breadcrumbs__container { - position: relative; - color: var(--color-lightwhite); - padding: 4px 13px; - background-color: var(--color-dark); - line-height: 30px; -} - -@media (min-width: 426px) { - .breadcrumbs__container { - padding: 7px 20px; - } -} - -@media (min-width: 769px) { - .breadcrumbs__container { - padding: 7px 40px; - } -} - -.breadcrumbs__link { - color: var(--color-lightwhite); - - &:hover { - color: var(--color-white); - } -} - -.breadcrumbs__item { - padding-right: 14px; - position: relative; - line-height: 28px; - opacity: 0.8; - z-index: 1; - margin-right: 10px; - - &:hover { - opacity: 1; - } - - &::after { - content: ''; - position: absolute; - top: 11px; - right: 0; - width: 7px; - height: 7px; - border-style: solid; - border-width: 0; - border-bottom-width: 1px; - border-right-width: 1px; - border-color: var(--color-white); - transform: rotate(-45deg); - z-index: 10; - } -} - -.breadcrumbs__last-item { - line-height: 28px; - vertical-align: bottom; - font-weight: 600; -} - - -.recipient-category { - max-width: 400px; - padding: 3px 0; - - &:not(:last-child) { - margin-bottom: 7px; - } - - &:not(:first-child) { - margin-top: 7px; - } -} - -.recipient-category__options { - max-height: 150px; - overflow-y: auto; -} - -.recipient-category__option { - display: flex; - - &:not(:last-child) { - margin-bottom: 10px; - } -} - -.recipient-category__label, -.recipient-category__option-label { - margin-left: 15px; - vertical-align: top; -} - -.recipient-category__fieldset { - margin: 7px 0 5px 9px; - padding: 5px 0 10px; - border-left: 1px solid #bcbcbc; - padding-left: 16px; - position: relative; -} - -.recipient-category__option-add { - display: flex; - - .btn-mass-input-add { - margin-left: 10px; - padding: 10px 0; - } -} - -.recipient-category__options + .recipient-category__option-add { - margin-top: 10px; -} - -.recipient-category__toggle-all { - display: flex; - border-bottom: 1px solid #bcbcbc; - padding-bottom: 8px; - margin-bottom: 8px; -} - -.recipient-category__checked-counter { - position: absolute; - right: 5px; - top: 5px; -} - - -.table__td--csv, .table__th--csv { - font-family: monospace; -} - - -.confirmationText { - white-space: pre-wrap; - font-size: 14px; - font-family: monospace; -} - - -.func-field__wrapper { - max-height: 75vh; - overflow: auto; -} - - -.footer { - text-align: center; - padding: 20px; - position: relative; - margin: 40px 0; - - &::before { - content: ''; - position: absolute; - top: 0; - left: 10%; - width: 80%; - height: 2px; - background-color: var(--color-grey-light); - } -} - -.footer-links * { - margin-right: 0.5em; - - &:last { - margin-right: 0; - } -} - - -.table--grading-key { - th, td { - padding: 3px; - } -} - -.btn.btn-mass-input-delete, -.btn.btn-mass-input-add { - background-color: #999; - min-width: 50px; - padding: 5px 15px; - font-weight: 700; - font-size: 1.3rem; -} - - -.file-input__unpack { - font-size: .9rem; - display: flex; - align-items: center; - margin-top: 10px; - - .checkbox { - display: inline-block; - margin-left: 7px; - } -} - - -.pagenav { - display: flex; - align-items: flex-start; - padding-bottom: 15px; - margin-bottom: 20px; - border-bottom: 1px solid #eee; -} - -.pagenav__list-item { - flex: 1; - position: relative; - display: inline-flex; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.6); - margin: 10px 10px 0 0; -} - -.pagenav__link-wrapper { - flex: 1; - padding: 10px 10px 12px; - text-decoration: none !important; - - &:hover { - background-color: var(--color-grey-light); - } -} - -@media (max-width: 1024px) { - - .pagenav { - flex-direction: column; - } -} - -@media (min-width: 1025px) { - .pagenav-secondary { - position: relative; - overflow: visible; - padding-top: 10px; - - &::after { - content: '\2026'; - display: inline-block; - padding: 10px 10px 12px; - width: 40px; - box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.6); - box-sizing: border-box; - text-align: center; - transition: box-shadow 0.2s ease; - } - - &:hover { - &::after { - box-shadow: 0 0 4px 0 rgba(0, 0, 0, 0.8); - } - - .pagenav-secondary__list { - display: block; - } - } - } - - .pagenav-secondary__list { - position: absolute; - display: none; - right: 0; - top: 50px; - width: 250px; - background-color: white; - box-shadow: 0 0 6px 3px var(--color-grey-light); - z-index: 18; - } - - .pagenav__list-item--secondary { - display: flex; - box-shadow: none; - margin: 0; - - &:hover { - background-color: var(--color-grey-light); - } - } -} - - -##{theId} { - list-style-type: none; -} diff --git a/frontend/src/utils/alerts/alerts.js b/frontend/src/utils/alerts/alerts.js index 3c4eba683..6c4a41a40 100644 --- a/frontend/src/utils/alerts/alerts.js +++ b/frontend/src/utils/alerts/alerts.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './alerts.scss'; +import './alerts.sass'; const ALERTS_INITIALIZED_CLASS = 'alerts--initialized'; const ALERTS_ELEVATED_CLASS = 'alerts--elevated'; diff --git a/frontend/src/utils/alerts/alerts.sass b/frontend/src/utils/alerts/alerts.sass new file mode 100644 index 000000000..340b85f01 --- /dev/null +++ b/frontend/src/utils/alerts/alerts.sass @@ -0,0 +1,186 @@ +@use "../../common" as * + +.alerts + position: fixed + bottom: 0 + right: 5% + z-index: 20 + text-align: right + display: flex + flex-direction: column + +.alerts__toggler + width: 40px + height: 40px + position: absolute + top: 400px + left: 50% + transform: translateX(-50%) + cursor: pointer + + &::before + @extend .fas + + content: fa-content($fa-var-chevron-up) + position: absolute + left: 50% + top: 0 + height: 30px + display: flex + align-items: center + justify-content: center + width: 30px + color: var(--color-grey) + font-size: 30px + transform: translateX(-50%) + + &:hover::before + color: var(--color-grey-medium) + +.alerts--elevated + z-index: 1000 + +.alerts__toggler--visible + top: -40px + opacity: 1 + transition: top 0.5s cubic-bezier(0.73, 1.25, 0.61, 1), opacity 0.5s cubic-bezier(0.73, 1.25, 0.61, 1) + +@media (max-width: 425px) + .alerts + left: 5% + +.alert + position: relative + display: block + background-color: var(--color-lightblack) + font-size: 1rem + color: var(--color-lightwhite) + z-index: 0 + padding: 0 50px + padding-right: 60px + animation: slide-in-alert .2s ease-out forwards + margin-bottom: 10px + transition: margin-bottom .2s ease-out + +.alert a + color: var(--color-lightwhite) + + &:hover + color: var(--color-grey) + +@keyframes slide-in-alert + from + transform: translateY(120%) + + to + transform: translateY(0) + +@keyframes slide-out-alert + from + transform: translateY(0) + max-height: 200px + + to + transform: translateY(250%) + opacity: 0 + max-height: 0 + overflow: hidden + +@media (min-width: 425px) + .alert + max-width: 400px + +.alert--invisible + animation: slide-out-alert .2s ease-out forwards + margin-bottom: 0 + +.alert__content + padding: 8px 0 + min-height: 40px + position: relative + display: flex + font-weight: 600 + align-items: center + text-align: left + +.alert__icon + text-align: right + position: absolute + left: 0px + top: 0 + width: 50px + height: 100% + z-index: 40 + + &::before + position: absolute + font-size: 24px + top: 50% + left: 50% + display: flex + align-items: center + justify-content: center + transform: translate(-50%, -50%) + border-radius: 50% + width: 30px + height: 30px + +.alert__closer + cursor: pointer + text-align: right + position: absolute + right: 0px + top: 0 + width: 60px + height: 100% + transition: all .3s ease + z-index: 40 + + &:hover + transform: scale(1.05, 1.05) + + &::before + box-shadow: 0 0 4px white + background-color: rgba(255, 255, 255, 0.1) + color: white + + &::before + @extend .fas + + content: fa-content($fa-var-times) + position: absolute + top: 50% + left: 50% + display: flex + align-items: center + justify-content: center + transform: translate(-50%, -50%) + border-radius: 50% + width: 30px + height: 30px + transition: all .15s ease + +@media (max-width: 768px) + .alert__closer + width: 40px + +.alert-success + background-color: var(--color-success) + + // .alert__icon::before { + // --alert-icon-default: '\f058'; + // } + +.alert-warning + background-color: var(--color-warning) + + // .alert__icon::before { + // --alert-icon-default: '\f06a'; + // } + +.alert-error + background-color: var(--color-error) + + // .alert__icon::before { + // --alert-icon-default: '\f071'; + // } diff --git a/frontend/src/utils/alerts/alerts.scss b/frontend/src/utils/alerts/alerts.scss deleted file mode 100644 index ee800d40a..000000000 --- a/frontend/src/utils/alerts/alerts.scss +++ /dev/null @@ -1,221 +0,0 @@ -@use "../../common" as *; - -.alerts { - position: fixed; - bottom: 0; - right: 5%; - z-index: 20; - text-align: right; - display: flex; - flex-direction: column; -} - -.alerts__toggler { - width: 40px; - height: 40px; - position: absolute; - top: 400px; - left: 50%; - transform: translateX(-50%); - cursor: pointer; - - &::before { - @extend .fas; - content: fa-content($fa-var-chevron-up); - position: absolute; - left: 50%; - top: 0; - height: 30px; - display: flex; - align-items: center; - justify-content: center; - width: 30px; - color: var(--color-grey); - font-size: 30px; - transform: translateX(-50%); - } - - &:hover::before { - color: var(--color-grey-medium); - } -} - -.alerts--elevated { - z-index: 1000; -} - -.alerts__toggler--visible { - top: -40px; - opacity: 1; - transition: top .5s cubic-bezier(0.73, 1.25, 0.61, 1), - opacity .5s cubic-bezier(0.73, 1.25, 0.61, 1); -} - -@media (max-width: 425px) { - - .alerts { - left: 5%; - } -} - -.alert { - position: relative; - display: block; - background-color: var(--color-lightblack); - font-size: 1rem; - color: var(--color-lightwhite); - z-index: 0; - padding: 0 50px; - padding-right: 60px; - animation: slide-in-alert .2s ease-out forwards; - margin-bottom: 10px; - transition: margin-bottom .2s ease-out; -} - -.alert a { - color: var(--color-lightwhite); - - &:hover { - color: var(--color-grey); - } -} - -@keyframes slide-in-alert { - from { - transform: translateY(120%); - } - to { - transform: translateY(0); - } -} - -@keyframes slide-out-alert { - from { - transform: translateY(0); - max-height: 200px; - } - to { - transform: translateY(250%); - opacity: 0; - max-height: 0; - overflow: hidden; - } -} - -@media (min-width: 425px) { - - .alert { - max-width: 400px; - } -} - -.alert--invisible { - animation: slide-out-alert .2s ease-out forwards; - margin-bottom: 0; -} - -.alert__content { - padding: 8px 0; - min-height: 40px; - position: relative; - display: flex; - font-weight: 600; - align-items: center; - text-align: left; -} - -.alert__icon { - text-align: right; - position: absolute; - left: 0px; - top: 0; - width: 50px; - height: 100%; - z-index: 40; - - &::before { - position: absolute; - font-size: 24px; - top: 50%; - left: 50%; - display: flex; - align-items: center; - justify-content: center; - transform: translate(-50%, -50%); - border-radius: 50%; - width: 30px; - height: 30px; - } -} - -.alert__closer { - cursor: pointer; - text-align: right; - position: absolute; - right: 0px; - top: 0; - width: 60px; - height: 100%; - transition: all .3s ease; - z-index: 40; - - &:hover { - transform: scale(1.05, 1.05); - - &::before { - box-shadow: 0 0 4px white; - background-color: rgba(255, 255, 255, 0.1); - color: white; - } - } - - &::before { - @extend .fas; - content: fa-content($fa-var-times); - position: absolute; - top: 50%; - left: 50%; - display: flex; - align-items: center; - justify-content: center; - transform: translate(-50%, -50%); - border-radius: 50%; - width: 30px; - height: 30px; - transition: all .15s ease; - } -} - -@media (max-width: 768px) { - - .alert__closer { - width: 40px; - } -} - -.alert-success { - background-color: var(--color-success); - - /* .alert__icon::before { - * --alert-icon-default: '\f058'; - * } - */ -} - -.alert-warning { - background-color: var(--color-warning); - - /* .alert__icon::before { - * --alert-icon-default: '\f06a'; - * } - */ -} - -.alert-error { - background-color: var(--color-error); - - /* .alert__icon::before { - * --alert-icon-default: '\f071'; - * } - */ -} diff --git a/frontend/src/utils/asidenav/asidenav.js b/frontend/src/utils/asidenav/asidenav.js index 2964e1617..6bf425ffa 100644 --- a/frontend/src/utils/asidenav/asidenav.js +++ b/frontend/src/utils/asidenav/asidenav.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './asidenav.scss'; +import './asidenav.sass'; const FAVORITES_BTN_CLASS = 'navbar__list-item--favorite'; const FAVORITES_BTN_ACTIVE_CLASS = 'navbar__list-item--active'; diff --git a/frontend/src/utils/asidenav/asidenav.sass b/frontend/src/utils/asidenav/asidenav.sass new file mode 100644 index 000000000..b9beb15b4 --- /dev/null +++ b/frontend/src/utils/asidenav/asidenav.sass @@ -0,0 +1,330 @@ +.main__aside + position: fixed + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) + z-index: 1 + top: 0 + left: 0 + width: var(--asidenav-width-lg, 20%) + height: 100% + flex: 0 0 0 + flex-basis: var(--asidenav-width-lg, 20%) + transition: all .2s ease-out + + &::before + position: absolute + z-index: -1 + left: 0 + top: 0 + width: 100% + height: 100% + background-color: var(--color-dark) + opacity: 0.05 + + &::after + content: '' + position: absolute + z-index: -2 + left: 0 + top: 0 + width: 100% + height: 100% + background-color: var(--color-grey-light) + +@media (max-width: 425px) + .main__aside + position: fixed + top: var(--header-height-collapsed) + left: 0 + right: 0 + bottom: 0 + height: 100% !important + width: 100% + z-index: 5 + overflow: hidden + transform: translateX(-110%) + transition: transform .2s ease-out + + &.main__aside--expanded + transform: translateX(0%) + + .asidenav__box-subtitle + display: inherit + + .asidenav__box-title + font-size: 18px + padding-left: 10px + + .asidenav__box-subtitle + display: none + +@media (min-width: 1200px) + .main__aside + width: var(--asidenav-width-xl, 250px) + +.asidenav + color: var(--color-font) + min-height: calc(100% - var(--header-height)) + height: 400px + overflow-y: auto + overflow-x: hidden + + &::-webkit-scrollbar + width: 0 + +.asidenav__box + transition: opacity .2s ease + + + .asidenav__box + margin-top: 10px + +.asidenav__box-title + padding: 7px 13px + margin-top: 30px + background-color: transparent + transition: all .2s ease + padding: 10px 13px + margin: 0 + border-bottom: 1px solid var(--color-grey) + + .asidenav-term-identifier--long + display: inherit + + .asidenav-term-identifier--short + display: none + +.asidenav__box-subtitle + color: var(--color-fontsec) + font-size: 0.9rem + font-weight: 600 + padding: 0 13px + margin: 3px 0 + +// LOGO + +.asidenav__logo + height: var(--header-height) + display: flex + align-items: center + +@media (max-width: 768px) + .asidenav__logo + display: none + +.asidenav__logo-link + flex: 1 + top: 10px + left: 20px + height: 80px + padding: 0 20px + display: flex + flex-basis: var(--asidenav-width-xl, 250px) + font-size: 16px + align-items: center + color: var(--color-dark) + transform-origin: left + + &:hover + color: var(--color-primary) + +.asidenav__logo-lmu + width: 80px + height: 100% + +.asidenav__logo-uni2work + display: flex + align-items: flex-end + min-width: 70px + margin-left: 12px + text-transform: uppercase + width: 100% + height: 100% + padding: 2px 4px + border: 1px solid currentColor + letter-spacing: 2px + background-color: white + transition: background-color .3s ease + +@media (max-width: 1199px) + .asidenav__logo-link + flex-basis: var(--asidenav-width-lg, 20%) + font-size: 16px + + .asidenav__logo-lmu + display: none + + .asidenav__logo-uni2work + margin-left: 0 + +// SEAL + +.asidenav__sigillum + position: absolute + bottom: -40px + right: 25px + opacity: 0.1 + + > img + width: 350px + +@media (max-width: 768px) + .asidenav__sigillum + right: auto + left: 50% + transform: translateX(-50%) + +// LIST-ITEM + +.asidenav__list-item + color: var(--color-font) + display: flex + flex-direction: column + justify-content: flex-start + align-items: center + + &:not(.asidenav__list-item--active):hover + background-color: var(--color-lightwhite) + + > .asidenav__link-wrapper + color: var(--color-font) + + &:hover + .asidenav__link-shorthand + // transform: scale(1.05, 1.0); + // transform-origin: right; + text-shadow: none + + .asidenav__nested-list-wrapper + display: block + +// small list-item-padding for medium to large screens +@media (min-width: 769px) + .asidenav__list-item + padding-left: 10px + +.asidenav__list-item--active + background-color: var(--color-lightwhite) + + .asidenav__link-wrapper + color: var(--color-link) + + .asidenav__link-shorthand + transform: scale(1.05, 1) + transform-origin: right + text-shadow: none + +.asidenav__link-wrapper + position: relative + display: flex + flex: 1 + align-items: center + padding: 8px 3px + justify-content: flex-start + color: var(--color-font) + width: 100% + z-index: 1 + +.asidenav__link-shorthand + display: none + +.asidenav__link-label + line-height: 1 + +// hover sub-menus +.asidenav__nested-list-wrapper + position: absolute + z-index: 10 + display: none + color: var(--color-font) + background-color: var(--color-grey-light) + box-shadow: 1px 1px 1px 0px var(--color-grey) + +.asidenav__nested-list + min-width: 200px + +@media (max-width: 425px) + .asidenav__list-item + padding-left: 10px + + .asidenav__nested-list + display: none + +.asidenav__nested-list-item + position: relative + + &:hover + background-color: var(--color-lightwhite) + + .asidenav__link-wrapper + padding-left: 13px + padding-right: 13px + transition: all .2s ease + color: var(--color-font) + +// TABLET +@media (min-width: 426px) and (max-width: 768px) + .main__aside + width: var(--asidenav-width-md, 50px) + flex-basis: var(--asidenav-width-md, 50px) + overflow: hidden + min-height: calc(100% - var(--header-height-collapsed)) + top: var(--header-height-collapsed) + + .asidenav__box-title + width: var(--asidenav-width-md, 50px) + font-size: 18px + text-align: center + padding: 10px 1px + word-break: break-all + background-color: var(--color-dark) + color: var(--color-lightwhite) + + &:hover + background-color: var(--color-darker) + + &::before + display: none + + .asidenav-term-identifier--long + display: none + + .asidenav-term-identifier--short + display: inherit + + .asidenav__box-subtitle + padding: 0 3px + font-size: 0.85rem + + .asidenav__link-shorthand + display: flex + position: static + height: 50px + width: var(--asidenav-width-md, 50px) + text-align: center + opacity: 1 + font-size: 15px + line-height: 1em + margin-right: 13px + flex-shrink: 0 + padding: 1px + outline: 1px solid white + word-break: break-all + align-items: center + justify-content: center + + .asidenav__list-item + padding-left: 0 + + + .asidenav__list-item + margin: 0 + + .asidenav__link-wrapper + color: var(--color-font) + padding: 0 + + .asidenav__nested-list, + .asidenav__link-label + display: none + + .asidenav__list-item--active + .asidenav__link-wrapper + background-color: var(--color-lightwhite) diff --git a/frontend/src/utils/asidenav/asidenav.scss b/frontend/src/utils/asidenav/asidenav.scss deleted file mode 100644 index 477292d38..000000000 --- a/frontend/src/utils/asidenav/asidenav.scss +++ /dev/null @@ -1,406 +0,0 @@ -.main__aside { - position: fixed; - box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); - z-index: 1; - top: 0; - left: 0; - width: var(--asidenav-width-lg, 20%); - height: 100%; - flex: 0 0 0; - flex-basis: var(--asidenav-width-lg, 20%); - transition: all .2s ease-out; - - &::before { - position: absolute; - z-index: -1; - left: 0; - top: 0; - width: 100%; - height: 100%; - background-color: var(--color-dark); - opacity: 0.05; - } - - &::after { - content: ''; - position: absolute; - z-index: -2; - left: 0; - top: 0; - width: 100%; - height: 100%; - background-color: var(--color-grey-light); - } -} - -@media (max-width: 425px) { - - .main__aside { - position: fixed; - top: var(--header-height-collapsed); - left: 0; - right: 0; - bottom: 0; - height: 100% !important; - width: 100%; - z-index: 5; - overflow: hidden; - transform: translateX(-110%); - transition: transform .2s ease-out; - - &.main__aside--expanded { - transform: translateX(0%); - - .asidenav__box-subtitle { - display: inherit; - } - } - - .asidenav__box-title { - font-size: 18px; - padding-left: 10px; - } - - .asidenav__box-subtitle { - display: none; - } - } -} - -@media (min-width: 1200px) { - .main__aside { - width: var(--asidenav-width-xl, 250px) - } -} - -.asidenav { - color: var(--color-font); - min-height: calc(100% - var(--header-height)); - height: 400px; - overflow-y: auto; - overflow-x: hidden; - - &::-webkit-scrollbar { - width: 0; - } -} - -.asidenav__box { - transition: opacity .2s ease; - - + .asidenav__box { - margin-top: 10px; - } -} - -.asidenav__box-title { - padding: 7px 13px; - margin-top: 30px; - background-color: transparent; - transition: all .2s ease; - padding: 10px 13px; - margin: 0; - border-bottom: 1px solid var(--color-grey); - - .asidenav-term-identifier--long { - display: inherit; - } - .asidenav-term-identifier--short { - display: none; - } -} - -.asidenav__box-subtitle { - color: var(--color-fontsec); - font-size: 0.9rem; - font-weight: 600; - padding: 0 13px; - margin: 3px 0; -} - -/* LOGO */ - -.asidenav__logo { - height: var(--header-height); - display: flex; - align-items: center; -} - -@media (max-width: 768px) { - - .asidenav__logo { - display: none; - } -} - -.asidenav__logo-link { - flex: 1; - top: 10px; - left: 20px; - height: 80px; - padding: 0 20px; - display: flex; - flex-basis: var(--asidenav-width-xl, 250px); - font-size: 16px; - align-items: center; - color: var(--color-dark); - transform-origin: left; - - &:hover { - color: var(--color-primary); - } -} - -.asidenav__logo-lmu { - width: 80px; - height: 100%; -} - -.asidenav__logo-uni2work { - display: flex; - align-items: flex-end; - min-width: 70px; - margin-left: 12px; - text-transform: uppercase; - width: 100%; - height: 100%; - padding: 2px 4px; - border: 1px solid currentColor; - letter-spacing: 2px; - background-color: white; - transition: background-color .3s ease; -} - -@media (max-width: 1199px) { - - .asidenav__logo-link { - flex-basis: var(--asidenav-width-lg, 20%); - font-size: 16px; - } - - .asidenav__logo-lmu { - display: none; - } - - .asidenav__logo-uni2work { - margin-left: 0; - } -} - -/* SEAL */ - -.asidenav__sigillum { - position: absolute; - bottom: -40px; - right: 25px; - opacity: 0.1; - - > img { - width: 350px; - } -} - -@media (max-width: 768px) { - .asidenav__sigillum { - right: auto; - left: 50%; - transform: translateX(-50%); - } -} - -/* LIST-ITEM */ - -.asidenav__list-item { - color: var(--color-font); - display: flex; - flex-direction: column; - justify-content: flex-start; - align-items: center; - - &:not(.asidenav__list-item--active):hover { - background-color: var(--color-lightwhite); - - > .asidenav__link-wrapper { - color: var(--color-font); - } - } - - &:hover { - - .asidenav__link-shorthand { - /* transform: scale(1.05, 1.0); - * transform-origin: right; - */ - text-shadow: none; - } - - .asidenav__nested-list-wrapper { - display: block; - } - } -} - -/* small list-item-padding for medium to large screens */ -@media (min-width: 769px) { - .asidenav__list-item { - padding-left: 10px; - } -} - -.asidenav__list-item--active { - background-color: var(--color-lightwhite); - - .asidenav__link-wrapper { - color: var(--color-link); - } - - .asidenav__link-shorthand { - transform: scale(1.05, 1.0); - transform-origin: right; - text-shadow: none; - } -} - -.asidenav__link-wrapper { - position: relative; - display: flex; - flex: 1; - align-items: center; - padding: 8px 3px; - justify-content: flex-start; - color: var(--color-font); - width: 100%; - z-index: 1; -} - -.asidenav__link-shorthand { - display: none; -} - -.asidenav__link-label { - line-height: 1; -} - -/* hover sub-menus */ -.asidenav__nested-list-wrapper { - position: absolute; - z-index: 10; - display: none; - color: var(--color-font); - background-color: var(--color-grey-light); - box-shadow: 1px 1px 1px 0px var(--color-grey); -} - -.asidenav__nested-list { - min-width: 200px; -} - -@media (max-width: 425px) { - .asidenav__list-item { - padding-left: 10px; - } - - .asidenav__nested-list { - display: none; - } -} - -.asidenav__nested-list-item { - position: relative; - - &:hover { - background-color: var(--color-lightwhite); - } - - .asidenav__link-wrapper { - padding-left: 13px; - padding-right: 13px; - transition: all .2s ease; - color: var(--color-font); - } -} - -/* TABLET */ -@media (min-width: 426px) and (max-width: 768px) { - - .main__aside { - width: var(--asidenav-width-md, 50px); - flex-basis: var(--asidenav-width-md, 50px); - overflow: hidden; - min-height: calc(100% - var(--header-height-collapsed)); - top: var(--header-height-collapsed); - - .asidenav__box-title { - width: var(--asidenav-width-md, 50px); - font-size: 18px; - text-align: center; - padding: 10px 1px; - word-break: break-all; - background-color: var(--color-dark); - color: var(--color-lightwhite); - - &:hover { - background-color: var(--color-darker); - } - - &::before { - display: none; - } - - .asidenav-term-identifier--long { - display: none; - } - .asidenav-term-identifier--short { - display: inherit; - } - } - - .asidenav__box-subtitle { - padding: 0 3px; - font-size: 0.85rem; - } - - .asidenav__link-shorthand { - display: flex; - position: static; - height: 50px; - width: var(--asidenav-width-md, 50px); - text-align: center; - opacity: 1; - font-size: 15px; - line-height: 1em; - margin-right: 13px; - flex-shrink: 0; - padding: 1px; - outline: 1px solid white; - word-break: break-all; - align-items: center; - justify-content: center; - } - - .asidenav__list-item { - padding-left: 0; - - + .asidenav__list-item { - margin: 0; - } - } - - .asidenav__link-wrapper { - color: var(--color-font); - padding: 0; - } - - .asidenav__nested-list, - .asidenav__link-label { - display: none; - } - - .asidenav__list-item--active { - - .asidenav__link-wrapper { - background-color: var(--color-lightwhite); - } - } - } -} diff --git a/frontend/src/utils/async-form/async-form.js b/frontend/src/utils/async-form/async-form.js index f366f9eae..6c0da95c0 100644 --- a/frontend/src/utils/async-form/async-form.js +++ b/frontend/src/utils/async-form/async-form.js @@ -1,6 +1,6 @@ import { Utility } from '../../core/utility'; import { Datepicker } from '../form/datepicker'; -import './async-form.scss'; +import './async-form.sass'; const ASYNC_FORM_INITIALIZED_CLASS = 'check-all--initialized'; const ASYNC_FORM_RESPONSE_CLASS = 'async-form__response'; diff --git a/frontend/src/utils/async-form/async-form.sass b/frontend/src/utils/async-form/async-form.sass new file mode 100644 index 000000000..c4e54719d --- /dev/null +++ b/frontend/src/utils/async-form/async-form.sass @@ -0,0 +1,71 @@ +.async-form__response + margin: 20px 0 + position: relative + width: 100% + font-size: 18px + text-align: center + padding-top: 60px + +.async-form__response::before, +.async-form__response::after + position: absolute + top: 0px + left: 50% + display: block + +.async-form__response--success::before + content: '' + width: 17px + height: 28px + border: solid #069e04 + border-width: 0 5px 5px 0 + transform: translateX(-50%) rotate(45deg) + +.async-form__response--info::before + content: '' + width: 5px + height: 30px + top: 10px + background-color: #777 + transform: translateX(-50%) + +.async-form__response--info::after + content: '' + width: 5px + height: 5px + background-color: #777 + transform: translateX(-50%) + +.async-form__response--warning::before + content: '' + width: 5px + height: 30px + background-color: rgb(255, 187, 0) + transform: translateX(-50%) + +.async-form__response--warning::after + content: '' + width: 5px + height: 5px + top: 35px + background-color: rgb(255, 187, 0) + transform: translateX(-50%) + +.async-form__response--error::before + content: '' + width: 5px + height: 40px + background-color: #940d0d + transform: translateX(-50%) rotate(-45deg) + +.async-form__response--error::after + content: '' + width: 5px + height: 40px + background-color: #940d0d + transform: translateX(-50%) rotate(45deg) + +.async-form--loading + opacity: 0.1 + transition: opacity 800ms ease-out + pointer-events: none diff --git a/frontend/src/utils/async-form/async-form.scss b/frontend/src/utils/async-form/async-form.scss deleted file mode 100644 index bd5a97a41..000000000 --- a/frontend/src/utils/async-form/async-form.scss +++ /dev/null @@ -1,78 +0,0 @@ -.async-form__response { - margin: 20px 0; - position: relative; - width: 100%; - font-size: 18px; - text-align: center; - padding-top: 60px; -} - -.async-form__response::before, -.async-form__response::after { - position: absolute; - top: 0px; - left: 50%; - display: block; -} - -.async-form__response--success::before { - content: ''; - width: 17px; - height: 28px; - border: solid #069e04; - border-width: 0 5px 5px 0; - transform: translateX(-50%) rotate(45deg); -} - -.async-form__response--info::before { - content: ''; - width: 5px; - height: 30px; - top: 10px; - background-color: #777; - transform: translateX(-50%); -} -.async-form__response--info::after { - content: ''; - width: 5px; - height: 5px; - background-color: #777; - transform: translateX(-50%); -} - -.async-form__response--warning::before { - content: ''; - width: 5px; - height: 30px; - background-color: rgb(255, 187, 0); - transform: translateX(-50%); -} -.async-form__response--warning::after { - content: ''; - width: 5px; - height: 5px; - top: 35px; - background-color: rgb(255, 187, 0); - transform: translateX(-50%); -} - -.async-form__response--error::before { - content: ''; - width: 5px; - height: 40px; - background-color: #940d0d; - transform: translateX(-50%) rotate(-45deg); -} -.async-form__response--error::after { - content: ''; - width: 5px; - height: 40px; - background-color: #940d0d; - transform: translateX(-50%) rotate(45deg); -} - -.async-form--loading { - opacity: 0.1; - transition: opacity 800ms ease-out; - pointer-events: none; -} diff --git a/frontend/src/utils/async-table/async-table-filter.sass b/frontend/src/utils/async-table/async-table-filter.sass new file mode 100644 index 000000000..2108e9066 --- /dev/null +++ b/frontend/src/utils/async-table/async-table-filter.sass @@ -0,0 +1,4 @@ +.async-table-filter--loading + opacity: 0.7 + pointer-events: none + transition: opacity 400ms ease-out diff --git a/frontend/src/utils/async-table/async-table-filter.scss b/frontend/src/utils/async-table/async-table-filter.scss deleted file mode 100644 index 794240f3f..000000000 --- a/frontend/src/utils/async-table/async-table-filter.scss +++ /dev/null @@ -1,5 +0,0 @@ -.async-table-filter--loading { - opacity: 0.7; - pointer-events: none; - transition: opacity 400ms ease-out; -} diff --git a/frontend/src/utils/async-table/async-table.js b/frontend/src/utils/async-table/async-table.js index 80dadca3a..f2d1248ab 100644 --- a/frontend/src/utils/async-table/async-table.js +++ b/frontend/src/utils/async-table/async-table.js @@ -3,8 +3,8 @@ import { StorageManager, LOCATION } from '../../lib/storage-manager/storage-mana import { Datepicker } from '../form/datepicker'; import { HttpClient } from '../../services/http-client/http-client'; import * as debounce from 'lodash.debounce'; -import './async-table-filter.scss'; -import './async-table.scss'; +import './async-table-filter.sass'; +import './async-table.sass'; const INPUT_DEBOUNCE = 600; const HEADER_HEIGHT = 80; diff --git a/frontend/src/utils/async-table/async-table.sass b/frontend/src/utils/async-table/async-table.sass new file mode 100644 index 000000000..3b885cdbe --- /dev/null +++ b/frontend/src/utils/async-table/async-table.sass @@ -0,0 +1,4 @@ +.async-table--loading + opacity: 0.7 + pointer-events: none + transition: opacity 400ms ease-out diff --git a/frontend/src/utils/async-table/async-table.scss b/frontend/src/utils/async-table/async-table.scss deleted file mode 100644 index 9766daa84..000000000 --- a/frontend/src/utils/async-table/async-table.scss +++ /dev/null @@ -1,5 +0,0 @@ -.async-table--loading { - opacity: 0.7; - pointer-events: none; - transition: opacity 400ms ease-out; -} diff --git a/frontend/src/utils/course-teaser/course-teaser.js b/frontend/src/utils/course-teaser/course-teaser.js index 7f8c32630..889e7937a 100644 --- a/frontend/src/utils/course-teaser/course-teaser.js +++ b/frontend/src/utils/course-teaser/course-teaser.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './course-teaser.scss'; +import './course-teaser.sass'; var COURSE_TEASER_INITIALIZED_CLASS = 'course-teaser--initialized'; diff --git a/frontend/src/utils/course-teaser/course-teaser.sass b/frontend/src/utils/course-teaser/course-teaser.sass new file mode 100644 index 000000000..56831de4f --- /dev/null +++ b/frontend/src/utils/course-teaser/course-teaser.sass @@ -0,0 +1,246 @@ +[uw-course-teaser] + --course-border-color: var(--color-grey) + --course-padding-hori: 10px + --course-padding-vert: 12px + display: grid + position: relative + grid-gap: 5px 7px + grid-template-columns: 130px 30px 1fr 60px + grid-template-areas: 'shrthnd . title chevron' 'shrthnd smstr school chevron' '. . rgstrd . ' 'tutor tutor name . ' 'duedate duedate date . ' 'dscrptn dscrptn dscrptn dscrptn' + padding: var(--course-padding-vert) var(--course-padding-hori) + transition: background-color .1s ease-out + cursor: pointer + + &:hover + background-color: var(--course-bg-color) + + + [uw-course-teaser] + border-top: 1px solid var(--course-border-color) + + @media (max-width: 768px) + grid-template-columns: 140px 1fr 30px + grid-template-areas: 'shrthnd title chevron' 'shrthnd title . ' 'smstr school school ' '. rgstrd rgstrd ' 'tutor name name ' 'duedate date date ' 'dscrptn dscrptn dscrptn' + + @media (max-width: 426px) + grid-template-columns: 1fr + grid-template-areas: 'shrthnd' 'title' 'smstr' 'school' 'rgstrd' 'tutor' 'name' 'duedate' 'date' 'dscrptnlbl' 'dscrptn' 'chevron' + +.course-teaser__not-expandable + cursor: initial + +// chevron +.course-teaser__chevron + position: relative + padding: 10px + grid-area: chevron + justify-self: center + align-self: center + width: 100% + height: 100% + cursor: pointer + + &::before + content: '' + position: absolute + display: block + margin-top: -7.35px + margin-left: -7.35px + + // visually centered + border-width: 0 3px 3px 0 + width: 8px + height: 8px + top: 50% + left: 50% + border-color: var(--color-fontsec) + border-style: solid + transform: rotate(135deg) + transform-origin: 7.25px 7.25px + + // rotate about visual center + transition: all .2s ease-out + + &:hover::before + transform: scale(1.4) rotate(45deg) + + @media (max-width: 768px) + justify-self: end + width: auto + + &::before + position: initial + + @media (max-width: 426px) + &::before + transform: rotate(45deg) + margin-left: -7.35px + + &:hover::before + transform: scale(1.4) rotate(45deg) + +// semester +.course-teaser__semester + grid-area: smstr + justify-self: end + + a + color: var(--color-fontsec) + + @media (max-width: 768px) + justify-self: initial + +// shorthand +.course-teaser__shorthand + position: relative + grid-area: shrthnd + font-size: 2rem + line-height: 1.25 + min-height: calc(2rem * 1.25) + + > a + position: absolute + height: 100% + width: 100% + overflow: hidden + text-overflow: ellipsis + white-space: nowrap + word-break: break-any + text-decoration: none !important + + // sry. + font-weight: 600 + color: var(--color-grey-medium) + + // @media (max-width: 768px) { + position: initial; + } + +// title +.course-teaser__title + grid-area: title + font-size: 1.2rem + align-self: baseline + +// registration +.course-teaser__registration + grid-area: rgstrd + color: var(--color-fontsec) + font-weight: bold + +// school +.course-teaser__school + grid-area: school + + a + color: var(--color-fontsec) + +// duedate +.course-teaser__duedate + grid-area: date + +// lecturer +.course-teaser__lecturer + grid-area: name + +// description +.course-teaser__description + grid-area: dscrptn + max-height: 75vh + overflow: auto + +// show description only as dots (overflow text-overflow) and only show when expanded. No "hidden fiddling" + +// labels +.course-teaser__lecturer-label + grid-area: tutor + +.course-teaser__duedate-label + grid-area: duedate + +.course-teaser__description-label + grid-area: dscrptnlbl + +.course-teaser__lecturer-label, +.course-teaser__description-label, +.course-teaser__duedate-label + justify-self: end + color: var(--color-fontsec) + font-style: italic + + @media (max-width: 768px) + justify-self: initial + + @media (max-width: 426px) + margin-top: 7px + font-weight: bold + font-style: initial + +// hidden in closed state +.course-teaser__description, +.course-teaser__description-label + display: none + +// expanded courses +.course-teaser__expanded + cursor: initial + + .course-teaser__chevron + &::before + transform: rotate(45deg) + + &:hover::before + transform: scale(1.4) rotate(135deg) + + @media (max-width: 426px) + &::before + transform: rotate(225deg) + + &:hover::before + transform: scale(1.4) rotate(225deg) + + .course-teaser__school-label, + .course-teaser__school, + .course-teaser__duedate-label, + .course-teaser__duedate, + .course-teaser__description + display: block + + @media (max-width: 426px) + .course-teaser__description-label + display: block + +// course teaser: header styling +.course-teaser-header + padding-top: 10px + padding-bottom: 20px + line-height: 1.4 + max-width: 85vw + + .course-header + float: left + background-color: var(--color-dark) + position: relative + font-size: 16px + color: #fff + padding-top: 10px + padding-bottom: 10px + padding-left: 10px + padding-right: 35px + margin-bottom: 10px + font-weight: bold + text-align: left + border-radius: 20px 20px 20px 20px / 50% 50% 50% 50% + margin-right: 30px + + .course-header-link + color: white + font-weight: bold + text-decoration: none + + &:hover + color: inherit + +.course-teaser-header:after + content: "" + display: table + clear: both diff --git a/frontend/src/utils/course-teaser/course-teaser.scss b/frontend/src/utils/course-teaser/course-teaser.scss deleted file mode 100644 index 68576fb1e..000000000 --- a/frontend/src/utils/course-teaser/course-teaser.scss +++ /dev/null @@ -1,317 +0,0 @@ -[uw-course-teaser] { - --course-border-color: var(--color-grey); - --course-padding-hori: 10px; - --course-padding-vert: 12px; - - display: grid; - position: relative; - grid-gap: 5px 7px; - grid-template-columns: 130px 30px 1fr 60px; - grid-template-areas: - 'shrthnd . title chevron' - 'shrthnd smstr school chevron' - '. . rgstrd . ' - 'tutor tutor name . ' - 'duedate duedate date . ' - 'dscrptn dscrptn dscrptn dscrptn'; - padding: var(--course-padding-vert) var(--course-padding-hori); - transition: background-color .1s ease-out; - cursor: pointer; - - &:hover { - background-color: var(--course-bg-color); - } - - + [uw-course-teaser] { - border-top: 1px solid var(--course-border-color); - } - - @media (max-width: 768px) { - grid-template-columns: 140px 1fr 30px; - grid-template-areas: - 'shrthnd title chevron' - 'shrthnd title . ' - 'smstr school school ' - '. rgstrd rgstrd ' - 'tutor name name ' - 'duedate date date ' - 'dscrptn dscrptn dscrptn'; - } - - @media (max-width: 426px) { - grid-template-columns: 1fr; - grid-template-areas: - 'shrthnd' - 'title' - 'smstr' - 'school' - 'rgstrd' - 'tutor' - 'name' - 'duedate' - 'date' - 'dscrptnlbl' - 'dscrptn' - 'chevron'; - } -} - -.course-teaser__not-expandable { - cursor: initial; -} - -/* chevron */ -.course-teaser__chevron { - position: relative; - padding: 10px; - grid-area: chevron; - justify-self: center; - align-self: center; - width: 100%; - height: 100%; - cursor: pointer; - - &::before { - content: ''; - position: absolute; - display: block; - margin-top: -7.35px; - margin-left: -7.35px; /* visually centered */ - border-width: 0 3px 3px 0; - width: 8px; - height: 8px; - top: 50%; - left: 50%; - border-color: var(--color-fontsec); - border-style: solid; - transform: rotate(135deg); - transform-origin: 7.25px 7.25px; /* rotate about visual center */ - transition: all .2s ease-out; - } - - &:hover::before { - transform: scale(1.4) rotate(45deg); - } - - @media (max-width: 768px) { - justify-self: end; - width: auto; - - &::before { - position: initial; - } - } - - @media (max-width: 426px) { - &::before { - transform: rotate(45deg); - margin-left: -7.35px; - } - - &:hover::before { - transform: scale(1.4) rotate(45deg); - } - } -} - -/* semester */ -.course-teaser__semester { - grid-area: smstr; - justify-self: end; - a { - color: var(--color-fontsec); - } - - @media (max-width: 768px) { - justify-self: initial; - } -} - -/* shorthand */ -.course-teaser__shorthand { - position: relative; - grid-area: shrthnd; - font-size: 2rem; - line-height: 1.25; - min-height: calc(2rem * 1.25); - - > a { - position: absolute; - height: 100%; - width: 100%; - overflow: hidden; - - text-overflow: ellipsis; - white-space: nowrap; - word-break: break-any; - - text-decoration: none !important; /* sry. */ - font-weight: 600; - color: var(--color-grey-medium); - } - - /* @media (max-width: 768px) { - * position: initial; - * } - */ -} - -/* title */ -.course-teaser__title { - grid-area: title; - font-size: 1.2rem; - align-self: baseline; -} - - /* registration */ -.course-teaser__registration { - grid-area: rgstrd; - color: var(--color-fontsec); - font-weight: bold; -} - -/* school */ -.course-teaser__school { - grid-area: school; - a { - color: var(--color-fontsec); - } -} - -/* duedate */ -.course-teaser__duedate { - grid-area: date; -} - -/* lecturer */ -.course-teaser__lecturer { - grid-area: name; -} - -/* description */ -.course-teaser__description { - grid-area: dscrptn; - max-height: 75vh; - overflow: auto; -} - -/* show description only as dots (overflow text-overflow) and only show when expanded. No "hidden fiddling" */ - -/* labels */ -.course-teaser__lecturer-label { - grid-area: tutor; -} - -.course-teaser__duedate-label { - grid-area: duedate; -} - -.course-teaser__description-label { - grid-area: dscrptnlbl; -} - -.course-teaser__lecturer-label, -.course-teaser__description-label, -.course-teaser__duedate-label { - justify-self: end; - color: var(--color-fontsec); - font-style: italic; - - @media (max-width: 768px) { - justify-self: initial; - } - - @media (max-width: 426px) { - margin-top: 7px; - font-weight: bold; - font-style: initial; - } -} - -/* hidden in closed state */ -.course-teaser__description, -.course-teaser__description-label { - display: none; -} - -/* expanded courses */ -.course-teaser__expanded { - cursor: initial; - - .course-teaser__chevron { - &::before { - transform: rotate(45deg); - } - - &:hover::before { - transform: scale(1.4) rotate(135deg); - } - - @media (max-width: 426px) { - &::before { - transform: rotate(225deg); - } - - &:hover::before { - transform: scale(1.4) rotate(225deg); - } - } - } - - .course-teaser__school-label, - .course-teaser__school, - .course-teaser__duedate-label, - .course-teaser__duedate, - .course-teaser__description { - display: block; - } - - @media (max-width: 426px) { - .course-teaser__description-label { - display: block; - } - } -} - -/* -course teaser: header styling -*/ -.course-teaser-header { - padding-top: 10px; - padding-bottom: 20px; - line-height: 1.4; - max-width: 85vw; - - .course-header { - float: left; - background-color: var(--color-dark); - position: relative; - font-size: 16px; - color: #fff; - padding-top: 10px; - padding-bottom: 10px; - padding-left: 10px; - padding-right: 35px; - margin-bottom: 10px; - font-weight: bold; - text-align: left; - border-radius: 20px 20px 20px 20px / 50% 50% 50% 50%; - margin-right: 30px; - - .course-header-link { - color: white; - font-weight: bold; - text-decoration: none; - - &:hover { - color: inherit; - } - } - } -} - -.course-teaser-header:after { - content: ""; - display: table; - clear: both; -} diff --git a/frontend/src/utils/form/form.js b/frontend/src/utils/form/form.js index 1e8fb6d3a..6d30a501b 100644 --- a/frontend/src/utils/form/form.js +++ b/frontend/src/utils/form/form.js @@ -1,4 +1,4 @@ -import './form.scss'; +import './form.sass'; import { AutoSubmitButton } from './auto-submit-button'; import { AutoSubmitInput } from './auto-submit-input'; import { Datepicker } from './datepicker'; diff --git a/frontend/src/utils/form/form.sass b/frontend/src/utils/form/form.sass new file mode 100644 index 000000000..675deabd9 --- /dev/null +++ b/frontend/src/utils/form/form.sass @@ -0,0 +1,35 @@ +fieldset + border: 0 + margin: 0 + padding: 0 + + legend + display: none + +@media (min-width: 769px) + .form-group__input + grid-column: 2 + +[uw-auto-submit-button][type='submit'] + animation: fade-in 500ms ease-in-out backwards + animation-delay: 500ms + +@keyframes fade-in + from + opacity: 0 + +.hidden + visibility: hidden !important + height: 0 !important + width: 0 !important + opacity: 0 !important + margin: 0 !important + padding: 0 !important + min-width: 0 !important + +.select--pagesize + width: 5em + min-width: 75px + +.label-pagesize + margin-right: 13px diff --git a/frontend/src/utils/form/form.scss b/frontend/src/utils/form/form.scss deleted file mode 100644 index 6ec870f9e..000000000 --- a/frontend/src/utils/form/form.scss +++ /dev/null @@ -1,45 +0,0 @@ -fieldset { - border: 0; - margin: 0; - padding: 0; - - legend { - display: none; - } -} - -@media (min-width: 769px) { - .form-group__input { - grid-column: 2; - } -} - -[uw-auto-submit-button][type='submit'] { - animation: fade-in 500ms ease-in-out backwards; - animation-delay: 500ms; -} - -@keyframes fade-in { - from { - opacity: 0; - } -} - -.hidden { - visibility: hidden !important; - height: 0 !important; - width: 0 !important; - opacity: 0 !important; - margin: 0 !important; - padding: 0 !important; - min-width: 0 !important; -} - -.select--pagesize { - width: 5em; - min-width: 75px; -} - -.label-pagesize { - margin-right: 13px; -} diff --git a/frontend/src/utils/hide-columns/hide-columns.js b/frontend/src/utils/hide-columns/hide-columns.js index acedc2375..712de7d68 100644 --- a/frontend/src/utils/hide-columns/hide-columns.js +++ b/frontend/src/utils/hide-columns/hide-columns.js @@ -1,6 +1,6 @@ import { Utility } from '../../core/utility'; import { StorageManager, LOCATION } from '../../lib/storage-manager/storage-manager'; -import './hide-columns.scss'; +import './hide-columns.sass'; const HIDE_COLUMNS_CONTAINER_IDENT = 'uw-hide-columns'; const TABLE_HEADER_IDENT = 'uw-hide-column-header'; diff --git a/frontend/src/utils/hide-columns/hide-columns.sass b/frontend/src/utils/hide-columns/hide-columns.sass new file mode 100644 index 000000000..e257b7045 --- /dev/null +++ b/frontend/src/utils/hide-columns/hide-columns.sass @@ -0,0 +1,61 @@ +.table-hider + background-color: #fff + color: var(--color-link) + padding: 10px + cursor: pointer + box-shadow: 0 0 2px 0 rgba(0, 0, 0, 0.6) + position: absolute + overflow: hidden + transition: transform .2s ease + transform: scaleY(0) + transform-origin: top + + &:hover + background-color: var(--color-grey-light) + + .table-hider__label + display: none + + &.table-hider--visible + transform: scaleY(0.4) + transition: none + + // TODO find better way to prevent transition on icons + + .fas + transform: scaleY(2.5) + + &:hover + transform: scaleY(1) + + .fas + transform: scaleY(1) + +[table-utils] + max-width: 85vw + margin-bottom: 10px + min-height: 0 + line-height: 1.4 + + .table-pill + background-color: var(--color-dark) + float: left + color: #fff + padding: 10px + border-radius: 20px / 50% + margin-right: 20px + margin-bottom: 10px + cursor: pointer + + .table-hider__label + font-size: 16px + font-weight: bold + margin-left: 5px + + &:after + content: "" + display: block + clear: both + +.hide-columns--hidden-cell + display: none diff --git a/frontend/src/utils/hide-columns/hide-columns.scss b/frontend/src/utils/hide-columns/hide-columns.scss deleted file mode 100644 index 59aab069d..000000000 --- a/frontend/src/utils/hide-columns/hide-columns.scss +++ /dev/null @@ -1,71 +0,0 @@ -.table-hider { - background-color: #fff; - color: var(--color-link); - padding: 10px; - cursor: pointer; - box-shadow: 0 0 2px 0 rgba(0,0,0,0.6); - position: absolute; - overflow: hidden; - transition: transform .2s ease; - transform: scaleY(0); - transform-origin: top; - - &:hover { - background-color: var(--color-grey-light); - } - - .table-hider__label { - display: none; - } - - &.table-hider--visible { - transform: scaleY(.4); - transition: none; /* TODO find better way to prevent transition on icons */ - - .fas { - transform: scaleY(2.5); - } - - &:hover { - transform: scaleY(1); - - .fas { - transform: scaleY(1); - } - } - } -} - -[table-utils] { - max-width: 85vw; - margin-bottom: 10px; - min-height: 0; - line-height: 1.4; - - .table-pill { - background-color: var(--color-dark); - float: left; - color: #fff; - padding: 10px; - border-radius: 20px / 50%; - margin-right: 20px; - margin-bottom: 10px; - cursor: pointer; - - .table-hider__label { - font-size: 16px; - font-weight: bold; - margin-left: 5px; - } - } - - &:after { - content: ""; - display: block; - clear: both; - } -} - -.hide-columns--hidden-cell { - display: none; -} diff --git a/frontend/src/utils/inputs/checkbox.js b/frontend/src/utils/inputs/checkbox.js index 6f52ea3ae..1cf408ba8 100644 --- a/frontend/src/utils/inputs/checkbox.js +++ b/frontend/src/utils/inputs/checkbox.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './checkbox.scss'; +import './checkbox.sass'; var CHECKBOX_CLASS = 'checkbox'; var CHECKBOX_INITIALIZED_CLASS = 'checkbox--initialized'; diff --git a/frontend/src/utils/inputs/checkbox.sass b/frontend/src/utils/inputs/checkbox.sass new file mode 100644 index 000000000..ce15110ae --- /dev/null +++ b/frontend/src/utils/inputs/checkbox.sass @@ -0,0 +1,71 @@ +// CUSTOM CHECKBOXES +// Completely replaces legacy checkbox +.checkbox [type='checkbox'], #lang-checkbox + position: fixed + top: -1px + left: -1px + width: 1px + height: 1px + overflow: hidden + display: none + +.checkbox + position: relative + display: inline-block + + label + display: block + height: 20px + width: 20px + background-color: #f3f3f3 + box-shadow: inset 0 1px 2px 1px rgba(50, 50, 50, 0.05) + border: 2px solid var(--color-primary) + border-radius: 4px + color: white + cursor: pointer + + label::before, + label::after + position: absolute + display: block + top: 12px + left: 8px + height: 2px + width: 8px + background-color: var(--color-font) + + \:checked + label + background-color: var(--color-primary) + + [type='checkbox']:focus + label + border-color: #3273dc + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25) + outline: 0 + + \:checked + label::before, + :checked + label::after + content: '' + + \:checked + label::before + background-color: white + transform: rotate(45deg) + left: 2px + top: 11px + + \:checked + label::after + background-color: white + transform: rotate(-45deg) + top: 9px + width: 12px + left: 7px + + [disabled] + label + pointer-events: none + border: none + opacity: 0.6 + filter: grayscale(1) + +// special treatment for checkboxes in table headers +th .checkbox + margin-right: 7px + vertical-align: bottom diff --git a/frontend/src/utils/inputs/checkbox.scss b/frontend/src/utils/inputs/checkbox.scss deleted file mode 100644 index 817aa5f3a..000000000 --- a/frontend/src/utils/inputs/checkbox.scss +++ /dev/null @@ -1,83 +0,0 @@ - -/* CUSTOM CHECKBOXES */ -/* Completely replaces legacy checkbox */ -.checkbox [type='checkbox'], #lang-checkbox { - position: fixed; - top: -1px; - left: -1px; - width: 1px; - height: 1px; - overflow: hidden; - display: none; -} - -.checkbox { - position: relative; - display: inline-block; - - label { - display: block; - height: 20px; - width: 20px; - background-color: #f3f3f3; - box-shadow: inset 0 1px 2px 1px rgba(50, 50, 50, 0.05); - border: 2px solid var(--color-primary); - border-radius: 4px; - color: white; - cursor: pointer; - } - - label::before, - label::after { - position: absolute; - display: block; - top: 12px; - left: 8px; - height: 2px; - width: 8px; - background-color: var(--color-font); - } - - :checked + label { - background-color: var(--color-primary); - } - - [type='checkbox']:focus + label { - border-color: #3273dc; - box-shadow: 0 0 0 0.125em rgba(50,115,220,.25); - outline: 0; - } - - :checked + label::before, - :checked + label::after { - content: ''; - } - - :checked + label::before { - background-color: white; - transform: rotate(45deg); - left: 2px; - top: 11px; - } - - :checked + label::after { - background-color: white; - transform: rotate(-45deg); - top: 9px; - width: 12px; - left: 7px; - } - - [disabled] + label { - pointer-events: none; - border: none; - opacity: 0.6; - filter: grayscale(1); - } -} - -/* special treatment for checkboxes in table headers */ -th .checkbox { - margin-right: 7px; - vertical-align: bottom; -} diff --git a/frontend/src/utils/inputs/file-input.js b/frontend/src/utils/inputs/file-input.js index 568e1baf4..e84d2ce26 100644 --- a/frontend/src/utils/inputs/file-input.js +++ b/frontend/src/utils/inputs/file-input.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './file-input.scss'; +import './file-input.sass'; const FILE_INPUT_CLASS = 'file-input'; const FILE_INPUT_INITIALIZED_CLASS = 'file-input--initialized'; diff --git a/frontend/src/utils/inputs/file-input.sass b/frontend/src/utils/inputs/file-input.sass new file mode 100644 index 000000000..576aad0b5 --- /dev/null +++ b/frontend/src/utils/inputs/file-input.sass @@ -0,0 +1,2 @@ +.file-input__list:empty + display: none diff --git a/frontend/src/utils/inputs/file-input.scss b/frontend/src/utils/inputs/file-input.scss deleted file mode 100644 index 7bf23248d..000000000 --- a/frontend/src/utils/inputs/file-input.scss +++ /dev/null @@ -1,3 +0,0 @@ -.file-input__list:empty { - display: none; -} diff --git a/frontend/src/utils/inputs/inputs.js b/frontend/src/utils/inputs/inputs.js index abda566a5..1909d964a 100644 --- a/frontend/src/utils/inputs/inputs.js +++ b/frontend/src/utils/inputs/inputs.js @@ -1,8 +1,8 @@ import { Checkbox } from './checkbox'; import { FileInput } from './file-input'; -import './inputs.scss'; -import './radio.scss'; +import './inputs.sass'; +import './radio.sass'; export const InputUtils = [ Checkbox, diff --git a/frontend/src/utils/inputs/inputs.sass b/frontend/src/utils/inputs/inputs.sass new file mode 100644 index 000000000..ec9581ff7 --- /dev/null +++ b/frontend/src/utils/inputs/inputs.sass @@ -0,0 +1,211 @@ +// GENERAL STYLES FOR FORMS + +// FORM GROUPS +.form-section-title + color: var(--color-fontsec) + margin: 0 + + + .form-group + margin-top: 11px + +.form-group + position: relative + display: flex + display: grid + grid-template-columns: 1fr 3fr + grid-gap: 5px + justify-content: flex-start + align-items: flex-start + + + .form-group, + .form-section-legend, + .form-section-notification + margin-top: 11px + + + .form-section-title + margin-top: 40px + +.form-section-legend + color: var(--color-fontsec) + margin: 7px 0 + +.form-group__hint, .form-section-title__hint + color: var(--color-fontsec) + font-size: 0.9rem + font-weight: 600 + +.form-section-title__hint + margin-top: 7px + + + .form-group + margin-top: 11px + +.form-group-label + font-weight: 600 + padding-top: 6px + +.form-group-label__hint + margin-top: 7px + color: var(--color-fontsec) + font-size: 0.9rem + +.form-group--required .form-group-label__caption::after, .form-group__required-marker::before + content: ' *' + color: var(--color-error) + font-weight: 600 + +.form-group--submit .form-group__input + grid-column: 2 + +@media (max-width: 768px) + .form-group--submit .form-group__input + grid-column: 1 + +.form-group--has-error + background-color: rgba(255, 0, 0, 0.1) + + input, textarea + border-color: var(--color-error) !important + + .form-error + display: block + +.form-error + display: none + +@media (max-width: 768px) + .form-group + grid-template-columns: 1fr + align-items: baseline + margin-top: 17px + flex-direction: column + +// TEXT INPUTS +input[type='text'], +input[type='search'], +input[type='password'], +input[type='url'], +input[type='number'], +input[type='email'], +input[type*='date'], +input[type*='time'], +select + // from bulma.css + color: #363636 + border-color: #dbdbdb + background-color: #f3f3f3 + box-shadow: inset 0 1px 2px 1px rgba(50, 50, 50, 0.05) + width: 100% + max-width: 600px + align-items: center + border: 1px solid transparent + border-radius: 4px + font-size: 1rem + font-family: var(--font-base) + line-height: 1.5 + padding: 4px 13px + +input[type='number'] + width: 100px + +input[type*='date'], +input[type*='time'], +.flatpickr-input[type='text'] + width: 50% + width: 250px + +// BUTTON STYLE SEE default-layout.lucius + +// TEXTAREAS +textarea + width: 100% + height: 170px + max-width: 600px + line-height: 1.5 + color: #363636 + background-color: #f3f3f3 + padding: 4px 13px + font-size: 1rem + font-family: var(--font-base) + appearance: none + border: 1px solid #dbdbdb + border-radius: 2px + box-shadow: inset 0 1px 2px 1px rgba(50, 50, 50, 0.05) + vertical-align: top + +// SHARED STATE RELATED STYLES + +input, +select, +textarea + &:focus + border-color: #3273dc + box-shadow: 0 0 0 0.125em rgba(50, 115, 220, 0.25) + outline: 0 + + &[disabled] + background-color: #f3f3f3 + color: #7a7a7a + box-shadow: none + border-color: #dbdbdb + + &[readonly] + background-color: #f5f5f5 + border-color: #dbdbdb + +// OPTIONS + +select[size="1"], select:not([size]) + appearance: menulist + +select, +option + font-size: 1rem + line-height: 1.5 + padding: 4px 13px + border: 1px solid #dbdbdb + border-radius: 2px + outline: 0 + color: #363636 + min-width: 250px + width: auto + background-color: #f3f3f3 + box-shadow: inset 0 1px 2px 1px rgba(50, 50, 50, 0.05) + +@media (max-width: 425px) + select, option + width: 100% + +// FILE INPUT +.file-input + display: none + +.file-input__label + cursor: pointer + display: inline-block + background-color: var(--color-primary) + color: white + padding: 10px 17px + border-radius: 3px + +.file-input__info + font-size: .9rem + font-style: italic + margin: 10px 0 + color: var(--color-fontsec) + +.file-input__list + margin-left: 40px + margin-top: 10px + font-weight: 600 + +// PREVIOUSLY UPLOADED FILES + +.file-uploads-label + margin-bottom: 10px + +.file-container + display: flex + align-items: center + margin-bottom: 10px + + .checkbox + margin-left: 12px diff --git a/frontend/src/utils/inputs/inputs.scss b/frontend/src/utils/inputs/inputs.scss deleted file mode 100644 index f19a17bda..000000000 --- a/frontend/src/utils/inputs/inputs.scss +++ /dev/null @@ -1,253 +0,0 @@ -/* GENERAL STYLES FOR FORMS */ - -/* FORM GROUPS */ -.form-section-title { - color: var(--color-fontsec); - margin: 0; - - + .form-group { - margin-top: 11px; - } -} - -.form-group { - position: relative; - display: flex; - display: grid; - grid-template-columns: 1fr 3fr; - grid-gap: 5px; - justify-content: flex-start; - align-items: flex-start; - - + .form-group, + .form-section-legend, + .form-section-notification { - margin-top: 11px; - } - - + .form-section-title { - margin-top: 40px; - } -} - -.form-section-legend { - color: var(--color-fontsec); - margin: 7px 0; -} - -.form-group__hint, .form-section-title__hint { - color: var(--color-fontsec); - font-size: 0.9rem; - font-weight: 600; -} - -.form-section-title__hint { - margin-top: 7px; - - + .form-group { - margin-top: 11px; - } -} - -.form-group-label { - font-weight: 600; - padding-top: 6px; -} - -.form-group-label__hint { - margin-top: 7px; - color: var(--color-fontsec); - font-size: 0.9rem; -} - -.form-group--required .form-group-label__caption::after, .form-group__required-marker::before { - content: ' *'; - color: var(--color-error); - font-weight: 600; -} - -.form-group--submit .form-group__input { - grid-column: 2; -} - -@media (max-width: 768px) { - .form-group--submit .form-group__input { - grid-column: 1; - } -} - -.form-group--has-error { - background-color: rgba(255, 0, 0, 0.1); - - input, textarea { - border-color: var(--color-error) !important; - } - - .form-error { - display: block; - } -} - -.form-error { - display: none; -} - -@media (max-width: 768px) { - .form-group { - grid-template-columns: 1fr; - align-items: baseline; - margin-top: 17px; - flex-direction: column; - } -} - -/* TEXT INPUTS */ -input[type='text'], -input[type='search'], -input[type='password'], -input[type='url'], -input[type='number'], -input[type='email'], -input[type*='date'], -input[type*='time'], -select { - /* from bulma.css */ - color: #363636; - border-color: #dbdbdb; - background-color: #f3f3f3; - box-shadow: inset 0 1px 2px 1px rgba(50,50,50,.05); - - width: 100%; - max-width: 600px; - align-items: center; - border: 1px solid transparent; - border-radius: 4px; - font-size: 1rem; - font-family: var(--font-base); - line-height: 1.5; - padding: 4px 13px; -} - -input[type='number'] { - width: 100px; -} - -input[type*='date'], -input[type*='time'], -.flatpickr-input[type='text'] { - width: 50%; - width: 250px; -} - -/* BUTTON STYLE SEE default-layout.lucius */ - -/* TEXTAREAS */ -textarea { - width: 100%; - height: 170px; - max-width: 600px; - line-height: 1.5; - color: #363636; - background-color: #f3f3f3; - padding: 4px 13px; - font-size: 1rem; - font-family: var(--font-base); - appearance: none; - border: 1px solid #dbdbdb; - border-radius: 2px; - box-shadow: inset 0 1px 2px 1px rgba(50,50,50,.05); - vertical-align: top; -} - -/* SHARED STATE RELATED STYLES */ - -input, -select, -textarea { - &:focus { - border-color: #3273dc; - box-shadow: 0 0 0 0.125em rgba(50,115,220,.25); - outline: 0; - } - - &[disabled] { - background-color: #f3f3f3; - color: #7a7a7a; - box-shadow: none; - border-color: #dbdbdb; - } - - &[readonly] { - background-color: #f5f5f5; - border-color: #dbdbdb; - } -} - -/* OPTIONS */ - -select[size = "1"], select:not([size]) { - appearance: menulist; -} - -select, -option { - font-size: 1rem; - line-height: 1.5; - padding: 4px 13px; - border: 1px solid #dbdbdb; - border-radius: 2px; - outline: 0; - color: #363636; - min-width: 250px; - width: auto; - background-color: #f3f3f3; - box-shadow: inset 0 1px 2px 1px rgba(50,50,50,.05); -} - -@media (max-width: 425px) { - - select, option { - width: 100%; - } -} - -/* FILE INPUT */ -.file-input { - display: none; -} - -.file-input__label { - cursor: pointer; - display: inline-block; - background-color: var(--color-primary); - color: white; - padding: 10px 17px; - border-radius: 3px; -} - -.file-input__info { - font-size: .9rem; - font-style: italic; - margin: 10px 0; - color: var(--color-fontsec); -} - -.file-input__list { - margin-left: 40px; - margin-top: 10px; - font-weight: 600; -} - -/* PREVIOUSLY UPLOADED FILES */ - -.file-uploads-label { - margin-bottom: 10px; -} - -.file-container { - display: flex; - align-items: center; - margin-bottom: 10px; - - .checkbox { - margin-left: 12px; - } -} diff --git a/frontend/src/utils/inputs/radio.sass b/frontend/src/utils/inputs/radio.sass new file mode 100644 index 000000000..367a05702 --- /dev/null +++ b/frontend/src/utils/inputs/radio.sass @@ -0,0 +1,55 @@ +// CUSTOM RADIO BOXES +// Completely replaces native radiobox + +.radio-group + display: flex + +.radio + position: relative + display: inline-block + + [type='radio'] + position: fixed + top: -1px + left: -1px + width: 1px + height: 1px + overflow: hidden + + label + display: block + height: 34px + min-width: 42px + line-height: 34px + text-align: center + padding: 0 13px + background-color: #f3f3f3 + box-shadow: inset 2px 1px 2px 1px rgba(50, 50, 50, 0.05) + color: var(--color-font) + cursor: pointer + + \:checked + label + background-color: var(--color-primary) + color: var(--color-lightwhite) + box-shadow: inset -2px -1px 2px 1px rgba(255, 255, 255, 0.15) + + \:focus + label + border-color: #3273dc + box-shadow: 0 0 0.125em 0 rgba(50, 115, 220, 0.8) + outline: 0 + + [disabled] + label + pointer-events: none + border: none + opacity: 0.6 + filter: grayscale(1) + +.radio:first-child + label + border-top-left-radius: 4px + border-bottom-left-radius: 4px + +.radio:last-child + label + border-top-right-radius: 4px + border-bottom-right-radius: 4px diff --git a/frontend/src/utils/inputs/radio.scss b/frontend/src/utils/inputs/radio.scss deleted file mode 100644 index 8e36edbda..000000000 --- a/frontend/src/utils/inputs/radio.scss +++ /dev/null @@ -1,66 +0,0 @@ -/* CUSTOM RADIO BOXES */ -/* Completely replaces native radiobox */ - -.radio-group { - display: flex; -} - -.radio { - position: relative; - display: inline-block; - - [type='radio'] { - position: fixed; - top: -1px; - left: -1px; - width: 1px; - height: 1px; - overflow: hidden; - } - - label { - display: block; - height: 34px; - min-width: 42px; - line-height: 34px; - text-align: center; - padding: 0 13px; - background-color: #f3f3f3; - box-shadow: inset 2px 1px 2px 1px rgba(50, 50, 50, 0.05); - color: var(--color-font); - cursor: pointer; - } - - :checked + label { - background-color: var(--color-primary); - color: var(--color-lightwhite); - box-shadow: inset -2px -1px 2px 1px rgba(255, 255, 255, 0.15); - } - - :focus + label { - border-color: #3273dc; - box-shadow: 0 0 0.125em 0 rgba(50,115,220,0.8); - outline: 0; - } - - [disabled] + label { - pointer-events: none; - border: none; - opacity: 0.6; - filter: grayscale(1); - } -} - -.radio:first-child { - label { - border-top-left-radius: 4px; - border-bottom-left-radius: 4px; - } -} - -.radio:last-child { - label { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; - } -} diff --git a/frontend/src/utils/mass-input/mass-input.js b/frontend/src/utils/mass-input/mass-input.js index f6c8357b2..403c626ac 100644 --- a/frontend/src/utils/mass-input/mass-input.js +++ b/frontend/src/utils/mass-input/mass-input.js @@ -1,6 +1,6 @@ import { Utility } from '../../core/utility'; import { Datepicker } from '../form/datepicker'; -import './mass-input.scss'; +import './mass-input.sass'; const MASS_INPUT_CELL_SELECTOR = '.massinput__cell'; const MASS_INPUT_ADD_CELL_SELECTOR = '.massinput__cell--add'; diff --git a/frontend/src/utils/mass-input/mass-input.sass b/frontend/src/utils/mass-input/mass-input.sass new file mode 100644 index 000000000..89bdf08c9 --- /dev/null +++ b/frontend/src/utils/mass-input/mass-input.sass @@ -0,0 +1,14 @@ +.massinput-list__wrapper, .massinput-list__cell + display: grid + grid: auto / auto 50px + max-width: 600px + grid-gap: 7px + +.massinput-list__field + grid-column: 1 + +.massinput-list__add, .massinput-list__delete + grid-column: 2 + +.massinput-list__cell + grid-column: 1 / 3 diff --git a/frontend/src/utils/mass-input/mass-input.scss b/frontend/src/utils/mass-input/mass-input.scss deleted file mode 100644 index d8f006d36..000000000 --- a/frontend/src/utils/mass-input/mass-input.scss +++ /dev/null @@ -1,18 +0,0 @@ -.massinput-list__wrapper, .massinput-list__cell { - display: grid; - grid: auto / auto 50px; - max-width: 600px; - grid-gap: 7px; -} - -.massinput-list__field { - grid-column: 1; -} - -.massinput-list__add, .massinput-list__delete { - grid-column: 2; -} - -.massinput-list__cell { - grid-column: 1 / 3; -} diff --git a/frontend/src/utils/modal/modal.js b/frontend/src/utils/modal/modal.js index 3958d6c2c..52a9a2b99 100644 --- a/frontend/src/utils/modal/modal.js +++ b/frontend/src/utils/modal/modal.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './modal.scss'; +import './modal.sass'; const MODAL_HEADERS = { 'Is-Modal': 'True', diff --git a/frontend/src/utils/modal/modal.sass b/frontend/src/utils/modal/modal.sass new file mode 100644 index 000000000..4a2b69459 --- /dev/null +++ b/frontend/src/utils/modal/modal.sass @@ -0,0 +1,103 @@ +@use "../../common" as * + +.modals-wrapper + position: fixed + left: 0 + top: 0 + width: 100% + height: 100% + z-index: -1 + display: flex + align-items: center + justify-content: center + + &.modals-wrapper--open + z-index: 200 + width: 100% + height: 100% + +.modal + position: relative + display: none + background-color: rgba(255, 255, 255, 1) + min-width: 60vw + max-width: 70vw + min-height: 100px + max-height: calc(100vh - 30px) + border-radius: 2px + z-index: -1 + color: var(--color-font) + overflow: auto + overscroll-behavior: contain + pointer-events: none + opacity: 0 + + &.modal--open + display: flex + opacity: 1 + pointer-events: auto + z-index: 200 + transition: opacity .2s .1s ease-in-out, transform .3s ease-in-out + +@media (max-width: 1024px) + .modal + min-width: 80vw + +@media (max-width: 768px) + .modal + min-width: 90vw + +@media (max-width: 425px) + .modal + min-width: calc(100vw - 20px) + +.modal__overlay + position: fixed + left: 0 + top: 0 + height: 100% + width: 100% + background-color: transparent + z-index: -1 + transition: all .2s ease + display: none + + &.modal__overlay--open + display: block + z-index: 199 + opacity: 1 + background-color: rgba(0, 0, 0, 0.4) + +.modal__trigger + cursor: pointer + +div.modal__trigger + display: inline-block + +.modal__trigger-label + font-style: italic + text-decoration: underline + +.modal__closer + position: absolute + top: 20px + right: 20px + display: flex + align-items: center + justify-content: center + width: 30px + height: 30px + background-color: var(--color-darker) + border-radius: 2px + cursor: pointer + z-index: 20 + + &::before + @extend .fas + + content: fa-content($fa-var-times) + color: white + +.modal__content + margin: 20px 40px + width: 100% diff --git a/frontend/src/utils/modal/modal.scss b/frontend/src/utils/modal/modal.scss deleted file mode 100644 index 446863f03..000000000 --- a/frontend/src/utils/modal/modal.scss +++ /dev/null @@ -1,120 +0,0 @@ -@use "../../common" as *; - -.modals-wrapper { - position: fixed; - left: 0; - top: 0; - width: 100%; - height: 100%; - z-index: -1; - display: flex; - align-items: center; - justify-content: center; - - &.modals-wrapper--open { - z-index: 200; - width: 100%; - height: 100%; - } -} - -.modal { - position: relative; - display: none; - background-color: rgba(255, 255, 255, 1); - min-width: 60vw; - max-width: 70vw; - min-height: 100px; - max-height: calc(100vh - 30px); - border-radius: 2px; - z-index: -1; - color: var(--color-font); - overflow: auto; - overscroll-behavior: contain; - pointer-events: none; - opacity: 0; - - &.modal--open { - display: flex; - opacity: 1; - pointer-events: auto; - z-index: 200; - transition: - opacity .2s .1s ease-in-out, - transform .3s ease-in-out; - } -} - -@media (max-width: 1024px) { - .modal { - min-width: 80vw; - } -} -@media (max-width: 768px) { - .modal { - min-width: 90vw; - } -} -@media (max-width: 425px) { - .modal { - min-width: calc(100vw - 20px); - } -} - -.modal__overlay { - position: fixed; - left: 0; - top: 0; - height: 100%; - width: 100%; - background-color: transparent; - z-index: -1; - transition: all .2s ease; - display: none; - - &.modal__overlay--open { - display: block; - z-index: 199; - opacity: 1; - background-color: rgba(0, 0, 0, 0.4); - } -} - -.modal__trigger { - cursor: pointer; -} - -div.modal__trigger { - display: inline-block; -} - -.modal__trigger-label { - font-style: italic; - text-decoration: underline; -} - -.modal__closer { - position: absolute; - top: 20px; - right: 20px; - display: flex; - align-items: center; - justify-content: center; - width: 30px; - height: 30px; - background-color: var(--color-darker); - border-radius: 2px; - cursor: pointer; - z-index: 20; - - &::before { - @extend .fas; - content: fa-content($fa-var-times); - color: white; - } -} - -.modal__content { - margin: 20px 40px; - width: 100%; -} diff --git a/frontend/src/utils/navbar/navbar.js b/frontend/src/utils/navbar/navbar.js index 95af958f4..0bb6fb029 100644 --- a/frontend/src/utils/navbar/navbar.js +++ b/frontend/src/utils/navbar/navbar.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './navbar.scss'; +import './navbar.sass'; export const LANGUAGE_SELECT_UTIL_SELECTOR = '[uw-language-select]'; diff --git a/frontend/src/utils/navbar/navbar.sass b/frontend/src/utils/navbar/navbar.sass new file mode 100644 index 000000000..05e3e23ab --- /dev/null +++ b/frontend/src/utils/navbar/navbar.sass @@ -0,0 +1,228 @@ +.navbar-container + position: relative + +.navbar-shadow + position: fixed + right: 0 + top: 0 + height: var(--header-height-collapsed) + width: 20px + z-index: 50 + background-image: linear-gradient(to left, rgba(0, 0, 0, 0.4), transparent) + transition: height 0.2s cubic-bezier(0.03, 0.43, 0.58, 1) + +@media (min-width: 768px) + .navbar-shadow + height: var(--header-height) + +@media (min-width: 1025px) + .navbar-shadow + display: none + +.navbar + position: fixed + display: flex + flex-direction: row + align-items: center + justify-content: flex-start + right: 0 + top: 0 + left: var(--asidenav-width-xl) + height: var(--header-height) + background-color: var(--color-primary) + color: white + z-index: 20 + box-shadow: 0 0 4px rgba(0, 0, 0, 0.2) + overflow: auto + transition: all 0.2s cubic-bezier(0.03, 0.43, 0.58, 1) + +@media (max-width: 1199px) + .navbar + left: var(--asidenav-width-lg) + +@media (max-width: 768px) + .navbar + left: 0 + +// links +.navbar__link-wrapper + display: flex + flex-direction: column + justify-content: flex-end + align-items: center + height: 80px + min-width: 90px + color: var(--color-lightwhite) + transition: height 0.2s cubic-bezier(0.03, 0.43, 0.58, 1) + overflow: hidden + cursor: pointer + +.navbar__link-icon + opacity: 0.7 + transition: opacity 0.2s ease + margin-bottom: 7px + +.navbar__link-label + transition: opacity .2s ease + padding: 2px 4px + text-transform: uppercase + font-weight: 600 + +@media (min-width: 769px) + .navbar__link-wrapper + border: 1px solid rgba(255, 255, 255, 0.7) + +@media (max-width: 768px) + .navbar__link-wrapper + box-shadow: none + min-width: 0 + align-items: center + justify-content: center + + .navbar__link-label + padding: 0 7px + + .navbar__link-icon + transform: scale(0.65) + margin-bottom: 0 + +// navbar list +.navbar__list + white-space: nowrap + + + .navbar__list + margin-left: 12px + +@media (min-width: 769px) + .navbar__list:last-of-type + padding-right: 40px + +@media (max-width: 768px) + .navbar__list + + .navbar__list + margin-left: 0 + padding-right: 40px + +// list item +.navbar__list-item + position: relative + transition: background-color .1s ease + + &:not(.navbar__list-item--favorite) + .navbar__list-item--lang-wrapper + margin-left: 12px + + &:not(.navbar__list-item--favorite) + .navbar__list-item + margin-left: 12px + +@media (max-width: 500px) + .navbar__list-item + min-width: 60px + + &:not(.navbar__list-item--favorite) + .navbar__list-item + margin-left: 0 + + &:not(.navbar__list-item--favorite) + .navbar__list-item--lang-wrapper + margin-left: 0 + +.navbar__list-left + flex: 5 + padding-left: 40px + +@media (max-width: 768px) + .navbar__list-left + padding-left: 0 + +// "Favorites" list item, only visible on small screens and logged in +.navbar__list-item + &.navbar__list-item--favorite + display: none + +.navbar__list-item--favorite + display: none + background-color: var(--color-primary) + +.logged-in + .navbar__list + li.navbar__list-item--favorite, + .navbar__list-item--favorite + display: inline-block + +@media (min-width: 426px) + .logged-in + .navbar__list + .navbar__list-item--favorite + display: none !important + +.navbar__list-item--active + background-color: var(--color-lightwhite) + color: var(--color-dark) + + .navbar__link-wrapper + color: var(--color-dark) + +.navbar__list-item--active .navbar__link-wrapper + color: var(--color-dark) + +.navbar .navbar__list-item:not(.navbar__list-item--active):not(.navbar__list-item--favorite):hover .navbar__link-wrapper, #lang-checkbox:checked ~ * .navbar__link-wrapper + background-color: var(--color-dark) + color: var(--color-lightwhite) + + .navbar__link-icon + opacity: 1 + +// sticky state +.navbar--sticky + height: var(--header-height-collapsed) + z-index: 100 + + .navbar__link-wrapper + height: var(--header-height-collapsed) + +.navbar__pushdown + height: var(--header-height) + transition: height 0.2s cubic-bezier(0.03, 0.43, 0.58, 1) + +.navbar--sticky + .navbar__pushdown + display: block + height: var(--header-height-collapsed) + +@media (max-width: 768px) + .navbar, + .navbar__pushdown + height: var(--header-height-collapsed) + + .navbar__link-wrapper + height: var(--header-height-collapsed) + +@media (max-height: 500px) + .navbar, + .navbar__pushdown + height: var(--header-height-collapsed) + + .navbar__link-wrapper + height: var(--header-height-collapsed) + +#lang-dropdown + display: none + position: fixed + top: var(--header-height) + right: 0 + min-width: 200px + z-index: 10 + background-color: white + border-radius: 2px + box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) + + select + display: block + + button + display: block + width: 100% + +#lang-checkbox:checked ~ #lang-dropdown + display: block + +@media (max-width: 768px) + #lang-dropdown + top: var(--header-height-collapsed) diff --git a/frontend/src/utils/navbar/navbar.scss b/frontend/src/utils/navbar/navbar.scss deleted file mode 100644 index 888d8d5cb..000000000 --- a/frontend/src/utils/navbar/navbar.scss +++ /dev/null @@ -1,305 +0,0 @@ -.navbar-container { - position: relative; -} - -.navbar-shadow { - position: fixed; - right: 0; - top: 0; - height: var(--header-height-collapsed); - width: 20px; - z-index: 50; - background-image: linear-gradient(to left, rgba(0, 0, 0, 0.4), transparent); - transition: height .2s cubic-bezier(0.03, 0.43, 0.58, 1); -} - -@media (min-width: 768px) { - - .navbar-shadow { - height: var(--header-height); - } -} - -@media (min-width: 1025px) { - - .navbar-shadow { - display: none; - } -} - -.navbar { - position: fixed; - display: flex; - flex-direction: row; - align-items: center; - justify-content: flex-start; - right: 0; - top: 0; - left: var(--asidenav-width-xl); - height: var(--header-height); - background-color: var(--color-primary); - color: white; - z-index: 20; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); - overflow: auto; - transition: all .2s cubic-bezier(0.03, 0.43, 0.58, 1); -} - -@media (max-width: 1199px) { - .navbar { - left: var(--asidenav-width-lg); - } -} - -@media (max-width: 768px) { - .navbar { - left: 0; - } -} - -/* links */ -.navbar__link-wrapper { - display: flex; - flex-direction: column; - justify-content: flex-end; - align-items: center; - height: 80px; - min-width: 90px; - color: var(--color-lightwhite); - transition: height .2s cubic-bezier(0.03, 0.43, 0.58, 1); - overflow: hidden; - cursor: pointer; -} - -.navbar__link-icon { - opacity: 0.7; - transition: opacity 0.2s ease; - margin-bottom: 7px; -} - -.navbar__link-label { - transition: opacity .2s ease; - padding: 2px 4px; - text-transform: uppercase; - font-weight: 600; -} - -@media (min-width: 769px) { - - .navbar__link-wrapper { - border: 1px solid rgba(255, 255, 255, 0.7); - } -} - -@media (max-width: 768px) { - - .navbar__link-wrapper { - box-shadow: none; - min-width: 0; - align-items: center; - justify-content: center; - } - - .navbar__link-label { - padding: 0 7px; - } - - .navbar__link-icon { - transform: scale(0.65); - margin-bottom: 0; - } -} - -/* navbar list */ -.navbar__list { - white-space: nowrap; - - + .navbar__list { - margin-left: 12px; - } -} - -@media (min-width: 769px) { - - .navbar__list:last-of-type { - padding-right: 40px; - } -} - -@media (max-width: 768px) { - - .navbar__list { - + .navbar__list { - margin-left: 0; - padding-right: 40px; - } - } -} - -/* list item */ -.navbar__list-item { - position: relative; - transition: background-color .1s ease; - &:not(.navbar__list-item--favorite) + .navbar__list-item--lang-wrapper { - margin-left: 12px; - } - &:not(.navbar__list-item--favorite) + .navbar__list-item { - margin-left: 12px; - } -} - -@media (max-width: 500px) { - - .navbar__list-item { - min-width: 60px; - - &:not(.navbar__list-item--favorite) + .navbar__list-item { - margin-left: 0; - } - &:not(.navbar__list-item--favorite) + .navbar__list-item--lang-wrapper { - margin-left: 0; - } - } -} - -.navbar__list-left { - flex: 5; - padding-left: 40px; -} - -@media (max-width: 768px) { - - .navbar__list-left { - padding-left: 0; - } -} - -/* "Favorites" list item, only visible on small screens and logged in */ -.navbar__list-item { - &.navbar__list-item--favorite { - display: none; - } -} -.navbar__list-item--favorite { - display: none; - background-color: var(--color-primary); -} - -.logged-in { - .navbar__list { - li.navbar__list-item--favorite, - .navbar__list-item--favorite { - display: inline-block; - } - } -} - -@media (min-width: 426px) { - - .logged-in { - .navbar__list { - .navbar__list-item--favorite { - display: none !important; - } - } - } -} - -.navbar__list-item--active { - background-color: var(--color-lightwhite); - color: var(--color-dark); - - .navbar__link-wrapper { - color: var(--color-dark); - } -} - -.navbar__list-item--active .navbar__link-wrapper { - color: var(--color-dark); -} - -.navbar .navbar__list-item:not(.navbar__list-item--active):not(.navbar__list-item--favorite):hover .navbar__link-wrapper, #lang-checkbox:checked ~ * .navbar__link-wrapper { - background-color: var(--color-dark); - color: var(--color-lightwhite); - - .navbar__link-icon { - opacity: 1; - } -} - -/* sticky state */ -.navbar--sticky { - height: var(--header-height-collapsed); - z-index: 100; - - .navbar__link-wrapper { - height: var(--header-height-collapsed); - } -} - -.navbar__pushdown { - height: var(--header-height); - transition: height .2s cubic-bezier(0.03, 0.43, 0.58, 1); -} - -.navbar--sticky + .navbar__pushdown { - display: block; - height: var(--header-height-collapsed); -} - -@media (max-width: 768px) { - - .navbar, - .navbar__pushdown { - height: var(--header-height-collapsed); - } - - .navbar__link-wrapper { - height: var(--header-height-collapsed); - } -} - -@media (max-height: 500px) { - - .navbar, - .navbar__pushdown { - height: var(--header-height-collapsed); - } - - .navbar__link-wrapper { - height: var(--header-height-collapsed); - } -} - - -#lang-dropdown { - display: none; - - position: fixed; - top: var(--header-height); - right: 0; - min-width: 200px; - z-index: 10; - background-color: white; - border-radius: 2px; - box-shadow: 0 0 10px rgba(0,0,0,0.3); - - select { - display: block; - } - - button { - display: block; - width: 100%; - } -} - -#lang-checkbox:checked ~ #lang-dropdown { - display: block; -} - -@media (max-width: 768px) { - #lang-dropdown { - top: var(--header-height-collapsed); - } -} diff --git a/frontend/src/utils/show-hide/show-hide.js b/frontend/src/utils/show-hide/show-hide.js index aa1f4f792..4da5f8c06 100644 --- a/frontend/src/utils/show-hide/show-hide.js +++ b/frontend/src/utils/show-hide/show-hide.js @@ -1,6 +1,6 @@ import { Utility } from '../../core/utility'; import { StorageManager, LOCATION } from '../../lib/storage-manager/storage-manager'; -import './show-hide.scss'; +import './show-hide.sass'; const SHOW_HIDE_LOCAL_STORAGE_KEY = 'SHOW_HIDE'; const SHOW_HIDE_INITIALIZED_CLASS = 'show-hide--initialized'; diff --git a/frontend/src/utils/show-hide/show-hide.sass b/frontend/src/utils/show-hide/show-hide.sass new file mode 100644 index 000000000..cb5c922f2 --- /dev/null +++ b/frontend/src/utils/show-hide/show-hide.sass @@ -0,0 +1,44 @@ +$show-hide-toggle-size: 6px + +.show-hide__toggle + position: relative + cursor: pointer + + &:hover + background-color: var(--color-grey-lighter) + cursor: pointer + +.show-hide__toggle::before + content: '' + position: absolute + width: $show-hide-toggle-size + height: $show-hide-toggle-size + left: -15px + top: 50% + color: var(--color-primary) + border-right: 2px solid currentColor + border-top: 2px solid currentColor + transition: transform .2s ease + transform: translateY(-50%) rotate(-45deg) + + @media (max-width: 768px) + left: auto + right: 20px + color: var(--color-font) + +.show-hide__toggle--right::before + left: auto + right: 20px + color: var(--color-font) + +.show-hide--collapsed + .show-hide__toggle::before + transform: translateY(-50%) rotate(135deg) + + & > :not(.show-hide__toggle) + display: block + height: 0 + margin: 0 + padding: 0 + max-height: 0 + overflow-y: hidden diff --git a/frontend/src/utils/show-hide/show-hide.scss b/frontend/src/utils/show-hide/show-hide.scss deleted file mode 100644 index f557248fb..000000000 --- a/frontend/src/utils/show-hide/show-hide.scss +++ /dev/null @@ -1,54 +0,0 @@ -$show-hide-toggle-size: 6px; - -.show-hide__toggle { - - position: relative; - cursor: pointer; - - &:hover { - background-color: var(--color-grey-lighter); - cursor: pointer; - } -} - -.show-hide__toggle::before { - content: ''; - position: absolute; - width: $show-hide-toggle-size; - height: $show-hide-toggle-size; - left: -15px; - top: 50%; - color: var(--color-primary); - border-right: 2px solid currentColor; - border-top: 2px solid currentColor; - transition: transform .2s ease; - transform: translateY(-50%) rotate(-45deg); - - @media (max-width: 768px) { - left: auto; - right: 20px; - color: var(--color-font); - } -} - -.show-hide__toggle--right::before { - left: auto; - right: 20px; - color: var(--color-font); -} - -.show-hide--collapsed { - - .show-hide__toggle::before { - transform: translateY(-50%) rotate(135deg); - } - - & > :not(.show-hide__toggle) { - display: block; - height: 0; - margin: 0; - padding: 0; - max-height: 0; - overflow-y: hidden; - } -} diff --git a/frontend/src/utils/tabber/tabber.js b/frontend/src/utils/tabber/tabber.js index c44caa44b..39ed37576 100644 --- a/frontend/src/utils/tabber/tabber.js +++ b/frontend/src/utils/tabber/tabber.js @@ -1,4 +1,4 @@ -import './tabber.scss'; +import './tabber.sass'; (function($) { diff --git a/frontend/src/utils/tabber/tabber.sass b/frontend/src/utils/tabber/tabber.sass new file mode 100644 index 000000000..eea4355fd --- /dev/null +++ b/frontend/src/utils/tabber/tabber.sass @@ -0,0 +1,35 @@ +.tab-group + border-top: 2px solid #dcdcdc + padding-top: 30px + +.tab-group-openers + display: flex + justify-content: stretch + line-height: 40px + font-size: 14px + margin-bottom: 40px + +.tab-opener + display: inline-block + flex: 1 + text-align: center + padding: 0 13px + margin: 0 2px + background-color: var(--color-dark) + color: white + font-size: 16px + text-transform: uppercase + font-weight: 600 + transition: all .1s ease + border-bottom: 5px solid rgba(100, 100, 100, 0.2) + +.tab-opener:not(.tab-visible):hover + cursor: pointer + background-color: transparent + color: rgb(52, 48, 58) + border-bottom-color: grey + +.tab-opener.tab-visible + background-color: transparent + color: rgb(52, 48, 58) + border-bottom-color: var(--color-primary) diff --git a/frontend/src/utils/tabber/tabber.scss b/frontend/src/utils/tabber/tabber.scss deleted file mode 100644 index d135a5f27..000000000 --- a/frontend/src/utils/tabber/tabber.scss +++ /dev/null @@ -1,39 +0,0 @@ -.tab-group { - border-top: 2px solid #dcdcdc; - padding-top: 30px; -} - -.tab-group-openers { - display: flex; - justify-content: stretch; - line-height: 40px; - font-size: 14px; - margin-bottom: 40px; -} - -.tab-opener { - display: inline-block; - flex: 1; - text-align: center; - padding: 0 13px; - margin: 0 2px; - background-color: var(--color-dark); - color: white; - font-size: 16px; - text-transform: uppercase; - font-weight: 600; - transition: all .1s ease; - border-bottom: 5px solid rgba(100, 100, 100, 0.2); -} -.tab-opener:not(.tab-visible):hover { - cursor: pointer; - background-color: transparent; - color: rgb(52, 48, 58); - border-bottom-color: grey; -} - -.tab-opener.tab-visible { - background-color: transparent; - color: rgb(52, 48, 58); - border-bottom-color: var(--color-primary); -} diff --git a/frontend/src/utils/tooltips/tooltips.js b/frontend/src/utils/tooltips/tooltips.js index b773eef39..c4813957e 100644 --- a/frontend/src/utils/tooltips/tooltips.js +++ b/frontend/src/utils/tooltips/tooltips.js @@ -1,5 +1,5 @@ import { Utility } from '../../core/utility'; -import './tooltips.scss'; +import './tooltips.sass'; // empty 'shell' to be able to load styles @Utility({ diff --git a/frontend/src/utils/tooltips/tooltips.sass b/frontend/src/utils/tooltips/tooltips.sass new file mode 100644 index 000000000..dc3861fee --- /dev/null +++ b/frontend/src/utils/tooltips/tooltips.sass @@ -0,0 +1,92 @@ +.tooltip + position: relative + display: inline-block + vertical-align: middle + + &:hover .tooltip__content + display: inline-block + +.tooltip__handle + color: var(--color-light) + height: 1.5rem + line-height: 1.5rem + font-size: 1.2rem + display: inline-block + text-align: center + margin: 0 10px + cursor: default + position: relative + + &::before + position: absolute + top: 0 + left: 0 + top: 50% + left: 50% + transform: translate(-50%, -50%) + font-size: 15px + + &.tooltip__handle.urgency__success + color: var(--color-success) + + &.tooltip__handle.urgency__warning + color: var(--color-warning) + + &.tooltip__handle.urgency__error + color: var(--color-error) + + &:hover + color: var(--color-dark) + + &.tooltip__handle.urgency__success + color: var(--color-success-dark) + + &.tooltip__handle.urgency__warning + color: var(--color-warning-dark) + + &.tooltip__handle.urgency__error + color: var(--color-error-dark) + +.tooltip.tooltip__inline + .tooltip__handle + height: 1.0rem + line-height: 1.0rem + font-size: 1.0rem + +.tooltip__content + position: absolute + display: none + top: -10px + transform: translateY(-100%) + left: 3px + width: 275px + z-index: 10 + background-color: #fafafa + border-radius: 4px + padding: 13px 17px + box-shadow: 0 0 20px 4px rgba(0, 0, 0, 0.1) + + &::after + content: '' + width: 16px + height: 16px + background-color: #fafafa + transform: rotate(45deg) + position: absolute + left: 10px + bottom: -8px + +@media (max-width: 768px) + .tooltip + display: block + margin-top: 10px + + .tooltip__content + left: 3px + right: 3px + width: auto + +// fix font color when used in tableheaders +th .tooltip__content + color: var(--color-font) + font-weight: normal diff --git a/frontend/src/utils/tooltips/tooltips.scss b/frontend/src/utils/tooltips/tooltips.scss deleted file mode 100644 index 845c33310..000000000 --- a/frontend/src/utils/tooltips/tooltips.scss +++ /dev/null @@ -1,109 +0,0 @@ -.tooltip { - position: relative; - display: inline-block; - vertical-align: middle; - - &:hover .tooltip__content { - display: inline-block; - } -} - -.tooltip__handle { - color: var(--color-light); - height: 1.5rem; - line-height: 1.5rem; - font-size: 1.2rem; - display: inline-block; - text-align: center; - margin: 0 10px; - cursor: default; - position: relative; - - &::before { - position: absolute; - top: 0; - left: 0; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - font-size: 15px; - } - - &.tooltip__handle.urgency__success { - color: var(--color-success); - } - &.tooltip__handle.urgency__warning { - color: var(--color-warning); - } - &.tooltip__handle.urgency__error { - color: var(--color-error); - } - - &:hover { - color: var(--color-dark); - - &.tooltip__handle.urgency__success { - color: var(--color-success-dark); - } - &.tooltip__handle.urgency__warning { - color: var(--color-warning-dark); - } - &.tooltip__handle.urgency__error { - color: var(--color-error-dark); - } - } -} - -.tooltip.tooltip__inline { - .tooltip__handle { - height: 1.0rem; - line-height: 1.0rem; - font-size: 1.0rem; - } -} - -.tooltip__content { - position: absolute; - display: none; - top: -10px; - transform: translateY(-100%); - left: 3px; - width: 275px; - z-index: 10; - background-color: #fafafa; - border-radius: 4px; - padding: 13px 17px; - box-shadow: 0 0 20px 4px rgba(0, 0, 0, 0.1); - - &::after { - content: ''; - width: 16px; - height: 16px; - background-color: #fafafa; - transform: rotate(45deg); - position: absolute; - left: 10px; - bottom: -8px; - } -} - -@media (max-width: 768px) { - - .tooltip { - display: block; - margin-top: 10px; - - .tooltip__content { - left: 3px; - right: 3px; - width: auto; - } - } -} - - -/* fix font color when used in tableheaders */ -th .tooltip__content { - color: var(--color-font); - font-weight: normal; -} diff --git a/package-lock.json b/package-lock.json index e1895328f..76cf43601 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2633,6 +2633,12 @@ "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, + "@types/q": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", + "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", + "dev": true + }, "@types/semver": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.2.tgz", @@ -3022,6 +3028,12 @@ "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", "dev": true }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, "ansi-colors": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.4.tgz", @@ -4206,6 +4218,12 @@ "type-is": "~1.6.17" } }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4546,6 +4564,18 @@ } } }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, "caniuse-lite": { "version": "1.0.30001015", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", @@ -4770,6 +4800,17 @@ "shallow-clone": "^3.0.0" } }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -4786,6 +4827,16 @@ "object-visit": "^1.0.0" } }, + "color": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/color/-/color-3.1.2.tgz", + "integrity": "sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -4801,6 +4852,16 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -6283,6 +6344,22 @@ "postcss": "^7.0.5" } }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + } + }, "css-has-pseudo": { "version": "0.10.0", "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", @@ -6340,6 +6417,54 @@ "postcss": "^7.0.5" } }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-what": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.2.1.tgz", + "integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==", + "dev": true + }, "cssdb": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", @@ -6352,6 +6477,92 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssnano": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.10.tgz", + "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "cssnano-preset-default": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz", + "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.2", + "postcss-unique-selectors": "^4.0.1" + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", + "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.37" + } + }, "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", @@ -6625,12 +6836,46 @@ "void-elements": "^2.0.0" } }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + } + } + }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "dot-prop": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", @@ -6825,6 +7070,12 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + }, "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", @@ -8793,6 +9044,12 @@ "minimalistic-assert": "^1.0.1" } }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -8829,6 +9086,24 @@ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", + "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", + "dev": true + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -9123,6 +9398,12 @@ "loose-envify": "^1.0.0" } }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", @@ -9179,6 +9460,20 @@ "ci-info": "^2.0.0" } }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -9361,12 +9656,27 @@ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", "dev": true }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", @@ -9770,6 +10080,16 @@ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", "dev": true }, + "last-call-webpack-plugin": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz", + "integrity": "sha512-7KI2l2GIZa9p2spzPIVZBYyNKkN+e/SQPpnjlTiPhdbDW3F86tdKKELxKpzJ5sgU19wQWsACULZmpTPYHeWO5w==", + "dev": true, + "requires": { + "lodash": "^4.17.5", + "webpack-sources": "^1.1.0" + } + }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", @@ -10044,6 +10364,12 @@ "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, "lodash.template": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", @@ -10063,6 +10389,12 @@ "lodash._reinterpolate": "~3.0.0" } }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, "log-symbols": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", @@ -10226,6 +10558,12 @@ "safe-buffer": "^5.1.2" } }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -13844,6 +14182,15 @@ "which": "^1.2.10" } }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, "null-check": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz", @@ -13915,6 +14262,12 @@ } } }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -13960,6 +14313,54 @@ "has": "^1.0.3" } }, + "object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + } + } + }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -13969,6 +14370,56 @@ "isobject": "^3.0.1" } }, + "object.values": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1", + "function-bind": "^1.1.1", + "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + } + } + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -14014,6 +14465,16 @@ } } }, + "optimize-css-assets-webpack-plugin": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/optimize-css-assets-webpack-plugin/-/optimize-css-assets-webpack-plugin-5.0.3.tgz", + "integrity": "sha512-q9fbvCRS6EYtUKKSwI87qm2IxlyJK5b4dygW1rKUBT6mMDhdG5e5bZT63v6tnJR9F9FB/H5a0HTmtw+laUBxKA==", + "dev": true, + "requires": { + "cssnano": "^4.1.10", + "last-call-webpack-plugin": "^3.0.0" + } + }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", @@ -14380,6 +14841,37 @@ } } }, + "postcss-calc": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.1.tgz", + "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" + }, + "dependencies": { + "cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true + }, + "postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "requires": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, "postcss-color-functional-notation": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", @@ -14432,6 +14924,29 @@ "postcss-values-parser": "^2.0.0" } }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, "postcss-custom-media": { "version": "7.0.8", "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", @@ -14537,6 +15052,42 @@ } } }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, "postcss-double-position-gradients": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", @@ -14676,6 +15227,124 @@ "postcss": "^7.0.2" } }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, "postcss-modules-extract-imports": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", @@ -14725,6 +15394,124 @@ "postcss": "^7.0.2" } }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, "postcss-overflow-shorthand": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", @@ -14855,6 +15642,30 @@ } } }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + } + }, "postcss-replace-overflow-wrap": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", @@ -14895,6 +15706,29 @@ "uniq": "^1.0.1" } }, + "postcss-svgo": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", + "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + } + }, "postcss-value-parser": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", @@ -15522,6 +16356,18 @@ "integrity": "sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug==", "dev": true }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, "rimraf": { "version": "2.6.3", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", @@ -15625,6 +16471,12 @@ } } }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", @@ -15767,6 +16619,23 @@ } } }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, "slash": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", @@ -16118,6 +16987,12 @@ "figgy-pudding": "^3.5.1" } }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, "staged-git-files": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", @@ -16507,6 +17382,26 @@ "function-bind": "^1.0.2" } }, + "string.prototype.trimleft": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", + "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, + "string.prototype.trimright": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", + "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "function-bind": "^1.1.1" + } + }, "string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -16590,6 +17485,39 @@ "schema-utils": "^1.0.0" } }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -16599,6 +17527,27 @@ "has-flag": "^3.0.0" } }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, "symbol-observable": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", @@ -16864,6 +17813,12 @@ "setimmediate": "^1.0.4" } }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -17090,6 +18045,12 @@ "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, "unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -17120,6 +18081,12 @@ "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", "dev": true }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", @@ -17236,6 +18203,16 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -17264,6 +18241,12 @@ "spdx-expression-parse": "^3.0.0" } }, + "vendors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.3.tgz", + "integrity": "sha512-fOi47nsJP5Wqefa43kyWSg80qF+Q3XA6MUkgi7Hp1HQaKDQW4cQrK2D0P7mmbFtsV1N89am55Yru/nyEwRubcw==", + "dev": true + }, "vm-browserify": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", diff --git a/package.json b/package.json index b4bbf8ab7..a5108f480 100644 --- a/package.json +++ b/package.json @@ -87,6 +87,7 @@ "mini-css-extract-plugin": "^0.8.0", "npm-run-all": "^4.1.5", "null-loader": "^2.0.0", + "optimize-css-assets-webpack-plugin": "^5.0.3", "postcss-loader": "^3.0.0", "postcss-preset-env": "^6.7.0", "resolve-url-loader": "^3.1.1", diff --git a/records.json b/records.json index 70313cfe0..0e3c24f99 100644 --- a/records.json +++ b/records.json @@ -505,5 +505,239 @@ "usedIds": [] } } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/app.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/async-form/async-form.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/alerts/alerts.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/asidenav/asidenav.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/form/form.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/hide-columns/hide-columns.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/navbar/navbar.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/course-teaser/course-teaser.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/modal/modal.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/tooltips/tooltips.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/mass-input/mass-input.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/inputs/radio.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/inputs/inputs.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/show-hide/show-hide.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/async-table/async-table.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/async-table/async-table-filter.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/inputs/file-input.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } + ], + "mini-css-extract-plugin node_modules/css-loader/dist/cjs.js??ref--6-1!node_modules/postcss-loader/src/index.js??ref--6-2!node_modules/resolve-url-loader/index.js??ref--6-3!node_modules/sass-loader/dist/cjs.js??ref--6-4!frontend/src/utils/inputs/checkbox.sass": [ + { + "modules": { + "byIdentifier": {}, + "usedIds": {} + }, + "chunks": { + "byName": {}, + "bySource": {}, + "usedIds": [] + } + } ] } \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 376cc0b24..7faa15e17 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,6 +1,7 @@ const webpack = require('webpack'); const path = require('path'); const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const OptimizeCSSAssetsPlugin = require('optimize-css-assets-webpack-plugin'); const ManifestPlugin = require('webpack-manifest-plugin'); const { CleanWebpackPlugin } = require('clean-webpack-plugin'); const CopyPlugin = require('copy-webpack-plugin'); @@ -54,7 +55,7 @@ module.exports = { ] }, { - test: /\.scss$/i, + test: /\.s(c|a)ss$/i, use: [ MiniCssExtractPlugin.loader, { loader: 'css-loader', options: { sourceMap: true }}, { loader: 'postcss-loader', options: { @@ -139,6 +140,13 @@ module.exports = { cache: true, parallel: true, sourceMap: true + }), + new OptimizeCSSAssetsPlugin({ + cssProcessorOptions: { + map: { + inline: false + } + } }) ], runtimeChunk: 'single',