A dashboard is a wall panel somebody hangs in their own hallway, so it now wears what they choose: a look, and a palette of their own colours. Two complete component sets live under `Dashboard/ui/` — `glass` (translucent panes over a slowly moving ground) and `material` (Material 3 tonal cards) — behind one prop contract. Every control's state, keyboard and `aria-` live in `ui/core` and are shared, so the two sets are the same dashboard drawn twice rather than two products: a set only decides what a control looks like while doing it. Four settings join the channel, each drivable by a flow like any other: `look`, `palette`, `background` and `touch`. A palette is an ordered list of hex colours — background, surface, primary, accent, text, then more chart colours — pasted from a coolors.co link or typed, written onto the canvas as the token variables everything already reads. Trailing roles are derived, so three colours are a whole dashboard, and derived text is held to AA rather than trusted (`theme.check.ts` measures it). A palette also decides light or dark, since its first colour is the ground. Widgets are measured against their own tile with container queries rather than against the viewport, animate through `motion`, and can be drawn without their title. The three reworks: - a bar draws a row per reading, up to eight, each in the dashboard's own data colours and each able to carry its own scale — replacing readings nested in one fill, which could only ever share one colour and stop at three. Documents written the old way are read as rows. - a chart's range picker moved to a column down its right-hand edge, which gives the plot back a whole row of a short tile. - the colour wheel became a disc: hue is the angle and saturation the distance from the middle, so a colour is one gesture rather than three, with brightness on a slider beside it. `index.css` and `lib/motion.ts` are untouched — the dashboard overrides token *values* on its canvas, never the blocks the two repos share.
30 lines
660 B
TypeScript
30 lines
660 B
TypeScript
/**
|
|
* Liquid glass — one of the dashboard's two looks.
|
|
*
|
|
* Every entry of `ComponentSet` is implemented here; the behaviour comes from
|
|
* `ui/core`, so this set cannot do anything the other one cannot.
|
|
*/
|
|
import "./glass.css"
|
|
|
|
import type { ComponentSet } from "../core/contract"
|
|
import { Button, Input, Segmented, Select, Slider, Switch } from "./Controls"
|
|
import { Bar, ColorDisk, Gauge, Readout } from "./Data"
|
|
import { Backdrop, Frame, Notice, Rail } from "./Surfaces"
|
|
|
|
export const glass: ComponentSet = {
|
|
Backdrop,
|
|
Frame,
|
|
Button,
|
|
Switch,
|
|
Slider,
|
|
Segmented,
|
|
Select,
|
|
Input,
|
|
Readout,
|
|
Gauge,
|
|
Bar,
|
|
ColorDisk,
|
|
Rail,
|
|
Notice,
|
|
}
|