import type { SystemStyleObject } from '@invoke-ai/ui-library'; import { ButtonGroup, Flex, Icon, IconButton, Portal, spinAnimation } from '@invoke-ai/ui-library'; import CancelCurrentQueueItemIconButton from 'features/queue/components/CancelCurrentQueueItemIconButton'; import { useClearQueue } from 'features/queue/components/ClearQueueConfirmationAlertDialog'; import { QueueButtonTooltip } from 'features/queue/components/QueueButtonTooltip'; import { useQueueBack } from 'features/queue/hooks/useQueueBack'; import type { UsePanelReturn } from 'features/ui/hooks/usePanel'; import { memo, useMemo } from 'react'; import { useTranslation } from 'react-i18next'; import { PiCircleNotchBold, PiSlidersHorizontalBold, PiTrashSimpleBold } from 'react-icons/pi'; import { RiSparklingFill } from 'react-icons/ri'; import { useGetQueueStatusQuery } from 'services/api/endpoints/queue'; const floatingButtonStyles: SystemStyleObject = { borderStartRadius: 0, flexGrow: 1, }; type Props = { panelApi: UsePanelReturn; }; const FloatingSidePanelButtons = (props: Props) => { const { t } = useTranslation(); const { queueBack, isLoading, isDisabled } = useQueueBack(); const clearQueue = useClearQueue(); const { data: queueStatus } = useGetQueueStatusQuery(); const queueButtonIcon = useMemo(() => { const isProcessing = (queueStatus?.queue.in_progress ?? 0) > 0; if (!isDisabled && isProcessing) { return ; } return ; }, [isDisabled, queueStatus]); if (!props.panelApi.isCollapsed) { return null; } return ( } /> } colorScheme="error" onClick={clearQueue.openDialog} data-testid={t('queue.clear')} sx={floatingButtonStyles} /> ); }; export default memo(FloatingSidePanelButtons);