# Copyright 2018-present The Material Components for iOS Authors. All Rights Reserved.
#
# 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.

load(
    "//:material_components_ios.bzl",
    "mdc_examples_swift_library",
    "mdc_extension_objc_library",
    "mdc_objc_library",
    "mdc_public_objc_library",
    "mdc_unit_test_suite",
)
load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library")

licenses(["notice"])  # Apache 2.0

mdc_public_objc_library(
    name = "NavigationDrawer",
    sdk_frameworks = [
        "Foundation",
        "UIKit",
    ],
    deps = [
        "//components/Palettes",
        "//components/ShadowLayer",
        "//components/private/Math",
        "//components/private/UIMetrics",
    ],
)

mdc_extension_objc_library(
    name = "ColorThemer",
    deps = [
        ":NavigationDrawer",
        "//components/schemes/Color",
    ],
)

mdc_objc_library(
    name = "private",
    hdrs = native.glob(["src/private/*.h"]),
    includes = ["src/private"],
    visibility = ["//visibility:private"],
)

mdc_objc_library(
    name = "TestingHeader",
    testonly = 1,
    hdrs = native.glob(["src/private/MDCBottomDrawerContainerViewController+Testing.h"]),
    includes = ["src/private/MDCBottomDrawerContainerViewController+Testing.h"],
    visibility = ["//visibility:public"],
    deps = [":NavigationDrawer"],
)

mdc_examples_swift_library(
    name = "SwiftExamples",
    deps = [
        ":ColorThemer",
        ":NavigationDrawer",
        "//components/BottomAppBar",
        "//components/BottomAppBar:ColorThemer",
        "//components/schemes/Color",
    ],
)

mdc_objc_library(
    name = "unit_test_sources",
    testonly = 1,
    srcs = native.glob([
        "tests/unit/*.m",
        "tests/unit/*.h",
    ]),
    sdk_frameworks = [
        "UIKit",
        "XCTest",
    ],
    visibility = ["//visibility:private"],
    deps = [
        ":ColorThemer",
        ":NavigationDrawer",
        ":private",
    ],
)

mdc_unit_test_suite(
    name = "unit_tests",
    deps = [
        ":unit_test_sources",
    ],
)
