From a5e5cbd7c3687b04ac2060c336b4435477ff7b89 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Wed, 11 Jun 2025 12:47:46 +1000 Subject: [PATCH] feat(ui): simple session initial state cards are buttons --- .../components/SimpleSession/InitialState.tsx | 17 +++-------- .../InitialStateAddAStyleReference.tsx | 15 ++++++---- .../InitialStateButtonGridItem.tsx | 28 +++++++++++++++++++ .../InitialStateCardGridItem.tsx | 24 ---------------- .../InitialStateEditImageCard.tsx | 15 ++++++---- .../InitialStateGenerateFromText.tsx | 17 ++++------- .../InitialStateUseALayoutImageCard.tsx | 15 ++++++---- 7 files changed, 65 insertions(+), 66 deletions(-) create mode 100644 invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx delete mode 100644 invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateCardGridItem.tsx diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx index 25bace52b6..2e8cf7a29b 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx @@ -3,7 +3,6 @@ import { Button, Divider, Flex, Grid, Heading, Text } from '@invoke-ai/ui-library'; import { useAppDispatch } from 'app/store/storeHooks'; import { InitialStateAddAStyleReference } from 'features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference'; -import { InitialStateCardGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateCardGridItem'; import { InitialStateEditImageCard } from 'features/controlLayers/components/SimpleSession/InitialStateEditImageCard'; import { InitialStateGenerateFromText } from 'features/controlLayers/components/SimpleSession/InitialStateGenerateFromText'; import { InitialStateUseALayoutImageCard } from 'features/controlLayers/components/SimpleSession/InitialStateUseALayoutImageCard'; @@ -29,18 +28,10 @@ export const InitialState = memo(() => { - - - - - - - - - - - - + + + + diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx index f41ad61ffa..0b97e5637e 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx @@ -2,12 +2,13 @@ import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; -import { UploadImageIconButton } from 'common/hooks/useImageUploadButton'; +import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; +import { InitialStateButtonGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateButtonGridItem'; import { newCanvasFromImageDndTarget } from 'features/dnd/dnd'; import { DndDropTarget } from 'features/dnd/DndDropTarget'; import { newCanvasFromImage } from 'features/imageActions/actions'; import { memo, useCallback } from 'react'; -import { PiUserCircleGearBold } from 'react-icons/pi'; +import { PiUploadBold, PiUserCircleGearBold } from 'react-icons/pi'; import type { ImageDTO } from 'services/api/types'; const NEW_CANVAS_OPTIONS = { type: 'reference_image' } as const; @@ -23,17 +24,19 @@ export const InitialStateAddAStyleReference = memo(() => { }, [dispatch, getState] ); + const uploadApi = useImageUploadButton({ allowMultiple: false, onUpload }); return ( - <> + Add a Style Reference Add an image to transfer its look. - - + + + - + ); }); InitialStateAddAStyleReference.displayName = 'InitialStateAddAStyleReference'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx new file mode 100644 index 0000000000..4861e4f475 --- /dev/null +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx @@ -0,0 +1,28 @@ +import type { GridItemProps } from '@invoke-ai/ui-library'; +import { Button, GridItem } from '@invoke-ai/ui-library'; +import { memo } from 'react'; + +export const InitialStateButtonGridItem = memo(({ children, ...rest }: GridItemProps) => { + return ( + + {children} + + ); +}); + +InitialStateButtonGridItem.displayName = 'InitialStateButtonGridItem'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateCardGridItem.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateCardGridItem.tsx deleted file mode 100644 index 708b005db1..0000000000 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateCardGridItem.tsx +++ /dev/null @@ -1,24 +0,0 @@ -import { GridItem } from '@invoke-ai/ui-library'; -import { memo, type PropsWithChildren } from 'react'; - -export const InitialStateCardGridItem = memo((props: PropsWithChildren) => { - return ( - - {props.children} - - ); -}); - -InitialStateCardGridItem.displayName = 'InitialStateCardGridItem'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateEditImageCard.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateEditImageCard.tsx index d0c7d0032c..b6448f41d0 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateEditImageCard.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateEditImageCard.tsx @@ -2,12 +2,13 @@ import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; -import { UploadImageIconButton } from 'common/hooks/useImageUploadButton'; +import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; +import { InitialStateButtonGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateButtonGridItem'; import { newCanvasFromImageDndTarget } from 'features/dnd/dnd'; import { DndDropTarget } from 'features/dnd/DndDropTarget'; import { newCanvasFromImage } from 'features/imageActions/actions'; import { memo, useCallback } from 'react'; -import { PiPencilBold } from 'react-icons/pi'; +import { PiPencilBold, PiUploadBold } from 'react-icons/pi'; import type { ImageDTO } from 'services/api/types'; const NEW_CANVAS_OPTIONS = { type: 'raster_layer', withInpaintMask: true } as const; @@ -23,17 +24,19 @@ export const InitialStateEditImageCard = memo(() => { }, [dispatch, getState] ); + const uploadApi = useImageUploadButton({ allowMultiple: false, onUpload }); return ( - <> + Edit Image Add an image to refine. - - + + + - + ); }); InitialStateEditImageCard.displayName = 'InitialStateEditImageCard'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateGenerateFromText.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateGenerateFromText.tsx index 6d4fa5a2cf..67048c383f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateGenerateFromText.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateGenerateFromText.tsx @@ -1,6 +1,7 @@ /* eslint-disable i18next/no-literal-string */ -import { Flex, Heading, Icon, IconButton, Text } from '@invoke-ai/ui-library'; +import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; +import { InitialStateButtonGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateButtonGridItem'; import { memo } from 'react'; import { PiCursorTextBold, PiTextAaBold } from 'react-icons/pi'; @@ -14,20 +15,14 @@ const focusOnPrompt = () => { export const InitialStateGenerateFromText = memo(() => { return ( - <> + Generate from Text Enter a prompt and Invoke. - - } - variant="link" - h={8} - /> + + - + ); }); InitialStateGenerateFromText.displayName = 'InitialStateGenerateFromText'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateUseALayoutImageCard.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateUseALayoutImageCard.tsx index 54d2ef6f75..955ace441f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateUseALayoutImageCard.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateUseALayoutImageCard.tsx @@ -2,12 +2,13 @@ import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; -import { UploadImageIconButton } from 'common/hooks/useImageUploadButton'; +import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; +import { InitialStateButtonGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateButtonGridItem'; import { newCanvasFromImageDndTarget } from 'features/dnd/dnd'; import { DndDropTarget } from 'features/dnd/DndDropTarget'; import { newCanvasFromImage } from 'features/imageActions/actions'; import { memo, useCallback } from 'react'; -import { PiRectangleDashedBold } from 'react-icons/pi'; +import { PiRectangleDashedBold, PiUploadBold } from 'react-icons/pi'; import type { ImageDTO } from 'services/api/types'; const NEW_CANVAS_OPTIONS = { type: 'control_layer', withResize: true } as const; @@ -23,17 +24,19 @@ export const InitialStateUseALayoutImageCard = memo(() => { }, [dispatch, getState] ); + const uploadApi = useImageUploadButton({ allowMultiple: false, onUpload }); return ( - <> + Use a Layout Image Add an image to control composition. - - + + + - + ); }); InitialStateUseALayoutImageCard.displayName = 'InitialStateUseALayoutImageCard';