Theming · Prop library

Components

The standardised building blocks of the site, with their props and a live aesthetic preview. Chrome is constant; palette, surface and type come from the cascade. For the full lighting · surface · shape · rhythm · filter editor, open the cascade playground →

LessonCard

Exemplar · breaks the standard scale

A lesson as a strip of film — standardised chrome, aesthetic-governed body.

LessonCard

import { LessonCard } from '@kino/components'
proptypewhat it does
titlestringLesson title — the headline.
patternstring | nullDefining pattern, rendered as the subtitle.
codestring | nullSmall mono badge (e.g. "D1·1").
imagestring | nullSection image painted into the slide (wins over icon).
iconstring | nullLucide icon slug for the slide when there is no image.
hrefstring | nullClick target — wraps the card in an <a>.
lookstring | nullAesthetic-theme slug; sets [data-grade] so the lesson's look governs the card.
accentstring | nullAccent colour for the rim + slide frame.
showcasebooleanExemplar treatment — larger, accented, rule-breaking hero.

Re-skins the standard examples below via [data-grade]. Lighting, surface and the rest live in the cascade playground.

Prop reference

Card

import { Card } from '@kino/components'
proptypewhat it does
surfaceSurfaceSlug | nullSurface finish (paper, glass, neon-pad…). Sets data-surface.
roleRoleSlug | nullSemantic intent (primary, warning…). Sets data-role.
paddingstring | booleanInner padding; false = 0, true/undefined = surface default.
accentstringAccent line colour (--dev-card-accent).
accentPosition'none'|'left'|'top'|'border'|'glow'Where the accent appears.

Button

import { Button } from '@kino/components'
proptypewhat it does
roleRoleSlug | nullColour/meaning; omit → primary.
emphasis'solid'|'soft'|'outline'|'ghost'Visual weight.
size'sm'|'md'|'lg'Control size.
hrefstringRenders an <a> instead of a <button>.
disabledbooleanDisabled state.

Input

import { Input } from '@kino/components'
proptypewhat it does
valuestring | numberBindable value.
placeholderstringPlaceholder text (native attr).
invalidbooleanInvalid styling.

Select

import { Select } from '@kino/components'
proptypewhat it does
options{ value, label }[]Option list.
valuestringBindable selected value.
placeholderstringEmpty-state label.

Textarea

import { Textarea } from '@kino/components'
proptypewhat it does
valuestringBindable value.
rowsnumberInitial row count (default 3).
autoResizebooleanGrow with content.

DropdownMenu

import { DropdownMenu } from '@kino/components'
proptypewhat it does
items{ label, icon?, href?, onclick? }[]Menu rows.
triggerSnippetThe clickable trigger.
align'start' | 'end'Menu alignment.