No description
Find a file
Steve Ruiz 22329c51fc
[improvement] More selection logic (#1806)
This PR includes further UX improvements to selection.

- clicking inside of a hollow shape will no longer select it on pointer
up
- clicking a shape's filled label will select it on pointer down
- clicking a shape's empty label will select it on pointer up
- clicking and dragging a selected arrow is now better limited to its
body, not its bounds
- arrows will no longer bind to labels

### Text labels

A big change here relates to text labels. Previously, we had listeners
set on the text label elements; I've removed these and we now check the
actual label bounds geometry for a hit. For geo shapes, this geometry is
now placed correctly based on the alignment / vertical alignment of the
label.

- Clicking on a label with text in it will select the shape on pointer
down.
- Clicking on an empty text label will select the shape on pointer up.

## Hollow shapes

Previously, shapes with `fill: none` were also being selected on pointer
up. I've removed that logic because it was producing wrong-feeling
selections too often. We now select these shapes only when clicking on
the label (as mentioned above) or when clicking on the edges of the
shape. This is in line with the original behavior (currently on
tldraw.com, prior to the earlier PR that updated selection logic).

## Arrows

Arrows still hit the inside of hollow shapes, using the "smallest
hovered" logic previously used for pointer-up selection on hollow
shapes. They also now correctly do so while ignoring text labels.

### Change Type

- [x] `minor` — New feature

### Test Plan

1. try selecting geo shapes, nested geo shapes, arrows and shapes with
labels or without labels

- [x] Unit Tests
2023-08-13 15:55:24 +00:00
.github Add cloud shape (#1708) 2023-07-07 15:32:08 +00:00
.husky Fix VS Code commits failing on bublic? (#1680) 2023-06-30 12:25:16 +00:00
.yarn Styles API (#1580) 2023-06-16 10:33:47 +00:00
apps [improvement] More selection logic (#1806) 2023-08-13 15:55:24 +00:00
assets [feature] Add val town embed (#1777) 2023-07-31 15:44:33 +00:00
config Revert "Update dependencies (#1613)" (#1617) 2023-06-19 09:49:44 +00:00
docs [improvement] More selection logic (#1806) 2023-08-13 15:55:24 +00:00
packages [improvement] More selection logic (#1806) 2023-08-13 15:55:24 +00:00
scripts (chore) bump (#1744) 2023-07-18 10:19:28 +00:00
.eslintignore untrack generated files (#1646) 2023-06-24 08:22:42 +00:00
.eslintplugin.js transfer-out: transfer out 2023-04-25 12:01:25 +01:00
.eslintrc.js tldraw zero - package shuffle (#1710) 2023-07-17 21:22:34 +00:00
.gitignore untrack generated files (#1646) 2023-06-24 08:22:42 +00:00
.ignore untrack generated files (#1646) 2023-06-24 08:22:42 +00:00
.prettierignore untrack generated files (#1646) 2023-06-24 08:22:42 +00:00
.prettierrc Revert "Update dependencies (#1613)" (#1617) 2023-06-19 09:49:44 +00:00
.yarnrc.yml lite: tweak lockfile name 2023-04-25 12:01:38 +01:00
CHANGELOG.md Update CHANGELOG.md [skip ci] 2023-07-04 14:21:37 +00:00
CODE_OF_CONDUCT.md transfer-out: transfer out 2023-04-25 12:01:25 +01:00
CONTRIBUTING.md Add contributor license agreement. (#1556) 2023-06-08 12:45:44 +00:00
lazy.config.ts untrack generated files (#1646) 2023-06-24 08:22:42 +00:00
lerna.json (2/2) Add content to Tools docs page. (#1721) 2023-07-10 08:43:58 +00:00
LICENSE transfer-out: transfer out 2023-04-25 12:01:25 +01:00
package.json (chore) bump (#1744) 2023-07-18 10:19:28 +00:00
public-yarn.lock remove yjs example (#1795) 2023-08-04 16:23:38 +00:00
README.md tldraw zero - package shuffle (#1710) 2023-07-17 21:22:34 +00:00

tldraw

tldraw

Welcome to the public monorepo for tldraw.

What is tldraw?

tldraw is a collaborative digital whiteboard available at tldraw.com. Its editor, user interface, and other underlying libraries are open source and available in this repository. They are also distributed on npm. You can use tldraw to create a drop-in whiteboard for your product or as the foundation on which to build your own infinite canvas applications.

Learn more at tldraw.dev.

Note

This repo contains source code for the current version of tldraw. You can find the source for the original version here.

Installation & Usage

To learn more about using tldraw in your React application, follow our guide here or see the examples sandbox.

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

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

Local development

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.

Examples

Our development server contains several examples that demonstrates different ways that you can customize tldraw or use its APIs. Each example is found in the apps/examples folder.

  • eg: localhost:5420 for the basic example.
  • eg: localhost:5420/api for the API example.

To learn more about using tldraw, visit our docs.

About this repository

Top-level layout

This repository's contents is divided across four primary sections:

  • /apps contains the source for our applications
  • /packages contains the source for our public packages
  • /scripts contains scripts used for building and publishing
  • /assets contains icons and translations relied on by the app
  • /docs contains the content for our docs site at tldraw.dev

Applications

Packages

  • assets: a library for working with tldraw's fonts and translations
  • editor: the tldraw editor
  • state: a signals library, also known as signia
  • store: an in-memory reactive database
  • tldraw: the main tldraw package containing both the editor and the UI
  • tlschema: shape definitions and migrations
  • utils: low-level data utilities shared by other libraries
  • validate: a validation library used for run-time validation

Community

Have questions, comments or feedback? Join our discord or start a discussion.

Distributions

You can find tldraw on npm here.

At the moment the tldraw package is in alpha. We also ship a canary version which is always up to date with the main branch of this repo.

License

The source code for various apps and packages in this repository (as well as our 2.0+ distributions and releases) are currently licensed under Apache-2.0. These licenses are subject to change in our upcoming 2.0 release. If you are planning to use tldraw in a commercial product, please reach out at hello@tldraw.com.

Contribution

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

Contact

Find us on Twitter at @tldraw or email hello@tldraw.com. You can also join our discord for quick help and support.