Skip to content

Commit de169e9

Browse files
committed
.
1 parent ebab655 commit de169e9

27 files changed

Lines changed: 320 additions & 117 deletions

.changeset/bright-icons-glow.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
"@baseui.sh/react": minor
2+
"@wundercorp/baseui": minor
33
---
44

55
Adopt Phosphor Icons as the canonical production icon dependency, migrate built-in component glyphs to Phosphor, add semantic and full-library icon entry points, and preserve circular spinner geometry.

.github/workflows/release.yml

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,38 @@ name: Release
22

33
on:
44
push:
5-
branches: [main]
5+
branches:
6+
- main
67

78
permissions:
89
contents: write
910
id-token: write
1011
pull-requests: write
1112

13+
concurrency:
14+
group: npm-release
15+
cancel-in-progress: false
16+
1217
jobs:
1318
release:
1419
runs-on: ubuntu-latest
1520
steps:
16-
- uses: actions/checkout@v4
17-
- uses: actions/setup-node@v4
21+
- uses: actions/checkout@v6
22+
with:
23+
fetch-depth: 0
24+
25+
- uses: actions/setup-node@v6
1826
with:
19-
node-version: 20
20-
cache: npm
27+
node-version: "24"
2128
registry-url: https://registry.npmjs.org
29+
package-manager-cache: false
30+
31+
- run: npm install --global npm@^11.5.1
2232
- run: npm ci
2333
- run: npm run ci
34+
2435
- uses: changesets/action@v1
2536
with:
2637
publish: npm run release
2738
env:
2839
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
29-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}

README.md

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
# baseui.sh
22

3+
[![npm version](https://img.shields.io/npm/v/@wundercorp/baseui.svg)](https://www.npmjs.com/package/@wundercorp/baseui) [![npm downloads](https://img.shields.io/npm/dm/@wundercorp/baseui.svg)](https://www.npmjs.com/package/@wundercorp/baseui) [![CI](https://github.com/wundercorp/baseui/actions/workflows/ci.yml/badge.svg)](https://github.com/wundercorp/baseui/actions/workflows/ci.yml) [![License](https://img.shields.io/badge/license-Apache--2.0-blue.svg)](LICENSE)
4+
35
A restrained, accessible component library and design language for React product interfaces.
46

57
baseui.sh is maintained as an independent open-source repository. Product applications consume it as a normal package rather than copying dashboard-specific CSS or importing source from another monorepo.
68

79
## Install
810

911
```bash
10-
npm install @baseui.sh/react
12+
npm install @wundercorp/baseui
13+
```
14+
15+
```bash
16+
pnpm add @wundercorp/baseui
17+
yarn add @wundercorp/baseui
18+
bun add @wundercorp/baseui
1119
```
1220

1321
```tsx
14-
import { BaseUIProvider, Button, Card } from "@baseui.sh/react";
15-
import "@baseui.sh/react/styles.css";
22+
import { BaseUIProvider, Button, Card } from "@wundercorp/baseui";
23+
import "@wundercorp/baseui/styles.css";
1624

1725
export function Application() {
1826
return (
@@ -30,7 +38,7 @@ export function Application() {
3038
```text
3139
apps/docs Living component catalogue
3240
examples/vite-react Consumer integration example
33-
packages/react Published @baseui.sh/react package
41+
packages/react Published @wundercorp/baseui package
3442
docs Design, architecture, accessibility, and release guidance
3543
.github CI, release, issue, and contribution automation
3644
.changeset Versioning and changelog metadata
@@ -52,19 +60,19 @@ npm run verify:package
5260
The root package exposes the complete API. Category subpaths make ownership and discovery clearer:
5361

5462
```tsx
55-
import { Button } from "@baseui.sh/react/actions";
56-
import { Field, Input } from "@baseui.sh/react/forms";
57-
import { Dialog } from "@baseui.sh/react/overlays";
58-
import "@baseui.sh/react/styles.css";
63+
import { Button } from "@wundercorp/baseui/actions";
64+
import { Field, Input } from "@wundercorp/baseui/forms";
65+
import { Dialog } from "@wundercorp/baseui/overlays";
66+
import "@wundercorp/baseui/styles.css";
5967
```
6068

6169
Tokens and icons are independently consumable:
6270

6371
```tsx
64-
import { baseUITokens } from "@baseui.sh/react/tokens";
65-
import { Icon, PhosphorIcon } from "@baseui.sh/react/icons";
66-
import { RocketLaunchIcon } from "@baseui.sh/react/phosphor";
67-
import "@baseui.sh/react/tokens.css";
72+
import { baseUITokens } from "@wundercorp/baseui/tokens";
73+
import { Icon, PhosphorIcon } from "@wundercorp/baseui/icons";
74+
import { RocketLaunchIcon } from "@wundercorp/baseui/phosphor";
75+
import "@wundercorp/baseui/tokens.css";
6876

6977
<Icon name="settings" />
7078
<PhosphorIcon icon={RocketLaunchIcon} label="Launch" />
@@ -81,7 +89,7 @@ import "@baseui.sh/react/tokens.css";
8189

8290
## Releasing
8391

84-
Changesets drive package versions and changelogs. Publishing is handled by the release workflow using npm trusted publishing or an `NPM_TOKEN` repository secret. See [RELEASING.md](RELEASING.md).
92+
Changesets drive versions and changelogs. The first package version is published interactively, then GitHub Actions publishes future versions through npm trusted publishing with OIDC and provenance. See [RELEASING.md](RELEASING.md) and [docs/publishing.md](docs/publishing.md).
8593

8694
## Open source
8795

RELEASING.md

Lines changed: 72 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,87 @@
11
# Releasing
22

3-
baseui.sh uses Changesets and npm provenance.
3+
baseui.sh uses Changesets, npm trusted publishing, and npm provenance.
4+
5+
## Package identity
6+
7+
The published package is `@wundercorp/baseui`. Publishing under this name requires control of the npm organization and scope named `baseui.sh`.
8+
9+
If that npm organization is unavailable, rename the package before the first publication. The recommended fallback is `@wundercorp/baseui`.
10+
11+
## One-time bootstrap
12+
13+
Trusted publishing is configured from an existing npm package, so the first version must be published interactively.
14+
15+
1. Create or claim the `baseui.sh` organization on npm.
16+
2. Enable two-factor authentication on the publishing account.
17+
3. Log in and confirm the active account.
18+
4. Validate and inspect the package.
19+
5. Publish version `0.1.0` publicly.
20+
21+
```bash
22+
npm login
23+
npm whoami
24+
npm run release:dry-run
25+
cd packages/react
26+
npm publish --access public --provenance=false
27+
```
28+
29+
The local bootstrap publish disables provenance because npm provenance is generated from supported CI environments. Subsequent automated releases use trusted publishing and include provenance automatically.
30+
31+
## Configure trusted publishing
32+
33+
After the first publication, open the package settings on npm and add a GitHub Actions trusted publisher with these values:
34+
35+
```text
36+
GitHub organization or user: wundercorp
37+
Repository: baseui
38+
Workflow filename: release.yml
39+
Allowed action: npm publish
40+
Environment: leave empty
41+
```
42+
43+
The workflow is `.github/workflows/release.yml`. It uses a GitHub-hosted runner, OIDC permissions, Node 24, and npm 11.5.1 or newer. No `NPM_TOKEN` secret is required after trusted publishing is configured.
44+
45+
After verifying one automated release, configure the npm package to require two-factor authentication and disallow traditional publishing tokens.
446

547
## Pull requests
648

7-
Run `npm run changeset` for any user-visible change to `@baseui.sh/react`. Select patch, minor, or major based on semantic versioning.
49+
Run the following command for every user-visible package change:
850

9-
## Version pull request
51+
```bash
52+
npm run changeset
53+
```
1054

11-
The release workflow opens or updates a version pull request. Merging it updates package versions and changelogs.
55+
Choose patch, minor, or major according to semantic versioning and commit the generated Changeset file with the pull request.
1256

13-
## Publish
57+
## Version pull request
1458

15-
On the next run, the release workflow builds, validates, and publishes the package with public access and provenance.
59+
The release workflow opens or updates a Changesets version pull request on `main`. Merging that pull request updates versions and changelogs.
1660

17-
Repository configuration must provide either npm trusted publishing for the GitHub workflow or an `NPM_TOKEN` secret with publish access to the `@baseui.sh` scope.
61+
On the next workflow run, Changesets publishes the new package version to npm.
1862

19-
## Manual dry run
63+
## Local release checks
2064

2165
```bash
2266
npm ci
23-
npm run ci
24-
npm pack --workspace @baseui.sh/react
25-
npm publish --workspace @baseui.sh/react --dry-run --access public
67+
npm run release:dry-run
68+
npm run verify:consumer
69+
```
70+
71+
Inspect the package that npm would publish:
72+
73+
```bash
74+
npm run release:inspect
75+
```
76+
77+
## Consumer verification
78+
79+
After publishing, verify the public registry from a clean directory:
80+
81+
```bash
82+
mkdir baseui-install-check
83+
cd baseui-install-check
84+
npm init -y
85+
npm install react react-dom @wundercorp/baseui
86+
npm view @wundercorp/baseui version
2687
```

apps/docs/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"check": "tsc -p tsconfig.json --noEmit"
1010
},
1111
"dependencies": {
12-
"@baseui.sh/react": "0.1.0",
12+
"@wundercorp/baseui": "0.1.0",
1313
"react": "^19.0.0",
1414
"react-dom": "^19.0.0"
1515
},

apps/docs/src/components/BaseUIShowcase.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ import {
9191
VisuallyHidden,
9292
type BaseUITheme,
9393
type IconName,
94-
} from "@baseui.sh/react";
94+
} from "@wundercorp/baseui";
9595

9696
type ShowcaseSection =
9797
| "overview"
@@ -309,7 +309,7 @@ function FoundationsSection() {
309309
<Text size="lg">Large body copy for introductions and important explanatory content.</Text>
310310
<Text>Default body copy for product interfaces, forms, and documentation.</Text>
311311
<Text size="sm">Secondary detail and compact supporting information.</Text>
312-
<Inline><Eyebrow>Eyebrow label</Eyebrow><Label>Form label</Label><Code>npm install @baseui.sh/react</Code><Kbd>⌘ K</Kbd></Inline>
312+
<Inline><Eyebrow>Eyebrow label</Eyebrow><Label>Form label</Label><Code>npm install @wundercorp/baseui</Code><Kbd>⌘ K</Kbd></Inline>
313313
</Stack>
314314
</ComponentExample>
315315

@@ -396,7 +396,7 @@ function ActionsSection() {
396396
<ComponentExample title="Links and copy actions">
397397
<Inline gap="lg">
398398
<Link href="#">Documentation</Link>
399-
<CopyButton value="npm install @baseui.sh/react" label="Copy install command" />
399+
<CopyButton value="npm install @wundercorp/baseui" label="Copy install command" />
400400
</Inline>
401401
</ComponentExample>
402402
<ComponentExample title="Tags and removable filters">
@@ -671,7 +671,7 @@ function PatternsSection() {
671671
<ComponentExample title="Accordion and collapsible documentation patterns" fullWidth>
672672
<div id="installation" />
673673
<Stack gap="lg">
674-
<Accordion><AccordionItem title="Installation" description="Add the package and global stylesheet." open><CodeBlock>{`npm install @baseui.sh/react\n\nimport "@baseui.sh/react/styles.css";`}</CodeBlock></AccordionItem><AccordionItem title="Theming" description="Set light, dark, or system mode at the provider boundary."><CodeBlock>{`<BaseUIProvider theme="dark">\n <Application />\n</BaseUIProvider>`}</CodeBlock></AccordionItem><AccordionItem title="Design invariants" description="Rules that should not be overridden in product code."><List divided><ListItem title="Radius" description="4 px across controls, surfaces, and floating layers; circular indicators use the circle token." /><ListItem title="Accent" description="Reserved for primary actions, focus, and active navigation." /><ListItem title="Monospace" description="Used for code, identifiers, measurements, and technical values only." /></List></AccordionItem></Accordion>
674+
<Accordion><AccordionItem title="Installation" description="Add the package and global stylesheet." open><CodeBlock>{`npm install @wundercorp/baseui\n\nimport "@wundercorp/baseui/styles.css";`}</CodeBlock></AccordionItem><AccordionItem title="Theming" description="Set light, dark, or system mode at the provider boundary."><CodeBlock>{`<BaseUIProvider theme="dark">\n <Application />\n</BaseUIProvider>`}</CodeBlock></AccordionItem><AccordionItem title="Design invariants" description="Rules that should not be overridden in product code."><List divided><ListItem title="Radius" description="4 px across controls, surfaces, and floating layers; circular indicators use the circle token." /><ListItem title="Accent" description="Reserved for primary actions, focus, and active navigation." /><ListItem title="Monospace" description="Used for code, identifiers, measurements, and technical values only." /></List></AccordionItem></Accordion>
675675
<Collapsible title="Compact disclosure alias"><Text size="sm">Collapsible provides a concise disclosure API while retaining native details semantics.</Text></Collapsible>
676676
</Stack>
677677
</ComponentExample>

apps/docs/src/main.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { StrictMode } from "react";
22
import { createRoot } from "react-dom/client";
3-
import "@baseui.sh/react/styles.css";
3+
import "@wundercorp/baseui/styles.css";
44
import "./showcase.css";
55
import { App } from "./App.js";
66

docs/icons.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
# Icons
22

3-
baseui.sh uses Phosphor Icons as its canonical icon family. `@phosphor-icons/react` is a production dependency of `@baseui.sh/react`.
3+
baseui.sh uses Phosphor Icons as its canonical icon family. `@phosphor-icons/react` is a production dependency of `@wundercorp/baseui`.
44

55
## Semantic icons
66

77
Use `Icon` for stable concepts owned by the design system. Semantic names isolate application code from upstream glyph naming changes.
88

99
```tsx
10-
import { Icon } from "@baseui.sh/react/icons";
10+
import { Icon } from "@wundercorp/baseui/icons";
1111

1212
<Icon name="search" />
1313
<Icon name="warning" weight="fill" label="Warning" />
@@ -18,16 +18,16 @@ Decorative icons are hidden from assistive technology. Set `label` when the icon
1818
## Full Phosphor library
1919

2020
```tsx
21-
import { PhosphorIcon } from "@baseui.sh/react/icons";
22-
import { RocketLaunchIcon } from "@baseui.sh/react/phosphor";
21+
import { PhosphorIcon } from "@wundercorp/baseui/icons";
22+
import { RocketLaunchIcon } from "@wundercorp/baseui/phosphor";
2323

2424
<PhosphorIcon icon={RocketLaunchIcon} label="Launch" />
2525
```
2626

2727
For server components and SSR-only environments:
2828

2929
```tsx
30-
import { RocketLaunchIcon } from "@baseui.sh/react/phosphor/ssr";
30+
import { RocketLaunchIcon } from "@wundercorp/baseui/phosphor/ssr";
3131
```
3232

3333
For the smallest development graph, consumers may import individual upstream glyph modules directly from `@phosphor-icons/react/dist/csr/<IconName>`.

docs/integration.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,19 @@
33
## Standard React application
44

55
```bash
6-
npm install @baseui.sh/react
6+
npm install @wundercorp/baseui
77
```
88

99
Import the stylesheet once near the application entry point:
1010

1111
```tsx
12-
import "@baseui.sh/react/styles.css";
12+
import "@wundercorp/baseui/styles.css";
1313
```
1414

1515
Wrap the product surface:
1616

1717
```tsx
18-
import { BaseUIProvider } from "@baseui.sh/react";
18+
import { BaseUIProvider } from "@wundercorp/baseui";
1919

2020
root.render(
2121
<BaseUIProvider theme="system">
@@ -29,8 +29,8 @@ root.render(
2929
Category imports keep feature ownership explicit:
3030

3131
```tsx
32-
import { Button } from "@baseui.sh/react/actions";
33-
import { Field, Input } from "@baseui.sh/react/forms";
32+
import { Button } from "@wundercorp/baseui/actions";
33+
import { Field, Input } from "@wundercorp/baseui/forms";
3434
```
3535

3636
## Existing applications
@@ -50,7 +50,7 @@ Use a normal workspace dependency during development:
5050
```json
5151
{
5252
"dependencies": {
53-
"@baseui.sh/react": "workspace:*"
53+
"@wundercorp/baseui": "workspace:*"
5454
}
5555
}
5656
```

docs/naming.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Naming and project identity
22

3-
baseui.sh is the project and design-language name. The npm package is `@baseui.sh/react`.
3+
baseui.sh is the project and design-language name. The npm package is `@wundercorp/baseui`.
44

55
There are existing open-source projects named Base UI and Base Web, including packages using `@base-ui/react` and `baseui`. baseui.sh must remain visually and verbally distinct and must not imply affiliation, compatibility, endorsement, or shared maintainership.
66

0 commit comments

Comments
 (0)