open-nomad/ui/app/styles/core/navbar.scss
Phil Renaud ffd16dfec6
[ui, epic] SSO and Auth improvements (#15110)
* Top nav auth dropdown (#15055)

* Basic dropdown styles

* Some cleanup

* delog

* Default nomad hover state styles

* Component separation-of-concerns and acceptance tests for auth dropdown

* lintfix

* [ui, sso] Handle token expiry 500s (#15073)

* Handle error states generally

* Dont direct, just redirect

* no longer need explicit error on controller

* Redirect on token-doesnt-exist

* Forgot to import our time lib

* Linting on _blank

* Redirect tests

* changelog

* [ui, sso] warn user about pending token expiry (#15091)

* Handle error states generally

* Dont direct, just redirect

* no longer need explicit error on controller

* Linting on _blank

* Custom notification actions and shift the template to within an else block

* Lintfix

* Make the closeAction optional

* changelog

* Add a mirage token that will always expire in 11 minutes

* Test for token expiry with ember concurrency waiters

* concurrency handling for earlier test, and button redirect test

* [ui] if ACLs are disabled, remove the Sign In link from the top of the UI (#15114)

* Remove top nav link if ACLs disabled

* Change to an enabled-by-default model since you get no agent config when ACLs are disabled but you lack a token

* PR feedback addressed; down with double negative conditionals

* lintfix

* ember getter instead of ?.prop

* [SSO] Auth Methods and Mock OIDC Flow (#15155)

* Big ol first pass at a redirect sign in flow

* dont recursively add queryparams on redirect

* Passing state and code qps

* In which I go off the deep end and embed a faux provider page in the nomad ui

* Buggy but self-contained flow

* Flow auto-delay added and a little more polish to resetting token

* secret passing turned to accessor passing

* Handle SSO Failure

* General cleanup and test fix

* Lintfix

* SSO flow acceptance tests

* Percy snapshots added

* Explicitly note the OIDC test route is mirage only

* Handling failure case for complete-auth

* Leentfeex

* Tokens page styles (#15273)

* styling and moving columns around

* autofocus and enter press handling

* Styles refined

* Split up manager and regular tests

* Standardizing to a binary status state

* Serialize auth-methods response to use "name" as primary key (#15380)

* Serializer for unique-by-name

* Use @classic because of class extension
2022-11-28 10:44:52 -05:00

178 lines
3.3 KiB
SCSS

.navbar {
display: flex;
align-items: center;
&.is-primary {
background: linear-gradient(
to right,
$nomad-green-darker,
$nomad-green-dark
);
height: 3.5rem;
color: $primary-invert;
padding-left: 20px;
padding-right: 20px;
overflow: hidden;
align-items: center;
justify-content: space-between;
.navbar-item {
color: rgba($primary-invert, 0.8);
text-decoration: none;
&:hover {
color: $primary-invert;
background: transparent;
}
&.is-active,
&.active {
color: $primary-invert;
border-bottom-color: $primary-invert;
}
+ .navbar-item {
position: relative;
&::before {
width: 1px;
height: 1em;
background: rgba($primary-invert, 0.5);
content: ' ';
display: block;
position: absolute;
left: 0px;
}
}
}
.navbar-brand {
z-index: $z-gutter;
}
.navbar-end {
display: flex;
align-items: stretch;
justify-content: flex-end;
margin-left: inherit;
}
.navbar-end > a.navbar-item {
color: rgba($primary-invert, 0.8);
&:hover {
color: $primary-invert;
background: transparent;
}
}
.navbar-brand > a.navbar-item {
&:hover {
background: transparent;
}
}
}
&.is-secondary {
background-color: $nomad-green-dark;
padding: 1.25rem 20px 1.25rem 0;
height: 4.5rem;
font-weight: $weight-semibold;
color: $primary-invert;
.navbar-item {
font-size: $size-4;
}
}
&.is-popup {
background-color: $nomad-green-dark;
height: 3.5rem;
color: $primary-invert;
padding-left: 20px;
padding-right: 20px;
overflow: hidden;
.navbar-brand {
margin-right: 8px;
}
.navbar-item {
color: white;
.navbar-label {
font-weight: 600;
margin-right: 1rem;
}
}
.navbar-end {
display: flex;
align-items: center;
justify-content: flex-end;
margin-left: inherit;
}
.navbar-end > a.navbar-item {
color: rgba($primary-invert, 0.8);
text-decoration: none;
&:hover {
color: $primary-invert;
background: transparent;
}
}
.navbar-brand > a.navbar-item {
&:hover {
background: transparent;
}
}
}
.navbar-item {
display: flex;
align-items: center;
&.is-gutter {
width: $gutter-width;
display: block;
padding: 0 1rem;
font-size: 1em;
// Unfortunate necessity to middle align an element larger than
// plain text in the subnav.
> * {
margin: -5px 0;
}
@media #{$mq-hidden-gutter} {
display: none;
}
}
}
.profile-dropdown {
padding: 0.5rem 1rem 0.5rem 0.75rem;
background-color: transparent;
border: none !important;
height: auto;
box-shadow: none !important;
&:focus {
background-color: #21a572;
}
.ember-power-select-prefix {
color: rgba($primary-invert, 0.8);
}
.ember-power-select-selected-item {
margin-left: 0;
border: none;
}
.ember-power-select-status-icon {
border-top-color: white;
}
}
}