apps/shade/README.md
Ghost Design System that can be used by micro-frontends.
Ghost Admin provides Shade's CSS and application wrapper centrally. Embedded
Admin surfaces, including apps/admin and apps/activitypub, must not import
@tryghost/shade/styles.css or add another ShadeApp wrapper. Import
components from their layer-specific subpaths:
Example:
import {Button} from '@tryghost/shade/components';
export function Example() {
return <Button>Continue</Button>;
}
The setup below applies only to a standalone surface that owns its complete application and CSS entry points. Shade is currently a private package; when published, consumption will follow standard npm usage.
CSS-first styling contract:
/* app entry CSS */
@import "@tryghost/shade/styles.css";
No Tailwind preset/config import is required for Shade runtime styling.
Scoping and dark mode:
.shade container..dark within that scope.Wrap your surface with ShadeApp (includes provider and scoping):
import {ShadeApp} from '@tryghost/shade/app';
<ShadeApp darkMode={false}>
</ShadeApp>
This is a monorepo package.
For a fresh clone or worktree, follow the setup instructions from the repository root:
corepack enable pnpm
pnpm setup
After setup, run the package commands below from apps/shade or with
pnpm --filter @tryghost/shade <command>.
Local docs with Storybook:
pnpm storybook — run Storybook and view docs under src/docs/pnpm build-storybook — build a static exportpnpm build — build the package and its type declarationspnpm test — type-checks and runs Vitest with coveragepnpm test:unit — type-checks and runs Vitestpnpm test:types — TypeScript onlypnpm lint — ESLint for src/ and test/@/lib/utils (not @/utils). Use cn(...) to merge class names and prefer CVA for variants.src/docs/*).