@use "../../../bulma/sass/utilities" as bulma-utilities;

$floating-in-height: 3.25em !default;
$field-label-font-size: var(--size-normal) !default;

// Map Local variables
$-css-vars-map: (
    "floating-in-height": $floating-in-height,
    "field-label-font-size": $field-label-font-size,
);

// Register & Export CSS Variabless
@include bulma-utilities.exportCSSVars($-css-vars-map);
@include bulma-utilities.registerComponentCSSVars("field", $-css-vars-map);

.field {
    &.is-grouped {
        .field {
            flex-shrink: 0;

            &:not(:last-child) {
                margin-right: 0.75rem;
            }

            &.is-expanded {
                flex-grow: 1;
                flex-shrink: 1;
            }
        }
    }

    // Nested control addons (for Autocomplete and Datepicker)
    &.has-addons .control {
        &:first-child .control {
            .button,
            .input,
            .select select {
                border-top-left-radius: var(--input-radius);
                border-bottom-left-radius: var(--input-radius);
            }
        }

        &:last-child .control {
            .button,
            .input,
            .select select {
                border-top-right-radius: var(--input-radius);
                border-bottom-right-radius: var(--input-radius);
            }
        }

        .control {
            .button,
            .input,
            .select select {
                border-radius: 0
            }
        }
    }

    // Fix for number input with addons
    &.has-addons {
        .b-numberinput {
            &:not(:first-child) {
                .control:first-child {
                    .button,
                    .input,
                    .select select {
                        border-top-left-radius: 0;
                        border-bottom-left-radius: 0;
                    }
                }
            }

            &:not(:last-child) {
                .control:last-child {
                    .button,
                    .input,
                    .select select {
                        border-top-right-radius: 0;
                        border-bottom-right-radius: 0;
                    }
                }
            }
        }

        &.b-numberinput {
            .control {
                margin-right: unset;
            }
        }
    }
}

.field {
    &.is-floating-label,
    &.is-floating-in-label {
        position: relative;

        .label {
            position: absolute;
            left: 1em;
            z-index: 5;
            max-width: calc(100% - 2em);
            overflow: hidden;
            font-size: calc(var(--field-label-font-size) * 0.75);
            text-overflow: ellipsis;
            white-space: nowrap;
            background-color: transparent;

            @include bulma-utilities.control-sizes(field-label-font-size);
        }

        .taginput .counter {
            float: none;
            text-align: right;
        }

        &.has-addons {
            > .label {
                + .control {
                    .button,
                    .input,
                    .select select {
                        border-top-left-radius: var(--input-radius);
                        border-bottom-left-radius: var(--input-radius);
                    }
                }
            }
        }
    }

    &.is-floating-label {
        .label {
            top: -0.775em;
            padding-right: 0.125em;
            padding-left: 0.125em;

            &::before {
                position: absolute;
                top: 0.775em;
                right: 0;
                left: 0;
                z-index: -1;
                display: block;
                height: 0.375em;
                content: "";
                background-color: var(--input-background-color);
            }
        }

        .input,
        .textarea,
        .select
        select {
            &:focus {
                box-shadow: none;
            }
        }

        .taginput .taginput-container {
            padding-top: 0.475em;

            &.is-focused {
                box-shadow: none;
            }
        }
    }

    &.is-floating-in-label {
        --field-floating-indent: calc(var(--floating-in-height) * 0.5 - (var(--size-large) * 0.75) * 0.5);

        > .label {
            top: 0.25em;

            + .control {
                &.datepicker, &.timepicker {
                    .input {
                        height: var(--floating-in-height);
                        padding-top: var(--field-floating-indent);
                        padding-bottom: 1px;
                    }
                }

                &:not(.datepicker, .timepicker, .taginput) {
                    .input,
                    .textarea,
                    select {
                        height: var(--floating-in-height);
                        padding-top: var(--field-floating-indent);
                        padding-bottom: 1px;
                    }

                    .select:not([multiple]) {
                        height: var(--floating-in-height);

                        &.is-loading {
                            &::after {
                                margin-top: var(--field-floating-indent);
                            }
                        }

                        &::after {
                            margin-top: 1px;
                        }
                    }
                }

                &.taginput {
                    .taginput-container {
                        // 0.275em - 1px _taginput.scss
                        padding-top: calc(var(--field-floating-indent) + (0.275em - 1px));
                    }
                }

                &:not(.taginput) {
                    .is-left.field,
                    .is-right.icon {
                        height: var(--floating-in-height);
                    }

                    .is-left.icon {
                        padding-top: var(--field-floating-indent);
                    }
                }

                &.is-loading::after {
                    margin-top: var(--field-floating-indent);
                }
            }

            // With addons or grouped
            + .field-body {
                > .is-grouped, > .has-addons {
                    .control {
                        .input,
                        .textarea,
                        select {
                            padding-top: var(--field-floating-indent);
                            padding-bottom: 1px;
                        }

                        .input,
                        .textarea,
                        select,
                        .button {
                            height: var(--floating-in-height);
                        }
                    }
                }
            }
        }

        &.has-numberinput {
            .b-numberinput {
                .control {
                    .input,
                    .button {
                        height: var(--floating-in-height);
                    }
                }
            }
        }
    }

    &.is-floating-label, &.is-floating-in-label {
        &.has-numberinput {
            .label {
                margin-left: calc(var(--size-normal) * 3);
            }

            &.has-numberinput-is-small {
                .label {
                    margin-left: calc(var(--size-small) * 3);
                }
            }

            &.has-numberinput-is-medium {
                .label {
                    margin-left: calc(var(--size-medium) * 3);
                }
            }

            &.has-numberinput-is-large {
                .label {
                    margin-left: calc(var(--size-large) * 3);
                }
            }
        }

        &.has-numberinput-compact {
            .label {
                margin-left: calc(var(--size-normal) * 2.25);
            }

            &.has-numberinput-is-small {
                .label {
                    margin-left: calc(var(--size-small) * 2.25);
                }
            }

            &.has-numberinput-is-medium {
                .label {
                    margin-left: calc(var(--size-medium) * 2.25);
                }
            }

            &.has-numberinput-is-large {
                .label {
                    margin-left: calc(var(--size-large) * 2.25);
                }
            }
        }
    }

    &.is-grouped-right, &.has-addons-right {
        &.is-floating-in-label {
            .label {
                position: relative;
                left: calc(3.25em + 2em);
            }
        }

        &.is-floating-label {
            .label {
                position: relative;
                left: calc(3.25em + 2em);
            }
        }
    }
}

.control {
    .help.counter {
        float: right;
        margin-left: 0.5em;
    }

    .icon {
        &.is-clickable {
            pointer-events: auto;
            cursor: pointer;
        }
    }

    // fix Bulma 0.8.2
    &.is-loading::after {
        top: calc(50% - (1em * 0.5));
        right: calc((2.5em * 0.5) - .5em);
    }
}
