From 5468d9a9fc288a5958d7cb3ac36942662dc2dbbc Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Sat, 22 Jul 2023 21:38:50 +1000 Subject: [PATCH] fix(ui): resolve all typescript issues --- .../app/components/ImageDnd/DragPreview.tsx | 2 +- .../web/src/common/components/GuideIcon.tsx | 23 - .../src/common/components/GuidePopover.tsx | 49 -- .../web/src/common/components/IAIDndImage.tsx | 4 +- .../components/ImageMetadataOverlay.tsx | 21 +- .../src/common/hooks/useIsReadyToInvoke.ts | 25 +- .../src/common/util/getPromptAndNegative.ts | 31 -- .../web/src/common/util/promptToString.ts | 20 - .../web/src/common/util/seedWeightPairs.ts | 125 ++--- .../src/features/canvas/store/canvasTypes.ts | 3 - .../components/GalleryProgressImage.tsx | 73 --- .../components/ImageGrid/GalleryImageGrid.tsx | 2 + .../features/gallery/store/boardSelectors.ts | 23 - .../gallery/store/galleryPersistDenylist.ts | 7 - .../features/gallery/store/gallerySlice.ts | 5 +- .../lora/components/ParamLoraList.tsx | 8 +- .../nodes/components/ViewportControls.tsx | 21 +- .../Advanced/ParamAdvancedCollapse.tsx | 17 +- .../Seamless/ParamSeamlessToggle.tsx | 33 -- .../Parameters/Seed/ParamSeedCollapse.tsx | 48 -- .../Variations/ParamVariationCollapse.tsx | 84 ++-- .../Variations/ParamVariationWeights.tsx | 66 +-- .../features/system/store/systemSelectors.ts | 36 -- .../src/features/system/store/systemSlice.ts | 7 +- .../ui/components/tabs/Batch/BatchTab.tsx | 43 -- .../ImageToImageTabParameters.tsx | 7 +- .../AddModelsPanel/FoundModelsList.tsx | 6 +- .../AddModelsPanel/ScanAdvancedAddModels.tsx | 120 ++--- .../AddModelsPanel/SearchModelsOld.tsx | 430 ------------------ .../TextToImage/TextToImageTabParameters.tsx | 7 +- .../UnifiedCanvas/UnifiedCanvasParameters.tsx | 7 +- .../web/src/features/ui/store/uiSlice.ts | 7 +- .../api/models/HedImageprocessorInvocation.ts | 36 -- 33 files changed, 280 insertions(+), 1116 deletions(-) delete mode 100644 invokeai/frontend/web/src/common/components/GuideIcon.tsx delete mode 100644 invokeai/frontend/web/src/common/components/GuidePopover.tsx delete mode 100644 invokeai/frontend/web/src/common/util/getPromptAndNegative.ts delete mode 100644 invokeai/frontend/web/src/common/util/promptToString.ts delete mode 100644 invokeai/frontend/web/src/features/gallery/components/GalleryProgressImage.tsx delete mode 100644 invokeai/frontend/web/src/features/gallery/store/boardSelectors.ts delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Seamless/ParamSeamlessToggle.tsx delete mode 100644 invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeedCollapse.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/Batch/BatchTab.tsx delete mode 100644 invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/SearchModelsOld.tsx delete mode 100644 invokeai/frontend/web/src/services/api/models/HedImageprocessorInvocation.ts diff --git a/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx b/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx index e8fa949e9a..82526900ad 100644 --- a/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx +++ b/invokeai/frontend/web/src/app/components/ImageDnd/DragPreview.tsx @@ -27,7 +27,7 @@ const STYLES: ChakraProps['sx'] = { const DragPreview = (props: OverlayDragImageProps) => { if (!props.dragData) { - return; + return null; } if (props.dragData.payloadType === 'IMAGE_DTO') { diff --git a/invokeai/frontend/web/src/common/components/GuideIcon.tsx b/invokeai/frontend/web/src/common/components/GuideIcon.tsx deleted file mode 100644 index d8ac9dda0e..0000000000 --- a/invokeai/frontend/web/src/common/components/GuideIcon.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import { Box, forwardRef, Icon } from '@chakra-ui/react'; -import { Feature } from 'app/features'; -import { memo } from 'react'; -import { IconType } from 'react-icons'; -import { MdHelp } from 'react-icons/md'; -import GuidePopover from './GuidePopover'; - -type GuideIconProps = { - feature: Feature; - icon?: IconType; -}; - -const GuideIcon = forwardRef( - ({ feature, icon = MdHelp }: GuideIconProps, ref) => ( - - - - - - ) -); - -export default memo(GuideIcon); diff --git a/invokeai/frontend/web/src/common/components/GuidePopover.tsx b/invokeai/frontend/web/src/common/components/GuidePopover.tsx deleted file mode 100644 index 1cfb60a830..0000000000 --- a/invokeai/frontend/web/src/common/components/GuidePopover.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { - Box, - Popover, - PopoverArrow, - PopoverBody, - PopoverContent, - PopoverTrigger, -} from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { Feature, useFeatureHelpInfo } from 'app/features'; -import { useAppSelector } from 'app/store/storeHooks'; -import { systemSelector } from 'features/system/store/systemSelectors'; -import { SystemState } from 'features/system/store/systemSlice'; -import { memo, ReactElement } from 'react'; - -type GuideProps = { - children: ReactElement; - feature: Feature; -}; - -const guidePopoverSelector = createSelector( - systemSelector, - (system: SystemState) => system.shouldDisplayGuides -); - -const GuidePopover = ({ children, feature }: GuideProps) => { - const shouldDisplayGuides = useAppSelector(guidePopoverSelector); - const { text } = useFeatureHelpInfo(feature); - - if (!shouldDisplayGuides) return null; - - return ( - - - {children} - - e.preventDefault()} - cursor="initial" - > - - {text} - - - ); -}; - -export default memo(GuidePopover); diff --git a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx index cf01a93197..780447aba6 100644 --- a/invokeai/frontend/web/src/common/components/IAIDndImage.tsx +++ b/invokeai/frontend/web/src/common/components/IAIDndImage.tsx @@ -169,7 +169,9 @@ const IAIDndImage = (props: IAIDndImageProps) => { ...imageSx, }} /> - {withMetadataOverlay && } + {withMetadataOverlay && ( + + )} { - const model = useMemo(() => { - if (!isString(image.metadata?.model)) { - return; - } - - return image.metadata?.model; - }, [image.metadata]); - +const ImageMetadataOverlay = ({ imageDTO }: ImageMetadataOverlayProps) => { return ( { }} > - {image.width} × {image.height} + {imageDTO.width} × {imageDTO.height} - {model && ( - - {model} - - )} ); }; diff --git a/invokeai/frontend/web/src/common/hooks/useIsReadyToInvoke.ts b/invokeai/frontend/web/src/common/hooks/useIsReadyToInvoke.ts index 580206266d..384150be10 100644 --- a/invokeai/frontend/web/src/common/hooks/useIsReadyToInvoke.ts +++ b/invokeai/frontend/web/src/common/hooks/useIsReadyToInvoke.ts @@ -2,17 +2,16 @@ import { createSelector } from '@reduxjs/toolkit'; import { stateSelector } from 'app/store/store'; import { useAppSelector } from 'app/store/storeHooks'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { validateSeedWeights } from 'common/util/seedWeightPairs'; +// import { validateSeedWeights } from 'common/util/seedWeightPairs'; import { activeTabNameSelector } from 'features/ui/store/uiSelectors'; -import { modelsApi } from '../../services/api/endpoints/models'; import { forEach } from 'lodash-es'; +import { modelsApi } from '../../services/api/endpoints/models'; const readinessSelector = createSelector( [stateSelector, activeTabNameSelector], (state, activeTabName) => { const { generation, system } = state; - const { shouldGenerateVariations, seedWeights, initialImage, seed } = - generation; + const { initialImage } = generation; const { isProcessing, isConnected } = system; @@ -44,19 +43,19 @@ const readinessSelector = createSelector( reasonsWhyNotReady.push('System Disconnected'); } - // Cannot generate variations without valid seed weights - if ( - shouldGenerateVariations && - (!(validateSeedWeights(seedWeights) || seedWeights === '') || seed === -1) - ) { - isReady = false; - reasonsWhyNotReady.push('Seed-Weights badly formatted.'); - } + // // Cannot generate variations without valid seed weights + // if ( + // shouldGenerateVariations && + // (!(validateSeedWeights(seedWeights) || seedWeights === '') || seed === -1) + // ) { + // isReady = false; + // reasonsWhyNotReady.push('Seed-Weights badly formatted.'); + // } forEach(state.controlNet.controlNets, (controlNet, id) => { if (!controlNet.model) { isReady = false; - reasonsWhyNotReady.push('ControlNet ${id} has no model selected.'); + reasonsWhyNotReady.push(`ControlNet ${id} has no model selected.`); } }); diff --git a/invokeai/frontend/web/src/common/util/getPromptAndNegative.ts b/invokeai/frontend/web/src/common/util/getPromptAndNegative.ts deleted file mode 100644 index 4683d44428..0000000000 --- a/invokeai/frontend/web/src/common/util/getPromptAndNegative.ts +++ /dev/null @@ -1,31 +0,0 @@ -import * as InvokeAI from 'app/types/invokeai'; -import promptToString from './promptToString'; - -export function getPromptAndNegative(inputPrompt: InvokeAI.Prompt) { - let prompt: string = - typeof inputPrompt === 'string' ? inputPrompt : promptToString(inputPrompt); - - let negativePrompt = ''; - - // Matches all negative prompts, 1st capturing group is the prompt itself - const negativePromptRegExp = new RegExp(/\[([^\][]*)]/, 'gi'); - - // Grab the actual prompt matches (capturing group 1 is 1st index of match) - const negativePromptMatches = [...prompt.matchAll(negativePromptRegExp)].map( - (match) => match[1] - ); - - if (negativePromptMatches.length) { - // Build the negative prompt itself - negativePrompt = negativePromptMatches.join(' '); - - // Replace each match, including its surrounding brackets - // Remove each pair of empty brackets - // Trim whitespace - negativePromptMatches.forEach((match) => { - prompt = prompt.replace(`[${match}]`, '').replaceAll('[]', '').trim(); - }); - } - - return [prompt, negativePrompt]; -} diff --git a/invokeai/frontend/web/src/common/util/promptToString.ts b/invokeai/frontend/web/src/common/util/promptToString.ts deleted file mode 100644 index cb86af2988..0000000000 --- a/invokeai/frontend/web/src/common/util/promptToString.ts +++ /dev/null @@ -1,20 +0,0 @@ -import * as InvokeAI from 'app/types/invokeai'; - -const promptToString = (prompt: InvokeAI.Prompt): string => { - if (typeof prompt === 'string') { - return prompt; - } - - if (prompt.length === 1) { - return prompt[0].prompt; - } - - return prompt - .map( - (promptItem: InvokeAI.PromptItem): string => - `${promptItem.prompt}:${promptItem.weight}` - ) - .join(' '); -}; - -export default promptToString; diff --git a/invokeai/frontend/web/src/common/util/seedWeightPairs.ts b/invokeai/frontend/web/src/common/util/seedWeightPairs.ts index 3a8af5c11d..564f66c1e3 100644 --- a/invokeai/frontend/web/src/common/util/seedWeightPairs.ts +++ b/invokeai/frontend/web/src/common/util/seedWeightPairs.ts @@ -1,68 +1,71 @@ -import * as InvokeAI from 'app/types/invokeai'; +// TODO: Restore variations +// Support code from v2.3 in here. -export const stringToSeedWeights = ( - string: string -): InvokeAI.SeedWeights | boolean => { - const stringPairs = string.split(','); - const arrPairs = stringPairs.map((p) => p.split(':')); - const pairs = arrPairs.map((p: Array): InvokeAI.SeedWeightPair => { - return { seed: Number(p[0]), weight: Number(p[1]) }; - }); +// export const stringToSeedWeights = ( +// string: string +// ): InvokeAI.SeedWeights | boolean => { +// const stringPairs = string.split(','); +// const arrPairs = stringPairs.map((p) => p.split(':')); +// const pairs = arrPairs.map((p: Array): InvokeAI.SeedWeightPair => { +// return { seed: Number(p[0]), weight: Number(p[1]) }; +// }); - if (!validateSeedWeights(pairs)) { - return false; - } +// if (!validateSeedWeights(pairs)) { +// return false; +// } - return pairs; -}; +// return pairs; +// }; -export const validateSeedWeights = ( - seedWeights: InvokeAI.SeedWeights | string -): boolean => { - return typeof seedWeights === 'string' - ? Boolean(stringToSeedWeights(seedWeights)) - : Boolean( - seedWeights.length && - !seedWeights.some((pair: InvokeAI.SeedWeightPair) => { - const { seed, weight } = pair; - const isSeedValid = !isNaN(parseInt(seed.toString(), 10)); - const isWeightValid = - !isNaN(parseInt(weight.toString(), 10)) && - weight >= 0 && - weight <= 1; - return !(isSeedValid && isWeightValid); - }) - ); -}; +// export const validateSeedWeights = ( +// seedWeights: InvokeAI.SeedWeights | string +// ): boolean => { +// return typeof seedWeights === 'string' +// ? Boolean(stringToSeedWeights(seedWeights)) +// : Boolean( +// seedWeights.length && +// !seedWeights.some((pair: InvokeAI.SeedWeightPair) => { +// const { seed, weight } = pair; +// const isSeedValid = !isNaN(parseInt(seed.toString(), 10)); +// const isWeightValid = +// !isNaN(parseInt(weight.toString(), 10)) && +// weight >= 0 && +// weight <= 1; +// return !(isSeedValid && isWeightValid); +// }) +// ); +// }; -export const seedWeightsToString = ( - seedWeights: InvokeAI.SeedWeights -): string => { - return seedWeights.reduce((acc, pair, i, arr) => { - const { seed, weight } = pair; - acc += `${seed}:${weight}`; - if (i !== arr.length - 1) { - acc += ','; - } - return acc; - }, ''); -}; +// export const seedWeightsToString = ( +// seedWeights: InvokeAI.SeedWeights +// ): string => { +// return seedWeights.reduce((acc, pair, i, arr) => { +// const { seed, weight } = pair; +// acc += `${seed}:${weight}`; +// if (i !== arr.length - 1) { +// acc += ','; +// } +// return acc; +// }, ''); +// }; -export const seedWeightsToArray = ( - seedWeights: InvokeAI.SeedWeights -): Array> => { - return seedWeights.map((pair: InvokeAI.SeedWeightPair) => [ - pair.seed, - pair.weight, - ]); -}; +// export const seedWeightsToArray = ( +// seedWeights: InvokeAI.SeedWeights +// ): Array> => { +// return seedWeights.map((pair: InvokeAI.SeedWeightPair) => [ +// pair.seed, +// pair.weight, +// ]); +// }; -export const stringToSeedWeightsArray = ( - string: string -): Array> => { - const stringPairs = string.split(','); - const arrPairs = stringPairs.map((p) => p.split(':')); - return arrPairs.map( - (p: Array): Array => [parseInt(p[0], 10), parseFloat(p[1])] - ); -}; +// export const stringToSeedWeightsArray = ( +// string: string +// ): Array> => { +// const stringPairs = string.split(','); +// const arrPairs = stringPairs.map((p) => p.split(':')); +// return arrPairs.map( +// (p: Array): Array => [parseInt(p[0], 10), parseFloat(p[1])] +// ); +// }; + +export default {}; diff --git a/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts b/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts index 54eafd9780..48d59395ab 100644 --- a/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts +++ b/invokeai/frontend/web/src/features/canvas/store/canvasTypes.ts @@ -1,7 +1,5 @@ -import * as InvokeAI from 'app/types/invokeai'; import { IRect, Vector2d } from 'konva/lib/types'; import { RgbaColor } from 'react-colorful'; -import { ImageDTO } from 'services/api/types'; export const LAYER_NAMES_DICT = [ { label: 'Base', value: 'base' }, @@ -133,7 +131,6 @@ export interface CanvasState { cursorPosition: Vector2d | null; doesCanvasNeedScaling: boolean; futureLayerStates: CanvasLayerState[]; - intermediateImage?: InvokeAI.Image; isCanvasInitialized: boolean; isDrawing: boolean; isMaskEnabled: boolean; diff --git a/invokeai/frontend/web/src/features/gallery/components/GalleryProgressImage.tsx b/invokeai/frontend/web/src/features/gallery/components/GalleryProgressImage.tsx deleted file mode 100644 index 98f7db2726..0000000000 --- a/invokeai/frontend/web/src/features/gallery/components/GalleryProgressImage.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { Flex, Image, Spinner } from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { systemSelector } from 'features/system/store/systemSelectors'; -import { memo } from 'react'; -import { gallerySelector } from '../store/gallerySelectors'; - -const selector = createSelector( - [systemSelector, gallerySelector], - (system, gallery) => { - const { shouldUseSingleGalleryColumn, galleryImageObjectFit } = gallery; - const { progressImage, shouldAntialiasProgressImage } = system; - - return { - progressImage, - shouldUseSingleGalleryColumn, - galleryImageObjectFit, - shouldAntialiasProgressImage, - }; - }, - defaultSelectorOptions -); - -const GalleryProgressImage = () => { - const { - progressImage, - shouldUseSingleGalleryColumn, - galleryImageObjectFit, - shouldAntialiasProgressImage, - } = useAppSelector(selector); - - if (!progressImage) { - return null; - } - - return ( - - - - - ); -}; - -export default memo(GalleryProgressImage); diff --git a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx index 285327a971..8da4adbcb3 100644 --- a/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx +++ b/invokeai/frontend/web/src/features/gallery/components/ImageGrid/GalleryImageGrid.tsx @@ -159,6 +159,8 @@ const GalleryImageGrid = () => { ); } + + return null; }; export default memo(GalleryImageGrid); diff --git a/invokeai/frontend/web/src/features/gallery/store/boardSelectors.ts b/invokeai/frontend/web/src/features/gallery/store/boardSelectors.ts deleted file mode 100644 index 3dac2b6e50..0000000000 --- a/invokeai/frontend/web/src/features/gallery/store/boardSelectors.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { createSelector } from '@reduxjs/toolkit'; -import { RootState } from 'app/store/store'; -import { selectBoardsAll } from './boardSlice'; - -export const boardSelector = (state: RootState) => state.boards.entities; - -export const searchBoardsSelector = createSelector( - (state: RootState) => state, - (state) => { - const { - boards: { searchText }, - } = state; - - if (!searchText) { - // If no search text provided, return all entities - return selectBoardsAll(state); - } - - return selectBoardsAll(state).filter((i) => - i.board_name.toLowerCase().includes(searchText.toLowerCase()) - ); - } -); diff --git a/invokeai/frontend/web/src/features/gallery/store/galleryPersistDenylist.ts b/invokeai/frontend/web/src/features/gallery/store/galleryPersistDenylist.ts index acef7d6fc1..9637cfedb4 100644 --- a/invokeai/frontend/web/src/features/gallery/store/galleryPersistDenylist.ts +++ b/invokeai/frontend/web/src/features/gallery/store/galleryPersistDenylist.ts @@ -5,13 +5,6 @@ import { initialGalleryState } from './gallerySlice'; */ export const galleryPersistDenylist: (keyof typeof initialGalleryState)[] = [ 'selection', - 'entities', - 'ids', - 'isLoading', - 'limit', - 'offset', 'selectedBoardId', 'galleryView', - 'total', - 'isInitialized', ]; diff --git a/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts b/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts index aaff5ba66c..b754018c1f 100644 --- a/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts +++ b/invokeai/frontend/web/src/features/gallery/store/gallerySlice.ts @@ -45,7 +45,7 @@ export const gallerySlice = createSlice({ initialState: initialGalleryState, reducers: { imageRangeEndSelected: (state, action: PayloadAction) => { - // MULTI SELECT LOGIC + // TODO: multiselect // const rangeEndImageName = action.payload; // const lastSelectedImage = state.selection[state.selection.length - 1]; // const filteredImages = selectFilteredImagesLocal(state); @@ -66,7 +66,7 @@ export const gallerySlice = createSlice({ // } }, imageSelectionToggled: (state, action: PayloadAction) => { - // MULTI SELECT LOGIC + // TODO: multiselect // if ( // state.selection.includes(action.payload) && // state.selection.length > 1 @@ -157,7 +157,6 @@ export const gallerySlice = createSlice({ }); export const { - imagesRemoved, imageRangeEndSelected, imageSelectionToggled, imageSelected, diff --git a/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx b/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx index 9bdd187de2..835c315e5c 100644 --- a/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx +++ b/invokeai/frontend/web/src/features/lora/components/ParamLoraList.tsx @@ -18,7 +18,13 @@ const selector = createSelector( const ParamLoraList = () => { const { loras } = useAppSelector(selector); - return map(loras, (lora) => ); + return ( + <> + {map(loras, (lora) => ( + + ))} + + ); }; export default ParamLoraList; diff --git a/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx b/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx index 0699d000e9..796cdb010e 100644 --- a/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx +++ b/invokeai/frontend/web/src/features/nodes/components/ViewportControls.tsx @@ -59,13 +59,25 @@ const ViewportControls = () => { return ( - } /> + } + /> - } /> + } + /> - } /> + } + /> { } > } @@ -88,6 +101,7 @@ const ViewportControls = () => { } > } @@ -101,6 +115,7 @@ const ViewportControls = () => { } > } diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamAdvancedCollapse.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamAdvancedCollapse.tsx index 984ad833a6..ab44bda16b 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamAdvancedCollapse.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Parameters/Advanced/ParamAdvancedCollapse.tsx @@ -22,13 +22,16 @@ export default function ParamAdvancedCollapse() { const shouldShowAdvancedOptions = useAppSelector( (state: RootState) => state.ui.shouldShowAdvancedOptions ); + + if (!shouldShowAdvancedOptions) { + return null; + } + return ( - shouldShowAdvancedOptions && ( - - - - - - ) + + + + + ); } diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/Seamless/ParamSeamlessToggle.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/Seamless/ParamSeamlessToggle.tsx deleted file mode 100644 index 1a3b046bcf..0000000000 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/Seamless/ParamSeamlessToggle.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { RootState } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import IAISwitch from 'common/components/IAISwitch'; -import { setSeamless } from 'features/parameters/store/generationSlice'; -import { ChangeEvent } from 'react'; -import { useTranslation } from 'react-i18next'; - -/** - * Seamless tiling toggle - */ -const ParamSeamlessToggle = () => { - const dispatch = useAppDispatch(); - - const seamless = useAppSelector( - (state: RootState) => state.generation.seamless - ); - - const handleChangeSeamless = (e: ChangeEvent) => - dispatch(setSeamless(e.target.checked)); - - const { t } = useTranslation(); - - return ( - - ); -}; - -export default ParamSeamlessToggle; diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeedCollapse.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeedCollapse.tsx deleted file mode 100644 index 2867029f7e..0000000000 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/Seed/ParamSeedCollapse.tsx +++ /dev/null @@ -1,48 +0,0 @@ -import { Flex } from '@chakra-ui/react'; -import ParamSeed from './ParamSeed'; -import { memo, useCallback } from 'react'; -import ParamSeedShuffle from './ParamSeedShuffle'; -import { useTranslation } from 'react-i18next'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { createSelector } from '@reduxjs/toolkit'; -import { generationSelector } from 'features/parameters/store/generationSelectors'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { setShouldRandomizeSeed } from 'features/parameters/store/generationSlice'; -import IAICollapse from 'common/components/IAICollapse'; - -const selector = createSelector( - generationSelector, - (generation) => { - const { shouldRandomizeSeed } = generation; - - return { shouldRandomizeSeed }; - }, - defaultSelectorOptions -); - -const ParamSeedSettings = () => { - const { t } = useTranslation(); - const dispatch = useAppDispatch(); - const { shouldRandomizeSeed } = useAppSelector(selector); - - const handleToggle = useCallback( - () => dispatch(setShouldRandomizeSeed(!shouldRandomizeSeed)), - [dispatch, shouldRandomizeSeed] - ); - - return ( - - - - - - - ); -}; - -export default memo(ParamSeedSettings); diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationCollapse.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationCollapse.tsx index 3cdfc3a06b..7ea248498d 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationCollapse.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationCollapse.tsx @@ -1,47 +1,51 @@ -import { Flex } from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { stateSelector } from 'app/store/store'; -import { useAppSelector } from 'app/store/storeHooks'; -import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import IAICollapse from 'common/components/IAICollapse'; -import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; -import { memo } from 'react'; -import { useTranslation } from 'react-i18next'; -import ParamVariationAmount from './ParamVariationAmount'; -import { ParamVariationToggle } from './ParamVariationToggle'; -import ParamVariationWeights from './ParamVariationWeights'; +// TODO: variations -const selector = createSelector( - stateSelector, - (state) => { - const activeLabel = state.generation.shouldGenerateVariations - ? 'Enabled' - : undefined; +// import { Flex } from '@chakra-ui/react'; +// import { createSelector } from '@reduxjs/toolkit'; +// import { stateSelector } from 'app/store/store'; +// import { useAppSelector } from 'app/store/storeHooks'; +// import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; +// import IAICollapse from 'common/components/IAICollapse'; +// import { useFeatureStatus } from 'features/system/hooks/useFeatureStatus'; +// import { memo } from 'react'; +// import { useTranslation } from 'react-i18next'; +// import ParamVariationAmount from './ParamVariationAmount'; +// import { ParamVariationToggle } from './ParamVariationToggle'; +// import ParamVariationWeights from './ParamVariationWeights'; - return { activeLabel }; - }, - defaultSelectorOptions -); +// const selector = createSelector( +// stateSelector, +// (state) => { +// const activeLabel = state.generation.shouldGenerateVariations +// ? 'Enabled' +// : undefined; -const ParamVariationCollapse = () => { - const { t } = useTranslation(); - const { activeLabel } = useAppSelector(selector); +// return { activeLabel }; +// }, +// defaultSelectorOptions +// ); - const isVariationEnabled = useFeatureStatus('variation').isFeatureEnabled; +// const ParamVariationCollapse = () => { +// const { t } = useTranslation(); +// const { activeLabel } = useAppSelector(selector); - if (!isVariationEnabled) { - return null; - } +// const isVariationEnabled = useFeatureStatus('variation').isFeatureEnabled; - return ( - - - - - - - - ); -}; +// if (!isVariationEnabled) { +// return null; +// } -export default memo(ParamVariationCollapse); +// return ( +// +// +// +// +// +// +// +// ); +// }; + +// export default memo(ParamVariationCollapse); + +export default {}; diff --git a/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationWeights.tsx b/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationWeights.tsx index 30876597a8..45029e8536 100644 --- a/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationWeights.tsx +++ b/invokeai/frontend/web/src/features/parameters/components/Parameters/Variations/ParamVariationWeights.tsx @@ -1,37 +1,41 @@ -import { RootState } from 'app/store/store'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import IAIInput from 'common/components/IAIInput'; -import { validateSeedWeights } from 'common/util/seedWeightPairs'; -import { setSeedWeights } from 'features/parameters/store/generationSlice'; -import { ChangeEvent } from 'react'; -import { useTranslation } from 'react-i18next'; +// TODO: variations -export default function ParamVariationWeights() { - const seedWeights = useAppSelector( - (state: RootState) => state.generation.seedWeights - ); +// import { RootState } from 'app/store/store'; +// import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; +// import IAIInput from 'common/components/IAIInput'; +// import { validateSeedWeights } from 'common/util/seedWeightPairs'; +// import { setSeedWeights } from 'features/parameters/store/generationSlice'; +// import { ChangeEvent } from 'react'; +// import { useTranslation } from 'react-i18next'; - const shouldGenerateVariations = useAppSelector( - (state: RootState) => state.generation.shouldGenerateVariations - ); +// export default function ParamVariationWeights() { +// const seedWeights = useAppSelector( +// (state: RootState) => state.generation.seedWeights +// ); - const { t } = useTranslation(); +// const shouldGenerateVariations = useAppSelector( +// (state: RootState) => state.generation.shouldGenerateVariations +// ); - const dispatch = useAppDispatch(); +// const { t } = useTranslation(); - const handleChangeSeedWeights = (e: ChangeEvent) => - dispatch(setSeedWeights(e.target.value)); +// const dispatch = useAppDispatch(); - return ( - - ); -} +// const handleChangeSeedWeights = (e: ChangeEvent) => +// dispatch(setSeedWeights(e.target.value)); + +// return ( +// +// ); +// } + +export default {}; diff --git a/invokeai/frontend/web/src/features/system/store/systemSelectors.ts b/invokeai/frontend/web/src/features/system/store/systemSelectors.ts index 0d53da85e6..900d8e0bd6 100644 --- a/invokeai/frontend/web/src/features/system/store/systemSelectors.ts +++ b/invokeai/frontend/web/src/features/system/store/systemSelectors.ts @@ -1,47 +1,11 @@ import { createSelector } from '@reduxjs/toolkit'; import { RootState } from 'app/store/store'; import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions'; -import { pickBy, reduce } from 'lodash-es'; export const systemSelector = (state: RootState) => state.system; export const toastQueueSelector = (state: RootState) => state.system.toastQueue; -export const activeModelSelector = createSelector( - systemSelector, - (system) => { - const { model_list } = system; - const activeModel = reduce( - model_list, - (acc, model, key) => { - if (model.status === 'active') { - acc = key; - } - return acc; - }, - '' - ); - return { ...model_list[activeModel], name: activeModel }; - }, - defaultSelectorOptions -); - -export const diffusersModelsSelector = createSelector( - systemSelector, - (system) => { - const { model_list } = system; - - const diffusersModels = pickBy(model_list, (model, key) => { - if (model.format === 'diffusers') { - return { name: key, ...model }; - } - }); - - return diffusersModels; - }, - defaultSelectorOptions -); - export const languageSelector = createSelector( systemSelector, (system) => system.language, diff --git a/invokeai/frontend/web/src/features/system/store/systemSlice.ts b/invokeai/frontend/web/src/features/system/store/systemSlice.ts index 12955092de..aca126bb13 100644 --- a/invokeai/frontend/web/src/features/system/store/systemSlice.ts +++ b/invokeai/frontend/web/src/features/system/store/systemSlice.ts @@ -74,7 +74,8 @@ export interface SystemState { */ consoleLogLevel: InvokeLogLevel; shouldLogToConsole: boolean; - statusTranslationKey: any; + // TODO: probably better to not store keys here, should just be a string that maps to the translation key + statusTranslationKey: string; /** * When a session is canceled, its ID is stored here until a new session is created. */ @@ -125,7 +126,7 @@ export const systemSlice = createSlice({ setIsProcessing: (state, action: PayloadAction) => { state.isProcessing = action.payload; }, - setCurrentStatus: (state, action: any) => { + setCurrentStatus: (state, action: PayloadAction) => { state.statusTranslationKey = action.payload; }, setShouldConfirmOnDelete: (state, action: PayloadAction) => { @@ -362,7 +363,7 @@ export const systemSlice = createSlice({ * Session Invoked - REJECTED * Session Created - REJECTED */ - builder.addMatcher(isAnySessionRejected, (state, action) => { + builder.addMatcher(isAnySessionRejected, (state) => { state.isProcessing = false; state.isCancelable = false; state.isCancelScheduled = false; diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/Batch/BatchTab.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/Batch/BatchTab.tsx deleted file mode 100644 index 811660c174..0000000000 --- a/invokeai/frontend/web/src/features/ui/components/tabs/Batch/BatchTab.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { Box, Flex } from '@chakra-ui/react'; -import { useAppDispatch } from 'app/store/storeHooks'; -import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale'; -import InitialImageDisplay from 'features/parameters/components/Parameters/ImageToImage/InitialImageDisplay'; -import { memo, useCallback, useRef } from 'react'; -import { - ImperativePanelGroupHandle, - Panel, - PanelGroup, -} from 'react-resizable-panels'; -import ResizeHandle from '../ResizeHandle'; -import TextToImageTabMain from '../TextToImage/TextToImageTabMain'; -import BatchManager from 'features/batch/components/BatchManager'; - -const ImageToImageTab = () => { - const dispatch = useAppDispatch(); - const panelGroupRef = useRef(null); - - const handleDoubleClickHandle = useCallback(() => { - if (!panelGroupRef.current) { - return; - } - - panelGroupRef.current.setLayout([50, 50]); - }, []); - - return ( - - - - ); -}; - -export default memo(ImageToImageTab); diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabParameters.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabParameters.tsx index 87e19993d7..9de6a74ec0 100644 --- a/invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabParameters.tsx +++ b/invokeai/frontend/web/src/features/ui/components/tabs/ImageToImage/ImageToImageTabParameters.tsx @@ -7,9 +7,8 @@ import ParamPositiveConditioning from 'features/parameters/components/Parameters import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse'; import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse'; import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse'; -import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; +// import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons'; -import { memo } from 'react'; import ImageToImageTabCoreParameters from './ImageToImageTabCoreParameters'; const ImageToImageTabParameters = () => { @@ -22,7 +21,7 @@ const ImageToImageTabParameters = () => { - + {/* */} @@ -31,4 +30,4 @@ const ImageToImageTabParameters = () => { ); }; -export default memo(ImageToImageTabParameters); +export default ImageToImageTabParameters; diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/FoundModelsList.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/FoundModelsList.tsx index 315e221366..bcb0e02298 100644 --- a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/FoundModelsList.tsx +++ b/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/FoundModelsList.tsx @@ -168,7 +168,9 @@ export default function FoundModelsList() { }; const renderFoundModels = () => { - if (!searchFolder) return; + if (!searchFolder) { + return null; + } if (!foundModels || foundModels.length === 0) { return ( @@ -242,7 +244,7 @@ const foundModelsFilter = ( const filteredModels: SearchFolderResponse = []; forEach(data, (model) => { if (!model) { - return; + return null; } if (model.includes(nameFilter)) { diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/ScanAdvancedAddModels.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/ScanAdvancedAddModels.tsx index 3ae4773009..32906c3396 100644 --- a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/ScanAdvancedAddModels.tsx +++ b/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/ScanAdvancedAddModels.tsx @@ -32,66 +32,68 @@ export default function ScanAdvancedAddModels() { const dispatch = useAppDispatch(); + if (!advancedAddScanModel) { + return null; + } + return ( - advancedAddScanModel && ( - - - - {isCheckpoint || advancedAddMode === 'checkpoint' - ? 'Add Checkpoint Model' - : 'Add Diffusers Model'} - - } - aria-label="Close Advanced" - onClick={() => dispatch(setAdvancedAddScanModel(null))} - size="sm" - /> - - { - if (!v) return; - setAdvancedAddMode(v as ManualAddMode); - if (v === 'checkpoint') { - setIsCheckpoint(true); - } else { - setIsCheckpoint(false); - } - }} + + + + {isCheckpoint || advancedAddMode === 'checkpoint' + ? 'Add Checkpoint Model' + : 'Add Diffusers Model'} + + } + aria-label="Close Advanced" + onClick={() => dispatch(setAdvancedAddScanModel(null))} + size="sm" /> - {isCheckpoint ? ( - - ) : ( - - )} - - ) + + { + if (!v) return; + setAdvancedAddMode(v as ManualAddMode); + if (v === 'checkpoint') { + setIsCheckpoint(true); + } else { + setIsCheckpoint(false); + } + }} + /> + {isCheckpoint ? ( + + ) : ( + + )} + ); } diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/SearchModelsOld.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/SearchModelsOld.tsx deleted file mode 100644 index 3381cb85d3..0000000000 --- a/invokeai/frontend/web/src/features/ui/components/tabs/ModelManager/subpanels/AddModelsPanel/SearchModelsOld.tsx +++ /dev/null @@ -1,430 +0,0 @@ -import IAIButton from 'common/components/IAIButton'; -import IAISimpleCheckbox from 'common/components/IAISimpleCheckbox'; -import IAIIconButton from 'common/components/IAIIconButton'; -import React from 'react'; - -import { - Badge, - Flex, - FormControl, - HStack, - Radio, - RadioGroup, - Spacer, - Text, -} from '@chakra-ui/react'; -import { createSelector } from '@reduxjs/toolkit'; -import { useAppDispatch, useAppSelector } from 'app/store/storeHooks'; -import { systemSelector } from 'features/system/store/systemSelectors'; -import { useTranslation } from 'react-i18next'; - -import { FaSearch, FaTrash } from 'react-icons/fa'; - -// import { addNewModel, searchForModels } from 'app/socketio/actions'; -import { - setFoundModels, - setSearchFolder, -} from 'features/system/store/systemSlice'; -import { setShouldShowExistingModelsInSearch } from 'features/ui/store/uiSlice'; - -import type { FoundModel } from 'app/types/invokeai'; -import type { RootState } from 'app/store/store'; -import IAIInput from 'common/components/IAIInput'; -import { Field, Formik } from 'formik'; -import { forEach, remove } from 'lodash-es'; -import type { ChangeEvent, ReactNode } from 'react'; -import IAIForm from 'common/components/IAIForm'; - -const existingModelsSelector = createSelector([systemSelector], (system) => { - const { model_list } = system; - - const existingModels: string[] = []; - - forEach(model_list, (value) => { - existingModels.push(value.weights); - }); - - return existingModels; -}); - -interface SearchModelEntry { - model: FoundModel; - modelsToAdd: string[]; - setModelsToAdd: React.Dispatch>; -} - -function SearchModelEntry({ - model, - modelsToAdd, - setModelsToAdd, -}: SearchModelEntry) { - const { t } = useTranslation(); - const existingModels = useAppSelector(existingModelsSelector); - - const foundModelsChangeHandler = (e: ChangeEvent) => { - if (!modelsToAdd.includes(e.target.value)) { - setModelsToAdd([...modelsToAdd, e.target.value]); - } else { - setModelsToAdd(remove(modelsToAdd, (v) => v !== e.target.value)); - } - }; - - return ( - - - {model.name}} - isChecked={modelsToAdd.includes(model.name)} - isDisabled={existingModels.includes(model.location)} - onChange={foundModelsChangeHandler} - > - {existingModels.includes(model.location) && ( - {t('modelManager.modelExists')} - )} - - - {model.location} - - - ); -} - -export default function SearchModels() { - const dispatch = useAppDispatch(); - - const { t } = useTranslation(); - - const searchFolder = useAppSelector( - (state: RootState) => state.system.searchFolder - ); - - const foundModels = useAppSelector( - (state: RootState) => state.system.foundModels - ); - - const existingModels = useAppSelector(existingModelsSelector); - - const shouldShowExistingModelsInSearch = useAppSelector( - (state: RootState) => state.ui.shouldShowExistingModelsInSearch - ); - - const isProcessing = useAppSelector( - (state: RootState) => state.system.isProcessing - ); - - const [modelsToAdd, setModelsToAdd] = React.useState([]); - const [modelType, setModelType] = React.useState('v1'); - const [pathToConfig, setPathToConfig] = React.useState(''); - - const resetSearchModelHandler = () => { - dispatch(setSearchFolder(null)); - dispatch(setFoundModels(null)); - setModelsToAdd([]); - }; - - const findModelsHandler = (values: { checkpointFolder: string }) => { - dispatch(searchForModels(values.checkpointFolder)); - }; - - const addAllToSelected = () => { - setModelsToAdd([]); - if (foundModels) { - foundModels.forEach((model) => { - if (!existingModels.includes(model.location)) { - setModelsToAdd((currentModels) => { - return [...currentModels, model.name]; - }); - } - }); - } - }; - - const removeAllFromSelected = () => { - setModelsToAdd([]); - }; - - const addSelectedModels = () => { - const modelsToBeAdded = foundModels?.filter((foundModel) => - modelsToAdd.includes(foundModel.name) - ); - - const configFiles = { - v1: 'configs/stable-diffusion/v1-inference.yaml', - v2_base: 'configs/stable-diffusion/v2-inference-v.yaml', - v2_768: 'configs/stable-diffusion/v2-inference-v.yaml', - inpainting: 'configs/stable-diffusion/v1-inpainting-inference.yaml', - custom: pathToConfig, - }; - - modelsToBeAdded?.forEach((model) => { - const modelFormat = { - name: model.name, - description: '', - config: configFiles[modelType as keyof typeof configFiles], - weights: model.location, - vae: '', - width: 512, - height: 512, - default: false, - format: 'ckpt', - }; - dispatch(addNewModel(modelFormat)); - }); - setModelsToAdd([]); - }; - - const renderFoundModels = () => { - const newFoundModels: ReactNode[] = []; - const existingFoundModels: ReactNode[] = []; - - if (foundModels) { - foundModels.forEach((model, index) => { - if (existingModels.includes(model.location)) { - existingFoundModels.push( - - ); - } else { - newFoundModels.push( - - ); - } - }); - } - - return ( - - {newFoundModels} - {shouldShowExistingModelsInSearch && existingFoundModels} - - ); - }; - - return ( - <> - {searchFolder ? ( - - - - {t('modelManager.checkpointFolder')} - - {searchFolder} - - - } - fontSize={18} - disabled={isProcessing} - onClick={() => dispatch(searchForModels(searchFolder))} - /> - } - onClick={resetSearchModelHandler} - /> - - ) : ( - { - findModelsHandler(values); - }} - > - {({ handleSubmit }) => ( - - - - - - } - aria-label={t('modelManager.findModels')} - tooltip={t('modelManager.findModels')} - type="submit" - disabled={isProcessing} - px={8} - > - {t('modelManager.findModels')} - - - - )} - - )} - {foundModels && ( - - -

- {t('modelManager.modelsFound')}: {foundModels.length} -

-

- {t('modelManager.selected')}: {modelsToAdd.length} -

-
- - - - {t('modelManager.selectAll')} - - - {t('modelManager.deselectAll')} - - - dispatch( - setShouldShowExistingModelsInSearch( - !shouldShowExistingModelsInSearch - ) - ) - } - /> - - - - {t('modelManager.addSelected')} - - - - - - - {t('modelManager.pickModelType')} - - setModelType(v)} - defaultValue="v1" - name="model_type" - > - - - {t('modelManager.v1')} - - - {t('modelManager.v2_base')} - - - {t('modelManager.v2_768')} - - - {t('modelManager.inpainting')} - - - {t('modelManager.customConfig')} - - - - - - {modelType === 'custom' && ( - - - {t('modelManager.pathToCustomConfig')} - - { - if (e.target.value !== '') setPathToConfig(e.target.value); - }} - width="full" - /> - - )} - - - - {foundModels.length > 0 ? ( - renderFoundModels() - ) : ( - - {t('modelManager.noModelsFound')} - - )} - -
- )} - - ); -} diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabParameters.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabParameters.tsx index 3d3fd87851..8b6fb6f46c 100644 --- a/invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabParameters.tsx +++ b/invokeai/frontend/web/src/features/ui/components/tabs/TextToImage/TextToImageTabParameters.tsx @@ -7,9 +7,8 @@ import ParamPositiveConditioning from 'features/parameters/components/Parameters import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse'; import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse'; import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse'; -import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; +// import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons'; -import { memo } from 'react'; import TextToImageTabCoreParameters from './TextToImageTabCoreParameters'; const TextToImageTabParameters = () => { @@ -22,7 +21,7 @@ const TextToImageTabParameters = () => { - + {/* */} @@ -31,4 +30,4 @@ const TextToImageTabParameters = () => { ); }; -export default memo(TextToImageTabParameters); +export default TextToImageTabParameters; diff --git a/invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasParameters.tsx b/invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasParameters.tsx index e413ad7ab2..95270c6bbc 100644 --- a/invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasParameters.tsx +++ b/invokeai/frontend/web/src/features/ui/components/tabs/UnifiedCanvas/UnifiedCanvasParameters.tsx @@ -7,9 +7,8 @@ import ParamControlNetCollapse from 'features/parameters/components/Parameters/C import ParamNegativeConditioning from 'features/parameters/components/Parameters/Core/ParamNegativeConditioning'; import ParamPositiveConditioning from 'features/parameters/components/Parameters/Core/ParamPositiveConditioning'; import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse'; -import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; +// import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse'; import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons'; -import { memo } from 'react'; import UnifiedCanvasCoreParameters from './UnifiedCanvasCoreParameters'; const UnifiedCanvasParameters = () => { @@ -22,7 +21,7 @@ const UnifiedCanvasParameters = () => { - + {/* */} @@ -31,4 +30,4 @@ const UnifiedCanvasParameters = () => { ); }; -export default memo(UnifiedCanvasParameters); +export default UnifiedCanvasParameters; diff --git a/invokeai/frontend/web/src/features/ui/store/uiSlice.ts b/invokeai/frontend/web/src/features/ui/store/uiSlice.ts index ccce10f5c4..c653e40368 100644 --- a/invokeai/frontend/web/src/features/ui/store/uiSlice.ts +++ b/invokeai/frontend/web/src/features/ui/store/uiSlice.ts @@ -4,7 +4,7 @@ import { initialImageChanged } from 'features/parameters/store/generationSlice'; import { SchedulerParam } from 'features/parameters/types/parameterSchemas'; import { setActiveTabReducer } from './extraReducers'; import { InvokeTabName } from './tabMap'; -import { AddNewModelType, UIState } from './uiTypes'; +import { UIState } from './uiTypes'; export const initialUIState: UIState = { activeTab: 0, @@ -14,7 +14,6 @@ export const initialUIState: UIState = { shouldUseCanvasBetaLayout: false, shouldShowExistingModelsInSearch: false, shouldUseSliders: false, - addNewModelUIOption: null, shouldPinGallery: true, shouldShowGallery: true, shouldHidePreview: false, @@ -57,9 +56,6 @@ export const uiSlice = createSlice({ setShouldUseSliders: (state, action: PayloadAction) => { state.shouldUseSliders = action.payload; }, - setAddNewModelUIOption: (state, action: PayloadAction) => { - state.addNewModelUIOption = action.payload; - }, setShouldShowGallery: (state, action: PayloadAction) => { state.shouldShowGallery = action.payload; }, @@ -124,7 +120,6 @@ export const { setShouldUseCanvasBetaLayout, setShouldShowExistingModelsInSearch, setShouldUseSliders, - setAddNewModelUIOption, setShouldHidePreview, setShouldShowGallery, togglePanels, diff --git a/invokeai/frontend/web/src/services/api/models/HedImageprocessorInvocation.ts b/invokeai/frontend/web/src/services/api/models/HedImageprocessorInvocation.ts deleted file mode 100644 index 387e8c8634..0000000000 --- a/invokeai/frontend/web/src/services/api/models/HedImageprocessorInvocation.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* istanbul ignore file */ -/* tslint:disable */ -/* eslint-disable */ - -import type { ImageField } from './ImageField'; - -/** - * Applies HED edge detection to image - */ -export type HedImageProcessorInvocation = { - /** - * The id of this node. Must be unique among all nodes. - */ - id: string; - /** - * Whether or not this node is an intermediate node. - */ - is_intermediate?: boolean; - type?: 'hed_image_processor'; - /** - * The image to process - */ - image?: ImageField; - /** - * The pixel resolution for detection - */ - detect_resolution?: number; - /** - * The pixel resolution for the output image - */ - image_resolution?: number; - /** - * Whether to use scribble mode - */ - scribble?: boolean; -};