Skip to content

Shipping

@teasim/aster

The page-level blocks — a documentation shell, a header run, a footer, a nav tree, a pager.

npm install @teasim/aster
Target
Page chrome
Composes
@teasim/astro
Deps
None

Surface

Arrangement, and never a second opinion on a surface.

Each part is meant to stay legible, reviewable, and easy to change later.

Blocks

15 families
Shell, header, footer, nav, pager, pricing, FAQs, a closing CTA, sign-in, request and response blocks, steps, headings, grids, records — the furniture a site repeats.

Scope

Arrangement only
Grid, gap, measure, and the breakpoints where a layout changes. Borders, fills and type arrive with the elements it composes.

Style

No shortcuts of its own
Every fragment its recipes name is declared by astro's TeaCSS interface, so there is one place a shared fragment lives.

Recipes

Named parts
Every block exposes a recipe on @teasim/aster/recipes, so a page that only renders never pulls one in.

Runtime

None at all
Every block is markup and CSS. The one piece of chrome with a browser half, the contents rail, lives in astro beside its runtime.

Exit

A block is not a lock-in
Each one is ordinary Astro over the elements. Replacing one with your own markup is a local change.

What it is

The furniture a content site repeats on every page: the three-pane documentation shell, the sticky header run, the footer, the navigation tree, the pager, the pricing section, the question list, the closing call to action, the sign-in panel, the request and response blocks, and the listing shapes — steps, headings, grids, records.

Each one is composed from @teasim/astro elements rather than drawn from scratch, and they are imported exactly the same way.

The line it holds

A block owns arrangement. Grid, gap, measure, and the breakpoints where a layout changes. It never restates a surface — a border, a fill, a type scale or a focus ring arrives with the family it composes, so a look the elements lack is fixed on the element and not patched here.

That line is why the package declares no @shortcut of its own. Every fragment its recipes name is declared once, in astro’s TeaCSS interface.

Two invariants that bend here

An element renders no sibling part and takes no named slot. A block bends both, and only where the shape demands it: a tree renders itself, so the nav renders its own list part; and a layout has regions, so the shell takes its three panes and the header takes its logo as named slots.

Both exceptions are pinned by tests rather than left as an allowlist with no reason attached.

Getting started

Three steps, and none of them is a migration.

  1. Add it beside the elements

    One dependency and one peer. It takes @teasim/astro and nothing external at all.

  2. Point TeaCSS at it

    Add a second @source glob for the package. It declares no shortcuts, so nothing else about your entry changes.

  3. Compose the page

    The shell takes the header, the sidebar, the article and the rail as slots. What goes in them is yours.

Next

Take the parts you need.

Every package stands on its own, and nothing here asks for the whole set.