// 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 accountName();
  String accountPassword();
  String accountUsername();
  String activeRow();
  String addBranch();
  String addMemberTextBox();
  String addReviewer();
  String addSshKeyPanel();
  String addWatchPanel();
  String approvalTable();
  String approvalhint();
  String approvalrole();
  String approvalscore();
  String avatarInfoPanel();
  String blockHeader();
  String bottomheader();
  String cAPPROVAL();
  String cLastUpdate();
  String cOWNER();
  String cSIZE();
  String cSUBJECT();
  String cSTATUS();
  String cellsNextToFileComment();
  String changeComments();
  String changeInfoBlock();
  String changeInfoTopicPanel();
  String changeScreen();
  String changeScreenDescription();
  String changeScreenStarIcon();
  String changeSize();
  String changeTable();
  String changeTablePrevNextLinks();
  String changeTypeCell();
  String changeid();
  String closedstate();
  String commentCell();
  String commentEditorPanel();
  String commentHolder();
  String commentHolderLeftmost();
  String commentPanel();
  String commentPanelAuthorCell();
  String commentPanelBorder();
  String commentPanelButtons();
  String commentPanelContent();
  String commentPanelDateCell();
  String commentPanelHeader();
  String commentPanelLast();
  String commentPanelMenuBar();
  String commentPanelMessage();
  String commentPanelSummary();
  String commentPanelSummaryCell();
  String commentedActionDialog();
  String commentedActionMessage();
  String complexHeader();
  String content();
  String contributorAgreementAlreadySubmitted();
  String contributorAgreementButton();
  String contributorAgreementLegal();
  String contributorAgreementShortDescription();
  String coverMessage();
  String createGroupLink();
  String createProjectPanel();
  String dataCell();
  String dataCellHidden();
  String dataHeader();
  String dataHeaderHidden();
  String diffLinkCell();
  String diffText();
  String diffTextCONTEXT();
  String diffTextDELETE();
  String diffTextFileHeader();
  String diffTextForBinaryInSideBySide();
  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 downloadLinkListCell();
  String downloadLink_Active();
  String drafts();
  String editHeadButton();
  String emptySection();
  String errorDialog();
  String errorDialogButtons();
  String errorDialogErrorType();
  String errorDialogGlass();
  String errorDialogText();
  String errorDialogTitle();
  String loadingPluginsDialog();
  String fileColumnHeader();
  String fileCommentBorder();
  String fileLine();
  String fileLineCONTEXT();
  String fileLineDELETE();
  String fileLineINSERT();
  String fileLineMode();
  String fileLineNone();
  String filePathCell();
  String gerritBody();
  String gerritTopMenu();
  String greenCheckClass();
  String groupDescriptionPanel();
  String groupExternalNameFilterTextBox();
  String groupIncludesTable();
  String groupMembersTable();
  String groupName();
  String groupNamePanel();
  String groupNameTextBox();
  String groupOptionsPanel();
  String groupOwnerPanel();
  String groupOwnerTextBox();
  String groupTypeSelectListBox();
  String groupUUIDPanel();
  String header();
  String hyperlink();
  String iconCell();
  String iconCellOfFileCommentRow();
  String iconHeader();
  String identityUntrustedExternalId();
  String infoBlock();
  String infoTable();
  String inputFieldTypeHint();
  String labelList();
  String labelNotApplicable();
  String leftMostCell();
  String lineHeader();
  String lineNumber();
  String link();
  String linkMenuBar();
  String linkMenuItemNotLast();
  String maxObjectSizeLimitEffectiveLabel();
  String menuBarUserName();
  String menuBarUserNameAvatar();
  String menuBarUserNameFocusPanel();
  String menuBarUserNamePanel();
  String menuItem();
  String menuScreenMenuBar();
  String missingApproval();
  String missingApprovalList();
  String monospace();
  String needsReview();
  String negscore();
  String noLineLineNumber();
  String noborder();
  String notVotable();
  String outdated();
  String parentsTable();
  String patchBrowserPopup();
  String patchBrowserPopupBody();
  String patchCellReverseDiff();
  String patchComments();
  String patchContentTable();
  String patchHistoryTable();
  String patchHistoryTablePatchSetHeader();
  String patchNoDifference();
  String patchScreenDisplayControls();
  String patchSetActions();
  String patchSetInfoBlock();
  String patchSetLink();
  String patchSetRevision();
  String patchSetUserIdentity();
  String patchSizeCell();
  String pluginProjectConfigInheritedValue();
  String pluginsTable();
  String posscore();
  String projectActions();
  String projectAdminLabelRangeLine();
  String projectAdminLabelValue();
  String projectFilterLabel();
  String projectFilterPanel();
  String projectNameColumn();
  String publishCommentsScreen();
  String registerScreenExplain();
  String registerScreenNextLinks();
  String registerScreenSection();
  String removeReviewer();
  String removeReviewerCell();
  String reviewedPanelBottom();
  String rightBorder();
  String rightmost();
  String rpcStatus();
  String screen();
  String screenHeader();
  String screenNoHeader();
  String searchPanel();
  String suggestBoxPopup();
  String sectionHeader();
  String selectPatchSetOldVersion();
  String sideBySideScreenLinkTable();
  String sideBySideScreenSideBySideTable();
  String sideBySideTableBinaryHeader();
  String singleLine();
  String skipLine();
  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 useridentity();
  String usernameField();
  String watchedProjectFilter();
}
