Commit graph

1092 commits

Author SHA1 Message Date
David Sheldrick
5061240912
[chore] Bump nanoid (#1349)
I need to mock nanoid for the ephemeral state fuzz tests, to create
repeatable test runs. In order to do that properly it needs to have a
consistent version among all our packages.

At the same time I'm removing some old unused params in AppOptions

### Change Type

<!-- 💡 Indicate the type of change your pull request is. -->
<!-- 🤷‍♀️ If you're not sure, don't select anything -->
<!-- ✂️ Feel free to delete unselected options -->

<!-- To select one, put an x in the box: [x] -->

- [ ] `patch` — Bug Fix
- [ ] `minor` — New Feature
- [x] `major` — Breaking Change

- [ ] `dependencies` — Dependency Update (publishes a `patch` release,
for devDependencies use `internal`)

- [ ] `documentation` — Changes to the documentation only (will not
publish a new version)
- [ ] `tests` — Changes to any testing-related code only (will not
publish a new version)
- [ ] `internal` — Any other changes that don't affect the published
package (will not publish a new version)


### Release Notes

- Remove unused userId and instanceId props from AppOptions
2023-05-11 11:55:00 +00:00
Steve Ruiz
dfaa536370
[fix] tabs in text exports (#1323)
This PR fixes the appearance of tabs in labels and text when exporting
images.

This involved refactoring our CSS-text-to-multiline-SVG-text.

### Test Plan

1. Create a text or geo shape with a label that includes a tab character
at the beginning of a line (e.g. jsx)
2. Copy the image as SVG and paste

### Release Note

- Fixes a bug with trailing tab characters in text labels on image
export
2023-05-11 09:20:48 +00:00
Orange Mug
88e6f441b1
Fix "copy as png" in firefox when dom.events.asyncClipboard.clipboardItem is enabled (#1342)
Fixes the issue outlined in #1325.

### Test Plan
In firefox

1. Enable clipboard in firefox by going to `about:config` and enabling
`dom.events.asyncClipboard.clipboardItem` (remember to turn it off
afterwards)
2. Test that `copy-as -> PNG` copies the image

In other browsers

1. Test that `copy-as -> PNG` still copies the image

### Release Notes

- Fix "copy as png" in firefox when
`dom.events.asyncClipboard.clipboardItem` is enabled
2023-05-11 06:59:45 +00:00
alex
71aef1764d
Rework the assets package for strategy-specific imports (#1341)
The assets package now only exports esm-formatted .js files. There's one
for each strategy - import-based, and meta.url-based. These are directly
generated as .js and .d.ts files rather than generated as .ts and
converted to js/dts through other means.

As this package depends on esm-specific stuff to function, we don't
publish a cjs version any more.

### Change Type

<!-- 💡 Indicate the type of change your pull request is. -->
<!-- 🤷‍♀️ If you're not sure, don't select anything -->
<!-- ✂️ Feel free to delete unselected options -->

<!-- To select one, put an x in the box: [x] -->

- [ ] `patch` — Bug Fix
- [ ] `minor` — New Feature
- [x] `major` — Breaking Change

- [ ] `dependencies` — Dependency Update (publishes a `patch` release,
for devDependencies use `internal`)

- [ ] `documentation` — Changes to the documentation only (will not
publish a new version)
- [ ] `tests` — Changes to any testing-related code only (will not
publish a new version)
- [ ] `internal` — Any other changes that don't affect the published
package (will not publish a new version)

### Release Notes

- [dev] If you're using the `@tldraw/assets` package, you need to update
your code to `import { getAssetUrlsByImport } from
'@tldraw/assets/imports'` instead of `import { getBundlerAssetUrls }
from '@tldraw/assets`
2023-05-09 16:08:38 +00:00
David Sheldrick
67f5c25c73
[chore] move schema construction to tlschema package (#1334)
Our private tlsync package currently depends on the editor package,
which balloons the size of the cloudflare worker. It also makes it so
that any change to any package triggers a worker refresh, which makes
working on multiplayer stuff kinda miserable.

This is the first PR to fix that problem.

The second PR will need to resolve TLSyncClient's dependency on the
debugFlags somehow. Easiest would be to just remove the offending flag,
but we might want cross-bublic debug flags at some point in the future
so I'll try to find a low-cost way to make that happen while making
`tlsync` not depend on `editor`.

cc @TodePond since you added the flag in question
(`tldrawResetConnectionEveryPing`)

### Release Note

- internal moving stuff around
2023-05-09 14:40:58 +00:00
Steve Ruiz
bb96852b9d
[feature] check-box geo shape (#1330)
This PR adds a `check-box` geo shape. 

![Kapture 2023-05-08 at 15 31
49](https://user-images.githubusercontent.com/23072548/236853749-99ba786f-73a4-4b65-86ca-f2cdac61a903.gif)

It also improves some logic around the `onClick` shape util handler and
some surprisingly related fixes to point hit testing.

### Test Plan

1. Create a geo shape
2. Set it as a checkbox style
3. *easter egg* double click while holding alt to toggle between
check-box and rectangle

- [x] Unit Tests

### Release Note

- Adds checkbox geo shape.
2023-05-09 13:32:04 +00:00
Steve Ruiz
2a36d6342c
[tiny] rename show menu paste (#1332)
This PR renames `showUiPaste` to `showMenuPaste`, since we use
`MENU_PASTE` elsewhere.
2023-05-08 21:06:10 +01:00
Steve Ruiz
15b705800f
[fix] update useTransform.ts (#1327)
This PR fixes the way that rotation is handled in `useTransform`.

Before:
<img width="756" alt="image"
src="https://user-images.githubusercontent.com/23072548/236692574-7fcf94bd-76e2-4584-9ea0-4ea4aa6c7ffc.png">
After:
<img width="738" alt="image"
src="https://user-images.githubusercontent.com/23072548/236692585-f1970c9e-041c-470c-8bdb-af975ef48246.png">

### Test Plan

1. Select a bunch of shapes
2. Rotate the selection
3. The selection box should be correct
2023-05-07 18:24:06 +01:00
Steve Ruiz
aab47a1474
[improvement] dragging start distance on coarse pointer (#1220)
This PR slightly increases the distance needed to initiate a drag when
using a coarse pointer.
2023-05-05 14:48:49 +00:00
Steve Ruiz
f315ea2250
[fix] SVG export for arrows with labels but no arrowheads (#1229)
This PR fixes a bug where arrow shapes without arrowheads would not mask
their labels when exporting images.
2023-05-05 14:17:01 +00:00
Lu[ke] Wilson
dc16ae1b12
remove svg layer, html all the things, rs to tl (#1227)
This PR has been hijacked! 🗑️🦝🦝🦝

The <Canvas> component was previously split into an <SVGLayer> and an
<HTMLLayer>, mainly due to the complexity around translating SVGs.
However, this was done before we learned that SVGs can have overflow:
visible, so it turns out that we don't really need the SVGLayer at all.
This PR now refactors away SVG Layer.

It also updates the class name prefix in editor from `rs-` to `tl-` and
does a few other small changes.

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-05-05 14:14:42 +00:00
Lu[ke] Wilson
b1569c97e0
add docs for TLShapeUtil (#1215)
This PR adds docs for the methods in the TLShapeUtil class.
I think that it's a good page to have docs on, as it shows people what's
possible with the custom shape API.

Currently, our docs are not showing `@param` info for lots of methods,
including the ones added in this PR.
I'll do fix for that in a follow-up PR, so that it's easier to review.

---

Note: Moving forward, we probably want to consider **_where_** these
docs are shown, and how we achieve that.

For example, do we put the docs for these methods in:
* The docs page for the `TLShapeUtil` class?
* The docs pages for the handler types, eg:
[`OnResizeHandler`](http://localhost:3000/gen/editor/OnResizeHandler-type)?
* Both?

Right now, I opted for putting them in the the TLShapeUtil class, as it
keeps them all in one place, and it's what we already do for some
others.

We should consider both - what works best for the docs? and what works
best for code editors?

---

This PR also includes a fix to our pre-commit step that @SomeHats did.
2023-05-05 14:05:25 +00:00
alex
880f82e658
New vite-based examples app (#1226)
Right now this examples app looks exactly the same as our old examples
app, but there are a couple of tiny differences:
- We use `vite` instead of our own esbuild setup for development and
bundling
- We use `@tldraw/assets` for smart asset hashing instead of copying the
assets to a public folder

You can use `@tldraw/assets` with vite with a bunch of extra config, but
it (plus a bunch of other bundlers) also support a special syntax for
specifying asset urls: `new URL('./my/asset.svg',
import.meta.url).href`. This approach is more standards-complient, but
doesn't work with every bundler just yet. This diff also adds a
url-based version of `@tldraw/assets`, although I'd like to tweak the
entry point - right now you need to import from
`@tldraw/assets/lib/urls`, but i'd like to find a way to get this to
`@tldraw/assets/urls` or something at some point.

There are a couple other extra fixes in here:
- vscode builds were broken, they're fixed now!
- there's also a little tweak to the `getBundlerAssetUrls` API to allow
passing in a function instead of an object for URL formatting
- there are new internal-only functions for injecting asset urls
globally instead of passing them in via react props. this means we can
get the benefits of cacheable URLs without having to clutter our
examples by passing them in
2023-05-05 13:10:36 +00:00
Steve Ruiz
0d16942222 readmes 2023-05-04 13:47:56 +01:00
David Sheldrick
b63e871420
[fix] publish (#1222)
- fixes an invalid usage of process.env in the editor package
- fixes some bublic paths in the publishing infra code
2023-05-04 09:25:31 +00:00
David Sheldrick
f44f6e2c9f
[fix] typo in isFocusingInput (#1221)
Fixes
https://discord.com/channels/859816885297741824/1103050527731884082/1103052355110457354
2023-05-03 15:57:59 +00:00
David Sheldrick
00e3d20dc8
[feat] new LiveCollaborators behind feature flag (#1219)
In this PR I'm adding new versions of the `LiveCollaborators` and
`Collaborators` components for the ephemeral state work. They are behind
a feature flag for now.
2023-05-03 13:48:46 +00:00
Steve Ruiz
9fd0803428
[fix] collaborator render order (#1213)
This PR fixes a bug where collaborator cursors would appear below other
overlay content, such as selection boxes.
2023-05-03 08:29:04 +00:00
alex
14b1f24eb2
update @radix-ui/react-popover to 1.0.6-rc.5 (#1206)
Temporarily moving us to a prerelease of this dep. This resolves an
issue where the mobile style menu popover couldn't be closed by tapping
the style button again. See
https://github.com/radix-ui/primitives/issues/2105 for details
2023-05-03 08:28:55 +00:00
David Sheldrick
f5c5b05dc7
[chore] update lazyrepo (#1211) 2023-05-02 12:25:26 +00:00
Steve Ruiz
5ab93eef5f
[fix] pick a better default language (#1201)
This PR improves the language selection. 

Previously, we would miss the user's languages that included a locale.
For example, if a user's languages were `['en-US', 'fr'], then they
would get 'fr' because 'en-US' wasn't in our table—though 'en' was!

We were already doing the splitting elsewhere but now we do it here,
too.

### Release Note

- Improves default language

---------

Co-authored-by: Lu[ke] Wilson <l2wilson94@gmail.com>
2023-04-29 23:06:02 +00:00
Orange Mug
00d4648ef5
Use strokePathData for <ShapeFill/> path to avoid bugs in the inner path algo (#1207)
This avoids some bug with fills in the new inky path algo. This is a
temp fix as it reuses the outer path, but it's fairly broken at the
moment so probably a good hotfix.

Before (notice the background fill busting the bounds of the shape) 

<img width="575" alt="Screenshot 2023-04-27 at 16 54 53"
src="https://user-images.githubusercontent.com/235915/234921462-3f2d81a4-f209-427e-ba33-bfc6b919bba9.png">

After

<img width="575" alt="Screenshot 2023-04-27 at 16 55 24"
src="https://user-images.githubusercontent.com/235915/234921460-7f36ab3e-ec97-4c4a-8634-868bf8eec791.png">

This isn't perfect because we're filling it with this double fill shape,
which I assume has perf issues.

<img width="1058" alt="Screenshot 2023-04-27 at 17 08 28"
src="https://user-images.githubusercontent.com/235915/234921788-f400bac0-fd2c-469a-beec-3e0a0d2f309d.png">

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-04-29 22:58:18 +00:00
Orange Mug
77175a9dc4
Added pHYs to import/export of png images (#1200)
Added the following

 - Always export pngs with a pixel-ratio of `2`
- Added the `pHYs` png metadata chunk describing the pixel ratio so it
opens with the correct size
 - When importing PNGs read the `pHYs` chunk for the sizing info
 
All the exporting is done via just modifying the bytes from the browsers
native image handling.


https://user-images.githubusercontent.com/235915/234309015-19f39f3a-66ce-4ec2-b7d0-b34a07ed346b.mov

I've also added `ANALYZE=true` option to get the build metadata from
esbuild on boot of `yarn dev` which allow me to see the bundle size info
in https://esbuild.github.io/analyze/

![esbuild github
io_analyze_](https://user-images.githubusercontent.com/235915/234310302-c6fe8109-c82d-480a-8c65-c7638b09e71e.png)

You can see that `crc` adds about `4.4kb`

<img width="280" alt="Screenshot 2023-04-25 at 15 33 26"
src="https://user-images.githubusercontent.com/235915/234310669-99e3e787-ddca-4ad2-81cf-b4a541631d62.png">

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-04-29 22:10:01 +00:00
David Sheldrick
731da1bc77
derived presence state (#1204)
This PR adds

- A new `TLInstancePresence` record type, to collect info about the
presence state in a particular instance of the editor. This will
eventually be used to sync presence data instead of sending
instance-only state across the wire.
- **Record Scopes**

`RecordType` now has a `scope` property which can be one of three
things:
- `document`: the record belongs to the document and should be synced
and persisted freely. Currently: `TLDocument`, `TLPage`, `TLShape`, and
`TLAsset`
- `instance`: the record belongs to a single instance of the store and
should not be synced at all. It should not be persisted directly in most
cases, but rather compiled into a kind of 'instance configuration' to
store alongside the local document data so that when reopening the
associated document it can remember some of the previous instance state.
Currently: `TLInstance`, `TLInstancePageState`, `TLCamera`, `TLUser`,
`TLUserDocument`, `TLUserPresence`
- `presence`: the record belongs to a single instance of the store and
should not be persisted, but may be synced using the special presence
sync protocol. Currently just `TLInstancePresence`

This sets us up for the following changes, which are gonna be pretty
high-impact in terms of integrating tldraw into existing systems:

- Removing `instanceId` as a config option. Each instance gets a
randomly generated ID.
- We'd replace it with an `instanceConfig` option that has stuff like
selectedIds, camera positions, and so on. Then it's up to library users
to get and reinstate the instance config at persistence boundaries.
- Removing `userId` as config option, and removing the `TLUser` type
altogether.
- We might need to revisit when doing auth-enabled features like locking
shapes, but I suspect that will be separate.
2023-04-27 18:03:19 +00:00
Orange Mug
da613ea6ef
Fix to not ignore the userId option for <Tldraw/> component in @tldraw/tldraw (#1205)
The `userId` prop in the `<Tldraw/>` component from the `@tldraw/tldraw`
was previously ignored. This PR fixes that to make it operational again.
2023-04-27 10:03:21 +00:00
David Sheldrick
4c65cb8db4
[lite] upgrade lazyrepo (#1198)
* upgrade lazyrepo

* update lockfile + lazy.config
2023-04-25 14:32:17 +01:00
alex
29ed921c67 transfer-out: transfer out 2023-04-25 12:01:25 +01:00
alex
ec84f64e63 lite: delete all 2023-04-21 16:53:31 +01:00
Steve Ruiz
325d494a8a 1.29.2 2023-04-01 07:09:12 +01:00
Steve Ruiz
9967b281be
Update useKeyboardShortcuts.tsx (#1181) 2023-04-01 06:29:06 +01:00
alex
784b4503aa
alex/v2-file-notice: quick note when trying to open a v1 file (#1177) 2023-03-24 14:42:28 +00:00
Mark Eibes
bd124dc308
Update README.md (#1168) 2023-03-23 10:56:30 +00:00
alex
1051f4c28c
Add notice that tldraw will be down for maintenance (#1174)
* alex/offline-notice: offline notice

* alex/offline-notice: cleanup

* update copy

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-03-21 11:45:47 +00:00
Steve Ruiz
ef089bf0f6
Update StyleMenu.tsx (#1172) 2023-03-20 09:33:55 +00:00
Steve Ruiz
fd9200c200 1.29 2023-03-10 11:42:43 +00:00
Steve Ruiz
d0e265fc80
more user select (#1163) 2023-03-10 11:20:10 +00:00
Jang Min
257a7e750c
fix: add PreferencesMenu aria-label (#1131)
* Add aria-label

* Add DMCheckboxItemProps ariaLabel
2023-03-09 19:59:54 +00:00
Jang Min
967efd6b7f
test: aria-label check (#1133)
* Install jest-each

* Add accessibility.spec.tsx

It render App and click button to render context menu.
Then it check if aria-label exists.

* restore lock

* Delete package-lock.json

* Update accessibility.spec.tsx

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-03-09 19:59:31 +00:00
Jang Min
d00c06144d
Remove DropdownMenu.Root modal property (#1132) 2023-03-09 19:42:18 +00:00
Jang Min
80b4f5aedd
fix: copy and paste without selection occurs error (#1135)
* Add optional chaining

* dont allow empty clipboard data

---------

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2023-03-09 19:41:23 +00:00
Steve Ruiz
a9f1a6ccc7
fix buttons, help button placement (#1145) 2023-02-10 13:51:30 +00:00
Karol Stawowski
b6dacdc1cd
fix: fix copy as png feature (#1143) 2023-02-10 13:42:25 +00:00
Steve Ruiz
3d1d329b6f 1.28.0 2023-02-06 14:26:40 +00:00
Jan Werder
0080a78bcd
Updated German translation (#1140) 2023-02-06 09:31:23 +00:00
Jang Min
d38f5a037b
feat: export menu accessibility (#1121)
* Move export submenu(Edit -> File)

* Add export menu to context menu with no selection

* Add export shortcuts
2023-02-02 16:14:39 +00:00
Jang Min
e02a5cb62e
Remove literals (#1114)
https://tldraw.com -> window.location.origin
2023-02-02 16:11:39 +00:00
Jang Min
34d06b17b3
Add aria-label to undo/redo buttons (#1115) 2023-02-02 16:10:42 +00:00
hiroshisuga
dd5c4ae66e
Update ja.json (#1126) 2023-02-02 16:09:13 +00:00
Mohammad Kazemi
0a6d35e8c2
Update Farsi language translation (#1128)
Added new words and translated them. Also edited and reviewed some of the old translation to make them more consistent.
2023-02-02 16:08:46 +00:00
JuanCasad0
7c688d52e0
Added Galician language + full spanish (#1122)
* Add files via upload

Added Galician translation and Spanish (completed)

* Update translations.ts

Added galician language (gl).

* Fixed identation

* Fixed identation
2023-02-02 16:07:25 +00:00