Skip to content

Commit 5332eaf

Browse files
fix(ui): floating button tooltip orientations
1 parent 80316b0 commit 5332eaf

File tree

11 files changed

+114
-102
lines changed

11 files changed

+114
-102
lines changed

invokeai/frontend/web/public/locales/en.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
"previousImage": "Previous Image",
1111
"reset": "Reset",
1212
"resetUI": "$t(accessibility.reset) UI",
13-
"showGalleryPanel": "Show Gallery Panel",
14-
"showOptionsPanel": "Show Side Panel",
13+
"toggleRightPanel": "Toggle Right Panel (T)",
14+
"toggleLeftPanel": "Toggle Left Panel (G)",
1515
"uploadImage": "Upload Image"
1616
},
1717
"boards": {

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolBboxButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolBboxButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.bbox')} (C)`}
26-
tooltip={`${t('controlLayers.tool.bbox')} (C)`}
27-
icon={<PiBoundingBoxBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectBbox}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.bbox')} (C)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.bbox')} (C)`}
27+
icon={<PiBoundingBoxBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectBbox}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolBrushButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolBrushButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.brush')} (B)`}
26-
tooltip={`${t('controlLayers.tool.brush')} (B)`}
27-
icon={<PiPaintBrushBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectBrush}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.brush')} (B)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.brush')} (B)`}
27+
icon={<PiPaintBrushBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectBrush}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolColorPickerButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolColorPickerButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.colorPicker')} (I)`}
26-
tooltip={`${t('controlLayers.tool.colorPicker')} (I)`}
27-
icon={<PiEyedropperBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectColorPicker}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.colorPicker')} (I)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.colorPicker')} (I)`}
27+
icon={<PiEyedropperBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectColorPicker}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolEraserButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolEraserButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.eraser')} (E)`}
26-
tooltip={`${t('controlLayers.tool.eraser')} (E)`}
27-
icon={<PiEraserBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectEraser}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.eraser')} (E)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.eraser')} (E)`}
27+
icon={<PiEraserBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectEraser}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolMoveButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolMoveButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.move')} (V)`}
26-
tooltip={`${t('controlLayers.tool.move')} (V)`}
27-
icon={<PiCursorBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectMove}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.move')} (V)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.move')} (V)`}
27+
icon={<PiCursorBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectMove}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolRectButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolRectButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.rectangle')} (U)`}
26-
tooltip={`${t('controlLayers.tool.rectangle')} (U)`}
27-
icon={<PiRectangleBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectRect}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.rectangle')} (U)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.rectangle')} (U)`}
27+
icon={<PiRectangleBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectRect}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/controlLayers/components/Tool/ToolViewButton.tsx

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { IconButton } from '@invoke-ai/ui-library';
1+
import { IconButton, Tooltip } from '@invoke-ai/ui-library';
22
import { useSelectTool, useToolIsSelected } from 'features/controlLayers/components/Tool/hooks';
33
import { useImageViewer } from 'features/gallery/components/ImageViewer/useImageViewer';
44
import { useRegisteredHotkeys } from 'features/system/components/HotkeysModal/useHotkeyData';
@@ -21,14 +21,15 @@ export const ToolViewButton = memo(() => {
2121
});
2222

2323
return (
24-
<IconButton
25-
aria-label={`${t('controlLayers.tool.view')} (H)`}
26-
tooltip={`${t('controlLayers.tool.view')} (H)`}
27-
icon={<PiHandBold />}
28-
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29-
variant="solid"
30-
onClick={selectView}
31-
/>
24+
<Tooltip label={`${t('controlLayers.tool.view')} (H)`} placement="end">
25+
<IconButton
26+
aria-label={`${t('controlLayers.tool.view')} (H)`}
27+
icon={<PiHandBold />}
28+
colorScheme={isSelected ? 'invokeBlue' : 'base'}
29+
variant="solid"
30+
onClick={selectView}
31+
/>
32+
</Tooltip>
3233
);
3334
});
3435

invokeai/frontend/web/src/features/queue/components/QueueButtonTooltip.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import type { TooltipProps} from '@invoke-ai/ui-library';
12
import { Divider, Flex, ListItem, Text, Tooltip, UnorderedList } from '@invoke-ai/ui-library';
23
import { createSelector } from '@reduxjs/toolkit';
34
import { useAppSelector } from 'app/store/storeHooks';
@@ -20,19 +21,19 @@ const selectPromptsCount = createSelector(selectParamsSlice, selectDynamicPrompt
2021
getShouldProcessPrompt(params.positivePrompt) ? dynamicPrompts.prompts.length : 1
2122
);
2223

23-
type Props = {
24+
type Props = TooltipProps & {
2425
prepend?: boolean;
2526
};
2627

27-
export const QueueButtonTooltip = (props: PropsWithChildren<Props>) => {
28+
export const QueueButtonTooltip = ({ prepend, children, ...rest }: PropsWithChildren<Props>) => {
2829
return (
29-
<Tooltip label={<TooltipContent prepend={props.prepend} />} maxW={512}>
30-
{props.children}
30+
<Tooltip label={<TooltipContent prepend={prepend} />} maxW={512} {...rest}>
31+
{children}
3132
</Tooltip>
3233
);
3334
};
3435

35-
const TooltipContent = memo(({ prepend = false }: Props) => {
36+
const TooltipContent = memo(({ prepend = false }: { prepend?: boolean }) => {
3637
const { t } = useTranslation();
3738
const { isReady, reasons } = useIsReadyToEnqueue();
3839
const sendToCanvas = useAppSelector(selectSendToCanvas);

invokeai/frontend/web/src/features/ui/components/FloatingGalleryButton.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ const FloatingGalleryButton = (props: Props) => {
1313

1414
return (
1515
<Flex pos="absolute" transform="translate(0, -50%)" minW={8} top="50%" insetInlineEnd={2}>
16-
<Tooltip label={t('accessibility.showGalleryPanel')} placement="start">
16+
<Tooltip label={t('accessibility.toggleRightPanel')} placement="start">
1717
<IconButton
18-
aria-label={t('accessibility.showGalleryPanel')}
18+
aria-label={t('accessibility.toggleRightPanel')}
1919
onClick={props.panelApi.toggle}
2020
icon={<PiImagesSquareBold />}
2121
h={48}

0 commit comments

Comments
 (0)