"""
 Copyright 2020-present Open Networking Foundation

 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("@npm_angular_bazel//:index.bzl", "ng_module")
load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

package(default_visibility = ["//:__subpackages__"])

# We don't import from these, but the generated ngfactory code will
NG_FACTORY_ADDED_IMPORTS = [
    "@npm//@angular/animations",
    "@npm//@angular/forms",
]

ng_module(
    name = "app",
    srcs = [
        "nav/nav.component.ts",
        "onos.component.ts",
        "onos.module.ts",
        "onos.service.ts",
        "onos-routing.module.ts",
    ],
    assets = [
        "onos.common.css",
        "onos.component.css",
        "onos.component.html",
        "nav/nav.component.css",
        "nav/nav.component.html",
        "nav/nav.theme.css",
    ],
    tsconfig = "//web/gui2:tsconfig.json",
    deps = NG_FACTORY_ADDED_IMPORTS + [
        "//web/gui2-fw-lib",
        "//web/gui2/src/main/webapp/app/view/apps:gui2-view-apps",
        "//web/gui2/src/main/webapp/app/view/processor:gui2-view-processor",
        "//web/gui2/src/main/webapp/app/view/settings:gui2-view-settings",
        "//web/gui2/src/main/webapp/app/view/partition:gui2-view-partition",
        "//web/gui2/src/main/webapp/app/view/cluster:gui2-view-cluster",
        "//web/gui2/src/main/webapp/app/view/device:gui2-view-device",
        "//web/gui2/src/main/webapp/app/view/link:gui2-view-link",
        "//web/gui2/src/main/webapp/app/view/host:gui2-view-host",
        "//web/gui2/src/main/webapp/app/view/flow:gui2-view-flow",
        "//web/gui2/src/main/webapp/app/view/intent:gui2-view-intent",
        "//web/gui2/src/main/webapp/app/view/tunnel:gui2-view-tunnel",
        "//web/gui2/src/main/webapp/app/view/port:gui2-view-port",
        "//web/gui2/src/main/webapp/app/view/group:gui2-view-group",
        "//web/gui2/src/main/webapp/app/view/meter:gui2-view-meter",
        "//web/gui2/src/main/webapp/app/view/pipeconf:gui2-view-pipeconf",
        "//web/gui2-topo-lib:gui2-topo-lib",
        "//apps/faultmanagement/fm-gui2-lib:fm-gui2-lib",
        "//apps/roadm/web/roadm-gui:roadm-gui",
        "//apps/yang-gui/yang-gui2-lib:yang-gui2-lib",
        "@npm//@angular/core",
        "@npm//@angular/router",
        "@npm//@angular/platform-browser",
        "@npm//rxjs",
        "@npm//@types",
    ],
)
