// 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 accountContactOnFile();
  String accountContactPrivacyDetails();
  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 branchTablePrevNextLinks();
  String cAPPROVAL();
  String cLastUpdate();
  String cOWNER();
  String cSIZE();
  String cSUBJECT();
  String cSTATUS();
  String cellsNextToFileComment();
  String changeScreenDescription();
  String changeScreenStarIcon();
  String changeSize();
  String changeTable();
  String changeTablePrevNextLinks();
  String changeTypeCell();
  String commentCell();
  String commentEditorPanel();
  String commentHolder();
  String commentHolderLeftmost();
  String commentPanel();
  String commentPanelAuthorCell();
  String commentPanelButtons();
  String commentPanelContent();
  String commentPanelDateCell();
  String commentPanelHeader();
  String commentPanelLast();
  String commentPanelMessage();
  String commentPanelSummary();
  String commentPanelSummaryCell();
  String commentedActionDialog();
  String commentedActionMessage();
  String contributorAgreementAlreadySubmitted();
  String contributorAgreementButton();
  String contributorAgreementLegal();
  String contributorAgreementShortDescription();
  String createProjectPanel();
  String dataCell();
  String dataCellHidden();
  String dataHeader();
  String dataHeaderHidden();
  String diffLinkCell();
  String diffText();
  String diffTextCONTEXT();
  String diffTextDELETE();
  String diffTextFileHeader();
  String diffTextHunkHeader();
  String diffTextINSERT();
  String diffTextNoLF();
  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 drafts();
  String editHeadButton();
  String emptySection();
  String errorDialog();
  String errorDialogButtons();
  String errorDialogErrorType();
  String errorDialogGlass();
  String errorDialogTitle();
  String loadingPluginsDialog();
  String fileColumnHeader();
  String fileCommentBorder();
  String fileLine();
  String fileLineDELETE();
  String fileLineINSERT();
  String filePathCell();
  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 iconCellOfFileCommentRow();
  String iconHeader();
  String identityUntrustedExternalId();
  String infoBlock();
  String inputFieldTypeHint();
  String labelNotApplicable();
  String leftMostCell();
  String lineNumber();
  String link();
  String linkMenuBar();
  String linkMenuItemNotLast();
  String linkPanel();
  String maxObjectSizeLimitEffectiveLabel();
  String menuBarUserName();
  String menuBarUserNameAvatar();
  String menuBarUserNameFocusPanel();
  String menuBarUserNamePanel();
  String menuItem();
  String menuScreenMenuBar();
  String needsReview();
  String negscore();
  String noborder();
  String patchBrowserPopup();
  String patchBrowserPopupBody();
  String patchCellReverseDiff();
  String patchContentTable();
  String patchHistoryTable();
  String patchHistoryTablePatchSetHeader();
  String patchNoDifference();
  String patchSetActions();
  String patchSizeCell();
  String pluginProjectConfigInheritedValue();
  String pluginsTable();
  String posscore();
  String projectActions();
  String projectFilterLabel();
  String projectFilterPanel();
  String projectNameColumn();
  String rebaseContentPanel();
  String rebaseSuggestBox();
  String registerScreenExplain();
  String registerScreenNextLinks();
  String registerScreenSection();
  String reviewedPanelBottom();
  String rightBorder();
  String rpcStatus();
  String screen();
  String screenHeader();
  String searchPanel();
  String suggestBoxPopup();
  String sectionHeader();
  String sideBySideScreenLinkTable();
  String singleLine();
  String smallHeading();
  String sourceFilePath();
  String specialBranchDataCell();
  String specialBranchIconCell();
  String sshHostKeyPanel();
  String sshHostKeyPanelFingerprintData();
  String sshHostKeyPanelHeading();
  String sshHostKeyPanelKnownHostEntry();
  String sshKeyPanelEncodedKey();
  String sshKeyPanelInvalid();
  String stringListPanelButtons();
  String topMostCell();
  String topmenu();
  String topmenuMenuLeft();
  String topmenuMenuRight();
  String topmenuTDglue();
  String topmenuTDmenu();
  String topmost();
  String unifiedTable();
  String unifiedTableHeader();
  String userInfoPopup();
  String usernameField();
  String watchedProjectFilter();
}
