@cueplusplus/theme-dusk
v1.0.3
Published
The dusk theme for @cueplusplus/ui.
Readme
@cueplusplus/theme-dusk
The dusk palette for @cueplusplus/ui — corale's ink-teal ground under an amber lamp accent that
never fills a button, over a warm tinted scrim. A palette is a package here precisely so that it is
not the only one: install several, register several, and a theme switcher is an array with more than
one entry in it.
Install
The @cueplusplus scope is public on npm and resolves there by default, so there is nothing
to configure and no credential to supply — it installs like any other package.
pnpm add @cueplusplus/theme-dusk @cueplusplus/theme-base@cueplusplus/theme-base is the one peer this package declares, and it carries the token contract
the palette is written against. A palette on its own paints nothing: install it beside
@cueplusplus/ui and its own peers — §2 has that line.
Quick start
The theme stylesheet is the third import, and its position is load-bearing rather than tidy. A theme
declares its colours under [data-theme="dusk"], which ties with the blank base's bare :root at
the same specificity, so the one declared later wins. Put it before styles.css and the blank
base paints over it.
/* app/globals.css */
@import "tailwindcss";
@import "@cueplusplus/ui/styles.css";
@import "@cueplusplus/theme-dusk/theme.css";Then register the manifest. themes is the registry the provider may switch between; theme names
the one that paints.
import dusk from "@cueplusplus/theme-dusk";
import { ThemeProvider } from "@cueplusplus/ui/system";
export function Providers({ children }: { children: React.ReactNode }) {
return (
<ThemeProvider themes={[dusk]} theme="dusk">
{children}
</ThemeProvider>
);
}Importing the package from its root, rather than reaching for its manifest.json subpath, also
closes ThemeName to the themes you actually installed — so a misspelt theme value is a type
error rather than a page that silently paints the blank base. Add prepaintScript() to <head>
with the same themes array, so the first frame is not the defaults flashing past: §4
has it.
What it ships
| Subpath | What it is |
| --- | --- |
| @cueplusplus/theme-dusk | the manifest, as both the default export and manifest |
| @cueplusplus/theme-dusk/theme.css | the palette — the only file a browser needs |
| @cueplusplus/theme-dusk/variants.css | the density rungs and font pairings this theme adds. Empty: it adds none |
| @cueplusplus/theme-dusk/manifest.json | the same manifest as JSON, for a tool that reads rather than imports |
| @cueplusplus/theme-dusk/package.json | |
Both modes. The manifest is complete with supportsLight: true, so theme.css writes the
whole colour contract four times over: [data-theme="dusk"] for dark,
[data-theme="dusk"][data-mode="light"] for light, and both again for [data-mode="system"] inside
a prefers-color-scheme query.
Fonts: one, the monospace. The theme block sets its own stack and then hands it to the pairing axis:
--cue-font-theme-mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
--cue-font-mono: var(--cue-font-pairing-mono, var(--cue-font-theme-mono));The second line is the handshake, and it is why the first is safe: a data-font pairing stamped on
an ancestor wins over the theme's stack, which in turn wins over the base's.
Sources are src/dusk.{dark,light}.tokens.json, colour and type only — no geometry token may appear
in a theme. theme.css, variants.css, manifest.json, index.js and index.d.ts are written by
cue-theme build and committed; prepack runs cue-theme check, which rebuilds all five in memory
and refuses to publish if anything on disk has drifted.
@cueplusplus/tokens no longer emits any palette: this package is where the dusk colours live.
packages/release/test/theme-packages.test.mjs holds this directory's theme.css against
packages/release/test/fixtures/pre-migration/dusk.css — the stylesheet @cueplusplus/[email protected]
actually shipped — byte for byte after the banner, so "the migration moved no colour" stays a thing
a gate proves rather than a thing a changelog claims.
Where the rest is
- The theming guide — https://ui.cueplusplus.com/docs/theming. The token vocabulary, the
density and mode axes, the other nine presets, and
createTheme()for a palette of your own. docs/CONSUMING.md— registry access in full, the peer matrix per subpath, and the table of what a failed install means.CHANGELOG.md, in this package — one entry per release, addressed to you rather than to the diff, with a Migrating section on anything that needs an edit. Read it before an upgrade; the version number alone does not say what moved.
