From fcaeba290eb95562158dc99a86945a84accc7d59 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Thu, 19 Jun 2025 19:28:45 +1000 Subject: [PATCH] feat(ui): canvas launchpad --- .../AdvancedSession/AdvancedSession.tsx | 2 +- .../SimpleSession/CanvasLaunchpadPanel.tsx | 36 +++++++++++++++++++ ...alState.tsx => GenerateLaunchpadPanel.tsx} | 11 +++--- ...nce.tsx => LaunchpadAddStyleReference.tsx} | 10 +++--- ...ButtonGridItem.tsx => LaunchpadButton.tsx} | 4 +-- ...eCard.tsx => LaunchpadEditImageButton.tsx} | 18 +++++----- ...sx => LaunchpadGenerateFromTextButton.tsx} | 10 +++--- ...tsx => LaunchpadUseALayoutImageButton.tsx} | 19 +++++----- .../SimpleSession/SimpleSession.tsx | 2 +- .../Toolbar/CanvasToolbarResetViewButton.tsx | 4 +-- .../src/features/ui/layouts/AutoLayout.tsx | 5 +-- .../ui/layouts/canvas-tab-auto-layout.tsx | 2 +- .../web/src/features/ui/layouts/components.ts | 2 +- .../ui/layouts/generate-tab-auto-layout.tsx | 2 +- 14 files changed, 85 insertions(+), 42 deletions(-) create mode 100644 invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/CanvasLaunchpadPanel.tsx rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialState.tsx => GenerateLaunchpadPanel.tsx} (81%) rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialStateAddAStyleReference.tsx => LaunchpadAddStyleReference.tsx} (82%) rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialStateButtonGridItem.tsx => LaunchpadButton.tsx} (82%) rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialStateEditImageCard.tsx => LaunchpadEditImageButton.tsx} (69%) rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialStateGenerateFromText.tsx => LaunchpadGenerateFromTextButton.tsx} (66%) rename invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/{InitialStateUseALayoutImageCard.tsx => LaunchpadUseALayoutImageButton.tsx} (70%) diff --git a/invokeai/frontend/web/src/features/controlLayers/components/AdvancedSession/AdvancedSession.tsx b/invokeai/frontend/web/src/features/controlLayers/components/AdvancedSession/AdvancedSession.tsx index fd21523c73..bed3ef2bb6 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/AdvancedSession/AdvancedSession.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/AdvancedSession/AdvancedSession.tsx @@ -26,7 +26,7 @@ import { CanvasHUD } from 'features/controlLayers/components/HUD/CanvasHUD'; import { InvokeCanvasComponent } from 'features/controlLayers/components/InvokeCanvasComponent'; import { SelectObject } from 'features/controlLayers/components/SelectObject/SelectObject'; import { CanvasSessionContextProvider } from 'features/controlLayers/components/SimpleSession/context'; -import { GenerateLaunchpadPanel } from 'features/controlLayers/components/SimpleSession/InitialState'; +import { GenerateLaunchpadPanel } from 'features/controlLayers/components/SimpleSession/GenerateLaunchpadPanel'; import { StagingAreaItemsList } from 'features/controlLayers/components/SimpleSession/StagingAreaItemsList'; import { StagingAreaToolbar } from 'features/controlLayers/components/StagingArea/StagingAreaToolbar'; import { CanvasToolbar } from 'features/controlLayers/components/Toolbar/CanvasToolbar'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/CanvasLaunchpadPanel.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/CanvasLaunchpadPanel.tsx new file mode 100644 index 0000000000..4e628e6f46 --- /dev/null +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/CanvasLaunchpadPanel.tsx @@ -0,0 +1,36 @@ +import { Button, Flex, Grid, Heading, Text } from '@invoke-ai/ui-library'; +import { memo } from 'react'; + +import { InitialStateMainModelPicker } from './InitialStateMainModelPicker'; +import { LaunchpadAddStyleReference } from './LaunchpadAddStyleReference'; +import { LaunchpadEditImageButton } from './LaunchpadEditImageButton'; +import { LaunchpadGenerateFromTextButton } from './LaunchpadGenerateFromTextButton'; +import { LaunchpadUseALayoutImageButton } from './LaunchpadUseALayoutImageButton'; + +export const CanvasLaunchpadPanel = memo(() => { + return ( + + + Get started with Invoke. + + + + + + Want to learn what prompts work best for each model?{' '} + + + + + + + + + + + + ); +}); +CanvasLaunchpadPanel.displayName = 'CanvasLaunchpadPanel'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/GenerateLaunchpadPanel.tsx similarity index 81% rename from invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx rename to invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/GenerateLaunchpadPanel.tsx index 16c6510417..3999f0580f 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialState.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/GenerateLaunchpadPanel.tsx @@ -1,11 +1,12 @@ import { Alert, Button, Flex, Grid, Heading, Text } from '@invoke-ai/ui-library'; import { useAppDispatch } from 'app/store/storeHooks'; -import { InitialStateAddAStyleReference } from 'features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference'; -import { InitialStateGenerateFromText } from 'features/controlLayers/components/SimpleSession/InitialStateGenerateFromText'; import { InitialStateMainModelPicker } from 'features/controlLayers/components/SimpleSession/InitialStateMainModelPicker'; +import { LaunchpadAddStyleReference } from 'features/controlLayers/components/SimpleSession/LaunchpadAddStyleReference'; import { setActiveTab } from 'features/ui/store/uiSlice'; import { memo, useCallback } from 'react'; +import { LaunchpadGenerateFromTextButton } from './LaunchpadGenerateFromTextButton'; + export const GenerateLaunchpadPanel = memo(() => { const dispatch = useAppDispatch(); const newCanvasSession = useCallback(() => { @@ -28,8 +29,8 @@ export const GenerateLaunchpadPanel = memo(() => { - - + + Looking to get more control, edit, and iterate on your images? @@ -43,4 +44,4 @@ export const GenerateLaunchpadPanel = memo(() => { ); }); -GenerateLaunchpadPanel.displayName = 'InitialState'; +GenerateLaunchpadPanel.displayName = 'GenerateLaunchpad'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadAddStyleReference.tsx similarity index 82% rename from invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx rename to invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadAddStyleReference.tsx index 9a1c53a0a4..b4dfcff423 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateAddAStyleReference.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadAddStyleReference.tsx @@ -1,7 +1,7 @@ import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; -import { InitialStateButtonGridItem } from 'features/controlLayers/components/SimpleSession/InitialStateButtonGridItem'; +import { LaunchpadButton } from 'features/controlLayers/components/SimpleSession/LaunchpadButton'; import { getDefaultRefImageConfig } from 'features/controlLayers/hooks/addLayerHooks'; import { refImageAdded } from 'features/controlLayers/store/refImagesSlice'; import { imageDTOToImageWithDims } from 'features/controlLayers/store/util'; @@ -13,7 +13,7 @@ import type { ImageDTO } from 'services/api/types'; const dndTargetData = addGlobalReferenceImageDndTarget.getData(); -export const InitialStateAddAStyleReference = memo(() => { +export const LaunchpadAddStyleReference = memo(() => { const { dispatch, getState } = useAppStore(); const uploadOptions = useMemo( @@ -32,7 +32,7 @@ export const InitialStateAddAStyleReference = memo(() => { const uploadApi = useImageUploadButton(uploadOptions); return ( - + Add a Style Reference @@ -43,7 +43,7 @@ export const InitialStateAddAStyleReference = memo(() => { - + ); }); -InitialStateAddAStyleReference.displayName = 'InitialStateAddAStyleReference'; +LaunchpadAddStyleReference.displayName = 'LaunchpadAddStyleReference'; diff --git a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadButton.tsx similarity index 82% rename from invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx rename to invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadButton.tsx index c7b85239d9..150fada4e6 100644 --- a/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/InitialStateButtonGridItem.tsx +++ b/invokeai/frontend/web/src/features/controlLayers/components/SimpleSession/LaunchpadButton.tsx @@ -2,7 +2,7 @@ import type { ButtonProps } from '@invoke-ai/ui-library'; import { Button, forwardRef } from '@invoke-ai/ui-library'; import { memo } from 'react'; -export const InitialStateButtonGridItem = memo( +export const LaunchpadButton = memo( forwardRef(({ children, ...rest }: ButtonProps, ref) => { return (