No description
Find a file
David Sheldrick 48512995b4
Prevent wobble during viewport following (#3695)
This revives the old 'derived camera' idea to prevent cursor wobbling
during viewport following.

Before this PR we updated the camera on a tick during viewport
following, but the shapes and cursors were not moving on the same tick
(we tried that during the perf work and it was all kinds of
problematic). Frankly I've forgotten how we ever managed to eliminate
wobble here in the first place?

Anyway after this PR we derive the camera based on whether or not we are
following a user. When you follow a user it makes it so that your
viewport contains their viewport. If your viewport is not already very
close to their viewport it will animate the initial position, after
which it will 'lock' in place and the derived value will be used from
then on.

This exposed a minor issue in our sync engine: the fact that we send
presence updates in separate websocket messages from document updates.
We get into situations like this

1. user A follows user B
2. user B deletes the current page they are on
3. user B's page deletion diff gets sent
4. user B's presence update gets sent with a new currentPageId
5. user A receives the page deletion
6. user A still thinks that user B is on the old page and doesn't know
how to update the follow state.

So to fix this I made it so that we can (and do) send presence updates
in the same websocket messages as document updates so the server can
handle them atomically.

### Change Type

<!--  Please select a 'Scope' label ️ -->

- [x] `sdk` — Changes the tldraw SDK
- [x] `bugfix` — Bug fix



### Test Plan

1. Add a step-by-step description of how to test your PR here.
8.

- [ ] Unit Tests
- [ ] End to end tests

### Release Notes

- Fixes a bug that caused the cursor & shapes to wiggle around when
following someone else's viewport
2024-05-19 01:22:01 +00:00
.github increase publish script timeouts (#3570) 2024-04-23 13:31:27 +00:00
.husky Don't check api.json files into git (#3565) 2024-04-24 15:58:26 +00:00
.yarn/patches Update auto (#2952) 2024-02-26 10:06:23 +00:00
apps E2E camera tests (#3747) 2024-05-19 01:02:06 +00:00
assets Camera options (#3282) 2024-05-04 17:39:04 +00:00
config "Soft preload" icons (#3507) 2024-04-17 10:57:08 +00:00
packages Prevent wobble during viewport following (#3695) 2024-05-19 01:22:01 +00:00
scripts ban using @internal items in examples (#3746) 2024-05-14 08:49:28 +00:00
templates Bump the npm_and_yarn group across 2 directories with 4 updates (#3731) 2024-05-13 10:54:02 +00:00
.dockerignore unbrivate, dot com in (#2475) 2024-01-16 14:38:05 +00:00
.eslintignore use native structuredClone on node, cloudflare workers, and in tests (#3166) 2024-03-18 17:16:09 +00:00
.eslintplugin.js transfer-out: transfer out 2023-04-25 12:01:25 +01:00
.eslintrc.js ban using @internal items in examples (#3746) 2024-05-14 08:49:28 +00:00
.gitignore Don't check api.json files into git (#3565) 2024-04-24 15:58:26 +00:00
.ignore [dx] Allow vscode to search inside md files by default (#3105) 2024-03-11 14:08:04 +00:00
.prettierignore tooling: prettier ignore pr template (#3210) 2024-03-20 09:56:38 +00:00
.prettierrc Unbiome (#2776) 2024-02-07 16:02:22 +00:00
.yarnrc.yml [dx] Allow vscode to search inside md files by default (#3105) 2024-03-11 14:08:04 +00:00
CHANGELOG.md Update CHANGELOG.md [skip ci] 2024-04-23 11:47:53 +00:00
CLA.md Change licenses to tldraw (#2167) 2023-12-19 10:41:01 +00:00
CODE_OF_CONDUCT.md transfer-out: transfer out 2023-04-25 12:01:25 +01:00
CONTRIBUTING.md dev: swap yarn test and test-dev for better dx (#2773) 2024-02-14 16:05:59 +00:00
lazy.config.ts Don't check api.json files into git (#3565) 2024-04-24 15:58:26 +00:00
lerna.json Don't check api.json files into git (#3565) 2024-04-24 15:58:26 +00:00
LICENSE.md Change licenses to tldraw (#2167) 2023-12-19 10:41:01 +00:00
package.json New migrations again (#3220) 2024-04-15 12:53:42 +00:00
README.md Update READMEs, add form link (#3741) 2024-05-12 20:48:07 +00:00
RELEASES.md css more shapes that need transparent behavior (#3497) 2024-04-16 15:19:30 +00:00
TRADEMARKS.md Change licenses to tldraw (#2167) 2023-12-19 10:41:01 +00:00
yarn.config.cjs Bump Yarn to 4.0.2 and add version constraints (#2481) 2024-01-18 11:09:17 +00:00
yarn.lock Bump the npm_and_yarn group across 2 directories with 4 updates (#3731) 2024-05-13 10:54:02 +00:00

tldraw

Welcome to the public monorepo for tldraw. tldraw is a library for creating infinite canvas experiences in React. It's the software behind the digital whiteboard tldraw.com.

🤵 Interested in purchasing a commercial license for the tldraw SDK? Fill out this form.

Installation

npm i tldraw

Usage

import { Tldraw } from 'tldraw'
import 'tldraw/tldraw.css'

export default function App() {
	return (
		<div style={{ position: 'fixed', inset: 0 }}>
			<Tldraw />
		</div>
	)
}

Learn more at tldraw.dev.

Local development

The local development server will run our examples app. The basic example will show any changes you've made to the codebase.

To run the local development server, first clone this repo.

Install dependencies:

yarn

Start the local development server:

yarn dev

Open the example project at localhost:5420.

License

The tldraw source code and its distributions are provided under the tldraw license. This license does not permit commercial use. To purchase a commercial license or learn more, please fill out this form.

Trademarks

Copyright (c) 2023-present tldraw Inc. The tldraw name and logo are trademarks of tldraw. Please see our trademark guidelines for info on acceptable usage.

Contact

Find us on Twitter/X at @tldraw.

Community

Have questions, comments or feedback? Join our discord or start a discussion. For the latest news and release notes, check out our Substack.

Contribution

Please see our contributing guide. Found a bug? Please submit an issue.

Contributors

Star History

Star History Chart