From 6fe26a52dd4ffb5a80f0abcee9b39f3f52891c11 Mon Sep 17 00:00:00 2001 From: Chaim Lev-Ari Date: Fri, 1 Jul 2022 04:14:22 +0300 Subject: [PATCH] feat(app): ui additional css class [EE-3594] (#7157) * feat(app): ui additional css class [EE-3594] --- app/assets/css/app.css | 1 + app/assets/css/bootstrap-override.css | 312 ++++++++++++------ app/assets/css/rdash.css | 1 + app/assets/css/theme.css | 5 +- app/assets/css/vendor-override.css | 6 +- app/assets/ico/checked.svg | 5 + app/assets/ico/ldap.svg | 6 + app/assets/ico/microsoft.svg | 6 + app/assets/ico/oauth.svg | 4 + .../views/containers/edit/container.html | 22 +- app/docker/views/dashboard/dashboard.html | 5 +- app/global.d.ts | 4 + .../components/datatables/datatable.css | 4 +- .../components/widget/rd-widget-title.ts | 2 +- .../EnvironmentList.module.css | 1 + .../home/EnvironmentList/EnvironmentList.tsx | 10 +- .../KubeconfigButton.module.css | 3 + .../KubeconfigButton/KubeconfigButton.tsx | 7 +- .../PasswordLengthSlider.module.css | 2 +- .../views/settings/authentication/options.tsx | 37 +++ .../settingsAuthentication.html | 5 +- .../settingsAuthenticationController.js | 9 +- app/portainer/views/templates/templates.html | 9 +- .../components/BoxSelector/BoxSelector.css | 31 ++ .../BoxSelector/BoxSelector.module.css | 1 + .../BoxSelector/BoxSelectorItem.css | 63 ++-- .../BoxSelector/BoxSelectorItem.tsx | 8 +- app/react/components/BoxSelector/types.ts | 6 +- .../PageHeader/HeaderTitle.module.css | 9 + .../components/PageHeader/HeaderTitle.tsx | 4 +- .../components/PageHeader/PageHeader.tsx | 6 +- app/react/components/buttons/Button.tsx | 1 + .../form-components/ReactSelect.module.css | 5 +- 33 files changed, 419 insertions(+), 181 deletions(-) create mode 100644 app/assets/ico/checked.svg create mode 100644 app/assets/ico/ldap.svg create mode 100644 app/assets/ico/microsoft.svg create mode 100644 app/assets/ico/oauth.svg create mode 100644 app/portainer/home/EnvironmentList/KubeconfigButton/KubeconfigButton.module.css create mode 100644 app/portainer/views/settings/authentication/options.tsx diff --git a/app/assets/css/app.css b/app/assets/css/app.css index 79f6e68b7..ec8185100 100644 --- a/app/assets/css/app.css +++ b/app/assets/css/app.css @@ -90,6 +90,7 @@ body, margin-bottom: 15px; color: var(--text-form-section-title-color); padding-left: 0; + font-weight: 500; } .form-horizontal .control-label.text-left { diff --git a/app/assets/css/bootstrap-override.css b/app/assets/css/bootstrap-override.css index 0786def1b..33b118000 100644 --- a/app/assets/css/bootstrap-override.css +++ b/app/assets/css/bootstrap-override.css @@ -1,14 +1,45 @@ -/* Main Color UI Override*/ +/* Label, Section Title */ + +.control-label { + color: var(--ui-gray-7); + font-weight: 500; +} + +.form-section-title { + color: var(--ui-gray-9); + font-size: 16px; +} + +.vertical-center { + display: inline-flex; + align-items: center; + gap: 5px; +} .blue { background: var(--bg-dashboard-item) !important; } -/* Button */ .btn { border-radius: 5px; + display: inline-flex; + justify-content: space-around; + gap: 5px; +} + +pr-icon { + display: inline-block; +} + +.btn.active { + box-shadow: none; +} + +.form-control { + border-radius: 5px; } +/* Button Primary */ .btn-primary { background-color: var(--ui-blue-8); } @@ -16,7 +47,19 @@ .btn-primary:hover, .btn-primary:focus, .btn-primary:active .active { - background-color: var(--ui-blue-2); + background-color: var(--ui-blue-9); +} + +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-color: var(--ui-blue-9); +} + +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + background-color: var(--ui-blue-8); } .btn-danger { @@ -27,6 +70,69 @@ background-color: var(--ui-success-7); } +.btn-dangerlight { + background-color: var(--ui-error-2) !important; + border: 1px solid var(--border-button-group); + color: var(--ui-error-8); +} + +.btn-dangerlight:hover { + color: var(--ui-error-9) !important; + background-color: var(--ui-error-3) !important; +} + +.btn-light { + background-color: var(--bg-button-group); + border: 1px solid var(--border-button-group); + color: var(--text-button-group); +} + +.btn-light:hover { + background-color: var(--ui-gray-2) !important; +} + +.btn-light:active, +.btn-light.active, +.open > .dropdown-toggle.btn-light { + background-color: var(--ui-gray-3); +} + +/* Button Secondary */ +.btn-secondary { + background-color: var(--ui-blue-2); + border: 1px solid var(--ui-blue-8); + color: var(--ui-blue-9); +} + +.btn-secondary:hover, +.btn-secondary:focus, +.btn-secondary:active .active { + background-color: var(--ui-blue-3) !important; + color: var(--ui-blue-9) !important; +} + +.btn-secondary:disabled { + background-color: var(--ui-blue-1); + border: 1px solid var(--ui-blue-1); + color: var(--ui-blue-5); +} + +/* Input Group Addon */ +.input-group-addon:first-child { + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; +} + +.input-group .form-control:not(:first-child):not(:last-child) { + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; +} + +.input-group-btn:last-child .btn { + margin-left: 5px; + border-radius: 5px; +} + /* Toggle switch */ .switch { position: relative; @@ -41,6 +147,10 @@ height: 0; } +.switch input[type='checkbox']:disabled + .slider { + background-color: var(--ui-gray-3); +} + /* Toggle */ .slider { @@ -196,6 +306,7 @@ input:checked + .slider:before { .toolBar > .settings { width: 60px; + text-align: right; } .datatable .toolBar .settings { @@ -212,48 +323,6 @@ input:checked + .slider:before { border-top: 1px solid var(--border-table-color); } -/* Button Group */ -.input-group-addon:first-child { - border-top-left-radius: 5px; - border-bottom-left-radius: 5px; -} - -.input-group .form-control:not(:first-child):not(:last-child) { - border-top-right-radius: 5px; - border-bottom-right-radius: 5px; -} - -.input-group-btn:last-child .btn { - margin-left: 5px; - border-radius: 5px; -} - -.form-control { - border-radius: 5px; -} - -.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { - background-color: var(--bg-button-group); - border: 1px solid var(--border-button-group); - color: var(--text-button-group); -} - -.btn-group .btn-light { - background-color: var(--bg-button-group); - border: 1px solid var(--border-button-group); - color: var(--text-button-group); -} - -.btn-group .btn-dangerlight { - background-color: var(--ui-error-2); - border: 1px solid var(--border-button-group); - color: var(--ui-error-8); -} - -.btn.active { - box-shadow: none; -} - /* Toaster */ #toast-container > .toast-success { @@ -375,33 +444,6 @@ input:checked + .slider:before { border: 0px; } -/* Boxselector */ - -.boxselector_wrapper input[type='radio']:checked + label, -.box-selector-item input[type='radio']:checked + label { - background: var(--ui-blue-3) !important; - color: black !important; - border-radius: 8px; - border-color: var(--ui-blue-7); - padding: 15px; - box-shadow: none; -} - -.boxselector_wrapper input[type='radio']:not(:disabled) + label, -.box-selector-item input[type='radio']:not(:disabled) + label { - background: var(--ui-gray-2); - color: var(--black-color) !important; - border-radius: 8px; - border-color: var(--ui-gray-5); - padding: 15px; - box-shadow: none; -} - -.row.header { - background-color: var(--bg-body-color) !important; - margin-bottom: 5px !important; -} - /* Databatle Setting Menu */ .tableMenu { @@ -421,48 +463,112 @@ input:checked + .slider:before { border: 0px; } -/* Myaccount Dropdown Menu */ - -.myaccount-dropdown { - color: var(--text-body-color); - font-size: 17px; -} - -.myaccount-container { - margin-top: -25px; -} - -.myaccount-icon { - padding-left: 8px; -} - -.myaccount-link { - display: inline; - border: 0px; - background: none; - padding: 10px 0px; -} - -/* Status Indicator Label Style */ -.label { +/* Status Indicator Inside Table Section Label Style */ +.table .label { border-radius: 8px !important; } -.label-danger { +.table .label .label-danger { background-color: var(--ui-error-8); } -.label-success { +.table .label .label-success { background-color: var(--ui-success-7); } -/* Feather Icon */ +/* Feather Icon Variants */ .feather { + display: block; + color: var(--text-body-color); height: 18px; width: 18px; - position: relative; - top: 3px; - margin-right: 5px; - color: var(--text-body-color); +} + +.icon-xs { + height: 10px; + width: 10px; +} + +.icon-sm { + height: 14px; + width: 14px; +} + +.icon-md { + height: 16px; + width: 16px; +} + +.icon-lg { + height: 22px; + width: 22px; +} + +.icon-xl { + height: 26px; + width: 26px; +} + +.icon-primary { + color: var(--ui-blue-8); +} + +.icon-white { + color: var(--white-color); +} + +.icon-dark { + color: var(--ui-black); +} + +.icon-secondary { + color: var(--ui-gray-8); +} + +.icon-warning { + color: var(--ui-warning-8); +} + +.icon-danger { + color: var(--ui-error-8); +} + +.icon-success { + color: var(--ui-success-6); +} + +.icon-nested-gray { + width: 18px; + height: 18px; + height: 30px; + width: 30px; + padding: 5px; + text-align: center; + border-radius: 50%; + background-color: var(--ui-gray-4); + margin-right: 5px; +} + +.icon-nested-blue { + width: 18px; + height: 18px; + height: 30px; + width: 30px; + padding: 5px; + text-align: center; + border-radius: 50%; + background-color: var(--ui-blue-3); + margin-right: 5px; +} + +.icon-container { + display: flex; + align-items: center; +} +/* Required Label with asterisk */ + +.required:after { + content: '*'; + color: var(--ui-error-9); } diff --git a/app/assets/css/rdash.css b/app/assets/css/rdash.css index fd7b8dc15..6c2158f65 100644 --- a/app/assets/css/rdash.css +++ b/app/assets/css/rdash.css @@ -98,6 +98,7 @@ div.input-mask { color: var(--text-widget-header-color); padding: 10px 15px; line-height: 30px; + font-weight: 500; } .widget .widget-header i { margin-right: 5px; diff --git a/app/assets/css/theme.css b/app/assets/css/theme.css index 39ad33396..2fdb76430 100644 --- a/app/assets/css/theme.css +++ b/app/assets/css/theme.css @@ -165,8 +165,7 @@ --text-main-color: var(--grey-7); --text-body-color: var(--grey-6); - --text-sidebar-title-color: var(--blue-3); - --text-widget-header-color: var(--grey-7); + --text-widget-header-color: var(--ui-gray-11); --text-form-control-color: var(--grey-25); --text-muted-color: var(--grey-26); --text-link-color: var(--blue-2); @@ -346,7 +345,6 @@ --text-main-color: var(--white-color); --text-body-color: var(--white-color); - --text-sidebar-title-color: var(--grey-8); --text-widget-header-color: var(--white-color); --text-form-control-color: var(--white-color); --text-muted-color: var(--grey-8); @@ -526,7 +524,6 @@ --text-main-color: var(--white-color); --text-body-color: var(--white-color); - --text-sidebar-title-color: var(--grey-8); --text-widget-header-color: var(--white-color); --text-link-color: var(--blue-9); --text-link-hover-color: var(--blue-9); diff --git a/app/assets/css/vendor-override.css b/app/assets/css/vendor-override.css index 5ff5823fc..6affc9333 100644 --- a/app/assets/css/vendor-override.css +++ b/app/assets/css/vendor-override.css @@ -53,7 +53,7 @@ a:focus { } .text-danger { - color: var(--text-danger-color); + color: var(--ui-error-9); } .table .table { @@ -373,6 +373,10 @@ input:-webkit-autofill { color: var(--white-color); } +.btn-success:hover { + color: var(--white-color); +} + /* Overide Vendor CSS */ .btn.disabled, diff --git a/app/assets/ico/checked.svg b/app/assets/ico/checked.svg new file mode 100644 index 000000000..300b53609 --- /dev/null +++ b/app/assets/ico/checked.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/app/assets/ico/ldap.svg b/app/assets/ico/ldap.svg new file mode 100644 index 000000000..4ce73f712 --- /dev/null +++ b/app/assets/ico/ldap.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/assets/ico/microsoft.svg b/app/assets/ico/microsoft.svg new file mode 100644 index 000000000..d98b1d29d --- /dev/null +++ b/app/assets/ico/microsoft.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/assets/ico/oauth.svg b/app/assets/ico/oauth.svg new file mode 100644 index 000000000..8a5a83e02 --- /dev/null +++ b/app/assets/ico/oauth.svg @@ -0,0 +1,4 @@ + + + + diff --git a/app/docker/views/containers/edit/container.html b/app/docker/views/containers/edit/container.html index db15c87c1..141df4fbd 100644 --- a/app/docker/views/containers/edit/container.html +++ b/app/docker/views/containers/edit/container.html @@ -11,18 +11,20 @@ >
- +
- - - + + + diff --git a/app/docker/views/dashboard/dashboard.html b/app/docker/views/dashboard/dashboard.html index dc4d59c42..a249f1597 100644 --- a/app/docker/views/dashboard/dashboard.html +++ b/app/docker/views/dashboard/dashboard.html @@ -1,7 +1,4 @@ - - - Environment summary - +
diff --git a/app/global.d.ts b/app/global.d.ts index e36d93422..a19a91e56 100644 --- a/app/global.d.ts +++ b/app/global.d.ts @@ -5,6 +5,10 @@ declare module '*.png' { export default '' as string; } +declare module '*.svg' { + export default '' as string; +} + type SvgrComponent = React.StatelessComponent>; declare module '*.svg?c' { diff --git a/app/portainer/components/datatables/datatable.css b/app/portainer/components/datatables/datatable.css index ac2115524..9a417025d 100644 --- a/app/portainer/components/datatables/datatable.css +++ b/app/portainer/components/datatables/datatable.css @@ -12,6 +12,8 @@ .datatable .toolBar .toolBarTitle { float: left; margin: 5px 0 0 10px; + color: var(--text-widget-header-color); + font-weight: 500; } .datatable .toolBar .settings { @@ -37,7 +39,7 @@ .datatable .searchInput { background: none; border: none; - width: 95%; + width: 90%; } .datatable .searchIcon { diff --git a/app/portainer/components/widget/rd-widget-title.ts b/app/portainer/components/widget/rd-widget-title.ts index 84638d00f..b13ab13a5 100644 --- a/app/portainer/components/widget/rd-widget-title.ts +++ b/app/portainer/components/widget/rd-widget-title.ts @@ -12,7 +12,7 @@ export const rdWidgetTitle = { template: `
- + {{ $ctrl.titleText }} diff --git a/app/portainer/home/EnvironmentList/EnvironmentList.module.css b/app/portainer/home/EnvironmentList/EnvironmentList.module.css index d7dd62b5f..daadd8b52 100644 --- a/app/portainer/home/EnvironmentList/EnvironmentList.module.css +++ b/app/portainer/home/EnvironmentList/EnvironmentList.module.css @@ -9,6 +9,7 @@ .refresh-environments-button { margin-left: 0 !important; + padding: 8px 15px; } .filter-container { diff --git a/app/portainer/home/EnvironmentList/EnvironmentList.tsx b/app/portainer/home/EnvironmentList/EnvironmentList.tsx index fb89f6c94..55964fb56 100644 --- a/app/portainer/home/EnvironmentList/EnvironmentList.tsx +++ b/app/portainer/home/EnvironmentList/EnvironmentList.tsx @@ -1,5 +1,6 @@ import { ReactNode, useEffect, useState } from 'react'; import clsx from 'clsx'; +import { RefreshCcw } from 'react-feather'; import { usePaginationLimitState } from '@/portainer/hooks/usePaginationLimitState'; import { @@ -287,10 +288,13 @@ export function EnvironmentList({ onClickItem, onRefresh }: Props) {