This is a monorepo managed using pnpm workspaces and lerna.
For more information see the readme for each package:
| Package | Version | README | CHANGELOG |
|---|---|---|---|
| abstract-image | README | CHANGELOG | |
| abstract-chart | README | CHANGELOG | |
| abstract-document | README | CHANGELOG | |
| abstract-3d | README | CHANGELOG | |
| abstract-sheet | README | CHANGELOG |
There is also a package with examples:
We use the tool manager mise to install some tools (node, pnpm — see .tool-versions).
You will need to do a one-time installation of mise itself if you do not already have it installed:
# Install mise
$ curl https://mise.run | sh
$ echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc(use mise activate zsh instead if you use zsh)
Then run this inside the project folder to install the pinned tools (restart your shell first if you just installed mise):
mise installFor development of the react components, use pnpm storybook to start storybook in development mode.
For the other packages, use pnpm test to test them.
Linting uses oxlint with type-aware rules (pnpm lint). The oxc VS Code extension needs "oxc.typeAware": true and "oxc.configPath": "./oxlint.config.js" (set in .vscode/settings.json) to surface the same type-aware errors live in the editor — nested config auto-discovery doesn't reliably load the JS config file, so the path must be given explicitly.
First update changelog.
The packages are published on npmjs.org. To publish run this command:
pnpm publish-npm
It will build the packages and call lerna publish which will figure out which packages has changed, ask for new versions of them, and then publish them. Needs an npm auth token in ~/.npmrc and, if 2FA is enabled, an OTP, which it will prompt you for — if you enter a wrong or expired one, it re-prompts instead of aborting (rerunning the publish step is safe, it skips packages already on the registry).
If your npm 2FA uses a passkey/security key (e.g. fingerprint) instead of an authenticator app, run pnpm publish-npm --web instead. It publishes each not-yet-published package with npm publish (packed with pnpm pack first, so workspace:^ dependencies become real versions), and npm asks you to authenticate each publish in the browser. If a publish fails, just rerun: already published versions are skipped.
pnpm 11+ reads auth tokens from ~/.config/pnpm/auth.ini (Linux) ~/Library/Preferences/pnpm/auth.ini (macOS) before ~/.npmrc, so a stale //registry.npmjs.org/:_authToken there makes pnpm whoami/publish fail with 401 even right after npm login (which only updates ~/.npmrc). Remove that line from auth.ini so pnpm falls back to ~/.npmrc.
If you are not logged in to npm, pnpm publish-npm runs npm login for you first. npm login prints a URL and waits for you to press Enter before opening it in your browser — on WSL, npm doesn't know how to launch a Windows browser by default, so configure it once:
npm config set browser "cmd.exe /c start"After that, pressing Enter at the npm login prompt opens the login page in your Windows default browser.