@pierre/diffs
Version:
87 lines (62 loc) • 1.99 kB
Markdown
# Diffs, from Pierre
`@pierre/diffs` is an open source diff and file rendering library built on
[Shiki](https://shiki.style/). It's super customizable and packed with the
features you need. Made with love by
[The Pierre Computer Company](https://pierre.computer). Available as vanilla
JavaScript and React components.
**View examples and read documentation on [Diffs.com](https://diffs.com).**
## Features
- Diff file versions, patches, and arbitrary files
- Split or stacked layout
- Automatically adapts to Shiki themes
- Supports light and dark mode
- Options for diff highlight styles, in-line highlighting, wrapping, line
numbers, and more
- Supports custom fonts and `font-feature-settings`
- Flexible annotation framework for injecting comments, annotations, and more
- Add your own accept/reject changes UI
- Select and highlight lines
## Install
```bash
bun i @pierre/diffs
```
## Development
Technically you can use the package manager of your choice, but we use
[bun](https://bun.sh/).
```bash
# From the root of the mono repo: setup dependencies
bun install
# Start the demo vite test server
moonx demo:dev
# To run the docs (diffs site)
moonx docs:dev-diffs
```
### Testing
```bash
# Run tests and related command from within the package directory
bun test
# Update snapshots
bun test --update-snapshots
# Type checking
moonx diffs:typecheck
```
Tests are located in the `test/` folder and use Bun's native testing framework
with snapshot support.
## Publishing
**Applicable to the Pierre team only.**
```bash
# You may need to login with npm first:
npm login
# Always run publish from within the package directory
cd packages/diffs
bun publish
```
## Building the sprite
The diff UI uses an SVG sprite built from `@pierre/icons`. From the monorepo
root:
```bash
moonx root:icons
```
This reads SVGs from `node_modules/@pierre/icons/svg` and writes
`packages/diffs/src/sprite.ts`. Run after updating `@pierre/icons` or changing
`sprite.config.js`.