dowel
Three places
Section titled “Three places”The stand is where the components are. Every one of them, live, in either theme and in the accent of any product of the line — change the accent and watch what follows from it: the hover shade, the soft fill, the focus ring, the colour of text on an accent fill. None of which a component states for itself.
The demo is where they are used: kilna-lite, a small product made of nothing but the blocks - whole screens built from the components - on an invented world.
These pages are where the reasons are. What a token means, why a scale has the steps it has, what a component will and will not do for you.
Status
Section titled “Status”v0.41.0. The theme and its scales, an accent for each of the nineteen
products of the line, every colour of each resolved
for a product that does not draw with a browser - as JSON and as a Rust
module, from one generator - the line’s
marks at the level their size calls for, and
a hundred and eighteen primitives, each with a page of its own on
the stand, which remembers the theme, the accent and the
density you left it in, and measures the contrast of whichever you chose; each
page ends with what axe found on it, in both themes, and the history of its
file, release by release - the whole of the first is the
accessibility report. A form can be drawn
from the JSON Schema its data already has, by
SchemaFields. Four
blocks - a list beside the open thing,
settings, a sign-in, a dashboard’s first day - are drawn together in
kilna-lite. Dates
and numbers are written in the application’s language, never the browser’s, and
a month of days holds the screen it is given. A key is written once, in one
list of commands the keyboard, the palette and
the sheet of shortcuts all read, and it works on any keyboard layout. Size now
comes from the scale and is held there by a
gate; a pointer target has a floor the set cannot fall under; and density is an
attribute on a container rather than a prop, so one word on a form reaches
every control inside it, buttons included. A dialog scrolls in its body and
keeps its actions in the window, and a popup opened inside any overlay opens
above it. Everything that opens over the page
fits the window on both axes and is
driven by the keyboard
in a real browser, and a weekly mutation run holds every file’s tests to a
floor of their own. Every props
table is read from the component’s types, the
catalogue finds an item down to a prop it
takes, and recipes compose screens from
files the tests render. The lint rules hold a product to the same
scale and to Button rather than a raw <button>, and rewrite a size written the
long way on their own. Components install from the
registry with npx shadcn add, singly or as a
set; the theme is the dowel-ui package, which also
carries the migration tools a project crossing from
stock shadcn runs on itself, and the upgrading guide
lists every change that has broken a product, with the way through, read out
of the changelog. Every class the set writes is compiled before it ships, and
every heading a primitive draws stands at the level the page gives it. Every
ink is held to its contrast floor on every ground
it may stand on, for every product, in both themes and under more contrast, and
a screen prints as dark ink on white whatever theme
it is in. Two
products of the line run on it:
kilna and
kasl-server.
Development goes in versions, each one a single coherent theme; the roadmap says what is next.