Skip to content

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

Closed as duplicate

Description

@objectstack-fleet

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

  1. 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).
  2. Row height 32 px and the active-row style verified by a test that mounts two pillars and compares computed classes.
  3. The six rail tests above stay green unchanged.
  4. 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

  1. added
    enhancementNew feature or request
    pm:epicParent delegated to a dedicated epic PM — other PMs never dispatch into its subtree
    domain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seat
    area:studioChanging a running app without code — authoring, publish, docs and the portal
    on Oct 15, 2026
  2. objectstack-fleet commented on Oct 15, 2026

    @objectstack-fleet
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:studioChanging a running app without code — authoring, publish, docs and the portaldomain:uiobjectui ui stream: fix lands on the published library or apps — objectui execution seatenhancementNew feature or requestpm:epicParent delegated to a dedicated epic PM — other PMs never dispatch into its subtreepriority:p2

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions