/**
 *
 * @ai-apps/angular v2.152.0 | _theme.scss
 *
 * Copyright 2014, 2023 IBM
 *
 * Licensed 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.
 */


//
// Copyright IBM Corp. 2018, 2018
//
// This source code is licensed under the Apache-2.0 license found in the
// LICENSE file in the root directory of this source tree.
//

@use 'sass:map';
@use 'sass:meta';
@use 'config';
@use 'themes';

/// Specify the fallback theme, used as a catch-all for tokens that you may not
/// have defined in your custom theme
$fallback: themes.$white !default;

/// Specify the current theme. This can override existing tokens, or add new
/// tokens. If you are adding new tokens, it's recommended that you set the
/// fallback for your current theme
$theme: () !default;
$theme: map.merge($fallback, $theme);

/// Include the CSS Custom Properties for the active theme or a given theme on
/// a selector
@mixin theme($active-theme: $theme, $component-tokens...) {
  @each $token, $value in $active-theme {
    @include -custom-property($token, $value);
  }

  @each $group in $component-tokens {
    @each $token, $value in $group {
      @include -custom-property($token, $value);
    }
  }
}

/// Retrieve the value for the given $token from the current $theme
/// @param {String} $token
@function get($token) {
  @if map.has-key($theme, $token) {
    @return map.get($theme, $token);
  }
  @error "Unable to find token: #{$token} in current $theme";
}

/// @access private
/// @group @carbon/themes
@mixin -custom-property($name, $value) {
  @if meta.type-of($value) == map {
    @each $property, $property-value in $value {
      // Only support one-level of depth for values that are maps. This is to
      // avoid bringing properties like `breakpoints` on type tokens
      @if type-of($property-value) != map {
        @include -custom-property('#{$name}-#{$property}', $property-value);
      }
    }
  } @else {
    --#{config.$prefix}-#{$name}: #{$value};
  }
}
