blob: 0ddc1945784b30f5e5586ce430eba1439090738d [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@import '../../../public/stylesheets/variables';
.theme--ignite {
[ignite-icon='info'], .tipLabel {
color: $ignite-brand-success;
}
.ignite-form-field {
width: 100%;
&.radio--ignite {
width: auto;
}
&.ignite-form-field-dropdown {
.ignite-form-field__control button {
display: inline-block;
overflow: hidden !important;
text-overflow: ellipsis;
}
}
[ignite-icon='info'], .tipLabel {
margin-left: 4px;
flex: 0 0 auto;
}
label.required {
content: '*';
margin-left: 0.25em;
}
.ignite-form-field__control {
width: 100%;
.input-tip {
display: flex;
overflow: visible;
& > input,
& > button {
overflow: visible;
box-sizing: border-box;
width: 100%;
max-width: initial;
height: 36px;
padding: 0 10px;
margin-right: 0;
border: solid 1px #c5c5c5;
border-radius: 4px;
background-color: #ffffff;
box-shadow: inset 0 1px 3px 0 rgba(0, 0, 0, 0.2);
color: $text-color;
line-height: 36px;
&.ng-invalid:not(.ng-pristine),
&.ng-invalid.ng-touched {
border-color: $ignite-brand-primary;
box-shadow: inset 0 1px 3px 0 rgba($ignite-brand-primary, .5);
}
&:focus {
border-color: $ignite-brand-success;
box-shadow: inset 0 1px 3px 0 rgba($ignite-brand-success, .5);
}
&:disabled {
opacity: .5;
}
&:focus {
border-color: $ignite-brand-success;
box-shadow: inset 0 1px 3px 0 rgba($ignite-brand-success, .5);
}
&:disabled {
opacity: .5;
}
}
& > input[type='number'] {
text-align: left;
}
}
.tipField {
line-height: 36px;
}
}
}
.ignite-form-field__label {
float: left;
width: 100%;
margin: 0 0 2px;
padding: 0 10px;
height: 16px;
display: inline-flex;
align-items: center;
color: $gray-light;
font-size: 12px;
line-height: 12px;
&-disabled {
opacity: 0.5;
}
}
.ignite-form-field__errors {
color: $ignite-brand-primary;
padding: 5px 10px 0;
line-height: 14px;
font-size: 12px;
clear: both;
&:empty {
display: none;
}
[ng-message] + [ng-message] {
margin-top: 10px;
}
}
@keyframes error-pulse {
from {
color: $ignite-brand-primary;
}
50% {
color: transparent;
}
to {
color: $ignite-brand-primary;
}
}
.ignite-form-field__error-blink {
.ignite-form-field__errors {
animation-name: error-pulse;
animation-iteration-count: 2;
animation-duration: 500ms;
}
}
.ignite-form-field.form-field-checkbox {
input[disabled] ~ * {
opacity: 0.5;
}
}
}
.form-field {
position: relative;
width: 100%;
&__label {
display: flex;
margin: 0 0 4px;
color: #424242;
font-size: 14px;
line-height: 1.25;
.icon-help {
line-height: 14px;
}
&.required:after {
content: '';
}
i {
font-style: normal;
color: $gray-light;
}
svg {
flex: 0 0 auto;
margin-left: 4px;
}
[ignite-icon='info'] {
position: relative;
top: 1px;
color: $ignite-brand-success;
}
}
&__control {
overflow: visible;
display: flex;
flex-direction: row;
width: 100%;
& > input::placeholder,
& > button.select-toggle.placeholder {
color: rgba(66, 66, 66, 0.5);
text-align: left;
}
& > input,
& > button:not(.btn-ignite) {
outline: none;
overflow: visible;
box-sizing: border-box;
width: 100%;
max-width: initial;
min-width: 0;
height: 36px;
padding: 9px 10px;
margin-right: 0;
border: solid 1px #c5c5c5;
border-radius: 4px;
background-color: #ffffff;
box-shadow: none;
color: $text-color;
font-size: 14px;
text-align: left;
line-height: 16px;
&.ng-invalid:not(.ng-pristine),
&.ng-invalid.ng-touched {
border-color: #c5c5c5;
box-shadow: none;
}
&.ng-invalid:focus,
&:focus {
border-color: $ignite-brand-success;
box-shadow: none;
}
}
&--postfix::after {
content: attr(data-postfix);
display: inline-flex;
align-self: center;
margin-left: 10px;
}
// Added right offset to appearance of input for invalid password
& > input[type='email'].ng-invalid.ng-touched,
& > input[type='text'].ng-invalid.ng-touched,
& > input[type='password'].ng-invalid.ng-touched {
padding-right: 36px;
}
// Added right offset to appearance of dropdown for invalid data
& > button.select-toggle.ng-invalid.ng-touched {
&:after {
right: 36px;
}
}
}
&__control-group {
input {
min-width: 0;
margin-right: -1px;
border-top-right-radius: 0 !important;
border-bottom-right-radius: 0 !important;
&:focus {
z-index: 1;
}
}
input + * {
border-top-left-radius: 0 !important;
border-bottom-left-radius: 0 !important;
flex: 0 0 auto;
width: 60px !important;
}
}
&__errors {
position: absolute;
right: 0;
bottom: 0;
display: flex;
[ng-message] {
// TODO: remove after replace all fields to new
overflow: visible !important;
animation: none !important;
}
}
&__control--postfix + &__errors::after {
content: attr(data-postfix);
margin-left: 10px;
visibility: hidden;
}
&__error {
z-index: 2;
position: relative;
width: 0;
height: 36px;
float: right;
color: $brand-primary;
line-height: $input-height;
pointer-events: initial;
text-align: center;
&:before {
position: absolute;
right: 0;
width: 38px;
}
div:first-child {
display: none;
}
[bs-tooltip] {
z-index: 1;
position: absolute;
top: 0;
right: 0;
width: 36px;
height: 36px;
}
[ignite-icon] {
position: absolute;
top: 10px;
right: 0;
width: 38px;
}
}
[disabled] {
opacity: .5;
}
}
.theme--ignite-errors-horizontal {
.form-field__control {
// Reset offset to appearance of input for invalid password
& > input[type='email'].ng-invalid.ng-touched,
& > input[type='text'].ng-invalid.ng-touched,
& > input[type='password'].ng-invalid.ng-touched {
padding-right: 0;
}
// Reset offset to appearance of dropdown for invalid data
& > button.select-toggle.ng-invalid.ng-touched {
&:after {
right: 10px;
}
}
}
.form-field__errors {
position: relative;
padding: 5px 10px 0px;
color: $ignite-brand-primary;
font-size: 12px;
line-height: 14px;
&:empty {
display: none;
}
[ng-message] + [ng-message] {
margin-top: 10px;
}
}
.form-field__error {
float: none;
width: auto;
height: auto;
position: static;
text-align: left;
line-height: 14px;
div:first-child {
display: block;
}
[bs-tooltip],
[ignite-icon] {
display: none;
}
}
.form-field__error + .form-field__error {
margin-top: 10px;
}
.form-field__checkbox {
flex-wrap: wrap;
.form-field__errors {
margin-left: -10px;
flex-basis: 100%;
.form-field__error {
width: auto;
div {
width: auto;
}
}
}
}
}
.form-field__radio,
.form-field__checkbox {
$errorSize: 16px;
display: inline-flex;
width: auto;
сursor: pointer;
.form-field {
&__label {
order: 1;
margin: 0;
cursor: pointer;
}
&__control {
width: auto;
margin-right: 10px;
padding: 3px 0;
flex: 0 0 auto;
input {
width: auto;
height: auto;
margin: 0;
border-radius: 0;
}
}
&__errors {
position: static;
right: initial;
bottom: initial;
order: 3;
margin-left: 5px;
.form-field__error {
width: $errorSize;
height: $errorSize;
div {
// Required to correctly position error popover
top: -10px;
height: 36px;
width: $errorSize;
}
[ignite-icon] {
width: $errorSize;
top: 0;
}
}
}
}
}
.form-field__radio {
.form-field__control {
padding: 2px 0;
}
.form-field__control > input[type='radio'] {
-webkit-appearance: none;
width: 13px;
height: 13px;
padding: 0;
background: white;
border: none;
border-radius: 50%;
box-shadow: inset 0 0 0 1px rgb(197, 197, 197);
&:focus {
outline: none;
border: none;
box-shadow: 0 0 0 2px rgba(0, 103, 185, .3),
inset 0 0 0 1px rgb(197, 197, 197);
}
&:checked {
border: none;
box-shadow: inset 0 0 0 5px rgba(0, 103, 185, 1);
&:focus {
box-shadow: 0 0 0 2px rgba(0, 103, 185, .3),
inset 0 0 0 5px rgba(0, 103, 185, 1);
}
}
}
}
.form-field__checkbox {
.form-field__control > input[type='checkbox'] {
border-radius: 2px;
background-image: url(/images/checkbox.svg);
width: 12px !important;
height: 12px !important;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
background-repeat: no-repeat;
background-size: 100%;
padding: 0;
border: none;
&:checked {
background-image: url(/images/checkbox-active.svg);
}
&:disabled {
opacity: 0.5;
}
&:focus {
outline: none;
box-shadow: 0 0 0 2px rgba(0, 103, 185, .3);
}
}
}
.form-field--inline {
display: inline-block;
width: auto;
.form-field {
display: flex;
align-items: baseline;
}
.form-field__label {
white-space: nowrap;
}
form-field-size,
.form-field__text {
.form-field__control {
margin-left: 10px;
}
}
.form-field__dropdown,
.form-field__datepicker,
.form-field__timepicker {
.form-field__control {
width: auto;
input,
button {
color: transparent;
text-shadow: 0 0 0 $ignite-brand-success;
border: none;
box-shadow: none;
background: linear-gradient(to right, rgb(0, 103, 185), transparent) 0px 25px / 0px,
linear-gradient(to right, rgb(0, 103, 185) 70%, transparent 0%) 0% 0% / 8px 1px repeat-x,
0% 0% / 0px, 0% 0% / 4px;
background-size: 0, 8px 1px, 0, 0;
background-position: 1px 25px;
padding-left: 0px;
padding-right: 0px;
margin-left: 10px;
margin-right: 10px;
&:hover, &:focus {
text-shadow: 0 0 0 change-color($ignite-brand-success, $lightness: 26%);
}
}
}
}
.form-field__dropdown {
button::after {
display: none;
}
}
}
.form-field__password {
// Validation error notification will overlap with visibility button if it's not moved more to the left
input[type='password'].ng-invalid.ng-touched,
input[type='password'].ng-invalid.ng-touched + input {
padding-right: 62px;
}
// Extra space for visibility button
input {
padding-right: 36px;
}
// Distance between error notification and visibility button
.form-field__errors {
right: 26px;
}
password-visibility-toggle-button {
position: absolute;
right: 0;
height: 36px;
}
}
.form-field__dropdown {
.form-field__control {
> button:not(.btn-ignite) {
padding-top: 10px;
}
}
}
.form-field__ace {
.ace_editor {
width: 100%;
min-height: 70px;
margin: 0;
border: solid 1px #c5c5c5;
border-radius: 4px;
background-color: #ffffff;
box-shadow: none;
.ace_content {
padding-left: 2px;
}
&.ace_focus {
border-color: $ignite-brand-success;
box-shadow: none;
}
}
}
.form-field.ignite-form-field label.required {
margin-left: 0 !important;
}
.form-fieldset {
padding: 10px;
border: 1px solid hsla(0, 0%, 77%, .5);
border-radius: 4px;
legend {
width: auto;
margin: 0 -5px;
padding: 0 5px;
border: 0;
color: #393939;
font-size: 14px;
line-height: 1.42857;
}
legend + * {
margin-top: 0 !important;
}
& > *:last-child {
margin-bottom: 0 !important;
}
}