// Copyright (C) 2009 The Android Open Source Project
//
// 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.

package com.google.gerrit.client;

import com.google.gwt.resources.client.CssResource;

public interface GerritCss extends CssResource {
  String accountDashboard();

  String accountInfoBlock();

  String accountLinkPanel();

  String accountPassword();

  String accountUsername();

  String activeRow();

  String addBranch();

  String addMemberTextBox();

  String addSshKeyPanel();

  String addWatchPanel();

  String avatarInfoPanel();

  String bottomheader();

  String branchTableDeleteButton();

  String branchTablePrevNextLinks();

  String cAPPROVAL();

  String cASSIGNEE();

  String cASSIGNEDTOME();

  String cLastUpdate();

  String cOWNER();

  String cSIZE();

  String cSUBJECT();

  String cSTATUS();

  String changeSize();

  String changeTable();

  String changeTablePrevNextLinks();

  String commentedActionDialog();

  String commentedActionMessage();

  String contributorAgreementAlreadySubmitted();

  String contributorAgreementButton();

  String contributorAgreementLegal();

  String contributorAgreementShortDescription();

  String createProjectPanel();

  String dataCell();

  String dataCellHidden();

  String dataHeader();

  String dataHeaderHidden();

  String downloadBox();

  String downloadBoxTable();

  String downloadBoxTableCommandColumn();

  String downloadBoxSpacer();

  String downloadBoxScheme();

  String downloadBoxCopyLabel();

  String downloadLink();

  String downloadLinkCopyLabel();

  String downloadLinkHeader();

  String downloadLinkHeaderGap();

  String downloadLinkList();

  String downloadLink_Active();

  String editHeadButton();

  String emptySection();

  String errorDialog();

  String errorDialogButtons();

  String errorDialogErrorType();

  String errorDialogGlass();

  String errorDialogTitle();

  String extensionPanel();

  String loadingPluginsDialog();

  String gerritBody();

  String gerritTopMenu();

  String greenCheckClass();

  String groupDescriptionPanel();

  String groupIncludesTable();

  String groupMembersTable();

  String groupName();

  String groupNamePanel();

  String groupNameTextBox();

  String groupOptionsPanel();

  String groupOwnerPanel();

  String groupOwnerTextBox();

  String groupUUIDPanel();

  String header();

  String iconCell();

  String iconHeader();

  String identityUntrustedExternalId();

  String infoBlock();

  String inputFieldTypeHint();

  String labelNotApplicable();

  String leftMostCell();

  String link();

  String linkMenuBar();

  String linkMenuItemNotLast();

  String maxObjectSizeLimitEffectiveLabel();

  String menuBarUserName();

  String menuBarUserNameAvatar();

  String menuBarUserNameFocusPanel();

  String menuBarUserNamePanel();

  String menuItem();

  String menuScreenMenuBar();

  String needsReview();

  String negscore();

  String oauthExpires();

  String oauthInfoBlock();

  String oauthPanel();

  String oauthPanelCookieEntry();

  String oauthPanelCookieHeading();

  String oauthPanelNetRCEntry();

  String oauthPanelNetRCHeading();

  String oauthToken();

  String pagingLink();

  String patchSetActions();

  String pluginProjectConfigInheritedValue();

  String pluginsTable();

  String posscore();

  String projectActions();

  String projectFilterLabel();

  String projectFilterPanel();

  String projectNameColumn();

  String queryIcon();

  String rebaseContentPanel();

  String rebaseSuggestBox();

  String registerScreenExplain();

  String registerScreenNextLinks();

  String registerScreenSection();

  String rpcStatus();

  String screen();

  String screenHeader();

  String searchPanel();

  String suggestBoxPopup();

  String sectionHeader();

  String singleLine();

  String smallHeading();

  String specialBranchDataCell();

  String specialBranchIconCell();

  String sshHostKeyPanel();

  String sshHostKeyPanelFingerprintData();

  String sshHostKeyPanelHeading();

  String sshHostKeyPanelKnownHostEntry();

  String sshKeyPanelEncodedKey();

  String sshKeyPanelInvalid();

  String sshKeyTable();

  String stringListPanelButtons();

  String topmenu();

  String topmenuMenuLeft();

  String topmenuMenuRight();

  String topmenuTDglue();

  String topmenuTDmenu();

  String topmost();

  String userInfoPopup();

  String usernameField();

  String watchedProjectFilter();
}
