180 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
| /*
 | |
| Copyright 2019-2024 New Vector Ltd.
 | |
| 
 | |
| SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
 | |
| Please see LICENSE files in the repository root for full details.
 | |
| */
 | |
| 
 | |
| /* TODO: Consider unifying with general input styles in _light.pcss */
 | |
| 
 | |
| .mx_Field {
 | |
|     display: flex;
 | |
|     flex: 1;
 | |
|     min-width: 0;
 | |
|     position: relative;
 | |
|     margin: 1em 0;
 | |
|     border-radius: 8px;
 | |
|     transition: border-color 0.25s;
 | |
|     border: 1px solid var(--cpd-color-border-interactive-secondary);
 | |
| }
 | |
| 
 | |
| .mx_Field_prefix {
 | |
|     border-right: 1px solid var(--cpd-color-border-interactive-secondary);
 | |
| }
 | |
| 
 | |
| .mx_Field_postfix {
 | |
|     border-left: 1px solid var(--cpd-color-border-interactive-secondary);
 | |
| }
 | |
| 
 | |
| .mx_Field input,
 | |
| .mx_Field select,
 | |
| .mx_Field textarea {
 | |
|     font: var(--cpd-font-body-md-regular);
 | |
|     border: none;
 | |
|     /* Even without a border here, we still need this avoid overlapping the rounded */
 | |
|     /* corners on the field above. */
 | |
|     border-radius: 8px;
 | |
|     padding: 8px 9px;
 | |
|     color: $primary-content;
 | |
|     background-color: $background;
 | |
|     flex: 1;
 | |
|     min-width: 0;
 | |
| }
 | |
| 
 | |
| .mx_Field select {
 | |
|     -moz-appearance: none;
 | |
|     -webkit-appearance: none;
 | |
|     text-overflow: ellipsis;
 | |
| }
 | |
| 
 | |
| /* Can't add pseudo-elements to a select directly, so we use its parent. */
 | |
| .mx_Field_select::before {
 | |
|     content: "";
 | |
|     position: absolute;
 | |
|     top: 50%;
 | |
|     transform: translateY(-50%);
 | |
|     right: 4px;
 | |
|     width: 18px;
 | |
|     height: 18px;
 | |
|     mask: url("@vector-im/compound-design-tokens/icons/chevron-down.svg");
 | |
|     mask-repeat: no-repeat;
 | |
|     mask-position: center;
 | |
|     mask-size: contain;
 | |
|     background-color: $primary-content;
 | |
|     z-index: 1;
 | |
|     pointer-events: none;
 | |
| }
 | |
| 
 | |
| .mx_Field:focus-within {
 | |
|     border-color: $accent-alt;
 | |
| }
 | |
| 
 | |
| .mx_Field input:focus,
 | |
| .mx_Field select:focus,
 | |
| .mx_Field textarea:focus {
 | |
|     outline: 0;
 | |
| }
 | |
| 
 | |
| .mx_Field input::placeholder,
 | |
| .mx_Field textarea::placeholder {
 | |
|     transition: color 0.25s ease-in 0s;
 | |
|     color: transparent;
 | |
| }
 | |
| 
 | |
| .mx_Field input:placeholder-shown:focus::placeholder,
 | |
| .mx_Field textarea:placeholder-shown:focus::placeholder,
 | |
| .mx_Field.mx_Field_placeholderIsHint input::placeholder {
 | |
|     transition: color 0.25s ease-in 0.1s;
 | |
|     color: $info-plinth-fg-color;
 | |
| }
 | |
| 
 | |
| .mx_Field label {
 | |
|     transition:
 | |
|         font-size 0.25s ease-out 0.1s,
 | |
|         color 0.25s ease-out 0.1s,
 | |
|         transform 0.25s ease-out 0.1s,
 | |
|         background-color 0.25s ease-out 0.1s;
 | |
|     background-color: transparent;
 | |
|     font: var(--cpd-font-body-md-regular);
 | |
|     color: var(--cpd-color-text-secondary);
 | |
|     transform: translateY(0);
 | |
|     position: absolute;
 | |
|     left: 0px;
 | |
|     margin: 7px 8px;
 | |
|     padding: 2px;
 | |
|     pointer-events: none; /* Allow clicks to fall through to the input */
 | |
|     overflow: hidden;
 | |
|     white-space: nowrap;
 | |
|     text-overflow: ellipsis;
 | |
|     max-width: calc(100% - 20px); /* 100% of parent minus margin and padding */
 | |
| }
 | |
| 
 | |
| .mx_Field_labelAlwaysTopLeft label,
 | |
| .mx_Field select + label /* Always show a select's label on top to not collide with the value */,
 | |
| .mx_Field input:focus + label,
 | |
| .mx_Field input:not(:placeholder-shown) + label,
 | |
| .mx_Field textarea:focus + label,
 | |
| .mx_Field textarea:not(:placeholder-shown) + label {
 | |
|     transition:
 | |
|         font-size 0.25s ease-out 0s,
 | |
|         color 0.25s ease-out 0s,
 | |
|         transform 0.25s ease-out 0s,
 | |
|         background-color 0.25s ease-out 0s;
 | |
|     font-size: $font-10px;
 | |
|     transform: translateY(-13px);
 | |
|     padding: 0 2px;
 | |
|     background-color: $background;
 | |
|     pointer-events: initial;
 | |
| }
 | |
| 
 | |
| .mx_Field input:focus + label,
 | |
| .mx_Field select:focus + label,
 | |
| .mx_Field textarea:focus + label {
 | |
|     color: $accent-alt;
 | |
| }
 | |
| 
 | |
| .mx_Field select:disabled,
 | |
| .mx_Field select:disabled + label,
 | |
| .mx_Field input:disabled,
 | |
| .mx_Field input:disabled + label,
 | |
| .mx_Field textarea:disabled,
 | |
| .mx_Field textarea:disabled + label {
 | |
|     background-color: $background;
 | |
|     color: $info-plinth-fg-color;
 | |
| }
 | |
| 
 | |
| .mx_Field_valid {
 | |
|     &.mx_Field,
 | |
|     &.mx_Field:focus-within {
 | |
|         border-color: $accent;
 | |
|     }
 | |
| 
 | |
|     &.mx_Field label,
 | |
|     &.mx_Field:focus-within label {
 | |
|         color: $accent;
 | |
|     }
 | |
| }
 | |
| 
 | |
| .mx_Field_invalid {
 | |
|     &.mx_Field,
 | |
|     &.mx_Field:focus-within {
 | |
|         border-color: $alert;
 | |
|     }
 | |
| 
 | |
|     &.mx_Field label,
 | |
|     &.mx_Field:focus-within label {
 | |
|         color: $alert;
 | |
|     }
 | |
| }
 | |
| 
 | |
| /* Customise other components when placed inside a Field */
 | |
| 
 | |
| .mx_Field .mx_Dropdown_input {
 | |
|     border: initial;
 | |
|     border-radius: initial;
 | |
| }
 | |
| 
 | |
| .mx_Field .mx_CountryDropdown {
 | |
|     width: fit-content;
 | |
| }
 |