mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(ui): restore tab names
This commit is contained in:
parent
c565812723
commit
279468c0e8
@ -54,7 +54,7 @@
|
|||||||
"img2img": "Image To Image",
|
"img2img": "Image To Image",
|
||||||
"unifiedCanvas": "Unified Canvas",
|
"unifiedCanvas": "Unified Canvas",
|
||||||
"linear": "Linear",
|
"linear": "Linear",
|
||||||
"nodes": "Nodes",
|
"nodes": "Node Editor",
|
||||||
"postprocessing": "Post Processing",
|
"postprocessing": "Post Processing",
|
||||||
"nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.",
|
"nodesDesc": "A node based system for the generation of images is under development currently. Stay tuned for updates about this amazing feature.",
|
||||||
"postProcessing": "Post Processing",
|
"postProcessing": "Post Processing",
|
||||||
|
@ -10,7 +10,7 @@ const moduleLog = log.child({ namespace: 'invoke' });
|
|||||||
export const addUserInvokedImageToImageListener = () => {
|
export const addUserInvokedImageToImageListener = () => {
|
||||||
startAppListening({
|
startAppListening({
|
||||||
predicate: (action): action is ReturnType<typeof userInvoked> =>
|
predicate: (action): action is ReturnType<typeof userInvoked> =>
|
||||||
userInvoked.match(action) && action.payload === 'image',
|
userInvoked.match(action) && action.payload === 'img2img',
|
||||||
effect: (action, { getState, dispatch }) => {
|
effect: (action, { getState, dispatch }) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ const moduleLog = log.child({ namespace: 'invoke' });
|
|||||||
export const addUserInvokedTextToImageListener = () => {
|
export const addUserInvokedTextToImageListener = () => {
|
||||||
startAppListening({
|
startAppListening({
|
||||||
predicate: (action): action is ReturnType<typeof userInvoked> =>
|
predicate: (action): action is ReturnType<typeof userInvoked> =>
|
||||||
userInvoked.match(action) && action.payload === 'text',
|
userInvoked.match(action) && action.payload === 'txt2img',
|
||||||
effect: (action, { getState, dispatch }) => {
|
effect: (action, { getState, dispatch }) => {
|
||||||
const state = getState();
|
const state = getState();
|
||||||
|
|
||||||
|
@ -61,11 +61,11 @@ export const useGlobalHotkeys = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
useHotkeys('1', () => {
|
useHotkeys('1', () => {
|
||||||
dispatch(setActiveTab('text'));
|
dispatch(setActiveTab('txt2img'));
|
||||||
});
|
});
|
||||||
|
|
||||||
useHotkeys('2', () => {
|
useHotkeys('2', () => {
|
||||||
dispatch(setActiveTab('image'));
|
dispatch(setActiveTab('img2img'));
|
||||||
});
|
});
|
||||||
|
|
||||||
useHotkeys('3', () => {
|
useHotkeys('3', () => {
|
||||||
|
@ -40,7 +40,7 @@ export const floatingParametersPanelButtonSelector = createSelector(
|
|||||||
const shouldShowParametersPanelButton =
|
const shouldShowParametersPanelButton =
|
||||||
!canvasBetaLayoutCheck &&
|
!canvasBetaLayoutCheck &&
|
||||||
!shouldShowParametersPanel &&
|
!shouldShowParametersPanel &&
|
||||||
['text', 'image', 'unifiedCanvas'].includes(activeTabName);
|
['txt2img', 'img2img', 'unifiedCanvas'].includes(activeTabName);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
shouldPinParametersPanel,
|
shouldPinParametersPanel,
|
||||||
|
@ -26,12 +26,12 @@ import { configSelector } from 'features/system/store/configSelectors';
|
|||||||
import { isEqual } from 'lodash-es';
|
import { isEqual } from 'lodash-es';
|
||||||
import { Panel, PanelGroup } from 'react-resizable-panels';
|
import { Panel, PanelGroup } from 'react-resizable-panels';
|
||||||
import ImageGalleryContent from 'features/gallery/components/ImageGalleryContent';
|
import ImageGalleryContent from 'features/gallery/components/ImageGalleryContent';
|
||||||
import TextTab from './tabs/text/TextTab';
|
import TextToImageTab from './tabs/TextToImage/TextToImageTab';
|
||||||
import UnifiedCanvasTab from './tabs/UnifiedCanvas/UnifiedCanvasTab';
|
import UnifiedCanvasTab from './tabs/UnifiedCanvas/UnifiedCanvasTab';
|
||||||
import NodesTab from './tabs/Nodes/NodesTab';
|
import NodesTab from './tabs/Nodes/NodesTab';
|
||||||
import { FaImage } from 'react-icons/fa';
|
import { FaImage } from 'react-icons/fa';
|
||||||
import ResizeHandle from './tabs/ResizeHandle';
|
import ResizeHandle from './tabs/ResizeHandle';
|
||||||
import ImageTab from './tabs/image/ImageTab';
|
import ImageTab from './tabs/ImageToImage/ImageToImageTab';
|
||||||
|
|
||||||
export interface InvokeTabInfo {
|
export interface InvokeTabInfo {
|
||||||
id: InvokeTabName;
|
id: InvokeTabName;
|
||||||
@ -41,12 +41,12 @@ export interface InvokeTabInfo {
|
|||||||
|
|
||||||
const tabs: InvokeTabInfo[] = [
|
const tabs: InvokeTabInfo[] = [
|
||||||
{
|
{
|
||||||
id: 'text',
|
id: 'txt2img',
|
||||||
icon: <Icon as={GoTextSize} sx={{ boxSize: 5 }} />,
|
icon: <Icon as={GoTextSize} sx={{ boxSize: 5 }} />,
|
||||||
content: <TextTab />,
|
content: <TextToImageTab />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'image',
|
id: 'img2img',
|
||||||
icon: <Icon as={FaImage} sx={{ boxSize: 5 }} />,
|
icon: <Icon as={FaImage} sx={{ boxSize: 5 }} />,
|
||||||
content: <ImageTab />,
|
content: <ImageTab />,
|
||||||
},
|
},
|
||||||
|
@ -14,8 +14,8 @@ import {
|
|||||||
import { setShouldShowParametersPanel } from 'features/ui/store/uiSlice';
|
import { setShouldShowParametersPanel } from 'features/ui/store/uiSlice';
|
||||||
import ResizableDrawer from './common/ResizableDrawer/ResizableDrawer';
|
import ResizableDrawer from './common/ResizableDrawer/ResizableDrawer';
|
||||||
import PinParametersPanelButton from './PinParametersPanelButton';
|
import PinParametersPanelButton from './PinParametersPanelButton';
|
||||||
import TextTabParameters from './tabs/text/TextTabParameters';
|
import TextToImageTabParameters from './tabs/TextToImage/TextToImageTabParameters';
|
||||||
import ImageTabParameters from './tabs/image/ImageTabParameters';
|
import ImageToImageTabParameters from './tabs/ImageToImage/ImageToImageTabParameters';
|
||||||
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
||||||
import UnifiedCanvasParameters from './tabs/UnifiedCanvas/UnifiedCanvasParameters';
|
import UnifiedCanvasParameters from './tabs/UnifiedCanvas/UnifiedCanvasParameters';
|
||||||
|
|
||||||
@ -50,12 +50,12 @@ const ParametersDrawer = () => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const drawerContent = useMemo(() => {
|
const drawerContent = useMemo(() => {
|
||||||
if (activeTabName === 'text') {
|
if (activeTabName === 'txt2img') {
|
||||||
return <TextTabParameters />;
|
return <TextToImageTabParameters />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTabName === 'image') {
|
if (activeTabName === 'img2img') {
|
||||||
return <ImageTabParameters />;
|
return <ImageToImageTabParameters />;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activeTabName === 'unifiedCanvas') {
|
if (activeTabName === 'unifiedCanvas') {
|
||||||
|
@ -3,10 +3,29 @@ import { PropsWithChildren, memo } from 'react';
|
|||||||
import { PARAMETERS_PANEL_WIDTH } from 'theme/util/constants';
|
import { PARAMETERS_PANEL_WIDTH } from 'theme/util/constants';
|
||||||
import OverlayScrollable from './common/OverlayScrollable';
|
import OverlayScrollable from './common/OverlayScrollable';
|
||||||
import PinParametersPanelButton from './PinParametersPanelButton';
|
import PinParametersPanelButton from './PinParametersPanelButton';
|
||||||
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
|
import { uiSelector } from '../store/uiSelectors';
|
||||||
|
import { useAppSelector } from 'app/store/storeHooks';
|
||||||
|
|
||||||
|
const selector = createSelector(uiSelector, (ui) => {
|
||||||
|
const { shouldPinParametersPanel, shouldShowParametersPanel } = ui;
|
||||||
|
|
||||||
|
return {
|
||||||
|
shouldPinParametersPanel,
|
||||||
|
shouldShowParametersPanel,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
type ParametersPinnedWrapperProps = PropsWithChildren;
|
type ParametersPinnedWrapperProps = PropsWithChildren;
|
||||||
|
|
||||||
const ParametersPinnedWrapper = (props: ParametersPinnedWrapperProps) => {
|
const ParametersPinnedWrapper = (props: ParametersPinnedWrapperProps) => {
|
||||||
|
const { shouldPinParametersPanel, shouldShowParametersPanel } =
|
||||||
|
useAppSelector(selector);
|
||||||
|
|
||||||
|
if (!(shouldPinParametersPanel && shouldShowParametersPanel)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
|
@ -1,43 +1,16 @@
|
|||||||
import { Box, Flex, Portal, TabPanel } from '@chakra-ui/react';
|
import { Box, Flex } from '@chakra-ui/react';
|
||||||
import { memo, useCallback, useRef } from 'react';
|
import { memo, useCallback, useRef } from 'react';
|
||||||
import {
|
import { Panel, PanelGroup } from 'react-resizable-panels';
|
||||||
ImperativePanelHandle,
|
import { useAppDispatch } from 'app/store/storeHooks';
|
||||||
Panel,
|
|
||||||
PanelGroup,
|
|
||||||
} from 'react-resizable-panels';
|
|
||||||
import PinParametersPanelButton from '../../PinParametersPanelButton';
|
|
||||||
import { createSelector } from '@reduxjs/toolkit';
|
|
||||||
import { uiSelector } from 'features/ui/store/uiSelectors';
|
|
||||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
|
||||||
import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale';
|
import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale';
|
||||||
import ResizeHandle from '../ResizeHandle';
|
import ResizeHandle from '../ResizeHandle';
|
||||||
import ImageTabParameters from './ImageTabParameters';
|
import ImageToImageTabParameters from './ImageToImageTabParameters';
|
||||||
import ImageTabImageParameters from './ImageTabImageParameters';
|
import TextToImageTabMain from '../TextToImage/TextToImageTabMain';
|
||||||
import TextTabMain from '../text/TextTabMain';
|
|
||||||
import { PARAMETERS_PANEL_WIDTH } from 'theme/util/constants';
|
|
||||||
import { ImperativePanelGroupHandle } from 'react-resizable-panels';
|
import { ImperativePanelGroupHandle } from 'react-resizable-panels';
|
||||||
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
||||||
import InitialImageDisplay from 'features/parameters/components/Parameters/ImageToImage/InitialImageDisplay';
|
import InitialImageDisplay from 'features/parameters/components/Parameters/ImageToImage/InitialImageDisplay';
|
||||||
|
|
||||||
const selector = createSelector(uiSelector, (ui) => {
|
const ImageToImageTab = () => {
|
||||||
const {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
} = ui;
|
|
||||||
|
|
||||||
return {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const TextTab = () => {
|
|
||||||
const dispatch = useAppDispatch();
|
const dispatch = useAppDispatch();
|
||||||
const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);
|
const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);
|
||||||
|
|
||||||
@ -49,21 +22,11 @@ const TextTab = () => {
|
|||||||
panelGroupRef.current.setLayout([50, 50]);
|
panelGroupRef.current.setLayout([50, 50]);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
} = useAppSelector(selector);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
||||||
{shouldPinParametersPanel && shouldShowParametersPanel && (
|
<ParametersPinnedWrapper>
|
||||||
<ParametersPinnedWrapper>
|
<ImageToImageTabParameters />
|
||||||
<ImageTabParameters />
|
</ParametersPinnedWrapper>
|
||||||
</ParametersPinnedWrapper>
|
|
||||||
)}
|
|
||||||
<Box sx={{ w: 'full', h: 'full' }}>
|
<Box sx={{ w: 'full', h: 'full' }}>
|
||||||
<PanelGroup
|
<PanelGroup
|
||||||
ref={panelGroupRef}
|
ref={panelGroupRef}
|
||||||
@ -90,7 +53,7 @@ const TextTab = () => {
|
|||||||
dispatch(requestCanvasRescale());
|
dispatch(requestCanvasRescale());
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<TextTabMain />
|
<TextToImageTabMain />
|
||||||
</Panel>
|
</Panel>
|
||||||
</PanelGroup>
|
</PanelGroup>
|
||||||
</Box>
|
</Box>
|
||||||
@ -98,4 +61,4 @@ const TextTab = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memo(TextTab);
|
export default memo(ImageToImageTab);
|
@ -24,7 +24,7 @@ const selector = createSelector(
|
|||||||
defaultSelectorOptions
|
defaultSelectorOptions
|
||||||
);
|
);
|
||||||
|
|
||||||
const ImageTabCoreParameters = () => {
|
const ImageToImageTabCoreParameters = () => {
|
||||||
const { shouldUseSliders } = useAppSelector(selector);
|
const { shouldUseSliders } = useAppSelector(selector);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -80,4 +80,4 @@ const ImageTabCoreParameters = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memo(ImageTabCoreParameters);
|
export default memo(ImageToImageTabCoreParameters);
|
@ -7,15 +7,15 @@ import ParamVariationCollapse from 'features/parameters/components/Parameters/Va
|
|||||||
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
||||||
import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse';
|
import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse';
|
||||||
import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse';
|
import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse';
|
||||||
import ImageTabCoreParameters from './ImageTabCoreParameters';
|
import ImageToImageTabCoreParameters from './ImageToImageTabCoreParameters';
|
||||||
|
|
||||||
const ImageTabParameters = () => {
|
const ImageToImageTabParameters = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ParamPositiveConditioning />
|
<ParamPositiveConditioning />
|
||||||
<ParamNegativeConditioning />
|
<ParamNegativeConditioning />
|
||||||
<ProcessButtons />
|
<ProcessButtons />
|
||||||
<ImageTabCoreParameters />
|
<ImageToImageTabCoreParameters />
|
||||||
<ParamSeedCollapse />
|
<ParamSeedCollapse />
|
||||||
<ParamVariationCollapse />
|
<ParamVariationCollapse />
|
||||||
<ParamNoiseCollapse />
|
<ParamNoiseCollapse />
|
||||||
@ -25,4 +25,4 @@ const ImageTabParameters = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memo(ImageTabParameters);
|
export default memo(ImageToImageTabParameters);
|
@ -0,0 +1,18 @@
|
|||||||
|
import { Flex } from '@chakra-ui/react';
|
||||||
|
import { memo } from 'react';
|
||||||
|
import TextToImageTabMain from './TextToImageTabMain';
|
||||||
|
import TextToImageTabParameters from './TextToImageTabParameters';
|
||||||
|
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
||||||
|
|
||||||
|
const TextToImageTab = () => {
|
||||||
|
return (
|
||||||
|
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
||||||
|
<ParametersPinnedWrapper>
|
||||||
|
<TextToImageTabParameters />
|
||||||
|
</ParametersPinnedWrapper>
|
||||||
|
<TextToImageTabMain />
|
||||||
|
</Flex>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default memo(TextToImageTab);
|
@ -22,7 +22,7 @@ const selector = createSelector(
|
|||||||
defaultSelectorOptions
|
defaultSelectorOptions
|
||||||
);
|
);
|
||||||
|
|
||||||
const TextTabCoreParameters = () => {
|
const TextToImageTabCoreParameters = () => {
|
||||||
const { shouldUseSliders } = useAppSelector(selector);
|
const { shouldUseSliders } = useAppSelector(selector);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -74,4 +74,4 @@ const TextTabCoreParameters = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memo(TextTabCoreParameters);
|
export default memo(TextToImageTabCoreParameters);
|
@ -1,7 +1,7 @@
|
|||||||
import { Box, Flex } from '@chakra-ui/react';
|
import { Box, Flex } from '@chakra-ui/react';
|
||||||
import CurrentImageDisplay from 'features/gallery/components/CurrentImageDisplay';
|
import CurrentImageDisplay from 'features/gallery/components/CurrentImageDisplay';
|
||||||
|
|
||||||
const TextTabMain = () => {
|
const TextToImageTabMain = () => {
|
||||||
return (
|
return (
|
||||||
<Box
|
<Box
|
||||||
sx={{
|
sx={{
|
||||||
@ -25,4 +25,4 @@ const TextTabMain = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default TextTabMain;
|
export default TextToImageTabMain;
|
@ -8,15 +8,15 @@ import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/
|
|||||||
import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse';
|
import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse';
|
||||||
import ParamHiresCollapse from 'features/parameters/components/Parameters/Hires/ParamHiresCollapse';
|
import ParamHiresCollapse from 'features/parameters/components/Parameters/Hires/ParamHiresCollapse';
|
||||||
import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse';
|
import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse';
|
||||||
import TextTabCoreParameters from './TextTabCoreParameters';
|
import TextToImageTabCoreParameters from './TextToImageTabCoreParameters';
|
||||||
|
|
||||||
const TextTabParameters = () => {
|
const TextToImageTabParameters = () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<ParamPositiveConditioning />
|
<ParamPositiveConditioning />
|
||||||
<ParamNegativeConditioning />
|
<ParamNegativeConditioning />
|
||||||
<ProcessButtons />
|
<ProcessButtons />
|
||||||
<TextTabCoreParameters />
|
<TextToImageTabCoreParameters />
|
||||||
<ParamSeedCollapse />
|
<ParamSeedCollapse />
|
||||||
<ParamVariationCollapse />
|
<ParamVariationCollapse />
|
||||||
<ParamNoiseCollapse />
|
<ParamNoiseCollapse />
|
||||||
@ -27,4 +27,4 @@ const TextTabParameters = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default memo(TextTabParameters);
|
export default memo(TextToImageTabParameters);
|
@ -1,54 +1,29 @@
|
|||||||
import { Box, Flex, TabPanel } from '@chakra-ui/react';
|
import { Flex } from '@chakra-ui/react';
|
||||||
import { memo } from 'react';
|
import { memo } from 'react';
|
||||||
import { Panel, PanelGroup, PanelResizeHandle } from 'react-resizable-panels';
|
|
||||||
import PinParametersPanelButton from '../../PinParametersPanelButton';
|
|
||||||
import ImageGalleryContent from 'features/gallery/components/ImageGalleryContent';
|
|
||||||
import { createSelector } from '@reduxjs/toolkit';
|
import { createSelector } from '@reduxjs/toolkit';
|
||||||
import { uiSelector } from 'features/ui/store/uiSelectors';
|
import { uiSelector } from 'features/ui/store/uiSelectors';
|
||||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
import { useAppSelector } from 'app/store/storeHooks';
|
||||||
import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale';
|
|
||||||
import UnifiedCanvasContent from './UnifiedCanvasContent';
|
import UnifiedCanvasContent from './UnifiedCanvasContent';
|
||||||
import ResizeHandle from '../ResizeHandle';
|
|
||||||
import UnifiedCanvasParameters from './UnifiedCanvasParameters';
|
import UnifiedCanvasParameters from './UnifiedCanvasParameters';
|
||||||
import UnifiedCanvasContentBeta from './UnifiedCanvasBeta/UnifiedCanvasContentBeta';
|
import UnifiedCanvasContentBeta from './UnifiedCanvasBeta/UnifiedCanvasContentBeta';
|
||||||
import { PARAMETERS_PANEL_WIDTH } from 'theme/util/constants';
|
|
||||||
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
||||||
|
|
||||||
const selector = createSelector(uiSelector, (ui) => {
|
const selector = createSelector(uiSelector, (ui) => {
|
||||||
const {
|
const { shouldUseCanvasBetaLayout } = ui;
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldUseCanvasBetaLayout,
|
|
||||||
} = ui;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldUseCanvasBetaLayout,
|
shouldUseCanvasBetaLayout,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const UnifiedCanvasTab = () => {
|
const UnifiedCanvasTab = () => {
|
||||||
const dispatch = useAppDispatch();
|
const { shouldUseCanvasBetaLayout } = useAppSelector(selector);
|
||||||
const {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldUseCanvasBetaLayout,
|
|
||||||
} = useAppSelector(selector);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
||||||
{shouldPinParametersPanel && shouldShowParametersPanel && (
|
<ParametersPinnedWrapper>
|
||||||
<ParametersPinnedWrapper>
|
<UnifiedCanvasParameters />
|
||||||
<UnifiedCanvasParameters />
|
</ParametersPinnedWrapper>
|
||||||
</ParametersPinnedWrapper>
|
|
||||||
)}
|
|
||||||
{shouldUseCanvasBetaLayout ? (
|
{shouldUseCanvasBetaLayout ? (
|
||||||
<UnifiedCanvasContentBeta />
|
<UnifiedCanvasContentBeta />
|
||||||
) : (
|
) : (
|
||||||
|
@ -1,61 +0,0 @@
|
|||||||
import { Box, Flex } from '@chakra-ui/react';
|
|
||||||
import ProcessButtons from 'features/parameters/components/ProcessButtons/ProcessButtons';
|
|
||||||
import { memo } from 'react';
|
|
||||||
import OverlayScrollable from '../../common/OverlayScrollable';
|
|
||||||
import ParamPositiveConditioning from 'features/parameters/components/Parameters/ParamPositiveConditioning';
|
|
||||||
import ParamNegativeConditioning from 'features/parameters/components/Parameters/ParamNegativeConditioning';
|
|
||||||
import { createSelector } from '@reduxjs/toolkit';
|
|
||||||
import { uiSelector } from 'features/ui/store/uiSelectors';
|
|
||||||
import { useAppSelector } from 'app/store/storeHooks';
|
|
||||||
import { defaultSelectorOptions } from 'app/store/util/defaultMemoizeOptions';
|
|
||||||
import ParamIterations from 'features/parameters/components/Parameters/ParamIterations';
|
|
||||||
import ParamSteps from 'features/parameters/components/Parameters/ParamSteps';
|
|
||||||
import ParamCFGScale from 'features/parameters/components/Parameters/ParamCFGScale';
|
|
||||||
import ParamWidth from 'features/parameters/components/Parameters/ParamWidth';
|
|
||||||
import ParamHeight from 'features/parameters/components/Parameters/ParamHeight';
|
|
||||||
import ParamScheduler from 'features/parameters/components/Parameters/ParamScheduler';
|
|
||||||
import ModelSelect from 'features/system/components/ModelSelect';
|
|
||||||
import ParamSeedCollapse from 'features/parameters/components/Parameters/Seed/ParamSeedCollapse';
|
|
||||||
import ParamVariationCollapse from 'features/parameters/components/Parameters/Variations/ParamVariationCollapse';
|
|
||||||
import ParamNoiseCollapse from 'features/parameters/components/Parameters/Noise/ParamNoiseCollapse';
|
|
||||||
import ParamSymmetryCollapse from 'features/parameters/components/Parameters/Symmetry/ParamSymmetryCollapse';
|
|
||||||
import ParamHiresCollapse from 'features/parameters/components/Parameters/Hires/ParamHiresCollapse';
|
|
||||||
import ParamSeamlessCollapse from 'features/parameters/components/Parameters/Seamless/ParamSeamlessCollapse';
|
|
||||||
import InitialImagePreview from 'features/parameters/components/AdvancedParameters/ImageToImage/InitialImagePreview';
|
|
||||||
import ImageToImageStrength from 'features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageStrength';
|
|
||||||
import ImageToImageFit from 'features/parameters/components/AdvancedParameters/ImageToImage/ImageToImageFit';
|
|
||||||
import InitialImageButtons from 'common/components/ImageToImageButtons';
|
|
||||||
|
|
||||||
const selector = createSelector(
|
|
||||||
uiSelector,
|
|
||||||
(ui) => {
|
|
||||||
const { shouldUseSliders } = ui;
|
|
||||||
|
|
||||||
return { shouldUseSliders };
|
|
||||||
},
|
|
||||||
defaultSelectorOptions
|
|
||||||
);
|
|
||||||
|
|
||||||
const ImageTabParameters = () => {
|
|
||||||
const { shouldUseSliders } = useAppSelector(selector);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<OverlayScrollable>
|
|
||||||
<Flex
|
|
||||||
sx={{
|
|
||||||
gap: 2,
|
|
||||||
flexDirection: 'column',
|
|
||||||
h: 'full',
|
|
||||||
w: 'full',
|
|
||||||
position: 'absolute',
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
<InitialImageButtons />
|
|
||||||
<InitialImagePreview />
|
|
||||||
<ImageToImageFit />
|
|
||||||
</Flex>
|
|
||||||
</OverlayScrollable>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(ImageTabParameters);
|
|
@ -1,55 +0,0 @@
|
|||||||
import { Box, Flex, Portal, TabPanel } from '@chakra-ui/react';
|
|
||||||
import { memo } from 'react';
|
|
||||||
import { Panel, PanelGroup } from 'react-resizable-panels';
|
|
||||||
import PinParametersPanelButton from '../../PinParametersPanelButton';
|
|
||||||
import { createSelector } from '@reduxjs/toolkit';
|
|
||||||
import { uiSelector } from 'features/ui/store/uiSelectors';
|
|
||||||
import { useAppDispatch, useAppSelector } from 'app/store/storeHooks';
|
|
||||||
import { requestCanvasRescale } from 'features/canvas/store/thunks/requestCanvasScale';
|
|
||||||
import TextTabMain from './TextTabMain';
|
|
||||||
import ResizeHandle from '../ResizeHandle';
|
|
||||||
import TextTabParameters from './TextTabParameters';
|
|
||||||
import { PARAMETERS_PANEL_WIDTH } from 'theme/util/constants';
|
|
||||||
import ParametersPinnedWrapper from '../../ParametersPinnedWrapper';
|
|
||||||
|
|
||||||
const selector = createSelector(uiSelector, (ui) => {
|
|
||||||
const {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
} = ui;
|
|
||||||
|
|
||||||
return {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
};
|
|
||||||
});
|
|
||||||
|
|
||||||
const TextTab = () => {
|
|
||||||
const dispatch = useAppDispatch();
|
|
||||||
const {
|
|
||||||
shouldPinGallery,
|
|
||||||
shouldShowGallery,
|
|
||||||
shouldPinParametersPanel,
|
|
||||||
shouldShowParametersPanel,
|
|
||||||
shouldShowImageParameters,
|
|
||||||
} = useAppSelector(selector);
|
|
||||||
|
|
||||||
return (
|
|
||||||
<Flex sx={{ gap: 4, w: 'full', h: 'full' }}>
|
|
||||||
{shouldPinParametersPanel && shouldShowParametersPanel && (
|
|
||||||
<ParametersPinnedWrapper>
|
|
||||||
<TextTabParameters />
|
|
||||||
</ParametersPinnedWrapper>
|
|
||||||
)}
|
|
||||||
<TextTabMain />
|
|
||||||
</Flex>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default memo(TextTab);
|
|
@ -1,6 +1,6 @@
|
|||||||
export const tabMap = [
|
export const tabMap = [
|
||||||
'text',
|
'txt2img',
|
||||||
'image',
|
'img2img',
|
||||||
// 'generate',
|
// 'generate',
|
||||||
'unifiedCanvas',
|
'unifiedCanvas',
|
||||||
'nodes',
|
'nodes',
|
||||||
|
@ -105,11 +105,11 @@ export const uiSlice = createSlice({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
openAccordionItemsChanged: (state, action: PayloadAction<number[]>) => {
|
openAccordionItemsChanged: (state, action: PayloadAction<number[]>) => {
|
||||||
if (tabMap[state.activeTab] === 'text') {
|
if (tabMap[state.activeTab] === 'txt2img') {
|
||||||
state.textTabAccordionState = action.payload;
|
state.textTabAccordionState = action.payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tabMap[state.activeTab] === 'image') {
|
if (tabMap[state.activeTab] === 'img2img') {
|
||||||
state.imageTabAccordionState = action.payload;
|
state.imageTabAccordionState = action.payload;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user