19504: Use MDI frozen icon for better icon alignment
[arvados-workbench2.git] / src / components / icon / icon.tsx
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 import React from 'react';
6 import { Badge, SvgIcon, Tooltip } from '@material-ui/core';
7 import Add from '@material-ui/icons/Add';
8 import ArrowBack from '@material-ui/icons/ArrowBack';
9 import ArrowDropDown from '@material-ui/icons/ArrowDropDown';
10 import BubbleChart from '@material-ui/icons/BubbleChart';
11 import Build from '@material-ui/icons/Build';
12 import Cached from '@material-ui/icons/Cached';
13 import DescriptionIcon from '@material-ui/icons/Description';
14 import ChevronLeft from '@material-ui/icons/ChevronLeft';
15 import CloudUpload from '@material-ui/icons/CloudUpload';
16 import Code from '@material-ui/icons/Code';
17 import Create from '@material-ui/icons/Create';
18 import ImportContacts from '@material-ui/icons/ImportContacts';
19 import ChevronRight from '@material-ui/icons/ChevronRight';
20 import Close from '@material-ui/icons/Close';
21 import ContentCopy from '@material-ui/icons/FileCopyOutlined';
22 import CreateNewFolder from '@material-ui/icons/CreateNewFolder';
23 import Delete from '@material-ui/icons/Delete';
24 import DeviceHub from '@material-ui/icons/DeviceHub';
25 import Edit from '@material-ui/icons/Edit';
26 import ErrorRoundedIcon from '@material-ui/icons/ErrorRounded';
27 import ExpandMoreIcon from '@material-ui/icons/ExpandMore';
28 import FlipToFront from '@material-ui/icons/FlipToFront';
29 import Folder from '@material-ui/icons/Folder';
30 import FolderShared from '@material-ui/icons/FolderShared';
31 import Pageview from '@material-ui/icons/Pageview';
32 import GetApp from '@material-ui/icons/GetApp';
33 import Help from '@material-ui/icons/Help';
34 import HelpOutline from '@material-ui/icons/HelpOutline';
35 import History from '@material-ui/icons/History';
36 import Inbox from '@material-ui/icons/Inbox';
37 import MoveToInbox from '@material-ui/icons/MoveToInbox';
38 import Info from '@material-ui/icons/Info';
39 import Input from '@material-ui/icons/Input';
40 import InsertDriveFile from '@material-ui/icons/InsertDriveFile';
41 import LastPage from '@material-ui/icons/LastPage';
42 import LibraryBooks from '@material-ui/icons/LibraryBooks';
43 import ListAlt from '@material-ui/icons/ListAlt';
44 import Menu from '@material-ui/icons/Menu';
45 import MoreVert from '@material-ui/icons/MoreVert';
46 import Mail from '@material-ui/icons/Mail';
47 import Notifications from '@material-ui/icons/Notifications';
48 import OpenInNew from '@material-ui/icons/OpenInNew';
49 import People from '@material-ui/icons/People';
50 import Person from '@material-ui/icons/Person';
51 import PersonAdd from '@material-ui/icons/PersonAdd';
52 import PlayArrow from '@material-ui/icons/PlayArrow';
53 import Public from '@material-ui/icons/Public';
54 import RateReview from '@material-ui/icons/RateReview';
55 import RestoreFromTrash from '@material-ui/icons/History';
56 import Search from '@material-ui/icons/Search';
57 import SettingsApplications from '@material-ui/icons/SettingsApplications';
58 import SettingsEthernet from '@material-ui/icons/SettingsEthernet';
59 import Settings from '@material-ui/icons/Settings';
60 import Star from '@material-ui/icons/Star';
61 import StarBorder from '@material-ui/icons/StarBorder';
62 import Warning from '@material-ui/icons/Warning';
63 import VpnKey from '@material-ui/icons/VpnKey';
64 import LinkOutlined from '@material-ui/icons/LinkOutlined';
65 import RemoveRedEye from '@material-ui/icons/RemoveRedEye';
66 import Computer from '@material-ui/icons/Computer';
67 import WrapText from '@material-ui/icons/WrapText';
68 import TextIncrease from '@material-ui/icons/ZoomIn';
69 import TextDecrease from '@material-ui/icons/ZoomOut';
70 import FullscreenSharp from '@material-ui/icons/FullscreenSharp';
71 import FullscreenExitSharp from '@material-ui/icons/FullscreenExitSharp';
72 import ExitToApp from '@material-ui/icons/ExitToApp';
73 import CheckCircleOutline from '@material-ui/icons/CheckCircleOutline';
74 import RemoveCircleOutline from '@material-ui/icons/RemoveCircleOutline';
75 import NotInterested from '@material-ui/icons/NotInterested';
76 import Image from '@material-ui/icons/Image';
77
78 // Import FontAwesome icons
79 import { library } from '@fortawesome/fontawesome-svg-core';
80 import { faPencilAlt, faSlash, faUsers, faEllipsisH } from '@fortawesome/free-solid-svg-icons';
81 import { FormatAlignLeft } from '@material-ui/icons';
82 library.add(
83     faPencilAlt,
84     faSlash,
85     faUsers,
86     faEllipsisH,
87 );
88
89 export const FreezeIcon = (props: any) =>
90     <SvgIcon {...props}>
91         <path d="M20.79,13.95L18.46,14.57L16.46,13.44V10.56L18.46,9.43L20.79,10.05L21.31,8.12L19.54,7.65L20,5.88L18.07,5.36L17.45,7.69L15.45,8.82L13,7.38V5.12L14.71,3.41L13.29,2L12,3.29L10.71,2L9.29,3.41L11,5.12V7.38L8.5,8.82L6.5,7.69L5.92,5.36L4,5.88L4.47,7.65L2.7,8.12L3.22,10.05L5.55,9.43L7.55,10.56V13.45L5.55,14.58L3.22,13.96L2.7,15.89L4.47,16.36L4,18.12L5.93,18.64L6.55,16.31L8.55,15.18L11,16.62V18.88L9.29,20.59L10.71,22L12,20.71L13.29,22L14.7,20.59L13,18.88V16.62L15.5,15.17L17.5,16.3L18.12,18.63L20,18.12L19.53,16.35L21.3,15.88L20.79,13.95M9.5,10.56L12,9.11L14.5,10.56V13.44L12,14.89L9.5,13.44V10.56Z" />
92     </SvgIcon>
93
94 export const UnfreezeIcon = (props: any) =>
95     <SvgIcon {...props}>
96         <path d="M11 5.12L9.29 3.41L10.71 2L12 3.29L13.29 2L14.71 3.41L13 5.12V7.38L15.45 8.82L17.45 7.69L18.07 5.36L20 5.88L19.54 7.65L21.31 8.12L20.79 10.05L18.46 9.43L16.46 10.56V13.26L14.5 11.3V10.56L12.74 9.54L10.73 7.53L11 7.38V5.12M18.46 14.57L16.87 13.67L19.55 16.35L21.3 15.88L20.79 13.95L18.46 14.57M13 16.62V18.88L14.7 20.59L13.29 22L12 20.71L10.71 22L9.29 20.59L11 18.88V16.62L8.55 15.18L6.55 16.31L5.93 18.64L4 18.12L4.47 16.36L2.7 15.89L3.22 13.96L5.55 14.58L7.55 13.45V10.56L5.55 9.43L3.22 10.05L2.7 8.12L4.47 7.65L4 5.89L1.11 3L2.39 1.73L22.11 21.46L20.84 22.73L14.1 16L13 16.62M12 14.89L12.63 14.5L9.5 11.39V13.44L12 14.89Z" />
97     </SvgIcon>
98
99 export const PendingIcon = (props: any) =>
100     <span {...props}>
101         <span className='fas fa-ellipsis-h' />
102     </span>
103
104 export const ReadOnlyIcon = (props: any) =>
105     <span {...props}>
106         <div className="fa-layers fa-1x fa-fw">
107             <span className="fas fa-slash"
108                 data-fa-mask="fas fa-pencil-alt" data-fa-transform="down-1.5" />
109             <span className="fas fa-slash" />
110         </div>
111     </span>;
112
113 export const GroupsIcon = (props: any) =>
114     <span {...props}>
115         <span className="fas fa-users" />
116     </span>;
117
118 export const CollectionOldVersionIcon = (props: any) =>
119     <Tooltip title='Old version'>
120         <Badge badgeContent={<History fontSize='small' />}>
121             <CollectionIcon {...props} />
122         </Badge>
123     </Tooltip>;
124
125 // https://materialdesignicons.com/icon/image-off
126 export const ImageOffIcon = (props: any) =>
127     <SvgIcon {...props}>
128         <path d="M21 17.2L6.8 3H19C20.1 3 21 3.9 21 5V17.2M20.7 22L19.7 21H5C3.9 21 3 20.1 3 19V4.3L2 3.3L3.3 2L22 20.7L20.7 22M16.8 18L12.9 14.1L11 16.5L8.5 13.5L5 18H16.8Z" />
129     </SvgIcon>;
130
131 // https://materialdesignicons.com/icon/inbox-arrow-up
132 export const OutputIcon: IconType = (props: any) =>
133     <SvgIcon {...props}>
134         <path d="M14,14H10V11H8L12,7L16,11H14V14M16,11M5,15V5H19V15H15A3,3 0 0,1 12,18A3,3 0 0,1 9,15H5M19,3H5C3.89,3 3,3.9 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5A2,2 0 0,0 19,3" />
135     </SvgIcon>;
136
137 export type IconType = React.SFC<{ className?: string, style?: object }>;
138
139 export const AddIcon: IconType = (props) => <Add {...props} />;
140 export const AddFavoriteIcon: IconType = (props) => <StarBorder {...props} />;
141 export const AdminMenuIcon: IconType = (props) => <Build {...props} />;
142 export const AdvancedIcon: IconType = (props) => <SettingsApplications {...props} />;
143 export const AttributesIcon: IconType = (props) => <ListAlt {...props} />;
144 export const BackIcon: IconType = (props) => <ArrowBack {...props} />;
145 export const CustomizeTableIcon: IconType = (props) => <Menu {...props} />;
146 export const CommandIcon: IconType = (props) => <LastPage {...props} />;
147 export const CopyIcon: IconType = (props) => <ContentCopy {...props} />;
148 export const CollectionIcon: IconType = (props) => <LibraryBooks {...props} />;
149 export const CloseIcon: IconType = (props) => <Close {...props} />;
150 export const CloudUploadIcon: IconType = (props) => <CloudUpload {...props} />;
151 export const DefaultIcon: IconType = (props) => <RateReview {...props} />;
152 export const DetailsIcon: IconType = (props) => <Info {...props} />;
153 export const DirectoryIcon: IconType = (props) => <Folder {...props} />;
154 export const DownloadIcon: IconType = (props) => <GetApp {...props} />;
155 export const EditSavedQueryIcon: IconType = (props) => <Create {...props} />;
156 export const ExpandIcon: IconType = (props) => <ExpandMoreIcon {...props} />;
157 export const ErrorIcon: IconType = (props) => <ErrorRoundedIcon style={{ color: '#ff0000' }} {...props} />;
158 export const FavoriteIcon: IconType = (props) => <Star {...props} />;
159 export const FileIcon: IconType = (props) => <DescriptionIcon {...props} />;
160 export const HelpIcon: IconType = (props) => <Help {...props} />;
161 export const HelpOutlineIcon: IconType = (props) => <HelpOutline {...props} />;
162 export const ImportContactsIcon: IconType = (props) => <ImportContacts {...props} />;
163 export const InfoIcon: IconType = (props) => <Info {...props} />;
164 export const FileInputIcon: IconType = (props) => <InsertDriveFile {...props} />;
165 export const KeyIcon: IconType = (props) => <VpnKey {...props} />;
166 export const LogIcon: IconType = (props) => <SettingsEthernet {...props} />;
167 export const MailIcon: IconType = (props) => <Mail {...props} />;
168 export const MaximizeIcon: IconType = (props) => <FullscreenSharp {...props} />;
169 export const UnMaximizeIcon: IconType = (props) => <FullscreenExitSharp {...props} />;
170 export const MoreOptionsIcon: IconType = (props) => <MoreVert {...props} />;
171 export const MoveToIcon: IconType = (props) => <Input {...props} />;
172 export const NewProjectIcon: IconType = (props) => <CreateNewFolder {...props} />;
173 export const NotificationIcon: IconType = (props) => <Notifications {...props} />;
174 export const OpenIcon: IconType = (props) => <OpenInNew {...props} />;
175 export const InputIcon: IconType = (props) => <MoveToInbox {...props} />;
176 export const PaginationDownIcon: IconType = (props) => <ArrowDropDown {...props} />;
177 export const PaginationLeftArrowIcon: IconType = (props) => <ChevronLeft {...props} />;
178 export const PaginationRightArrowIcon: IconType = (props) => <ChevronRight {...props} />;
179 export const ProcessIcon: IconType = (props) => <BubbleChart {...props} />;
180 export const ProjectIcon: IconType = (props) => <Folder {...props} />;
181 export const FilterGroupIcon: IconType = (props) => <Pageview {...props} />;
182 export const ProjectsIcon: IconType = (props) => <Inbox {...props} />;
183 export const ProvenanceGraphIcon: IconType = (props) => <DeviceHub {...props} />;
184 export const RemoveIcon: IconType = (props) => <Delete {...props} />;
185 export const RemoveFavoriteIcon: IconType = (props) => <Star {...props} />;
186 export const PublicFavoriteIcon: IconType = (props) => <Public {...props} />;
187 export const RenameIcon: IconType = (props) => <Edit {...props} />;
188 export const RestoreVersionIcon: IconType = (props) => <FlipToFront {...props} />;
189 export const RestoreFromTrashIcon: IconType = (props) => <RestoreFromTrash {...props} />;
190 export const ReRunProcessIcon: IconType = (props) => <Cached {...props} />;
191 export const SearchIcon: IconType = (props) => <Search {...props} />;
192 export const ShareIcon: IconType = (props) => <PersonAdd {...props} />;
193 export const ShareMeIcon: IconType = (props) => <People {...props} />;
194 export const SidePanelRightArrowIcon: IconType = (props) => <PlayArrow {...props} />;
195 export const TrashIcon: IconType = (props) => <Delete {...props} />;
196 export const UserPanelIcon: IconType = (props) => <Person {...props} />;
197 export const UsedByIcon: IconType = (props) => <Folder {...props} />;
198 export const WorkflowIcon: IconType = (props) => <Code {...props} />;
199 export const WarningIcon: IconType = (props) => <Warning style={{ color: '#fbc02d', height: '30px', width: '30px' }} {...props} />;
200 export const Link: IconType = (props) => <LinkOutlined {...props} />;
201 export const FolderSharedIcon: IconType = (props) => <FolderShared {...props} />;
202 export const CanReadIcon: IconType = (props) => <RemoveRedEye {...props} />;
203 export const CanWriteIcon: IconType = (props) => <Edit {...props} />;
204 export const CanManageIcon: IconType = (props) => <Computer {...props} />;
205 export const AddUserIcon: IconType = (props) => <PersonAdd {...props} />;
206 export const WordWrapOnIcon: IconType = (props) => <WrapText {...props} />;
207 export const WordWrapOffIcon: IconType = (props) => <FormatAlignLeft {...props} />;
208 export const TextIncreaseIcon: IconType = (props) => <TextIncrease {...props} />;
209 export const TextDecreaseIcon: IconType = (props) => <TextDecrease {...props} />;
210 export const DeactivateUserIcon: IconType = (props) => <NotInterested {...props} />;
211 export const LoginAsIcon: IconType = (props) => <ExitToApp {...props} />;
212 export const ActiveIcon: IconType = (props) => <CheckCircleOutline {...props} />;
213 export const SetupIcon: IconType = (props) => <RemoveCircleOutline {...props} />;
214 export const InactiveIcon: IconType = (props) => <NotInterested {...props} />;
215 export const ImageIcon: IconType = (props) => <Image {...props} />;
216 export const ProcessBreadcrumbIcon: IconType = (props) => <Settings {...props} />;