aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStas Vilchik <stas.vilchik@sonarsource.com>2018-05-23 15:29:06 +0200
committerSonarTech <sonartech@sonarsource.com>2018-05-23 20:20:48 +0200
commitfbe1259e4abbbbe7416489819b79113ab953d864 (patch)
treec85a0bc88b97ef3d0949630fc4ea86903c14278c
parent11c567859c646bc3202e6ca15f2c8f53e928d633 (diff)
downloadsonarqube-fbe1259e4abbbbe7416489819b79113ab953d864.tar.gz
sonarqube-fbe1259e4abbbbe7416489819b79113ab953d864.zip
SONAR-10673 Stop using font for icons (#252)
-rw-r--r--server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java3
-rw-r--r--server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java1
-rw-r--r--server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx2
-rwxr-xr-xserver/sonar-web/public/fonts/sonar-5.2.eotbin17992 -> 0 bytes
-rwxr-xr-xserver/sonar-web/public/fonts/sonar-5.2.svg89
-rwxr-xr-xserver/sonar-web/public/fonts/sonar-5.2.ttfbin17828 -> 0 bytes
-rwxr-xr-xserver/sonar-web/public/fonts/sonar-5.2.woffbin17904 -> 0 bytes
-rw-r--r--server/sonar-web/scripts/start.js1
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx3
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx5
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap12
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx3
-rw-r--r--server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx9
-rw-r--r--server/sonar-web/src/main/js/app/components/search/SearchResult.js2
-rw-r--r--server/sonar-web/src/main/js/app/styles/components/boxed-group.css5
-rw-r--r--server/sonar-web/src/main/js/app/styles/components/issues.css67
-rw-r--r--server/sonar-web/src/main/js/app/styles/components/ui.css14
-rw-r--r--server/sonar-web/src/main/js/app/styles/init/icons.css368
-rw-r--r--server/sonar-web/src/main/js/app/utils/exposeLibraries.ts14
-rw-r--r--server/sonar-web/src/main/js/apps/about/components/AboutStandards.js21
-rw-r--r--server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx3
-rw-r--r--server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx8
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx34
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx20
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/coding-rules/styles.css12
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js4
-rw-r--r--server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap6
-rw-r--r--server/sonar-web/src/main/js/apps/issues/components/App.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx5
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx16
-rw-r--r--server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap52
-rw-r--r--server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap2
-rw-r--r--server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js2
-rw-r--r--server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx50
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx4
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx2
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js8
-rw-r--r--server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js2
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/PageActions.tsx3
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap8
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap36
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx11
-rw-r--r--server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap10
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx7
-rw-r--r--server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx5
-rw-r--r--server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx12
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx19
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx13
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ContinuousIntegrationIcon.tsx36
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx33
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/EllipsisIcon.tsx (renamed from server/sonar-web/src/main/js/components/shared/QualifierIcon.tsx)24
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx22
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/FilterIcon.tsx (renamed from server/sonar-web/src/main/js/components/shared/SeverityIcon.tsx)19
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx22
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/HouseIcon.tsx32
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/Icon.tsx (renamed from server/sonar-web/src/main/js/components/icons-components/types.ts)46
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/LightBulbIcon.tsx32
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/LockIcon.tsx (renamed from server/sonar-web/src/main/js/components/shared/StatusIcon.tsx)18
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ProjectLinkIcon.tsx45
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx18
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/QualifierIcon.js122
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/QualifierIcon.tsx166
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SCMIcon.tsx (renamed from server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx)18
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SeverityIcon.tsx100
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/StatusIcon.tsx96
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/TagsIcon.tsx32
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/TestStatusIcon.tsx84
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx17
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx15
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx21
-rw-r--r--server/sonar-web/src/main/js/components/icons-components/icons.ts52
-rw-r--r--server/sonar-web/src/main/js/components/issue/IssueView.js4
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js2
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js3
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/IssueMessage.js8
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js2
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js5
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap8
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap6
-rw-r--r--server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap4
-rw-r--r--server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js2
-rw-r--r--server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js7
-rw-r--r--server/sonar-web/src/main/js/components/nav/NavBarTabs.css3
-rw-r--r--server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/shared/StatusHelper.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/shared/__tests__/QualifierIcon-test.tsx35
-rw-r--r--server/sonar-web/src/main/js/components/shared/__tests__/__snapshots__/QualifierIcon-test.tsx.snap19
-rw-r--r--server/sonar-web/src/main/js/components/tags/TagsList.tsx9
-rw-r--r--server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap16
-rw-r--r--server/sonar-web/src/main/js/components/ui/buttons.css17
-rw-r--r--server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx2
-rw-r--r--server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx4
-rw-r--r--server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap10
-rw-r--r--sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java2
-rw-r--r--sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java3
-rw-r--r--tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java4
162 files changed, 1248 insertions, 1708 deletions
diff --git a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java
index 75bfe6ccb0c..dbce1e3f64e 100644
--- a/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java
+++ b/server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java
@@ -21,7 +21,6 @@ package org.sonarqube.qa.util.pageobjects;
import com.codeborne.selenide.Condition;
import com.codeborne.selenide.SelenideElement;
-import java.util.Locale;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Condition.visible;
@@ -153,7 +152,7 @@ public class RuleDetails {
}
public RuleDetails activationShouldHaveSeverity(String profileKey, String severity) {
- getActiveProfileElement(profileKey).$(".coding-rules-detail-quality-profile-severity .icon-severity-" + severity.toLowerCase(Locale.ENGLISH)).shouldBe(visible);
+ getActiveProfileElement(profileKey).$(".coding-rules-detail-quality-profile-severity").shouldHave(text(severity));
return this;
}
diff --git a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java
index 4b8365cc0a4..f52b779f7bd 100644
--- a/server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java
+++ b/server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java
@@ -107,7 +107,6 @@ public class UserSessionInitializerTest {
// exclude static resources
assertPathIsIgnored("/css/style.css");
- assertPathIsIgnored("/fonts/font.ttf");
assertPathIsIgnored("/images/logo.png");
assertPathIsIgnored("/js/jquery.js");
}
diff --git a/server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx b/server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx
index f212eaca024..111fc23a307 100644
--- a/server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx
+++ b/server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from '../../../../../sonar-web/src/main/js/components/icons-components/types';
+import { IconProps } from '../../../../../sonar-web/src/main/js/components/icons-components/Icon';
export default function SonarCloudIcon({ className, fill = '#f3702a', size = 18 }: IconProps) {
return (
diff --git a/server/sonar-web/public/fonts/sonar-5.2.eot b/server/sonar-web/public/fonts/sonar-5.2.eot
deleted file mode 100755
index fbc4d06cfa3..00000000000
--- a/server/sonar-web/public/fonts/sonar-5.2.eot
+++ /dev/null
Binary files differ
diff --git a/server/sonar-web/public/fonts/sonar-5.2.svg b/server/sonar-web/public/fonts/sonar-5.2.svg
deleted file mode 100755
index 1d648b7b456..00000000000
--- a/server/sonar-web/public/fonts/sonar-5.2.svg
+++ /dev/null
@@ -1,89 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
-<svg xmlns="http://www.w3.org/2000/svg">
-<metadata>Generated by IcoMoon</metadata>
-<defs>
-<font id="icomoon" horiz-adv-x="1024">
-<font-face units-per-em="1024" ascent="960" descent="-64" />
-<missing-glyph horiz-adv-x="1024" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="512" />
-<glyph unicode="&#xe600;" d="M876.494 0h-729.004c-46.040 0-83.49 37.526-83.49 83.538v409.238c0 46.014 37.45 83.224 83.49 83.224h729.006c46.054 0 83.504-37.21 83.504-83.224v-409.238c0-46.012-37.45-83.538-83.506-83.538zM147.462 510c-10.666 0-19.462-7.836-19.462-18.494v-407.238c0-10.66 8.798-20.268 19.462-20.268h729.032c10.638 0 19.506 9.608 19.506 20.268v407.238c0 10.658-8.868 18.494-19.506 18.494h-729.032zM192 610v18.826c0 5.808 4.522 11.174 10.306 11.174h619.384c5.784 0 10.308-5.366 10.308-11.174v-18.826h64v20.826c0 41.16-33.13 73.174-74.308 73.174h-619.384c-41.148 0-74.306-32.014-74.306-73.174v-20.826h64zM256 740v25.844c0 0.658 1.262 2.156 1.934 2.156h508.078c0.684 0 1.988-1.498 1.988-2.156v-25.844h64v27.844c0 36.012-27.938 64.156-63.988 64.156h-512.078c-36.050 0-63.934-28.144-63.934-64.156v-27.844h64z" />
-<glyph unicode="&#xe601;" d="M773.849 709.681c11.878-11.877 17.815-26.107 17.815-42.69l0.336-437.982c-0.448-17.032-6.499-31.374-18.151-43.026-11.877-11.876-26.106-17.814-42.689-17.814l-437.983 0.337c-16.583-0.448-30.923 5.378-43.025 17.479-11.876 11.875-17.815 26.329-17.815 43.36l-0.337 50.084c0.448 17.030 6.499 31.373 18.151 43.026 11.877 11.875 26.107 17.813 42.689 17.813h197.647l-236.637 236.639c-11.653 11.653-17.479 25.995-17.479 43.026s5.826 31.373 17.479 43.025l43.025 43.025c11.653 11.652 25.994 17.479 43.025 17.479s31.373-5.826 43.025-17.479l236.64-236.639-0.002 197.647c0.002 16.583 5.939 30.812 17.816 42.69 11.652 11.652 25.994 17.702 43.025 18.151h50.42c17.031-0.448 31.373-6.498 43.025-18.151v0z" />
-<glyph unicode="&#xe602;" d="M192 64h640v512h-208.012c-13.292 0-24.68 5.234-33.974 14.61-9.352 9.324-14.014 21.3-14.014 34.624v206.766h-384v-768zM640.796 640h187.172c-3.336 8-7 17.208-10.992 21.21l-156.518 157.238c-3.992 4.032-12.458 8.028-20.458 11.376v-187.824l0.796-2zM896 624v-573.86c0-13.378-4.704-25.73-13.998-35.106-9.35-9.32-20.672-15.036-34.014-15.036h-671.974c-13.344 0-24.664 5.708-34.016 15.036-9.294 9.376-13.998 21.726-13.998 35.106v799.742c0 13.352 4.704 23.73 13.998 33.078 9.352 9.348 20.672 13.040 34.016 13.040h447.976c13.342 0 27.998-2.348 44.022-9.036 15.97-6.664 28.658-14.196 37.954-23.54l156.026-156.148c9.294-9.378 17.334-22.614 24.006-38.624 6.618-16.062 9.954-32.652 9.954-44.652v0h0.048zM448 448l-192-160 192-160zM512 128l192 160-192 160z" />
-<glyph unicode="&#xe603;" d="M870.483 613.045c11.879-11.878 17.816-26.107 17.816-42.691l0.337-437.983c-0.448-17.031-6.5-31.373-18.153-43.025-11.876-11.875-26.106-17.814-42.688-17.814l-437.983 0.336c-16.582-0.447-30.924 5.379-43.025 17.48-11.876 11.875-17.814 26.33-17.814 43.361l-0.337 50.084c0.449 17.029 6.5 31.373 18.151 43.025 11.878 11.875 26.107 17.812 42.689 17.812l197.647 0.002-236.639 236.639c-11.653 11.653-17.479 25.995-17.479 43.026s5.825 31.373 17.479 43.025l43.025 43.025c11.653 11.652 25.994 17.479 43.025 17.479s31.373-5.826 43.025-17.479l236.641-236.64-0.003 197.648c0.002 16.583 5.939 30.812 17.817 42.69 11.651 11.652 25.993 17.702 43.024 18.151h50.42c17.031-0.449 31.373-6.499 43.024-18.15l0.001-0.001zM307.461 609.339c-23.661-23.661-62.38-23.662-86.042 0l-43.035 43.035c-23.662 23.661-23.662 62.379 0 86.041l43.035 43.035c23.661 23.661 62.38 23.662 86.041 0l43.035-43.035c23.661-23.661 23.661-62.38 0-86.041l-43.034-43.035z" />
-<glyph unicode="&#xe604;" d="M64 128h256v640h-256v-640zM191.998 192c-35.332 0-63.998 28.666-63.998 64 0 35.332 28.666 64 63.998 64 35.346 0 64.002-28.668 64.002-64 0-35.334-28.656-64-64.002-64zM128 704h128v-320h-128v320zM384 128h266v640h-266v-640zM512.008 192c-35.35 0-64.008 28.664-64.008 63.986 0 35.326 28.658 64.014 64.008 64.014s63.992-28.688 63.992-64.014c0-35.322-28.642-63.986-63.992-63.986zM448 704h128v-320h-128v320zM704 768v-640h256v640h-256zM832 192c-35.362 0-64 28.664-64 63.986 0 35.326 28.638 64.014 64 64.014 35.334 0 64-28.688 64-64.014 0-35.322-28.666-63.986-64-63.986zM896 384h-128v320h128v-320z" />
-<glyph unicode="&#xe605;" d="M250.319 709.849c11.877 11.878 26.107 17.815 42.69 17.815l437.982 0.336c17.032-0.448 31.374-6.499 43.026-18.151 11.876-11.877 17.814-26.106 17.814-42.689l-0.337-437.983c0.448-16.583-5.378-30.923-17.479-43.025-11.875-11.876-26.329-17.815-43.36-17.815l-50.084-0.337c-17.030 0.448-31.373 6.499-43.026 18.151-11.875 11.877-17.813 26.107-17.813 42.689v197.647l-236.639-236.637c-11.653-11.653-25.995-17.479-43.026-17.479s-31.373 5.826-43.025 17.479l-43.025 43.025c-11.652 11.653-17.479 25.994-17.479 43.025s5.826 31.373 17.479 43.025l236.639 236.64-197.647-0.002c-16.583 0.002-30.812 5.939-42.69 17.816-11.652 11.652-17.702 25.994-18.151 43.025v50.42c0.448 17.031 6.498 31.373 18.151 43.025v0z" />
-<glyph unicode="&#xe606;" d="M346.955 806.483c11.878 11.879 26.107 17.816 42.691 17.816l437.983 0.337c17.031-0.448 31.373-6.5 43.025-18.153 11.875-11.876 17.814-26.106 17.814-42.688l-0.336-437.983c0.447-16.582-5.379-30.924-17.48-43.025-11.875-11.876-26.33-17.814-43.361-17.814l-50.084-0.337c-17.029 0.449-31.373 6.5-43.025 18.151-11.875 11.878-17.812 26.107-17.812 42.689l-0.002 197.647-236.639-236.639c-11.653-11.653-25.995-17.479-43.026-17.479s-31.373 5.825-43.025 17.479l-43.025 43.025c-11.652 11.653-17.479 25.994-17.479 43.025s5.826 31.373 17.479 43.025l236.64 236.641-197.648-0.003c-16.583 0.002-30.812 5.939-42.69 17.817-11.652 11.651-17.702 25.993-18.151 43.024v50.42c0.449 17.031 6.499 31.373 18.15 43.024l0.001 0.001zM350.661 243.461c23.661-23.661 23.662-62.38 0-86.042l-43.035-43.035c-23.661-23.662-62.379-23.662-86.041 0l-43.035 43.035c-23.661 23.661-23.662 62.38 0 86.041l43.035 43.035c23.661 23.661 62.38 23.661 86.041 0l43.035-43.034z" />
-<glyph unicode="&#xe608;" d="M880.788 0h-733.41c-44.35 0-83.378 35.874-83.378 80.352v734.986c0 44.454 39.028 80.662 83.378 80.662h733.41c44.362 0 79.212-36.208 79.212-80.662v-734.986c0-44.478-34.85-80.352-79.212-80.352zM151.402 832c-12.096 0-23.402-10.558-23.402-22.662v-722.986c0-12.128 11.33-22.352 23.402-22.352h723.412c12.096 0 21.186 10.248 21.186 22.352v722.986c0 12.128-9.116 22.662-21.186 22.662h-723.412zM369.576 128h-95.584c-44.35 0-81.99 35.922-81.99 80.376v95.734c0 44.454 37.64 79.89 81.99 79.89h95.584c44.348 0 78.424-35.438 78.424-79.89v-95.734c0-44.454-34.076-80.376-78.424-80.376zM273.99 320c-12.096 0-17.99-3.788-17.99-15.89v-95.734c0-12.128 5.918-16.376 17.99-16.376h95.584c12.108 0 14.424 4.246 14.424 16.376v95.734c0 12.128-2.342 15.89-14.424 15.89h-95.584zM752 128h-97.584c-44.364 0-80.416 35.922-80.416 80.376v95.734c0 44.454 36.052 79.89 80.416 79.89h97.584c44.336 0 80-35.438 80-79.89v-95.734c0-44.454-35.664-80.376-80-80.376zM654.416 320c-12.122 0-14.416-3.788-14.416-15.89v-95.734c0-12.128 2.318-16.376 14.416-16.376h97.584c12.096 0 16 4.246 16 16.376v95.734c0 12.128-3.928 15.89-16 15.89h-97.584zM369.576 512h-95.584c-44.35 0-81.99 36.592-81.99 81.046v93.734c0 44.454 37.64 81.22 81.99 81.22h95.584c44.348 0 78.424-36.768 78.424-81.22v-93.732c0-44.456-34.076-81.048-78.424-81.048zM273.99 704c-12.096 0-17.99-5.118-17.99-17.22v-93.732c0-12.13 5.918-17.046 17.99-17.046h95.584c12.108 0 14.424 4.916 14.424 17.046v93.732c0 12.128-2.342 17.22-14.424 17.22h-95.584zM752 512h-97.584c-44.364 0-78.416 36.592-78.416 81.046v93.734c0 44.454 34.052 81.22 78.416 81.22h97.584c44.336 0 80-36.768 80-81.22v-93.732c0-44.456-35.664-81.048-80-81.048zM654.416 704c-12.122 0-14.416-5.118-14.416-17.22v-93.732c0-12.13 2.318-17.046 14.416-17.046h97.584c12.096 0 16 4.916 16 17.046v93.732c0 12.128-3.928 17.22-16 17.22h-97.584z" />
-<glyph unicode="&#xe609;" d="M960-64h-896c-35.376 0-64 28.624-64 64v896c0 35.376 28.624 64 64 64h896c35.376 0 64-28.624 64-64v-896c0-35.376-28.624-64-64-64zM896 832h-768v-768h768v768zM448 512h-192v192h192v-192zM448 192h-192v192h192v-192zM768 512h-192v192h192v-192zM768 192h-192v192h192v-192z" />
-<glyph unicode="&#xe60a;" d="M512.308 450.906c-64.824 0-125.77 23.15-171.608 65.184-45.836 42.034-71.082 97.918-71.082 157.364 0 59.444 25.244 115.332 71.082 157.366 45.838 42.032 106.784 65.182 171.608 65.182 64.822 0 125.768-23.15 171.606-65.182 45.838-42.034 71.082-97.922 71.082-157.366 0-59.446-25.246-115.33-71.082-157.364-45.838-42.034-106.784-65.184-171.606-65.184zM512.308 821.308c-88.906 0-161.236-66.33-161.236-147.856 0-81.528 72.33-147.856 161.236-147.856 88.904 0 161.234 66.328 161.234 147.856 0 81.526-72.33 147.856-161.234 147.856zM756.714 409.888c8.746-1.014 16.796-2.85 24.062-5.488 11.656-4.232 20.842-9.378 28.084-15.734 9.068-7.958 17.466-18.126 24.96-30.214 8.624-13.918 15.556-28.3 20.6-42.752 5.666-16.238 10.464-34.322 14.27-53.748 3.916-20.010 6.546-38.706 7.822-55.57 1.348-17.848 2.032-36.436 2.034-55.24 0-34.066-12.082-48.552-21.168-56.486-9.812-8.57-27.468-19.958-67.292-19.958h-556.178c-16.158 0-30.252 1.938-41.892 5.762-9.856 3.236-18.164 7.882-25.398 14.2-9.086 7.934-21.166 22.418-21.166 56.484 0 18.81 0.684 37.392 2.032 55.234 1.274 16.874 3.908 35.568 7.824 55.576 3.802 19.424 8.604 37.506 14.27 53.748 5.042 14.452 11.972 28.834 20.596 42.748 7.498 12.092 15.896 22.26 24.964 30.218 7.24 6.358 16.426 11.502 28.082 15.734 7.268 2.638 15.318 4.474 24.064 5.488 13.992-8.356 29.868-17.732 47.194-27.88 23.704-13.88 52.328-25.698 87.51-36.13 36.188-10.73 73.202-16.168 110.012-16.168 36.808 0 73.822 5.438 110.014 16.17 35.18 10.432 63.8 22.248 87.502 36.126 17.312 10.134 33.188 19.514 47.198 27.88v0zM739.816 485.516c-3.818 0-12.728-4.184-26.726-12.544-14-8.366-29.804-17.704-47.408-28.012-17.608-10.31-40.516-19.648-68.728-28.012-28.212-8.366-56.532-12.548-84.954-12.548-28.424 0-56.744 4.184-84.956 12.548-28.212 8.362-51.122 17.702-68.726 28.012-17.606 10.308-33.41 19.646-47.41 28.012-14 8.362-22.91 12.544-26.728 12.544-25.878 0-49.53-3.89-70.954-11.672-21.424-7.78-39.56-18.188-54.41-31.218-14.85-13.034-28-28.79-39.456-47.268-11.452-18.48-20.572-37.446-27.36-56.898s-12.41-40.554-16.864-63.314c-4.454-22.76-7.424-43.96-8.91-63.608-1.484-19.644-2.226-39.78-2.226-60.398 0-46.686 15.486-83.546 46.454-110.582 30.97-27.040 72.122-40.558 123.456-40.558h556.182c51.334 0 92.484 13.518 123.458 40.558 30.968 27.040 46.454 63.896 46.454 110.582v0c-0.004 20.62-0.744 40.754-2.228 60.398s-4.456 40.846-8.908 63.608c-4.456 22.76-10.078 43.864-16.866 63.314-6.79 19.452-15.91 38.418-27.364 56.896-11.454 18.48-24.608 34.234-39.456 47.268-14.85 13.032-32.986 23.438-54.408 31.218-21.426 7.784-45.078 11.674-70.958 11.674v0 0z" />
-<glyph unicode="&#xe60b;" d="M716.8 294.4c-102.4-102.4-204.8-204.8-204.8-204.8l-204.8 204.8h409.6zM307.21 601.61c102.4 102.4 204.8 204.8 204.8 204.8l204.8-204.8h-409.6zM51.2 499.2h921.6v-102.4h-921.6v102.4z" />
-<glyph unicode="&#xe60c;" d="M749.715 777.143h-475.429c-25.143 0-46.666-8.952-64.571-26.857s-26.857-39.428-26.857-64.57v-475.429c0-25.143 8.952-46.667 26.857-64.571s39.428-26.857 64.571-26.857h475.429c25.143 0 46.666 8.953 64.572 26.857 17.904 17.904 26.855 39.429 26.855 64.571v475.428c0 25.143-8.951 46.666-26.855 64.57-17.906 17.905-39.43 26.858-64.572 26.858v0zM914.287 685.715v-475.429c0-45.334-16.096-84.096-48.287-116.286-32.189-32.191-70.953-48.286-116.285-48.286h-475.43c-45.333 0-84.095 16.095-116.286 48.286s-48.286 70.952-48.286 116.286v475.429c0 45.333 16.095 84.095 48.286 116.285 32.19 32.191 70.953 48.286 116.286 48.286h475.43c45.332 0 84.096-16.095 116.285-48.286 32.191-32.19 48.287-70.952 48.287-116.285v0z" />
-<glyph unicode="&#xe60d;" d="M742.985 555.893c0-7.948-2.781-14.703-8.345-20.267l-256.321-256.319c-5.563-5.563-12.319-8.346-20.266-8.346s-14.703 2.782-20.267 8.346l-148.426 148.425c-5.563 5.563-8.346 12.319-8.346 20.267s2.782 14.703 8.346 20.266l40.534 40.535c5.563 5.563 12.319 8.346 20.267 8.346s14.703-2.782 20.267-8.346l87.626-87.926 195.518 195.818c5.564 5.563 12.319 8.346 20.268 8.346s14.701-2.782 20.264-8.346l40.535-40.534c5.562-5.564 8.345-12.319 8.346-20.267v0z" />
-<glyph unicode="&#xe60e;" d="M705.755 641.755c-17.618 17.62-38.836 26.429-63.648 26.429h-260.218c-24.813 0-46.028-8.809-63.647-26.429-17.618-17.618-26.428-38.834-26.428-63.647v-260.219c0-24.814 8.81-46.027 26.429-63.648 17.618-17.618 38.834-26.428 63.647-26.428h260.218c24.812 0 46.029 8.81 63.648 26.428 17.618 17.621 26.428 38.835 26.428 63.648v260.219c0 24.813-8.81 46.028-26.429 63.647z" />
-<glyph unicode="&#xf000;" d="M438.857 886.857q119.429 0 220.286-58.857t159.714-159.714 58.857-220.286-58.857-220.286-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857zM512 174.286v108.571q0 8-5.143 13.429t-12.571 5.429h-109.714q-7.429 0-13.143-5.714t-5.714-13.143v-108.571q0-7.429 5.714-13.143t13.143-5.714h109.714q7.429 0 12.571 5.429t5.143 13.429zM510.857 370.857l10.286 354.857q0 6.857-5.714 10.286-5.714 4.571-13.714 4.571h-125.714q-8 0-13.714-4.571-5.714-3.429-5.714-10.286l9.714-354.857q0-5.714 5.714-10t13.714-4.286h105.714q8 0 13.429 4.286t6 10z" />
-<glyph unicode="&#xf001;" d="M733.714 448.571q0 15.429-10.286 25.714l-258.857 258.857q-10.286 10.286-25.714 10.286t-25.714-10.286l-258.857-258.857q-10.286-10.286-10.286-25.714t10.286-25.714l52-52q10.286-10.286 25.714-10.286t25.714 10.286l108 108v-286.857q0-14.857 10.857-25.714t25.714-10.857h73.143q14.857 0 25.714 10.857t10.857 25.714v286.857l108-108q10.857-10.857 25.714-10.857t25.714 10.857l52 52q10.286 10.286 10.286 25.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf002;" d="M658.286 484.571q0 105.714-75.143 180.857t-180.857 75.143-180.857-75.143-75.143-180.857 75.143-180.857 180.857-75.143 180.857 75.143 75.143 180.857zM950.857 9.143q0-29.714-21.714-51.429t-51.429-21.714q-30.857 0-51.429 21.714l-196 195.429q-102.286-70.857-228-70.857-81.714 0-156.286 31.714t-128.571 85.714-85.714 128.571-31.714 156.286 31.714 156.286 85.714 128.571 128.571 85.714 156.286 31.714 156.286-31.714 128.571-85.714 85.714-128.571 31.714-156.286q0-125.714-70.857-228l196-196q21.143-21.143 21.143-51.429z" horiz-adv-x="951" />
-<glyph unicode="&#xf003;" d="M665.714 309.143l58.286 58.286q10.857 10.857 10.857 25.714t-10.857 25.714l-259.429 259.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-259.429-259.429q-10.857-10.857-10.857-25.714t10.857-25.714l58.286-58.286q10.857-10.857 25.714-10.857t25.714 10.857l175.429 175.429 175.429-175.429q10.857-10.857 25.714-10.857t25.714 10.857zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf004;" d="M733.714 447.429q0 15.429-10.286 25.714l-52 52q-10.286 10.286-25.714 10.286t-25.714-10.286l-108-108v286.857q0 14.857-10.857 25.714t-25.714 10.857h-73.143q-14.857 0-25.714-10.857t-10.857-25.714v-286.857l-108 108q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-52q-10.286-10.286-10.286-25.714t10.286-25.714l258.857-258.857q10.286-10.286 25.714-10.286t25.714 10.286l258.857 258.857q10.286 10.286 10.286 25.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf005;" d="M950.857 590.286q0-12.571-14.857-27.429l-207.429-202.286 49.143-285.714q0.571-4 0.571-11.429 0-12-6-20.286t-17.429-8.286q-10.857 0-22.857 6.857l-256.571 134.857-256.571-134.857q-12.571-6.857-22.857-6.857-12 0-18 8.286t-6 20.286q0 3.429 1.143 11.429l49.143 285.714-208 202.286q-14.286 15.429-14.286 27.429 0 21.143 32 26.286l286.857 41.714 128.571 260q10.857 23.429 28 23.429t28-23.429l128.571-260 286.857-41.714q32-5.143 32-26.286z" horiz-adv-x="951" />
-<glyph unicode="&#xf006;" d="M464.571 217.714l259.429 259.429q10.857 10.857 10.857 25.714t-10.857 25.714l-58.286 58.286q-10.857 10.857-25.714 10.857t-25.714-10.857l-175.429-175.429-175.429 175.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-58.286-58.286q-10.857-10.857-10.857-25.714t10.857-25.714l259.429-259.429q10.857-10.857 25.714-10.857t25.714 10.857zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf00c;" d="M954.857 636.571q0-22.857-16-38.857l-491.429-491.429q-16-16-38.857-16t-38.857 16l-284.571 284.571q-16 16-16 38.857t16 38.857l77.714 77.714q16 16 38.857 16t38.857-16l168-168.571 374.857 375.429q16 16 38.857 16t38.857-16l77.714-77.714q16-16 16-38.857z" />
-<glyph unicode="&#xf00d;" d="M741.714 204.571q0-22.857-16-38.857l-77.714-77.714q-16-16-38.857-16t-38.857 16l-168 168-168-168q-16-16-38.857-16t-38.857 16l-77.714 77.714q-16 16-16 38.857t16 38.857l168 168-168 168q-16 16-16 38.857t16 38.857l77.714 77.714q16 16 38.857 16t38.857-16l168-168 168 168q16 16 38.857 16t38.857-16l77.714-77.714q16-16 16-38.857t-16-38.857l-168-168 168-168q16-16 16-38.857z" horiz-adv-x="805" />
-<glyph unicode="&#xf010;" d="M438.857 758.857q-84.571 0-156-41.714t-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156-41.714 156-113.143 113.143-156 41.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf011;" d="M585.143 448q0-60.571-42.857-103.429t-103.429-42.857-103.429 42.857-42.857 103.429 42.857 103.429 103.429 42.857 103.429-42.857 42.857-103.429zM438.857 758.857q-84.571 0-156-41.714t-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156-41.714 156-113.143 113.143-156 41.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf012;" d="M438.857 137.143v621.714q-84.571 0-156-41.714t-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf013;" d="M733.714 540.571q0 16-10.286 26.286l-52 51.429q-10.857 10.857-25.714 10.857t-25.714-10.857l-233.143-232.571-129.143 129.143q-10.857 10.857-25.714 10.857t-25.714-10.857l-52-51.429q-10.286-10.286-10.286-26.286 0-15.429 10.286-25.714l206.857-206.857q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l310.286 310.286q10.286 10.286 10.286 25.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf014;" d="M877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf015;" d="M585.143 448q0 60.571-42.857 103.429t-103.429 42.857-103.429-42.857-42.857-103.429 42.857-103.429 103.429-42.857 103.429 42.857 42.857 103.429zM877.714 510.286v-126.857q0-6.857-4.571-13.143t-11.429-7.429l-105.714-16q-10.857-30.857-22.286-52 20-28.571 61.143-78.857 5.714-6.857 5.714-14.286t-5.143-13.143q-15.429-21.143-56.571-61.714t-53.714-40.571q-6.857 0-14.857 5.143l-78.857 61.714q-25.143-13.143-52-21.714-9.143-77.714-16.571-106.286-4-16-20.571-16h-126.857q-8 0-14 4.857t-6.571 12.286l-16 105.143q-28 9.143-51.429 21.143l-80.571-61.143q-5.714-5.143-14.286-5.143-8 0-14.286 6.286-72 65.143-94.286 96-4 5.714-4 13.143 0 6.857 4.571 13.143 8.571 12 29.143 38t30.857 40.286q-15.429 28.571-23.429 56.571l-104.571 15.429q-7.429 1.143-12 7.143t-4.571 13.429v126.857q0 6.857 4.571 13.143t10.857 7.429l106.286 16q8 26.286 22.286 52.571-22.857 32.571-61.143 78.857-5.714 6.857-5.714 13.714 0 5.714 5.143 13.143 14.857 20.571 56.286 61.429t54 40.857q7.429 0 14.857-5.714l78.857-61.143q25.143 13.143 52 21.714 9.143 77.714 16.571 106.286 4 16 20.571 16h126.857q8 0 14-4.857t6.571-12.286l16-105.143q28-9.143 51.429-21.143l81.143 61.143q5.143 5.143 13.714 5.143 7.429 0 14.286-5.714 73.714-68 94.286-97.143 4-4.571 4-12.571 0-6.857-4.571-13.143-8.571-12-29.143-38t-30.857-40.286q14.857-28.571 23.429-56l104.571-16q7.429-1.143 12-7.143t4.571-13.429z" />
-<glyph unicode="&#xf016;" d="M804.571 393.143v-274.286q0-14.857-10.857-25.714t-25.714-10.857h-219.429v219.429h-146.286v-219.429h-219.429q-14.857 0-25.714 10.857t-10.857 25.714v274.286q0 0.571 0.286 1.714t0.286 1.714l328.571 270.857 328.571-270.857q0.571-1.143 0.571-3.429zM932 432.571l-35.429-42.286q-4.571-5.143-12-6.286h-1.714q-7.429 0-12 4l-395.429 329.714-395.429-329.714q-6.857-4.571-13.714-4-7.429 1.143-12 6.286l-35.429 42.286q-4.571 5.714-4 13.429t6.286 12.286l410.857 342.286q18.286 14.857 43.429 14.857t43.429-14.857l139.429-116.571v111.429q0 8 5.143 13.143t13.143 5.143h109.714q8 0 13.143-5.143t5.143-13.143v-233.143l125.143-104q5.714-4.571 6.286-12.286t-4-13.429z" horiz-adv-x="951" />
-<glyph unicode="&#xf017;" d="M73.143 82.286h585.143v438.857h-237.714q-22.857 0-38.857 16t-16 38.857v237.714h-292.571v-731.429zM438.857 594.286h214.857q-5.714 16.571-12.571 23.429l-178.857 178.857q-6.857 6.857-23.429 12.571v-214.857zM731.429 576v-512q0-22.857-16-38.857t-38.857-16h-621.714q-22.857 0-38.857 16t-16 38.857v768q0 22.857 16 38.857t38.857 16h365.714q22.857 0 50.286-11.429t43.429-27.429l178.286-178.286q16-16 27.429-43.429t11.429-50.286z" horiz-adv-x="731" />
-<glyph unicode="&#xf018;" d="M512 649.143v-256q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143v36.571q0 8 5.143 13.143t13.143 5.143h128v201.143q0 8 5.143 13.143t13.143 5.143h36.571q8 0 13.143-5.143t5.143-13.143zM749.714 448q0 84.571-41.714 156t-113.143 113.143-156 41.714-156-41.714-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf021;" d="M863.429 356.571q0-2.857-0.571-4-36.571-153.143-153.143-248.286t-273.143-95.143q-83.429 0-161.429 31.429t-139.143 89.714l-73.714-73.714q-10.857-10.857-25.714-10.857t-25.714 10.857-10.857 25.714v256q0 14.857 10.857 25.714t25.714 10.857h256q14.857 0 25.714-10.857t10.857-25.714-10.857-25.714l-78.286-78.286q40.571-37.714 92-58.286t106.857-20.571q76.571 0 142.857 37.143t106.286 102.286q6.286 9.714 30.286 66.857 4.571 13.143 17.143 13.143h109.714q7.429 0 12.857-5.429t5.429-12.857zM877.714 813.714v-256q0-14.857-10.857-25.714t-25.714-10.857h-256q-14.857 0-25.714 10.857t-10.857 25.714 10.857 25.714l78.857 78.857q-84.571 78.286-199.429 78.286-76.571 0-142.857-37.143t-106.286-102.286q-6.286-9.714-30.286-66.857-4.571-13.143-17.143-13.143h-113.714q-7.429 0-12.857 5.429t-5.429 12.857v4q37.143 153.143 154.286 248.286t274.286 95.143q83.429 0 162.286-31.714t140-89.429l74.286 73.714q10.857 10.857 25.714 10.857t25.714-10.857 10.857-25.714z" />
-<glyph unicode="&#xf023;" d="M182.857 512h292.571v109.714q0 60.571-42.857 103.429t-103.429 42.857-103.429-42.857-42.857-103.429v-109.714zM658.286 457.143v-329.143q0-22.857-16-38.857t-38.857-16h-548.571q-22.857 0-38.857 16t-16 38.857v329.143q0 22.857 16 38.857t38.857 16h18.286v109.714q0 105.143 75.429 180.571t180.571 75.429 180.571-75.429 75.429-180.571v-109.714h18.286q22.857 0 38.857-16t16-38.857z" horiz-adv-x="658" />
-<glyph unicode="&#xf02c;" d="M256 704q0 30.286-21.429 51.714t-51.714 21.429-51.714-21.429-21.429-51.714 21.429-51.714 51.714-21.429 51.714 21.429 21.429 51.714zM865.714 374.857q0-30.286-21.143-51.429l-280.571-281.143q-22.286-21.143-52-21.143-30.286 0-51.429 21.143l-408.571 409.143q-21.714 21.143-36.857 57.714t-15.143 66.857v237.714q0 29.714 21.714 51.429t51.429 21.714h237.714q30.286 0 66.857-15.143t58.286-36.857l408.571-408q21.143-22.286 21.143-52zM1085.143 374.857q0-30.286-21.143-51.429l-280.571-281.143q-22.286-21.143-52-21.143-20.571 0-33.714 8t-30.286 25.714l268.571 268.571q21.143 21.143 21.143 51.429 0 29.714-21.143 52l-408.571 408q-21.714 21.714-58.286 36.857t-66.857 15.143h128q30.286 0 66.857-15.143t58.286-36.857l408.571-408q21.143-22.286 21.143-52z" horiz-adv-x="1097" />
-<glyph unicode="&#xf039;" d="M1024 192v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-950.857q-14.857 0-25.714 10.857t-10.857 25.714v73.143q0 14.857 10.857 25.714t25.714 10.857h950.857q14.857 0 25.714-10.857t10.857-25.714zM1024 411.429v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-950.857q-14.857 0-25.714 10.857t-10.857 25.714v73.143q0 14.857 10.857 25.714t25.714 10.857h950.857q14.857 0 25.714-10.857t10.857-25.714zM1024 630.857v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-950.857q-14.857 0-25.714 10.857t-10.857 25.714v73.143q0 14.857 10.857 25.714t25.714 10.857h950.857q14.857 0 25.714-10.857t10.857-25.714zM1024 850.286v-73.143q0-14.857-10.857-25.714t-25.714-10.857h-950.857q-14.857 0-25.714 10.857t-10.857 25.714v73.143q0 14.857 10.857 25.714t25.714 10.857h950.857q14.857 0 25.714-10.857t10.857-25.714z" />
-<glyph unicode="&#xf03a;" d="M146.286 210.286v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-109.714q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h109.714q7.429 0 12.857-5.429t5.429-12.857zM146.286 429.714v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-109.714q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h109.714q7.429 0 12.857-5.429t5.429-12.857zM146.286 649.143v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-109.714q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h109.714q7.429 0 12.857-5.429t5.429-12.857zM1024 210.286v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-768q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h768q7.429 0 12.857-5.429t5.429-12.857zM146.286 868.571v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-109.714q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h109.714q7.429 0 12.857-5.429t5.429-12.857zM1024 429.714v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-768q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h768q7.429 0 12.857-5.429t5.429-12.857zM1024 649.143v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-768q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h768q7.429 0 12.857-5.429t5.429-12.857zM1024 868.571v-109.714q0-7.429-5.429-12.857t-12.857-5.429h-768q-7.429 0-12.857 5.429t-5.429 12.857v109.714q0 7.429 5.429 12.857t12.857 5.429h768q7.429 0 12.857-5.429t5.429-12.857z" />
-<glyph unicode="&#xf040;" d="M207.429 73.143l52 52-134.286 134.286-52-52v-61.143h73.143v-73.143h61.143zM506.286 603.428q0 12.571-12.571 12.571-5.714 0-9.714-4l-309.714-309.714q-4-4-4-9.714 0-12.571 12.571-12.571 5.714 0 9.714 4l309.714 309.714q4 4 4 9.714zM475.429 713.143l237.714-237.714-475.429-475.429h-237.714v237.714zM865.714 658.286q0-30.286-21.143-51.429l-94.857-94.857-237.714 237.714 94.857 94.286q20.571 21.714 51.429 21.714 30.286 0 52-21.714l134.286-133.714q21.143-22.286 21.143-52z" />
-<glyph unicode="&#xf056;" d="M694.857 411.429v73.143q0 14.857-10.857 25.714t-25.714 10.857h-438.857q-14.857 0-25.714-10.857t-10.857-25.714v-73.143q0-14.857 10.857-25.714t25.714-10.857h438.857q14.857 0 25.714 10.857t10.857 25.714zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf057;" d="M656.571 318.857q0 14.857-10.857 25.714l-103.429 103.429 103.429 103.429q10.857 10.857 10.857 25.714 0 15.429-10.857 26.286l-51.429 51.429q-10.857 10.857-26.286 10.857-14.857 0-25.714-10.857l-103.429-103.429-103.429 103.429q-10.857 10.857-25.714 10.857-15.429 0-26.286-10.857l-51.429-51.429q-10.857-10.857-10.857-26.286 0-14.857 10.857-25.714l103.429-103.429-103.429-103.429q-10.857-10.857-10.857-25.714 0-15.429 10.857-26.286l51.429-51.429q10.857-10.857 26.286-10.857 14.857 0 25.714 10.857l103.429 103.429 103.429-103.429q10.857-10.857 25.714-10.857 15.429 0 26.286 10.857l51.429 51.429q10.857 10.857 10.857 26.286zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf059;" d="M512 173.714v109.714q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-109.714q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM658.286 557.714q0 50.286-31.714 93.143t-79.143 66.286-97.143 23.429q-138.857 0-212-121.714-8.571-13.714 4.571-24l75.429-57.143q4-3.429 10.857-3.429 9.143 0 14.286 6.857 30.286 38.857 49.143 52.571 19.429 13.714 49.143 13.714 27.429 0 48.857-14.857t21.429-33.714q0-21.714-11.429-34.857t-38.857-25.714q-36-16-66-49.429t-30-71.714v-20.571q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143q0 10.857 12.286 28.286t31.143 28.286q18.286 10.286 28 16.286t26.286 20 25.429 27.429 16 34.571 7.143 46.286zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf05a;" d="M585.143 173.714v91.429q0 8-5.143 13.143t-13.143 5.143h-54.857v292.571q0 8-5.143 13.143t-13.143 5.143h-182.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h54.857v-182.857h-54.857q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h256q8 0 13.143 5.143t5.143 13.143zM512 685.714v91.429q0 8-5.143 13.143t-13.143 5.143h-109.714q-8 0-13.143-5.143t-5.143-13.143v-91.429q0-8 5.143-13.143t13.143-5.143h109.714q8 0 13.143 5.143t5.143 13.143zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf05c;" d="M626.857 343.429l-83.429-83.429q-5.714-5.714-13.143-5.714t-13.143 5.714l-78.286 78.286-78.286-78.286q-5.714-5.714-13.143-5.714t-13.143 5.714l-83.429 83.429q-5.714 5.714-5.714 13.143t5.714 13.143l78.286 78.286-78.286 78.286q-5.714 5.714-5.714 13.143t5.714 13.143l83.429 83.429q5.714 5.714 13.143 5.714t13.143-5.714l78.286-78.286 78.286 78.286q5.714 5.714 13.143 5.714t13.143-5.714l83.429-83.429q5.714-5.714 5.714-13.143t-5.714-13.143l-78.286-78.286 78.286-78.286q5.714-5.714 5.714-13.143t-5.714-13.143zM749.714 448q0 84.571-41.714 156t-113.143 113.143-156 41.714-156-41.714-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf05d;" d="M669.143 495.429l-241.143-241.143q-10.857-10.857-25.714-10.857t-25.714 10.857l-168 168q-10.857 10.857-10.857 25.714t10.857 25.714l58.286 58.286q10.857 10.857 25.714 10.857t25.714-10.857l84-84 157.143 157.143q10.857 10.857 25.714 10.857t25.714-10.857l58.286-58.286q10.857-10.857 10.857-25.714t-10.857-25.714zM749.714 448q0 84.571-41.714 156t-113.143 113.143-156 41.714-156-41.714-113.143-113.143-41.714-156 41.714-156 113.143-113.143 156-41.714 156 41.714 113.143 113.143 41.714 156zM877.714 448q0-119.429-58.857-220.286t-159.714-159.714-220.286-58.857-220.286 58.857-159.714 159.714-58.857 220.286 58.857 220.286 159.714 159.714 220.286 58.857 220.286-58.857 159.714-159.714 58.857-220.286z" />
-<glyph unicode="&#xf05e;" d="M749.714 449.714q0 92-49.714 168.571l-430.857-430.286q78.286-50.857 169.714-50.857 63.429 0 120.857 24.857t99.143 66.571 66.286 99.714 24.571 121.429zM178.857 278.857l431.429 430.857q-77.143 52-171.429 52-84.571 0-156-41.714t-113.143-113.714-41.714-156.571q0-92.571 50.857-170.857zM877.714 449.714q0-89.714-34.857-171.429t-93.429-140.571-140-93.714-170.571-34.857-170.571 34.857-140 93.714-93.429 140.571-34.857 171.429 34.857 171.143 93.429 140.286 140 93.714 170.571 34.857 170.571-34.857 140-93.714 93.429-140.286 34.857-171.143z" />
-<glyph unicode="&#xf060;" d="M877.714 448v-73.143q0-30.286-18.571-51.714t-48.286-21.429h-402.286l167.429-168q21.714-20.571 21.714-51.429t-21.714-51.429l-42.857-43.429q-21.143-21.143-51.429-21.143-29.714 0-52 21.143l-372 372.571q-21.143 21.143-21.143 51.429 0 29.714 21.143 52l372 371.429q21.714 21.714 52 21.714 29.714 0 51.429-21.714l42.857-42.286q21.714-21.714 21.714-52t-21.714-52l-167.429-167.429h402.286q29.714 0 48.286-21.429t18.571-51.714z" />
-<glyph unicode="&#xf061;" d="M841.143 411.429q0-30.857-21.143-52l-372-372q-22.286-21.143-52-21.143-29.143 0-51.429 21.143l-42.857 42.857q-21.714 21.714-21.714 52t21.714 52l167.429 167.429h-402.286q-29.714 0-48.286 21.429t-18.571 51.714v73.143q0 30.286 18.571 51.714t48.286 21.429h402.286l-167.429 168q-21.714 20.571-21.714 51.429t21.714 51.429l42.857 42.857q21.714 21.714 51.429 21.714 30.286 0 52-21.714l372-372q21.143-20 21.143-51.429z" />
-<glyph unicode="&#xf062;" d="M920.571 405.143q0-29.143-21.143-51.429l-42.857-42.857q-21.714-21.714-52-21.714-30.857 0-51.429 21.714l-168 167.429v-402.286q0-29.714-21.429-48.286t-51.714-18.571h-73.143q-30.286 0-51.714 18.571t-21.429 48.286v402.286l-168-167.429q-20.571-21.714-51.429-21.714t-51.429 21.714l-42.857 42.857q-21.714 21.714-21.714 51.429 0 30.286 21.714 52l372 372q20 21.143 51.429 21.143 30.857 0 52-21.143l372-372q21.143-22.286 21.143-52z" horiz-adv-x="951" />
-<glyph unicode="&#xf063;" d="M920.571 484.571q0-30.286-21.143-51.429l-372-372.571q-22.286-21.143-52-21.143-30.286 0-51.429 21.143l-372 372.571q-21.714 20.571-21.714 51.429 0 30.286 21.714 52l42.286 42.857q22.286 21.143 52 21.143 30.286 0 51.429-21.143l168-168v402.286q0 29.714 21.714 51.429t51.429 21.714h73.143q29.714 0 51.429-21.714t21.714-51.429v-402.286l168 168q21.143 21.143 51.429 21.143 29.714 0 52-21.143l42.857-42.857q21.143-22.286 21.143-52z" horiz-adv-x="951" />
-<glyph unicode="&#xf065;" d="M503.385 332.821q0-8.615-6.627-15.243l-220.023-220.023 95.433-95.433q12.592-12.592 12.592-29.822t-12.59-29.822-29.822-12.59h-296.899q-17.231 0-29.822 12.59t-12.59 29.822v296.899q0 17.231 12.59 29.822t29.822 12.592 29.822-12.592l95.433-95.433 220.023 220.023q6.627 6.627 15.243 6.627t15.243-6.627l75.55-75.55q6.627-6.627 6.627-15.243zM1020.969 905.413v-296.899q0-17.231-12.592-29.822t-29.822-12.592-29.822 12.592l-95.433 95.433-220.023-220.023q-6.627-6.627-15.243-6.627t-15.243 6.627l-75.55 75.55q-6.627 6.627-6.627 15.243t6.627 15.243l220.023 220.023-95.433 95.433q-12.59 12.592-12.59 29.822t12.59 29.822 29.822 12.592h296.899q17.231 0 29.822-12.592t12.592-29.822z" />
-<glyph unicode="&#xf066;" d="M438.857 402.286v-256q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-82.286 82.286-189.714-189.714q-5.714-5.714-13.143-5.714t-13.143 5.714l-65.143 65.143q-5.714 5.714-5.714 13.143t5.714 13.143l189.714 189.714-82.286 82.286q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h256q14.857 0 25.714-10.857t10.857-25.714zM870.286 786.286q0-7.429-5.714-13.143l-189.714-189.714 82.286-82.286q10.857-10.857 10.857-25.714t-10.857-25.714-25.714-10.857h-256q-14.857 0-25.714 10.857t-10.857 25.714v256q0 14.857 10.857 25.714t25.714 10.857 25.714-10.857l82.286-82.286 189.714 189.714q5.714 5.714 13.143 5.714t13.143-5.714l65.143-65.143q5.714-5.714 5.714-13.143z" />
-<glyph unicode="&#xf067;" d="M804.571 539.429v-109.714q0-22.857-16-38.857t-38.857-16h-237.714v-237.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v237.714h-237.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h237.714v237.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857v-237.714h237.714q22.857 0 38.857-16t16-38.857z" horiz-adv-x="805" />
-<glyph unicode="&#xf068;" d="M804.571 91.434v-109.714q0-22.857-16-38.857t-38.857-16h-694.857q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h694.857q22.857 0 38.857-16t16-38.857z" horiz-adv-x="805" />
-<glyph unicode="&#xf069;" d="M846.857 360q26.286-14.857 34-44.286t-7.143-55.714l-36.571-62.857q-14.857-26.286-44.286-34t-55.714 7.143l-152 87.429v-175.429q0-29.714-21.714-51.429t-51.429-21.714h-73.143q-29.714 0-51.429 21.714t-21.714 51.429v175.429l-152-87.429q-26.286-14.857-55.714-7.143t-44.286 34l-36.571 62.857q-14.857 26.286-7.143 55.714t34 44.286l152 88-152 88q-26.286 14.857-34 44.286t7.143 55.714l36.571 62.857q14.857 26.286 44.286 34t55.714-7.143l152-87.429v175.429q0 29.714 21.714 51.429t51.429 21.714h73.143q29.714 0 51.429-21.714t21.714-51.429v-175.429l152 87.429q26.286 14.857 55.714 7.143t44.286-34l36.571-62.857q14.857-26.286 7.143-55.714t-34-44.286l-152-88z" horiz-adv-x="951" />
-<glyph unicode="&#xf073;" d="M73.143 9.143h164.571v164.571h-164.571v-164.571zM274.286 9.143h182.857v164.571h-182.857v-164.571zM73.143 210.286h164.571v182.857h-164.571v-182.857zM274.286 210.286h182.857v182.857h-182.857v-182.857zM73.143 429.714h164.571v164.571h-164.571v-164.571zM493.714 9.143h182.857v164.571h-182.857v-164.571zM274.286 429.714h182.857v164.571h-182.857v-164.571zM713.143 9.143h164.571v164.571h-164.571v-164.571zM493.714 210.286h182.857v182.857h-182.857v-182.857zM292.571 704v164.571q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-164.571q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857zM713.143 210.286h164.571v182.857h-164.571v-182.857zM493.714 429.714h182.857v164.571h-182.857v-164.571zM713.143 429.714h164.571v164.571h-164.571v-164.571zM731.429 704v164.571q0 7.429-5.429 12.857t-12.857 5.429h-36.571q-7.429 0-12.857-5.429t-5.429-12.857v-164.571q0-7.429 5.429-12.857t12.857-5.429h36.571q7.429 0 12.857 5.429t5.429 12.857zM950.857 740.571v-731.429q0-29.714-21.714-51.429t-51.429-21.714h-804.571q-29.714 0-51.429 21.714t-21.714 51.429v731.429q0 29.714 21.714 51.429t51.429 21.714h73.143v54.857q0 37.714 26.857 64.571t64.571 26.857h36.571q37.714 0 64.571-26.857t26.857-64.571v-54.857h219.429v54.857q0 37.714 26.857 64.571t64.571 26.857h36.571q37.714 0 64.571-26.857t26.857-64.571v-54.857h73.143q29.714 0 51.429-21.714t21.714-51.429z" horiz-adv-x="951" />
-<glyph unicode="&#xf075;" d="M1024 448q0-99.429-68.571-183.714t-186.286-133.143-257.143-48.857q-40 0-82.857 4.571-113.143-100-262.857-138.286-28-8-65.143-12.571-9.714-1.143-17.429 5.143t-10 16.571v0.571q-1.714 2.286-0.286 6.857t1.143 5.714 2.571 5.429l3.429 5.143t4 4.857 4.571 5.143q4 4.571 17.714 19.714t19.714 21.714 17.714 22.571 18.571 29.143 15.429 33.714 14.857 43.429q-89.714 50.857-141.429 125.714t-51.714 160.571q0 74.286 40.571 142t109.143 116.857 163.429 78 198.857 28.857q139.429 0 257.143-48.857t186.286-133.143 68.571-183.714z" />
-<glyph unicode="&#xf080;" d="M365.714 438.857v-292.571h-146.286v292.571h146.286zM585.143 731.428v-585.143h-146.286v585.143h146.286zM1170.286 73.143v-73.143h-1170.286v877.714h73.143v-804.571h1097.143zM804.571 585.143v-438.857h-146.286v438.857h146.286zM1024 804.571v-658.286h-146.286v658.286h146.286z" horiz-adv-x="1170" />
-<glyph unicode="&#xf085;" d="M512 448q0 60.571-42.857 103.429t-103.429 42.857-103.429-42.857-42.857-103.429 42.857-103.429 103.429-42.857 103.429 42.857 42.857 103.429zM950.857 155.429q0 29.714-21.714 51.429t-51.429 21.714-51.429-21.714-21.714-51.429q0-30.286 21.429-51.714t51.714-21.429 51.714 21.429 21.429 51.714zM950.857 740.571q0 29.714-21.714 51.429t-51.429 21.714-51.429-21.714-21.714-51.429q0-30.286 21.429-51.714t51.714-21.429 51.714 21.429 21.429 51.714zM731.429 500v-105.714q0-5.714-4-11.143t-9.143-6l-88.571-13.714q-6.286-20-18.286-43.429 19.429-27.429 51.429-65.714 4-5.714 4-11.429 0-6.857-4-10.857-13.143-17.143-47.143-51.143t-44.857-34q-6.286 0-12 4l-65.714 51.429q-21.143-10.857-44-17.714-6.286-61.714-13.143-88.571-4-13.714-17.143-13.714h-106.286q-6.286 0-11.429 4.286t-5.714 10l-13.143 87.429q-19.429 5.714-42.857 17.714l-67.429-50.857q-4-4-11.429-4-6.286 0-12 4.571-82.286 76-82.286 91.429 0 5.143 4 10.857 5.714 8 23.429 30.286t26.857 34.857q-13.143 25.143-20 46.857l-86.857 13.714q-5.714 0.571-9.714 5.429t-4 11.143v105.714q0 5.714 4 11.143t9.143 6l88.571 13.714q6.286 20 18.286 43.429-19.429 27.429-51.429 65.714-4 6.286-4 11.429 0 6.857 4 11.429 12.571 17.143 46.857 50.857t45.143 33.714q6.286 0 12-4l65.714-51.429q19.429 10.286 44 18.286 6.286 61.714 13.143 88 4 13.714 17.143 13.714h106.286q6.286 0 11.429-4.286t5.714-10l13.143-87.429q19.429-5.714 42.857-17.714l67.429 50.857q4.571 4 11.429 4 6.286 0 12-4.571 82.286-76 82.286-91.429 0-5.143-4-10.857-6.857-9.143-24-30.857t-25.714-34.286q13.143-27.429 19.429-46.857l86.857-13.143q5.714-1.143 9.714-6t4-11.143zM1097.143 195.429v-80q0-9.143-85.143-17.714-6.857-15.429-17.143-29.714 29.143-64.571 29.143-78.857 0-2.286-2.286-4-69.714-40.571-70.857-40.571-4.571 0-26.286 26.857t-29.714 38.857q-11.429-1.143-17.143-1.143t-17.143 1.143q-8-12-29.714-38.857t-26.286-26.857q-1.143 0-70.857 40.571-2.286 1.714-2.286 4 0 14.286 29.143 78.857-10.286 14.286-17.143 29.714-85.143 8.571-85.143 17.714v80q0 9.143 85.143 17.714 7.429 16.571 17.143 29.714-29.143 64.571-29.143 78.857 0 2.286 2.286 4 2.286 1.143 20 11.429t33.714 19.429 17.143 9.143q4.571 0 26.286-26.571t29.714-38.571q11.429 1.143 17.143 1.143t17.143-1.143q29.143 40.571 52.571 64l3.429 1.143q2.286 0 70.857-40 2.286-1.714 2.286-4 0-14.286-29.143-78.857 9.714-13.143 17.143-29.714 85.143-8.571 85.143-17.714zM1097.143 780.571v-80q0-9.143-85.143-17.714-6.857-15.429-17.143-29.714 29.143-64.571 29.143-78.857 0-2.286-2.286-4-69.714-40.571-70.857-40.571-4.571 0-26.286 26.857t-29.714 38.857q-11.429-1.143-17.143-1.143t-17.143 1.143q-8-12-29.714-38.857t-26.286-26.857q-1.143 0-70.857 40.571-2.286 1.714-2.286 4 0 14.286 29.143 78.857-10.286 14.286-17.143 29.714-85.143 8.571-85.143 17.714v80q0 9.143 85.143 17.714 7.429 16.571 17.143 29.714-29.143 64.571-29.143 78.857 0 2.286 2.286 4 2.286 1.143 20 11.429t33.714 19.429 17.143 9.143q4.571 0 26.286-26.571t29.714-38.571q11.429 1.143 17.143 1.143t17.143-1.143q29.143 40.571 52.571 64l3.429 1.143q2.286 0 70.857-40 2.286-1.714 2.286-4 0-14.286-29.143-78.857 9.714-13.143 17.143-29.714 85.143-8.571 85.143-17.714z" horiz-adv-x="1097" />
-<glyph unicode="&#xf08e;" d="M804.571 429.714v-182.857q0-68-48.286-116.286t-116.286-48.286h-475.429q-68 0-116.286 48.286t-48.286 116.286v475.429q0 68 48.286 116.286t116.286 48.286h402.286q8 0 13.143-5.143t5.143-13.143v-36.571q0-8-5.143-13.143t-13.143-5.143h-402.286q-37.714 0-64.571-26.857t-26.857-64.571v-475.429q0-37.714 26.857-64.571t64.571-26.857h475.429q37.714 0 64.571 26.857t26.857 64.571v182.857q0 8 5.143 13.143t13.143 5.143h36.571q8 0 13.143-5.143t5.143-13.143zM1024 923.429v-292.571q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-100.571 100.571-372.571-372.571q-5.714-5.714-13.143-5.714t-13.143 5.714l-65.143 65.143q-5.714 5.714-5.714 13.143t5.714 13.143l372.571 372.571-100.571 100.571q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h292.571q14.857 0 25.714-10.857t10.857-25.714z" />
-<glyph unicode="&#xf091;" d="M261.714 455.429q-42.286 92.571-42.286 212h-146.286v-54.857q0-44.571 54-92.571t134.571-64.571zM877.714 612.571v54.857h-146.286q0-119.429-42.286-212 80.571 16.571 134.571 64.571t54 92.571zM950.857 685.714v-73.143q0-40.571-23.714-81.714t-64-74.286-98.857-55.714-123.143-25.429q-24-30.857-54.286-54.286-21.714-19.429-30-41.429t-8.286-51.143q0-30.857 17.429-52t55.714-21.143q42.857 0 76.286-26t33.429-65.429v-36.571q0-8-5.143-13.143t-13.143-5.143h-475.429q-8 0-13.143 5.143t-5.143 13.143v36.571q0 39.429 33.429 65.429t76.286 26q38.286 0 55.714 21.143t17.429 52q0 29.143-8.286 51.143t-30 41.429q-30.286 23.429-54.286 54.286-64.571 2.857-123.143 25.429t-98.857 55.714-64 74.286-23.714 81.714v73.143q0 22.857 16 38.857t38.857 16h164.571v54.857q0 37.714 26.857 64.571t64.571 26.857h329.143q37.714 0 64.571-26.857t26.857-64.571v-54.857h164.571q22.857 0 38.857-16t16-38.857z" horiz-adv-x="951" />
-<glyph unicode="&#xf0b0;" d="M801.714 782.286q9.714-23.429-8-40l-281.714-281.714v-424q0-24-22.286-33.714-7.429-2.857-14.286-2.857-15.429 0-25.714 10.857l-146.286 146.286q-10.857 10.857-10.857 25.714v277.714l-281.714 281.714q-17.714 16.571-8 40 9.714 22.286 33.714 22.286h731.429q24 0 33.714-22.286z" horiz-adv-x="805" />
-<glyph unicode="&#xf0c1;" d="M832 265.143q0 22.857-16 38.857l-118.857 118.857q-16 16-38.857 16-24 0-41.143-18.286 1.714-1.714 10.857-10.571t12.286-12.286 8.571-10.857 7.429-14.571 2-15.714q0-22.857-16-38.857t-38.857-16q-8.571 0-15.714 2t-14.571 7.429-10.857 8.571-12.286 12.286-10.571 10.857q-18.857-17.714-18.857-41.714 0-22.857 16-38.857l117.714-118.286q15.429-15.429 38.857-15.429 22.857 0 38.857 14.857l84 83.429q16 16 16 38.286zM430.286 668q0 22.857-16 38.857l-117.714 118.286q-16 16-38.857 16-22.286 0-38.857-15.429l-84-83.429q-16-16-16-38.286 0-22.857 16-38.857l118.857-118.857q15.429-15.429 38.857-15.429 24 0 41.143 17.714-1.714 1.714-10.857 10.571t-12.286 12.286-8.571 10.857-7.429 14.571-2 15.714q0 22.857 16 38.857t38.857 16q8.571 0 15.714-2t14.571-7.429 10.857-8.571 12.286-12.286 10.571-10.857q18.857 17.714 18.857 41.714zM941.714 265.143q0-68.571-48.571-116l-84-83.429q-47.429-47.429-116-47.429-69.143 0-116.571 48.571l-117.714 118.286q-47.429 47.429-47.429 116 0 70.286 50.286 119.429l-50.286 50.286q-49.143-50.286-118.857-50.286-68.571 0-116.571 48l-118.857 118.857q-48 48-48 116.571t48.571 116l84 83.429q47.429 47.429 116 47.429 69.143 0 116.571-48.571l117.714-118.286q47.429-47.429 47.429-116 0-70.286-50.286-119.429l50.286-50.286q49.143 50.286 118.857 50.286 68.571 0 116.571-48l118.857-118.857q48-48 48-116.571z" horiz-adv-x="951" />
-<glyph unicode="&#xf0c5;" d="M969.143 740.571q22.857 0 38.857-16t16-38.857v-694.857q0-22.857-16-38.857t-38.857-16h-548.571q-22.857 0-38.857 16t-16 38.857v164.571h-310.857q-22.857 0-38.857 16t-16 38.857v384q0 22.857 11.429 50.286t27.429 43.429l233.143 233.143q16 16 43.429 27.429t50.286 11.429h237.714q22.857 0 38.857-16t16-38.857v-187.429q38.857 22.857 73.143 22.857h237.714zM658.286 618.857l-170.857-170.857h170.857v170.857zM292.571 838.286l-170.857-170.857h170.857v170.857zM404.571 468.571l180.571 180.571v237.714h-219.429v-237.714q0-22.857-16-38.857t-38.857-16h-237.714v-365.714h292.571v146.286q0 22.857 11.429 50.286t27.429 43.429zM950.857 9.143v658.286h-219.429v-237.714q0-22.857-16-38.857t-38.857-16h-237.714v-365.714h512z" />
-<glyph unicode="&#xf0d7;" d="M585.143 557.714q0-14.857-10.857-25.714l-256-256q-10.857-10.857-25.714-10.857t-25.714 10.857l-256 256q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857h512q14.857 0 25.714-10.857t10.857-25.714z" horiz-adv-x="585" />
-<glyph unicode="&#xf0d8;" d="M585.143 265.143q0-14.857-10.857-25.714t-25.714-10.857h-512q-14.857 0-25.714 10.857t-10.857 25.714 10.857 25.714l256 256q10.857 10.857 25.714 10.857t25.714-10.857l256-256q10.857-10.857 10.857-25.714z" horiz-adv-x="585" />
-<glyph unicode="&#xf0d9;" d="M365.714 704v-512q0-14.857-10.857-25.714t-25.714-10.857-25.714 10.857l-256 256q-10.857 10.857-10.857 25.714t10.857 25.714l256 256q10.857 10.857 25.714 10.857t25.714-10.857 10.857-25.714z" horiz-adv-x="366" />
-<glyph unicode="&#xf0da;" d="M329.143 448q0-14.857-10.857-25.714l-256-256q-10.857-10.857-25.714-10.857t-25.714 10.857-10.857 25.714v512q0 14.857 10.857 25.714t25.714 10.857 25.714-10.857l256-256q10.857-10.857 10.857-25.714z" horiz-adv-x="366" />
-<glyph unicode="&#xf0f6;" d="M768 242.64v-32.128c0-4.66-1.466-9.75-4.424-12.762-2.962-3.016-6.742-5.75-11.318-5.75h-480.458c-4.628 0-8.414 2.734-11.374 5.75-2.96 3.012-4.424 8.102-4.424 12.762v32.128c0 4.656 1.466 7.14 4.424 10.164 2.96 3.016 6.744 3.196 11.374 3.196h480.456c4.578 0 8.356-0.18 11.318-3.196 2.96-3.018 4.426-5.508 4.426-10.164zM768 370.988v-32.124c0-4.66-1.488-9.894-4.494-12.914-3.008-3.020-6.848-5.95-11.496-5.95h-479.966c-4.702 0-8.544 2.93-11.55 5.95-3.008 3.020-4.494 8.254-4.494 12.914v32.124c0 4.664 1.488 7.004 4.494 10.016 3.006 3.016 6.85 2.996 11.55 2.996h479.966c4.65 0 8.488 0.020 11.496-2.996 3.006-3.012 4.494-5.352 4.494-10.016zM192 64h640v512h-208.012c-13.292 0-24.678 5.234-33.974 14.61-9.352 9.324-14.014 21.3-14.014 34.624v206.766h-384v-768zM640.796 640h187.174c-3.338 8-7 17.208-10.994 21.21l-156.52 157.238c-3.992 4.032-12.458 8.028-20.458 11.376v-187.824l0.798-2zM896 624v-573.86c0-13.378-4.702-25.73-13.998-35.106-9.35-9.32-20.672-15.036-34.014-15.036h-671.974c-13.344 0-24.664 5.708-34.016 15.036-9.294 9.376-13.998 21.726-13.998 35.106v799.742c0 13.352 4.704 23.73 13.998 33.078 9.352 9.348 20.672 13.040 34.016 13.040h447.976c13.342 0 27.998-2.348 44.022-9.036 15.97-6.664 28.658-14.196 37.952-23.54l156.026-156.148c9.296-9.378 17.334-22.614 24.006-38.624 6.618-16.062 9.954-32.652 9.954-44.652v0h0.050z" horiz-adv-x="1019" />
-<glyph unicode="&#xf100;" d="M358.286 173.714q0-7.429-5.714-13.143l-28.571-28.571q-5.714-5.714-13.143-5.714t-13.143 5.714l-266.286 266.286q-5.714 5.714-5.714 13.143t5.714 13.143l266.286 266.286q5.714 5.714 13.143 5.714t13.143-5.714l28.571-28.571q5.714-5.714 5.714-13.143t-5.714-13.143l-224.571-224.571 224.571-224.571q5.714-5.714 5.714-13.143zM577.714 173.714q0-7.429-5.714-13.143l-28.571-28.571q-5.714-5.714-13.143-5.714t-13.143 5.714l-266.286 266.286q-5.714 5.714-5.714 13.143t5.714 13.143l266.286 266.286q5.714 5.714 13.143 5.714t13.143-5.714l28.571-28.571q5.714-5.714 5.714-13.143t-5.714-13.143l-224.571-224.571 224.571-224.571q5.714-5.714 5.714-13.143z" horiz-adv-x="585" />
-<glyph unicode="&#xf101;" d="M340 411.429q0-7.429-5.714-13.143l-266.286-266.286q-5.714-5.714-13.143-5.714t-13.143 5.714l-28.571 28.571q-5.714 5.714-5.714 13.143t5.714 13.143l224.571 224.571-224.571 224.571q-5.714 5.714-5.714 13.143t5.714 13.143l28.571 28.571q5.714 5.714 13.143 5.714t13.143-5.714l266.286-266.286q5.714-5.714 5.714-13.143zM559.429 411.429q0-7.429-5.714-13.143l-266.286-266.286q-5.714-5.714-13.143-5.714t-13.143 5.714l-28.571 28.571q-5.714 5.714-5.714 13.143t5.714 13.143l224.571 224.571-224.571 224.571q-5.714 5.714-5.714 13.143t5.714 13.143l28.571 28.571q5.714 5.714 13.143 5.714t13.143-5.714l266.286-266.286q5.714-5.714 5.714-13.143z" horiz-adv-x="585" />
-<glyph unicode="&#xf104;" d="M358.286 649.143q0-7.429-5.714-13.143l-224.571-224.571 224.571-224.571q5.714-5.714 5.714-13.143t-5.714-13.143l-28.571-28.571q-5.714-5.714-13.143-5.714t-13.143 5.714l-266.286 266.286q-5.714 5.714-5.714 13.143t5.714 13.143l266.286 266.286q5.714 5.714 13.143 5.714t13.143-5.714l28.571-28.571q5.714-5.714 5.714-13.143z" horiz-adv-x="366" />
-<glyph unicode="&#xf105;" d="M340 411.429q0-7.429-5.714-13.143l-266.286-266.286q-5.714-5.714-13.143-5.714t-13.143 5.714l-28.571 28.571q-5.714 5.714-5.714 13.143t5.714 13.143l224.571 224.571-224.571 224.571q-5.714 5.714-5.714 13.143t5.714 13.143l28.571 28.571q5.714 5.714 13.143 5.714t13.143-5.714l266.286-266.286q5.714-5.714 5.714-13.143z" horiz-adv-x="366" />
-<glyph unicode="&#xf114;" d="M896 173.702v419.296c0 12.68-3.94 23.126-13.228 32.006-9.344 8.902-19.896 12.996-33.228 12.996h-417.792c-13.32 0-24.546 4.79-33.864 13.672-9.328 8.902-13.888 20.018-13.888 32.724v36.478c0 12.712-4.77 23.2-14.086 32.086-9.334 8.876-20.76 13.040-34.080 13.040h-159.866c-13.322 0-24.654-4.164-33.97-13.040-9.332-8.886-14-19.374-14-32.086v-547.174c0-12.708 4.666-23.472 14-32.38 9.316-8.88 20.65-13.32 33.97-13.32h673.6c13.306 0 23.882 4.44 33.202 13.32 9.346 8.908 13.23 19.674 13.23 32.382v0zM960 595.954v-425.668c0-29.254-10.296-53.11-32.262-74.066-21.994-20.968-47.594-32.218-78.22-32.218h-673.602c-30.642 0-56.956 11.226-78.924 32.218-21.978 20.988-32.976 44.838-32.99 74.066v555.762c0 29.252 10.996 53.914 32.99 74.904 21.982 20.96 48.294 31.046 78.924 31.046h159.866c30.658 0 57.108-10.058 79.086-31.046 21.968-20.99 33.132-45.678 33.132-74.904v-20.048h401.516c30.656 0 56.254-13.11 78.22-34.090 21.966-20.972 32.262-46.704 32.262-75.902v-0.054z" horiz-adv-x="951" />
-<glyph unicode="&#xf122;" d="M365.714 341.714v-40q0-24-22.286-33.714-7.429-2.857-14.286-2.857-15.429 0-25.714 10.857l-292.571 292.571q-10.857 10.857-10.857 25.714t10.857 25.714l292.571 292.571q16.571 17.714 40 8 22.286-9.714 22.286-33.714v-39.429l-226.857-227.429q-10.857-10.857-10.857-25.714t10.857-25.714zM1024 320q0-33.143-9.714-76.286t-22-78.857-27.429-71.429-23.143-51.714l-11.429-22.857q-4.571-9.714-16-9.714-3.429 0-5.143 0.571-14.286 4.571-13.143 19.429 24.571 228.571-60.571 322.857-36.571 40.571-97.429 63.143t-152.857 30v-143.429q0-24-22.286-33.714-7.429-2.857-14.286-2.857-15.429 0-25.714 10.857l-292.571 292.571q-10.857 10.857-10.857 25.714t10.857 25.714l292.571 292.571q16.571 17.714 40 8 22.286-9.714 22.286-33.714v-149.714q234.857-16 342.286-126.286 96.571-98.857 96.571-290.857z" />
-<glyph unicode="&#xf126;" d="M164.571 118.857q0 22.857-16 38.857t-38.857 16-38.857-16-16-38.857 16-38.857 38.857-16 38.857 16 16 38.857zM164.571 777.143q0 22.857-16 38.857t-38.857 16-38.857-16-16-38.857 16-38.857 38.857-16 38.857 16 16 38.857zM530.286 704q0 22.857-16 38.857t-38.857 16-38.857-16-16-38.857 16-38.857 38.857-16 38.857 16 16 38.857zM585.143 704q0-29.714-14.857-55.143t-40-39.714q-1.143-164-129.143-236.571-38.857-21.714-116-46.286-73.143-22.857-96.857-40.571t-23.714-57.143v-14.857q25.143-14.286 40-39.714t14.857-55.143q0-45.714-32-77.714t-77.714-32-77.714 32-32 77.714q0 29.714 14.857 55.143t40 39.714v468.571q-25.143 14.286-40 39.714t-14.857 55.143q0 45.714 32 77.714t77.714 32 77.714-32 32-77.714q0-29.714-14.857-55.143t-40-39.714v-284q30.857 14.857 88 32.571 31.429 9.714 50 16.857t40.286 17.714 33.714 22.571 23.143 29.143 16 39.714 4.857 52.286q-25.143 14.286-40 39.714t-14.857 55.143q0 45.714 32 77.714t77.714 32 77.714-32 32-77.714z" horiz-adv-x="585" />
-<glyph unicode="&#xf127;" d="M250.857 233.714l-146.286-146.286q-5.714-5.143-13.143-5.143-6.857 0-13.143 5.143-5.143 5.714-5.143 13.143t5.143 13.143l146.286 146.286q5.714 5.143 13.143 5.143t13.143-5.143q5.143-5.714 5.143-13.143t-5.143-13.143zM347.429 210.286v-182.857q0-8-5.143-13.143t-13.143-5.143-13.143 5.143-5.143 13.143v182.857q0 8 5.143 13.143t13.143 5.143 13.143-5.143 5.143-13.143zM219.429 338.286q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143 5.143 13.143 13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM941.714 265.143q0-68.571-48.571-116l-84-83.429q-47.429-47.429-116-47.429-69.143 0-116.571 48.571l-190.857 191.429q-12 12-24 32l136.571 10.286 156-156.571q15.429-15.429 38.857-15.714t38.857 15.143l84 83.429q16 16 16 38.286 0 22.857-16 38.857l-156.571 157.143 10.286 136.571q20-12 32-24l192-192q48-49.143 48-116.571zM589.143 678.857l-136.571-10.286-156 156.571q-16 16-38.857 16-22.286 0-38.857-15.429l-84-83.429q-16-16-16-38.286 0-22.857 16-38.857l156.571-156.571-10.286-137.143q-20 12-32 24l-192 192q-48 49.143-48 116.571 0 68.571 48.571 116l84 83.429q47.429 47.429 116 47.429 69.143 0 116.571-48.571l190.857-191.429q12-12 24-32zM950.857 630.857q0-8-5.143-13.143t-13.143-5.143h-182.857q-8 0-13.143 5.143t-5.143 13.143 5.143 13.143 13.143 5.143h182.857q8 0 13.143-5.143t5.143-13.143zM640 941.714v-182.857q0-8-5.143-13.143t-13.143-5.143-13.143 5.143-5.143 13.143v182.857q0 8 5.143 13.143t13.143 5.143 13.143-5.143 5.143-13.143zM872.571 855.429l-146.286-146.286q-6.286-5.143-13.143-5.143t-13.143 5.143q-5.143 5.714-5.143 13.143t5.143 13.143l146.286 146.286q5.714 5.143 13.143 5.143t13.143-5.143q5.143-5.714 5.143-13.143t-5.143-13.143z" horiz-adv-x="951" />
-<glyph unicode="&#xf141;" d="M219.429 530.286v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857zM512 530.286v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857zM804.571 530.286v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857z" horiz-adv-x="805" />
-<glyph unicode="&#xf142;" d="M219.429 246.857v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857zM219.429 539.429v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857zM219.429 832v-109.714q0-22.857-16-38.857t-38.857-16h-109.714q-22.857 0-38.857 16t-16 38.857v109.714q0 22.857 16 38.857t38.857 16h109.714q22.857 0 38.857-16t16-38.857z" horiz-adv-x="219" />
-<glyph unicode="&#xf188;" d="M932.571 411.429q0-14.857-10.857-25.714t-25.714-10.857h-128q0-97.714-38.286-165.714l118.857-119.429q10.857-10.857 10.857-25.714t-10.857-25.714q-10.286-10.857-25.714-10.857t-25.714 10.857l-113.143 112.571q-2.857-2.857-8.571-7.429t-24-16.286-37.143-20.857-46.857-16.571-55.429-7.429v512h-73.143v-512q-29.143 0-58 7.714t-49.714 18.857-37.714 22.286-24.857 18.571l-8.571 8-104.571-118.286q-11.429-12-27.429-12-13.714 0-24.571 9.143-10.857 10.286-11.714 25.429t8.857 26.571l115.429 129.714q-33.143 65.143-33.143 156.571h-128q-14.857 0-25.714 10.857t-10.857 25.714 10.857 25.714 25.714 10.857h128v168l-98.857 98.857q-10.857 10.857-10.857 25.714t10.857 25.714 25.714 10.857 25.714-10.857l98.857-98.857h482.286l98.857 98.857q10.857 10.857 25.714 10.857t25.714-10.857 10.857-25.714-10.857-25.714l-98.857-98.857v-168h128q14.857 0 25.714-10.857t10.857-25.714zM658.286 740.571h-365.714q0 76 53.429 129.429t129.429 53.429 129.429-53.429 53.429-129.429z" horiz-adv-x="951" />
-</font></defs></svg> \ No newline at end of file
diff --git a/server/sonar-web/public/fonts/sonar-5.2.ttf b/server/sonar-web/public/fonts/sonar-5.2.ttf
deleted file mode 100755
index fa26fd2b826..00000000000
--- a/server/sonar-web/public/fonts/sonar-5.2.ttf
+++ /dev/null
Binary files differ
diff --git a/server/sonar-web/public/fonts/sonar-5.2.woff b/server/sonar-web/public/fonts/sonar-5.2.woff
deleted file mode 100755
index 1e9e0d823fc..00000000000
--- a/server/sonar-web/public/fonts/sonar-5.2.woff
+++ /dev/null
Binary files differ
diff --git a/server/sonar-web/scripts/start.js b/server/sonar-web/scripts/start.js
index 88fbd9edcff..28afc572245 100644
--- a/server/sonar-web/scripts/start.js
+++ b/server/sonar-web/scripts/start.js
@@ -106,7 +106,6 @@ function runDevServer(compiler, host, port, protocol) {
},
proxy: {
'/api': proxy,
- '/fonts': proxy,
'/static': proxy,
'/integration': proxy
}
diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx
index a918d734e24..fa0fd612b5b 100644
--- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx
@@ -36,6 +36,7 @@ import PlusCircleIcon from '../../../../components/icons-components/PlusCircleIc
import HelpTooltip from '../../../../components/controls/HelpTooltip';
import Toggler from '../../../../components/controls/Toggler';
import Tooltip from '../../../../components/controls/Tooltip';
+import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
interface Props {
branchLikes: BranchLike[];
@@ -186,7 +187,7 @@ export default class ComponentNavBranch extends React.PureComponent<Props, State
<Tooltip mouseEnterDelay={1} overlay={displayName}>
<span className="text-limited text-top">{displayName}</span>
</Tooltip>
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</a>
</Toggler>
</div>
diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx
index e6dae1fa20c..325d8e0b613 100644
--- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx
@@ -22,7 +22,7 @@ import { connect } from 'react-redux';
import { Link } from 'react-router';
import ComponentNavBranch from './ComponentNavBranch';
import { Component, Organization, BranchLike, Breadcrumb } from '../../../types';
-import QualifierIcon from '../../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../../components/icons-components/QualifierIcon';
import { getOrganizationByKey, areThereCustomOrganizations } from '../../../../store/rootReducer';
import OrganizationAvatar from '../../../../components/common/OrganizationAvatar';
import OrganizationHelmet from '../../../../components/common/OrganizationHelmet';
diff --git a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
index 86ea6e3c84a..1f3045cfc52 100644
--- a/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
@@ -31,6 +31,7 @@ import {
getBranchLikeQuery
} from '../../../../helpers/branches';
import { translate } from '../../../../helpers/l10n';
+import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
const SETTINGS_URLS = [
'/project/admin',
@@ -196,7 +197,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
id="component-navigation-admin"
onClick={onToggleClick}>
{translate('layout.settings')}
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</a>
)}
</Dropdown>
@@ -436,7 +437,7 @@ export default class ComponentNavMenu extends React.PureComponent<Props> {
id="component-navigation-more"
onClick={onToggleClick}>
{translate('more')}
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</a>
)}
</Dropdown>
diff --git a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap
index 3d9fee6a289..214b4a018d1 100644
--- a/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap
+++ b/server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap
@@ -61,8 +61,8 @@ exports[`renders main branch 1`] = `
master
</span>
</Tooltip>
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</a>
</Toggler>
@@ -152,8 +152,8 @@ exports[`renders pull request 1`] = `
1234 – Feature PR
</span>
</Tooltip>
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</a>
</Toggler>
@@ -264,8 +264,8 @@ exports[`renders short-living branch 1`] = `
foo
</span>
</Tooltip>
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</a>
</Toggler>
diff --git a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
index cab30c446ae..99e20aa58c5 100644
--- a/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
@@ -25,6 +25,7 @@ import { translate } from '../../../../helpers/l10n';
import { getQualityGatesUrl, getBaseUrl } from '../../../../helpers/urls';
import { isMySet } from '../../../../apps/issues/utils';
import Dropdown from '../../../../components/controls/Dropdown';
+import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
interface Props {
appState: AppState;
@@ -165,7 +166,7 @@ export default class GlobalNavMenu extends React.PureComponent<Props> {
id="global-navigation-more"
onClick={onToggleClick}>
{translate('more')}
- <span className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left text-middle" />
</a>
)}
</Dropdown>
diff --git a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
index ff656a311a5..397603fe68d 100644
--- a/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
+++ b/server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
@@ -30,6 +30,7 @@ import { Extension } from '../../../types';
import { translate } from '../../../../helpers/l10n';
import Dropdown from '../../../../components/controls/Dropdown';
import { PluginPendingResult } from '../../../../api/plugins';
+import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
interface Props {
editionStatus?: EditionStatus;
@@ -137,7 +138,7 @@ export default class SettingsNav extends React.PureComponent<Props> {
id="settings-navigation-configuration"
onClick={onToggleClick}>
{translate('sidebar.project_settings')}
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</a>
)}
</Dropdown>
@@ -172,7 +173,8 @@ export default class SettingsNav extends React.PureComponent<Props> {
className={classNames('dropdown-toggle', { active: open || this.isProjectsActive() })}
href="#"
onClick={onToggleClick}>
- {translate('sidebar.projects')} <i className="icon-dropdown" />
+ {translate('sidebar.projects')}
+ <DropdownIcon className="little-spacer-left" />
</a>
)}
</Dropdown>
@@ -221,7 +223,8 @@ export default class SettingsNav extends React.PureComponent<Props> {
className={classNames('dropdown-toggle', { active: open || this.isSecurityActive() })}
href="#"
onClick={onToggleClick}>
- {translate('sidebar.security')} <i className="icon-dropdown" />
+ {translate('sidebar.security')}
+ <DropdownIcon className="little-spacer-left" />
</a>
)}
</Dropdown>
diff --git a/server/sonar-web/src/main/js/app/components/search/SearchResult.js b/server/sonar-web/src/main/js/app/components/search/SearchResult.js
index 02cc378ce09..c8426ea96a9 100644
--- a/server/sonar-web/src/main/js/app/components/search/SearchResult.js
+++ b/server/sonar-web/src/main/js/app/components/search/SearchResult.js
@@ -22,7 +22,7 @@ import React from 'react';
import { Link } from 'react-router';
/*:: import type { Component } from './utils'; */
import FavoriteIcon from '../../../components/icons-components/FavoriteIcon';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import ClockIcon from '../../../components/icons-components/ClockIcon';
import Tooltip from '../../../components/controls/Tooltip';
import { getProjectUrl } from '../../../helpers/urls';
diff --git a/server/sonar-web/src/main/js/app/styles/components/boxed-group.css b/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
index 49aa03123b6..e77b22430da 100644
--- a/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
+++ b/server/sonar-web/src/main/js/app/styles/components/boxed-group.css
@@ -47,11 +47,6 @@
line-height: var(--controlHeight);
}
-.boxed-group-header [class^='icon-'] {
- display: inline-block;
- vertical-align: middle;
-}
-
.boxed-group-actions {
position: relative;
z-index: 12;
diff --git a/server/sonar-web/src/main/js/app/styles/components/issues.css b/server/sonar-web/src/main/js/app/styles/components/issues.css
index 21eb1a3066a..3e1635acf1d 100644
--- a/server/sonar-web/src/main/js/app/styles/components/issues.css
+++ b/server/sonar-web/src/main/js/app/styles/components/issues.css
@@ -134,6 +134,8 @@
}
.issue-meta-list {
+ display: flex;
+ align-items: center;
padding-left: 10px;
}
@@ -142,13 +144,8 @@
font-size: var(--smallFontSize);
}
-.issue-meta-on-right {
- float: right;
- margin-right: 0;
-}
-
-.issue-meta-on-right + .issue-meta-on-right {
- margin-right: 10px;
+.issue-meta + .issue-meta {
+ margin-left: var(--gridSize);
}
.issue-meta-in-corner {
@@ -386,62 +383,6 @@ input.issue-action-options-search {
font-size: var(--smallFontSize);
}
-.issue-navigate {
- display: none;
- position: absolute;
- width: 24px;
- top: 0;
- bottom: 0;
- border-bottom: none;
-}
-
-.issue-navigate .issue-navigate-to-left,
-.issue-navigate .issue-navigate-to-right {
- position: absolute;
- top: 50%;
- left: 50%;
- margin: -8px 0 0 -3px;
-}
-
-.issue-navigate .issue-navigate-to-left:before,
-.issue-navigate .issue-navigate-to-right:before {
- font-size: 18px;
-}
-
-.issue-navigate:hover {
- background-color: rgba(0, 0, 0, 0.05);
-}
-
-.issue-navigate-right .issue-meta-in-corner {
- padding-right: 24px;
-}
-
-.issue-navigate-left {
- padding-left: 24px;
-}
-
-.issue-navigate-left .issue-navigate {
- display: block;
- left: 0;
-}
-
-.issue-navigate-left .issue-navigate .issue-navigate-to-right {
- display: none;
-}
-
-.issue-navigate-right {
- padding-right: 24px;
-}
-
-.issue-navigate-right .issue-navigate {
- display: block;
- right: 0;
-}
-
-.issue-navigate-right .issue-navigate .issue-navigate-to-left {
- display: none;
-}
-
.issue-with-checkbox {
padding-left: 24px;
}
diff --git a/server/sonar-web/src/main/js/app/styles/components/ui.css b/server/sonar-web/src/main/js/app/styles/components/ui.css
index b3530f16c2e..537ffc19b72 100644
--- a/server/sonar-web/src/main/js/app/styles/components/ui.css
+++ b/server/sonar-web/src/main/js/app/styles/components/ui.css
@@ -62,13 +62,13 @@
.process-spinner-close {
position: absolute;
- top: 0;
- right: 0;
- padding: 3px;
- background: none !important;
- border: none !important;
- line-height: 1;
- color: #fff;
+ top: 2px;
+ right: 2px;
+}
+
+.process-spinner-close:hover path,
+.process-spinner-close:focus path {
+ fill: var(--red) !important;
}
.shortcuts-section + .shortcuts-section {
diff --git a/server/sonar-web/src/main/js/app/styles/init/icons.css b/server/sonar-web/src/main/js/app/styles/init/icons.css
index c4f46239db3..b262be7a0e1 100644
--- a/server/sonar-web/src/main/js/app/styles/init/icons.css
+++ b/server/sonar-web/src/main/js/app/styles/init/icons.css
@@ -17,30 +17,10 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
-@font-face {
- font-family: 'sonar';
- src: url('../fonts/sonar-5.2.eot?');
- src: url('../fonts/sonar-5.2.eot?#iefix') format('embedded-opentype'),
- url('../fonts/sonar-5.2.woff?') format('woff'),
- url('../fonts/sonar-5.2.ttf?') format('truetype'),
- url('../fonts/sonar-5.2.svg?#sonar') format('svg');
- font-weight: normal;
- font-style: normal;
-}
-
[class^='icon-'],
[class*=' icon-'] {
- font-family: 'sonar';
- speak: none;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
line-height: 1;
vertical-align: middle;
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
}
a[class^='icon-'],
@@ -68,203 +48,6 @@ a[class*=' icon-'] {
}
/*
- * Severity
- */
-[class^='icon-severity-'],
-[class*=' icon-severity'] {
- display: inline-block;
- vertical-align: top;
- width: 16px;
- height: 16px;
- background-size: 12px 12px;
- background: no-repeat center center;
-}
-
-.icon-severity-blocker,
-.icon-severity-4 {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cg%20transform%3D%22matrix(-1%2C1.22465e-16%2C-1.22465e-16%2C-1%2C12%2C12)%22%3E%3Cpath%20fill%3D%22%23d4333f%22%20d%3D%22M6%2C0C9.311%2C0%2012%2C2.689%2012%2C6C12%2C9.311%209.311%2C12%206%2C12C2.689%2C12%200%2C9.311%200%2C6C0%2C2.689%202.689%2C0%206%2C0ZM7%2C5L5%2C5L5%2C10L7%2C10L7%2C5ZM7%2C2L5%2C2L5%2C4L7%2C4L7%2C2Z%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E');
-}
-
-.icon-severity-critical,
-.icon-severity-3 {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cpath%20fill%3D%22%23d4333f%22%20d%3D%22M6%2C0C9.311%2C0%2012%2C2.689%2012%2C6C12%2C9.311%209.311%2C12%206%2C12C2.689%2C12%200%2C9.311%200%2C6C0%2C2.689%202.689%2C0%206%2C0ZM7%2C10L7%2C5.414L8.893%2C7.307C9.023%2C7.431%209.175%2C7.523%209.35%2C7.568C9.717%2C7.663%2010.116%2C7.537%2010.361%2C7.248C10.43%2C7.167%2010.486%2C7.075%2010.526%2C6.977C10.573%2C6.861%2010.598%2C6.738%2010.6%2C6.613C10.602%2C6.489%2010.58%2C6.365%2010.536%2C6.248C10.485%2C6.113%2010.406%2C5.997%2010.307%2C5.893C9.095%2C4.681%207.913%2C3.437%206.669%2C2.257C6.616%2C2.211%206.561%2C2.169%206.5%2C2.134C6.362%2C2.054%206.211%2C2.014%206.052%2C2.001C6%2C2%206%2C2%205.948%2C2.001C5.772%2C2.015%205.604%2C2.065%205.455%2C2.161C5.396%2C2.2%205.344%2C2.245%205.293%2C2.293C4.08%2C3.505%202.836%2C4.687%201.656%2C5.932C1.563%2C6.041%201.49%2C6.161%201.447%2C6.299C1.409%2C6.417%201.394%2C6.542%201.402%2C6.667C1.409%2C6.773%201.433%2C6.878%201.474%2C6.977C1.507%2C7.059%201.551%2C7.136%201.605%2C7.207C1.813%2C7.478%202.153%2C7.627%202.493%2C7.596C2.691%2C7.577%202.871%2C7.498%203.028%2C7.378C3.069%2C7.343%203.068%2C7.344%203.107%2C7.307L5%2C5.414L5%2C10L7%2C10Z%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-severity-major,
-.icon-severity-2 {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2212px%22%20height%3D%2212px%22%20viewBox%3D%220%200%2012%2012%22%20version%3D%221.1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20xml%3Aspace%3D%22preserve%22%20style%3D%22fill-rule%3Aevenodd%3Bclip-rule%3Aevenodd%3Bstroke-linejoin%3Around%3Bstroke-miterlimit%3A1.41421%3B%22%3E%3Cpath%20fill%3D%22%23d4333f%22%20d%3D%22M6%2C0C9.311%2C0%2012%2C2.689%2012%2C6C12%2C9.311%209.311%2C12%206%2C12C2.689%2C12%200%2C9.311%200%2C6C0%2C2.689%202.689%2C0%206%2C0ZM6.08%2C2.903C6.151%2C2.911%206.22%2C2.922%206.288%2C2.942C6.426%2C2.984%206.548%2C3.056%206.658%2C3.147C7.902%2C4.293%209.084%2C5.504%2010.297%2C6.683C10.397%2C6.786%2010.478%2C6.901%2010.531%2C7.035C10.576%2C7.151%2010.6%2C7.275%2010.6%2C7.399C10.6%2C7.524%2010.577%2C7.648%2010.532%2C7.763C10.493%2C7.863%2010.438%2C7.956%2010.37%2C8.038C10.129%2C8.33%209.732%2C8.461%209.363%2C8.372C9.188%2C8.329%209.035%2C8.239%208.903%2C8.117L6%2C5.295L3.097%2C8.117C3.058%2C8.153%203.058%2C8.153%203.017%2C8.187C2.902%2C8.273%202.777%2C8.337%202.637%2C8.372C2.516%2C8.401%202.39%2C8.408%202.267%2C8.391C1.928%2C8.345%201.63%2C8.124%201.489%2C7.813C1.452%2C7.732%201.427%2C7.646%201.413%2C7.558C1.396%2C7.453%201.396%2C7.345%201.413%2C7.24C1.445%2C7.044%201.535%2C6.87%201.666%2C6.721C2.847%2C5.51%204.09%2C4.362%205.303%2C3.183C5.355%2C3.135%205.409%2C3.09%205.47%2C3.052C5.623%2C2.956%205.794%2C2.91%205.973%2C2.9C6.027%2C2.9%206.027%2C2.9%206.08%2C2.903Z%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-severity-minor,
-.icon-severity-1 {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cpath%20fill%3D%22%2387bb43%22%20d%3D%22M6%2C0C9.311%2C0%2012%2C2.689%2012%2C6C12%2C9.311%209.311%2C12%206%2C12C2.689%2C12%200%2C9.311%200%2C6C0%2C2.689%202.689%2C0%206%2C0ZM7%2C6.586L7%2C2L5%2C2L5%2C6.586L3.107%2C4.693C3.055%2C4.644%203.002%2C4.598%202.942%2C4.559C2.79%2C4.461%202.619%2C4.413%202.44%2C4.401C2.386%2C4.4%202.334%2C4.402%202.28%2C4.407C2.121%2C4.431%201.97%2C4.482%201.836%2C4.574C1.748%2C4.634%201.67%2C4.708%201.605%2C4.793C1.398%2C5.064%201.344%2C5.432%201.464%2C5.752C1.515%2C5.887%201.594%2C6.003%201.693%2C6.107C2.905%2C7.319%204.087%2C8.563%205.331%2C9.743C5.425%2C9.823%205.526%2C9.889%205.642%2C9.934C5.904%2C10.034%206.203%2C10.019%206.454%2C9.891C6.548%2C9.843%206.631%2C9.78%206.707%2C9.707C7.92%2C8.495%209.164%2C7.313%2010.344%2C6.068C10.437%2C5.959%2010.51%2C5.839%2010.553%2C5.701C10.591%2C5.583%2010.606%2C5.458%2010.598%2C5.333C10.591%2C5.227%2010.567%2C5.122%2010.526%2C5.023C10.493%2C4.941%2010.449%2C4.864%2010.395%2C4.793C10.187%2C4.522%209.847%2C4.373%209.507%2C4.404C9.309%2C4.423%209.129%2C4.502%208.972%2C4.622C8.932%2C4.656%208.932%2C4.656%208.893%2C4.693L7%2C6.586Z%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-severity-info,
-.icon-severity-0 {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%3E%3Cpath%20fill%3D%22%234b9fd5%22%20d%3D%22M6%2C0C9.311%2C0%2012%2C2.689%2012%2C6C12%2C9.311%209.311%2C12%206%2C12C2.689%2C12%200%2C9.311%200%2C6C0%2C2.689%202.689%2C0%206%2C0ZM7%2C5L5%2C5L5%2C10L7%2C10L7%2C5ZM7%2C2L5%2C2L5%2C4L7%2C4L7%2C2Z%22%2F%3E%3C%2Fsvg%3E');
-}
-
-/*
- * Status
- */
-[class^='icon-status-'],
-[class*=' icon-status'] {
- display: inline-block;
- vertical-align: top;
- width: 16px;
- height: 16px;
- background-size: 14px 14px;
- background: no-repeat center center;
-}
-
-.icon-status-open {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M7%202.75c-.77%200-1.482.19-2.133.57-.65.38-1.166.896-1.547%201.547-.38.65-.57%201.362-.57%202.133%200%20.77.19%201.482.57%202.133.38.65.896%201.167%201.547%201.547.65.38%201.362.57%202.133.57.77%200%201.482-.19%202.133-.57.65-.38%201.167-.896%201.547-1.547.38-.65.57-1.362.57-2.133%200-.77-.19-1.482-.57-2.133-.38-.65-.896-1.166-1.547-1.547-.65-.38-1.362-.57-2.133-.57zM13%207c0%201.09-.268%202.092-.805%203.012-.536.92-1.264%201.647-2.183%202.183C9.092%2012.732%208.09%2013%207%2013c-1.09%200-2.092-.268-3.012-.805-.92-.536-1.647-1.264-2.183-2.183C1.268%209.092%201%208.09%201%207c0-1.09.268-2.092.805-3.012.536-.92%201.264-1.647%202.183-2.183C4.908%201.268%205.91%201%207%201c1.09%200%202.092.268%203.012.805.92.536%201.647%201.264%202.183%202.183C12.732%204.908%2013%205.91%2013%207z%22%20fill%3D%22%234B9FD5%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-status-confirmed {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M9%207c0%20.552-.195%201.023-.586%201.414C8.024%208.804%207.552%209%207%209c-.552%200-1.023-.195-1.414-.586C5.196%208.024%205%207.552%205%207c0-.552.195-1.023.586-1.414C5.976%205.196%206.448%205%207%205c.552%200%201.023.195%201.414.586.39.39.586.862.586%201.414zM7%202.75c-.77%200-1.482.19-2.133.57-.65.38-1.166.896-1.547%201.547-.38.65-.57%201.362-.57%202.133%200%20.77.19%201.482.57%202.133.38.65.896%201.167%201.547%201.547.65.38%201.362.57%202.133.57.77%200%201.482-.19%202.133-.57.65-.38%201.167-.896%201.547-1.547.38-.65.57-1.362.57-2.133%200-.77-.19-1.482-.57-2.133-.38-.65-.896-1.166-1.547-1.547-.65-.38-1.362-.57-2.133-.57zM13%207c0%201.09-.268%202.092-.805%203.012-.536.92-1.264%201.647-2.183%202.183C9.092%2012.732%208.09%2013%207%2013c-1.09%200-2.092-.268-3.012-.805-.92-.536-1.647-1.264-2.183-2.183C1.268%209.092%201%208.09%201%207c0-1.09.268-2.092.805-3.012.536-.92%201.264-1.647%202.183-2.183C4.908%201.268%205.91%201%207%201c1.09%200%202.092.268%203.012.805.92.536%201.647%201.264%202.183%202.183C12.732%204.908%2013%205.91%2013%207z%22%20fill%3D%22%234B9FD5%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-status-reopened {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M7%2011.25v-8.5c-.77%200-1.482.19-2.133.57-.65.38-1.166.896-1.547%201.547-.38.65-.57%201.362-.57%202.133%200%20.77.19%201.482.57%202.133.38.65.896%201.167%201.547%201.547.65.38%201.362.57%202.133.57zM13%207c0%201.09-.268%202.092-.805%203.012-.536.92-1.264%201.647-2.183%202.183C9.092%2012.732%208.09%2013%207%2013c-1.09%200-2.092-.268-3.012-.805-.92-.536-1.647-1.264-2.183-2.183C1.268%209.092%201%208.09%201%207c0-1.09.268-2.092.805-3.012.536-.92%201.264-1.647%202.183-2.183C4.908%201.268%205.91%201%207%201c1.09%200%202.092.268%203.012.805.92.536%201.647%201.264%202.183%202.183C12.732%204.908%2013%205.91%2013%207z%22%20fill%3D%22%234B9FD5%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-status-resolved {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M11.03%205.734c0-.145-.046-.265-.14-.36l-.71-.702c-.1-.1-.216-.15-.352-.15-.135%200-.252.05-.35.15l-3.19%203.18-1.765-1.766c-.1-.1-.216-.15-.35-.15-.137%200-.254.05-.353.15l-.71.703c-.094.093-.14.213-.14.358%200%20.14.046.258.14.352l2.828%202.828c.098.1.216.15.35.15.142%200%20.26-.05.36-.15l4.243-4.242c.094-.094.14-.21.14-.352zM13%207c0%201.09-.268%202.092-.805%203.012-.536.92-1.264%201.647-2.183%202.183C9.092%2012.732%208.09%2013%207%2013c-1.09%200-2.092-.268-3.012-.805-.92-.536-1.647-1.264-2.183-2.183C1.268%209.092%201%208.09%201%207c0-1.09.268-2.092.805-3.012.536-.92%201.264-1.647%202.183-2.183C4.908%201.268%205.91%201%207%201c1.09%200%202.092.268%203.012.805.92.536%201.647%201.264%202.183%202.183C12.732%204.908%2013%205.91%2013%207z%22%20fill%3D%22%23444%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-status-closed {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M13%207c0%201.09-.268%202.092-.805%203.012-.536.92-1.264%201.647-2.183%202.183C9.092%2012.732%208.09%2013%207%2013c-1.09%200-2.092-.268-3.012-.805-.92-.536-1.647-1.264-2.183-2.183C1.268%209.092%201%208.09%201%207c0-1.09.268-2.092.805-3.012.536-.92%201.264-1.647%202.183-2.183C4.908%201.268%205.91%201%207%201c1.09%200%202.092.268%203.012.805.92.536%201.647%201.264%202.183%202.183C12.732%204.908%2013%205.91%2013%207z%22%20fill%3D%22%23444%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-/*
- * Test Status
- */
-.icon-test-status-ok:before {
- content: '\f013';
- color: var(--green);
- font-size: var(--bigFontSize);
-}
-
-.icon-test-status-failure:before {
- content: '\f000';
- color: var(--orange);
- font-size: var(--bigFontSize);
-}
-
-.icon-test-status-error:before {
- content: '\f057';
- color: var(--red);
- font-size: var(--bigFontSize);
-}
-
-.icon-test-status-skipped:before {
- content: '\f056';
- color: var(--gray71);
- font-size: var(--bigFontSize);
-}
-
-/*
- * Alert
- */
-.icon-alert-ok {
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-ok:before {
- content: '\f013';
- color: var(--green);
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-warn {
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-warn:before {
- content: '\f000';
- color: var(--orange);
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-error {
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-error:before {
- content: '\f057';
- color: var(--red);
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-none {
- font-size: var(--bigFontSize);
-}
-
-.icon-alert-none:before {
- content: '\f056';
- color: var(--gray71);
- font-size: var(--bigFontSize);
-}
-
-/*
- * Qualifier
- */
-[class^='icon-qualifier-'],
-[class*=' icon-qualifier-'] {
- display: inline-block;
- vertical-align: top;
- width: 16px;
- height: 16px;
- background-size: 16px 16px;
- background: no-repeat center center;
-}
-
-.icon-qualifier-dir,
-.icon-qualifier-pac {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M14%2012.286V5.703c0-.198-.058-.36-.195-.5S13.512%205%2013.315%205H6.704c-.196%200-.36-.075-.5-.214-.136-.14-.203-.312-.203-.51v-.57c0-.2-.07-.363-.207-.502C5.655%203.064%205.487%203%205.29%203H2.707c-.196%200-.363.065-.5.204-.137.14-.206.302-.206.5v8.582c0%20.2.07.367.206.506.137.14.304.208.5.208h10.61c.196%200%20.352-.07.49-.208.137-.14.194-.307.194-.506zm1-6.598v6.65c0%20.458-.152.83-.475%201.16-.324.326-.7.502-1.15.502H2.647c-.452%200-.84-.175-1.162-.503-.324-.328-.486-.7-.486-1.158V3.654c0-.457.162-.842.486-1.17C1.81%202.158%202.196%202%202.648%202h2.7c.45%200%20.84.157%201.164.485.324.328.488.714.488%201.17V4h6.373c.452%200%20.83.174%201.152.5.323.33.475.73.475%201.187z%22%20fill%3D%22%23F90%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-trk,
-.icon-qualifier-dev_prj {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M14.985%2013.988L1%2014.005%201.02%205h13.966v8.988zM1.998%205.995l.006%207.02L14.022%2013%2014%206.004l-12.002-.01zM3%204.5V4h9.996l.004.5h1l-.005-1.497-11.98.003L2%204.5zm1-2v-.504h8.002L12%202.5h1l-.004-1.495H3.003L3%202.5z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-brc {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M16%2016H6v-6h10v6zm-9-1h8v-4H7v4zM7%209h8v1H7zM8%208h6v1H8z%22%20fill%3D%22%232D88C0%22%2F%3E%3Cpath%20d%3D%22M5%2012H1V5h12v2h1V4H0v9h5zM3%201h8v.5h1V0H2v1.5h1zM2%203h10v.5h1V2H1v1.5h1z%22%20fill%3D%22%232D88C0%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-cla,
-.icon-qualifier-uts {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M3%2014h10V6H9V2H3zm7.012-9h3.008c-.012-.674-.78-1.258-1.27-1.752-.488-.495-.973-1.243-1.75-1.24v2.96zM14%204.995V15H2V1l7.997.02c1.013-.03%201.57.893%202.239%201.555.667.663%201.75%201.47%201.763%202.42z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20d%3D%22M7%208l-3%202.5L7%2013zM8%2013l3-2.5L8%208z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-fil {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2215%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M3%2014h10V6H9V2H3zm7.012-9h3.008c-.012-.674-.78-1.258-1.27-1.752-.488-.495-.973-1.243-1.75-1.24v2.96zM14%204.995V15H2V1l7.997.02c1.013-.03%201.57.893%202.239%201.555.667.663%201.75%201.47%201.763%202.42z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3Cpath%20fill%3D%22%232D88C0%22%20d%3D%22M4%2011h8v1H4zM4%209h8v1H4z%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-lib {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M1%2013h4V3H1zm3-1H2v-2h2v2zM2%204h2v4H2zM6%2013h4V3H6zm3-1H7v-2h2v2zM7%204h2v4H7zM11%2013h4V3h-4zm3-1h-2v-2h2v2zm-2-8h2v4h-2z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-vw {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M1.016%2014.97V1.015H14.97V14.97H1.015zm1-1H13.97V2.015H2.015V13.97z%22%20fill%3D%22%232D88C0%22%2F%3E%3Cpath%20d%3D%22M3.006%207V3.006H7V7H3.006zm1-1H6V4.006H4.006V6zM9%207V3.015h3.985V7H9zm1-1h1.985V4.015H10V6zM3.004%2012.996V9H7v3.996H3.004zm1-1H6V10H4.004v1.996zM9%2012.997V9h3.997v3.997H9zm1-1h1.997V10H10v1.997z%22%20fill%3D%22%232D88C0%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-svw {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2216%22%20height%3D%2216%22%3E%3Cpath%20d%3D%22M13%207.2V1H1v12h7v1H0V0h14v7.2%22%20fill%3D%22%232D88C0%22%2F%3E%3Cpath%20d%3D%22M2%206V2h4v4H2zm1-1h2V3H3v2zm5%201V2h4v4H8zm1-1h2V3H9v2zm-7%207V8h4v4H2zm1-1h2V9H3v2zM16%2016H7V7h9v9zm-8-1h7V8H8v7z%22%20fill%3D%22%232D88C0%22%2F%3E%3Cpath%20d%3D%22M9%209h2v2H9zM12%209h2v2h-2zM9%2012h2v2H9zM12%2012h2v2h-2z%22%20fill%3D%22%232D88C0%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-dev {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M7.974%208.02c-.938%200-1.82-.36-2.482-1.017-.663-.655-1.028-1.527-1.028-2.455%200-.927.365-1.8%201.028-2.455.663-.656%201.544-1.017%202.482-1.017.937%200%201.82.36%202.482%201.017.662.656%201.027%201.528%201.027%202.455%200%20.928-.365%201.8-1.027%202.455C9.793%207.66%208.91%208.02%207.974%208.02zm0-5.778c-1.286%200-2.332%201.034-2.332%202.306s1.046%202.307%202.332%202.307c1.285%200%202.332-1.035%202.332-2.307S9.258%202.242%207.974%202.242zm3.534%206.418c.127.016.243.045.348.086.17.066.302.146.406.246.132.124.253.282.36.47.126.218.226.442.3.668.08.253.15.535.206.838.056.313.095.604.113.867.02.28.03.57.03.862%200%20.532-.174.758-.306.882-.142.132-.397.31-.973.31H3.948c-.233%200-.437-.03-.606-.09-.14-.05-.26-.123-.366-.222-.13-.123-.306-.35-.306-.88%200-.294.01-.584.03-.863.018-.263.056-.554.112-.867.055-.303.125-.585.207-.838.073-.226.173-.45.298-.667.108-.19.23-.347.36-.47.106-.1.238-.18.407-.247.105-.04.22-.07.348-.086.202.13.432.277.683.435.342.217.756.4%201.265.564.523.166%201.06.25%201.59.25.534%200%201.07-.084%201.592-.25.51-.164.923-.348%201.266-.565.25-.158.48-.304.682-.435zm-.244-1.18c-.055%200-.184.066-.387.196-.202.13-.43.276-.685.437-.255.16-.586.307-.994.437-.408.13-.818.196-1.23.196-.41%200-.82-.065-1.228-.196-.408-.13-.74-.276-.993-.437-.255-.16-.484-.306-.686-.437-.202-.13-.33-.196-.386-.196-.374%200-.716.06-1.026.183-.31.12-.572.283-.787.487-.213.203-.404.45-.57.737-.165.288-.297.584-.395.888-.098.303-.18.633-.244.988-.063.355-.106.685-.128.992-.02.306-.032.62-.032.942%200%20.73.224%201.304.672%201.726.448.42%201.043.632%201.785.632h8.044c.743%200%201.34-.21%201.787-.633.447-.42.67-.996.67-1.725%200-.32-.01-.635-.03-.942-.022-.307-.065-.637-.13-.992-.064-.355-.146-.685-.244-.988-.098-.304-.23-.6-.395-.888-.166-.288-.356-.534-.57-.737-.216-.204-.478-.366-.788-.487-.31-.122-.652-.183-1.026-.183z%22%20fill%3D%22%232D88C0%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
-.icon-qualifier-app {
- background-image: url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%20width%3D%2216%22%20height%3D%2216%22%3E%0A%20%20%3Cstyle%3E%0A%20%20%20%20.st0%7Bfill%3Anone%3Bstroke%3A%234A9ED5%3Bstroke-miterlimit%3A10%3B%7D%0A%20%20%3C%2Fstyle%3E%0A%20%20%3Ccircle%20cx%3D%223%22%20cy%3D%223%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%228%22%20cy%3D%223%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%2213%22%20cy%3D%223%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%223%22%20cy%3D%228%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%228%22%20cy%3D%228%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%2213%22%20cy%3D%228%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%223%22%20cy%3D%2213%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%228%22%20cy%3D%2213%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%20%20%3Ccircle%20cx%3D%2213%22%20cy%3D%2213%22%20r%3D%221.5%22%20class%3D%22st0%22%2F%3E%0A%3C%2Fsvg%3E%0A');
-}
-
-/*
* Checkbox
*/
.icon-checkbox {
@@ -352,55 +135,6 @@ a:hover > .icon-radio {
/*
* Common
*/
-.icon-arrow-down:before {
- content: '\f0d7';
- position: relative;
- top: -2px;
-}
-
-.icon-arrow-up:before {
- content: '\f0d8';
- position: relative;
- top: -2px;
-}
-
-.icon-dropdown:before {
- content: '\f0d7';
- position: relative;
- top: -1px;
-}
-
-.icon-sort-desc:before {
- content: '\f0d7';
- position: relative;
- top: -1px;
-}
-
-.icon-tags:before {
- content: '\f02c';
- font-size: var(--mediumFontSize);
-}
-
-.icon-favorite,
-.icon-not-favorite {
- display: inline-block;
- vertical-align: top;
- width: 16px;
- height: 16px;
- background-size: 16px 16px;
- background: no-repeat center center;
- transition: all 0.2s ease !important;
-}
-
-.icon-favorite {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M15.428%205.777c0%20.13-.078.274-.233.428l-3.24%203.16.767%204.465c.006.042.01.102.01.18%200%20.124-.032.23-.095.316-.062.086-.153.13-.272.13-.113%200-.232-.036-.357-.108l-4.01-2.107L3.99%2014.35c-.13.072-.25.107-.357.107-.125%200-.22-.043-.28-.13-.064-.085-.095-.19-.095-.316%200-.037.006-.096.018-.18l.768-4.464-3.25-3.16C.644%206.045.57%205.9.57%205.775c0-.22.167-.356.5-.41l4.482-.652L7.562.652c.112-.244.258-.366.437-.366.177%200%20.323.122.436.366l2.01%204.062%204.48.652c.335.054.5.19.5.41h.002z%22%20fill%3D%22%23F90%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
- transform: rotate(72deg);
-}
-
-.icon-not-favorite {
- background-image: url('data:image/svg+xml,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20fill-rule%3D%22evenodd%22%20clip-rule%3D%22evenodd%22%20stroke-linejoin%3D%22round%22%20stroke-miterlimit%3D%221.414%22%3E%3Cpath%20d%3D%22M15.428%205.777c0%20.13-.078.274-.233.428l-3.24%203.16.767%204.465c.006.042.01.102.01.18%200%20.124-.032.23-.095.316-.062.086-.153.13-.272.13-.113%200-.232-.036-.357-.108l-4.01-2.107L3.99%2014.35c-.13.072-.25.107-.357.107-.125%200-.22-.043-.28-.13-.064-.085-.095-.19-.095-.316%200-.037.006-.096.018-.18l.768-4.464-3.25-3.16C.644%206.045.57%205.9.57%205.775c0-.22.167-.356.5-.41l4.482-.652L7.562.652c.112-.244.258-.366.437-.366.177%200%20.323.122.436.366l2.01%204.062%204.48.652c.335.054.5.19.5.41h.002z%22%20fill%3D%22%23CDCDCD%22%20fill-rule%3D%22nonzero%22%2F%3E%3C%2Fsvg%3E');
-}
-
.icon-outline {
transition: all 0.2s ease !important;
}
@@ -419,105 +153,3 @@ a:hover > .icon-radio {
stroke: currentColor;
fill-opacity: 1;
}
-
-@keyframes spin-star {
- 0% {
- transform: rotate(0deg);
- }
-
- 100% {
- transform: rotate(144deg);
- }
-}
-
-.icon-close:before {
- content: '\f00d';
- font-size: var(--bigFontSize);
-}
-
-.icon-inheritance:before {
- content: '\f126';
- font-size: var(--mediumFontSize);
-}
-
-.icon-inheritance-overridden:before {
- color: var(--red) !important;
-}
-
-.icon-scm,
-.icon-scm_dev,
-.icon-ci,
-.icon-issue,
-.icon-homepage {
- display: inline-block;
- width: 14px;
- margin-top: -1px;
- text-align: center;
-}
-
-.icon-scm:before {
- content: '\f017';
- font-size: var(--mediumFontSize);
-}
-
-.icon-scm_dev:before {
- content: '\f015';
- font-size: var(--mediumFontSize);
-}
-
-.icon-ci:before {
- content: '\f021';
- font-size: var(--mediumFontSize);
-}
-
-.icon-issue:before {
- content: '\f188';
- font-size: var(--mediumFontSize);
-}
-
-.icon-homepage:before {
- content: '\f016';
- font-size: var(--mediumFontSize);
-}
-
-.icon-filter:before {
- content: '\f03a';
- font-size: var(--bigFontSize);
-}
-
-.icon-chevron-left:before {
- content: '\f104';
- font-size: var(--mediumFontSize);
-}
-
-.icon-chevron-right:before {
- content: '\f105';
- font-size: var(--mediumFontSize);
-}
-
-.icon-ellipsis-h:before {
- position: relative;
- top: 1px;
- content: '\f141';
- font-size: var(--mediumFontSize);
-}
-
-.icon-filter:before {
- content: '\f0b0';
- font-size: var(--bigFontSize);
-}
-
-.icon-lock:before {
- content: '\f023';
- font-size: var(--bigFontSize);
-}
-
-.icon-workspace-doc {
- display: inline-block;
- vertical-align: top;
- width: 9px;
- height: 16px;
- padding-right: 3px;
- background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/PjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgOSAxNiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEuNDE0MjE7Ij4gICAgPHBhdGggZD0iTTYuNTcxNDMsNS4xNDI4NkM2LjU3MTQzLDUuMjIwMjQgNi41NDMxNSw1LjI4NzIgNi40ODY2MSw1LjM0Mzc1QzYuNDMwMDYsNS40MDAzIDYuMzYzMSw1LjQyODU3IDYuMjg1NzEsNS40Mjg1N0M2LjIwODMzLDUuNDI4NTcgNi4xNDEzNyw1LjQwMDMgNi4wODQ4Miw1LjM0Mzc1QzYuMDI4MjcsNS4yODcyIDYsNS4yMjAyNCA2LDUuMTQyODZDNiw0Ljg2OTA1IDUuODM5MjksNC42NTc3NCA1LjUxNzg2LDQuNTA4OTNDNS4xOTY0Myw0LjM2MDEyIDQuODgwOTUsNC4yODU3MSA0LjU3MTQzLDQuMjg1NzFDNC40OTQwNSw0LjI4NTcxIDQuNDI3MDgsNC4yNTc0NCA0LjM3MDU0LDQuMjAwODlDNC4zMTM5OSw0LjE0NDM1IDQuMjg1NzEsNC4wNzczOCA0LjI4NTcxLDRDNC4yODU3MSwzLjkyMjYyIDQuMzEzOTksMy44NTU2NSA0LjM3MDU0LDMuNzk5MTFDNC40MjcwOCwzLjc0MjU2IDQuNDk0MDUsMy43MTQyOSA0LjU3MTQzLDMuNzE0MjlDNC44NjkwNSwzLjcxNDI5IDUuMTY1MTgsMy43NjE5IDUuNDU5ODIsMy44NTcxNEM1Ljc1NDQ2LDMuOTUyMzggNi4wMTMzOSw0LjExMzEgNi4yMzY2MSw0LjMzOTI5QzYuNDU5ODIsNC41NjU0OCA2LjU3MTQzLDQuODMzMzMgNi41NzE0Myw1LjE0Mjg2Wk04LDUuMTQyODZDOCw0LjcxNDI5IDcuODk3MzIsNC4zMTU0OCA3LjY5MTk2LDMuOTQ2NDNDNy40ODY2MSwzLjU3NzM4IDcuMjE4NzUsMy4yNzUzIDYuODg4MzksMy4wNDAxOEM2LjU1ODA0LDIuODA1MDYgNi4xOTE5NiwyLjYyMDU0IDUuNzkwMTgsMi40ODY2MUM1LjM4ODM5LDIuMzUyNjggNC45ODIxNCwyLjI4NTcxIDQuNTcxNDMsMi4yODU3MUM0LjE2MDcxLDIuMjg1NzEgMy43NTQ0NiwyLjM1MjY4IDMuMzUyNjgsMi40ODY2MUMyLjk1MDg5LDIuNjIwNTQgMi41ODQ4MiwyLjgwNTA2IDIuMjU0NDYsMy4wNDAxOEMxLjkyNDExLDMuMjc1MyAxLjY1NjI1LDMuNTc3MzggMS40NTA4OSwzLjk0NjQzQzEuMjQ1NTQsNC4zMTU0OCAxLjE0Mjg2LDQuNzE0MjkgMS4xNDI4Niw1LjE0Mjg2QzEuMTQyODYsNS43NDQwNSAxLjM0NTI0LDYuMjc5NzYgMS43NSw2Ljc1QzEuODA5NTIsNi44MTU0OCAxLjkwMDMsNi45MTM2OSAyLjAyMjMyLDcuMDQ0NjRDMi4xNDQzNSw3LjE3NTYgMi4yMzUxMiw3LjI3MzgxIDIuMjk0NjQsNy4zMzkyOUMzLjA1NjU1LDguMjUgMy40NzYxOSw5LjEzNjkgMy41NTM1NywxMEw1LjU4OTI5LDEwQzUuNjY2NjcsOS4xMzY5IDYuMDg2MzEsOC4yNSA2Ljg0ODIxLDcuMzM5MjlDNi45MDc3NCw3LjI3MzgxIDYuOTk4NTEsNy4xNzU2IDcuMTIwNTQsNy4wNDQ2NEM3LjI0MjU2LDYuOTEzNjkgNy4zMzMzMyw2LjgxNTQ4IDcuMzkyODYsNi43NUM3Ljc5NzYyLDYuMjc5NzYgOCw1Ljc0NDA1IDgsNS4xNDI4NlpNOS4xNDI4Niw1LjE0Mjg2QzkuMTQyODYsNi4wNjU0OCA4LjgzNjMxLDYuODYzMSA4LjIyMzIxLDcuNTM1NzFDNy45NTUzNiw3LjgyNzM4IDcuNzMzNjMsOC4wODYzMSA3LjU1ODA0LDguMzEyNUM3LjM4MjQ0LDguNTM4NjkgNy4yMDUzNiw4LjgyMjkyIDcuMDI2NzksOS4xNjUxOEM2Ljg0ODIxLDkuNTA3NDQgNi43NDcwMiw5LjgyNzM4IDYuNzIzMjEsMTAuMTI1QzcuMDAyOTgsMTAuMjkxNyA3LjE0Mjg2LDEwLjUzNTcgNy4xNDI4NiwxMC44NTcxQzcuMTQyODYsMTEuMDc3NCA3LjA2ODQ1LDExLjI2NzkgNi45MTk2NCwxMS40Mjg2QzcuMDY4NDUsMTEuNTg5MyA3LjE0Mjg2LDExLjc3OTggNy4xNDI4NiwxMkM3LjE0Mjg2LDEyLjMwOTUgNy4wMDg5MywxMi41NTA2IDYuNzQxMDcsMTIuNzIzMkM2LjgxODQ1LDEyLjg2MDEgNi44NTcxNCwxMyA2Ljg1NzE0LDEzLjE0MjlDNi44NTcxNCwxMy40MTY3IDYuNzYzMzksMTMuNjI4IDYuNTc1ODksMTMuNzc2OEM2LjM4ODM5LDEzLjkyNTYgNi4xNTc3NCwxNCA1Ljg4MzkzLDE0QzUuNzY0ODgsMTQuMjYxOSA1LjU4NjMxLDE0LjQ3MDIgNS4zNDgyMSwxNC42MjVDNS4xMTAxMiwxNC43Nzk4IDQuODUxMTksMTQuODU3MSA0LjU3MTQzLDE0Ljg1NzFDNC4yOTE2NywxNC44NTcxIDQuMDMyNzQsMTQuNzc5OCAzLjc5NDY0LDE0LjYyNUMzLjU1NjU1LDE0LjQ3MDIgMy4zNzc5OCwxNC4yNjE5IDMuMjU4OTMsMTRDMi45ODUxMiwxNCAyLjc1NDQ2LDEzLjkyNTYgMi41NjY5NiwxMy43NzY4QzIuMzc5NDYsMTMuNjI4IDIuMjg1NzEsMTMuNDE2NyAyLjI4NTcxLDEzLjE0MjlDMi4yODU3MSwxMyAyLjMyNDQsMTIuODYwMSAyLjQwMTc5LDEyLjcyMzJDMi4xMzM5MywxMi41NTA2IDIsMTIuMzA5NSAyLDEyQzIsMTEuNzc5OCAyLjA3NDQsMTEuNTg5MyAyLjIyMzIxLDExLjQyODZDMi4wNzQ0LDExLjI2NzkgMiwxMS4wNzc0IDIsMTAuODU3MUMyLDEwLjUzNTcgMi4xMzk4OCwxMC4yOTE3IDIuNDE5NjQsMTAuMTI1QzIuMzk1ODMsOS44MjczOCAyLjI5NDY0LDkuNTA3NDQgMi4xMTYwNyw5LjE2NTE4QzEuOTM3NSw4LjgyMjkyIDEuNzYwNDIsOC41Mzg2OSAxLjU4NDgyLDguMzEyNUMxLjQwOTIzLDguMDg2MzEgMS4xODc1LDcuODI3MzggMC45MTk2NDMsNy41MzU3MUMwLjMwNjU0OCw2Ljg2MzEgMCw2LjA2NTQ4IDAsNS4xNDI4NkMwLDQuNTUzNTcgMC4xMzI0NCw0LjAwNDQ2IDAuMzk3MzIxLDMuNDk1NTRDMC42NjIyMDIsMi45ODY2MSAxLjAxMDQyLDIuNTYzOTkgMS40NDE5NiwyLjIyNzY4QzEuODczNTEsMS44OTEzNyAyLjM2MTYxLDEuNjI2NDkgMi45MDYyNSwxLjQzMzA0QzMuNDUwODksMS4yMzk1OCA0LjAwNTk1LDEuMTQyODYgNC41NzE0MywxLjE0Mjg2QzUuMTM2OSwxLjE0Mjg2IDUuNjkxOTYsMS4yMzk1OCA2LjIzNjYxLDEuNDMzMDRDNi43ODEyNSwxLjYyNjQ5IDcuMjY5MzUsMS44OTEzNyA3LjcwMDg5LDIuMjI3NjhDOC4xMzI0NCwyLjU2Mzk5IDguNDgwNjUsMi45ODY2MSA4Ljc0NTU0LDMuNDk1NTRDOS4wMTA0Miw0LjAwNDQ2IDkuMTQyODYsNC41NTM1NyA5LjE0Mjg2LDUuMTQyODZaIiBzdHlsZT0iZmlsbDpyZ2IoNDUsMTM1LDE5Mik7ZmlsbC1ydWxlOm5vbnplcm87Ii8+PC9zdmc+);
- background-repeat: no-repeat;
-}
diff --git a/server/sonar-web/src/main/js/app/utils/exposeLibraries.ts b/server/sonar-web/src/main/js/app/utils/exposeLibraries.ts
index df9cd6a4b7f..df357c15153 100644
--- a/server/sonar-web/src/main/js/app/utils/exposeLibraries.ts
+++ b/server/sonar-web/src/main/js/app/utils/exposeLibraries.ts
@@ -23,7 +23,6 @@ import throwGlobalError from './throwGlobalError';
import addGlobalSuccessMessage from './addGlobalSuccessMessage';
import * as measures from '../../helpers/measures';
import * as request from '../../helpers/request';
-import * as icons from '../../components/icons-components/icons';
import DateFromNow from '../../components/intl/DateFromNow';
import DateFormatter from '../../components/intl/DateFormatter';
import DateTimeFormatter from '../../components/intl/DateTimeFormatter';
@@ -43,22 +42,31 @@ import Level from '../../components/ui/Level';
import { EditButton, Button, SubmitButton, ResetButtonLink } from '../../components/ui/buttons';
import DeferredSpinner from '../../components/common/DeferredSpinner';
import ReloadButton from '../../components/controls/ReloadButton';
+import QualifierIcon from '../../components/icons-components/QualifierIcon';
+import AlertErrorIcon from '../../components/icons-components/AlertErrorIcon';
+import AlertSuccessIcon from '../../components/icons-components/AlertSuccessIcon';
+import AlertWarnIcon from '../../components/icons-components/AlertWarnIcon';
+import LockIcon from '../../components/icons-components/LockIcon';
+import DropdownIcon from '../../components/icons-components/DropdownIcon';
const exposeLibraries = () => {
const global = window as any;
global.ReactRedux = ReactRedux;
global.ReactRouter = ReactRouter;
- global.SonarIcons = icons;
global.SonarMeasures = measures;
global.SonarRequest = { ...request, throwGlobalError, addGlobalSuccessMessage };
global.SonarComponents = {
+ AlertErrorIcon,
+ AlertSuccessIcon,
+ AlertWarnIcon,
Button,
CoverageRating,
DateFormatter,
DateFromNow,
DateTimeFormatter,
DeferredSpinner,
+ DropdownIcon,
DuplicationsRating,
EditButton,
FavoriteContainer,
@@ -67,7 +75,9 @@ const exposeLibraries = () => {
Level,
LicenseEditionSet,
ListFooter,
+ LockIcon,
Modal,
+ QualifierIcon,
ReloadButton,
ResetButtonLink,
SearchBox,
diff --git a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js
index a4848285d9d..b4624dc821e 100644
--- a/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js
+++ b/server/sonar-web/src/main/js/apps/about/components/AboutStandards.js
@@ -20,6 +20,7 @@
import React from 'react';
import { Link } from 'react-router';
import ReadMore from './ReadMore';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
import { translate } from '../../../helpers/l10n';
import { getRulesUrl } from '../../../helpers/urls';
@@ -52,32 +53,32 @@ export default function AboutStandards(props /*: Props */) {
<div className="spacer-top">
<ul className="list-inline">
<li>
- <Link to={getRulesUrl({ tags: 'misra' }, organization)} className="link-with-icon">
- <i className="icon-tags" />
+ <Link className="link-with-icon" to={getRulesUrl({ tags: 'misra' }, organization)}>
+ <TagsIcon />
<span className="little-spacer-left">MISRA</span>
</Link>
</li>
<li>
- <Link to={getRulesUrl({ tags: 'cert' }, organization)} className="link-with-icon">
- <i className="icon-tags" />
+ <Link className="link-with-icon" to={getRulesUrl({ tags: 'cert' }, organization)}>
+ <TagsIcon />
<span className="little-spacer-left">CERT</span>
</Link>
</li>
<li>
- <Link to={getRulesUrl({ tags: 'cwe' }, organization)} className="link-with-icon">
- <i className="icon-tags" />
+ <Link className="link-with-icon" to={getRulesUrl({ tags: 'cwe' }, organization)}>
+ <TagsIcon />
<span className="little-spacer-left">CWE</span>
</Link>
</li>
<li>
- <Link to={getRulesUrl({ tags: owaspTags }, organization)} className="link-with-icon">
- <i className="icon-tags" />
+ <Link className="link-with-icon" to={getRulesUrl({ tags: owaspTags }, organization)}>
+ <TagsIcon />
<span className="little-spacer-left">OWASP Top 10</span>
</Link>
</li>
<li>
- <Link to={getRulesUrl({ tags: sans25Tags }, organization)} className="link-with-icon">
- <i className="icon-tags" />
+ <Link className="link-with-icon" to={getRulesUrl({ tags: sans25Tags }, organization)}>
+ <TagsIcon />
<span className="little-spacer-left">SANS Top 25</span>
</Link>
</li>
diff --git a/server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx b/server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx
index f05af84c229..f9946715f89 100644
--- a/server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx
+++ b/server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx
@@ -20,6 +20,7 @@
import * as React from 'react';
import { sortBy } from 'lodash';
import { Link } from 'react-router';
+import ProjectLinkIcon from '../../../components/icons-components/ProjectLinkIcon';
import DateFromNow from '../../../components/intl/DateFromNow';
import DateTimeFormatter from '../../../components/intl/DateTimeFormatter';
import Level from '../../../components/ui/Level';
@@ -76,7 +77,7 @@ export default function ProjectCard({ project }: Props) {
rel="nofollow"
target="_blank"
title={link.name}>
- <i className={`icon-color-link icon-${link.type}`} />
+ <ProjectLinkIcon type={link.type} />
</a>
</li>
))}
diff --git a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
index 7d57ddf1205..3a4c6d80fe1 100644
--- a/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
+++ b/server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
@@ -21,7 +21,7 @@ import * as React from 'react';
import { Link } from 'react-router';
import TaskType from './TaskType';
import { Task } from '../types';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import Organization from '../../../components/shared/Organization';
import {
getProjectUrl,
diff --git a/server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx b/server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx
index 0bd1290d662..57473532b8a 100644
--- a/server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx
+++ b/server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx
@@ -23,7 +23,7 @@ import Truncated from './Truncated';
import { Component } from '../types';
import * as theme from '../../../app/theme';
import { BranchLike } from '../../../app/types';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { getBranchLikeQuery } from '../../../helpers/branches';
function getTooltip(component: Component) {
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx
index 8b3978ea92b..f1b65374fcc 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx
@@ -104,12 +104,8 @@ export default class RuleDetailsProfiles extends React.PureComponent<Props, Stat
{(activation.inherit === RuleInheritance.Overridden ||
activation.inherit === RuleInheritance.Inherited) && (
<>
- <RuleInheritanceIcon
- inheritance={activation.inherit}
- parentProfileName={profile.parentName}
- profileName={profile.name}
- />
- <Link className="link-base-color spacer-left" to={profilePath}>
+ <RuleInheritanceIcon className="text-middle" inheritance={activation.inherit} />
+ <Link className="link-base-color little-spacer-left text-middle" to={profilePath}>
{profile.parentName}
</Link>
</>
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx
index 264d79f7cc2..6ac38d6a51e 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx
@@ -18,27 +18,31 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import * as theme from '../../../app/theme';
import { RuleInheritance } from '../../../app/types';
-import { translateWithParameters } from '../../../helpers/l10n';
interface Props {
+ className?: string;
inheritance: RuleInheritance.Inherited | RuleInheritance.Overridden;
- parentProfileName: string;
- profileName: string;
}
-export default function RuleInheritanceIcon(props: Props) {
+export default function RuleInheritanceIcon({ className, inheritance, ...other }: Props) {
+ const fill = inheritance === RuleInheritance.Overridden ? theme.red : theme.baseFontColor;
+
return (
- <i
- className={classNames('icon-inheritance', {
- 'icon-inheritance-overridden': props.inheritance === RuleInheritance.Overridden
- })}
- title={translateWithParameters(
- 'coding_rules.overrides',
- props.profileName,
- props.parentProfileName
- )}
- />
+ <svg
+ className={className}
+ height={16}
+ version="1.1"
+ viewBox="0 0 16 16"
+ width={16}
+ xmlSpace="preserve"
+ xmlnsXlink="http://www.w3.org/1999/xlink"
+ {...other}>
+ <path
+ d="M6.25 12.5a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0zm0-9a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0zm5 1a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0zm.75 0a1.5 1.5 0 0 1-.75 1.297c-.023 2.82-2.023 3.445-3.352 3.867-1.242.39-1.648.578-1.648 1.336v.203A1.5 1.5 0 1 1 4 12.5a1.5 1.5 0 0 1 .75-1.297V4.797A1.5 1.5 0 1 1 7 3.5a1.5 1.5 0 0 1-.75 1.297V8.68c.398-.196.82-.328 1.203-.446 1.453-.46 2.281-.804 2.297-2.437A1.5 1.5 0 1 1 12 4.5z"
+ style={{ fill, fillRule: 'nonzero' }}
+ />
+ </svg>
);
}
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx
index 9a406f659f7..1983c596e5f 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx
@@ -21,16 +21,18 @@ import * as React from 'react';
import * as classNames from 'classnames';
import { Link } from 'react-router';
import ActivationButton from './ActivationButton';
+import RuleInheritanceIcon from './RuleInheritanceIcon';
import SimilarRulesFilter from './SimilarRulesFilter';
import { Activation, Query } from '../query';
import { Profile, deactivateRule } from '../../../api/quality-profiles';
import { Rule, RuleInheritance } from '../../../app/types';
import ConfirmButton from '../../../components/controls/ConfirmButton';
import Tooltip from '../../../components/controls/Tooltip';
-import SeverityIcon from '../../../components/shared/SeverityIcon';
+import SeverityIcon from '../../../components/icons-components/SeverityIcon';
import { Button } from '../../../components/ui/buttons';
import IssueTypeIcon from '../../../components/ui/IssueTypeIcon';
import { translate, translateWithParameters } from '../../../helpers/l10n';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
interface Props {
activation?: Activation;
@@ -85,7 +87,10 @@ export default class RuleListItem extends React.PureComponent<Props> {
selectedProfile.name,
selectedProfile.parentName
)}>
- <i className="little-spacer-left icon-inheritance icon-inheritance-overridden" />
+ <RuleInheritanceIcon
+ className="little-spacer-left"
+ inheritance={activation.inherit}
+ />
</Tooltip>
)}
{activation.inherit === RuleInheritance.Inherited && (
@@ -95,7 +100,10 @@ export default class RuleListItem extends React.PureComponent<Props> {
selectedProfile.name,
selectedProfile.parentName
)}>
- <i className="little-spacer-left icon-inheritance" />
+ <RuleInheritanceIcon
+ className="little-spacer-left"
+ inheritance={activation.inherit}
+ />
</Tooltip>
)}
</>
@@ -198,9 +206,9 @@ export default class RuleListItem extends React.PureComponent<Props> {
</span>
</Tooltip>
{allTags.length > 0 && (
- <span className="spacer-left">
- <i className="icon-tags little-spacer-right" />
- <span className="note">{allTags.join(', ')}</span>
+ <span className="spacer-left note">
+ <TagsIcon className="little-spacer-right" />
+ {allTags.join(', ')}
</span>
)}
<SimilarRulesFilter onFilterChange={this.props.onFilterChange} rule={rule} />
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx
index f7106afcc46..34c9041d05a 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx
@@ -23,6 +23,9 @@ import { Rule } from '../../../app/types';
import Dropdown from '../../../components/controls/Dropdown';
import { translate } from '../../../helpers/l10n';
import SeverityHelper from '../../../components/shared/SeverityHelper';
+import FilterIcon from '../../../components/icons-components/FilterIcon';
+import DropdownIcon from '../../../components/icons-components/DropdownIcon';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
interface Props {
onFilterChange: (changes: Partial<Query>) => void;
@@ -97,8 +100,8 @@ export default class SimilarRulesFilter extends React.PureComponent<Props> {
{allTags.map(tag => (
<li key={tag}>
<a data-field="tag" data-tag={tag} href="#" onClick={this.handleTagClick}>
- <i className="icon-tags icon-half-transparent little-spacer-right" />
- {tag}
+ <TagsIcon className="icon-half-transparent little-spacer-right text-middle" />
+ <span className="text-middle">{tag}</span>
</a>
</li>
))}
@@ -108,8 +111,8 @@ export default class SimilarRulesFilter extends React.PureComponent<Props> {
</>
}>
<a className="js-rule-filter link-no-underline spacer-left dropdown-toggle" href="#">
- <i className="icon-filter icon-half-transparent" />
- <i className="icon-dropdown little-spacer-left" />
+ <FilterIcon className="icon-half-transparent" />
+ <DropdownIcon className="icon-half-transparent" />
</a>
</Dropdown>
);
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx b/server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx
index deb1a36043a..c403ff97449 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx
@@ -21,7 +21,9 @@ import * as React from 'react';
import { uniq } from 'lodash';
import Facet, { BasicProps } from './Facet';
import { getRuleTags } from '../../../api/rules';
+import * as theme from '../../../app/theme';
import FacetFooter from '../../../components/facet/FacetFooter';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
interface Props extends BasicProps {
organization: string | undefined;
@@ -40,7 +42,7 @@ export default class TagFacet extends React.PureComponent<Props> {
renderName = (tag: string) => (
<>
- <i className="icon-tags icon-gray little-spacer-right" />
+ <TagsIcon className="little-spacer-right" fill={theme.gray60} />
{tag}
</>
);
diff --git a/server/sonar-web/src/main/js/apps/coding-rules/styles.css b/server/sonar-web/src/main/js/apps/coding-rules/styles.css
index b553e505507..b8dac9824ec 100644
--- a/server/sonar-web/src/main/js/apps/coding-rules/styles.css
+++ b/server/sonar-web/src/main/js/apps/coding-rules/styles.css
@@ -192,17 +192,10 @@
}
.coding-rules-detail-quality-profile-inheritance {
- margin-top: 4px;
font-size: var(--smallFontSize);
font-weight: normal;
}
-.coding-rules-detail-quality-profile-inheritance i {
- position: relative;
- top: -1px;
- font-size: var(--mediumFontSize);
-}
-
.coding-rules-detail-quality-profiles-activation {
margin-top: -3px;
margin-left: 10px;
@@ -275,11 +268,6 @@ textarea.coding-rules-markdown-description {
font-size: var(--smallFontSize);
}
-.coding-rule-meta .icon-tags:before {
- color: var(--secondFontColor);
- font-size: var(--smallFontSize);
-}
-
.coding-rule-activation {
width: 40px;
line-height: 19.5px;
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js
index 3d1130b7862..5582f01e151 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js
@@ -93,13 +93,13 @@ it('should render with branch', () => {
it('should not render link to activity page for files', () => {
expect(
shallow(<MeasureHeader {...PROPS} />)
- .find('IconHistory')
+ .find('HistoryIcon')
.exists()
).toBeTruthy();
expect(
shallow(<MeasureHeader {...PROPS} component={{ ...PROPS.component, qualifier: 'FIL' }} />)
- .find('IconHistory')
+ .find('HistoryIcon')
.exists()
).toBeFalsy();
});
diff --git a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap
index c9208efcfee..49f756bc4a6 100644
--- a/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap
+++ b/server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap
@@ -92,7 +92,7 @@ exports[`should render correctly 1`] = `
}
}
>
- <IconHistory />
+ <HistoryIcon />
</Link>
</Tooltip>
</div>
@@ -191,7 +191,7 @@ exports[`should render with branch 1`] = `
}
}
>
- <IconHistory />
+ <HistoryIcon />
</Link>
`;
@@ -238,7 +238,7 @@ exports[`should work with measure without value 1`] = `
}
}
>
- <IconHistory />
+ <HistoryIcon />
</Link>
</Tooltip>
</div>
diff --git a/server/sonar-web/src/main/js/apps/issues/components/App.tsx b/server/sonar-web/src/main/js/apps/issues/components/App.tsx
index 95d0e0dacea..1fdf6a39c56 100644
--- a/server/sonar-web/src/main/js/apps/issues/components/App.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/components/App.tsx
@@ -69,7 +69,7 @@ import { RawQuery } from '../../../helpers/query';
import { scrollToElement } from '../../../helpers/scrolling';
import EmptySearch from '../../../components/common/EmptySearch';
import Checkbox from '../../../components/controls/Checkbox';
-
+import DropdownIcon from '../../../components/icons-components/DropdownIcon';
import '../styles.css';
interface FetchIssuesPromise {
@@ -821,7 +821,7 @@ export default class App extends React.PureComponent<Props, State> {
}>
<Button id="issues-bulk-change">
{translate('bulk_change')}
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</Button>
</Dropdown>
) : (
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx
index bff7ef1c391..32f8fd2bdf5 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx
@@ -24,7 +24,7 @@ import FacetBox from '../../../components/facet/FacetBox';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';
import { collapsePath } from '../../../helpers/path';
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx
index cb998d44698..db57e1698e4 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx
@@ -24,7 +24,7 @@ import FacetBox from '../../../components/facet/FacetBox';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';
import { collapsePath } from '../../../helpers/path';
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx
index 672678258e6..9626862ec69 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx
@@ -24,7 +24,7 @@ import FacetBox from '../../../components/facet/FacetBox';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
index 675fdb92fb0..a326a2f65e2 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
@@ -28,7 +28,7 @@ import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
import FacetFooter from '../../../components/facet/FacetFooter';
import Organization from '../../../components/shared/Organization';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx
index 86e876d11c5..ad563640a4f 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx
@@ -24,6 +24,7 @@ import FacetBox from '../../../components/facet/FacetBox';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
+import StatusHelper from '../../../components/shared/StatusHelper';
import { translate } from '../../../helpers/l10n';
interface Props {
@@ -64,14 +65,6 @@ export default class StatusFacet extends React.PureComponent<Props> {
return stats ? stats[status] : undefined;
}
- renderStatus(status: string) {
- return (
- <span>
- <i className={`icon-status-${status.toLowerCase()}`} /> {translate('issue.status', status)}
- </span>
- );
- }
-
renderItem = (status: string) => {
const active = this.props.statuses.includes(status);
const stat = this.getStat(status);
@@ -83,7 +76,7 @@ export default class StatusFacet extends React.PureComponent<Props> {
halfWidth={true}
key={status}
loading={this.props.loading}
- name={this.renderStatus(status)}
+ name={<StatusHelper resolution={undefined} status={status} />}
onClick={this.handleItemClick}
stat={formatFacetStat(stat, this.props.facetMode)}
value={status}
diff --git a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx
index ba44ec51a29..7a2fbe66e12 100644
--- a/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx
+++ b/server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx
@@ -21,12 +21,14 @@ import * as React from 'react';
import { sortBy, uniq, without } from 'lodash';
import { formatFacetStat, Query } from '../utils';
import { searchIssueTags } from '../../../api/issues';
+import * as theme from '../../../app/theme';
import { Component } from '../../../app/types';
import FacetBox from '../../../components/facet/FacetBox';
import FacetFooter from '../../../components/facet/FacetFooter';
import FacetHeader from '../../../components/facet/FacetHeader';
import FacetItem from '../../../components/facet/FacetItem';
import FacetItemsList from '../../../components/facet/FacetItemsList';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
import { translate } from '../../../helpers/l10n';
interface Props {
@@ -87,7 +89,7 @@ export default class TagFacet extends React.PureComponent<Props> {
renderTag(tag: string) {
return (
<span>
- <i className="icon-tags icon-gray little-spacer-right" />
+ <TagsIcon className="little-spacer-right" fill={theme.gray60} />
{tag}
</span>
);
diff --git a/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx b/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx
index a2ff350334b..a5240093619 100644
--- a/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx
+++ b/server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx
@@ -20,6 +20,7 @@
import * as React from 'react';
import PluginChangeLog from './PluginChangeLog';
import { Release, Update } from '../../../api/plugins';
+import EllipsisIcon from '../../../components/icons-components/EllipsisIcon';
import Dropdown from '../../../components/controls/Dropdown';
import { Button } from '../../../components/ui/buttons';
@@ -33,7 +34,9 @@ export default function PluginChangeLogButton({ release, update }: Props) {
<Dropdown
className="display-inline-block little-spacer-left"
overlay={<PluginChangeLog release={release} update={update} />}>
- <Button className="button-link js-changelog issue-rule icon-ellipsis-h" />
+ <Button className="button-link js-changelog issue-rule">
+ <EllipsisIcon />
+ </Button>
</Dropdown>
);
}
diff --git a/server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx b/server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx
index df497ccd8fc..bc0bca0a822 100644
--- a/server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx
+++ b/server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx
@@ -46,7 +46,9 @@ export default function OrganizationNavigationHeader({ organization, organizatio
))}
</ul>
}>
- <a className="spacer-left link-base-color link-no-underline" href="#">
+ <a
+ className="display-inline-flex-center spacer-left link-base-color link-no-underline"
+ href="#">
{organization.name}
<DropdownIcon className="little-spacer-left" />
</a>
diff --git a/server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap b/server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap
index 626ef846617..82dd13c2a2a 100644
--- a/server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap
@@ -52,7 +52,7 @@ exports[`renders dropdown 1`] = `
}
>
<a
- className="spacer-left link-base-color link-no-underline"
+ className="display-inline-flex-center spacer-left link-base-color link-no-underline"
href="#"
>
Foo
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx b/server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx
index 7a3caf2ab7a..a336ee988bf 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx
+++ b/server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx
@@ -18,10 +18,9 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { isProvided, getLinkName } from '../../project-admin/links/utils';
+import { getLinkName } from '../../project-admin/links/utils';
import { ProjectLink } from '../../../app/types';
-import DetachIcon from '../../../components/icons-components/DetachIcon';
-import BugTrackerIcon from '../../../components/icons-components/BugTrackerIcon';
+import ProjectLinkIcon from '../../../components/icons-components/ProjectLinkIcon';
interface Props {
link: ProjectLink;
@@ -31,16 +30,9 @@ export default function MetaLink({ link }: Props) {
return (
<li>
<a className="link-with-icon" href={link.url} rel="nofollow" target="_blank">
- <MetaLinkIcon link={link} /> {getLinkName(link)}
+ <ProjectLinkIcon className="little-spacer-right" type={link.type} />
+ {getLinkName(link)}
</a>
</li>
);
}
-
-function MetaLinkIcon({ link }: Props) {
- if (link.type === 'issue') {
- return <BugTrackerIcon />;
- }
-
- return isProvided(link) ? <i className={`icon-color-link icon-${link.type}`} /> : <DetachIcon />;
-}
diff --git a/server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap b/server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap
index 1b37c9bfe64..553a37c7bf1 100644
--- a/server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap
@@ -8,17 +8,10 @@ exports[`should expand and collapse link 1`] = `
rel="nofollow"
target="_blank"
>
- <MetaLinkIcon
- link={
- Object {
- "id": "1",
- "name": "Foo",
- "type": "foo",
- "url": "scm:git:git@github.com",
- }
- }
+ <ProjectLinkIcon
+ className="little-spacer-right"
+ type="foo"
/>
-
Foo
</a>
</li>
@@ -32,17 +25,10 @@ exports[`should expand and collapse link 2`] = `
rel="nofollow"
target="_blank"
>
- <MetaLinkIcon
- link={
- Object {
- "id": "1",
- "name": "Foo",
- "type": "foo",
- "url": "scm:git:git@github.com",
- }
- }
+ <ProjectLinkIcon
+ className="little-spacer-right"
+ type="foo"
/>
-
Foo
</a>
</li>
@@ -56,17 +42,10 @@ exports[`should expand and collapse link 3`] = `
rel="nofollow"
target="_blank"
>
- <MetaLinkIcon
- link={
- Object {
- "id": "1",
- "name": "Foo",
- "type": "foo",
- "url": "scm:git:git@github.com",
- }
- }
+ <ProjectLinkIcon
+ className="little-spacer-right"
+ type="foo"
/>
-
Foo
</a>
</li>
@@ -80,17 +59,10 @@ exports[`should match snapshot 1`] = `
rel="nofollow"
target="_blank"
>
- <MetaLinkIcon
- link={
- Object {
- "id": "1",
- "name": "Foo",
- "type": "foo",
- "url": "http://example.com",
- }
- }
+ <ProjectLinkIcon
+ className="little-spacer-right"
+ type="foo"
/>
-
Foo
</a>
</li>
diff --git a/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx b/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx
index 7ef344a3b23..771e50e4292 100644
--- a/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx
+++ b/server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx
@@ -29,7 +29,7 @@ import {
} from '../../../api/permissions';
import { PermissionTemplate } from '../../../app/types';
import ActionsDropdown, { ActionsDropdownItem } from '../../../components/controls/ActionsDropdown';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate } from '../../../helpers/l10n';
export interface Props {
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx
index de74c2bf650..b89f1a5a309 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { Link } from 'react-router';
-import { HistoryIcon } from '../../../components/icons-components/icons';
+import HistoryIcon from '../../../components/icons-components/HistoryIcon';
import { getMeasureHistoryUrl } from '../../../helpers/urls';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
index 2dc04f3278b..89752754338 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
@@ -22,7 +22,7 @@ import { Link } from 'react-router';
import { max } from 'lodash';
import { SubComponent } from '../types';
import Measure from '../../../components/measure/Measure';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { translate, translateWithParameters } from '../../../helpers/l10n';
import { formatMeasure } from '../../../helpers/measures';
import { getProjectUrl } from '../../../helpers/urls';
diff --git a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap
index 8f25ec024e1..4b12c321e5f 100644
--- a/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap
@@ -16,7 +16,7 @@ exports[`renders 1`] = `
}
}
>
- <IconHistory
+ <HistoryIcon
size={14}
/>
</Link>
diff --git a/server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js b/server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js
index 563b2398dac..8d816beecb0 100644
--- a/server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js
+++ b/server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js
@@ -19,7 +19,7 @@
*/
import React from 'react';
import UpdateKeyForm from './UpdateKeyForm';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
export default function FineGrainedUpdate(props) {
const { component, modules } = props;
diff --git a/server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx b/server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx
index a39c7cfe903..14725ed3c59 100644
--- a/server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx
+++ b/server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx
@@ -21,8 +21,7 @@ import * as React from 'react';
import { isProvided, getLinkName } from './utils';
import { ProjectLink } from '../../../app/types';
import ConfirmButton from '../../../components/controls/ConfirmButton';
-import DetachIcon from '../../../components/icons-components/DetachIcon';
-import BugTrackerIcon from '../../../components/icons-components/BugTrackerIcon';
+import ProjectLinkIcon from '../../../components/icons-components/ProjectLinkIcon';
import { Button } from '../../../components/ui/buttons';
import { translate, translateWithParameters } from '../../../helpers/l10n';
@@ -32,49 +31,30 @@ interface Props {
}
export default class LinkRow extends React.PureComponent<Props> {
- renderIcon = (iconClassName: string) => {
- if (iconClassName === 'icon-issue') {
- return (
- <div className="display-inline-block text-top spacer-right">
- <BugTrackerIcon />
- </div>
- );
- }
-
- return (
- <div className="display-inline-block text-top spacer-right">
- <i className={iconClassName} />
- </div>
- );
- };
-
renderNameForProvided = (link: ProjectLink) => {
return (
- <div>
- {this.renderIcon(`icon-${link.type}`)}
- <div className="display-inline-block text-top">
- <div>
- <span className="js-name">{getLinkName(link)}</span>
- </div>
- <div className="note little-spacer-top">
- <span className="js-type">{`sonar.links.${link.type}`}</span>
- </div>
+ <div className="display-inline-block text-top">
+ <div>
+ <span className="js-name">{getLinkName(link)}</span>
+ </div>
+ <div className="note little-spacer-top">
+ <span className="js-type">{`sonar.links.${link.type}`}</span>
</div>
</div>
);
};
renderName = (link: ProjectLink) => {
- if (isProvided(link)) {
- return this.renderNameForProvided(link);
- }
-
return (
<div>
- <DetachIcon className="little-spacer-right" />
- <div className="display-inline-block text-top">
- <span className="js-name">{link.name}</span>
- </div>
+ <ProjectLinkIcon className="little-spacer-right" type={link.type} />
+ {isProvided(link) ? (
+ this.renderNameForProvided(link)
+ ) : (
+ <div className="display-inline-block text-top">
+ <span className="js-name">{link.name}</span>
+ </div>
+ )}
</div>
);
};
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx
index 72e658c8727..5537721739e 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx
@@ -24,7 +24,7 @@ import { Project } from './utils';
import { Visibility } from '../../app/types';
import PrivateBadge from '../../components/common/PrivateBadge';
import Checkbox from '../../components/controls/Checkbox';
-import QualifierIcon from '../../components/shared/QualifierIcon';
+import QualifierIcon from '../../components/icons-components/QualifierIcon';
import DateTooltipFormatter from '../../components/intl/DateTooltipFormatter';
interface Props {
diff --git a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
index 7c82c9e6d22..6e280bbdc81 100644
--- a/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
+++ b/server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
@@ -25,7 +25,7 @@ import { QUALIFIERS_ORDER, Project } from './utils';
import { Organization } from '../../app/types';
import Checkbox from '../../components/controls/Checkbox';
import { translate } from '../../helpers/l10n';
-import QualifierIcon from '../../components/shared/QualifierIcon';
+import QualifierIcon from '../../components/icons-components/QualifierIcon';
import HelpTooltip from '../../components/controls/HelpTooltip';
import DateInput from '../../components/controls/DateInput';
import Select from '../../components/controls/Select';
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
index 3cb3c7ce586..054f9777d03 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
@@ -89,9 +89,7 @@ export default function Changelog(props: Props) {
<table className="data zebra-hover">
<thead>
<tr>
- <th className="thin nowrap">
- {translate('date')} <i className="icon-sort-desc" />
- </th>
+ <th className="thin nowrap">{translate('date')}</th>
<th className="thin nowrap">{translate('user')}</th>
<th className="thin nowrap">{translate('action')}</th>
<th>{translate('rule')}</th>
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
index 5ce4b88f331..fc475311f68 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
@@ -20,7 +20,7 @@
import * as React from 'react';
import { Link } from 'react-router';
import ComparisonEmpty from './ComparisonEmpty';
-import SeverityIcon from '../../../components/shared/SeverityIcon';
+import SeverityIcon from '../../../components/icons-components/SeverityIcon';
import { translateWithParameters } from '../../../helpers/l10n';
import { getRulesUrl } from '../../../helpers/urls';
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
index 4acaf357bd9..02c86c35088 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
@@ -22,7 +22,6 @@ import * as React from 'react';
import { Link } from 'react-router';
import ComparisonResults from '../ComparisonResults';
import ComparisonEmpty from '../ComparisonEmpty';
-import SeverityIcon from '../../../../components/shared/SeverityIcon';
it('should render ComparisonEmpty', () => {
const output = shallow(
@@ -75,8 +74,8 @@ it('should compare', () => {
expect(leftDiffs.find(Link).length).toBe(1);
expect(leftDiffs.find(Link).prop('to')).toHaveProperty('query', { rule_key: 'rule1' });
expect(leftDiffs.find(Link).prop('children')).toContain('rule1');
- expect(leftDiffs.find(SeverityIcon).length).toBe(1);
- expect(leftDiffs.find(SeverityIcon).prop('severity')).toBe('BLOCKER');
+ expect(leftDiffs.find('SeverityIcon').length).toBe(1);
+ expect(leftDiffs.find('SeverityIcon').prop('severity')).toBe('BLOCKER');
const rightDiffs = output.find('.js-comparison-in-right');
expect(rightDiffs.length).toBe(2);
@@ -93,11 +92,11 @@ it('should compare', () => {
.find(Link)
.prop('children')
).toContain('rule2');
- expect(rightDiffs.at(0).find(SeverityIcon).length).toBe(1);
+ expect(rightDiffs.at(0).find('SeverityIcon').length).toBe(1);
expect(
rightDiffs
.at(0)
- .find(SeverityIcon)
+ .find('SeverityIcon')
.prop('severity')
).toBe('CRITICAL');
@@ -115,7 +114,7 @@ it('should compare', () => {
.at(0)
.prop('children')
).toContain('rule4');
- expect(modifiedDiffs.find(SeverityIcon).length).toBe(2);
+ expect(modifiedDiffs.find('SeverityIcon').length).toBe(2);
expect(modifiedDiffs.text()).toContain('bar');
expect(modifiedDiffs.text()).toContain('qwe');
});
diff --git a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx
index 7ac978ea69e..b73f69f04fc 100644
--- a/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx
+++ b/server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx
@@ -22,7 +22,7 @@ import { Link } from 'react-router';
import ChangeProjectsForm from './ChangeProjectsForm';
import { Profile } from '../types';
import { getProfileProjects } from '../../../api/quality-profiles';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
import { Button } from '../../../components/ui/buttons';
import { translate } from '../../../helpers/l10n';
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js
index e045d181f13..9a91a268bfb 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js
@@ -18,8 +18,10 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import React from 'react';
+import * as theme from '../../../../app/theme';
import { translate } from '../../../../helpers/l10n';
import { defaultInputPropTypes } from '../../propTypes';
+import LockIcon from '../../../../components/icons-components/LockIcon';
import { Button } from '../../../../components/ui/buttons';
export default class InputForPassword extends React.PureComponent {
@@ -71,8 +73,10 @@ export default class InputForPassword extends React.PureComponent {
return (
<div>
- <i className="big-spacer-right icon-lock icon-gray" />
- <Button onClick={this.handleChangeClick}>{translate('change_verb')}</Button>
+ <LockIcon className="text-middle big-spacer-right" fill={theme.gray60} />
+ <Button className="text-middle" onClick={this.handleChangeClick}>
+ {translate('change_verb')}
+ </Button>
</div>
);
}
diff --git a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js
index 935a500e979..f16f9086307 100644
--- a/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js
+++ b/server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js
@@ -27,7 +27,7 @@ it('should render lock icon, but no form', () => {
const input = shallow(
<InputForPassword isDefault={false} name="foo" onChange={onChange} value="bar" />
);
- expect(input.find('.icon-lock').length).toBe(1);
+ expect(input.find('LockIcon').length).toBe(1);
expect(input.find('form').length).toBe(0);
});
diff --git a/server/sonar-web/src/main/js/apps/system/components/PageActions.tsx b/server/sonar-web/src/main/js/apps/system/components/PageActions.tsx
index dd4c07d9b84..5e7c229c427 100644
--- a/server/sonar-web/src/main/js/apps/system/components/PageActions.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/PageActions.tsx
@@ -25,6 +25,7 @@ import Dropdown from '../../../components/controls/Dropdown';
import { EditButton, Button } from '../../../components/ui/buttons';
import { getBaseUrl } from '../../../helpers/urls';
import { translate } from '../../../helpers/l10n';
+import DropdownIcon from '../../../components/icons-components/DropdownIcon';
interface Props {
canDownloadLogs: boolean;
@@ -145,7 +146,7 @@ export default class PageActions extends React.PureComponent<Props, State> {
}>
<Button>
{translate('system.download_logs')}
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</Button>
</Dropdown>
)}
diff --git a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap
index 14a070daf60..5a77e7cd965 100644
--- a/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap
@@ -73,8 +73,8 @@ exports[`should render correctly 1`] = `
>
<Button>
system.download_logs
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</Button>
</Dropdown>
@@ -150,8 +150,8 @@ exports[`should render correctly 2`] = `
>
<Button>
system.download_logs
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</Button>
</Dropdown>
diff --git a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
index 3992c45c04c..ce4b5077ba0 100644
--- a/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
@@ -128,23 +128,33 @@ Array [
value={true}
>
<AlertSuccessIcon>
- <svg
- height={16}
- version="1.1"
- viewBox="0 0 16 16"
- width={16}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- >
- <path
- d="M12.607 6.554q0-0.25-0.161-0.411l-0.813-0.804q-0.17-0.17-0.402-0.17t-0.402 0.17l-3.643 3.634-2.018-2.018q-0.17-0.17-0.402-0.17t-0.402 0.17l-0.813 0.804q-0.161 0.161-0.161 0.411 0 0.241 0.161 0.402l3.232 3.232q0.17 0.17 0.402 0.17 0.241 0 0.411-0.17l4.848-4.848q0.161-0.161 0.161-0.402zM14.857 8q0 1.866-0.92 3.442t-2.496 2.496-3.442 0.92-3.442-0.92-2.496-2.496-0.92-3.442 0.92-3.442 2.496-2.496 3.442-0.92 3.442 0.92 2.496 2.496 0.92 3.442z"
+ <Icon>
+ <svg
+ height={16}
style={
Object {
- "fill": "#00aa00",
+ "clipRule": "evenodd",
+ "fillRule": "evenodd",
+ "strokeLinejoin": "round",
+ "strokeMiterlimit": "1.41421",
}
}
- />
- </svg>
+ version="1.1"
+ viewBox="0 0 16 16"
+ width={16}
+ xmlSpace="preserve"
+ xmlnsXlink="http://www.w3.org/1999/xlink"
+ >
+ <path
+ d="M12.607 6.554q0-0.25-0.161-0.411l-0.813-0.804q-0.17-0.17-0.402-0.17t-0.402 0.17l-3.643 3.634-2.018-2.018q-0.17-0.17-0.402-0.17t-0.402 0.17l-0.813 0.804q-0.161 0.161-0.161 0.411 0 0.241 0.161 0.402l3.232 3.232q0.17 0.17 0.402 0.17 0.241 0 0.411-0.17l4.848-4.848q0.161-0.161 0.161-0.402zM14.857 8q0 1.866-0.92 3.442t-2.496 2.496-3.442 0.92-3.442-0.92-2.496-2.496-0.92-3.442 0.92-3.442 2.496-2.496 3.442-0.92 3.442 0.92 2.496 2.496 0.92 3.442z"
+ style={
+ Object {
+ "fill": "#00aa00",
+ }
+ }
+ />
+ </svg>
+ </Icon>
</AlertSuccessIcon>
</BooleanItem>
</SysInfoItem>
diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx
index 25b32e6eadc..5e4d31417d9 100644
--- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx
+++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import DropdownIcon from '../../../../components/icons-components/DropdownIcon';
import DateFormatter from '../../../../components/intl/DateFormatter';
import { SystemUpgrade } from '../../../../api/system';
import { translate } from '../../../../helpers/l10n';
@@ -57,16 +57,11 @@ export default class SystemUpgradeIntermediate extends React.PureComponent<Props
{showMore
? translate('system.hide_intermediate_versions')
: translate('system.show_intermediate_versions')}
- <i
- className={classNames('little-spacer-left', {
- 'icon-arrow-down': !showMore,
- 'icon-arrow-up': showMore
- })}
- />
+ <DropdownIcon className="little-spacer-left" turned={showMore} />
</a>
{showMore &&
upgrades.map(upgrade => (
- <div key={upgrade.version} className="note system-upgrade-intermediate">
+ <div className="note system-upgrade-intermediate" key={upgrade.version}>
<DateFormatter date={upgrade.releaseDate} long={true}>
{formattedDate => (
<p>
diff --git a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap
index 80a70b6f48e..ba4c67f6487 100644
--- a/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap
+++ b/server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap
@@ -8,8 +8,9 @@ exports[`should display correctly 1`] = `
onClick={[Function]}
>
system.show_intermediate_versions
- <i
- className="little-spacer-left icon-arrow-down"
+ <DropdownIcon
+ className="little-spacer-left"
+ turned={false}
/>
</a>
</div>
@@ -23,8 +24,9 @@ exports[`should display correctly 2`] = `
onClick={[Function]}
>
system.hide_intermediate_versions
- <i
- className="little-spacer-left icon-arrow-up"
+ <DropdownIcon
+ className="little-spacer-left"
+ turned={true}
/>
</a>
<div
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx
index 1499a05acb0..80ce4ba53d2 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx
@@ -23,7 +23,7 @@ import { Link } from 'react-router';
import * as PropTypes from 'prop-types';
import MeasuresOverlay from './components/MeasuresOverlay';
import { SourceViewerFile, BranchLike } from '../../app/types';
-import QualifierIcon from '../shared/QualifierIcon';
+import QualifierIcon from '../icons-components/QualifierIcon';
import Dropdown from '../controls/Dropdown';
import FavoriteContainer from '../controls/FavoriteContainer';
import ListIcon from '../icons-components/ListIcon';
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
index 618e258da8b..88e0809d4af 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
@@ -23,7 +23,7 @@ import * as PropTypes from 'prop-types';
import { getTests } from '../../../api/components';
import { BranchLike, SourceLine, TestCase } from '../../../app/types';
import { DropdownOverlay } from '../../controls/Dropdown';
-import TestStatusIcon from '../../shared/TestStatusIcon';
+import TestStatusIcon from '../../icons-components/TestStatusIcon';
import { PopupPlacement } from '../../ui/popups';
import { WorkspaceContext } from '../../workspace/context';
import { isSameBranchLike, getBranchLikeQuery } from '../../../helpers/branches';
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx
index 1322545356f..c8cd8ce6658 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx
@@ -23,7 +23,7 @@ import * as PropTypes from 'prop-types';
import { groupBy, sortBy } from 'lodash';
import { BranchLike, DuplicatedFile, DuplicationBlock, SourceViewerFile } from '../../../app/types';
import { DropdownOverlay } from '../../controls/Dropdown';
-import QualifierIcon from '../../shared/QualifierIcon';
+import QualifierIcon from '../../icons-components/QualifierIcon';
import { PopupPlacement } from '../../ui/popups';
import { WorkspaceContext } from '../../workspace/context';
import { translate } from '../../../helpers/l10n';
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx
index e5434c0388c..e8d9b4162de 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import SeverityIcon from '../../shared/SeverityIcon';
+import SeverityIcon from '../../icons-components/SeverityIcon';
import { sortBySeverity } from '../../../helpers/issues';
import { Issue, SourceLine } from '../../../app/types';
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx
index 11807298299..4782d521c0f 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx
@@ -29,7 +29,7 @@ import { getAllMetrics } from '../../../api/metrics';
import { FacetValue, SourceViewerFile, BranchLike } from '../../../app/types';
import Modal from '../../controls/Modal';
import Measure from '../../measure/Measure';
-import QualifierIcon from '../../shared/QualifierIcon';
+import QualifierIcon from '../../icons-components/QualifierIcon';
import SeverityHelper from '../../shared/SeverityHelper';
import CoverageRating from '../../ui/CoverageRating';
import DuplicationsRating from '../../ui/DuplicationsRating';
@@ -44,6 +44,7 @@ import {
} from '../../../helpers/measures';
import { getBranchLikeUrl } from '../../../helpers/urls';
import { getBranchLikeQuery } from '../../../helpers/branches';
+import TagsIcon from '../../icons-components/TagsIcon';
interface Props {
branchLike: BranchLike | undefined;
@@ -192,7 +193,7 @@ export default class MeasuresOverlay extends React.PureComponent<Props, State> {
{this.renderBigMeasure(measures.sqale_index)}
</div>
{measures.violations &&
- !measures.violations.value && (
+ !!measures.violations.value && (
<>
{typesFacet && (
<div className="measures">
@@ -233,7 +234,7 @@ export default class MeasuresOverlay extends React.PureComponent<Props, State> {
{tagsFacet.map(f => (
<div className="measure measure-one-line" key={f.val}>
<span className="measure-name">
- <i className="icon-tags little-spacer-right" />
+ <TagsIcon className="little-spacer-right" />
{f.val}
</span>
<span className="measure-value">
diff --git a/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx b/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx
index 17b3e455ba0..6f2981c17c8 100644
--- a/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx
+++ b/server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { TestCase } from '../../../app/types';
-import TestStatusIcon from '../../shared/TestStatusIcon';
+import TestStatusIcon from '../../icons-components/TestStatusIcon';
interface Props {
onClick: (testId: string) => void;
diff --git a/server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx b/server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx
index 252d26ef618..3245311d458 100644
--- a/server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx
+++ b/server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx
@@ -22,6 +22,7 @@ import * as classNames from 'classnames';
import { Link } from 'react-router';
import { LocationDescriptor } from 'history';
import Dropdown from './Dropdown';
+import DropdownIcon from '../icons-components/DropdownIcon';
import SettingsIcon from '../icons-components/SettingsIcon';
import { Button } from '../ui/buttons';
@@ -43,8 +44,8 @@ export default function ActionsDropdown(props: Props) {
className={classNames('dropdown-toggle', props.toggleClassName, {
'button-small': props.small
})}>
- <SettingsIcon className="text-text-bottom" />
- <i className="icon-dropdown little-spacer-left" />
+ <SettingsIcon size={props.small ? 12 : 14} />
+ <DropdownIcon className="little-spacer-left" />
</Button>
</Dropdown>
);
diff --git a/server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx b/server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx
index 95ee65b06e2..e69702cf848 100644
--- a/server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx
+++ b/server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx
@@ -19,7 +19,8 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import { Button } from '../ui/buttons';
+import ClearIcon from '../icons-components/ClearIcon';
+import { ButtonIcon } from '../ui/buttons';
interface Message {
id: string;
@@ -41,11 +42,12 @@ export default class GlobalMessages extends React.PureComponent<Props> {
return (
<div className={className} key={message.id}>
{message.message}
- <Button
- className="process-spinner-close"
+ <ButtonIcon
+ className="button-small process-spinner-close"
+ color="#fff"
onClick={() => this.props.closeGlobalMessage(message.id)}>
- <i className="icon-close" />
- </Button>
+ <ClearIcon />
+ </ButtonIcon>
</div>
);
};
diff --git a/server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx
index f13ec8871b8..a5fa260a961 100644
--- a/server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx
@@ -18,23 +18,16 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function AlertErrorIcon({ className, fill = theme.red, size = 16 }: IconProps) {
+export default function AlertErrorIcon({ className, fill = theme.red, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M11.402 10.018q0-0.232-0.17-0.402l-1.616-1.616 1.616-1.616q0.17-0.17 0.17-0.402 0-0.241-0.17-0.411l-0.804-0.804q-0.17-0.17-0.411-0.17-0.232 0-0.402 0.17l-1.616 1.616-1.616-1.616q-0.17-0.17-0.402-0.17-0.241 0-0.411 0.17l-0.804 0.804q-0.17 0.17-0.17 0.411 0 0.232 0.17 0.402l1.616 1.616-1.616 1.616q-0.17 0.17-0.17 0.402 0 0.241 0.17 0.411l0.804 0.804q0.17 0.17 0.411 0.17 0.232 0 0.402-0.17l1.616-1.616 1.616 1.616q0.17 0.17 0.402 0.17 0.241 0 0.411-0.17l0.804-0.804q0.17-0.17 0.17-0.411zM14.857 8q0 1.866-0.92 3.442t-2.496 2.496-3.442 0.92-3.442-0.92-2.496-2.496-0.92-3.442 0.92-3.442 2.496-2.496 3.442-0.92 3.442 0.92 2.496 2.496 0.92 3.442z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx
index c0eadf86144..8aafc8fba4f 100644
--- a/server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx
@@ -18,23 +18,16 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function AlertSuccessIcon({ className, fill = theme.green, size = 16 }: IconProps) {
+export default function AlertSuccessIcon({ className, fill = theme.green, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M12.607 6.554q0-0.25-0.161-0.411l-0.813-0.804q-0.17-0.17-0.402-0.17t-0.402 0.17l-3.643 3.634-2.018-2.018q-0.17-0.17-0.402-0.17t-0.402 0.17l-0.813 0.804q-0.161 0.161-0.161 0.411 0 0.241 0.161 0.402l3.232 3.232q0.17 0.17 0.402 0.17 0.241 0 0.411-0.17l4.848-4.848q0.161-0.161 0.161-0.402zM14.857 8q0 1.866-0.92 3.442t-2.496 2.496-3.442 0.92-3.442-0.92-2.496-2.496-0.92-3.442 0.92-3.442 2.496-2.496 3.442-0.92 3.442 0.92 2.496 2.496 0.92 3.442z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx
index d9fbdfa21f8..3225cfbcbaf 100644
--- a/server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx
@@ -18,23 +18,16 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function AlertWarnIcon({ className, fill = theme.orange, size = 16 }: IconProps) {
+export default function AlertWarnIcon({ className, fill = theme.orange, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M8 1.143q1.866 0 3.442.92t2.496 2.496.92 3.442-.92 3.442-2.496 2.496-3.442.92-3.442-.92-2.496-2.496-.92-3.442.92-3.442 2.496-2.496T8 1.143zm1.143 11.134v-1.696q0-.125-.08-.21t-.196-.085H7.153q-.116 0-.205.089t-.089.205v1.696q0 .116.089.205t.205.089h1.714q.116 0 .196-.085t.08-.21zm-.018-3.072l.161-5.545q0-.107-.089-.161-.089-.071-.214-.071H7.019q-.125 0-.214.071-.089.054-.089.161l.152 5.545q0 .089.089.156t.214.067h1.652q.125 0 .21-.067t.094-.156z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx
index 9ff03913a0d..f4dae266050 100644
--- a/server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx
@@ -21,7 +21,7 @@ import * as React from 'react';
import ShortLivingBranchIcon from './ShortLivingBranchIcon';
import LongLivingBranchIcon from './LongLivingBranchIcon';
import PullRequestIcon from './PullRequestIcon';
-import { IconProps } from './types';
+import { IconProps } from './Icon';
import { BranchLike } from '../../app/types';
import { isShortLivingBranch, isPullRequest } from '../../helpers/branches';
diff --git a/server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx
index 786343a412c..168626ec296 100644
--- a/server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function BubblesIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function BubblesIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size} style={{ fillRule: 'nonzero' }}>
<path
- style={{ fill }}
d="M4.1 10.2c1 0 1.9.8 1.9 1.9S5.1 14 4.1 14s-1.9-.8-1.9-1.9.8-1.9 1.9-1.9m0-2C2 8.2.2 9.9.2 12.1S1.9 16 4.1 16 8 14.3 8 12.1 6.2 8.2 4.1 8.2zM10.3 2c2 0 3.7 1.7 3.7 3.7s-1.7 3.7-3.7 3.7-3.8-1.6-3.8-3.7S8.2 2 10.3 2m0-2C7.1 0 4.5 2.6 4.5 5.7s2.6 5.7 5.7 5.7S16 8.9 16 5.7 13.4 0 10.3 0z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx
index cc37a484d75..fee70433856 100644
--- a/server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function BugIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function BugIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M11 9h1.3l.5.8.8-.5-.8-1.3H11v-.3l2-2.3V3h-1v2l-1 1.2V5c-.1-.8-.7-1.5-1.4-1.9L11 1.8l-.7-.7-1.8 1.6-1.8-1.6-.7.7 1.5 1.3C6.7 3.5 6.1 4.2 6 5v1.1L5 5V3H4v2.3l2 2.3V8H4.2l-.7 1.2.8.5.4-.7H6v.3l-2 1.9V14h1v-2.4l1-1C6 12 7.1 13 8.4 13h.8c.7 0 1.4-.3 1.8-.9.3-.4.3-.9.2-1.4l.9.9V14h1v-2.8l-2-1.9V9zm-2 2H8V6h1v5z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx
index f42e84aaa6e..75cb4afcce1 100644
--- a/server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function BugTrackerIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function BugTrackerIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M13.5 9.5c1.003.033 1.466 1.952 0 2h-2.618L9.685 9.107 8 14.162 6.096 8.45l-.832 3.05-2.829-.002c-.984-.097-1.369-1.951.065-1.998h1.236l2.168-7.95L8 7.838l1.315-3.945L12.118 9.5H13.5z"
style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx
index e59d3c4d372..97e840370c5 100644
--- a/server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function BulletListIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function BulletListIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M2.968 11.274v1.51q0 0.102-0.075 0.177t-0.177 0.075h-1.51q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h1.51q0.102 0 0.177 0.075t0.075 0.177zM2.968 8.255v1.51q0 0.102-0.075 0.177t-0.177 0.075h-1.51q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h1.51q0.102 0 0.177 0.075t0.075 0.177zM2.968 5.235v1.51q0 0.102-0.075 0.177t-0.177 0.075h-1.51q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h1.51q0.102 0 0.177 0.075t0.075 0.177zM15.045 11.274v1.51q0 0.102-0.075 0.177t-0.177 0.075h-10.568q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h10.568q0.102 0 0.177 0.075t0.075 0.177zM2.968 2.216v1.51q0 0.102-0.075 0.177t-0.177 0.075h-1.51q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h1.51q0.102 0 0.177 0.075t0.075 0.177zM15.045 8.255v1.51q0 0.102-0.075 0.177t-0.177 0.075h-10.568q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h10.568q0.102 0 0.177 0.075t0.075 0.177zM15.045 5.235v1.51q0 0.102-0.075 0.177t-0.177 0.075h-10.568q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h10.568q0.102 0 0.177 0.075t0.075 0.177zM15.045 2.216v1.51q0 0.102-0.075 0.177t-0.177 0.075h-10.568q-0.102 0-0.177-0.075t-0.075-0.177v-1.51q0-0.102 0.075-0.177t0.177-0.075h10.568q0.102 0 0.177 0.075t0.075 0.177z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx
index 8ad412ea309..2e3e01ddf7f 100644
--- a/server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function CalendarIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function CalendarIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M2 14h2.25v-2.25H2V14zm2.75 0h2.5v-2.25h-2.5V14zM2 11.25h2.25v-2.5H2v2.5zm2.75 0h2.5v-2.5h-2.5v2.5zM2 8.25h2.25V6H2v2.25zM7.75 14h2.5v-2.25h-2.5V14zm-3-5.75h2.5V6h-2.5v2.25zm6 5.75H13v-2.25h-2.25V14zm-3-2.75h2.5v-2.5h-2.5v2.5zM5 4.5V2.25a.24.24 0 0 0-.074-.176A.24.24 0 0 0 4.75 2h-.5a.24.24 0 0 0-.176.074A.24.24 0 0 0 4 2.25V4.5a.24.24 0 0 0 .074.176.24.24 0 0 0 .176.074h.5a.24.24 0 0 0 .176-.074A.24.24 0 0 0 5 4.5zm5.75 6.75H13v-2.5h-2.25v2.5zm-3-3h2.5V6h-2.5v2.25zm3 0H13V6h-2.25v2.25zM11 4.5V2.25a.24.24 0 0 0-.074-.176A.24.24 0 0 0 10.75 2h-.5a.24.24 0 0 0-.176.074.24.24 0 0 0-.074.176V4.5a.24.24 0 0 0 .074.176.24.24 0 0 0 .176.074h.5a.24.24 0 0 0 .176-.074A.24.24 0 0 0 11 4.5zm3-.5v10c0 .27-.099.505-.297.703A.961.961 0 0 1 13 15H2a.961.961 0 0 1-.703-.297A.961.961 0 0 1 1 14V4c0-.27.099-.505.297-.703A.961.961 0 0 1 2 3h1v-.75c0-.344.122-.638.367-.883S3.907 1 4.25 1h.5c.344 0 .638.122.883.367S6 1.907 6 2.25V3h3v-.75c0-.344.122-.638.367-.883S9.907 1 10.25 1h.5c.344 0 .638.122.883.367s.367.54.367.883V3h1c.27 0 .505.099.703.297A.961.961 0 0 1 14 4z"
style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx
index 5b4b986adbe..8cabb7d905f 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ChartLegendIcon({
- className,
- fill = 'currentColor',
- size = 16
-}: IconProps) {
+export default function ChartLegendIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M14.325 7.143v1.714q0 0.357-0.25 0.607t-0.607 0.25h-10.857q-0.357 0-0.607-0.25t-0.25-0.607v-1.714q0-0.357 0.25-0.607t0.607-0.25h10.857q0.357 0 0.607 0.25t0.25 0.607z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx
index 0b5de3b7bb0..8482a8ee941 100644
--- a/server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function CheckIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function CheckIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M14.92 4.804q0 0.357-0.25 0.607l-7.679 7.679q-0.25 0.25-0.607 0.25t-0.607-0.25l-4.446-4.446q-0.25-0.25-0.25-0.607t0.25-0.607l1.214-1.214q0.25-0.25 0.607-0.25t0.607 0.25l2.625 2.634 5.857-5.866q0.25-0.25 0.607-0.25t0.607 0.25l1.214 1.214q0.25 0.25 0.25 0.607z"
- />;
- </svg>
+ style={{ fill }}
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx
index e70784e8f26..d15b44bb6b0 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ChevronDownIcon({
- className,
- fill = 'currentColor',
- size = 16
-}: IconProps) {
+export default function ChevronDownIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M7.72 11.596L3.119 6.992A.382.382 0 0 1 3 6.713c0-.108.04-.2.118-.279l1.03-1.03a.382.382 0 0 1 .278-.117c.108 0 .201.04.28.117L8 8.7l3.294-3.295a.382.382 0 0 1 .28-.117c.108 0 .2.04.279.117l1.03 1.03a.382.382 0 0 1 .117.28c0 .107-.04.2-.118.278L8.28 11.596a.382.382 0 0 1-.279.117.382.382 0 0 1-.28-.117z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx
index 8bfb0dc2218..86ebb675004 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ChevronLeftIcon({
- className,
- fill = 'currentColor',
- size = 16
-}: IconProps) {
+export default function ChevronLeftIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M4.404 8.28l4.604 4.602a.382.382 0 0 0 .279.118c.108 0 .2-.04.279-.118l1.03-1.03a.382.382 0 0 0 .117-.278.382.382 0 0 0-.117-.28L7.3 8l3.295-3.294a.382.382 0 0 0 .117-.28.382.382 0 0 0-.117-.279l-1.03-1.03A.382.382 0 0 0 9.286 3a.382.382 0 0 0-.278.118L4.404 7.72A.382.382 0 0 0 4.287 8c0 .108.04.201.117.28z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx
index 86772ee1529..6139224a430 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ChevronRightIcon({
- className,
- fill = 'currentColor',
- size = 16
-}: IconProps) {
+export default function ChevronRightIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M11.596 8.28l-4.604 4.602a.382.382 0 0 1-.279.118.382.382 0 0 1-.279-.118l-1.03-1.03a.382.382 0 0 1-.117-.278c0-.108.04-.201.117-.28L8.7 8 5.404 4.706a.382.382 0 0 1-.117-.28c0-.108.04-.2.117-.279l1.03-1.03A.382.382 0 0 1 6.714 3c.107 0 .2.04.278.118l4.604 4.603a.382.382 0 0 1 .117.279c0 .108-.04.201-.117.28z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx
index e1d105e919b..cd73db7d926 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ChevronUpIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function ChevronUpIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M8.28 4.404l4.602 4.604a.382.382 0 0 1 .118.279c0 .108-.04.2-.118.279l-1.03 1.03a.382.382 0 0 1-.278.117.382.382 0 0 1-.28-.117L8 7.3l-3.294 3.295a.382.382 0 0 1-.28.117.382.382 0 0 1-.279-.117l-1.03-1.03A.382.382 0 0 1 3 9.286c0-.107.04-.2.118-.278L7.72 4.404A.382.382 0 0 1 8 4.287c.108 0 .201.04.28.117z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx
index 5222dec139f..fd8556f4b2a 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ClearIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function ClearIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M14 4.242L11.758 2l-3.76 3.76L4.242 2 2 4.242l3.756 3.756L2 11.758 4.242 14l3.756-3.76 3.76 3.76L14 11.758l-3.76-3.76L14 4.242z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx
index d5da0ec03e9..2f7d8e23b52 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx
@@ -19,22 +19,15 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
export default function ClockIcon({ className, size = 16 }: IconProps) {
return (
- <svg
- className={classNames('icon-clock', className)}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={classNames('icon-clock', className)} size={size}>
<g fill="#fff" stroke="#ADADAD" transform="matrix(1.4 0 0 1.4 .3 .7)">
<circle cx="5.5" cy="5.2" r="5" />
<path d="M5.6 2.9v2.7l2-.5" fillRule="nonzero" />
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx
index 43f1c02c7a8..db7fd1d3b39 100644
--- a/server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx
@@ -18,20 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function CodeSmellIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function CodeSmellIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- xmlns="http://www.w3.org/2000/svg">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M8 2C4.7 2 2 4.7 2 8s2.7 6 6 6 6-2.7 6-6-2.7-6-6-6zm-.5 5.5h.9v.9h-.9v-.9zm-3.8.2c-.1 0-.2-.1-.2-.2 0-.4.1-1.2.6-2S5.3 4.2 5.6 4c.2 0 .3 0 .3.1l1.3 2.3c0 .1 0 .2-.1.2-.1.2-.2.3-.3.5-.1.2-.2.4-.2.5 0 .1-.1.2-.2.2l-2.7-.1zM9.9 12c-.3.2-1.1.5-2 .5-.9 0-1.7-.3-2-.5-.1 0-.1-.2-.1-.3l1.3-2.3c0-.1.1-.1.2-.1.2.1.3.1.5.1s.4 0 .5-.1c.1 0 .2 0 .2.1l1.3 2.3c.2.2.2.3.1.3zm2.5-4.1L9.7 8c-.1 0-.2-.1-.2-.2 0-.2-.1-.4-.2-.5 0-.1-.2-.3-.3-.4-.1 0-.1-.1-.1-.2l1.3-2.3c.1-.1.2-.1.3-.1.3.2 1 .7 1.5 1.5s.6 1.6.6 2c0 0-.1.1-.2.1z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx
index f1070ac740e..1e9805f061e 100644
--- a/server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function CollapseIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function CollapseIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M8 8.509v3.56c0 .138-.05.257-.151.357-.1.101-.22.151-.358.151a.489.489 0 0 1-.357-.15l-1.145-1.145-2.638 2.639a.251.251 0 0 1-.366 0l-.906-.906a.251.251 0 0 1 0-.366l2.639-2.638-1.144-1.145a.489.489 0 0 1-.151-.357c0-.138.05-.257.15-.358.101-.1.22-.151.358-.151h3.56c.138 0 .257.05.358.151.1.1.151.22.151.358zm6-5.34c0 .068-.026.129-.08.182l-2.638 2.638 1.144 1.145c.101.1.151.22.151.357 0 .138-.05.257-.15.358-.101.1-.22.151-.358.151h-3.56a.489.489 0 0 1-.358-.151A.489.489 0 0 1 8 7.491v-3.56c0-.138.05-.257.151-.357.1-.101.22-.151.358-.151.137 0 .257.05.357.15l1.145 1.145 2.638-2.639a.251.251 0 0 1 .366 0l.906.906c.053.053.079.114.079.183z"
style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ContinuousIntegrationIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ContinuousIntegrationIcon.tsx
new file mode 100644
index 00000000000..c72dd6248c7
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/ContinuousIntegrationIcon.tsx
@@ -0,0 +1,36 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+
+export default function ContinuousIntegrationIcon({
+ className,
+ fill = 'currentColor',
+ size
+}: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M13.805 9.25c0 .016 0 .04-.008.055C13.133 12.07 10.852 14 7.969 14c-1.524 0-3-.602-4.11-1.656l-1.007 1.008a.497.497 0 0 1-.352.148.504.504 0 0 1-.5-.5V9.5c0-.273.227-.5.5-.5H6c.273 0 .5.227.5.5a.497.497 0 0 1-.148.352l-1.07 1.07a3.988 3.988 0 0 0 6.125-.828c.187-.305.28-.602.413-.914.04-.11.117-.18.235-.18h1.5c.14 0 .25.117.25.25zM14 3v3.5c0 .273-.227.5-.5.5H10a.504.504 0 0 1-.5-.5c0-.133.055-.258.148-.352l1.079-1.078A4.019 4.019 0 0 0 8 4c-1.39 0-2.68.719-3.406 1.906-.188.305-.282.602-.414.914-.04.11-.117.18-.235.18H2.391a.252.252 0 0 1-.25-.25v-.055C2.812 3.922 5.117 2 8 2c1.531 0 3.023.61 4.133 1.656l1.015-1.008A.497.497 0 0 1 13.5 2.5c.273 0 .5.227.5.5z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx
index 75b8ea4e6d1..05e3eb4dc8d 100644
--- a/server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { ClearIcon } from './icons';
+import ClearIcon from './ClearIcon';
import * as theme from '../../app/theme';
interface Props {
diff --git a/server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx
index d7b08269119..a3ebec580fa 100644
--- a/server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function DetachIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function DetachIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M12 9.25v2.5A2.25 2.25 0 0 1 9.75 14h-6.5A2.25 2.25 0 0 1 1 11.75v-6.5A2.25 2.25 0 0 1 3.25 3h5.5c.14 0 .25.11.25.25v.5c0 .14-.11.25-.25.25h-5.5C2.562 4 2 4.563 2 5.25v6.5c0 .688.563 1.25 1.25 1.25h6.5c.688 0 1.25-.563 1.25-1.25v-2.5c0-.14.11-.25.25-.25h.5c.14 0 .25.11.25.25zm3-6.75v4c0 .273-.227.5-.5.5a.497.497 0 0 1-.352-.148l-1.375-1.375L7.68 10.57a.27.27 0 0 1-.18.078.27.27 0 0 1-.18-.078l-.89-.89a.27.27 0 0 1-.078-.18.27.27 0 0 1 .078-.18l5.093-5.093-1.375-1.375A.497.497 0 0 1 10 2.5c0-.273.227-.5.5-.5h4c.273 0 .5.227.5.5z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
index 3fff51c6175..50990b4f72c 100644
--- a/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
@@ -18,24 +18,29 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function DropdownIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+interface DropdownIconProps {
+ turned?: boolean;
+}
+
+export default function DropdownIcon({
+ className,
+ fill = 'currentColor',
+ size = 16,
+ turned = false
+}: IconProps & DropdownIconProps) {
return (
- <svg
+ <Icon
className={className}
- width={size / 16 * 7}
height={size}
+ style={turned ? { transform: 'rotate(180deg)' } : undefined}
viewBox="0 0 7 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
- <g transform="matrix(0.0273438,0,0,0.0273438,-6.4e-06,2.65625)">
- <path
- style={{ fill }}
- d="M256,176C256,180.333 254.417,184.083 251.25,187.25L139.25,299.25C136.083,302.417 132.333,304 128,304C123.667,304 119.917,302.417 116.75,299.25L4.75,187.25C1.583,184.083 0,180.333 0,176C0,171.667 1.583,167.917 4.75,164.75C7.917,161.583 11.667,160 16,160L240,160C244.333,160 248.083,161.583 251.25,164.75C254.417,167.917 256,171.667 256,176Z"
- />
- </g>
- </svg>
+ width={size / 16 * 7}>
+ <path
+ d="M7 6.469a.42.42 0 0 1-.13.307L3.808 9.84a.42.42 0 0 1-.308.13.42.42 0 0 1-.308-.13L.13 6.776A.42.42 0 0 1 0 6.47a.42.42 0 0 1 .13-.308.42.42 0 0 1 .307-.13h6.126a.42.42 0 0 1 .307.13.42.42 0 0 1 .13.308z"
+ style={{ fill }}
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx
index 3cdb3fe388a..77b35e5991a 100644
--- a/server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function EditIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function EditIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M4.875 12.986l.721-.72-1.861-1.862-.721.72v.848h1.014v1.014h.847zm4.143-7.35c0-.117-.058-.175-.174-.175a.183.183 0 0 0-.135.056L4.416 9.81a.183.183 0 0 0-.056.135c0 .116.058.174.175.174a.183.183 0 0 0 .134-.056L8.962 5.77a.183.183 0 0 0 .056-.134zM8.59 4.115l3.295 3.295L5.295 14H2v-3.295l6.59-6.59zm5.41.76a.97.97 0 0 1-.293.713l-1.315 1.315-3.295-3.295L10.412 2.3c.19-.2.428-.301.713-.301.28 0 .52.1.72.301l1.862 1.853c.195.206.293.447.293.721z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/shared/QualifierIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/EllipsisIcon.tsx
index 3b6c0c1704f..7e3cc0686c2 100644
--- a/server/sonar-web/src/main/js/components/shared/QualifierIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/EllipsisIcon.tsx
@@ -18,19 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import Icon, { IconProps } from './Icon';
-interface Props {
- className?: string;
- qualifier: string | null;
-}
-
-export default function QualifierIcon(props: Props) {
- if (!props.qualifier) {
- return null;
- }
-
- const className = classNames('icon-qualifier-' + props.qualifier.toLowerCase(), props.className);
-
- return <i className={className} />;
+export default function EllipsisIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M5.273 7.182v1.636a.818.818 0 0 1-.818.818H2.818A.818.818 0 0 1 2 8.818V7.182c0-.452.366-.818.818-.818h1.637c.451 0 .818.366.818.818zm4.363 0v1.636a.818.818 0 0 1-.818.818H7.182a.818.818 0 0 1-.818-.818V7.182c0-.452.366-.818.818-.818h1.636c.452 0 .818.366.818.818zm4.364 0v1.636a.818.818 0 0 1-.818.818h-1.637a.818.818 0 0 1-.818-.818V7.182c0-.452.367-.818.818-.818h1.637c.452 0 .818.366.818.818z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx
index 1105b7833ed..229b9b46807 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ExpandIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function ExpandIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M7.898 9.25a.247.247 0 0 1-.078.18l-2.593 2.593 1.125 1.125a.48.48 0 0 1 .148.352.48.48 0 0 1-.148.352A.48.48 0 0 1 6 14H2.5a.48.48 0 0 1-.352-.148A.48.48 0 0 1 2 13.5V10a.48.48 0 0 1 .148-.352A.48.48 0 0 1 2.5 9.5a.48.48 0 0 1 .352.148l1.125 1.125L6.57 8.18a.247.247 0 0 1 .36 0l.89.89a.247.247 0 0 1 .078.18zM14 2.5V6a.48.48 0 0 1-.148.352.48.48 0 0 1-.352.148.48.48 0 0 1-.352-.148l-1.125-1.125L9.43 7.82a.247.247 0 0 1-.36 0l-.89-.89a.247.247 0 0 1 0-.36l2.593-2.593-1.125-1.125A.48.48 0 0 1 9.5 2.5a.48.48 0 0 1 .148-.352A.48.48 0 0 1 10 2h3.5a.48.48 0 0 1 .352.148A.48.48 0 0 1 14 2.5z"
style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx
index 866ca928857..5bfe0eadd37 100644
--- a/server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx
@@ -19,32 +19,22 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
export interface Props extends IconProps {
favorite: boolean;
}
-export default function FavoriteIcon({
- className,
- favorite,
- fill = theme.orange,
- size = 16
-}: Props) {
+export default function FavoriteIcon({ className, favorite, fill = theme.orange, size }: Props) {
return (
- <svg
+ <Icon
className={classNames('icon-outline', { 'is-filled': favorite }, className)}
- style={{ color: fill }}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ size={size}
+ style={{ color: fill }}>
<g transform="matrix(0.988024,0,0,0.988024,0.0957953,0.717719)">
<path d="M15.428,5.777C15.428,5.908 15.35,6.051 15.195,6.205L11.954,9.366L12.722,13.83C12.728,13.872 12.731,13.932 12.731,14.009C12.731,14.134 12.7,14.24 12.637,14.326C12.575,14.412 12.484,14.455 12.365,14.455C12.252,14.455 12.133,14.42 12.008,14.348L7.999,12.241L3.99,14.348C3.859,14.42 3.74,14.455 3.633,14.455C3.508,14.455 3.414,14.412 3.352,14.326C3.289,14.24 3.258,14.134 3.258,14.009C3.258,13.973 3.264,13.914 3.276,13.83L4.044,9.366L0.794,6.205C0.645,6.045 0.57,5.902 0.57,5.777C0.57,5.557 0.737,5.42 1.07,5.366L5.552,4.714L7.561,0.652C7.674,0.408 7.82,0.286 7.999,0.286C8.177,0.286 8.323,0.408 8.436,0.652L10.445,4.714L14.927,5.366C15.261,5.42 15.427,5.557 15.427,5.777L15.428,5.777Z" />
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/shared/SeverityIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/FilterIcon.tsx
index 38ee50884a4..1b0fc0d098e 100644
--- a/server/sonar-web/src/main/js/components/shared/SeverityIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/FilterIcon.tsx
@@ -18,18 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import Icon, { IconProps } from './Icon';
-interface Props {
- className?: string;
- severity: string | null | undefined;
-}
-
-export default function SeverityIcon(props: Props) {
- if (!props.severity) {
- return null;
- }
+export default function FilterIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <i className={classNames('icon-severity-' + props.severity.toLowerCase(), props.className)} />
+ <Icon className={className} size={size}>
+ <path
+ d="M13.957 2.333a.536.536 0 0 1-.12.596l-4.2 4.202v6.323a.552.552 0 0 1-.333.503.632.632 0 0 1-.213.043.51.51 0 0 1-.384-.162l-2.181-2.182a.542.542 0 0 1-.162-.383V7.13L2.162 2.929a.536.536 0 0 1-.12-.596A.552.552 0 0 1 2.547 2h10.908c.222 0 .418.137.503.333z"
+ style={{ fill }}
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx
index ec1c9d0b820..edd86a1fea7 100644
--- a/server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx
@@ -18,25 +18,18 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
export default function GroupIcon({ className, fill = theme.gray67, size = 36 }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 36 36"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size} viewBox="0 0 36 36">
<g transform="matrix(0.0625,0,0,0.0625,3,4)">
<path
- style={{ fill }}
d="M148.25,224C121.25,224.833 99.167,235.5 82,256L48.5,256C34.833,256 23.333,252.625 14,245.875C4.667,239.125 0,229.25 0,216.25C0,157.417 10.333,128 31,128C32,128 35.625,129.75 41.875,133.25C48.125,136.75 56.25,140.292 66.25,143.875C76.25,147.458 86.167,149.25 96,149.25C107.167,149.25 118.25,147.333 129.25,143.5C128.417,149.667 128,155.167 128,160C128,183.167 134.75,204.5 148.25,224ZM416,383.25C416,403.25 409.917,419.042 397.75,430.625C385.583,442.208 369.417,448 349.25,448L130.75,448C110.583,448 94.417,442.208 82.25,430.625C70.083,419.042 64,403.25 64,383.25C64,374.417 64.292,365.792 64.875,357.375C65.458,348.958 66.625,339.875 68.375,330.125C70.125,320.375 72.333,311.333 75,303C77.667,294.667 81.25,286.542 85.75,278.625C90.25,270.708 95.417,263.958 101.25,258.375C107.083,252.792 114.208,248.333 122.625,245C131.042,241.667 140.333,240 150.5,240C152.167,240 155.75,241.792 161.25,245.375C166.75,248.958 172.833,252.958 179.5,257.375C186.167,261.792 195.083,265.792 206.25,269.375C217.417,272.958 228.667,274.75 240,274.75C251.333,274.75 262.583,272.958 273.75,269.375C284.917,265.792 293.833,261.792 300.5,257.375C307.167,252.958 313.25,248.958 318.75,245.375C324.25,241.792 327.833,240 329.5,240C339.667,240 348.958,241.667 357.375,245C365.792,248.333 372.917,252.792 378.75,258.375C384.583,263.958 389.75,270.708 394.25,278.625C398.75,286.542 402.333,294.667 405,303C407.667,311.333 409.875,320.375 411.625,330.125C413.375,339.875 414.542,348.958 415.125,357.375C415.708,365.792 416,374.417 416,383.25ZM160,64C160,81.667 153.75,96.75 141.25,109.25C128.75,121.75 113.667,128 96,128C78.333,128 63.25,121.75 50.75,109.25C38.25,96.75 32,81.667 32,64C32,46.333 38.25,31.25 50.75,18.75C63.25,6.25 78.333,0 96,0C113.667,0 128.75,6.25 141.25,18.75C153.75,31.25 160,46.333 160,64ZM336,160C336,186.5 326.625,209.125 307.875,227.875C289.125,246.625 266.5,256 240,256C213.5,256 190.875,246.625 172.125,227.875C153.375,209.125 144,186.5 144,160C144,133.5 153.375,110.875 172.125,92.125C190.875,73.375 213.5,64 240,64C266.5,64 289.125,73.375 307.875,92.125C326.625,110.875 336,133.5 336,160ZM480,216.25C480,229.25 475.333,239.125 466,245.875C456.667,252.625 445.167,256 431.5,256L398,256C380.833,235.5 358.75,224.833 331.75,224C345.25,204.5 352,183.167 352,160C352,155.167 351.583,149.667 350.75,143.5C361.75,147.333 372.833,149.25 384,149.25C393.833,149.25 403.75,147.458 413.75,143.875C423.75,140.292 431.875,136.75 438.125,133.25C444.375,129.75 448,128 449,128C469.667,128 480,157.417 480,216.25ZM448,64C448,81.667 441.75,96.75 429.25,109.25C416.75,121.75 401.667,128 384,128C366.333,128 351.25,121.75 338.75,109.25C326.25,96.75 320,81.667 320,64C320,46.333 326.25,31.25 338.75,18.75C351.25,6.25 366.333,0 384,0C401.667,0 416.75,6.25 429.25,18.75C441.75,31.25 448,46.333 448,64Z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx
index 8a2d9394501..50c7af6881b 100644
--- a/server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx
@@ -18,24 +18,17 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function HelpIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function HelpIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<g transform="matrix(0.0364583,0,0,0.0364583,1,-0.166667)">
<path
d="M224,344L224,296C224,293.667 223.25,291.75 221.75,290.25C220.25,288.75 218.333,288 216,288L168,288C165.667,288 163.75,288.75 162.25,290.25C160.75,291.75 160,293.667 160,296L160,344C160,346.333 160.75,348.25 162.25,349.75C163.75,351.25 165.667,352 168,352L216,352C218.333,352 220.25,351.25 221.75,349.75C223.25,348.25 224,346.333 224,344ZM288,176C288,161.333 283.375,147.75 274.125,135.25C264.875,122.75 253.333,113.083 239.5,106.25C225.667,99.417 211.5,96 197,96C156.5,96 125.583,113.75 104.25,149.25C101.75,153.25 102.417,156.75 106.25,159.75L139.25,184.75C140.417,185.75 142,186.25 144,186.25C146.667,186.25 148.75,185.25 150.25,183.25C159.083,171.917 166.25,164.25 171.75,160.25C177.417,156.25 184.583,154.25 193.25,154.25C201.25,154.25 208.375,156.417 214.625,160.75C220.875,165.083 224,170 224,175.5C224,181.833 222.333,186.917 219,190.75C215.667,194.583 210,198.333 202,202C191.5,206.667 181.875,213.875 173.125,223.625C164.375,233.375 160,243.833 160,255L160,264C160,266.333 160.75,268.25 162.25,269.75C163.75,271.25 165.667,272 168,272L216,272C218.333,272 220.25,271.25 221.75,269.75C223.25,268.25 224,266.333 224,264C224,260.833 225.792,256.708 229.375,251.625C232.958,246.542 237.5,242.417 243,239.25C248.333,236.25 252.417,233.875 255.25,232.125C258.083,230.375 261.917,227.458 266.75,223.375C271.583,219.292 275.292,215.292 277.875,211.375C280.458,207.458 282.792,202.417 284.875,196.25C286.958,190.083 288,183.333 288,176ZM384,224C384,258.833 375.417,290.958 358.25,320.375C341.083,349.792 317.792,373.083 288.375,390.25C258.958,407.417 226.833,416 192,416C157.167,416 125.042,407.417 95.625,390.25C66.208,373.083 42.917,349.792 25.75,320.375C8.583,290.958 0,258.833 0,224C0,189.167 8.583,157.042 25.75,127.625C42.917,98.208 66.208,74.917 95.625,57.75C125.042,40.583 157.167,32 192,32C226.833,32 258.958,40.583 288.375,57.75C317.792,74.917 341.083,98.208 358.25,127.625C375.417,157.042 384,189.167 384,224Z"
style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx
index e607cad435a..f0b97544912 100644
--- a/server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function IconHistory({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function HistoryIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M14.7 3.4v3.3c0 .1 0 .2-.1.2s-.2 0-.3-.1l-.9-.9-4.8 4.8c-.1.1-.1.1-.2.1s-.1 0-.2-.1L6.4 9l-3.2 3.2-1.5-1.5 4.5-4.5c.1-.1.1-.1.2-.1s.1 0 .2.1L8.4 8l3.5-3.5-.9-1c-.1-.1-.1-.2-.1-.3s.1-.1.2-.1h3.3c.1 0 .1 0 .2.1.1 0 .1.1.1.2z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx
index 2db7f50b539..fb537ba5b98 100644
--- a/server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx
@@ -19,32 +19,22 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
export interface Props extends IconProps {
filled?: boolean;
}
-export default function HomeIcon({
- className,
- fill = theme.orange,
- filled = false,
- size = 16
-}: Props) {
+export default function HomeIcon({ className, fill = theme.orange, filled = false, size }: Props) {
return (
- <svg
+ <Icon
className={classNames(className, 'icon-outline', { 'is-filled': filled })}
- style={{ color: fill }}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ size={size}
+ style={{ color: fill }}>
<g transform="matrix(0.870918,0,0,0.870918,0.978227,0.978227)">
<path d="M15.9,7.8L8.2,0.1C8.1,0 7.9,0 7.8,0.1L0.1,7.8C0,7.9 0,8.1 0.1,8.2C0.2,8.3 0.2,8.3 0.3,8.3L2.2,8.3L2.2,15.8C2.2,15.9 2.2,15.9 2.3,16C2.3,16 2.4,16.1 2.5,16.1L6.2,16.1C6.3,16.1 6.5,16 6.5,15.8L6.5,10.5L9.7,10.5L9.7,15.8C9.7,15.9 9.8,16.1 10,16.1L13.7,16.1C13.8,16.1 14,16 14,15.8L14,8.2L15.9,8.2C16,8.2 16,8.2 16.1,8.1C16,8 16.1,7.9 15.9,7.8Z" />
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/HouseIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/HouseIcon.tsx
new file mode 100644
index 00000000000..b36952992cc
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/HouseIcon.tsx
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+
+export default function HouseIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M13.002 8.848v4.168a.56.56 0 0 1-.556.555H9.11v-3.334H6.89v3.334H3.554a.56.56 0 0 1-.556-.555V8.848c0-.018.01-.035.01-.052L8 4.68l4.993 4.116c.009.017.009.034.009.052zm1.936-.6l-.538.643a.289.289 0 0 1-.183.096h-.026a.273.273 0 0 1-.182-.061L8 3.916l-6.009 5.01a.297.297 0 0 1-.208.06.289.289 0 0 1-.183-.095l-.538-.642a.285.285 0 0 1 .035-.391L7.34 2.656a1.07 1.07 0 0 1 1.32 0l2.119 1.772V2.735c0-.157.121-.278.278-.278h1.667c.156 0 .278.121.278.278v3.542l1.901 1.58c.113.096.13.279.035.392z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/types.ts b/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
index e196f63db86..40a3f9ccdaa 100644
--- a/server/sonar-web/src/main/js/components/icons-components/types.ts
+++ b/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
@@ -17,8 +17,54 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
+import * as React from 'react';
+
export interface IconProps {
className?: string;
fill?: string;
size?: number;
}
+
+interface Props {
+ children: React.ReactElement<any>;
+ className?: string;
+ size?: number;
+ style?: React.CSSProperties;
+
+ // try to avoid using these:
+ width?: number;
+ height?: number;
+ viewBox?: string;
+}
+
+export default function Icon({
+ children,
+ className,
+ size = 16,
+ style,
+ height = size,
+ width = size,
+ viewBox = '0 0 16 16',
+ ...other
+}: Props) {
+ return (
+ <svg
+ className={className}
+ height={height}
+ style={{
+ fillRule: 'evenodd',
+ clipRule: 'evenodd',
+ strokeLinejoin: 'round',
+ strokeMiterlimit: '1.41421',
+ ...style
+ }}
+ version="1.1"
+ viewBox={viewBox}
+ width={width}
+ xmlSpace="preserve"
+ xmlnsXlink="http://www.w3.org/1999/xlink"
+ {...other}>
+ {children}
+ </svg>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/LightBulbIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/LightBulbIcon.tsx
new file mode 100644
index 00000000000..27d99ab4f69
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/LightBulbIcon.tsx
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+
+export default function LightBulbIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M10.042 5.083a.3.3 0 0 1-.292.292.3.3 0 0 1-.292-.292c0-.629-.975-.875-1.458-.875a.3.3 0 0 1-.292-.291A.3.3 0 0 1 8 3.625c.848 0 2.042.447 2.042 1.458zm1.458 0c0-1.823-1.85-2.916-3.5-2.916S4.5 3.26 4.5 5.083c0 .584.237 1.194.62 1.641.173.2.373.392.556.602.647.774 1.194 1.686 1.285 2.716h2.078c.091-1.03.638-1.942 1.285-2.716.183-.21.383-.402.556-.602.383-.447.62-1.057.62-1.64zm1.167 0c0 .94-.31 1.75-.94 2.443-.628.693-1.457 1.668-1.53 2.643a.876.876 0 0 1 .428.748.852.852 0 0 1-.228.583.852.852 0 0 1 .228.583c0 .301-.155.575-.41.739a.89.89 0 0 1 .118.428c0 .592-.465.875-.993.875A1.479 1.479 0 0 1 8 15a1.479 1.479 0 0 1-1.34-.875c-.528 0-.993-.283-.993-.875 0-.146.045-.3.118-.428a.876.876 0 0 1-.41-.739c0-.218.082-.428.228-.583a.852.852 0 0 1-.228-.583c0-.301.164-.593.428-.748-.073-.975-.902-1.95-1.53-2.643a3.507 3.507 0 0 1-.94-2.443C3.333 2.604 5.694 1 8 1c2.306 0 4.667 1.604 4.667 4.083z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx
index 5950062776b..81846ab602e 100644
--- a/server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx
@@ -18,24 +18,17 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function LinkIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function LinkIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<g transform="matrix(0.823497,0,0,0.823497,1.47008,1.4122)">
<path
- style={{ fill }}
d="M13.501,11.429C13.501,11.191 13.418,10.989 13.251,10.822L11.394,8.965C11.227,8.798 11.025,8.715 10.787,8.715C10.537,8.715 10.323,8.81 10.144,9.001C10.162,9.019 10.219,9.074 10.314,9.166C10.409,9.258 10.473,9.322 10.506,9.358C10.539,9.394 10.583,9.451 10.64,9.528C10.697,9.605 10.735,9.681 10.756,9.756C10.777,9.831 10.787,9.913 10.787,10.002C10.787,10.24 10.704,10.442 10.537,10.609C10.37,10.776 10.168,10.859 9.93,10.859C9.841,10.859 9.759,10.849 9.684,10.828C9.609,10.807 9.533,10.769 9.456,10.712C9.379,10.655 9.322,10.611 9.286,10.578C9.25,10.545 9.186,10.481 9.094,10.386C9.002,10.291 8.947,10.234 8.929,10.216C8.732,10.401 8.634,10.618 8.634,10.868C8.634,11.106 8.717,11.308 8.884,11.475L10.723,13.323C10.884,13.484 11.086,13.564 11.33,13.564C11.568,13.564 11.77,13.487 11.937,13.332L13.25,12.028C13.417,11.861 13.5,11.662 13.5,11.43L13.501,11.429ZM7.224,5.134C7.224,4.896 7.141,4.694 6.974,4.527L5.135,2.679C4.968,2.512 4.766,2.429 4.528,2.429C4.296,2.429 4.094,2.509 3.921,2.67L2.608,3.974C2.441,4.141 2.358,4.34 2.358,4.572C2.358,4.81 2.441,5.012 2.608,5.179L4.465,7.036C4.626,7.197 4.828,7.277 5.072,7.277C5.322,7.277 5.536,7.185 5.715,7C5.697,6.982 5.64,6.927 5.545,6.835C5.45,6.743 5.386,6.679 5.353,6.643C5.32,6.607 5.276,6.55 5.219,6.473C5.162,6.396 5.124,6.32 5.103,6.245C5.082,6.17 5.072,6.088 5.072,5.999C5.072,5.761 5.155,5.559 5.322,5.392C5.489,5.225 5.691,5.142 5.929,5.142C6.018,5.142 6.1,5.152 6.175,5.173C6.25,5.194 6.326,5.232 6.403,5.289C6.48,5.346 6.537,5.39 6.573,5.423C6.609,5.456 6.673,5.52 6.765,5.615C6.857,5.71 6.912,5.767 6.93,5.785C7.127,5.6 7.225,5.383 7.225,5.133L7.224,5.134ZM15.215,11.429C15.215,12.143 14.962,12.747 14.456,13.242L13.143,14.546C12.649,15.04 12.045,15.287 11.33,15.287C10.61,15.287 10.003,15.034 9.509,14.528L7.67,12.68C7.176,12.186 6.929,11.582 6.929,10.867C6.929,10.135 7.191,9.513 7.715,9.001L6.929,8.215C6.417,8.739 5.798,9.001 5.072,9.001C4.358,9.001 3.751,8.751 3.251,8.251L1.394,6.394C0.894,5.894 0.644,5.287 0.644,4.573C0.644,3.859 0.897,3.255 1.403,2.76L2.716,1.456C3.21,0.962 3.814,0.715 4.529,0.715C5.249,0.715 5.856,0.968 6.35,1.474L8.189,3.322C8.683,3.816 8.93,4.42 8.93,5.135C8.93,5.867 8.668,6.489 8.144,7.001L8.93,7.787C9.442,7.263 10.061,7.001 10.787,7.001C11.501,7.001 12.108,7.251 12.608,7.751L14.465,9.608C14.965,10.108 15.215,10.715 15.215,11.429L15.215,11.429Z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx
index 3c85e521d83..55afd722eda 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function ListIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function ListIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M15.045 11.526v1.007q0 0.204-0.149 0.354t-0.354 0.149h-13.084q-0.204 0-0.354-0.149t-0.149-0.354v-1.006q0-0.204 0.149-0.354t0.354-0.149h13.084q0.204 0 0.354 0.149t0.149 0.354zM15.045 8.506v1.006q0 0.204-0.149 0.354t-0.354 0.149h-13.084q-0.204 0-0.354-0.149t-0.149-0.354v-1.006q0-0.204 0.149-0.354t0.354-0.149h13.084q0.204 0 0.354 0.149t0.149 0.354zM15.045 5.487v1.006q0 0.204-0.149 0.354t-0.354 0.149h-13.084q-0.204 0-0.354-0.149t-0.149-0.354v-1.006q0-0.204 0.149-0.354t0.354-0.149h13.084q0.204 0 0.354 0.149t0.149 0.354zM15.045 2.468v1.006q0 0.204-0.149 0.354t-0.354 0.149h-13.084q-0.204 0-0.354-0.149t-0.149-0.354v-1.006q0-0.204 0.149-0.354t0.354-0.149h13.084q0.204 0 0.354 0.149t0.149 0.354z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/shared/StatusIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/LockIcon.tsx
index d043b034406..a6dd2bd0112 100644
--- a/server/sonar-web/src/main/js/components/shared/StatusIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/LockIcon.tsx
@@ -18,13 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import Icon, { IconProps } from './Icon';
-interface Props {
- className?: string;
- status: string;
-}
-
-export default function StatusIcon({ className, status }: Props) {
- return <i className={classNames('icon-status-' + status.toLowerCase(), className)} />;
+export default function LockIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M5.455 7.364h5.09v-1.91A2.55 2.55 0 0 0 8 2.91a2.55 2.55 0 0 0-2.545 2.546v1.909zm8.272.954v5.727a.955.955 0 0 1-.954.955H3.227a.955.955 0 0 1-.954-.955V8.318c0-.527.427-.954.954-.954h.318v-1.91C3.545 3.01 5.554 1 8 1s4.455 2.009 4.455 4.455v1.909h.318c.527 0 .954.427.954.954z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx
index fe6793ba85b..50193a76d75 100644
--- a/server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx
@@ -18,29 +18,18 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function LongLivingBranchIcon({
- className,
- fill = theme.blue,
- size = 16
-}: IconProps) {
+export default function LongLivingBranchIcon({ className, fill = theme.blue, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<g transform="translate(5, 0)">
<path
- style={{ fill }}
d="M4.5 8c0-.9-.6-1.7-1.5-1.9V4c.9-.2 1.5-1 1.5-1.9 0-1.1-.9-2-2-2s-2 .9-2 2C.5 3 1.1 3.8 2 4v2.1C1.1 6.3.5 7.1.5 8s.6 1.7 1.5 2v2.1c-.9.2-1.5 1-1.5 1.9 0 1.1.9 2 2 2s2-.9 2-2c0-.9-.6-1.7-1.5-1.9V10c.9-.3 1.5-1 1.5-2zm-3-5.9c0-.6.4-1 1-1s1 .4 1 1-.4 1-1 1-1-.5-1-1zm0 5.9c0-.6.4-1 1-1s1 .4 1 1-.4 1-1 1-1-.4-1-1zm2 6c0 .6-.4 1-1 1s-1-.4-1-1 .4-1 1-1 1 .5 1 1z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx
index 4478239ddf1..f891acbe2bf 100644
--- a/server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function MinimizeIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function MinimizeIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M14 12.1v1.267c0 .176-.08.325-.239.448a.918.918 0 0 1-.58.185H2.819a.918.918 0 0 1-.58-.185C2.08 13.692 2 13.543 2 13.367V12.1c0-.176.08-.326.239-.449a.918.918 0 0 1 .58-.185h10.363c.227 0 .42.062.58.185.158.123.238.273.238.449z"
style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx
index a42f3285601..a3fd0dd23ab 100644
--- a/server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import { IconProps } from './Icon';
import ChevronDownIcon from './ChevronDownIcon';
import ChevronRightIcon from './ChevronRightcon';
diff --git a/server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx
index fbf7564f505..d07b45f45f9 100644
--- a/server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx
@@ -18,25 +18,18 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function PendingIcon({ className, fill = theme.gray67, size = 16 }: IconProps) {
+export default function PendingIcon({ className, fill = theme.gray67, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<g transform="matrix(0.0364583,0,0,0.0364583,1,-0.166667)">
<path
- style={{ fill }}
d="M224,136L224,248C224,250.333 223.25,252.25 221.75,253.75C220.25,255.25 218.333,256 216,256L136,256C133.667,256 131.75,255.25 130.25,253.75C128.75,252.25 128,250.333 128,248L128,232C128,229.667 128.75,227.75 130.25,226.25C131.75,224.75 133.667,224 136,224L192,224L192,136C192,133.667 192.75,131.75 194.25,130.25C195.75,128.75 197.667,128 200,128L216,128C218.333,128 220.25,128.75 221.75,130.25C223.25,131.75 224,133.667 224,136ZM328,224C328,199.333 321.917,176.583 309.75,155.75C297.583,134.917 281.083,118.417 260.25,106.25C239.417,94.083 216.667,88 192,88C167.333,88 144.583,94.083 123.75,106.25C102.917,118.417 86.417,134.917 74.25,155.75C62.083,176.583 56,199.333 56,224C56,248.667 62.083,271.417 74.25,292.25C86.417,313.083 102.917,329.583 123.75,341.75C144.583,353.917 167.333,360 192,360C216.667,360 239.417,353.917 260.25,341.75C281.083,329.583 297.583,313.083 309.75,292.25C321.917,271.417 328,248.667 328,224ZM384,224C384,258.833 375.417,290.958 358.25,320.375C341.083,349.792 317.792,373.083 288.375,390.25C258.958,407.417 226.833,416 192,416C157.167,416 125.042,407.417 95.625,390.25C66.208,373.083 42.917,349.792 25.75,320.375C8.583,290.958 0,258.833 0,224C0,189.167 8.583,157.042 25.75,127.625C42.917,98.208 66.208,74.917 95.625,57.75C125.042,40.583 157.167,32 192,32C226.833,32 258.958,40.583 288.375,57.75C317.792,74.917 341.083,98.208 358.25,127.625C375.417,157.042 384,189.167 384,224Z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx
index 3e83487feeb..7411e56edd2 100644
--- a/server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function PinIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function PinIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M7.25 7.25v-3.5a.243.243 0 0 0-.07-.18A.243.243 0 0 0 7 3.5a.243.243 0 0 0-.18.07.243.243 0 0 0-.07.18v3.5c0 .073.023.133.07.18.047.047.107.07.18.07a.243.243 0 0 0 .18-.07.243.243 0 0 0 .07-.18zM12.5 10a.482.482 0 0 1-.148.352.482.482 0 0 1-.352.148H8.648l-.398 3.773a.29.29 0 0 1-.082.161.219.219 0 0 1-.16.066H8c-.141 0-.224-.07-.25-.211L7.156 10.5H4a.482.482 0 0 1-.352-.148A.482.482 0 0 1 3.5 10c0-.641.204-1.217.613-1.73.409-.513.871-.77 1.387-.77v-4a.96.96 0 0 1-.703-.297A.96.96 0 0 1 4.5 2.5a.96.96 0 0 1 .297-.703A.96.96 0 0 1 5.5 1.5h5a.96.96 0 0 1 .703.297.96.96 0 0 1 .297.703.96.96 0 0 1-.297.703.96.96 0 0 1-.703.297v4c.516 0 .978.257 1.387.77.409.513.613 1.089.613 1.73z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx
index eb529b71d77..f9ae7c4f614 100644
--- a/server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function PlusCircleIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function PlusCircleIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- height={size}
- version="1.1"
- viewBox="0 0 16 16"
- width={size}
- xmlSpace="preserve"
- xmlnsXlink="http://www.w3.org/1999/xlink">
+ <Icon className={className} size={size}>
<path
d="M8 1c3.863 0 7 3.137 7 7s-3.137 7-7 7-7-3.137-7-7 3.137-7 7-7zm3.726 7.985A.274.274 0 0 0 12 8.711V7.289a.274.274 0 0 0-.274-.274H8.985V4.274A.274.274 0 0 0 8.711 4H7.289a.274.274 0 0 0-.274.274v2.741H4.274A.274.274 0 0 0 4 7.289v1.422c0 .152.123.274.274.274h2.741v2.741c0 .151.122.274.274.274h1.422a.274.274 0 0 0 .274-.274V8.985h2.741z"
style={{ fill }}
- />;
- </svg>
+ />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx
index 50330780a4c..4e0f9cefa82 100644
--- a/server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx
@@ -18,19 +18,12 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function PlusIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function PlusIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
- <path style={{ fill }} d="M1,7L7,7L7,1L9,1L9,7L15,7L15,9L9,9L9,15L7,15L7,9L1,9L1,7Z" />
- </svg>
+ <Icon className={className} size={size}>
+ <path d="M1,7L7,7L7,1L9,1L9,7L15,7L15,9L9,9L9,15L7,15L7,9L1,9L1,7Z" style={{ fill }} />
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx
index 514073bf3d1..4f792b767e2 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
+import Icon, { IconProps } from './Icon';
-interface Props {
- className?: string;
- size?: number;
-}
-
-export default function ProjectEventIcon({ className, size = 14 }: Props) {
+export default function ProjectEventIcon({ className, fill = '#fff', size = 14 }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill: '#fff', stroke: 'currentColor', strokeWidth: '2px' }}
d="M8 2 L14 8 L8 14 L2 8 L8 2 L14 8"
+ style={{ fill, stroke: 'currentColor', strokeWidth: '2px' }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ProjectLinkIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ProjectLinkIcon.tsx
new file mode 100644
index 00000000000..0c5e362ade9
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/ProjectLinkIcon.tsx
@@ -0,0 +1,45 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import { IconProps } from './Icon';
+import BugTrackerIcon from './BugTrackerIcon';
+import HouseIcon from './HouseIcon';
+import ContinuousIntegrationIcon from './ContinuousIntegrationIcon';
+import SCMIcon from './SCMIcon';
+import DetachIcon from './DetachIcon';
+
+interface ProjectLinkIconProps {
+ type: string;
+}
+
+export default function ProjectLinkIcon({ type, ...props }: IconProps & ProjectLinkIconProps) {
+ switch (type) {
+ case 'issue':
+ return <BugTrackerIcon {...props} />;
+ case 'homepage':
+ return <HouseIcon {...props} />;
+ case 'ci':
+ return <ContinuousIntegrationIcon {...props} />;
+ case 'scm':
+ return <SCMIcon {...props} />;
+ default:
+ return <DetachIcon {...props} />;
+ }
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx
index 0e7571a54dc..2d210aa9fa1 100644
--- a/server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx
@@ -18,24 +18,16 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function PullRequestIcon({ className, fill = theme.blue, size = 16 }: IconProps) {
+export default function PullRequestIcon({ className, fill = theme.blue, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve"
- style={{ fillRule: 'evenodd' }}>
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M13,11.9L13,5.5C13,5.4 13.232,1.996 7.9,2L9.1,0.8L8.5,0.1L5.9,2.6L8.5,5.1L9.2,4.4L7.905,3.008C12.256,2.99 12,5.4 12,5.5L12,11.9C11.1,12.1 10.5,12.9 10.5,13.8C10.5,14.9 11.4,15.8 12.5,15.8C13.6,15.8 14.5,14.9 14.5,13.8C14.5,12.9 13.9,12.2 13,11.9ZM4,11.9C4.9,12.2 5.5,12.9 5.5,13.8C5.5,14.9 4.6,15.8 3.5,15.8C2.4,15.8 1.5,14.9 1.5,13.8C1.5,12.9 2.1,12.1 3,11.9L3,4.1C2.1,3.9 1.5,3.1 1.5,2.2C1.5,1.1 2.4,0.2 3.5,0.2C4.6,0.2 5.5,1.1 5.5,2.2C5.5,3.1 4.9,3.9 4,4.1L4,11.9ZM12.5,14.9C11.9,14.9 11.5,14.5 11.5,13.9C11.5,13.3 11.9,12.9 12.5,12.9C13.1,12.9 13.5,13.3 13.5,13.9C13.5,14.5 13.1,14.9 12.5,14.9ZM3.5,14.9C2.9,14.9 2.5,14.5 2.5,13.9C2.5,13.3 2.9,12.9 3.5,12.9C4.1,12.9 4.5,13.3 4.5,13.9C4.5,14.5 4.1,14.9 3.5,14.9ZM2.5,2.2C2.5,1.6 2.9,1.2 3.5,1.2C4.1,1.2 4.5,1.6 4.5,2.2C4.5,2.8 4.1,3.2 3.5,3.2C2.9,3.2 2.5,2.8 2.5,2.2Z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.js b/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.js
deleted file mode 100644
index f050ca071b4..00000000000
--- a/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.js
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2018 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-// @flow
-import React from 'react';
-
-const DEFAULT_COLOR = '#2D88C0';
-
-const ICONS /*: Object */ = {
- dir: (color = '#F90') => (
- <path
- fill={color}
- strokeLinejoin="round"
- d="M14 12.286V5.703c0-.198-.058-.36-.195-.5S13.512 5 13.315 5H6.704c-.196 0-.36-.075-.5-.214-.136-.14-.203-.312-.203-.51v-.57c0-.2-.07-.363-.207-.502C5.655 3.064 5.487 3 5.29 3H2.707c-.196 0-.363.065-.5.204-.137.14-.206.302-.206.5v8.582c0 .2.07.367.206.506.137.14.304.208.5.208h10.61c.196 0 .352-.07.49-.208.137-.14.194-.307.194-.506zm1-6.598v6.65c0 .458-.152.83-.475 1.16-.324.326-.7.502-1.15.502H2.647c-.452 0-.84-.175-1.162-.503-.324-.328-.486-.7-.486-1.158V3.654c0-.457.162-.842.486-1.17C1.81 2.158 2.196 2 2.648 2h2.7c.45 0 .84.157 1.164.485.324.328.488.714.488 1.17V4h6.373c.452 0 .83.174 1.152.5.323.33.475.73.475 1.187z"
- />
- ),
- trk: (color = DEFAULT_COLOR) => (
- <path
- fill={color}
- strokeLinejoin="round"
- d="M14.985 13.988L1 14.005 1.02 5h13.966v8.988zM1.998 5.995l.006 7.02L14.022 13 14 6.004l-12.002-.01zM3 4.5V4h9.996l.004.5h1l-.005-1.497-11.98.003L2 4.5zm1-2v-.504h8.002L12 2.5h1l-.004-1.495H3.003L3 2.5z"
- />
- ),
- brc: (color = DEFAULT_COLOR) => (
- <g fill={color}>
- <path d="M16 16H6v-6h10v6zm-9-1h8v-4H7v4zM7 9h8v1H7zM8 8h6v1H8z" />
- <path d="M5 12H1V5h12v2h1V4H0v9h5zM3 1h8v.5h1V0H2v1.5h1zM2 3h10v.5h1V2H1v1.5h1z" />
- </g>
- ),
- uts: (color = DEFAULT_COLOR) => (
- <g fill={color}>
- <path d="M3 14h10V6H9V2H3zm7.012-9h3.008c-.012-.674-.78-1.258-1.27-1.752-.488-.495-.973-1.243-1.75-1.24v2.96zM14 4.995V15H2V1l7.997.02c1.013-.03 1.57.893 2.239 1.555.667.663 1.75 1.47 1.763 2.42z" />
- <path d="M7 8l-3 2.5L7 13zM8 13l3-2.5L8 8z" />
- </g>
- ),
- fil: (color = DEFAULT_COLOR) => (
- <g fill={color}>
- <path d="M3 14h10v-8h-4v-4h-6zM10.012 5h3.008c-0.012-0.674-0.78-1.258-1.27-1.752-0.488-0.495-0.973-1.243-1.75-1.24v2.96zM14 4.995v10.005h-12v-14l7.997 0.020c1.013-0.030 1.57 0.893 2.239 1.555 0.667 0.663 1.75 1.47 1.763 2.42z" />
- <path d="M4 11h8v1h-8zM4 9h8v1h-8z" />
- </g>
- ),
- lib: (color = DEFAULT_COLOR) => (
- <path
- fill={color}
- strokeLinejoin="round"
- d="M1 13h4V3H1zm3-1H2v-2h2v2zM2 4h2v4H2zM6 13h4V3H6zm3-1H7v-2h2v2zM7 4h2v4H7zM11 13h4V3h-4zm3-1h-2v-2h2v2zm-2-8h2v4h-2z"
- />
- ),
- vw: (color = DEFAULT_COLOR) => (
- <g fill={color} fillRule="evenodd" strokeLinejoin="round">
- <path d="M1.016 14.97V1.015H14.97V14.97H1.015zm1-1H13.97V2.015H2.015V13.97z" />
- <path d="M3.006 7V3.006H7V7H3.006zm1-1H6V4.006H4.006V6zM9 7V3.015h3.985V7H9zm1-1h1.985V4.015H10V6zM3.004 12.996V9H7v3.996H3.004zm1-1H6V10H4.004v1.996zM9 12.997V9h3.997v3.997H9zm1-1h1.997V10H10v1.997z" />
- </g>
- ),
- svw: (color = DEFAULT_COLOR) => (
- <g fill={color}>
- <path d="M13 7.2V1H1v12h7v1H0V0h14v7.2" />
- <path d="M2 6V2h4v4H2zm1-1h2V3H3v2zm5 1V2h4v4H8zm1-1h2V3H9v2zm-7 7V8h4v4H2zm1-1h2V9H3v2zM16 16H7V7h9v9zm-8-1h7V8H8v7z" />
- <path d="M9 9h2v2H9zM12 9h2v2h-2zM9 12h2v2H9zM12 12h2v2h-2z" />
- </g>
- ),
- dev: (color = DEFAULT_COLOR) => (
- <path
- fill={color}
- strokeLinejoin="round"
- d="M7.974 8.02c-.938 0-1.82-.36-2.482-1.017-.663-.655-1.028-1.527-1.028-2.455 0-.927.365-1.8 1.028-2.455.663-.656 1.544-1.017 2.482-1.017.937 0 1.82.36 2.482 1.017.662.656 1.027 1.528 1.027 2.455 0 .928-.365 1.8-1.027 2.455C9.793 7.66 8.91 8.02 7.974 8.02zm0-5.778c-1.286 0-2.332 1.034-2.332 2.306s1.046 2.307 2.332 2.307c1.285 0 2.332-1.035 2.332-2.307S9.258 2.242 7.974 2.242zm3.534 6.418c.127.016.243.045.348.086.17.066.302.146.406.246.132.124.253.282.36.47.126.218.226.442.3.668.08.253.15.535.206.838.056.313.095.604.113.867.02.28.03.57.03.862 0 .532-.174.758-.306.882-.142.132-.397.31-.973.31H3.948c-.233 0-.437-.03-.606-.09-.14-.05-.26-.123-.366-.222-.13-.123-.306-.35-.306-.88 0-.294.01-.584.03-.863.018-.263.056-.554.112-.867.055-.303.125-.585.207-.838.073-.226.173-.45.298-.667.108-.19.23-.347.36-.47.106-.1.238-.18.407-.247.105-.04.22-.07.348-.086.202.13.432.277.683.435.342.217.756.4 1.265.564.523.166 1.06.25 1.59.25.534 0 1.07-.084 1.592-.25.51-.164.923-.348 1.266-.565.25-.158.48-.304.682-.435zm-.244-1.18c-.055 0-.184.066-.387.196-.202.13-.43.276-.685.437-.255.16-.586.307-.994.437-.408.13-.818.196-1.23.196-.41 0-.82-.065-1.228-.196-.408-.13-.74-.276-.993-.437-.255-.16-.484-.306-.686-.437-.202-.13-.33-.196-.386-.196-.374 0-.716.06-1.026.183-.31.12-.572.283-.787.487-.213.203-.404.45-.57.737-.165.288-.297.584-.395.888-.098.303-.18.633-.244.988-.063.355-.106.685-.128.992-.02.306-.032.62-.032.942 0 .73.224 1.304.672 1.726.448.42 1.043.632 1.785.632h8.044c.743 0 1.34-.21 1.787-.633.447-.42.67-.996.67-1.725 0-.32-.01-.635-.03-.942-.022-.307-.065-.637-.13-.992-.064-.355-.146-.685-.244-.988-.098-.304-.23-.6-.395-.888-.166-.288-.356-.534-.57-.737-.216-.204-.478-.366-.788-.487-.31-.122-.652-.183-1.026-.183z"
- />
- ),
- app: (color = '#4A9ED5') => (
- <g fill="none" stroke={color} strokeMiterlimit={10}>
- <circle cx="3" cy="3" r="1.5" />
- <circle cx="8" cy="3" r="1.5" />
- <circle cx="13" cy="3" r="1.5" />
- <circle cx="3" cy="8" r="1.5" />
- <circle cx="8" cy="8" r="1.5" />
- <circle cx="13" cy="8" r="1.5" />
- <circle cx="3" cy="13" r="1.5" />
- <circle cx="8" cy="13" r="1.5" />
- <circle cx="13" cy="13" r="1.5" />
- </g>
- )
-};
-
-ICONS.pac = ICONS.dir;
-ICONS.dev_prj = ICONS.trk;
-ICONS.cla = ICONS.uts;
-
-/*:: type Props = { className?: string, color?: string, qualifier: string, size?: number }; */
-
-export default function QualifierIcon({ className, color, qualifier, size = 16 } /*: Props */) {
- const icon = ICONS[qualifier.toLowerCase()];
- if (!icon) {
- return null;
- }
-
- return (
- <svg
- xmlns="http://www.w3.org/2000/svg"
- className={className}
- height={size}
- width={size}
- viewBox="0 0 16 16">
- {icon(color)}
- </svg>
- );
-}
diff --git a/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.tsx
new file mode 100644
index 00000000000..0264d83d0cb
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/QualifierIcon.tsx
@@ -0,0 +1,166 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+import * as theme from '../../app/theme';
+
+const qualifierIcons: { [x: string]: (props: IconProps) => React.ReactElement<any> } = {
+ app: ApplicationIcon,
+ brc: SubProjectIcon,
+ dev: DeveloperIcon,
+ dir: DirectoryIcon,
+ fil: FileIcon,
+ svw: SubPortfolioIcon,
+ trk: ProjectIcon,
+ uts: UnitTestIcon,
+ vw: PortfolioIcon,
+
+ // deprecated:
+ cla: UnitTestIcon,
+ // eslint-disable-next-line camelcase
+ dev_prj: ProjectIcon,
+ lib: LibraryIcon,
+ pac: DirectoryIcon
+};
+
+interface QualifierIconProps {
+ className?: string;
+ qualifier: string | null | undefined;
+}
+
+export default function QualifierIcon(props: QualifierIconProps) {
+ if (!props.qualifier) {
+ return null;
+ }
+
+ const qualifier = props.qualifier.toLowerCase();
+ const FoundIcon = qualifierIcons[qualifier];
+ return FoundIcon ? <FoundIcon className={props.className} /> : null;
+}
+
+function ApplicationIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M3.014 10.986a2 2 0 1 1-.001 4.001 2 2 0 0 1 .001-4.001zm9.984 0a2 2 0 1 1-.001 4.001 2 2 0 0 1 .001-4.001zm-5.004-.021c1.103 0 2 .896 2 2s-.897 2-2 2a2 2 0 0 1 0-4zm-4.98 1.021a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm9.984 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-5.004-.021a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM2.984 6a2 2 0 1 1-.001 4.001A2 2 0 0 1 2.984 6zm9.984 0a2 2 0 1 1-.001 4.001A2 2 0 0 1 12.968 6zm-5.004-.021c1.103 0 2 .897 2 2a2 2 0 1 1-2-2zM2.984 7a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm9.984 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm-5.004-.021a1.001 1.001 0 0 1 0 2 1 1 0 0 1 0-2zM3 1.025a2 2 0 1 1-.001 4.001A2 2 0 0 1 3 1.025zm9.984 0a2 2 0 1 1-.001 4.001 2 2 0 0 1 .001-4.001zM7.98 1.004c1.103 0 2 .896 2 2s-.897 2-2 2a2 2 0 0 1 0-4zM3 2.025a1 1 0 1 1 0 2 1 1 0 0 1 0-2zm9.984 0a1 1 0 1 1 0 2 1 1 0 0 1 0-2zM7.98 2.004a1.001 1.001 0 0 1 0 2 1 1 0 0 1 0-2z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function DeveloperIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M7.974 8.02a3.5 3.5 0 0 1-2.482-1.017 3.428 3.428 0 0 1-1.028-2.455c0-.927.365-1.8 1.028-2.455a3.505 3.505 0 0 1 2.482-1.017 3.5 3.5 0 0 1 2.482 1.017 3.434 3.434 0 0 1 1.027 2.455c0 .928-.365 1.8-1.027 2.455A3.504 3.504 0 0 1 7.974 8.02zm0-5.778c-1.286 0-2.332 1.034-2.332 2.306s1.046 2.307 2.332 2.307c1.285 0 2.332-1.035 2.332-2.307S9.258 2.242 7.974 2.242zm3.534 6.418c.127.016.243.045.348.086.17.066.302.146.406.246.132.124.253.282.36.47.126.218.226.442.3.668.08.253.15.535.206.838.056.313.095.604.113.867.02.28.03.57.03.862 0 .532-.174.758-.306.882-.142.132-.397.31-.973.31H3.948c-.233 0-.437-.03-.606-.09-.14-.05-.26-.123-.366-.222-.13-.123-.306-.35-.306-.88 0-.294.01-.584.03-.863.018-.263.056-.554.112-.867a6.5 6.5 0 0 1 .207-.838c.073-.226.173-.45.298-.667.108-.19.23-.347.36-.47.106-.1.238-.18.407-.247.105-.04.22-.07.348-.086.202.13.432.277.683.435.342.217.756.4 1.265.564.523.166 1.06.25 1.59.25a5.25 5.25 0 0 0 1.592-.25c.51-.164.923-.348 1.266-.565.25-.158.48-.304.682-.435l-.002.002zm-.244-1.18c-.055 0-.184.066-.387.196-.202.13-.43.276-.685.437-.255.16-.586.307-.994.437-.408.13-.818.196-1.23.196-.41 0-.82-.065-1.228-.196a4.303 4.303 0 0 1-.993-.437c-.255-.16-.484-.306-.686-.437-.202-.13-.33-.196-.386-.196-.374 0-.716.06-1.026.183-.31.12-.572.283-.787.487a3.28 3.28 0 0 0-.57.737 4.662 4.662 0 0 0-.395.888c-.098.303-.18.633-.244.988a9.652 9.652 0 0 0-.128.992c-.02.306-.032.62-.032.942 0 .73.224 1.304.672 1.726.448.42 1.043.632 1.785.632h8.044c.743 0 1.34-.21 1.787-.633.447-.42.67-.996.67-1.725 0-.32-.01-.635-.03-.942a9.159 9.159 0 0 0-.374-1.98c-.098-.304-.23-.6-.395-.888a3.23 3.23 0 0 0-.57-.737 2.404 2.404 0 0 0-.788-.487 2.779 2.779 0 0 0-1.026-.183h-.004z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function DirectoryIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14 12.286V5.703a.673.673 0 0 0-.195-.5.644.644 0 0 0-.49-.203H6.704a.686.686 0 0 1-.5-.214.707.707 0 0 1-.203-.51v-.57c0-.2-.07-.363-.207-.502A.679.679 0 0 0 5.29 3H2.707a.672.672 0 0 0-.5.204.683.683 0 0 0-.206.5v8.582c0 .2.07.367.206.506.137.14.304.208.5.208h10.61a.66.66 0 0 0 .49-.208.685.685 0 0 0 .194-.506H14zm1-6.598v6.65c0 .458-.152.83-.475 1.16-.324.326-.7.502-1.15.502H2.647c-.452 0-.84-.175-1.162-.503a1.572 1.572 0 0 1-.486-1.158V3.654a1.6 1.6 0 0 1 .486-1.17A1.578 1.578 0 0 1 2.648 2h2.7c.45 0 .84.157 1.164.485.324.328.488.714.488 1.17V4h6.373c.452 0 .83.174 1.152.5.323.33.475.73.475 1.187v.001z"
+ style={{ fill: theme.orange }}
+ />
+ </Icon>
+ );
+}
+
+function FileIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14 15H2V1l7.997.02c1 .034 1.759.758 2.428 1.42.667.663 1.561 1.605 1.574 2.555H14V15zM9 2H3v12h10V6H9V2zm3 10H4v-1h8v1zm0-2H4V9h8v1zm-1.988-5h3.008c-.012-.674-.714-1.443-1.204-1.937-.488-.495-1.039-1.058-1.816-1.055v2.96l.012.032z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function LibraryIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M1 13h4V3H1v10zm3-1H2v-2h2v2zM2 4h2v4H2V4zm4 9h4V3H6v10zm3-1H7v-2h2v2zM7 4h2v4H7V4zm4 9h4V3h-4v10zm3-1h-2v-2h2v2zm-2-8h2v4h-2V4z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function PortfolioIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14.97 14.97H1.016V1.015H14.97V14.97zm-1-12.955H2.015V13.97H13.97V2.015zm-.973 10.982H9V9h3.997v3.997zM7 12.996H3.004V9H7v3.996zM11.997 10H10v1.997h1.997V10zM6 10H4.004v1.996H6V10zm1-3H3.006V3.006H7V7zm5.985 0H9V3.015h3.985V7zM6 4.006H4.006V6H6V4.006zm5.985.009H10V6h1.985V4.015z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function ProjectIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14.985 13.988L1 14.005 1.02 5h13.966v8.988h-.001zM1.998 5.995l.006 7.02L14.022 13 14 6.004l-12.002-.01v.001zM3 4.5V4h9.996l.004.5h1l-.005-1.497-11.98.003L2 4.5h1zm1-2v-.504h8.002L12 2.5h1l-.004-1.495H3.003L3 2.5h1z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function SubPortfolioIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14 7h2v9H7v-2H0V0h14v7zM8 8v7h7V8H8zm3 6H9v-2h2v2zm3 0h-2v-2h2v2zm-1-7V1H1v12h6V7h6zm-7 5H2V8h4v4zm5-1H9V9h2v2zm3 0h-2V9h2v2zM5 9H3v2h2V9zm1-3H2V2h4v4zm6 0H8V2h4v4zM5 3H3v2h2V3zm6 0H9v2h2V3z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function SubProjectIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 9V8h6v1h1v1h1v6H6v-6h1V9h1zm7 2H7v4h8v-4zm-1-7v3h-1V5H1v7h4v1H0V4h14zm-1-2v1.5h-1V3H2v.5H1V2h12zm-1-2v1.5h-1V1H3v.5H2V0h10z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function UnitTestIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14 15H2V1l7.997.02c1.013-.03 1.57.893 2.239 1.555.667.663 1.75 1.47 1.763 2.42H14V15zM9 2H3v12h10V6H9V2zM7 8l-3 2.5L7 13V8zm1 5l3-2.5L8 8v5zm2.012-8h3.008c-.012-.674-.78-1.258-1.27-1.752-.488-.495-.973-1.243-1.75-1.24v2.96l.012.032z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx
index 27dcdc277e7..d2ab349753a 100644
--- a/server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function RuleScopeIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function RuleScopeIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M8 3.071c2.724 0 4.929 2.204 4.929 4.929s-2.204 4.929-4.929 4.929c-2.724 0-4.929-2.204-4.929-4.929s2.204-4.929 4.929-4.929zM8 1.357c-3.669 0-6.643 2.974-6.643 6.643s2.974 6.643 6.643 6.643 6.643-2.974 6.643-6.643-2.974-6.643-6.643-6.643zM8 6.286c0.945 0 1.714 0.769 1.714 1.714s-0.769 1.714-1.714 1.714-1.714-0.769-1.714-1.714 0.769-1.714 1.714-1.714zM8 4.571c-1.893 0-3.429 1.535-3.429 3.429s1.535 3.429 3.429 3.429 3.429-1.535 3.429-3.429-1.535-3.429-3.429-3.429z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SCMIcon.tsx
index c54fca5654b..c408f56ce55 100644
--- a/server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/SCMIcon.tsx
@@ -18,13 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import * as classNames from 'classnames';
+import Icon, { IconProps } from './Icon';
-interface Props {
- className?: string;
- status: string;
-}
-
-export default function TestStatusIcon({ className, status }: Props) {
- return <i className={classNames('icon-test-status-' + status.toLowerCase(), className)} />;
+export default function SCMIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M12.557 4.545c.241.247.443.743.443 1.098v7.714c0 .355-.28.643-.625.643h-8.75A.634.634 0 0 1 3 13.357V2.643C3 2.288 3.28 2 3.625 2h5.833c.345 0 .827.208 1.068.455l2.031 2.09zM9.667 2.91v2.518h2.448a.86.86 0 0 0-.144-.275L9.934 3.058a.823.823 0 0 0-.267-.147zm2.5 10.232V6.286H9.458a.634.634 0 0 1-.625-.643V2.857h-5v10.286h8.334z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx
index 17e4141a1aa..c4d5995c872 100644
--- a/server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function SearchIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function SearchIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M10.308 7.077c0-.89-.316-1.65-.949-2.283a3.111 3.111 0 0 0-2.282-.948c-.89 0-1.65.316-2.283.948a3.111 3.111 0 0 0-.948 2.283c0 .89.316 1.65.948 2.282a3.111 3.111 0 0 0 2.283.949c.89 0 1.65-.316 2.282-.949a3.111 3.111 0 0 0 .949-2.282zm3.692 6c0 .25-.091.466-.274.649a.887.887 0 0 1-.65.274.857.857 0 0 1-.648-.274L9.954 11.26c-.86.596-1.82.894-2.877.894a4.989 4.989 0 0 1-1.972-.4 5.076 5.076 0 0 1-1.623-1.082A5.076 5.076 0 0 1 2.4 9.049 4.989 4.989 0 0 1 2 7.077c0-.688.133-1.345.4-1.972a5.076 5.076 0 0 1 1.082-1.623A5.076 5.076 0 0 1 5.105 2.4 4.989 4.989 0 0 1 7.077 2c.687 0 1.345.133 1.972.4a5.076 5.076 0 0 1 1.623 1.082c.454.454.815.995 1.082 1.623.266.627.4 1.284.4 1.972a4.938 4.938 0 0 1-.894 2.877l2.473 2.474a.883.883 0 0 1 .267.649z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx
index 4c14f717d3d..7aa92495d6e 100644
--- a/server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx
@@ -18,24 +18,17 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
export default function SettingsIcon({ className, fill = 'currentColor', size = 14 }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 14 14"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size} viewBox="0 0 14 14">
<g transform="matrix(0.0364583,0,0,0.0364583,0,-1.16667)">
<path
- style={{ fill }}
d="M256,224C256,206.333 249.75,191.25 237.25,178.75C224.75,166.25 209.667,160 192,160C174.333,160 159.25,166.25 146.75,178.75C134.25,191.25 128,206.333 128,224C128,241.667 134.25,256.75 146.75,269.25C159.25,281.75 174.333,288 192,288C209.667,288 224.75,281.75 237.25,269.25C249.75,256.75 256,241.667 256,224ZM384,196.75L384,252.25C384,254.25 383.333,256.167 382,258C380.667,259.833 379,260.917 377,261.25L330.75,268.25C327.583,277.25 324.333,284.833 321,291C326.833,299.333 335.75,310.833 347.75,325.5C349.417,327.5 350.25,329.583 350.25,331.75C350.25,333.917 349.5,335.833 348,337.5C343.5,343.667 335.25,352.667 323.25,364.5C311.25,376.333 303.417,382.25 299.75,382.25C297.75,382.25 295.583,381.5 293.25,380L258.75,353C251.417,356.833 243.833,360 236,362.5C233.333,385.167 230.917,400.667 228.75,409C227.583,413.667 224.583,416 219.75,416L164.25,416C161.917,416 159.875,415.292 158.125,413.875C156.375,412.458 155.417,410.667 155.25,408.5L148.25,362.5C140.083,359.833 132.583,356.75 125.75,353.25L90.5,380C88.833,381.5 86.75,382.25 84.25,382.25C81.917,382.25 79.833,381.333 78,379.5C57,360.5 43.25,346.5 36.75,337.5C35.583,335.833 35,333.917 35,331.75C35,329.75 35.667,327.833 37,326C39.5,322.5 43.75,316.958 49.75,309.375C55.75,301.792 60.25,295.917 63.25,291.75C58.75,283.417 55.333,275.167 53,267L7.25,260.25C5.083,259.917 3.333,258.875 2,257.125C0.667,255.375 0,253.417 0,251.25L0,195.75C0,193.75 0.667,191.833 2,190C3.333,188.167 4.917,187.083 6.75,186.75L53.25,179.75C55.583,172.083 58.833,164.417 63,156.75C56.333,147.25 47.417,135.75 36.25,122.25C34.583,120.25 33.75,118.25 33.75,116.25C33.75,114.583 34.5,112.667 36,110.5C40.333,104.5 48.542,95.542 60.625,83.625C72.708,71.708 80.583,65.75 84.25,65.75C86.417,65.75 88.583,66.583 90.75,68.25L125.25,95C132.583,91.167 140.167,88 148,85.5C150.667,62.833 153.083,47.333 155.25,39C156.417,34.333 159.417,32 164.25,32L219.75,32C222.083,32 224.125,32.708 225.875,34.125C227.625,35.542 228.583,37.333 228.75,39.5L235.75,85.5C243.917,88.167 251.417,91.25 258.25,94.75L293.75,68C295.25,66.5 297.25,65.75 299.75,65.75C301.917,65.75 304,66.583 306,68.25C327.5,88.083 341.25,102.25 347.25,110.75C348.417,112.083 349,113.917 349,116.25C349,118.25 348.333,120.167 347,122C344.5,125.5 340.25,131.042 334.25,138.625C328.25,146.208 323.75,152.083 320.75,156.25C325.083,164.583 328.5,172.75 331,180.75L376.75,187.75C378.917,188.083 380.667,189.125 382,190.875C383.333,192.625 384,194.583 384,196.75Z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/SeverityIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SeverityIcon.tsx
new file mode 100644
index 00000000000..f1c96f06a4c
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/SeverityIcon.tsx
@@ -0,0 +1,100 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+import * as theme from '../../app/theme';
+
+interface Props {
+ className?: string;
+ severity: string | null | undefined;
+}
+
+const severityIcons: { [x: string]: (props: IconProps) => React.ReactElement<any> } = {
+ blocker: BlockerSeverityIcon,
+ critical: CriticalSeverityIcon,
+ major: MajorSeverityIcon,
+ minor: MinorSeverityIcon,
+ info: InfoSeverityIcon
+};
+
+export default function SeverityIcon(props: Props) {
+ if (!props.severity) {
+ return null;
+ }
+
+ const severity = props.severity.toLowerCase();
+ const Icon = severityIcons[severity];
+ return Icon ? <Icon className={props.className} /> : null;
+}
+
+function BlockerSeverityIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 14c-3.311 0-6-2.689-6-6s2.689-6 6-6 6 2.689 6 6-2.689 6-6 6zM7 9h2V4H7v5zm0 3h2v-2H7v2z"
+ style={{ fill: theme.red, fillRule: 'nonzero' }}
+ />
+ </Icon>
+ );
+}
+
+function CriticalSeverityIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 2c3.311 0 6 2.689 6 6s-2.689 6-6 6-6-2.689-6-6 2.689-6 6-6zm1 10V7.414l1.893 1.893c.13.124.282.216.457.261a1.006 1.006 0 0 0 1.176-.591 1.01 1.01 0 0 0 .01-.729 1.052 1.052 0 0 0-.229-.355c-1.212-1.212-2.394-2.456-3.638-3.636a1.073 1.073 0 0 0-.169-.123 1.05 1.05 0 0 0-.448-.133h-.104a1.053 1.053 0 0 0-.493.16 1.212 1.212 0 0 0-.162.132C6.08 5.505 4.836 6.687 3.656 7.932a.994.994 0 0 0-.051 1.275c.208.271.548.42.888.389.198-.019.378-.098.535-.218.041-.035.04-.034.079-.071L7 7.414V12h2z"
+ style={{ fill: theme.red, fillRule: 'nonzero' }}
+ />
+ </Icon>
+ );
+}
+
+function MajorSeverityIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 2c3.311 0 6 2.689 6 6s-2.689 6-6 6-6-2.689-6-6 2.689-6 6-6zm.08 2.903c.071.008.14.019.208.039.138.042.26.114.37.205 1.244 1.146 2.426 2.357 3.639 3.536.1.103.181.218.234.352a1.01 1.01 0 0 1 .001.728 1.002 1.002 0 0 1-1.169.609 1.042 1.042 0 0 1-.46-.255L8 7.295l-2.903 2.822c-.039.036-.039.036-.08.07a1.002 1.002 0 0 1-1.604-.947c.032-.196.122-.37.253-.519C4.847 7.51 6.09 6.362 7.303 5.183c.052-.048.106-.093.167-.131a1.041 1.041 0 0 1 .61-.149z"
+ style={{ fill: theme.red }}
+ />
+ </Icon>
+ );
+}
+
+function MinorSeverityIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 2c3.311 0 6 2.689 6 6s-2.689 6-6 6-6-2.689-6-6 2.689-6 6-6zm1 6.586V4H7v4.586L5.107 6.693a1.178 1.178 0 0 0-.165-.134 1.041 1.041 0 0 0-.662-.152 1 1 0 0 0-.587 1.7c1.212 1.212 2.394 2.456 3.638 3.636.094.08.195.146.311.191a1.008 1.008 0 0 0 1.065-.227c1.213-1.212 2.457-2.394 3.637-3.639a.994.994 0 0 0 .051-1.275 1.012 1.012 0 0 0-.888-.389 1.041 1.041 0 0 0-.535.218c-.04.034-.04.034-.079.071L9 8.586z"
+ style={{ fill: theme.lightGreen }}
+ />
+ </Icon>
+ );
+}
+
+function InfoSeverityIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 2c3.311 0 6 2.689 6 6s-2.689 6-6 6-6-2.689-6-6 2.689-6 6-6zm1 5H7v5h2V7zm0-3H7v2h2V4z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx
index 6c41adff490..a8bfd92d526 100644
--- a/server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx
@@ -18,29 +18,18 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
import * as theme from '../../app/theme';
-export default function ShortLivingBranchIcon({
- className,
- fill = theme.blue,
- size = 16
-}: IconProps) {
+export default function ShortLivingBranchIcon({ className, fill = theme.blue, size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<g transform="translate(3, 0)">
<path
- style={{ fill }}
d="M9.5 6.5c0-1.1-.9-2-2-2s-2 .9-2 2c0 .8.5 1.5 1.2 1.8-.3.6-.7 1.1-1.2 1.4-.9.5-1.9.5-2.5.4V4c.9-.2 1.5-1 1.5-1.9 0-1.1-.9-2-2-2s-2 .9-2 2C.5 3 1.1 3.8 2 4v8c-.9.2-1.5 1-1.5 1.9 0 1.1.9 2 2 2s2-.9 2-2c0-.9-.6-1.7-1.5-1.9v-1c.2 0 .5.1.7.1.7 0 1.5-.1 2.2-.6.8-.5 1.4-1.2 1.7-2.1 1.1 0 1.9-.9 1.9-1.9zm-8-4.4c0-.6.4-1 1-1s1 .4 1 1-.4 1-1 1-1-.5-1-1zm2 11.9c0 .6-.4 1-1 1s-1-.4-1-1 .4-1 1-1 1 .4 1 1zm4-6.5c-.6 0-1-.4-1-1s.4-1 1-1 1 .4 1 1-.4 1-1 1z"
+ style={{ fill }}
/>
</g>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx
index a0824e89689..3f1fa2d0e9e 100644
--- a/server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function SortAscIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function SortAscIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M6.571 12.857q0 0.107-0.089 0.214l-2.848 2.848q-0.089 0.080-0.205 0.080-0.107 0-0.205-0.080l-2.857-2.857q-0.134-0.143-0.063-0.313 0.071-0.179 0.268-0.179h1.714v-12.286q0-0.125 0.080-0.205t0.205-0.080h1.714q0.125 0 0.205 0.080t0.080 0.205v12.286h1.714q0.125 0 0.205 0.080t0.080 0.205zM16 14v1.714q0 0.125-0.080 0.205t-0.205 0.080h-7.429q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h7.429q0.125 0 0.205 0.080t0.080 0.205zM14.286 9.429v1.714q0 0.125-0.080 0.205t-0.205 0.080h-5.714q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h5.714q0.125 0 0.205 0.080t0.080 0.205zM12.571 4.857v1.714q0 0.125-0.080 0.205t-0.205 0.080h-4q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h4q0.125 0 0.205 0.080t0.080 0.205zM10.857 0.286v1.714q0 0.125-0.080 0.205t-0.205 0.080h-2.286q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h2.286q0.125 0 0.205 0.080t0.080 0.205z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx
index 21b1c2a462d..233183ae27a 100644
--- a/server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function SortDescIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function SortDescIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M10.857 14v1.714q0 0.125-0.080 0.205t-0.205 0.080h-2.286q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h2.286q0.125 0 0.205 0.080t0.080 0.205zM6.571 12.857q0 0.107-0.089 0.214l-2.848 2.848q-0.089 0.080-0.205 0.080-0.107 0-0.205-0.080l-2.857-2.857q-0.134-0.143-0.063-0.313 0.071-0.179 0.268-0.179h1.714v-12.286q0-0.125 0.080-0.205t0.205-0.080h1.714q0.125 0 0.205 0.080t0.080 0.205v12.286h1.714q0.125 0 0.205 0.080t0.080 0.205zM12.571 9.429v1.714q0 0.125-0.080 0.205t-0.205 0.080h-4q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h4q0.125 0 0.205 0.080t0.080 0.205zM14.286 4.857v1.714q0 0.125-0.080 0.205t-0.205 0.080h-5.714q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h5.714q0.125 0 0.205 0.080t0.080 0.205zM16 0.286v1.714q0 0.125-0.080 0.205t-0.205 0.080h-7.429q-0.125 0-0.205-0.080t-0.080-0.205v-1.714q0-0.125 0.080-0.205t0.205-0.080h7.429q0.125 0 0.205 0.080t0.080 0.205z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/StatusIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/StatusIcon.tsx
new file mode 100644
index 00000000000..62c6c7b9911
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/StatusIcon.tsx
@@ -0,0 +1,96 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+import * as theme from '../../app/theme';
+
+interface Props {
+ className?: string;
+ status: string;
+}
+
+const statusIcons: { [x: string]: (props: IconProps) => React.ReactElement<any> } = {
+ open: OpenStatusIcon,
+ confirmed: ConfirmedStatusIcon,
+ reopened: ReopenedStatusIcon,
+ resolved: ResolvedStatusIcon,
+ closed: ClosedStatusIcon
+};
+
+export default function StatusIcon(props: Props) {
+ const status = props.status.toLowerCase();
+ const Icon = statusIcons[status];
+ return Icon ? <Icon className={props.className} /> : null;
+}
+
+function OpenStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 3.75c-.77 0-1.482.19-2.133.57A4.25 4.25 0 0 0 4.32 5.867c-.38.65-.57 1.362-.57 2.133 0 .77.19 1.482.57 2.133.38.65.896 1.167 1.547 1.547.65.38 1.362.57 2.133.57.77 0 1.482-.19 2.133-.57a4.242 4.242 0 0 0 1.547-1.547c.38-.65.57-1.362.57-2.133 0-.77-.19-1.482-.57-2.133a4.25 4.25 0 0 0-1.547-1.547A4.153 4.153 0 0 0 8 3.75zM14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function ConfirmedStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M10 8c0 .552-.195 1.023-.586 1.414-.39.39-.862.586-1.414.586a1.926 1.926 0 0 1-1.414-.586A1.928 1.928 0 0 1 6 8c0-.552.195-1.023.586-1.414C6.976 6.196 7.448 6 8 6c.552 0 1.023.195 1.414.586.39.39.586.862.586 1.414zM8 3.75c-.77 0-1.482.19-2.133.57A4.25 4.25 0 0 0 4.32 5.867c-.38.65-.57 1.362-.57 2.133 0 .77.19 1.482.57 2.133.38.65.896 1.167 1.547 1.547.65.38 1.362.57 2.133.57.77 0 1.482-.19 2.133-.57a4.242 4.242 0 0 0 1.547-1.547c.38-.65.57-1.362.57-2.133 0-.77-.19-1.482-.57-2.133a4.25 4.25 0 0 0-1.547-1.547A4.153 4.153 0 0 0 8 3.75zM14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function ReopenedStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 12.25v-8.5c-.77 0-1.482.19-2.133.57A4.25 4.25 0 0 0 4.32 5.867c-.38.65-.57 1.362-.57 2.133 0 .77.19 1.482.57 2.133.38.65.896 1.167 1.547 1.547.65.38 1.362.57 2.133.57zM14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.blue }}
+ />
+ </Icon>
+ );
+}
+
+function ResolvedStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M12.03 6.734a.49.49 0 0 0-.14-.36l-.71-.702a.48.48 0 0 0-.352-.15.474.474 0 0 0-.35.15l-3.19 3.18-1.765-1.766a.479.479 0 0 0-.35-.15.479.479 0 0 0-.353.15l-.71.703a.482.482 0 0 0-.14.358c0 .14.046.258.14.352l2.828 2.828c.098.1.216.15.35.15.142 0 .26-.05.36-.15l4.243-4.242a.475.475 0 0 0 .14-.352l-.001.001zM14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.baseFontColor }}
+ />
+ </Icon>
+ );
+}
+
+function ClosedStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.baseFontColor }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/TagsIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/TagsIcon.tsx
new file mode 100644
index 00000000000..4abfa9db1f0
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/TagsIcon.tsx
@@ -0,0 +1,32 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+
+export default function TagsIcon({ className, fill = 'currentColor', size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M4.303 5.36a.94.94 0 0 0-.944-.945.94.94 0 0 0-.944.944c0 .524.42.944.944.944a.94.94 0 0 0 .944-.944zm7.866 4.246a.95.95 0 0 1-.273.663l-3.62 3.627a.95.95 0 0 1-1.334 0L1.671 8.618C1.295 8.249 1 7.534 1 7.01V3.944A.95.95 0 0 1 1.944 3H5.01c.523 0 1.238.295 1.614.67l5.271 5.265a.98.98 0 0 1 .273.67zm2.831 0a.95.95 0 0 1-.273.663l-3.62 3.627a.98.98 0 0 1-.67.273c-.384 0-.575-.177-.826-.435l3.465-3.465a.95.95 0 0 0 0-1.334L7.805 3.67C7.429 3.295 6.714 3 6.19 3h1.651c.524 0 1.239.295 1.615.67l5.271 5.265a.98.98 0 0 1 .273.67z"
+ style={{ fill }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/TestStatusIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/TestStatusIcon.tsx
new file mode 100644
index 00000000000..7930d25764a
--- /dev/null
+++ b/server/sonar-web/src/main/js/components/icons-components/TestStatusIcon.tsx
@@ -0,0 +1,84 @@
+/*
+ * SonarQube
+ * Copyright (C) 2009-2018 SonarSource SA
+ * mailto:info AT sonarsource DOT com
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+import * as React from 'react';
+import Icon, { IconProps } from './Icon';
+import * as theme from '../../app/theme';
+
+interface Props {
+ className?: string;
+ status: string;
+}
+
+const statusIcons: { [x: string]: (props: IconProps) => React.ReactElement<any> } = {
+ ok: OkTestStatusIcon,
+ failure: FailureTestStatusIcon,
+ error: ErrorTestStatusIcon,
+ skipped: SkippedTestStatusIcon
+};
+
+export default function TestStatusIcon(props: Props) {
+ const status = props.status.toLowerCase();
+ const Icon = statusIcons[status];
+ return Icon ? <Icon className={props.className} /> : null;
+}
+
+function OkTestStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M12.03 6.734a.49.49 0 0 0-.14-.36l-.71-.702a.48.48 0 0 0-.352-.15.474.474 0 0 0-.35.15l-3.19 3.18-1.765-1.766a.479.479 0 0 0-.35-.15.479.479 0 0 0-.353.15l-.71.703a.482.482 0 0 0-.14.358c0 .14.046.258.14.352l2.828 2.828c.098.1.216.15.35.15.142 0 .26-.05.36-.15l4.243-4.242a.475.475 0 0 0 .14-.352l-.001.001zM14 8c0 1.09-.268 2.092-.805 3.012a5.96 5.96 0 0 1-2.183 2.183A5.863 5.863 0 0 1 8 14a5.863 5.863 0 0 1-3.012-.805 5.96 5.96 0 0 1-2.183-2.183A5.863 5.863 0 0 1 2 8c0-1.09.268-2.092.805-3.012a5.96 5.96 0 0 1 2.183-2.183A5.863 5.863 0 0 1 8 2c1.09 0 2.092.268 3.012.805a5.96 5.96 0 0 1 2.183 2.183C13.732 5.908 14 6.91 14 8z"
+ style={{ fill: theme.green }}
+ />
+ </Icon>
+ );
+}
+
+function FailureTestStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M8 14c-3.311 0-6-2.689-6-6s2.689-6 6-6 6 2.689 6 6-2.689 6-6 6zM7 9h2V4H7v5zm0 3h2v-2H7v2z"
+ style={{ fill: theme.orange, fillRule: 'nonzero' }}
+ />
+ </Icon>
+ );
+}
+
+function ErrorTestStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M10.977 9.766a.497.497 0 0 0-.149-.352L9.414 8l1.414-1.414a.497.497 0 0 0 0-.711l-.703-.703a.497.497 0 0 0-.71 0L8 6.586 6.586 5.172a.497.497 0 0 0-.711 0l-.703.703a.497.497 0 0 0 0 .71L6.586 8 5.172 9.414a.497.497 0 0 0 0 .711l.703.703a.497.497 0 0 0 .71 0L8 9.414l1.414 1.414a.497.497 0 0 0 .711 0l.703-.703a.515.515 0 0 0 .149-.36zM14 8c0 3.313-2.688 6-6 6-3.313 0-6-2.688-6-6 0-3.313 2.688-6 6-6 3.313 0 6 2.688 6 6z"
+ style={{ fill: theme.red, fillRule: 'nonzero' }}
+ />
+ </Icon>
+ );
+}
+
+function SkippedTestStatusIcon({ className, size }: IconProps) {
+ return (
+ <Icon className={className} size={size}>
+ <path
+ d="M11.5 8.5v-1c0-.273-.227-.5-.5-.5H5c-.273 0-.5.227-.5.5v1c0 .273.227.5.5.5h6c.273 0 .5-.227.5-.5zM14 8c0 3.313-2.688 6-6 6-3.313 0-6-2.688-6-6 0-3.313 2.688-6 6-6 3.313 0 6 2.688 6 6z"
+ style={{ fill: theme.gray71, fillRule: 'nonzero' }}
+ />
+ </Icon>
+ );
+}
diff --git a/server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx
index db4187076ff..b5faecee735 100644
--- a/server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function TreeIcon({ className, fill = 'currentColor', size = 16 }: IconProps) {
+export default function TreeIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M15.045 2.467c0-0.277-0.225-0.503-0.503-0.503h-13.084c-0.277 0-0.503 0.225-0.503 0.503v1.007c0 0.277 0.225 0.503 0.503 0.503h13.084c0.277 0 0.503-0.225 0.503-0.503v-1.007zM15.045 5.487c0-0.277-0.194-0.503-0.432-0.503h-11.216c-0.238 0-0.432 0.225-0.432 0.503v1.007c0 0.277 0.193 0.503 0.432 0.503h11.216c0.238 0 0.432-0.225 0.432-0.503v-1.007zM15.045 8.506c0-0.277-0.161-0.503-0.359-0.503h-9.346c-0.198 0-0.359 0.225-0.359 0.503v1.007c0 0.277 0.161 0.503 0.359 0.503h9.346c0.198 0 0.359-0.225 0.359-0.503v-1.007zM15.045 11.527c0-0.277-0.129-0.503-0.287-0.503h-7.477c-0.159 0-0.288 0.225-0.288 0.503v1.007c0 0.277 0.129 0.503 0.288 0.503h7.477c0.159 0 0.287-0.225 0.287-0.503v-1.007z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx
index b14408b1132..e5133c8d84c 100644
--- a/server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx
@@ -18,22 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
export default function TreemapIcon({ className, fill = 'currentColor', size = 14 }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M0 0h8v16h-8zM9.143 0h6.857v9.143h-6.857zM9.143 10.286h6.857v5.714h-6.857z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx
index 34b5f1153f0..76e78570867 100644
--- a/server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx
+++ b/server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx
@@ -18,26 +18,15 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import { IconProps } from './types';
+import Icon, { IconProps } from './Icon';
-export default function VulnerabilityIcon({
- className,
- fill = 'currentColor',
- size = 16
-}: IconProps) {
+export default function VulnerabilityIcon({ className, fill = 'currentColor', size }: IconProps) {
return (
- <svg
- className={className}
- width={size}
- height={size}
- viewBox="0 0 16 16"
- version="1.1"
- xmlnsXlink="http://www.w3.org/1999/xlink"
- xmlSpace="preserve">
+ <Icon className={className} size={size}>
<path
- style={{ fill }}
d="M10.8 5H6V3.9a2.28 2.28 0 0 1 2-2.5 2.22 2.22 0 0 1 1.8 1.2.48.48 0 0 0 .7.2.48.48 0 0 0 .2-.7A3 3 0 0 0 8 .4a3.34 3.34 0 0 0-3 3.5v1.2a2.16 2.16 0 0 0-2 2.1v4.4a2.22 2.22 0 0 0 2.2 2.2h5.6a2.22 2.22 0 0 0 2.2-2.2V7.2A2.22 2.22 0 0 0 10.8 5zm-2.2 5.5v1.2H7.4v-1.2a1.66 1.66 0 0 1-1.1-1.6A1.75 1.75 0 0 1 8 7.2a1.71 1.71 0 0 1 .6 3.3z"
+ style={{ fill }}
/>
- </svg>
+ </Icon>
);
}
diff --git a/server/sonar-web/src/main/js/components/icons-components/icons.ts b/server/sonar-web/src/main/js/components/icons-components/icons.ts
deleted file mode 100644
index 5483ff8007e..00000000000
--- a/server/sonar-web/src/main/js/components/icons-components/icons.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2018 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-export { default as AlertErrorIcon } from './AlertErrorIcon';
-export { default as AlertWarnIcon } from './AlertWarnIcon';
-export { default as BranchIcon } from './BranchIcon';
-export { default as BubblesIcon } from './BubblesIcon';
-export { default as BugIcon } from './BugIcon';
-// @deprecated use EditIcon
-export { default as ChangeIcon } from './EditIcon';
-export { default as ChartLegendIcon } from './ChartLegendIcon';
-export { default as CheckIcon } from './CheckIcon';
-export { default as ClearIcon } from './ClearIcon';
-// @deprecated use ClearIcon
-export { default as CloseIcon } from './ClearIcon';
-export { default as CodeSmellIcon } from './CodeSmellIcon';
-// @deprecated use ClearIcon
-export { default as DeleteIcon } from './DeleteIcon';
-export { default as EditIcon } from './EditIcon';
-export { default as FavoriteIcon } from './FavoriteIcon';
-export { default as HelpIcon } from './HelpIcon';
-export { default as HistoryIcon } from './HistoryIcon';
-export { default as LinkIcon } from './LinkIcon';
-export { default as ListIcon } from './ListIcon';
-export { default as LongLivingBranchIcon } from './LongLivingBranchIcon';
-export { default as OpenCloseIcon } from './OpenCloseIcon';
-export { default as PendingIcon } from './PendingIcon';
-export { default as ProjectEventIcon } from './ProjectEventIcon';
-export { default as PullRequestIcon } from './PullRequestIcon';
-export { default as QualifierIcon } from './QualifierIcon';
-export { default as ShortLivingBranchIcon } from './ShortLivingBranchIcon';
-export { default as SortAscIcon } from './SortAscIcon';
-export { default as SortDescIcon } from './SortDescIcon';
-export { default as TreeIcon } from './TreeIcon';
-export { default as TreemapIcon } from './TreemapIcon';
-export { default as VulnerabilityIcon } from './VulnerabilityIcon';
diff --git a/server/sonar-web/src/main/js/components/issue/IssueView.js b/server/sonar-web/src/main/js/components/issue/IssueView.js
index 0598c4f9f07..100e1942d23 100644
--- a/server/sonar-web/src/main/js/components/issue/IssueView.js
+++ b/server/sonar-web/src/main/js/components/issue/IssueView.js
@@ -119,10 +119,6 @@ export default class IssueView extends React.PureComponent {
))}
</div>
)}
- <a className="issue-navigate js-issue-navigate">
- <i className="issue-navigate-to-left icon-chevron-left" />
- <i className="issue-navigate-to-right icon-chevron-right" />
- </a>
{hasCheckbox && (
<a className="js-toggle issue-checkbox-container" href="#" onClick={this.handleCheck}>
<i
diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js b/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js
index 2cfeb1544cf..fb892131a08 100644
--- a/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js
+++ b/server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js
@@ -97,7 +97,7 @@ export default class IssueActionsBar extends React.PureComponent {
<tbody>
<tr>
<td>
- <ul className="list-inline issue-meta-list">
+ <ul className="issue-meta-list">
<li className="issue-meta">
<IssueType
isOpen={this.props.currentPopup === 'set-type' && canSetSeverity}
diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js b/server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js
index a70f6ca5a33..3b6135a0d91 100644
--- a/server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js
+++ b/server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js
@@ -20,6 +20,7 @@
// @flow
import React from 'react';
import ChangelogPopup from '../popups/ChangelogPopup';
+import DropdownIcon from '../../../components/icons-components/DropdownIcon';
import DateFromNow from '../../../components/intl/DateFromNow';
import DateTimeFormatter from '../../../components/intl/DateTimeFormatter';
import Toggler from '../../../components/controls/Toggler';
@@ -68,7 +69,7 @@ export default class IssueChangelog extends React.PureComponent {
<span className="issue-meta-label">
<DateFromNow date={this.props.creationDate} />
</span>
- <i className="icon-dropdown little-spacer-left" />
+ <DropdownIcon className="little-spacer-left" />
</Button>
</Tooltip>
</Toggler>
diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueMessage.js b/server/sonar-web/src/main/js/components/issue/components/IssueMessage.js
index 74bf39609ab..5b4e82d413b 100644
--- a/server/sonar-web/src/main/js/components/issue/components/IssueMessage.js
+++ b/server/sonar-web/src/main/js/components/issue/components/IssueMessage.js
@@ -20,6 +20,7 @@
// @flow
import React from 'react';
import PropTypes from 'prop-types';
+import EllipsisIcon from '../../icons-components/EllipsisIcon';
import Tooltip from '../../controls/Tooltip';
import { translate, translateWithParameters } from '../../../helpers/l10n';
import { Button } from '../../ui/buttons';
@@ -50,9 +51,10 @@ export default class IssueMessage extends React.PureComponent {
{this.props.message}
<Button
aria-label={translate('issue.rule_details')}
- className="button-link issue-rule icon-ellipsis-h little-spacer-left"
- onClick={this.handleClick}
- />
+ className="button-link issue-rule little-spacer-left"
+ onClick={this.handleClick}>
+ <EllipsisIcon />
+ </Button>
{this.props.engine && (
<Tooltip
overlay={translateWithParameters('issue.from_external_rule_engine', this.props.engine)}>
diff --git a/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js b/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js
index 781eebd1f06..b19581aea98 100644
--- a/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js
+++ b/server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js
@@ -81,7 +81,7 @@ export default function IssueTitleBar(props /*: Props */) {
/>
<div className="issue-row-meta">
- <ul className="list-inline issue-meta-list">
+ <ul className="issue-meta-list">
<li className="issue-meta">
<IssueChangelog
creationDate={issue.creationDate}
diff --git a/server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js b/server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js
index 5b900ac2e48..2ad9a5353f4 100644
--- a/server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js
+++ b/server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js
@@ -22,6 +22,7 @@ import React from 'react';
import SimilarIssuesPopup from '../popups/SimilarIssuesPopup';
import Toggler from '../../../components/controls/Toggler';
import DropdownIcon from '../../../components/icons-components/DropdownIcon';
+import FilterIcon from '../../../components/icons-components/FilterIcon';
import { Button } from '../../../components/ui/buttons';
import { translate } from '../../../helpers/l10n';
/*:: import type { Issue } from '../types'; */
@@ -68,8 +69,8 @@ export default class SimilarIssuesFilter extends React.PureComponent {
aria-label={translate('issue.filter_similar_issues')}
className="js-issue-filter button-link issue-action issue-action-with-options"
onClick={this.handleClick}>
- <i className="icon-filter icon-half-transparent" />
- <DropdownIcon className="little-spacer-left" />
+ <FilterIcon className="icon-half-transparent" />
+ <DropdownIcon className="icon-half-transparent" />
</Button>
</Toggler>
</div>
diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap
index 0628de785bf..7ba9bfa806c 100644
--- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap
+++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap
@@ -48,8 +48,8 @@ exports[`should open the popup when the button is clicked 2`] = `
date="2017-03-01T09:36:01+0100"
/>
</span>
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</Button>
</Tooltip>
@@ -96,8 +96,8 @@ exports[`should render correctly 1`] = `
date="2017-03-01T09:36:01+0100"
/>
</span>
- <i
- className="icon-dropdown little-spacer-left"
+ <DropdownIcon
+ className="little-spacer-left"
/>
</Button>
</Tooltip>
diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap
index 91587572e88..edda212b2f0 100644
--- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap
+++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap
@@ -7,8 +7,10 @@ exports[`should render with the message and a link to open the rule 1`] = `
Reduce the number of conditional operators (4) used in the expression
<Button
aria-label="issue.rule_details"
- className="button-link issue-rule icon-ellipsis-h little-spacer-left"
+ className="button-link issue-rule little-spacer-left"
onClick={[Function]}
- />
+ >
+ <EllipsisIcon />
+ </Button>
</div>
`;
diff --git a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap
index 93d4a3f72d2..47648a5f921 100644
--- a/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap
+++ b/server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap
@@ -19,7 +19,7 @@ exports[`should render the titlebar correctly 1`] = `
className="issue-row-meta"
>
<ul
- className="list-inline issue-meta-list"
+ className="issue-meta-list"
>
<li
className="issue-meta"
@@ -102,7 +102,7 @@ exports[`should render the titlebar with the filter 1`] = `
className="issue-row-meta"
>
<ul
- className="list-inline issue-meta-list"
+ className="issue-meta-list"
>
<li
className="issue-meta"
diff --git a/server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js b/server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js
index 2d3c2232f88..3a0a211f1d6 100644
--- a/server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js
+++ b/server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js
@@ -22,7 +22,7 @@ import React from 'react';
import { translate } from '../../../helpers/l10n';
import SelectList from '../../../components/common/SelectList';
import SelectListItem from '../../../components/common/SelectListItem';
-import SeverityIcon from '../../../components/shared/SeverityIcon';
+import SeverityIcon from '../../../components/icons-components/SeverityIcon';
import { DropdownOverlay } from '../../controls/Dropdown';
/*:: import type { Issue } from '../types'; */
diff --git a/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js b/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js
index 7a28c6594ed..77273cd9f39 100644
--- a/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js
+++ b/server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js
@@ -24,7 +24,8 @@ import SelectListItem from '../../../components/common/SelectListItem';
import { DropdownOverlay } from '../../../components/controls/Dropdown';
import SeverityHelper from '../../../components/shared/SeverityHelper';
import StatusHelper from '../../../components/shared/StatusHelper';
-import QualifierIcon from '../../../components/shared/QualifierIcon';
+import QualifierIcon from '../../../components/icons-components/QualifierIcon';
+import TagsIcon from '../../../components/icons-components/TagsIcon';
import IssueTypeIcon from '../../../components/ui/IssueTypeIcon';
import Avatar from '../../../components/ui/Avatar';
import { translate } from '../../../helpers/l10n';
@@ -116,8 +117,8 @@ export default class SimilarIssuesPopup extends React.PureComponent {
{issue.tags != null &&
issue.tags.map(tag => (
<SelectListItem item={`tag###${tag}`} key={`tag###${tag}`}>
- <i className="icon-tags icon-half-transparent little-spacer-right" />
- {tag}
+ <TagsIcon className="icon-half-transparent little-spacer-right text-middle" />
+ <span className="text-middle">{tag}</span>
</SelectListItem>
))}
diff --git a/server/sonar-web/src/main/js/components/nav/NavBarTabs.css b/server/sonar-web/src/main/js/components/nav/NavBarTabs.css
index 366aaf02b49..fdd7a424799 100644
--- a/server/sonar-web/src/main/js/components/nav/NavBarTabs.css
+++ b/server/sonar-web/src/main/js/components/nav/NavBarTabs.css
@@ -32,7 +32,8 @@
.navbar-tabs > li > a {
display: block;
height: var(--controlHeight);
- line-height: calc(var(--controlHeight) - 6px);
+ line-height: 16px;
+ padding-top: 2px;
border-bottom: 3px solid transparent;
box-sizing: border-box;
color: var(--baseFontColor);
diff --git a/server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx b/server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx
index 40788425b7b..bd81a6e7d53 100644
--- a/server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx
+++ b/server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import SeverityIcon from './SeverityIcon';
+import SeverityIcon from '../icons-components/SeverityIcon';
import { translate } from '../../helpers/l10n';
interface Props {
diff --git a/server/sonar-web/src/main/js/components/shared/StatusHelper.tsx b/server/sonar-web/src/main/js/components/shared/StatusHelper.tsx
index b6921effdac..f5cd7f21dc9 100644
--- a/server/sonar-web/src/main/js/components/shared/StatusHelper.tsx
+++ b/server/sonar-web/src/main/js/components/shared/StatusHelper.tsx
@@ -18,7 +18,7 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
import * as React from 'react';
-import StatusIcon from './StatusIcon';
+import StatusIcon from '../icons-components/StatusIcon';
import { translate } from '../../helpers/l10n';
interface Props {
diff --git a/server/sonar-web/src/main/js/components/shared/__tests__/QualifierIcon-test.tsx b/server/sonar-web/src/main/js/components/shared/__tests__/QualifierIcon-test.tsx
deleted file mode 100644
index 06169277552..00000000000
--- a/server/sonar-web/src/main/js/components/shared/__tests__/QualifierIcon-test.tsx
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * SonarQube
- * Copyright (C) 2009-2018 SonarSource SA
- * mailto:info AT sonarsource DOT com
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-import * as React from 'react';
-import { shallow } from 'enzyme';
-import QualifierIcon from '../QualifierIcon';
-
-it('should render icon', () => {
- expect(shallow(<QualifierIcon qualifier="TRK" />)).toMatchSnapshot();
- expect(shallow(<QualifierIcon qualifier="trk" />)).toMatchSnapshot();
-});
-
-it('should not render icon', () => {
- expect(shallow(<QualifierIcon qualifier={null} />).type()).toBeNull();
-});
-
-it('should render with custom class', () => {
- expect(shallow(<QualifierIcon className="spacer-right" qualifier="TRK" />)).toMatchSnapshot();
-});
diff --git a/server/sonar-web/src/main/js/components/shared/__tests__/__snapshots__/QualifierIcon-test.tsx.snap b/server/sonar-web/src/main/js/components/shared/__tests__/__snapshots__/QualifierIcon-test.tsx.snap
deleted file mode 100644
index 3e1625b3e32..00000000000
--- a/server/sonar-web/src/main/js/components/shared/__tests__/__snapshots__/QualifierIcon-test.tsx.snap
+++ /dev/null
@@ -1,19 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`should render icon 1`] = `
-<i
- className="icon-qualifier-trk"
-/>
-`;
-
-exports[`should render icon 2`] = `
-<i
- className="icon-qualifier-trk"
-/>
-`;
-
-exports[`should render with custom class 1`] = `
-<i
- className="icon-qualifier-trk spacer-right"
-/>
-`;
diff --git a/server/sonar-web/src/main/js/components/tags/TagsList.tsx b/server/sonar-web/src/main/js/components/tags/TagsList.tsx
index eaf08bd4fb6..4ae39231a1b 100644
--- a/server/sonar-web/src/main/js/components/tags/TagsList.tsx
+++ b/server/sonar-web/src/main/js/components/tags/TagsList.tsx
@@ -19,8 +19,9 @@
*/
import * as React from 'react';
import * as classNames from 'classnames';
-import './TagsList.css';
import DropdownIcon from '../icons-components/DropdownIcon';
+import TagsIcon from '../icons-components/TagsIcon';
+import './TagsList.css';
interface Props {
allowUpdate?: boolean;
@@ -31,9 +32,9 @@ interface Props {
export default function TagsList({ allowUpdate = false, className, tags }: Props) {
return (
<span className={classNames('tags-list', className)} title={tags.join(', ')}>
- <i className="icon-tags" />
- <span className="text-ellipsis">{tags.join(', ')}</span>
- {allowUpdate && <DropdownIcon />}
+ <TagsIcon className="text-middle" />
+ <span className="text-ellipsis text-middle">{tags.join(', ')}</span>
+ {allowUpdate && <DropdownIcon className="text-middle" />}
</span>
);
}
diff --git a/server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap b/server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap
index 3ea92ee6e20..4a09b986130 100644
--- a/server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap
@@ -5,15 +5,17 @@ exports[`should render with a caret on the right if update is allowed 1`] = `
className="tags-list"
title="foo, bar"
>
- <i
- className="icon-tags"
+ <TagsIcon
+ className="text-middle"
/>
<span
- className="text-ellipsis"
+ className="text-ellipsis text-middle"
>
foo, bar
</span>
- <DropdownIcon />
+ <DropdownIcon
+ className="text-middle"
+ />
</span>
`;
@@ -22,11 +24,11 @@ exports[`should render with a list of tag 1`] = `
className="tags-list"
title="foo, bar"
>
- <i
- className="icon-tags"
+ <TagsIcon
+ className="text-middle"
/>
<span
- className="text-ellipsis"
+ className="text-ellipsis text-middle"
>
foo, bar
</span>
diff --git a/server/sonar-web/src/main/js/components/ui/buttons.css b/server/sonar-web/src/main/js/components/ui/buttons.css
index ea2ff4b6b13..81344085756 100644
--- a/server/sonar-web/src/main/js/components/ui/buttons.css
+++ b/server/sonar-web/src/main/js/components/ui/buttons.css
@@ -18,8 +18,9 @@
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
.button {
- display: inline-block;
- vertical-align: baseline;
+ display: inline-flex;
+ align-items: center;
+ vertical-align: middle;
height: var(--controlHeight);
line-height: calc(var(--controlHeight) - 2px);
padding: 0 12px;
@@ -63,10 +64,6 @@
box-shadow: none !important;
}
-.button svg {
- margin-top: calc((var(--controlHeight) - 16px - 2px) / 2);
-}
-
/* #region .button-red */
.button-red {
border-color: var(--red);
@@ -133,10 +130,6 @@
transition: all 0.2s ease;
}
-.button-link svg {
- margin-top: 0;
-}
-
.button-link:hover {
background: transparent;
color: var(--blue);
@@ -164,10 +157,6 @@
font-size: 11px;
}
-.button-small > svg {
- margin-top: 2px;
-}
-
/* #region .button-group */
.button-group {
display: inline-block;
diff --git a/server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx b/server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx
index 8679e169731..0f18a038c89 100644
--- a/server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx
+++ b/server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx
@@ -19,7 +19,7 @@
*/
import * as React from 'react';
import { ComponentDescriptor } from './context';
-import QualifierIcon from '../shared/QualifierIcon';
+import QualifierIcon from '../icons-components/QualifierIcon';
import { collapsePath } from '../../helpers/path';
interface Props {
diff --git a/server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx b/server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx
index 011991dd54d..f1197e7bf13 100644
--- a/server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx
+++ b/server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx
@@ -25,7 +25,7 @@ import ClearIcon from '../icons-components/ClearIcon';
import CollapseIcon from '../icons-components/CollapseIcon';
import ExpandIcon from '../icons-components/ExpandIcon';
import MinimizeIcon from '../icons-components/MinimizeIcon';
-import { IconProps } from '../icons-components/types';
+import { IconProps } from '../icons-components/Icon';
export interface Props {
children: React.ReactNode;
diff --git a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx
index ac7387ce23b..3c35798f4ac 100644
--- a/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx
+++ b/server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx
@@ -19,6 +19,8 @@
*/
import * as React from 'react';
import { RuleDescriptor } from './context';
+import LightBulbIcon from '../icons-components/LightBulbIcon';
+import * as theme from '../../app/theme';
interface Props {
limited?: boolean;
@@ -29,7 +31,7 @@ export default function WorkspaceRuleTitle({ limited, rule }: Props) {
const { name = '—' } = rule;
return (
<>
- <i className="icon-workspace-doc little-spacer-right" />
+ <LightBulbIcon className="little-spacer-right" fill={theme.blue} />
{limited ? <span className="text-limited">{name}</span> : name}
</>
);
diff --git a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap
index 5ba5fc924a9..9d5ae728816 100644
--- a/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap
+++ b/server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap
@@ -2,8 +2,9 @@
exports[`should render loaded rule 1`] = `
<React.Fragment>
- <i
- className="icon-workspace-doc little-spacer-right"
+ <LightBulbIcon
+ className="little-spacer-right"
+ fill="#4b9fd5"
/>
Foo
</React.Fragment>
@@ -11,8 +12,9 @@ exports[`should render loaded rule 1`] = `
exports[`should render rule 1`] = `
<React.Fragment>
- <i
- className="icon-workspace-doc little-spacer-right"
+ <LightBulbIcon
+ className="little-spacer-right"
+ fill="#4b9fd5"
/>
</React.Fragment>
diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
index fd4bad56bc4..502d17cab79 100644
--- a/sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
+++ b/sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
@@ -142,7 +142,7 @@ public abstract class ServletFilter implements Filter {
public static class Builder {
private static final String WILDCARD_CHAR = "*";
private static final Collection<String> STATIC_RESOURCES = unmodifiableList(asList(
- "*.css", "*.css.map", "*.ico", "*.png", "*.jpg", "*.jpeg", "*.gif", "*.svg", "*.js", "*.js.map", "*.eot", "*.ttf", "*.woff",
+ "*.css", "*.css.map", "*.ico", "*.png", "*.jpg", "*.jpeg", "*.gif", "*.svg", "*.js", "*.js.map",
"/static/*", "/robots.txt","/favicon.ico", "/apple-touch-icon*", "/mstile*"
));
diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java b/sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java
index 33389b6a321..84e800559ce 100644
--- a/sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java
+++ b/sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java
@@ -238,9 +238,6 @@ public class ServletFilterTest {
"*.svg",
"*.js",
"*.js.map",
- "*.eot",
- "*.ttf",
- "*.woff",
"/static/*",
"/robots.txt",
"/favicon.ico",
diff --git a/tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java b/tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java
index c7fc21f5ccc..94b712785f0 100644
--- a/tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java
+++ b/tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java
@@ -320,9 +320,9 @@ public class RulesPageTest {
QualityProfile profile = createInheritedQualityProfile();
RuleDetails ruleDetails = openRulesAsAdmin().takeRule(SAMPLE_RULE).open();
- ruleDetails.activationShouldHaveSeverity(profile.getKey(), "BLOCKER");
+ ruleDetails.activationShouldHaveSeverity(profile.getKey(), "Blocker");
ruleDetails.revertActivationToParentDefinition(profile.getKey());
- ruleDetails.activationShouldHaveSeverity(profile.getKey(), "MAJOR");
+ ruleDetails.activationShouldHaveSeverity(profile.getKey(), "Major");
}
private RulesPage openRulesAsAdmin() {