rsuite
Version:
A suite of react components
393 lines (327 loc) • 8.77 kB
text/less
@import '../../styles/common';
@import '../../Form/styles/mixin';
@import '../../Button/styles/index';
//
// Input groups
// --------------------------------------------------
// Base styles
// -------------------------
.rs-input-group {
position: relative; // For dropdowns
display: flex;
border-radius: @input-border-radius;
transition: @input-transition;
width: 100%;
cursor: text;
color: var(--rs-text-primary);
border: 1px solid var(--rs-border-primary);
.high-contrast-mode({
transition: none;
});
&:not(.rs-input-group-disabled):hover,
&:not(.rs-input-group-disabled).rs-input-group-focus,
&:focus-within {
border-color: var(--rs-input-focus-border);
}
&:not(.rs-input-group-disabled).rs-input-group-focus,
&:focus-within {
.focus-ring();
}
& & {
outline: none ;
border-color: transparent ;
}
.rs-input-number,
.rs-input-group-addon,
.rs-input-group-btn,
.rs-picker-date .rs-picker-toggle {
border: none;
border-radius: 0;
outline: none;
}
// Reset border
&:not(.rs-input-group-inside) {
.rs-input {
border: none;
border-radius: 0;
outline: none;
}
.rs-input-number:not(:last-child) .rs-input-number {
&-btn-group-vertical {
border-radius: 0;
}
&-touchspin-up {
border-top-right-radius: 0;
}
&-touchspin-down {
border-bottom-right-radius: 0;
}
}
.rs-input-number:not(:first-child) .rs-input {
border-radius: 0 ;
}
// @FIXED: first-child haven't border radius in ie10.
& > :first-child,
.rs-auto-complete:first-child .rs-input,
.rs-picker-date:first-child .rs-picker-toggle,
.rs-form-control-wrapper:first-child > .rs-input {
.border-left-radius(@input-border-radius);
}
& > :last-child,
.rs-auto-complete:last-child .rs-input,
.rs-picker-date:last-child .rs-picker-toggle,
.rs-form-control-wrapper:last-child > .rs-input {
.border-right-radius(@input-border-radius);
}
}
> .rs-input,
> .rs-form-control-wrapper {
flex: 1 1 auto;
}
.rs-form-control-wrapper > .rs-input {
width: 100%;
}
> .rs-input {
// Ensure that the input is always above the *appended* addon button for
// proper border colors.
position: relative;
}
input.rs-input ~ .rs-input-group-addon,
.rs-form-control-wrapper ~ .rs-input-group-addon {
border-left: none;
left: auto;
right: 0;
}
//FIXED: The icon between two input has 1px border.
input.rs-input ~ .rs-input-group-addon:not(:last-child),
.rs-form-control-wrapper ~ .rs-input-group-addon:not(:last-child) {
border-right: 0;
}
&.rs-input-group-inside {
width: 100%;
background-color: var(--rs-input-bg);
.rs-input {
display: block;
width: 100%;
border: none;
outline: none;
}
.rs-input-group-btn,
.rs-input-group-addon {
flex: 0 0 auto;
width: auto;
}
.rs-input-group-btn {
.rs-btn-subtle();
color: inherit;
.reset-inside-input-group-btn-size(base);
&:focus {
outline: none;
}
// reset border radius
&:first-child {
.border-left-radius(@input-border-radius);
}
&:last-child {
.border-right-radius(@input-border-radius);
}
}
.rs-input-group-addon {
top: 0;
background: none;
border: none;
padding: 10px 12px;
&.rs-input-group-btn {
padding: 8px 13px;
}
}
.rs-input-group-btn ~ input.rs-input,
.rs-input-group-addon ~ input.rs-input,
.rs-input-group-btn ~ .rs-auto-complete > input.rs-input,
.rs-input-group-addon ~ .rs-auto-complete > input.rs-input,
.rs-input-group-addon ~ .rs-form-control-wrapper > input.rs-input,
.rs-input-group-btn ~ .rs-form-control-wrapper > input.rs-input {
padding-left: 0;
padding-right: 12px;
}
input.rs-input ~ .rs-input-group-btn,
.rs-auto-complete ~ .rs-input-group-addon,
.rs-form-control-wrapper ~ .rs-input-group-addon,
.rs-form-control-wrapper ~ .rs-input-group-btn {
left: inherit;
right: 0;
}
.rs-auto-complete ~ .rs-input-group-btn,
.rs-form-control-wrapper ~ .rs-input-group-btn {
left: inherit;
right: @input-border-width;
}
}
}
.rs-input-group.rs-input-group-disabled {
background-color: var(--rs-input-disabled-bg);
color: var(--rs-text-disabled);
cursor: not-allowed;
.rs-input,
.rs-input-group-btn,
.rs-input-group-addon {
color: inherit;
}
}
// Sizing options
//
// Remix the default form control sizing classes into new ones for easier
// manipulation.
//Reset Input size
.rs-input-group-lg {
> .rs-input {
.input-lg();
}
.reset-input-group-children-size(large);
&.rs-input-group:not(.rs-input-group-inside) > .rs-input-group-addon {
padding-top: 8px;
padding-bottom: 8px;
}
}
.rs-input-group-md {
> .rs-input {
.input-md();
}
.reset-input-group-children-size(base);
&.rs-input-group:not(.rs-input-group-inside) > .rs-input-group-addon {
padding-top: 6px;
padding-bottom: 6px;
}
}
.rs-input-group-sm {
> .rs-input {
.input-sm();
}
.reset-input-group-children-size(small);
&.rs-input-group:not(.rs-input-group-inside) > .rs-input-group-addon {
padding-top: 3px;
padding-bottom: 3px;
}
}
.rs-input-group-xs {
> .rs-input {
.input-xs();
}
.reset-input-group-children-size(extra-small);
}
// Reset input group addon size.
.rs-input-group.rs-input-group-lg > .rs-input-group-addon {
.input-lg();
.reset-input-group-addon-size(large);
}
.rs-input-group.rs-input-group-md > .rs-input-group-addon {
.input-md();
.reset-input-group-addon-size(base);
}
.rs-input-group.rs-input-group-sm > .rs-input-group-addon {
.input-sm();
.reset-input-group-addon-size(small);
}
.rs-input-group.rs-input-group-xs > .rs-input-group-addon {
.input-xs();
.reset-input-group-addon-size(extra-small);
}
// Reset inside input group button size.
.rs-input-group-inside.rs-input-group-lg > .rs-input-group-btn {
.input-lg();
.reset-inside-input-group-btn-size(large);
}
.rs-input-group-inside.rs-input-group-md > .rs-input-group-btn {
.input-md();
.reset-inside-input-group-btn-size(base);
}
.rs-input-group-inside.rs-input-group-sm > .rs-input-group-btn {
.input-sm();
.reset-inside-input-group-btn-size(small);
}
.rs-input-group-inside.rs-input-group-xs > .rs-input-group-btn {
.input-xs();
.reset-inside-input-group-btn-size(extra-small);
}
// Display as table-cell
// -------------------------
.rs-input-group-addon,
.rs-input-group-btn,
.rs-input-group:not(.rs-input-group-inside) .rs-input {
&:not(:first-child):not(:last-child) {
border-radius: 0;
}
}
// Addon and addon wrapper for buttons
// Text input groups
// -------------------------
.rs-input-group-addon {
flex: 0 0 auto;
display: flex;
align-items: center;
white-space: nowrap;
vertical-align: middle; // Match the inputs
color: var(--rs-text-primary);
padding: @padding-y @padding-x;
font-size: @font-size-base;
font-weight: normal;
line-height: 1;
text-align: center;
background-color: var(--rs-btn-default-bg);
border: 1px solid var(--rs-border-primary);
border-radius: @input-border-radius;
// Sizing
&.rs-input-sm {
padding: @padding-y-sm @padding-x-sm;
font-size: @font-size-small;
border-radius: @input-border-radius;
}
&.rs-input-xs {
padding: @padding-x-xs @padding-x-xs;
font-size: @font-size-small;
border-radius: @input-border-radius;
}
&.rs-input-lg {
padding: @padding-y-lg @padding-x-lg;
font-size: @font-size-large;
border-radius: @input-border-radius;
}
// Nuke default margins from checkboxes and radios to vertically center within.
input[type='radio'],
input[type='checkbox'] {
margin-top: 0;
}
}
// Button input groups
// -------------------------
.rs-input-group-btn {
position: relative;
// Jankily prevent input button groups from wrapping with `white-space` and
// `font-size` in combination with `inline-block` on buttons.
//font-size: 0;
line-height: 1;
white-space: nowrap;
border-radius: 0;
// Negative margin for spacing, position for bringing hovered/focused/actived
// element above the siblings.
> .rs-btn {
position: relative;
+ .rs-btn {
margin-left: -1px;
}
}
// Negative margin to only have a 1px border between the two
&:first-child {
> .rs-btn,
> .rs-btn-group {
margin-right: -1px;
border-right: medium none;
}
}
&:last-child {
> .rs-btn,
> .rs-btn-group {
margin-left: -1px;
}
}
}