Commit graph

2957 commits

Author SHA1 Message Date
Mime Čuvalo
9ffd7f15ee
google meet: add hardware whiteboard integration (#3765)
pushing out my changes but this is a draft. we need to do look into this
more:
- [ ] we might need to reach out to Google support and request to be put
on their "start a whiteboard" whitelist/partner list? it's actually
pretty unclear how to get on that list. I don't see any permissions/API
scopes that is meant to enable that 🤔
- [ ] but maybe this is something that you @steveruizok as Google
Workspace admin see on your end? let's look together when you get back.

I initially tried doing a bundle (using esbuild (and i tried
parcel/rollup too)) but it didn't feel like the right path, and also it
didn't work when loading it in the Apps Scripts.
So then I went the route of just doing an iframe and I think that feels
much better. This means though that we do want our iframe protector to
let through this usecase. But also, we could maybe just redirect always
to a new room? I'm not sure yet.

The build script helps either build the prod or staging version
depending on what you want.

Once we do find that the staging version works, then we'll go through
the process of:
- [x] applied for https://developers.google.com/workspace/preview
(already did this to get access to new Google Meet APIs just in case)
- [x] added to google analytics (already done)
- [ ] turn off testing mode for oauth and submit for review
- [ ] continue publishing process to Create a store listing for our prod
app: https://developers.google.com/workspace/marketplace/how-to-publish

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [x] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [x] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Release Notes

- Google Meet: add hardware whiteboard integration
2024-05-20 14:52:05 +00:00
David Sheldrick
16ba1eb2c2
fix flipping for arrows (#3780)
@SomeHats and me fixed arrow flipping, which was a little bit broken
after the bindings things

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.

---------

Co-authored-by: Alex <alex@dytry.ch>
2024-05-20 12:52:02 +00:00
David Sheldrick
2cf8104f5a
[bugfix?] End interactions before switching page (#3771)
Looking at #3762 it seemed to have been caused by calling
`setCurrentPage` during a `select.editing_shape` interaction. I wonder
whether we should trigger a `cancel` event before switching pages in
case this happens?

closes #3762 

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-20 12:45:00 +00:00
David Sheldrick
ed63bcead5
add missing spline icons (#3778)
We had somehow removed these

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-20 09:28:14 +00:00
David Sheldrick
3a96d040c3
delete old todo comment (#3777)
follow up to #3695 

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [x] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [x] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-20 09:13:52 +00:00
Mitja Bezenšek
4adbc76e2d
Prevent pressing escape when editing document name to bubble up to the editor (#3725)
This prevents pressing escape to bubble to up to editor when editing
document names. Prevents the current tool to change back to select tool.

### Before

Pressing escape when editing the name stops the editing, but also
switches from hand tool to select tool.


https://github.com/tldraw/tldraw/assets/2523721/445ec4ca-73b9-4db3-a3e8-bd408d868c6f

### After

We no longer switch to hand tool when we press escape the first time.
The second time it still works though.


https://github.com/tldraw/tldraw/assets/2523721/fbab7d97-0d87-47cb-b249-b20655f8bc70

@mimecuvalo happy to wait for your focus management PR to get merged,
then update accordingly by using `editor.focus()`.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Edit document name.
2. Press escape. It should stop editing the document name, but should
not switch the active tool to select tool.
3. Pressing escape once again should do it though. Also keyboard
shortcuts should also work.

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

### Release Notes

- Prevent escaping out of editing the document name to switch the active
tool to select tool.
2024-05-19 13:59:21 +00:00
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
Taha
e559a7cdbb
E2E camera tests (#3747)
This PR adds E2E tests for panning and zooming using touch gestures and
zooming using the scrollwheel input.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [x] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [x] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Adds E2E tests for the camera
2024-05-19 01:02:06 +00:00
Steve Ruiz
c04b4286ca
Bump max shapes to 4000 (#3716)
This PR increases the maximum number of shapes per page from 2000 to
4000.

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `improvement` — Improving existing features

### Test Plan

1. Create max shapes
2. Does it work?

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

### Release Notes

- Increase maximum number of shapes per page from 2000 to 4000.
2024-05-19 01:01:53 +00:00
David Sheldrick
979e5d7979
export DefaultNavigationPanel (#3772)
closes #3756


### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-17 14:41:39 +00:00
David Sheldrick
abb207b98a
Allow DefaultErrorFallback to be used independently (#3769)
Follow up to #3750 – this broke our error pages because they try to use
the Canvas component if they are in a tldraw subtree but it was designed
to work outside of a tldraw subtree too.
 
### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-17 13:28:36 +00:00
Mime Čuvalo
9bf25c10b8
docs: smaller snapshot so it doesnt crash (#3768)
+ drive by fix for css cleanup

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [x] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
2024-05-17 13:11:52 +00:00
Mime Čuvalo
b4c1f606e1
focus: rework and untangle existing focus management logic in the sdk (#3718)
Focus management is really scattered across the codebase. There's sort
of a battle between different code paths to make the focus the correct
desired state. It seemed to grow like a knot and once I started pulling
on one thread to see if it was still needed you could see underneath
that it was accounting for another thing underneath that perhaps wasn't
needed.

The impetus for this PR came but especially during the text label
rework, now that it's much more easy to jump around from textfield to
textfield. It became apparent that we were playing whack-a-mole trying
to preserve the right focus conditions (especially on iOS, ugh).

This tries to remove as many hacks as possible, and bring together in
place the focus logic (and in the darkness, bind them).

## Places affected
- [x] `useEditableText`: was able to remove a bunch of the focus logic
here. In addition, it doesn't look like we need to save the selection
range anymore.
- lingering footgun that needed to be fixed anyway: if there are two
labels in the same shape, because we were just checking `editingShapeId
=== id`, the two text labels would have just fought each other for
control
- [x] `useFocusEvents`: nixed and refactored — we listen to the store in
`FocusManager` and then take care of autoFocus there
- [x] `useSafariFocusOutFix`: nixed. not necessary anymore because we're
not trying to refocus when blurring in `useEditableText`. original PR
for reference: https://github.com/tldraw/brivate/pull/79
- [x] `defaultSideEffects`: moved logic to `FocusManager`
- [x] `PointingShape` focus for `startTranslating`, decided to leave
this alone actually.
- [x] `TldrawUIButton`: it doesn't look like this focus bug fix is
needed anymore, original PR for reference:
https://github.com/tldraw/tldraw/pull/2630
- [x] `useDocumentEvents`: left alone its manual focus after the Escape
key is hit
- [x] `FrameHeading`: double focus/select doesn't seem necessary anymore
- [x] `useCanvasEvents`: `onPointerDown` focus logic never happened b/c
in `Editor.ts` we `clearedMenus` on pointer down
- [x] `onTouchStart`: looks like `document.body.click()` is not
necessary anymore

## Future Changes
- [ ] a11y: work on having an accessebility focus ring
- [ ] Page visibility API:
(https://developer.mozilla.org/en-US/docs/Web/API/Page_Visibility_API)
events when tab is back in focus vs. background, different kind of focus
- [ ] Reexamine places we manually dispatch `pointer_down` events to see
if they're necessary.
- [ ] Minor: get rid of `useContainer` maybe? Is it really necessary to
have this hook? you can just do `useEditor` → `editor.getContainer()`,
feels superfluous.

## Methodology
Looked for places where we do:
- `body.click()`
- places we do `container.focus()`
- places we do `container.blur()`
- places we do `editor.updateInstanceState({ isFocused })`
- places we do `autofocus`
- searched for `document.activeElement`

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

- [x] run test-focus.spec.ts
- [x] check MultipleExample
- [x] check EditorFocusExample
- [x] check autoFocus
- [x] check style panel usage and focus events in general
- [x] check text editing focus, lots of different devices,
mobile/desktop

### Release Notes

- Focus: rework and untangle existing focus management logic in the SDK
2024-05-17 08:53:57 +00:00
David Sheldrick
48fa9018f4
[bindings] beforeUnbind/afterUnbind to replace beforeDelete/afterDelete (#3761)
Before this PR the interface for doing cleanup when shapes/bindings were
deleted was quite footgunny and inexpressive.

We were abusing the shape beforeDelete callbacks to implement
copy+paste, which doesn't work in situations where cascading deletes are
required. This caused bugs in both our pin and sticker examples, where
copy+paste was broken. I noticed the same bug in my experiment with text
labels, and I think the fact that it took us a while to notice these
bugs indicates other users are gonna fall prey to the same bugs unless
we help them out.

One suggestion to fix this was to add `onAfterDelete(From|To)Shape`
callbacks. The cascading deletes could happen in those, while keeping
the 'commit changes' kinds of updates in the `before` callbacks and
theoretically that would fix the issues with copy+paste. However,
expecting people to figure this out on their own is asking a heckuva lot
IMO, and it's a heavy bit of nuance to try to convey in the docs. It's
hard enough to convey it here. Plus I could imagine for some users it
might easily even leave the store in an inconsistent state to allow a
bound shape to exist for any length of time after the shape it was bound
to was already deleted.

It also just makes an already large and muddy API surface area even
larger and muddier and if that can be avoided let's avoid it.

This PR clears things up by making it so that there's only one callback
for when a binding is removed. The callback is given a `reason` for why
it is being called

The `reason` is one of the following:

- The 'from' is being deleted
- The 'to' shape is being deleted
- The binding is being deleted on it's own.

Technically a binding might end up being deleted when both the `from`
and `to` shapes are being deleted, but it's very hard to know for
certain when that is happening, so I decided to just ignore it for now.
I think it would only matter for perf reasons, to avoid doing useless
work.

So this PR replaces the `onBeforeDelete`, `onAfterDelete`,
`onBeforeFromShapeDelete` and `onBeforeToShapeDelete` (and the
prospective `onAfterFromShapeDelete` and `onAfterToShapeDelete`) with
just two callbacks:

- `onBeforeUnbind({binding, reason})` - called before any shapes or the
binding have been deleted.
- `onAfterUnbind({binding, reason})` - called after the binding and any
shapes have been deleted.

This still allows all the same behaviour as before, without having to
spread the logic between multiple callbacks. It's also just clearer IMO
since you only get one callback invocation per unbinding rather than
potentially two. It also fixes our copy+paste footgun since we can now
implement that by just deleting the bindings rather than invoking the
`onBeforeDelete(From|To)Shape` callbacks.

I'm not worried about losing the explicit before/after delete callbacks
for the binding record or shape records because sdk users still have the
ability to detect all those situations with full nuance in obvious ways.
The one thing that would even require extra bookkeeping is getting
access to a shape record after the shape was deleted, but that's
probably not a thing anybody would want to do 🤷🏼

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-16 13:48:36 +00:00
alex
5b21ad96ae
No defaults for contexts (#3750)
in many places, we use a pattern like `React.createContext({} as
Editor)` when defining contexts. This causes a problem: `{}` is not
`Editor`, but you can still `useEditor` wherever you like and your code
with run with this confusing non-editor value.

This diff updates all our `createContext` calls to default to `null`,
with an explicit check and error for missing values. Now, if you
`useEditor` outside of `<Tldraw />`, you'll get a message telling you
that it can only be used within `<Tldraw />`.

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `improvement` — Improving existing features

### Release Notes

`useEditor` and other context-based hooks will now throw an error when
used out-of-context, instead of returning a fake value.
2024-05-14 10:22:07 +00:00
alex
ab807afda3
Store-level "operation end" event (#3748)
This adds a store-level "operation end" event which fires at the end of
atomic operations. It includes some other changes too:

- The `SideEffectManager` now lives in & is a property of the store as
`StoreSideEffects`. One benefit to this is that instead of overriding
methods on the store to register side effects (meaning the store can
only ever be used in one place) the store now calls directly into the
side effect manager, which is responsible for dealing with any other
callbacks
- The history manager's "batch complete" event is gone, in favour of
this new event. We were using the batch complete event for only one
thing, calling `onChildrenChange` - which meant it wasn't getting called
for undo/redo events, which aren't part of a batch. `onChildrenChange`
is now called after each atomic store operation affecting children.

I've also added a rough pin example which shows (kinda messily) how you
might use the operation complete handler to traverse a graph of bindings
and resolve constraints between them.

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `feature` — New feature

### Release Notes

#### Breaking changes
`editor.registerBatchCompleteHandler` has been replaced with
`editor.registerOperationCompleteHandler`
2024-05-14 09:42:41 +00:00
alex
5a15c49d63
ban using @internal items in examples (#3746)
There's been some confusion in the community as our example use a few
`@internal` methods. These things are intended for use inside the tldraw
library, but aren't a part of the public API. That means that when those
examples are copied out of the tldraw repo, those `@internal` references
produce errors.

This diff bans the use of items tagged as `@internal` inside our
examples app by adding an eslint plugin (adapted from the one we already
have that protects against deprecated types) preventing them.

### Change Type
- [x] `docs` — Changes to the documentation, examples, or templates.
- [x] `bugfix` — Bug fix
- [x] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
2024-05-14 08:49:28 +00:00
Mitja Bezenšek
7226afc1ff
Fix readonly fetching happening too often. (#3732)
The problem happened because we cleared the `readonlyUrl` from shared
state. This was happening every time the url changed (so panning,
zooming,...). Now, instead of clearing the `readonlyUrl` we pull out the
room prefix and slug from the readonly url.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Create a shared room.
2. Move the camera around.
3. We should not be constantly fetching the readonly slug.

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

### Release Notes

- Fix an issue where readonly slug was being fetched every time the url
changed (panning, zooming,...).

---------

Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-05-13 10:58:34 +00:00
dependabot[bot]
3dcd2a851c
Bump the npm_and_yarn group across 2 directories with 4 updates (#3731)
Bumps the npm_and_yarn group with 3 updates in the / directory:
[next](https://github.com/vercel/next.js),
[semver](https://github.com/npm/node-semver) and
[zod](https://github.com/colinhacks/zod).
Bumps the npm_and_yarn group with 1 update in the /templates/nextjs
directory: [next](https://github.com/vercel/next.js).

Updates `next` from 14.1.3 to 14.2.3
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/next.js/releases">next's
releases</a>.</em></p>
<blockquote>
<h2>v14.2.3</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>Fix: resolve mixed re-exports module as cjs (<a
href="https://redirect.github.com/vercel/next.js/issues/64681">#64681</a>)</li>
<li>fix: mixing namespace import and named import client components (<a
href="https://redirect.github.com/vercel/next.js/issues/64809">#64809</a>)</li>
<li>Fix mixed exports in server component with barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64894">#64894</a>)</li>
<li>Fix next/image usage in mdx(<a
href="https://redirect.github.com/vercel/next.js/issues/64875">#64875</a>)</li>
<li>fix(fetch-cache): fix additional typo, add type &amp; data
validation (<a
href="https://redirect.github.com/vercel/next.js/issues/64799">#64799</a>)</li>
<li>prevent erroneous route interception during lazy fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64692">#64692</a>)</li>
<li>fix root page revalidation when redirecting in a server action (<a
href="https://redirect.github.com/vercel/next.js/issues/64730">#64730</a>)</li>
<li>fix: remove traceparent from cachekey should not remove traceparent
from original object (<a
href="https://redirect.github.com/vercel/next.js/issues/64727">#64727</a>)</li>
<li>Clean-up fetch metrics tracking (<a
href="https://redirect.github.com/vercel/next.js/issues/64746">#64746</a>)</li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/huozhi"><code>@​huozhi</code></a>, <a
href="https://github.com/samcx"><code>@​samcx</code></a>, <a
href="https://github.com/ztanner"><code>@​ztanner</code></a>, <a
href="https://github.com/Jeffrey-Zutt"><code>@​Jeffrey-Zutt</code></a>,
and <a href="https://github.com/ijjk"><code>@​ijjk</code></a> for
helping!</p>
<h2>v14.2.2</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>Fix Server Action error logs for unhandled POST requests (<a
href="https://redirect.github.com/vercel/next.js/issues/64315">#64315</a>)</li>
<li>Improve rendering performance (<a
href="https://redirect.github.com/vercel/next.js/issues/64408">#64408</a>)</li>
<li>Fix the method prop case in Server Actions transform (<a
href="https://redirect.github.com/vercel/next.js/issues/64398">#64398</a>)</li>
<li>fix(next-lint): update option --report-unused-disable-directives to
--report-unused-disable-directives-severity (<a
href="https://redirect.github.com/vercel/next.js/issues/64405">#64405</a>)</li>
<li>tweak test for Azure (<a
href="https://redirect.github.com/vercel/next.js/issues/64424">#64424</a>)</li>
<li>router restore should take priority over pending actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64449">#64449</a>)</li>
<li>Fix client boundary inheritance for barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64467">#64467</a>)</li>
<li>improve turborepo caching (<a
href="https://redirect.github.com/vercel/next.js/issues/64493">#64493</a>)</li>
<li>feat: strip traceparent header from cachekey (<a
href="https://redirect.github.com/vercel/next.js/issues/64499">#64499</a>)</li>
<li>Fix more Turbopack build tests</li>
<li>Update lockfile for compatibility with turbo (<a
href="https://redirect.github.com/vercel/next.js/issues/64360">#64360</a>)</li>
<li>Fix typo in dynamic-rendering.ts (<a
href="https://redirect.github.com/vercel/next.js/issues/64365">#64365</a>)</li>
<li>Fix DynamicServerError not being thrown in fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64511">#64511</a>)</li>
<li>fix(next): Metadata.openGraph values not resolving basic values when
type is set (<a
href="https://redirect.github.com/vercel/next.js/issues/63620">#63620</a>)</li>
<li>disable production chunking in dev (<a
href="https://redirect.github.com/vercel/next.js/issues/64488">#64488</a>)</li>
<li>Fix cjs client components tree-shaking (<a
href="https://redirect.github.com/vercel/next.js/issues/64558">#64558</a>)</li>
<li>fix refresh behavior for discarded actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64532">#64532</a>)</li>
<li>fix: filter out middleware requests in logging (<a
href="https://redirect.github.com/vercel/next.js/issues/64549">#64549</a>)</li>
<li>Turbopack: Allow client components to be imported in app routes (<a
href="https://redirect.github.com/vercel/next.js/issues/64520">#64520</a>)</li>
<li>Fix ASL bundling for dynamic css (<a
href="https://redirect.github.com/vercel/next.js/issues/64451">#64451</a>)</li>
<li>add pathname normalizer for actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64592">#64592</a>)</li>
<li>fix incorrect refresh request when basePath is set (<a
href="https://redirect.github.com/vercel/next.js/issues/64589">#64589</a>)</li>
<li>test: skip turbopack build test (<a
href="https://redirect.github.com/vercel/next.js/issues/64356">#64356</a>)</li>
<li>hotfix(turbopack): Update with patch for postcss.config.js path
resolution on Windows (<a
href="https://redirect.github.com/vercel/next.js/issues/64677">#64677</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2e7a96a1e8"><code>2e7a96a</code></a>
v14.2.3</li>
<li><a
href="a230be4867"><code>a230be4</code></a>
Clean-up fetch metrics tracking (<a
href="https://redirect.github.com/vercel/next.js/issues/64746">#64746</a>)</li>
<li><a
href="73c2d634b1"><code>73c2d63</code></a>
fix: remove traceparent from cachekey should not remove traceparent from
orig...</li>
<li><a
href="dd44191118"><code>dd44191</code></a>
fix root page revalidation when redirecting in a server action (<a
href="https://redirect.github.com/vercel/next.js/issues/64730">#64730</a>)</li>
<li><a
href="8b4c234740"><code>8b4c234</code></a>
prevent erroneous route interception during lazy fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64692">#64692</a>)</li>
<li><a
href="d6a7ca0e8d"><code>d6a7ca0</code></a>
fix(fetch-cache): fix additional typo, add type &amp; data validation
(<a
href="https://redirect.github.com/vercel/next.js/issues/64799">#64799</a>)</li>
<li><a
href="4a6b511ca0"><code>4a6b511</code></a>
Fix next/image usage in mdx (<a
href="https://redirect.github.com/vercel/next.js/issues/64875">#64875</a>)</li>
<li><a
href="04cc13c0a3"><code>04cc13c</code></a>
Fix mixed exports in server component with barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64894">#64894</a>)</li>
<li><a
href="8d01d496fe"><code>8d01d49</code></a>
fix: mixing namespace import and named import client components (<a
href="https://redirect.github.com/vercel/next.js/issues/64809">#64809</a>)</li>
<li><a
href="de84e3ae70"><code>de84e3a</code></a>
Fix: resolve mixed re-exports module as cjs (<a
href="https://redirect.github.com/vercel/next.js/issues/64681">#64681</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/next.js/compare/v14.1.3...v14.2.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.6.1 to 7.6.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.6.2</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.1...v7.6.2">7.6.2</a>
(2024-05-09)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="6466ba9b54"><code>6466ba9</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/713">#713</a>
lru: use map.delete() directly (<a
href="https://redirect.github.com/npm/node-semver/issues/713">#713</a>)
(<a href="https://github.com/negezor"><code>@​negezor</code></a>, <a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.1...v7.6.2">7.6.2</a>
(2024-05-09)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="6466ba9b54"><code>6466ba9</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/713">#713</a>
lru: use map.delete() directly (<a
href="https://redirect.github.com/npm/node-semver/issues/713">#713</a>)
(<a href="https://github.com/negezor"><code>@​negezor</code></a>, <a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="eb1380b1ec"><code>eb1380b</code></a>
chore: release 7.6.2 (<a
href="https://redirect.github.com/npm/node-semver/issues/714">#714</a>)</li>
<li><a
href="6466ba9b54"><code>6466ba9</code></a>
fix(lru): use map.delete() directly (<a
href="https://redirect.github.com/npm/node-semver/issues/713">#713</a>)</li>
<li>See full diff in <a
href="https://github.com/npm/node-semver/compare/v7.6.1...v7.6.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `zod` from 3.23.7 to 3.23.8
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/colinhacks/zod/releases">zod's
releases</a>.</em></p>
<blockquote>
<h2>v3.23.8</h2>
<h2>Commits:</h2>
<ul>
<li>0f4d403558ae0490c711e4c2bfcf6c200bd14e11 Add Bronze logos (<a
href="https://redirect.github.com/colinhacks/zod/issues/3470">#3470</a>)</li>
<li>19687315b5b24bbd1ff6c346bfc2975700221748 Tweak tiers (<a
href="https://redirect.github.com/colinhacks/zod/issues/3471">#3471</a>)</li>
<li>eda7df314399929f7ed737423868a5a0780cd944 Change RefinementCtx to
interface</li>
<li>ca42965df46b2f7e2747db29c40a26bcb32a51d5 v3.23.8</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ca42965df4"><code>ca42965</code></a>
v3.23.8</li>
<li><a
href="eda7df3143"><code>eda7df3</code></a>
Change RefinementCtx to interface</li>
<li><a
href="19687315b5"><code>1968731</code></a>
Tweak tiers (<a
href="https://redirect.github.com/colinhacks/zod/issues/3471">#3471</a>)</li>
<li><a
href="0f4d403558"><code>0f4d403</code></a>
Add Bronze logos (<a
href="https://redirect.github.com/colinhacks/zod/issues/3470">#3470</a>)</li>
<li>See full diff in <a
href="https://github.com/colinhacks/zod/compare/v3.23.7...v3.23.8">compare
view</a></li>
</ul>
</details>
<br />

Updates `next` from 13.5.0 to 14.1.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vercel/next.js/releases">next's
releases</a>.</em></p>
<blockquote>
<h2>v14.2.3</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>Fix: resolve mixed re-exports module as cjs (<a
href="https://redirect.github.com/vercel/next.js/issues/64681">#64681</a>)</li>
<li>fix: mixing namespace import and named import client components (<a
href="https://redirect.github.com/vercel/next.js/issues/64809">#64809</a>)</li>
<li>Fix mixed exports in server component with barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64894">#64894</a>)</li>
<li>Fix next/image usage in mdx(<a
href="https://redirect.github.com/vercel/next.js/issues/64875">#64875</a>)</li>
<li>fix(fetch-cache): fix additional typo, add type &amp; data
validation (<a
href="https://redirect.github.com/vercel/next.js/issues/64799">#64799</a>)</li>
<li>prevent erroneous route interception during lazy fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64692">#64692</a>)</li>
<li>fix root page revalidation when redirecting in a server action (<a
href="https://redirect.github.com/vercel/next.js/issues/64730">#64730</a>)</li>
<li>fix: remove traceparent from cachekey should not remove traceparent
from original object (<a
href="https://redirect.github.com/vercel/next.js/issues/64727">#64727</a>)</li>
<li>Clean-up fetch metrics tracking (<a
href="https://redirect.github.com/vercel/next.js/issues/64746">#64746</a>)</li>
</ul>
<h3>Credits</h3>
<p>Huge thanks to <a
href="https://github.com/huozhi"><code>@​huozhi</code></a>, <a
href="https://github.com/samcx"><code>@​samcx</code></a>, <a
href="https://github.com/ztanner"><code>@​ztanner</code></a>, <a
href="https://github.com/Jeffrey-Zutt"><code>@​Jeffrey-Zutt</code></a>,
and <a href="https://github.com/ijjk"><code>@​ijjk</code></a> for
helping!</p>
<h2>v14.2.2</h2>
<blockquote>
<p>[!NOTE]<br />
This release is backporting bug fixes. It does <strong>not</strong>
include all pending features/changes on canary.</p>
</blockquote>
<h3>Core Changes</h3>
<ul>
<li>Fix Server Action error logs for unhandled POST requests (<a
href="https://redirect.github.com/vercel/next.js/issues/64315">#64315</a>)</li>
<li>Improve rendering performance (<a
href="https://redirect.github.com/vercel/next.js/issues/64408">#64408</a>)</li>
<li>Fix the method prop case in Server Actions transform (<a
href="https://redirect.github.com/vercel/next.js/issues/64398">#64398</a>)</li>
<li>fix(next-lint): update option --report-unused-disable-directives to
--report-unused-disable-directives-severity (<a
href="https://redirect.github.com/vercel/next.js/issues/64405">#64405</a>)</li>
<li>tweak test for Azure (<a
href="https://redirect.github.com/vercel/next.js/issues/64424">#64424</a>)</li>
<li>router restore should take priority over pending actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64449">#64449</a>)</li>
<li>Fix client boundary inheritance for barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64467">#64467</a>)</li>
<li>improve turborepo caching (<a
href="https://redirect.github.com/vercel/next.js/issues/64493">#64493</a>)</li>
<li>feat: strip traceparent header from cachekey (<a
href="https://redirect.github.com/vercel/next.js/issues/64499">#64499</a>)</li>
<li>Fix more Turbopack build tests</li>
<li>Update lockfile for compatibility with turbo (<a
href="https://redirect.github.com/vercel/next.js/issues/64360">#64360</a>)</li>
<li>Fix typo in dynamic-rendering.ts (<a
href="https://redirect.github.com/vercel/next.js/issues/64365">#64365</a>)</li>
<li>Fix DynamicServerError not being thrown in fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64511">#64511</a>)</li>
<li>fix(next): Metadata.openGraph values not resolving basic values when
type is set (<a
href="https://redirect.github.com/vercel/next.js/issues/63620">#63620</a>)</li>
<li>disable production chunking in dev (<a
href="https://redirect.github.com/vercel/next.js/issues/64488">#64488</a>)</li>
<li>Fix cjs client components tree-shaking (<a
href="https://redirect.github.com/vercel/next.js/issues/64558">#64558</a>)</li>
<li>fix refresh behavior for discarded actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64532">#64532</a>)</li>
<li>fix: filter out middleware requests in logging (<a
href="https://redirect.github.com/vercel/next.js/issues/64549">#64549</a>)</li>
<li>Turbopack: Allow client components to be imported in app routes (<a
href="https://redirect.github.com/vercel/next.js/issues/64520">#64520</a>)</li>
<li>Fix ASL bundling for dynamic css (<a
href="https://redirect.github.com/vercel/next.js/issues/64451">#64451</a>)</li>
<li>add pathname normalizer for actions (<a
href="https://redirect.github.com/vercel/next.js/issues/64592">#64592</a>)</li>
<li>fix incorrect refresh request when basePath is set (<a
href="https://redirect.github.com/vercel/next.js/issues/64589">#64589</a>)</li>
<li>test: skip turbopack build test (<a
href="https://redirect.github.com/vercel/next.js/issues/64356">#64356</a>)</li>
<li>hotfix(turbopack): Update with patch for postcss.config.js path
resolution on Windows (<a
href="https://redirect.github.com/vercel/next.js/issues/64677">#64677</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2e7a96a1e8"><code>2e7a96a</code></a>
v14.2.3</li>
<li><a
href="a230be4867"><code>a230be4</code></a>
Clean-up fetch metrics tracking (<a
href="https://redirect.github.com/vercel/next.js/issues/64746">#64746</a>)</li>
<li><a
href="73c2d634b1"><code>73c2d63</code></a>
fix: remove traceparent from cachekey should not remove traceparent from
orig...</li>
<li><a
href="dd44191118"><code>dd44191</code></a>
fix root page revalidation when redirecting in a server action (<a
href="https://redirect.github.com/vercel/next.js/issues/64730">#64730</a>)</li>
<li><a
href="8b4c234740"><code>8b4c234</code></a>
prevent erroneous route interception during lazy fetch (<a
href="https://redirect.github.com/vercel/next.js/issues/64692">#64692</a>)</li>
<li><a
href="d6a7ca0e8d"><code>d6a7ca0</code></a>
fix(fetch-cache): fix additional typo, add type &amp; data validation
(<a
href="https://redirect.github.com/vercel/next.js/issues/64799">#64799</a>)</li>
<li><a
href="4a6b511ca0"><code>4a6b511</code></a>
Fix next/image usage in mdx (<a
href="https://redirect.github.com/vercel/next.js/issues/64875">#64875</a>)</li>
<li><a
href="04cc13c0a3"><code>04cc13c</code></a>
Fix mixed exports in server component with barrel optimization (<a
href="https://redirect.github.com/vercel/next.js/issues/64894">#64894</a>)</li>
<li><a
href="8d01d496fe"><code>8d01d49</code></a>
fix: mixing namespace import and named import client components (<a
href="https://redirect.github.com/vercel/next.js/issues/64809">#64809</a>)</li>
<li><a
href="de84e3ae70"><code>de84e3a</code></a>
Fix: resolve mixed re-exports module as cjs (<a
href="https://redirect.github.com/vercel/next.js/issues/64681">#64681</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vercel/next.js/compare/v14.1.3...v14.2.3">compare
view</a></li>
</ul>
</details>
<br />

Updates `postcss` from 8.4.14 to 8.4.31
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.4.31</h2>
<ul>
<li>Fixed <code>\r</code> parsing to fix CVE-2023-44270.</li>
</ul>
<h2>8.4.30</h2>
<ul>
<li>Improved source map performance (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
</ul>
<h2>8.4.29</h2>
<ul>
<li>Fixed <code>Node#source.offset</code> (by <a
href="https://github.com/idoros"><code>@​idoros</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/coliff"><code>@​coliff</code></a>).</li>
</ul>
<h2>8.4.28</h2>
<ul>
<li>Fixed <code>Root.source.end</code> for better source map (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed <code>Result.root</code> types when <code>process()</code> has
no parser.</li>
</ul>
<h2>8.4.27</h2>
<ul>
<li>Fixed <code>Container</code> clone methods types.</li>
</ul>
<h2>8.4.26</h2>
<ul>
<li>Fixed clone methods types.</li>
</ul>
<h2>8.4.25</h2>
<ul>
<li>Improve stringify performance (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/vikaskaliramna07"><code>@​vikaskaliramna07</code></a>).</li>
</ul>
<h2>8.4.24</h2>
<ul>
<li>Fixed <code>Plugin</code> types.</li>
</ul>
<h2>8.4.23</h2>
<ul>
<li>Fixed warnings in TypeDoc.</li>
</ul>
<h2>8.4.22</h2>
<ul>
<li>Fixed TypeScript support with <code>node16</code> (by <a
href="https://github.com/remcohaszing"><code>@​remcohaszing</code></a>).</li>
</ul>
<h2>8.4.21</h2>
<ul>
<li>Fixed <code>Input#error</code> types (by <a
href="https://github.com/hudochenkov"><code>@​hudochenkov</code></a>).</li>
</ul>
<h2>8.4.20</h2>
<ul>
<li>Fixed source map generation for childless at-rules like
<code>@layer</code>.</li>
</ul>
<h2>8.4.19</h2>
<ul>
<li>Fixed whitespace preserving after AST transformations (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
</ul>
<h2>8.4.18</h2>
<ul>
<li>Fixed an error on <code>absolute: true</code> with empty
<code>sourceContent</code> (by <a
href="https://github.com/KingSora"><code>@​KingSora</code></a>).</li>
</ul>
<h2>8.4.17</h2>
<ul>
<li>Fixed <code>Node.before()</code> unexpected behavior (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Added TOC to docs (by <a
href="https://github.com/muddv"><code>@​muddv</code></a>).</li>
</ul>
<h2>8.4.16</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.4.31</h2>
<ul>
<li>Fixed <code>\r</code> parsing to fix CVE-2023-44270.</li>
</ul>
<h2>8.4.30</h2>
<ul>
<li>Improved source map performance (by Romain Menke).</li>
</ul>
<h2>8.4.29</h2>
<ul>
<li>Fixed <code>Node#source.offset</code> (by Ido Rosenthal).</li>
<li>Fixed docs (by Christian Oliff).</li>
</ul>
<h2>8.4.28</h2>
<ul>
<li>Fixed <code>Root.source.end</code> for better source map (by Romain
Menke).</li>
<li>Fixed <code>Result.root</code> types when <code>process()</code> has
no parser.</li>
</ul>
<h2>8.4.27</h2>
<ul>
<li>Fixed <code>Container</code> clone methods types.</li>
</ul>
<h2>8.4.26</h2>
<ul>
<li>Fixed clone methods types.</li>
</ul>
<h2>8.4.25</h2>
<ul>
<li>Improve stringify performance (by Romain Menke).</li>
<li>Fixed docs (by <a
href="https://github.com/vikaskaliramna07"><code>@​vikaskaliramna07</code></a>).</li>
</ul>
<h2>8.4.24</h2>
<ul>
<li>Fixed <code>Plugin</code> types.</li>
</ul>
<h2>8.4.23</h2>
<ul>
<li>Fixed warnings in TypeDoc.</li>
</ul>
<h2>8.4.22</h2>
<ul>
<li>Fixed TypeScript support with <code>node16</code> (by Remco
Haszing).</li>
</ul>
<h2>8.4.21</h2>
<ul>
<li>Fixed <code>Input#error</code> types (by Aleks Hudochenkov).</li>
</ul>
<h2>8.4.20</h2>
<ul>
<li>Fixed source map generation for childless at-rules like
<code>@layer</code>.</li>
</ul>
<h2>8.4.19</h2>
<ul>
<li>Fixed whitespace preserving after AST transformations (by Romain
Menke).</li>
</ul>
<h2>8.4.18</h2>
<ul>
<li>Fixed an error on <code>absolute: true</code> with empty
<code>sourceContent</code> (by Rene Haas).</li>
</ul>
<h2>8.4.17</h2>
<ul>
<li>Fixed <code>Node.before()</code> unexpected behavior (by Romain
Menke).</li>
<li>Added TOC to docs (by Mikhail Dedov).</li>
</ul>
<h2>8.4.16</h2>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="90208de880"><code>90208de</code></a>
Release 8.4.31 version</li>
<li><a
href="58cc860b4c"><code>58cc860</code></a>
Fix carrier return parsing</li>
<li><a
href="4fff8e4cdc"><code>4fff8e4</code></a>
Improve pnpm test output</li>
<li><a
href="cd43ed1232"><code>cd43ed1</code></a>
Update dependencies</li>
<li><a
href="caa916bdcb"><code>caa916b</code></a>
Update dependencies</li>
<li><a
href="8972f76923"><code>8972f76</code></a>
Typo</li>
<li><a
href="11a5286f78"><code>11a5286</code></a>
Typo</li>
<li><a
href="45c5501777"><code>45c5501</code></a>
Release 8.4.30 version</li>
<li><a
href="bc3c341f58"><code>bc3c341</code></a>
Update linter</li>
<li><a
href="b2be58a2eb"><code>b2be58a</code></a>
Merge pull request <a
href="https://redirect.github.com/postcss/postcss/issues/1881">#1881</a>
from romainmenke/improve-sourcemap-performance--phil...</li>
<li>Additional commits viewable in <a
href="https://github.com/postcss/postcss/compare/8.4.14...8.4.31">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/tldraw/tldraw/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-05-13 10:54:02 +00:00
Mime Čuvalo
d2d3e582e5
assets: rework mime-type detection to be consistent/centralized; add support for webp/webm, apng, avif (#3730)
As I started working on image LOD stuff and wrapping my head around the
codebase, this was bothering me.
- there are missing popular types, especially WebP
- there are places where we're copy/pasting the same list of types but
they can get out-of-date with each other (also, one place described
supporting webm but we didn't actually do that)

This adds animated apng/avif detection as well (alongside our animated
gif detection). Furthermore, it moves the gif logic to be alongside the
png logic (they were in separate packages unnecessarily)

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Release Notes

- Images: unify list of acceptable types and expand to include webp,
webm, apng, avif
2024-05-13 08:29:43 +00:00
Steve Ruiz
142c27053b
Fix imports in Astro (#3742)
This PR changes our imports so that they work in a few rare cases.
https://github.com/tldraw/tldraw/issues/1817

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

### Release Notes

- Fix bug effecting imports in Astro.
2024-05-12 21:02:53 +00:00
Steve Ruiz
da415d95db
Update READMEs, add form link (#3741)
This PR updates readmes (including fixing some typos) and adds a link to
a Google Form for license inquiries.

### Change Type
- [x] `internal` — Does not affect user-facing stuff
- [x] `chore` — other boring stuff
2024-05-12 20:48:07 +00:00
alex
91903c9761
Move arrow helpers from editor to tldraw (#3721)
With the new work on bindings, we no longer need to keep any arrows
stuff hard-coded in `editor`, so let's move it to `tldraw` with the rest
of the shapes.

Couple other changes as part of this:
- We had two different types of `WeakMap` backed cache, but we now only
have one
- There's a new free-standing version of `createComputedCache` that
doesn't need access to the editor/store in order to create the cache.
instead, it returns a `{get(editor, id)}` object and instantiates the
cache on a per-editor basis for each call.
- Fixed a bug in `createSelectedComputedCache` where the selector
derivation would get re-created on every call to `get`

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `improvement` — Improving existing features

### Release Notes

#### Breaking changes
- `editor.getArrowInfo(shape)` has been replaced with
`getArrowInfo(editor, shape)`
- `editor.getArrowsBoundTo(shape)` has been removed. Instead, use
`editor.getBindingsToShape(shape, 'arrow')` and follow the `fromId` of
each binding to the corresponding arrow shape
- These types have moved from `@tldraw/editor` to `tldraw`:
    - `TLArcInfo`
    - `TLArrowInfo`
    - `TLArrowPoint`
- `WeakMapCache` has been removed
2024-05-09 09:48:01 +00:00
Trevor Dobbertin
7b99c8532b
fix link (#3726)
Describe what your pull request does. If appropriate, add GIFs or images
showing the before and after.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [x] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.

Just a small link fix for the docs.
2024-05-09 09:31:18 +00:00
David Sheldrick
c6ba621c11
Incremental bindings index (#3685) 2024-05-08 14:18:24 +00:00
alex
da35f2bd75
Bindings (#3326)
First draft of the new bindings API. We'll follow this up with some API
refinements, tests, documentation, and examples.

Bindings are a new record type for establishing relationships between
two shapes so they can update at the same time.

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `feature` — New feature

### Release Notes

#### Breaking changes
- The `start` and `end` properties on `TLArrowShape` no longer have
`type: point | binding`. Instead, they're always a point, which may be
out of date if a binding exists. To check for & retrieve arrow bindings,
use `getArrowBindings(editor, shape)` instead.
- `getArrowTerminalsInArrowSpace` must be passed a `TLArrowBindings` as
a third argument: `getArrowTerminalsInArrowSpace(editor, shape,
getArrowBindings(editor, shape))`
- The following types have been renamed:
    - `ShapeProps` -> `RecordProps`
    - `ShapePropsType` -> `RecordPropsType`
    - `TLShapePropsMigrations` -> `TLPropsMigrations`
    - `SchemaShapeInfo` -> `SchemaPropsInfo`

---------

Co-authored-by: David Sheldrick <d.j.sheldrick@gmail.com>
2024-05-08 12:37:31 +00:00
dependabot[bot]
0a7816e34d
Bump the npm_and_yarn group across 2 directories with 4 updates (#3719)
Bumps the npm_and_yarn group with 3 updates in the / directory:
[pdfjs-dist](https://github.com/mozilla/pdfjs-dist),
[semver](https://github.com/npm/node-semver) and
[zod](https://github.com/colinhacks/zod).
Bumps the npm_and_yarn group with 2 updates in the /templates/vite
directory:
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) and
[semver](https://github.com/npm/node-semver).

Updates `pdfjs-dist` from 4.0.379 to 4.2.67
<details>
<summary>Commits</summary>
<ul>
<li>See full diff in <a
href="https://github.com/mozilla/pdfjs-dist/commits">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.6.0 to 7.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.6.1</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">7.6.1</a>
(2024-05-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="c570a348ff"><code>c570a34</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
linting: no-unused-vars (<a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
use internal cache implementation (<a
href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="ac9b35769a"><code>ac9b357</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/682">#682</a>
typo in compareBuild debug message (<a
href="https://redirect.github.com/npm/node-semver/issues/682">#682</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/709">#709</a>
uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
remove lru-cache</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
bump <code>@​npmcli/template-oss</code> to 4.22.0 (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/696">#696</a>
add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)
(<a href="https://github.com/H4ad"><code>@​H4ad</code></a>)</li>
<li><a
href="692451bd6f"><code>692451b</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/688">#688</a>
various improvements to README (<a
href="https://redirect.github.com/npm/node-semver/issues/688">#688</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="074156f64f"><code>074156f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
bump <code>@​npmcli/template-oss</code> from 4.21.3 to 4.21.4 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">7.6.1</a>
(2024-05-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="c570a348ff"><code>c570a34</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
linting: no-unused-vars (<a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
use internal cache implementation (<a
href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="ac9b35769a"><code>ac9b357</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/682">#682</a>
typo in compareBuild debug message (<a
href="https://redirect.github.com/npm/node-semver/issues/682">#682</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/709">#709</a>
uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
remove lru-cache</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
bump <code>@​npmcli/template-oss</code> to 4.22.0 (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/696">#696</a>
add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)
(<a href="https://github.com/H4ad"><code>@​H4ad</code></a>)</li>
<li><a
href="692451bd6f"><code>692451b</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/688">#688</a>
various improvements to README (<a
href="https://redirect.github.com/npm/node-semver/issues/688">#688</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="074156f64f"><code>074156f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
bump <code>@​npmcli/template-oss</code> from 4.21.3 to 4.21.4 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d777418116"><code>d777418</code></a>
chore: release 7.6.1 (<a
href="https://redirect.github.com/npm/node-semver/issues/706">#706</a>)</li>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
deps: uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
chore: postinstall for dependabot template-oss PR</li>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
chore: bump <code>@​npmcli/template-oss</code> to 4.22.0</li>
<li><a
href="c570a348ff"><code>c570a34</code></a>
fix(linting): no-unused-vars</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
fix: use internal cache implementation</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
deps: remove lru-cache</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
chore: chore: chore: postinstall for dependabot template-oss PR</li>
<li><a
href="074156f64f"><code>074156f</code></a>
chore: bump <code>@​npmcli/template-oss</code> from 4.21.3 to
4.21.4</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
chore: add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `zod` from 3.23.6 to 3.23.7
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/colinhacks/zod/releases">zod's
releases</a>.</em></p>
<blockquote>
<h2>v3.23.7</h2>
<h2>Commits:</h2>
<ul>
<li>29d2ea2a15f0b1ac4b89138041f786a3dafc490b Add copper</li>
<li>d969423266fccee56ef769da6744cc8bacb04550 Fix <a
href="https://redirect.github.com/colinhacks/zod/issues/3437">#3437</a>:
extendShape erases JSDoc property documentation (<a
href="https://redirect.github.com/colinhacks/zod/issues/3463">#3463</a>)</li>
<li>2239ff3ccc9af4d28bee27bd6fb2a5632844480b Add social crow</li>
<li>f985b5b922cb357dbf4b25bb43814d19f838e046 3.23.7</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f985b5b922"><code>f985b5b</code></a>
3.23.7</li>
<li><a
href="2239ff3ccc"><code>2239ff3</code></a>
Add social crow</li>
<li><a
href="d969423266"><code>d969423</code></a>
Fix <a
href="https://redirect.github.com/colinhacks/zod/issues/3437">#3437</a>:
extendShape erases JSDoc property documentation (<a
href="https://redirect.github.com/colinhacks/zod/issues/3463">#3463</a>)</li>
<li><a
href="29d2ea2a15"><code>29d2ea2</code></a>
Add copper</li>
<li>See full diff in <a
href="https://github.com/colinhacks/zod/compare/v3.23.6...v3.23.7">compare
view</a></li>
</ul>
</details>
<br />

Updates `vite` from 4.5.3 to 5.2.11
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/releases">vite's
releases</a>.</em></p>
<blockquote>
<h2>create-vite@5.2.3</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.2.3/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.2.2</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.2.2/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.2.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.2.1/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.2.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.2.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.1.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.1.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.0.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.0.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.0.0-beta.1</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.0.0-beta.1/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
<h2>create-vite@5.0.0-beta.0</h2>
<p>Please refer to <a
href="https://github.com/vitejs/vite/blob/create-vite@5.0.0-beta.0/packages/create-vite/CHANGELOG.md">CHANGELOG.md</a>
for details.</p>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->5.2.11 (2024-05-02)<!-- raw HTML omitted
--></h2>
<ul>
<li>feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)
(<a href="https://github.com/vitejs/vite/commit/f8feeea">f8feeea</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16519">#16519</a></li>
<li>fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)
(<a href="https://github.com/vitejs/vite/commit/f71ba5b">f71ba5b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16518">#16518</a></li>
<li>fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)
(<a href="https://github.com/vitejs/vite/commit/0e93f58">0e93f58</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16421">#16421</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)
(<a href="https://github.com/vitejs/vite/commit/2d50be2">2d50be2</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16488">#16488</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)
(<a href="https://github.com/vitejs/vite/commit/2d6a13b">2d6a13b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16549">#16549</a></li>
<li>fix(dev): watch publicDir explicitly to include it outside the root
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)
(<a href="https://github.com/vitejs/vite/commit/4d83eb5">4d83eb5</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16502">#16502</a></li>
<li>fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)
(<a href="https://github.com/vitejs/vite/commit/bb79c9b">bb79c9b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16556">#16556</a></li>
<li>fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)
(<a href="https://github.com/vitejs/vite/commit/c071eb3">c071eb3</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16569">#16569</a></li>
<li>fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)
(<a href="https://github.com/vitejs/vite/commit/02db947">02db947</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16563">#16563</a></li>
</ul>
<h2><!-- raw HTML omitted -->5.2.10 (2024-04-20)<!-- raw HTML omitted
--></h2>
<ul>
<li>revert: perf: use workspace root for fs cache (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/15712">#15712</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16476">#16476</a>)
(<a href="https://github.com/vitejs/vite/commit/77e7359">77e7359</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/15712">#15712</a>
<a
href="https://redirect.github.com/vitejs/vite/issues/16476">#16476</a></li>
<li>fix: add base to virtual html (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16442">#16442</a>)
(<a href="https://github.com/vitejs/vite/commit/721f94d">721f94d</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16442">#16442</a></li>
<li>fix: adjust esm syntax judgment logic (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16436">#16436</a>)
(<a href="https://github.com/vitejs/vite/commit/af72eab">af72eab</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16436">#16436</a></li>
<li>fix: don't add outDirs to watch.ignored if emptyOutDir is false (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16453">#16453</a>)
(<a href="https://github.com/vitejs/vite/commit/6a127d6">6a127d6</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16453">#16453</a></li>
<li>fix(cspNonce): don't overwrite existing nonce values (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16415">#16415</a>)
(<a href="https://github.com/vitejs/vite/commit/b872635">b872635</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16415">#16415</a></li>
<li>feat: show warning if root is in build.outDir (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16454">#16454</a>)
(<a href="https://github.com/vitejs/vite/commit/11444dc">11444dc</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16454">#16454</a></li>
<li>feat: write cspNonce to style tags (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16419">#16419</a>)
(<a href="https://github.com/vitejs/vite/commit/8e54bbd">8e54bbd</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16419">#16419</a></li>
<li>chore(deps): update dependency eslint-plugin-n to v17 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16381">#16381</a>)
(<a href="https://github.com/vitejs/vite/commit/6cccef7">6cccef7</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16381">#16381</a></li>
</ul>
<h2><!-- raw HTML omitted -->5.2.9 (2024-04-15)<!-- raw HTML omitted
--></h2>
<ul>
<li>fix: <code>fsp.rm</code> removing files does not take effect (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16032">#16032</a>)
(<a href="https://github.com/vitejs/vite/commit/b05c405">b05c405</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16032">#16032</a></li>
<li>fix: fix accumulated stacks in error overlay (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16393">#16393</a>)
(<a href="https://github.com/vitejs/vite/commit/102c2fd">102c2fd</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16393">#16393</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16376">#16376</a>)
(<a href="https://github.com/vitejs/vite/commit/58a2938">58a2938</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16376">#16376</a></li>
<li>chore: update region comment (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16380">#16380</a>)
(<a href="https://github.com/vitejs/vite/commit/77562c3">77562c3</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16380">#16380</a></li>
<li>perf: reduce size of injected __vite__mapDeps code (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16184">#16184</a>)
(<a href="https://github.com/vitejs/vite/commit/c0ec6be">c0ec6be</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16184">#16184</a></li>
<li>perf(css): only replace empty chunk if imported (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16349">#16349</a>)
(<a href="https://github.com/vitejs/vite/commit/e2658ad">e2658ad</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16349">#16349</a></li>
</ul>
<h2><!-- raw HTML omitted -->5.2.8 (2024-04-03)<!-- raw HTML omitted
--></h2>
<ul>
<li>fix: csp nonce injection when no closing tag (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16281">#16281</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16282">#16282</a>)
(<a href="https://github.com/vitejs/vite/commit/3c85c6b">3c85c6b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16281">#16281</a>
<a
href="https://redirect.github.com/vitejs/vite/issues/16282">#16282</a></li>
<li>fix: do not access document in <code>/@vite/client</code> when not
defined (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16318">#16318</a>)
(<a href="https://github.com/vitejs/vite/commit/646319c">646319c</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16318">#16318</a></li>
<li>fix: fix sourcemap when using object as <code>define</code> value
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/15805">#15805</a>)
(<a href="https://github.com/vitejs/vite/commit/445c4f2">445c4f2</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/15805">#15805</a></li>
<li>fix(css): unknown file error happened with lightningcss (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16306">#16306</a>)
(<a href="https://github.com/vitejs/vite/commit/01af308">01af308</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16306">#16306</a></li>
<li>fix(hmr): multiple updates happened when invalidate is called while
multiple tabs open (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16307">#16307</a>)
(<a href="https://github.com/vitejs/vite/commit/21cc10b">21cc10b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16307">#16307</a></li>
<li>fix(scanner): duplicate modules for same id if glob is used in
html-like types (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16305">#16305</a>)
(<a href="https://github.com/vitejs/vite/commit/eca68fa">eca68fa</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16305">#16305</a></li>
<li>chore(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16325">#16325</a>)
(<a href="https://github.com/vitejs/vite/commit/a78e265">a78e265</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16325">#16325</a></li>
<li>refactor: use types from sass instead of <code>@​types/sass</code>
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16340">#16340</a>)
(<a href="https://github.com/vitejs/vite/commit/4581e83">4581e83</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16340">#16340</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2bc5d3de87"><code>2bc5d3d</code></a>
release: v5.2.11</li>
<li><a
href="f8feeea41c"><code>f8feeea</code></a>
feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)</li>
<li><a
href="c071eb3822"><code>c071eb3</code></a>
fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)</li>
<li><a
href="02db9479ac"><code>02db947</code></a>
fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)</li>
<li><a
href="2d6a13b0aa"><code>2d6a13b</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)</li>
<li><a
href="0e93f588b9"><code>0e93f58</code></a>
fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)</li>
<li><a
href="bb79c9b653"><code>bb79c9b</code></a>
fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)</li>
<li><a
href="f71ba5b94a"><code>f71ba5b</code></a>
fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)</li>
<li><a
href="2d50be2a54"><code>2d50be2</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)</li>
<li><a
href="4d83eb58cd"><code>4d83eb5</code></a>
fix(dev): watch publicDir explicitly to include it outside the root (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v5.2.11/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.6.0 to 7.6.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.6.1</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">7.6.1</a>
(2024-05-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="c570a348ff"><code>c570a34</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
linting: no-unused-vars (<a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
use internal cache implementation (<a
href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="ac9b35769a"><code>ac9b357</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/682">#682</a>
typo in compareBuild debug message (<a
href="https://redirect.github.com/npm/node-semver/issues/682">#682</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/709">#709</a>
uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
remove lru-cache</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
bump <code>@​npmcli/template-oss</code> to 4.22.0 (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/696">#696</a>
add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)
(<a href="https://github.com/H4ad"><code>@​H4ad</code></a>)</li>
<li><a
href="692451bd6f"><code>692451b</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/688">#688</a>
various improvements to README (<a
href="https://redirect.github.com/npm/node-semver/issues/688">#688</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="074156f64f"><code>074156f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
bump <code>@​npmcli/template-oss</code> from 4.21.3 to 4.21.4 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">7.6.1</a>
(2024-05-04)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="c570a348ff"><code>c570a34</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
linting: no-unused-vars (<a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
use internal cache implementation (<a
href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="ac9b35769a"><code>ac9b357</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/682">#682</a>
typo in compareBuild debug message (<a
href="https://redirect.github.com/npm/node-semver/issues/682">#682</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
<h3>Dependencies</h3>
<ul>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/709">#709</a>
uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/704">#704</a>
remove lru-cache</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
bump <code>@​npmcli/template-oss</code> to 4.22.0 (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/696">#696</a>
add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)
(<a href="https://github.com/H4ad"><code>@​H4ad</code></a>)</li>
<li><a
href="692451bd6f"><code>692451b</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/688">#688</a>
various improvements to README (<a
href="https://redirect.github.com/npm/node-semver/issues/688">#688</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/705">#705</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="074156f64f"><code>074156f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/701">#701</a>
bump <code>@​npmcli/template-oss</code> from 4.21.3 to 4.21.4 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d777418116"><code>d777418</code></a>
chore: release 7.6.1 (<a
href="https://redirect.github.com/npm/node-semver/issues/706">#706</a>)</li>
<li><a
href="988a8deb3e"><code>988a8de</code></a>
deps: uninstall <code>lru-cache</code> (<a
href="https://redirect.github.com/npm/node-semver/issues/709">#709</a>)</li>
<li><a
href="5feeb7f4f6"><code>5feeb7f</code></a>
chore: postinstall for dependabot template-oss PR</li>
<li><a
href="dd09b60da1"><code>dd09b60</code></a>
chore: bump <code>@​npmcli/template-oss</code> to 4.22.0</li>
<li><a
href="c570a348ff"><code>c570a34</code></a>
fix(linting): no-unused-vars</li>
<li><a
href="ad8ff11dd2"><code>ad8ff11</code></a>
fix: use internal cache implementation</li>
<li><a
href="3fabe4dbfb"><code>3fabe4d</code></a>
deps: remove lru-cache</li>
<li><a
href="ec49cdcece"><code>ec49cdc</code></a>
chore: chore: chore: postinstall for dependabot template-oss PR</li>
<li><a
href="074156f64f"><code>074156f</code></a>
chore: bump <code>@​npmcli/template-oss</code> from 4.21.3 to
4.21.4</li>
<li><a
href="b236c3d2f3"><code>b236c3d</code></a>
chore: add benchmarks (<a
href="https://redirect.github.com/npm/node-semver/issues/696">#696</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/npm/node-semver/compare/v7.6.0...v7.6.1">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/tldraw/tldraw/network/alerts).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-08 10:12:27 +00:00
Mitja Bezenšek
2dd71f8510
Measure action durations and fps for our interactions (#3472)
Adds a feature flag `Measure performance` that allows us to:
- Measure the performance of all the actions (it wraps them into
`measureCbDuration`).
- Measure the frame rate of certain interactions like resizing,
erasing,....

Example of how it looks like:

![CleanShot 2024-04-17 at 18 04
05](https://github.com/tldraw/tldraw/assets/2523721/0fb69745-f7b2-4b55-ac01-27ea26963d9a)


### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [x] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [x] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
=

---------

Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-05-08 10:06:05 +00:00
Mitja Bezenšek
ddebf3fc5c
Move storing of snapshots to R2 (#3693)
Instead of storing them in supabse we will store them in r2.

I have already created `room-snapshots` and `room-snapshots-preview`
buckets on cloudflare.

We could also migrate all the data from supabase, but it seems we
haven't done so for the rooms, so I also didn't look into doing it for
snapshots.

One slight drawback of moving to R2 is that it's harder to query data by
parent slug. So answering questions like which room is the parent to the
most snapshots is a bit harder to answer. Instead of just a simple query
we'd need to do some custom logic to go through the bucket. Not sure if
have ever needed this info though.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

Existing snapshots:

1. Load an existing snapshot. It should still load correctly. The best
way to do that is probably to generate a few of them in advance.

New snapshots:
1. Create a new room.
2. Create a few snapshot links.
3. They should work.

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

### Release Notes

- Move storing of snapshots to cloudflare R2.
2024-05-08 09:06:02 +00:00
dependabot[bot]
a2f4d35579
Bump the npm_and_yarn group across 2 directories with 6 updates (#3712)
Bumps the npm_and_yarn group with 3 updates in the / directory:
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite),
[tar](https://github.com/isaacs/node-tar) and
[zod](https://github.com/colinhacks/zod).
Bumps the npm_and_yarn group with 4 updates in the /templates/vite
directory:
[vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite),
[tar](https://github.com/isaacs/node-tar),
[semver](https://github.com/npm/node-semver) and
[word-wrap](https://github.com/jonschlinkert/word-wrap).

Updates `vite` from 5.2.9 to 5.2.11
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->5.2.11 (2024-05-02)<!-- raw HTML omitted
--></h2>
<ul>
<li>feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)
(<a href="https://github.com/vitejs/vite/commit/f8feeea">f8feeea</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16519">#16519</a></li>
<li>fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)
(<a href="https://github.com/vitejs/vite/commit/f71ba5b">f71ba5b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16518">#16518</a></li>
<li>fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)
(<a href="https://github.com/vitejs/vite/commit/0e93f58">0e93f58</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16421">#16421</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)
(<a href="https://github.com/vitejs/vite/commit/2d50be2">2d50be2</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16488">#16488</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)
(<a href="https://github.com/vitejs/vite/commit/2d6a13b">2d6a13b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16549">#16549</a></li>
<li>fix(dev): watch publicDir explicitly to include it outside the root
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)
(<a href="https://github.com/vitejs/vite/commit/4d83eb5">4d83eb5</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16502">#16502</a></li>
<li>fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)
(<a href="https://github.com/vitejs/vite/commit/bb79c9b">bb79c9b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16556">#16556</a></li>
<li>fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)
(<a href="https://github.com/vitejs/vite/commit/c071eb3">c071eb3</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16569">#16569</a></li>
<li>fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)
(<a href="https://github.com/vitejs/vite/commit/02db947">02db947</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16563">#16563</a></li>
</ul>
<h2><!-- raw HTML omitted -->5.2.10 (2024-04-20)<!-- raw HTML omitted
--></h2>
<ul>
<li>revert: perf: use workspace root for fs cache (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/15712">#15712</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16476">#16476</a>)
(<a href="https://github.com/vitejs/vite/commit/77e7359">77e7359</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/15712">#15712</a>
<a
href="https://redirect.github.com/vitejs/vite/issues/16476">#16476</a></li>
<li>fix: add base to virtual html (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16442">#16442</a>)
(<a href="https://github.com/vitejs/vite/commit/721f94d">721f94d</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16442">#16442</a></li>
<li>fix: adjust esm syntax judgment logic (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16436">#16436</a>)
(<a href="https://github.com/vitejs/vite/commit/af72eab">af72eab</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16436">#16436</a></li>
<li>fix: don't add outDirs to watch.ignored if emptyOutDir is false (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16453">#16453</a>)
(<a href="https://github.com/vitejs/vite/commit/6a127d6">6a127d6</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16453">#16453</a></li>
<li>fix(cspNonce): don't overwrite existing nonce values (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16415">#16415</a>)
(<a href="https://github.com/vitejs/vite/commit/b872635">b872635</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16415">#16415</a></li>
<li>feat: show warning if root is in build.outDir (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16454">#16454</a>)
(<a href="https://github.com/vitejs/vite/commit/11444dc">11444dc</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16454">#16454</a></li>
<li>feat: write cspNonce to style tags (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16419">#16419</a>)
(<a href="https://github.com/vitejs/vite/commit/8e54bbd">8e54bbd</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16419">#16419</a></li>
<li>chore(deps): update dependency eslint-plugin-n to v17 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16381">#16381</a>)
(<a href="https://github.com/vitejs/vite/commit/6cccef7">6cccef7</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16381">#16381</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2bc5d3de87"><code>2bc5d3d</code></a>
release: v5.2.11</li>
<li><a
href="f8feeea41c"><code>f8feeea</code></a>
feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)</li>
<li><a
href="c071eb3822"><code>c071eb3</code></a>
fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)</li>
<li><a
href="02db9479ac"><code>02db947</code></a>
fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)</li>
<li><a
href="2d6a13b0aa"><code>2d6a13b</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)</li>
<li><a
href="0e93f588b9"><code>0e93f58</code></a>
fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)</li>
<li><a
href="bb79c9b653"><code>bb79c9b</code></a>
fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)</li>
<li><a
href="f71ba5b94a"><code>f71ba5b</code></a>
fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)</li>
<li><a
href="2d50be2a54"><code>2d50be2</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)</li>
<li><a
href="4d83eb58cd"><code>4d83eb5</code></a>
fix(dev): watch publicDir explicitly to include it outside the root (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v5.2.11/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `tar` from 7.0.1 to 7.1.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md">tar's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>7.1</h2>
<ul>
<li>Update minipass to v7.1.0</li>
<li>Update the type definitions of <code>write()</code> and
<code>end()</code> methods on
<code>Unpack</code> and <code>Parser</code> classes to be compatible
with the
NodeJS.WritableStream type in the latest versions of
<code>@types/node</code>.</li>
</ul>
<h2>7.0</h2>
<ul>
<li>Rewrite in TypeScript, provide ESM and CommonJS hybrid
interface</li>
<li>Add tree-shake friendly exports, like
<code>import('tar/create')</code>
and <code>import('tar/read-entry')</code> to get individual functions or
classes.</li>
<li>Add <code>chmod</code> option that defaults to false, and deprecate
<code>noChmod</code>. That is, reverse the default option regarding
explicitly setting file system modes to match tar entry
settings.</li>
<li>Add <code>processUmask</code> option to avoid having to call
<code>process.umask()</code> when <code>chmod: true</code> (or
<code>noChmod: false</code>) is
set.</li>
</ul>
<h2>6.2</h2>
<ul>
<li>Add support for brotli compression</li>
<li>Add <code>maxDepth</code> option to prevent extraction into
excessively
deep folders.</li>
</ul>
<h2>6.1</h2>
<ul>
<li>remove dead link to benchmarks (<a
href="https://redirect.github.com/isaacs/node-tar/issues/313">#313</a>)
(<a href="https://github.com/yetzt"><code>@​yetzt</code></a>)</li>
<li>add examples/explanation of using tar.t (<a
href="https://github.com/isaacs"><code>@​isaacs</code></a>)</li>
<li>ensure close event is emited after stream has ended (<a
href="https://github.com/webark"><code>@​webark</code></a>)</li>
<li>replace deprecated String.prototype.substr() (<a
href="https://github.com/CommanderRoot"><code>@​CommanderRoot</code></a>,
<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h2>6.0</h2>
<ul>
<li>Drop support for node 6 and 8</li>
<li>fix symlinks and hardlinks on windows being packed with
<code>\</code>-style path targets</li>
</ul>
<h2>5.0</h2>
<ul>
<li>Address unpack race conditions using path reservations</li>
<li>Change large-numbers errors from TypeError to Error</li>
<li>Add <code>TAR_*</code> error codes</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ce612d0aa8"><code>ce612d0</code></a>
7.1.0</li>
<li><a
href="6b61030dac"><code>6b61030</code></a>
update types to comply with NodeJS.WritableStream</li>
<li><a
href="79a5c30d7b"><code>79a5c30</code></a>
update minipass</li>
<li><a
href="bead873b5c"><code>bead873</code></a>
remove more cruft, format codes</li>
<li><a
href="faf9359ca7"><code>faf9359</code></a>
remove temlate-oss stuff</li>
<li>See full diff in <a
href="https://github.com/isaacs/node-tar/compare/v7.0.1...v7.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `zod` from 3.22.4 to 3.23.6
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/colinhacks/zod/releases">zod's
releases</a>.</em></p>
<blockquote>
<h2>v3.23.6</h2>
<h2>Commits:</h2>
<ul>
<li>bc0095aab9e7254deb18701adc63de128ca2c742 Test on latest node</li>
<li>6e5699a30373cc22879f2bcb6902fc138518c980 Lint on latest node</li>
<li>1f466d9d00f446d7bed1962990e7a1ce813ab0d4 describe how one can
protect from cyclical objects starting an infini… (<a
href="https://redirect.github.com/colinhacks/zod/issues/3447">#3447</a>)</li>
<li>3fed6f21e0ea7adc91aa0cc44f75bcf4e526d98e Add zod playground link (<a
href="https://redirect.github.com/colinhacks/zod/issues/3454">#3454</a>)</li>
<li>04e1f379f6989d23dd45660fcabc78f76d7834f8 Fixed freezing async
ZodReadonly results (<a
href="https://redirect.github.com/colinhacks/zod/issues/3457">#3457</a>)</li>
<li>b87e59d0e4bbb4403bf27243afdcda9fcdeec258 Update sponsor tiers (<a
href="https://redirect.github.com/colinhacks/zod/issues/3453">#3453</a>)</li>
<li>143886151bba3930bdcc10d34a1cff4bf9103ba8 Add copper tier (<a
href="https://redirect.github.com/colinhacks/zod/issues/3460">#3460</a>)</li>
<li>ce3711e1384952d255769b9495f9bfadfb327291 add VSCode dev container
support and documenation</li>
<li>93b480b12ec3466cbd3b4182f7ce292e5c61528c v3.23.6</li>
</ul>
<h2>v3.23.5</h2>
<h2>Commits:</h2>
<ul>
<li>110b8211f991b3e060ab2da4fec7b63d600439ad Update README_ZH.md (<a
href="https://redirect.github.com/colinhacks/zod/issues/3433">#3433</a>)</li>
<li>c1910bdfc98709b8f14231e2cefc5a3be401e3ee Made ZodEnum take readonly
string array (<a
href="https://redirect.github.com/colinhacks/zod/issues/3444">#3444</a>)</li>
<li>541a862e978f96eb391849a6bf16be84231aa1b3 3.23.5</li>
</ul>
<h2>v3.23.4</h2>
<h2>Commits:</h2>
<ul>
<li>157b18d742c86d85b26a8421af46ad6d6d6b6ea7 Add 3.23 announcement</li>
<li>aedf93f1435a29463d915c3be45b4dcbeefa8cc1 Revert change to default
Input</li>
<li>45107f7a7230fe48ee24dc37e621422c9dc64ec4 v3.23.4</li>
</ul>
<h2>v3.23.3</h2>
<h2>Commits:</h2>
<ul>
<li>103d2436f85872ca0e0e6247652989cc93d46a39 3.23.3</li>
</ul>
<h2>v3.23.2</h2>
<h2>Commits:</h2>
<ul>
<li>c340558d14f5222a2ca177e0591463c06cc5edc3 Update protocol</li>
<li>ef588d036f3e98b832796e9a681dbaf097631ea0 Fix t3env</li>
<li>9df70dd71195df951c43f180fbe5e64ea1f835df 3.23.2</li>
</ul>
<h2>v3.23.1</h2>
<p>This changes the default generics back to <code>any</code> to prevent
breakages with common packager like
<code>@hookform/resolvers</code>:</p>
<pre lang="diff"><code>- class ZodType&lt;Output = unknown, Def extends
ZodTypeDef = ZodTypeDef, Input = unknown&gt; {}
+ class ZodType&lt;Output = any, Def extends ZodTypeDef = ZodTypeDef,
Input = any&gt; {}
</code></pre>
<h2>Commits:</h2>
<ul>
<li>59f48723d36c423d9e10b3bd52325a7998314230 Change unknown -&gt; any
for ZodType defaults</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="93b480b12e"><code>93b480b</code></a>
v3.23.6</li>
<li><a
href="ce3711e138"><code>ce3711e</code></a>
add VSCode dev container support and documenation</li>
<li><a
href="143886151b"><code>1438861</code></a>
Add copper tier (<a
href="https://redirect.github.com/colinhacks/zod/issues/3460">#3460</a>)</li>
<li><a
href="b87e59d0e4"><code>b87e59d</code></a>
Update sponsor tiers (<a
href="https://redirect.github.com/colinhacks/zod/issues/3453">#3453</a>)</li>
<li><a
href="04e1f379f6"><code>04e1f37</code></a>
Fixed freezing async ZodReadonly results (<a
href="https://redirect.github.com/colinhacks/zod/issues/3457">#3457</a>)</li>
<li><a
href="3fed6f21e0"><code>3fed6f2</code></a>
Add zod playground link (<a
href="https://redirect.github.com/colinhacks/zod/issues/3454">#3454</a>)</li>
<li><a
href="1f466d9d00"><code>1f466d9</code></a>
describe how one can protect from cyclical objects starting an infini…
(<a
href="https://redirect.github.com/colinhacks/zod/issues/3447">#3447</a>)</li>
<li><a
href="6e5699a303"><code>6e5699a</code></a>
Lint on latest node</li>
<li><a
href="bc0095aab9"><code>bc0095a</code></a>
Test on latest node</li>
<li><a
href="541a862e97"><code>541a862</code></a>
3.23.5</li>
<li>Additional commits viewable in <a
href="https://github.com/colinhacks/zod/compare/v3.22.4...v3.23.6">compare
view</a></li>
</ul>
</details>
<br />

Updates `vite` from 4.3.9 to 4.5.3
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md">vite's
changelog</a>.</em></p>
<blockquote>
<h2><!-- raw HTML omitted -->5.2.11 (2024-05-02)<!-- raw HTML omitted
--></h2>
<ul>
<li>feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)
(<a href="https://github.com/vitejs/vite/commit/f8feeea">f8feeea</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16519">#16519</a></li>
<li>fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)
(<a href="https://github.com/vitejs/vite/commit/f71ba5b">f71ba5b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16518">#16518</a></li>
<li>fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)
(<a href="https://github.com/vitejs/vite/commit/0e93f58">0e93f58</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16421">#16421</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)
(<a href="https://github.com/vitejs/vite/commit/2d50be2">2d50be2</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16488">#16488</a></li>
<li>fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)
(<a href="https://github.com/vitejs/vite/commit/2d6a13b">2d6a13b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16549">#16549</a></li>
<li>fix(dev): watch publicDir explicitly to include it outside the root
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)
(<a href="https://github.com/vitejs/vite/commit/4d83eb5">4d83eb5</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16502">#16502</a></li>
<li>fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)
(<a href="https://github.com/vitejs/vite/commit/bb79c9b">bb79c9b</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16556">#16556</a></li>
<li>fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)
(<a href="https://github.com/vitejs/vite/commit/c071eb3">c071eb3</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16569">#16569</a></li>
<li>fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)
(<a href="https://github.com/vitejs/vite/commit/02db947">02db947</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16563">#16563</a></li>
</ul>
<h2><!-- raw HTML omitted -->5.2.10 (2024-04-20)<!-- raw HTML omitted
--></h2>
<ul>
<li>revert: perf: use workspace root for fs cache (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/15712">#15712</a>)
(<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16476">#16476</a>)
(<a href="https://github.com/vitejs/vite/commit/77e7359">77e7359</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/15712">#15712</a>
<a
href="https://redirect.github.com/vitejs/vite/issues/16476">#16476</a></li>
<li>fix: add base to virtual html (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16442">#16442</a>)
(<a href="https://github.com/vitejs/vite/commit/721f94d">721f94d</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16442">#16442</a></li>
<li>fix: adjust esm syntax judgment logic (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16436">#16436</a>)
(<a href="https://github.com/vitejs/vite/commit/af72eab">af72eab</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16436">#16436</a></li>
<li>fix: don't add outDirs to watch.ignored if emptyOutDir is false (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16453">#16453</a>)
(<a href="https://github.com/vitejs/vite/commit/6a127d6">6a127d6</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16453">#16453</a></li>
<li>fix(cspNonce): don't overwrite existing nonce values (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16415">#16415</a>)
(<a href="https://github.com/vitejs/vite/commit/b872635">b872635</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16415">#16415</a></li>
<li>feat: show warning if root is in build.outDir (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16454">#16454</a>)
(<a href="https://github.com/vitejs/vite/commit/11444dc">11444dc</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16454">#16454</a></li>
<li>feat: write cspNonce to style tags (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16419">#16419</a>)
(<a href="https://github.com/vitejs/vite/commit/8e54bbd">8e54bbd</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16419">#16419</a></li>
<li>chore(deps): update dependency eslint-plugin-n to v17 (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16381">#16381</a>)
(<a href="https://github.com/vitejs/vite/commit/6cccef7">6cccef7</a>),
closes <a
href="https://redirect.github.com/vitejs/vite/issues/16381">#16381</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="2bc5d3de87"><code>2bc5d3d</code></a>
release: v5.2.11</li>
<li><a
href="f8feeea41c"><code>f8feeea</code></a>
feat: improve dynamic import variable failure error message (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16519">#16519</a>)</li>
<li><a
href="c071eb3822"><code>c071eb3</code></a>
fix(ssr): handle class declaration and expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16569">#16569</a>)</li>
<li><a
href="02db9479ac"><code>02db947</code></a>
fix(ssr): handle function expression name scoping (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16563">#16563</a>)</li>
<li><a
href="2d6a13b0aa"><code>2d6a13b</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16549">#16549</a>)</li>
<li><a
href="0e93f588b9"><code>0e93f58</code></a>
fix: scripts and styles were missing from built HTML on Windows (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16421">#16421</a>)</li>
<li><a
href="bb79c9b653"><code>bb79c9b</code></a>
fix(preload): skip preload for non-static urls (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16556">#16556</a>)</li>
<li><a
href="f71ba5b94a"><code>f71ba5b</code></a>
fix: dynamic-import-vars plugin normalize path issue (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16518">#16518</a>)</li>
<li><a
href="2d50be2a54"><code>2d50be2</code></a>
fix(deps): update all non-major dependencies (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16488">#16488</a>)</li>
<li><a
href="4d83eb58cd"><code>4d83eb5</code></a>
fix(dev): watch publicDir explicitly to include it outside the root (<a
href="https://github.com/vitejs/vite/tree/HEAD/packages/vite/issues/16502">#16502</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/vitejs/vite/commits/v5.2.11/packages/vite">compare
view</a></li>
</ul>
</details>
<br />

Updates `tar` from 6.2.0 to 6.2.1
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md">tar's
changelog</a>.</em></p>
<blockquote>
<h1>Changelog</h1>
<h2>7.1</h2>
<ul>
<li>Update minipass to v7.1.0</li>
<li>Update the type definitions of <code>write()</code> and
<code>end()</code> methods on
<code>Unpack</code> and <code>Parser</code> classes to be compatible
with the
NodeJS.WritableStream type in the latest versions of
<code>@types/node</code>.</li>
</ul>
<h2>7.0</h2>
<ul>
<li>Rewrite in TypeScript, provide ESM and CommonJS hybrid
interface</li>
<li>Add tree-shake friendly exports, like
<code>import('tar/create')</code>
and <code>import('tar/read-entry')</code> to get individual functions or
classes.</li>
<li>Add <code>chmod</code> option that defaults to false, and deprecate
<code>noChmod</code>. That is, reverse the default option regarding
explicitly setting file system modes to match tar entry
settings.</li>
<li>Add <code>processUmask</code> option to avoid having to call
<code>process.umask()</code> when <code>chmod: true</code> (or
<code>noChmod: false</code>) is
set.</li>
</ul>
<h2>6.2</h2>
<ul>
<li>Add support for brotli compression</li>
<li>Add <code>maxDepth</code> option to prevent extraction into
excessively
deep folders.</li>
</ul>
<h2>6.1</h2>
<ul>
<li>remove dead link to benchmarks (<a
href="https://redirect.github.com/isaacs/node-tar/issues/313">#313</a>)
(<a href="https://github.com/yetzt"><code>@​yetzt</code></a>)</li>
<li>add examples/explanation of using tar.t (<a
href="https://github.com/isaacs"><code>@​isaacs</code></a>)</li>
<li>ensure close event is emited after stream has ended (<a
href="https://github.com/webark"><code>@​webark</code></a>)</li>
<li>replace deprecated String.prototype.substr() (<a
href="https://github.com/CommanderRoot"><code>@​CommanderRoot</code></a>,
<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h2>6.0</h2>
<ul>
<li>Drop support for node 6 and 8</li>
<li>fix symlinks and hardlinks on windows being packed with
<code>\</code>-style path targets</li>
</ul>
<h2>5.0</h2>
<ul>
<li>Address unpack race conditions using path reservations</li>
<li>Change large-numbers errors from TypeError to Error</li>
<li>Add <code>TAR_*</code> error codes</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="ce612d0aa8"><code>ce612d0</code></a>
7.1.0</li>
<li><a
href="6b61030dac"><code>6b61030</code></a>
update types to comply with NodeJS.WritableStream</li>
<li><a
href="79a5c30d7b"><code>79a5c30</code></a>
update minipass</li>
<li><a
href="bead873b5c"><code>bead873</code></a>
remove more cruft, format codes</li>
<li><a
href="faf9359ca7"><code>faf9359</code></a>
remove temlate-oss stuff</li>
<li>See full diff in <a
href="https://github.com/isaacs/node-tar/compare/v7.0.1...v7.1.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `semver` from 7.5.2 to 7.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/releases">semver's
releases</a>.</em></p>
<blockquote>
<h2>v7.6.0</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.4...v7.6.0">7.6.0</a>
(2024-01-31)</h2>
<h3>Features</h3>
<ul>
<li><a
href="a7ab13a462"><code>a7ab13a</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/671">#671</a>
preserve pre-release and build parts of a version on coerce (<a
href="https://redirect.github.com/npm/node-semver/issues/671">#671</a>)
(<a href="https://github.com/madtisa"><code>@​madtisa</code></a>,
madtisa, <a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="816c7b2cbf"><code>816c7b2</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/667">#667</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="0bd24d943c"><code>0bd24d9</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/667">#667</a>
bump <code>@​npmcli/template-oss</code> from 4.21.1 to 4.21.3 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="e521932f11"><code>e521932</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="8873991808"><code>8873991</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="f317dc8689"><code>f317dc8</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
bump <code>@​npmcli/template-oss</code> from 4.19.0 to 4.21.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="7303db1fe5"><code>7303db1</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/658">#658</a>
add clean() test for build metadata (<a
href="https://redirect.github.com/npm/node-semver/issues/658">#658</a>)
(<a
href="https://github.com/jethrodaniel"><code>@​jethrodaniel</code></a>)</li>
<li><a
href="6240d75a7c"><code>6240d75</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/656">#656</a>
add missing quotes in README.md (<a
href="https://redirect.github.com/npm/node-semver/issues/656">#656</a>)
(<a href="https://github.com/zyxkad"><code>@​zyxkad</code></a>)</li>
<li><a
href="14d263faa1"><code>14d263f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/625">#625</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="7c34e1ac1b"><code>7c34e1a</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/625">#625</a>
bump <code>@​npmcli/template-oss</code> from 4.18.1 to 4.19.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="123e0b0328"><code>123e0b0</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/622">#622</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="737d5e1cf1"><code>737d5e1</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/622">#622</a>
bump <code>@​npmcli/template-oss</code> from 4.18.0 to 4.18.1 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="cce61804ba"><code>cce6180</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/598">#598</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b914a3d0d2"><code>b914a3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/598">#598</a>
bump <code>@​npmcli/template-oss</code> from 4.17.0 to 4.18.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
<h2>v7.5.4</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.3...v7.5.4">7.5.4</a>
(2023-07-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="cc6fde2d34"><code>cc6fde2</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/588">#588</a>
trim each range set before parsing (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="99d8287516"><code>99d8287</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/583">#583</a>
correctly parse long build ids as valid (<a
href="https://redirect.github.com/npm/node-semver/issues/583">#583</a>)
(<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h2>v7.5.3</h2>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.2...v7.5.3">7.5.3</a>
(2023-06-22)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="abdd93d554"><code>abdd93d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/571">#571</a>
set max lengths in regex for numeric and build identifiers (<a
href="https://redirect.github.com/npm/node-semver/issues/571">#571</a>)
(<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><a
href="bf53dd8da1"><code>bf53dd8</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/569">#569</a>
add example for <code>&gt;</code> comparator (<a
href="https://redirect.github.com/npm/node-semver/issues/569">#569</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/npm/node-semver/blob/main/CHANGELOG.md">semver's
changelog</a>.</em></p>
<blockquote>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.4...v7.6.0">7.6.0</a>
(2024-01-31)</h2>
<h3>Features</h3>
<ul>
<li><a
href="a7ab13a462"><code>a7ab13a</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/671">#671</a>
preserve pre-release and build parts of a version on coerce (<a
href="https://redirect.github.com/npm/node-semver/issues/671">#671</a>)
(<a href="https://github.com/madtisa"><code>@​madtisa</code></a>,
madtisa, <a
href="https://github.com/wraithgar"><code>@​wraithgar</code></a>)</li>
</ul>
<h3>Chores</h3>
<ul>
<li><a
href="816c7b2cbf"><code>816c7b2</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/667">#667</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="0bd24d943c"><code>0bd24d9</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/667">#667</a>
bump <code>@​npmcli/template-oss</code> from 4.21.1 to 4.21.3 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="e521932f11"><code>e521932</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="8873991808"><code>8873991</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
chore: chore: postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="f317dc8689"><code>f317dc8</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/652">#652</a>
bump <code>@​npmcli/template-oss</code> from 4.19.0 to 4.21.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="7303db1fe5"><code>7303db1</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/658">#658</a>
add clean() test for build metadata (<a
href="https://redirect.github.com/npm/node-semver/issues/658">#658</a>)
(<a
href="https://github.com/jethrodaniel"><code>@​jethrodaniel</code></a>)</li>
<li><a
href="6240d75a7c"><code>6240d75</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/656">#656</a>
add missing quotes in README.md (<a
href="https://redirect.github.com/npm/node-semver/issues/656">#656</a>)
(<a href="https://github.com/zyxkad"><code>@​zyxkad</code></a>)</li>
<li><a
href="14d263faa1"><code>14d263f</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/625">#625</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="7c34e1ac1b"><code>7c34e1a</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/625">#625</a>
bump <code>@​npmcli/template-oss</code> from 4.18.1 to 4.19.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="123e0b0328"><code>123e0b0</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/622">#622</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="737d5e1cf1"><code>737d5e1</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/622">#622</a>
bump <code>@​npmcli/template-oss</code> from 4.18.0 to 4.18.1 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
<li><a
href="cce61804ba"><code>cce6180</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/598">#598</a>
postinstall for dependabot template-oss PR (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="b914a3d0d2"><code>b914a3d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/598">#598</a>
bump <code>@​npmcli/template-oss</code> from 4.17.0 to 4.18.0 (<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot])</li>
</ul>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.3...v7.5.4">7.5.4</a>
(2023-07-07)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="cc6fde2d34"><code>cc6fde2</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/588">#588</a>
trim each range set before parsing (<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
<li><a
href="99d8287516"><code>99d8287</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/583">#583</a>
correctly parse long build ids as valid (<a
href="https://redirect.github.com/npm/node-semver/issues/583">#583</a>)
(<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h2><a
href="https://github.com/npm/node-semver/compare/v7.5.2...v7.5.3">7.5.3</a>
(2023-06-22)</h2>
<h3>Bug Fixes</h3>
<ul>
<li><a
href="abdd93d554"><code>abdd93d</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/571">#571</a>
set max lengths in regex for numeric and build identifiers (<a
href="https://redirect.github.com/npm/node-semver/issues/571">#571</a>)
(<a
href="https://github.com/lukekarrys"><code>@​lukekarrys</code></a>)</li>
</ul>
<h3>Documentation</h3>
<ul>
<li><a
href="bf53dd8da1"><code>bf53dd8</code></a>
<a href="https://redirect.github.com/npm/node-semver/pull/569">#569</a>
add example for <code>&gt;</code> comparator (<a
href="https://redirect.github.com/npm/node-semver/issues/569">#569</a>)
(<a href="https://github.com/mbtools"><code>@​mbtools</code></a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="377f709718"><code>377f709</code></a>
chore: release 7.6.0 (<a
href="https://redirect.github.com/npm/node-semver/issues/661">#661</a>)</li>
<li><a
href="a7ab13a462"><code>a7ab13a</code></a>
feat: preserve pre-release and build parts of a version on coerce (<a
href="https://redirect.github.com/npm/node-semver/issues/671">#671</a>)</li>
<li><a
href="816c7b2cbf"><code>816c7b2</code></a>
chore: postinstall for dependabot template-oss PR</li>
<li><a
href="0bd24d943c"><code>0bd24d9</code></a>
chore: bump <code>@​npmcli/template-oss</code> from 4.21.1 to
4.21.3</li>
<li><a
href="e521932f11"><code>e521932</code></a>
chore: postinstall for dependabot template-oss PR</li>
<li><a
href="8873991808"><code>8873991</code></a>
chore: chore: chore: postinstall for dependabot template-oss PR</li>
<li><a
href="f317dc8689"><code>f317dc8</code></a>
chore: bump <code>@​npmcli/template-oss</code> from 4.19.0 to
4.21.0</li>
<li><a
href="7303db1fe5"><code>7303db1</code></a>
chore: add clean() test for build metadata (<a
href="https://redirect.github.com/npm/node-semver/issues/658">#658</a>)</li>
<li><a
href="6240d75a7c"><code>6240d75</code></a>
chore: add missing quotes in README.md (<a
href="https://redirect.github.com/npm/node-semver/issues/656">#656</a>)</li>
<li><a
href="14d263faa1"><code>14d263f</code></a>
chore: postinstall for dependabot template-oss PR</li>
<li>Additional commits viewable in <a
href="https://github.com/npm/node-semver/compare/v7.5.2...v7.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `postcss` from 8.4.24 to 8.4.38
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/releases">postcss's
releases</a>.</em></p>
<blockquote>
<h2>8.4.38</h2>
<ul>
<li>Fixed <code>endIndex: 0</code> in errors and warnings (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
</ul>
<h2>8.4.37</h2>
<ul>
<li>Fixed <code>original.column are not numbers</code> error in another
case.</li>
</ul>
<h2>8.4.36</h2>
<ul>
<li>Fixed <code>original.column are not numbers</code> error on broken
previous source map.</li>
</ul>
<h2>8.4.35</h2>
<ul>
<li>Avoid <code>!</code> in <code>node.parent.nodes</code> type.</li>
<li>Allow to pass <code>undefined</code> to node adding method to
simplify types.</li>
</ul>
<h2>8.4.34</h2>
<ul>
<li>Fixed <code>AtRule#nodes</code> type (by <a
href="https://github.com/tim-we"><code>@​tim-we</code></a>).</li>
<li>Cleaned up code (by <a
href="https://github.com/DrKiraDmitry"><code>@​DrKiraDmitry</code></a>).</li>
</ul>
<h2>8.4.33</h2>
<ul>
<li>Fixed <code>NoWorkResult</code> behavior difference with normal mode
(by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed <code>NoWorkResult</code> usage conditions (by <a
href="https://github.com/ahmdammarr"><code>@​ahmdammarr</code></a>).</li>
</ul>
<h2>8.4.32</h2>
<ul>
<li>Fixed <code>postcss().process()</code> types (by <a
href="https://github.com/ferreira-tb"><code>@​ferreira-tb</code></a>).</li>
</ul>
<h2>8.4.31</h2>
<ul>
<li>Fixed <code>\r</code> parsing to fix CVE-2023-44270.</li>
</ul>
<h2>8.4.30</h2>
<ul>
<li>Improved source map performance (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
</ul>
<h2>8.4.29</h2>
<ul>
<li>Fixed <code>Node#source.offset</code> (by <a
href="https://github.com/idoros"><code>@​idoros</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/coliff"><code>@​coliff</code></a>).</li>
</ul>
<h2>8.4.28</h2>
<ul>
<li>Fixed <code>Root.source.end</code> for better source map (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed <code>Result.root</code> types when <code>process()</code> has
no parser.</li>
</ul>
<h2>8.4.27</h2>
<ul>
<li>Fixed <code>Container</code> clone methods types.</li>
</ul>
<h2>8.4.26</h2>
<ul>
<li>Fixed clone methods types.</li>
</ul>
<h2>8.4.25</h2>
<ul>
<li>Improve stringify performance (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
<li>Fixed docs (by <a
href="https://github.com/vikaskaliramna07"><code>@​vikaskaliramna07</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/postcss/postcss/blob/main/CHANGELOG.md">postcss's
changelog</a>.</em></p>
<blockquote>
<h2>8.4.38</h2>
<ul>
<li>Fixed <code>endIndex: 0</code> in errors and warnings (by <a
href="https://github.com/romainmenke"><code>@​romainmenke</code></a>).</li>
</ul>
<h2>8.4.37</h2>
<ul>
<li>Fixed <code>original.column are not numbers</code> error in another
case.</li>
</ul>
<h2>8.4.36</h2>
<ul>
<li>Fixed <code>original.column are not numbers</code> error on broken
previous source map.</li>
</ul>
<h2>8.4.35</h2>
<ul>
<li>Avoid <code>!</code> in <code>node.parent.nodes</code> type.</li>
<li>Allow to pass <code>undefined</code> to node adding method to
simplify types.</li>
</ul>
<h2>8.4.34</h2>
<ul>
<li>Fixed <code>AtRule#nodes</code> type (by Tim Weißenfels).</li>
<li>Cleaned up code (by Dmitry Kirillov).</li>
</ul>
<h2>8.4.33</h2>
<ul>
<li>Fixed <code>NoWorkResult</code> behavior difference with normal mode
(by Romain Menke).</li>
<li>Fixed <code>NoWorkResult</code> usage conditions (by <a
href="https://github.com/ahmdammarr"><code>@​ahmdammarr</code></a>).</li>
</ul>
<h2>8.4.32</h2>
<ul>
<li>Fixed <code>postcss().process()</code> types (by Andrew
Ferreira).</li>
</ul>
<h2>8.4.31</h2>
<ul>
<li>Fixed <code>\r</code> parsing to fix CVE-2023-44270.</li>
</ul>
<h2>8.4.30</h2>
<ul>
<li>Improved source map performance (by Romain Menke).</li>
</ul>
<h2>8.4.29</h2>
<ul>
<li>Fixed <code>Node#source.offset</code> (by Ido Rosenthal).</li>
<li>Fixed docs (by Christian Oliff).</li>
</ul>
<h2>8.4.28</h2>
<ul>
<li>Fixed <code>Root.source.end</code> for better source map (by Romain
Menke).</li>
<li>Fixed <code>Result.root</code> types when <code>process()</code> has
no parser.</li>
</ul>
<h2>8.4.27</h2>
<ul>
<li>Fixed <code>Container</code> clone methods types.</li>
</ul>
<h2>8.4.26</h2>
<ul>
<li>Fixed clone methods types.</li>
</ul>
<h2>8.4.25</h2>
<ul>
<li>Improve stringify performance (by Romain Menke).</li>
<li>Fixed docs (by <a
href="https://github.com/vikaskaliramna07"><code>@​vikaskaliramna07</code></a>).</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="a69d45ecae"><code>a69d45e</code></a>
Release 8.4.38 version</li>
<li><a
href="64e35d952c"><code>64e35d9</code></a>
Update dependencies</li>
<li><a
href="c1ad8fb402"><code>c1ad8fb</code></a>
Merge pull request <a
href="https://redirect.github.com/postcss/postcss/issues/1932">#1932</a>
from romainmenke/fix-warning-end-index--inventive-nu...</li>
<li><a
href="b45e7e9159"><code>b45e7e9</code></a>
fix endIndex</li>
<li><a
href="1bea2466db"><code>1bea246</code></a>
failing test: for endIndex 0 in rangeBy</li>
<li><a
href="0fd1d86f2d"><code>0fd1d86</code></a>
Add changelog auto release on Github</li>
<li><a
href="49c906ebc0"><code>49c906e</code></a>
Release 8.4.37 version</li>
<li><a
href="b5bd92ca41"><code>b5bd92c</code></a>
Fix another broken prev source map issue</li>
<li><a
href="28820396e1"><code>2882039</code></a>
Update dependencies</li>
<li><a
href="e5ad9394da"><code>e5ad939</code></a>
Release 8.4.36 version</li>
<li>Additional commits viewable in <a
href="https://github.com/postcss/postcss/compare/8.4.24...8.4.38">compare
view</a></li>
</ul>
</details>
<br />

Updates `word-wrap` from 1.2.3 to 1.2.5
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/jonschlinkert/word-wrap/releases">word-wrap's
releases</a>.</em></p>
<blockquote>
<h2>1.2.5</h2>
<p><strong>Changes</strong>:</p>
<p>Reverts default value for <code>options.indent</code> to two spaces
<code>' '</code>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/jonschlinkert/word-wrap/compare/1.2.4...1.2.5">https://github.com/jonschlinkert/word-wrap/compare/1.2.4...1.2.5</a></p>
<h2>1.2.4</h2>
<h2>What's Changed</h2>
<ul>
<li>Remove default indent by <a
href="https://github.com/mohd-akram"><code>@​mohd-akram</code></a> in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/24">jonschlinkert/word-wrap#24</a></li>
<li>🔒fix: CVE 2023 26115 (2) by <a
href="https://github.com/OlafConijn"><code>@​OlafConijn</code></a> in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/41">jonschlinkert/word-wrap#41</a></li>
<li>🔒 fix: CVE-2023-26115 by <a
href="https://github.com/aashutoshrathi"><code>@​aashutoshrathi</code></a>
in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/33">jonschlinkert/word-wrap#33</a></li>
<li>chore: publish workflow by <a
href="https://github.com/OlafConijn"><code>@​OlafConijn</code></a> in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/42">jonschlinkert/word-wrap#42</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a
href="https://github.com/mohd-akram"><code>@​mohd-akram</code></a> made
their first contribution in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/24">jonschlinkert/word-wrap#24</a></li>
<li><a
href="https://github.com/OlafConijn"><code>@​OlafConijn</code></a> made
their first contribution in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/41">jonschlinkert/word-wrap#41</a></li>
<li><a
href="https://github.com/aashutoshrathi"><code>@​aashutoshrathi</code></a>
made their first contribution in <a
href="https://redirect.github.com/jonschlinkert/word-wrap/pull/33">jonschlinkert/word-wrap#33</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4">https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="207044ebda"><code>207044e</code></a>
1.2.5</li>
<li><a
href="9894315485"><code>9894315</code></a>
revert default indent</li>
<li><a
href="f64b188c72"><code>f64b188</code></a>
run verb to generate README</li>
<li><a
href="03ea08256b"><code>03ea082</code></a>
Merge pull request <a
href="https://redirect.github.com/jonschlinkert/word-wrap/issues/42">#42</a>
from jonschlinkert/chore/publish-workflow</li>
<li><a
href="420dce9a24"><code>420dce9</code></a>
Merge pull request <a
href="https://redirect.github.com/jonschlinkert/word-wrap/issues/41">#41</a>
from jonschlinkert/fix/CVE-2023-26115-2</li>
<li><a
href="bfa694edf5"><code>bfa694e</code></a>
Update .github/workflows/publish.yml</li>
<li><a
href="ace0b3c78f"><code>ace0b3c</code></a>
chore: bump version to 1.2.4</li>
<li><a
href="6fd7275946"><code>6fd7275</code></a>
chore: add publish workflow</li>
<li><a
href="30d6daf60f"><code>30d6daf</code></a>
chore: fix test</li>
<li><a
href="655929cabe"><code>655929c</code></a>
chore: remove package-lock</li>
<li>Additional commits viewable in <a
href="https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.5">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after
your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge
and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating
it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions
You can disable automated security fix PRs for this repo from the
[Security Alerts page](https://github.com/tldraw/tldraw/network/alerts).

</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-05-07 14:54:56 +00:00
Mitja Bezenšek
ec5eded41b
Add asset pruning when importing files (#3689)
Adds pruning of unused assets when importing files.

Pulled out the pruning logic from the exporting of tldraw files and we
now use the same logic for both cases.

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know

### Release Notes

- Prunes unused assets when loading a tldraw document.
2024-05-07 14:48:01 +00:00
Mitja Bezenšek
b5caa53cee
Fix background color for patterned shapes. (#3708)
Background on exported patterned shapes was not the same as on the
shapes themselves. This was especially noticeable in dark mode.

I'm not sure if this is the colour we want to use as this changes the
existing shape colour. But it is in line to what we had a while back. In
any case
[generateImage](https://github.com/tldraw/tldraw/blob/main/packages/tldraw/src/lib/shapes/shared/defaultStyleDefs.tsx#L113)
should be using the same colour as
[HashPatternForExport](https://github.com/tldraw/tldraw/blob/main/packages/tldraw/src/lib/shapes/shared/defaultStyleDefs.tsx#L88).

### Before

![image](https://github.com/tldraw/tldraw/assets/2523721/2772818e-7461-4cea-a36b-c16c8206b9d5)


### After

![image](https://github.com/tldraw/tldraw/assets/2523721/2bbe189c-fa18-4198-b9b3-1851c2336cf1)


### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Add patterned shapes.
2. Copy them as SVG.
3. Paste them. They should look the same.

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

### Release Notes

- Fixes an issue with copy pasting shapes as svg and png not correctly
working for patterned shapes.
2024-05-07 13:55:44 +00:00
Steve Ruiz
ebc892a1a6
Camera options followups (#3701)
This PR adds a slideshow example (similar to @TodePond's slides but more
on rails) as a way to put some pressure on camera controls.

Along the way, it fixes some issues I found with animations and the new
camera controls.

- forced changes will continue to force through animations
- animations no longer set unnecessary additional listeners
- animations end correctly
- updating camera options does not immediately update the camera (to
allow for animations, etc.)

It also changes the location of the "in front of the canvas" element so
that it is not hidden by the hit test blocking element.

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `improvement` — Improving existing features
2024-05-07 10:06:35 +00:00
Steve Ruiz
fabba66c0f
Camera options (#3282)
This PR implements a camera options API.

- [x] Initial PR
- [x] Updated unit tests
- [x] Feedback / review
- [x] New unit tests
- [x] Update use-case examples
- [x] Ship?

## Public API

A user can provide camera options to the `Tldraw` component via the
`cameraOptions` prop. The prop is also available on the `TldrawEditor`
component and the constructor parameters of the `Editor` class.

```tsx
export default function CameraOptionsExample() {
	return (
		<div className="tldraw__editor">
			<Tldraw cameraOptions={CAMERA_OPTIONS} />
		</div>
	)
}
```

At runtime, a user can:
-  get the current camera options with `Editor.getCameraOptions`
-  update the camera options with `Editor.setCameraOptions`

Setting the camera options automatically applies them to the current
camera.

```ts
editor.setCameraOptions({...editor.getCameraOptions(), isLocked: true })
```

A user can get the "camera fit zoom" via `editor.getCameraFitZoom()`.

# Interface

The camera options themselves can look a few different ways depending on
the `type` provided.


```tsx
export type TLCameraOptions = {
	/** Whether the camera is locked. */
	isLocked: boolean
	/** The speed of a scroll wheel / trackpad pan. Default is 1. */
	panSpeed: number
	/** The speed of a scroll wheel / trackpad zoom. Default is 1. */
	zoomSpeed: number
	/** The steps that a user can zoom between with zoom in / zoom out. The first and last value will determine the min and max zoom. */
	zoomSteps: number[]
	/** Controls whether the wheel pans or zooms.
	 *
	 * - `zoom`: The wheel will zoom in and out.
	 * - `pan`: The wheel will pan the camera.
	 * - `none`: The wheel will do nothing.
	 */
	wheelBehavior: 'zoom' | 'pan' | 'none'
	/** The camera constraints. */
	constraints?: {
		/** The bounds (in page space) of the constrained space */
		bounds: BoxModel
		/** The padding inside of the viewport (in screen space) */
		padding: VecLike
		/** The origin for placement. Used to position the bounds within the viewport when an axis is fixed or contained and zoom is below the axis fit. */
		origin: VecLike
		/** The camera's initial zoom, used also when the camera is reset.
		 *
		 * - `default`: Sets the initial zoom to 100%.
		 * - `fit-x`: The x axis will completely fill the viewport bounds.
		 * - `fit-y`: The y axis will completely fill the viewport bounds.
		 * - `fit-min`: The smaller axis will completely fill the viewport bounds.
		 * - `fit-max`: The larger axis will completely fill the viewport bounds.
		 * - `fit-x-100`: The x axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-y-100`: The y axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-min-100`: The smaller axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-max-100`: The larger axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 */
		initialZoom:
			| 'fit-min'
			| 'fit-max'
			| 'fit-x'
			| 'fit-y'
			| 'fit-min-100'
			| 'fit-max-100'
			| 'fit-x-100'
			| 'fit-y-100'
			| 'default'
		/** The camera's base for its zoom steps.
		 *
		 * - `default`: Sets the initial zoom to 100%.
		 * - `fit-x`: The x axis will completely fill the viewport bounds.
		 * - `fit-y`: The y axis will completely fill the viewport bounds.
		 * - `fit-min`: The smaller axis will completely fill the viewport bounds.
		 * - `fit-max`: The larger axis will completely fill the viewport bounds.
		 * - `fit-x-100`: The x axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-y-100`: The y axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-min-100`: The smaller axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 * - `fit-max-100`: The larger axis will completely fill the viewport bounds, or 100% zoom, whichever is smaller.
		 */
		baseZoom:
			| 'fit-min'
			| 'fit-max'
			| 'fit-x'
			| 'fit-y'
			| 'fit-min-100'
			| 'fit-max-100'
			| 'fit-x-100'
			| 'fit-y-100'
			| 'default'
		/** The behavior for the constraints for both axes or each axis individually.
		 *
		 * - `free`: The bounds are ignored when moving the camera.
		 * - 'fixed': The bounds will be positioned within the viewport based on the origin
		 * - `contain`: The 'fixed' behavior will be used when the zoom is below the zoom level at which the bounds would fill the viewport; and when above this zoom, the bounds will use the 'inside' behavior.
		 * - `inside`: The bounds will stay completely within the viewport.
		 * - `outside`: The bounds will stay touching the viewport.
		 */
		behavior:
			| 'free'
			| 'fixed'
			| 'inside'
			| 'outside'
			| 'contain'
			| {
					x: 'free' | 'fixed' | 'inside' | 'outside' | 'contain'
					y: 'free' | 'fixed' | 'inside' | 'outside' | 'contain'
			  }
	}
}
```

### Change Type

- [x] `sdk` — Changes the tldraw SDK
- [x] `feature` — New feature

### Test Plan

These features combine in different ways, so we'll want to write some
more tests to find surprises.

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

- [ ] Unit Tests

### Release Notes

- SDK: Adds camera options.

---------

Co-authored-by: Mitja Bezenšek <mitja.bezensek@gmail.com>
2024-05-04 17:39:04 +00:00
Mitja Bezenšek
db7c3f59bf
Prevent duplicate from creating any shapes if we reach max allowed shapes (#3692)
This prevents duplicating shapes if we get to the max allowed shapes.
Before this change we would create as many shapes as we could and skip
the rest. After this change we don't create any shapes in this case.

We already do this for [copy
pasting](https://github.com/tldraw/tldraw/blob/mitja%2Fduplicate-shapes/packages/editor/src/lib/editor/Editor.ts#L7595-L7600)
(via `putContentOntoCurrentPage`), so no change was needed there.

Resolves https://github.com/tldraw/tldraw/issues/3669

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Create close to 2000 shapes.
2. Select so many shapes that duplicating them would go over the 2000
shapes per page limit.
3. Duplicate.
4. You should not create any shapes even if there is space for some of
them.

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

### Release Notes

- Prevent duplicating shapes if we would go over the maximum shape
limit. It's now an all or nothing operation, where as before some shapes
would get created.
2024-05-03 15:22:36 +00:00
Mime Čuvalo
68bc29f103
textfields: fix RTL layout for SVG exports (#3680)
Followup to https://github.com/tldraw/tldraw/pull/3188 (although this
problem was there before that PR)

This does more work for RTL rendering in SVG context, especially since
we position each span one-by-one.

I had to do a bit of esoteric spelunking and it turns out
[`unicode-bidi:
plaintext`](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi)
solves our issue even though it isn't really recommend to be used by web
developers. Fun times 🙃

Before:
<img width="369" alt="Screenshot 2024-05-02 at 11 45 44"
src="https://github.com/tldraw/tldraw/assets/469604/df55e03a-4760-4b8f-adad-ed1a8c13ad51">


After:
<img width="365" alt="Screenshot 2024-05-02 at 11 54 48"
src="https://github.com/tldraw/tldraw/assets/469604/3339bbf4-041a-4fdf-8b6e-6fa19dfb0a9e">




### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Test LTR text.
2. Test RTL text.
3. Test mixed LTR/RTL on different lines.

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

### Release Notes

- [Add a brief release note for your PR here.](textfields: fix RTL
layout for SVG exports)

---------

Co-authored-by: huppy-bot[bot] <128400622+huppy-bot[bot]@users.noreply.github.com>
2024-05-03 13:40:59 +00:00
Mitja Bezenšek
c308cc2edd
Prevent unnecessary fetching of readonly slugs (#3663)
Prevents unnecessary fetching of readonly slugs. We only need to fetch
it if we don't have it yet.

There was also a weird issue with `window.location.href` sometimes
returning encoded search params and sometimes decoded ones:


![image](https://github.com/tldraw/tldraw/assets/2523721/ca1e36c6-5e86-4e48-9350-c53de32a9f2e)

This then caused an additional fetch in the `setInterval` since the
[urls did not
match](https://github.com/tldraw/tldraw/blob/main/apps/dotcom/src/components/ShareMenu.tsx#L140).

![CleanShot 2024-04-30 at 14 37
12](https://github.com/tldraw/tldraw/assets/2523721/b1c540aa-902a-4574-a8e7-a0507f7dbda2)

Resolves https://github.com/tldraw/tldraw/issues/3661

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

1. Open a multiplayer room. You should only see one fetch for the
readonly slug.

1. Open a local room.
2. Share it. You should only see one fetch for the readonly slug.

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

### Release Notes

- Prevent unnecessary fetching of readonly slugs.
2024-05-03 10:47:58 +00:00
Mitja Bezenšek
1366a15b7a
VS Code 2.0.33 (#3687)
VS Code version bump.

As I mentioned in the standup there's a slight issue with VS Code
releases. We usually do a release, after that I create a VS Code
extension release (bump the package version, add the changelog). Which
means that if we then do a hotfix it does not have these changes as they
were added after a deploy.

So for this hotfix I did the following:
- checked out `hotfixes` branch
- created a new branch
- bumped package.json version and added change log
- committed it to the branch
- created a vs code extension package and published it
I don't think it makes sense to merge it back to hotfixes branch as it
would just create a new deploy with no changes.

Next I created this PR to get the changes to `main`.
- went to `main`
- created this branch from there and cherry picked the commit created
above

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [x] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [x] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
2024-05-03 10:04:15 +00:00
David Sheldrick
9210655eec
delete stray error screen css import (#3683)
Removes a stray .css import from #3673 , which created some precedence
issues

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-05-02 14:53:40 +00:00
David Sheldrick
623788c2db
Fix viewport following (#3681)
This was my bad after refactoring how the viewport following stuff used
store queries.

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Fixes an issue where viewport following was not working
2024-05-02 13:54:41 +00:00
David Sheldrick
f2827f6409
Allow clients to gracefully handle rejection (#3673)
This PR fixes the issue where sync clients would get into a reconnect
loop after being rejected by the sync server.

- Close the socket when in the error state (see useRemoteSyncClient)
- Show a 'plx refresh the page' screen that doesn't have a sad face on
it.
  
<img width="665" alt="image"
src="https://github.com/tldraw/tldraw/assets/1242537/96025fa3-cc20-4f53-8f58-74e473e16702">

- If older clients who can't handle rejection well need to be rejected
(e.g. due to a store migration being added) then we send them to a
special purgatory where the canvas goes blank and it shows the offline
indicator but the websocket connection stays open and it won't try to
reconnect.

### Change Type

- [x] `dotcom` — Changes the tldraw.com web app
- [x] `bugfix` — Bug fix


### Test Plan

1. Gonna manually test this one by doing sneaky deploys to a test PR
2024-05-02 13:54:21 +00:00
Lu Wilson
e999316691
Lokalise: Translations update (#3665)
This pull request was initiated by Lokalise (user Mitja) at 2024-04-30
15:15:53

- [x] sdk
- [x] chore

Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-05-02 12:41:32 +00:00
David Sheldrick
ffe3e7602c
don't render the minimap if it fails to initialize the gl context (#3679)
So far 33 people have had tldraw crash due to getContext('webgl2')
returning null for some reason. Maybe it's to do with what kind of
graphics hardware they have available.

This PR adds a stopgap measure wherein the minimap manager just fails to
render anything on the canvas element instead of crashing the app.
Ideally we'd have better UX around this but that can wait.

I'm gonna hotfix this to dotcom.

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know
2024-05-02 11:20:02 +00:00
Steve Ruiz
9ba4f7cf2a
Fix className.includes bug (#3672)
This PR (should) fix a Sentry bug:
https://tldraw.sentry.io/share/issue/c4cda01be5d142b79136e8ae97a7a3a7/

### Change Type

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

### Release Notes

- Fixes a rare bug effecting text shapes on mobile.
2024-05-01 10:43:27 +00:00
Eswar Prasad Clinton. A
06be91b97b
Fix link in collaboration documentation (#3662)
Describe what your pull request does. If appropriate, add GIFs or images
showing the before and after.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [x] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-04-30 14:03:18 +00:00
David Sheldrick
e4053a392c
[signia] perf thing again (#3645)
Will explain tomorrow

### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

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

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

### Release Notes

- Add a brief release note for your PR here.
2024-04-30 13:44:52 +00:00
Mitja Bezenšek
b431c854b3
VS Code 2.0.32 (#3664)
Version bump.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [x] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [ ] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [x] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know

### Release Notes

- VS Code release.
2024-04-30 13:03:27 +00:00
Mohammad Kazemi
085c3e5498
Fix textbox direction when it contains both RTL and LTR languages (#3188)
**Beofre:**

1. In a text box, text direction was set to Left-to-Right, regardless of
the text language.



**After:**
1. Text box direction is set to auto, so that it matches the direction
of text language.
2. Text dir is set to auto for each line of the text. To achieve this,
each line of text is now put in separated `<span>` tags with
`dir="auto"`.


![Screenshot_20240318_152725](https://github.com/tldraw/tldraw/assets/18334056/bfa8dd11-a2d1-46d0-b205-7a192c403fcd)


Note: Without putting each line of text into separated `<span>` tags,
whole text direction was in direction of initial line text. So each line
of text is now wrapped into separate tags.

### Change Type

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

- [ ] `sdk` — Changes the tldraw SDK
- [x] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [x] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Test Plan

Enter a text right-to-left and left-to-right into textboxes and note the
change of direction by clicking outside of the box, before and after
this PR.

### Release Notes

Fix textbox direction when it contains both RTL and LTR languages

---------

Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-04-30 11:30:43 +00:00
Mime Čuvalo
06509bf028
embed: prevent nested tldraw (#3659)
don't allow infinite nesting :)

<img width="1072" alt="Screenshot 2024-04-30 at 12 02 41"
src="https://github.com/tldraw/tldraw/assets/469604/fcb29ac8-5bde-4ff4-8c40-f093ab519c56">


### Change Type

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

- [x] `sdk` — Changes the tldraw SDK
- [ ] `dotcom` — Changes the tldraw.com web app
- [ ] `docs` — Changes to the documentation, examples, or templates.
- [ ] `vs code` — Changes to the vscode plugin
- [ ] `internal` — Does not affect user-facing stuff

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

- [x] `bugfix` — Bug fix
- [ ] `feature` — New feature
- [ ] `improvement` — Improving existing features
- [ ] `chore` — Updating dependencies, other boring stuff
- [ ] `galaxy brain` — Architectural changes
- [ ] `tests` — Changes to any test code
- [ ] `tools` — Changes to infrastructure, CI, internal scripts,
debugging tools, etc.
- [ ] `dunno` — I don't know


### Release Notes

- Embeds: Fix infinite nesting of tldraw rooms.
2024-04-30 11:15:17 +00:00
alex
8ba46fef49
fix undo/redo issues (#3658)
Fix some issues with the new undo/redo system - there were a few things
that were undoable that shouldn't be, and a few things that weren't but
should

### Change Type


- [x] `sdk` — Changes the tldraw SDK
- [x] `bugfix` — Bug fix
2024-04-30 11:01:39 +00:00