Files
punktfunk/web/src/components/unom-providers.tsx
T
enricobuehler 56f724815e feat(web): unify console + docs on @unom/ui; host OpenAPI via Scalar
Move the management console (web/) off shadcn/ui to the shared @unom/ui
design system the marketing site + docs are built on, on the punktfunk
violet brand over dark chrome:

- Add @unom/ui/@unom/style/motion/radix-ui/zod + Geist; web/.npmrc maps the
  @unom scope (packages are public-read, so CI needs no npm auth).
- styles.css: one dark-violet palette (#141019/#1c1530, brand #6c5bf3 ->
  #a79ff8) exposed under BOTH the shadcn token names the routes use and
  @unom/ui's contract, so routes + components both resolve; pulls in
  @unom/ui's material gloss + easings.
- components/ui/* now back onto @unom/ui (AnimatedButton/InputText/Label/
  AnimatedCard); brand-mark/wordmark/logo replace the generic Radio icon in
  the shell + login.
- MaterialProvider (specular gloss) at the root. No UI sounds, like the site.

docs-site: new /api route renders the host management REST API as an
interactive Scalar reference (reads public/openapi.json, a snapshot of
docs/api/openapi.json), branded violet and linked from the top nav, the
docs sidebar, the landing page, and host-cli.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 12:00:46 +00:00

22 lines
821 B
TypeScript

import type { ReactNode } from 'react'
import { MaterialProvider } from '@unom/ui/material'
// Turn on @unom/ui's specular "material" gloss for the whole console — the same
// design system the punktfunk marketing site is built on. SSR-safe (material
// gates its effects on a mounted flag). No SoundProvider: like the marketing
// site, the console stays silent (@unom/ui's useSound no-ops without a provider).
const MATERIAL = {
button: { enabled: true },
card: { enabled: true },
dialog: { enabled: true },
tabs: { enabled: true },
select: { enabled: true },
input: { enabled: true },
checkbox: { enabled: true },
toast: { enabled: true },
} as const
export function UnomProviders({ children }: { children: ReactNode }) {
return <MaterialProvider theme={MATERIAL}>{children}</MaterialProvider>
}