Quick start guide (#2692)
Following on from #2686, this PR replaces the introduction page with a Quick Start guide. Next Steps: - Better UX around the code blocks, throughout the site. A copy button would be great. - Collapsible extra info on the release version and rendering an inline component - Maybe remove the embed - [x] `documentation` — Changes to the documentation only[^2] ### Release Notes - Add a quick start guide --------- Co-authored-by: Mime Čuvalo <mimecuvalo@gmail.com>
This commit is contained in:
parent
f5d1977263
commit
a5e6ae87fe
3 changed files with 114 additions and 33 deletions
|
@ -150,13 +150,13 @@ export const Footnotes = (props: any) => {
|
||||||
/* -------------------- API docs -------------------- */
|
/* -------------------- API docs -------------------- */
|
||||||
|
|
||||||
export const ApiHeading = (props: any) => {
|
export const ApiHeading = (props: any) => {
|
||||||
return <div className="article__api-heading" {...props} />
|
return <div {...props} />
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Embed = (props: any) => {
|
export const Embed = (props: any) => {
|
||||||
return (
|
return (
|
||||||
<div className="article__embed">
|
<div className={props.className || 'article__embed'}>
|
||||||
<iframe className="iframe" src={props.src} width="100%" height="600p" frameBorder="0" />
|
<iframe className="iframe" src={props.src} width="100%" height={600} />
|
||||||
{props.caption && <span className="article__caption">{props.caption}</span>}
|
{props.caption && <span className="article__caption">{props.caption}</span>}
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,46 +1,84 @@
|
||||||
---
|
---
|
||||||
title: Introduction
|
title: Quick Start
|
||||||
status: published
|
status: published
|
||||||
author: steveruizok
|
author: steveruizok
|
||||||
date: 3/22/2023
|
date: 3/22/2023
|
||||||
order: 0
|
order: 0
|
||||||
---
|
---
|
||||||
|
|
||||||
Welcome to the developer docs for tldraw, a React library for creating whiteboards and other infinite canvas experiences. These docs are for the 2.0 version which is currently in beta.
|
<h2>Add a tldraw canvas to your React app in just 5 minutes.</h2>
|
||||||
|
|
||||||
<a className="hero__images" href="https://examples.tldraw.com">
|
The tldraw SDK provides a really simple way to craft infinite canvas experiences for the web. It's perfect for collaborative applications, productivity tools, interfacing with multi-modal AI, and more.
|
||||||
<img src={'/images/hero_light.png'} alt="tldraw demo" className="article__image hero__light" />
|
|
||||||
<img src={'/images/hero_dark.png'} alt="tldraw demo" className="article__image hero__dark" />
|
|
||||||
</a>
|
|
||||||
|
|
||||||
- 🔗 Check out the [CodeSandbox](https://codesandbox.io/s/tldraw-example-canary-2lrzmy)
|
By the end of this guide you will have made something that looks like this:
|
||||||
- 🧑💻 Visit the [tldraw repo on Github](https://github.com/tldraw/tldraw)
|
|
||||||
- 💬 Join the [Discord](https://discord.com/invite/SBBEVCA4PG)
|
|
||||||
|
|
||||||
## What can I do with tldraw?
|
<Embed className="article__embed--quickstart" src="https://vite-template-five.vercel.app/" />
|
||||||
|
|
||||||
You can use the [Tldraw](?) React component to embed a fully featured and extendable whiteboard in your app. See the [CodeSandbox](https://codesandbox.io/s/tldraw-example-canary-2lrzmy) for a minimal example.
|
|
||||||
|
|
||||||
For multiplayer whiteboards, you can plug the component into the [collaboration backend](/docs/collaboration) of your choice. Check out our [Yjs example](https://github.com/tldraw/tldraw-yjs-example) to see how you might use tldraw together with [Yjs](https://yjs.dev/).
|
Follow the steps below to make your own version of it, or [clone the repo](https://github.com/tldraw/vite-template) to skip to the end.
|
||||||
|
|
||||||
You can use the [Editor](?) API to create, update, and delete shapes, control the camera—or do just about anything else. You can extend tldraw with your own [custom shapes](/docs/shapes) and [custom tools](/docs/tools). You can use our [user interface](/docs/user-interface) overrides to change the contents of menus and toolbars, or else hide the UI and replace it with your own.
|
<hr />
|
||||||
|
<ol className="ordered-list__quickstart">
|
||||||
|
<li>
|
||||||
|
### Installation
|
||||||
|
|
||||||
If you want to go even deeper, you can use the [TldrawEditor](?) component as a more minimal engine without the default tldraw shapes or user interface.
|
- Set up a React project however you normally do. [We recommend Vite](https://vitejs.dev/guide/#scaffolding-your-first-vite-project).
|
||||||
|
- Install the tldraw library using this command:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm install @tldraw/tldraw@beta
|
||||||
|
```
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
### Import Styles
|
||||||
|
<br />
|
||||||
|
To import fonts and CSS for tldraw:
|
||||||
|
|
||||||
## How do I learn tldraw?
|
- Create or edit a css file called `index.css`
|
||||||
|
- Copy and paste this into the file:
|
||||||
|
```CSS
|
||||||
|
@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;700&family=Roboto+Mono:wght@400;700&display=swap");
|
||||||
|
@import url("@tldraw/tldraw/tldraw.css");
|
||||||
|
|
||||||
In addition to the docs on this website, we provide [many examples](https://github.com/tldraw/tldraw/tree/main/apps/examples/src/examples) in the tldraw repo that demonstrate different ways of using the tldraw library. You can view them running [here](https://examples.tldraw.com/); or else you can clone the tldraw repo and start a local development server to see them in action.
|
body {
|
||||||
|
font-family: "Inter";
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
### Render Tldraw Component
|
||||||
|
<br />
|
||||||
|
To render the Tldraw component
|
||||||
|
|
||||||
You can ask questions and get help on our [Discord](https://discord.com/invite/SBBEVCA4PG) channel or in our Github [issues](https://github.com/tldraw/tldraw/issues).
|
- Import the `<Tldraw />` component from `@tldraw/tldraw`
|
||||||
|
- Import the `index.css` CSS file from earlier
|
||||||
|
- Wrap the Tldraw component in a `<div>` element with the style attribute set to: `{ position: 'fixed', inset: 0 }`
|
||||||
|
|
||||||
|
<p className="">This will render a full screen canvas:</p>
|
||||||
|
|
||||||
## Community
|
```javascript
|
||||||
|
import { Tldraw } from "@tldraw/tldraw";
|
||||||
|
import "./index.css";
|
||||||
|
|
||||||
Found a bug or want to request a feature? Create an issue [here](https://github.com/tldraw/tldraw/issues). To connect with the team and other users, join us on our [Discord](https://discord.gg/JMbeb96jsh). To follow along with updates, you can also [subscribe to our Substack newsletter](https://tldraw.substack.com/) or follow us on [Twitter/X](https://twitter.com/tldraw).
|
export default function App() {
|
||||||
|
return (
|
||||||
|
<div style={{ position: 'fixed', inset: 0 }}>
|
||||||
|
<Tldraw />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
## License
|
<hr />
|
||||||
|
|
||||||
tldraw's source code and distributed packages are provided under the non-commercial [tldraw license](https://github.com/tldraw/tldraw/blob/master/LICENSE.md).
|
### Next Steps
|
||||||
|
|
||||||
This license does not permit commercial use. If you wish to use tldraw in a commercial product or enterprise, you will need to purchase a commercial license. To obtain a commercial license, please contact us at [hello@tldraw.com](mailto:hello@tldraw.com).
|
You did it! Now that you have your canvas working, you may be wondering: what next? You can try:
|
||||||
|
|
||||||
To learn more, see our [license](/community/license) page.
|
- Giving the editor a makeover by [customizing the UI](/docs/user-interface)
|
||||||
|
- Adding your own [shapes](/docs/shapes) and [tools](/docs/tools)
|
||||||
|
- Providing collaboration using [multiplayer](https://github.com/tldraw/tldraw-yjs-example)
|
||||||
|
|
||||||
|
We provide the above examples and more in our [examples section](/examples/basic/develop). Go build something creative and please do share it with us in our [#show-and-tell](https://discord.com/invite/SBBEVCA4PG) channel on Discord!
|
||||||
|
|
|
@ -340,18 +340,21 @@ body {
|
||||||
|
|
||||||
.article > h1,
|
.article > h1,
|
||||||
.article > h2 {
|
.article > h2 {
|
||||||
/* margin-top: 24px; */
|
|
||||||
padding-top: 106px;
|
|
||||||
margin-top: -82px;
|
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
font-weight: 800;
|
font-weight: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.article > h2 {
|
||||||
|
margin-top: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article > p + h2 {
|
||||||
|
margin-top: 48px;
|
||||||
|
}
|
||||||
|
|
||||||
.article > h3 {
|
.article > h3 {
|
||||||
/* margin-top: 24px; */
|
|
||||||
font-size: 1.5em;
|
font-size: 1.5em;
|
||||||
padding-top: 106px;
|
padding-top: 16px;
|
||||||
margin-top: -90px;
|
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
@ -498,6 +501,21 @@ body {
|
||||||
.article ol {
|
.article ol {
|
||||||
margin: 20px 0px;
|
margin: 20px 0px;
|
||||||
padding-left: 16px;
|
padding-left: 16px;
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article ol h3 a {
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.article ol h3,
|
||||||
|
.article ol li::marker {
|
||||||
|
font-size: 1.17em;
|
||||||
|
line-height: 28px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.article ol ul {
|
||||||
|
list-style-type: disc;
|
||||||
}
|
}
|
||||||
|
|
||||||
.article ul {
|
.article ul {
|
||||||
|
@ -581,6 +599,8 @@ body {
|
||||||
gap: 12px;
|
gap: 12px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.article__embed > iframe {
|
.article__embed > iframe {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
@ -589,6 +609,24 @@ body {
|
||||||
border: 1px solid var(--color-tint-2);
|
border: 1px solid var(--color-tint-2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.article__embed--quickstart {
|
||||||
|
aspect-ratio: 16 / 9;
|
||||||
|
min-height: 405px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (max-width: 520px) {
|
||||||
|
.article__embed--quickstart {
|
||||||
|
aspect-ratio: 1 / 1;
|
||||||
|
height: auto;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.article__embed--quickstart > iframe {
|
||||||
|
height: 100%;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
.article__caption {
|
.article__caption {
|
||||||
display: block;
|
display: block;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
@ -1210,7 +1248,7 @@ body {
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* --------------------- Mobile --------------------- */
|
||||||
@media (max-width: 760px) {
|
@media (max-width: 760px) {
|
||||||
.article__image {
|
.article__image {
|
||||||
margin: 32px -16px;
|
margin: 32px -16px;
|
||||||
|
@ -1245,6 +1283,11 @@ body {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
justify-content: flex-end;
|
justify-content: flex-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.article__embed--quickstart {
|
||||||
|
aspect-ratio: 16/9;
|
||||||
|
min-height: 280px;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
html[data-theme='dark'] .hero__light {
|
html[data-theme='dark'] .hero__light {
|
||||||
|
|
Loading…
Reference in a new issue