/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

/* Checkboxes */

@mixin fds-checkboxes-theme($theme) {
    $primaryColor: map-get(map-get($theme, primary), 500);
    $primaryColorHover: map-get(map-get($theme, primary), 100);
    $accentColor: map-get(map-get($theme, accent), 500);
    $accentColorHover: map-get(map-get($theme, accent), 100);

    body[fds] {
        .mat-checkbox-inner-container {
            height: 10px !important;
            width: 10px !important;
            margin-right: 5px;

            &:hover {
                background-color: $accentColor;
                border-radius: 2px;
            }
        }

        .mat-checkbox-frame {
            height: 10px;
            width: 10px;
            border-color: $grey7;
        }

        .mat-checkbox-ripple {
            left: -15px;
            top: -15px;
        }

        .mat-checkbox-background {
            height: 10px;
            width: 10px;
        }

        .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background,
        .mat-checkbox-checked.mat-accent .mat-checkbox-background {
            background-color: $accentColor;
        }

        .mat-checkbox-disabled {
            cursor: not-allowed;
        }

        .mat-checkbox-layout .mat-checkbox-label {
            line-height: unset;
        }
    }
}
