# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/dart/dart_library.gni")
import("//topaz/runtime/dart/flutter_test.gni")

dart_library("lib.widgets") {
  package_name = "lib.widgets"

  sdk_category = "partner"
  sources_required = false

  sources = [
    "application.dart",
    "application_deprecated.dart",
    "model.dart",
    "src/application/application_widget.dart",
    "src/model/model.dart",
    "src/model/spring_model.dart",
    "src/model/ticking_model.dart",
    "src/model/tracing_spring_model.dart",
    "src/widgets/alphatar.dart",
    "src/widgets/conditional_builder.dart",
    "src/widgets/fuchsia_spinner.dart",
    "src/widgets/future_widget.dart",
    "src/widgets/rk4_spring_simulation.dart",
    "src/widgets/ticking_state.dart",
    "src/widgets/window_media_query.dart",
    "widgets.dart",

    # Including these files causes analysis errors
    # "utils.dart",
    # "utils_deprecated.dart",
    # "src/application/application_widget_deprecated.dart",
    # "src/utils/frame_rate_tracer.dart",
    # "src/utils/deprecate.dart",
    # "src/utils/pointer_events_listener.dart",
    # "src/utils/change_notifiers.dart",
    # "src/utils/pointer_events_listener_deprecated.dart",
    # "src/model/provider.dart",
    # "src/widgets/lottie_player.dart",
    # "src/widgets/screen_container.dart",
    # "src/widgets/settings_item.dart",
  ]

  deps = [
    "//sdk/fidl/fuchsia.modular",
    "//sdk/fidl/fuchsia.ui.app",
    "//sdk/fidl/fuchsia.ui.policy",
    "//sdk/fidl/fuchsia.ui.views",
    "//third_party/dart-pkg/git/flutter/packages/flutter",
    "//third_party/dart-pkg/pub/flutter_image",
    "//topaz/bin/ui/skottie_viewer:skottie_loader",
    "//topaz/public/dart/fidl",
    "//topaz/public/dart/fuchsia_logger",
    "//topaz/public/dart/fuchsia_scenic_flutter",
    "//topaz/public/lib/app/dart",
    "//zircon/public/fidl/fuchsia-cobalt",
  ]
}

flutter_test("dart_widget_tests") {
  sources = [
    "alphatar_test.dart",
    "providers_test.dart",
    "rk4_spring_simulation_test.dart",
  ]

  deps = [
    ":lib.widgets",
    "//third_party/dart-pkg/git/flutter/packages/flutter_test",
    "//third_party/dart-pkg/pub/test",
    "//topaz/public/lib/testing/flutter",
  ]
}
