crucıble

Guild

About & team section block: a mission statement with an oversized stat row rolling in on Tally digit drums, a team grid of seeded generative portraits that rest as an accent duotone and warm to full color on hover or focus with a slide-up bio panel, a Detent department filter that re-flows the grid with layout springs, and a numbered values list whose rules draw in.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/guild

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
eyebrowReact.ReactNode"About us"Small label above the mission statement. Pass null to hide.
missionReact.ReactNodeThe mission statement, rendered as the section's <h2>. Pass null to hide the whole mission part (statement + stats).
missionBodyReact.ReactNodeSupporting copy under the mission statement. Pass null to hide.
statsGuildStat[]Oversized stat row under the mission. Numbers roll in on view. Pass [] to hide.
teamTitleReact.ReactNode"The people behind the work"Heading of the team part.
teamDescriptionReact.ReactNodeCopy under the team heading. Pass null to hide.
peopleGuildPerson[]Team members. Pass [] to hide the team part.
showFilterbooleantrueShow the department filter (only rendered when there are 2+ teams).
allLabelstring"Everyone"Label of the "show everyone" filter tab.
filterstring | nullControlled filter — a team name, or null for everyone.
defaultFilterstring | nullnull (everyone)Initial filter when uncontrolled.
onFilterChange(team: string | null) => voidFires when the department filter changes (null = everyone).
onPersonToggle(person: GuildPerson, open: boolean) => voidFires when a person's reveal panel is pinned open or closed by click, tap or keyboard.
valuesTitleReact.ReactNode"What we hold to"Heading of the values part.
valuesGuildValue[]Numbered values list. Pass [] to hide.
accentColorstring"#fda4af"Portraits rest as a duotone in this hue and warm to full color on hover/focus; also tints numerals, rules and focus rings.
refReact.Ref<GuildHandle>Imperative handle (replay(), setFilter()). React 19 ref-as-prop.
classNamestringExtra classes for the <section> root.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"section">, "children" | "title"> — they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.