Skip to content

Floating glassmorphic pill strips for split groups#228

Merged
parsakhaz merged 3 commits into
mainfrom
feat/split-group-pill-strips
Jun 12, 2026
Merged

Floating glassmorphic pill strips for split groups#228
parsakhaz merged 3 commits into
mainfrom
feat/split-group-pill-strips

Conversation

@parsakhaz

Copy link
Copy Markdown
Member

Description

Split groups no longer render a second full-size tab bar row stacked against the primary bar. Each split group now carries its tabs in a floating island pill, centered at the top of the group, hovering over the content: glassmorphic (translucent chrome background, backdrop blur, soft shadow), rounded-full, roughly half the tab bar height with 10px type and scaled-down icons, close buttons, and activity dots. The pill border brightens subtly when the group has focus.

  • PanelTabStrip gains a variant prop ('bar' | 'pill'). The primary tab bar keeps the existing full-size bar variant pixel-identical.
  • All strip mechanics carry over: drag to reorder with the midpoint indicator, trailing append zone, center/edge drops, close, double-click rename, activity dot.
  • The pill renders at z-30, above the drop overlay (z-20), so between-tab reorder drops stay interactive mid-drag.
  • Since the pill floats instead of occupying a layout row, split group content gets the full group height.

Also fixes a shipped styling bug found while building this: Tailwind opacity modifiers on the var()-based design tokens (bg-interactive/10, border-interactive/40, ring-interactive/30) silently compile to nothing because the tokens are plain var() strings without <alpha-value>. In practice the 5-zone drop highlights and the focused-group ring never rendered at all. Replaced with color-mix() arbitrary values (verified they compile; Electron's Chromium supports color-mix).

Stacked PR: this branch includes #226 and #227; merge those first and this PR reduces to the single pill commit.

Type of Change

  • New feature (non-breaking change which adds functionality)
  • Bug fix (the token-opacity rendering fix)

Checklist

  • My code follows the code style of this project
  • I have performed a self-review of my own code
  • My changes generate no new warnings
  • I have run pnpm typecheck and pnpm lint locally

Critical Areas Modified

  • None of the above (presentation-layer change in two components)

… and 'origin/fix/split-tabs-deferred-followups' into feat/split-group-pill-strips
Split groups no longer render a second full-size tab bar row. Their
tabs live in a compact island pill floating top-center over the group
content: rounded-full, translucent chrome background with backdrop
blur, roughly half the tab bar height, 10px type, smaller icons and
close buttons. The pill border brightens when the group is focused.

PanelTabStrip gains a variant prop ('bar' | 'pill'); the primary tab
bar keeps the existing full-size bar variant untouched. All strip
mechanics carry over to the pill: drag to reorder with the midpoint
indicator, trailing append zone, close, rename, activity dot. The pill
sits at z-30 so reorder drops stay interactive above the drop overlay
(z-20) mid-drag.

Also fixes a shipped styling bug this work surfaced: Tailwind opacity
modifiers on the var()-based design tokens (bg-interactive/10,
ring-interactive/30, border-interactive/40) silently compile to
nothing because the tokens are plain var() strings without
alpha-value. The 5-zone drop highlights and the focused-group ring
never rendered. Replaced with color-mix() arbitrary values, which
compile and render correctly in Electron's Chromium.
@parsakhaz parsakhaz merged commit 0d071ec into main Jun 12, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant