UNPKG

@roadtrip/css

Version:

CSS framework for Roadtrip Design System

316 lines (261 loc) 7.69 kB
/* * Input Group * * Easily extend form controls * by adding text, buttons, or button groups * on either side of textual inputs, custom selects, and custom file inputs. * * Index * - Input group * - Input group prepend / append * - Input group text or icon addon * - Input group round corners * - Input group error * - Input group counter * */ /* INPUT GROUP -------------------- */ .input-group { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; margin-bottom: 1rem; font-family: var(--road-font); } .input-group > .form-control, .input-group > .form-select { position: relative; flex: 1 1 auto; width: 1%; margin-bottom: 0; } .input-group > .form-control.less-label, .input-group > .form-select.less-label { padding-top: 0; } /** * Hover state */ @media (hover: hover) { .input-group > .form-control:not(:disabled):hover ~ .input-group-prepend .btn-ghost, .input-group > .form-control:not(:disabled):hover ~ .input-group-prepend .input-group-text, .input-group > .form-select:not(:disabled):hover ~ .input-group-prepend .btn-ghost, .input-group > .form-select:not(:disabled):hover ~ .input-group-prepend .input-group-text { border-color: var(--road-input-outline-variant); border-right-color: transparent; } .input-group > .form-control:not(:disabled):hover ~ .input-group-append .btn-ghost, .input-group > .form-control:not(:disabled):hover ~ .input-group-append .input-group-text, .input-group > .form-select:not(:disabled):hover ~ .input-group-append .btn-ghost, .input-group > .form-select:not(:disabled):hover ~ .input-group-append .input-group-text { border-color: var(--road-input-outline-variant); border-left-color: transparent; } } /** * Focus state */ .input-group > .form-control:focus ~ .input-group-prepend .btn-ghost, .input-group > .form-control:focus ~ .input-group-prepend .input-group-text, .input-group > .form-select:focus ~ .input-group-prepend .btn-ghost, .input-group > .form-select:focus ~ .input-group-prepend .input-group-text { border-color: var(--road-input-outline-variant); border-right-color: transparent; } .input-group > .form-control:focus ~ .input-group-append .btn-ghost, .input-group > .form-control:focus ~ .input-group-append .input-group-text, .input-group > .form-select:focus ~ .input-group-append .btn-ghost, .input-group > .form-select:focus ~ .input-group-append .input-group-text { border-color: var(--road-input-outline-variant); border-left-color: transparent; } /* INPUT GROUP PREPEND - APPEND -------------------- */ .input-group-prepend, .input-group-append { display: flex; } .input-group-prepend .btn, .input-group-append .btn { position: relative; z-index: 2; min-width: 3rem; padding: 0 0.5rem; margin: 0; font-size: var(--road-font-size-14); } .counter .btn { font-size: var(--road-font-size-24); line-height: 1.4; } .counter .btn-md { min-width: 2.5rem; } .counter .btn-sm { min-width: 2rem; } .input-group-prepend { z-index: 1; order: -1; margin-right: -1px; } .input-group-prepend ~ .form-label { left: calc(3rem + 1px); } .input-group-append { position: relative; z-index: 1; margin-left: -0.25rem; background: var(--road-surface); border-radius: 0 0.25rem 0.25rem 0; } .input-icon { display: block; width: 2rem; height: 2rem; fill: var(--road-icon); } /* INPUT GROUP TEXT OR ICON ADDON -------------------- */ .input-group-text { display: flex; align-items: center; padding: 0 0.5rem; margin-bottom: 0; text-align: center; white-space: nowrap; cursor: text; background: var(--road-surface); border: 1px solid var(--road-input-outline); border-radius: 0.25rem; } /* INPUT GROUP ROUND CORNERS -------------------- */ .input-group > .form-control:not(:first-child), .input-group > .form-select:not(:first-child) { border-radius: 0; } .input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text { border-top-left-radius: 0; border-bottom-left-radius: 0; } .input-group > .input-group-prepend > .input-group-text { margin-right: calc(-1rem + 1px); } /* INPUT GROUP ERROR -------------------- */ .invalid-feedback { display: none; width: 100%; margin-top: 0.5rem; font-size: var(--road-helper-medium); color: var(--road-on-danger-surface); } .form-control.is-invalid, .was-validated .form-control:invalid, .form-select.is-invalid, .was-validated .form-select:invalid { border-color: var(--road-danger-outline); } .form-control.is-invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-feedback, .form-select.is-invalid ~ .invalid-feedback, .was-validated .form-select:invalid ~ .invalid-feedback { display: block; } /** * Prepend error */ .form-control.is-invalid ~ .input-group-prepend .btn-outline-defaul, .form-control.is-invalid ~ .input-group-prepend .input-group-text, .was-validated .form-control:invalid ~ .input-group-prepend .btn-outline-defaul, .was-validated .form-control:invalid ~ .input-group-prepend .input-group-text, .form-select.is-invalid ~ .input-group-prepend .btn-outline-defaul, .form-select.is-invalid ~ .input-group-prepend .input-group-text, .was-validated .form-select:invalid ~ .input-group-prepend .btn-outline-defaul, .was-validated .form-select:invalid ~ .input-group-prepend .input-group-text { border-color: var(--road-danger-outline); border-right-color: transparent; } /** * Append error */ .form-control.is-invalid ~ .input-group-append .btn-ghost, .form-control.is-invalid ~ .input-group-append .input-group-text, .was-validated .form-control:invalid ~ .input-group-append .btn-ghost, .was-validated .form-control:invalid ~ .input-group-append .input-group-text, .form-select.is-invalid ~ .input-group-append .btn-ghost, .form-select.is-invalid ~ .input-group-append .input-group-text, .was-validated .form-select:invalid ~ .input-group-append .btn-ghost, .was-validated .form-select:invalid ~ .input-group-append .input-group-text { border-color: var(--road-danger-outline); border-left-color: transparent; } /** * Remove border for append and prepend element * with white background */ .input-group .input-group-prepend > .btn-ghost, .input-group .input-group-prepend > .input-group-text { border-color: var(--road-input-outline); border-right: 0; } .input-group .input-group-append > .btn-ghost, .input-group .input-group-append > .input-group-text { border-color: var(--road-input-outline); border-left: 0; } /* INPUT GROUP COUNTER -------------------- */ .btn.btn-number { padding: 0; background: var(--road-surface); border: 1px solid var(--road-button-tertiary-outline); } .btn-number:disabled { background: var(--road-surface-disabled); border: 1px solid var(--road-on-surface-disabled); opacity: inherit; } .btn-number:disabled svg{ fill: var(--road-on-surface-disabled); } .btn-number:hover, .btn-number:focus { background: var(--road-button-tertiary-variant); } .btn-number svg{ width: 24px; height: 24px; fill: var(--road-button-tertiary-outline); } /** * Focus state */ .input-group > .input-number:focus { z-index: 2; } /* INPUT GROUP PASSWORD -------------------- */ .checklist-password { display: none; } .checklist-password-label{ font-weight: 700; color: var(--road-on-surface); } .checklist-password .invalid{ color: var(--road-on-surface-weak); } .checklist-password .valid{ color: var(--road-on-success-surface); }