X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=client%2Fsrc%2Fsass%2Fbootstrap.scss;h=d0465218486d93657fc9a0b61935bf19fce694ca;hb=18a2164366e470b02857269a5e7527fff038d9d2;hp=eee3db8fca3fdbe52ce979fa74464673b191eb0f;hpb=2bc9bd08cd121bdffbf56a0241c4decfb77bfdd5;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/sass/bootstrap.scss b/client/src/sass/bootstrap.scss index eee3db8fc..d04652184 100644 --- a/client/src/sass/bootstrap.scss +++ b/client/src/sass/bootstrap.scss @@ -1,12 +1,54 @@ -$icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/'; -@import '_bootstrap'; +@use '_variables' as *; +@use '_mixins' as *; + +@import './_bootstrap-variables'; + +@import 'bootstrap/scss/functions'; +@import 'bootstrap/scss/variables'; +@import 'bootstrap/scss/maps'; +@import 'bootstrap/scss/mixins'; +@import 'bootstrap/scss/utilities'; + +@import 'bootstrap/scss/root'; +@import 'bootstrap/scss/reboot'; +@import 'bootstrap/scss/type'; +@import 'bootstrap/scss/grid'; +@import 'bootstrap/scss/forms'; +@import 'bootstrap/scss/buttons'; +@import 'bootstrap/scss/transitions'; +@import 'bootstrap/scss/dropdown'; +@import 'bootstrap/scss/button-group'; +@import 'bootstrap/scss/nav'; +@import 'bootstrap/scss/card'; +@import 'bootstrap/scss/accordion'; +@import 'bootstrap/scss/alert'; +@import 'bootstrap/scss/close'; +@import 'bootstrap/scss/modal'; +@import 'bootstrap/scss/tooltip'; +@import 'bootstrap/scss/popover'; +@import 'bootstrap/scss/spinners'; + +@import 'bootstrap/scss/helpers'; +@import 'bootstrap/scss/utilities/api'; + +body { + --bs-border-color-translucent: #{pvar(--inputBorderColor)}; +} + +.accordion { + --bs-accordion-color: #{pvar(--mainForegroundColor)}; + --bs-accordion-bg: #{pvar(--mainBackgroundColor)}; + + --bs-accordion-btn-color: var(--bs-accordion-color); + --bs-accordion-btn-bg: var(--bs-accordion-bg); +} -@import '_variables'; -@import '_mixins'; +.popover { + --bs-popover-bg: #{pvar(--mainBackgroundColor)}; + --bs-popover-body-color: #{pvar(--mainForegroundColor)}; + --bs-popover-header-color: #{pvar(--mainForegroundColor)}; -// Thanks https://gist.github.com/alexandrevicenzi/680147013e902a4eaa5d -.glyphicon-refresh-animate { - animation: spin .7s infinite linear; + font-family: $main-fonts; } .flex-auto { @@ -14,40 +56,29 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/'; } .c-hand { - cursor: pointer; + cursor: pointer !important; } -@keyframes spin { - from { - transform: scale(1) rotate(0deg); - } - to { - transform: scale(1) rotate(360deg); - } -} +// --------------------------------------------------------------------------- +// Dropdown +// --------------------------------------------------------------------------- -/* rules for dropdowns excepts when in button group, to avoid impacting the dropdown-toggle */ -.dropdown:not(.btn-group):not(.dropdown-root):not(.action-dropdown) { - z-index: z(dropdown) !important; +.dropdown-menu { + --bs-dropdown-link-hover-bg: #{pvar(--mainBackgroundHoverColor)}; + --bs-dropdown-link-color: #{pvar(--mainForegroundColor)}; + --bs-dropdown-border-color: #{pvar(--inputBorderColor)}; - &.list-overflow-menu, - &.parent-entry { - z-index: z(header) - 1 !important; + .dropdown-header { + @include padding-left(1rem); } -} - -.dropdown-menu { - border-radius: 3px; - box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); - font-size: 15px; .dropdown-item { padding: 3px 15px; &.active { - color: var(--mainBackgroundColor) !important; - background-color: var(--mainHoverColor); - opacity: .9; + color: pvar(--mainBackgroundColor) !important; + background-color: pvar(--mainHoverColor); + opacity: 0.9; } &::after { @@ -55,26 +86,38 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/'; } } - button { + a { @include disable-default-a-behaviour; } +} - a { - @include disable-default-a-behaviour; - color: #000 !important; +.dropdown-divider { + margin: 0.3rem 0; +} + +// --------------------------------------------------------------------------- +// Alert +// --------------------------------------------------------------------------- + +.alert { + p:last-child { + margin-bottom: 0; } } +// --------------------------------------------------------------------------- +// Modal +// --------------------------------------------------------------------------- -@media screen and (min-width: #{map-get($grid-breakpoints, md)}) { - .modal:before { +@media screen and (min-width: #{breakpoint(md)}) { + .modal::before { vertical-align: middle; - content: " "; + content: ' '; height: 100%; } .modal-dialog { - text-align: left; + text-align: start; &:not(.modal-lg):not(.modal-xl) { min-width: 500px; @@ -88,11 +131,12 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/'; text-align: center; .modal-content { - background-color: var(--mainBackgroundColor); + background-color: pvar(--mainBackgroundColor); + word-break: break-word; } .modal-header { - border-bottom: none; + border-bottom: 0; margin-bottom: 5px; .modal-title { @@ -103,127 +147,142 @@ $icon-font-path: '~@neos21/bootstrap3-glyphicons/assets/fonts/'; my-global-icon { @include icon(22px); - position: relative; - top: 5px; - float: right; - - margin: 0; - padding: 0; - opacity: .5; + opacity: 0.5; - &[iconName="cross"] { - @include icon(16px); - top: -3px; + &:hover { + opacity: 0.8; } } } .inputs { margin-bottom: 0; - text-align: right; + text-align: end; - .action-button-cancel { - @include peertube-button; - @include tertiary-button; - - display: inline-block; - margin-right: 10px; + > *:not(:first-child) { + @include margin-left(10px); } + } +} + + +// On desktop browsers, make the content and header horizontally sticked to right not move when modal open and close +.modal-open { + overflow-y: scroll !important; // Make sure vertical scroll bar is always visible on desktop browsers to get disabled scrollbar effect + width: 100vw; // Make sure the content fits all the available width +} - .action-button-submit { - @include peertube-button; - @include orange-button; +// On touchscreen devices, simply overflow: hidden to avoid detached overlay on scroll +@media (hover: none) and (pointer: coarse) { + .modal-open, + .menu-open { + overflow: hidden !important; + } + + // On touchscreen devices display content overlay when opened menu + .menu-open { + .main-col { + &::before { + background-color: #000; + width: 100vw; + height: 100vh; + opacity: 0.75; + content: ''; + display: block; + position: fixed; + z-index: z(overlay); + } } } } -// Nav customizations +// --------------------------------------------------------------------------- +// Nav +// --------------------------------------------------------------------------- + .nav .nav-link { display: flex !important; align-items: center; height: 30px !important; - padding: 10px 15px !important; } .nav.nav-pills { font-size: 16px !important; + font-weight: $font-semibold !important; + + .nav-link { + opacity: 0.7 !important; - .nav-link.active { - font-weight: $font-semibold !important; + &.active, + &:hover, + &:active, + &:focus { + opacity: 1 !important; + } } a { @include disable-default-a-behaviour; - color: var(--mainForegroundColor); + color: pvar(--mainForegroundColor); } } -.nav-tabs { +.nav-tabs .nav-link { + @include disable-default-a-behaviour; - .nav-link { - @include disable-default-a-behaviour; + color: pvar(--mainForegroundColor); + font-weight: $font-semibold; + border: 0; + border-bottom: 2px solid transparent; + opacity: 0.7; - color: var(--mainForegroundColor) !important; - } -} - -.nav-tabs .nav-link { - &:not(.active) { - border-bottom: 3px solid transparent; - } &.active { - font-weight: $font-semibold; - background-color: var(--mainBackgroundColor) !important; - border: none; - border-bottom: 2px solid var(--mainColor); + color: pvar(--mainForegroundColor); + background-color: pvar(--mainBackgroundColor) !important; + border-bottom-color: pvar(--mainColor); } - &:hover { - border-top-color: transparent; - border-left-color: transparent; - border-right-color: transparent; + + &.active, + &:hover, + &:active, + &:focus { + opacity: 1; } } +// --------------------------------------------------------------------------- +// Card, collapse and accordion +// --------------------------------------------------------------------------- + .card { - background-color: var(--mainBackgroundColor); + background-color: pvar(--mainBackgroundColor); border-color: #dee2e6; } -.collapse-transition { - // Animation when we show/hide the filters - transition: max-height 0.3s; - display: block !important; - overflow: hidden !important; - max-height: 0; - - &.show { - max-height: 1500px; - } -} +.accordion-button { + font-size: 18px; -.dropdown-divider { - margin: 0.3rem 0; -} - -ngb-modal-backdrop { - z-index: z(modal) - 1 !important; -} + &:not(.collapsed) { + font-weight: $font-bold; -ngb-modal-window { - z-index: z(modal) !important; + my-global-icon { + color: pvar(--mainColorLighter); + } + } } -ngb-popover-window { - z-index: z(popover) !important; -} +// --------------------------------------------------------------------------- +// Buttons & form controls +// --------------------------------------------------------------------------- -ngb-tooltip-window { - z-index: z(tooltip) !important; +.btn:not(.btn-sm) { + font-size: $button-font-size; + line-height: 1.2; } .btn-outline-secondary { - border-color: $input-border-color; + border-color: pvar(--inputBorderColor); &:focus-within, &:focus, @@ -233,35 +292,92 @@ ngb-tooltip-window { } } -.btn-outline-tertiary { - color: var(--secondaryColor); - border-color: var(--secondaryColor); +.btn-group.select-button { + font-weight: $font-semibold; - &:focus-within, - &:focus, - &:hover { - color: var(--mainBackgroundColor); - background-color: var(--secondaryColor); + .active { + @include orange-button; + } + + :not(.active) { + @include grey-button; + } + + > * { + @include peertube-button-link; + + box-shadow: none !important; + + &:not(:first-child) { + border-top-left-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + + &:not(:last-child) { + border-top-right-radius: 0 !important; + border-bottom-right-radius: 0 !important; + } } } -// input box-shadow on focus .form-control { - font-size: 15px; - color: var(--mainForegroundColor); - background-color: var(--inputBackgroundColor); + color: pvar(--mainForegroundColor); + background-color: pvar(--inputBackgroundColor); outline: none; +} - &:focus-within, - &:focus { - box-shadow: #{$focus-box-shadow-form} var(--mainColorLightest); +.input-group { + > .btn, + > .input-group-text { + padding-top: 4px; + padding-bottom: 4px; + } + + > .input-group-text { + line-height: normal; + opacity: 0.9; + } - &.input-error { - box-shadow: #{$focus-box-shadow-form} #{scale-color($red, $alpha: -75%)}; + .input-group-text > .dropdown-toggle { + display: flex; + } +} + +.input-group, +.btn-group { + .last-in-group { + border-top-right-radius: 3px !important; + border-bottom-right-radius: 3px !important; + } +} + +.has-clear { + input { + @include padding-right(1.5rem !important); + } + + .form-control-clear { + display: flex; + justify-content: center; + align-items: center; + height: 95%; + font-size: 14px; + position: absolute; + right: .5rem; + opacity: 0.4; + + &:hover { + opacity: 0.7; + cursor: pointer; } } + + input:placeholder-shown + .form-control-clear { + display: none; + } } -.input-group > .form-control { - flex: initial; +.text-truncate { + // Prevent invalid height in parent: https://stackoverflow.com/a/22425601 + vertical-align: top; }