Skip to content
Component library
TemplatesComponents

Library

Components

Everything exported from @teralith/ui, with a live demo of each in a template theme.

NameKindWhat it does
ButtonLinkPrimitiveLink styled as a button: solid accent, outline, and inverse pair for accent backgrounds.
CountPrimitiveBracketed, zero-padded monospace number for headings and filters.
CrosshairPrimitiveThin registration mark. Decorative, hidden from assistive technology.
CursorReadoutPrimitiveDecorative pointer coordinates, like a camera monitor overlay. Mouse only.
FilterChipsPrimitiveOutlined filter chips; the active chip fills with ink.
LiveClockPrimitiveTicking local time for the studio's city, hydration safe.
MediaPrimitiveThe one image slot every block uses: next/image filling a sized box, marked for wireframe mode.
MonoLabelPrimitiveSmall uppercase monospace label with an optional bracketed index. The eyebrow and caption style.
PillLinkPrimitiveOutlined pill call to action with a diagonal arrow that fills on hover.
RoleCyclerPrimitiveSteps through a list of roles. Reads the full list to screen readers; still under reduced motion.
SectionHeadingPrimitiveEyebrow, h2, lead and an optional action: the opener for any page section.
SegmentedTogglePrimitive"View 1|2" switch. Pressed-state buttons inside a labelled group.
UnderlineLinkPrimitiveUppercase link whose underline retracts on hover. Off-site links open safely in a new tab.
WordmarkPrimitiveText wordmark in the template's wordmark face, linked home.
BeforeAfterBlockTwo pictures of the same subject under a draggable divider. A real range input, so touch, mouse and arrow keys all work.
BentoGridBlockTiles of different sizes in one grid: large, wide, tall and small, with optional picture or icon.
CardGridBlockEven cards on a raised surface with icon, text, meta line and link.
CinemaHeroBlockFull-bleed featured reel with cross-fades, a slow push-in, a film ruler and a pause control.
ConditionIndexBlockA to Z list with a sticky letter bar that jumps to each group.
ContactFormBlockAccessible enquiry form: checks on blur and submit, announced errors, honeypot, pending state, honest result from a server action.
CreditsListBlockFilm credits as a definition list.
CtaBandBlockFull-width call to action on the accent colour.
DialogBlockModal on the native dialog element, in centre, drawer and sheet forms. Focus trap, Escape, focus return and scroll lock come from the browser.
DisplayHeadingBlockOversized page title with an optional bracketed count at its shoulder.
DragCarousel and FrameCardBlockHorizontal strip with drag, snap and arrow paging, filled with tall frame-numbered cards.
EmptyStateBlockA screen or panel for nothing here: a 404, an empty list, no results. Always names the next step.
FactListBlockLabel and value pairs in a ruled grid, read as one definition list: bedrooms, floor area, year built, tenure.
FactsGridBlockA short row of label and value pairs under a hairline.
FaqListBlockQuestions that open in place, on native details elements.
FilmstripMarqueeBlockStills drifting sideways under a two-word header. Pauses on hover; scrolls by hand under reduced motion.
FooterBarBlockOne-line footer: place code and cycling roles, a link, a note, back to top.
FooterColumnsBlockMulti-column footer: brand and blurb, link groups, contact, legal line.
FrameRulerBlockFilm-edge ruler with numbered segments and a playhead. Drives CinemaHero.
FullscreenMenuBlockFull-screen numbered index menu on a modal dialog: focus trap, Escape, scroll lock, closes on navigation.
ImageGridBlockThumbnails that open in a full-screen viewer with arrow keys, previous and next, a counter and captions. Built on Dialog.
ListingCardBlockOne property: picture, status tag, price, title, place and bed, bath and floor area. The whole card is a single link named by the title; land shows its type instead of room counts.
ListingFiltersBlockFilters and a grid of listings in one client block: buying or renting, type, minimum bedrooms and a price sort. A live count announces each change, and an empty result offers a way back.
LocationCard and HoursTableBlockAddress, phone, email and directions with a photo, plus opening hours as a table.
LogoWallBlockClient logos at low contrast, full strength on hover, with a count.
NavBarBlockSticky bar with inline links and a booking button; a calm full-screen menu on phones.
NewsletterSignupBlockOne-field signup for a newsletter or waitlist. Checks the address, hides a honeypot, and shows exactly what the action reports.
PageHeaderBlockSubpage opener with breadcrumb, eyebrow, h1 and lead.
PhotoViewerBlockSingle-frame viewer: thumbnail rail, registration marks, counter and shot details. Arrow keys step.
PriceListBlockA grouped menu of services and prices with a dotted leader from name to price. Spa, salon, clinic and restaurant menus all fit; each line can link to its own page.
PricingTiersBlockTwo to four packages side by side with one featured. Prices are written strings with the currency, never computed.
ProfileIntroBlockAbout-page opener: label row, the name at display size, roles and city.
SiteHeaderBlockFixed top bar: wordmark, clock, call to action and the menu button that opens FullscreenMenu.
SplitBioBlockLong-form bio beside a portrait that stays in view.
SplitHeroBlockHeadline, lead, actions and reassurances beside a tall image with a floating card.
StatementBandBlockOne huge bracketed line between registration marks.
StatsStripBlockA row of headline numbers with labels and sources. The label reads first for screen readers; the number leads on screen.
StepsListBlockNumbered steps in a row: first visit, how it works, what happens next.
TabsBlockAccessible tabs: arrow keys, Home and End move and open, one tab stop, every panel in the page.
TeamGridBlockPeople with photo or initials, role, credentials and a short bio.
TestimonialWallBlockCustomer quotes as figures with a cited name, packed into columns, or one large featured quote. Initials stand in for photos.
WorkGridBlockProject cards in alternating rows of two and three, framed by hairlines.
WorkIndexBlockProjects page body: heading, view switch, category filter, then WorkGrid or WorkList.
WorkListBlockThe same projects as an index: number, title, credits, year, category.
CountUpMotionA whole number that counts up when it scrolls into view. The server HTML and screen readers carry the final figure from the start.
CursorRingMotionA soft ring that trails the mouse and swells over links and buttons. Decoration on top of the normal cursor; mouse and pen only.
MagneticMotionPulls a button or link a few pixels toward the pointer as it nears. Mouse and pen only; touch, keyboard and reduced motion get the plain element.
MaskRevealMotionHeading lines rise from behind a mask, 0.35 s apart. On load or on entering view; never hides a heading that is already on screen.
PageTransitionMotionAnimates one page out and the next in with the browser's view transitions: a curtain wipe or a fade and lift. Goes in a template.tsx. Needs React 19.3.
ParallaxSceneMotionLayers drift at different depths as the scene scrolls past. Pure CSS scroll timeline; still layers where unsupported or when less motion is asked for.
PinnedStepsMotionScrollytelling: a pinned panel changes as each step crosses the middle of the screen, with a progress rail. Phones get each visual inline instead.
RevealMotionBrings a block in as it scrolls on screen: rise, fade or scale, with an optional delay for staggering. Visible without scripts; blocks already on screen never flash.
ScrollProgressMotionA thin bar that fills as the page scrolls. Pure CSS scroll timeline; hidden where unsupported or when motion is reduced. Here it sits at the top of the demo frame.
TextMarqueeMotionA big ticker of words that drifts sideways. Pauses on hover; becomes a plain wrapped line when motion is reduced. The repeat is hidden from screen readers.
TiltCardMotionA card that leans toward the pointer in 3D and settles when it leaves. Mouse and pen only.
ToastProvider and useToastMotionSmall notices that stack in a corner and leave on their own. Hover or focus pauses them; errors are announced at once, others politely.
WordRevealMotionA large statement whose words light up one at a time, in reading order, as it scrolls past. Pure CSS scroll timeline; muted words stay at 3:1 contrast, and every word shows at full strength where unsupported or when less motion is asked for.
@teralith/ui 0.1.0

Component library, internal use · © 2026 Teralith Incorporated