import { Flex, Heading, Icon, Text } from '@invoke-ai/ui-library'; import { useAppStore } from 'app/store/nanostores/store'; import { useImageUploadButton } from 'common/hooks/useImageUploadButton'; 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'; import { addGlobalReferenceImageDndTarget, newCanvasFromImageDndTarget } from 'features/dnd/dnd'; import { DndDropTarget } from 'features/dnd/DndDropTarget'; import { memo, useMemo } from 'react'; import { PiUploadBold, PiUserCircleGearBold } from 'react-icons/pi'; import type { ImageDTO } from 'services/api/types'; const dndTargetData = addGlobalReferenceImageDndTarget.getData(); export const LaunchpadAddStyleReference = memo((props: { extraAction?: () => void }) => { const { dispatch, getState } = useAppStore(); const uploadOptions = useMemo( () => ({ onUpload: (imageDTO: ImageDTO) => { const config = getDefaultRefImageConfig(getState); config.image = imageDTOToImageWithDims(imageDTO); dispatch(refImageAdded({ overrides: { config } })); props.extraAction?.(); }, allowMultiple: false, }) as const, [dispatch, getState, props] ); const uploadApi = useImageUploadButton(uploadOptions); return ( Add a Style Reference Add an image to transfer its look. ); }); LaunchpadAddStyleReference.displayName = 'LaunchpadAddStyleReference';