import React, { forwardRef, Ref } from "react"; import { ReactComponent as DeleteIcon } from "assets/icons/ads/delete.svg"; import { ReactComponent as UserIcon } from "assets/icons/ads/user.svg"; import { ReactComponent as GeneralIcon } from "assets/icons/ads/general.svg"; import { ReactComponent as BillingIcon } from "assets/icons/ads/billing.svg"; import { ReactComponent as EditIcon } from "assets/icons/ads/edit.svg"; import { ReactComponent as ErrorIcon } from "assets/icons/ads/error.svg"; import { ReactComponent as SuccessIcon } from "assets/icons/ads/success.svg"; import { ReactComponent as SearchIcon } from "assets/icons/ads/search.svg"; import { ReactComponent as CloseIcon } from "assets/icons/ads/close.svg"; import { ReactComponent as WarningIcon } from "assets/icons/ads/warning.svg"; import { ReactComponent as DownArrow } from "assets/icons/ads/down_arrow.svg"; import { ReactComponent as ShareIcon } from "assets/icons/ads/share.svg"; import { ReactComponent as RocketIcon } from "assets/icons/ads/launch.svg"; import { ReactComponent as WorkspaceIcon } from "assets/icons/ads/workspace.svg"; import { ReactComponent as CreateNewIcon } from "assets/icons/ads/create-new.svg"; import { ReactComponent as InviteUserIcon } from "assets/icons/ads/invite-users.svg"; import { ReactComponent as ViewAllIcon } from "assets/icons/ads/view-all.svg"; import { ReactComponent as ViewLessIcon } from "assets/icons/ads/view-less.svg"; import { ReactComponent as ContextMenuIcon } from "assets/icons/ads/context-menu.svg"; import { ReactComponent as DuplicateIcon } from "assets/icons/ads/duplicate.svg"; import { ReactComponent as LogoutIcon } from "assets/icons/ads/logout.svg"; import { ReactComponent as ManageIcon } from "assets/icons/ads/manage.svg"; import { ReactComponent as ArrowLeft } from "assets/icons/ads/arrow-left.svg"; import { ReactComponent as Fork } from "assets/icons/ads/fork.svg"; import { ReactComponent as ChevronLeft } from "assets/icons/ads/chevron_left.svg"; import { ReactComponent as ChevronRight } from "assets/icons/ads/chevron_right.svg"; import styled from "styled-components"; import { CommonComponentProps, Classes } from "./common"; import { noop } from "lodash"; import { theme } from "constants/DefaultTheme"; import Spinner from "./Spinner"; export enum IconSize { XXS = "extraExtraSmall", XS = "extraSmall", SMALL = "small", MEDIUM = "medium", LARGE = "large", XL = "extraLarge", XXL = "extraExtraLarge", XXXL = "extraExtraExtraLarge", } export const sizeHandler = (size?: IconSize) => { let iconSize = 0; switch (size) { case IconSize.XXS: iconSize = theme.iconSizes.XXS; break; case IconSize.XS: iconSize = theme.iconSizes.XS; break; case IconSize.SMALL: iconSize = theme.iconSizes.SMALL; break; case IconSize.MEDIUM: iconSize = theme.iconSizes.MEDIUM; break; case IconSize.LARGE: iconSize = theme.iconSizes.LARGE; break; case IconSize.XL: iconSize = theme.iconSizes.XL; break; case IconSize.XXL: iconSize = theme.iconSizes.XXL; break; case IconSize.XXXL: iconSize = theme.iconSizes.XXXL; break; default: iconSize = theme.iconSizes.SMALL; break; } return iconSize; }; export const IconCollection = [ "delete", "user", "general", "billing", "edit", "error", "success", "search", "close", "share", "rocket", "workspace", "plus", "invite-user", "view-all", "view-less", "warning", "downArrow", "context-menu", "duplicate", "logout", "manage", "arrow-left", "fork", "chevron-left", "chevron-right", ] as const; export type IconName = typeof IconCollection[number]; export const IconWrapper = styled.span` &:focus { outline: none; } display: flex; align-items: center; svg { width: ${(props) => sizeHandler(props.size)}px; height: ${(props) => sizeHandler(props.size)}px; path { fill: ${(props) => props.fillColor || props.theme.colors.icon.normal}; } } ${(props) => (props.invisible ? `visibility: hidden;` : null)}; &:hover { cursor: pointer; path { fill: ${(props) => props.theme.colors.icon.hover}; } } &:active { cursor: pointer; path { fill: ${(props) => props.theme.colors.icon.active}; } } `; export type IconProps = { size?: IconSize; name?: IconName; invisible?: boolean; className?: string; onClick?: () => void; fillColor?: string; }; const Icon = forwardRef( (props: IconProps & CommonComponentProps, ref: Ref) => { let returnIcon; switch (props.name) { case "delete": returnIcon = ; break; case "user": returnIcon = ; break; case "general": returnIcon = ; break; case "billing": returnIcon = ; break; case "edit": returnIcon = ; break; case "error": returnIcon = ; break; case "success": returnIcon = ; break; case "search": returnIcon = ; break; case "close": returnIcon = ; break; case "downArrow": returnIcon = ; break; case "share": returnIcon = ; break; case "rocket": returnIcon = ; break; case "workspace": returnIcon = ; break; case "plus": returnIcon = ; break; case "invite-user": returnIcon = ; break; case "view-all": returnIcon = ; break; case "view-less": returnIcon = ; break; case "context-menu": returnIcon = ; break; case "duplicate": returnIcon = ; break; case "logout": returnIcon = ; break; case "manage": returnIcon = ; break; case "warning": returnIcon = ; break; case "arrow-left": returnIcon = ; break; case "fork": returnIcon = ; break; case "chevron-left": returnIcon = ; break; case "chevron-right": returnIcon = ; break; default: returnIcon = null; break; } return returnIcon && !props.isLoading ? ( {returnIcon} ) : props.isLoading ? ( ) : null; }, ); Icon.displayName = "Icon"; export default Icon;