From 225f312bd09a902becebfc234e310626b3dbd092 Mon Sep 17 00:00:00 2001 From: Steve Ruiz Date: Thu, 6 Jan 2022 07:06:05 +0000 Subject: [PATCH] Add sponsor --- README.md | 4 +- assets/oppizi.png | Bin 0 -> 17107 bytes packages/tldraw/README.md | 121 +++++++------------------------------- 3 files changed, 23 insertions(+), 102 deletions(-) create mode 100644 assets/oppizi.png diff --git a/README.md b/README.md index 371473b8b..79e786ce8 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ Thanks to our corporate sponsors: -...and to our [individual sponsors](https://github.com/sponsors/steveruizok#sponsors)! + - +...and to our [individual sponsors](https://github.com/sponsors/steveruizok#sponsors)! ## Contents diff --git a/assets/oppizi.png b/assets/oppizi.png new file mode 100644 index 0000000000000000000000000000000000000000..f5f1c7338c4d6b547be9188320931640088781f8 GIT binary patch literal 17107 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 literal 0 HcmV?d00001 diff --git a/packages/tldraw/README.md b/packages/tldraw/README.md index 5ffa25259..ea78dd4cc 100644 --- a/packages/tldraw/README.md +++ b/packages/tldraw/README.md @@ -1,126 +1,47 @@
- +
-# @tldraw/tldraw +![A screenshot of the tldraw web app](./assets/screenshot.png) -This package contains the [tldraw](https://tldraw.com) editor as a React component named ``. You can use this package to embed the editor in any React application. - -💕 Love this library? Consider [becoming a sponsor](https://github.com/sponsors/steveruizok?frequency=recurring&sponsor=steveruizok). +Welcome to the [tldraw](https://tldraw.com) monorepo. 🙌 Questions? Join the [Discord channel](https://discord.gg/SBBEVCA4PG) or start a [discussion](https://github.com/tldraw/tldraw/discussions/new). -🎨 Want to build your own tldraw-ish app instead? Try the **@tldraw/core** folder instead. +💕 Love this project? Consider [becoming a sponsor](https://github.com/sponsors/steveruizok?frequency=recurring&sponsor=steveruizok). -## Installation +## Contents -Use your package manager of choice to install `@tldraw/tldraw` and its peer dependencies. +This repository is a monorepo containing two packages: -```bash -yarn add @tldraw/tldraw -# or -npm i @tldraw/tldraw -``` +- [**packages/tldraw**](https://github.com/tldraw/tldraw/tree/main/packages/tldraw) contains the source for the [@tldraw/tldraw](https://www.npmjs.com/package/@tldraw/tldraw) package. This is an editor as a React component named ``. You can use this package to embed the tldraw editor in any React application. +- [**packages/core**](https://github.com/tldraw/tldraw/tree/main/packages/core) contains the source for the [@tldraw/core](https://www.npmjs.com/package/@tldraw/core) package. This is a renderer for React components in a canvas-style UI. It is used by `@tldraw/tldraw` as well as several other projects. -## Usage +...and three apps: -Import the `tldraw` React component and use it in your app. +- [**apps/www**](https://github.com/tldraw/tldraw/tree/main/apps/www) contains the source for the [tldraw.com](https://tldraw.com) website. +- [**apps/vscode**](https://github.com/tldraw/tldraw/tree/main/apps/vscode) contains the source for the [tldraw VS Code extension](https://marketplace.visualstudio.com/items?itemName=tldraw-org.tldraw-vscode). +- [**apps/electron**](https://github.com/tldraw/tldraw/tree/main/apps/electron) contains the source for an experimental Electron app. -```tsx -import { Tldraw } from '@tldraw/tldraw' +...and three examples: -function App() { - return -} -``` +- [**examples/core-example**](https://github.com/tldraw/tldraw/tree/main/examples/core-example) is a simple example for `@tldraw/core`. +- [**examples/core-example-advanced**](https://github.com/tldraw/tldraw/tree/main/examples/core-example-advanced) is a second example for `@tldraw/core`. +- [**examples/tldraw-example**](https://github.com/tldraw/tldraw/tree/main/examples/tldraw-example) is an example for `@tldraw/tldraw`. -### Persisting the State +## Discussion -You can use the `id` to persist the state in a user's browser storage. - -```tsx -import { Tldraw } from '@tldraw/tldraw' - -function App() { - return -} -``` - -### Controlling the Component through Props - -You can control the `` component through its props. - -```tsx -import { Tldraw, TDDocument } from '@tldraw/tldraw' - -function App() { - const myDocument: TDDocument = {} - - return -} -``` - -### Controlling the Component through the tldrawApp API - -You can also control the `` component imperatively through the `TldrawApp` API. - -```tsx -import { Tldraw, tldrawApp } from '@tldraw/tldraw' - -function App() { - const handleMount = React.useCallback((app: TldrawApp) => { - app.selectAll() - }, []) - - return -} -``` - -Internally, the `` component's user interface uses this API to make changes to the component's state. See the `tldrawApp` section of the [documentation](/guides/documentation.md) for more on this API. - -### Responding to Changes - -You can respond to changes and user actions using the `onChange` callback. For more specific changes, you can also use the `onPatch`, `onCommand`, or `onPersist` callbacks. See the [documentation](/guides/documentation.md) for more. - -```tsx -import { Tldraw, TldrawApp } from '@tldraw/tldraw' - -function App() { - const handleChange = React.useCallback((app: TldrawApp, reason: string) => { - // Do something with the change - }, []) - - return -} -``` - -## Documentation - -See the project's [documentation](/guides/documentation.md). +Want to connect? Visit the [Discord channel](https://discord.gg/SBBEVCA4PG). ## Contribution -See the [contributing guide](/CONTRIBUTING.md). +Interested in contributing? See the [contributing guide](/CONTRIBUTING.md). -## Development - -See the [development guide](/guides/development.md). - -## Example - -See the `example` folder for examples of how to use the `` component. - -## Community - -### Support +## Support Need help? Please [open an issue](https://github.com/tldraw/tldraw/issues/new) for support. -### Discussion - -Want to connect with other devs? Visit the [Discord channel](https://discord.gg/SBBEVCA4PG). - -### License +## License This project is licensed under MIT.