272b007f8c
The strip could only be hidden by an undiscoverable double-tap, and once hidden the zone had no chrome left to click — no tab, no ✕, no menu holding "Show". This puts it on the same footing as the status bar, whose hide has never stranded anyone: ⌥⌘T, a ⌘K row, the shell context menu, and the zone menu, which now prints the keystroke on the row that takes the strip away so the way back is stated at the moment it matters. All four resolve their target zone the same way the other tab verbs do (hovered, else focused, else the workspace) and describe themselves from what is on screen rather than from a stored value, so "toggle" always means the opposite of what the user is looking at. Adds an app-wide default alongside it, in Appearance next to Session List Density — auto, always, or never, matching VS Code's `workbench.editor.showTabs` and Zed's `tab_bar.show` for people who want one answer everywhere instead of a per-zone choice they repeat. A zone that has stated its own preference still wins, and neither value can strand a pane.
278 lines
5.6 KiB
TypeScript
278 lines
5.6 KiB
TypeScript
import {
|
|
IconActivity as Activity,
|
|
IconAlertCircle as AlertCircle,
|
|
IconAlertTriangle as AlertTriangle,
|
|
IconAppWindow as AppWindow,
|
|
IconArchive as Archive,
|
|
IconArchiveOff as ArchiveOff,
|
|
IconArrowUp as ArrowUp,
|
|
IconArrowUpRight as ArrowUpRight,
|
|
IconAt as AtSign,
|
|
IconWaveSine as AudioLines,
|
|
IconChartBar as BarChart3,
|
|
IconBell as Bell,
|
|
IconBookmark as Bookmark,
|
|
IconBookmarkFilled as BookmarkFilled,
|
|
IconBox as Box,
|
|
IconBrain as Brain,
|
|
IconBug as Bug,
|
|
IconCheck as Check,
|
|
IconCircleCheck as CheckCircle2,
|
|
IconCheck as CheckIcon,
|
|
IconChevronDown as ChevronDown,
|
|
IconChevronDown as ChevronDownIcon,
|
|
IconChevronLeft as ChevronLeft,
|
|
IconChevronLeft as ChevronLeftIcon,
|
|
IconChevronRight as ChevronRight,
|
|
IconChevronRight as ChevronRightIcon,
|
|
IconCircle as CircleIcon,
|
|
IconCircleLetterA as CircleLetterA,
|
|
IconClipboard as Clipboard,
|
|
IconClock as Clock,
|
|
IconCloud as Cloud,
|
|
IconCommand as Command,
|
|
IconCopy as Copy,
|
|
IconCopy as CopyIcon,
|
|
IconCornerDownLeft as CornerDownLeft,
|
|
IconCpu as Cpu,
|
|
IconCreditCard as CreditCard,
|
|
IconDownload as Download,
|
|
IconEar as Ear,
|
|
IconEarOff as EarOff,
|
|
IconEgg as Egg,
|
|
IconExternalLink as ExternalLink,
|
|
IconEye as Eye,
|
|
IconEyeOff as EyeOff,
|
|
IconPhoto as FileImage,
|
|
IconFileText as FileText,
|
|
IconFolderOpen as FolderOpen,
|
|
IconGitBranch as GitBranch,
|
|
IconGitBranch as GitBranchIcon,
|
|
IconGitFork as GitFork,
|
|
IconGitFork as GitForkIcon,
|
|
IconGlobe as Globe,
|
|
IconHash as Hash,
|
|
IconHelpCircle as HelpCircle,
|
|
IconPhoto as ImageIcon,
|
|
IconInfoCircle as Info,
|
|
IconKeyboard as Keyboard,
|
|
IconKey as KeyRound,
|
|
IconLayersIntersect2 as Layers3,
|
|
IconLayoutDashboard as LayoutDashboard,
|
|
IconLink as Link,
|
|
IconLink as Link2,
|
|
IconLink as LinkIcon,
|
|
IconLoader2 as Loader2,
|
|
IconLoader2 as Loader2Icon,
|
|
IconLock as Lock,
|
|
IconLogin as LogIn,
|
|
IconMail as Mail,
|
|
IconMaximize as Maximize,
|
|
IconMessageCircle as MessageCircle,
|
|
IconMessageCode as MessageCode,
|
|
IconMessageQuestion as MessageQuestion,
|
|
IconMessage2 as MessageSquareText,
|
|
IconMicrophone as Mic,
|
|
IconMicrophoneOff as MicOff,
|
|
IconDeviceDesktop as Monitor,
|
|
IconDeviceDesktopAnalytics as MonitorPlay,
|
|
IconMoon as Moon,
|
|
IconDots as MoreHorizontal,
|
|
IconDots as MoreHorizontalIcon,
|
|
IconDotsVertical as MoreVertical,
|
|
IconNetwork as Network,
|
|
IconNotebook as NotebookTabs,
|
|
IconPackage as Package,
|
|
IconPalette as Palette,
|
|
IconLayoutBottombar as PanelBottom,
|
|
IconLayoutSidebar as PanelLeftIcon,
|
|
IconLayoutNavbar as PanelTop,
|
|
IconPlayerPause as Pause,
|
|
IconPaw as PawPrint,
|
|
IconPencil as Pencil,
|
|
IconPencil as PencilIcon,
|
|
IconPencil as PencilLine,
|
|
IconPin as Pin,
|
|
IconPlayerPlay as Play,
|
|
IconPlus as Plus,
|
|
IconPower as Power,
|
|
IconRefresh as RefreshCw,
|
|
IconRefresh as RefreshCwIcon,
|
|
IconDeviceFloppy as Save,
|
|
IconSearch as Search,
|
|
IconSearch as SearchIcon,
|
|
IconSend as Send,
|
|
IconSettings as Settings,
|
|
IconSettings2 as Settings2,
|
|
IconAdjustmentsHorizontal as SlidersHorizontal,
|
|
IconMoodPlus as SmilePlusIcon,
|
|
IconSquare as Square,
|
|
IconChartDots3 as Starmap,
|
|
IconSteeringWheel as SteeringWheel,
|
|
IconPlayerStopFilled as StopFilled,
|
|
IconSun as Sun,
|
|
IconTerminal2 as Terminal,
|
|
IconTrash as Trash2,
|
|
IconUpload as Upload,
|
|
IconUsers as Users,
|
|
IconVolume2 as Volume2,
|
|
IconVolume2 as Volume2Icon,
|
|
IconVolumeOff as VolumeX,
|
|
IconVolumeOff as VolumeXIcon,
|
|
IconTool as Wrench,
|
|
IconX as X,
|
|
IconX as XIcon,
|
|
IconBolt as Zap,
|
|
IconBoltFilled as ZapFilled,
|
|
IconZoomIn as ZoomIn,
|
|
IconZoomOut as ZoomOut
|
|
} from '@tabler/icons-react'
|
|
|
|
export {
|
|
Activity,
|
|
AlertCircle,
|
|
AlertTriangle,
|
|
AppWindow,
|
|
Archive,
|
|
ArchiveOff,
|
|
ArrowUp,
|
|
ArrowUpRight,
|
|
AtSign,
|
|
AudioLines,
|
|
BarChart3,
|
|
Bell,
|
|
Bookmark,
|
|
BookmarkFilled,
|
|
Box,
|
|
Brain,
|
|
Bug,
|
|
Check,
|
|
CheckCircle2,
|
|
CheckIcon,
|
|
ChevronDown,
|
|
ChevronDownIcon,
|
|
ChevronLeft,
|
|
ChevronLeftIcon,
|
|
ChevronRight,
|
|
ChevronRightIcon,
|
|
CircleIcon,
|
|
CircleLetterA,
|
|
Clipboard,
|
|
Clock,
|
|
Cloud,
|
|
Command,
|
|
Copy,
|
|
CopyIcon,
|
|
CornerDownLeft,
|
|
Cpu,
|
|
CreditCard,
|
|
Download,
|
|
Ear,
|
|
EarOff,
|
|
Egg,
|
|
ExternalLink,
|
|
Eye,
|
|
EyeOff,
|
|
FileImage,
|
|
FileText,
|
|
FolderOpen,
|
|
GitBranch,
|
|
GitBranchIcon,
|
|
GitFork,
|
|
GitForkIcon,
|
|
Globe,
|
|
Hash,
|
|
HelpCircle,
|
|
ImageIcon,
|
|
Info,
|
|
Keyboard,
|
|
KeyRound,
|
|
Layers3,
|
|
LayoutDashboard,
|
|
Link,
|
|
Link2,
|
|
LinkIcon,
|
|
Loader2,
|
|
Loader2Icon,
|
|
Lock,
|
|
LogIn,
|
|
Mail,
|
|
Maximize,
|
|
MessageCircle,
|
|
MessageCode,
|
|
MessageQuestion,
|
|
MessageSquareText,
|
|
Mic,
|
|
MicOff,
|
|
Monitor,
|
|
MonitorPlay,
|
|
Moon,
|
|
MoreHorizontal,
|
|
MoreHorizontalIcon,
|
|
MoreVertical,
|
|
Network,
|
|
NotebookTabs,
|
|
Package,
|
|
Palette,
|
|
PanelBottom,
|
|
PanelLeftIcon,
|
|
PanelTop,
|
|
Pause,
|
|
PawPrint,
|
|
Pencil,
|
|
PencilIcon,
|
|
PencilLine,
|
|
Pin,
|
|
Play,
|
|
Plus,
|
|
Power,
|
|
RefreshCw,
|
|
RefreshCwIcon,
|
|
Save,
|
|
Search,
|
|
SearchIcon,
|
|
Send,
|
|
Settings,
|
|
Settings2,
|
|
SlidersHorizontal,
|
|
SmilePlusIcon,
|
|
Square,
|
|
Starmap,
|
|
SteeringWheel,
|
|
StopFilled,
|
|
Sun,
|
|
Terminal,
|
|
Trash2,
|
|
Upload,
|
|
Users,
|
|
Volume2,
|
|
Volume2Icon,
|
|
VolumeX,
|
|
VolumeXIcon,
|
|
Wrench,
|
|
X,
|
|
XIcon,
|
|
Zap,
|
|
ZapFilled,
|
|
ZoomIn,
|
|
ZoomOut
|
|
}
|
|
|
|
export type { Icon as IconComponent } from '@tabler/icons-react'
|
|
|
|
/**
|
|
* Named icon-size scale — the single source of truth for SVG icon dimensions,
|
|
* replacing ad-hoc `h-N w-N` / `size={N}`. Use `<Icon className={iconSize.sm} />`
|
|
* (Tailwind `size-*` sets w+h and beats the icon's default 24px); compose with
|
|
* `cn()` for colour/animation classes.
|
|
*/
|
|
export const iconSize = {
|
|
xs: 'size-3', // 12px
|
|
sm: 'size-3.5', // 14px
|
|
md: 'size-4', // 16px
|
|
lg: 'size-5', // 20px
|
|
xl: 'size-6' // 24px
|
|
} as const
|
|
|
|
export type IconSize = keyof typeof iconSize
|