// 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 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 extensionPanel();
  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 nowrap();
  String pagingLink();
  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 sshKeyTable();
  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();
}
