2023-04-25 11:01:25 +00:00
{
"action.convert-to-bookmark" : "Convert to Bookmark" ,
"action.convert-to-embed" : "Convert to Embed" ,
"action.open-embed-link" : "Open link" ,
"action.align-bottom" : "Align bottom" ,
"action.align-center-horizontal" : "Align horizontally" ,
"action.align-center-vertical" : "Align vertically" ,
"action.align-center-horizontal.short" : "Align H" ,
"action.align-center-vertical.short" : "Align V" ,
"action.align-left" : "Align left" ,
"action.align-right" : "Align right" ,
"action.align-top" : "Align top" ,
"action.back-to-content" : "Back to content" ,
"action.bring-forward" : "Bring forward" ,
"action.bring-to-front" : "Bring to front" ,
"action.copy-as-json.short" : "JSON" ,
"action.copy-as-json" : "Copy as JSON" ,
"action.copy-as-png.short" : "PNG" ,
"action.copy-as-png" : "Copy as PNG" ,
"action.copy-as-svg.short" : "SVG" ,
"action.copy-as-svg" : "Copy as SVG" ,
"action.copy" : "Copy" ,
"action.cut" : "Cut" ,
"action.delete" : "Delete" ,
2023-08-24 12:25:04 +00:00
"action.unlock-all" : "Unlock all" ,
2023-04-25 11:01:25 +00:00
"action.distribute-horizontal" : "Distribute horizontally" ,
"action.distribute-vertical" : "Distribute vertically" ,
"action.distribute-horizontal.short" : "Distribute H" ,
"action.distribute-vertical.short" : "Distribute V" ,
"action.duplicate" : "Duplicate" ,
"action.edit-link" : "Edit link" ,
"action.exit-pen-mode" : "Exit pen mode" ,
"action.export-as-json.short" : "JSON" ,
"action.export-as-json" : "Export as JSON" ,
"action.export-as-png.short" : "PNG" ,
"action.export-as-png" : "Export as PNG" ,
"action.export-as-svg.short" : "SVG" ,
"action.export-as-svg" : "Export as SVG" ,
2024-02-27 12:48:20 +00:00
"action.export-all-as-json.short" : "JSON" ,
2024-03-11 18:31:28 +00:00
"action.export-all-as-json" : "Export as JSON" ,
2024-02-27 12:48:20 +00:00
"action.export-all-as-png.short" : "PNG" ,
2024-03-11 18:31:28 +00:00
"action.export-all-as-png" : "Export as PNG" ,
2024-02-27 12:48:20 +00:00
"action.export-all-as-svg.short" : "SVG" ,
2024-03-11 18:31:28 +00:00
"action.export-all-as-svg" : "Export as SVG" ,
2023-12-07 12:57:56 +00:00
"action.fit-frame-to-content" : "Fit to content" ,
2023-04-25 11:01:25 +00:00
"action.flip-horizontal" : "Flip horizontally" ,
"action.flip-vertical" : "Flip vertically" ,
"action.flip-horizontal.short" : "Flip H" ,
"action.flip-vertical.short" : "Flip V" ,
2023-05-25 09:51:28 +00:00
"action.fork-project" : "Fork this project" ,
Readonly / room creation omnibus (#3192)
Reworks how the readonly urls work. Till now we just used a simple
function that would scramble the slugs. Now we use a proper key value
mapping between regular and readonly slugs:
- We use two KV stores. One is for going from a slug to a readonly slug
and the other one for going the other way around. They are populated at
the same time.
- We separate preview KV stores (dev, preview, staging) from production
one. I've already created these on Cloudflare. [My understanding is
](https://developers.cloudflare.com/kv/reference/data-security/#encryption-at-rest)that
ids [can be
public](https://community.cloudflare.com/t/is-it-safe-to-keep-kv-ids-in-a-public-git-repo/517387/4)
since we can only access KV from our worker. Happy to move them to env
variables though.
- [x] Disable creating new rooms when tldraw is embedded inside iframes
on other websites (we check the referrer and if it's not the same as the
iframe's origin we don't allow it)
- [x] Fork a project when inside an iframe now opens the forked project
on tldraw.com and not inside iframe.
- [x] We allow embeding of iframes, but we now track the where they are
used via the referrer. We send this to Vercel analytics.
- [x] Improved UX of the share menu to make it less confusing. Toggle is
gone.
- [x] `/new` and `/r` routes not redirect to `/`.
- [x] This introduces a new `/ro` route for readonly rooms. Legacy rooms
still live on `/v`.
- [x] Brought back `dotcom-shared` project to share code between BE and
FE. Mostly types.
- [x] Prevent creating of rooms by entering `/r/non-existing-slug`.
- [x] Handle getting a readonly slug for old rooms. Added a comment
about it
[here](https://github.com/tldraw/tldraw/pull/3192/files#diff-c0954b3dc71bb7097c39656441175f3238ed60cf5cee64077c06e21da82182cbR17-R18).
- [x] We no longer expose editor on the window object for readonly
rooms. Prevents the users disabling readonly rooms manually.
### 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. Make sure old readonly rooms still work.
2. Creating a readonly link from an existing room should still use `/v`
path.
3. Newly created rooms should use `/ro` path for readonly rooms. Make
sure these work as well.
4. `/r` room was disabled and redirects to `/`
5. `/new` should still work when not inside iframes.
- [x] Unit Tests
- [ ] End to end tests
### Release Notes
1. This adds new functionality for readonly rooms:
- We have a new route `/ro` for newly created readonly rooms. These
rooms no longer use the scrambling logic to create readonly slugs.
Instead we now use KV storage from cloudflare to track the mapping for
slugs -> readonly slug and readonly slug -> slug.
- The old route `/v` is preserved, so that the old room still work as
they did before.
- For old rooms we will keep on generating the old readonly slugs, but
for new rooms we'll start using the new logic.
2. We no longer prevent embedding of tldraw inside iframes.
3. We do prevent generating new rooms from inside the iframes though.
`/r`, `/new`, `/r/non-existing-id` should not allow creation of new
rooms inside iframes. Only `/new` still works when not inside iframes.
4. Forking a project from inside an iframe now opens it on tldraw.com
5. Slight copy change on the sharing menu. We no longer have a toggle
between readonly and non-readonly links.
6. `editor` and `app` are no longer exposed on the window object for
readonly rooms. Prevents users from using the `updateInstanceState` to
escape readonly rooms.
---------
Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-04-25 14:10:40 +00:00
"action.fork-project-on-tldraw" : "Fork project on tldraw" ,
2023-04-25 11:01:25 +00:00
"action.group" : "Group" ,
"action.insert-embed" : "Insert embed" ,
"action.insert-media" : "Upload media" ,
2023-05-25 09:51:28 +00:00
"action.leave-shared-project" : "Leave shared project" ,
2023-04-25 11:01:25 +00:00
"action.new-project" : "New project" ,
"action.new-shared-project" : "New shared project" ,
2023-06-15 15:10:08 +00:00
"action.open-cursor-chat" : "Cursor chat" ,
2023-04-25 11:01:25 +00:00
"action.open-file" : "Open file" ,
"action.pack" : "Pack" ,
"action.paste" : "Paste" ,
2024-07-09 12:33:01 +00:00
"action.paste-error-title" : "Pasting failed" ,
"action.paste-error-description" : "Could not paste due to missing clipboard permissions. Please enable the permissions and try again." ,
2023-04-25 11:01:25 +00:00
"action.print" : "Print" ,
"action.redo" : "Redo" ,
2023-11-29 12:01:57 +00:00
"action.remove-frame" : "Remove frame" ,
2024-02-19 12:30:26 +00:00
"action.rename" : "Rename" ,
2023-04-25 11:01:25 +00:00
"action.rotate-ccw" : "Rotate counterclockwise" ,
"action.rotate-cw" : "Rotate clockwise" ,
"action.save-copy" : "Save a copy" ,
"action.select-all" : "Select all" ,
"action.select-none" : "Select none" ,
"action.send-backward" : "Send backward" ,
"action.send-to-back" : "Send to back" ,
"action.share-project" : "Share this project" ,
"action.stack-horizontal" : "Stack horizontally" ,
"action.stack-vertical" : "Stack vertically" ,
"action.stack-horizontal.short" : "Stack H" ,
"action.stack-vertical.short" : "Stack V" ,
"action.stop-following" : "Stop following" ,
"action.stretch-horizontal" : "Stretch horizontally" ,
"action.stretch-vertical" : "Stretch vertically" ,
"action.stretch-horizontal.short" : "Stretch H" ,
"action.stretch-vertical.short" : "Stretch V" ,
"action.toggle-auto-size" : "Toggle auto size" ,
"action.toggle-dark-mode.menu" : "Dark mode" ,
"action.toggle-dark-mode" : "Toggle dark mode" ,
2024-07-09 09:09:34 +00:00
"action.toggle-paste-at-cursor.menu" : "Paste at cursor" ,
"action.toggle-paste-at-cursor" : "Toggle paste at cursor" ,
2024-02-29 11:45:02 +00:00
"action.toggle-wrap-mode.menu" : "Select on wrap" ,
"action.toggle-wrap-mode" : "Toggle Select on wrap" ,
2023-05-30 15:22:49 +00:00
"action.toggle-reduce-motion.menu" : "Reduce motion" ,
"action.toggle-reduce-motion" : "Toggle reduce motion" ,
2023-12-15 23:37:03 +00:00
"action.toggle-edge-scrolling.menu" : "Edge scrolling" ,
"action.toggle-edge-scrolling" : "Toggle edge scrolling" ,
2023-04-25 11:01:25 +00:00
"action.toggle-debug-mode.menu" : "Debug mode" ,
"action.toggle-debug-mode" : "Toggle debug mode" ,
"action.toggle-focus-mode.menu" : "Focus mode" ,
"action.toggle-focus-mode" : "Toggle focus mode" ,
2024-06-16 16:58:13 +00:00
"action.toggle-dynamic-size-mode.menu" : "Dynamic size" ,
"action.toggle-dynamic-size-mode" : "Toggle dynamic size" ,
2023-04-25 11:01:25 +00:00
"action.toggle-grid.menu" : "Show grid" ,
"action.toggle-grid" : "Toggle grid" ,
2023-06-06 11:52:26 +00:00
"action.toggle-lock" : "Toggle locked" ,
2024-06-16 11:40:50 +00:00
"action.flatten-to-image" : "Flatten" ,
2023-04-25 11:01:25 +00:00
"action.toggle-snap-mode.menu" : "Always snap" ,
"action.toggle-snap-mode" : "Toggle always snap" ,
"action.toggle-tool-lock.menu" : "Tool lock" ,
"action.toggle-tool-lock" : "Toggle tool lock" ,
"action.toggle-transparent.context-menu" : "Transparent" ,
"action.toggle-transparent.menu" : "Transparent" ,
"action.toggle-transparent" : "Toggle transparent background" ,
"action.undo" : "Undo" ,
"action.ungroup" : "Ungroup" ,
"action.zoom-in" : "Zoom in" ,
"action.zoom-out" : "Zoom out" ,
"action.zoom-to-100" : "Zoom to 100%" ,
"action.zoom-to-fit" : "Zoom to fit" ,
"action.zoom-to-selection" : "Zoom to selection" ,
2024-07-09 13:05:31 +00:00
"assets.files.size-too-big" : "File size is too big" ,
"assets.files.type-not-allowed" : "File type is not allowed" ,
2024-02-27 14:14:42 +00:00
"assets.files.upload-failed" : "Upload failed" ,
"assets.url.failed" : "Couldn't load URL preview" ,
2024-06-20 10:04:47 +00:00
"theme.dark" : "Dark" ,
"theme.light" : "Light" ,
"theme.system" : "System" ,
2024-04-01 18:48:56 +00:00
"color-style.white" : "White" ,
2023-04-25 11:01:25 +00:00
"color-style.black" : "Black" ,
"color-style.blue" : "Blue" ,
"color-style.green" : "Green" ,
"color-style.grey" : "Grey" ,
"color-style.light-blue" : "Light blue" ,
"color-style.light-green" : "Light green" ,
"color-style.light-red" : "Light red" ,
"color-style.light-violet" : "Light violet" ,
"color-style.orange" : "Orange" ,
"color-style.red" : "Red" ,
"color-style.violet" : "Violet" ,
"color-style.yellow" : "Yellow" ,
"fill-style.none" : "None" ,
2024-02-19 12:30:26 +00:00
"document.default-name" : "Untitled" ,
2023-04-25 11:01:25 +00:00
"fill-style.semi" : "Semi" ,
"fill-style.solid" : "Solid" ,
"fill-style.pattern" : "Pattern" ,
2024-06-18 10:50:01 +00:00
"fill-style.fill" : "Fill" ,
2023-04-25 11:01:25 +00:00
"dash-style.dashed" : "Dashed" ,
"dash-style.dotted" : "Dotted" ,
"dash-style.draw" : "Draw" ,
"dash-style.solid" : "Solid" ,
"size-style.s" : "Small" ,
"size-style.m" : "Medium" ,
"size-style.l" : "Large" ,
"size-style.xl" : "Extra large" ,
"opacity-style.0.1" : "10%" ,
"opacity-style.0.25" : "25%" ,
"opacity-style.0.5" : "50%" ,
"opacity-style.0.75" : "75%" ,
"opacity-style.1" : "100%" ,
"font-style.draw" : "Draw" ,
"font-style.sans" : "Sans" ,
"font-style.serif" : "Serif" ,
"font-style.mono" : "Mono" ,
"align-style.start" : "Start" ,
"align-style.middle" : "Middle" ,
"align-style.end" : "End" ,
"align-style.justify" : "Justify" ,
2024-01-25 11:26:12 +00:00
"verticalAlign-style.start" : "Top" ,
"verticalAlign-style.middle" : "Middle" ,
"verticalAlign-style.end" : "Bottom" ,
2023-04-25 11:01:25 +00:00
"geo-style.arrow-down" : "Arrow down" ,
"geo-style.arrow-left" : "Arrow left" ,
"geo-style.arrow-right" : "Arrow right" ,
"geo-style.arrow-up" : "Arrow up" ,
"geo-style.diamond" : "Diamond" ,
"geo-style.ellipse" : "Ellipse" ,
"geo-style.hexagon" : "Hexagon" ,
"geo-style.octagon" : "Octagon" ,
"geo-style.oval" : "Oval" ,
2023-07-07 15:32:08 +00:00
"geo-style.cloud" : "Cloud" ,
2023-04-25 11:01:25 +00:00
"geo-style.pentagon" : "Pentagon" ,
"geo-style.rectangle" : "Rectangle" ,
"geo-style.rhombus-2" : "Rhombus 2" ,
"geo-style.rhombus" : "Rhombus" ,
"geo-style.star" : "Star" ,
"geo-style.trapezoid" : "Trapezoid" ,
"geo-style.triangle" : "Triangle" ,
2023-05-09 13:32:04 +00:00
"geo-style.x-box" : "X box" ,
"geo-style.check-box" : "Check box" ,
2023-04-25 11:01:25 +00:00
"arrowheadStart-style.none" : "None" ,
"arrowheadStart-style.arrow" : "Arrow" ,
"arrowheadStart-style.bar" : "Bar" ,
"arrowheadStart-style.diamond" : "Diamond" ,
"arrowheadStart-style.dot" : "Dot" ,
"arrowheadStart-style.inverted" : "Inverted" ,
"arrowheadStart-style.pipe" : "Pipe" ,
"arrowheadStart-style.square" : "Square" ,
"arrowheadStart-style.triangle" : "Triangle" ,
"arrowheadEnd-style.none" : "None" ,
"arrowheadEnd-style.arrow" : "Arrow" ,
"arrowheadEnd-style.bar" : "Bar" ,
"arrowheadEnd-style.diamond" : "Diamond" ,
"arrowheadEnd-style.dot" : "Dot" ,
"arrowheadEnd-style.inverted" : "Inverted" ,
"arrowheadEnd-style.pipe" : "Pipe" ,
"arrowheadEnd-style.square" : "Square" ,
"arrowheadEnd-style.triangle" : "Triangle" ,
"spline-style.line" : "Line" ,
"spline-style.cubic" : "Cubic" ,
"tool.select" : "Select" ,
"tool.hand" : "Hand" ,
"tool.draw" : "Draw" ,
"tool.eraser" : "Eraser" ,
"tool.arrow-down" : "Arrow down" ,
"tool.arrow-left" : "Arrow left" ,
"tool.arrow-right" : "Arrow right" ,
"tool.arrow-up" : "Arrow up" ,
"tool.arrow" : "Arrow" ,
2023-07-11 10:01:53 +00:00
"tool.cloud" : "Cloud" ,
2023-04-25 11:01:25 +00:00
"tool.diamond" : "Diamond" ,
"tool.ellipse" : "Ellipse" ,
"tool.hexagon" : "Hexagon" ,
2023-06-01 12:46:13 +00:00
"tool.highlight" : "Highlight" ,
2023-04-25 11:01:25 +00:00
"tool.line" : "Line" ,
"tool.octagon" : "Octagon" ,
"tool.oval" : "Oval" ,
"tool.pentagon" : "Pentagon" ,
"tool.rectangle" : "Rectangle" ,
"tool.rhombus" : "Rhombus" ,
"tool.star" : "Star" ,
"tool.trapezoid" : "Trapezoid" ,
"tool.triangle" : "Triangle" ,
"tool.x-box" : "X box" ,
2023-05-09 13:32:04 +00:00
"tool.check-box" : "Check box" ,
2023-04-25 11:01:25 +00:00
"tool.asset" : "Asset" ,
"tool.frame" : "Frame" ,
"tool.note" : "Note" ,
2023-05-19 11:09:13 +00:00
"tool.laser" : "Laser" ,
2023-04-25 11:01:25 +00:00
"tool.embed" : "Embed" ,
"tool.text" : "Text" ,
"menu.title" : "Menu" ,
2024-06-20 10:04:47 +00:00
"menu.theme" : "Theme" ,
2023-04-25 11:01:25 +00:00
"menu.copy-as" : "Copy as" ,
"menu.edit" : "Edit" ,
"menu.export-as" : "Export as" ,
"menu.file" : "File" ,
"menu.language" : "Language" ,
"menu.preferences" : "Preferences" ,
sdk: wires up tldraw to have licensing mechanisms (#4021)
For non-commercial usage of tldraw, this adds a watermark in the corner,
both for branding purposes and as an incentive for our enterprise
customers to purchase a license.
For commercial usage of tldraw, you add a license to the `<Tldraw
licenseKey={YOUR_LICENSE_KEY} />` component so that the watermark
doesn't show.
The license is a signed key that has various bits of information in it,
such as:
- license type
- hosts that the license is valid for
- whether it's an internal-only license
- expiry date
We check the license on load and show a watermark (or throw an error if
internal-only) if the license is not valid in a production environment.
This is a @MitjaBezensek, @Taha-Hassan-Git, @mimecuvalo joint
production! 🤜 🤛
### 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
- [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
### Test Plan
1. We will be dogfooding on staging.tldraw.com and tldraw.com itself
before releasing this.
### Release Notes
- SDK: wires up tldraw to have licensing mechanisms.
---------
Co-authored-by: Mitja Bezenšek <mitja.bezensek@gmail.com>
Co-authored-by: Taha <98838967+Taha-Hassan-Git@users.noreply.github.com>
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-07-11 11:49:18 +00:00
"menu.help" : "Help" ,
2023-04-25 11:01:25 +00:00
"menu.view" : "View" ,
2024-06-16 11:40:50 +00:00
"context-menu.edit" : "Edit" ,
2023-04-25 11:01:25 +00:00
"context-menu.arrange" : "Arrange" ,
"context-menu.copy-as" : "Copy as" ,
"context-menu.export-as" : "Export as" ,
2024-03-11 18:31:28 +00:00
"context-menu.export-all-as" : "Export" ,
2023-04-25 11:01:25 +00:00
"context-menu.move-to-page" : "Move to page" ,
"context-menu.reorder" : "Reorder" ,
"page-menu.title" : "Pages" ,
"page-menu.create-new-page" : "Create new page" ,
"page-menu.max-page-count-reached" : "Max pages reached" ,
"page-menu.new-page-initial-name" : "Page 1" ,
"page-menu.edit-start" : "Edit" ,
"page-menu.edit-done" : "Done" ,
"page-menu.go-to-page" : "Go to page" ,
"page-menu.submenu.rename" : "Rename" ,
"page-menu.submenu.duplicate-page" : "Duplicate" ,
"page-menu.submenu.title" : "Menu" ,
"page-menu.submenu.move-down" : "Move down" ,
"page-menu.submenu.move-up" : "Move up" ,
"page-menu.submenu.delete" : "Delete" ,
"share-menu.title" : "Share" ,
2023-05-17 14:01:50 +00:00
"share-menu.save-note" : "Download this project to your computer as a .tldr file." ,
"share-menu.fork-note" : "Create a new shared project based on this snapshot." ,
2023-04-25 11:01:25 +00:00
"share-menu.share-project" : "Share this project" ,
2023-06-01 18:46:26 +00:00
"share-menu.default-project-name" : "Shared Project" ,
Open share menu when navigating from create new shared project button (#3898)
This PR ensures that the share menu is open when navigating from the
create new shared project button.
This could be achieved by calling ```editor.addOpenMenu('share-menu')```
after ```navigate('/new')``` , but that opens the menu on the local
editor first so you get a flash of that before the multiplayer editor
loads.
Instead I've used the state prop on the Navigate component/function to
pass a property called shouldOpenShareMenu.
If the user presses the back button to return to the local editor
instance then the open state of the share menu is preserved, which is
actually something we don't want in this case. Not sure how to deal with
that without adding a ton more complexity, is it worth it?
### 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. Click create new shared project from the file menu
2. Share menu should open after navigating to the new room
### Release Notes
- Open share menu when navigating from the create new shared project
button.
---------
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-06-10 08:15:55 +00:00
"share-menu.copy-link" : "Copy editor link" ,
2023-04-25 11:01:25 +00:00
"share-menu.readonly-link" : "Read-only" ,
2023-05-17 14:01:50 +00:00
"share-menu.create-snapshot-link" : "Copy snapshot link" ,
"share-menu.snapshot-link-note" : "Capture and share this project as a read-only snapshot link." ,
Open share menu when navigating from create new shared project button (#3898)
This PR ensures that the share menu is open when navigating from the
create new shared project button.
This could be achieved by calling ```editor.addOpenMenu('share-menu')```
after ```navigate('/new')``` , but that opens the menu on the local
editor first so you get a flash of that before the multiplayer editor
loads.
Instead I've used the state prop on the Navigate component/function to
pass a property called shouldOpenShareMenu.
If the user presses the back button to return to the local editor
instance then the open state of the share menu is preserved, which is
actually something we don't want in this case. Not sure how to deal with
that without adding a ton more complexity, is it worth it?
### 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. Click create new shared project from the file menu
2. Share menu should open after navigating to the new room
### Release Notes
- Open share menu when navigating from the create new shared project
button.
---------
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-06-10 08:15:55 +00:00
"share-menu.copy-readonly-link" : "Copy viewer link" ,
2023-05-17 14:01:50 +00:00
"share-menu.offline-note" : "Create a new shared project based on your current project." ,
2023-04-25 11:01:25 +00:00
"share-menu.copy-link-note" : "Anyone with the link will be able to view and edit this project." ,
Readonly / room creation omnibus (#3192)
Reworks how the readonly urls work. Till now we just used a simple
function that would scramble the slugs. Now we use a proper key value
mapping between regular and readonly slugs:
- We use two KV stores. One is for going from a slug to a readonly slug
and the other one for going the other way around. They are populated at
the same time.
- We separate preview KV stores (dev, preview, staging) from production
one. I've already created these on Cloudflare. [My understanding is
](https://developers.cloudflare.com/kv/reference/data-security/#encryption-at-rest)that
ids [can be
public](https://community.cloudflare.com/t/is-it-safe-to-keep-kv-ids-in-a-public-git-repo/517387/4)
since we can only access KV from our worker. Happy to move them to env
variables though.
- [x] Disable creating new rooms when tldraw is embedded inside iframes
on other websites (we check the referrer and if it's not the same as the
iframe's origin we don't allow it)
- [x] Fork a project when inside an iframe now opens the forked project
on tldraw.com and not inside iframe.
- [x] We allow embeding of iframes, but we now track the where they are
used via the referrer. We send this to Vercel analytics.
- [x] Improved UX of the share menu to make it less confusing. Toggle is
gone.
- [x] `/new` and `/r` routes not redirect to `/`.
- [x] This introduces a new `/ro` route for readonly rooms. Legacy rooms
still live on `/v`.
- [x] Brought back `dotcom-shared` project to share code between BE and
FE. Mostly types.
- [x] Prevent creating of rooms by entering `/r/non-existing-slug`.
- [x] Handle getting a readonly slug for old rooms. Added a comment
about it
[here](https://github.com/tldraw/tldraw/pull/3192/files#diff-c0954b3dc71bb7097c39656441175f3238ed60cf5cee64077c06e21da82182cbR17-R18).
- [x] We no longer expose editor on the window object for readonly
rooms. Prevents the users disabling readonly rooms manually.
### 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. Make sure old readonly rooms still work.
2. Creating a readonly link from an existing room should still use `/v`
path.
3. Newly created rooms should use `/ro` path for readonly rooms. Make
sure these work as well.
4. `/r` room was disabled and redirects to `/`
5. `/new` should still work when not inside iframes.
- [x] Unit Tests
- [ ] End to end tests
### Release Notes
1. This adds new functionality for readonly rooms:
- We have a new route `/ro` for newly created readonly rooms. These
rooms no longer use the scrambling logic to create readonly slugs.
Instead we now use KV storage from cloudflare to track the mapping for
slugs -> readonly slug and readonly slug -> slug.
- The old route `/v` is preserved, so that the old room still work as
they did before.
- For old rooms we will keep on generating the old readonly slugs, but
for new rooms we'll start using the new logic.
2. We no longer prevent embedding of tldraw inside iframes.
3. We do prevent generating new rooms from inside the iframes though.
`/r`, `/new`, `/r/non-existing-id` should not allow creation of new
rooms inside iframes. Only `/new` still works when not inside iframes.
4. Forking a project from inside an iframe now opens it on tldraw.com
5. Slight copy change on the sharing menu. We no longer have a toggle
between readonly and non-readonly links.
6. `editor` and `app` are no longer exposed on the window object for
readonly rooms. Prevents users from using the `updateInstanceState` to
escape readonly rooms.
---------
Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
2024-04-25 14:10:40 +00:00
"share-menu.copy-readonly-link-note" : "Anyone with the link will be able to access this project." ,
2023-04-25 11:01:25 +00:00
"share-menu.project-too-large" : "Sorry, this project can't be shared because it's too large. We're working on it!" ,
2023-05-17 16:17:31 +00:00
"share-menu.upload-failed" : "Sorry, we couldn't upload your project at the moment. Please try again or let us know if the problem persists." ,
share: make share/fork/copy actions clearer (#3846)
Right now when you hit Share/Fork on production it can take a good 5
seconds for something to happen.
In the meantime, it can feel like nothing happened when you clicked the
button. Maybe you click it again to see if that'll fix it, which doesn't
do anything. Same thing for the Copy action, sometimes we don't have an
icon to subtly show that it's been copied.
This adds some toasts and disables the Share menu while a project is
being created.
Also, has two drive-by fixes:
- the getShareUrl logic is old and needed to be superseded by the new
stuff
- the icon fix for clipboard-copied.svg from the readonly omnibus PR
(https://github.com/tldraw/tldraw/pull/3192) got overridden in a
different PR (https://github.com/tldraw/tldraw/pull/3627) - this
restores the fix
<img width="304" alt="Screenshot 2024-05-30 at 11 38 39"
src="https://github.com/tldraw/tldraw/assets/469604/f9a3b7c7-f9ea-41f0-ad00-7fc5d71da93f">
<img width="257" alt="Screenshot 2024-05-30 at 11 38 14"
src="https://github.com/tldraw/tldraw/assets/469604/c0a2d762-64c3-44da-b61e-c237133dd8cd">
### 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
- Share menu: make sharing/fork/copy actions clearer
2024-06-03 08:42:08 +00:00
"share-menu.creating-project" : "Creating the new project…" ,
Open share menu when navigating from create new shared project button (#3898)
This PR ensures that the share menu is open when navigating from the
create new shared project button.
This could be achieved by calling ```editor.addOpenMenu('share-menu')```
after ```navigate('/new')``` , but that opens the menu on the local
editor first so you get a flash of that before the multiplayer editor
loads.
Instead I've used the state prop on the Navigate component/function to
pass a property called shouldOpenShareMenu.
If the user presses the back button to return to the local editor
instance then the open state of the share menu is preserved, which is
actually something we don't want in this case. Not sure how to deal with
that without adding a ton more complexity, is it worth it?
### 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. Click create new shared project from the file menu
2. Share menu should open after navigating to the new room
### Release Notes
- Open share menu when navigating from the create new shared project
button.
---------
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-06-10 08:15:55 +00:00
"share-menu.copied" : "Copied link" ,
2023-10-17 08:32:41 +00:00
"status.offline" : "Offline" ,
"status.online" : "Online" ,
2023-04-25 11:01:25 +00:00
"people-menu.title" : "People" ,
"people-menu.change-name" : "Change name" ,
"people-menu.change-color" : "Change color" ,
"people-menu.follow" : "Following" ,
"people-menu.following" : "Following" ,
"people-menu.leading" : "Following You" ,
"people-menu.user" : "(You)" ,
"people-menu.invite" : "Invite others" ,
"help-menu.title" : "Help and resources" ,
"help-menu.about" : "About" ,
sdk: wires up tldraw to have licensing mechanisms (#4021)
For non-commercial usage of tldraw, this adds a watermark in the corner,
both for branding purposes and as an incentive for our enterprise
customers to purchase a license.
For commercial usage of tldraw, you add a license to the `<Tldraw
licenseKey={YOUR_LICENSE_KEY} />` component so that the watermark
doesn't show.
The license is a signed key that has various bits of information in it,
such as:
- license type
- hosts that the license is valid for
- whether it's an internal-only license
- expiry date
We check the license on load and show a watermark (or throw an error if
internal-only) if the license is not valid in a production environment.
This is a @MitjaBezensek, @Taha-Hassan-Git, @mimecuvalo joint
production! 🤜 🤛
### 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
- [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
### Test Plan
1. We will be dogfooding on staging.tldraw.com and tldraw.com itself
before releasing this.
### Release Notes
- SDK: wires up tldraw to have licensing mechanisms.
---------
Co-authored-by: Mitja Bezenšek <mitja.bezensek@gmail.com>
Co-authored-by: Taha <98838967+Taha-Hassan-Git@users.noreply.github.com>
Co-authored-by: Steve Ruiz <steveruizok@gmail.com>
2024-07-11 11:49:18 +00:00
"help-menu.docs" : "Documentation & API" ,
2023-04-25 11:01:25 +00:00
"help-menu.discord" : "Discord" ,
"help-menu.github" : "GitHub" ,
"help-menu.keyboard-shortcuts" : "Keyboard shortcuts" ,
"help-menu.twitter" : "Twitter" ,
"actions-menu.title" : "Actions" ,
"edit-link-dialog.title" : "Edit link" ,
"edit-link-dialog.invalid-url" : "A link must be a valid URL." ,
"edit-link-dialog.detail" : "Links will open in a new tab." ,
"edit-link-dialog.url" : "URL" ,
"edit-link-dialog.clear" : "Clear" ,
"edit-link-dialog.save" : "Continue" ,
"edit-link-dialog.cancel" : "Cancel" ,
"embed-dialog.title" : "Insert embed" ,
"embed-dialog.back" : "Back" ,
"embed-dialog.create" : "Create" ,
"embed-dialog.cancel" : "Cancel" ,
"embed-dialog.url" : "URL" ,
"embed-dialog.instruction" : "Paste in the site's URL to create the embed." ,
"embed-dialog.invalid-url" : "We could not create an embed from that URL." ,
"edit-pages-dialog.move-down" : "Move down" ,
"edit-pages-dialog.move-up" : "Move up" ,
"shortcuts-dialog.title" : "Keyboard shortcuts" ,
"shortcuts-dialog.edit" : "Edit" ,
"shortcuts-dialog.file" : "File" ,
"shortcuts-dialog.preferences" : "Preferences" ,
"shortcuts-dialog.tools" : "Tools" ,
"shortcuts-dialog.transform" : "Transform" ,
"shortcuts-dialog.view" : "View" ,
2023-06-15 15:10:08 +00:00
"shortcuts-dialog.collaboration" : "Collaboration" ,
2023-06-01 18:46:26 +00:00
"home-project-dialog.title" : "Home project" ,
"home-project-dialog.description" : "This is your local home project. It's just for you!" ,
"rename-project-dialog.title" : "Rename project" ,
"rename-project-dialog.cancel" : "Cancel" ,
"rename-project-dialog.rename" : "Rename" ,
"home-project-dialog.ok" : "Ok" ,
2023-04-25 11:01:25 +00:00
"style-panel.title" : "Styles" ,
"style-panel.align" : "Align" ,
2023-05-19 10:23:43 +00:00
"style-panel.vertical-align" : "Vertical align" ,
2023-04-25 11:01:25 +00:00
"style-panel.position" : "Position" ,
2023-10-28 21:58:32 +00:00
"style-panel.arrowheads" : "Arrows" ,
2023-04-25 11:01:25 +00:00
"style-panel.arrowhead-start" : "Start" ,
"style-panel.arrowhead-end" : "End" ,
"style-panel.color" : "Color" ,
"style-panel.dash" : "Dash" ,
"style-panel.fill" : "Fill" ,
"style-panel.font" : "Font" ,
"style-panel.geo" : "Shape" ,
"style-panel.mixed" : "Mixed" ,
"style-panel.opacity" : "Opacity" ,
"style-panel.size" : "Size" ,
"style-panel.spline" : "Spline" ,
"tool-panel.drawing" : "Drawing" ,
"tool-panel.shapes" : "Shapes" ,
"tool-panel.more" : "More" ,
"debug-panel.more" : "More" ,
"navigation-zone.toggle-minimap" : "Toggle minimap" ,
"navigation-zone.zoom" : "Zoom" ,
"focus-mode.toggle-focus-mode" : "Toggle focus mode" ,
"toast.close" : "Close" ,
"file-system.file-open-error.title" : "Could not open file" ,
"file-system.file-open-error.not-a-tldraw-file" : "The file you tried to open doesn't look like a tldraw file." ,
"file-system.file-open-error.file-format-version-too-new" : "The file you tried to open is from a newer version of tldraw. Please reload the page and try again." ,
"file-system.file-open-error.generic-corrupted-file" : "The file you tried to open is corrupted." ,
"file-system.confirm-open.title" : "Overwrite current project?" ,
"file-system.confirm-open.description" : "Opening a file will replace your current project and any unsaved changes will be lost. Are you sure you want to continue?" ,
"file-system.confirm-open.cancel" : "Cancel" ,
"file-system.confirm-open.open" : "Open file" ,
"file-system.confirm-open.dont-show-again" : "Don't ask again" ,
"file-system.confirm-clear.title" : "Clear current project?" ,
"file-system.confirm-clear.description" : "Creating a new project will clear your current project and any unsaved changes will be lost. Are you sure you want to continue?" ,
"file-system.confirm-clear.cancel" : "Cancel" ,
"file-system.confirm-clear.continue" : "Continue" ,
"file-system.confirm-clear.dont-show-again" : "Don't ask again" ,
"file-system.shared-document-file-open-error.title" : "Could not open file" ,
"file-system.shared-document-file-open-error.description" : "Opening files from shared projects is not supported." ,
2023-05-25 09:51:28 +00:00
"sharing.confirm-leave.title" : "Leave current project?" ,
"sharing.confirm-leave.description" : "Are you sure you want to leave this shared project? You can return to it by navigating to its URL." ,
"sharing.confirm-leave.cancel" : "Cancel" ,
"sharing.confirm-leave.leave" : "Leave" ,
"sharing.confirm-leave.dont-show-again" : "Don't ask again" ,
2023-04-25 11:01:25 +00:00
"toast.error.export-fail.title" : "Failed export" ,
"toast.error.export-fail.desc" : "Failed to export image" ,
"toast.error.copy-fail.title" : "Failed copy" ,
"toast.error.copy-fail.desc" : "Failed to copy image" ,
"context.pages.new-page" : "New page" ,
"vscode.file-open.desc" : "We've updated this document to work with the current version of tldraw. If you'd like to keep the original version (which will work on old.tldraw.com), click below to create a backup." ,
"vscode.file-open.open" : "Continue" ,
"vscode.file-open.backup" : "Backup" ,
"vscode.file-open.backup-saved" : "Backup saved" ,
"vscode.file-open.backup-failed" : "Backup failed: this is not a .tldr file." ,
2023-06-15 15:10:08 +00:00
"vscode.file-open.dont-show-again" : "Don't ask again" ,
"cursor-chat.type-to-chat" : "Type to chat..."
2023-05-02 15:12:34 +00:00
}