]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-10673 Stop using font for icons (#252)
authorStas Vilchik <stas.vilchik@sonarsource.com>
Wed, 23 May 2018 13:29:06 +0000 (15:29 +0200)
committerSonarTech <sonartech@sonarsource.com>
Wed, 23 May 2018 18:20:48 +0000 (20:20 +0200)
167 files changed:
server/sonar-qa-util/src/main/java/org/sonarqube/qa/util/pageobjects/RuleDetails.java
server/sonar-server/src/test/java/org/sonar/server/authentication/UserSessionInitializerTest.java
server/sonar-vsts/src/main/js/components/SonarCloudIcon.tsx
server/sonar-web/public/fonts/sonar-5.2.eot [deleted file]
server/sonar-web/public/fonts/sonar-5.2.svg [deleted file]
server/sonar-web/public/fonts/sonar-5.2.ttf [deleted file]
server/sonar-web/public/fonts/sonar-5.2.woff [deleted file]
server/sonar-web/scripts/start.js
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavBranch.tsx
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavHeader.tsx
server/sonar-web/src/main/js/app/components/nav/component/ComponentNavMenu.tsx
server/sonar-web/src/main/js/app/components/nav/component/__tests__/__snapshots__/ComponentNavBranch-test.tsx.snap
server/sonar-web/src/main/js/app/components/nav/global/GlobalNavMenu.tsx
server/sonar-web/src/main/js/app/components/nav/settings/SettingsNav.tsx
server/sonar-web/src/main/js/app/components/search/SearchResult.js
server/sonar-web/src/main/js/app/styles/components/boxed-group.css
server/sonar-web/src/main/js/app/styles/components/issues.css
server/sonar-web/src/main/js/app/styles/components/ui.css
server/sonar-web/src/main/js/app/styles/init/icons.css
server/sonar-web/src/main/js/app/utils/exposeLibraries.ts
server/sonar-web/src/main/js/apps/about/components/AboutStandards.js
server/sonar-web/src/main/js/apps/account/projects/ProjectCard.tsx
server/sonar-web/src/main/js/apps/background-tasks/components/TaskComponent.tsx
server/sonar-web/src/main/js/apps/code/components/ComponentName.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleDetailsProfiles.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleInheritanceIcon.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/RuleListItem.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/SimilarRulesFilter.tsx
server/sonar-web/src/main/js/apps/coding-rules/components/TagFacet.tsx
server/sonar-web/src/main/js/apps/coding-rules/styles.css
server/sonar-web/src/main/js/apps/component-measures/components/__tests__/MeasureHeader-test.js
server/sonar-web/src/main/js/apps/component-measures/components/__tests__/__snapshots__/MeasureHeader-test.js.snap
server/sonar-web/src/main/js/apps/issues/components/App.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/DirectoryFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/FileFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/ModuleFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/ProjectFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/StatusFacet.tsx
server/sonar-web/src/main/js/apps/issues/sidebar/TagFacet.tsx
server/sonar-web/src/main/js/apps/marketplace/components/PluginChangeLogButton.tsx
server/sonar-web/src/main/js/apps/organizations/navigation/OrganizationNavigationHeader.tsx
server/sonar-web/src/main/js/apps/organizations/navigation/__tests__/__snapshots__/OrganizationNavigationHeader-test.tsx.snap
server/sonar-web/src/main/js/apps/overview/meta/MetaLink.tsx
server/sonar-web/src/main/js/apps/overview/meta/__tests__/__snapshots__/MetaLink-test.tsx.snap
server/sonar-web/src/main/js/apps/permission-templates/components/ActionsCell.tsx
server/sonar-web/src/main/js/apps/portfolio/components/HistoryButtonLink.tsx
server/sonar-web/src/main/js/apps/portfolio/components/WorstProjects.tsx
server/sonar-web/src/main/js/apps/portfolio/components/__tests__/__snapshots__/HistoryButtonLink-test.tsx.snap
server/sonar-web/src/main/js/apps/project-admin/key/FineGrainedUpdate.js
server/sonar-web/src/main/js/apps/project-admin/links/LinkRow.tsx
server/sonar-web/src/main/js/apps/projectsManagement/ProjectRow.tsx
server/sonar-web/src/main/js/apps/projectsManagement/Search.tsx
server/sonar-web/src/main/js/apps/quality-profiles/changelog/Changelog.tsx
server/sonar-web/src/main/js/apps/quality-profiles/compare/ComparisonResults.tsx
server/sonar-web/src/main/js/apps/quality-profiles/compare/__tests__/ComparisonResults-test.tsx
server/sonar-web/src/main/js/apps/quality-profiles/details/ProfileProjects.tsx
server/sonar-web/src/main/js/apps/settings/components/inputs/InputForPassword.js
server/sonar-web/src/main/js/apps/settings/components/inputs/__tests__/InputForPassword-test.js
server/sonar-web/src/main/js/apps/system/components/PageActions.tsx
server/sonar-web/src/main/js/apps/system/components/__tests__/__snapshots__/PageActions-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/info-items/__tests__/__snapshots__/SysInfoItem-test.tsx.snap
server/sonar-web/src/main/js/apps/system/components/system-upgrade/SystemUpgradeIntermediate.tsx
server/sonar-web/src/main/js/apps/system/components/system-upgrade/__tests__/__snapshots__/SystemUpgradeIntermediate-test.tsx.snap
server/sonar-web/src/main/js/components/SourceViewer/SourceViewerHeader.tsx
server/sonar-web/src/main/js/components/SourceViewer/components/CoveragePopup.tsx
server/sonar-web/src/main/js/components/SourceViewer/components/DuplicationPopup.tsx
server/sonar-web/src/main/js/components/SourceViewer/components/LineIssuesIndicator.tsx
server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlay.tsx
server/sonar-web/src/main/js/components/SourceViewer/components/MeasuresOverlayTestCase.tsx
server/sonar-web/src/main/js/components/controls/ActionsDropdown.tsx
server/sonar-web/src/main/js/components/controls/GlobalMessages.tsx
server/sonar-web/src/main/js/components/icons-components/AlertErrorIcon.tsx
server/sonar-web/src/main/js/components/icons-components/AlertSuccessIcon.tsx
server/sonar-web/src/main/js/components/icons-components/AlertWarnIcon.tsx
server/sonar-web/src/main/js/components/icons-components/BranchIcon.tsx
server/sonar-web/src/main/js/components/icons-components/BubblesIcon.tsx
server/sonar-web/src/main/js/components/icons-components/BugIcon.tsx
server/sonar-web/src/main/js/components/icons-components/BugTrackerIcon.tsx
server/sonar-web/src/main/js/components/icons-components/BulletListIcon.tsx
server/sonar-web/src/main/js/components/icons-components/CalendarIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ChartLegendIcon.tsx
server/sonar-web/src/main/js/components/icons-components/CheckIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ChevronDownIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ChevronLeftIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ChevronRightcon.tsx
server/sonar-web/src/main/js/components/icons-components/ChevronUpIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ClearIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ClockIcon.tsx
server/sonar-web/src/main/js/components/icons-components/CodeSmellIcon.tsx
server/sonar-web/src/main/js/components/icons-components/CollapseIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ContinuousIntegrationIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/DeleteIcon.tsx
server/sonar-web/src/main/js/components/icons-components/DetachIcon.tsx
server/sonar-web/src/main/js/components/icons-components/DropdownIcon.tsx
server/sonar-web/src/main/js/components/icons-components/EditIcon.tsx
server/sonar-web/src/main/js/components/icons-components/EllipsisIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/ExpandIcon.tsx
server/sonar-web/src/main/js/components/icons-components/FavoriteIcon.tsx
server/sonar-web/src/main/js/components/icons-components/FilterIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/GroupIcon.tsx
server/sonar-web/src/main/js/components/icons-components/HelpIcon.tsx
server/sonar-web/src/main/js/components/icons-components/HistoryIcon.tsx
server/sonar-web/src/main/js/components/icons-components/HomeIcon.tsx
server/sonar-web/src/main/js/components/icons-components/HouseIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/Icon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/LightBulbIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/LinkIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ListIcon.tsx
server/sonar-web/src/main/js/components/icons-components/LockIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/LongLivingBranchIcon.tsx
server/sonar-web/src/main/js/components/icons-components/MinimizeIcon.tsx
server/sonar-web/src/main/js/components/icons-components/OpenCloseIcon.tsx
server/sonar-web/src/main/js/components/icons-components/PendingIcon.tsx
server/sonar-web/src/main/js/components/icons-components/PinIcon.tsx
server/sonar-web/src/main/js/components/icons-components/PlusCircleIcon.tsx
server/sonar-web/src/main/js/components/icons-components/PlusIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ProjectEventIcon.tsx
server/sonar-web/src/main/js/components/icons-components/ProjectLinkIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/PullRequestIcon.tsx
server/sonar-web/src/main/js/components/icons-components/QualifierIcon.js [deleted file]
server/sonar-web/src/main/js/components/icons-components/QualifierIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/RuleScopeIcon.tsx
server/sonar-web/src/main/js/components/icons-components/SCMIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/SearchIcon.tsx
server/sonar-web/src/main/js/components/icons-components/SettingsIcon.tsx
server/sonar-web/src/main/js/components/icons-components/SeverityIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/ShortLivingBranchIcon.tsx
server/sonar-web/src/main/js/components/icons-components/SortAscIcon.tsx
server/sonar-web/src/main/js/components/icons-components/SortDescIcon.tsx
server/sonar-web/src/main/js/components/icons-components/StatusIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/TagsIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/TestStatusIcon.tsx [new file with mode: 0644]
server/sonar-web/src/main/js/components/icons-components/TreeIcon.tsx
server/sonar-web/src/main/js/components/icons-components/TreemapIcon.tsx
server/sonar-web/src/main/js/components/icons-components/VulnerabilityIcon.tsx
server/sonar-web/src/main/js/components/icons-components/icons.ts [deleted file]
server/sonar-web/src/main/js/components/icons-components/types.ts [deleted file]
server/sonar-web/src/main/js/components/issue/IssueView.js
server/sonar-web/src/main/js/components/issue/components/IssueActionsBar.js
server/sonar-web/src/main/js/components/issue/components/IssueChangelog.js
server/sonar-web/src/main/js/components/issue/components/IssueMessage.js
server/sonar-web/src/main/js/components/issue/components/IssueTitleBar.js
server/sonar-web/src/main/js/components/issue/components/SimilarIssuesFilter.js
server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueChangelog-test.js.snap
server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueMessage-test.js.snap
server/sonar-web/src/main/js/components/issue/components/__tests__/__snapshots__/IssueTitleBar-test.js.snap
server/sonar-web/src/main/js/components/issue/popups/SetSeverityPopup.js
server/sonar-web/src/main/js/components/issue/popups/SimilarIssuesPopup.js
server/sonar-web/src/main/js/components/nav/NavBarTabs.css
server/sonar-web/src/main/js/components/shared/QualifierIcon.tsx [deleted file]
server/sonar-web/src/main/js/components/shared/SeverityHelper.tsx
server/sonar-web/src/main/js/components/shared/SeverityIcon.tsx [deleted file]
server/sonar-web/src/main/js/components/shared/StatusHelper.tsx
server/sonar-web/src/main/js/components/shared/StatusIcon.tsx [deleted file]
server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx [deleted file]
server/sonar-web/src/main/js/components/shared/__tests__/QualifierIcon-test.tsx [deleted file]
server/sonar-web/src/main/js/components/shared/__tests__/__snapshots__/QualifierIcon-test.tsx.snap [deleted file]
server/sonar-web/src/main/js/components/tags/TagsList.tsx
server/sonar-web/src/main/js/components/tags/__tests__/__snapshots__/TagsList-test.tsx.snap
server/sonar-web/src/main/js/components/ui/buttons.css
server/sonar-web/src/main/js/components/workspace/WorkspaceComponentTitle.tsx
server/sonar-web/src/main/js/components/workspace/WorkspaceHeader.tsx
server/sonar-web/src/main/js/components/workspace/WorkspaceRuleTitle.tsx
server/sonar-web/src/main/js/components/workspace/__tests__/__snapshots__/WorkspaceRuleTitle-test.tsx.snap
sonar-plugin-api/src/main/java/org/sonar/api/web/ServletFilter.java
sonar-plugin-api/src/test/java/org/sonar/api/web/ServletFilterTest.java
tests/src/test/java/org/sonarqube/tests/rule/RulesPageTest.java

index 75bfe6ccb0c34b5dc605224b8474ef3bc08bf2bb..dbce1e3f64eff704110da04d44392049158d4b9f 100644 (file)
@@ -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;
   }
 
index 4b8365cc0a4899f2cb870a9266deb3163f603a1f..f52b779f7bdbb8a0382bfa075db5fc1f74ef19ac 100644 (file)
@@ -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");
   }
index f212eaca024539ce0f8505b248c8502ddda9f4cb..111fc23a3077c43fff69db16e5d204ae6e58751b 100644 (file)
@@ -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 (executable)
index fbc4d06..0000000
Binary files a/server/sonar-web/public/fonts/sonar-5.2.eot and /dev/null 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 (executable)
index 1d648b7..0000000
+++ /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 (executable)
index fa26fd2..0000000
Binary files a/server/sonar-web/public/fonts/sonar-5.2.ttf and /dev/null 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 (executable)
index 1e9e0d8..0000000
Binary files a/server/sonar-web/public/fonts/sonar-5.2.woff and /dev/null differ
index 88fbd9edcffe182e614647cbcfe50f6fbbee7955..28afc572245d4a66ccf145f83e1daa61fc7c6b30 100644 (file)
@@ -106,7 +106,6 @@ function runDevServer(compiler, host, port, protocol) {
     },
     proxy: {
       '/api': proxy,
-      '/fonts': proxy,
       '/static': proxy,
       '/integration': proxy
     }
index a918d734e24959d8684081f6ecbf6884122572fe..fa0fd612b5bfc1229a99308b83043758eb6ddf3b 100644 (file)
@@ -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>
index e6dae1fa20ca558a814d860f7c08d9a00e5ff45a..325d8e0b61380e97a13726fab76fdcf12c410462 100644 (file)
@@ -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';
index 86ea6e3c84a0c5e70db32c3c4a9b57cc9b490124..1f3045cfc52ee184c8d076be210308ad92eb6353 100644 (file)
@@ -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>
index 3d9fee6a289f75cb7c742dda0f9a69d5c836b4de..214b4a018d1847ab6bed684efe005966bc344a53 100644 (file)
@@ -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>
index cab30c446aef7d6c47a0360d959564ab42c7de6e..99e20aa58c566e6ab7344f6cd18d832e398c74b1 100644 (file)
@@ -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>
index ff656a311a55099cd064bba80c1a489142bececf..397603fe68d3714cd2e8a8984d53a583e85fd040 100644 (file)
@@ -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>
index 02cc378ce09719c401a8b8640e99cf804a6a692d..c8426ea96a98408ca4d61835eb9d8582a4d89261 100644 (file)
@@ -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';
index 49aa03123b615c19c282f16eaba68303e8a7c237..e77b22430da0848136f557d648547af32d8bf129 100644 (file)
   line-height: var(--controlHeight);
 }
 
-.boxed-group-header [class^='icon-'] {
-  display: inline-block;
-  vertical-align: middle;
-}
-
 .boxed-group-actions {
   position: relative;
   z-index: 12;
index 21eb1a3066a50f111b615349ee2eff2772354024..3e1635acf1d341e5ba19829d54e0e21eb8ade237 100644 (file)
 }
 
 .issue-meta-list {
+  display: flex;
+  align-items: center;
   padding-left: 10px;
 }
 
   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;
 }
index b3530f16c2e41bdf659e8fd71abd01201e116a50..537ffc19b728471d7dcca1c2c5c99b1b2a412273 100644 (file)
 
 .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 {
index c4f46239db32b456dd704595a79572137827eeda..b262be7a0e183ee825b00dda2a72d7434a50b579 100644 (file)
  * 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-'],
@@ -67,203 +47,6 @@ a[class*=' icon-'] {
   color: var(--darkBlue);
 }
 
-/*
- * 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
  */
@@ -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;
-}
index df9cd6a4b7ff50be45833c6c3424c542dbf5c23e..df357c151535b8181883e48bfb882dd39866a445 100644 (file)
@@ -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,
index a4848285d9d2bb8c919fc3e75c50ed6e56c6b080..b4624dc821e7f3351094da7402c4dbfc4aff0d71 100644 (file)
@@ -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>
index f05af84c2293b5c6a36d4d8891aab63051770817..f9946715f89a5060fe34963e756108facbec5191 100644 (file)
@@ -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>
             ))}
index 7d57ddf1205fb650230fee5e436b06da87e29ca2..3a4c6d80fe1e0c9c0c47bd59430371d31865ec60 100644 (file)
@@ -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,
index 0bd1290d6625ad06862bc7d7397af880894869e1..57473532b8ab5601b70ad31a6b55f9ba72882a95 100644 (file)
@@ -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) {
index 8b3978ea92bf54ed32b57d85a202be4f43096e1c..f1b65374fccda28ed4e2fff1761e38f00987aeed 100644 (file)
@@ -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>
           </>
index 264d79f7cc2fd345a0c3b2ac77d42772da0c545e..6ac38d6a51eacc8276630c585cff33c8b5b206eb 100644 (file)
  * 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>
   );
 }
index 9a406f659f7c06aeb99e3804ef54db732c55efda..1983c596e5f65e50857cf920777a67cf569f78f4 100644 (file)
@@ -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} />
index f7106afcc466aced20d958785c0b3403d172103d..34c9041d05a14535e89ba1beee4d43c2eb83dafa 100644 (file)
@@ -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>
     );
index deb1a36043aa9380227990a4818d983e9c71f728..c403ff97449655506c657455c15b85d9eacf25c7 100644 (file)
@@ -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}
     </>
   );
index b553e50550734402fe200926316bd8b3284b734c..b8dac9824ec5a5fa0f40083f3ec66a64f80976cb 100644 (file)
 }
 
 .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;
index 3d1130b7862f5160e6f3464cf7a2455e26cba3dd..5582f01e151eecd6ceb99411b60381a953fdc036 100644 (file)
@@ -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();
 });
index c9208efcfee48b1f15f441fa21574053cee7f9fc..49f756bc4a62a01e03a70e725a4d22128996df5d 100644 (file)
@@ -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>
index 95d0e0daceaeb186477c5d01207c0bc147323783..1fdf6a39c5631b62e808c5f726e5a3cc565bc422 100644 (file)
@@ -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>
         ) : (
index bff7ef1c39127c086e8675aa6128bc7a10abe8b2..32f8fd2bdf566ce9072403240824dffb25ce5aa9 100644 (file)
@@ -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';
 
index cb998d446987a219b34943e2b9b58cb7b70fadb4..db57e1698e47c638385277df68a5367d3da2cc3e 100644 (file)
@@ -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';
 
index 672678258e65cc4ed19027247b1ba755562cea97..9626862ec695f2b615decff46aa2700df0c0f424 100644 (file)
@@ -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 {
index 675fdb92fb007ba7527842a659c79ed55e0852da..a326a2f65e24d597726eb8b713a759b7033fd4d6 100644 (file)
@@ -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 {
index 86e876d11c5c313b6e809c77440c5c342d6d1bc8..ad563640a4fc3225086c14b5e1af69e54bb2be92 100644 (file)
@@ -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}
index ba44ec51a2955efa19b37c3a4e52794c2597694b..7a2fbe66e1201bc7fd9238fdd364f5ffac2f660f 100644 (file)
@@ -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>
     );
index a2ff350334be54eba38c032853999cd3d30c49da..a5240093619b381020926d2122fc341decb00a89 100644 (file)
@@ -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>
   );
 }
index df497ccd8fcd46012e1812a46ab9b38948ab8216..bc0bca0a822a6ce8f213eced661d50097ec3d43d 100644 (file)
@@ -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>
index 626ef846617d706bcfe88eb5b9e3e7d516bc3410..82dd13c2a2aabbf55e12a25ea7c7abdb197ec7d6 100644 (file)
@@ -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
index 7a3caf2ab7a5bad164c9083e2fbac61b8716aa24..a336ee988bf606d8abba7c91a7c3ab4598ed8529 100644 (file)
  * 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 />;
-}
index 1b37c9bfe64a8d363273e8555778b49ad404496f..553a37c7bf1c98f23b683980ac8bccae3d3f1375 100644 (file)
@@ -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>
index 7ef344a3b23614e5aedba5fdcfc471c41022d779..771e50e4292133db46104ecead0aa2621dfc4d11 100644 (file)
@@ -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 {
index de74c2bf6504de76057f2aea9e0254320a0623df..b89f1a5a3092933e9d198bb392a03e623aa5770c 100644 (file)
@@ -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 {
index 2dc04f3278b2c54ae35f4cee5a93ceec687568e8..8975275433843f542fb28d348d95914a9bda15c3 100644 (file)
@@ -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';
index 563b2398daca69673aac89ca49168b724fa1fdc9..8d816beecb0fb40a62ba918b654e0335d20e7f77 100644 (file)
@@ -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;
index a39c7cfe903f400f9c6ddb9b91ff94b737c66dc1..14725ed3c596fcf783bd2dc71ff07532bd4ee7ed 100644 (file)
@@ -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>
     );
   };
index 72e658c8727ee090448c202b14c056c04dd7f928..5537721739ed30f6afaa26f044718173d55a732f 100644 (file)
@@ -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 {
index 7c82c9e6d22cab64cb8fdca259e779c99f8d4d4d..6e280bbdc8165b25b470ef4ac3edcfa17a663f95 100644 (file)
@@ -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';
index 3cb3c7ce5863e2a749d69f29b6edb7ba81807e78..054f9777d034c1b6d83037f57355da5523e084d8 100644 (file)
@@ -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>
index 5ce4b88f3313df5e43ecab698253397c5dc8e451..fc475311f68d2b1b63551793fa62d9ceca934ef5 100644 (file)
@@ -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';
 
index 4acaf357bd9e5cab252016ca9e2521721d41643f..02c86c350883983040fd1a604475dfd90dead4c9 100644 (file)
@@ -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');
 });
index 7ac978ea69e46a380bedc8dd0a0c138c16bd91a5..b73f69f04fcf06feaffd84e35d634acbd8efada8 100644 (file)
@@ -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';
 
index e045d181f13c12e40a0911d8fc85938ea87e36d8..9a91a268bfb1d6f079d34743c6482968a79c2bd7 100644 (file)
  * 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>
     );
   }
index 935a500e979f4224f0278f002f15a4d0132a83e3..f16f9086307772fc48117414422120f1f5c9a768 100644 (file)
@@ -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);
 });
 
index dd4c07d9b84e4b546c4834cddb9a0cb280ffff88..5e7c229c427d6282278cc6ac1f445c92e06590c0 100644 (file)
@@ -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>
         )}
index 14a070daf6059ba7f59db893059394a89f1aca90..5a77e7cd965a77b7eec88eaf77cdd3b0e8ff6500 100644 (file)
@@ -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>
index 3992c45c04cd97d01c2a72acf7acf29ce1b53991..ce4b5077ba02d4a0692a0d7e6286508d5321acb5 100644 (file)
@@ -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>
index 25b32e6eadc76049771982dc8028901bb73d737b..5e4d31417d9494fa1d55f33d482e55577920f0e6 100644 (file)
@@ -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>
index 80a70b6f48e4d6bf5baa180d47e1f0b84fae630e..ba4c67f648741e66abcfa1d2d2d6ff7d14d16476 100644 (file)
@@ -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
index 1499a05acb0f9a970259e719251bb368200743c5..80ce4ba53d2fccd7697d8e05209b901bc5c3c0f4 100644 (file)
@@ -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';
index 618e258da8b603c495b247d433a422ae972a5965..88e0809d4af373a382c93950237b89b05e06d0ad 100644 (file)
@@ -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';
index 1322545356fe7e27eb6d578ded600ed28b852e48..c8cd8ce66587afabbe1c8572667c6ff7858ef05f 100644 (file)
@@ -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';
index e5434c0388cdb74bb2af31da9c2f0f4be0bf49fb..e8d9b4162de5eb875083e2f38095951e272f3e3e 100644 (file)
@@ -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';
 
index 1180729829958cdfa83421b18cbbd7c494b38aff..4782d521c0fca28023e952809caa3da6fa4ebd91 100644 (file)
@@ -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">
index 17b3e455ba05a40ff0339b18dd646c54c6a22400..6f2981c17c8dec72a98c4a1f826a787ef2b56e5e 100644 (file)
@@ -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;
index 252d26ef61818d9349a9e78b51f700efb4b278bd..3245311d458b7e020b408d4cfbb1b202465c0596 100644 (file)
@@ -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>
   );
index 95ee65b06e26ba576236adcc457c7be0d23df0f9..e69702cf848781391ba43394b50b65cce6881f16 100644 (file)
@@ -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>
     );
   };
index f13ec8871b8b953912db3b0a3d860c9ed6b45ae1..a5fa260a961198bb27d7382b4491b4b946228892 100644 (file)
  * 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>
   );
 }
index c0eadf86144850eb873599d3185119de14da33cf..8aafc8fba4f7e65dd7ec9579658453258535c030 100644 (file)
  * 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>
   );
 }
index d9fbdfa21f894f9f0bf281e20497a0a4688953da..3225cfbcbafb0dfdfa4af6649a45c82b15218295 100644 (file)
  * 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>
   );
 }
index 9ff03913a0d571074fa9f0735568a0677b373529..f4dae26605065d7f0a7e27b0a214cded2f85b470 100644 (file)
@@ -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';
 
index 786343a412c345e93442be0bb61ed11d12a524ce..168626ec2969afe637ee75801bb9fb3f450018eb 100644 (file)
  * 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>
   );
 }
index cc37a484d756824c76e26f9081d384871878e677..fee704338561309fe129885fd677effaa3b5f56d 100644 (file)
  * 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>
   );
 }
index f42e84aaa6ee66c5f5d4ccf3425b75eb7d1db740..75cb4afcce1232b4f1f0d1b4f150fddbbf6a1985 100644 (file)
  * 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>
   );
 }
index e59d3c4d37276edb77e7f4edf73ed002751987f9..97e840370c5c8da92e469b879135325b72c31348 100644 (file)
  * 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>
   );
 }
index 8ad412ea309aaac02bb481e50150c6b503a5c41f..2e3e01ddf7f542a4ebd59d3e78f86a48e244af1c 100644 (file)
  * 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>
   );
 }
index 5b4b986adbea9870e1c0aa2733eb4e52f75e6361..8cabb7d905f9a1ddb481959b6607dd869bc3ee5f 100644 (file)
  * 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>
   );
 }
index 0b5de3b7bb0725d87a6aff7e74013b7963216dff..8482a8ee941034dcbae374965c295c0862e9c1b5 100644 (file)
  * 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>
   );
 }
index e70784e8f262debf2577cbdc91c4a15db500da32..d15b44bb6b08459dd721411a376b2a95eff36e4d 100644 (file)
  * 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>
   );
 }
index 8bfb0dc22181796fef13c2c9005dce698f94daf6..86ebb6750049505bd6b6678959923297700d7b76 100644 (file)
  * 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>
   );
 }
index 86772ee15295d9fca74d7ba69e722657acbc6bb6..6139224a43031a2fac9663d7cb5075d41ee61a92 100644 (file)
  * 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>
   );
 }
index e1d105e919b0a962969badfddcf62a2a5f8d9eef..cd73db7d926baa0daf8bd2113910a7e6fe878119 100644 (file)
  * 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>
   );
 }
index 5222dec139faeef87da5004cf0e2849bffd9815a..fd8556f4b2ae3c503cfb83adc62be4a909b6740e 100644 (file)
  * 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>
   );
 }
index d5da0ec03e90315e322ac0351120bfe5c0ef94c6..2f7d8e23b5245a3640a17f5b400a055fd7336d47 100644 (file)
  */
 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>
   );
 }
index 43f1c02c7a8496d6a11d1d1d99874a8a2f5c28cd..db7fd1d3b39dfd2c477feac0817048816799b551 100644 (file)
  * 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>
   );
 }
index f1070ac740e39c3f6512b68d45c3d11c4b590b76..1e9805f061ec1e52e8a4cf7c61398746c55fa510 100644 (file)
  * 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 (file)
index 0000000..c72dd62
--- /dev/null
@@ -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>
+  );
+}
index 75b8ea4e6d1ed72e85ab2cc850d1a8fd27674231..05e3eb4dc8df23516711758199a2fda9273a1028 100644 (file)
@@ -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 {
index d7b082691199b2ce165ef7be745d85794cf55ea5..a3ebec580fa62b4b042d536ba85840f8faff6725 100644 (file)
  * 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>
   );
 }
index 3fff51c617532dce12adb1c1cb3441fb7a559bfb..50990b4f72c9a3d9f51ccc76fc67773ce5dba25e 100644 (file)
  * 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>
   );
 }
index 3cdb3fe388ac44235b0627c0ebcd6f8b98245a2f..77b35e5991aac863cf29728c1d3fd68918734648 100644 (file)
  * 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/icons-components/EllipsisIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/EllipsisIcon.tsx
new file mode 100644 (file)
index 0000000..7e3cc06
--- /dev/null
@@ -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 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>
+  );
+}
index 1105b7833edf74f80c95bc77cba0a478b87d02bb..229b9b46807c643879753dd9e70c25e9639d37f8 100644 (file)
  * 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>
   );
 }
index 866ca928857709a3993e88ad8e0ecc8261722d4f..5bfe0eadd37d488e78241583f3d6f28c2461c972 100644 (file)
  */
 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/icons-components/FilterIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/FilterIcon.tsx
new file mode 100644 (file)
index 0000000..1b0fc0d
--- /dev/null
@@ -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 FilterIcon({ className, fill = 'currentColor', size }: IconProps) {
+  return (
+    <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>
+  );
+}
index ec1c9d0b820e1348043d2be3dba41934e66ac316..edd86a1fea7624a2dc34b9760201b9f17a5427d1 100644 (file)
  * 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>
   );
 }
index 8a2d9394501feb5cf50ebfc4fbeacf6d62e265cb..50c7af6881b15768fa1d429c05e64aacf010f058 100644 (file)
  * 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>
   );
 }
index e607cad435aa7f0cfd7120d42b0213e780fb0bc9..f0b975449125db30d3e994330c7be236ee0b31c8 100644 (file)
  * 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>
   );
 }
index 2db7f50b539c18378b0e8a768286abd59a6dbd63..fb537ba5b9819fe7d44595ff521fae25b58d62dc 100644 (file)
  */
 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 (file)
index 0000000..b369529
--- /dev/null
@@ -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/Icon.tsx b/server/sonar-web/src/main/js/components/icons-components/Icon.tsx
new file mode 100644 (file)
index 0000000..40a3f9c
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * 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';
+
+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 (file)
index 0000000..27d99ab
--- /dev/null
@@ -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>
+  );
+}
index 5950062776b3eb6afc9168eee3ca6afdca62d269..81846ab602ef5f1d933954e6b9d30f6040cce189 100644 (file)
  * 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>
   );
 }
index 3c85e521d833a744b20fc88e2f1645b0e5a65d0a..55afd722eda3e66ab74517d6c49e6e553f128522 100644 (file)
  * 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/icons-components/LockIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/LockIcon.tsx
new file mode 100644 (file)
index 0000000..a6dd2bd
--- /dev/null
@@ -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 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>
+  );
+}
index fe6793ba85b54e21c2480df0dad2bc59d05f5379..50193a76d753cb58a69c0f9400ce2eda267aa0dc 100644 (file)
  * 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>
   );
 }
index 4478239ddf154559b921eae6c9d2445790414ace..f891acbe2bf0397303cfe4afdcc2d483d025383d 100644 (file)
  * 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>
   );
 }
index a42f3285601d68c84d0fc31cc5efcbd72367392f..a3fd0dd23ab1478d1a9dc962cfd13a13187bb93b 100644 (file)
@@ -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';
 
index fbf7564f50534ca66243acd2cf0924d4b12eff02..d07b45f45f911d188c1b0e6120840c7a2123eb08 100644 (file)
  * 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>
   );
 }
index 3e83487feeb704cd6458351769b253ce9d891d59..7411e56edd2e225fd54df9d186b2c8a0f8c74bcf 100644 (file)
  * 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>
   );
 }
index eb529b71d77c015060821b6bec94fb92545dab12..f9ae7c4f614f8fc7ddfa37c2ee897ab7dc715bf9 100644 (file)
  * 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>
   );
 }
index 50330780a4ce0e9832aa456a98b250632d076ddd..4e0f9cefa8258472f4f096fab402481cc52b78c7 100644 (file)
  * 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>
   );
 }
index 514073bf3d1662f2817d8e3147653d22289a8368..4f792b767e2a582d298d7541aa709fb98c695c90 100644 (file)
  * 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 (file)
index 0000000..0c5e362
--- /dev/null
@@ -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} />;
+  }
+}
index 0e7571a54dc58a2500009b6d02395ef090de252d..2d210aa9fa1f030763ddfc71dd987e4afce45133 100644 (file)
  * 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 (file)
index f050ca0..0000000
+++ /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 (file)
index 0000000..0264d83
--- /dev/null
@@ -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>
+  );
+}
index 27dcdc277e727fcf536a48a2b245526f8c80f25e..d2ab349753ae468c6b11f79fbf0c1a4e9c871d42 100644 (file)
  * 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/icons-components/SCMIcon.tsx b/server/sonar-web/src/main/js/components/icons-components/SCMIcon.tsx
new file mode 100644 (file)
index 0000000..c408f56
--- /dev/null
@@ -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 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>
+  );
+}
index 17e4141a1aad3962fff462923ba5bf6222ece731..c4d5995c8722c311866478203a05c9449568ab39 100644 (file)
  * 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>
   );
 }
index 4c14f717d3d259c21ad554752ea7cfc738908be9..7aa92495d6eaa7be32ba34fc807876ad3b49cd60 100644 (file)
  * 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 (file)
index 0000000..f1c96f0
--- /dev/null
@@ -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>
+  );
+}
index 6c41adff490dc484be9d5b7984c1b56e9da0c15e..a8bfd92d526b9c7b1e2493fbbae5e67ba5558b22 100644 (file)
  * 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>
   );
 }
index a0824e896896ef15d7c4f434582efc44630783e4..3f1fa2d0e9ecb365ab1bc428ec7f30e4b0e1acb4 100644 (file)
  * 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>
   );
 }
index 21b1c2a462dcb5697a167ae0a2f04e0429d41b7b..233183ae27adcd64e1ae659c0c55fa0e5f86cb4c 100644 (file)
  * 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 (file)
index 0000000..62c6c7b
--- /dev/null
@@ -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 (file)
index 0000000..4abfa9d
--- /dev/null
@@ -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 (file)
index 0000000..7930d25
--- /dev/null
@@ -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>
+  );
+}
index db4187076ffd71396f4c7ab8c809c21e59c1991d..b5faecee735dbb0cbb5a6b94a7d57345d2076d66 100644 (file)
  * 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>
   );
 }
index b14408b1132ab0f1c6073e2d7343ce909c391e5c..e5133c8d84c70ab6528b4f5a2e3583d1668d86bb 100644 (file)
  * 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>
   );
 }
index 34b5f1153f09be765329211a0d2695d2a6fbe969..76e7857086791ffc9c0d4b89efada76238ad6330 100644 (file)
  * 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 (file)
index 5483ff8..0000000
+++ /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/icons-components/types.ts b/server/sonar-web/src/main/js/components/icons-components/types.ts
deleted file mode 100644 (file)
index e196f63..0000000
+++ /dev/null
@@ -1,24 +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 interface IconProps {
-  className?: string;
-  fill?: string;
-  size?: number;
-}
index 0598c4f9f07e75ded0ec30e4ac48c4f4adfbc507..100e1942d232899847d5d1633e8aee72b69803e4 100644 (file)
@@ -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
index 2cfeb1544cf49a0f1fb26688b93901e2ff7e18b3..fb892131a08bccda3918d75993598ff859545d75 100644 (file)
@@ -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}
index a70f6ca5a33584d8a3177e5d403c0a714b91a9c3..3b6135a0d91b31580c9098abe5c98f293eb4ca4f 100644 (file)
@@ -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>
index 74bf39609ab1d28f7c1246ce03148b01562b1c3e..5b4e82d413b87077b497d761a61580ccf332bcec 100644 (file)
@@ -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)}>
index 781eebd1f0622578e078d3e578b029004833a56a..b19581aea98c9bcf06262f195b38faecf3eaaf50 100644 (file)
@@ -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}
index 5b900ac2e48c9388659a7441592428f1529f3a48..2ad9a5353f44f8872b7973f1e518d8a021e7403e 100644 (file)
@@ -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>
index 0628de785bf3a75f348db074ffa5703c6ab85dd5..7ba9bfa806c538af5682582a7e991c9ed7efa1ca 100644 (file)
@@ -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>
index 91587572e8845661ca86f8797354ea8368ff3213..edda212b2f0f2a474f660a18a5c32bfab8321d13 100644 (file)
@@ -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>
 `;
index 93d4a3f72d2168b10affcec07ba503e110748dde..47648a5f921c4ad4a8d642495c4a6a8d2bf412b7 100644 (file)
@@ -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"
index 2d3c2232f88c94ae7018b8bf754aa2f5b5d1e6df..3a0a211f1d66f38565bb95e8f66014be1a096840 100644 (file)
@@ -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'; */
 
index 7a28c6594edb6842905fe8603b897b8db7cc59de..77273cd9f39f49ad46b1769841ace53dd79f879e 100644 (file)
@@ -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>
             ))}
 
index 366aaf02b49285668a0027c521211b5e3ffee548..fdd7a4247995970ba9d8276fadffe48a97adaca7 100644 (file)
@@ -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/QualifierIcon.tsx b/server/sonar-web/src/main/js/components/shared/QualifierIcon.tsx
deleted file mode 100644 (file)
index 3b6c0c1..0000000
+++ /dev/null
@@ -1,36 +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 * as classNames from 'classnames';
-
-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} />;
-}
index 40788425b7b4e45756dd5fad6651f30851bd48da..bd81a6e7d536a8c85fe914b4a073936ebda1e89a 100644 (file)
@@ -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/SeverityIcon.tsx b/server/sonar-web/src/main/js/components/shared/SeverityIcon.tsx
deleted file mode 100644 (file)
index 38ee508..0000000
+++ /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 * as classNames from 'classnames';
-
-interface Props {
-  className?: string;
-  severity: string | null | undefined;
-}
-
-export default function SeverityIcon(props: Props) {
-  if (!props.severity) {
-    return null;
-  }
-  return (
-    <i className={classNames('icon-severity-' + props.severity.toLowerCase(), props.className)} />
-  );
-}
index b6921effdac5ff22e5b885c1e8cca442f9aaf57c..f5cd7f21dc9de7b356856a4e67685a35fe146044 100644 (file)
@@ -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/StatusIcon.tsx b/server/sonar-web/src/main/js/components/shared/StatusIcon.tsx
deleted file mode 100644 (file)
index d043b03..0000000
+++ /dev/null
@@ -1,30 +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 * as classNames from 'classnames';
-
-interface Props {
-  className?: string;
-  status: string;
-}
-
-export default function StatusIcon({ className, status }: Props) {
-  return <i className={classNames('icon-status-' + status.toLowerCase(), className)} />;
-}
diff --git a/server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx b/server/sonar-web/src/main/js/components/shared/TestStatusIcon.tsx
deleted file mode 100644 (file)
index c54fca5..0000000
+++ /dev/null
@@ -1,30 +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 * as classNames from 'classnames';
-
-interface Props {
-  className?: string;
-  status: string;
-}
-
-export default function TestStatusIcon({ className, status }: Props) {
-  return <i className={classNames('icon-test-status-' + status.toLowerCase(), className)} />;
-}
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 (file)
index 0616927..0000000
+++ /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 (file)
index 3e1625b..0000000
+++ /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"
-/>
-`;
index eaf08bd4fb6e6338988a5c354a37f56a5c5d2622..4ae39231a1b732b3378567ce9c5b0343f62eaaf4 100644 (file)
@@ -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>
   );
 }
index 3ea92ee6e2020ab722c86701fdccc917d32dc3ea..4a09b986130cc5de1e4428a32541901cbe994ad4 100644 (file)
@@ -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>
index ea2ff4b6b13b4ce361bc46826e0051390370b7b3..81344085756e34140828218d82ca75f36a8e33ca 100644 (file)
@@ -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;
   box-shadow: none !important;
 }
 
-.button svg {
-  margin-top: calc((var(--controlHeight) - 16px - 2px) / 2);
-}
-
 /* #region .button-red */
 .button-red {
   border-color: var(--red);
   transition: all 0.2s ease;
 }
 
-.button-link svg {
-  margin-top: 0;
-}
-
 .button-link:hover {
   background: transparent;
   color: var(--blue);
   font-size: 11px;
 }
 
-.button-small > svg {
-  margin-top: 2px;
-}
-
 /* #region .button-group */
 .button-group {
   display: inline-block;
index 8679e169731c3cf8b5c8c965a0d07e23ad4db2f0..0f18a038c89d692e4ebbaac0464d1c9633725b0f 100644 (file)
@@ -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 {
index 011991dd54d73b688791b2476d162db8184b819c..f1197e7bf13079c9c9cf0d5db579ae48ae7cdc61 100644 (file)
@@ -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;
index ac7387ce23b504235c7bbf6bc6cb1291220b384b..3c35798f4ac0c2c9612571c6c5509d7d87a99a33 100644 (file)
@@ -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}
     </>
   );
index 5ba5fc924a91d221221967781bb0afe8ea7a02a6..9d5ae7288165c8b0f5038dfd7e21a9c8de329571 100644 (file)
@@ -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>
index fd4bad56bc47423d4052c0a03d59e30905798702..502d17cab79c2ef624e53cdf34e8c5cedd4e1517 100644 (file)
@@ -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*"
       ));
 
index 33389b6a3213f49db51100aae174dbf4c7df42c9..84e800559cee05865f57c53a0873e1fda826ba34 100644 (file)
@@ -238,9 +238,6 @@ public class ServletFilterTest {
       "*.svg",
       "*.js",
       "*.js.map",
-      "*.eot",
-      "*.ttf",
-      "*.woff",
       "/static/*",
       "/robots.txt",
       "/favicon.ico",
index c7fc21f5ccc37812379d66b4813430ff5480c3e1..94b712785f0b6e5f225d2d2ef0d8f3be334f8cf0 100644 (file)
@@ -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() {