ffd16dfec6
* 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
178 lines
3.3 KiB
SCSS
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;
|
|
}
|
|
}
|
|
}
|