Repository navigation
Studio pillar rail: one 240 px rail (uppercase heading with count and an add button, search, 32 px rows, group headers) replaces the four per-pillar w-52 rails #12448
Description
Source
Epic #12446, decisions 1 and 3. Measured on objectui main a2225f91: DataPillar, AutomationsPillar and AccessPillar each render their own flex w-52 shrink-0 flex-col border-r rail with an 11 px muted heading, a search input and 13 px rows; InterfacesPillar renders a nav tree with two-line rows. Headings sit at different y offsets from the content column's first control, and the Data rail ends in a "Read-only" footer.
Target
One shared rail component (StudioRail.tsx) used by all four pillars:
- Width 240 px,
bg-sidebar-style surface, right border, full height under the shell header. - Header row, 44 px: an 11 px uppercase heading with 0.06 em tracking, an 18 px count pill, and at the right a 28 px add button (hidden when the package is read-only; the read-only card owns that rule).
- Search input, 32 px, with a leading search glyph; placeholder per pillar from the existing keys.
- Rows, 32 px, 6 px radius, 13 px text, 10 px side padding: a 16 px glyph slot, a truncating label, an optional trailing slot (a status dot, a kind tag, a count). Active row: primary-soft background, primary text, 500 weight. Hover: a muted wash.
- Group header row, 28 px, 6 px top margin: an 11 px uppercase label, a trailing chevron; child rows indent by 12 px. Groups collapse and remember their state per pillar in session memory (not persisted metadata).
- An empty-group row: 28 px, 12 px muted text ("No items in this package").
- Optional legend slot at the bottom (the Automations card uses it).
The Data rail's "Read-only" footer is removed here; the read-only card re-states that signal elsewhere. The Objects rail keeps the per-object icons from metadata; a data-testid per pillar rail (studio-rail-data, -automations, -interfaces, -access) is added for the pillar cards' tests.
File surface
New packages/app-shell/src/views/studio-design/StudioRail.tsx; StudioDesignSurface.tsx (the four rail blocks swap to the component; row content stays as each pillar renders it today). Rail search behavior (AutomationsPillar.railSearch-11794, navRailLabels-11862, accessRailLabels-11862, railLabelInherits-11196, railSeparatorBadge-11791, railUnboundReason-11281) is preserved, not redesigned, by this card.
Acceptance
- All four pillars render the rail at 240 px with the heading, count, add button and search at identical y offsets (screenshot of the four side by side at 1280 px).
- Row height 32 px and the active-row style verified by a test that mounts two pillars and compares computed classes.
- The six rail tests above stay green unchanged.
- Before/after screenshots, light and dark.
Constraints
- Tailwind utilities and theme tokens only; no inline style.
- Existing
data-testids and i18n keys stay; new test ids listed above. - Gates:
pnpm --filter @object-ui/app-shell test,lint,build. - Depended on by the Data, Automations, Interfaces and Access pillar cards; land it first.
Parent: #12446
Activity
objectstack-fleet commentedon Oct 15, 2026
Closed as a duplicate of #12459. The shared 240 px rail is built inside the layout skeleton card, which the maintainer asked the epic PM session to implement itself. This card's measurements and the six rail tests it names are carried into item 2 of #12459.
Closed 2026-10-15T08:55Z by the epic PM session
session_cdb7a717-def7-4e71-9988-f089fbaa18ff.