Opinionated React component library forked from MUI Base UI, styled with @tale-ui/core design tokens.
Components are headless by nature (courtesy of Base UI) with styles applied separately via @tale-ui/react-styles.
| Package | Description |
|---|---|
@tale-ui/react |
Headless component primitives (Base UI fork) |
@tale-ui/react-styles |
CSS layer using @tale-ui/core design tokens |
@tale-ui/utils |
Shared utilities (Base UI utils fork) |
npm install @tale-ui/react @tale-ui/react-stylesRequirements: React 17, 18, or 19. Node 22+.
Import a component and its styles:
import { Button } from '@tale-ui/react/button';
import '@tale-ui/react-styles/button';
export function MyButton() {
return <Button className="tale-button tale-button--primary">Click me</Button>;
}Or import all styles at once:
import '@tale-ui/react-styles';Accordion, Alert Dialog, Autocomplete, Avatar, Button, Checkbox, Checkbox Group, Collapsible, Combobox, Context Menu, Dialog, Drawer, Field, Fieldset, Form, Input, Menu, Menubar, Meter, Navigation Menu, Number Field, Popover, Preview Card, Progress, Radio, Radio Group, Scroll Area, Select, Separator, Slider, Switch, Tabs, Toast, Toggle, Toggle Group, Toolbar, Tooltip
Styles live in packages/styles/src/ and are separate from component source. Components use BEM class names prefixed with tale-:
.tale-button { ... }
.tale-button--primary { ... } /* variant */
.tale-button--sm { ... } /* size */
.tale-button[data-disabled] { opacity: 0.45; }State is exposed via Base UI's data-* attributes — data-disabled, data-open, data-checked, data-selected, data-highlighted, and others — which can be targeted directly in CSS.
pnpm install # install all workspace deps
pnpm start # install + launch playground
pnpm playground:dev # run vite playground
pnpm storybook # run storybook
pnpm build # build all packages
pnpm test:jsdom # unit tests (jsdom)
pnpm test:chromium # unit tests (browser)
pnpm typescript # type check
pnpm eslint # lintPublishing is automated from GitHub Releases via .github/workflows/release-publish-npm.yml.
Requirements:
- Repository secret
NPM_TOKENwith publish permissions for the@tale-uinpm scope. - Create a GitHub release tag in the format
vX.Y.Z(example:v0.0.3).
When a release is published, the workflow:
- Syncs
@tale-ui/utils,@tale-ui/react, and@tale-ui/react-stylesto the same version from the release tag. - Publishes each package to npm (skips any package/version that already exists).
git remote add upstream https://github.com/mui/base-ui
git fetch upstream
git cherry-pick <commit>MIT