Package Exports
- @geenius/ui
- @geenius/ui/react
- @geenius/ui/react-css
- @geenius/ui/react-css/styles
- @geenius/ui/react-css/styles.css
- @geenius/ui/react-native
- @geenius/ui/solidjs
- @geenius/ui/solidjs-css
- @geenius/ui/solidjs-css/styles
- @geenius/ui/solidjs-css/styles.css
- @geenius/ui/themes
- @geenius/ui/themes/_base/contract.css
- @geenius/ui/themes/presets/brutalist/meta.json
- @geenius/ui/themes/presets/brutalist/preview.png
- @geenius/ui/themes/presets/brutalist/tailwind.css
- @geenius/ui/themes/presets/brutalist/tokens.css
- @geenius/ui/themes/presets/clean-minimalist/meta.json
- @geenius/ui/themes/presets/clean-minimalist/preview.png
- @geenius/ui/themes/presets/clean-minimalist/tokens.css
- @geenius/ui/themes/presets/cyberpunk-neon/meta.json
- @geenius/ui/themes/presets/cyberpunk-neon/preview.png
- @geenius/ui/themes/presets/cyberpunk-neon/tailwind.css
- @geenius/ui/themes/presets/cyberpunk-neon/tokens.css
- @geenius/ui/themes/presets/editorial-magazine/meta.json
- @geenius/ui/themes/presets/editorial-magazine/preview.png
- @geenius/ui/themes/presets/editorial-magazine/tokens.css
- @geenius/ui/themes/presets/enterprise-saas/meta.json
- @geenius/ui/themes/presets/enterprise-saas/preview.png
- @geenius/ui/themes/presets/enterprise-saas/tokens.css
- @geenius/ui/themes/presets/glassmorphism/meta.json
- @geenius/ui/themes/presets/glassmorphism/preview.png
- @geenius/ui/themes/presets/glassmorphism/tailwind.css
- @geenius/ui/themes/presets/glassmorphism/tokens.css
- @geenius/ui/themes/presets/high-contrast-a11y/meta.json
- @geenius/ui/themes/presets/high-contrast-a11y/preview.png
- @geenius/ui/themes/presets/high-contrast-a11y/tokens.css
- @geenius/ui/themes/presets/highend-commerce/meta.json
- @geenius/ui/themes/presets/highend-commerce/preview.png
- @geenius/ui/themes/presets/highend-commerce/tokens.css
- @geenius/ui/themes/presets/luxury-gold/meta.json
- @geenius/ui/themes/presets/luxury-gold/preview.png
- @geenius/ui/themes/presets/luxury-gold/tokens.css
- @geenius/ui/themes/presets/medical-clinical/meta.json
- @geenius/ui/themes/presets/medical-clinical/preview.png
- @geenius/ui/themes/presets/medical-clinical/tokens.css
- @geenius/ui/themes/presets/nature-organic/meta.json
- @geenius/ui/themes/presets/nature-organic/preview.png
- @geenius/ui/themes/presets/nature-organic/tokens.css
- @geenius/ui/themes/presets/neo-retro-90s/meta.json
- @geenius/ui/themes/presets/neo-retro-90s/preview.png
- @geenius/ui/themes/presets/neo-retro-90s/tokens.css
- @geenius/ui/themes/presets/nordic-calm/meta.json
- @geenius/ui/themes/presets/nordic-calm/preview.png
- @geenius/ui/themes/presets/nordic-calm/tokens.css
- @geenius/ui/themes/presets/playful-bold/meta.json
- @geenius/ui/themes/presets/playful-bold/preview.png
- @geenius/ui/themes/presets/playful-bold/tokens.css
- @geenius/ui/themes/presets/soft-pastel/meta.json
- @geenius/ui/themes/presets/soft-pastel/preview.png
- @geenius/ui/themes/presets/soft-pastel/tokens.css
- @geenius/ui/themes/presets/sophisticated-dark/meta.json
- @geenius/ui/themes/presets/sophisticated-dark/preview.png
- @geenius/ui/themes/presets/sophisticated-dark/tokens.css
- @geenius/ui/themes/presets/terminal-mono/meta.json
- @geenius/ui/themes/presets/terminal-mono/preview.png
- @geenius/ui/themes/presets/terminal-mono/tokens.css
- @geenius/ui/themes/presets/warm-earth/meta.json
- @geenius/ui/themes/presets/warm-earth/preview.png
- @geenius/ui/themes/presets/warm-earth/tokens.css
Readme
@geenius/ui
Foundation UI primitives, providers, pages, utilities, and design tokens for Geenius applications.
This package is UI-only. The active support matrix for this run is:
@geenius/ui/react@geenius/ui/react-css@geenius/ui/react-native@geenius/ui/solidjs@geenius/ui/solidjs-css
Deferred UI-kit and backend-metadata folders may remain in the repository, but entries marked inScope: false are excluded from active build, lint, test, Storybook, visual, a11y, and size matrices by @geenius/release-toolkit.
Install
Install the root package and the peer dependency for the framework you use.
pnpm add @geenius/ui react react-dompnpm add @geenius/ui solid-jspnpm add @geenius/ui react-nativeCSS variants expose a stylesheet subpath that must be imported once by the consuming app:
import '@geenius/ui/react-css/styles.css'import '@geenius/ui/solidjs-css/styles.css'Public Surface
The root entrypoint re-exports shared, framework-agnostic pieces only:
import {
DESIGN_TOKENS,
ErrorCode,
GeeniusError,
GeeniusUiError,
SHADOW_SCALE,
UiContextError,
UiRuntimeError,
cn,
cx,
generateId,
} from '@geenius/ui'
import type {
ButtonVariant,
ComponentSize,
GeeniusErrorOptions,
SerializedGeeniusError,
ToastMessage,
UiErrorCode,
} from '@geenius/ui'There is no @geenius/ui/shared subpath and no defineTheme export. Shared helpers come through the root entrypoint.
UiErrorCode is the UI-specific error discriminator union: 'UI_ERROR', 'UI_CONTEXT_ERROR', and 'UI_RUNTIME_ERROR'.
Active variant entrypoints expose parity-aligned components, hooks, providers, and pages:
import {
Button,
Dialog,
UIProvider,
UIShowcasePage,
UITokensPage,
useClickOutside,
useDebounce,
useKeyboard,
useModal,
useToast,
} from '@geenius/ui/react'
import { Button as ReactCssButton } from '@geenius/ui/react-css'
import { Button as NativeButton, UIProvider as NativeUIProvider } from '@geenius/ui/react-native'
import { Button as SolidButton } from '@geenius/ui/solidjs'
import { Button as SolidCssButton } from '@geenius/ui/solidjs-css'The active variants export the same hook set: useModal, useToast, useClickOutside, useDebounce, and useKeyboard.
Usage
React
import { Button, Dialog, DialogContent, DialogTrigger, UIShowcasePage } from '@geenius/ui/react'
export function Example(): JSX.Element {
return (
<>
<Dialog>
<DialogTrigger>
<Button>Open dialog</Button>
</DialogTrigger>
<DialogContent>Ready to ship.</DialogContent>
</Dialog>
<UIShowcasePage />
</>
)
}React CSS
import '@geenius/ui/react-css/styles.css'
import { Button, UIProvider, UITokensPage } from '@geenius/ui/react-css'
export function Example(): JSX.Element {
return (
<UIProvider>
<Button variant="primary">Vanilla CSS</Button>
<UITokensPage />
</UIProvider>
)
}SolidJS
import { Button, Dialog, DialogContent, DialogTrigger, UIShowcasePage } from '@geenius/ui/solidjs'
export function Example() {
return (
<>
<Dialog>
<DialogTrigger>
<Button>Open dialog</Button>
</DialogTrigger>
<DialogContent>Ready to ship.</DialogContent>
</Dialog>
<UIShowcasePage />
</>
)
}SolidJS CSS
import '@geenius/ui/solidjs-css/styles.css'
import { Button, UIProvider, UITokensPage } from '@geenius/ui/solidjs-css'
export function Example() {
return (
<UIProvider>
<Button variant="primary">Vanilla CSS</Button>
<UITokensPage />
</UIProvider>
)
}React Native
import { Button, UIProvider, UIShowcasePage } from '@geenius/ui/react-native'
export function Example() {
return (
<UIProvider>
<Button variant="primary">Continue</Button>
<UIShowcasePage />
</UIProvider>
)
}Themes
Theme presets are prepared --gn-* token overrides from @geenius/tokens for the active web variants. Import a preset after the base stylesheet to use managed mode:
import '@geenius/ui/react-css/styles.css'
import '@geenius/ui-shared/themes/presets/sophisticated-dark/tokens.css'Tailwind variants can also load optional preset utilities when the preset ships them:
import '@geenius/ui-shared/themes/presets/glassmorphism/tailwind.css'Ejected mode copies the preset into the app so the buyer owns future edits:
gxli theme eject sophisticated-dark --to app/src/themeThe full catalog and authoring contract are tracked in .docs/FEATURES/packages/ui/THEME_PRESETS_SPEC.md. The preview grid is generated by the Storybook preset landing task once preview.png assets exist.
Tokens And Classes
All authored colors use OKLCH. Runtime CSS variables are supplied by @geenius/tokens under the stable --gn-* namespace.
CSS-flavored variants use .gui-* BEM-style classes, for example .gui-btn, .gui-btn--primary, and .gui-btn__icon.
Storybook
Active Storybook apps live under apps/storybook-<variant>/.storybook/:
apps/storybook-reactapps/storybook-react-cssapps/storybook-react-nativeapps/storybook-solidjsapps/storybook-solidjs-css
They use stock Storybook v10 architecture plus the shared @geenius/storybook app wiring. Legacy v1 SPA shells, defineSurface, storybookShell.tsx, and storyRegistry.tsx are not part of the current contract.
Development
pnpm build
pnpm lint
pnpm lint:apps
pnpm type-check
pnpm test
pnpm test:gauntlet
pnpm test:allThe PR-blocking suite is pnpm test:gauntlet: lint, app lint, publish lint, type-check, unit/cross-variant tests, size budgets, supply-chain audit, and license checks.
The full release suite is pnpm test:all: gauntlet, active Storybook build/smoke, UI-only DB conformance and migration guards, e2e, a11y, visual regression, performance smoke, and coverage reporting.
Use pnpm test:mutation for the weekly mutation layer and pnpm sbom to generate CycloneDX SBOM artifacts.
Documentation
Deep requirements and support-loop tracking live in the repository-level docs:
.docs/PRDS/packages/PACKAGE_UI_PRD.md.docs/PLANS/packages/PKG_UI_PLAN.md.docs/DOCS/PACKAGES/UI.md.docs/FEATURES/packages/ui/FEATURES.md
License
FSL-1.1-Apache-2.0.