diff --git a/invokeai/frontend/web/src/common/components/InvTabs/theme.ts b/invokeai/frontend/web/src/common/components/InvTabs/theme.ts
index 70296bc3b5..3530d65ca7 100644
--- a/invokeai/frontend/web/src/common/components/InvTabs/theme.ts
+++ b/invokeai/frontend/web/src/common/components/InvTabs/theme.ts
@@ -42,9 +42,9 @@ const line = definePartsStyle(() => ({
px: 4,
py: 1,
fontSize: 'sm',
- color: 'base.400',
+ color: 'base.200',
_selected: {
- color: 'blue.400',
+ color: 'blue.200',
},
},
tabpanel: {
diff --git a/invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx b/invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx
index 28d3fb4024..422ec78640 100644
--- a/invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/ClearCanvasHistoryButtonModal.tsx
@@ -6,7 +6,7 @@ import { isStagingSelector } from 'features/canvas/store/canvasSelectors';
import { clearCanvasHistory } from 'features/canvas/store/canvasSlice';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTrash } from 'react-icons/fa';
+import { PiTrashSimpleFill } from 'react-icons/pi';
const ClearCanvasHistoryButtonModal = () => {
const isStaging = useAppSelector(isStagingSelector);
@@ -23,7 +23,7 @@ const ClearCanvasHistoryButtonModal = () => {
}
+ leftIcon={}
isDisabled={isStaging}
>
{t('unifiedCanvas.clearCanvasHistory')}
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx
index 7823e068ea..10ccbc2376 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasStagingAreaToolbar.tsx
@@ -19,14 +19,14 @@ import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
import {
- FaArrowLeft,
- FaArrowRight,
- FaCheck,
- FaEye,
- FaEyeSlash,
- FaSave,
- FaTimes,
-} from 'react-icons/fa';
+ PiArrowLeftBold,
+ PiArrowRightBold,
+ PiCheckBold,
+ PiEyeBold,
+ PiEyeSlashBold,
+ PiFloppyDiskBold,
+ PiXBold,
+} from 'react-icons/pi';
import { useGetImageDTOQuery } from 'services/api/endpoints/images';
const selector = createMemoizedSelector(selectCanvasSlice, (canvas) => {
@@ -140,7 +140,7 @@ const IAICanvasStagingAreaToolbar = () => {
}
+ icon={}
onClick={handlePrevImage}
colorScheme="invokeBlue"
isDisabled={!shouldShowStagingImage}
@@ -154,7 +154,7 @@ const IAICanvasStagingAreaToolbar = () => {
}
+ icon={}
onClick={handleNextImage}
colorScheme="invokeBlue"
isDisabled={!shouldShowStagingImage}
@@ -164,7 +164,7 @@ const IAICanvasStagingAreaToolbar = () => {
}
+ icon={}
onClick={handleAccept}
colorScheme="invokeBlue"
/>
@@ -180,7 +180,7 @@ const IAICanvasStagingAreaToolbar = () => {
: t('unifiedCanvas.showResultsOff')
}
data-alert={!shouldShowStagingImage}
- icon={shouldShowStagingImage ? : }
+ icon={shouldShowStagingImage ? : }
onClick={handleToggleShouldShowStagingImage}
colorScheme="invokeBlue"
/>
@@ -188,14 +188,14 @@ const IAICanvasStagingAreaToolbar = () => {
tooltip={t('unifiedCanvas.saveToGallery')}
aria-label={t('unifiedCanvas.saveToGallery')}
isDisabled={!imageDTO || !imageDTO.is_intermediate}
- icon={}
+ icon={}
onClick={handleSaveToGallery}
colorScheme="invokeBlue"
/>
}
+ icon={}
onClick={handleDiscardStagingArea}
colorScheme="error"
fontSize={20}
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx
index e237b9e3e1..ea17c25b52 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasMaskOptions.tsx
@@ -25,7 +25,11 @@ import { memo, useCallback } from 'react';
import type { RgbaColor } from 'react-colorful';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
-import { FaMask, FaSave, FaTrash } from 'react-icons/fa';
+import {
+ PiExcludeBold,
+ PiFloppyDiskBackFill,
+ PiTrashSimpleFill,
+} from 'react-icons/pi';
const IAICanvasMaskOptions = () => {
const dispatch = useAppDispatch();
@@ -110,7 +114,7 @@ const IAICanvasMaskOptions = () => {
}
+ icon={}
isChecked={layer === 'mask'}
isDisabled={isStaging}
/>
@@ -136,12 +140,16 @@ const IAICanvasMaskOptions = () => {
onChange={handleChangeMaskColor}
/>
- } onClick={handleSaveMask}>
+ }
+ onClick={handleSaveMask}
+ >
{t('unifiedCanvas.saveMask')}
}
+ leftIcon={}
onClick={handleClearMask}
>
{t('unifiedCanvas.clearMask')}
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx
index 2bf6811d43..c08f3344ac 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasRedoButton.tsx
@@ -5,7 +5,7 @@ import { activeTabNameSelector } from 'features/ui/store/uiSelectors';
import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
-import { FaRedo } from 'react-icons/fa';
+import { PiArrowClockwiseBold } from 'react-icons/pi';
const IAICanvasRedoButton = () => {
const dispatch = useAppDispatch();
@@ -34,7 +34,7 @@ const IAICanvasRedoButton = () => {
}
+ icon={}
onClick={handleRedo}
isDisabled={!canRedo}
/>
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx
index 892ddfe7f3..8dbdb8c9b3 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasSettingsButtonPopover.tsx
@@ -24,7 +24,7 @@ import type { ChangeEvent } from 'react';
import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
-import { FaWrench } from 'react-icons/fa';
+import { PiGearSixBold } from 'react-icons/pi';
const IAICanvasSettingsButtonPopover = () => {
const dispatch = useAppDispatch();
@@ -114,7 +114,7 @@ const IAICanvasSettingsButtonPopover = () => {
}
+ icon={}
/>
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx
index a75af33587..ec7ecacb6f 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolChooserOptions.tsx
@@ -26,13 +26,13 @@ import type { RgbaColor } from 'react-colorful';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
import {
- FaEraser,
- FaEyeDropper,
- FaFillDrip,
- FaPaintBrush,
- FaSlidersH,
- FaTimes,
-} from 'react-icons/fa';
+ PiEraserBold,
+ PiEyedropperBold,
+ PiPaintBrushBold,
+ PiPaintBucketBold,
+ PiSlidersHorizontalBold,
+ PiXBold,
+} from 'react-icons/pi';
const IAICanvasToolChooserOptions = () => {
const dispatch = useAppDispatch();
@@ -198,7 +198,7 @@ const IAICanvasToolChooserOptions = () => {
}
+ icon={}
isChecked={tool === 'brush' && !isStaging}
onClick={handleSelectBrushTool}
isDisabled={isStaging}
@@ -206,7 +206,7 @@ const IAICanvasToolChooserOptions = () => {
}
+ icon={}
isChecked={tool === 'eraser' && !isStaging}
isDisabled={isStaging}
onClick={handleSelectEraserTool}
@@ -214,21 +214,21 @@ const IAICanvasToolChooserOptions = () => {
}
+ icon={}
isDisabled={isStaging}
onClick={handleFillRect}
/>
}
+ icon={}
isDisabled={isStaging}
onClick={handleEraseBoundingBox}
/>
}
+ icon={}
isChecked={tool === 'colorPicker' && !isStaging}
isDisabled={isStaging}
onClick={handleSelectColorPickerTool}
@@ -238,7 +238,7 @@ const IAICanvasToolChooserOptions = () => {
}
+ icon={}
/>
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx
index bfbd78be60..09b9141ae9 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasToolbar.tsx
@@ -30,15 +30,15 @@ import { memo, useCallback, useMemo } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
import {
- FaArrowsAlt,
- FaCopy,
- FaCrosshairs,
- FaDownload,
- FaLayerGroup,
- FaSave,
- FaTrash,
- FaUpload,
-} from 'react-icons/fa';
+ PiCopyBold,
+ PiCrosshairSimpleBold,
+ PiDownloadSimpleBold,
+ PiFloppyDiskBold,
+ PiHandGrabbingBold,
+ PiStackBold,
+ PiTrashSimpleBold,
+ PiUploadSimpleBold,
+} from 'react-icons/pi';
import IAICanvasMaskOptions from './IAICanvasMaskOptions';
import IAICanvasRedoButton from './IAICanvasRedoButton';
@@ -217,14 +217,14 @@ const IAICanvasToolbar = () => {
}
+ icon={}
isChecked={tool === 'move' || isStaging}
onClick={handleSelectMoveTool}
/>
}
+ icon={}
onClick={handleClickResetCanvasView}
/>
@@ -233,14 +233,14 @@ const IAICanvasToolbar = () => {
}
+ icon={}
onClick={handleMergeVisible}
isDisabled={isStaging}
/>
}
+ icon={}
onClick={handleSaveToGallery}
isDisabled={isStaging}
/>
@@ -248,7 +248,7 @@ const IAICanvasToolbar = () => {
}
+ icon={}
onClick={handleCopyImageToClipboard}
isDisabled={isStaging}
/>
@@ -256,7 +256,7 @@ const IAICanvasToolbar = () => {
}
+ icon={}
onClick={handleDownloadAsImage}
isDisabled={isStaging}
/>
@@ -270,7 +270,7 @@ const IAICanvasToolbar = () => {
}
+ icon={}
isDisabled={isStaging}
{...getUploadButtonProps()}
/>
@@ -278,7 +278,7 @@ const IAICanvasToolbar = () => {
}
+ icon={}
onClick={handleResetCanvas}
colorScheme="error"
isDisabled={isStaging}
diff --git a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx
index 544ef585b3..8a05e86476 100644
--- a/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx
+++ b/invokeai/frontend/web/src/features/canvas/components/IAICanvasToolbar/IAICanvasUndoButton.tsx
@@ -5,7 +5,7 @@ import { activeTabNameSelector } from 'features/ui/store/uiSelectors';
import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
-import { FaUndo } from 'react-icons/fa';
+import { PiArrowCounterClockwiseBold } from 'react-icons/pi';
const IAICanvasUndoButton = () => {
const dispatch = useAppDispatch();
@@ -33,7 +33,7 @@ const IAICanvasUndoButton = () => {
}
+ icon={}
onClick={handleUndo}
isDisabled={!canUndo}
/>
diff --git a/invokeai/frontend/web/src/features/controlAdapters/components/ControlAdapterConfig.tsx b/invokeai/frontend/web/src/features/controlAdapters/components/ControlAdapterConfig.tsx
index 67acf503d8..1031e6bf27 100644
--- a/invokeai/frontend/web/src/features/controlAdapters/components/ControlAdapterConfig.tsx
+++ b/invokeai/frontend/web/src/features/controlAdapters/components/ControlAdapterConfig.tsx
@@ -16,7 +16,7 @@ import { activeTabNameSelector } from 'features/ui/store/uiSelectors';
import type { ChangeEvent } from 'react';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaCopy, FaTrash } from 'react-icons/fa';
+import { PiCopyBold, PiTrashSimpleBold } from 'react-icons/pi';
import { useToggle } from 'react-use';
import ControlAdapterImagePreview from './ControlAdapterImagePreview';
@@ -106,7 +106,7 @@ const ControlAdapterConfig = (props: { id: string; number: number }) => {
tooltip={t('controlnet.duplicate')}
aria-label={t('controlnet.duplicate')}
onClick={handleDuplicate}
- icon={}
+ icon={}
/>
{
aria-label={t('controlnet.delete')}
colorScheme="error"
onClick={handleDelete}
- icon={}
+ icon={}
/>
{
variant="ghost"
icon={
{
-
+
diff --git a/invokeai/frontend/web/src/features/controlAdapters/components/imports/ControlNetCanvasImageImports.tsx b/invokeai/frontend/web/src/features/controlAdapters/components/imports/ControlNetCanvasImageImports.tsx
index bde576ef12..09b54c6375 100644
--- a/invokeai/frontend/web/src/features/controlAdapters/components/imports/ControlNetCanvasImageImports.tsx
+++ b/invokeai/frontend/web/src/features/controlAdapters/components/imports/ControlNetCanvasImageImports.tsx
@@ -7,7 +7,7 @@ import {
} from 'features/canvas/store/actions';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaImage, FaMask } from 'react-icons/fa';
+import { PiExcludeBold, PiImageSquareBold } from 'react-icons/pi';
type ControlNetCanvasImageImportsProps = {
id: string;
@@ -29,17 +29,17 @@ const ControlNetCanvasImageImports = (
}, [id, dispatch]);
return (
-
+
}
+ icon={}
tooltip={t('controlnet.importImageFromCanvas')}
aria-label={t('controlnet.importImageFromCanvas')}
onClick={handleImportImageFromCanvas}
/>
}
+ icon={}
tooltip={t('controlnet.importMaskFromCanvas')}
aria-label={t('controlnet.importMaskFromCanvas')}
onClick={handleImportMaskFromCanvas}
diff --git a/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx b/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx
index 69741a45fc..ca63eb5270 100644
--- a/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx
+++ b/invokeai/frontend/web/src/features/deleteImageModal/components/DeleteImageButton.tsx
@@ -3,7 +3,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import type { InvIconButtonProps } from 'common/components/InvIconButton/types';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTrash } from 'react-icons/fa';
+import { PiTrashSimpleBold } from 'react-icons/pi';
type DeleteImageButtonProps = Omit & {
onClick: () => void;
@@ -17,7 +17,7 @@ export const DeleteImageButton = memo((props: DeleteImageButtonProps) => {
return (
}
+ icon={}
tooltip={`${t('gallery.deleteImage')} (Del)`}
aria-label={`${t('gallery.deleteImage')} (Del)`}
isDisabled={isDisabled || !isConnected}
diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx
index 214633074f..7439d75c7c 100644
--- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/AddBoardButton.tsx
@@ -1,7 +1,7 @@
import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPlus } from 'react-icons/fa';
+import { PiPlusBold } from 'react-icons/pi';
import { useCreateBoardMutation } from 'services/api/endpoints/boards';
const AddBoardButton = () => {
@@ -14,7 +14,7 @@ const AddBoardButton = () => {
return (
}
+ icon={}
isLoading={isLoading}
tooltip={t('boards.addBoard')}
aria-label={t('boards.addBoard')}
diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx
index 193fdf0982..67ee4bf54c 100644
--- a/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/Boards/BoardsList/BoardsSearch.tsx
@@ -1,4 +1,3 @@
-import { CloseIcon } from '@chakra-ui/icons';
import { Input, InputGroup, InputRightElement } from '@chakra-ui/react';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
@@ -6,6 +5,7 @@ import { boardSearchTextChanged } from 'features/gallery/store/gallerySlice';
import type { ChangeEvent, KeyboardEvent } from 'react';
import { memo, useCallback, useEffect, useRef } from 'react';
import { useTranslation } from 'react-i18next';
+import { PiXBold } from 'react-icons/pi';
const BoardsSearch = () => {
const dispatch = useAppDispatch();
@@ -66,7 +66,7 @@ const BoardsSearch = () => {
size="sm"
variant="ghost"
aria-label={t('boards.clearSearch')}
- icon={}
+ icon={}
/>
)}
diff --git a/invokeai/frontend/web/src/features/gallery/components/Boards/DeleteBoardModal.tsx b/invokeai/frontend/web/src/features/gallery/components/Boards/DeleteBoardModal.tsx
index 1f5368b089..20340713ed 100644
--- a/invokeai/frontend/web/src/features/gallery/components/Boards/DeleteBoardModal.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/Boards/DeleteBoardModal.tsx
@@ -151,7 +151,7 @@ const DeleteBoardModal = (props: Props) => {
-
+
{t('boards.cancel')}
diff --git a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx
index 0b131b922a..32915eae8a 100644
--- a/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/CurrentImage/CurrentImageButtons.tsx
@@ -29,14 +29,15 @@ import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
import {
- FaAsterisk,
- FaCode,
- FaHourglassHalf,
- FaQuoteRight,
- FaRulerVertical,
- FaSeedling,
-} from 'react-icons/fa';
-import { FaCircleNodes, FaEllipsis } from 'react-icons/fa6';
+ PiAsteriskBold,
+ PiDotsThreeOutlineFill,
+ PiFlowArrowBold,
+ PiHourglassHighBold,
+ PiInfoBold,
+ PiPlantBold,
+ PiQuotesBold,
+ PiRulerBold,
+} from 'react-icons/pi';
import { useGetImageDTOQuery } from 'services/api/endpoints/images';
import { useDebouncedMetadata } from 'services/api/hooks/useDebouncedMetadata';
@@ -210,7 +211,7 @@ const CurrentImageButtons = () => {
aria-label={t('parameters.imageActions')}
tooltip={t('parameters.imageActions')}
isDisabled={!imageDTO}
- icon={}
+ icon={}
/>
{imageDTO && }
@@ -220,7 +221,7 @@ const CurrentImageButtons = () => {
}
+ icon={}
tooltip={`${t('nodes.loadWorkflow')} (W)`}
aria-label={`${t('nodes.loadWorkflow')} (W)`}
isDisabled={!imageDTO?.has_workflow}
@@ -229,7 +230,7 @@ const CurrentImageButtons = () => {
/>
}
+ icon={}
tooltip={`${t('parameters.usePrompt')} (P)`}
aria-label={`${t('parameters.usePrompt')} (P)`}
isDisabled={!metadata?.positive_prompt}
@@ -237,7 +238,7 @@ const CurrentImageButtons = () => {
/>
}
+ icon={}
tooltip={`${t('parameters.useSeed')} (S)`}
aria-label={`${t('parameters.useSeed')} (S)`}
isDisabled={metadata?.seed === null || metadata?.seed === undefined}
@@ -245,7 +246,7 @@ const CurrentImageButtons = () => {
/>
}
+ icon={}
tooltip={`${t('parameters.useSize')} (D)`}
aria-label={`${t('parameters.useSize')} (D)`}
isDisabled={
@@ -258,7 +259,7 @@ const CurrentImageButtons = () => {
/>
}
+ icon={}
tooltip={`${t('parameters.useAll')} (A)`}
aria-label={`${t('parameters.useAll')} (A)`}
isDisabled={!metadata}
@@ -274,7 +275,7 @@ const CurrentImageButtons = () => {
}
+ icon={}
tooltip={`${t('parameters.info')} (I)`}
aria-label={`${t('parameters.info')} (I)`}
isChecked={shouldShowImageDetails}
@@ -286,7 +287,7 @@ const CurrentImageButtons = () => {
}
+ icon={}
isChecked={shouldShowProgressInViewer}
onClick={handleClickProgressImagesToggle}
/>
diff --git a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx
index e60dab8257..0554f87f45 100644
--- a/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/GallerySettingsPopover.tsx
@@ -19,7 +19,7 @@ import {
import type { ChangeEvent } from 'react';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaWrench } from 'react-icons/fa';
+import { RiSettings4Fill } from 'react-icons/ri';
import BoardAutoAddSelect from './Boards/BoardAutoAddSelect';
@@ -61,7 +61,7 @@ const GallerySettingsPopover = () => {
tooltip={t('gallery.gallerySettings')}
aria-label={t('gallery.gallerySettings')}
size="sm"
- icon={}
+ icon={}
/>
diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx
index 2361e5a294..86967af520 100644
--- a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/MultipleSelectionMenuItems.tsx
@@ -2,6 +2,7 @@ import { useStore } from '@nanostores/react';
import { $customStarUI } from 'app/store/nanostores/customStarUI';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { InvMenuItem } from 'common/components/InvMenu/InvMenuItem';
+import { InvMenuDivider } from 'common/components/InvMenu/wrapper';
import {
imagesToChangeSelected,
isModalOpenChanged,
@@ -11,8 +12,13 @@ import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { addToast } from 'features/system/store/systemSlice';
import { memo, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaDownload, FaFolder, FaTrash } from 'react-icons/fa';
-import { MdStar, MdStarBorder } from 'react-icons/md';
+import {
+ PiDownloadSimpleBold,
+ PiFoldersBold,
+ PiStarBold,
+ PiStarFill,
+ PiTrashSimpleBold,
+} from 'react-icons/pi';
import {
useBulkDownloadImagesMutation,
useStarImagesMutation,
@@ -90,7 +96,7 @@ const MultipleSelectionMenuItems = () => {
<>
{areAllStarred && (
}
+ icon={customStarUi ? customStarUi.on.icon : }
onClickCapture={handleUnstarSelection}
>
{customStarUi ? customStarUi.off.text : `Unstar All`}
@@ -98,23 +104,27 @@ const MultipleSelectionMenuItems = () => {
)}
{(areAllUnstarred || (!areAllStarred && !areAllUnstarred)) && (
}
+ icon={customStarUi ? customStarUi.on.icon : }
onClickCapture={handleStarSelection}
>
{customStarUi ? customStarUi.on.text : `Star All`}
)}
{isBulkDownloadEnabled && (
- } onClickCapture={handleBulkDownload}>
+ }
+ onClickCapture={handleBulkDownload}
+ >
{t('gallery.downloadSelection')}
)}
- } onClickCapture={handleChangeBoard}>
+ } onClickCapture={handleChangeBoard}>
{t('boards.changeBoard')}
+
}
+ icon={}
onClickCapture={handleDeleteSelection}
>
{t('gallery.deleteSelection')}
diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/SingleSelectionMenuItems.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/SingleSelectionMenuItems.tsx
index dbcca55ff6..17c37aae1a 100644
--- a/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/SingleSelectionMenuItems.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/ImageContextMenu/SingleSelectionMenuItems.tsx
@@ -4,6 +4,7 @@ import { useAppToaster } from 'app/components/Toaster';
import { $customStarUI } from 'app/store/nanostores/customStarUI';
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
import { InvMenuItem } from 'common/components/InvMenu/InvMenuItem';
+import { InvMenuDivider } from 'common/components/InvMenu/wrapper';
import { useCopyImageToClipboard } from 'common/hooks/useCopyImageToClipboard';
import { setInitialCanvasImage } from 'features/canvas/store/canvasSlice';
import {
@@ -25,18 +26,18 @@ import { memo, useCallback } from 'react';
import { flushSync } from 'react-dom';
import { useTranslation } from 'react-i18next';
import {
- FaAsterisk,
- FaCopy,
- FaDownload,
- FaExternalLinkAlt,
- FaFolder,
- FaQuoteRight,
- FaSeedling,
- FaShare,
- FaTrash,
-} from 'react-icons/fa';
-import { FaCircleNodes } from 'react-icons/fa6';
-import { MdStar, MdStarBorder } from 'react-icons/md';
+ PiAsteriskBold,
+ PiCopyBold,
+ PiDownloadSimpleBold,
+ PiFlowArrowBold,
+ PiFoldersBold,
+ PiPlantBold,
+ PiQuotesBold,
+ PiShareFatBold,
+ PiStarBold,
+ PiStarFill,
+ PiTrashSimpleBold,
+} from 'react-icons/pi';
import {
useStarImagesMutation,
useUnstarImagesMutation,
@@ -155,12 +156,12 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
as="a"
href={imageDTO.image_url}
target="_blank"
- icon={}
+ icon={}
>
{t('common.openInNewTab')}
{isClipboardAPIAvailable && (
- } onClickCapture={handleCopyImage}>
+ } onClickCapture={handleCopyImage}>
{t('parameters.copyImage')}
)}
@@ -169,17 +170,18 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
download={true}
href={imageDTO.image_url}
target="_blank"
- icon={}
+ icon={}
w="100%"
>
{t('parameters.downloadImage')}
+
) : (
-
+
)
}
onClickCapture={handleLoadWorkflow}
@@ -188,7 +190,7 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
{t('nodes.loadWorkflow')}
: }
+ icon={isLoadingMetadata ? : }
onClickCapture={handleRecallPrompt}
isDisabled={
isLoadingMetadata ||
@@ -199,21 +201,22 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
{t('parameters.usePrompt')}
: }
+ icon={isLoadingMetadata ? : }
onClickCapture={handleRecallSeed}
isDisabled={isLoadingMetadata || metadata?.seed === undefined}
>
{t('parameters.useSeed')}
: }
+ icon={isLoadingMetadata ? : }
onClickCapture={handleUseAllParameters}
isDisabled={isLoadingMetadata || !metadata}
>
{t('parameters.useAll')}
+
}
+ icon={}
onClickCapture={handleSendToImageToImage}
id="send-to-img2img"
>
@@ -221,34 +224,36 @@ const SingleSelectionMenuItems = (props: SingleSelectionMenuItemsProps) => {
{isCanvasEnabled && (
}
+ icon={}
onClickCapture={handleSendToCanvas}
id="send-to-canvas"
>
{t('parameters.sendToUnifiedCanvas')}
)}
- } onClickCapture={handleChangeBoard}>
+
+ } onClickCapture={handleChangeBoard}>
{t('boards.changeBoard')}
{imageDTO.starred ? (
}
+ icon={customStarUi ? customStarUi.off.icon : }
onClickCapture={handleUnstarImage}
>
{customStarUi ? customStarUi.off.text : t('gallery.unstarImage')}
) : (
}
+ icon={customStarUi ? customStarUi.on.icon : }
onClickCapture={handleStarImage}
>
{customStarUi ? customStarUi.on.text : t('gallery.starImage')}
)}
+
}
+ icon={}
onClickCapture={handleDelete}
>
{t('gallery.deleteImage')}
diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx
index fed5eecce8..458661b3f3 100644
--- a/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/ImageGalleryContent.tsx
@@ -15,7 +15,8 @@ import { InvButtonGroup } from 'common/components/InvButtonGroup/InvButtonGroup'
import { galleryViewChanged } from 'features/gallery/store/gallerySlice';
import { memo, useCallback, useRef } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaImages, FaServer } from 'react-icons/fa';
+import { PiImagesBold } from 'react-icons/pi';
+import { RiServerLine } from 'react-icons/ri';
import BoardsList from './Boards/BoardsList/BoardsList';
import GalleryBoardName from './GalleryBoardName';
@@ -83,7 +84,7 @@ const ImageGalleryContent = () => {
isChecked={galleryView === 'images'}
onClick={handleClickImages}
w="full"
- leftIcon={}
+ leftIcon={}
data-testid="images-tab"
>
{t('parameters.images')}
@@ -94,7 +95,7 @@ const ImageGalleryContent = () => {
isChecked={galleryView === 'assets'}
onClick={handleClickAssets}
w="full"
- leftIcon={}
+ leftIcon={}
data-testid="assets-tab"
>
{t('gallery.assets')}
diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx
index 78689795ba..3e0d206607 100644
--- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx
+++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImage.tsx
@@ -19,8 +19,7 @@ import { useScrollIntoView } from 'features/gallery/hooks/useScrollIntoView';
import type { MouseEvent } from 'react';
import { memo, useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTrash } from 'react-icons/fa';
-import { MdStar, MdStarBorder } from 'react-icons/md';
+import { PiStarBold, PiStarFill, PiTrashSimpleFill } from 'react-icons/pi';
import {
useGetImageDTOQuery,
useStarImagesMutation,
@@ -112,10 +111,10 @@ const GalleryImage = (props: HoverableImageProps) => {
const starIcon = useMemo(() => {
if (imageDTO?.starred) {
- return customStarUi ? customStarUi.on.icon : ;
+ return customStarUi ? customStarUi.on.icon : ;
}
if (!imageDTO?.starred && isHovered) {
- return customStarUi ? customStarUi.off.icon : ;
+ return customStarUi ? customStarUi.off.icon : ;
}
}, [imageDTO?.starred, isHovered, customStarUi]);
@@ -177,7 +176,7 @@ const GalleryImage = (props: HoverableImageProps) => {
{isHovered && shift && (
}
+ icon={}
tooltip={t('gallery.deleteImage')}
styleOverrides={imageIconStyleOverrides}
/>
diff --git a/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsButton.tsx b/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsButton.tsx
index 8bd63b40c4..06875df44e 100644
--- a/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsButton.tsx
+++ b/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsButton.tsx
@@ -3,7 +3,7 @@ import type { InvButtonProps } from 'common/components/InvButton/types';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaSync } from 'react-icons/fa';
+import { PiArrowsClockwiseBold } from 'react-icons/pi';
import { useSyncModels } from './useSyncModels';
@@ -21,7 +21,7 @@ export const SyncModelsButton = memo(
}
+ leftIcon={}
minW="max-content"
{...props}
>
diff --git a/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsIconButton.tsx b/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsIconButton.tsx
index 790484d753..33b0c97c32 100644
--- a/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsIconButton.tsx
+++ b/invokeai/frontend/web/src/features/modelManager/components/SyncModels/SyncModelsIconButton.tsx
@@ -3,7 +3,7 @@ import type { InvIconButtonProps } from 'common/components/InvIconButton/types';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaSync } from 'react-icons/fa';
+import { PiArrowsClockwiseBold } from 'react-icons/pi';
import { useSyncModels } from './useSyncModels';
@@ -19,7 +19,7 @@ export const SyncModelsIconButton = memo(
return (
}
+ icon={}
tooltip={t('modelManager.syncModels')}
aria-label={t('modelManager.syncModels')}
isLoading={isLoading}
diff --git a/invokeai/frontend/web/src/features/modelManager/subpanels/ModelManagerPanel/ModelListItem.tsx b/invokeai/frontend/web/src/features/modelManager/subpanels/ModelManagerPanel/ModelListItem.tsx
index 0e5ef5b35a..e9c0dc670b 100644
--- a/invokeai/frontend/web/src/features/modelManager/subpanels/ModelManagerPanel/ModelListItem.tsx
+++ b/invokeai/frontend/web/src/features/modelManager/subpanels/ModelManagerPanel/ModelListItem.tsx
@@ -1,4 +1,3 @@
-import { DeleteIcon } from '@chakra-ui/icons';
import { Badge, Flex, useDisclosure } from '@chakra-ui/react';
import { useAppDispatch } from 'app/store/storeHooks';
import { InvButton } from 'common/components/InvButton/InvButton';
@@ -11,6 +10,7 @@ import { addToast } from 'features/system/store/systemSlice';
import { makeToast } from 'features/system/util/makeToast';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
+import { PiTrashSimpleBold } from 'react-icons/pi';
import type {
LoRAModelConfigEntity,
MainModelConfigEntity,
@@ -109,7 +109,7 @@ const ModelListItem = (props: ModelListItemProps) => {
}
+ icon={}
aria-label={t('modelManager.deleteConfig')}
colorScheme="error"
/>
diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/BottomLeftPanel/ViewportControls.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/BottomLeftPanel/ViewportControls.tsx
index e4ac98a109..452e21ca9d 100644
--- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/BottomLeftPanel/ViewportControls.tsx
+++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/BottomLeftPanel/ViewportControls.tsx
@@ -8,11 +8,11 @@ import {
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
import {
- FaExpand,
- // FaInfo,
- FaMapMarkerAlt,
-} from 'react-icons/fa';
-import { FaMagnifyingGlassMinus, FaMagnifyingGlassPlus } from 'react-icons/fa6';
+ PiFrameCornersBold,
+ PiMagnifyingGlassMinusBold,
+ PiMagnifyingGlassPlusBold,
+ PiMapPinBold,
+} from 'react-icons/pi';
import { useReactFlow } from 'reactflow';
const ViewportControls = () => {
@@ -52,19 +52,19 @@ const ViewportControls = () => {
tooltip={t('nodes.zoomInNodes')}
aria-label={t('nodes.zoomInNodes')}
onClick={handleClickedZoomIn}
- icon={}
+ icon={}
/>
}
+ icon={}
/>
}
+ icon={}
/>
{/* {
}
isChecked={shouldShowMinimapPanel}
onClick={handleClickedToggleMiniMapPanel}
- icon={}
+ icon={}
/>
);
diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx
index c4b6bc3b23..1e99a521db 100644
--- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx
+++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopPanel/AddNodeButton.tsx
@@ -3,7 +3,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { addNodePopoverOpened } from 'features/nodes/store/nodesSlice';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPlus } from 'react-icons/fa';
+import { PiPlusBold } from 'react-icons/pi';
const AddNodeButton = () => {
const dispatch = useAppDispatch();
@@ -16,7 +16,7 @@ const AddNodeButton = () => {
}
+ icon={}
onClick={handleOpenAddNodePopover}
pointerEvents="auto"
/>
diff --git a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/ReloadSchemaButton.tsx b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/ReloadSchemaButton.tsx
index 08f3a4485e..abdeecbca5 100644
--- a/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/ReloadSchemaButton.tsx
+++ b/invokeai/frontend/web/src/features/nodes/components/flow/panels/TopRightPanel/ReloadSchemaButton.tsx
@@ -2,7 +2,7 @@ import { useAppDispatch } from 'app/store/storeHooks';
import { InvButton } from 'common/components/InvButton/InvButton';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaSyncAlt } from 'react-icons/fa';
+import { PiArrowsClockwiseBold } from 'react-icons/pi';
import { receivedOpenAPISchema } from 'services/api/thunks/schema';
const ReloadNodeTemplatesButton = () => {
@@ -15,7 +15,7 @@ const ReloadNodeTemplatesButton = () => {
return (
}
+ leftIcon={}
tooltip={t('nodes.reloadNodeTemplates')}
aria-label={t('nodes.reloadNodeTemplates')}
onClick={handleReloadSchema}
diff --git a/invokeai/frontend/web/src/features/parameters/components/ImageSize/LockAspectRatioButton.tsx b/invokeai/frontend/web/src/features/parameters/components/ImageSize/LockAspectRatioButton.tsx
index 869cf73d02..a52729d7ed 100644
--- a/invokeai/frontend/web/src/features/parameters/components/ImageSize/LockAspectRatioButton.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/ImageSize/LockAspectRatioButton.tsx
@@ -2,7 +2,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { useImageSizeContext } from 'features/parameters/components/ImageSize/ImageSizeContext';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaLock, FaLockOpen } from 'react-icons/fa6';
+import { PiLockSimpleFill, PiLockSimpleOpenBold } from 'react-icons/pi';
export const LockAspectRatioButton = memo(() => {
const { t } = useTranslation();
@@ -18,7 +18,13 @@ export const LockAspectRatioButton = memo(() => {
onClick={onClick}
variant={ctx.aspectRatioState.isLocked ? 'outline' : 'ghost'}
size="sm"
- icon={ctx.aspectRatioState.isLocked ? : }
+ icon={
+ ctx.aspectRatioState.isLocked ? (
+
+ ) : (
+
+ )
+ }
/>
);
});
diff --git a/invokeai/frontend/web/src/features/parameters/components/ImageSize/SetOptimalSizeButton.tsx b/invokeai/frontend/web/src/features/parameters/components/ImageSize/SetOptimalSizeButton.tsx
index b51e7a0aad..92bba667bf 100644
--- a/invokeai/frontend/web/src/features/parameters/components/ImageSize/SetOptimalSizeButton.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/ImageSize/SetOptimalSizeButton.tsx
@@ -8,7 +8,7 @@ import {
} from 'features/parameters/util/optimalDimension';
import { memo, useCallback, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { IoSparkles } from 'react-icons/io5';
+import { RiSparklingFill } from 'react-icons/ri';
export const SetOptimalSizeButton = memo(() => {
const { t } = useTranslation();
@@ -42,7 +42,7 @@ export const SetOptimalSizeButton = memo(() => {
onClick={onClick}
variant="ghost"
size="sm"
- icon={}
+ icon={}
colorScheme={isSizeTooSmall || isSizeTooLarge ? 'warning' : 'base'}
/>
);
diff --git a/invokeai/frontend/web/src/features/parameters/components/ImageSize/SwapDimensionsButton.tsx b/invokeai/frontend/web/src/features/parameters/components/ImageSize/SwapDimensionsButton.tsx
index d5d0921bea..46f0c1476e 100644
--- a/invokeai/frontend/web/src/features/parameters/components/ImageSize/SwapDimensionsButton.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/ImageSize/SwapDimensionsButton.tsx
@@ -2,7 +2,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { useImageSizeContext } from 'features/parameters/components/ImageSize/ImageSizeContext';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { IoSwapVertical } from 'react-icons/io5';
+import { PiArrowsDownUpBold } from 'react-icons/pi';
export const SwapDimensionsButton = memo(() => {
const { t } = useTranslation();
@@ -17,7 +17,7 @@ export const SwapDimensionsButton = memo(() => {
onClick={onClick}
variant="ghost"
size="sm"
- icon={}
+ icon={}
/>
);
});
diff --git a/invokeai/frontend/web/src/features/parameters/components/ImageToImage/InitialImageDisplay.tsx b/invokeai/frontend/web/src/features/parameters/components/ImageToImage/InitialImageDisplay.tsx
index 0a317bce47..145f056136 100644
--- a/invokeai/frontend/web/src/features/parameters/components/ImageToImage/InitialImageDisplay.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/ImageToImage/InitialImageDisplay.tsx
@@ -12,7 +12,11 @@ import {
import { memo, useCallback } from 'react';
import { useHotkeys } from 'react-hotkeys-hook';
import { useTranslation } from 'react-i18next';
-import { FaRulerVertical, FaUndo, FaUpload } from 'react-icons/fa';
+import {
+ PiArrowCounterClockwiseBold,
+ PiRulerBold,
+ PiUploadSimpleBold,
+} from 'react-icons/pi';
import type { PostUploadAction } from 'services/api/types';
import InitialImage from './InitialImage';
@@ -80,20 +84,20 @@ const InitialImageDisplay = () => {
}
+ icon={}
{...getUploadButtonProps()}
/>
}
+ icon={}
onClick={handleUseSizeInitialImage}
isDisabled={!initialImage}
/>
}
+ icon={}
onClick={handleReset}
isDisabled={!initialImage}
/>
diff --git a/invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedShuffle.tsx b/invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedShuffle.tsx
index a8f805824d..bbbbf8534b 100644
--- a/invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedShuffle.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/Seed/ParamSeedShuffle.tsx
@@ -5,7 +5,7 @@ import randomInt from 'common/util/randomInt';
import { setSeed } from 'features/parameters/store/generationSlice';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaShuffle } from 'react-icons/fa6';
+import { PiShuffleBold } from 'react-icons/pi';
export const ParamSeedShuffle = memo(() => {
const dispatch = useAppDispatch();
@@ -24,7 +24,7 @@ export const ParamSeedShuffle = memo(() => {
size="sm"
isDisabled={shouldRandomizeSeed}
onClick={handleClickRandomizeSeed}
- leftIcon={}
+ leftIcon={}
flexShrink={0}
>
{t('parameters.shuffle')}
diff --git a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx
index 0e91ffedce..d36921e34e 100644
--- a/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx
+++ b/invokeai/frontend/web/src/features/parameters/components/Upscale/ParamUpscaleSettings.tsx
@@ -13,7 +13,7 @@ import { useIsAllowedToUpscale } from 'features/parameters/hooks/useIsAllowedToU
import { useIsQueueMutationInProgress } from 'features/queue/hooks/useIsQueueMutationInProgress';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaExpand } from 'react-icons/fa';
+import { PiFrameCornersBold } from 'react-icons/pi';
import type { ImageDTO } from 'services/api/types';
import ParamESRGANModel from './ParamRealESRGANModel';
@@ -42,7 +42,7 @@ const ParamUpscalePopover = (props: Props) => {
}
+ icon={}
aria-label={t('parameters.upscale')}
/>
diff --git a/invokeai/frontend/web/src/features/queue/components/CancelCurrentQueueItemIconButton.tsx b/invokeai/frontend/web/src/features/queue/components/CancelCurrentQueueItemIconButton.tsx
index c921ca7ee6..bd7b12feb4 100644
--- a/invokeai/frontend/web/src/features/queue/components/CancelCurrentQueueItemIconButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/CancelCurrentQueueItemIconButton.tsx
@@ -3,7 +3,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { useCancelCurrentQueueItem } from 'features/queue/hooks/useCancelCurrentQueueItem';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTimes } from 'react-icons/fa';
+import { PiXBold } from 'react-icons/pi';
type Props = {
sx?: ChakraProps['sx'];
};
@@ -19,7 +19,7 @@ const CancelCurrentQueueItemIconButton = ({ sx }: Props) => {
isLoading={isLoading}
aria-label={t('queue.cancel')}
tooltip={t('queue.cancelTooltip')}
- icon={}
+ icon={}
onClick={cancelQueueItem}
colorScheme="error"
sx={sx}
diff --git a/invokeai/frontend/web/src/features/queue/components/ClearQueueButton.tsx b/invokeai/frontend/web/src/features/queue/components/ClearQueueButton.tsx
index e277a45c01..9252d861e2 100644
--- a/invokeai/frontend/web/src/features/queue/components/ClearQueueButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/ClearQueueButton.tsx
@@ -5,7 +5,7 @@ import ClearQueueConfirmationAlertDialog from 'features/queue/components/ClearQu
import { useClearQueue } from 'features/queue/hooks/useClearQueue';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTrash } from 'react-icons/fa';
+import { PiTrashSimpleFill } from 'react-icons/pi';
type Props = InvButtonProps;
@@ -20,7 +20,7 @@ const ClearQueueButton = (props: Props) => {
isDisabled={isDisabled}
isLoading={isLoading}
tooltip={t('queue.clearTooltip')}
- leftIcon={}
+ leftIcon={}
colorScheme="error"
onClick={disclosure.onOpen}
data-testid={t('queue.clear')}
diff --git a/invokeai/frontend/web/src/features/queue/components/ClearQueueIconButton.tsx b/invokeai/frontend/web/src/features/queue/components/ClearQueueIconButton.tsx
index 02e795a466..1ec0d22ce8 100644
--- a/invokeai/frontend/web/src/features/queue/components/ClearQueueIconButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/ClearQueueIconButton.tsx
@@ -5,7 +5,7 @@ import ClearQueueConfirmationAlertDialog from 'features/queue/components/ClearQu
import { useClearQueue } from 'features/queue/hooks/useClearQueue';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaTrash } from 'react-icons/fa';
+import { PiTrashSimpleBold } from 'react-icons/pi';
type Props = Omit;
@@ -21,7 +21,7 @@ const ClearQueueIconButton = (props: Props) => {
isLoading={isLoading}
aria-label={t('queue.clear')}
tooltip={t('queue.clearTooltip')}
- icon={}
+ icon={}
colorScheme="error"
onClick={disclosure.onOpen}
data-testid={t('queue.clear')}
diff --git a/invokeai/frontend/web/src/features/queue/components/InvokeQueueBackButton.tsx b/invokeai/frontend/web/src/features/queue/components/InvokeQueueBackButton.tsx
index 128ac0a865..2467623255 100644
--- a/invokeai/frontend/web/src/features/queue/components/InvokeQueueBackButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/InvokeQueueBackButton.tsx
@@ -4,7 +4,7 @@ import { InvButton } from 'common/components/InvButton/InvButton';
import { QueueIterationsNumberInput } from 'features/queue/components/QueueIterationsNumberInput';
import { useQueueBack } from 'features/queue/hooks/useQueueBack';
import { memo } from 'react';
-import { IoSparkles } from 'react-icons/io5';
+import { RiSparkling2Fill } from 'react-icons/ri';
import { QueueButtonTooltip } from './QueueButtonTooltip';
@@ -24,7 +24,7 @@ export const InvokeQueueBackButton = memo(() => {
isLoading={isLoading || isLoadingDynamicPrompts}
loadingText={invoke}
isDisabled={isDisabled}
- rightIcon={}
+ rightIcon={}
tooltip={}
variant="solid"
zIndex={1}
diff --git a/invokeai/frontend/web/src/features/queue/components/PauseProcessorButton.tsx b/invokeai/frontend/web/src/features/queue/components/PauseProcessorButton.tsx
index 3c42ea0523..45a95951f9 100644
--- a/invokeai/frontend/web/src/features/queue/components/PauseProcessorButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/PauseProcessorButton.tsx
@@ -1,7 +1,7 @@
import { usePauseProcessor } from 'features/queue/hooks/usePauseProcessor';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPause } from 'react-icons/fa';
+import { PiPauseFill } from 'react-icons/pi';
import QueueButton from './common/QueueButton';
@@ -20,7 +20,7 @@ const PauseProcessorButton = ({ asIconButton }: Props) => {
tooltip={t('queue.pauseTooltip')}
isDisabled={isDisabled}
isLoading={isLoading}
- icon={}
+ icon={}
onClick={pauseProcessor}
colorScheme="gold"
/>
diff --git a/invokeai/frontend/web/src/features/queue/components/PruneQueueButton.tsx b/invokeai/frontend/web/src/features/queue/components/PruneQueueButton.tsx
index fc6670ff46..5fed44e8fa 100644
--- a/invokeai/frontend/web/src/features/queue/components/PruneQueueButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/PruneQueueButton.tsx
@@ -1,7 +1,7 @@
import { usePruneQueue } from 'features/queue/hooks/usePruneQueue';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { BsStars } from 'react-icons/bs';
+import { RiSparklingFill } from 'react-icons/ri';
import QueueButton from './common/QueueButton';
@@ -20,7 +20,7 @@ const PruneQueueButton = ({ asIconButton }: Props) => {
asIconButton={asIconButton}
label={t('queue.prune')}
tooltip={t('queue.pruneTooltip', { item_count: finishedCount })}
- icon={}
+ icon={}
onClick={pruneQueue}
colorScheme="invokeBlue"
/>
diff --git a/invokeai/frontend/web/src/features/queue/components/QueueActionsMenuButton.tsx b/invokeai/frontend/web/src/features/queue/components/QueueActionsMenuButton.tsx
index de6cde6676..e2d4d8e532 100644
--- a/invokeai/frontend/web/src/features/queue/components/QueueActionsMenuButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/QueueActionsMenuButton.tsx
@@ -17,8 +17,8 @@ import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { setActiveTab } from 'features/ui/store/uiSlice';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPause, FaPlay, FaTimes } from 'react-icons/fa';
-import { FaList } from 'react-icons/fa6';
+import { PiPauseFill, PiPlayFill, PiXBold } from 'react-icons/pi';
+import { RiListCheck, RiPlayList2Fill } from 'react-icons/ri';
import { useGetQueueStatusQuery } from 'services/api/endpoints/queue';
export const QueueActionsMenuButton = memo(() => {
@@ -64,12 +64,12 @@ export const QueueActionsMenuButton = memo(() => {
}
+ icon={}
/>
}
+ icon={}
onClick={cancelQueueItem}
isLoading={isLoadingCancelQueueItem}
isDisabled={isDisabledCancelQueueItem}
@@ -78,7 +78,7 @@ export const QueueActionsMenuButton = memo(() => {
{isResumeEnabled && (
}
+ icon={}
onClick={resumeProcessor}
isLoading={isLoadingResumeProcessor}
isDisabled={isDisabledResumeProcessor}
@@ -88,7 +88,7 @@ export const QueueActionsMenuButton = memo(() => {
)}
{isPauseEnabled && (
}
+ icon={}
onClick={pauseProcessor}
isLoading={isLoadingPauseProcessor}
isDisabled={isDisabledPauseProcessor}
@@ -97,7 +97,9 @@ export const QueueActionsMenuButton = memo(() => {
)}
- {t('queue.openQueue')}
+ } onClick={openQueue}>
+ {t('queue.openQueue')}
+
{queueSize > 0 && (
diff --git a/invokeai/frontend/web/src/features/queue/components/QueueFrontButton.tsx b/invokeai/frontend/web/src/features/queue/components/QueueFrontButton.tsx
index d362f942a5..0313ae8179 100644
--- a/invokeai/frontend/web/src/features/queue/components/QueueFrontButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/QueueFrontButton.tsx
@@ -2,7 +2,7 @@ import { InvIconButton } from 'common/components/InvIconButton/InvIconButton';
import { useQueueFront } from 'features/queue/hooks/useQueueFront';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaBoltLightning } from 'react-icons/fa6';
+import { AiFillThunderbolt } from 'react-icons/ai';
import { QueueButtonTooltip } from './QueueButtonTooltip';
@@ -16,7 +16,7 @@ const QueueFrontButton = () => {
isLoading={isLoading}
onClick={queueFront}
tooltip={}
- icon={}
+ icon={}
size="lg"
/>
);
diff --git a/invokeai/frontend/web/src/features/queue/components/ResumeProcessorButton.tsx b/invokeai/frontend/web/src/features/queue/components/ResumeProcessorButton.tsx
index 6d05bae26b..cf62f8cb2a 100644
--- a/invokeai/frontend/web/src/features/queue/components/ResumeProcessorButton.tsx
+++ b/invokeai/frontend/web/src/features/queue/components/ResumeProcessorButton.tsx
@@ -1,7 +1,7 @@
import { useResumeProcessor } from 'features/queue/hooks/useResumeProcessor';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPlay } from 'react-icons/fa';
+import { PiPlayFill } from 'react-icons/pi';
import QueueButton from './common/QueueButton';
@@ -20,7 +20,7 @@ const ResumeProcessorButton = ({ asIconButton }: Props) => {
tooltip={t('queue.resumeTooltip')}
isDisabled={isDisabled}
isLoading={isLoading}
- icon={}
+ icon={}
onClick={resumeProcessor}
colorScheme="green"
/>
diff --git a/invokeai/frontend/web/src/features/settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.tsx b/invokeai/frontend/web/src/features/settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.tsx
index a6346fbfa9..00d67cd894 100644
--- a/invokeai/frontend/web/src/features/settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.tsx
+++ b/invokeai/frontend/web/src/features/settingsAccordions/ControlSettingsAccordion/ControlSettingsAccordion.tsx
@@ -20,7 +20,7 @@ import {
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { Fragment, memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaPlus } from 'react-icons/fa';
+import { PiPlusBold } from 'react-icons/pi';
const selector = createMemoizedSelector(
selectControlAdaptersSlice,
@@ -103,7 +103,7 @@ export const ControlSettingsAccordion: React.FC = memo(() => {
>
}
+ leftIcon={}
onClick={addControlNet}
data-testid="add controlnet"
flexGrow={1}
@@ -113,7 +113,7 @@ export const ControlSettingsAccordion: React.FC = memo(() => {
}
+ leftIcon={}
onClick={addIPAdapter}
data-testid="add ip adapter"
flexGrow={1}
@@ -123,7 +123,7 @@ export const ControlSettingsAccordion: React.FC = memo(() => {
}
+ leftIcon={}
onClick={addT2IAdapter}
data-testid="add t2i adapter"
flexGrow={1}
diff --git a/invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx b/invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx
index 6942b790a4..0159969a1c 100644
--- a/invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx
+++ b/invokeai/frontend/web/src/features/settingsAccordions/GenerationSettingsAccordion/GenerationSettingsAccordion.tsx
@@ -63,7 +63,7 @@ export const GenerationSettingsAccordion = memo(() => {
-
+
diff --git a/invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.tsx b/invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.tsx
index dfbfe3d3c4..d1f1b62871 100644
--- a/invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.tsx
+++ b/invokeai/frontend/web/src/features/settingsAccordions/ImageSettingsAccordion/ImageSettingsAccordion.tsx
@@ -88,7 +88,7 @@ export const ImageSettingsAccordion = memo(() => {
)}
-
+
diff --git a/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsMenu.tsx b/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsMenu.tsx
index 292aa61b6b..87bc2a2376 100644
--- a/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsMenu.tsx
+++ b/invokeai/frontend/web/src/features/system/components/SettingsModal/SettingsMenu.tsx
@@ -12,8 +12,12 @@ import HotkeysModal from 'features/system/components/HotkeysModal/HotkeysModal';
import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaBug, FaCog, FaDiscord, FaGithub, FaKeyboard } from 'react-icons/fa';
-import { FaWrench } from 'react-icons/fa6';
+import {
+ PiBugBeetleBold,
+ PiKeyboardBold,
+ PiToggleRightFill,
+} from 'react-icons/pi';
+import { RiDiscordFill, RiGithubFill, RiSettings4Line } from 'react-icons/ri';
import SettingsModal from './SettingsModal';
const SettingsMenu = () => {
@@ -34,7 +38,7 @@ const SettingsMenu = () => {
as={InvIconButton}
variant="link"
aria-label={t('accessibility.menu')}
- icon={}
+ icon={}
boxSize={8}
/>
@@ -45,7 +49,7 @@ const SettingsMenu = () => {
as="a"
href={githubLink}
target="_blank"
- icon={}
+ icon={}
>
{t('common.githubLabel')}
@@ -55,7 +59,7 @@ const SettingsMenu = () => {
as="a"
href={`${githubLink}/issues`}
target="_blank"
- icon={}
+ icon={}
>
{t('common.reportBugLabel')}
@@ -65,7 +69,7 @@ const SettingsMenu = () => {
as="a"
href={discordLink}
target="_blank"
- icon={}
+ icon={}
>
{t('common.discordLabel')}
@@ -73,12 +77,12 @@ const SettingsMenu = () => {
- }>
+ }>
{t('common.hotkeysLabel')}
- }>
+ }>
{t('common.settingsLabel')}
diff --git a/invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx b/invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx
index 94e0f76678..4734d1f797 100644
--- a/invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx
+++ b/invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx
@@ -5,7 +5,7 @@ import { InvTooltip } from 'common/components/InvTooltip/InvTooltip';
import type { UsePanelReturn } from 'features/ui/hooks/usePanel';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { MdPhotoLibrary } from 'react-icons/md';
+import { PiImagesSquareBold } from 'react-icons/pi';
type Props = {
panelApi: UsePanelReturn;
@@ -34,7 +34,7 @@ const FloatingGalleryButton = (props: Props) => {
}
+ icon={}
p={0}
h={48}
borderEndRadius={0}
diff --git a/invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx b/invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx
index 32ac805fa8..466da87d85 100644
--- a/invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx
+++ b/invokeai/frontend/web/src/features/ui/components/FloatingParametersPanelButtons.tsx
@@ -10,8 +10,8 @@ import { useQueueBack } from 'features/queue/hooks/useQueueBack';
import type { UsePanelReturn } from 'features/ui/hooks/usePanel';
import { memo, useMemo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaSlidersH } from 'react-icons/fa';
-import { IoSparkles } from 'react-icons/io5';
+import { PiSlidersHorizontalBold } from 'react-icons/pi';
+import { RiSparklingFill } from 'react-icons/ri';
import { useGetQueueStatusQuery } from 'services/api/endpoints/queue';
import { spinAnimationSlow } from 'theme/animations';
@@ -34,7 +34,7 @@ const FloatingSidePanelButtons = (props: Props) => {
!isDisabled && queueStatus?.processor.is_processing ? (
) : (
-
+
),
[isDisabled, queueStatus?.processor.is_processing]
);
@@ -61,7 +61,7 @@ const FloatingSidePanelButtons = (props: Props) => {
aria-label={t('accessibility.showOptionsPanel')}
onClick={props.panelApi.expand}
sx={floatingButtonStyles}
- icon={}
+ icon={}
/>
,
+ icon: ,
content: ,
},
{
id: 'img2img',
translationKey: 'common.img2img',
- icon: ,
+ icon: ,
content: ,
},
{
id: 'unifiedCanvas',
translationKey: 'common.unifiedCanvas',
- icon: ,
+ icon: ,
content: ,
},
{
id: 'nodes',
translationKey: 'common.nodes',
- icon: ,
+ icon: ,
content: ,
},
{
id: 'modelManager',
translationKey: 'modelManager.modelManager',
- icon: ,
+ icon: ,
content: ,
},
{
id: 'queue',
translationKey: 'queue.queue',
- icon: ,
+ icon: ,
content: ,
},
];
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx
index ee50166655..4bbd21c6e1 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryButton.tsx
@@ -3,7 +3,7 @@ import { InvButton } from 'common/components/InvButton/InvButton';
import { WorkflowLibraryModalContext } from 'features/workflowLibrary/context/WorkflowLibraryModalContext';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaFolderOpen } from 'react-icons/fa';
+import { PiBooksBold } from 'react-icons/pi';
import WorkflowLibraryModal from './WorkflowLibraryModal';
@@ -14,7 +14,7 @@ const WorkflowLibraryButton = () => {
return (
}
+ leftIcon={}
onClick={disclosure.onOpen}
pointerEvents="auto"
>
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx
index d5d1d1d30e..3e510a1e83 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/DownloadWorkflowMenuItem.tsx
@@ -2,14 +2,18 @@ import { InvMenuItem } from 'common/components/InvMenu/InvMenuItem';
import { useDownloadWorkflow } from 'features/workflowLibrary/hooks/useDownloadWorkflow';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaDownload } from 'react-icons/fa';
+import { PiDownloadSimpleBold } from 'react-icons/pi';
const DownloadWorkflowMenuItem = () => {
const { t } = useTranslation();
const downloadWorkflow = useDownloadWorkflow();
return (
- } onClick={downloadWorkflow}>
+ }
+ onClick={downloadWorkflow}
+ >
{t('workflows.downloadWorkflow')}
);
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx
index 47b74e41da..2ac22abfa1 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/NewWorkflowMenuItem.tsx
@@ -8,7 +8,7 @@ import { addToast } from 'features/system/store/systemSlice';
import { makeToast } from 'features/system/util/makeToast';
import { memo, useCallback } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaCircleNodes } from 'react-icons/fa6';
+import { PiFlowArrowBold } from 'react-icons/pi';
const NewWorkflowMenuItem = () => {
const { t } = useTranslation();
@@ -41,7 +41,7 @@ const NewWorkflowMenuItem = () => {
return (
<>
- } onClick={onClick}>
+ } onClick={onClick}>
{t('nodes.newWorkflow')}
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx
index 8146a09b33..5a28b279f0 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowAsMenuItem.tsx
@@ -9,7 +9,7 @@ import { getWorkflowCopyName } from 'features/workflowLibrary/util/getWorkflowCo
import type { ChangeEvent } from 'react';
import { memo, useCallback, useRef, useState } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaClone } from 'react-icons/fa';
+import { PiCopyBold } from 'react-icons/pi';
const SaveWorkflowAsButton = () => {
const currentName = useAppSelector((s) => s.workflow.name);
@@ -35,7 +35,7 @@ const SaveWorkflowAsButton = () => {
return (
<>
- } onClick={onOpenCallback}>
+ } onClick={onOpenCallback}>
{t('workflows.saveWorkflowAs')}
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx
index cecd24b129..da479b83d3 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SaveWorkflowMenuItem.tsx
@@ -2,13 +2,13 @@ import { InvMenuItem } from 'common/components/InvMenu/InvMenuItem';
import { useSaveLibraryWorkflow } from 'features/workflowLibrary/hooks/useSaveWorkflow';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaSave } from 'react-icons/fa';
+import { PiFloppyDiskBold } from 'react-icons/pi';
const SaveLibraryWorkflowMenuItem = () => {
const { t } = useTranslation();
const { saveWorkflow } = useSaveLibraryWorkflow();
return (
- } onClick={saveWorkflow}>
+ } onClick={saveWorkflow}>
{t('workflows.saveWorkflow')}
);
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx
index c9f3b949e7..19b3501b70 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/SettingsMenuItem.tsx
@@ -2,7 +2,7 @@ import { InvMenuItem } from 'common/components/InvMenu/InvMenuItem';
import WorkflowEditorSettings from 'features/nodes/components/flow/panels/TopRightPanel/WorkflowEditorSettings';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaCog } from 'react-icons/fa';
+import { RiSettings4Line } from 'react-icons/ri';
const DownloadWorkflowMenuItem = () => {
const { t } = useTranslation();
@@ -10,7 +10,7 @@ const DownloadWorkflowMenuItem = () => {
return (
{({ onOpen }) => (
- } onClick={onOpen}>
+ } onClick={onOpen}>
{t('nodes.workflowSettings')}
)}
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx
index 7e6652c592..3e5faa1a0c 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem.tsx
@@ -3,7 +3,7 @@ import { useLoadWorkflowFromFile } from 'features/workflowLibrary/hooks/useLoadW
import { memo, useCallback, useRef } from 'react';
import { useDropzone } from 'react-dropzone';
import { useTranslation } from 'react-i18next';
-import { FaUpload } from 'react-icons/fa';
+import { PiUploadSimpleBold } from 'react-icons/pi';
const UploadWorkflowMenuItem = () => {
const { t } = useTranslation();
@@ -27,7 +27,7 @@ const UploadWorkflowMenuItem = () => {
multiple: false,
});
return (
- } {...getRootProps()}>
+ } {...getRootProps()}>
{t('workflows.uploadWorkflow')}
diff --git a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx
index 2301e2aeb8..a703b5e903 100644
--- a/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx
+++ b/invokeai/frontend/web/src/features/workflowLibrary/components/WorkflowLibraryMenu/WorkflowLibraryMenu.tsx
@@ -16,7 +16,7 @@ import SettingsMenuItem from 'features/workflowLibrary/components/WorkflowLibrar
import UploadWorkflowMenuItem from 'features/workflowLibrary/components/WorkflowLibraryMenu/UploadWorkflowMenuItem';
import { memo } from 'react';
import { useTranslation } from 'react-i18next';
-import { FaEllipsis } from 'react-icons/fa6';
+import { PiDotsThreeOutlineFill } from 'react-icons/pi';
const WorkflowLibraryMenu = () => {
const { t } = useTranslation();
@@ -31,7 +31,7 @@ const WorkflowLibraryMenu = () => {
}
+ icon={}
pointerEvents="auto"
/>