# Copyright 2018 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("//third_party/closure_compiler/compile_js.gni")

js_type_check("closure_compile") {
  deps = [
    ":address_edit_dialog",
    ":autofill_section",
    ":credit_card_edit_dialog",
    ":password_edit_dialog",
    ":password_list_item",
    ":password_manager_proxy",
    ":passwords_and_forms_page",
    ":passwords_section",
    ":payments_section",
    ":show_password_behavior",
  ]
}

js_library("passwords_and_forms_page") {
  deps = [
    ":autofill_section",
    ":passwords_section",
    ":payments_section",
    "..:route",
    "../prefs:prefs_behavior",
    "../settings_page:settings_animated_pages",
    "//ui/webui/resources/js:assert",
    "//ui/webui/resources/js:cr",
  ]
  externs_list = [
    "$externs_path/passwords_private.js",
    "$externs_path/settings_private.js",
  ]
}

js_library("autofill_section") {
  deps = [
    ":address_edit_dialog",
    "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
    "//ui/webui/resources/js:assert",
    "//ui/webui/resources/js:load_time_data",
    "//ui/webui/resources/js/cr/ui:focus_without_ink",
  ]
  externs_list = [ "$externs_path/autofill_private.js" ]
}

js_library("payments_section") {
  deps = [
    ":credit_card_edit_dialog",
    "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
    "//ui/webui/resources/js:assert",
    "//ui/webui/resources/js:load_time_data",
    "//ui/webui/resources/js/cr/ui:focus_without_ink",
  ]
  externs_list = [ "$externs_path/autofill_private.js" ]
}

js_library("address_edit_dialog") {
  deps = [
    "//ui/webui/resources/js:cr",
    "//ui/webui/resources/js:i18n_behavior",
  ]
  externs_list = [ "$externs_path/autofill_private.js" ]
}

js_library("credit_card_edit_dialog") {
  deps = [
    "//ui/webui/resources/js:i18n_behavior",
  ]
  externs_list = [ "$externs_path/autofill_private.js" ]
}

js_library("password_list_item") {
  deps = [
    ":show_password_behavior",
    "..:focus_row_behavior",
    "//ui/webui/resources/js:load_time_data",
  ]
}

js_library("password_manager_proxy") {
  deps = [
    "//ui/webui/resources/js:cr",
  ]
  externs_list = [ "$externs_path/passwords_private.js" ]
}

js_library("passwords_section") {
  deps = [
    ":password_edit_dialog",
    ":password_list_item",
    ":password_manager_proxy",
    "..:global_scroll_target_behavior",
    "//third_party/polymer/v1_0/components-chromium/iron-a11y-announcer:iron-a11y-announcer-extracted",
    "//third_party/polymer/v1_0/components-chromium/iron-a11y-keys-behavior:iron-a11y-keys-behavior-extracted",
    "//ui/webui/resources/cr_elements/cr_action_menu:cr_action_menu",
    "//ui/webui/resources/cr_elements/cr_toast:cr_toast",
    "//ui/webui/resources/js:assert",
    "//ui/webui/resources/js:i18n_behavior",
    "//ui/webui/resources/js:list_property_update_behavior",
    "//ui/webui/resources/js/cr/ui:focus_without_ink",
  ]
  externs_list = [ "$externs_path/passwords_private.js" ]
}

js_library("password_edit_dialog") {
  deps = [
    ":show_password_behavior",
    "//ui/webui/resources/cr_elements/cr_input:cr_input",
  ]
}

js_library("show_password_behavior") {
  externs_list = [ "$externs_path/passwords_private.js" ]
}
