✨(react) add Select component
Finally our powerful Select component is available to make great forms!
This commit is contained in:
183
packages/react/src/components/Forms/Select/index.scss
Normal file
183
packages/react/src/components/Forms/Select/index.scss
Normal file
@@ -0,0 +1,183 @@
|
||||
.c__select {
|
||||
position: relative;
|
||||
|
||||
&__wrapper {
|
||||
border-radius: var(--c--components--forms-select--border-radius);
|
||||
border-width: var(--c--components--forms-select--border-width);
|
||||
border-color: var(--c--components--forms-select--border-color);
|
||||
border-style: var(--c--components--forms-select--border-style);
|
||||
display: flex;
|
||||
align-items: center;
|
||||
transition: border var(--c--theme--transitions--duration) var(--c--theme--transitions--ease-out);
|
||||
padding: 0 0.75rem;
|
||||
gap: 1rem;
|
||||
color: var(--c--components--forms-select--color);
|
||||
box-sizing: border-box;
|
||||
height: var(--c--components--forms-select--height);
|
||||
cursor: pointer;
|
||||
background-color: var(--c--components--forms-select--background-color);
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
|
||||
label {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-radius: var(--c--components--forms-select--border-radius--hover);
|
||||
border-color: var(--c--components--forms-select--border-color--hover);
|
||||
}
|
||||
|
||||
&:focus-within {
|
||||
border-radius: var(--c--components--forms-select--border-radius--focus);
|
||||
border-color: var(--c--components--forms-select--border-color--focus);
|
||||
}
|
||||
}
|
||||
|
||||
&__inner {
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
user-select: none;
|
||||
min-width: 0;
|
||||
|
||||
&__value {
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
flex-grow: 1;
|
||||
font-size: var(--c--components--forms-select--font-size);
|
||||
|
||||
input {
|
||||
outline: 0;
|
||||
border: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
color: var(--c--components--forms-select--color);
|
||||
font-size: var(--c--components--forms-select--font-size);
|
||||
}
|
||||
}
|
||||
|
||||
&__actions {
|
||||
position: relative;
|
||||
top: -14px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
span {
|
||||
font-size: 1.25rem;
|
||||
transition: all var(--c--theme--transitions--duration) var(--c--theme--transitions--ease-out);
|
||||
&.opened {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
&__clear {
|
||||
color: var(--c--theme--colors--greyscale-500);
|
||||
}
|
||||
&__separator {
|
||||
background-color: var(--c--theme--colors--greyscale-400);
|
||||
height: 24px;
|
||||
width: 1px;
|
||||
}
|
||||
&__open {
|
||||
color: var(--c--theme--colors--greyscale-900);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&__menu {
|
||||
position: absolute;
|
||||
overflow: auto;
|
||||
width: calc(100% - 4px);
|
||||
max-height: 10rem;
|
||||
box-shadow: 0px 1px 4px rgba(0, 0, 0, 0.3);
|
||||
background-color: var(--c--components--forms-select--menu-background-color);
|
||||
transform: translate(2px, 0);
|
||||
display: none;
|
||||
z-index: 1;
|
||||
|
||||
&--opened {
|
||||
display: block;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
padding-top: 3px;
|
||||
}
|
||||
|
||||
&__item {
|
||||
padding: 0.75rem;
|
||||
font-size: var(--c--components--forms-select--item-font-size);
|
||||
color: var(--c--components--forms-select--item-color);
|
||||
cursor: pointer;
|
||||
|
||||
&--highlight {
|
||||
background-color: var(--c--components--forms-select--item-background-color--hover);
|
||||
}
|
||||
|
||||
&--selected {
|
||||
background-color: var(--c--components--forms-select--item-background-color--selected);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** Modifiers */
|
||||
|
||||
&--disabled {
|
||||
|
||||
.c__select__wrapper {
|
||||
color: var(--c--theme--colors--greyscale-600);
|
||||
border-color: var(--c--theme--colors--greyscale-200);
|
||||
cursor: default;
|
||||
|
||||
label {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
input {
|
||||
color: var(--c--theme--colors--greyscale-600);
|
||||
background-color: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.c__input__inner {
|
||||
.c__input, label {
|
||||
color: var(--c--theme--colors--greyscale-600);
|
||||
}
|
||||
}
|
||||
|
||||
&:hover {
|
||||
border-color: var(--c--theme--colors--greyscale-200);
|
||||
}
|
||||
}
|
||||
|
||||
&--error {
|
||||
|
||||
.c__select__wrapper {
|
||||
border-color: var(--c--theme--colors--danger-600);
|
||||
}
|
||||
|
||||
&:not(.c__select__wrapper--disabled) {
|
||||
.c__select__wrapper:hover {
|
||||
border-color: var(--c--theme--colors--danger-200);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&--success {
|
||||
|
||||
.c__select__wrapper {
|
||||
border-color: var(--c--theme--colors--success-600);
|
||||
}
|
||||
|
||||
&:not(.c__select__wrapper--disabled) {
|
||||
.c__select__wrapper:hover {
|
||||
border-color: var(--c--theme--colors--success-400);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user