19300: Adds un-maximize button to every maximizable panel.
[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 Star from '@material-ui/icons/Star';
60 import StarBorder from '@material-ui/icons/StarBorder';
61 import Warning from '@material-ui/icons/Warning';
62 import VpnKey from '@material-ui/icons/VpnKey';
63 import LinkOutlined from '@material-ui/icons/LinkOutlined';
64 import RemoveRedEye from '@material-ui/icons/RemoveRedEye';
65 import Computer from '@material-ui/icons/Computer';
66 import WrapText from '@material-ui/icons/WrapText';
67 import TextIncrease from '@material-ui/icons/ZoomIn';
68 import TextDecrease from '@material-ui/icons/ZoomOut';
69 import FullscreenSharp from '@material-ui/icons/FullscreenSharp';
70 import FullscreenExitSharp from '@material-ui/icons/FullscreenExitSharp';
71 import ExitToApp from '@material-ui/icons/ExitToApp';
72 import CheckCircleOutline from '@material-ui/icons/CheckCircleOutline';
73 import RemoveCircleOutline from '@material-ui/icons/RemoveCircleOutline';
74 import NotInterested from '@material-ui/icons/NotInterested';
75 import Image from '@material-ui/icons/Image';
76
77 // Import FontAwesome icons
78 import { library } from '@fortawesome/fontawesome-svg-core';
79 import { faPencilAlt, faSlash, faUsers, faEllipsisH } from '@fortawesome/free-solid-svg-icons';
80 import { FormatAlignLeft } from '@material-ui/icons';
81 library.add(
82     faPencilAlt,
83     faSlash,
84     faUsers,
85     faEllipsisH,
86 );
87
88 export const FreezeIcon = (props: any) =>
89     <span {...props}>
90         <span className='fas fa-snowflake' />
91     </span>
92
93 export const UnfreezeIcon = (props: any) =>
94     <div {...props}>
95         <div className="fa-layers fa-1x fa-fw">
96             <span className="fas fa-slash"
97                 data-fa-mask="fas fa-snowflake" data-fa-transform="down-1.5" />
98             <span className="fas fa-slash" />
99         </div>
100     </div>;
101
102 export const PendingIcon = (props: any) =>
103     <span {...props}>
104         <span className='fas fa-ellipsis-h' />
105     </span>
106
107 export const ReadOnlyIcon = (props: any) =>
108     <span {...props}>
109         <div className="fa-layers fa-1x fa-fw">
110             <span className="fas fa-slash"
111                 data-fa-mask="fas fa-pencil-alt" data-fa-transform="down-1.5" />
112             <span className="fas fa-slash" />
113         </div>
114     </span>;
115
116 export const GroupsIcon = (props: any) =>
117     <span {...props}>
118         <span className="fas fa-users" />
119     </span>;
120
121 export const CollectionOldVersionIcon = (props: any) =>
122     <Tooltip title='Old version'>
123         <Badge badgeContent={<History fontSize='small' />}>
124             <CollectionIcon {...props} />
125         </Badge>
126     </Tooltip>;
127
128 // https://materialdesignicons.com/icon/image-off
129 export const ImageOffIcon = (props: any) =>
130     <SvgIcon {...props}>
131         <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" />
132     </SvgIcon>;
133
134 // https://materialdesignicons.com/icon/inbox-arrow-up
135 export const OutputIcon: IconType = (props: any) =>
136     <SvgIcon {...props}>
137         <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" />
138     </SvgIcon>;
139
140 export type IconType = React.SFC<{ className?: string, style?: object }>;
141
142 export const AddIcon: IconType = (props) => <Add {...props} />;
143 export const AddFavoriteIcon: IconType = (props) => <StarBorder {...props} />;
144 export const AdminMenuIcon: IconType = (props) => <Build {...props} />;
145 export const AdvancedIcon: IconType = (props) => <SettingsApplications {...props} />;
146 export const AttributesIcon: IconType = (props) => <ListAlt {...props} />;
147 export const BackIcon: IconType = (props) => <ArrowBack {...props} />;
148 export const CustomizeTableIcon: IconType = (props) => <Menu {...props} />;
149 export const CommandIcon: IconType = (props) => <LastPage {...props} />;
150 export const CopyIcon: IconType = (props) => <ContentCopy {...props} />;
151 export const CollectionIcon: IconType = (props) => <LibraryBooks {...props} />;
152 export const CloseIcon: IconType = (props) => <Close {...props} />;
153 export const CloudUploadIcon: IconType = (props) => <CloudUpload {...props} />;
154 export const DefaultIcon: IconType = (props) => <RateReview {...props} />;
155 export const DetailsIcon: IconType = (props) => <Info {...props} />;
156 export const DirectoryIcon: IconType = (props) => <Folder {...props} />;
157 export const DownloadIcon: IconType = (props) => <GetApp {...props} />;
158 export const EditSavedQueryIcon: IconType = (props) => <Create {...props} />;
159 export const ExpandIcon: IconType = (props) => <ExpandMoreIcon {...props} />;
160 export const ErrorIcon: IconType = (props) => <ErrorRoundedIcon style={{ color: '#ff0000' }} {...props} />;
161 export const FavoriteIcon: IconType = (props) => <Star {...props} />;
162 export const FileIcon: IconType = (props) => <DescriptionIcon {...props} />;
163 export const HelpIcon: IconType = (props) => <Help {...props} />;
164 export const HelpOutlineIcon: IconType = (props) => <HelpOutline {...props} />;
165 export const ImportContactsIcon: IconType = (props) => <ImportContacts {...props} />;
166 export const InfoIcon: IconType = (props) => <Info {...props} />;
167 export const FileInputIcon: IconType = (props) => <InsertDriveFile {...props} />;
168 export const KeyIcon: IconType = (props) => <VpnKey {...props} />;
169 export const LogIcon: IconType = (props) => <SettingsEthernet {...props} />;
170 export const MailIcon: IconType = (props) => <Mail {...props} />;
171 export const MaximizeIcon: IconType = (props) => <FullscreenSharp {...props} />;
172 export const UnMaximizeIcon: IconType = (props) => <FullscreenExitSharp {...props} />;
173 export const MoreOptionsIcon: IconType = (props) => <MoreVert {...props} />;
174 export const MoveToIcon: IconType = (props) => <Input {...props} />;
175 export const NewProjectIcon: IconType = (props) => <CreateNewFolder {...props} />;
176 export const NotificationIcon: IconType = (props) => <Notifications {...props} />;
177 export const OpenIcon: IconType = (props) => <OpenInNew {...props} />;
178 export const InputIcon: IconType = (props) => <MoveToInbox {...props} />;
179 export const PaginationDownIcon: IconType = (props) => <ArrowDropDown {...props} />;
180 export const PaginationLeftArrowIcon: IconType = (props) => <ChevronLeft {...props} />;
181 export const PaginationRightArrowIcon: IconType = (props) => <ChevronRight {...props} />;
182 export const ProcessIcon: IconType = (props) => <BubbleChart {...props} />;
183 export const ProjectIcon: IconType = (props) => <Folder {...props} />;
184 export const FilterGroupIcon: IconType = (props) => <Pageview {...props} />;
185 export const ProjectsIcon: IconType = (props) => <Inbox {...props} />;
186 export const ProvenanceGraphIcon: IconType = (props) => <DeviceHub {...props} />;
187 export const RemoveIcon: IconType = (props) => <Delete {...props} />;
188 export const RemoveFavoriteIcon: IconType = (props) => <Star {...props} />;
189 export const PublicFavoriteIcon: IconType = (props) => <Public {...props} />;
190 export const RenameIcon: IconType = (props) => <Edit {...props} />;
191 export const RestoreVersionIcon: IconType = (props) => <FlipToFront {...props} />;
192 export const RestoreFromTrashIcon: IconType = (props) => <RestoreFromTrash {...props} />;
193 export const ReRunProcessIcon: IconType = (props) => <Cached {...props} />;
194 export const SearchIcon: IconType = (props) => <Search {...props} />;
195 export const ShareIcon: IconType = (props) => <PersonAdd {...props} />;
196 export const ShareMeIcon: IconType = (props) => <People {...props} />;
197 export const SidePanelRightArrowIcon: IconType = (props) => <PlayArrow {...props} />;
198 export const TrashIcon: IconType = (props) => <Delete {...props} />;
199 export const UserPanelIcon: IconType = (props) => <Person {...props} />;
200 export const UsedByIcon: IconType = (props) => <Folder {...props} />;
201 export const WorkflowIcon: IconType = (props) => <Code {...props} />;
202 export const WarningIcon: IconType = (props) => <Warning style={{ color: '#fbc02d', height: '30px', width: '30px' }} {...props} />;
203 export const Link: IconType = (props) => <LinkOutlined {...props} />;
204 export const FolderSharedIcon: IconType = (props) => <FolderShared {...props} />;
205 export const CanReadIcon: IconType = (props) => <RemoveRedEye {...props} />;
206 export const CanWriteIcon: IconType = (props) => <Edit {...props} />;
207 export const CanManageIcon: IconType = (props) => <Computer {...props} />;
208 export const AddUserIcon: IconType = (props) => <PersonAdd {...props} />;
209 export const WordWrapOnIcon: IconType = (props) => <WrapText {...props} />;
210 export const WordWrapOffIcon: IconType = (props) => <FormatAlignLeft {...props} />;
211 export const TextIncreaseIcon: IconType = (props) => <TextIncrease {...props} />;
212 export const TextDecreaseIcon: IconType = (props) => <TextDecrease {...props} />;
213 export const DeactivateUserIcon: IconType = (props) => <NotInterested {...props} />;
214 export const LoginAsIcon: IconType = (props) => <ExitToApp {...props} />;
215 export const ActiveIcon: IconType = (props) => <CheckCircleOutline {...props} />;
216 export const SetupIcon: IconType = (props) => <RemoveCircleOutline {...props} />;
217 export const InactiveIcon: IconType = (props) => <NotInterested {...props} />;
218 export const ImageIcon: IconType = (props) => <Image {...props} />;