Tweak new tab button: larger icon, foreground hover, more padding
This commit is contained in:
@@ -16,7 +16,6 @@ import {
|
|||||||
Copy,
|
Copy,
|
||||||
Plus,
|
Plus,
|
||||||
Rows2,
|
Rows2,
|
||||||
SquarePen,
|
|
||||||
SquareTerminal,
|
SquareTerminal,
|
||||||
X,
|
X,
|
||||||
} from "lucide-react-native";
|
} from "lucide-react-native";
|
||||||
@@ -70,7 +69,8 @@ type WorkspaceDesktopTabsRowProps = {
|
|||||||
onCloseTabsToLeft: (tabId: string) => Promise<void> | void;
|
onCloseTabsToLeft: (tabId: string) => Promise<void> | void;
|
||||||
onCloseTabsToRight: (tabId: string) => Promise<void> | void;
|
onCloseTabsToRight: (tabId: string) => Promise<void> | void;
|
||||||
onCloseOtherTabs: (tabId: string) => Promise<void> | void;
|
onCloseOtherTabs: (tabId: string) => Promise<void> | void;
|
||||||
onCreateLauncherTab: (input: { paneId?: string }) => void;
|
onCreateDraftTab: (input: { paneId?: string }) => void;
|
||||||
|
onCreateTerminalTab: (input: { paneId?: string }) => void;
|
||||||
onReorderTabs: (nextTabs: WorkspaceTabDescriptor[]) => void;
|
onReorderTabs: (nextTabs: WorkspaceTabDescriptor[]) => void;
|
||||||
onSplitRight: () => void;
|
onSplitRight: () => void;
|
||||||
onSplitDown: () => void;
|
onSplitDown: () => void;
|
||||||
@@ -81,9 +81,6 @@ type WorkspaceDesktopTabsRowProps = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
function getFallbackTabLabel(tab: WorkspaceTabDescriptor): string {
|
function getFallbackTabLabel(tab: WorkspaceTabDescriptor): string {
|
||||||
if (tab.target.kind === "launcher") {
|
|
||||||
return "New Tab";
|
|
||||||
}
|
|
||||||
if (tab.target.kind === "draft") {
|
if (tab.target.kind === "draft") {
|
||||||
return "New Agent";
|
return "New Agent";
|
||||||
}
|
}
|
||||||
@@ -338,7 +335,8 @@ export function WorkspaceDesktopTabsRow({
|
|||||||
onCloseTabsToLeft,
|
onCloseTabsToLeft,
|
||||||
onCloseTabsToRight,
|
onCloseTabsToRight,
|
||||||
onCloseOtherTabs,
|
onCloseOtherTabs,
|
||||||
onCreateLauncherTab,
|
onCreateDraftTab,
|
||||||
|
onCreateTerminalTab,
|
||||||
onReorderTabs,
|
onReorderTabs,
|
||||||
onSplitRight,
|
onSplitRight,
|
||||||
onSplitDown,
|
onSplitDown,
|
||||||
@@ -349,6 +347,7 @@ export function WorkspaceDesktopTabsRow({
|
|||||||
}: WorkspaceDesktopTabsRowProps) {
|
}: WorkspaceDesktopTabsRowProps) {
|
||||||
const { theme } = useUnistyles();
|
const { theme } = useUnistyles();
|
||||||
const newTabKeys = useShortcutKeys("workspace-tab-new");
|
const newTabKeys = useShortcutKeys("workspace-tab-new");
|
||||||
|
const newTerminalKeys = useShortcutKeys("workspace-terminal-new");
|
||||||
const splitRightKeys = useShortcutKeys("workspace-pane-split-right");
|
const splitRightKeys = useShortcutKeys("workspace-pane-split-right");
|
||||||
const splitDownKeys = useShortcutKeys("workspace-pane-split-down");
|
const splitDownKeys = useShortcutKeys("workspace-pane-split-down");
|
||||||
const [tabsContainerWidth, setTabsContainerWidth] = useState<number>(0);
|
const [tabsContainerWidth, setTabsContainerWidth] = useState<number>(0);
|
||||||
@@ -471,20 +470,24 @@ export function WorkspaceDesktopTabsRow({
|
|||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</ScrollView>
|
|
||||||
<View style={styles.tabsActions} onLayout={handleTabsActionsLayout}>
|
|
||||||
<Tooltip delayDuration={0} enabledOnDesktop enabledOnMobile={false}>
|
<Tooltip delayDuration={0} enabledOnDesktop enabledOnMobile={false}>
|
||||||
<TooltipTrigger
|
<TooltipTrigger asChild>
|
||||||
testID="workspace-new-tab"
|
<Pressable
|
||||||
onPress={() => onCreateLauncherTab({ paneId })}
|
testID="workspace-new-tab"
|
||||||
accessibilityRole="button"
|
onPress={() => onCreateDraftTab({ paneId })}
|
||||||
accessibilityLabel="New tab"
|
accessibilityRole="button"
|
||||||
style={({ hovered, pressed }) => [
|
accessibilityLabel="New tab"
|
||||||
styles.newTabActionButton,
|
style={styles.inlineNewTabButton}
|
||||||
(hovered || pressed) && styles.newTabActionButtonHovered,
|
>
|
||||||
]}
|
{({ hovered, pressed }) => (
|
||||||
>
|
<Plus
|
||||||
<Plus size={theme.iconSize.sm} color={theme.colors.foregroundMuted} />
|
size={theme.iconSize.md}
|
||||||
|
color={
|
||||||
|
hovered || pressed ? theme.colors.foreground : theme.colors.foregroundMuted
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
</Pressable>
|
||||||
</TooltipTrigger>
|
</TooltipTrigger>
|
||||||
<TooltipContent side="bottom" align="center" offset={8}>
|
<TooltipContent side="bottom" align="center" offset={8}>
|
||||||
<View style={styles.newTabTooltipRow}>
|
<View style={styles.newTabTooltipRow}>
|
||||||
@@ -495,6 +498,30 @@ export function WorkspaceDesktopTabsRow({
|
|||||||
</View>
|
</View>
|
||||||
</TooltipContent>
|
</TooltipContent>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
|
</ScrollView>
|
||||||
|
<View style={styles.tabsActions} onLayout={handleTabsActionsLayout}>
|
||||||
|
<Tooltip delayDuration={0} enabledOnDesktop enabledOnMobile={false}>
|
||||||
|
<TooltipTrigger
|
||||||
|
testID="workspace-new-terminal"
|
||||||
|
onPress={() => onCreateTerminalTab({ paneId })}
|
||||||
|
accessibilityRole="button"
|
||||||
|
accessibilityLabel="New terminal"
|
||||||
|
style={({ hovered, pressed }) => [
|
||||||
|
styles.newTabActionButton,
|
||||||
|
(hovered || pressed) && styles.newTabActionButtonHovered,
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<SquareTerminal size={theme.iconSize.sm} color={theme.colors.foregroundMuted} />
|
||||||
|
</TooltipTrigger>
|
||||||
|
<TooltipContent side="bottom" align="center" offset={8}>
|
||||||
|
<View style={styles.newTabTooltipRow}>
|
||||||
|
<Text style={styles.newTabTooltipText}>New terminal</Text>
|
||||||
|
{newTerminalKeys ? (
|
||||||
|
<Shortcut chord={newTerminalKeys} style={styles.newTabTooltipShortcut} />
|
||||||
|
) : null}
|
||||||
|
</View>
|
||||||
|
</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
{showPaneSplitActions ? (
|
{showPaneSplitActions ? (
|
||||||
<>
|
<>
|
||||||
<Tooltip delayDuration={0} enabledOnDesktop enabledOnMobile={false}>
|
<Tooltip delayDuration={0} enabledOnDesktop enabledOnMobile={false}>
|
||||||
@@ -785,6 +812,13 @@ const styles = StyleSheet.create((theme) => ({
|
|||||||
tabCloseButtonActive: {
|
tabCloseButtonActive: {
|
||||||
backgroundColor: theme.colors.surface3,
|
backgroundColor: theme.colors.surface3,
|
||||||
},
|
},
|
||||||
|
inlineNewTabButton: {
|
||||||
|
paddingHorizontal: theme.spacing[3],
|
||||||
|
height: "100%",
|
||||||
|
alignItems: "center",
|
||||||
|
justifyContent: "center",
|
||||||
|
borderRadius: 0,
|
||||||
|
},
|
||||||
newTabActionButton: {
|
newTabActionButton: {
|
||||||
width: 22,
|
width: 22,
|
||||||
height: 22,
|
height: 22,
|
||||||
|
|||||||
Reference in New Issue
Block a user