Elke entry hieronder komt rechtstreeks uit een manifest — niets wordt met de hand bijgehouden. Open een entry voor de live preview, wissel van skin en zie hetzelfde component van huid veranderen: dat is het token-contract aan het werk.
Primitives (46)
accordion
Vragen of hoofdstukken die je openklapt; twee gezichten (display: genummerd en groot, dichte titels gedempt; plain: lijst met chevron), single of multiple. Openklappen via layout-FLIP, geen hoogte-animatie.
button
Knop met usePress-gedrag; varianten primary (wit-op-zwart) en ghost; uiterlijk volledig uit het token-contract.
calendar
Eén datum kiezen met maand én jaar als keuzelijst in de kop (van 1930 naar 2030 in één beweging), pijlen, vandaag-stip en niet-beschikbare dagen. Geen library: ISO-strings, Intl, native select.
color-picker
Ronde kiezer: stippen in ringen die opzij veren als je muis erlangs komt; tik en de ring eromheen neemt die kleur aan. De kleuren komen van het project (palette-functie) — de entry bevat er nul.
combobox
Kies uit een lange lijst door te typen: een knop toont de keuze, eronder een zoekveld met de gefilterde lijst; pijltjes, Enter, Esc en een vinkje op het gekozen item. Componeert popover en button.
dancing-letters
Een woord waarvan elke letter zijn eigen choreografie afspeelt bij hover of tik — rubberband, scharnier, hup, omslaan, schuiven, schudden, pop, zweven. Kleur en maat van de ouder.
date-range-calendar
Periodekiezer over twee maanden (aankomst/vertrek, verhuur, planning) met onbeschikbare en in-behandeling-dagen; geoogst uit het Apoera-boekingssysteem en domein-neutraal gemaakt.
expanding-nav
Ronde icoonknoppen die uitrekken tot een pil met het woord erin zodra je erop komt. Voor een korte, visuele navigatie van vijf à zes items.
field
Label + input + beschrijving/fout, altijd correct geassocieerd (id/aria); fout gebruikt de status-token.
file-dropzone
Sleep bestanden in het vak of klik om te kiezen; lijst met maat en verwijderknop, te grote bestanden geweigerd met melding. Het vak groeit iets en het icoon zweeft op als er iets boven hangt.
folder-stack
Een map die opent en zijn vellen laat waaieren — beeld voor lege staten, archief of upload. Vorm uit tokens, geen illustratiebestand, dus hij herskint mee.
footer-taped
Voettekst als een vel dat met twee stukken plakband op de pagina zit: merk + tagline, kolommen met links en 'binnenkort'-labels, daaronder copyright, juridische links en sociale iconen.
gradient-button
Knop met een radiaal verloop dat op hover van plek en spreiding verandert terwijl de rand meedraait — CSS-only via geregistreerde custom properties. Varianten brand en contrast.
hover-expand-gallery
Rij smalle beeldstroken; de strook onder je muis (of laatst aangetikt) vouwt open tot een breed beeld met onderschrift, de rest schuift samen. Voor portfolio's en fotoreeksen.
hover-preview-list
Strakke lijst waarbij boven de rij onder je muis een beeld opduikt dat zachtjes meebeweegt; een balk glijdt naar de rij en keert de tekst om. Op touch een gewone lijst met het beeld ernaast.
hover-reveal-button
Pil met een stip die op hover uitgroeit tot de hele knop; het woord schuift weg en keert in de contrastkleur terug met een pijl. Groei via transform, niet via maat.
images-badge
Pil met een stapeltje beelden dat op hover open waaiert; verborgen beelden komen tevoorschijn en een +N telt de rest. Groei van de pil via layout-animatie (FLIP), kaartjes via transform.
infinite-slider
Verticale eindeloze fotoreeks: wiel of vinger schuift, de beelden lopen na (lerp) en snappen op het dichtstbijzijnde beeld; rechts een meeschuivende minimap met tekst; parallax in de kaarten.
kbd
Een toets als badge (⌘, K, Esc) en een groepje ervan — sneltoets-hints in zoekvelden, menu's en tooltips.
link-preview
Link in lopende tekst die op hover (en focus) een klein beeld van de bestemming boven zich toont; het kaartje leunt mee met de muis. Het beeld komt van het project — geen fetch in de entry.
liquid-glass-button
Doorzichtige pil die de achtergrond erachter breekt als glas: SVG-filter als backdrop-filter, binnenschaduwen voor de lichtval; valt terug op blur waar de browser geen SVG-backdrop kent.
liquid-metal-button
Pil met een metalen rand die traag draait, sneller bij hover en kort opflitst bij een klik; op de klikplek spreidt een rimpel uit. Zonder shader-runtime: conic-gradient uit tokens + Framer-rotatie.
marquee
Eindeloze band (logo's, woorden, kaarten) in vier richtingen met vervagende randen en pauze op hover; de inhoud staat er twee keer en schuift precies één kopie.
menubar
Menubalk van een bureaublad-app: titels met uitklapmenu's, wisselen met muis of ← →, items met icoon, sneltoets, scheiding, kopje, checkbox of radio. Componeert popover; aria-menubar zonder library.
motion
Spring-wrapper bovenop Framer Motion: tokens in, physics intern; projection, rubberband en de site/app-schaal (MotionScaleProvider).
neon-button
Pil met een dunne lichtlijn boven en onder die oplicht bij hover; drie varianten (outline, solid, ghost) en drie maten. De lichtkleur is standaard de merkkleur.
otp-input
Invoerveld voor een verificatiecode: losse vakjes die als één veld werken. Plakken vult alles, backspace loopt terug, focus springt naar het eerste lege vakje, en een foute code schudt.
password-strength
Meter voor wachtwoordsterkte met de eisen als afvinklijst. Een herkenbaar patroon (welkom123, qwerty, 1234, aaaa) zakt terug naar zwak, hoe lang het ook is.
phone-mockup
Telefoonlijst om een schermontwerp in te zetten: model (notch of dynamic island), staand of liggend, schaal, veilige randen, thuisbalkje. Behuizing standaard --foreground, scherm --background; nul letterlijke kleuren.
popover
Vanuit een anker openend vlak (menu, popover) met het pop-token: schaal + fade vanuit het anker, Esc/buiten-klik sluit langs dezelfde weg.
press-depth
Knop met dikte: hij zakt echt in en kantelt naar de plek waar je hem raakt. Zelfde gedragslaag als Button, ander lichaam.
progress-bar
Voortgang in twee gedaanten: gemeten (percentage bekend) en onbepaald (value=null) met een pendel. De kop wisselt mee zonder te verspringen.
radio-glider
Verticale keuzelijst (pakketten, tarieven) met een lichtstreep langs de linkerrand die naar de gekozen optie glijdt en daar gloeit. Echte radio-inputs eronder.
reading-progress
Dunne balk die meeloopt met hoe ver je in een artikel bent, met 'nog n min' en aan het eind een vinkje met de totale leestijd; plus de hook useReadingProgress voor wie alleen het getal wil.
reorder-list
Lijst die je sleept én met het toetsenbord herschikt (spatie pakt op, pijltjes verplaatsen, Escape zet terug), met uitgesproken bevestiging per zet.
search-field
Zoekveld met loepje links en de sneltoets (⌘K / Ctrl K) rechts; de sneltoets zet ook echt de focus. Componeert field (1.2.0) en kbd.
sheet
Onderbreekbare, omkeerbare bottom-sheet: 10px-hysteresis, rubberband voorbij open, sluit met de snelheid van het gebaar, mid-vlucht vangen mag.
shining-text
Tekst waar een lichtstreep doorheen trekt ('… is aan het denken'): verloop van gedempte naar volle tekstkleur, ambient loop op background-position.
task-steps
Stappenlijst die live meeloopt met een run: gedaan, bezig, mislukt, nog niet begonnen — met een uitgesproken statusregel voor schermlezers.
text-reveal
Tekst die zich woord voor woord (of letter voor letter) scherpstelt terwijl je scrollt: de voortgang hangt aan de scrollpositie, dus terugscrollen draait hem terug.
text-roll
Woord dat op hover letter voor letter omhoog rolt terwijl een tweede exemplaar van onderen binnenkomt, vanuit het midden of van links. Voor grote menu-links en koppen.
timeline
Gebeurtenissen op een rij, verticaal of horizontaal, met een statusstip en lijn per stap; statussen neutraal/wacht/bezig/klaar/fout, tijdstip via Intl, vrije inhoud per item.
toggle
Knop die aan of uit staat (aria-pressed) plus een groep met één of meerdere gekozen, horizontaal of verticaal. Op de usePress-laag; varianten default/outline, drie maten.
use-async-action
De toestandsmachine onder elke knop die iets wegstuurt: bezig, gelukt of mislukt, en vanzelf terug naar rust. Voorkomt dubbel afvuren, verouderde uitkomsten en state na unmount.
use-press
Apple-gedragslaag voor tapbare elementen: touch-down zonder vertraging, hit-marge, wegslepen-annuleert/terugslepen-herstelt; activatie via onPress.
use-toggle
Hook: een boolean met een vaste toggle-functie — [waarde, wissel, zet].
Blocks (21)
account-menu
Paneel achter je naam: portret, naam en e-mail, koppelingen met een pijltje op hover, en uitloggen in de statuskleur; alles schuift bij het openen één voor één van links in.
action-searchbar
Zoekveld dat bij focus een lijst acties toont en filtert terwijl je typt; loep wisselt naar verzendpijl zodra er tekst staat. Klik, pijltjes en Enter kiezen. Componeert field.
async-button
Receptuur: de bestaande knop met de async-toestandsmachine erin en vier gezichten die over elkaar wisselen — rust, bezig, gelukt, mislukt. De maat blijft staan tijdens het wisselen.
audit-log
Logboek van gebeurtenissen met een lijn door de iconen, labels voor soort en status, filters op wie/soort/status plus zoekveld, en per regel een rechtsklik- of ⋯-menu met acties van het project. Componeert search-field.
background-paths
Hero met 72 trage, dunne lijnen die als stromen over het vlak trekken; de titel komt letter voor letter omhoog, de actie eronder is een slot. Lijnen kleuren met currentColor, dus het blok herskint mee.
booking-inquiry
Boekingsaanvraag-formulier: periode, gasten, prijsopbouw (nachten + toeslag + borg) en gastgegevens; verstuurt via het onSubmit-contract van het project.
booking-section
Receptuur: kalender + aanvraag-formulier met gedeelde periodeselectie in twee richtingen (kalenderklik vult de velden, getypte datum kleurt de kalender).
chat-layout
Driedelige berichten-indeling: navigatie, gesprekkenlijst met zoekveld, en het gesprek met kop, berichtenvlak (slot) en typbalk met bijlage-menu. Smal: lijst óf gesprek met terugknop. Componeert search-field, field, button en popover.
command-palette
Het ⌘K-venster: dialoog met zoekregel en lijst opdrachten (icoon, titel, toelichting, categorie), live gefilterd, ↑ ↓ Enter Esc, lege staat met wisknop. Sneltoets werkt paginabreed.
coverflow-carousel
Vijf kaarten in een 3D-waaier: de middelste recht met tekst en knop, de buren gedraaid en donkerder; de achtergrond is de foto in focus, vaag. Pijlen, stippen, pijltjestoetsen, swipe en autoplay.
dither-hero
Grote afgeronde kaart als oproep: label met pulserende stip, kop, toelichting en actie; op de achtergrond een gerasterde vlek in de merkkleur die traag drijft en versnelt onder de muis. Zonder shader: SVG-stippenraster + drijvend mask.
empty-state
De lege staat: beeld, wat er ontbreekt, wat je eraan doet. Alle tekst en de actie zijn slots; het beeld is standaard de folder-stack maar mag alles zijn.
hero-carousel
Paginavullende hero als filmstrook: kaarten delen één bovenrand, de kaart in focus ontvouwt tot volle hoogte, buren blijven halfhoog geknipt, de achtergrond kleurt mee. Wiel, slepen, klik, pijltjes, autoplay.
notification-popover
Bel met teller voor ongelezen meldingen; een klik opent een paneel met de lijst, 'alles gelezen' bovenin, elke melding gelezen zodra je hem aanraakt. Componeert popover en button.
sign-in
Inlogpagina: e-mail, wachtwoord met oog-knop, aangemeld blijven, wachtwoord vergeten, inloggen, andere aanbieders en account aanmaken; rechts een vrij vlak. Elementen komen na elkaar in beeld.
spotlight-hero
Donkere kaart in twee helften: links kop en tekst, rechts een scène-slot (3D, video, beeld — het project kiest), met een zachte lichtvlek die de muis volgt.
stacked-list
Ledenkaart: actieve leden met zoekveld bovenin; onderin een balk met drie portretten en +N die op een tik de kaart vult met de volledige lijst en eigen zoekveld. Rijen komen schuin binnen. Componeert search-field.
stagger-testimonials
Citaten als een rij scheve kaarten met een afgeschuinde hoek; de middelste staat hoog in de merkkleur. Klik op een kaart en hij schuift naar het midden; pijlen doen één stap.
testimonial-columns
Kop met daaronder drie kolommen citaten die elk in hun eigen tempo omhoog schuiven en boven en onder vervagen; smal één kolom, middelbreed twee. Componeert marquee.
testimonial-grid
Bento van citaten in drie kolommen: per kaart een toon (neutraal met raster, accent, contrast) en een hoogte, zodat het een compositie is. Kaarten komen scherp in beeld bij het scrollen (blur + zakken).
testimonial-wall
Vier verticale banden korte reacties, gekanteld in een 3D-vlak, om en om omhoog en omlaag; randen vervagen naar de achtergrond. Componeert marquee voor het schuiven.
Zo oogst je
- Open Claude Code in de Websites-map en typ
/oogstmet je bron — bijvoorbeeld/oogst het reviewsysteem van Apoera. - De poortwachter controleert eerst of de capability al bestaat. Bestaat er iets soortgelijks, dan stopt de oogst en beslis jij: vervangen, of als nieuwe versie ernaast. Is het vrij, dan geeft
npm run registry id-issueeen nieuw, uniek component-ID uit (deFC--code op elke kaart). Eén component, één ID — nummers worden nooit hergebruikt. - Het component wordt ontleed in losse onderdelen en herschreven op het token-contract: klant-teksten worden slots, API-calls worden datacontracten, kleuren worden tokens. Wat al in de registry zit (button, field, sheet) wordt hergebruikt.
- Manifest + live demo erbij,
npm run verifymoet groen zijn — en de nieuwe entry verschijnt vanzelf op deze pagina, met preview en skin-wisselaar.
Eén regel om te onthouden: oogsten is herschrijven op het contract; de bron is referentie en blijft onaangeroerd.