////
/// @group components
/// @author <a href="https://github.com/simeonoff" target="_blank">Simeon Simeonoff</a>
/// @requires {mixin} bem-block
/// @requires {mixin} bem-elem
/// @requires {mixin} bem-mod
/// @requires {mixin} bem-mods
////
@include b(igx-input-group) {
    $this: bem--selector-to-string(&);
    @include register-component(str-slice($this, 2, -1));

    @extend %form-group-display !optional;

    &:hover {
        @extend	%form-group-display--hover !optional;
    }

    @include e(bundle) {
        @extend %form-group-bundle !optional;

        &:hover {
            @extend %form-group-bundle--hover !optional;
        }
    }

    @include e(bundle-main) {
        @extend %form-group-bundle-main !optional;
    }

    @include e(label) {
        @extend %form-group-label !optional;
    }

    @include e(input) {
        @extend %form-group-input !optional;
        @extend %chrome-autofill-fix !optional;
        @extend %edge-clear-icon-fix !optional;

        &:hover {
            @extend %form-group-input--hover !optional;
        }

        &:focus {
            @extend %form-group-input--focus !optional;
        }
    }

    @include e(textarea) {
        @extend %form-group-input !optional;
        @extend %form-group-textarea !optional;

        &:hover {
            @extend %form-group-input--hover !optional;
        }

        &:focus {
            @extend %form-group-input--focus !optional;
        }
    }

    @include e(border) {
        @extend %form-group-border !optional;
    }

    @include e(hint) {
        @extend %form-group-helper !optional;
    }

    @include e(hint-item) {
        @extend %form-group-helper-item !optional;
    }

    @include e(hint-item, $m: start) {
        @extend %form-group-helper-item !optional;
        @extend %form-group-helper-item--start !optional;
    }

    @include e(hint-item, $m: end) {
        @extend %form-group-helper-item !optional;
        @extend %form-group-helper-item--end !optional;
    }

    @include m(focused) {
        @extend %form-group-display !optional;

        @include e(bundle) {
            @extend %form-group-bundle--focus	!optional;
        }

        @include e(label) {
            @extend %form-group-label--float !optional;
            @extend %form-group-label--focus !optional;
        }

        @include e(border) {
            @extend %form-group-border--focus !optional;
        }
    }

    @include m(placeholder) {
        @include e(label) {
            @extend %form-group-label--float !optional;
            @extend %form-group-label--fixed !optional;
        }
    }

    @include m(filled) {
        @include e(label) {
            @extend %form-group-label--float !optional;
        }
    }

    @include m(required) {
        @include e(label) {
            @extend %form-group-label--required !optional;
        }
    }

    @include m(invalid) {
        @extend %form-group-display--error !optional;

        @include e(label) {
            @extend %form-group-label--error !optional;
        }

        @include e(border) {
            @extend %form-group-border--error !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--error !optional;
        }

        @include e(bundle) {
            @extend %form-group-bundle--error !optional;
        }
    }

    @include m(valid) {
        @include e(label) {
            @extend %form-group-label--success !optional;
        }

        @include e(border) {
            @extend %form-group-border--success !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--success !optional;
        }

        @include e(bundle) {
            @extend %form-group-bundle--success !optional;
        }
    }

    @include m(disabled) {
        @extend %form-group-display--disabled !optional;

        @include e(bundle) {
            @extend %form-group-bundle--disabled !optional;
        }

        @include e(label) {
            @extend %form-group-label--fixed !optional;
        }

        @include e(input) {
            @extend %form-group-input--disabled !optional;
        }
    }

    @include m(cosy) {
        @extend %form-group-display--cosy !optional;

        @include e(bundle) {
            @extend %form-group-bundle--cosy !optional;
        }

        @include e(label) {
            @extend %form-group-label--cosy !optional;
        }

        @include e(input) {
            @extend %form-group-input--cosy !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--cosy !optional;
        }

        @include e(hint) {
            @extend %form-group-hint--cosy !optional;
        }
    }

    @include m(compact) {
        @extend %form-group-display--compact !optional;

        @include e(bundle) {
            @extend %form-group-bundle--compact !optional;
        }

        @include e(label) {
            @extend %form-group-label--compact !optional;
        }

        @include e(input) {
            @extend %form-group-input--compact !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--compact !optional;
        }

        @include e(hint) {
            @extend %form-group-hint--compact !optional;
        }
    }

    @include m(box) {
        @extend %form-group-display--no-margin !optional;

        @include e(wrapper) {
            @extend %form-group-box-wrapper !optional;
        }

        @include e(bundle) {
            @extend %form-group-bundle--box !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box !optional;
        }

        @include e(input) {
            @extend %form-group-input--box !optional;
        }

        @include e(label) {
            @extend %form-group-label--box !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--box !optional;
        }
    }

    @include mx(box, cosy) {
        @extend %form-group-display--no-margin-cosy !optional;

        @include e(bundle) {
            @extend %form-group-bundle--box-cosy !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-cosy !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-cosy !optional;
        }
    }

    @include mx(box, compact) {
        @extend %form-group-display--no-margin-compact !optional;

        @include e(bundle) {
            @extend %form-group-bundle--box-compact !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-compact !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-compact !optional;
        }
    }

    @include mx(disabled, box) {
        @include e(bundle) {
            @extend %form-group-bundle--box-disabled !optional;
        }
    }

    @include m(border) {
        @extend %form-group-display--no-margin !optional;

        @include e(bundle) {
            @extend %form-group-bundle--border !optional;

            &:hover {
                @extend %form-group-bundle-border--hover !optional;
            }
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box !optional;
        }

        @include e(border) {
            @extend %form-group-border--hidden !optional;
        }

        @include e(input) {
            @extend %form-group-input--box !optional;
        }

        @include e(label) {
            @extend %form-group-label--box !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--box !optional;
        }
    }

    @include mx(border, cosy) {
        @extend %form-group-display--no-margin-cosy !optional;

        @include e(bundle) {
            @extend %form-group-bundle--border-cosy !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-cosy !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-cosy !optional;
        }
    }

    @include mx(border, compact) {
        @extend %form-group-display--no-margin-compact !optional;

        @include e(bundle) {
            @extend %form-group-bundle--border-compact !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-compact !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-compact !optional;
        }
    }

    @include mx(valid, border) {
        @include e(bundle) {
            @extend %form-group-bundle-border--success !optional;
        }
    }

    @include mx(invalid, border) {
        @include e(bundle) {
            @extend %form-group-bundle-border--error !optional;
        }
    }

    @include mx(focused, border) {
        @include e(bundle) {
            @extend %form-group-bundle-border--focus !optional;
        }
    }

    @include mx(disabled, border) {
        @include e(bundle) {
            @extend %form-group-bundle-border--disabled !optional;
        }
    }

    // FLUENT THEME //
    @include m(fluent) {
        @extend %igx-input-group-fluent !optional;

        @include e(bundle) {
            @extend %form-group-bundle--fluent !optional;

            &:hover {
                @extend %form-group-bundle--fluent--hover !optional;
            }
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--fluent !optional;
        }

        @include e(input) {
            @extend %fluent-input !optional;
        }

        @include e(label) {
            @extend %fluent-label !optional;
        }

        @include e(textarea) {
            @extend %fluent-textarea !optional;
        }
    }

    @include mx(placeholder, fluent) {
        @include e(label) {
            @extend %fluent-placeholder-label !optional;
        }
    }

    @include mx(cosy, fluent) {
        @extend %igx-input-group-fluent--cosy !optional;
    }

    @include mx(compact, fluent) {
        @extend %igx-input-group-fluent--compact !optional;
    }

    @include mx(disabled, fluent) {
        @include e(bundle) {
            @extend %form-group-bundle--fluent-disabled !optional;

            &:hover {
                @extend %form-group-bundle--fluent--hover-disabled !optional;
            }
        }

        @include e(input) {
            %fluent-input-disabled {
                @extend %fluent-input-disabled !optional
            }

            &:hover {
                @extend %fluent-input-disabled !optional
            }

            &:focus {
                @extend %fluent-input-disabled !optional
            }
        }

        @include e(label) {
            @extend %fluent-label-disabled !optional;
        }
    }

    @include mx(filled, fluent) {
        @include e(label) {
            @extend %fluent-label-filled !optional;
        }
    }

    @include mx(focused, fluent) {
        @include e(bundle) {
            @extend %form-group-bundle--focus !optional;

            &:hover {
                @extend %form-group-bundle--fluent--focus !optional;
            }
        }

        @include e(label) {
            @extend %fluent-label-focused !optional;
        }
    }

    @include mx(required, fluent) {
        @include e(bundle) {
            @extend %form-group-bundle-required--fluent !optional;
        }
    }

    @include mx(valid, fluent) {
        @include e(bundle) {
            @extend %form-group-bundle-success--fluent !optional;

            &:hover {
                @extend %form-group-bundle-success--fluent--hover !optional;
            }
        }

        @include e(label) {
            @extend %fluent-label-success !optional;
        }
    }

    @include mx(invalid, fluent) {
        @include e(bundle) {
            @extend %form-group-bundle-error--fluent !optional;

            &:hover {
                @extend %form-group-bundle-error--fluent--hover !optional;
            }
        }

        @include e(label) {
            @extend %fluent-label-error !optional;
        }
    }
    // FLUENT THEME END //

    @include m(search) {
        @extend %form-group-display--no-margin !optional;

        @include e(bundle) {
            @extend %form-group-bundle--search !optional;

            &:hover {
                @extend %form-group-bundle-search--hover !optional;
            }
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box !optional;
        }

        @include e(border) {
            @extend %form-group-border--hidden !optional;
        }

        @include e(input) {
            @extend %form-group-input--box !optional;
        }

        @include e(label) {
            @extend %form-group-label--box !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--box !optional;
        }
    }

    @include mx(search, cosy) {
        @extend %form-group-display--no-margin-cosy !optional;

        @include b(bundle) {
            @extend %form-group-bundle--search-cosy !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-cosy !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-cosy !optional;
        }
    }

    @include mx(search, compact) {
        @extend %form-group-display--no-margin-compact !optional;

        @include b(bundle) {
            @extend %form-group-bundle--search-compact !optional;
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--box-compact !optional;
        }

        @include e(textarea) {
            @extend %form-group-textarea--box-compact !optional;
        }
    }

    @include mx(focused, search) {
        @include e(bundle) {
            @extend %form-group-bundle-search--focus !optional;
        }
    }

    @include mx(disabled, search) {
        @include e(bundle) {
            @extend %form-group-bundle-search--disabled !optional;
        }
    }

    @include m(fluent-search) {
        @extend %igx-input-group-fluent-search !optional;

        @include e(bundle) {
            @extend %form-group-bundle--fluent !optional;

            &:hover {
                @extend %form-group-bundle--fluent--hover !optional;
            }
        }

        @include e(bundle-main) {
            @extend %form-group-bundle-main--fluent !optional;
        }

        @include e(input) {
            @extend %fluent-input !optional;
        }

        @include e(label) {
            @extend %fluent-label !optional;
        }

        @include e(hint) {
            @extend %form-group-helper--box !optional;
        }
    }

    @include mx(fluent-search, cosy) {
        @extend %igx-input-group-fluent-search--cosy !optional;
    }

    @include mx(fluent-search, compact) {
        @extend %igx-input-group-fluent-search--compact !optional;
    }

    @include mx(focused, fluent-search) {
        @extend %igx-input-group-fluent-search--focused !optional;
    }

    @include mx(disabled, fluent-search) {
        @include e(bundle) {
            @extend %form-group-bundle-search--disabled !optional;
        }
    }
}
