now-design-atoms
Version:
Atomic UI components for now-design.
141 lines (112 loc) • 3.24 kB
CSS
/* INPUT COMPONENT */
/* Base Input Styles */
.input {
display: flex;
width: 100%;
min-height: 40px;
padding: 10px;
align-items: center;
gap: calc(var(--gapSpacing-200, 8) * 1px);
border-radius: calc(var(--cornerRadius-m, 8) * 1px);
border: 1px solid var(--normal-stroke-primary, #CCC);
background: var(--normal-surface-otherCards, #FFF);
transition: border-color 0.2s ease, box-shadow 0.2s ease;
position: relative;
box-sizing: border-box;
}
/* Input Text Styles */
.input__text {
flex: 1;
border: none;
outline: none;
background: transparent;
color: var(--normal-typography-bodyPrimary, #1A1A1A);
min-width: 0;
}
.input__text::placeholder {
color: var(--normal-typography-disabled, #B3B3B3);
opacity: 0;
transition: opacity 0.2s ease;
}
/* Show placeholder only on focus */
.input--focused .input__text::placeholder {
opacity: 1;
}
/* Allow molecule to override placeholder visibility */
.input--show-placeholder .input__text::placeholder {
opacity: 1;
}
/* Icon Styles */
.input__icon {
display: flex;
align-items: center;
justify-content: center;
width: 20px;
height: 20px;
flex-shrink: 0;
color: var(--normal-icon-iconActive, #666);
}
.input--focused .input__text {
color: var(--normal-typography-bodyPrimary, #1A1A1A);
}
/* FILLED STATE */
.input--filled .input__text {
color: var(--normal-typography-bodyPrimary, #1A1A1A);
}
/* HOVER STATE */
.input:hover:not(.input--disabled) {
border: 1px solid var(--normal-stroke-hover, #808080);
background: var(--normal-surface-tableHover, #F2F2F2);
}
/* ACCESSIBILITY */
.input__text:focus-visible {
outline: none;
}
/* MOUSE ACTIVE (pressed) */
.input:active:not(.input--disabled) {
border: 1px solid var(--normal-stroke-active, #1579BE);
background: var(--normal-surface-active, #E8F2F8);
}
/* FOCUS (any focus) */
.input:focus-within:not(.input--disabled) {
border: 1px solid var(--normal-stroke-active, #1579BE);
background: var(--normal-surface-active, #E8F2F8);
}
/* KEYBOARD-ONLY OUTER FOCUS RING (on Tab navigation only) */
.input.input--focus-visible:not(.input--disabled) {
/* create a gap between input and ring, then the ring */
box-shadow:
0 0 0 2px var(--normal-surface-page, #FFFFFF),
0 0 0 3px var(--normal-stroke-active, #1579BE);
border-radius: calc(var(--cornerRadius-l, 12) * 1px);
}
/* DISABLED STATE */
.input--disabled {
border: 1px solid var(--normal-stroke-primary, #CCC);
background: var(--normal-surface-disabled, #E6E6E6);
cursor: not-allowed;
}
.input--disabled .input__text {
cursor: not-allowed;
}
.input--disabled .input__icon {
color: var(--normal-icon-iconActive, #666);
}
.input--disabled:hover,
.input--disabled:focus-within {
border: 1px solid var(--normal-stroke-primary, #CCC);
box-shadow: none;
}
/* VALIDATION STATES */
.input--error {
border: 1px solid var(--normal-stroke-error, #E43E2B);
background: var(--normal-surface-error, #FAD8D5);
}
.input--success {
border: 1px solid var(--normal-stroke-success, #2BA24C);
background: var(--normal-surface-success, #D5ECDB);
}
.input--warning {
border: 1px solid var(--normal-stroke-warning, #D58C00);
background: var(--normal-surface-warning, #F7E8CC);
}