{
  "namespace": "storage_migration_generic",

  "storage_migration_generic_screen@common.base_screen": {
    "$screen_content": "storage_migration_generic.modal_screen_content"
  },

  "modal_screen_content": {
    "type": "panel",
    "$button_state_default_base": "progress.normal_stroke_button",
    "$button_state_hover_base": "progress.normal_stroke_button",
    "$button_state_pressed_base": "progress.normal_stroke_button",
    "controls": [
      {
        "modal_progress_panel_no_cancel@storage_migration_common.progress_panel": {
          "bindings": [
            {
              "binding_name": "#progress_panel_visible",
              "binding_name_override": "#visible"
            }
          ]
        }
      },
      {
        "popup_dialog_factory": {
          "type": "factory",
          "control_ids": {
            "intro": "start_transfer@storage_migration_generic.start_transfer",
            "start_transfer_out_of_space": "start_transfer_out_of_space@storage_migration_generic.start_transfer_out_of_space",
            "resume_transfer": "resume_transfer@storage_migration_common.resume_transfer",
            "resume_transfer_out_of_space": "resume_transfer_out_of_space@storage_migration_generic.resume_transfer_out_of_space",
            "finished_transfered": "finished@storage_migration_generic.finished",
            "transfer_error": "transfer_error@storage_migration_generic.transfer_error",
            "transfer_error_out_of_space": "transfer_error_out_of_space@storage_migration_generic.transfer_error_out_of_space",

            // These are not explicit states for the transfer flow. Adding as a safety net so users don't get stuck on an empty screen.
            "start_transfer": "start_transfer@storage_migration_generic.start_transfer",
            "finished_already_transfered": "finished@storage_migration_generic.finished",
            "finished_with_error": "transfer_error@storage_migration_generic.transfer_error"
          }
        }
      }
    ]
  },

  // Start Transfer
  "start_transfer@storage_migration_common.start_transfer": {
    "$text_name": "storage_migration.start_transfer.generic.title"
  },

  // Start Transfer - Out of Space
  "start_transfer_out_of_space@storage_migration_common.start_transfer": {
    "$show_close_button": true,
    "$text_name": "storage_migration.start_transfer.generic.title",
    "$tts_label_panel": "storage_migration_generic.start_transfer_out_of_space_content",
    "$button_panel": "storage_migration_common.start_transfer_out_of_space_button"
  },

  "start_transfer_out_of_space_content": {
    "type": "stack_panel",
    "orientation": "vertical",
    "controls": [
      {
        "base_start_content@storage_migration_common.start_transfer_content": {
          "$description_text": "storage_migration.description.out_of_space"
        }
      },
      {
        "padding": {
          "type": "panel",
          "size": [ 0, 14 ]
        }
      },
      {
        "error_icon_and_description@storage_migration_common.error_icon_and_description": {}
      }
    ]
  },

  // Finished
  "finished@storage_migration_common.modal_one_button": {
    "$text_name": "storage_migration.finished.generic.title",
    "$button_panel": "storage_migration_common.exit_button",
    "$tts_label_panel": "storage_migration_generic.finished_content"
  },

  "finished_content": {
    "type": "stack_panel",
    "size": [ "100% - 4px", "100%c + 10px" ],
    "controls": [
      {
        "description@storage_migration_common.label": {
          "text": "storage_migration.finished.generic.description"
        }
      }
    ]
  },

  // Resume Transfer - Out of Space
  "resume_transfer_out_of_space@storage_migration_common.modal_one_button": {
    "$show_close_button": true,
    "$text_name": "storage_migration.resume_transfer.title",
    "$button_panel": "storage_migration_common.continue_out_of_space_button",
    "$tts_label_panel": "storage_migration_generic.resume_transfer_out_of_space_content"
  },

  "resume_transfer_out_of_space_content@storage_migration_common.file_size_description_with_error": {
    "$description_text": "storage_migration.resume_transfer.description.out_of_space"
  },

  // Transfer Error
  "transfer_error@storage_migration_common.modal_one_button": {
    "$show_close_button": true,
    "$text_name": "storage_migration.transfer_error.title",
    "$button_panel": "storage_migration_common.retry_button",
    "$tts_label_panel": "storage_migration_generic.transfer_error_content"
  },

  "transfer_error_content": {
    "type": "stack_panel",
    "size": [ "100% - 4px", "100%c + 10px" ],
    "controls": [
      {
        "description@storage_migration_common.label": {
          "text": "#transfer_error_description",
          "bindings": [
            {
              "binding_name": "#transfer_error_description"
            }
          ]
        }
      }
    ]
  },

  // Transfer Error - Out of Space
  "transfer_error_out_of_space@storage_migration_common.transfer_error_out_of_space": {
    "$show_close_button": true
  }
}
