]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/pybind/mgr/dashboard/frontend/src/styles.scss
import 15.2.4
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / styles.scss
index f3c27494fb8d53248cc5189128e511ac3110f243..bb883e43ec0126abc01e14a55f3d529062eaa62e 100644 (file)
@@ -1,10 +1,56 @@
 /* You can add global styles to this file, and also import other style files */
-
 @import 'defaults';
-$fa-font-path: '../node_modules/fork-awesome/fonts';
-@import '../node_modules/fork-awesome/scss/fork-awesome';
-$font_family_1: 'ForkAwesome';
+
+// Angular2-Tree Component
+@import '~angular-tree-component/dist/angular-tree-component.css';
+
+// Fork-Awesome
+$fa-font-path: '~fork-awesome/fonts';
+$font-family-icon: 'ForkAwesome';
+
+// Bootstrap
+$theme-colors: (
+  'primary': $color-primary,
+  'secondary': $color-accent,
+  'dark': $color-mild-gray
+);
+
+$font-family-sans-serif: 'Helvetica Neue', Helvetica, Arial, 'Noto Sans', sans-serif,
+  'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
+
+$badge-font-size: 1rem;
+$form-feedback-font-size: 100%;
+$popover-max-width: 350px;
+
+@import '~bootstrap/scss/bootstrap';
+@import '~fork-awesome/scss/fork-awesome';
 @import 'app/ceph/dashboard/info-card/info-card-popover.scss';
+@import 'bootstrap-extends';
+
+/* Reset checkbox success color */
+.was-validated .custom-control-input:valid,
+.custom-control-input.is-valid {
+  ~ .custom-control-label {
+    color: initial;
+  }
+
+  &:checked ~ .custom-control-label::before {
+    border-color: $custom-control-indicator-checked-border-color;
+    background-color: $component-active-bg;
+  }
+
+  ~ .custom-control-label::before {
+    border-color: $custom-control-indicator-border-color;
+  }
+
+  &:focus ~ .custom-control-label::before {
+    box-shadow: $custom-control-indicator-focus-box-shadow;
+  }
+
+  &:focus:not(:checked) ~ .custom-control-label::before {
+    border-color: $custom-control-indicator-focus-border-color;
+  }
+}
 
 /* Basics */
 html {
@@ -16,14 +62,6 @@ body {
   height: 100%;
   font-size: 12px;
 }
-a {
-  color: $color-links;
-  cursor: pointer;
-}
-a:hover,
-a:focus {
-  color: $color-links-focus;
-}
 h1 {
   letter-spacing: -1px;
   font-size: 2em;
@@ -45,18 +83,21 @@ option {
   font-weight: normal;
   font-style: normal;
 }
-/* For awesome-bootstrap-checkbox */
-.checkbox input[type='checkbox']:checked + label:after {
-  font-family: $font_family_1;
-}
-/*******/
+
 .full-height {
-  height: 100%;
+  height: 100vh;
+}
+.full-width {
+  width: 100vw;
 }
 .vertical-align {
   display: flex;
   align-items: center;
 }
+.horizontal-align {
+  display: flex;
+  justify-content: center;
+}
 .loading {
   position: absolute;
   top: 50%;
@@ -81,8 +122,28 @@ option {
 .text-monospace {
   font-family: monospace;
 }
+.text-pre {
+  white-space: pre-wrap;
+}
 
 /* Buttons */
+.btn-light {
+  background-color: $color-solid-white !important;
+  border-color: $color-input-border !important;
+
+  &:hover {
+    background-color: $color-soft-gray !important;
+    border-color: $color-input-border-hover !important;
+  }
+}
+
+// We have some inputs that don't have a corresponding formControlName,
+// to be able to get the same styling and no JS errors we need use a different
+// class name
+.cd-form-control {
+  @extend .form-control;
+}
+
 .btn {
   &,
   &:active,
@@ -93,67 +154,14 @@ option {
     }
   }
 }
-.btn-primary {
-  color: $color-button-text;
-  background-color: $color-accent;
-  border-color: $color-accent;
-  border-radius: $button-radius;
-}
-.btn-primary:hover,
-.btn-primary:focus,
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  color: $color-button-text;
-  background-color: lighten($color-accent, 10);
-  border-color: lighten($color-accent, 10);
-}
-.btn-primary:active,
-.btn-primary.active,
-.open .dropdown-toggle.btn-primary {
-  background-image: none;
-
-  &:hover,
-  &:focus {
-    background-color: lighten($color-accent, 10);
-    border-color: lighten($color-accent, 10);
-  }
-}
-.btn-primary.disabled,
-.btn-primary[disabled],
-fieldset[disabled] .btn-primary,
-.btn-primary.disabled:hover,
-.btn-primary[disabled]:hover,
-fieldset[disabled] .btn-primary:hover,
-.btn-primary.disabled:focus,
-.btn-primary[disabled]:focus,
-fieldset[disabled] .btn-primary:focus,
-.btn-primary.disabled:active,
-.btn-primary[disabled]:active,
-fieldset[disabled] .btn-primary:active,
-.btn-primary.disabled.active,
-.btn-primary[disabled].active,
-fieldset[disabled] .btn-primary.active {
-  background-color: $color-accent;
-  border-color: $color-accent;
-}
 .btn-primary .badge {
   color: $color-primary;
   background-color: $color-button-badge;
 }
-.btn-primary .caret {
-  color: $color-button-caret;
-}
-.btn-default {
-  border-radius: $button-radius;
-}
-.form-group .btn-default {
-  border-radius: 4px;
-}
 .btn-group > .btn > i.fa,
-button.btn.btn-label > i.fa {
+.cd-datatable-actions button.btn i.fa {
   /** Add space between icon and text */
-  padding-right: 5px;
+  margin-right: 5px;
 }
 
 /* Dropdown */
@@ -167,7 +175,7 @@ button.btn.btn-label > i.fa {
 }
 .dropdown-menu > li > a > i.fa {
   /** Add space between icon and text */
-  padding-right: 5px;
+  margin-right: 5px;
 }
 .dropdown-menu > .active > a {
   color: $color-dropdown-active-text;
@@ -179,15 +187,15 @@ button.btn.btn-label > i.fa {
     background-color: darken($color-dropdown-active-bg, 10);
   }
 }
-.dataTables_wrapper .dropdown-menu > li.divider {
+.dataTables_wrapper .dropdown-menu > li.dropdown-divider {
   cursor: auto;
 }
 
 /* Grid */
 .container,
 .container-fluid {
-  padding-left: 30px;
-  padding-right: 30px;
+  padding-left: 30px !important;
+  padding-right: 30px !important;
 }
 .row {
   margin-left: -30px;
@@ -229,72 +237,45 @@ button.btn.btn-label > i.fa {
 .col-sm-7,
 .col-sm-8,
 .col-sm-9,
-.col-xs-1,
-.col-xs-10,
-.col-xs-11,
-.col-xs-12,
-.col-xs-2,
-.col-xs-3,
-.col-xs-4,
-.col-xs-5,
-.col-xs-6,
-.col-xs-7,
-.col-xs-8,
-.col-xs-9 {
+.col-1,
+.col-10,
+.col-11,
+.col-12,
+.col-2,
+.col-3,
+.col-4,
+.col-5,
+.col-6,
+.col-7,
+.col-8,
+.col-9 {
   padding-left: 30px;
   padding-right: 30px;
 }
-/* Caret */
-.caret {
-  color: $color-caret-text;
-}
-/* Progressbar */
-.progress-bar {
-  background-image: none !important;
-}
-.progress-bar-info {
-  background-color: $color-progress-bar-info-bg;
-}
-.progress-bar-freespace {
-  background-color: $color-progress-bar-freespace-bg;
-}
-.oaprogress {
-  position: relative;
-  margin-bottom: 0;
-}
-.oaprogress div.progress-bar {
-  position: static;
-}
-.oaprogress span {
-  position: absolute;
-  display: block;
-  width: 100%;
-  color: $color-oaprogress-text;
-  font-weight: normal;
-}
 tags-input .tags {
   border-radius: 4px;
   border: 1px solid $color-tags-border;
   box-shadow: inset 0 1px 1px $color-tags-box-shadow;
 }
-uib-accordion .panel-title,
-.panel .accordion-title {
+uib-accordion .card-title,
+.card .accordion-title {
   font-size: 14px !important;
 }
-.panel-body h2:first-child {
-  margin-top: 0;
+.card-header {
+  font-size: 1.3em;
 }
-.pull-left {
-  float: left;
+.card-body h2:first-child {
+  margin-top: 0;
 }
 .disabled {
   pointer-events: none;
 }
-.clickable {
+.clickable,
+a {
   cursor: pointer;
 }
-.has-error .has-error-btn,
-.has-error .has-error-btn:disabled:hover {
+:invalid .has-error-btn,
+:invalid .has-error-btn:disabled:hover {
   background-color: $color-error-btn-bg;
   border-color: $color-error-btn-border;
 }
@@ -305,18 +286,19 @@ uib-accordion .panel-title,
 .noscript p {
   color: $color-noscript-text;
 }
-.required {
-  color: $color-required-text;
-}
 /* Forms */
-.form-group > .control-label > span.required {
-  @extend .fa;
-  @extend .fa-asterisk;
-  @extend .required;
-  font-size: 6px;
+.required::after {
+  color: $color-required-text;
+  content: '*';
+  font-size: 14px;
   padding-left: 4px;
-  vertical-align: text-top;
 }
+
+.form-footer {
+  width: 100%;
+  display: flex;
+}
+
 .form-control {
   display: table-cell;
 
@@ -326,17 +308,58 @@ uib-accordion .panel-title,
     box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px 2px rgba($color-primary, 0.5);
   }
 }
-/* Panel */
-.panel-footer button.btn:not(:first-child) {
+
+.custom-checkbox {
+  padding-top: 7px;
+}
+
+.cd-col-form {
+  @extend .col-12;
+  @extend .col-lg-8;
+  @extend .col-xl-6;
+}
+
+.cd-col-form-label {
+  @extend .col-form-label;
+  @extend .col-sm-4;
+  @extend .col-md-4;
+  @extend .col-lg-3;
+}
+
+.cd-col-form-input {
+  @extend .col-sm-8;
+  @extend .col-md-8;
+  @extend .col-lg-9;
+}
+
+.cd-col-form-offset {
+  @extend .offset-sm-4;
+  @extend .offset-lg-3;
+  @extend .cd-col-form-input;
+}
+
+cd-modal {
+  .cd-col-form-label {
+    @extend .col-lg-4;
+  }
+
+  .cd-col-form-input {
+    @extend .col-lg-8;
+  }
+
+  .cd-col-form-offset {
+    @extend .offset-lg-4;
+  }
+}
+
+/* Card */
+.card-footer button.btn:not(:first-child) {
   margin-left: 5px;
 }
 /* Modal dialog */
 .modal-footer button.btn:not(:first-child) {
   margin-left: 5px;
 }
-.margin-right-sm {
-  margin-right: 10px;
-}
 .nav-tabs {
   margin-bottom: 15px;
 }
@@ -349,7 +372,7 @@ uib-accordion .panel-title,
 }
 .custom-icon {
   padding: 10px;
-  margin-right: 1em;
+  margin-right: 8px;
   background-clip: padding-box;
   background-size: contain;
   background-repeat: no-repeat;
@@ -368,12 +391,6 @@ uib-accordion .panel-title,
   background: $color-transparent-black !important;
 }
 
-h3.page-header {
-  margin-left: 1em;
-  margin-top: 1em;
-  border-color: #f0f0f0;
-}
-
 .tooltip-wide .tooltip-inner {
   width: 400px;
 }
@@ -384,3 +401,106 @@ h3.page-header {
   color: #333;
   font-size: 1.1em;
 }
+
+.toast-message > ul {
+  padding-left: 1em;
+  margin: 0;
+}
+
+.cd-header,
+legend {
+  @extend .pb-1;
+  @extend .mt-4;
+  @extend .mb-4;
+  @extend .border-bottom;
+}
+
+@include media-breakpoint-up(sm) {
+  .col-form-label {
+    text-align: right;
+  }
+}
+
+.col-form-label {
+  font-weight: 700;
+}
+
+// Firefox is adding a white background-coor in these components
+cd-submit-button {
+  background-color: transparent !important;
+}
+
+// All '.fa' icons will have fixed width
+.fa {
+  @extend .fa-fw;
+}
+
+pre {
+  @extend .card;
+  @extend .bg-light;
+  @extend .p-2;
+  // @extend my-2;
+}
+
+bfv-messages {
+  display: none;
+}
+
+// Display error message in 'input-group' form fields.
+// https://github.com/twbs/bootstrap/issues/23454
+// https://github.com/adrianhurt/play-bootstrap/issues/118
+.form-group.has-error .invalid-feedback {
+  display: block;
+}
+
+//Displaying the password strength
+.password-strength-level {
+  flex: 100%;
+  margin-top: 2px;
+  .weak,
+  .ok,
+  .strong,
+  .very-strong {
+    border-radius: 0.25rem;
+    height: 13px;
+  }
+
+  .weak {
+    width: 25%;
+    background: $color-solid-red;
+  }
+  .ok {
+    width: 50%;
+    background: $color-bright-yellow;
+  }
+  .strong {
+    width: 75%;
+    background: $color-bright-green;
+  }
+  .very-strong {
+    width: 100%;
+    background: $color-green;
+  }
+}
+
+// Custom badges.
+.badge-hdd {
+  color: $color-solid-white;
+  background-color: $color-blue-gray;
+}
+.badge-ssd {
+  color: $color-solid-white;
+  background-color: $color-blue;
+}
+.badge-tab {
+  color: $color-solid-gray;
+  background-color: $color-light-shade-gray;
+}
+
+// angular-tree-component
+tree-root {
+  tree-viewport {
+    // Fix visual bug when tree is empty
+    min-height: 1em;
+  }
+}