//
//  DIALTONE
//  COMPONENTS: INPUTS
//
//  These are input classes for Dialpad's design system Dialtone.
//  For further documentation of these and other classes,
//  visit https://dialtone.dialpad.com/components/inputs
//
//  TABLE OF CONTENTS
//  • VARIABLES
//  • INPUTS & TEXTAREAS
//    - Base Style
//    - Wrapper
//    - Validation States
//    - Sizes
//  • INPUT ICONS
//

//  $  INPUTS
//  ----------------------------------------------------------------------------
.d-input,
.d-input--md,
.d-textarea,
.d-textarea--md,
.d-input__wrapper--md,
.d-input__wrapper {
    //  Component CSS Vars
    //  ------------------------------------------------------------------------
    --input-color-border: var(--dt-inputs-color-border-default);
    --input-color-background: var(--dt-inputs-color-background-default);
    --input-color-background-disabled: var(--dt-inputs-color-background-disabled);
    --input-color-text: var(--dt-inputs-color-foreground-default);
    --input-border-width: var(--dt-size-border-100);
    --input-border-radius: var(--dt-inputs-size-radius-md);
    --input-padding-y: calc(var(--dt-space-400) - var(--input-border-width));
    --input-padding-x: calc((var(--dt-space-500) - var(--dt-space-300)) - var(--input-border-width));
    --input-typography: var(--dt-typography-inputs-md);

    position: relative;
    display: inline-flex;
    flex: 1 0%;
    box-sizing: border-box;
    width: 100%;
    min-width: 0;
    padding: var(--input-padding-y) var(--input-padding-x);
    color: var(--input-color-text);
    font: var(--input-typography);
    background-color: var(--input-color-background);
    border: var(--input-border-width) solid var(--input-color-border);
    border-radius: var(--input-border-radius);
    outline: none;
    box-shadow: none;
    appearance: none;
    caret-color: fieldtext;

    &:has(.d-textarea) {
        border-end-end-radius: var(--dt-inputs-size-radius-xs);
    }

    &:has(.d-input--xs),
    &:has(.d-textarea--xs) {
        --input-border-radius: var(--dt-inputs-size-radius-xs);
    }

    &:has(.d-input--sm),
    &:has(.d-textarea--sm) {
        --input-border-radius: var(--dt-inputs-size-radius-sm);
    }

    &:has(.d-input--md),
    &:has(.d-textarea--md) {
        --input-border-radius: var(--dt-inputs-size-radius-md);
    }

    &:has(.d-input--lg),
    &:has(.d-textarea--lg) {
        --input-border-radius: var(--dt-inputs-size-radius-lg);
    }

    &:has(.d-input--xl),
    &:has(.d-textarea--xl) {
        --input-border-radius: var(--dt-inputs-size-radius-xl);
    }


    //  --  Placeholder copy
    &::placeholder {
        color: var(--dt-inputs-color-foreground-placeholder);
    }
    //  --  Remove input EDGE additions
    &::-ms-clear {
        display: none;
    }
    //  --  FOCUS STATE
    &:focus,
    &:focus-within {
        --input-color-background: var(--dt-inputs-color-background-focus);
        --input-color-border: var(--dt-inputs-color-border-focus) !important;

        box-shadow: 0 0 0 var(--dt-size-border-100) var(--dt-inputs-color-border-focus) inset;
    }
    //  --  DISABLED / READ-ONLY
    &[disabled],
    &[read-only] {
        --input-color-border: var(--dt-inputs-color-border-disabled) !important;
        --input-color-background: var(--dt-inputs-color-background-disabled);
        --input-color-text: var(--dt-inputs-color-foreground-disabled);

        &:focus,
        &:focus-within {
            box-shadow: none !important;
        }

        //  --  Placeholder copy
        &::placeholder {
            color: var(--dt-inputs-color-foreground-placeholder);
        }
    }

    //  --  DISABLED
    &[disabled] {
        cursor: not-allowed;
    }

    //  --  BROWSER-SPECIFIC
    &::-moz-focus-inner {
        outline: none !important;
    }

    &:-moz-focusring {
        color: transparent;
        text-shadow: 0 0 0 var(--dt-color-black-900);
    }

    &::-ms-expand {
        display: none;
    }

    //  --  SEARCH INPUTS
    // remove the search input's default styling
    input[type="search"]::-webkit-search-decoration,
    input[type="search"]::-webkit-search-cancel-button,
    input[type="search"]::-webkit-search-results-button,
    input[type="search"]::-webkit-search-results-decoration {
        display: none;
    }
}

.d-input__length-description {
    margin-bottom: var(--dt-space-200);
}

.d-input--hidden {
    visibility: hidden;
}

//  $$  INPUT WRAPPER
//  ----------------------------------------------------------------------------
.d-input__wrapper {
    padding: 0;
    overflow-y: auto;

    .d-textarea + .d-input-icon--right {
      position: absolute;
      right: var(--dt-space-450);
    }

    .d-input-icon--left:has(+ .d-textarea) {
        align-items: flex-start;
    }

    .d-input-icon:has(+ .d-textarea),
    .d-textarea+.d-input-icon {
        padding-top: calc(var(--input-padding-y) + var(--dt-space-200));
    }

    .d-input-icon:has(+ .d-textarea--xs),
    .d-textarea--xs + .d-input-icon {
        #d-internal__input-and-select-xs();

        padding-top: calc(var(--input-padding-y) + var(--dt-space-100));
    }

    .d-input-icon:has(+ .d-textarea--sm),
    .d-textarea--sm+.d-input-icon {
        #d-internal__input-and-select-sm();

        padding-top: calc(var(--input-padding-y) + var(--dt-space-100));
    }

    .d-input-icon:has(+ .d-textarea--lg),
    .d-textarea--lg+.d-input-icon {
        #d-internal__input-and-select-lg();

        padding-top: calc(var(--input-padding-y) + var(--dt-space-100));
    }

    .d-input-icon:has(+ .d-textarea--xl),
    .d-textarea--xl+.d-input-icon {
        #d-internal__input-and-select-xl();

        padding-top: calc(var(--input-padding-y) + (var(--dt-space-350) - var(--dt-space-100)));
    }

    .d-input,
    .d-textarea {
        flex: 1;
        background-color: transparent;
        border: none;

        &:focus,
        &:focus-within {
            border: none;
            outline: 0;
            box-shadow: none !important;
        }
    }
}

//  $$  SIZES
//  ----------------------------------------------------------------------------
.d-input.d-input--xs {
    #d-internal__input-and-select-xs();
}

.d-input.d-input--sm {
    #d-internal__input-and-select-sm();
}

.d-input.d-input--lg {
    #d-internal__input-and-select-lg();
}

.d-input.d-input--xl {
    #d-internal__input-and-select-xl();
}

//  ============================================================================
//  $  TEXTAREAS
//  ----------------------------------------------------------------------------
.d-textarea {
    min-height: calc(var(--dt-size-300) * 20); // 80
    vertical-align: top;
    resize: vertical;
    scroll-padding-block: var(--input-padding-y);
}

//  $$  SIZES
//  ----------------------------------------------------------------------------
.d-textarea--xs {
    #d-internal__input-and-select-xs();

    min-height: calc(var(--dt-size-300) * 10); // 40
}

.d-textarea--sm {
    #d-internal__input-and-select-sm();

    min-height: var(--dt-size-650); // 48
}

.d-textarea--lg {
    #d-internal__input-and-select-lg();

    min-height: calc(var(--dt-size-300) * 23); // 92
}

.d-textarea--xl {
    #d-internal__input-and-select-xl();

    min-height: calc(var(--dt-size-300) * 25); // 100
}

//  $$  VALIDATION STATES
//  ----------------------------------------------------------------------------
.d-input--warning {
    --input-color-border: var(--dt-inputs-color-border-warning) !important;
}

.d-input--error {
    --input-color-border: var(--dt-inputs-color-border-critical) !important;
}

.d-input--success {
    --input-color-border: var(--dt-inputs-color-border-success) !important;
}

//  ============================================================================
//  $  INPUT ICONS
//  ----------------------------------------------------------------------------
.d-input-icon {
    display: none;

    &:not(:empty) {
        display: inline-flex;
        align-items: center;
    }

    &--right:not(:empty) {
        margin-right: var(--dt-space-400);

        .d-btn {
            margin-right: var(--dt-space-350-negative);
        }
    }

    &--left:not(:empty) {
        margin-left: var(--dt-space-400);
    }
}
