diff --git a/apps/docs/.eslintrc.json b/apps/docs/.eslintrc.json
deleted file mode 100644
index 0967ef424..000000000
--- a/apps/docs/.eslintrc.json
+++ /dev/null
@@ -1 +0,0 @@
-{}
diff --git a/apps/docs/.gitignore b/apps/docs/.gitignore
deleted file mode 100644
index c605f457d..000000000
--- a/apps/docs/.gitignore
+++ /dev/null
@@ -1,41 +0,0 @@
-# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
-
-# dependencies
-/node_modules
-/.pnp
-.pnp.js
-
-# testing
-/coverage
-
-# next.js
-/.next/
-/out/
-
-# production
-/build
-
-# misc
-.DS_Store
-*.pem
-
-# debug
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-.pnpm-debug.log*
-
-# local env files
-.env*.local
-
-# vercel
-.vercel
-
-# typescript
-*.tsbuildinfo
-next-env.d.ts
-
-
-content/gen
-content.json
-api-content.json
\ No newline at end of file
diff --git a/apps/docs/CHANGELOG.md b/apps/docs/CHANGELOG.md
deleted file mode 100644
index 6bff4ea23..000000000
--- a/apps/docs/CHANGELOG.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# @tldraw/docs
-
-## 0.1.1-alpha.0
-
-### Patch Changes
-
-- Release day!
diff --git a/apps/docs/LICENSE b/apps/docs/LICENSE
deleted file mode 100644
index 4f227c380..000000000
--- a/apps/docs/LICENSE
+++ /dev/null
@@ -1,190 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
-TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
-1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
-2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
-3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
-4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
-5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
-6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
-7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
-8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
-9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
-END OF TERMS AND CONDITIONS
-
-Copyright 2023 tldraw GB Ltd.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/apps/docs/README.md b/apps/docs/README.md
deleted file mode 100644
index a53300ae3..000000000
--- a/apps/docs/README.md
+++ /dev/null
@@ -1,7 +0,0 @@
-# tldraw-docs
-
-
-
-
-
-
diff --git a/apps/docs/components/ArticleDetails.tsx b/apps/docs/components/ArticleDetails.tsx
deleted file mode 100644
index 0c5cb888f..000000000
--- a/apps/docs/components/ArticleDetails.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { Article } from '@/types/content-types'
-import { Icon } from './Icon'
-
-type ArticleDetailsProps = {
- article: Article
-}
-
-export function ArticleDetails({ article: { sourceUrl, date } }: ArticleDetailsProps) {
- return (
-
-
-
- Edit this page
-
- {date && (
-
- Last edited on{' '}
- {Intl.DateTimeFormat('en-gb', {
- year: 'numeric',
- month: 'long',
- day: 'numeric',
- }).format(new Date(date))}
-
- )}
-
- )
-}
diff --git a/apps/docs/components/ArticleNavLinks.tsx b/apps/docs/components/ArticleNavLinks.tsx
deleted file mode 100644
index 58c2649ea..000000000
--- a/apps/docs/components/ArticleNavLinks.tsx
+++ /dev/null
@@ -1,32 +0,0 @@
-import { ArticleLinks } from '@/types/content-types'
-import Link from 'next/link'
-import { Icon } from './Icon'
-
-type ArticleNavLinksProps = {
- links: ArticleLinks
-}
-
-export function ArticleNavLinks({ links: { prev, next } }: ArticleNavLinksProps) {
- return (
-
- {prev && (
-
-
- {prev.title}
-
- )}
- {next && (
-
- {next.title}
-
-
- )}
-
- )
-}
diff --git a/apps/docs/components/Icon.tsx b/apps/docs/components/Icon.tsx
deleted file mode 100644
index 2b7b3ff19..000000000
--- a/apps/docs/components/Icon.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-export function Icon({ icon, className }: { icon: string; className?: string }) {
- return (
-
- )
-}
diff --git a/apps/docs/components/Mdx.tsx b/apps/docs/components/Mdx.tsx
deleted file mode 100644
index c7f23b4a4..000000000
--- a/apps/docs/components/Mdx.tsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import { MDXRemote, MDXRemoteSerializeResult } from 'next-mdx-remote'
-import { components, scope } from './mdx-components'
-
-interface MdxProps {
- mdxSource: MDXRemoteSerializeResult
-}
-
-export function Mdx({ mdxSource }: MdxProps) {
- return
-}
diff --git a/apps/docs/components/MetaHead.tsx b/apps/docs/components/MetaHead.tsx
deleted file mode 100644
index 32c9b03d7..000000000
--- a/apps/docs/components/MetaHead.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import Head from 'next/head'
-
-interface MetaHeadProps {
- title: string
- description?: string | null
- hero?: string | null
-}
-
-export function MetaHead({ title, description, hero }: MetaHeadProps) {
- const TITLE = `${title} - tldraw docs`
-
- return (
-
- {TITLE}
- {description && }
-
-
- {description && }
- {hero && }
-
-
- {description && }
- {hero && }
-
- )
-}
diff --git a/apps/docs/components/ThemeSwitcher.tsx b/apps/docs/components/ThemeSwitcher.tsx
deleted file mode 100644
index 65b30b741..000000000
--- a/apps/docs/components/ThemeSwitcher.tsx
+++ /dev/null
@@ -1,15 +0,0 @@
-import { useTheme } from 'next-themes'
-import { Icon } from './Icon'
-
-export function ThemeSwitcher() {
- const { theme, setTheme } = useTheme()
-
- return (
- setTheme(theme === 'light' ? 'dark' : 'light')}
- >
-
-
- )
-}
diff --git a/apps/docs/components/article-components/index.ts b/apps/docs/components/article-components/index.ts
deleted file mode 100644
index 336ce12bb..000000000
--- a/apps/docs/components/article-components/index.ts
+++ /dev/null
@@ -1 +0,0 @@
-export {}
diff --git a/apps/docs/components/mdx-components/api-docs.tsx b/apps/docs/components/mdx-components/api-docs.tsx
deleted file mode 100644
index 6987f71a0..000000000
--- a/apps/docs/components/mdx-components/api-docs.tsx
+++ /dev/null
@@ -1,27 +0,0 @@
-import { ReactNode } from 'react'
-
-export function ParametersTable({ children }: { children: ReactNode }) {
- return (
-
-
-
- Name
- Description
-
-
- {children}
-
- )
-}
-
-export function ParametersTableRow({ children }: { children: ReactNode }) {
- return {children}
-}
-
-export function ParametersTableName({ children }: { children: ReactNode }) {
- return {children}
-}
-
-export function ParametersTableDescription({ children }: { children: ReactNode }) {
- return {children}
-}
diff --git a/apps/docs/components/mdx-components/generic.tsx b/apps/docs/components/mdx-components/generic.tsx
deleted file mode 100644
index eb5a40691..000000000
--- a/apps/docs/components/mdx-components/generic.tsx
+++ /dev/null
@@ -1,132 +0,0 @@
-/* ---------------------- Lists --------------------- */
-
-import React from 'react'
-
-export const UnorderedList = (props: any) => {
- return
-}
-
-export const OrderedList = (props: any) => {
- return
-}
-
-export const ListItem = (props: any) => {
- return
-}
-
-/* ------------------- Typography ------------------- */
-
-type Heading = 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
-
-function heading(heading: Heading, props: any) {
- const Element = ({ ...props }) => React.createElement(heading, props)
- if (props.id) {
- return (
-
- {props.children}
-
- )
- }
-
- return
-}
-
-export const Heading1 = (props: any) => {
- return heading('h1', props)
-}
-
-export const Heading2 = (props: any) => {
- return heading('h2', props)
-}
-
-export const Heading3 = (props: any) => {
- return heading('h3', props)
-}
-
-export const Heading4 = (props: any) => {
- return heading('h4', props)
-}
-
-export const Heading5 = (props: any) => {
- return heading('h5', props)
-}
-
-export const Heading6 = (props: any) => {
- return heading('h6', props)
-}
-
-export const Paragraph = (props: any) => {
- return
-}
-
-export const A = (props: any) => {
- return
-}
-
-export const Divider = (props: any) => {
- return
-}
-
-export const Blockquote = (props: any) => {
- return
-}
-
-export const Small = (props: any) => {
- return (
-
-
-
- )
-}
-
-/* --------------------- Tables --------------------- */
-
-export const Table = (props: any) => {
- return
-}
-
-export const THead = (props: any) => {
- return
-}
-
-export const TR = (props: any) => {
- return
-}
-
-export const TD = (props: any) => {
- return
-}
-
-/* --------------------- Media --------------------- */
-
-export const Image = (props: any) => {
- return (
-
-
- {props.caption && {props.caption} }
-
- )
-}
-
-export const Video = (props: any) => {
- return (
-
-
- {props.caption && {props.caption} }
-
- )
-}
-
-/* ------------------- Code Blocks ------------------ */
-
-export const Pre = (props: any) => {
- return
-}
-
-export const Code = (props: any) => {
- return
-}
-
-export const Footnotes = (props: any) => {
- return
-}
diff --git a/apps/docs/components/mdx-components/index.ts b/apps/docs/components/mdx-components/index.ts
deleted file mode 100644
index b9abee9d8..000000000
--- a/apps/docs/components/mdx-components/index.ts
+++ /dev/null
@@ -1,53 +0,0 @@
-import * as customComponents from '../article-components'
-import * as apiComponents from './api-docs'
-import {
- A,
- Blockquote,
- Divider,
- Heading1,
- Heading2,
- Heading3,
- Heading4,
- Heading5,
- Heading6,
- Image,
- ListItem,
- OrderedList,
- Paragraph,
- Small,
- Table,
- TD,
- THead,
- TR,
- UnorderedList,
- Video,
-} from './generic'
-
-export const scope = {}
-
-export const components = {
- h1: Heading1,
- h2: Heading2,
- h3: Heading3,
- h4: Heading4,
- h5: Heading5,
- h6: Heading6,
- blockquote: Blockquote,
- hr: Divider,
- a: A,
- p: Paragraph,
- table: Table,
- thead: THead,
- tr: TR,
- td: TD,
- video: Video,
- ol: OrderedList,
- ul: UnorderedList,
- li: ListItem,
- img: Image,
- Small: Small,
- Image,
- Video,
- ...customComponents,
- ...apiComponents,
-}
diff --git a/apps/docs/content.d.ts b/apps/docs/content.d.ts
deleted file mode 100644
index d2dd0e911..000000000
--- a/apps/docs/content.d.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-declare module '*/content.json' {
- const content: any
- export default content
-}
diff --git a/apps/docs/package.json b/apps/docs/package.json
deleted file mode 100644
index 5ab39e090..000000000
--- a/apps/docs/package.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "name": "@tldraw/docs",
- "description": "A docs site for tldraw.",
- "version": "0.1.1-alpha.0",
- "private": true,
- "packageManager": "yarn@3.5.0",
- "author": {
- "name": "tldraw GB Ltd.",
- "email": "hello@tldraw.com"
- },
- "homepage": "https://tldraw.dev",
- "license": "Apache-2.0",
- "repository": {
- "type": "git",
- "url": "https://github.com/tldraw/tldraw"
- },
- "bugs": {
- "url": "https://github.com/tldraw/tldraw/issues"
- },
- "keywords": [
- "tldraw",
- "drawing",
- "app",
- "development",
- "whiteboard",
- "canvas",
- "infinite"
- ],
- "scripts": {
- "dev": "yarn docs-content && NODE_ENV=development next-remote-watch ./content/**/*.mdx -c 'yarn run -T tsx ./scripts/generate-on-reload.ts'",
- "build": "next build",
- "start": "next start",
- "lint": "yarn run -T tsx ../../scripts/lint.ts",
- "docs-content": "ts-node --project tsconfig.content.json ./scripts/index.ts",
- "content": "lazy docs-content"
- },
- "dependencies": {
- "@microsoft/tsdoc": "^0.14.2",
- "@tldraw/utils": "workspace:*",
- "@types/node": "18.15.0",
- "@types/react": "^18.0.24",
- "@types/react-dom": "^18.0.6",
- "eslint": "8.36.0",
- "eslint-config-next": "13.2.4",
- "gray-matter": "^4.0.3",
- "next": "13.2.4",
- "next-mdx-remote": "^4.4.1",
- "next-remote-watch": "^2.0.0",
- "next-themes": "^0.2.1",
- "prettier": "^2.8.7",
- "react": "18.2.0",
- "react-dom": "18.2.0",
- "rehype-autolink-headings": "^6.1.1",
- "rehype-highlight": "^6.0.0",
- "rehype-slug": "^5.1.0",
- "rehype-slug-custom-id": "^1.1.0",
- "remark-gfm": "^3.0.1"
- },
- "//": [
- "Anything that starts with @tldraw in devDependencies will get included in the docs site.",
- "We have to list them here so lazyrepo knows the docs depends on those packages (ie their",
- "tsdoc comments), even though we don't use any of their code to run the docs site."
- ],
- "devDependencies": {
- "@microsoft/api-extractor-model": "^7.26.4",
- "@tldraw/editor": "workspace:*",
- "@tldraw/file-format": "workspace:*",
- "@tldraw/primitives": "workspace:*",
- "@tldraw/store": "workspace:*",
- "@tldraw/tldraw": "workspace:*",
- "@tldraw/tlschema": "workspace:*",
- "@tldraw/ui": "workspace:*",
- "@tldraw/validate": "workspace:*",
- "lazyrepo": "0.0.0-alpha.27",
- "rimraf": "^4.4.0",
- "ts-node": "^10.9.1"
- }
-}
diff --git a/apps/docs/pages/404.tsx b/apps/docs/pages/404.tsx
deleted file mode 100644
index a85b8d6e6..000000000
--- a/apps/docs/pages/404.tsx
+++ /dev/null
@@ -1,39 +0,0 @@
-import { Sidebar } from '@/components/Sidebar'
-import { SidebarContentList } from '@/types/content-types'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetStaticProps } from 'next'
-import { useTheme } from 'next-themes'
-import Link from 'next/link'
-
-interface Props {
- sidebar: SidebarContentList
-}
-
-export default function NotFoundpage({ sidebar }: Props) {
- const theme = useTheme()
-
- return (
-
-
-
-
- {`Sorry, we couldn't find the page you were looking for.`}
-
- Back to the start.
-
-
-
- )
-}
-
-export const getStaticProps: GetStaticProps = async () => {
- const sidebar = await getSidebarContentList({})
-
- return { props: { sidebar } }
-}
diff --git a/apps/docs/pages/[sectionId]/[childId]/[articleId].tsx b/apps/docs/pages/[sectionId]/[childId]/[articleId].tsx
deleted file mode 100644
index dfe814aec..000000000
--- a/apps/docs/pages/[sectionId]/[childId]/[articleId].tsx
+++ /dev/null
@@ -1,97 +0,0 @@
-import { ArticleDetails } from '@/components/ArticleDetails'
-import { ArticleNavLinks } from '@/components/ArticleNavLinks'
-import { Breadcrumb } from '@/components/Breadcrumb'
-import { Mdx } from '@/components/Mdx'
-import { MetaHead } from '@/components/MetaHead'
-import { Sidebar } from '@/components/Sidebar'
-import { Article, ArticleLinks, Category, Section, SidebarContentList } from '@/types/content-types'
-import {
- getArticle,
- getArticleSource,
- getCategory,
- getLinks,
- getSection,
- getSections,
-} from '@/utils/content'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetStaticPaths, GetStaticProps } from 'next'
-import { MDXRemoteSerializeResult } from 'next-mdx-remote'
-import { useTheme } from 'next-themes'
-
-export type ArticleProps = {
- type: 'article'
- sidebar: SidebarContentList
- section: Section
- category: Category
- article: Article
- links: ArticleLinks
- mdxSource: MDXRemoteSerializeResult
-}
-
-export default function ArticlePage({
- mdxSource,
- section,
- category,
- article,
- links,
- sidebar,
-}: ArticleProps) {
- const theme = useTheme()
- return (
- <>
-
-
-
-
-
- {article.title}
-
-
-
-
-
- >
- )
-}
-
-export const getStaticPaths: GetStaticPaths = async () => {
- const sections = await getSections()
- const paths: { params: { sectionId: string; childId: string; articleId: string } }[] = []
-
- for (const section of sections) {
- for (const category of section.categories) {
- if (category.id === 'ucg') continue
- for (const articleId of category.articleIds) {
- paths.push({ params: { sectionId: section.id, childId: category.id, articleId } })
- }
- }
- }
-
- return { paths, fallback: false }
-}
-
-export const getStaticProps: GetStaticProps = async (ctx) => {
- const sectionId = ctx.params?.sectionId?.toString() as string
- const categoryId = ctx.params?.childId?.toString() as string
- const articleId = ctx.params?.articleId?.toString()
- if (!articleId) throw Error()
-
- const sidebar = await getSidebarContentList({ sectionId, categoryId, articleId })
- const section = await getSection(sectionId)
- const category = await getCategory(sectionId, categoryId)
- const article = await getArticle(articleId)
- const links = await getLinks(articleId)
- const mdxSource = await getArticleSource(articleId)
-
- return {
- props: {
- type: 'article',
- article,
- section,
- category,
- sidebar,
- links,
- mdxSource,
- },
- }
-}
diff --git a/apps/docs/pages/[sectionId]/[childId]/index.tsx b/apps/docs/pages/[sectionId]/[childId]/index.tsx
deleted file mode 100644
index 467b47d5e..000000000
--- a/apps/docs/pages/[sectionId]/[childId]/index.tsx
+++ /dev/null
@@ -1,170 +0,0 @@
-import { Breadcrumb } from '@/components/Breadcrumb'
-import { Mdx } from '@/components/Mdx'
-import { MetaHead } from '@/components/MetaHead'
-import { Sidebar } from '@/components/Sidebar'
-import ArticlePage from '@/pages/[sectionId]/[childId]/[articleId]'
-import { Article, Category, Section, SidebarContentList } from '@/types/content-types'
-import {
- getArticle,
- getArticleSource,
- getArticles,
- getCategory,
- getLinks,
- getSection,
- getSections,
-} from '@/utils/content'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetStaticPaths, GetStaticProps } from 'next'
-import { MDXRemoteSerializeResult } from 'next-mdx-remote'
-import { useTheme } from 'next-themes'
-import Link from 'next/link'
-import { ArticleProps } from './[articleId]'
-
-type CategoryProps = {
- type: 'category'
- sidebar: SidebarContentList
- section: Section
- category: Category
- articles: Article[]
- mdxSource: MDXRemoteSerializeResult | null
-}
-
-type ChildProps = CategoryProps | ArticleProps
-
-export default function CategoryListPage(props: ChildProps) {
- const theme = useTheme()
-
- if (props.type === 'article') {
- return
- }
-
- const { sidebar, section, category, articles, mdxSource } = props
-
- const ungrouped: Article[] = []
- const groupedArticles = Object.fromEntries(
- category.groups.map((group) => [group.id, { group, articles: [] as Article[] }])
- )
-
- for (const article of articles) {
- if (article.groupId) {
- if (groupedArticles[article.groupId]) {
- groupedArticles[article.groupId].articles.push(article)
- } else {
- throw Error(
- `Article ${article.id} has groupId ${article.groupId} but no such group exists.`
- )
- }
- } else {
- ungrouped.push(article)
- }
- }
-
- return (
- <>
-
-
-
-
-
- {category.title}
- {mdxSource && }
- {Object.values(groupedArticles)
- .filter((g) => g.articles.length > 0)
- .map(({ group, articles }) => (
- <>
- {group.title}
-
- {articles.map((article) => (
-
- {article.title}
-
- ))}
-
- >
- ))}
- {ungrouped.length > 0 ? (
-
- {ungrouped.map((article) => (
-
- {article.title}
-
- ))}
-
- ) : null}
-
-
- >
- )
-}
-
-export const getStaticPaths: GetStaticPaths = async () => {
- const sections = await getSections()
- const paths: { params: { sectionId: string; childId: string } }[] = []
-
- for (const section of sections) {
- if (section.categories) {
- for (const category of section.categories) {
- paths.push({ params: { sectionId: section.id, childId: category.id } })
-
- // Add paths for uncategorized articles as well
- if (category.id !== 'ucg') continue
- for (const articleId of category.articleIds) {
- paths.push({ params: { sectionId: section.id, childId: articleId } })
- }
- }
- }
- }
-
- return { paths, fallback: false }
-}
-
-export const getStaticProps: GetStaticProps = async (ctx) => {
- const sectionId = ctx.params?.sectionId?.toString() as string
- const childId = ctx.params?.childId?.toString()
- if (!childId || !sectionId) throw Error()
-
- const articles = await getArticles()
- const section = await getSection(sectionId)
-
- // If the path goes to an uncategorized article, show the article page
- if (!section.categories.some((c) => c.id === childId)) {
- const categoryId = 'ucg'
- const articleId = childId
- const sidebar = await getSidebarContentList({ sectionId, categoryId, articleId })
- const category = await getCategory(sectionId, categoryId)
- const article = await getArticle(articleId)
- const links = await getLinks(articleId)
- const mdxSource = await getArticleSource(articleId)
- return {
- props: {
- type: 'article',
- sidebar,
- section,
- category,
- article,
- links,
- mdxSource,
- },
- }
- }
-
- // Otherwise, show the category page
- const categoryId = childId
- const sidebar = await getSidebarContentList({ sectionId, categoryId })
- const category = await getCategory(sectionId, categoryId)
- const categoryArticles = category.articleIds.map((id) => articles[id])
-
- const article = articles[categoryId + '_index'] ?? null
- const mdxSource = article ? await getArticleSource(categoryId + '_index') : null
-
- return {
- props: {
- type: 'category',
- sidebar,
- section,
- category,
- articles: categoryArticles,
- mdxSource,
- },
- }
-}
diff --git a/apps/docs/pages/_app.tsx b/apps/docs/pages/_app.tsx
deleted file mode 100644
index 12e99117b..000000000
--- a/apps/docs/pages/_app.tsx
+++ /dev/null
@@ -1,17 +0,0 @@
-import '@/styles/globals.css'
-import { ThemeProvider } from 'next-themes'
-import type { AppProps } from 'next/app'
-import Head from 'next/head'
-
-export default function App({ Component, pageProps }: AppProps) {
- return (
-
-
- tldraw docs
-
-
-
-
-
- )
-}
diff --git a/apps/docs/pages/_document.tsx b/apps/docs/pages/_document.tsx
deleted file mode 100644
index b64548619..000000000
--- a/apps/docs/pages/_document.tsx
+++ /dev/null
@@ -1,63 +0,0 @@
-import { Head, Html, Main, NextScript } from 'next/document'
-
-const TITLE = 'tldraw'
-const DESCRIPTION =
- 'Developer documentation for tldraw. Build infinite canvas experiences for the web.'
-const URL = 'https://tldraw.dev'
-const TWITTER_HANDLE = '@tldraw'
-const TWITTER_CARD = 'social-twitter.png'
-const FACEBOOK_CARD = 'social-og.png'
-const THEME_COLOR = '#FFFFFF'
-const THEME_ACCENT = '#FFFFFF'
-
-export default function Document() {
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {/* Twitter */}
-
-
-
-
-
-
-
- {/* Facebook */}
-
-
-
-
-
-
-
-
-
-
-
-
- )
-}
diff --git a/apps/docs/pages/api/search.ts b/apps/docs/pages/api/search.ts
deleted file mode 100644
index fd86f5ad2..000000000
--- a/apps/docs/pages/api/search.ts
+++ /dev/null
@@ -1,45 +0,0 @@
-// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
-import { SearchResult } from '@/types/search-types'
-import { getArticles, getSections } from '@/utils/content'
-import type { NextApiRequest, NextApiResponse } from 'next'
-
-type Data = {
- results: SearchResult[]
-}
-
-export default async function handler(req: NextApiRequest, res: NextApiResponse) {
- const { q, s } = req.query
- const query = q?.toString().toLowerCase()
- const activeId = s?.toString()
-
- if (!query) return res.status(400).json({ results: [] })
-
- const results: Data['results'] = []
- const articles = await getArticles()
-
- for (const section of await getSections()) {
- for (const category of section.categories) {
- for (const articleId of category.articleIds) {
- if (activeId === articleId) continue
-
- const article = articles[articleId]
- if (
- article.title.toLowerCase().includes(query) ||
- (article.description && article.description.toLowerCase().includes(query)) ||
- article.keywords.includes(query)
- ) {
- results.push({
- id: article.id,
- type: 'article',
- subtitle:
- category.id === 'ucg' ? `${section.title}` : `${section.title} / ${category.title}`,
- title: article.title,
- url: `${section.id}/${category.id}/${article.id}`,
- })
- }
- }
- }
- }
-
- res.status(200).json({ results })
-}
diff --git a/apps/docs/pages/cla.tsx b/apps/docs/pages/cla.tsx
deleted file mode 100644
index 9ecf74a47..000000000
--- a/apps/docs/pages/cla.tsx
+++ /dev/null
@@ -1,138 +0,0 @@
-import { Sidebar } from '@/components/Sidebar'
-import { Article, ArticleLinks, SidebarContentList } from '@/types/content-types'
-import { getArticle, getArticleSource, getLinks } from '@/utils/content'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetStaticProps } from 'next'
-import { MDXRemoteSerializeResult } from 'next-mdx-remote'
-import { useTheme } from 'next-themes'
-
-interface Props {
- article: Article
- links: ArticleLinks
- sidebar: SidebarContentList
- mdxSource: MDXRemoteSerializeResult
-}
-
-export default function CLA({ sidebar }: Props) {
- const theme = useTheme()
-
- return (
-
-
-
-
- Contributor License Agreement
- Version 1.0 — June 8th 2023
-
- In order to clarify the intellectual property license granted with Contributions from any
- person, tldraw, Inc. (“tldraw”) must have a Contributor License Agreement on file that has
- been signed by each contributor, indicating agreement to the license terms below. This
- license is for Your protection as a contributor as well as the protection of tldraw; it
- does not change your rights to use Your own contributions for any other purpose.
-
-
- You accept and agree to the following terms and conditions for Your Contributions (present
- and future) that you submit to tldraw. Except for the license granted herein to tldraw,
- You reserve all right, title, and interest in and to Your Contributions.{' '}
-
- 1. Definitions.
- "You" (or "Your") means the individual identified above.
-
- "Contribution" means any original work of authorship, including any modifications or
- additions to an existing work, that is intentionally submitted by You to tldraw for
- inclusion in, or documentation of, any of the products owned or managed by tldraw (each, a
- "Work"). For the purposes of this definition, "submitted" means any form of electronic,
- verbal, or written communication sent to tldraw or its representatives, including but not
- limited to communication on electronic mailing lists, source code control systems, and
- issue tracking systems that are managed by, or on behalf of, tldraw for the purpose of
- discussing and improving the Works, but excluding communication that is conspicuously
- marked or otherwise designated in writing by You as "Not a Contribution."{' '}
-
-
- 2. Grant of Copyright License. You hereby grant to tldraw a perpetual, worldwide,
- non-exclusive, sublicensable (through multiple tiers), no-charge, royalty-free,
- irrevocable copyright license to reproduce, prepare derivative works of, publicly display,
- publicly perform, distribute, and otherwise exploit Your Contributions and such derivative
- works.{' '}
-
-
- 3. Grant of Patent License. You hereby grant to tldraw a perpetual, worldwide,
- non-exclusive, sublicensable (through multiple tiers), no-charge, royalty-free,
- irrevocable patent license to make, have made, use, offer to sell, sell, import, and
- otherwise transfer and exploit the Works, where such license applies only to those patent
- claims licensable by You that are necessarily infringed by Your Contribution(s) alone or
- by combination of Your Contribution(s) with the Works to which such Contribution(s) was
- submitted.{' '}
-
-
- 4. You represent that you are legally entitled to grant the above license. If your
- employer(s) has rights to intellectual property that you create that includes your
- Contributions, you represent that you have received permission to make Contributions on
- behalf of that employer, that your employer has waived in writing any rights it may have
- in Your Contributions to tldraw, or that your employer has executed a separate Corporate
- CLA with tldraw.{' '}
-
-
- 5. You represent that each of Your Contributions is Your original creation and does not
- incorporate any material created by others. You represent that Your Contribution
- submissions include complete details of any patents or copyrights which are associated
- with any part of Your Contributions.{' '}
-
-
- 6. You are not expected to provide support for Your Contributions, except to the extent
- You desire to provide support. You may provide support for free, for a fee, or not at all.
- Unless required by applicable law or agreed to in writing, You provide Your Contributions
- on an "as is" basis, without warranties or conditions of any kind, either express or
- implied, including, without limitation, any warranties or conditions of title,
- non-infringement, merchantability, or fitness for a particular purpose.{' '}
-
-
- 7. You agree to notify tldraw of any facts or circumstances of which you become aware (now
- or in the future) that would make Your representations in this Agreement inaccurate in any
- respect.
-
-
- 8. You acknowledge that tldraw owns all right, title, and interest in and to the Works.
- Notwithstanding the foregoing, tldraw’s subsidiary, tldraw GB limited (the “Subsidiary”),
- is the beneficial owner of the Works, and tldraw will sublicense its rights in your
- Contributions under this Agreement to the Subsidiary in furtherance of the Subsidiary’s
- status as beneficial owner of the Works.
-
-
- 9. This Agreement is governed by the laws of Delaware, and the parties consent to
- exclusive jurisdiction in the courts sitting in Delaware. The parties waive all defenses
- of lack of personal jurisdiction and forum non-conveniens.
-
-
- 10. Entire Agreement/Assignment. This Agreement is the entire agreement between the
- parties, and supersedes any and all prior agreements, understandings or communications,
- written or oral, between the parties relating to the subject matter hereof. This Agreement
- may be assigned by tldraw without Your prior consent.{' '}
-
-
-
- Questions or concerns? Email hello@tldraw.com.
-
-
-
- )
-}
-
-const sectionId = 'docs'
-const categoryId = 'ucg'
-const articleId = 'introduction'
-
-export const getStaticProps: GetStaticProps = async () => {
- const sidebar = await getSidebarContentList({ sectionId, categoryId, articleId })
- const article = await getArticle(articleId)
- const links = await getLinks(articleId)
- const mdxSource = await getArticleSource(articleId)
-
- return { props: { article, sidebar, links, mdxSource } }
-}
diff --git a/apps/docs/pages/index.tsx b/apps/docs/pages/index.tsx
deleted file mode 100644
index 60a1fec82..000000000
--- a/apps/docs/pages/index.tsx
+++ /dev/null
@@ -1,52 +0,0 @@
-import { ArticleDetails } from '@/components/ArticleDetails'
-import { ArticleNavLinks } from '@/components/ArticleNavLinks'
-import { Mdx } from '@/components/Mdx'
-import { Sidebar } from '@/components/Sidebar'
-import { Article, ArticleLinks, SidebarContentList } from '@/types/content-types'
-import { getArticle, getArticleSource, getLinks } from '@/utils/content'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetStaticProps } from 'next'
-import { MDXRemoteSerializeResult } from 'next-mdx-remote'
-import { useTheme } from 'next-themes'
-
-interface Props {
- article: Article
- links: ArticleLinks
- sidebar: SidebarContentList
- mdxSource: MDXRemoteSerializeResult
-}
-
-export default function ArticlePage({ mdxSource, links, sidebar, article }: Props) {
- const theme = useTheme()
-
- return (
-
- )
-}
-
-const sectionId = 'docs'
-const categoryId = 'ucg'
-const articleId = 'introduction'
-
-export const getStaticProps: GetStaticProps = async () => {
- const sidebar = await getSidebarContentList({ sectionId, categoryId, articleId })
- const article = await getArticle(articleId)
- const links = await getLinks(articleId)
- const mdxSource = await getArticleSource(articleId)
-
- return { props: { article, sidebar, links, mdxSource } }
-}
diff --git a/apps/docs/pages/search-results.tsx b/apps/docs/pages/search-results.tsx
deleted file mode 100644
index 1427734b8..000000000
--- a/apps/docs/pages/search-results.tsx
+++ /dev/null
@@ -1,58 +0,0 @@
-import { Breadcrumb } from '@/components/Breadcrumb'
-import { MetaHead } from '@/components/MetaHead'
-import { Sidebar } from '@/components/Sidebar'
-import { SidebarContentList } from '@/types/content-types'
-import { SearchResult } from '@/types/search-types'
-import { getSidebarContentList } from '@/utils/getSidebarContentList'
-import { GetServerSideProps } from 'next'
-import { useTheme } from 'next-themes'
-import Link from 'next/link'
-
-type Props = {
- sidebar: SidebarContentList
- results: SearchResult[]
- query: string
-}
-
-export default function SectionListPage({ sidebar, query, results }: Props) {
- const theme = useTheme()
-
- return (
- <>
-
-
-
-
-
- {`Found ${results.length} Results for "${query}"`}
-
- {results.map((result) => (
-
-
- {result.subtitle}
- {result.title}
-
-
- ))}
-
-
-
- >
- )
-}
-
-export const getServerSideProps: GetServerSideProps = async (ctx) => {
- // get the q out of search-results?q=foo
- const query = ctx.query?.q?.toString() as string
- if (!query) throw Error()
-
- const sidebar = await getSidebarContentList({})
-
- // fetch from our current server
- const res = await fetch(`http://${ctx.req.headers.host}/api/search?q=${query}`)
-
- const json = await res.json()
- const results = json.results
-
- return { props: { sidebar, query, results } }
-}
diff --git a/apps/docs/public/apple-touch-icon-152x152.svg b/apps/docs/public/apple-touch-icon-152x152.svg
deleted file mode 100644
index cc4d2077b..000000000
--- a/apps/docs/public/apple-touch-icon-152x152.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/apple-touch-icon-180x180.svg b/apps/docs/public/apple-touch-icon-180x180.svg
deleted file mode 100644
index 720a7134d..000000000
--- a/apps/docs/public/apple-touch-icon-180x180.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/apple-touch-icon167x167.svg b/apps/docs/public/apple-touch-icon167x167.svg
deleted file mode 100644
index e38fe0311..000000000
--- a/apps/docs/public/apple-touch-icon167x167.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/avatars/steve_ruiz.jpg b/apps/docs/public/avatars/steve_ruiz.jpg
deleted file mode 100644
index 4b7fe501a..000000000
Binary files a/apps/docs/public/avatars/steve_ruiz.jpg and /dev/null differ
diff --git a/apps/docs/public/card_repo.png b/apps/docs/public/card_repo.png
deleted file mode 100644
index fbdf3abc1..000000000
Binary files a/apps/docs/public/card_repo.png and /dev/null differ
diff --git a/apps/docs/public/favicon-16x16.svg b/apps/docs/public/favicon-16x16.svg
deleted file mode 100644
index 29f0135b6..000000000
--- a/apps/docs/public/favicon-16x16.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/favicon-32x32.svg b/apps/docs/public/favicon-32x32.svg
deleted file mode 100644
index 15744418d..000000000
--- a/apps/docs/public/favicon-32x32.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/favicon.svg b/apps/docs/public/favicon.svg
deleted file mode 100644
index 248ce0426..000000000
--- a/apps/docs/public/favicon.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/apps/docs/public/icons/arrow-left.svg b/apps/docs/public/icons/arrow-left.svg
deleted file mode 100644
index 917d3897a..000000000
--- a/apps/docs/public/icons/arrow-left.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/arrow-right.svg b/apps/docs/public/icons/arrow-right.svg
deleted file mode 100644
index c4ff7c35c..000000000
--- a/apps/docs/public/icons/arrow-right.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/back-to-top.svg b/apps/docs/public/icons/back-to-top.svg
deleted file mode 100644
index ac518cdf5..000000000
--- a/apps/docs/public/icons/back-to-top.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/close.svg b/apps/docs/public/icons/close.svg
deleted file mode 100644
index 237836ab6..000000000
--- a/apps/docs/public/icons/close.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/discord.svg b/apps/docs/public/icons/discord.svg
deleted file mode 100644
index 68dc7e850..000000000
--- a/apps/docs/public/icons/discord.svg
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/icons/double-arrow-left.svg b/apps/docs/public/icons/double-arrow-left.svg
deleted file mode 100644
index 917d3897a..000000000
--- a/apps/docs/public/icons/double-arrow-left.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/double-arrow-right.svg b/apps/docs/public/icons/double-arrow-right.svg
deleted file mode 100644
index c4ff7c35c..000000000
--- a/apps/docs/public/icons/double-arrow-right.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/edit.svg b/apps/docs/public/icons/edit.svg
deleted file mode 100644
index d31310270..000000000
--- a/apps/docs/public/icons/edit.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/github.svg b/apps/docs/public/icons/github.svg
deleted file mode 100644
index 53fb57044..000000000
--- a/apps/docs/public/icons/github.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/light.svg b/apps/docs/public/icons/light.svg
deleted file mode 100644
index 79171695c..000000000
--- a/apps/docs/public/icons/light.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/icons/menu.svg b/apps/docs/public/icons/menu.svg
deleted file mode 100644
index 5d555b0a3..000000000
--- a/apps/docs/public/icons/menu.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/search.svg b/apps/docs/public/icons/search.svg
deleted file mode 100644
index d4888f62f..000000000
--- a/apps/docs/public/icons/search.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/apps/docs/public/icons/twitter.svg b/apps/docs/public/icons/twitter.svg
deleted file mode 100644
index c2191e543..000000000
--- a/apps/docs/public/icons/twitter.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/apps/docs/public/images/api/events.png b/apps/docs/public/images/api/events.png
deleted file mode 100644
index c738b74cd..000000000
Binary files a/apps/docs/public/images/api/events.png and /dev/null differ
diff --git a/apps/docs/public/images/placeholder.jpg b/apps/docs/public/images/placeholder.jpg
deleted file mode 100644
index a5f34dcde..000000000
Binary files a/apps/docs/public/images/placeholder.jpg and /dev/null differ
diff --git a/apps/docs/public/images/placeholder_a.jpg b/apps/docs/public/images/placeholder_a.jpg
deleted file mode 100644
index aefc78360..000000000
Binary files a/apps/docs/public/images/placeholder_a.jpg and /dev/null differ
diff --git a/apps/docs/public/images/placeholder_b.jpg b/apps/docs/public/images/placeholder_b.jpg
deleted file mode 100644
index a5f34dcde..000000000
Binary files a/apps/docs/public/images/placeholder_b.jpg and /dev/null differ
diff --git a/apps/docs/public/images/placeholder_c.jpg b/apps/docs/public/images/placeholder_c.jpg
deleted file mode 100644
index c820f5306..000000000
Binary files a/apps/docs/public/images/placeholder_c.jpg and /dev/null differ
diff --git a/apps/docs/public/images/screenshot.png b/apps/docs/public/images/screenshot.png
deleted file mode 100644
index d57d96eb9..000000000
Binary files a/apps/docs/public/images/screenshot.png and /dev/null differ
diff --git a/apps/docs/public/images/social-image-draw.png b/apps/docs/public/images/social-image-draw.png
deleted file mode 100644
index 9acd3971e..000000000
Binary files a/apps/docs/public/images/social-image-draw.png and /dev/null differ
diff --git a/apps/docs/public/images/social-image.png b/apps/docs/public/images/social-image.png
deleted file mode 100644
index 885d8756b..000000000
Binary files a/apps/docs/public/images/social-image.png and /dev/null differ
diff --git a/apps/docs/public/lockup.svg b/apps/docs/public/lockup.svg
deleted file mode 100644
index 519212880..000000000
--- a/apps/docs/public/lockup.svg
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/apps/docs/public/social-github.png b/apps/docs/public/social-github.png
deleted file mode 100644
index f38d62c92..000000000
Binary files a/apps/docs/public/social-github.png and /dev/null differ
diff --git a/apps/docs/public/social-og.png b/apps/docs/public/social-og.png
deleted file mode 100644
index 94deb439d..000000000
Binary files a/apps/docs/public/social-og.png and /dev/null differ
diff --git a/apps/docs/public/social-twitter.png b/apps/docs/public/social-twitter.png
deleted file mode 100644
index 6a48de31b..000000000
Binary files a/apps/docs/public/social-twitter.png and /dev/null differ
diff --git a/apps/docs/scripts/generateApiContent.ts b/apps/docs/scripts/generateApiContent.ts
deleted file mode 100644
index 2d5e6deaa..000000000
--- a/apps/docs/scripts/generateApiContent.ts
+++ /dev/null
@@ -1,128 +0,0 @@
-import { ApiModel } from '@microsoft/api-extractor-model'
-import fs from 'fs'
-import path from 'path'
-import { Articles, GeneratedContent, InputSection, MarkdownContent } from '../types/content-types'
-import { generateSection } from './generateSection'
-import { getApiMarkdown } from './getApiMarkdown'
-import { getSlug } from './utils'
-
-const { log: nicelog } = console
-
-async function generateApiDocs() {
- const apiInputSection: InputSection = {
- id: 'gen' as string,
- title: 'API',
- description: "Reference for the tldraw package's APIs (generated).",
- categories: [],
- }
-
- const addedCategories = new Set()
-
- const OUTPUT_DIR = path.join(process.cwd(), 'content', 'gen')
-
- if (fs.existsSync(OUTPUT_DIR)) {
- fs.rmdirSync(OUTPUT_DIR, { recursive: true })
- }
-
- fs.mkdirSync(OUTPUT_DIR)
-
- // to include more packages in docs, add them to devDependencies in package.json
- const packageJson = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'package.json'), 'utf8'))
- const tldrawPackagesToIncludeInDocs = Object.keys(packageJson.devDependencies).filter((dep) =>
- dep.startsWith('@tldraw/')
- )
-
- const model = new ApiModel()
- for (const packageName of tldrawPackagesToIncludeInDocs) {
- // Get the file contents
- const filePath = path.join(
- process.cwd(),
- '..',
- '..',
- 'packages',
- packageName.replace('@tldraw/', ''),
- 'api',
- 'api.json'
- )
-
- const packageModel = model.loadPackage(filePath)
-
- const categoryName = packageModel.name.replace(`@tldraw/`, '')
-
- if (!addedCategories.has(categoryName)) {
- apiInputSection.categories!.push({
- id: categoryName,
- title: packageModel.name,
- description: '',
- groups: [
- {
- id: 'Namespace',
- title: 'Namespaces',
- },
- {
- id: 'Class',
- title: 'Classes',
- },
- {
- id: 'Function',
- title: 'Functions',
- },
- {
- id: 'Variable',
- title: 'Variables',
- },
- {
- id: 'Enum',
- title: 'Enums',
- },
- {
- id: 'Interface',
- title: 'Interfaces',
- },
- {
- id: 'TypeAlias',
- title: 'TypeAliases',
- },
- ],
- })
- addedCategories.add(categoryName)
- }
-
- const entrypoint = packageModel.entryPoints[0]
-
- for (let j = 0; j < entrypoint.members.length; j++) {
- const item = entrypoint.members[j]
- const result = await getApiMarkdown(categoryName, item, j)
- const outputFileName = `${getSlug(item)}.mdx`
- fs.writeFileSync(path.join(OUTPUT_DIR, outputFileName), result.markdown)
- }
- }
-
- return apiInputSection
-}
-
-export async function generateApiContent(): Promise {
- const content: MarkdownContent = {}
- const articles: Articles = {}
-
- try {
- nicelog('• Generating api docs site content (content.json)')
-
- const inputApiSection = await generateApiDocs()
- const outputApiSection = generateSection(inputApiSection, content, articles)
- const contentComplete = { sections: [outputApiSection], content, articles }
-
- fs.writeFileSync(
- path.join(process.cwd(), 'api-content.json'),
- JSON.stringify(contentComplete, null, 2)
- )
-
- nicelog('✔ Generated api content.')
-
- return contentComplete
- } catch (error) {
- nicelog(`x Could not generate site content.`)
-
- throw error
- }
-}
diff --git a/apps/docs/tsconfig.content.json b/apps/docs/tsconfig.content.json
deleted file mode 100644
index 95d91de5d..000000000
--- a/apps/docs/tsconfig.content.json
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "./tsconfig.json",
- "compilerOptions": {
- "module": "commonjs"
- }
-}
diff --git a/apps/docs/tsconfig.json b/apps/docs/tsconfig.json
deleted file mode 100644
index 7b4cf9e70..000000000
--- a/apps/docs/tsconfig.json
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- "compilerOptions": {
- "target": "es5",
- "lib": ["dom", "dom.iterable", "esnext"],
- "allowJs": true,
- "skipLibCheck": true,
- "strict": true,
- "forceConsistentCasingInFileNames": true,
- "noEmit": true,
- "esModuleInterop": true,
- "module": "esnext",
- "moduleResolution": "node",
- "resolveJsonModule": true,
- "isolatedModules": true,
- "jsx": "preserve",
- "incremental": true,
- "paths": {
- "@/*": ["./*"]
- }
- },
- "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "content.d.ts"],
- "exclude": ["node_modules"],
- "references": [{ "path": "../../packages/utils" }]
-}
diff --git a/apps/docs/types/search-types.ts b/apps/docs/types/search-types.ts
deleted file mode 100644
index dad892ae9..000000000
--- a/apps/docs/types/search-types.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-export type SearchResult = {
- type: 'article' | 'category' | 'section'
- id: string
- subtitle: string
- title: string
- url: string
-}
diff --git a/apps/docs/utils/content.ts b/apps/docs/utils/content.ts
deleted file mode 100644
index eb32a558e..000000000
--- a/apps/docs/utils/content.ts
+++ /dev/null
@@ -1,124 +0,0 @@
-import { serialize } from 'next-mdx-remote/serialize'
-import rehypeAutolinkHeadings from 'rehype-autolink-headings'
-import rehypeHighlight from 'rehype-highlight'
-import rehypeSlug from 'rehype-slug-custom-id'
-import remarkGfm from 'remark-gfm'
-import { scope } from '../components/mdx-components'
-import { Article, GeneratedContent, Section, Status } from '../types/content-types'
-
-import jsonContent from '../content.json' // this won't be here until we've run generate-content
-
-export async function getMdxSource(source: string) {
- return serialize(source, {
- scope,
- mdxOptions: {
- remarkPlugins: [remarkGfm],
- rehypePlugins: [
- rehypeHighlight,
- rehypeAutolinkHeadings,
- [rehypeSlug, { enableCustomId: true, maintainCase: false, removeAccents: true }],
- ],
- },
- })
-}
-
-export async function getContent(): Promise {
- return jsonContent as any
-}
-
-export async function getMarkdownContent() {
- return (await getContent()).content as Record
-}
-
-export async function getArticles() {
- return (await getContent()).articles as Record
-}
-
-export async function getSections() {
- return (await getContent()).sections as Section[]
-}
-
-export async function getSection(sectionId: string) {
- const sections = await getSections()
- return sections.find((section) => section.id === sectionId)!
-}
-
-export async function getCategories(sectionId: string) {
- return Object.values((await getSection(sectionId)).categories!)
-}
-
-export async function getCategory(sectionId: string, id: string) {
- return (await getSection(sectionId)).categories!.find((c) => c.id === id)!
-}
-
-export async function getCategoryItems(sectionId: string, id: string) {
- const section = await getSection(sectionId)
- const category = section.categories!.find((c) => c.id === id)!
- const articles = await getArticles()
- return category.articleIds.map((id) => articles[id])
-}
-
-export async function getArticle(articleId: string) {
- const article = (await getArticles())[articleId]
- if (process.env.NODE_ENV !== 'development' && article.status !== Status.Published) {
- throw Error(`Could not find a article with articleId ${articleId}`)
- }
- return article
-}
-
-export async function getArticleSource(articleId: string) {
- const markdown = await getMarkdownContent()
- return getMdxSource(markdown[articleId])
-}
-
-export async function getLinks(articleId: string) {
- const article = (await getArticles())[articleId]
- if (!article) throw Error(`Could not find a article with articleId ${articleId}`)
- return {
- prev: article.prev ? await getArticle(article.prev) : null,
- next: article.next ? await getArticle(article.next) : null,
- }
-}
-
-export async function getArticlePathsForSection(sectionId: string) {
- const section = await getSection(sectionId)
- return section.categories.map((category) => ({
- params: { sectionId, categoryId: category.id },
- }))
-}
-
-export async function getArticlePathsForCategory(sectionId: string, categoryId: string) {
- const section = await getSection(sectionId)
- const category = section.categories!.find((c) => c.id === categoryId)!
- return category.articleIds.map((articleId) => ({
- params: { sectionId, categoryId, articleId },
- }))
-}
-
-export async function getCategoryPaths(sectionId: string) {
- const section = await getSection(sectionId)
- const results: { params: { sectionId: string; categoryId: string } }[] = []
- if (section.categories) {
- for (const category of section.categories) {
- // for (const articleId of category.articleIds) {
- results.push({ params: { sectionId, categoryId: category.id } })
- // }
- }
- }
-
- return results
-}
-
-export async function getAllSlugsForSection(sectionId: string) {
- const section = await getSection(sectionId)
- const results: { params: { sectionId: string; categoryId: string; articleId: string } }[] = []
- if (section.categories) {
- for (const category of section.categories) {
- for (const articleId of category.articleIds) {
- results.push({ params: { sectionId, categoryId: category.id, articleId } })
- }
- }
- }
-
- return results
-}
diff --git a/apps/docs/utils/gtag.ts b/apps/docs/utils/gtag.ts
deleted file mode 100644
index 7a6000ef2..000000000
--- a/apps/docs/utils/gtag.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-export const GA_TRACKING_ID = process.env.GA_MEASUREMENT_ID
-
-type GTagEvent = {
- action: string
- category: string
- label: string
- value: number
-}
-
-export const pageview = (url: URL): void => {
- if ('gtag' in window) {
- const win = window as any
- win?.gtag('config', GA_TRACKING_ID, {
- page_path: url,
- })
- }
-}
-
-export const event = ({ action, category, label, value }: GTagEvent): void => {
- if ('gtag' in window) {
- const win = window as any
- win?.gtag('event', action, {
- event_category: category,
- event_label: label,
- value: value,
- })
- }
-}
diff --git a/apps/docs/utils/useGtag.ts b/apps/docs/utils/useGtag.ts
deleted file mode 100644
index 5a79d37c6..000000000
--- a/apps/docs/utils/useGtag.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import router from 'next/router'
-import { useEffect } from 'react'
-import * as gtag from './gtag'
-
-function handleRouteChange(url: URL) {
- gtag.pageview(url)
-}
-
-export default function useGtag() {
- useEffect(() => {
- if (process.env.NODE_ENV !== 'production') return
-
- router.events.on('routeChangeComplete', handleRouteChange)
-
- return () => {
- router.events.off('routeChangeComplete', handleRouteChange)
- }
- }, [])
-}
diff --git a/apps/docs/content/README.md b/docs/README.md
similarity index 100%
rename from apps/docs/content/README.md
rename to docs/README.md
diff --git a/apps/docs/content/authors.json b/docs/authors.json
similarity index 100%
rename from apps/docs/content/authors.json
rename to docs/authors.json
diff --git a/apps/docs/content/community/contributing.mdx b/docs/community/contributing.mdx
similarity index 100%
rename from apps/docs/content/community/contributing.mdx
rename to docs/community/contributing.mdx
diff --git a/apps/docs/content/community/embeds.mdx b/docs/community/embeds.mdx
similarity index 100%
rename from apps/docs/content/community/embeds.mdx
rename to docs/community/embeds.mdx
diff --git a/apps/docs/content/community/translations.mdx b/docs/community/translations.mdx
similarity index 100%
rename from apps/docs/content/community/translations.mdx
rename to docs/community/translations.mdx
diff --git a/apps/docs/content/docs/assets.mdx b/docs/docs/assets.mdx
similarity index 100%
rename from apps/docs/content/docs/assets.mdx
rename to docs/docs/assets.mdx
diff --git a/apps/docs/content/docs/collaboration.mdx b/docs/docs/collaboration.mdx
similarity index 100%
rename from apps/docs/content/docs/collaboration.mdx
rename to docs/docs/collaboration.mdx
diff --git a/apps/docs/content/docs/editor.mdx b/docs/docs/editor.mdx
similarity index 100%
rename from apps/docs/content/docs/editor.mdx
rename to docs/docs/editor.mdx
diff --git a/docs/docs/installation.mdx b/docs/docs/installation.mdx
new file mode 100644
index 000000000..1bc66bcc5
--- /dev/null
+++ b/docs/docs/installation.mdx
@@ -0,0 +1,29 @@
+---
+title: Installation
+status: published
+author: steveruizok
+date: 3/22/2023
+order: 1
+---
+
+At the moment the `@tldraw/tldraw` package is in alpha. We also ship a canary version which is always up to date with the main branch of tldraw [repository](https://github.com/tldraw/tldraw).
+
+## Alpha
+
+First, install the `@tldraw/tldraw` package using `@alpha` for the latest.
+
+```bash
+yarn add @tldraw/tldraw@alpha
+# or
+npm install @tldraw/tldraw@alpha
+```
+
+## Canary
+
+To get the very latest version, use the [latest canary release](https://www.npmjs.com/package/@tldraw/tldraw?activeTab=versions). Docs for the very latest version are also available at [canary.tldraw.dev](https://canary.tldraw.dev).
+
+```bash
+yarn add @tldraw/tldraw@canary
+# or
+npm install @tldraw/tldraw@canary
+```
\ No newline at end of file
diff --git a/docs/docs/introduction.mdx b/docs/docs/introduction.mdx
new file mode 100644
index 000000000..73e3bf2df
--- /dev/null
+++ b/docs/docs/introduction.mdx
@@ -0,0 +1,50 @@
+---
+title: Introduction
+status: published
+author: steveruizok
+date: 3/22/2023
+order: 0
+---
+
+Welcome to the tldraw developer docs.
+
+Here at tldraw, we make two things: a very good multiplayer whiteboard (at [tldraw.com](https://tldraw.com)), and the [open source library](https://github.com/tldraw/tldraw) that powers it. This page provides documentation and reference for that open source library.
+
+```tsx
+import { Tldraw } from '@tldraw/tldraw'
+import '@tldraw/tldraw/tldraw.css'
+
+export default function () {
+ return (
+
+
+
+ )
+}
+```
+
+You can use the `` React component to build on top of the default tldraw experience. It's easy to use and easy to extend with your own [custom shapes](/docs/shapes), [custom tools](/docs/tools), and [user interface](/docs/user-interface) overrides.
+
+You can also use the [Editor API](/docs/editor) to create, update, and delete shapes, control the camera, or do just about anything else.
+
+If you want to go even deeper, you can use the `` component as a more minimal engine without the default tldraw shapes or user interface.
+
+
+Best of all, you can easily plug tldraw into the [collaboration backend](/docs/collaboration) of your choice.
+
+- Want to explore the code? Visit the [GitHub repo](https://github.com/tldraw/tldraw).
+- Want to try it out? Visit the [examples sandbox](https://stackblitz.com/github/tldraw/tldraw/tree/examples?file=src%2F1-basic%2FBasicExample.tsx).
+
+Otherwise, continue on to the [installation](/docs/installation) and [usage](/docs/usage) guides.
+
+## Community
+
+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).
+
+If you spot an issue with these docs, please use the links at the bottom of each page to suggest a change.
+
+## License
+
+Our open source libraries are licensed and distributed under Apache-2.0.
+
+Our plan is to keep these libraries permissively licensed while we develop a commercial offering for teams who want more from tldraw. If you're planning to use use tldraw in a commercial product, please reach out at [hello@tldraw.com](mailto://hello@tldraw.com).
\ No newline at end of file
diff --git a/apps/docs/content/docs/persistence.mdx b/docs/docs/persistence.mdx
similarity index 100%
rename from apps/docs/content/docs/persistence.mdx
rename to docs/docs/persistence.mdx
diff --git a/apps/docs/content/docs/shapes.mdx b/docs/docs/shapes.mdx
similarity index 100%
rename from apps/docs/content/docs/shapes.mdx
rename to docs/docs/shapes.mdx
diff --git a/apps/docs/content/docs/tools.mdx b/docs/docs/tools.mdx
similarity index 100%
rename from apps/docs/content/docs/tools.mdx
rename to docs/docs/tools.mdx
diff --git a/docs/docs/usage.mdx b/docs/docs/usage.mdx
new file mode 100644
index 000000000..cdf2d0903
--- /dev/null
+++ b/docs/docs/usage.mdx
@@ -0,0 +1,48 @@
+---
+title: Usage
+status: published
+author: steveruizok
+date: 3/22/2023
+order: 2
+---
+
+The `` component is the easiest way to get started. To use it, create a file like this one:
+
+```tsx
+import { Tldraw } from '@tldraw/tldraw'
+import '@tldraw/tldraw/tldraw.css'
+
+export default function () {
+ return (
+
+
+
+ )
+}
+```
+
+### CSS
+
+In order to use the `` component, you should also import the `tldraw.css` file from the `@tldraw/tldraw` package. You can alternatively import this file inside of another CSS file using the `@import` syntax.
+
+You can overwrite these files with other CSS or copy the contents into a different file and import that instead.
+
+### HTML
+
+If you're using the `` component in a full-screen app, you probably also want to update your `index.html`'s meta viewport element as shown below.
+
+```html
+
+```
+
+This may not be critical to `` performing correctly, however some features (such as safe area positioning) will only work correctly if these viewport options are set.
+
+## Using in Next.js, Create React App, Vite, etc.
+
+Check the [examples repository](https://github.com/tldraw/examples) to see examples of tldraw being used in various frameworks.
+
+By the way, the `` component can't be server-rendered. If you're using the component in a server-rendered framework (such as Next.js) then you need to import it dynamically.
+
+## Going deeper
+
+The `` component combines two lower-level components: `` and ``. If you want to have more granular control, you can use those lower-level components directly. See [this example](https://github.com/tldraw/tldraw/blob/main/apps/examples/src/5-exploded/ExplodedExample.tsx) for reference.
\ No newline at end of file
diff --git a/apps/docs/content/docs/user-interface.mdx b/docs/docs/user-interface.mdx
similarity index 100%
rename from apps/docs/content/docs/user-interface.mdx
rename to docs/docs/user-interface.mdx
diff --git a/docs/gen/ACCEPTED_ASSET_TYPE-var.mdx b/docs/gen/ACCEPTED_ASSET_TYPE-var.mdx
new file mode 100644
index 000000000..eee0c8e8a
--- /dev/null
+++ b/docs/gen/ACCEPTED_ASSET_TYPE-var.mdx
@@ -0,0 +1,20 @@
+---
+title: ACCEPTED_ASSET_TYPE
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 0
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ACCEPTED_ASSET_TYPE: string
+```
+
diff --git a/docs/gen/ACCEPTED_IMG_TYPE-var.mdx b/docs/gen/ACCEPTED_IMG_TYPE-var.mdx
new file mode 100644
index 000000000..01917a425
--- /dev/null
+++ b/docs/gen/ACCEPTED_IMG_TYPE-var.mdx
@@ -0,0 +1,20 @@
+---
+title: ACCEPTED_IMG_TYPE
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 1
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ACCEPTED_IMG_TYPE: string[]
+```
+
diff --git a/docs/gen/ACCEPTED_VID_TYPE-var.mdx b/docs/gen/ACCEPTED_VID_TYPE-var.mdx
new file mode 100644
index 000000000..603fe8908
--- /dev/null
+++ b/docs/gen/ACCEPTED_VID_TYPE-var.mdx
@@ -0,0 +1,20 @@
+---
+title: ACCEPTED_VID_TYPE
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 2
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ACCEPTED_VID_TYPE: string[]
+```
+
diff --git a/docs/gen/AllRecords-type.mdx b/docs/gen/AllRecords-type.mdx
new file mode 100644
index 000000000..e45714d74
--- /dev/null
+++ b/docs/gen/AllRecords-type.mdx
@@ -0,0 +1,24 @@
+---
+title: AllRecords
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 0
+---Public TypeAlias
+
+Get the type of all records in a record store.
+
+
+##### Signature
+
+
+```ts
+type AllRecords> = ExtractR>
+```
+
+##### References
+
+[Store](/gen/store/Store-class), [ExtractR](/gen/store/~ExtractR-type), [ExtractRecordType](/gen/store/~ExtractRecordType-type)
+
diff --git a/docs/gen/ArrowShape-var.mdx b/docs/gen/ArrowShape-var.mdx
new file mode 100644
index 000000000..f83ff6653
--- /dev/null
+++ b/docs/gen/ArrowShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: ArrowShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 3
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ArrowShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLArrowShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
diff --git a/docs/gen/ArrowShapeArrowheadEndStyle-var.mdx b/docs/gen/ArrowShapeArrowheadEndStyle-var.mdx
new file mode 100644
index 000000000..1198aeedf
--- /dev/null
+++ b/docs/gen/ArrowShapeArrowheadEndStyle-var.mdx
@@ -0,0 +1,34 @@
+---
+title: ArrowShapeArrowheadEndStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 0
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ArrowShapeArrowheadEndStyle: import('../styles/StyleProp').EnumStyleProp<
+ | 'arrow'
+ | 'bar'
+ | 'diamond'
+ | 'dot'
+ | 'inverted'
+ | 'none'
+ | 'pipe'
+ | 'square'
+ | 'triangle'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/ArrowShapeArrowheadStartStyle-var.mdx b/docs/gen/ArrowShapeArrowheadStartStyle-var.mdx
new file mode 100644
index 000000000..847fee1c5
--- /dev/null
+++ b/docs/gen/ArrowShapeArrowheadStartStyle-var.mdx
@@ -0,0 +1,34 @@
+---
+title: ArrowShapeArrowheadStartStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 1
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ArrowShapeArrowheadStartStyle: import('../styles/StyleProp').EnumStyleProp<
+ | 'arrow'
+ | 'bar'
+ | 'diamond'
+ | 'dot'
+ | 'inverted'
+ | 'none'
+ | 'pipe'
+ | 'square'
+ | 'triangle'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/ArrowShapeUtil-class.mdx b/docs/gen/ArrowShapeUtil-class.mdx
new file mode 100644
index 000000000..0c45c4297
--- /dev/null
+++ b/docs/gen/ArrowShapeUtil-class.mdx
@@ -0,0 +1,925 @@
+---
+title: ArrowShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 4
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canBind](#ArrowShapeUtil-canBind-member)
+ - [canEdit](#ArrowShapeUtil-canEdit-member)
+ - [canSnap](#ArrowShapeUtil-canSnap-member)
+ - [hideResizeHandles](#ArrowShapeUtil-hideResizeHandles-member)
+ - [hideRotateHandle](#ArrowShapeUtil-hideRotateHandle-member)
+ - [hideSelectionBoundsBg](#ArrowShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#ArrowShapeUtil-hideSelectionBoundsFg-member)
+ - [isClosed](#ArrowShapeUtil-isClosed-member)
+ - [labelBoundsCache](#ArrowShapeUtil-labelBoundsCache-member)
+ - [onDoubleClickHandle](#ArrowShapeUtil-onDoubleClickHandle-member)
+ - [onEditEnd](#ArrowShapeUtil-onEditEnd-member)
+ - [onHandleChange](#ArrowShapeUtil-onHandleChange-member)
+ - [onResize](#ArrowShapeUtil-onResize-member)
+ - [onTranslateStart](#ArrowShapeUtil-onTranslateStart-member)
+ - [type](#ArrowShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#ArrowShapeUtil-component-member-1)
+ - [getArrowInfo](#ArrowShapeUtil-getArrowInfo-member-1)
+ - [getBounds](#ArrowShapeUtil-getBounds-member-1)
+ - [getCenter](#ArrowShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#ArrowShapeUtil-getDefaultProps-member-1)
+ - [getHandles](#ArrowShapeUtil-getHandles-member-1)
+ - [getLabelBounds](#ArrowShapeUtil-getLabelBounds-member-1)
+ - [getOutline](#ArrowShapeUtil-getOutline-member-1)
+ - [getOutlineWithoutLabel](#ArrowShapeUtil-getOutlineWithoutLabel-member-1)
+ - [hitTestLineSegment](#ArrowShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#ArrowShapeUtil-hitTestPoint-member-1)
+ - [indicator](#ArrowShapeUtil-indicator-member-1)
+ - [snapPoints](#ArrowShapeUtil-snapPoints-member-1)
+ - [toSvg](#ArrowShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class ArrowShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+## Properties
+
+### `canBind` \{#ArrowShapeUtil-canBind-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canBind: () => boolean
+```
+
+---
+
+### `canEdit` \{#ArrowShapeUtil-canEdit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canEdit: () => boolean
+```
+
+---
+
+### `canSnap` \{#ArrowShapeUtil-canSnap-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canSnap: () => boolean
+```
+
+---
+
+### `hideResizeHandles` \{#ArrowShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideResizeHandles: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `hideRotateHandle` \{#ArrowShapeUtil-hideRotateHandle-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideRotateHandle: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `hideSelectionBoundsBg` \{#ArrowShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `hideSelectionBoundsFg` \{#ArrowShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `isClosed` \{#ArrowShapeUtil-isClosed-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isClosed: () => boolean
+```
+
+---
+
+### `labelBoundsCache` \{#ArrowShapeUtil-labelBoundsCache-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get labelBoundsCache(): ComputedCache
+```
+
+##### References
+
+[ComputedCache](/gen/store/ComputedCache-type), [Box2d](/gen/primitives/Box2d-class), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `onDoubleClickHandle` \{#ArrowShapeUtil-onDoubleClickHandle-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDoubleClickHandle: (
+ shape: TLArrowShape,
+ handle: TLHandle
+) => TLShapePartial | void
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [TLHandle](/gen/tlschema/TLHandle-interface), [TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `onEditEnd` \{#ArrowShapeUtil-onEditEnd-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onEditEnd: TLOnEditEndHandler
+```
+
+##### References
+
+[TLOnEditEndHandler](/gen/editor/TLOnEditEndHandler-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `onHandleChange` \{#ArrowShapeUtil-onHandleChange-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onHandleChange: TLOnHandleChangeHandler
+```
+
+##### References
+
+[TLOnHandleChangeHandler](/gen/editor/TLOnHandleChangeHandler-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `onResize` \{#ArrowShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `onTranslateStart` \{#ArrowShapeUtil-onTranslateStart-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onTranslateStart: TLOnTranslateStartHandler
+```
+
+##### References
+
+[TLOnTranslateStartHandler](/gen/editor/TLOnTranslateStartHandler-type), [TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `type` \{#ArrowShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'arrow'
+```
+
+---
+
+## Methods
+
+### `component()` \{#ArrowShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element | null
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getArrowInfo()` \{#ArrowShapeUtil-getArrowInfo-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+ArrowInfo | undefined
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [ArrowInfo](/gen/editor/~ArrowInfo-type)
+
+---
+
+### `getBounds()` \{#ArrowShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#ArrowShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#ArrowShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLArrowShape['props']
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type)
+
+---
+
+### `getHandles()` \{#ArrowShapeUtil-getHandles-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLHandle[]
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [TLHandle](/gen/tlschema/TLHandle-interface)
+
+---
+
+### `getLabelBounds()` \{#ArrowShapeUtil-getLabelBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | null
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getOutline()` \{#ArrowShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineWithoutLabel()` \{#ArrowShapeUtil-getOutlineWithoutLabel-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#ArrowShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#ArrowShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `indicator()` \{#ArrowShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element | null
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `snapPoints()` \{#ArrowShapeUtil-snapPoints-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`_shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `toSvg()` \{#ArrowShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLArrowShape
+```
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGGElement
+```
+
+##### References
+
+[TLArrowShape](/gen/tlschema/TLArrowShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGGElement](/gen/SVGGElement-interface)
+
+---
+
diff --git a/docs/gen/AssetRecordType-var.mdx b/docs/gen/AssetRecordType-var.mdx
new file mode 100644
index 000000000..b9c405469
--- /dev/null
+++ b/docs/gen/AssetRecordType-var.mdx
@@ -0,0 +1,24 @@
+---
+title: AssetRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 4
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+AssetRecordType: import('@tldraw/store').RecordType
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLAsset](/gen/tlschema/TLAsset-type)
+
diff --git a/docs/gen/BaseBoxShapeTool-class.mdx b/docs/gen/BaseBoxShapeTool-class.mdx
new file mode 100644
index 000000000..8d5e5087f
--- /dev/null
+++ b/docs/gen/BaseBoxShapeTool-class.mdx
@@ -0,0 +1,97 @@
+---
+title: BaseBoxShapeTool
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 5
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [children](#BaseBoxShapeTool-children-member)
+ - [id](#BaseBoxShapeTool-id-member)
+ - [initial](#BaseBoxShapeTool-initial-member)
+ - [shapeType](#BaseBoxShapeTool-shapeType-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+abstract class BaseBoxShapeTool extends StateNode {}
+```
+
+##### References
+
+[StateNode](/gen/editor/StateNode-class)
+
+---
+
+## Properties
+
+### `children` \{#BaseBoxShapeTool-children-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static children: () => (typeof Idle | typeof Pointing)[]
+```
+
+##### References
+
+[Idle](/gen/editor/~Idle_4-class), [Pointing](/gen/editor/~Pointing_2-class)
+
+---
+
+### `id` \{#BaseBoxShapeTool-id-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static id: string
+```
+
+---
+
+### `initial` \{#BaseBoxShapeTool-initial-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static initial: string
+```
+
+---
+
+### `shapeType` \{#BaseBoxShapeTool-shapeType-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+abstract shapeType: TLShapeUtilConstructor
+```
+
+##### References
+
+[TLShapeUtilConstructor](/gen/editor/TLShapeUtilConstructor-interface)
+
+---
+
diff --git a/docs/gen/BaseBoxShapeUtil-class.mdx b/docs/gen/BaseBoxShapeUtil-class.mdx
new file mode 100644
index 000000000..31ba0a46e
--- /dev/null
+++ b/docs/gen/BaseBoxShapeUtil-class.mdx
@@ -0,0 +1,309 @@
+---
+title: BaseBoxShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 6
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [onResize](#BaseBoxShapeUtil-onResize-member)
+- [Methods](#methods)
+ - [getBounds](#BaseBoxShapeUtil-getBounds-member-1)
+ - [getCenter](#BaseBoxShapeUtil-getCenter-member-1)
+ - [getOutline](#BaseBoxShapeUtil-getOutline-member-1)
+ - [hitTestLineSegment](#BaseBoxShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#BaseBoxShapeUtil-hitTestPoint-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+abstract class BaseBoxShapeUtil<
+ Shape extends TLBaseBoxShape
+> extends ShapeUtil {}
+```
+
+##### References
+
+[TLBaseBoxShape](/gen/editor/TLBaseBoxShape-type), [ShapeUtil](/gen/editor/ShapeUtil-class)
+
+---
+
+## Properties
+
+### `onResize` \{#BaseBoxShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type)
+
+---
+
+## Methods
+
+### `getBounds()` \{#BaseBoxShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#BaseBoxShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutline()` \{#BaseBoxShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#BaseBoxShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#BaseBoxShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
diff --git a/docs/gen/BaseRecord-interface.mdx b/docs/gen/BaseRecord-interface.mdx
new file mode 100644
index 000000000..1b97ed673
--- /dev/null
+++ b/docs/gen/BaseRecord-interface.mdx
@@ -0,0 +1,64 @@
+---
+title: BaseRecord
+status: published
+category: store
+group: Interface
+author: api
+date: 06/23/2023
+order: 2
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [id](#BaseRecord-id-member)
+ - [typeName](#BaseRecord-typeName-member)
+
+
+The base record that all records must extend.
+
+
+##### Signature
+
+
+```ts
+interface BaseRecord<
+ TypeName extends string,
+ Id extends RecordId
+> {}
+```
+
+##### References
+
+[RecordId](/gen/store/RecordId-type), [UnknownRecord](/gen/store/UnknownRecord-type)
+
+---
+
+## Properties
+
+### `id` \{#BaseRecord-id-member}
+
+Public Readonly PropertySignature
+
+##### Signature
+
+
+```ts
+readonly id: Id
+```
+
+---
+
+### `typeName` \{#BaseRecord-typeName-member}
+
+Public Readonly PropertySignature
+
+##### Signature
+
+
+```ts
+readonly typeName: TypeName
+```
+
+---
+
diff --git a/docs/gen/BookmarkShape-var.mdx b/docs/gen/BookmarkShape-var.mdx
new file mode 100644
index 000000000..88bf07c04
--- /dev/null
+++ b/docs/gen/BookmarkShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: BookmarkShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 8
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+BookmarkShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLBookmarkShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type)
+
diff --git a/docs/gen/BookmarkShapeUtil-class.mdx b/docs/gen/BookmarkShapeUtil-class.mdx
new file mode 100644
index 000000000..b0587ac87
--- /dev/null
+++ b/docs/gen/BookmarkShapeUtil-class.mdx
@@ -0,0 +1,233 @@
+---
+title: BookmarkShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 9
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canResize](#BookmarkShapeUtil-canResize-member)
+ - [hideSelectionBoundsBg](#BookmarkShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#BookmarkShapeUtil-hideSelectionBoundsFg-member)
+ - [onBeforeCreate](#BookmarkShapeUtil-onBeforeCreate-member)
+ - [onBeforeUpdate](#BookmarkShapeUtil-onBeforeUpdate-member)
+ - [type](#BookmarkShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#BookmarkShapeUtil-component-member-1)
+ - [getDefaultProps](#BookmarkShapeUtil-getDefaultProps-member-1)
+ - [indicator](#BookmarkShapeUtil-indicator-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class BookmarkShapeUtil extends BaseBoxShapeUtil {}
+```
+
+##### References
+
+[BaseBoxShapeUtil](/gen/editor/BaseBoxShapeUtil-class), [TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type)
+
+---
+
+## Properties
+
+### `canResize` \{#BookmarkShapeUtil-canResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canResize: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsBg` \{#BookmarkShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsFg` \{#BookmarkShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: () => boolean
+```
+
+---
+
+### `onBeforeCreate` \{#BookmarkShapeUtil-onBeforeCreate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeCreate?: TLOnBeforeCreateHandler
+```
+
+##### References
+
+[TLOnBeforeCreateHandler](/gen/editor/TLOnBeforeCreateHandler-type), [TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type)
+
+---
+
+### `onBeforeUpdate` \{#BookmarkShapeUtil-onBeforeUpdate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeUpdate?: TLOnBeforeUpdateHandler
+```
+
+##### References
+
+[TLOnBeforeUpdateHandler](/gen/editor/TLOnBeforeUpdateHandler-type), [TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type)
+
+---
+
+### `type` \{#BookmarkShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'bookmark'
+```
+
+---
+
+## Methods
+
+### `component()` \{#BookmarkShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLBookmarkShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getDefaultProps()` \{#BookmarkShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLBookmarkShape['props']
+```
+
+##### References
+
+[TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type)
+
+---
+
+### `indicator()` \{#BookmarkShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLBookmarkShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLBookmarkShape](/gen/tlschema/TLBookmarkShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
diff --git a/docs/gen/Box2d-class.mdx b/docs/gen/Box2d-class.mdx
new file mode 100644
index 000000000..0c3ae5bcc
--- /dev/null
+++ b/docs/gen/Box2d-class.mdx
@@ -0,0 +1,1664 @@
+---
+title: Box2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 3
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [aspectRatio](#Box2d-aspectRatio-member)
+ - [center](#Box2d-center-member)
+ - [Collides](#Box2d-Collides-member)
+ - [Common](#Box2d-Common-member)
+ - [Contains](#Box2d-Contains-member)
+ - [ContainsPoint](#Box2d-ContainsPoint-member)
+ - [corners](#Box2d-corners-member)
+ - [h](#Box2d-h-member)
+ - [height](#Box2d-height-member)
+ - [Includes](#Box2d-Includes-member)
+ - [maxX](#Box2d-maxX-member)
+ - [maxY](#Box2d-maxY-member)
+ - [midX](#Box2d-midX-member)
+ - [midY](#Box2d-midY-member)
+ - [minX](#Box2d-minX-member)
+ - [minY](#Box2d-minY-member)
+ - [point](#Box2d-point-member)
+ - [sides](#Box2d-sides-member)
+ - [Sides](#Box2d-Sides-member)
+ - [size](#Box2d-size-member)
+ - [snapPoints](#Box2d-snapPoints-member)
+ - [w](#Box2d-w-member)
+ - [width](#Box2d-width-member)
+ - [x](#Box2d-x-member)
+ - [y](#Box2d-y-member)
+- [Methods](#methods)
+ - [clone](#Box2d-clone-member-1)
+ - [collides](#Box2d-collides-member-1)
+ - [contains](#Box2d-contains-member-1)
+ - [containsPoint](#Box2d-containsPoint-member-1)
+ - [equals](#Box2d-equals-member-1)
+ - [Equals](#Box2d-Equals-member-1)
+ - [expand](#Box2d-expand-member-1)
+ - [Expand](#Box2d-Expand-member-1)
+ - [expandBy](#Box2d-expandBy-member-1)
+ - [ExpandBy](#Box2d-ExpandBy-member-1)
+ - [From](#Box2d-From-member-1)
+ - [FromPoints](#Box2d-FromPoints-member-1)
+ - [getHandlePoint](#Box2d-getHandlePoint-member-1)
+ - [includes](#Box2d-includes-member-1)
+ - [resize](#Box2d-resize-member-1)
+ - [Resize](#Box2d-Resize-member-1)
+ - [scale](#Box2d-scale-member-1)
+ - [set](#Box2d-set-member-1)
+ - [setTo](#Box2d-setTo-member-1)
+ - [snapToGrid](#Box2d-snapToGrid-member-1)
+ - [toFixed](#Box2d-toFixed-member-1)
+ - [toJson](#Box2d-toJson-member-1)
+ - [translate](#Box2d-translate-member-1)
+ - [union](#Box2d-union-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class Box2d {}
+```
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `Box2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`w`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`h`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+---
+
+## Properties
+
+### `aspectRatio` \{#Box2d-aspectRatio-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get aspectRatio(): number
+```
+
+---
+
+### `center` \{#Box2d-center-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get center(): Vec2d
+
+set center(v: Vec2d)
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `Collides` \{#Box2d-Collides-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Collides: (A: Box2d, B: Box2d) => boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `Common` \{#Box2d-Common-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Common: (boxes: Box2d[]) => Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `Contains` \{#Box2d-Contains-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Contains: (A: Box2d, B: Box2d) => boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `ContainsPoint` \{#Box2d-ContainsPoint-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static ContainsPoint: (A: Box2d, B: number | VecLike, y?: number) => boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `corners` \{#Box2d-corners-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get corners(): Vec2d[]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `h` \{#Box2d-h-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+h: number
+```
+
+---
+
+### `height` \{#Box2d-height-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get height(): number
+
+set height(n: number)
+```
+
+---
+
+### `Includes` \{#Box2d-Includes-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Includes: (A: Box2d, B: Box2d) => boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `maxX` \{#Box2d-maxX-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get maxX(): number
+```
+
+---
+
+### `maxY` \{#Box2d-maxY-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get maxY(): number
+```
+
+---
+
+### `midX` \{#Box2d-midX-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get midX(): number
+```
+
+---
+
+### `midY` \{#Box2d-midY-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get midY(): number
+```
+
+---
+
+### `minX` \{#Box2d-minX-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get minX(): number
+
+set minX(n: number)
+```
+
+---
+
+### `minY` \{#Box2d-minY-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get minY(): number
+
+set minY(n: number)
+```
+
+---
+
+### `point` \{#Box2d-point-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get point(): Vec2d
+
+set point(val: Vec2d)
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `sides` \{#Box2d-sides-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get sides(): Array<[Vec2d, Vec2d]>
+```
+
+##### References
+
+[Array](/gen/Array-interface), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `Sides` \{#Box2d-Sides-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Sides: (A: Box2d, inset?: number) => Vec2d[][]
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `size` \{#Box2d-size-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get size(): Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `snapPoints` \{#Box2d-snapPoints-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get snapPoints(): Vec2d[]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `w` \{#Box2d-w-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+w: number
+```
+
+---
+
+### `width` \{#Box2d-width-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+get width(): number
+
+set width(n: number)
+```
+
+---
+
+### `x` \{#Box2d-x-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+x: number
+```
+
+---
+
+### `y` \{#Box2d-y-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+y: number
+```
+
+---
+
+## Methods
+
+### `clone()` \{#Box2d-clone-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `collides()` \{#Box2d-collides-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `contains()` \{#Box2d-contains-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `containsPoint()` \{#Box2d-containsPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`V`
+
+
+
+
+```ts
+number | VecLike
+```
+
+
+
+
+
+
+
+
+`y`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `equals()` \{#Box2d-equals-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`other`
+
+
+
+
+```ts
+Box2d | Box2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class), [Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `Equals()` \{#Box2d-Equals-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`a`
+
+
+
+
+```ts
+Box2d | Box2dModel
+```
+
+
+
+
+
+
+
+
+`b`
+
+
+
+
+```ts
+Box2d | Box2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class), [Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `expand()` \{#Box2d-expand-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `Expand()` \{#Box2d-Expand-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `expandBy()` \{#Box2d-expandBy-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`n`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `ExpandBy()` \{#Box2d-ExpandBy-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+
+`n`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `From()` \{#Box2d-From-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`box`
+
+
+
+
+```ts
+Box2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `FromPoints()` \{#Box2d-FromPoints-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getHandlePoint()` \{#Box2d-getHandlePoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`handle`
+
+
+
+
+```ts
+SelectionCorner | SelectionEdge
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[SelectionCorner](/gen/primitives/SelectionCorner-type), [SelectionEdge](/gen/primitives/SelectionEdge-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `includes()` \{#Box2d-includes-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `resize()` \{#Box2d-resize-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`handle`
+
+
+
+
+```ts
+SelectionCorner | SelectionEdge | string
+```
+
+
+
+
+
+
+
+
+`dx`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`dy`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[SelectionCorner](/gen/primitives/SelectionCorner-type), [SelectionEdge](/gen/primitives/SelectionEdge-type)
+
+---
+
+### `Resize()` \{#Box2d-Resize-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`box`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+
+`handle`
+
+
+
+
+```ts
+SelectionCorner | SelectionEdge | string
+```
+
+
+
+
+
+
+
+
+`dx`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`dy`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`isAspectRatioLocked`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ box: Box2d
+ scaleX: number
+ scaleY: number
+}
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class), [SelectionCorner](/gen/primitives/SelectionCorner-type), [SelectionEdge](/gen/primitives/SelectionEdge-type)
+
+---
+
+### `scale()` \{#Box2d-scale-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`n`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `set()` \{#Box2d-set-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`w`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`h`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setTo()` \{#Box2d-setTo-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `snapToGrid()` \{#Box2d-snapToGrid-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`size`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `toFixed()` \{#Box2d-toFixed-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `toJson()` \{#Box2d-toJson-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Box2dModel
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `translate()` \{#Box2d-translate-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`delta`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `union()` \{#Box2d-union-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`box`
+
+
+
+
+```ts
+Box2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
diff --git a/docs/gen/Box2dModel-interface.mdx b/docs/gen/Box2dModel-interface.mdx
new file mode 100644
index 000000000..ae6695d00
--- /dev/null
+++ b/docs/gen/Box2dModel-interface.mdx
@@ -0,0 +1,85 @@
+---
+title: Box2dModel
+status: published
+category: tlschema
+group: Interface
+author: api
+date: 06/23/2023
+order: 6
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [h](#Box2dModel-h-member)
+ - [w](#Box2dModel-w-member)
+ - [x](#Box2dModel-x-member)
+ - [y](#Box2dModel-y-member)
+
+
+A serializable model for 2D boxes.
+
+
+##### Signature
+
+
+```ts
+interface Box2dModel {}
+```
+
+---
+
+## Properties
+
+### `h` \{#Box2dModel-h-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+h: number
+```
+
+---
+
+### `w` \{#Box2dModel-w-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+w: number
+```
+
+---
+
+### `x` \{#Box2dModel-x-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+x: number
+```
+
+---
+
+### `y` \{#Box2dModel-y-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+y: number
+```
+
+---
+
diff --git a/docs/gen/BreakPointProvider-function-1.mdx b/docs/gen/BreakPointProvider-function-1.mdx
new file mode 100644
index 000000000..fc4c23331
--- /dev/null
+++ b/docs/gen/BreakPointProvider-function-1.mdx
@@ -0,0 +1,49 @@
+---
+title: BreakPointProvider
+status: published
+category: ui
+group: Function
+author: api
+date: 06/23/2023
+order: 0
+---Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children }`
+
+
+
+
+```ts
+{
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/Button-var.mdx b/docs/gen/Button-var.mdx
new file mode 100644
index 000000000..9c426c5f6
--- /dev/null
+++ b/docs/gen/Button-var.mdx
@@ -0,0 +1,26 @@
+---
+title: Button
+status: published
+category: ui
+group: Variable
+author: api
+date: 06/23/2023
+order: 1
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+Button: React.ForwardRefExoticComponent<
+ TLUiButtonProps & React.RefAttributes
+>
+```
+
+##### References
+
+[React.ForwardRefExoticComponent](/gen/@types/react-React-ForwardRefExoticComponent-interface), [TLUiButtonProps](/gen/ui/TLUiButtonProps-interface), [React.RefAttributes](/gen/@types/react-React-RefAttributes-interface), [HTMLButtonElement](/gen/HTMLButtonElement-interface)
+
diff --git a/docs/gen/CameraRecordType-var.mdx b/docs/gen/CameraRecordType-var.mdx
new file mode 100644
index 000000000..6297f6a14
--- /dev/null
+++ b/docs/gen/CameraRecordType-var.mdx
@@ -0,0 +1,24 @@
+---
+title: CameraRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 8
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+CameraRecordType: import('@tldraw/store').RecordType
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLCamera](/gen/tlschema/TLCamera-interface)
+
diff --git a/docs/gen/Canvas-var.mdx b/docs/gen/Canvas-var.mdx
new file mode 100644
index 000000000..88066dd95
--- /dev/null
+++ b/docs/gen/Canvas-var.mdx
@@ -0,0 +1,24 @@
+---
+title: Canvas
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 10
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+Canvas: React.MemoExoticComponent<() => JSX.Element>
+```
+
+##### References
+
+[React.MemoExoticComponent](/gen/@types/react-React-MemoExoticComponent-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/CollectionDiff-type.mdx b/docs/gen/CollectionDiff-type.mdx
new file mode 100644
index 000000000..5595ca254
--- /dev/null
+++ b/docs/gen/CollectionDiff-type.mdx
@@ -0,0 +1,27 @@
+---
+title: CollectionDiff
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 3
+---Public TypeAlias
+
+A diff describing the changes to a collection.
+
+
+##### Signature
+
+
+```ts
+type CollectionDiff = {
+ added?: Set
+ removed?: Set
+}
+```
+
+##### References
+
+[Set](/gen/Set-interface)
+
diff --git a/docs/gen/ComputedCache-type.mdx b/docs/gen/ComputedCache-type.mdx
new file mode 100644
index 000000000..091f3c1be
--- /dev/null
+++ b/docs/gen/ComputedCache-type.mdx
@@ -0,0 +1,26 @@
+---
+title: ComputedCache
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 6
+---Public TypeAlias
+
+A record store is a collection of records of different types.
+
+
+##### Signature
+
+
+```ts
+type ComputedCache = {
+ get(id: IdOf): Data | undefined
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [IdOf](/gen/store/IdOf-type)
+
diff --git a/docs/gen/ContextMenu-var.mdx b/docs/gen/ContextMenu-var.mdx
new file mode 100644
index 000000000..22b60c873
--- /dev/null
+++ b/docs/gen/ContextMenu-var.mdx
@@ -0,0 +1,24 @@
+---
+title: ContextMenu
+status: published
+category: ui
+group: Variable
+author: api
+date: 06/23/2023
+order: 3
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ContextMenu: ({ children }: { children: any }) => JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/CubicSegment2d-class.mdx b/docs/gen/CubicSegment2d-class.mdx
new file mode 100644
index 000000000..488a64013
--- /dev/null
+++ b/docs/gen/CubicSegment2d-class.mdx
@@ -0,0 +1,312 @@
+---
+title: CubicSegment2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 8
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [[Symbol.iterator]](#CubicSegment2d-[Symbol-iterator]-member)
+- [Methods](#methods)
+ - [getPath](#CubicSegment2d-getPath-member-1)
+ - [getPoint](#CubicSegment2d-getPoint-member-1)
+ - [getX](#CubicSegment2d-getX-member-1)
+ - [getY](#CubicSegment2d-getY-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class CubicSegment2d extends BaseSegment2d {}
+```
+
+##### References
+
+[BaseSegment2d](/gen/primitives/~BaseSegment2d-class), [CubicSegment2dModel](/gen/primitives/CubicSegment2dModel-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `CubicSegment2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`a`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`b`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`c`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`d`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+## Properties
+
+### `[Symbol.iterator]` \{#CubicSegment2d-[Symbol-iterator]-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+[Symbol.iterator]: (
+ this: InstanceType
+) => Generator
+```
+
+##### References
+
+[Symbol.iterator](/gen/SymbolConstructor-iterator), [InstanceType](/gen/InstanceType-type), [CubicSegment2d](/gen/primitives/CubicSegment2d-class), [Generator](/gen/Generator-interface), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+## Methods
+
+### `getPath()` \{#CubicSegment2d-getPath-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`head`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+---
+
+### `getPoint()` \{#CubicSegment2d-getPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getX()` \{#CubicSegment2d-getX-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+---
+
+### `getY()` \{#CubicSegment2d-getY-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+---
+
diff --git a/docs/gen/CubicSegment2dModel-interface.mdx b/docs/gen/CubicSegment2dModel-interface.mdx
new file mode 100644
index 000000000..06d91a17f
--- /dev/null
+++ b/docs/gen/CubicSegment2dModel-interface.mdx
@@ -0,0 +1,115 @@
+---
+title: CubicSegment2dModel
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 9
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [a](#CubicSegment2dModel-a-member)
+ - [b](#CubicSegment2dModel-b-member)
+ - [c](#CubicSegment2dModel-c-member)
+ - [d](#CubicSegment2dModel-d-member)
+ - [p](#CubicSegment2dModel-p-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface CubicSegment2dModel {}
+```
+
+---
+
+## Properties
+
+### `a` \{#CubicSegment2dModel-a-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+a: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `b` \{#CubicSegment2dModel-b-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+b: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `c` \{#CubicSegment2dModel-c-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+c: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `d` \{#CubicSegment2dModel-d-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+d: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `p` \{#CubicSegment2dModel-p-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+p: number
+```
+
+---
+
diff --git a/docs/gen/CubicSpline2d-class.mdx b/docs/gen/CubicSpline2d-class.mdx
new file mode 100644
index 000000000..e820a124f
--- /dev/null
+++ b/docs/gen/CubicSpline2d-class.mdx
@@ -0,0 +1,244 @@
+---
+title: CubicSpline2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 10
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [segments](#CubicSpline2d-segments-member)
+- [Methods](#methods)
+ - [FromPoints](#CubicSpline2d-FromPoints-member-1)
+ - [getSegmentsFromPoints](#CubicSpline2d-getSegmentsFromPoints-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class CubicSpline2d extends BaseSpline2d {}
+```
+
+##### References
+
+[BaseSpline2d](/gen/primitives/~BaseSpline2d-class), [CubicSegment2dModel](/gen/primitives/CubicSegment2dModel-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `CubicSpline2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+
+`k`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+## Properties
+
+### `segments` \{#CubicSpline2d-segments-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+segments: CubicSegment2d[]
+```
+
+##### References
+
+[CubicSegment2d](/gen/primitives/CubicSegment2d-class)
+
+---
+
+## Methods
+
+### `FromPoints()` \{#CubicSpline2d-FromPoints-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+Vec2d[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+CubicSpline2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class), [CubicSpline2d](/gen/primitives/CubicSpline2d-class)
+
+---
+
+### `getSegmentsFromPoints()` \{#CubicSpline2d-getSegmentsFromPoints-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+
+`k`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+CubicSegment2d[]
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [CubicSegment2d](/gen/primitives/CubicSegment2d-class)
+
+---
+
diff --git a/docs/gen/DefaultColorStyle-var.mdx b/docs/gen/DefaultColorStyle-var.mdx
new file mode 100644
index 000000000..260586224
--- /dev/null
+++ b/docs/gen/DefaultColorStyle-var.mdx
@@ -0,0 +1,37 @@
+---
+title: DefaultColorStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 15
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultColorStyle: import('./StyleProp').EnumStyleProp<
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultDashStyle-var.mdx b/docs/gen/DefaultDashStyle-var.mdx
new file mode 100644
index 000000000..7091728a0
--- /dev/null
+++ b/docs/gen/DefaultDashStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DefaultDashStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 16
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultDashStyle: import('./StyleProp').EnumStyleProp<
+ 'dashed' | 'dotted' | 'draw' | 'solid'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultFillStyle-var.mdx b/docs/gen/DefaultFillStyle-var.mdx
new file mode 100644
index 000000000..d2a067ae7
--- /dev/null
+++ b/docs/gen/DefaultFillStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DefaultFillStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 17
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultFillStyle: import('./StyleProp').EnumStyleProp<
+ 'none' | 'pattern' | 'semi' | 'solid'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultFontStyle-var.mdx b/docs/gen/DefaultFontStyle-var.mdx
new file mode 100644
index 000000000..c5492f400
--- /dev/null
+++ b/docs/gen/DefaultFontStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DefaultFontStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 18
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultFontStyle: import('./StyleProp').EnumStyleProp<
+ 'draw' | 'mono' | 'sans' | 'serif'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultHorizontalAlignStyle-var.mdx b/docs/gen/DefaultHorizontalAlignStyle-var.mdx
new file mode 100644
index 000000000..a67cab9c5
--- /dev/null
+++ b/docs/gen/DefaultHorizontalAlignStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DefaultHorizontalAlignStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 19
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultHorizontalAlignStyle: import('./StyleProp').EnumStyleProp<
+ 'end-legacy' | 'end' | 'middle-legacy' | 'middle' | 'start-legacy' | 'start'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultSizeStyle-var.mdx b/docs/gen/DefaultSizeStyle-var.mdx
new file mode 100644
index 000000000..1156f9ac2
--- /dev/null
+++ b/docs/gen/DefaultSizeStyle-var.mdx
@@ -0,0 +1,24 @@
+---
+title: DefaultSizeStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 20
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultSizeStyle: import('./StyleProp').EnumStyleProp<'l' | 'm' | 's' | 'xl'>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/DefaultVerticalAlignStyle-var.mdx b/docs/gen/DefaultVerticalAlignStyle-var.mdx
new file mode 100644
index 000000000..0d6c1d8e8
--- /dev/null
+++ b/docs/gen/DefaultVerticalAlignStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DefaultVerticalAlignStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 21
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DefaultVerticalAlignStyle: import('./StyleProp').EnumStyleProp<
+ 'end' | 'middle' | 'start'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/Dialog-namespace.mdx b/docs/gen/Dialog-namespace.mdx
new file mode 100644
index 000000000..a99d97791
--- /dev/null
+++ b/docs/gen/Dialog-namespace.mdx
@@ -0,0 +1,241 @@
+---
+title: Dialog
+status: published
+category: ui
+group: Namespace
+author: api
+date: 06/23/2023
+order: 4
+---None Namespace
+
+
+ Table of Contents
+- [Methods](#methods)
+ - [Body](#Dialog-Body-function-1)
+ - [CloseButton](#Dialog-CloseButton-function-1)
+ - [Footer](#Dialog-Footer-function-1)
+ - [Header](#Dialog-Header-function-1)
+ - [Title](#Dialog-Title-function-1)
+
+
+##### Signature
+
+
+```ts
+
+```
+
+---
+
+## Methods
+
+### `Body` \{#Dialog-Body-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ className, children, style, }`
+
+
+
+
+```ts
+{
+ className?: string
+ children: any
+ style?: React.CSSProperties
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[React.CSSProperties](/gen/@types/react-React-CSSProperties-interface), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `CloseButton` \{#Dialog-CloseButton-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Footer` \{#Dialog-Footer-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ className, children }`
+
+
+
+
+```ts
+{
+ className?: string
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Header` \{#Dialog-Header-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ className, children }`
+
+
+
+
+```ts
+{
+ className?: string
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Title` \{#Dialog-Title-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ className, children }`
+
+
+
+
+```ts
+{
+ className?: string
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
diff --git a/docs/gen/DocumentRecordType-var.mdx b/docs/gen/DocumentRecordType-var.mdx
new file mode 100644
index 000000000..85b541def
--- /dev/null
+++ b/docs/gen/DocumentRecordType-var.mdx
@@ -0,0 +1,24 @@
+---
+title: DocumentRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 22
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DocumentRecordType: import('@tldraw/store').RecordType
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLDocument](/gen/tlschema/TLDocument-interface)
+
diff --git a/docs/gen/DrawShape-var.mdx b/docs/gen/DrawShape-var.mdx
new file mode 100644
index 000000000..61890201d
--- /dev/null
+++ b/docs/gen/DrawShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: DrawShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 26
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+DrawShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLDrawShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
diff --git a/docs/gen/DrawShapeUtil-class.mdx b/docs/gen/DrawShapeUtil-class.mdx
new file mode 100644
index 000000000..b52013bec
--- /dev/null
+++ b/docs/gen/DrawShapeUtil-class.mdx
@@ -0,0 +1,630 @@
+---
+title: DrawShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 27
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [hideResizeHandles](#DrawShapeUtil-hideResizeHandles-member)
+ - [hideRotateHandle](#DrawShapeUtil-hideRotateHandle-member)
+ - [hideSelectionBoundsBg](#DrawShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#DrawShapeUtil-hideSelectionBoundsFg-member)
+ - [isClosed](#DrawShapeUtil-isClosed-member)
+ - [onResize](#DrawShapeUtil-onResize-member)
+ - [type](#DrawShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#DrawShapeUtil-component-member-1)
+ - [expandSelectionOutlinePx](#DrawShapeUtil-expandSelectionOutlinePx-member-1)
+ - [getBounds](#DrawShapeUtil-getBounds-member-1)
+ - [getCenter](#DrawShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#DrawShapeUtil-getDefaultProps-member-1)
+ - [getOutline](#DrawShapeUtil-getOutline-member-1)
+ - [hitTestLineSegment](#DrawShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#DrawShapeUtil-hitTestPoint-member-1)
+ - [indicator](#DrawShapeUtil-indicator-member-1)
+ - [toSvg](#DrawShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class DrawShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+## Properties
+
+### `hideResizeHandles` \{#DrawShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideResizeHandles: (shape: TLDrawShape) => boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `hideRotateHandle` \{#DrawShapeUtil-hideRotateHandle-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideRotateHandle: (shape: TLDrawShape) => boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `hideSelectionBoundsBg` \{#DrawShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: (shape: TLDrawShape) => boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `hideSelectionBoundsFg` \{#DrawShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: (shape: TLDrawShape) => boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `isClosed` \{#DrawShapeUtil-isClosed-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isClosed: (shape: TLDrawShape) => boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `onResize` \{#DrawShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `type` \{#DrawShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'draw'
+```
+
+---
+
+## Methods
+
+### `component()` \{#DrawShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `expandSelectionOutlinePx()` \{#DrawShapeUtil-expandSelectionOutlinePx-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `getBounds()` \{#DrawShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#DrawShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#DrawShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLDrawShape['props']
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type)
+
+---
+
+### `getOutline()` \{#DrawShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#DrawShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#DrawShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `indicator()` \{#DrawShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toSvg()` \{#DrawShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLDrawShape
+```
+
+
+
+
+
+
+
+
+`_font`
+
+
+
+
+```ts
+string | undefined
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGGElement
+```
+
+##### References
+
+[TLDrawShape](/gen/tlschema/TLDrawShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGGElement](/gen/SVGGElement-interface)
+
+---
+
diff --git a/docs/gen/DropdownMenu-namespace.mdx b/docs/gen/DropdownMenu-namespace.mdx
new file mode 100644
index 000000000..164964b63
--- /dev/null
+++ b/docs/gen/DropdownMenu-namespace.mdx
@@ -0,0 +1,519 @@
+---
+title: DropdownMenu
+status: published
+category: ui
+group: Namespace
+author: api
+date: 06/23/2023
+order: 5
+---None Namespace
+
+
+ Table of Contents
+- [Methods](#methods)
+ - [CheckboxItem](#DropdownMenu-CheckboxItem-function-1)
+ - [Content](#DropdownMenu-Content-function-1)
+ - [Group](#DropdownMenu-Group-function-1)
+ - [Indicator](#DropdownMenu-Indicator-function-1)
+ - [Item](#DropdownMenu-Item-function-1)
+ - [RadioItem](#DropdownMenu-RadioItem-function-1)
+ - [Root](#DropdownMenu-Root-function-1)
+ - [Sub](#DropdownMenu-Sub-function-1)
+ - [SubContent](#DropdownMenu-SubContent-function-1)
+ - [SubTrigger](#DropdownMenu-SubTrigger-function-1)
+ - [Trigger](#DropdownMenu-Trigger-function-1)
+
+
+##### Signature
+
+
+```ts
+
+```
+
+---
+
+## Methods
+
+### `CheckboxItem` \{#DropdownMenu-CheckboxItem-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, onSelect, ...rest }`
+
+
+
+
+```ts
+DropdownMenuCheckboxItemProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[DropdownMenuCheckboxItemProps](/gen/ui/DropdownMenu-DropdownMenuCheckboxItemProps-interface), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Content` \{#DropdownMenu-Content-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ side, align, sideOffset, alignOffset, children, }`
+
+
+
+
+```ts
+{
+ children: any
+ alignOffset?: number
+ sideOffset?: number
+ align?: 'center' | 'end' | 'start'
+ side?: 'bottom' | 'left' | 'right' | 'top'
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Group` \{#DropdownMenu-Group-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, size, }`
+
+
+
+
+```ts
+{
+ children: any
+ size?: 'medium' | 'small' | 'tiny' | 'wide'
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Indicator` \{#DropdownMenu-Indicator-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Item` \{#DropdownMenu-Item-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ noClose, ...props }`
+
+
+
+
+```ts
+DropdownMenuItemProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[DropdownMenuItemProps](/gen/ui/DropdownMenu-DropdownMenuItemProps-interface), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `RadioItem` \{#DropdownMenu-RadioItem-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, onSelect, ...rest }`
+
+
+
+
+```ts
+DropdownMenuCheckboxItemProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[DropdownMenuCheckboxItemProps](/gen/ui/DropdownMenu-DropdownMenuCheckboxItemProps-interface), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Root` \{#DropdownMenu-Root-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ id, children, modal, }`
+
+
+
+
+```ts
+{
+ id: string
+ children: any
+ modal?: boolean
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Sub` \{#DropdownMenu-Sub-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ id, children }`
+
+
+
+
+```ts
+{
+ id: string
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `SubContent` \{#DropdownMenu-SubContent-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ alignOffset, sideOffset, children, }`
+
+
+
+
+```ts
+{
+ alignOffset?: number
+ sideOffset?: number
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `SubTrigger` \{#DropdownMenu-SubTrigger-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ label, 'data-testid': testId, 'data-direction': dataDirection, }`
+
+
+
+
+```ts
+{
+ label: TLUiTranslationKey
+ 'data-testid'?: string
+ 'data-direction'?: 'left' | 'right'
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLUiTranslationKey](/gen/ui/TLUiTranslationKey-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `Trigger` \{#DropdownMenu-Trigger-function-1}
+
+Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, 'data-testid': testId, }`
+
+
+
+
+```ts
+{
+ children: any
+ 'data-testid'?: string
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
diff --git a/docs/gen/EASINGS-var.mdx b/docs/gen/EASINGS-var.mdx
new file mode 100644
index 000000000..4ebc2c8a6
--- /dev/null
+++ b/docs/gen/EASINGS-var.mdx
@@ -0,0 +1,40 @@
+---
+title: EASINGS
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 13
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+EASINGS: {
+ readonly linear: (t: number) => number
+ readonly easeInQuad: (t: number) => number
+ readonly easeOutQuad: (t: number) => number
+ readonly easeInOutQuad: (t: number) => number
+ readonly easeInCubic: (t: number) => number
+ readonly easeOutCubic: (t: number) => number
+ readonly easeInOutCubic: (t: number) => number
+ readonly easeInQuart: (t: number) => number
+ readonly easeOutQuart: (t: number) => number
+ readonly easeInOutQuart: (t: number) => number
+ readonly easeInQuint: (t: number) => number
+ readonly easeOutQuint: (t: number) => number
+ readonly easeInOutQuint: (t: number) => number
+ readonly easeInSine: (t: number) => number
+ readonly easeOutSine: (t: number) => number
+ readonly easeInOutSine: (t: number) => number
+ readonly easeInExpo: (t: number) => number
+ readonly easeOutExpo: (t: number) => number
+ readonly easeInOutExpo: (t: number) => number
+}
+```
+
diff --git a/docs/gen/EMBED_DEFINITIONS-var.mdx b/docs/gen/EMBED_DEFINITIONS-var.mdx
new file mode 100644
index 000000000..f7e830c88
--- /dev/null
+++ b/docs/gen/EMBED_DEFINITIONS-var.mdx
@@ -0,0 +1,222 @@
+---
+title: EMBED_DEFINITIONS
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 24
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+EMBED_DEFINITIONS: readonly [
+ {
+ readonly type: 'tldraw'
+ readonly title: 'tldraw'
+ readonly hostnames: readonly [
+ 'beta.tldraw.com',
+ 'lite.tldraw.com',
+ 'www.tldraw.com'
+ ]
+ readonly minWidth: 300
+ readonly minHeight: 300
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'codesandbox'
+ readonly title: 'CodeSandbox'
+ readonly hostnames: readonly ['codesandbox.io']
+ readonly minWidth: 300
+ readonly minHeight: 300
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'codepen'
+ readonly title: 'Codepen'
+ readonly hostnames: readonly ['codepen.io']
+ readonly minWidth: 300
+ readonly minHeight: 300
+ readonly width: 520
+ readonly height: 400
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'scratch'
+ readonly title: 'Scratch'
+ readonly hostnames: readonly ['scratch.mit.edu']
+ readonly width: 520
+ readonly height: 400
+ readonly doesResize: false
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'youtube'
+ readonly title: 'YouTube'
+ readonly hostnames: readonly ['*.youtube.com', 'youtube.com', 'youtu.be']
+ readonly width: 800
+ readonly height: 450
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly overridePermissions: {
+ readonly 'allow-presentation': true
+ }
+ readonly isAspectRatioLocked: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'figma'
+ readonly title: 'Figma'
+ readonly hostnames: readonly ['figma.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'google_maps'
+ readonly title: 'Google Maps'
+ readonly hostnames: readonly ['google.*']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'google_calendar'
+ readonly title: 'Google Calendar'
+ readonly hostnames: readonly ['calendar.google.*']
+ readonly width: 720
+ readonly height: 500
+ readonly minWidth: 460
+ readonly minHeight: 360
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly instructionLink: 'https://support.google.com/calendar/answer/41207?hl=en'
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'google_slides'
+ readonly title: 'Google Slides'
+ readonly hostnames: readonly ['docs.google.*']
+ readonly width: 720
+ readonly height: 500
+ readonly minWidth: 460
+ readonly minHeight: 360
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'github_gist'
+ readonly title: 'GitHub Gist'
+ readonly hostnames: readonly ['gist.github.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'replit'
+ readonly title: 'Replit'
+ readonly hostnames: readonly ['replit.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'felt'
+ readonly title: 'Felt'
+ readonly hostnames: readonly ['felt.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'spotify'
+ readonly title: 'Spotify'
+ readonly hostnames: readonly ['open.spotify.com']
+ readonly width: 720
+ readonly height: 500
+ readonly minHeight: 500
+ readonly overrideOutlineRadius: 12
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'vimeo'
+ readonly title: 'Vimeo'
+ readonly hostnames: readonly ['vimeo.com', 'player.vimeo.com']
+ readonly width: 640
+ readonly height: 360
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly isAspectRatioLocked: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'excalidraw'
+ readonly title: 'Excalidraw'
+ readonly hostnames: readonly ['excalidraw.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly isAspectRatioLocked: true
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ },
+ {
+ readonly type: 'observable'
+ readonly title: 'Observable'
+ readonly hostnames: readonly ['observablehq.com']
+ readonly width: 720
+ readonly height: 500
+ readonly doesResize: true
+ readonly canUnmount: false
+ readonly isAspectRatioLocked: false
+ readonly backgroundColor: '#fff'
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+ }
+]
+```
+
diff --git a/docs/gen/EPSILON-var.mdx b/docs/gen/EPSILON-var.mdx
new file mode 100644
index 000000000..28554e0fe
--- /dev/null
+++ b/docs/gen/EPSILON-var.mdx
@@ -0,0 +1,20 @@
+---
+title: EPSILON
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 15
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+EPSILON: number
+```
+
diff --git a/docs/gen/EVENT_NAME_MAP-var.mdx b/docs/gen/EVENT_NAME_MAP-var.mdx
new file mode 100644
index 000000000..dad6dafb7
--- /dev/null
+++ b/docs/gen/EVENT_NAME_MAP-var.mdx
@@ -0,0 +1,27 @@
+---
+title: EVENT_NAME_MAP
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 33
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+EVENT_NAME_MAP: Record<
+ Exclude,
+ keyof TLEventHandlers
+>
+```
+
+##### References
+
+[Record](/gen/Record-type), [Exclude](/gen/Exclude-type), [TLEventName](/gen/editor/TLEventName-type), [TLPinchEventName](/gen/editor/TLPinchEventName-type), [TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
diff --git a/docs/gen/EasingType-type.mdx b/docs/gen/EasingType-type.mdx
new file mode 100644
index 000000000..0f667da2f
--- /dev/null
+++ b/docs/gen/EasingType-type.mdx
@@ -0,0 +1,24 @@
+---
+title: EasingType
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 14
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type EasingType = keyof typeof EASINGS
+```
+
+##### References
+
+[EASINGS](/gen/primitives/EASINGS-var)
+
diff --git a/docs/gen/Editor-class.mdx b/docs/gen/Editor-class.mdx
new file mode 100644
index 000000000..3dacabd9b
--- /dev/null
+++ b/docs/gen/Editor-class.mdx
@@ -0,0 +1,12503 @@
+---
+title: Editor
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 28
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [allShapesCommonBounds](#Editor-allShapesCommonBounds-member)
+ - [animationSpeed](#Editor-animationSpeed-member)
+ - [assets](#Editor-assets-member)
+ - [brush](#Editor-brush-member)
+ - [camera](#Editor-camera-member)
+ - [cameraState](#Editor-cameraState-member)
+ - [canMoveCamera](#Editor-canMoveCamera-member)
+ - [canRedo](#Editor-canRedo-member)
+ - [canUndo](#Editor-canUndo-member)
+ - [croppingId](#Editor-croppingId-member)
+ - [currentPage](#Editor-currentPage-member)
+ - [currentPageId](#Editor-currentPageId-member)
+ - [currentPageShapeIds](#Editor-currentPageShapeIds-member)
+ - [currentToolId](#Editor-currentToolId-member)
+ - [cursor](#Editor-cursor-member)
+ - [devicePixelRatio](#Editor-devicePixelRatio-member)
+ - [disposables](#Editor-disposables-member)
+ - [documentSettings](#Editor-documentSettings-member)
+ - [editingId](#Editor-editingId-member)
+ - [editingShape](#Editor-editingShape-member)
+ - [erasingIds](#Editor-erasingIds-member)
+ - [erasingIdsSet](#Editor-erasingIdsSet-member)
+ - [externalContentManager](#Editor-externalContentManager-member)
+ - [focusLayerId](#Editor-focusLayerId-member)
+ - [focusLayerShape](#Editor-focusLayerShape-member)
+ - [getContainer](#Editor-getContainer-member)
+ - [gridSize](#Editor-gridSize-member)
+ - [hintingIds](#Editor-hintingIds-member)
+ - [history](#Editor-history-member)
+ - [hoveredId](#Editor-hoveredId-member)
+ - [hoveredShape](#Editor-hoveredShape-member)
+ - [inputs](#Editor-inputs-member)
+ - [instanceState](#Editor-instanceState-member)
+ - [isChangingStyle](#Editor-isChangingStyle-member)
+ - [isChromeForIos](#Editor-isChromeForIos-member)
+ - [isCoarsePointer](#Editor-isCoarsePointer-member)
+ - [isDarkMode](#Editor-isDarkMode-member)
+ - [isFocused](#Editor-isFocused-member)
+ - [isFocusMode](#Editor-isFocusMode-member)
+ - [isGridMode](#Editor-isGridMode-member)
+ - [isIos](#Editor-isIos-member)
+ - [isMenuOpen](#Editor-isMenuOpen-member)
+ - [isPenMode](#Editor-isPenMode-member)
+ - [isReadOnly](#Editor-isReadOnly-member)
+ - [isSafari](#Editor-isSafari-member)
+ - [isSnapMode](#Editor-isSnapMode-member)
+ - [isToolLocked](#Editor-isToolLocked-member)
+ - [locale](#Editor-locale-member)
+ - [onlySelectedShape](#Editor-onlySelectedShape-member)
+ - [openMenus](#Editor-openMenus-member)
+ - [pages](#Editor-pages-member)
+ - [pageState](#Editor-pageState-member)
+ - [renderingBounds](#Editor-renderingBounds-member)
+ - [renderingBoundsExpanded](#Editor-renderingBoundsExpanded-member)
+ - [renderingShapes](#Editor-renderingShapes-member)
+ - [root](#Editor-root-member)
+ - [scribble](#Editor-scribble-member)
+ - [selectedIds](#Editor-selectedIds-member)
+ - [selectedIdsSet](#Editor-selectedIdsSet-member)
+ - [selectedPageBounds](#Editor-selectedPageBounds-member)
+ - [selectedShapes](#Editor-selectedShapes-member)
+ - [selectionBounds](#Editor-selectionBounds-member)
+ - [selectionPageCenter](#Editor-selectionPageCenter-member)
+ - [selectionRotation](#Editor-selectionRotation-member)
+ - [shapesArray](#Editor-shapesArray-member)
+ - [shapeUtils](#Editor-shapeUtils-member)
+ - [sharedOpacity](#Editor-sharedOpacity-member)
+ - [sharedStyles](#Editor-sharedStyles-member)
+ - [snaps](#Editor-snaps-member)
+ - [sortedShapesArray](#Editor-sortedShapesArray-member)
+ - [store](#Editor-store-member)
+ - [textMeasure](#Editor-textMeasure-member)
+ - [user](#Editor-user-member)
+ - [viewportPageBounds](#Editor-viewportPageBounds-member)
+ - [viewportPageCenter](#Editor-viewportPageCenter-member)
+ - [viewportScreenBounds](#Editor-viewportScreenBounds-member)
+ - [viewportScreenCenter](#Editor-viewportScreenCenter-member)
+ - [zoomBrush](#Editor-zoomBrush-member)
+ - [zoomLevel](#Editor-zoomLevel-member)
+- [Methods](#methods)
+ - [addOpenMenu](#Editor-addOpenMenu-member-1)
+ - [alignShapes](#Editor-alignShapes-member-1)
+ - [animateCamera](#Editor-animateCamera-member-1)
+ - [animateShapes](#Editor-animateShapes-member-1)
+ - [animateToShape](#Editor-animateToShape-member-1)
+ - [animateToUser](#Editor-animateToUser-member-1)
+ - [bail](#Editor-bail-member-1)
+ - [bailToMark](#Editor-bailToMark-member-1)
+ - [batch](#Editor-batch-member-1)
+ - [blur](#Editor-blur-member-1)
+ - [bringForward](#Editor-bringForward-member-1)
+ - [bringToFront](#Editor-bringToFront-member-1)
+ - [cancel](#Editor-cancel-member-1)
+ - [cancelDoubleClick](#Editor-cancelDoubleClick-member-1)
+ - [centerOnPoint](#Editor-centerOnPoint-member-1)
+ - [complete](#Editor-complete-member-1)
+ - [createAssets](#Editor-createAssets-member-1)
+ - [createPage](#Editor-createPage-member-1)
+ - [createShapes](#Editor-createShapes-member-1)
+ - [deleteAssets](#Editor-deleteAssets-member-1)
+ - [deleteOpenMenu](#Editor-deleteOpenMenu-member-1)
+ - [deletePage](#Editor-deletePage-member-1)
+ - [deleteShapes](#Editor-deleteShapes-member-1)
+ - [deselect](#Editor-deselect-member-1)
+ - [dispatch](#Editor-dispatch-member-1)
+ - [dispose](#Editor-dispose-member-1)
+ - [distributeShapes](#Editor-distributeShapes-member-1)
+ - [duplicatePage](#Editor-duplicatePage-member-1)
+ - [duplicateShapes](#Editor-duplicateShapes-member-1)
+ - [findAncestor](#Editor-findAncestor-member-1)
+ - [findCommonAncestor](#Editor-findCommonAncestor-member-1)
+ - [flipShapes](#Editor-flipShapes-member-1)
+ - [focus](#Editor-focus-member-1)
+ - [getAncestorPageId](#Editor-getAncestorPageId-member-1)
+ - [getAncestors](#Editor-getAncestors-member-1)
+ - [getAncestorsById](#Editor-getAncestorsById-member-1)
+ - [getArrowsBoundTo](#Editor-getArrowsBoundTo-member-1)
+ - [getAssetById](#Editor-getAssetById-member-1)
+ - [getAssetBySrc](#Editor-getAssetBySrc-member-1)
+ - [getBounds](#Editor-getBounds-member-1)
+ - [getBoundsById](#Editor-getBoundsById-member-1)
+ - [getClipPathById](#Editor-getClipPathById-member-1)
+ - [getContent](#Editor-getContent-member-1)
+ - [getDeltaInParentSpace](#Editor-getDeltaInParentSpace-member-1)
+ - [getDeltaInShapeSpace](#Editor-getDeltaInShapeSpace-member-1)
+ - [getDroppingShape](#Editor-getDroppingShape-member-1)
+ - [getHandles](#Editor-getHandles-member-1)
+ - [getHandlesById](#Editor-getHandlesById-member-1)
+ - [getHighestIndexForParent](#Editor-getHighestIndexForParent-member-1)
+ - [getMaskedPageBounds](#Editor-getMaskedPageBounds-member-1)
+ - [getMaskedPageBoundsById](#Editor-getMaskedPageBoundsById-member-1)
+ - [getOutermostSelectableShape](#Editor-getOutermostSelectableShape-member-1)
+ - [getOutline](#Editor-getOutline-member-1)
+ - [getOutlineById](#Editor-getOutlineById-member-1)
+ - [getOutlineSegments](#Editor-getOutlineSegments-member-1)
+ - [getOutlineSegmentsById](#Editor-getOutlineSegmentsById-member-1)
+ - [getPageBounds](#Editor-getPageBounds-member-1)
+ - [getPageBoundsById](#Editor-getPageBoundsById-member-1)
+ - [getPageById](#Editor-getPageById-member-1)
+ - [getPageCenter](#Editor-getPageCenter-member-1)
+ - [getPageCenterById](#Editor-getPageCenterById-member-1)
+ - [getPageCorners](#Editor-getPageCorners-member-1)
+ - [getPageInfoById](#Editor-getPageInfoById-member-1)
+ - [getPageMaskById](#Editor-getPageMaskById-member-1)
+ - [getPagePointById](#Editor-getPagePointById-member-1)
+ - [getPageRotation](#Editor-getPageRotation-member-1)
+ - [getPageRotationById](#Editor-getPageRotationById-member-1)
+ - [getPageStateByPageId](#Editor-getPageStateByPageId-member-1)
+ - [getPageTransform](#Editor-getPageTransform-member-1)
+ - [getPageTransformById](#Editor-getPageTransformById-member-1)
+ - [getParentIdForNewShapeAtPoint](#Editor-getParentIdForNewShapeAtPoint-member-1)
+ - [getParentShape](#Editor-getParentShape-member-1)
+ - [getParentsMappedToChildren](#Editor-getParentsMappedToChildren-member-1)
+ - [getParentTransform](#Editor-getParentTransform-member-1)
+ - [getPointInParentSpace](#Editor-getPointInParentSpace-member-1)
+ - [getPointInShapeSpace](#Editor-getPointInShapeSpace-member-1)
+ - [getShapeAndDescendantIds](#Editor-getShapeAndDescendantIds-member-1)
+ - [getShapeById](#Editor-getShapeById-member-1)
+ - [getShapeIdsInPage](#Editor-getShapeIdsInPage-member-1)
+ - [getShapesAtPoint](#Editor-getShapesAtPoint-member-1)
+ - [getShapeUtil](#Editor-getShapeUtil-member-1)
+ - [getShapeUtil](#Editor-getShapeUtil-member-2)
+ - [getSortedChildIds](#Editor-getSortedChildIds-member-1)
+ - [getStateDescendant](#Editor-getStateDescendant-member-1)
+ - [getSvg](#Editor-getSvg-member-1)
+ - [getTransform](#Editor-getTransform-member-1)
+ - [groupShapes](#Editor-groupShapes-member-1)
+ - [hasAncestor](#Editor-hasAncestor-member-1)
+ - [interrupt](#Editor-interrupt-member-1)
+ - [isIn](#Editor-isIn-member-1)
+ - [isInAny](#Editor-isInAny-member-1)
+ - [isPointInShape](#Editor-isPointInShape-member-1)
+ - [isSelected](#Editor-isSelected-member-1)
+ - [isShapeInPage](#Editor-isShapeInPage-member-1)
+ - [isShapeOfType](#Editor-isShapeOfType-member-1)
+ - [isShapeOrAncestorLocked](#Editor-isShapeOrAncestorLocked-member-1)
+ - [isWithinSelection](#Editor-isWithinSelection-member-1)
+ - [mark](#Editor-mark-member-1)
+ - [moveShapesToPage](#Editor-moveShapesToPage-member-1)
+ - [nudgeShapes](#Editor-nudgeShapes-member-1)
+ - [packShapes](#Editor-packShapes-member-1)
+ - [pageToScreen](#Editor-pageToScreen-member-1)
+ - [pan](#Editor-pan-member-1)
+ - [panZoomIntoView](#Editor-panZoomIntoView-member-1)
+ - [popFocusLayer](#Editor-popFocusLayer-member-1)
+ - [putContent](#Editor-putContent-member-1)
+ - [putExternalContent](#Editor-putExternalContent-member-1)
+ - [redo](#Editor-redo-member-1)
+ - [renamePage](#Editor-renamePage-member-1)
+ - [reorderShapes](#Editor-reorderShapes-member-1)
+ - [reparentShapesById](#Editor-reparentShapesById-member-1)
+ - [replaceStoreContentsWithRecordsForOtherDocument](#Editor-replaceStoreContentsWithRecordsForOtherDocument-member-1)
+ - [resetZoom](#Editor-resetZoom-member-1)
+ - [resizeShape](#Editor-resizeShape-member-1)
+ - [rotateShapesBy](#Editor-rotateShapesBy-member-1)
+ - [screenToPage](#Editor-screenToPage-member-1)
+ - [select](#Editor-select-member-1)
+ - [selectAll](#Editor-selectAll-member-1)
+ - [selectNone](#Editor-selectNone-member-1)
+ - [sendBackward](#Editor-sendBackward-member-1)
+ - [sendToBack](#Editor-sendToBack-member-1)
+ - [setAnimationSpeed](#Editor-setAnimationSpeed-member-1)
+ - [setBrush](#Editor-setBrush-member-1)
+ - [setCamera](#Editor-setCamera-member-1)
+ - [setCroppingId](#Editor-setCroppingId-member-1)
+ - [setCurrentPageId](#Editor-setCurrentPageId-member-1)
+ - [setCursor](#Editor-setCursor-member-1)
+ - [setDarkMode](#Editor-setDarkMode-member-1)
+ - [setDevicePixelRatio](#Editor-setDevicePixelRatio-member-1)
+ - [setEditingId](#Editor-setEditingId-member-1)
+ - [setErasingIds](#Editor-setErasingIds-member-1)
+ - [setFocusLayer](#Editor-setFocusLayer-member-1)
+ - [setFocusMode](#Editor-setFocusMode-member-1)
+ - [setGridMode](#Editor-setGridMode-member-1)
+ - [setHintingIds](#Editor-setHintingIds-member-1)
+ - [setHoveredId](#Editor-setHoveredId-member-1)
+ - [setLocale](#Editor-setLocale-member-1)
+ - [setOpacity](#Editor-setOpacity-member-1)
+ - [setPageState](#Editor-setPageState-member-1)
+ - [setPenMode](#Editor-setPenMode-member-1)
+ - [setReadOnly](#Editor-setReadOnly-member-1)
+ - [setScribble](#Editor-setScribble-member-1)
+ - [setSelectedIds](#Editor-setSelectedIds-member-1)
+ - [setSelectedTool](#Editor-setSelectedTool-member-1)
+ - [setSnapMode](#Editor-setSnapMode-member-1)
+ - [setStyle](#Editor-setStyle-member-1)
+ - [setToolLocked](#Editor-setToolLocked-member-1)
+ - [setZoomBrush](#Editor-setZoomBrush-member-1)
+ - [slideCamera](#Editor-slideCamera-member-1)
+ - [stackShapes](#Editor-stackShapes-member-1)
+ - [startFollowingUser](#Editor-startFollowingUser-member-1)
+ - [stopCameraAnimation](#Editor-stopCameraAnimation-member-1)
+ - [stopFollowingUser](#Editor-stopFollowingUser-member-1)
+ - [stretchShapes](#Editor-stretchShapes-member-1)
+ - [toggleLock](#Editor-toggleLock-member-1)
+ - [undo](#Editor-undo-member-1)
+ - [ungroupShapes](#Editor-ungroupShapes-member-1)
+ - [updateAssets](#Editor-updateAssets-member-1)
+ - [updateDocumentSettings](#Editor-updateDocumentSettings-member-1)
+ - [updateInstanceState](#Editor-updateInstanceState-member-1)
+ - [updatePage](#Editor-updatePage-member-1)
+ - [updateShapes](#Editor-updateShapes-member-1)
+ - [updateViewportScreenBounds](#Editor-updateViewportScreenBounds-member-1)
+ - [visitDescendants](#Editor-visitDescendants-member-1)
+ - [zoomIn](#Editor-zoomIn-member-1)
+ - [zoomOut](#Editor-zoomOut-member-1)
+ - [zoomToBounds](#Editor-zoomToBounds-member-1)
+ - [zoomToContent](#Editor-zoomToContent-member-1)
+ - [zoomToFit](#Editor-zoomToFit-member-1)
+ - [zoomToSelection](#Editor-zoomToSelection-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class Editor extends EventEmitter {}
+```
+
+##### References
+
+[EventEmitter](/gen/eventemitter3-EventEmitter-EventEmitter), [TLEventMap](/gen/editor/TLEventMap-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `Editor` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ store, user, shapes, tools, getContainer }`
+
+
+
+
+```ts
+TLEditorOptions
+```
+
+
+
+
+
+
+
+##### References
+
+[TLEditorOptions](/gen/editor/TLEditorOptions-interface)
+
+---
+
+## Properties
+
+### `allShapesCommonBounds` \{#Editor-allShapesCommonBounds-member}
+
+Public Readonly Property
+
+The common bounds of all of the shapes on the page.
+
+
+##### Signature
+
+
+```ts
+get allShapesCommonBounds(): Box2d | null
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `animationSpeed` \{#Editor-animationSpeed-member}
+
+Public Readonly Property
+
+The user's chosen animation speed.
+
+
+##### Signature
+
+
+```ts
+get animationSpeed(): number
+```
+
+---
+
+### `assets` \{#Editor-assets-member}
+
+Public Readonly Property
+
+Get all assets in the editor.
+
+
+##### Signature
+
+
+```ts
+get assets(): (
+ | import('@tldraw/tlschema').TLBookmarkAsset
+ | TLImageAsset
+ | TLVideoAsset
+)[]
+```
+
+##### References
+
+[TLBookmarkAsset](/gen/tlschema/TLBookmarkAsset-type), [TLImageAsset](/gen/tlschema/TLImageAsset-type), [TLVideoAsset](/gen/tlschema/TLVideoAsset-type)
+
+---
+
+### `brush` \{#Editor-brush-member}
+
+Public Readonly Property
+
+The instance's brush state.
+
+
+##### Signature
+
+
+```ts
+get brush(): Box2dModel | null
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `camera` \{#Editor-camera-member}
+
+Public Readonly Property
+
+The current camera.
+
+
+##### Signature
+
+
+```ts
+get camera(): import('@tldraw/tlschema').TLCamera
+```
+
+##### References
+
+[TLCamera](/gen/tlschema/TLCamera-interface)
+
+---
+
+### `cameraState` \{#Editor-cameraState-member}
+
+Public Readonly Property
+
+Whether the camera is moving or idle.
+
+
+##### Signature
+
+
+```ts
+get cameraState(): 'idle' | 'moving'
+```
+
+---
+
+### `canMoveCamera` \{#Editor-canMoveCamera-member}
+
+Public Property
+
+Whether the editor's camera can move.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.canMoveCamera = false
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`canMove`
+
+
+
+
+Whether the camera can move.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+get canMoveCamera(): boolean
+
+set canMoveCamera(canMove: boolean)
+```
+
+---
+
+### `canRedo` \{#Editor-canRedo-member}
+
+Public Readonly Property
+
+Whether the app can redo.
+
+
+##### Signature
+
+
+```ts
+get canRedo(): boolean
+```
+
+---
+
+### `canUndo` \{#Editor-canUndo-member}
+
+Public Readonly Property
+
+Whether the app can undo.
+
+
+##### Signature
+
+
+```ts
+get canUndo(): boolean
+```
+
+---
+
+### `croppingId` \{#Editor-croppingId-member}
+
+Public Readonly Property
+
+The current cropping shape's id.
+
+
+##### Signature
+
+
+```ts
+get croppingId(): null | TLShapeId
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `currentPage` \{#Editor-currentPage-member}
+
+Public Readonly Property
+
+The current page.
+
+
+##### Signature
+
+
+```ts
+get currentPage(): TLPage
+```
+
+##### References
+
+[TLPage](/gen/tlschema/TLPage-interface)
+
+---
+
+### `currentPageId` \{#Editor-currentPageId-member}
+
+Public Readonly Property
+
+The current page id.
+
+
+##### Signature
+
+
+```ts
+get currentPageId(): TLPageId
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `currentPageShapeIds` \{#Editor-currentPageShapeIds-member}
+
+Public Readonly Property
+
+An array of all of the shapes on the current page.
+
+
+##### Signature
+
+
+```ts
+get currentPageShapeIds(): Set
+```
+
+##### References
+
+[Set](/gen/Set-interface), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `currentToolId` \{#Editor-currentToolId-member}
+
+Public Readonly Property
+
+The id of the current selected tool.
+
+
+##### Signature
+
+
+```ts
+get currentToolId(): string
+```
+
+---
+
+### `cursor` \{#Editor-cursor-member}
+
+Public Readonly Property
+
+The instance's cursor state.
+
+
+##### Signature
+
+
+```ts
+get cursor(): TLCursor
+```
+
+##### References
+
+[TLCursor](/gen/tlschema/TLCursor-interface)
+
+---
+
+### `devicePixelRatio` \{#Editor-devicePixelRatio-member}
+
+Public Readonly Property
+
+The window's device pixel ratio.
+
+
+##### Signature
+
+
+```ts
+get devicePixelRatio(): number
+```
+
+---
+
+### `disposables` \{#Editor-disposables-member}
+
+Public Readonly Property
+
+A set of functions to call when the app is disposed.
+
+
+##### Signature
+
+
+```ts
+readonly disposables: Set<() => void>
+```
+
+##### References
+
+[Set](/gen/Set-interface)
+
+---
+
+### `documentSettings` \{#Editor-documentSettings-member}
+
+Public Readonly Property
+
+The global document settings that apply to all users.
+
+
+##### Signature
+
+
+```ts
+get documentSettings(): TLDocument
+```
+
+##### References
+
+[TLDocument](/gen/tlschema/TLDocument-interface)
+
+---
+
+### `editingId` \{#Editor-editingId-member}
+
+Public Readonly Property
+
+The current editing shape's id.
+
+
+##### Signature
+
+
+```ts
+get editingId(): null | TLShapeId
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `editingShape` \{#Editor-editingShape-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get editingShape(): null | TLUnknownShape
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type)
+
+---
+
+### `erasingIds` \{#Editor-erasingIds-member}
+
+Public Readonly Property
+
+The editor's current erasing ids.
+
+
+##### Signature
+
+
+```ts
+get erasingIds(): TLShapeId[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `erasingIdsSet` \{#Editor-erasingIdsSet-member}
+
+Public Readonly Property
+
+A derived set containing the current erasing ids.
+
+
+##### Signature
+
+
+```ts
+get erasingIdsSet(): Set
+```
+
+##### References
+
+[Set](/gen/Set-interface), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `externalContentManager` \{#Editor-externalContentManager-member}
+
+Public Property
+
+
+
+
+##### Signature
+
+
+```ts
+externalContentManager: ExternalContentManager
+```
+
+##### References
+
+[ExternalContentManager](/gen/editor/PlopManager-class)
+
+---
+
+### `focusLayerId` \{#Editor-focusLayerId-member}
+
+Public Readonly Property
+
+The shape id of the current focus layer.
+
+
+##### Signature
+
+
+```ts
+get focusLayerId(): TLPageId | TLShapeId
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `focusLayerShape` \{#Editor-focusLayerShape-member}
+
+Public Readonly Property
+
+The shape of the current focus layer.
+
+
+##### Signature
+
+
+```ts
+get focusLayerShape(): TLShape | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getContainer` \{#Editor-getContainer-member}
+
+Public Property
+
+The current HTML element containing the editor.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const container = editor.getContainer()
+```
+
+
+##### Signature
+
+
+```ts
+getContainer: () => HTMLElement
+```
+
+##### References
+
+[HTMLElement](/gen/HTMLElement-interface)
+
+---
+
+### `gridSize` \{#Editor-gridSize-member}
+
+Public Readonly Property
+
+The document's grid size.
+
+
+##### Signature
+
+
+```ts
+get gridSize(): number
+```
+
+---
+
+### `hintingIds` \{#Editor-hintingIds-member}
+
+Public Readonly Property
+
+The editor's current hinting ids.
+
+
+##### Signature
+
+
+```ts
+get hintingIds(): TLShapeId[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `history` \{#Editor-history-member}
+
+Public Readonly Property
+
+A manager for the app's history.
+
+
+##### Signature
+
+
+```ts
+readonly history: HistoryManager
+```
+
+##### References
+
+[HistoryManager](/gen/editor/~HistoryManager-class)
+
+---
+
+### `hoveredId` \{#Editor-hoveredId-member}
+
+Public Readonly Property
+
+The current hovered shape id.
+
+
+
+##### Signature
+
+
+```ts
+get hoveredId(): null | TLShapeId
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `hoveredShape` \{#Editor-hoveredShape-member}
+
+Public Readonly Property
+
+The current hovered shape.
+
+
+
+##### Signature
+
+
+```ts
+get hoveredShape(): null | TLUnknownShape
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type)
+
+---
+
+### `inputs` \{#Editor-inputs-member}
+
+Public Property
+
+The app's current input state.
+
+
+##### Signature
+
+
+```ts
+inputs: {
+ originPagePoint: Vec2d
+ originScreenPoint: Vec2d
+ previousPagePoint: Vec2d
+ previousScreenPoint: Vec2d
+ currentPagePoint: Vec2d
+ currentScreenPoint: Vec2d
+ keys: Set
+ buttons: Set
+ isPen: boolean
+ shiftKey: boolean
+ ctrlKey: boolean
+ altKey: boolean
+ isDragging: boolean
+ isPointing: boolean
+ isPinching: boolean
+ isEditing: boolean
+ isPanning: boolean
+ pointerVelocity: Vec2d
+}
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class), [Set](/gen/Set-interface)
+
+---
+
+### `instanceState` \{#Editor-instanceState-member}
+
+Public Readonly Property
+
+The current instance's state.
+
+
+##### Signature
+
+
+```ts
+get instanceState(): TLInstance
+```
+
+##### References
+
+[TLInstance](/gen/tlschema/TLInstance-interface)
+
+---
+
+### `isChangingStyle` \{#Editor-isChangingStyle-member}
+
+Public Property
+
+Whether the user is currently changing the style of a shape. This may cause the UI to change.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.isChangingStyle = true
+```
+
+
+##### Signature
+
+
+```ts
+get isChangingStyle(): boolean
+
+set isChangingStyle(v: boolean)
+```
+
+---
+
+### `isChromeForIos` \{#Editor-isChromeForIos-member}
+
+Public Readonly Property
+
+Whether the editor is running on iOS.
+
+
+##### Signature
+
+
+```ts
+readonly isChromeForIos: boolean
+```
+
+---
+
+### `isCoarsePointer` \{#Editor-isCoarsePointer-member}
+
+Public Property
+
+Whether the user is using a "coarse" pointer, such as on a touch screen. This is automatically set by the canvas.
+
+
+##### Signature
+
+
+```ts
+get isCoarsePointer(): boolean
+
+set isCoarsePointer(v: boolean)
+```
+
+---
+
+### `isDarkMode` \{#Editor-isDarkMode-member}
+
+Public Readonly Property
+
+Whether the user has dark mode enabled.
+
+
+##### Signature
+
+
+```ts
+get isDarkMode(): boolean
+```
+
+---
+
+### `isFocused` \{#Editor-isFocused-member}
+
+Public Readonly Property
+
+Whether or not the editor is focused.
+
+
+##### Signature
+
+
+```ts
+get isFocused(): boolean
+```
+
+---
+
+### `isFocusMode` \{#Editor-isFocusMode-member}
+
+Public Readonly Property
+
+Whether the instance is in focus mode or not.
+
+
+##### Signature
+
+
+```ts
+get isFocusMode(): boolean
+```
+
+---
+
+### `isGridMode` \{#Editor-isGridMode-member}
+
+Public Readonly Property
+
+Whether the instance's grid is enabled.
+
+
+##### Signature
+
+
+```ts
+get isGridMode(): boolean
+```
+
+---
+
+### `isIos` \{#Editor-isIos-member}
+
+Public Readonly Property
+
+Whether the editor is running on iOS.
+
+
+##### Signature
+
+
+```ts
+readonly isIos: boolean
+```
+
+---
+
+### `isMenuOpen` \{#Editor-isMenuOpen-member}
+
+Public Readonly Property
+
+Get whether any menus are open.
+
+
+##### Signature
+
+
+```ts
+get isMenuOpen(): boolean
+```
+
+---
+
+### `isPenMode` \{#Editor-isPenMode-member}
+
+Public Readonly Property
+
+Whether the editor is in pen mode or not.
+
+
+##### Signature
+
+
+```ts
+get isPenMode(): boolean
+```
+
+---
+
+### `isReadOnly` \{#Editor-isReadOnly-member}
+
+Public Readonly Property
+
+Whether the editor is in read-only mode or not.
+
+
+##### Signature
+
+
+```ts
+get isReadOnly(): boolean
+```
+
+---
+
+### `isSafari` \{#Editor-isSafari-member}
+
+Public Readonly Property
+
+Whether the editor is running in Safari.
+
+
+##### Signature
+
+
+```ts
+readonly isSafari: boolean
+```
+
+---
+
+### `isSnapMode` \{#Editor-isSnapMode-member}
+
+Public Readonly Property
+
+Whether the user has "always snap" mode enabled.
+
+
+##### Signature
+
+
+```ts
+get isSnapMode(): boolean
+```
+
+---
+
+### `isToolLocked` \{#Editor-isToolLocked-member}
+
+Public Readonly Property
+
+Whether the instance has "tool lock" mode enabled.
+
+
+##### Signature
+
+
+```ts
+get isToolLocked(): boolean
+```
+
+---
+
+### `locale` \{#Editor-locale-member}
+
+Public Readonly Property
+
+Get the user's locale.
+
+
+##### Signature
+
+
+```ts
+get locale(): string
+```
+
+---
+
+### `onlySelectedShape` \{#Editor-onlySelectedShape-member}
+
+Public Readonly Property
+
+The app's only selected shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.onlySelectedShape
+```
+
+
+
+##### Signature
+
+
+```ts
+get onlySelectedShape(): null | TLShape
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `openMenus` \{#Editor-openMenus-member}
+
+Public Readonly Property
+
+A set of strings representing any open menus. When menus are open, certain interactions will behave differently; for example, when a draw tool is selected and a menu is open, a pointer-down will not create a dot (because the user is probably trying to close the menu) however a pointer-down event followed by a drag will begin drawing a line (because the user is BOTH trying to close the menu AND start drawing a line).
+
+
+##### Signature
+
+
+```ts
+get openMenus(): string[]
+```
+
+---
+
+### `pages` \{#Editor-pages-member}
+
+Public Readonly Property
+
+Info about the project's current pages.
+
+
+##### Signature
+
+
+```ts
+get pages(): TLPage[]
+```
+
+##### References
+
+[TLPage](/gen/tlschema/TLPage-interface)
+
+---
+
+### `pageState` \{#Editor-pageState-member}
+
+Public Readonly Property
+
+The current page state.
+
+
+##### Signature
+
+
+```ts
+get pageState(): TLInstancePageState
+```
+
+##### References
+
+[TLInstancePageState](/gen/tlschema/TLInstancePageState-interface)
+
+---
+
+### `renderingBounds` \{#Editor-renderingBounds-member}
+
+Public Readonly Property
+
+The current rendering bounds in page space, used for checking which shapes are "on screen".
+
+
+##### Signature
+
+
+```ts
+get renderingBounds(): Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `renderingBoundsExpanded` \{#Editor-renderingBoundsExpanded-member}
+
+Public Readonly Property
+
+The current rendering bounds in page space, expanded slightly. Used for determining which shapes to render and which to "cull".
+
+
+##### Signature
+
+
+```ts
+get renderingBoundsExpanded(): Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `renderingShapes` \{#Editor-renderingShapes-member}
+
+Public Readonly Property
+
+Get the shapes that should be displayed in the current viewport.
+
+
+##### Signature
+
+
+```ts
+get renderingShapes(): {
+ id: TLShapeId
+ index: number
+ backgroundIndex: number
+ opacity: number
+ isCulled: boolean
+ isInViewport: boolean
+ maskedPageBounds: Box2d | undefined
+}[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `root` \{#Editor-root-member}
+
+Public Readonly Property
+
+The root state of the statechart.
+
+
+##### Signature
+
+
+```ts
+readonly root: RootState
+```
+
+##### References
+
+[RootState](/gen/editor/~RootState-class)
+
+---
+
+### `scribble` \{#Editor-scribble-member}
+
+Public Readonly Property
+
+The instance's scribble state.
+
+
+##### Signature
+
+
+```ts
+get scribble(): null | TLScribble
+```
+
+##### References
+
+[TLScribble](/gen/tlschema/TLScribble-type)
+
+---
+
+### `selectedIds` \{#Editor-selectedIds-member}
+
+Public Readonly Property
+
+The current selected ids.
+
+
+##### Signature
+
+
+```ts
+get selectedIds(): TLShapeId[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `selectedIdsSet` \{#Editor-selectedIdsSet-member}
+
+Public Readonly Property
+
+The current selected ids as a set
+
+
+##### Signature
+
+
+```ts
+get selectedIdsSet(): ReadonlySet
+```
+
+##### References
+
+[ReadonlySet](/gen/ReadonlySet-interface), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `selectedPageBounds` \{#Editor-selectedPageBounds-member}
+
+Public Readonly Property
+
+The current page bounds of all the selected shapes (Not the same thing as the page bounds of the selection bounding box when the selection has been rotated)
+
+
+
+##### Signature
+
+
+```ts
+get selectedPageBounds(): Box2d | null
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `selectedShapes` \{#Editor-selectedShapes-member}
+
+Public Readonly Property
+
+An array containing all of the currently selected shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.selectedShapes
+```
+
+
+
+##### Signature
+
+
+```ts
+get selectedShapes(): TLShape[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `selectionBounds` \{#Editor-selectionBounds-member}
+
+Public Readonly Property
+
+The bounds of the selection bounding box.
+
+
+
+##### Signature
+
+
+```ts
+get selectionBounds(): Box2d | undefined
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `selectionPageCenter` \{#Editor-selectionPageCenter-member}
+
+Public Readonly Property
+
+The center of the selection bounding box.
+
+
+
+##### Signature
+
+
+```ts
+get selectionPageCenter(): null | Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `selectionRotation` \{#Editor-selectionRotation-member}
+
+Public Readonly Property
+
+The rotation of the selection bounding box.
+
+
+
+##### Signature
+
+
+```ts
+get selectionRotation(): number
+```
+
+---
+
+### `shapesArray` \{#Editor-shapesArray-member}
+
+Public Readonly Property
+
+An array containing all of the shapes in the current page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.shapesArray
+```
+
+
+
+##### Signature
+
+
+```ts
+get shapesArray(): TLShape[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `shapeUtils` \{#Editor-shapeUtils-member}
+
+Public Property
+
+A map of shape utility classes (TLShapeUtils) by shape type.
+
+
+##### Signature
+
+
+```ts
+shapeUtils: {
+ readonly [K in string]?: ShapeUtil
+}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLUnknownShape](/gen/tlschema/TLUnknownShape-type)
+
+---
+
+### `sharedOpacity` \{#Editor-sharedOpacity-member}
+
+Public Readonly Property
+
+Get the currently selected shared opacity. If any shapes are selected, this returns the shared opacity of the selected shapes. Otherwise, this returns the chosen opacity for the next shape.
+
+
+##### Signature
+
+
+```ts
+get sharedOpacity(): SharedStyle
+```
+
+##### References
+
+[SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+### `sharedStyles` \{#Editor-sharedStyles-member}
+
+Public Readonly Property
+
+A derived object containing either all current styles among the user's selected shapes, or else the user's most recent style choices that correspond to the current active state (i.e. the selected tool).
+
+
+##### Signature
+
+
+```ts
+get sharedStyles(): ReadonlySharedStyleMap
+```
+
+##### References
+
+[ReadonlySharedStyleMap](/gen/editor/ReadonlySharedStyleMap-class)
+
+---
+
+### `snaps` \{#Editor-snaps-member}
+
+Public Readonly Property
+
+A manager for the app's snapping feature.
+
+
+##### Signature
+
+
+```ts
+readonly snaps: SnapManager
+```
+
+##### References
+
+[SnapManager](/gen/editor/~SnapManager-class)
+
+---
+
+### `sortedShapesArray` \{#Editor-sortedShapesArray-member}
+
+Public Readonly Property
+
+An array containing all of the shapes in the current page, sorted in z-index order (accounting for nested shapes): e.g. A, B, BA, BB, C.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.sortedShapesArray
+```
+
+
+
+##### Signature
+
+
+```ts
+get sortedShapesArray(): TLShape[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `store` \{#Editor-store-member}
+
+Public Readonly Property
+
+The editor's store
+
+
+##### Signature
+
+
+```ts
+readonly store: TLStore
+```
+
+##### References
+
+[TLStore](/gen/tlschema/TLStore-type)
+
+---
+
+### `textMeasure` \{#Editor-textMeasure-member}
+
+Public Readonly Property
+
+A helper for measuring text.
+
+
+##### Signature
+
+
+```ts
+readonly textMeasure: TextManager
+```
+
+##### References
+
+[TextManager](/gen/editor/~TextManager-class)
+
+---
+
+### `user` \{#Editor-user-member}
+
+Public Readonly Property
+
+A manager for the user and their preferences.
+
+
+##### Signature
+
+
+```ts
+readonly user: UserPreferencesManager
+```
+
+##### References
+
+[UserPreferencesManager](/gen/editor/~UserPreferencesManager-class)
+
+---
+
+### `viewportPageBounds` \{#Editor-viewportPageBounds-member}
+
+Public Readonly Property
+
+The current viewport in page space.
+
+
+##### Signature
+
+
+```ts
+get viewportPageBounds(): Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `viewportPageCenter` \{#Editor-viewportPageCenter-member}
+
+Public Readonly Property
+
+The center of the viewport in page space.
+
+
+##### Signature
+
+
+```ts
+get viewportPageCenter(): Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `viewportScreenBounds` \{#Editor-viewportScreenBounds-member}
+
+Public Readonly Property
+
+The bounds of the editor's viewport in screen space.
+
+
+##### Signature
+
+
+```ts
+get viewportScreenBounds(): Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `viewportScreenCenter` \{#Editor-viewportScreenCenter-member}
+
+Public Readonly Property
+
+The center of the editor's viewport in screen space.
+
+
+##### Signature
+
+
+```ts
+get viewportScreenCenter(): Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `zoomBrush` \{#Editor-zoomBrush-member}
+
+Public Readonly Property
+
+The instance's zoom brush state.
+
+
+##### Signature
+
+
+```ts
+get zoomBrush(): Box2dModel | null
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `zoomLevel` \{#Editor-zoomLevel-member}
+
+Public Readonly Property
+
+The current camera zoom level.
+
+
+##### Signature
+
+
+```ts
+get zoomLevel(): number
+```
+
+---
+
+## Methods
+
+### `addOpenMenu()` \{#Editor-addOpenMenu-member-1}
+
+Public Method
+
+Add an open menu.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.addOpenMenu('menu-id')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `alignShapes()` \{#Editor-alignShapes-member-1}
+
+Public Method
+
+Align shape positions.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.alignShapes('left')
+editor.alignShapes('left', ['box1', 'box2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+ | 'bottom'
+ | 'center-horizontal'
+ | 'center-vertical'
+ | 'left'
+ | 'right'
+ | 'top'
+```
+
+The align operation to apply.
+
+
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to align. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `animateCamera()` \{#Editor-animateCamera-member-1}
+
+Public Method
+
+Animate the camera.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.animateCamera(0, 0)
+editor.animateCamera(0, 0, 1)
+editor.animateCamera(0, 0, 1, { duration: 1000, easing: (t) => t * t })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The camera's x position.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The camera's y position.
+
+
+
+
+
+
+
+
+
+`z`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+The camera's z position. Defaults to the current zoom.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+Options for the animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `animateShapes()` \{#Editor-animateShapes-member-1}
+
+Public Method
+
+Animate shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.animateShapes([{ id: 'box1', type: 'box', x: 100, y: 100 }])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partials`
+
+
+
+
+```ts
+(null | TLShapePartial | undefined)[]
+```
+
+The shape partials to update.
+
+
+
+
+
+
+
+
+
+`options`
+
+ (optional)
+
+
+
+
+```ts
+{
+ duration?: number
+ ease?: (t: number) => number
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `animateToShape()` \{#Editor-animateToShape-member-1}
+
+Public Method
+
+Animate the camera to a shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shapeId`
+
+
+
+
+```ts
+TLShapeId
+```
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `animateToUser()` \{#Editor-animateToUser-member-1}
+
+Public Method
+
+Animate the camera to a user's cursor position. This also briefly show the user's cursor if it's not currently visible.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`userId`
+
+
+
+
+```ts
+string
+```
+
+The id of the user to aniamte to.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `bail()` \{#Editor-bail-member-1}
+
+Public Method
+
+Clear all marks in the undo stack back to the next mark.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.bail()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `bailToMark()` \{#Editor-bailToMark-member-1}
+
+Public Method
+
+Clear all marks in the undo stack back to the mark with the provided mark id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.bailToMark('creating')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `batch()` \{#Editor-batch-member-1}
+
+Public Method
+
+Run a function in a batch, which will be undone/redone as a single action.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.batch(() => {
+ editor.selectAll()
+ editor.deleteShapes()
+ editor.createShapes(myShapes)
+ editor.selectNone()
+})
+
+editor.undo() // will undo all of the above
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`fn`
+
+
+
+
+```ts
+() => void
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `blur()` \{#Editor-blur-member-1}
+
+Public Method
+
+Blur the app, cancelling any interaction state.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.blur()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `bringForward()` \{#Editor-bringForward-member-1}
+
+Public Method
+
+Bring shapes forward in the page's object list.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.bringForward()
+editor.bringForward(['id1', 'id2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move. Defaults to the ids of the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `bringToFront()` \{#Editor-bringToFront-member-1}
+
+Public Method
+
+Bring shapes to the front of the page's object list.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.bringToFront()
+editor.bringToFront(['id1', 'id2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move. Defaults to the ids of the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `cancel()` \{#Editor-cancel-member-1}
+
+Public Method
+
+Dispatch a cancel event.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.cancel()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `cancelDoubleClick()` \{#Editor-cancelDoubleClick-member-1}
+
+Public Method
+
+Prevent a double click event from firing the next time the user clicks
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `centerOnPoint()` \{#Editor-centerOnPoint-member-1}
+
+Public Method
+
+Center the camera on a point (in page space).
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.centerOnPoint(100, 100)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The x position of the point.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The y position of the point.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `complete()` \{#Editor-complete-member-1}
+
+Public Method
+
+Dispatch a complete event.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.complete()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `createAssets()` \{#Editor-createAssets-member-1}
+
+Public Method
+
+Create one or more assets.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.createAssets([...myAssets])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`assets`
+
+
+
+
+```ts
+TLAsset[]
+```
+
+The assets to create.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAsset](/gen/tlschema/TLAsset-type)
+
+---
+
+### `createPage()` \{#Editor-createPage-member-1}
+
+Public Method
+
+Create a page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.createPage('New Page')
+editor.createPage('New Page', 'page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`title`
+
+
+
+
+```ts
+string
+```
+
+The new page's title.
+
+
+
+
+
+
+
+
+
+`id`
+
+ (optional)
+
+
+
+
+```ts
+TLPageId
+```
+
+The new page's id.
+
+
+
+
+
+
+
+
+
+`belowPageIndex`
+
+ (optional)
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `createShapes()` \{#Editor-createShapes-member-1}
+
+Public Method
+
+Create shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.createShapes([{ id: 'box1', type: 'text', props: { text: 'ok' } }])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partials`
+
+
+
+
+```ts
+TLShapePartial[]
+```
+
+The shape partials to create.
+
+
+
+
+
+
+
+
+
+`select`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether to select the created shapes. Defaults to false.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type), [TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `deleteAssets()` \{#Editor-deleteAssets-member-1}
+
+Public Method
+
+Delete one or more assets.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.deleteAssets(['asset1', 'asset2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLAssetId[]
+```
+
+The assets to delete.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAssetId](/gen/tlschema/TLAssetId-type)
+
+---
+
+### `deleteOpenMenu()` \{#Editor-deleteOpenMenu-member-1}
+
+Public Method
+
+Delete an open menu.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.deleteOpenMenu('menu-id')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `deletePage()` \{#Editor-deletePage-member-1}
+
+Public Method
+
+Delete a page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.deletePage('page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page to delete.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `deleteShapes()` \{#Editor-deleteShapes-member-1}
+
+Public Method
+
+Delete shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.deleteShapes()
+editor.deleteShapes(['box1', 'box2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to delete. Defaults to the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `deselect()` \{#Editor-deselect-member-1}
+
+Public Method
+
+Remove a shape from the existing set of selected shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.deselect(shape.id)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `dispatch()` \{#Editor-dispatch-member-1}
+
+Public Method
+
+Dispatch an event to the editor.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.dispatch(myPointerEvent)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+TLEventInfo
+```
+
+The event info.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLEventInfo](/gen/editor/TLEventInfo-type)
+
+---
+
+### `dispose()` \{#Editor-dispose-member-1}
+
+Public Method
+
+Dispose the editor.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `distributeShapes()` \{#Editor-distributeShapes-member-1}
+
+Public Method
+
+Distribute shape positions.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.distributeShapes('left')
+editor.distributeShapes('left', ['box1', 'box2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+'horizontal' | 'vertical'
+```
+
+Whether to distribute shapes horizontally or vertically.
+
+
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to distribute. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `duplicatePage()` \{#Editor-duplicatePage-member-1}
+
+Public Method
+
+Duplicate a page.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+ (optional)
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page to duplicate. Defaults to the current page.
+
+
+
+
+
+
+
+
+
+`createId`
+
+ (optional)
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the new page. Defaults to a new id.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `duplicateShapes()` \{#Editor-duplicateShapes-member-1}
+
+Public Method
+
+Duplicate shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.duplicateShapes()
+editor.duplicateShapes(['id1', 'id2'])
+editor.duplicateShapes(['id1', 'id2'], { x: 8, y: 8 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to duplicate. Defaults to the ids of the selected shapes.
+
+
+
+
+
+
+
+
+
+`offset`
+
+ (optional)
+
+
+
+
+```ts
+VecLike
+```
+
+The offset (in pixels) to apply to the duplicated shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `findAncestor()` \{#Editor-findAncestor-member-1}
+
+Public Method
+
+Find the first ancestor matching the given predicate
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const ancestor = editor.findAncestor(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to check the ancestors for.
+
+
+
+
+
+
+
+
+
+`predicate`
+
+
+
+
+```ts
+(parent: TLShape) => boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `findCommonAncestor()` \{#Editor-findCommonAncestor-member-1}
+
+Public Method
+
+Get the common ancestor of two or more shapes that matches a predicate.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shapes`
+
+
+
+
+```ts
+TLShape[]
+```
+
+The shapes to check.
+
+
+
+
+
+
+
+
+
+`predicate`
+
+ (optional)
+
+
+
+
+```ts
+(shape: TLShape) => boolean
+```
+
+The predicate to match.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShapeId | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `flipShapes()` \{#Editor-flipShapes-member-1}
+
+Public Method
+
+Flip shape positions.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.flipShapes('horizontal')
+editor.flipShapes('horizontal', ['box1', 'box2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+'horizontal' | 'vertical'
+```
+
+Whether to flip horizontally or vertically.
+
+
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to flip. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `focus()` \{#Editor-focus-member-1}
+
+Public Method
+
+Focus the editor.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.focus()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `getAncestorPageId()` \{#Editor-getAncestorPageId-member-1}
+
+Public Method
+
+Get the id of the containing page for a given shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+ (optional)
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the page id for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLPageId | undefined
+```
+
+ The id of the page that contains the shape, or undefined if the shape is undefined.
+
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `getAncestors()` \{#Editor-getAncestors-member-1}
+
+Public Method
+
+Get the ancestors of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const ancestors = editor.getAncestors(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the ancestors for.
+
+
+
+
+
+
+
+
+
+`acc`
+
+ (optional)
+
+
+
+
+```ts
+TLShape[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getAncestorsById()` \{#Editor-getAncestorsById-member-1}
+
+Public Method
+
+Get the ancestors of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const ancestors = editor.getAncestorsById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to get the ancestors for.
+
+
+
+
+
+
+
+
+
+`acc`
+
+ (optional)
+
+
+
+
+```ts
+TLShape[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getArrowsBoundTo()` \{#Editor-getArrowsBoundTo-member-1}
+
+Public Method
+
+Get all arrows bound to a shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shapeId`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ arrowId: TLShapeId
+ handleId: 'end' | 'start'
+}[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getAssetById()` \{#Editor-getAssetById-member-1}
+
+Public Method
+
+Get an asset by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getAssetById('asset1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLAssetId
+```
+
+The id of the asset.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLAsset | undefined
+```
+
+##### References
+
+[TLAssetId](/gen/tlschema/TLAssetId-type), [TLAsset](/gen/tlschema/TLAsset-type)
+
+---
+
+### `getAssetBySrc()` \{#Editor-getAssetBySrc-member-1}
+
+Public Method
+
+Get an asset by its src property.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getAssetBySource('https://example.com/image.png')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`src`
+
+
+
+
+```ts
+string
+```
+
+The source value of the asset.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+ | import('@tldraw/tlschema').TLBookmarkAsset
+ | TLImageAsset
+ | TLVideoAsset
+ | undefined
+```
+
+##### References
+
+[TLBookmarkAsset](/gen/tlschema/TLBookmarkAsset-type), [TLImageAsset](/gen/tlschema/TLImageAsset-type), [TLVideoAsset](/gen/tlschema/TLVideoAsset-type)
+
+---
+
+### `getBounds()` \{#Editor-getBounds-member-1}
+
+Public Method
+
+Get the local bounds of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getBounds(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+T
+```
+
+The shape to get the bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getBoundsById()` \{#Editor-getBoundsById-member-1}
+
+Public Method
+
+Get the local bounds of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getBoundsById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+T['id']
+```
+
+The id of the shape to get the bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getClipPathById()` \{#Editor-getClipPathById-member-1}
+
+Public Method
+
+Get the clip path for a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const clipPath = editor.getClipPathById(shape.id)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The shape id.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string | undefined
+```
+
+ The clip path or undefined.
+
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getContent()` \{#Editor-getContent-member-1}
+
+Public Method
+
+Get content that can be exported for the given shape ids.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to get content for. Defaults to the selected shape ids.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLContent | undefined
+```
+
+ The exported content.
+
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLContent](/gen/editor/TLContent-interface)
+
+---
+
+### `getDeltaInParentSpace()` \{#Editor-getDeltaInParentSpace-member-1}
+
+Public Method
+
+Convert a delta in page space to a delta in the parent space of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getDeltaInParentSpace(myShape, { x: 100, y: 100 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the delta in the parent space of.
+
+
+
+
+
+
+
+
+
+`delta`
+
+
+
+
+```ts
+VecLike
+```
+
+The page delta to convert.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDeltaInShapeSpace()` \{#Editor-getDeltaInShapeSpace-member-1}
+
+Public Method
+
+Convert a delta in page space to a delta in the local space of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getDeltaInShapeSpace(myShape, { x: 100, y: 100 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the delta in the local space of.
+
+
+
+
+
+
+
+
+
+`delta`
+
+
+
+
+```ts
+VecLike
+```
+
+The page delta to convert.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDroppingShape()` \{#Editor-getDroppingShape-member-1}
+
+Public Method
+
+Get the shape that some shapes should be dropped on at a given point.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The point to find the parent for.
+
+
+
+
+
+
+
+
+
+`droppingShapes`
+
+ (optional)
+
+
+
+
+```ts
+TLShape[]
+```
+
+The shapes that are being dropped.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLUnknownShape | undefined
+```
+
+ The shape to drop on.
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [TLShape](/gen/tlschema/TLShape-type), [TLUnknownShape](/gen/tlschema/TLUnknownShape-type)
+
+---
+
+### `getHandles()` \{#Editor-getHandles-member-1}
+
+Public Method
+
+Get the handles (if any) for a shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+T
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLHandle[] | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLHandle](/gen/tlschema/TLHandle-interface)
+
+---
+
+### `getHandlesById()` \{#Editor-getHandlesById-member-1}
+
+Public Method
+
+Get the handles (if any) for a shape by its id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+T['id']
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLHandle[] | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLHandle](/gen/tlschema/TLHandle-interface)
+
+---
+
+### `getHighestIndexForParent()` \{#Editor-getHighestIndexForParent-member-1}
+
+Public Method
+
+Get the index above the highest child of a given parent.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`parentId`
+
+
+
+
+```ts
+TLPageId | TLShapeId
+```
+
+The id of the parent.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+ The index.
+
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getMaskedPageBounds()` \{#Editor-getMaskedPageBounds-member-1}
+
+Public Method
+
+Get the page (or absolute) bounds of a shape, incorporating any masks. For example, if the shape were the child of a frame and was half way out of the frame, the bounds would be the half of the shape that was in the frame.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getMaskedPageBounds(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the masked bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getMaskedPageBoundsById()` \{#Editor-getMaskedPageBoundsById-member-1}
+
+Public Method
+
+Get the page (or absolute) bounds of a shape by its id, incorporating any masks. For example, if the shape were the child of a frame and was half way out of the frame, the bounds would be the half of the shape that was in the frame.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getMaskedPageBoundsById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to get the masked page bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | undefined
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getOutermostSelectableShape()` \{#Editor-getOutermostSelectableShape-member-1}
+
+Public Method
+
+Get the shape that should be selected when you click on a given shape, assuming there is nothing already selected. It will not return anything higher than or including the current focus layer.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the outermost selectable shape for.
+
+
+
+
+
+
+
+
+
+`filter`
+
+ (optional)
+
+
+
+
+```ts
+(shape: TLShape) => boolean
+```
+
+A function to filter the selectable shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape
+```
+
+ The outermost selectable shape.
+
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getOutline()` \{#Editor-getOutline-member-1}
+
+Public Method
+
+Get the local outline of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getOutline(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+T
+```
+
+The shape to get the outline for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineById()` \{#Editor-getOutlineById-member-1}
+
+Public Method
+
+Get the local outline of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getOutlineById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The shape id to get the outline for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineSegments()` \{#Editor-getOutlineSegments-member-1}
+
+Public Method
+
+Get the local outline segments of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getOutlineSegments(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+T
+```
+
+The shape to get the outline segments for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[][]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineSegmentsById()` \{#Editor-getOutlineSegmentsById-member-1}
+
+Public Method
+
+Get the local outline segments of a shape by its Id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getOutlineSegmentsById(myShapeId)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[][]
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPageBounds()` \{#Editor-getPageBounds-member-1}
+
+Public Method
+
+Get the page (or absolute) bounds of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageBounds(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getPageBoundsById()` \{#Editor-getPageBoundsById-member-1}
+
+Public Method
+
+Get the page (or absolute) bounds of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageBoundsById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to get the page bounds for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d | undefined
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getPageById()` \{#Editor-getPageById-member-1}
+
+Public Method
+
+Get a page by its ID.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageById(myPage.id)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLPageId
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLPage | undefined
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [TLPage](/gen/tlschema/TLPage-interface)
+
+---
+
+### `getPageCenter()` \{#Editor-getPageCenter-member-1}
+
+Public Method
+
+Get the page point (or absolute point) of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPagePoint(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the page point for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+null | Vec2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPageCenterById()` \{#Editor-getPageCenterById-member-1}
+
+Public Method
+
+Get the page point (or absolute point) of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPagePoint(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The shape id to get the page point for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+null | Vec2d
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPageCorners()` \{#Editor-getPageCorners-member-1}
+
+Public Method
+
+Get the corners of a shape in page space.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const corners = editor.getPageCorners(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the corners for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPageInfoById()` \{#Editor-getPageInfoById-member-1}
+
+Public Method
+
+Get a page by its ID.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageById(myPage.id)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLPage['id']
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLPage | undefined
+```
+
+##### References
+
+[TLPage](/gen/tlschema/TLPage-interface)
+
+---
+
+### `getPageMaskById()` \{#Editor-getPageMaskById-member-1}
+
+Public Method
+
+Get the page mask for a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const pageMask = editor.getPageMaskById(shape.id)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to get the page mask for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+undefined | VecLike[]
+```
+
+ The page mask for the shape.
+
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `getPagePointById()` \{#Editor-getPagePointById-member-1}
+
+Public Method
+
+Get the page point (or absolute point) of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPagePoint(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+undefined | Vec2d
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPageRotation()` \{#Editor-getPageRotation-member-1}
+
+Public Method
+
+Get the page rotation (or absolute rotation) of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageRotation(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the page rotation for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getPageRotationById()` \{#Editor-getPageRotationById-member-1}
+
+Public Method
+
+Get the page rotation (or absolute rotation) of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageRotationById(myShapeId)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to get the page rotation for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getPageStateByPageId()` \{#Editor-getPageStateByPageId-member-1}
+
+Public Method
+
+Get a page state by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageStateByPageId('page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLPageId
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLInstancePageState | undefined
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [TLInstancePageState](/gen/tlschema/TLInstancePageState-interface)
+
+---
+
+### `getPageTransform()` \{#Editor-getPageTransform-member-1}
+
+Public Method
+
+Get the page transform (or absolute transform) of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageTransform(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the page transform for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `getPageTransformById()` \{#Editor-getPageTransformById-member-1}
+
+Public Method
+
+Get the page transform (or absolute transform) of a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPageTransformById(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The if of the shape to get the page transform for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d | undefined
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `getParentIdForNewShapeAtPoint()` \{#Editor-getParentIdForNewShapeAtPoint-member-1}
+
+Public Method
+
+Get the id of what should be the parent of a new shape at a given point. The parent can be a page or shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The point to find the parent for.
+
+
+
+
+
+
+
+
+
+`shapeType`
+
+
+
+
+```ts
+TLShape['type']
+```
+
+The type of shape that will be created.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLPageId | TLShapeId
+```
+
+ The id of the parent.
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [TLShape](/gen/tlschema/TLShape-type), [TLPageId](/gen/tlschema/TLPageId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getParentShape()` \{#Editor-getParentShape-member-1}
+
+Public Method
+
+Get the parent shape for a given shape. Returns undefined if the shape is the direct child of the page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getParentShape(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+ (optional)
+
+
+
+
+```ts
+TLShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getParentsMappedToChildren()` \{#Editor-getParentsMappedToChildren-member-1}
+
+Public Method
+
+For a given set of ids, get a map containing the ids of their parents and the children of those parents.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getParentsMappedToChildren(['id1', 'id2', 'id3'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids to get the parents and children of.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Map>
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Map](/gen/Map-interface), [TLParentId](/gen/tlschema/TLParentId-type), [Set](/gen/Set-interface), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getParentTransform()` \{#Editor-getParentTransform-member-1}
+
+Public Method
+
+Get the local transform of a shape's parent as a matrix model.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getParentTransform(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the parent transform for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `getPointInParentSpace()` \{#Editor-getPointInParentSpace-member-1}
+
+Public Method
+
+Convert a delta in page space to a point in the local space of a shape. For example, if a shape's page point were `{ x: 100, y: 100 }`, a page point at `{ x: 110, y: 110 }` would be at `{ x: 10, y: 10 }` in the shape's local space.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPointInShapeSpace(myShape.id, { x: 100, y: 100 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shapeId`
+
+
+
+
+```ts
+TLShapeId
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The page point to get in the local space of the shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPointInShapeSpace()` \{#Editor-getPointInShapeSpace-member-1}
+
+Public Method
+
+Convert a point in page space to a point in the local space of a shape. For example, if a shape's page point were `{ x: 100, y: 100 }`, a page point at `{ x: 110, y: 110 }` would be at `{ x: 10, y: 10 }` in the shape's local space.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getPointInShapeSpace(myShape, { x: 100, y: 100 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the point in the local space of.
+
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The page point to get in the local space of the shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getShapeAndDescendantIds()` \{#Editor-getShapeAndDescendantIds-member-1}
+
+Public Method
+
+Get the shape ids of all descendants of the given shapes (including the shapes themselves).
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to get descendants of.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Set
+```
+
+ The decscendant ids.
+
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Set](/gen/Set-interface)
+
+---
+
+### `getShapeById()` \{#Editor-getShapeById-member-1}
+
+Public Method
+
+Get a shape by its id.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getShapeById('box1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLParentId
+```
+
+The id of the shape to get.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+T | undefined
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLParentId](/gen/tlschema/TLParentId-type)
+
+---
+
+### `getShapeIdsInPage()` \{#Editor-getShapeIdsInPage-member-1}
+
+Public Method
+
+Get the ids of shapes on a page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const idsOnPage1 = editor.getShapeIdsInPage('page1')
+const idsOnPage2 = editor.getShapeIdsInPage('page2')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`pageId`
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Set
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [Set](/gen/Set-interface), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getShapesAtPoint()` \{#Editor-getShapesAtPoint-member-1}
+
+Public Method
+
+Get the shapes, if any, at a given page point.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getShapesAtPoint({ x: 100, y: 100 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The page point to test.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShape[]
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `getShapeUtil()` \{#Editor-getShapeUtil-member-1}
+
+Public Method
+
+Get a shape util by its definition.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getShapeUtil(ArrowShapeUtil)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`util`
+
+
+
+
+```ts
+C
+```
+
+The shape util.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+InstanceType
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [InstanceType](/gen/InstanceType-type)
+
+---
+
+### `getShapeUtil()` \{#Editor-getShapeUtil-member-2}
+
+Public Method
+
+Get a shape util from a shape itself.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const util = editor.getShapeUtil(myShape)
+const util = editor.getShapeUtil(myShape)
+const util = editor.getShapeUtil(ArrowShapeUtil)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+S | TLShapePartial
+```
+
+A shape or shape partial.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+ShapeUtil
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type), [TLShapePartial](/gen/tlschema/TLShapePartial-type), [ShapeUtil](/gen/editor/ShapeUtil-class)
+
+---
+
+### `getSortedChildIds()` \{#Editor-getSortedChildIds-member-1}
+
+Public Method
+
+Get an array of all the children of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getSortedChildIds('frame1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`parentId`
+
+
+
+
+```ts
+TLParentId
+```
+
+The id of the parent shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShapeId[]
+```
+
+##### References
+
+[TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `getStateDescendant()` \{#Editor-getStateDescendant-member-1}
+
+Public Method
+
+Get a descendant by its path.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+state.getStateDescendant('select')
+state.getStateDescendant('select.brushing')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`path`
+
+
+
+
+```ts
+string
+```
+
+The descendant's path of state ids, separated by periods.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+StateNode | undefined
+```
+
+##### References
+
+[StateNode](/gen/editor/StateNode-class)
+
+---
+
+### `getSvg()` \{#Editor-getSvg-member-1}
+
+Public Method
+
+Get an exported SVG of the given shapes.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to export. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+Partial<{
+ scale: number
+ background: boolean
+ padding: number
+ darkMode?: boolean | undefined
+ preserveAspectRatio: React.SVGAttributes['preserveAspectRatio']
+}>
+```
+
+Options for the export.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+ The SVG element.
+
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Partial](/gen/Partial-type), [React.SVGAttributes](/gen/@types/react-React-SVGAttributes-interface), [SVGSVGElement](/gen/SVGSVGElement-interface), [Promise](/gen/Promise-interface)
+
+---
+
+### `getTransform()` \{#Editor-getTransform-member-1}
+
+Public Method
+
+Get the local transform for a shape as a matrix model. This transform reflects both its translation (x, y) from from either its parent's top left corner, if the shape's parent is another shape, or else from the 0,0 of the page, if the shape's parent is the page; and the shape's rotation.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.getTransform(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to get the local transform for.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `groupShapes()` \{#Editor-groupShapes-member-1}
+
+Public Method
+
+Group some shapes together.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+Ids of the shapes to group. Defaults to the selected shapes.
+
+
+
+
+
+
+
+
+
+`groupId`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId
+```
+
+Id of the group to create. Defaults to a new shape id.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `hasAncestor()` \{#Editor-hasAncestor-member-1}
+
+Public Method
+
+Returns true if the the given shape has the given ancestor.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape | undefined
+```
+
+The shape.
+
+
+
+
+
+
+
+
+
+`ancestorId`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the ancestor.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `interrupt()` \{#Editor-interrupt-member-1}
+
+Public Method
+
+Dispatch an interrupt event.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.interrupt()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `isIn()` \{#Editor-isIn-member-1}
+
+Public Method
+
+Get whether a certain tool (or other state node) is currently active.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.isIn('select')
+editor.isIn('select.brushing')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`path`
+
+
+
+
+```ts
+string
+```
+
+The path of active states, separated by periods.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+---
+
+### `isInAny()` \{#Editor-isInAny-member-1}
+
+Public Method
+
+Get whether the state node is in any of the given active paths.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+state.isInAny('select', 'erase')
+state.isInAny('select.brushing', 'erase.idle')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`paths`
+
+
+
+
+```ts
+string[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+---
+
+### `isPointInShape()` \{#Editor-isPointInShape-member-1}
+
+Public Method
+
+Test whether a point (in page space) will will a shape. This method takes into account masks, such as when a shape is the child of a frame and is partially clipped by the frame.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.isPointInShape({ x: 100, y: 100 }, myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The page point to test.
+
+
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to test against.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `isSelected()` \{#Editor-isSelected-member-1}
+
+Public Method
+
+Determine whether or not a shape is selected
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.isSelected('id1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to check.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `isShapeInPage()` \{#Editor-isShapeInPage-member-1}
+
+Public Method
+
+Get whether the given shape is the descendant of the given page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.isShapeInPage(myShape)
+editor.isShapeInPage(myShape, 'page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShape
+```
+
+The shape to check.
+
+
+
+
+
+
+
+
+
+`pageId`
+
+ (optional)
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page to check against. Defaults to the current page.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type), [TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `isShapeOfType()` \{#Editor-isShapeOfType-member-1}
+
+Public Method
+
+Get whether a shape matches the type of a TLShapeUtil.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const isArrowShape = isShapeOfType(someShape, ArrowShapeUtil)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLUnknownShape
+```
+
+the shape to test
+
+
+
+
+
+
+
+
+
+`util`
+
+
+
+
+```ts
+{
+ new (...args: any): ShapeUtil
+ type: string
+}
+```
+
+the TLShapeUtil constructor to test against
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+shape is T
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type), [ShapeUtil](/gen/editor/ShapeUtil-class), [shape](/gen/editor/~shape)
+
+---
+
+### `isShapeOrAncestorLocked()` \{#Editor-isShapeOrAncestorLocked-member-1}
+
+Public Method
+
+Check whether a shape or its parent is locked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+ (optional)
+
+
+
+
+```ts
+TLShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `isWithinSelection()` \{#Editor-isWithinSelection-member-1}
+
+Public Method
+
+Determine whether a not a shape is within the current selection. A shape is within the selection if it or any of its parents is selected.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to check.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `mark()` \{#Editor-mark-member-1}
+
+Public Method
+
+Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear any redos.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.mark()
+editor.mark('flip shapes')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`reason`
+
+ (optional)
+
+
+
+
+```ts
+string
+```
+
+The reason for the mark.
+
+
+
+
+
+
+
+
+
+`onUndo`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether to stop at the mark when undoing.
+
+
+
+
+
+
+
+
+
+`onRedo`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether to stop at the mark when redoing.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+---
+
+### `moveShapesToPage()` \{#Editor-moveShapesToPage-member-1}
+
+Public Method
+
+Move shapes to page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.moveShapesToPage(['box1', 'box2'], 'page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move.
+
+
+
+
+
+
+
+
+
+`pageId`
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page where the shapes will be moved.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `nudgeShapes()` \{#Editor-nudgeShapes-member-1}
+
+Public Method
+
+Move shapes by a delta.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.nudgeShapes(['box1', 'box2'], { x: 0, y: 1 })
+editor.nudgeShapes(['box1', 'box2'], { x: 0, y: 1 }, true)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move.
+
+
+
+
+
+
+
+
+
+`direction`
+
+
+
+
+```ts
+Vec2dModel
+```
+
+The direction in which to move the shapes.
+
+
+
+
+
+
+
+
+
+`major`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether this is a major nudge, e.g. a shift + arrow nudge.
+
+
+
+
+
+
+
+
+
+`ephemeral`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [Vec2dModel](/gen/tlschema/Vec2dModel-interface)
+
+---
+
+### `packShapes()` \{#Editor-packShapes-member-1}
+
+Public Method
+
+Pack shapes into a grid centered on their current position. Based on potpack (https://github.com/mapbox/potpack)
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to pack. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+
+`padding`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+The padding to apply to the packed shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `pageToScreen()` \{#Editor-pageToScreen-member-1}
+
+Public Method
+
+Convert a point in page space to a point in screen space.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.pageToScreen(100, 100)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The x coordinate of the point in screen space.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The y coordinate of the point in screen space.
+
+
+
+
+
+
+
+
+
+`z`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`camera`
+
+ (optional)
+
+
+
+
+```ts
+Vec2dModel
+```
+
+The camera to use. Defaults to the current camera.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ x: number
+ y: number
+ z: number
+}
+```
+
+##### References
+
+[Vec2dModel](/gen/tlschema/Vec2dModel-interface)
+
+---
+
+### `pan()` \{#Editor-pan-member-1}
+
+Public Method
+
+Pan the camera.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.pan(100, 100)
+editor.pan(100, 100, { duration: 1000 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`dx`
+
+
+
+
+```ts
+number
+```
+
+The amount to pan on the x axis.
+
+
+
+
+
+
+
+
+
+`dy`
+
+
+
+
+```ts
+number
+```
+
+The amount to pan on the y axis.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The animation options
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `panZoomIntoView()` \{#Editor-panZoomIntoView-member-1}
+
+Public Method
+
+Pan or pan/zoom the selected ids into view. This method tries to not change the zoom if possible.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to pan and zoom into view.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `popFocusLayer()` \{#Editor-popFocusLayer-member-1}
+
+Public Method
+
+Exit the current focus layer, moving up to the next group if there is one.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `putContent()` \{#Editor-putContent-member-1}
+
+Public Method
+
+Place content into the editor.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`content`
+
+
+
+
+```ts
+TLContent
+```
+
+The content.
+
+
+
+
+
+
+
+
+
+`options`
+
+ (optional)
+
+
+
+
+```ts
+{
+ point?: VecLike
+ select?: boolean
+ preservePosition?: boolean
+ preserveIds?: boolean
+}
+```
+
+Options for placing the content.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLContent](/gen/editor/TLContent-interface), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `putExternalContent()` \{#Editor-putExternalContent-member-1}
+
+Public Method
+
+Handle external content, such as files, urls, embeds, or plain text which has been put into the app, for example by pasting external text or dropping external images onto canvas.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+TLExternalContent
+```
+
+Info about the external content.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `redo()` \{#Editor-redo-member-1}
+
+Public Method
+
+Redo to the next mark.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.redo()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `renamePage()` \{#Editor-renamePage-member-1}
+
+Public Method
+
+Rename a page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.renamePage('page1', 'My Page')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page to rename.
+
+
+
+
+
+
+
+
+
+`name`
+
+
+
+
+```ts
+string
+```
+
+The new name.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type)
+
+---
+
+### `reorderShapes()` \{#Editor-reorderShapes-member-1}
+
+Public Method
+
+Reorder shapes.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+'backward' | 'forward' | 'toBack' | 'toFront'
+```
+
+The operation to perform.
+
+
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids to reorder.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `reparentShapesById()` \{#Editor-reparentShapesById-member-1}
+
+Public Method
+
+Reparent shapes to a new parent. This operation preserves the shape's current page positions / rotations.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.reparentShapesById(['box1', 'box2'], 'frame1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to reparent.
+
+
+
+
+
+
+
+
+
+`parentId`
+
+
+
+
+```ts
+TLParentId
+```
+
+The id of the new parent shape.
+
+
+
+
+
+
+
+
+
+`insertIndex`
+
+ (optional)
+
+
+
+
+```ts
+string
+```
+
+The index to insert the children.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [TLParentId](/gen/tlschema/TLParentId-type)
+
+---
+
+### `replaceStoreContentsWithRecordsForOtherDocument()` \{#Editor-replaceStoreContentsWithRecordsForOtherDocument-member-1}
+
+Public Method
+
+Replace the store's contents with the given records.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`records`
+
+
+
+
+```ts
+TLRecord[]
+```
+
+The records to replace the store's contents with.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[TLRecord](/gen/tlschema/TLRecord-type)
+
+---
+
+### `resetZoom()` \{#Editor-resetZoom-member-1}
+
+Public Method
+
+Set the zoom back to 100%.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.resetZoom()
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+ (optional)
+
+
+
+
+```ts
+Vec2d
+```
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class), [TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `resizeShape()` \{#Editor-resizeShape-member-1}
+
+Public Method
+
+Resize a shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+TLShapeId
+```
+
+The id of the shape to resize.
+
+
+
+
+
+
+
+
+
+`scale`
+
+
+
+
+```ts
+VecLike
+```
+
+The scale factor to apply to the shape.
+
+
+
+
+
+
+
+
+
+`options`
+
+ (optional)
+
+
+
+
+```ts
+{
+ initialBounds?: Box2d
+ scaleOrigin?: VecLike
+ scaleAxisRotation?: number
+ initialShape?: TLShape
+ initialPageTransform?: MatLike
+ dragHandle?: TLResizeHandle
+ mode?: TLResizeMode
+}
+```
+
+Additional options.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type), [VecLike](/gen/primitives/VecLike-type), [Box2d](/gen/primitives/Box2d-class), [TLShape](/gen/tlschema/TLShape-type), [MatLike](/gen/primitives/MatLike-type), [TLResizeHandle](/gen/editor/TLResizeHandle-type), [TLResizeMode](/gen/editor/TLResizeMode-type)
+
+---
+
+### `rotateShapesBy()` \{#Editor-rotateShapesBy-member-1}
+
+Public Method
+
+Rotate shapes by a delta in radians.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.rotateShapesBy(['box1', 'box2'], Math.PI)
+editor.rotateShapesBy(['box1', 'box2'], Math.PI / 2)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move.
+
+
+
+
+
+
+
+
+
+`delta`
+
+
+
+
+```ts
+number
+```
+
+The delta in radians to apply to the selection rotation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `screenToPage()` \{#Editor-screenToPage-member-1}
+
+Public Method
+
+Convert a point in screen space to a point in page space.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.screenToPage(100, 100)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The x coordinate of the point in screen space.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The y coordinate of the point in screen space.
+
+
+
+
+
+
+
+
+
+`z`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`camera`
+
+ (optional)
+
+
+
+
+```ts
+Vec2dModel
+```
+
+The camera to use. Defaults to the current camera.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ x: number
+ y: number
+ z: number
+}
+```
+
+##### References
+
+[Vec2dModel](/gen/tlschema/Vec2dModel-interface)
+
+---
+
+### `select()` \{#Editor-select-member-1}
+
+Public Method
+
+Select one or more shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.select('id1')
+editor.select('id1', 'id2')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids to select.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `selectAll()` \{#Editor-selectAll-member-1}
+
+Public Method
+
+Select all direct children of the current page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.selectAll()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `selectNone()` \{#Editor-selectNone-member-1}
+
+Public Method
+
+Clear the selection.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.selectNone()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `sendBackward()` \{#Editor-sendBackward-member-1}
+
+Public Method
+
+Send shapes backward in the page's object list.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.sendBackward()
+editor.sendBackward(['id1', 'id2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move. Defaults to the ids of the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `sendToBack()` \{#Editor-sendToBack-member-1}
+
+Public Method
+
+Send shapes to the back of the page's object list.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.sendToBack()
+editor.sendToBack(['id1', 'id2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to move. Defaults to the ids of the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setAnimationSpeed()` \{#Editor-setAnimationSpeed-member-1}
+
+Public Method
+
+Set the user's chosen animation speed. Set to 0.0 to disable animations. Set to 1.0 for full speed.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`animationSpeed`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setBrush()` \{#Editor-setBrush-member-1}
+
+Public Method
+
+Set the current brush.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setBrush({ x: 0, y: 0, w: 100, h: 100 })
+editor.setBrush() // Clears the brush
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`brush`
+
+ (optional)
+
+
+
+
+```ts
+Box2dModel | null
+```
+
+The brush box model to set, or null for no brush model.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `setCamera()` \{#Editor-setCamera-member-1}
+
+Public Method
+
+Set the current camera.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setCamera(0, 0)
+editor.setCamera(0, 0, 1)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The camera's x position.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The camera's y position.
+
+
+
+
+
+
+
+
+
+`z`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+The camera's z position. Defaults to the current zoom.
+
+
+
+
+
+
+
+
+
+`{ stopFollowing }`
+
+ (optional)
+
+
+
+
+```ts
+TLViewportOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLViewportOptions](/gen/editor/~TLViewportOptions-type)
+
+---
+
+### `setCroppingId()` \{#Editor-setCroppingId-member-1}
+
+Public Method
+
+Set the current cropping shape's id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+null | TLShapeId
+```
+
+The id of the shape to crop or null to clear the cropping id.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setCurrentPageId()` \{#Editor-setCurrentPageId-member-1}
+
+Public Method
+
+Set the current page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setCurrentPageId('page1')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`pageId`
+
+
+
+
+```ts
+TLPageId
+```
+
+The id of the page to set as the current page.
+
+
+
+
+
+
+
+
+
+`{ stopFollowing }`
+
+ (optional)
+
+
+
+
+```ts
+TLViewportOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLPageId](/gen/tlschema/TLPageId-type), [TLViewportOptions](/gen/editor/~TLViewportOptions-type)
+
+---
+
+### `setCursor()` \{#Editor-setCursor-member-1}
+
+Public Method
+
+Set the current cursor.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setCursor({ type: 'default' })
+editor.setCursor({ type: 'default', rotation: Math.PI / 2, color: 'red' })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`cursor`
+
+
+
+
+```ts
+Partial
+```
+
+A partial of the cursor object.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Partial](/gen/Partial-type), [TLCursor](/gen/tlschema/TLCursor-interface)
+
+---
+
+### `setDarkMode()` \{#Editor-setDarkMode-member-1}
+
+Public Method
+
+Set whether the user has dark mode enabled.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isDarkMode`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setDevicePixelRatio()` \{#Editor-setDevicePixelRatio-member-1}
+
+Public Method
+
+Set the window's device pixel ratio. This should usually only be set by the Canvas component.
+
+
+```ts
+editor.setDevicePixelRatio(2)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`dpr`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setEditingId()` \{#Editor-setEditingId-member-1}
+
+Public Method
+
+Set the current editing id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+null | TLShapeId
+```
+
+The id of the shape to edit or null to clear the editing id.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setErasingIds()` \{#Editor-setErasingIds-member-1}
+
+Public Method
+
+Set the current erasing shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setErasingIds(['box1', 'box2'])
+editor.setErasingIds() // Clears the erasing set
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of shapes to set as erasing.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setFocusLayer()` \{#Editor-setFocusLayer-member-1}
+
+Public Method
+
+Set the focus layer to the given shape id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`next`
+
+
+
+
+```ts
+null | TLShapeId
+```
+
+The next focus layer id or null to reset the focus layer to the page
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setFocusMode()` \{#Editor-setFocusMode-member-1}
+
+Public Method
+
+Set whether the instance is in focus mode or not.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isFocusMode`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setGridMode()` \{#Editor-setGridMode-member-1}
+
+Public Method
+
+Set whether the instance's grid is enabled.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isGridMode`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setHintingIds()` \{#Editor-setHintingIds-member-1}
+
+Public Method
+
+Set the hinted shape ids.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids to set as hinted.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setHoveredId()` \{#Editor-setHoveredId-member-1}
+
+Public Method
+
+Set the current hovered shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setHoveredId('box1')
+editor.setHoveredId() // Clears the hovered shape.
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+ (optional)
+
+
+
+
+```ts
+null | TLShapeId
+```
+
+The id of the page to set as the current page
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setLocale()` \{#Editor-setLocale-member-1}
+
+Public Method
+
+Update the user's locale. This affects which translations are used when rendering UI elements.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setLocale('fr')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`locale`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `setOpacity()` \{#Editor-setOpacity-member-1}
+
+Public Method
+
+Set the current opacity. This will effect any selected shapes, or the next-created shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setOpacity(0.5)
+editor.setOpacity(0.5, true)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`opacity`
+
+
+
+
+```ts
+number
+```
+
+The opacity to set. Must be a number between 0 and 1 inclusive.
+
+
+
+
+
+
+
+
+
+`ephemeral`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the opacity change is ephemeral. Ephemeral changes don't get added to the undo/redo stack. Defaults to false.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the opacity change will be squashed into the existing history entry rather than creating a new one. Defaults to false.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setPageState()` \{#Editor-setPageState-member-1}
+
+Public Method
+
+Update a page state.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setPageState({ id: 'page1', editingId: 'shape:123' })
+editor.setPageState({ id: 'page1', editingId: 'shape:123' }, true)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partial`
+
+
+
+
+```ts
+Partial
+```
+
+The partial of the page state object containing the changes.
+
+
+
+
+
+
+
+
+
+`ephemeral`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the command is ephemeral.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[Partial](/gen/Partial-type), [TLInstancePageState](/gen/tlschema/TLInstancePageState-interface)
+
+---
+
+### `setPenMode()` \{#Editor-setPenMode-member-1}
+
+Public Method
+
+Set whether the editor is in pen mode or not.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isPenMode`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setReadOnly()` \{#Editor-setReadOnly-member-1}
+
+Public Method
+
+Set whether the editor is in read-only mode or not.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isReadOnly`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setScribble()` \{#Editor-setScribble-member-1}
+
+Public Method
+
+Set the current scribble.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setScribble(nextScribble)
+editor.setScribble() // clears the scribble
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`scribble`
+
+ (optional)
+
+
+
+
+```ts
+null | TLScribble
+```
+
+The new scribble object.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLScribble](/gen/tlschema/TLScribble-type)
+
+---
+
+### `setSelectedIds()` \{#Editor-setSelectedIds-member-1}
+
+Public Method
+
+Select one or more shapes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setSelectedIds(['id1'])
+editor.setSelectedIds(['id1', 'id2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids to select.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the change should create a new history entry or combine with the previous (if the previous is the same type).
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `setSelectedTool()` \{#Editor-setSelectedTool-member-1}
+
+Public Method
+
+Set the selected tool.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setSelectedTool('hand')
+editor.setSelectedTool('hand', { date: Date.now() })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+The id of the tool to select.
+
+
+
+
+
+
+
+
+
+`info`
+
+ (optional)
+
+
+
+
+```ts
+{}
+```
+
+Arbitrary data to pass along into the transition.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setSnapMode()` \{#Editor-setSnapMode-member-1}
+
+Public Method
+
+Set whether the user has "always snap" mode enabled.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isSnapMode`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setStyle()` \{#Editor-setStyle-member-1}
+
+Public Method
+
+Set the current styles
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setProp(DefaultColorStyle, 'red')
+editor.setProp(DefaultColorStyle, 'red', true)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`style`
+
+
+
+
+```ts
+StyleProp
+```
+
+The style to set.
+
+
+
+
+
+
+
+
+
+`value`
+
+
+
+
+```ts
+T
+```
+
+The value to set.
+
+
+
+
+
+
+
+
+
+`ephemeral`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the style change is ephemeral. Ephemeral changes don't get added to the undo/redo stack. Defaults to false.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the style change will be squashed into the existing history entry rather than creating a new one. Defaults to false.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `setToolLocked()` \{#Editor-setToolLocked-member-1}
+
+Public Method
+
+Set whether the instance has "tool lock" mode enabled.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`isToolLocked`
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setZoomBrush()` \{#Editor-setZoomBrush-member-1}
+
+Public Method
+
+Set the current zoom brush.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.setZoomBrush({ x: 0, y: 0, w: 100, h: 100 })
+editor.setZoomBrush() // Clears the zoom
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`zoomBrush`
+
+ (optional)
+
+
+
+
+```ts
+Box2dModel | null
+```
+
+The zoom box model to set, or null for no zoom model.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Box2dModel](/gen/tlschema/Box2dModel-interface)
+
+---
+
+### `slideCamera()` \{#Editor-slideCamera-member-1}
+
+Public Method
+
+Slide the camera in a certain direction.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+{
+ speed: number
+ direction: Vec2d
+ friction: number
+ speedThreshold?: number | undefined
+}
+```
+
+Options for the slide
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this | undefined
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `stackShapes()` \{#Editor-stackShapes-member-1}
+
+Public Method
+
+Stack shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.stackShapes('horizontal')
+editor.stackShapes('horizontal', ['box1', 'box2'])
+editor.stackShapes('horizontal', ['box1', 'box2'], 20)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+'horizontal' | 'vertical'
+```
+
+Whether to stack horizontally or vertically.
+
+
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to stack. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+
+`gap`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+A specific gap to use when stacking.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `startFollowingUser()` \{#Editor-startFollowingUser-member-1}
+
+Public Method
+
+Start viewport-following a user.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`userId`
+
+
+
+
+```ts
+string
+```
+
+The id of the user to follow.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this | undefined
+```
+
+---
+
+### `stopCameraAnimation()` \{#Editor-stopCameraAnimation-member-1}
+
+Public Method
+
+Stop the current camera animation, if any.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `stopFollowingUser()` \{#Editor-stopFollowingUser-member-1}
+
+Public Method
+
+Stop viewport-following a user.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `stretchShapes()` \{#Editor-stretchShapes-member-1}
+
+Public Method
+
+Stretch shape sizes and positions to fill their common bounding box.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.stretchShapes('horizontal')
+editor.stretchShapes('horizontal', ['box1', 'box2'])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`operation`
+
+
+
+
+```ts
+'horizontal' | 'vertical'
+```
+
+Whether to stretch shapes horizontally or vertically.
+
+
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to stretch. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `toggleLock()` \{#Editor-toggleLock-member-1}
+
+Public Method
+
+Toggle the lock state of one or more shapes. If there is a mix of locked and unlocked shapes, all shapes will be locked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+The ids of the shapes to toggle. Defaults to selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `undo()` \{#Editor-undo-member-1}
+
+Public Method
+
+Undo to the last mark.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.undo()
+```
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+HistoryManager
+```
+
+##### References
+
+[HistoryManager](/gen/editor/~HistoryManager-class)
+
+---
+
+### `ungroupShapes()` \{#Editor-ungroupShapes-member-1}
+
+Public Method
+
+Ungroup some shapes.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+ (optional)
+
+
+
+
+```ts
+TLShapeId[]
+```
+
+Ids of the shapes to ungroup. Defaults to the selected shapes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `updateAssets()` \{#Editor-updateAssets-member-1}
+
+Public Method
+
+Update one or more assets.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.updateAssets([{ id: 'asset1', name: 'New name' }])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`assets`
+
+
+
+
+```ts
+TLAssetPartial[]
+```
+
+The assets to update.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAssetPartial](/gen/tlschema/TLAssetPartial-type)
+
+---
+
+### `updateDocumentSettings()` \{#Editor-updateDocumentSettings-member-1}
+
+Public Method
+
+Update the global document settings that apply to all users.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`settings`
+
+
+
+
+```ts
+Partial
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[Partial](/gen/Partial-type), [TLDocument](/gen/tlschema/TLDocument-interface)
+
+---
+
+### `updateInstanceState()` \{#Editor-updateInstanceState-member-1}
+
+Public Method
+
+Update the instance's state.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partial`
+
+
+
+
+```ts
+Partial>
+```
+
+A partial object to update the instance state with.
+
+
+
+
+
+
+
+
+
+`ephemeral`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the change is ephemeral. Ephemeral changes don't get added to the undo/redo stack. Defaults to false.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the change will be squashed into the existing history entry rather than creating a new one. Defaults to false.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Partial](/gen/Partial-type), [Omit](/gen/Omit-type), [TLInstance](/gen/tlschema/TLInstance-interface)
+
+---
+
+### `updatePage()` \{#Editor-updatePage-member-1}
+
+Public Method
+
+Update a page.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.updatePage({ id: 'page2', name: 'Page 2' })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partial`
+
+
+
+
+```ts
+RequiredKeys
+```
+
+The partial of the shape to update.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[RequiredKeys](/gen/editor/RequiredKeys-type), [TLPage](/gen/tlschema/TLPage-interface)
+
+---
+
+### `updateShapes()` \{#Editor-updateShapes-member-1}
+
+Public Method
+
+Update shapes using partials of each shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.updateShapes([{ id: 'box1', type: 'geo', props: { w: 100, h: 100 } }])
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`partials`
+
+
+
+
+```ts
+(null | TLShapePartial | undefined)[]
+```
+
+The shape partials to update.
+
+
+
+
+
+
+
+
+
+`squashing`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+Whether the change is ephemeral.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type), [TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `updateViewportScreenBounds()` \{#Editor-updateViewportScreenBounds-member-1}
+
+Public Method
+
+Update the viewport. The viewport will measure the size and screen position of its container element. This should be done whenever the container's position on the screen changes.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.updateViewportScreenBounds()
+editor.updateViewportScreenBounds(true)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`center`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+(optional) Whether to preserve the viewport page center as the viewport changes.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `visitDescendants()` \{#Editor-visitDescendants-member-1}
+
+Public Method
+
+Run a visitor function for all descendants of a shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.visitDescendants('frame1', myCallback)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`parentId`
+
+
+
+
+```ts
+TLParentId
+```
+
+The id of the parent shape.
+
+
+
+
+
+
+
+
+
+`visitor`
+
+
+
+
+```ts
+(id: TLShapeId) => false | void
+```
+
+The visitor function.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `zoomIn()` \{#Editor-zoomIn-member-1}
+
+Public Method
+
+Zoom the camera in.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.zoomIn()
+editor.zoomIn(editor.viewportScreenCenter, { duration: 120 })
+editor.zoomIn(editor.inputs.currentScreenPoint, { duration: 120 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+ (optional)
+
+
+
+
+```ts
+Vec2d
+```
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class), [TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `zoomOut()` \{#Editor-zoomOut-member-1}
+
+Public Method
+
+Zoom the camera out.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.zoomOut()
+editor.zoomOut(editor.viewportScreenCenter, { duration: 120 })
+editor.zoomOut(editor.inputs.currentScreenPoint, { duration: 120 })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+ (optional)
+
+
+
+
+```ts
+Vec2d
+```
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class), [TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `zoomToBounds()` \{#Editor-zoomToBounds-member-1}
+
+Public Method
+
+Zoom the camera to fit a bounding box (in page space).
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.zoomToBounds(0, 0, 100, 100)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+The bounding box's x position.
+
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+The bounding box's y position.
+
+
+
+
+
+
+
+
+
+`width`
+
+
+
+
+```ts
+number
+```
+
+The bounding box's width.
+
+
+
+
+
+
+
+
+
+`height`
+
+
+
+
+```ts
+number
+```
+
+The bounding box's height.
+
+
+
+
+
+
+
+
+
+`targetZoom`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+The desired zoom level. Defaults to 0.1.
+
+
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `zoomToContent()` \{#Editor-zoomToContent-member-1}
+
+Public Method
+
+Move the camera to the nearest content.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `zoomToFit()` \{#Editor-zoomToFit-member-1}
+
+Public Method
+
+Zoom the camera to fit the current page's content in the viewport.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.zoomToFit()
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
+### `zoomToSelection()` \{#Editor-zoomToSelection-member-1}
+
+Public Method
+
+Zoom the camera to fit the current selection in the viewport.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.zoomToSelection()
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`opts`
+
+ (optional)
+
+
+
+
+```ts
+TLAnimationOptions
+```
+
+The options for an animation.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[TLAnimationOptions](/gen/editor/TLAnimationOptions-type)
+
+---
+
diff --git a/docs/gen/EmbedDefinition-type.mdx b/docs/gen/EmbedDefinition-type.mdx
new file mode 100644
index 000000000..b3c591c42
--- /dev/null
+++ b/docs/gen/EmbedDefinition-type.mdx
@@ -0,0 +1,41 @@
+---
+title: EmbedDefinition
+status: published
+category: tlschema
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 25
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type EmbedDefinition = {
+ readonly type: string
+ readonly title: string
+ readonly hostnames: readonly string[]
+ readonly minWidth?: number
+ readonly minHeight?: number
+ readonly width: number
+ readonly height: number
+ readonly doesResize: boolean
+ readonly canUnmount: boolean
+ readonly isAspectRatioLocked?: boolean
+ readonly overridePermissions?: TLEmbedShapePermissions
+ readonly instructionLink?: string
+ readonly backgroundColor?: string
+ readonly overrideOutlineRadius?: number
+ readonly toEmbedUrl: (url: string) => string | undefined
+ readonly fromEmbedUrl: (url: string) => string | undefined
+}
+```
+
+##### References
+
+[TLEmbedShapePermissions](/gen/tlschema/TLEmbedShapePermissions-type)
+
diff --git a/docs/gen/EmbedShape-var.mdx b/docs/gen/EmbedShape-var.mdx
new file mode 100644
index 000000000..859c4d06c
--- /dev/null
+++ b/docs/gen/EmbedShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: EmbedShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 29
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+EmbedShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLEmbedShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
diff --git a/docs/gen/EmbedShapeUtil-class.mdx b/docs/gen/EmbedShapeUtil-class.mdx
new file mode 100644
index 000000000..042372945
--- /dev/null
+++ b/docs/gen/EmbedShapeUtil-class.mdx
@@ -0,0 +1,281 @@
+---
+title: EmbedShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 30
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canEdit](#EmbedShapeUtil-canEdit-member)
+ - [canResize](#EmbedShapeUtil-canResize-member)
+ - [canUnmount](#EmbedShapeUtil-canUnmount-member)
+ - [hideSelectionBoundsBg](#EmbedShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#EmbedShapeUtil-hideSelectionBoundsFg-member)
+ - [isAspectRatioLocked](#EmbedShapeUtil-isAspectRatioLocked-member)
+ - [onResize](#EmbedShapeUtil-onResize-member)
+ - [type](#EmbedShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#EmbedShapeUtil-component-member-1)
+ - [getDefaultProps](#EmbedShapeUtil-getDefaultProps-member-1)
+ - [indicator](#EmbedShapeUtil-indicator-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class EmbedShapeUtil extends BaseBoxShapeUtil {}
+```
+
+##### References
+
+[BaseBoxShapeUtil](/gen/editor/BaseBoxShapeUtil-class), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+## Properties
+
+### `canEdit` \{#EmbedShapeUtil-canEdit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canEdit: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `canResize` \{#EmbedShapeUtil-canResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canResize: (shape: TLEmbedShape) => boolean
+```
+
+##### References
+
+[TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `canUnmount` \{#EmbedShapeUtil-canUnmount-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canUnmount: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `hideSelectionBoundsBg` \{#EmbedShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `hideSelectionBoundsFg` \{#EmbedShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `isAspectRatioLocked` \{#EmbedShapeUtil-isAspectRatioLocked-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isAspectRatioLocked: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `onResize` \{#EmbedShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `type` \{#EmbedShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'embed'
+```
+
+---
+
+## Methods
+
+### `component()` \{#EmbedShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLEmbedShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLEmbedShape](/gen/tlschema/TLEmbedShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getDefaultProps()` \{#EmbedShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLEmbedShape['props']
+```
+
+##### References
+
+[TLEmbedShape](/gen/tlschema/TLEmbedShape-type)
+
+---
+
+### `indicator()` \{#EmbedShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLEmbedShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLEmbedShape](/gen/tlschema/TLEmbedShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
diff --git a/docs/gen/EnumStyleProp-class.mdx b/docs/gen/EnumStyleProp-class.mdx
new file mode 100644
index 000000000..5e90f7be8
--- /dev/null
+++ b/docs/gen/EnumStyleProp-class.mdx
@@ -0,0 +1,46 @@
+---
+title: EnumStyleProp
+status: published
+category: tlschema
+group: Class
+author: api
+date: 06/23/2023
+order: 28
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [values](#EnumStyleProp-values-member)
+
+
+
+
+##### Signature
+
+
+```ts
+class EnumStyleProp extends StyleProp {}
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+## Properties
+
+### `values` \{#EnumStyleProp-values-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly values: readonly T[]
+```
+
+---
+
diff --git a/docs/gen/ErrorBoundary-class.mdx b/docs/gen/ErrorBoundary-class.mdx
new file mode 100644
index 000000000..8c92bcac6
--- /dev/null
+++ b/docs/gen/ErrorBoundary-class.mdx
@@ -0,0 +1,166 @@
+---
+title: ErrorBoundary
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 31
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [state](#ErrorBoundary-state-member)
+- [Methods](#methods)
+ - [componentDidCatch](#ErrorBoundary-componentDidCatch-member-1)
+ - [getDerivedStateFromError](#ErrorBoundary-getDerivedStateFromError-member-1)
+ - [render](#ErrorBoundary-render-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class ErrorBoundary extends React.Component<
+ React.PropsWithRef>,
+ TLErrorBoundaryState
+> {}
+```
+
+##### References
+
+[React.Component](/gen/@types/react-React-Component-class), [React.PropsWithRef](/gen/@types/react-React-PropsWithRef-type), [React.PropsWithChildren](/gen/@types/react-React-PropsWithChildren-type), [TLErrorBoundaryProps](/gen/editor/TLErrorBoundaryProps-interface), [TLErrorBoundaryState](/gen/editor/~TLErrorBoundaryState-type)
+
+---
+
+## Properties
+
+### `state` \{#ErrorBoundary-state-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+state: TLErrorBoundaryState
+```
+
+##### References
+
+[TLErrorBoundaryState](/gen/editor/~TLErrorBoundaryState-type)
+
+---
+
+## Methods
+
+### `componentDidCatch()` \{#ErrorBoundary-componentDidCatch-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`error`
+
+
+
+
+```ts
+unknown
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `getDerivedStateFromError()` \{#ErrorBoundary-getDerivedStateFromError-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`error`
+
+
+
+
+```ts
+Error
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ error: Error
+}
+```
+
+##### References
+
+[Error](/gen/Error-interface)
+
+---
+
+### `render()` \{#ErrorBoundary-render-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+ | boolean
+ | JSX.Element
+ | null
+ | number
+ | React.ReactFragment
+ | string
+ | undefined
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface), [React.ReactFragment](/gen/@types/react-React-ReactFragment-type)
+
+---
+
diff --git a/docs/gen/ErrorScreen-function-1.mdx b/docs/gen/ErrorScreen-function-1.mdx
new file mode 100644
index 000000000..d15d9d9ba
--- /dev/null
+++ b/docs/gen/ErrorScreen-function-1.mdx
@@ -0,0 +1,49 @@
+---
+title: ErrorScreen
+status: published
+category: editor
+group: Function
+author: api
+date: 06/23/2023
+order: 32
+---Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children }`
+
+
+
+
+```ts
+{
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/FrameShape-var.mdx b/docs/gen/FrameShape-var.mdx
new file mode 100644
index 000000000..add3c4978
--- /dev/null
+++ b/docs/gen/FrameShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: FrameShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 35
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+FrameShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLFrameShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLFrameShape](/gen/tlschema/TLFrameShape-type)
+
diff --git a/docs/gen/FrameShapeUtil-class.mdx b/docs/gen/FrameShapeUtil-class.mdx
new file mode 100644
index 000000000..c161d2c07
--- /dev/null
+++ b/docs/gen/FrameShapeUtil-class.mdx
@@ -0,0 +1,373 @@
+---
+title: FrameShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 36
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canBind](#FrameShapeUtil-canBind-member)
+ - [canDropShapes](#FrameShapeUtil-canDropShapes-member)
+ - [canEdit](#FrameShapeUtil-canEdit-member)
+ - [canReceiveNewChildrenOfType](#FrameShapeUtil-canReceiveNewChildrenOfType-member)
+ - [onDragShapesOut](#FrameShapeUtil-onDragShapesOut-member)
+ - [onDragShapesOver](#FrameShapeUtil-onDragShapesOver-member)
+ - [onResizeEnd](#FrameShapeUtil-onResizeEnd-member)
+ - [type](#FrameShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#FrameShapeUtil-component-member-1)
+ - [getDefaultProps](#FrameShapeUtil-getDefaultProps-member-1)
+ - [indicator](#FrameShapeUtil-indicator-member-1)
+ - [providesBackgroundForChildren](#FrameShapeUtil-providesBackgroundForChildren-member-1)
+ - [toSvg](#FrameShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class FrameShapeUtil extends BaseBoxShapeUtil {}
+```
+
+##### References
+
+[BaseBoxShapeUtil](/gen/editor/BaseBoxShapeUtil-class), [TLFrameShape](/gen/tlschema/TLFrameShape-type)
+
+---
+
+## Properties
+
+### `canBind` \{#FrameShapeUtil-canBind-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canBind: () => boolean
+```
+
+---
+
+### `canDropShapes` \{#FrameShapeUtil-canDropShapes-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canDropShapes: (shape: TLFrameShape, _shapes: TLShape[]) => boolean
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `canEdit` \{#FrameShapeUtil-canEdit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canEdit: () => boolean
+```
+
+---
+
+### `canReceiveNewChildrenOfType` \{#FrameShapeUtil-canReceiveNewChildrenOfType-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canReceiveNewChildrenOfType: (
+ shape: TLShape,
+ _type: TLShape['type']
+) => boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `onDragShapesOut` \{#FrameShapeUtil-onDragShapesOut-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDragShapesOut: (_shape: TLFrameShape, shapes: TLShape[]) => void
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `onDragShapesOver` \{#FrameShapeUtil-onDragShapesOver-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDragShapesOver: (
+ frame: TLFrameShape,
+ shapes: TLShape[]
+) => {
+ shouldHint: boolean
+}
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `onResizeEnd` \{#FrameShapeUtil-onResizeEnd-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResizeEnd: TLOnResizeEndHandler
+```
+
+##### References
+
+[TLOnResizeEndHandler](/gen/editor/TLOnResizeEndHandler-type), [TLFrameShape](/gen/tlschema/TLFrameShape-type)
+
+---
+
+### `type` \{#FrameShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'frame'
+```
+
+---
+
+## Methods
+
+### `component()` \{#FrameShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLFrameShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getDefaultProps()` \{#FrameShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLFrameShape['props']
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type)
+
+---
+
+### `indicator()` \{#FrameShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLFrameShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `providesBackgroundForChildren()` \{#FrameShapeUtil-providesBackgroundForChildren-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+---
+
+### `toSvg()` \{#FrameShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLFrameShape
+```
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise | SVGElement
+```
+
+##### References
+
+[TLFrameShape](/gen/tlschema/TLFrameShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [Promise](/gen/Promise-interface), [SVGElement](/gen/SVGElement-interface)
+
+---
+
diff --git a/docs/gen/GRID_STEPS-var.mdx b/docs/gen/GRID_STEPS-var.mdx
new file mode 100644
index 000000000..491675f88
--- /dev/null
+++ b/docs/gen/GRID_STEPS-var.mdx
@@ -0,0 +1,24 @@
+---
+title: GRID_STEPS
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 59
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+GRID_STEPS: {
+ min: number
+ mid: number
+ step: number
+}[]
+```
+
diff --git a/docs/gen/GeoShape-var.mdx b/docs/gen/GeoShape-var.mdx
new file mode 100644
index 000000000..0c8067603
--- /dev/null
+++ b/docs/gen/GeoShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: GeoShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 37
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+GeoShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLGeoShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLGeoShape](/gen/tlschema/TLGeoShape-type)
+
diff --git a/docs/gen/GeoShapeGeoStyle-var.mdx b/docs/gen/GeoShapeGeoStyle-var.mdx
new file mode 100644
index 000000000..5989da22c
--- /dev/null
+++ b/docs/gen/GeoShapeGeoStyle-var.mdx
@@ -0,0 +1,43 @@
+---
+title: GeoShapeGeoStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 30
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+GeoShapeGeoStyle: import('../styles/StyleProp').EnumStyleProp<
+ | 'arrow-down'
+ | 'arrow-left'
+ | 'arrow-right'
+ | 'arrow-up'
+ | 'check-box'
+ | 'diamond'
+ | 'ellipse'
+ | 'hexagon'
+ | 'octagon'
+ | 'oval'
+ | 'pentagon'
+ | 'rectangle'
+ | 'rhombus-2'
+ | 'rhombus'
+ | 'star'
+ | 'trapezoid'
+ | 'triangle'
+ | 'x-box'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/GeoShapeUtil-class.mdx b/docs/gen/GeoShapeUtil-class.mdx
new file mode 100644
index 000000000..ea3103b6a
--- /dev/null
+++ b/docs/gen/GeoShapeUtil-class.mdx
@@ -0,0 +1,773 @@
+---
+title: GeoShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 38
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canEdit](#GeoShapeUtil-canEdit-member)
+ - [onBeforeCreate](#GeoShapeUtil-onBeforeCreate-member)
+ - [onBeforeUpdate](#GeoShapeUtil-onBeforeUpdate-member)
+ - [onDoubleClick](#GeoShapeUtil-onDoubleClick-member)
+ - [onEditEnd](#GeoShapeUtil-onEditEnd-member)
+ - [onResize](#GeoShapeUtil-onResize-member)
+ - [type](#GeoShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#GeoShapeUtil-component-member-1)
+ - [getBounds](#GeoShapeUtil-getBounds-member-1)
+ - [getCenter](#GeoShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#GeoShapeUtil-getDefaultProps-member-1)
+ - [getOutline](#GeoShapeUtil-getOutline-member-1)
+ - [hitTestLineSegment](#GeoShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#GeoShapeUtil-hitTestPoint-member-1)
+ - [indicator](#GeoShapeUtil-indicator-member-1)
+ - [toSvg](#GeoShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class GeoShapeUtil extends BaseBoxShapeUtil {}
+```
+
+##### References
+
+[BaseBoxShapeUtil](/gen/editor/BaseBoxShapeUtil-class), [TLGeoShape](/gen/tlschema/TLGeoShape-type)
+
+---
+
+## Properties
+
+### `canEdit` \{#GeoShapeUtil-canEdit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canEdit: () => boolean
+```
+
+---
+
+### `onBeforeCreate` \{#GeoShapeUtil-onBeforeCreate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeCreate: (shape: TLGeoShape) =>
+ | {
+ props: {
+ growY: number
+ geo:
+ | 'arrow-down'
+ | 'arrow-left'
+ | 'arrow-right'
+ | 'arrow-up'
+ | 'check-box'
+ | 'diamond'
+ | 'ellipse'
+ | 'hexagon'
+ | 'octagon'
+ | 'oval'
+ | 'pentagon'
+ | 'rectangle'
+ | 'rhombus-2'
+ | 'rhombus'
+ | 'star'
+ | 'trapezoid'
+ | 'triangle'
+ | 'x-box'
+ labelColor:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ color:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ fill: 'none' | 'pattern' | 'semi' | 'solid'
+ dash: 'dashed' | 'dotted' | 'draw' | 'solid'
+ size: 'l' | 'm' | 's' | 'xl'
+ font: 'draw' | 'mono' | 'sans' | 'serif'
+ align:
+ | 'end-legacy'
+ | 'end'
+ | 'middle-legacy'
+ | 'middle'
+ | 'start-legacy'
+ | 'start'
+ verticalAlign: 'end' | 'middle' | 'start'
+ url: string
+ w: number
+ h: number
+ text: string
+ }
+ type: 'geo'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | undefined
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `onBeforeUpdate` \{#GeoShapeUtil-onBeforeUpdate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeUpdate: (
+ prev: TLGeoShape,
+ next: TLGeoShape
+) =>
+ | {
+ props: {
+ growY: number
+ geo:
+ | 'arrow-down'
+ | 'arrow-left'
+ | 'arrow-right'
+ | 'arrow-up'
+ | 'check-box'
+ | 'diamond'
+ | 'ellipse'
+ | 'hexagon'
+ | 'octagon'
+ | 'oval'
+ | 'pentagon'
+ | 'rectangle'
+ | 'rhombus-2'
+ | 'rhombus'
+ | 'star'
+ | 'trapezoid'
+ | 'triangle'
+ | 'x-box'
+ labelColor:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ color:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ fill: 'none' | 'pattern' | 'semi' | 'solid'
+ dash: 'dashed' | 'dotted' | 'draw' | 'solid'
+ size: 'l' | 'm' | 's' | 'xl'
+ font: 'draw' | 'mono' | 'sans' | 'serif'
+ align:
+ | 'end-legacy'
+ | 'end'
+ | 'middle-legacy'
+ | 'middle'
+ | 'start-legacy'
+ | 'start'
+ verticalAlign: 'end' | 'middle' | 'start'
+ url: string
+ w: number
+ h: number
+ text: string
+ }
+ type: 'geo'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | undefined
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `onDoubleClick` \{#GeoShapeUtil-onDoubleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDoubleClick: (shape: TLGeoShape) =>
+ | {
+ props: {
+ geo: 'check-box'
+ }
+ type: 'geo'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | {
+ props: {
+ geo: 'rectangle'
+ }
+ type: 'geo'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | undefined
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `onEditEnd` \{#GeoShapeUtil-onEditEnd-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onEditEnd: TLOnEditEndHandler
+```
+
+##### References
+
+[TLOnEditEndHandler](/gen/editor/TLOnEditEndHandler-type), [TLGeoShape](/gen/tlschema/TLGeoShape-type)
+
+---
+
+### `onResize` \{#GeoShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLGeoShape](/gen/tlschema/TLGeoShape-type)
+
+---
+
+### `type` \{#GeoShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'geo'
+```
+
+---
+
+## Methods
+
+### `component()` \{#GeoShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getBounds()` \{#GeoShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#GeoShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#GeoShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLGeoShape['props']
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type)
+
+---
+
+### `getOutline()` \{#GeoShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#GeoShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#GeoShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `indicator()` \{#GeoShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toSvg()` \{#GeoShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGeoShape
+```
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGElement
+```
+
+##### References
+
+[TLGeoShape](/gen/tlschema/TLGeoShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGElement](/gen/SVGElement-interface)
+
+---
+
diff --git a/docs/gen/GroupShape-var.mdx b/docs/gen/GroupShape-var.mdx
new file mode 100644
index 000000000..cf6011000
--- /dev/null
+++ b/docs/gen/GroupShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: GroupShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 60
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+GroupShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLGroupShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLGroupShape](/gen/tlschema/TLGroupShape-type)
+
diff --git a/docs/gen/GroupShapeUtil-class.mdx b/docs/gen/GroupShapeUtil-class.mdx
new file mode 100644
index 000000000..e5bf78fb9
--- /dev/null
+++ b/docs/gen/GroupShapeUtil-class.mdx
@@ -0,0 +1,352 @@
+---
+title: GroupShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 61
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canBind](#GroupShapeUtil-canBind-member)
+ - [hideSelectionBoundsBg](#GroupShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#GroupShapeUtil-hideSelectionBoundsFg-member)
+ - [onChildrenChange](#GroupShapeUtil-onChildrenChange-member)
+ - [type](#GroupShapeUtil-type-member)
+ - [type](#GroupShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#GroupShapeUtil-component-member-1)
+ - [getBounds](#GroupShapeUtil-getBounds-member-1)
+ - [getCenter](#GroupShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#GroupShapeUtil-getDefaultProps-member-1)
+ - [getOutline](#GroupShapeUtil-getOutline-member-1)
+ - [indicator](#GroupShapeUtil-indicator-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class GroupShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLGroupShape](/gen/tlschema/TLGroupShape-type)
+
+---
+
+## Properties
+
+### `canBind` \{#GroupShapeUtil-canBind-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canBind: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsBg` \{#GroupShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsFg` \{#GroupShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: () => boolean
+```
+
+---
+
+### `onChildrenChange` \{#GroupShapeUtil-onChildrenChange-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onChildrenChange: TLOnChildrenChangeHandler
+```
+
+##### References
+
+[TLOnChildrenChangeHandler](/gen/editor/TLOnChildrenChangeHandler-type), [TLGroupShape](/gen/tlschema/TLGroupShape-type)
+
+---
+
+### `type` \{#GroupShapeUtil-type-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+type: 'group'
+```
+
+---
+
+### `type` \{#GroupShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'group'
+```
+
+---
+
+## Methods
+
+### `component()` \{#GroupShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGroupShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element | null
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getBounds()` \{#GroupShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGroupShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#GroupShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGroupShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#GroupShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLGroupShape['props']
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type)
+
+---
+
+### `getOutline()` \{#GroupShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGroupShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `indicator()` \{#GroupShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLGroupShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLGroupShape](/gen/tlschema/TLGroupShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
diff --git a/docs/gen/HTMLContainer-function-1.mdx b/docs/gen/HTMLContainer-function-1.mdx
new file mode 100644
index 000000000..47d8e3025
--- /dev/null
+++ b/docs/gen/HTMLContainer-function-1.mdx
@@ -0,0 +1,47 @@
+---
+title: HTMLContainer
+status: published
+category: editor
+group: Function
+author: api
+date: 06/23/2023
+order: 66
+---Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, className, ...rest }`
+
+
+
+
+```ts
+HTMLContainerProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[HTMLContainerProps](/gen/editor/HTMLContainerProps-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/HTMLContainerProps-type.mdx b/docs/gen/HTMLContainerProps-type.mdx
new file mode 100644
index 000000000..e3c8dac30
--- /dev/null
+++ b/docs/gen/HTMLContainerProps-type.mdx
@@ -0,0 +1,24 @@
+---
+title: HTMLContainerProps
+status: published
+category: editor
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 67
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type HTMLContainerProps = React.HTMLAttributes
+```
+
+##### References
+
+[React.HTMLAttributes](/gen/@types/react-React-HTMLAttributes-interface), [HTMLDivElement](/gen/HTMLDivElement-interface)
+
diff --git a/docs/gen/HighlightShape-var.mdx b/docs/gen/HighlightShape-var.mdx
new file mode 100644
index 000000000..55312b1c8
--- /dev/null
+++ b/docs/gen/HighlightShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: HighlightShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 64
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+HighlightShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLHighlightShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
diff --git a/docs/gen/HighlightShapeUtil-class.mdx b/docs/gen/HighlightShapeUtil-class.mdx
new file mode 100644
index 000000000..d4c7520fd
--- /dev/null
+++ b/docs/gen/HighlightShapeUtil-class.mdx
@@ -0,0 +1,726 @@
+---
+title: HighlightShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 65
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [hideResizeHandles](#HighlightShapeUtil-hideResizeHandles-member)
+ - [hideRotateHandle](#HighlightShapeUtil-hideRotateHandle-member)
+ - [hideSelectionBoundsBg](#HighlightShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#HighlightShapeUtil-hideSelectionBoundsFg-member)
+ - [onResize](#HighlightShapeUtil-onResize-member)
+ - [type](#HighlightShapeUtil-type-member)
+- [Methods](#methods)
+ - [backgroundComponent](#HighlightShapeUtil-backgroundComponent-member-1)
+ - [component](#HighlightShapeUtil-component-member-1)
+ - [expandSelectionOutlinePx](#HighlightShapeUtil-expandSelectionOutlinePx-member-1)
+ - [getBounds](#HighlightShapeUtil-getBounds-member-1)
+ - [getCenter](#HighlightShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#HighlightShapeUtil-getDefaultProps-member-1)
+ - [getOutline](#HighlightShapeUtil-getOutline-member-1)
+ - [hitTestLineSegment](#HighlightShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#HighlightShapeUtil-hitTestPoint-member-1)
+ - [indicator](#HighlightShapeUtil-indicator-member-1)
+ - [toBackgroundSvg](#HighlightShapeUtil-toBackgroundSvg-member-1)
+ - [toSvg](#HighlightShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class HighlightShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+## Properties
+
+### `hideResizeHandles` \{#HighlightShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideResizeHandles: (shape: TLHighlightShape) => boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `hideRotateHandle` \{#HighlightShapeUtil-hideRotateHandle-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideRotateHandle: (shape: TLHighlightShape) => boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `hideSelectionBoundsBg` \{#HighlightShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: (shape: TLHighlightShape) => boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `hideSelectionBoundsFg` \{#HighlightShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: (shape: TLHighlightShape) => boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `onResize` \{#HighlightShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `type` \{#HighlightShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'highlight'
+```
+
+---
+
+## Methods
+
+### `backgroundComponent()` \{#HighlightShapeUtil-backgroundComponent-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `component()` \{#HighlightShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `expandSelectionOutlinePx()` \{#HighlightShapeUtil-expandSelectionOutlinePx-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `getBounds()` \{#HighlightShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#HighlightShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#HighlightShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLHighlightShape['props']
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type)
+
+---
+
+### `getOutline()` \{#HighlightShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#HighlightShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#HighlightShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `indicator()` \{#HighlightShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toBackgroundSvg()` \{#HighlightShapeUtil-toBackgroundSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string | undefined
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGPathElement
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGPathElement](/gen/SVGPathElement-interface)
+
+---
+
+### `toSvg()` \{#HighlightShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLHighlightShape
+```
+
+
+
+
+
+
+
+
+`_font`
+
+
+
+
+```ts
+string | undefined
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGPathElement
+```
+
+##### References
+
+[TLHighlightShape](/gen/tlschema/TLHighlightShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGPathElement](/gen/SVGPathElement-interface)
+
+---
+
diff --git a/docs/gen/HistoryEntry-type.mdx b/docs/gen/HistoryEntry-type.mdx
new file mode 100644
index 000000000..6fe43be36
--- /dev/null
+++ b/docs/gen/HistoryEntry-type.mdx
@@ -0,0 +1,27 @@
+---
+title: HistoryEntry
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 11
+---Public TypeAlias
+
+An entry containing changes that originated either by user actions or remote changes.
+
+
+##### Signature
+
+
+```ts
+type HistoryEntry = {
+ changes: RecordsDiff
+ source: ChangeSource
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [RecordsDiff](/gen/store/RecordsDiff-type), [ChangeSource](/gen/store/~ChangeSource-type)
+
diff --git a/docs/gen/INDENT-var.mdx b/docs/gen/INDENT-var.mdx
new file mode 100644
index 000000000..5759218c1
--- /dev/null
+++ b/docs/gen/INDENT-var.mdx
@@ -0,0 +1,20 @@
+---
+title: INDENT
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 70
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+INDENT = ' '
+```
+
diff --git a/docs/gen/Icon-var.mdx b/docs/gen/Icon-var.mdx
new file mode 100644
index 000000000..97c096542
--- /dev/null
+++ b/docs/gen/Icon-var.mdx
@@ -0,0 +1,24 @@
+---
+title: Icon
+status: published
+category: ui
+group: Variable
+author: api
+date: 06/23/2023
+order: 7
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+Icon: import('react').NamedExoticComponent
+```
+
+##### References
+
+[NamedExoticComponent](/gen/@types/react-React-NamedExoticComponent-interface), [TLUiIconProps](/gen/ui/TLUiIconProps-interface)
+
diff --git a/docs/gen/IdOf-type.mdx b/docs/gen/IdOf-type.mdx
new file mode 100644
index 000000000..a191d4ec3
--- /dev/null
+++ b/docs/gen/IdOf-type.mdx
@@ -0,0 +1,24 @@
+---
+title: IdOf
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 12
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type IdOf = R['id']
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type)
+
diff --git a/docs/gen/ImageShape-var.mdx b/docs/gen/ImageShape-var.mdx
new file mode 100644
index 000000000..a4790b914
--- /dev/null
+++ b/docs/gen/ImageShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: ImageShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 68
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ImageShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLImageShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLImageShape](/gen/tlschema/TLImageShape-type)
+
diff --git a/docs/gen/ImageShapeUtil-class.mdx b/docs/gen/ImageShapeUtil-class.mdx
new file mode 100644
index 000000000..96dab4053
--- /dev/null
+++ b/docs/gen/ImageShapeUtil-class.mdx
@@ -0,0 +1,260 @@
+---
+title: ImageShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 69
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canCrop](#ImageShapeUtil-canCrop-member)
+ - [isAspectRatioLocked](#ImageShapeUtil-isAspectRatioLocked-member)
+ - [onDoubleClick](#ImageShapeUtil-onDoubleClick-member)
+ - [onDoubleClickEdge](#ImageShapeUtil-onDoubleClickEdge-member)
+ - [type](#ImageShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#ImageShapeUtil-component-member-1)
+ - [getDefaultProps](#ImageShapeUtil-getDefaultProps-member-1)
+ - [indicator](#ImageShapeUtil-indicator-member-1)
+ - [toSvg](#ImageShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class ImageShapeUtil extends BaseBoxShapeUtil {}
+```
+
+##### References
+
+[BaseBoxShapeUtil](/gen/editor/BaseBoxShapeUtil-class), [TLImageShape](/gen/tlschema/TLImageShape-type)
+
+---
+
+## Properties
+
+### `canCrop` \{#ImageShapeUtil-canCrop-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canCrop: () => boolean
+```
+
+---
+
+### `isAspectRatioLocked` \{#ImageShapeUtil-isAspectRatioLocked-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isAspectRatioLocked: () => boolean
+```
+
+---
+
+### `onDoubleClick` \{#ImageShapeUtil-onDoubleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDoubleClick: (shape: TLImageShape) => void
+```
+
+##### References
+
+[TLImageShape](/gen/tlschema/TLImageShape-type)
+
+---
+
+### `onDoubleClickEdge` \{#ImageShapeUtil-onDoubleClickEdge-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDoubleClickEdge: TLOnDoubleClickHandler
+```
+
+##### References
+
+[TLOnDoubleClickHandler](/gen/editor/TLOnDoubleClickHandler-type), [TLImageShape](/gen/tlschema/TLImageShape-type)
+
+---
+
+### `type` \{#ImageShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'image'
+```
+
+---
+
+## Methods
+
+### `component()` \{#ImageShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLImageShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLImageShape](/gen/tlschema/TLImageShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getDefaultProps()` \{#ImageShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLImageShape['props']
+```
+
+##### References
+
+[TLImageShape](/gen/tlschema/TLImageShape-type)
+
+---
+
+### `indicator()` \{#ImageShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLImageShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element | null
+```
+
+##### References
+
+[TLImageShape](/gen/tlschema/TLImageShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toSvg()` \{#ImageShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLImageShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[TLImageShape](/gen/tlschema/TLImageShape-type), [Promise](/gen/Promise-interface), [SVGGElement](/gen/SVGGElement-interface)
+
+---
+
diff --git a/docs/gen/Input-var.mdx b/docs/gen/Input-var.mdx
new file mode 100644
index 000000000..b47b0b4e6
--- /dev/null
+++ b/docs/gen/Input-var.mdx
@@ -0,0 +1,26 @@
+---
+title: Input
+status: published
+category: ui
+group: Variable
+author: api
+date: 06/23/2023
+order: 8
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+Input: React.ForwardRefExoticComponent<
+ TLUiInputProps & React.RefAttributes
+>
+```
+
+##### References
+
+[React.ForwardRefExoticComponent](/gen/@types/react-React-ForwardRefExoticComponent-interface), [TLUiInputProps](/gen/ui/TLUiInputProps-interface), [React.RefAttributes](/gen/@types/react-React-RefAttributes-interface), [HTMLInputElement](/gen/HTMLInputElement-interface)
+
diff --git a/docs/gen/InstancePageStateRecordType-var.mdx b/docs/gen/InstancePageStateRecordType-var.mdx
new file mode 100644
index 000000000..3cd994804
--- /dev/null
+++ b/docs/gen/InstancePageStateRecordType-var.mdx
@@ -0,0 +1,27 @@
+---
+title: InstancePageStateRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 35
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+InstancePageStateRecordType: import('@tldraw/store').RecordType<
+ TLInstancePageState,
+ 'pageId'
+>
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLInstancePageState](/gen/tlschema/TLInstancePageState-interface)
+
diff --git a/docs/gen/InstancePresenceRecordType-var.mdx b/docs/gen/InstancePresenceRecordType-var.mdx
new file mode 100644
index 000000000..cace3df1d
--- /dev/null
+++ b/docs/gen/InstancePresenceRecordType-var.mdx
@@ -0,0 +1,27 @@
+---
+title: InstancePresenceRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 36
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+InstancePresenceRecordType: import('@tldraw/store').RecordType<
+ TLInstancePresence,
+ 'currentPageId' | 'userId' | 'userName'
+>
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLInstancePresence](/gen/tlschema/TLInstancePresence-interface)
+
diff --git a/docs/gen/LANGUAGES-var.mdx b/docs/gen/LANGUAGES-var.mdx
new file mode 100644
index 000000000..463363409
--- /dev/null
+++ b/docs/gen/LANGUAGES-var.mdx
@@ -0,0 +1,153 @@
+---
+title: LANGUAGES
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 40
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+LANGUAGES: readonly [
+ {
+ readonly locale: 'ar'
+ readonly label: 'عربي'
+ },
+ {
+ readonly locale: 'ca'
+ readonly label: 'Català'
+ },
+ {
+ readonly locale: 'da'
+ readonly label: 'Danish'
+ },
+ {
+ readonly locale: 'de'
+ readonly label: 'Deutsch'
+ },
+ {
+ readonly locale: 'en'
+ readonly label: 'English'
+ },
+ {
+ readonly locale: 'es'
+ readonly label: 'Español'
+ },
+ {
+ readonly locale: 'fa'
+ readonly label: 'فارسی'
+ },
+ {
+ readonly locale: 'fi'
+ readonly label: 'Suomi'
+ },
+ {
+ readonly locale: 'fr'
+ readonly label: 'Français'
+ },
+ {
+ readonly locale: 'gl'
+ readonly label: 'Galego'
+ },
+ {
+ readonly locale: 'he'
+ readonly label: 'עברית'
+ },
+ {
+ readonly locale: 'it'
+ readonly label: 'Italiano'
+ },
+ {
+ readonly locale: 'ja'
+ readonly label: '日本語'
+ },
+ {
+ readonly locale: 'ko-kr'
+ readonly label: '한국어'
+ },
+ {
+ readonly locale: 'ku'
+ readonly label: 'کوردی'
+ },
+ {
+ readonly locale: 'hi-in'
+ readonly label: 'हिन्दी'
+ },
+ {
+ readonly locale: 'hu'
+ readonly label: 'Magyar'
+ },
+ {
+ readonly locale: 'my'
+ readonly label: 'မြန်မာစာ'
+ },
+ {
+ readonly locale: 'ne'
+ readonly label: 'नेपाली'
+ },
+ {
+ readonly locale: 'no'
+ readonly label: 'Norwegian'
+ },
+ {
+ readonly locale: 'pl'
+ readonly label: 'Polski'
+ },
+ {
+ readonly locale: 'pt-br'
+ readonly label: 'Português - Brasil'
+ },
+ {
+ readonly locale: 'pt-pt'
+ readonly label: 'Português - Europeu'
+ },
+ {
+ readonly locale: 'ro'
+ readonly label: 'Română'
+ },
+ {
+ readonly locale: 'ru'
+ readonly label: 'Russian'
+ },
+ {
+ readonly locale: 'sv'
+ readonly label: 'Svenska'
+ },
+ {
+ readonly locale: 'te'
+ readonly label: 'తెలుగు'
+ },
+ {
+ readonly locale: 'th'
+ readonly label: 'ภาษาไทย'
+ },
+ {
+ readonly locale: 'tr'
+ readonly label: 'Türkçe'
+ },
+ {
+ readonly locale: 'uk'
+ readonly label: 'Ukrainian'
+ },
+ {
+ readonly locale: 'vi'
+ readonly label: 'Tiếng Việt'
+ },
+ {
+ readonly locale: 'zh-cn'
+ readonly label: 'Chinese - Simplified'
+ },
+ {
+ readonly locale: 'zh-tw'
+ readonly label: '繁體中文 (台灣)'
+ }
+]
+```
+
diff --git a/docs/gen/LineSegment2d-class.mdx b/docs/gen/LineSegment2d-class.mdx
new file mode 100644
index 000000000..4d936e0ac
--- /dev/null
+++ b/docs/gen/LineSegment2d-class.mdx
@@ -0,0 +1,556 @@
+---
+title: LineSegment2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 50
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [a](#LineSegment2d-a-member)
+ - [angle](#LineSegment2d-angle-member)
+ - [b](#LineSegment2d-b-member)
+ - [bounds](#LineSegment2d-bounds-member)
+ - [length](#LineSegment2d-length-member)
+ - [tangent](#LineSegment2d-tangent-member)
+- [Methods](#methods)
+ - [Angle](#LineSegment2d-Angle-member-1)
+ - [getClosestPointTo](#LineSegment2d-getClosestPointTo-member-1)
+ - [getNormal](#LineSegment2d-getNormal-member-1)
+ - [getPath](#LineSegment2d-getPath-member-1)
+ - [getPoint](#LineSegment2d-getPoint-member-1)
+ - [getX](#LineSegment2d-getX-member-1)
+ - [getY](#LineSegment2d-getY-member-1)
+ - [Length](#LineSegment2d-Length-member-1)
+ - [Tangent](#LineSegment2d-Tangent-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class LineSegment2d extends BaseSegment2d {}
+```
+
+##### References
+
+[BaseSegment2d](/gen/primitives/~BaseSegment2d-class), [LineSegment2dModel](/gen/primitives/LineSegment2dModel-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `LineSegment2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`a`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`b`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+## Properties
+
+### `a` \{#LineSegment2d-a-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+a: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `angle` \{#LineSegment2d-angle-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get angle(): number
+```
+
+---
+
+### `b` \{#LineSegment2d-b-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+b: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `bounds` \{#LineSegment2d-bounds-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get bounds(): Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `length` \{#LineSegment2d-length-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get length(): number
+```
+
+---
+
+### `tangent` \{#LineSegment2d-tangent-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get tangent(): Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+## Methods
+
+### `Angle()` \{#LineSegment2d-Angle-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+LineSegment2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[LineSegment2d](/gen/primitives/LineSegment2d-class)
+
+---
+
+### `getClosestPointTo()` \{#LineSegment2d-getClosestPointTo-member-1}
+
+Public Method
+
+Get the closest point on the segment to an arbitrary point.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The arbitrary point.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ point: Vec2d
+ distance: number
+}
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getNormal()` \{#LineSegment2d-getNormal-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getPath()` \{#LineSegment2d-getPath-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`head`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+---
+
+### `getPoint()` \{#LineSegment2d-getPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getX()` \{#LineSegment2d-getX-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+---
+
+### `getY()` \{#LineSegment2d-getY-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`t`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+---
+
+### `Length()` \{#LineSegment2d-Length-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+LineSegment2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[LineSegment2d](/gen/primitives/LineSegment2d-class)
+
+---
+
+### `Tangent()` \{#LineSegment2d-Tangent-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+LineSegment2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[LineSegment2d](/gen/primitives/LineSegment2d-class), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
diff --git a/docs/gen/LineSegment2dModel-interface.mdx b/docs/gen/LineSegment2dModel-interface.mdx
new file mode 100644
index 000000000..a7e17d104
--- /dev/null
+++ b/docs/gen/LineSegment2dModel-interface.mdx
@@ -0,0 +1,79 @@
+---
+title: LineSegment2dModel
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 51
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [a](#LineSegment2dModel-a-member)
+ - [b](#LineSegment2dModel-b-member)
+ - [p](#LineSegment2dModel-p-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface LineSegment2dModel {}
+```
+
+---
+
+## Properties
+
+### `a` \{#LineSegment2dModel-a-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+a: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `b` \{#LineSegment2dModel-b-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+b: VecLike
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `p` \{#LineSegment2dModel-p-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+p: number
+```
+
+---
+
diff --git a/docs/gen/LineShape-var.mdx b/docs/gen/LineShape-var.mdx
new file mode 100644
index 000000000..45487c80c
--- /dev/null
+++ b/docs/gen/LineShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: LineShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 78
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+LineShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLLineShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLLineShape](/gen/tlschema/TLLineShape-type)
+
diff --git a/docs/gen/LineShapeSplineStyle-var.mdx b/docs/gen/LineShapeSplineStyle-var.mdx
new file mode 100644
index 000000000..98a2fac43
--- /dev/null
+++ b/docs/gen/LineShapeSplineStyle-var.mdx
@@ -0,0 +1,26 @@
+---
+title: LineShapeSplineStyle
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 42
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+LineShapeSplineStyle: import('../styles/StyleProp').EnumStyleProp<
+ 'cubic' | 'line'
+>
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
diff --git a/docs/gen/LineShapeUtil-class.mdx b/docs/gen/LineShapeUtil-class.mdx
new file mode 100644
index 000000000..89977348f
--- /dev/null
+++ b/docs/gen/LineShapeUtil-class.mdx
@@ -0,0 +1,628 @@
+---
+title: LineShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 79
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [hideResizeHandles](#LineShapeUtil-hideResizeHandles-member)
+ - [hideRotateHandle](#LineShapeUtil-hideRotateHandle-member)
+ - [hideSelectionBoundsBg](#LineShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#LineShapeUtil-hideSelectionBoundsFg-member)
+ - [isClosed](#LineShapeUtil-isClosed-member)
+ - [onHandleChange](#LineShapeUtil-onHandleChange-member)
+ - [onResize](#LineShapeUtil-onResize-member)
+ - [type](#LineShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#LineShapeUtil-component-member-1)
+ - [getBounds](#LineShapeUtil-getBounds-member-1)
+ - [getDefaultProps](#LineShapeUtil-getDefaultProps-member-1)
+ - [getHandles](#LineShapeUtil-getHandles-member-1)
+ - [getOutline](#LineShapeUtil-getOutline-member-1)
+ - [getOutlineSegments](#LineShapeUtil-getOutlineSegments-member-1)
+ - [hitTestLineSegment](#LineShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#LineShapeUtil-hitTestPoint-member-1)
+ - [indicator](#LineShapeUtil-indicator-member-1)
+ - [toSvg](#LineShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class LineShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLLineShape](/gen/tlschema/TLLineShape-type)
+
+---
+
+## Properties
+
+### `hideResizeHandles` \{#LineShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideResizeHandles: () => boolean
+```
+
+---
+
+### `hideRotateHandle` \{#LineShapeUtil-hideRotateHandle-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideRotateHandle: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsBg` \{#LineShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsFg` \{#LineShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: () => boolean
+```
+
+---
+
+### `isClosed` \{#LineShapeUtil-isClosed-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isClosed: () => boolean
+```
+
+---
+
+### `onHandleChange` \{#LineShapeUtil-onHandleChange-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onHandleChange: TLOnHandleChangeHandler
+```
+
+##### References
+
+[TLOnHandleChangeHandler](/gen/editor/TLOnHandleChangeHandler-type), [TLLineShape](/gen/tlschema/TLLineShape-type)
+
+---
+
+### `onResize` \{#LineShapeUtil-onResize-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onResize: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type), [TLLineShape](/gen/tlschema/TLLineShape-type)
+
+---
+
+### `type` \{#LineShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'line'
+```
+
+---
+
+## Methods
+
+### `component()` \{#LineShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element | undefined
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getBounds()` \{#LineShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+import('@tldraw/primitives').Box2d
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getDefaultProps()` \{#LineShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLLineShape['props']
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type)
+
+---
+
+### `getHandles()` \{#LineShapeUtil-getHandles-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLHandle[]
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [TLHandle](/gen/tlschema/TLHandle-interface)
+
+---
+
+### `getOutline()` \{#LineShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineSegments()` \{#LineShapeUtil-getOutlineSegments-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[][]
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `hitTestLineSegment()` \{#LineShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#LineShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+Vec2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `indicator()` \{#LineShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toSvg()` \{#LineShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLLineShape
+```
+
+
+
+
+
+
+
+
+`_font`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGGElement
+```
+
+##### References
+
+[TLLineShape](/gen/tlschema/TLLineShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGGElement](/gen/SVGGElement-interface)
+
+---
+
diff --git a/docs/gen/LoadingScreen-function-1.mdx b/docs/gen/LoadingScreen-function-1.mdx
new file mode 100644
index 000000000..216971520
--- /dev/null
+++ b/docs/gen/LoadingScreen-function-1.mdx
@@ -0,0 +1,49 @@
+---
+title: LoadingScreen
+status: published
+category: editor
+group: Function
+author: api
+date: 06/23/2023
+order: 80
+---Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children }`
+
+
+
+
+```ts
+{
+ children: any
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/MatLike-type.mdx b/docs/gen/MatLike-type.mdx
new file mode 100644
index 000000000..ac7432afd
--- /dev/null
+++ b/docs/gen/MatLike-type.mdx
@@ -0,0 +1,24 @@
+---
+title: MatLike
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 54
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type MatLike = Matrix2d | Matrix2dModel
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class), [Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
diff --git a/docs/gen/Matrix2d-class.mdx b/docs/gen/Matrix2d-class.mdx
new file mode 100644
index 000000000..f730acffb
--- /dev/null
+++ b/docs/gen/Matrix2d-class.mdx
@@ -0,0 +1,1530 @@
+---
+title: Matrix2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 55
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [a](#Matrix2d-a-member)
+ - [b](#Matrix2d-b-member)
+ - [c](#Matrix2d-c-member)
+ - [d](#Matrix2d-d-member)
+ - [e](#Matrix2d-e-member)
+ - [f](#Matrix2d-f-member)
+ - [Scale](#Matrix2d-Scale-member)
+- [Methods](#methods)
+ - [Absolute](#Matrix2d-Absolute-member-1)
+ - [applyToBounds](#Matrix2d-applyToBounds-member-1)
+ - [applyToPoint](#Matrix2d-applyToPoint-member-1)
+ - [applyToPoint](#Matrix2d-applyToPoint-member-1)
+ - [applyToPoints](#Matrix2d-applyToPoints-member-1)
+ - [applyToPoints](#Matrix2d-applyToPoints-member-1)
+ - [applyToXY](#Matrix2d-applyToXY-member-1)
+ - [clone](#Matrix2d-clone-member-1)
+ - [Compose](#Matrix2d-Compose-member-1)
+ - [decompose](#Matrix2d-decompose-member-1)
+ - [Decompose](#Matrix2d-Decompose-member-1)
+ - [decomposed](#Matrix2d-decomposed-member-1)
+ - [equals](#Matrix2d-equals-member-1)
+ - [From](#Matrix2d-From-member-1)
+ - [identity](#Matrix2d-identity-member-1)
+ - [Identity](#Matrix2d-Identity-member-1)
+ - [Inverse](#Matrix2d-Inverse-member-1)
+ - [invert](#Matrix2d-invert-member-1)
+ - [multiply](#Matrix2d-multiply-member-1)
+ - [Multiply](#Matrix2d-Multiply-member-1)
+ - [rotate](#Matrix2d-rotate-member-1)
+ - [Rotate](#Matrix2d-Rotate-member-1)
+ - [scale](#Matrix2d-scale-member-1)
+ - [setTo](#Matrix2d-setTo-member-1)
+ - [Smooth](#Matrix2d-Smooth-member-1)
+ - [toCssString](#Matrix2d-toCssString-member-1)
+ - [toCssString](#Matrix2d-toCssString-member-1)
+ - [translate](#Matrix2d-translate-member-1)
+ - [Translate](#Matrix2d-Translate-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class Matrix2d {}
+```
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `Matrix2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`a`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`b`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`c`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`d`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`e`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`f`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+---
+
+## Properties
+
+### `a` \{#Matrix2d-a-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+a: number
+```
+
+---
+
+### `b` \{#Matrix2d-b-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+b: number
+```
+
+---
+
+### `c` \{#Matrix2d-c-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+c: number
+```
+
+---
+
+### `d` \{#Matrix2d-d-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+d: number
+```
+
+---
+
+### `e` \{#Matrix2d-e-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+e: number
+```
+
+---
+
+### `f` \{#Matrix2d-f-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+f: number
+```
+
+---
+
+### `Scale` \{#Matrix2d-Scale-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static Scale: {
+ (x: number, y: number): Matrix2dModel
+ (x: number, y: number, cx: number, cy: number): Matrix2dModel
+}
+```
+
+##### References
+
+[Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+## Methods
+
+### `Absolute()` \{#Matrix2d-Absolute-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2dModel
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `applyToBounds()` \{#Matrix2d-applyToBounds-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+
+`box`
+
+
+
+
+```ts
+Box2d
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `applyToPoint()` \{#Matrix2d-applyToPoint-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `applyToPoint()` \{#Matrix2d-applyToPoint-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `applyToPoints()` \{#Matrix2d-applyToPoints-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `applyToPoints()` \{#Matrix2d-applyToPoints-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [VecLike](/gen/primitives/VecLike-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `applyToXY()` \{#Matrix2d-applyToXY-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number[]
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type)
+
+---
+
+### `clone()` \{#Matrix2d-clone-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `Compose()` \{#Matrix2d-Compose-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`matrices`
+
+
+
+
+```ts
+MatLike[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `decompose()` \{#Matrix2d-decompose-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+MatrixInfo
+```
+
+##### References
+
+[MatrixInfo](/gen/primitives/MatrixInfo-interface)
+
+---
+
+### `Decompose()` \{#Matrix2d-Decompose-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+MatrixInfo
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [MatrixInfo](/gen/primitives/MatrixInfo-interface)
+
+---
+
+### `decomposed()` \{#Matrix2d-decomposed-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+MatrixInfo
+```
+
+##### References
+
+[MatrixInfo](/gen/primitives/MatrixInfo-interface)
+
+---
+
+### `equals()` \{#Matrix2d-equals-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+Matrix2d | Matrix2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class), [Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `From()` \{#Matrix2d-From-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type), [Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `identity()` \{#Matrix2d-identity-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `Identity()` \{#Matrix2d-Identity-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `Inverse()` \{#Matrix2d-Inverse-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+Matrix2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2dModel
+```
+
+##### References
+
+[Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `invert()` \{#Matrix2d-invert-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `multiply()` \{#Matrix2d-multiply-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+Matrix2d | Matrix2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class), [Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `Multiply()` \{#Matrix2d-Multiply-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m1`
+
+
+
+
+```ts
+Matrix2dModel
+```
+
+
+
+
+
+
+
+
+`m2`
+
+
+
+
+```ts
+Matrix2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2dModel
+```
+
+##### References
+
+[Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `rotate()` \{#Matrix2d-rotate-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`r`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`cx`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`cy`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `Rotate()` \{#Matrix2d-Rotate-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`r`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`cx`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`cy`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `scale()` \{#Matrix2d-scale-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
+### `setTo()` \{#Matrix2d-setTo-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`model`
+
+
+
+
+```ts
+Matrix2dModel
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+##### References
+
+[Matrix2dModel](/gen/primitives/Matrix2dModel-interface)
+
+---
+
+### `Smooth()` \{#Matrix2d-Smooth-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+
+`precision`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+MatLike
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type)
+
+---
+
+### `toCssString()` \{#Matrix2d-toCssString-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+string
+```
+
+---
+
+### `toCssString()` \{#Matrix2d-toCssString-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`m`
+
+
+
+
+```ts
+MatLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+##### References
+
+[MatLike](/gen/primitives/MatLike-type)
+
+---
+
+### `translate()` \{#Matrix2d-translate-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
+### `Translate()` \{#Matrix2d-Translate-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`x`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`y`
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Matrix2d
+```
+
+##### References
+
+[Matrix2d](/gen/primitives/Matrix2d-class)
+
+---
+
diff --git a/docs/gen/Matrix2dModel-interface.mdx b/docs/gen/Matrix2dModel-interface.mdx
new file mode 100644
index 000000000..85d5a04ca
--- /dev/null
+++ b/docs/gen/Matrix2dModel-interface.mdx
@@ -0,0 +1,113 @@
+---
+title: Matrix2dModel
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 56
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [a](#Matrix2dModel-a-member)
+ - [b](#Matrix2dModel-b-member)
+ - [c](#Matrix2dModel-c-member)
+ - [d](#Matrix2dModel-d-member)
+ - [e](#Matrix2dModel-e-member)
+ - [f](#Matrix2dModel-f-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface Matrix2dModel {}
+```
+
+---
+
+## Properties
+
+### `a` \{#Matrix2dModel-a-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+a: number
+```
+
+---
+
+### `b` \{#Matrix2dModel-b-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+b: number
+```
+
+---
+
+### `c` \{#Matrix2dModel-c-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+c: number
+```
+
+---
+
+### `d` \{#Matrix2dModel-d-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+d: number
+```
+
+---
+
+### `e` \{#Matrix2dModel-e-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+e: number
+```
+
+---
+
+### `f` \{#Matrix2dModel-f-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+f: number
+```
+
+---
+
diff --git a/docs/gen/MatrixInfo-interface.mdx b/docs/gen/MatrixInfo-interface.mdx
new file mode 100644
index 000000000..729fbd42e
--- /dev/null
+++ b/docs/gen/MatrixInfo-interface.mdx
@@ -0,0 +1,99 @@
+---
+title: MatrixInfo
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 57
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [rotation](#MatrixInfo-rotation-member)
+ - [scaleX](#MatrixInfo-scaleX-member)
+ - [scaleY](#MatrixInfo-scaleY-member)
+ - [x](#MatrixInfo-x-member)
+ - [y](#MatrixInfo-y-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface MatrixInfo {}
+```
+
+---
+
+## Properties
+
+### `rotation` \{#MatrixInfo-rotation-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+rotation: number
+```
+
+---
+
+### `scaleX` \{#MatrixInfo-scaleX-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+scaleX: number
+```
+
+---
+
+### `scaleY` \{#MatrixInfo-scaleY-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+scaleY: number
+```
+
+---
+
+### `x` \{#MatrixInfo-x-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+x: number
+```
+
+---
+
+### `y` \{#MatrixInfo-y-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+y: number
+```
+
+---
+
diff --git a/docs/gen/Migration-type.mdx b/docs/gen/Migration-type.mdx
new file mode 100644
index 000000000..ba6c22ba3
--- /dev/null
+++ b/docs/gen/Migration-type.mdx
@@ -0,0 +1,23 @@
+---
+title: Migration
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 15
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type Migration = {
+ up: (oldState: Before) => After
+ down: (newState: After) => Before
+}
+```
+
diff --git a/docs/gen/MigrationFailureReason-enum.mdx b/docs/gen/MigrationFailureReason-enum.mdx
new file mode 100644
index 000000000..8e82aa5cd
--- /dev/null
+++ b/docs/gen/MigrationFailureReason-enum.mdx
@@ -0,0 +1,20 @@
+---
+title: MigrationFailureReason
+status: published
+category: store
+group: Enum
+author: api
+date: 06/23/2023
+order: 16
+---Public Enum
+
+
+
+
+##### Signature
+
+
+```ts
+enum MigrationFailureReason {}
+```
+
diff --git a/docs/gen/MigrationResult-type.mdx b/docs/gen/MigrationResult-type.mdx
new file mode 100644
index 000000000..391ad776e
--- /dev/null
+++ b/docs/gen/MigrationResult-type.mdx
@@ -0,0 +1,32 @@
+---
+title: MigrationResult
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 17
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type MigrationResult =
+ | {
+ type: 'error'
+ reason: MigrationFailureReason
+ }
+ | {
+ type: 'success'
+ value: T
+ }
+```
+
+##### References
+
+[MigrationFailureReason](/gen/store/MigrationFailureReason-enum)
+
diff --git a/docs/gen/Migrations-interface.mdx b/docs/gen/Migrations-interface.mdx
new file mode 100644
index 000000000..55114259a
--- /dev/null
+++ b/docs/gen/Migrations-interface.mdx
@@ -0,0 +1,65 @@
+---
+title: Migrations
+status: published
+category: store
+group: Interface
+author: api
+date: 06/23/2023
+order: 18
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [subTypeKey](#Migrations-subTypeKey-member)
+ - [subTypeMigrations](#Migrations-subTypeMigrations-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface Migrations extends BaseMigrationsInfo {}
+```
+
+##### References
+
+[BaseMigrationsInfo](/gen/store/~BaseMigrationsInfo-interface)
+
+---
+
+## Properties
+
+### `subTypeKey` \{#Migrations-subTypeKey-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+subTypeKey?: string
+```
+
+---
+
+### `subTypeMigrations` \{#Migrations-subTypeMigrations-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+subTypeMigrations?: Record
+```
+
+##### References
+
+[Record](/gen/Record-type), [BaseMigrationsInfo](/gen/store/~BaseMigrationsInfo-interface)
+
+---
+
diff --git a/docs/gen/NoteShape-var.mdx b/docs/gen/NoteShape-var.mdx
new file mode 100644
index 000000000..c625641e6
--- /dev/null
+++ b/docs/gen/NoteShape-var.mdx
@@ -0,0 +1,26 @@
+---
+title: NoteShape
+status: published
+category: editor
+group: Variable
+author: api
+date: 06/23/2023
+order: 86
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+NoteShape: import('../../../config/defineShape').TLShapeInfo<
+ import('@tldraw/tlschema').TLNoteShape
+>
+```
+
+##### References
+
+[TLShapeInfo](/gen/editor/TLShapeInfo-type), [TLNoteShape](/gen/tlschema/TLNoteShape-type)
+
diff --git a/docs/gen/NoteShapeUtil-class.mdx b/docs/gen/NoteShapeUtil-class.mdx
new file mode 100644
index 000000000..5e07f3f54
--- /dev/null
+++ b/docs/gen/NoteShapeUtil-class.mdx
@@ -0,0 +1,587 @@
+---
+title: NoteShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 87
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canEdit](#NoteShapeUtil-canEdit-member)
+ - [hideResizeHandles](#NoteShapeUtil-hideResizeHandles-member)
+ - [hideSelectionBoundsBg](#NoteShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#NoteShapeUtil-hideSelectionBoundsFg-member)
+ - [onBeforeCreate](#NoteShapeUtil-onBeforeCreate-member)
+ - [onBeforeUpdate](#NoteShapeUtil-onBeforeUpdate-member)
+ - [onEditEnd](#NoteShapeUtil-onEditEnd-member)
+ - [type](#NoteShapeUtil-type-member)
+- [Methods](#methods)
+ - [component](#NoteShapeUtil-component-member-1)
+ - [getBounds](#NoteShapeUtil-getBounds-member-1)
+ - [getCenter](#NoteShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#NoteShapeUtil-getDefaultProps-member-1)
+ - [getHeight](#NoteShapeUtil-getHeight-member-1)
+ - [getOutline](#NoteShapeUtil-getOutline-member-1)
+ - [indicator](#NoteShapeUtil-indicator-member-1)
+ - [toSvg](#NoteShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class NoteShapeUtil extends ShapeUtil {}
+```
+
+##### References
+
+[ShapeUtil](/gen/editor/ShapeUtil-class), [TLNoteShape](/gen/tlschema/TLNoteShape-type)
+
+---
+
+## Properties
+
+### `canEdit` \{#NoteShapeUtil-canEdit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+canEdit: () => boolean
+```
+
+---
+
+### `hideResizeHandles` \{#NoteShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideResizeHandles: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsBg` \{#NoteShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: () => boolean
+```
+
+---
+
+### `hideSelectionBoundsFg` \{#NoteShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: () => boolean
+```
+
+---
+
+### `onBeforeCreate` \{#NoteShapeUtil-onBeforeCreate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeCreate: (next: TLNoteShape) =>
+ | {
+ props: {
+ growY: number
+ color:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ size: 'l' | 'm' | 's' | 'xl'
+ font: 'draw' | 'mono' | 'sans' | 'serif'
+ align:
+ | 'end-legacy'
+ | 'end'
+ | 'middle-legacy'
+ | 'middle'
+ | 'start-legacy'
+ | 'start'
+ verticalAlign: 'end' | 'middle' | 'start'
+ url: string
+ text: string
+ }
+ type: 'note'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | undefined
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `onBeforeUpdate` \{#NoteShapeUtil-onBeforeUpdate-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onBeforeUpdate: (
+ prev: TLNoteShape,
+ next: TLNoteShape
+) =>
+ | {
+ props: {
+ growY: number
+ color:
+ | 'black'
+ | 'blue'
+ | 'green'
+ | 'grey'
+ | 'light-blue'
+ | 'light-green'
+ | 'light-red'
+ | 'light-violet'
+ | 'orange'
+ | 'red'
+ | 'violet'
+ | 'yellow'
+ size: 'l' | 'm' | 's' | 'xl'
+ font: 'draw' | 'mono' | 'sans' | 'serif'
+ align:
+ | 'end-legacy'
+ | 'end'
+ | 'middle-legacy'
+ | 'middle'
+ | 'start-legacy'
+ | 'start'
+ verticalAlign: 'end' | 'middle' | 'start'
+ url: string
+ text: string
+ }
+ type: 'note'
+ x: number
+ y: number
+ rotation: number
+ index: string
+ parentId: import('@tldraw/tlschema').TLParentId
+ isLocked: boolean
+ opacity: number
+ id: import('@tldraw/tlschema').TLShapeId
+ typeName: 'shape'
+ }
+ | undefined
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [TLParentId](/gen/tlschema/TLParentId-type), [TLShapeId](/gen/tlschema/TLShapeId-type)
+
+---
+
+### `onEditEnd` \{#NoteShapeUtil-onEditEnd-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onEditEnd: TLOnEditEndHandler
+```
+
+##### References
+
+[TLOnEditEndHandler](/gen/editor/TLOnEditEndHandler-type), [TLNoteShape](/gen/tlschema/TLNoteShape-type)
+
+---
+
+### `type` \{#NoteShapeUtil-type-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static type: 'note'
+```
+
+---
+
+## Methods
+
+### `component()` \{#NoteShapeUtil-component-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `getBounds()` \{#NoteShapeUtil-getBounds-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#NoteShapeUtil-getCenter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`_shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#NoteShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+TLNoteShape['props']
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type)
+
+---
+
+### `getHeight()` \{#NoteShapeUtil-getHeight-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+number
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type)
+
+---
+
+### `getOutline()` \{#NoteShapeUtil-getOutline-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `indicator()` \{#NoteShapeUtil-indicator-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
+---
+
+### `toSvg()` \{#NoteShapeUtil-toSvg-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLNoteShape
+```
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SVGGElement
+```
+
+##### References
+
+[TLNoteShape](/gen/tlschema/TLNoteShape-type), [TLExportColors](/gen/editor/~TLExportColors-type), [SVGGElement](/gen/SVGGElement-interface)
+
+---
+
diff --git a/docs/gen/PI-var.mdx b/docs/gen/PI-var.mdx
new file mode 100644
index 000000000..71ec846c1
--- /dev/null
+++ b/docs/gen/PI-var.mdx
@@ -0,0 +1,20 @@
+---
+title: PI
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 59
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+PI: number
+```
+
diff --git a/docs/gen/PI2-var.mdx b/docs/gen/PI2-var.mdx
new file mode 100644
index 000000000..2de68a76c
--- /dev/null
+++ b/docs/gen/PI2-var.mdx
@@ -0,0 +1,20 @@
+---
+title: PI2
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 60
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+PI2: number
+```
+
diff --git a/docs/gen/PageRecordType-var.mdx b/docs/gen/PageRecordType-var.mdx
new file mode 100644
index 000000000..db89b535c
--- /dev/null
+++ b/docs/gen/PageRecordType-var.mdx
@@ -0,0 +1,24 @@
+---
+title: PageRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 44
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+PageRecordType: import('@tldraw/store').RecordType
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLPage](/gen/tlschema/TLPage-interface)
+
diff --git a/docs/gen/PlopManager-class.mdx b/docs/gen/PlopManager-class.mdx
new file mode 100644
index 000000000..4f4b25334
--- /dev/null
+++ b/docs/gen/PlopManager-class.mdx
@@ -0,0 +1,704 @@
+---
+title: PlopManager
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 89
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [editor](#PlopManager-editor-member)
+ - [handleContent](#PlopManager-handleContent-member)
+ - [handleUrl](#PlopManager-handleUrl-member)
+- [Methods](#methods)
+ - [createAssetFromFile](#PlopManager-createAssetFromFile-member-1)
+ - [createAssetFromUrl](#PlopManager-createAssetFromUrl-member-1)
+ - [createShapesForAssets](#PlopManager-createShapesForAssets-member-1)
+ - [handleEmbed](#PlopManager-handleEmbed-member-1)
+ - [handleFiles](#PlopManager-handleFiles-member-1)
+ - [handleSvgText](#PlopManager-handleSvgText-member-1)
+ - [handleText](#PlopManager-handleText-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class ExternalContentManager {}
+```
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `ExternalContentManager` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+##### References
+
+[Editor](/gen/editor/Editor-class)
+
+---
+
+## Properties
+
+### `editor` \{#PlopManager-editor-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+editor: Editor
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class)
+
+---
+
+### `handleContent` \{#PlopManager-handleContent-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+handleContent: (info: TLExternalContent) => Promise
+```
+
+##### References
+
+[TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `handleUrl` \{#PlopManager-handleUrl-member}
+
+Public Property
+
+Handle urls from an external source. Feeling lucky? Overwrite this at runtime to change the way this type of external content is handled.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.this.handleUrl = myCustomMethod
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+The editor instance
+
+
+
+
+
+
+
+
+
+`info`
+
+
+
+
+The info object describing the external content.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+handleUrl: (
+ editor: Editor,
+ {
+ point,
+ url,
+ }: Extract<
+ TLExternalContent,
+ {
+ type: 'url'
+ }
+ >
+) => Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Extract](/gen/Extract-type), [TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+## Methods
+
+### `createAssetFromFile()` \{#PlopManager-createAssetFromFile-member-1}
+
+Public Method
+
+Override this method to change how assets are created from files.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`_editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+
+`file`
+
+
+
+
+```ts
+File
+```
+
+The file to create the asset from.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [File](/gen/File-interface), [Promise](/gen/Promise-interface), [TLAsset](/gen/tlschema/TLAsset-type)
+
+---
+
+### `createAssetFromUrl()` \{#PlopManager-createAssetFromUrl-member-1}
+
+Public Method
+
+Override me to change the way assets are created from urls.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`_editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+
+`url`
+
+
+
+
+```ts
+string
+```
+
+The url to create the asset from
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Promise](/gen/Promise-interface), [TLAsset](/gen/tlschema/TLAsset-type)
+
+---
+
+### `createShapesForAssets()` \{#PlopManager-createShapesForAssets-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+
+`assets`
+
+
+
+
+```ts
+TLAsset[]
+```
+
+
+
+
+
+
+
+
+`position`
+
+
+
+
+```ts
+VecLike
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [TLAsset](/gen/tlschema/TLAsset-type), [VecLike](/gen/primitives/VecLike-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `handleEmbed()` \{#PlopManager-handleEmbed-member-1}
+
+Public Method
+
+Handle embed info from an external source. Feeling lucky? Overwrite this at runtime to change the way this type of external content is handled.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.this.handleEmbed = myCustomMethod
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+The editor instance
+
+
+
+
+
+
+
+
+
+`{ point, url, embed }`
+
+
+
+
+```ts
+Extract<
+ TLExternalContent,
+ {
+ type: 'embed'
+ }
+>
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Extract](/gen/Extract-type), [TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `handleFiles()` \{#PlopManager-handleFiles-member-1}
+
+Public Method
+
+Handle files from an external source. Feeling lucky? Overwrite this at runtime to change the way this type of external content is handled.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.this.handleFiles = myCustomMethod
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+The editor instance
+
+
+
+
+
+
+
+
+
+`{ point, files }`
+
+
+
+
+```ts
+Extract<
+ TLExternalContent,
+ {
+ type: 'files'
+ }
+>
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Extract](/gen/Extract-type), [TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `handleSvgText()` \{#PlopManager-handleSvgText-member-1}
+
+Public Method
+
+Handle svg text from an external source. Feeling lucky? Overwrite this at runtime to change the way this type of external content is handled.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.this.handleSvgText = myCustomMethod
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+The editor instance.
+
+
+
+
+
+
+
+
+
+`{ point, text }`
+
+
+
+
+```ts
+Extract<
+ TLExternalContent,
+ {
+ type: 'svg-text'
+ }
+>
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Extract](/gen/Extract-type), [TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
+### `handleText()` \{#PlopManager-handleText-member-1}
+
+Public Method
+
+Handle plain text from an external source. Feeling lucky? Overwrite this at runtime to change the way this type of external content is handled.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+editor.this.handleText = myCustomMethod
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+The editor instance
+
+
+
+
+
+
+
+
+
+`{ point, text }`
+
+
+
+
+```ts
+Extract<
+ TLExternalContent,
+ {
+ type: 'text'
+ }
+>
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [Extract](/gen/Extract-type), [TLExternalContent](/gen/editor/TLExternalContent-type), [Promise](/gen/Promise-interface)
+
+---
+
diff --git a/docs/gen/PointerRecordType-var.mdx b/docs/gen/PointerRecordType-var.mdx
new file mode 100644
index 000000000..7a8e704f5
--- /dev/null
+++ b/docs/gen/PointerRecordType-var.mdx
@@ -0,0 +1,24 @@
+---
+title: PointerRecordType
+status: published
+category: tlschema
+group: Variable
+author: api
+date: 06/23/2023
+order: 46
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+PointerRecordType: import('@tldraw/store').RecordType
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class), [TLPointer](/gen/tlschema/~TLPointer-interface)
+
diff --git a/docs/gen/Polyline2d-class.mdx b/docs/gen/Polyline2d-class.mdx
new file mode 100644
index 000000000..6cfe7c0cf
--- /dev/null
+++ b/docs/gen/Polyline2d-class.mdx
@@ -0,0 +1,226 @@
+---
+title: Polyline2d
+status: published
+category: primitives
+group: Class
+author: api
+date: 06/23/2023
+order: 70
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [segments](#Polyline2d-segments-member)
+- [Methods](#methods)
+ - [FromPoints](#Polyline2d-FromPoints-member-1)
+ - [getSegmentsFromPoints](#Polyline2d-getSegmentsFromPoints-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class Polyline2d extends BaseSpline2d {}
+```
+
+##### References
+
+[BaseSpline2d](/gen/primitives/~BaseSpline2d-class), [LineSegment2dModel](/gen/primitives/LineSegment2dModel-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `Polyline2d` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+
+`k`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+## Properties
+
+### `segments` \{#Polyline2d-segments-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+segments: LineSegment2d[]
+```
+
+##### References
+
+[LineSegment2d](/gen/primitives/LineSegment2d-class)
+
+---
+
+## Methods
+
+### `FromPoints()` \{#Polyline2d-FromPoints-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Polyline2d
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [Polyline2d](/gen/primitives/Polyline2d-class)
+
+---
+
+### `getSegmentsFromPoints()` \{#Polyline2d-getSegmentsFromPoints-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`points`
+
+
+
+
+```ts
+VecLike[]
+```
+
+
+
+
+
+
+
+
+`p`
+
+ (optional)
+
+
+
+
+```ts
+number
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+LineSegment2d[]
+```
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type), [LineSegment2d](/gen/primitives/LineSegment2d-class)
+
+---
+
diff --git a/docs/gen/ROTATE_CORNER_TO_SELECTION_CORNER-var.mdx b/docs/gen/ROTATE_CORNER_TO_SELECTION_CORNER-var.mdx
new file mode 100644
index 000000000..bf9798808
--- /dev/null
+++ b/docs/gen/ROTATE_CORNER_TO_SELECTION_CORNER-var.mdx
@@ -0,0 +1,26 @@
+---
+title: ROTATE_CORNER_TO_SELECTION_CORNER
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 74
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+ROTATE_CORNER_TO_SELECTION_CORNER: {
+ readonly top_left_rotate: 'top_left'
+ readonly top_right_rotate: 'top_right'
+ readonly bottom_right_rotate: 'bottom_right'
+ readonly bottom_left_rotate: 'bottom_left'
+ readonly mobile_rotate: 'top_left'
+}
+```
+
diff --git a/docs/gen/ReadonlySharedStyleMap-class.mdx b/docs/gen/ReadonlySharedStyleMap-class.mdx
new file mode 100644
index 000000000..f859f8b5d
--- /dev/null
+++ b/docs/gen/ReadonlySharedStyleMap-class.mdx
@@ -0,0 +1,319 @@
+---
+title: ReadonlySharedStyleMap
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 91
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [map](#ReadonlySharedStyleMap-map-member)
+ - [size](#ReadonlySharedStyleMap-size-member)
+- [Methods](#methods)
+ - [[Symbol.iterator]](#ReadonlySharedStyleMap-[Symbol-iterator]-member-1)
+ - [entries](#ReadonlySharedStyleMap-entries-member-1)
+ - [equals](#ReadonlySharedStyleMap-equals-member-1)
+ - [get](#ReadonlySharedStyleMap-get-member-1)
+ - [getAsKnownValue](#ReadonlySharedStyleMap-getAsKnownValue-member-1)
+ - [keys](#ReadonlySharedStyleMap-keys-member-1)
+ - [values](#ReadonlySharedStyleMap-values-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class ReadonlySharedStyleMap {}
+```
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `ReadonlySharedStyleMap` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`entries`
+
+ (optional)
+
+
+
+
+```ts
+Iterable<
+ [StyleProp, SharedStyle]
+>
+```
+
+
+
+
+
+
+
+##### References
+
+[Iterable](/gen/Iterable-interface), [StyleProp](/gen/tlschema/StyleProp-class), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+## Properties
+
+### `map` \{#ReadonlySharedStyleMap-map-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+protected map: Map, SharedStyle>
+```
+
+##### References
+
+[Map](/gen/Map-interface), [StyleProp](/gen/tlschema/StyleProp-class), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+### `size` \{#ReadonlySharedStyleMap-size-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get size(): number
+```
+
+---
+
+## Methods
+
+### `[Symbol.iterator]()` \{#ReadonlySharedStyleMap-[Symbol-iterator]-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+IterableIterator<[StyleProp, SharedStyle]>
+```
+
+##### References
+
+[Symbol.iterator](/gen/SymbolConstructor-iterator), [IterableIterator](/gen/IterableIterator-interface), [StyleProp](/gen/tlschema/StyleProp-class), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+### `entries()` \{#ReadonlySharedStyleMap-entries-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+IterableIterator<[StyleProp, SharedStyle]>
+```
+
+##### References
+
+[IterableIterator](/gen/IterableIterator-interface), [StyleProp](/gen/tlschema/StyleProp-class), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+### `equals()` \{#ReadonlySharedStyleMap-equals-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`other`
+
+
+
+
+```ts
+ReadonlySharedStyleMap
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[ReadonlySharedStyleMap](/gen/editor/ReadonlySharedStyleMap-class)
+
+---
+
+### `get()` \{#ReadonlySharedStyleMap-get-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`prop`
+
+
+
+
+```ts
+StyleProp
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+SharedStyle | undefined
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
+### `getAsKnownValue()` \{#ReadonlySharedStyleMap-getAsKnownValue-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`prop`
+
+
+
+
+```ts
+StyleProp
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+T | undefined
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `keys()` \{#ReadonlySharedStyleMap-keys-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+IterableIterator>
+```
+
+##### References
+
+[IterableIterator](/gen/IterableIterator-interface), [StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `values()` \{#ReadonlySharedStyleMap-values-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+IterableIterator>
+```
+
+##### References
+
+[IterableIterator](/gen/IterableIterator-interface), [SharedStyle](/gen/editor/SharedStyle-type)
+
+---
+
diff --git a/docs/gen/RecordId-type.mdx b/docs/gen/RecordId-type.mdx
new file mode 100644
index 000000000..6eb4c7f71
--- /dev/null
+++ b/docs/gen/RecordId-type.mdx
@@ -0,0 +1,26 @@
+---
+title: RecordId
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 19
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type RecordId = string & {
+ __type__: R
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type)
+
diff --git a/docs/gen/RecordType-class.mdx b/docs/gen/RecordType-class.mdx
new file mode 100644
index 000000000..e4a1c3e7d
--- /dev/null
+++ b/docs/gen/RecordType-class.mdx
@@ -0,0 +1,689 @@
+---
+title: RecordType
+status: published
+category: store
+group: Class
+author: api
+date: 06/23/2023
+order: 21
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [createDefaultProperties](#RecordType-createDefaultProperties-member)
+ - [isInstance](#RecordType-isInstance-member)
+ - [migrations](#RecordType-migrations-member)
+ - [scope](#RecordType-scope-member)
+ - [typeName](#RecordType-typeName-member)
+ - [validator](#RecordType-validator-member)
+- [Methods](#methods)
+ - [clone](#RecordType-clone-member-1)
+ - [create](#RecordType-create-member-1)
+ - [createCustomId](#RecordType-createCustomId-member-1)
+ - [createId](#RecordType-createId-member-1)
+ - [isId](#RecordType-isId-member-1)
+ - [parseId](#RecordType-parseId-member-1)
+ - [validate](#RecordType-validate-member-1)
+ - [withDefaultProperties](#RecordType-withDefaultProperties-member-1)
+
+
+A record type is a type that can be stored in a record store. It is created with `createRecordType`.
+
+
+##### Signature
+
+
+```ts
+class RecordType<
+ R extends UnknownRecord,
+ RequiredProperties extends keyof Omit
+> {}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [Omit](/gen/Omit-type)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `RecordType` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`typeName`
+
+
+
+
+```ts
+R['typeName']
+```
+
+
+
+
+
+
+
+
+`config`
+
+
+
+
+```ts
+{
+ readonly createDefaultProperties: () => Exclude<
+ OmitMeta,
+ RequiredProperties
+ >
+ readonly migrations: Migrations
+ readonly validator?:
+ | {
+ validate: (r: unknown) => R
+ }
+ | StoreValidator
+ readonly scope?: RecordScope
+}
+```
+
+
+
+
+
+
+
+##### References
+
+[Exclude](/gen/Exclude-type), [OmitMeta](/gen/store/~OmitMeta-type), [Migrations](/gen/store/Migrations-interface), [StoreValidator](/gen/store/StoreValidator-type), [RecordScope](/gen/store/~RecordScope-type)
+
+---
+
+## Properties
+
+### `createDefaultProperties` \{#RecordType-createDefaultProperties-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly createDefaultProperties: () => Exclude<
+ OmitMeta,
+ RequiredProperties
+>
+```
+
+##### References
+
+[Exclude](/gen/Exclude-type), [OmitMeta](/gen/store/~OmitMeta-type)
+
+---
+
+### `isInstance` \{#RecordType-isInstance-member}
+
+Public Property
+
+Check whether a record is an instance of this record type.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const result = recordType.isInstance(someRecord)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`record`
+
+
+
+
+The record to check.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+isInstance: (record?: UnknownRecord) => record is R
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [record](/gen/store/~record)
+
+---
+
+### `migrations` \{#RecordType-migrations-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly migrations: Migrations
+```
+
+##### References
+
+[Migrations](/gen/store/Migrations-interface)
+
+---
+
+### `scope` \{#RecordType-scope-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly scope: RecordScope
+```
+
+##### References
+
+[RecordScope](/gen/store/~RecordScope-type)
+
+---
+
+### `typeName` \{#RecordType-typeName-member}
+
+Public Readonly Property
+
+The unique type associated with this record.
+
+
+
+##### Signature
+
+
+```ts
+readonly typeName: R['typeName']
+```
+
+---
+
+### `validator` \{#RecordType-validator-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly validator:
+ | {
+ validate: (r: unknown) => R
+ }
+ | StoreValidator
+```
+
+##### References
+
+[StoreValidator](/gen/store/StoreValidator-type)
+
+---
+
+## Methods
+
+### `clone()` \{#RecordType-clone-member-1}
+
+Public Method
+
+Clone a record of this type.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`record`
+
+
+
+
+```ts
+R
+```
+
+The record to clone.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+R
+```
+
+ The cloned record.
+
+
+---
+
+### `create()` \{#RecordType-create-member-1}
+
+Public Method
+
+Create a new record of this type.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`properties`
+
+
+
+
+```ts
+Pick &
+ Omit, RequiredProperties>
+```
+
+The properties of the record.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+R
+```
+
+ The new record.
+
+
+##### References
+
+[Pick](/gen/Pick-type), [Omit](/gen/Omit-type), [Partial](/gen/Partial-type)
+
+---
+
+### `createCustomId()` \{#RecordType-createCustomId-member-1}
+
+Public Method
+
+Create a new ID for this record type based on the given ID.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const id = recordType.createCustomId('myId')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+The ID to base the new ID on.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+IdOf
+```
+
+ The new ID.
+
+
+##### References
+
+[IdOf](/gen/store/IdOf-type)
+
+---
+
+### `createId()` \{#RecordType-createId-member-1}
+
+Public Method
+
+Create a new ID for this record type.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const id = recordType.createId()
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`customUniquePart`
+
+ (optional)
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+IdOf
+```
+
+ The new ID.
+
+
+##### References
+
+[IdOf](/gen/store/IdOf-type)
+
+---
+
+### `isId()` \{#RecordType-isId-member-1}
+
+Public Method
+
+Check whether an id is an id of this type.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const result = recordType.isIn('someId')
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+ (optional)
+
+
+
+
+```ts
+string
+```
+
+The id to check.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+id is IdOf
+```
+
+ Whether the id is an id of this type.
+
+
+##### References
+
+[id](/gen/store/~id), [IdOf](/gen/store/IdOf-type)
+
+---
+
+### `parseId()` \{#RecordType-parseId-member-1}
+
+Public Method
+
+Takes an id like `user:123` and returns the part after the colon `123`
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+IdOf
+```
+
+The id
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+string
+```
+
+
+
+
+##### References
+
+[IdOf](/gen/store/IdOf-type)
+
+---
+
+### `validate()` \{#RecordType-validate-member-1}
+
+Public Method
+
+Check that the passed in record passes the validations for this type. Returns its input correctly typed if it does, but throws an error otherwise.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`record`
+
+
+
+
+```ts
+unknown
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+R
+```
+
+---
+
+### `withDefaultProperties()` \{#RecordType-withDefaultProperties-member-1}
+
+Public Method
+
+Create a new RecordType that has the same type name as this RecordType and includes the given default properties.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+const authorType = createRecordType('author', () => ({ living: true }))
+const deadAuthorType = authorType.withDefaultProperties({ living: false })
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`createDefaultProperties`
+
+
+
+
+```ts
+() => DefaultProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+RecordType>
+```
+
+ The new RecordType.
+
+
+##### References
+
+[Omit](/gen/Omit-type), [Partial](/gen/Partial-type), [RecordType](/gen/store/RecordType-class), [Exclude](/gen/Exclude-type)
+
+---
+
diff --git a/docs/gen/RecordVersion-type.mdx b/docs/gen/RecordVersion-type.mdx
new file mode 100644
index 000000000..1475d63e1
--- /dev/null
+++ b/docs/gen/RecordVersion-type.mdx
@@ -0,0 +1,23 @@
+---
+title: RecordVersion
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 22
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type RecordVersion = {
+ rootVersion: number
+ subTypeVersion?: number
+}
+```
+
diff --git a/docs/gen/RecordsDiff-type.mdx b/docs/gen/RecordsDiff-type.mdx
new file mode 100644
index 000000000..0137896e2
--- /dev/null
+++ b/docs/gen/RecordsDiff-type.mdx
@@ -0,0 +1,28 @@
+---
+title: RecordsDiff
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 20
+---Public TypeAlias
+
+A diff describing the changes to a record.
+
+
+##### Signature
+
+
+```ts
+type RecordsDiff = {
+ added: Record, R>
+ updated: Record, [from: R, to: R]>
+ removed: Record, R>
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [Record](/gen/Record-type), [IdOf](/gen/store/IdOf-type)
+
diff --git a/docs/gen/RequiredKeys-type.mdx b/docs/gen/RequiredKeys-type.mdx
new file mode 100644
index 000000000..f1a841046
--- /dev/null
+++ b/docs/gen/RequiredKeys-type.mdx
@@ -0,0 +1,24 @@
+---
+title: RequiredKeys
+status: published
+category: editor
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 94
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type RequiredKeys = Pick & Partial
+```
+
+##### References
+
+[Pick](/gen/Pick-type), [Partial](/gen/Partial-type)
+
diff --git a/docs/gen/RotateCorner-type.mdx b/docs/gen/RotateCorner-type.mdx
new file mode 100644
index 000000000..948bd673c
--- /dev/null
+++ b/docs/gen/RotateCorner-type.mdx
@@ -0,0 +1,25 @@
+---
+title: RotateCorner
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 75
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type RotateCorner =
+ | 'bottom_left_rotate'
+ | 'bottom_right_rotate'
+ | 'mobile_rotate'
+ | 'top_left_rotate'
+ | 'top_right_rotate'
+```
+
diff --git a/docs/gen/SIN-var.mdx b/docs/gen/SIN-var.mdx
new file mode 100644
index 000000000..039509c12
--- /dev/null
+++ b/docs/gen/SIN-var.mdx
@@ -0,0 +1,20 @@
+---
+title: SIN
+status: published
+category: primitives
+group: Variable
+author: api
+date: 06/23/2023
+order: 84
+---Public Readonly Variable
+
+
+
+
+##### Signature
+
+
+```ts
+SIN: (x: number) => number
+```
+
diff --git a/docs/gen/SVGContainer-function-1.mdx b/docs/gen/SVGContainer-function-1.mdx
new file mode 100644
index 000000000..1fc3e3e84
--- /dev/null
+++ b/docs/gen/SVGContainer-function-1.mdx
@@ -0,0 +1,47 @@
+---
+title: SVGContainer
+status: published
+category: editor
+group: Function
+author: api
+date: 06/23/2023
+order: 103
+---Public Function
+
+
+
+
+##### Parameters
+
+
+
+
+
+
+
+`{ children, className, ...rest }`
+
+
+
+
+```ts
+SVGContainerProps
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+JSX.Element
+```
+
+##### References
+
+[SVGContainerProps](/gen/editor/SVGContainerProps-type), [JSX.Element](/gen/@types/react-__global-JSX-Element-interface)
+
diff --git a/docs/gen/SVGContainerProps-type.mdx b/docs/gen/SVGContainerProps-type.mdx
new file mode 100644
index 000000000..8307878b9
--- /dev/null
+++ b/docs/gen/SVGContainerProps-type.mdx
@@ -0,0 +1,24 @@
+---
+title: SVGContainerProps
+status: published
+category: editor
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 104
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SVGContainerProps = React.HTMLAttributes
+```
+
+##### References
+
+[React.HTMLAttributes](/gen/@types/react-React-HTMLAttributes-interface), [SVGElement](/gen/SVGElement-interface)
+
diff --git a/docs/gen/SchemaShapeInfo-type.mdx b/docs/gen/SchemaShapeInfo-type.mdx
new file mode 100644
index 000000000..debaae099
--- /dev/null
+++ b/docs/gen/SchemaShapeInfo-type.mdx
@@ -0,0 +1,32 @@
+---
+title: SchemaShapeInfo
+status: published
+category: tlschema
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 47
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SchemaShapeInfo = {
+ migrations?: Migrations
+ props?: Record<
+ string,
+ {
+ validate: (prop: any) => any
+ }
+ >
+}
+```
+
+##### References
+
+[Migrations](/gen/store/Migrations-interface), [Record](/gen/Record-type)
+
diff --git a/docs/gen/SelectionCorner-type.mdx b/docs/gen/SelectionCorner-type.mdx
new file mode 100644
index 000000000..f2753ce0c
--- /dev/null
+++ b/docs/gen/SelectionCorner-type.mdx
@@ -0,0 +1,20 @@
+---
+title: SelectionCorner
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 77
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SelectionCorner = 'bottom_left' | 'bottom_right' | 'top_left' | 'top_right'
+```
+
diff --git a/docs/gen/SelectionEdge-type.mdx b/docs/gen/SelectionEdge-type.mdx
new file mode 100644
index 000000000..cc1ff01e8
--- /dev/null
+++ b/docs/gen/SelectionEdge-type.mdx
@@ -0,0 +1,20 @@
+---
+title: SelectionEdge
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 78
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SelectionEdge = 'bottom' | 'left' | 'right' | 'top'
+```
+
diff --git a/docs/gen/SelectionHandle-type.mdx b/docs/gen/SelectionHandle-type.mdx
new file mode 100644
index 000000000..92d3b4b4c
--- /dev/null
+++ b/docs/gen/SelectionHandle-type.mdx
@@ -0,0 +1,24 @@
+---
+title: SelectionHandle
+status: published
+category: primitives
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 79
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SelectionHandle = SelectionCorner | SelectionEdge
+```
+
+##### References
+
+[SelectionCorner](/gen/primitives/SelectionCorner-type), [SelectionEdge](/gen/primitives/SelectionEdge-type)
+
diff --git a/docs/gen/SerializedSchema-interface.mdx b/docs/gen/SerializedSchema-interface.mdx
new file mode 100644
index 000000000..89782f3e5
--- /dev/null
+++ b/docs/gen/SerializedSchema-interface.mdx
@@ -0,0 +1,94 @@
+---
+title: SerializedSchema
+status: published
+category: store
+group: Interface
+author: api
+date: 06/23/2023
+order: 24
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [recordVersions](#SerializedSchema-recordVersions-member)
+ - [schemaVersion](#SerializedSchema-schemaVersion-member)
+ - [storeVersion](#SerializedSchema-storeVersion-member)
+
+
+
+
+
+##### Signature
+
+
+```ts
+interface SerializedSchema {}
+```
+
+---
+
+## Properties
+
+### `recordVersions` \{#SerializedSchema-recordVersions-member}
+
+Public PropertySignature
+
+Record versions are the versions for each record type. e.g. adding a new field to a record
+
+
+##### Signature
+
+
+```ts
+recordVersions: Record<
+ string,
+ | {
+ version: number
+ subTypeVersions: Record
+ subTypeKey: string
+ }
+ | {
+ version: number
+ }
+>
+```
+
+##### References
+
+[Record](/gen/Record-type)
+
+---
+
+### `schemaVersion` \{#SerializedSchema-schemaVersion-member}
+
+Public PropertySignature
+
+Schema version is the version for this type you're looking at right now
+
+
+##### Signature
+
+
+```ts
+schemaVersion: number
+```
+
+---
+
+### `storeVersion` \{#SerializedSchema-storeVersion-member}
+
+Public PropertySignature
+
+Store version is the version for the structure of the store. e.g. higher level structure like removing or renaming a record type.
+
+
+##### Signature
+
+
+```ts
+storeVersion: number
+```
+
+---
+
diff --git a/docs/gen/ShapeProps-type.mdx b/docs/gen/ShapeProps-type.mdx
new file mode 100644
index 000000000..92ee1eda7
--- /dev/null
+++ b/docs/gen/ShapeProps-type.mdx
@@ -0,0 +1,26 @@
+---
+title: ShapeProps
+status: published
+category: tlschema
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 49
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type ShapeProps> = {
+ [K in keyof Shape['props']]: T.Validatable
+}
+```
+
+##### References
+
+[TLBaseShape](/gen/tlschema/TLBaseShape-interface), [T.Validatable](/gen/validate/Validatable-type)
+
diff --git a/docs/gen/ShapeUtil-class.mdx b/docs/gen/ShapeUtil-class.mdx
new file mode 100644
index 000000000..24501ebb1
--- /dev/null
+++ b/docs/gen/ShapeUtil-class.mdx
@@ -0,0 +1,2723 @@
+---
+title: ShapeUtil
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 99
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [canBind](#ShapeUtil-canBind-member)
+ - [canCrop](#ShapeUtil-canCrop-member)
+ - [canEdit](#ShapeUtil-canEdit-member)
+ - [canResize](#ShapeUtil-canResize-member)
+ - [canScroll](#ShapeUtil-canScroll-member)
+ - [canSnap](#ShapeUtil-canSnap-member)
+ - [canUnmount](#ShapeUtil-canUnmount-member)
+ - [editor](#ShapeUtil-editor-member)
+ - [hideResizeHandles](#ShapeUtil-hideResizeHandles-member)
+ - [hideRotateHandle](#ShapeUtil-hideRotateHandle-member)
+ - [hideSelectionBoundsBg](#ShapeUtil-hideSelectionBoundsBg-member)
+ - [hideSelectionBoundsFg](#ShapeUtil-hideSelectionBoundsFg-member)
+ - [isAspectRatioLocked](#ShapeUtil-isAspectRatioLocked-member)
+ - [isClosed](#ShapeUtil-isClosed-member)
+ - [onBeforeCreate](#ShapeUtil-onBeforeCreate-member)
+ - [onBeforeUpdate](#ShapeUtil-onBeforeUpdate-member)
+ - [onChildrenChange](#ShapeUtil-onChildrenChange-member)
+ - [onClick](#ShapeUtil-onClick-member)
+ - [onDoubleClick](#ShapeUtil-onDoubleClick-member)
+ - [onDoubleClickEdge](#ShapeUtil-onDoubleClickEdge-member)
+ - [onDoubleClickHandle](#ShapeUtil-onDoubleClickHandle-member)
+ - [onDragShapesOut](#ShapeUtil-onDragShapesOut-member)
+ - [onDragShapesOver](#ShapeUtil-onDragShapesOver-member)
+ - [onDropShapesOver](#ShapeUtil-onDropShapesOver-member)
+ - [onEditEnd](#ShapeUtil-onEditEnd-member)
+ - [onHandleChange](#ShapeUtil-onHandleChange-member)
+ - [onResize](#ShapeUtil-onResize-member)
+ - [onResizeEnd](#ShapeUtil-onResizeEnd-member)
+ - [onResizeStart](#ShapeUtil-onResizeStart-member)
+ - [onRotate](#ShapeUtil-onRotate-member)
+ - [onRotateEnd](#ShapeUtil-onRotateEnd-member)
+ - [onRotateStart](#ShapeUtil-onRotateStart-member)
+ - [onTranslate](#ShapeUtil-onTranslate-member)
+ - [onTranslateEnd](#ShapeUtil-onTranslateEnd-member)
+ - [onTranslateStart](#ShapeUtil-onTranslateStart-member)
+ - [styleProps](#ShapeUtil-styleProps-member)
+ - [type](#ShapeUtil-type-member)
+ - [type](#ShapeUtil-type-member)
+- [Methods](#methods)
+ - [canDropShapes](#ShapeUtil-canDropShapes-member-1)
+ - [canReceiveNewChildrenOfType](#ShapeUtil-canReceiveNewChildrenOfType-member-1)
+ - [center](#ShapeUtil-center-member-1)
+ - [component](#ShapeUtil-component-member-1)
+ - [getBounds](#ShapeUtil-getBounds-member-1)
+ - [getCenter](#ShapeUtil-getCenter-member-1)
+ - [getDefaultProps](#ShapeUtil-getDefaultProps-member-1)
+ - [getHandles](#ShapeUtil-getHandles-member-1)
+ - [getOutline](#ShapeUtil-getOutline-member-1)
+ - [getOutlineSegments](#ShapeUtil-getOutlineSegments-member-1)
+ - [getStyleIfExists](#ShapeUtil-getStyleIfExists-member-1)
+ - [hasStyle](#ShapeUtil-hasStyle-member-1)
+ - [hitTestLineSegment](#ShapeUtil-hitTestLineSegment-member-1)
+ - [hitTestPoint](#ShapeUtil-hitTestPoint-member-1)
+ - [indicator](#ShapeUtil-indicator-member-1)
+ - [iterateStyles](#ShapeUtil-iterateStyles-member-1)
+ - [setStyleInPartial](#ShapeUtil-setStyleInPartial-member-1)
+ - [snapPoints](#ShapeUtil-snapPoints-member-1)
+ - [toBackgroundSvg](#ShapeUtil-toBackgroundSvg-member-1)
+ - [toSvg](#ShapeUtil-toSvg-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+abstract class ShapeUtil {}
+```
+
+##### References
+
+[TLUnknownShape](/gen/tlschema/TLUnknownShape-type)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `ShapeUtil` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+
+`type`
+
+
+
+
+```ts
+Shape['type']
+```
+
+
+
+
+
+
+
+
+`styleProps`
+
+
+
+
+```ts
+ReadonlyMap, string>
+```
+
+
+
+
+
+
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [ReadonlyMap](/gen/ReadonlyMap-interface), [StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+## Properties
+
+### `canBind` \{#ShapeUtil-canBind-member}
+
+Public Property
+
+Whether the shape can be bound to by an arrow.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`_otherShape`
+
+
+
+
+The other shape attempting to bind to this shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+canBind: (_shape: Shape, _otherShape?: K | undefined) => boolean
+```
+
+---
+
+### `canCrop` \{#ShapeUtil-canCrop-member}
+
+Public Property
+
+Whether the shape can be cropped.
+
+
+##### Signature
+
+
+```ts
+canCrop: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `canEdit` \{#ShapeUtil-canEdit-member}
+
+Public Property
+
+Whether the shape can be double clicked to edit.
+
+
+##### Signature
+
+
+```ts
+canEdit: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `canResize` \{#ShapeUtil-canResize-member}
+
+Public Property
+
+Whether the shape can be resized.
+
+
+##### Signature
+
+
+```ts
+canResize: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `canScroll` \{#ShapeUtil-canScroll-member}
+
+Public Property
+
+Whether the shape can be scrolled while editing.
+
+
+##### Signature
+
+
+```ts
+canScroll: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `canSnap` \{#ShapeUtil-canSnap-member}
+
+Public Property
+
+Whether the shape can be snapped to by another shape.
+
+
+##### Signature
+
+
+```ts
+canSnap: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `canUnmount` \{#ShapeUtil-canUnmount-member}
+
+Public Property
+
+Whether the shape should unmount when not visible in the editor. Consider keeping this to false if the shape's `component` has local state.
+
+
+##### Signature
+
+
+```ts
+canUnmount: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `editor` \{#ShapeUtil-editor-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+editor: Editor
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class)
+
+---
+
+### `hideResizeHandles` \{#ShapeUtil-hideResizeHandles-member}
+
+Public Property
+
+Whether the shape should hide its resize handles when selected.
+
+
+##### Signature
+
+
+```ts
+hideResizeHandles: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `hideRotateHandle` \{#ShapeUtil-hideRotateHandle-member}
+
+Public Property
+
+Whether the shape should hide its resize handles when selected.
+
+
+##### Signature
+
+
+```ts
+hideRotateHandle: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `hideSelectionBoundsBg` \{#ShapeUtil-hideSelectionBoundsBg-member}
+
+Public Property
+
+Whether the shape should hide its selection bounds background when selected.
+
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsBg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `hideSelectionBoundsFg` \{#ShapeUtil-hideSelectionBoundsFg-member}
+
+Public Property
+
+Whether the shape should hide its selection bounds foreground when selected.
+
+
+##### Signature
+
+
+```ts
+hideSelectionBoundsFg: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `isAspectRatioLocked` \{#ShapeUtil-isAspectRatioLocked-member}
+
+Public Property
+
+Whether the shape's aspect ratio is locked.
+
+
+##### Signature
+
+
+```ts
+isAspectRatioLocked: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `isClosed` \{#ShapeUtil-isClosed-member}
+
+Public Property
+
+Whether the shape's outline is closed.
+
+
+##### Signature
+
+
+```ts
+isClosed: TLShapeUtilFlag
+```
+
+##### References
+
+[TLShapeUtilFlag](/gen/editor/TLShapeUtilFlag-type)
+
+---
+
+### `onBeforeCreate` \{#ShapeUtil-onBeforeCreate-member}
+
+Public Property
+
+A callback called just before a shape is created. This method provides a last chance to modify the created shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+onBeforeCreate = (next) => {
+ return { ...next, x: next.x + 1 }
+}
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`next`
+
+
+
+
+The next shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onBeforeCreate?: TLOnBeforeCreateHandler
+```
+
+##### References
+
+[TLOnBeforeCreateHandler](/gen/editor/TLOnBeforeCreateHandler-type)
+
+---
+
+### `onBeforeUpdate` \{#ShapeUtil-onBeforeUpdate-member}
+
+Public Property
+
+A callback called just before a shape is updated. This method provides a last chance to modify the updated shape.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+onBeforeUpdate = (prev, next) => {
+ if (prev.x === next.x) {
+ return { ...next, x: next.x + 1 }
+ }
+}
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`prev`
+
+
+
+
+The previous shape.
+
+
+
+
+
+
+
+
+
+`next`
+
+
+
+
+The next shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onBeforeUpdate?: TLOnBeforeUpdateHandler
+```
+
+##### References
+
+[TLOnBeforeUpdateHandler](/gen/editor/TLOnBeforeUpdateHandler-type)
+
+---
+
+### `onChildrenChange` \{#ShapeUtil-onChildrenChange-member}
+
+Public Property
+
+A callback called when a shape's children change.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onChildrenChange?: TLOnChildrenChangeHandler
+```
+
+##### References
+
+[TLOnChildrenChangeHandler](/gen/editor/TLOnChildrenChangeHandler-type)
+
+---
+
+### `onClick` \{#ShapeUtil-onClick-member}
+
+Public Property
+
+A callback called when a shape is clicked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onClick?: TLOnClickHandler
+```
+
+##### References
+
+[TLOnClickHandler](/gen/editor/TLOnClickHandler-type)
+
+---
+
+### `onDoubleClick` \{#ShapeUtil-onDoubleClick-member}
+
+Public Property
+
+A callback called when a shape is double clicked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDoubleClick?: TLOnDoubleClickHandler
+```
+
+##### References
+
+[TLOnDoubleClickHandler](/gen/editor/TLOnDoubleClickHandler-type)
+
+---
+
+### `onDoubleClickEdge` \{#ShapeUtil-onDoubleClickEdge-member}
+
+Public Property
+
+A callback called when a shape's edge is double clicked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDoubleClickEdge?: TLOnDoubleClickHandler
+```
+
+##### References
+
+[TLOnDoubleClickHandler](/gen/editor/TLOnDoubleClickHandler-type)
+
+---
+
+### `onDoubleClickHandle` \{#ShapeUtil-onDoubleClickHandle-member}
+
+Public Property
+
+A callback called when a shape's handle is double clicked.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+
+`handle`
+
+
+
+
+The handle that is double-clicked.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDoubleClickHandle?: TLOnDoubleClickHandleHandler
+```
+
+##### References
+
+[TLOnDoubleClickHandleHandler](/gen/editor/TLOnDoubleClickHandleHandler-type)
+
+---
+
+### `onDragShapesOut` \{#ShapeUtil-onDragShapesOut-member}
+
+Public Property
+
+A callback called when some other shapes are dragged out of this one.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+
+`shapes`
+
+
+
+
+The shapes that are being dragged out.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDragShapesOut?: TLOnDragHandler
+```
+
+##### References
+
+[TLOnDragHandler](/gen/editor/TLOnDragHandler-type)
+
+---
+
+### `onDragShapesOver` \{#ShapeUtil-onDragShapesOver-member}
+
+Public Property
+
+A callback called when some other shapes are dragged over this one.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+onDragShapesOver = (shape, shapes) => {
+ return { shouldHint: true }
+}
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+
+`shapes`
+
+
+
+
+The shapes that are being dragged over this one.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDragShapesOver?: TLOnDragHandler<
+ Shape,
+ {
+ shouldHint: boolean
+ }
+>
+```
+
+##### References
+
+[TLOnDragHandler](/gen/editor/TLOnDragHandler-type)
+
+---
+
+### `onDropShapesOver` \{#ShapeUtil-onDropShapesOver-member}
+
+Public Property
+
+A callback called when some other shapes are dropped over this one.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+
+`shapes`
+
+
+
+
+The shapes that are being dropped over this one.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onDropShapesOver?: TLOnDragHandler
+```
+
+##### References
+
+[TLOnDragHandler](/gen/editor/TLOnDragHandler-type)
+
+---
+
+### `onEditEnd` \{#ShapeUtil-onEditEnd-member}
+
+Public Property
+
+A callback called when a shape finishes being editing.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onEditEnd?: TLOnEditEndHandler
+```
+
+##### References
+
+[TLOnEditEndHandler](/gen/editor/TLOnEditEndHandler-type)
+
+---
+
+### `onHandleChange` \{#ShapeUtil-onHandleChange-member}
+
+Public Property
+
+A callback called when a shape's handle changes.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+
+`info`
+
+
+
+
+An object containing the handle and whether the handle is 'precise' or not.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onHandleChange?: TLOnHandleChangeHandler
+```
+
+##### References
+
+[TLOnHandleChangeHandler](/gen/editor/TLOnHandleChangeHandler-type)
+
+---
+
+### `onResize` \{#ShapeUtil-onResize-member}
+
+Public Property
+
+A callback called when a shape changes from a resize.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape at the start of the resize.
+
+
+
+
+
+
+
+
+
+`info`
+
+
+
+
+Info about the resize.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onResize?: TLOnResizeHandler
+```
+
+##### References
+
+[TLOnResizeHandler](/gen/editor/TLOnResizeHandler-type)
+
+---
+
+### `onResizeEnd` \{#ShapeUtil-onResizeEnd-member}
+
+Public Property
+
+A callback called when a shape finishes resizing.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`initial`
+
+
+
+
+The shape at the start of the resize.
+
+
+
+
+
+
+
+
+
+`current`
+
+
+
+
+The current shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onResizeEnd?: TLOnResizeEndHandler
+```
+
+##### References
+
+[TLOnResizeEndHandler](/gen/editor/TLOnResizeEndHandler-type)
+
+---
+
+### `onResizeStart` \{#ShapeUtil-onResizeStart-member}
+
+Public Property
+
+A callback called when a shape starts being resized.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onResizeStart?: TLOnResizeStartHandler
+```
+
+##### References
+
+[TLOnResizeStartHandler](/gen/editor/TLOnResizeStartHandler-type)
+
+---
+
+### `onRotate` \{#ShapeUtil-onRotate-member}
+
+Public Property
+
+A callback called when a shape changes from a rotation.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`initial`
+
+
+
+
+The shape at the start of the rotation.
+
+
+
+
+
+
+
+
+
+`current`
+
+
+
+
+The current shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onRotate?: TLOnRotateHandler
+```
+
+##### References
+
+[TLOnRotateHandler](/gen/editor/TLOnRotateHandler-type)
+
+---
+
+### `onRotateEnd` \{#ShapeUtil-onRotateEnd-member}
+
+Public Property
+
+A callback called when a shape finishes rotating.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`initial`
+
+
+
+
+The shape at the start of the rotation.
+
+
+
+
+
+
+
+
+
+`current`
+
+
+
+
+The current shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onRotateEnd?: TLOnRotateEndHandler
+```
+
+##### References
+
+[TLOnRotateEndHandler](/gen/editor/TLOnRotateEndHandler-type)
+
+---
+
+### `onRotateStart` \{#ShapeUtil-onRotateStart-member}
+
+Public Property
+
+A callback called when a shape starts being rotated.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onRotateStart?: TLOnRotateStartHandler
+```
+
+##### References
+
+[TLOnRotateStartHandler](/gen/editor/TLOnRotateStartHandler-type)
+
+---
+
+### `onTranslate` \{#ShapeUtil-onTranslate-member}
+
+Public Property
+
+A callback called when a shape changes from a translation.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`initial`
+
+
+
+
+The shape at the start of the translation.
+
+
+
+
+
+
+
+
+
+`current`
+
+
+
+
+The current shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onTranslate?: TLOnTranslateHandler
+```
+
+##### References
+
+[TLOnTranslateHandler](/gen/editor/TLOnTranslateHandler-type)
+
+---
+
+### `onTranslateEnd` \{#ShapeUtil-onTranslateEnd-member}
+
+Public Property
+
+A callback called when a shape finishes translating.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`initial`
+
+
+
+
+The shape at the start of the translation.
+
+
+
+
+
+
+
+
+
+`current`
+
+
+
+
+The current shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onTranslateEnd?: TLOnTranslateEndHandler
+```
+
+##### References
+
+[TLOnTranslateEndHandler](/gen/editor/TLOnTranslateEndHandler-type)
+
+---
+
+### `onTranslateStart` \{#ShapeUtil-onTranslateStart-member}
+
+Public Property
+
+A callback called when a shape starts being translated.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+The shape.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onTranslateStart?: TLOnTranslateStartHandler
+```
+
+##### References
+
+[TLOnTranslateStartHandler](/gen/editor/TLOnTranslateStartHandler-type)
+
+---
+
+### `styleProps` \{#ShapeUtil-styleProps-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly styleProps: ReadonlyMap, string>
+```
+
+##### References
+
+[ReadonlyMap](/gen/ReadonlyMap-interface), [StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `type` \{#ShapeUtil-type-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly type: Shape['type']
+```
+
+---
+
+### `type` \{#ShapeUtil-type-member}
+
+Public Static Property
+
+The type of the shape util, which should match the shape's type.
+
+
+##### Signature
+
+
+```ts
+static type: string
+```
+
+---
+
+## Methods
+
+### `canDropShapes()` \{#ShapeUtil-canDropShapes-member-1}
+
+Public Method
+
+Get whether the shape can receive children of a given type.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape type.
+
+
+
+
+
+
+
+
+
+`shapes`
+
+
+
+
+```ts
+TLShape[]
+```
+
+The shapes that are being dropped.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `canReceiveNewChildrenOfType()` \{#ShapeUtil-canReceiveNewChildrenOfType-member-1}
+
+Public Method
+
+Get whether the shape can receive children of a given type.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+
+
+
+
+
+
+
+`type`
+
+
+
+
+```ts
+TLShape['type']
+```
+
+The shape type.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[TLShape](/gen/tlschema/TLShape-type)
+
+---
+
+### `center()` \{#ShapeUtil-center-member-1}
+
+Public Method
+
+Get the shape's cached center.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `component()` \{#ShapeUtil-component-member-1}
+
+Public Method
+
+Get a JSX element for the shape (as an HTML element).
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+any
+```
+
+---
+
+### `getBounds()` \{#ShapeUtil-getBounds-member-1}
+
+Public Method
+
+Get the (not cached) bounds for the shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Box2d
+```
+
+##### References
+
+[Box2d](/gen/primitives/Box2d-class)
+
+---
+
+### `getCenter()` \{#ShapeUtil-getCenter-member-1}
+
+Public Method
+
+Get the shape's (not cached) center.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getDefaultProps()` \{#ShapeUtil-getDefaultProps-member-1}
+
+Public Method
+
+Get the default props for a shape.
+
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+Shape['props']
+```
+
+---
+
+### `getHandles()` \{#ShapeUtil-getHandles-member-1}
+
+Public Method
+
+Get an array of handle models for the shape. This is an optional method.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+util.getHandles?.(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLHandle[]
+```
+
+##### References
+
+[TLHandle](/gen/tlschema/TLHandle-interface)
+
+---
+
+### `getOutline()` \{#ShapeUtil-getOutline-member-1}
+
+Public Method
+
+Get the shape's (not cached) outline.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getOutlineSegments()` \{#ShapeUtil-getOutlineSegments-member-1}
+
+Public Method
+
+Get an array of outline segments for the shape. For most shapes, this will be a single segment that includes the entire outline. For shapes with handles, this might be segments of the outline between each handle.
+
+
+
+
+##### Example
+
+
+
+
+```ts
+util.getOutlineSegments(myShape)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[][]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `getStyleIfExists()` \{#ShapeUtil-getStyleIfExists-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`style`
+
+
+
+
+```ts
+StyleProp
+```
+
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape | TLShapePartial
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+T | undefined
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class), [TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `hasStyle()` \{#ShapeUtil-hasStyle-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`style`
+
+
+
+
+```ts
+StyleProp
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `hitTestLineSegment()` \{#ShapeUtil-hitTestLineSegment-member-1}
+
+Public Method
+
+Get whether a point intersects the shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+
+`A`
+
+
+
+
+```ts
+VecLike
+```
+
+The line segment's first point.
+
+
+
+
+
+
+
+
+
+`B`
+
+
+
+
+```ts
+VecLike
+```
+
+The line segment's second point.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+ Whether the line segment intersects the shape.
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `hitTestPoint()` \{#ShapeUtil-hitTestPoint-member-1}
+
+Public Method
+
+Get whether a point intersects the shape.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+
+`point`
+
+
+
+
+```ts
+VecLike
+```
+
+The point to test.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+boolean
+```
+
+ Whether the point intersects the shape.
+
+
+##### References
+
+[VecLike](/gen/primitives/VecLike-type)
+
+---
+
+### `indicator()` \{#ShapeUtil-indicator-member-1}
+
+Public Method
+
+Get JSX describing the shape's indicator (as an SVG element).
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+any
+```
+
+---
+
+### `iterateStyles()` \{#ShapeUtil-iterateStyles-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape | TLShapePartial
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Generator<[StyleProp, unknown], void, unknown>
+```
+
+##### References
+
+[TLShapePartial](/gen/tlschema/TLShapePartial-type), [Generator](/gen/Generator-interface), [StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `setStyleInPartial()` \{#ShapeUtil-setStyleInPartial-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`style`
+
+
+
+
+```ts
+StyleProp
+```
+
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+TLShapePartial
+```
+
+
+
+
+
+
+
+
+`value`
+
+
+
+
+```ts
+T
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+TLShapePartial
+```
+
+##### References
+
+[StyleProp](/gen/tlschema/StyleProp-class), [TLShapePartial](/gen/tlschema/TLShapePartial-type)
+
+---
+
+### `snapPoints()` \{#ShapeUtil-snapPoints-member-1}
+
+Public Method
+
+Get the shape's snap points.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Vec2d[]
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `toBackgroundSvg()` \{#ShapeUtil-toBackgroundSvg-member-1}
+
+Public Method
+
+Get the shape's background layer as an SVG object.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string | undefined
+```
+
+The shape's CSS font (actual).
+
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+null | Promise | SVGElement
+```
+
+ An SVG element.
+
+
+##### References
+
+[TLExportColors](/gen/editor/~TLExportColors-type), [Promise](/gen/Promise-interface), [SVGElement](/gen/SVGElement-interface)
+
+---
+
+### `toSvg()` \{#ShapeUtil-toSvg-member-1}
+
+Public Method
+
+Get the shape as an SVG object.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`shape`
+
+
+
+
+```ts
+Shape
+```
+
+The shape.
+
+
+
+
+
+
+
+
+
+`font`
+
+
+
+
+```ts
+string | undefined
+```
+
+The shape's CSS font (actual).
+
+
+
+
+
+
+
+
+
+`colors`
+
+
+
+
+```ts
+TLExportColors
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Promise | SVGElement
+```
+
+ An SVG element.
+
+
+##### References
+
+[TLExportColors](/gen/editor/~TLExportColors-type), [Promise](/gen/Promise-interface), [SVGElement](/gen/SVGElement-interface)
+
+---
+
diff --git a/docs/gen/SharedStyle-type.mdx b/docs/gen/SharedStyle-type.mdx
new file mode 100644
index 000000000..a191e13b6
--- /dev/null
+++ b/docs/gen/SharedStyle-type.mdx
@@ -0,0 +1,27 @@
+---
+title: SharedStyle
+status: published
+category: editor
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 100
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type SharedStyle =
+ | {
+ readonly type: 'mixed'
+ }
+ | {
+ readonly type: 'shared'
+ readonly value: T
+ }
+```
+
diff --git a/docs/gen/StateNode-class.mdx b/docs/gen/StateNode-class.mdx
new file mode 100644
index 000000000..56af17132
--- /dev/null
+++ b/docs/gen/StateNode-class.mdx
@@ -0,0 +1,846 @@
+---
+title: StateNode
+status: published
+category: editor
+group: Class
+author: api
+date: 06/23/2023
+order: 102
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [children](#StateNode-children-member)
+ - [children](#StateNode-children-member)
+ - [current](#StateNode-current-member)
+ - [editor](#StateNode-editor-member)
+ - [id](#StateNode-id-member)
+ - [id](#StateNode-id-member)
+ - [initial](#StateNode-initial-member)
+ - [initial](#StateNode-initial-member)
+ - [isActive](#StateNode-isActive-member)
+ - [onCancel](#StateNode-onCancel-member)
+ - [onComplete](#StateNode-onComplete-member)
+ - [onDoubleClick](#StateNode-onDoubleClick-member)
+ - [onEnter](#StateNode-onEnter-member)
+ - [onExit](#StateNode-onExit-member)
+ - [onInterrupt](#StateNode-onInterrupt-member)
+ - [onKeyDown](#StateNode-onKeyDown-member)
+ - [onKeyRepeat](#StateNode-onKeyRepeat-member)
+ - [onKeyUp](#StateNode-onKeyUp-member)
+ - [onMiddleClick](#StateNode-onMiddleClick-member)
+ - [onPointerDown](#StateNode-onPointerDown-member)
+ - [onPointerEnter](#StateNode-onPointerEnter-member)
+ - [onPointerLeave](#StateNode-onPointerLeave-member)
+ - [onPointerMove](#StateNode-onPointerMove-member)
+ - [onPointerUp](#StateNode-onPointerUp-member)
+ - [onQuadrupleClick](#StateNode-onQuadrupleClick-member)
+ - [onRightClick](#StateNode-onRightClick-member)
+ - [onTripleClick](#StateNode-onTripleClick-member)
+ - [onWheel](#StateNode-onWheel-member)
+ - [parent](#StateNode-parent-member)
+ - [path](#StateNode-path-member)
+ - [shapeType](#StateNode-shapeType-member)
+ - [type](#StateNode-type-member)
+- [Methods](#methods)
+ - [enter](#StateNode-enter-member-1)
+ - [exit](#StateNode-exit-member-1)
+ - [handleEvent](#StateNode-handleEvent-member-1)
+ - [transition](#StateNode-transition-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+abstract class StateNode implements Partial {}
+```
+
+##### References
+
+[Partial](/gen/Partial-type), [TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `StateNode` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`editor`
+
+
+
+
+```ts
+Editor
+```
+
+
+
+
+
+
+
+
+`parent`
+
+ (optional)
+
+
+
+
+```ts
+StateNode
+```
+
+
+
+
+
+
+
+##### References
+
+[Editor](/gen/editor/Editor-class), [StateNode](/gen/editor/StateNode-class)
+
+---
+
+## Properties
+
+### `children` \{#StateNode-children-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+children?: Record
+```
+
+##### References
+
+[Record](/gen/Record-type), [StateNode](/gen/editor/StateNode-class)
+
+---
+
+### `children` \{#StateNode-children-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static children?: () => TLStateNodeConstructor[]
+```
+
+##### References
+
+[TLStateNodeConstructor](/gen/editor/TLStateNodeConstructor-interface)
+
+---
+
+### `current` \{#StateNode-current-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+current: Atom
+```
+
+##### References
+
+[Atom](/gen/state/Atom-interface), [StateNode](/gen/editor/StateNode-class)
+
+---
+
+### `editor` \{#StateNode-editor-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+editor: Editor
+```
+
+##### References
+
+[Editor](/gen/editor/Editor-class)
+
+---
+
+### `id` \{#StateNode-id-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+id: string
+```
+
+---
+
+### `id` \{#StateNode-id-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static id: string
+```
+
+---
+
+### `initial` \{#StateNode-initial-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+initial?: string
+```
+
+---
+
+### `initial` \{#StateNode-initial-member}
+
+Public Static Property
+
+##### Signature
+
+
+```ts
+static initial?: string
+```
+
+---
+
+### `isActive` \{#StateNode-isActive-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+isActive: boolean
+```
+
+---
+
+### `onCancel` \{#StateNode-onCancel-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onCancel?: TLEventHandlers['onCancel']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onComplete` \{#StateNode-onComplete-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onComplete?: TLEventHandlers['onComplete']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onDoubleClick` \{#StateNode-onDoubleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onDoubleClick?: TLEventHandlers['onDoubleClick']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onEnter` \{#StateNode-onEnter-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onEnter?: TLEnterEventHandler
+```
+
+##### References
+
+[TLEnterEventHandler](/gen/editor/TLEnterEventHandler-type)
+
+---
+
+### `onExit` \{#StateNode-onExit-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onExit?: TLExitEventHandler
+```
+
+##### References
+
+[TLExitEventHandler](/gen/editor/TLExitEventHandler-type)
+
+---
+
+### `onInterrupt` \{#StateNode-onInterrupt-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onInterrupt?: TLEventHandlers['onInterrupt']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onKeyDown` \{#StateNode-onKeyDown-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onKeyDown?: TLEventHandlers['onKeyDown']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onKeyRepeat` \{#StateNode-onKeyRepeat-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onKeyRepeat?: TLEventHandlers['onKeyRepeat']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onKeyUp` \{#StateNode-onKeyUp-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onKeyUp?: TLEventHandlers['onKeyUp']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onMiddleClick` \{#StateNode-onMiddleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onMiddleClick?: TLEventHandlers['onMiddleClick']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onPointerDown` \{#StateNode-onPointerDown-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onPointerDown?: TLEventHandlers['onPointerDown']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onPointerEnter` \{#StateNode-onPointerEnter-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onPointerEnter?: TLEventHandlers['onPointerEnter']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onPointerLeave` \{#StateNode-onPointerLeave-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onPointerLeave?: TLEventHandlers['onPointerLeave']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onPointerMove` \{#StateNode-onPointerMove-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onPointerMove?: TLEventHandlers['onPointerMove']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onPointerUp` \{#StateNode-onPointerUp-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onPointerUp?: TLEventHandlers['onPointerUp']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onQuadrupleClick` \{#StateNode-onQuadrupleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onQuadrupleClick?: TLEventHandlers['onQuadrupleClick']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onRightClick` \{#StateNode-onRightClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onRightClick?: TLEventHandlers['onRightClick']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onTripleClick` \{#StateNode-onTripleClick-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onTripleClick?: TLEventHandlers['onTripleClick']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `onWheel` \{#StateNode-onWheel-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+onWheel?: TLEventHandlers['onWheel']
+```
+
+##### References
+
+[TLEventHandlers](/gen/editor/TLEventHandlers-interface)
+
+---
+
+### `parent` \{#StateNode-parent-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+parent: StateNode
+```
+
+##### References
+
+[StateNode](/gen/editor/StateNode-class)
+
+---
+
+### `path` \{#StateNode-path-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+path: Computed
+```
+
+##### References
+
+[Computed](/gen/state/Computed-interface)
+
+---
+
+### `shapeType` \{#StateNode-shapeType-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+shapeType?: TLShapeUtilConstructor>
+```
+
+##### References
+
+[TLShapeUtilConstructor](/gen/editor/TLShapeUtilConstructor-interface), [TLBaseShape](/gen/tlschema/TLBaseShape-interface)
+
+---
+
+### `type` \{#StateNode-type-member}
+
+Public Property
+
+##### Signature
+
+
+```ts
+type: TLStateNodeType
+```
+
+##### References
+
+[TLStateNodeType](/gen/editor/~TLStateNodeType-type)
+
+---
+
+## Methods
+
+### `enter()` \{#StateNode-enter-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+any
+```
+
+
+
+
+
+
+
+
+`from`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `exit()` \{#StateNode-exit-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+any
+```
+
+
+
+
+
+
+
+
+`from`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `handleEvent()` \{#StateNode-handleEvent-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+Exclude
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[Exclude](/gen/Exclude-type), [TLEventInfo](/gen/editor/TLEventInfo-type), [TLPinchEventInfo](/gen/editor/TLPinchEventInfo-type)
+
+---
+
+### `transition()` \{#StateNode-transition-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`info`
+
+
+
+
+```ts
+any
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+this
+```
+
+---
+
diff --git a/docs/gen/Store-class.mdx b/docs/gen/Store-class.mdx
new file mode 100644
index 000000000..191b027c8
--- /dev/null
+++ b/docs/gen/Store-class.mdx
@@ -0,0 +1,1292 @@
+---
+title: Store
+status: published
+category: store
+group: Class
+author: api
+date: 06/23/2023
+order: 26
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [allRecords](#Store-allRecords-member)
+ - [clear](#Store-clear-member)
+ - [createComputedCache](#Store-createComputedCache-member)
+ - [createSelectedComputedCache](#Store-createSelectedComputedCache-member)
+ - [get](#Store-get-member)
+ - [has](#Store-has-member)
+ - [history](#Store-history-member)
+ - [id](#Store-id-member)
+ - [listen](#Store-listen-member)
+ - [mergeRemoteChanges](#Store-mergeRemoteChanges-member)
+ - [onAfterChange](#Store-onAfterChange-member)
+ - [onAfterCreate](#Store-onAfterCreate-member)
+ - [onAfterDelete](#Store-onAfterDelete-member)
+ - [onBeforeDelete](#Store-onBeforeDelete-member)
+ - [props](#Store-props-member)
+ - [put](#Store-put-member)
+ - [query](#Store-query-member)
+ - [remove](#Store-remove-member)
+ - [schema](#Store-schema-member)
+ - [scopedTypes](#Store-scopedTypes-member)
+ - [serialize](#Store-serialize-member)
+ - [unsafeGetWithoutCapture](#Store-unsafeGetWithoutCapture-member)
+ - [update](#Store-update-member)
+- [Methods](#methods)
+ - [_flushHistory](#Store-_flushHistory-member-1)
+ - [applyDiff](#Store-applyDiff-member-1)
+ - [extractingChanges](#Store-extractingChanges-member-1)
+ - [filterChangesByScope](#Store-filterChangesByScope-member-1)
+ - [getSnapshot](#Store-getSnapshot-member-1)
+ - [loadSnapshot](#Store-loadSnapshot-member-1)
+ - [validate](#Store-validate-member-1)
+
+
+A store of records.
+
+
+##### Signature
+
+
+```ts
+class Store {}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `Store` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`config`
+
+
+
+
+```ts
+{
+ initialData?: StoreSnapshot
+ schema: StoreSchema
+ props: Props
+}
+```
+
+
+
+
+
+
+
+##### References
+
+[StoreSnapshot](/gen/store/StoreSnapshot-type), [StoreSchema](/gen/store/StoreSchema-class)
+
+---
+
+## Properties
+
+### `allRecords` \{#Store-allRecords-member}
+
+Public Property
+
+Get an array of all values in the store.
+
+
+##### Signature
+
+
+```ts
+allRecords: () => R[]
+```
+
+---
+
+### `clear` \{#Store-clear-member}
+
+Public Property
+
+Removes all records from the store.
+
+
+##### Signature
+
+
+```ts
+clear: () => void
+```
+
+---
+
+### `createComputedCache` \{#Store-createComputedCache-member}
+
+Public Property
+
+Create a computed cache.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`name`
+
+
+
+
+The name of the derivation cache.
+
+
+
+
+
+
+
+
+
+`derive`
+
+
+
+
+A function used to derive the value of the cache.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+createComputedCache: (
+ name: string,
+ derive: (record: V) => T | undefined
+) => ComputedCache
+```
+
+##### References
+
+[ComputedCache](/gen/store/ComputedCache-type)
+
+---
+
+### `createSelectedComputedCache` \{#Store-createSelectedComputedCache-member}
+
+Public Property
+
+Create a computed cache from a selector
+
+
+##### Parameters
+
+
+
+
+
+
+
+`name`
+
+
+
+
+The name of the derivation cache.
+
+
+
+
+
+
+
+
+
+`selector`
+
+
+
+
+A function that returns a subset of the original shape
+
+
+
+
+
+
+
+
+
+`derive`
+
+
+
+
+A function used to derive the value of the cache.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+createSelectedComputedCache: (
+ name: string,
+ selector: (record: V) => T | undefined,
+ derive: (input: T) => J | undefined
+) => ComputedCache
+```
+
+##### References
+
+[ComputedCache](/gen/store/ComputedCache-type)
+
+---
+
+### `get` \{#Store-get-member}
+
+Public Property
+
+Get the value of a store record by its id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+The id of the record to get.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+get: >(id: K) => RecFromId | undefined
+```
+
+##### References
+
+[IdOf](/gen/store/IdOf-type), [RecFromId](/gen/store/~RecFromId-type)
+
+---
+
+### `has` \{#Store-has-member}
+
+Public Property
+
+Get whether the record store has a id.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+The id of the record to check.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+has: >(id: K) => boolean
+```
+
+##### References
+
+[IdOf](/gen/store/IdOf-type)
+
+---
+
+### `history` \{#Store-history-member}
+
+Public Readonly Property
+
+An atom containing the store's history.
+
+
+
+##### Signature
+
+
+```ts
+readonly history: Atom>
+```
+
+##### References
+
+[Atom](/gen/state/Atom-interface), [RecordsDiff](/gen/store/RecordsDiff-type)
+
+---
+
+### `id` \{#Store-id-member}
+
+Public Readonly Property
+
+The random id of the store.
+
+
+##### Signature
+
+
+```ts
+readonly id: string
+```
+
+---
+
+### `listen` \{#Store-listen-member}
+
+Public Property
+
+Add a new listener to the store.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`onHistory`
+
+
+
+
+The listener to call when the store updates.
+
+
+
+
+
+
+
+
+
+`filters`
+
+
+
+
+Filters to apply to the listener.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+listen: (
+ onHistory: StoreListener,
+ filters?: Partial
+) => () => void
+```
+
+##### References
+
+[StoreListener](/gen/store/StoreListener-type), [Partial](/gen/Partial-type), [StoreListenerFilters](/gen/store/~StoreListenerFilters-type)
+
+---
+
+### `mergeRemoteChanges` \{#Store-mergeRemoteChanges-member}
+
+Public Property
+
+Merge changes from a remote source without triggering listeners.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`fn`
+
+
+
+
+A function that merges the external changes.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+mergeRemoteChanges: (fn: () => void) => void
+```
+
+---
+
+### `onAfterChange` \{#Store-onAfterChange-member}
+
+Public Property
+
+A callback fired after each record's change.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`prev`
+
+
+
+
+The previous value, if any.
+
+
+
+
+
+
+
+
+
+`next`
+
+
+
+
+The next value.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onAfterChange?: (prev: R, next: R) => void
+```
+
+---
+
+### `onAfterCreate` \{#Store-onAfterCreate-member}
+
+Public Property
+
+A callback fired after a record is created. Use this to perform related updates to other records in the store.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`record`
+
+
+
+
+The record to be created
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onAfterCreate?: (record: R) => void
+```
+
+---
+
+### `onAfterDelete` \{#Store-onAfterDelete-member}
+
+Public Property
+
+A callback fired after a record is deleted.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`prev`
+
+
+
+
+The record that will be deleted.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onAfterDelete?: (prev: R) => void
+```
+
+---
+
+### `onBeforeDelete` \{#Store-onBeforeDelete-member}
+
+Public Property
+
+A callback fired before a record is deleted.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`prev`
+
+
+
+
+The record that will be deleted.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+onBeforeDelete?: (prev: R) => void
+```
+
+---
+
+### `props` \{#Store-props-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly props: Props
+```
+
+---
+
+### `put` \{#Store-put-member}
+
+Public Property
+
+Add some records to the store. It's an error if they already exist.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`records`
+
+
+
+
+The records to add.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+put: (records: R[], phaseOverride?: 'initialize') => void
+```
+
+---
+
+### `query` \{#Store-query-member}
+
+Public Readonly Property
+
+A StoreQueries instance for this store.
+
+
+
+##### Signature
+
+
+```ts
+readonly query: StoreQueries
+```
+
+##### References
+
+[StoreQueries](/gen/store/~StoreQueries-class)
+
+---
+
+### `remove` \{#Store-remove-member}
+
+Public Property
+
+Remove some records from the store via their ids.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`ids`
+
+
+
+
+The ids of the records to remove.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+remove: (ids: IdOf[]) => void
+```
+
+##### References
+
+[IdOf](/gen/store/IdOf-type)
+
+---
+
+### `schema` \{#Store-schema-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly schema: StoreSchema
+```
+
+##### References
+
+[StoreSchema](/gen/store/StoreSchema-class)
+
+---
+
+### `scopedTypes` \{#Store-scopedTypes-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly scopedTypes: {
+ readonly [K in RecordScope]: ReadonlySet
+}
+```
+
+##### References
+
+[RecordScope](/gen/store/~RecordScope-type), [ReadonlySet](/gen/ReadonlySet-interface)
+
+---
+
+### `serialize` \{#Store-serialize-member}
+
+Public Property
+
+Creates a JSON payload from the record store.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`scope`
+
+
+
+
+The scope of records to serialize. Defaults to 'document'.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+serialize: (scope?: 'all' | RecordScope) => StoreSnapshot
+```
+
+##### References
+
+[RecordScope](/gen/store/~RecordScope-type), [StoreSnapshot](/gen/store/StoreSnapshot-type)
+
+---
+
+### `unsafeGetWithoutCapture` \{#Store-unsafeGetWithoutCapture-member}
+
+Public Property
+
+Get the value of a store record by its id without updating its epoch.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+The id of the record to get.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+unsafeGetWithoutCapture: >(
+ id: K
+) => RecFromId | undefined
+```
+
+##### References
+
+[IdOf](/gen/store/IdOf-type), [RecFromId](/gen/store/~RecFromId-type)
+
+---
+
+### `update` \{#Store-update-member}
+
+Public Property
+
+Update a record. To update multiple records at once, use the `update` method of the `TypedStore` class.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+The id of the record to update.
+
+
+
+
+
+
+
+
+
+`updater`
+
+
+
+
+A function that updates the record.
+
+
+
+
+
+
+
+
+##### Signature
+
+
+```ts
+update: >(
+ id: K,
+ updater: (record: RecFromId) => RecFromId
+) => void
+```
+
+##### References
+
+[IdOf](/gen/store/IdOf-type), [RecFromId](/gen/store/~RecFromId-type)
+
+---
+
+## Methods
+
+### `_flushHistory()` \{#Store-_flushHistory-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
+### `applyDiff()` \{#Store-applyDiff-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`diff`
+
+
+
+
+```ts
+RecordsDiff
+```
+
+
+
+
+
+
+
+
+`runCallbacks`
+
+ (optional)
+
+
+
+
+```ts
+boolean
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[RecordsDiff](/gen/store/RecordsDiff-type)
+
+---
+
+### `extractingChanges()` \{#Store-extractingChanges-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`fn`
+
+
+
+
+```ts
+() => void
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+RecordsDiff
+```
+
+##### References
+
+[RecordsDiff](/gen/store/RecordsDiff-type)
+
+---
+
+### `filterChangesByScope()` \{#Store-filterChangesByScope-member-1}
+
+Public Method
+
+Filters out non-document changes from a diff. Returns null if there are no changes left.
+
+
+##### Parameters
+
+
+
+
+
+
+
+`change`
+
+
+
+
+```ts
+RecordsDiff
+```
+
+the records diff
+
+
+
+
+
+
+
+
+
+`scope`
+
+
+
+
+```ts
+RecordScope
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ added: { [K in IdOf]: R }
+ updated: { [K_1 in IdOf]: [from: R, to: R] }
+ removed: { [K in IdOf]: R }
+} | null
+```
+
+
+
+
+##### References
+
+[RecordsDiff](/gen/store/RecordsDiff-type), [RecordScope](/gen/store/~RecordScope-type), [IdOf](/gen/store/IdOf-type)
+
+---
+
+### `getSnapshot()` \{#Store-getSnapshot-member-1}
+
+Public Method
+
+Get a serialized snapshot of the store and its schema.
+
+
+```ts
+const snapshot = store.getSnapshot()
+store.loadSnapshot(snapshot)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`scope`
+
+ (optional)
+
+
+
+
+```ts
+'all' | RecordScope
+```
+
+The scope of records to serialize. Defaults to 'document'.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+{
+ store: StoreSnapshot
+ schema: SerializedSchema
+}
+```
+
+##### References
+
+[RecordScope](/gen/store/~RecordScope-type), [StoreSnapshot](/gen/store/StoreSnapshot-type), [SerializedSchema](/gen/store/SerializedSchema-interface)
+
+---
+
+### `loadSnapshot()` \{#Store-loadSnapshot-member-1}
+
+Public Method
+
+Load a serialized snapshot.
+
+
+```ts
+const snapshot = store.getSnapshot()
+store.loadSnapshot(snapshot)
+```
+
+
+##### Parameters
+
+
+
+
+
+
+
+`snapshot`
+
+
+
+
+```ts
+{
+ store: StoreSnapshot
+ schema: SerializedSchema
+}
+```
+
+The snapshot to load.
+
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+##### References
+
+[StoreSnapshot](/gen/store/StoreSnapshot-type), [SerializedSchema](/gen/store/SerializedSchema-interface)
+
+---
+
+### `validate()` \{#Store-validate-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`phase`
+
+
+
+
+```ts
+ | 'createRecord'
+ | 'initialize'
+ | 'tests'
+ | 'updateRecord'
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+void
+```
+
+---
+
diff --git a/docs/gen/StoreError-type.mdx b/docs/gen/StoreError-type.mdx
new file mode 100644
index 000000000..cf4ead6a3
--- /dev/null
+++ b/docs/gen/StoreError-type.mdx
@@ -0,0 +1,30 @@
+---
+title: StoreError
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 27
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type StoreError = {
+ error: Error
+ phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord'
+ recordBefore?: unknown
+ recordAfter: unknown
+ isExistingValidationIssue: boolean
+}
+```
+
+##### References
+
+[Error](/gen/Error-interface)
+
diff --git a/docs/gen/StoreListener-type.mdx b/docs/gen/StoreListener-type.mdx
new file mode 100644
index 000000000..48776b1c8
--- /dev/null
+++ b/docs/gen/StoreListener-type.mdx
@@ -0,0 +1,24 @@
+---
+title: StoreListener
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 28
+---Public TypeAlias
+
+A function that will be called when the history changes.
+
+
+##### Signature
+
+
+```ts
+type StoreListener = (entry: HistoryEntry) => void
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [HistoryEntry](/gen/store/HistoryEntry-type)
+
diff --git a/docs/gen/StoreSchema-class.mdx b/docs/gen/StoreSchema-class.mdx
new file mode 100644
index 000000000..892dc0d98
--- /dev/null
+++ b/docs/gen/StoreSchema-class.mdx
@@ -0,0 +1,403 @@
+---
+title: StoreSchema
+status: published
+category: store
+group: Class
+author: api
+date: 06/23/2023
+order: 29
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [currentStoreVersion](#StoreSchema-currentStoreVersion-member)
+ - [types](#StoreSchema-types-member)
+- [Methods](#methods)
+ - [create](#StoreSchema-create-member-1)
+ - [migratePersistedRecord](#StoreSchema-migratePersistedRecord-member-1)
+ - [migrateStoreSnapshot](#StoreSchema-migrateStoreSnapshot-member-1)
+ - [serialize](#StoreSchema-serialize-member-1)
+ - [serializeEarliestVersion](#StoreSchema-serializeEarliestVersion-member-1)
+ - [validateRecord](#StoreSchema-validateRecord-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class StoreSchema {}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type)
+
+---
+
+## Properties
+
+### `currentStoreVersion` \{#StoreSchema-currentStoreVersion-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+get currentStoreVersion(): number
+```
+
+---
+
+### `types` \{#StoreSchema-types-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly types: {
+ [Record in R as Record['typeName']]: RecordType
+}
+```
+
+##### References
+
+[RecordType](/gen/store/RecordType-class)
+
+---
+
+## Methods
+
+### `create()` \{#StoreSchema-create-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`types`
+
+
+
+
+```ts
+{
+ [TypeName in R['typeName']]: {
+ createId: any
+ }
+}
+```
+
+
+
+
+
+
+
+
+`options`
+
+ (optional)
+
+
+
+
+```ts
+StoreSchemaOptions
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+StoreSchema
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [StoreSchemaOptions](/gen/store/StoreSchemaOptions-type), [StoreSchema](/gen/store/StoreSchema-class)
+
+---
+
+### `migratePersistedRecord()` \{#StoreSchema-migratePersistedRecord-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`record`
+
+
+
+
+```ts
+R
+```
+
+
+
+
+
+
+
+
+`persistedSchema`
+
+
+
+
+```ts
+SerializedSchema
+```
+
+
+
+
+
+
+
+
+`direction`
+
+ (optional)
+
+
+
+
+```ts
+'down' | 'up'
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+MigrationResult
+```
+
+##### References
+
+[SerializedSchema](/gen/store/SerializedSchema-interface), [MigrationResult](/gen/store/MigrationResult-type)
+
+---
+
+### `migrateStoreSnapshot()` \{#StoreSchema-migrateStoreSnapshot-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`storeSnapshot`
+
+
+
+
+```ts
+StoreSnapshot
+```
+
+
+
+
+
+
+
+
+`persistedSchema`
+
+
+
+
+```ts
+SerializedSchema
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+MigrationResult>
+```
+
+##### References
+
+[StoreSnapshot](/gen/store/StoreSnapshot-type), [SerializedSchema](/gen/store/SerializedSchema-interface), [MigrationResult](/gen/store/MigrationResult-type)
+
+---
+
+### `serialize()` \{#StoreSchema-serialize-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+SerializedSchema
+```
+
+##### References
+
+[SerializedSchema](/gen/store/SerializedSchema-interface)
+
+---
+
+### `serializeEarliestVersion()` \{#StoreSchema-serializeEarliestVersion-member-1}
+
+Public Method
+
+##### Parameters
+
+
+None
+
+##### Returns
+
+
+```ts
+SerializedSchema
+```
+
+##### References
+
+[SerializedSchema](/gen/store/SerializedSchema-interface)
+
+---
+
+### `validateRecord()` \{#StoreSchema-validateRecord-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`store`
+
+
+
+
+```ts
+Store
+```
+
+
+
+
+
+
+
+
+`record`
+
+
+
+
+```ts
+R
+```
+
+
+
+
+
+
+
+
+`phase`
+
+
+
+
+```ts
+ | 'createRecord'
+ | 'initialize'
+ | 'tests'
+ | 'updateRecord'
+```
+
+
+
+
+
+
+
+
+`recordBefore`
+
+
+
+
+```ts
+null | R
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+R
+```
+
+##### References
+
+[Store](/gen/store/Store-class)
+
+---
+
diff --git a/docs/gen/StoreSchemaOptions-type.mdx b/docs/gen/StoreSchemaOptions-type.mdx
new file mode 100644
index 000000000..a14a9371d
--- /dev/null
+++ b/docs/gen/StoreSchemaOptions-type.mdx
@@ -0,0 +1,34 @@
+---
+title: StoreSchemaOptions
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 30
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type StoreSchemaOptions = {
+ snapshotMigrations?: Migrations
+ onValidationFailure?: (data: {
+ error: unknown
+ store: Store
+ record: R
+ phase: 'createRecord' | 'initialize' | 'tests' | 'updateRecord'
+ recordBefore: null | R
+ }) => R
+ createIntegrityChecker?: (store: Store) => void
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [Migrations](/gen/store/Migrations-interface), [Store](/gen/store/Store-class)
+
diff --git a/docs/gen/StoreSnapshot-type.mdx b/docs/gen/StoreSnapshot-type.mdx
new file mode 100644
index 000000000..0b88dd8a6
--- /dev/null
+++ b/docs/gen/StoreSnapshot-type.mdx
@@ -0,0 +1,24 @@
+---
+title: StoreSnapshot
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 31
+---Public TypeAlias
+
+A serialized snapshot of the record store's values.
+
+
+##### Signature
+
+
+```ts
+type StoreSnapshot = Record, R>
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [Record](/gen/Record-type), [IdOf](/gen/store/IdOf-type)
+
diff --git a/docs/gen/StoreValidator-type.mdx b/docs/gen/StoreValidator-type.mdx
new file mode 100644
index 000000000..3e3b23a32
--- /dev/null
+++ b/docs/gen/StoreValidator-type.mdx
@@ -0,0 +1,26 @@
+---
+title: StoreValidator
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 32
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type StoreValidator = {
+ validate: (record: unknown) => R
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type)
+
diff --git a/docs/gen/StoreValidators-type.mdx b/docs/gen/StoreValidators-type.mdx
new file mode 100644
index 000000000..50692b2ed
--- /dev/null
+++ b/docs/gen/StoreValidators-type.mdx
@@ -0,0 +1,33 @@
+---
+title: StoreValidators
+status: published
+category: store
+group: TypeAlias
+author: api
+date: 06/23/2023
+order: 33
+---Public TypeAlias
+
+
+
+
+##### Signature
+
+
+```ts
+type StoreValidators = {
+ [K in R['typeName']]: StoreValidator<
+ Extract<
+ R,
+ {
+ typeName: K
+ }
+ >
+ >
+}
+```
+
+##### References
+
+[UnknownRecord](/gen/store/UnknownRecord-type), [StoreValidator](/gen/store/StoreValidator-type), [Extract](/gen/Extract-type)
+
diff --git a/docs/gen/StrokeOptions-interface.mdx b/docs/gen/StrokeOptions-interface.mdx
new file mode 100644
index 000000000..a09e48be0
--- /dev/null
+++ b/docs/gen/StrokeOptions-interface.mdx
@@ -0,0 +1,187 @@
+---
+title: StrokeOptions
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 86
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [easing](#StrokeOptions-easing-member)
+ - [end](#StrokeOptions-end-member)
+ - [last](#StrokeOptions-last-member)
+ - [simulatePressure](#StrokeOptions-simulatePressure-member)
+ - [size](#StrokeOptions-size-member)
+ - [smoothing](#StrokeOptions-smoothing-member)
+ - [start](#StrokeOptions-start-member)
+ - [streamline](#StrokeOptions-streamline-member)
+ - [thinning](#StrokeOptions-thinning-member)
+
+
+The options object for `getStroke` or `getStrokePoints`.
+
+
+##### Signature
+
+
+```ts
+interface StrokeOptions {}
+```
+
+---
+
+## Properties
+
+### `easing` \{#StrokeOptions-easing-member}
+
+Public PropertySignature
+
+An easing function to apply to each point's pressure.
+
+
+##### Signature
+
+
+```ts
+easing?: (pressure: number) => number
+```
+
+---
+
+### `end` \{#StrokeOptions-end-member}
+
+Public PropertySignature
+
+Cap, taper and easing for the end of the line.
+
+
+##### Signature
+
+
+```ts
+end?: {
+ cap?: boolean
+ taper?: boolean | number
+ easing?: (distance: number) => number
+}
+```
+
+---
+
+### `last` \{#StrokeOptions-last-member}
+
+Public PropertySignature
+
+Whether to handle the points as a completed stroke.
+
+
+##### Signature
+
+
+```ts
+last?: boolean
+```
+
+---
+
+### `simulatePressure` \{#StrokeOptions-simulatePressure-member}
+
+Public PropertySignature
+
+Whether to simulate pressure based on velocity.
+
+
+##### Signature
+
+
+```ts
+simulatePressure?: boolean
+```
+
+---
+
+### `size` \{#StrokeOptions-size-member}
+
+Public PropertySignature
+
+The base size (diameter) of the stroke.
+
+
+##### Signature
+
+
+```ts
+size?: number
+```
+
+---
+
+### `smoothing` \{#StrokeOptions-smoothing-member}
+
+Public PropertySignature
+
+How much to soften the stroke's edges.
+
+
+##### Signature
+
+
+```ts
+smoothing?: number
+```
+
+---
+
+### `start` \{#StrokeOptions-start-member}
+
+Public PropertySignature
+
+Cap, taper and easing for the start of the line.
+
+
+##### Signature
+
+
+```ts
+start?: {
+ cap?: boolean
+ taper?: boolean | number
+ easing?: (distance: number) => number
+}
+```
+
+---
+
+### `streamline` \{#StrokeOptions-streamline-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+streamline?: number
+```
+
+---
+
+### `thinning` \{#StrokeOptions-thinning-member}
+
+Public PropertySignature
+
+The effect of pressure on the stroke's size.
+
+
+##### Signature
+
+
+```ts
+thinning?: number
+```
+
+---
+
diff --git a/docs/gen/StrokePoint-interface.mdx b/docs/gen/StrokePoint-interface.mdx
new file mode 100644
index 000000000..d57c56338
--- /dev/null
+++ b/docs/gen/StrokePoint-interface.mdx
@@ -0,0 +1,139 @@
+---
+title: StrokePoint
+status: published
+category: primitives
+group: Interface
+author: api
+date: 06/23/2023
+order: 87
+---Public Interface
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [distance](#StrokePoint-distance-member)
+ - [input](#StrokePoint-input-member)
+ - [point](#StrokePoint-point-member)
+ - [pressure](#StrokePoint-pressure-member)
+ - [radius](#StrokePoint-radius-member)
+ - [runningLength](#StrokePoint-runningLength-member)
+ - [vector](#StrokePoint-vector-member)
+
+
+The points returned by `getStrokePoints`, and the input for `getStrokeOutlinePoints`
+
+
+##### Signature
+
+
+```ts
+interface StrokePoint {}
+```
+
+---
+
+## Properties
+
+### `distance` \{#StrokePoint-distance-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+distance: number
+```
+
+---
+
+### `input` \{#StrokePoint-input-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+input: Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `point` \{#StrokePoint-point-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+point: Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
+### `pressure` \{#StrokePoint-pressure-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+pressure: number
+```
+
+---
+
+### `radius` \{#StrokePoint-radius-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+radius: number
+```
+
+---
+
+### `runningLength` \{#StrokePoint-runningLength-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+runningLength: number
+```
+
+---
+
+### `vector` \{#StrokePoint-vector-member}
+
+Public PropertySignature
+
+##### Signature
+
+
+```ts
+vector: Vec2d
+```
+
+##### References
+
+[Vec2d](/gen/primitives/Vec2d-class)
+
+---
+
diff --git a/docs/gen/StyleProp-class.mdx b/docs/gen/StyleProp-class.mdx
new file mode 100644
index 000000000..f58f6002e
--- /dev/null
+++ b/docs/gen/StyleProp-class.mdx
@@ -0,0 +1,307 @@
+---
+title: StyleProp
+status: published
+category: tlschema
+group: Class
+author: api
+date: 06/23/2023
+order: 50
+---Public Class
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [defaultValue](#StyleProp-defaultValue-member)
+ - [id](#StyleProp-id-member)
+ - [type](#StyleProp-type-member)
+- [Methods](#methods)
+ - [define](#StyleProp-define-member-1)
+ - [defineEnum](#StyleProp-defineEnum-member-1)
+ - [validate](#StyleProp-validate-member-1)
+
+
+
+
+
+##### Signature
+
+
+```ts
+class StyleProp implements T.Validatable {}
+```
+
+##### References
+
+[T.Validatable](/gen/validate/Validatable-type)
+
+---
+
+### `Constructor`
+
+Public Constructor
+
+Constructs a new instance of the `StyleProp` class
+
+
+##### Parameters
+
+
+
+
+
+
+
+`id`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`defaultValue`
+
+
+
+
+```ts
+Type
+```
+
+
+
+
+
+
+
+
+`type`
+
+
+
+
+```ts
+T.Validatable
+```
+
+
+
+
+
+
+
+##### References
+
+[T.Validatable](/gen/validate/Validatable-type)
+
+---
+
+## Properties
+
+### `defaultValue` \{#StyleProp-defaultValue-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly defaultValue: Type
+```
+
+---
+
+### `id` \{#StyleProp-id-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly id: string
+```
+
+---
+
+### `type` \{#StyleProp-type-member}
+
+Public Readonly Property
+
+##### Signature
+
+
+```ts
+readonly type: T.Validatable
+```
+
+##### References
+
+[T.Validatable](/gen/validate/Validatable-type)
+
+---
+
+## Methods
+
+### `define()` \{#StyleProp-define-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`uniqueId`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`{ defaultValue, type }`
+
+
+
+
+```ts
+{
+ defaultValue: Type
+ type?: T.Validatable
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+StyleProp
+```
+
+##### References
+
+[T.Validatable](/gen/validate/Validatable-type), [StyleProp](/gen/tlschema/StyleProp-class)
+
+---
+
+### `defineEnum()` \{#StyleProp-defineEnum-member-1}
+
+Public Static Method
+
+##### Parameters
+
+
+
+
+
+
+
+`uniqueId`
+
+
+
+
+```ts
+string
+```
+
+
+
+
+
+
+
+
+`{ defaultValue, values }`
+
+
+
+
+```ts
+{
+ defaultValue: Values[number]
+ values: Values
+}
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+EnumStyleProp
+```
+
+##### References
+
+[EnumStyleProp](/gen/tlschema/EnumStyleProp-class)
+
+---
+
+### `validate()` \{#StyleProp-validate-member-1}
+
+Public Method
+
+##### Parameters
+
+
+
+
+
+
+
+`value`
+
+
+
+
+```ts
+unknown
+```
+
+
+
+
+
+
+
+##### Returns
+
+
+```ts
+Type
+```
+
+---
+
diff --git a/docs/gen/T-namespace.mdx b/docs/gen/T-namespace.mdx
new file mode 100644
index 000000000..f08b35713
--- /dev/null
+++ b/docs/gen/T-namespace.mdx
@@ -0,0 +1,821 @@
+---
+title: T
+status: published
+category: validate
+group: Namespace
+author: api
+date: 06/23/2023
+order: 0
+---None Namespace
+
+
+ Table of Contents
+- [Properties](#properties)
+ - [any](#T-any-var)
+ - [array](#T-array-var)
+ - [bigint](#T-bigint-var)
+ - [boolean](#T-boolean-var)
+ - [integer](#T-integer-var)
+ - [nonZeroInteger](#T-nonZeroInteger-var)
+ - [nonZeroNumber](#T-nonZeroNumber-var)
+ - [number](#T-number-var)
+ - [positiveInteger](#T-positiveInteger-var)
+ - [positiveNumber](#T-positiveNumber-var)
+ - [string](#T-string-var)
+ - [unknown](#T-unknown-var)
+ - [unknownObject](#T-unknownObject-var)
+- [Methods](#methods)
+ - [arrayOf](#T-arrayOf-function-1)
+ - [dict](#T-dict-function-1)
+ - [literal](#T-literal-function-1)
+ - [literalEnum](#T-literalEnum-function-1)
+ - [model](#T-model-function-1)
+ - [nullable](#T-nullable-function-1)
+ - [object](#T-object-function-1)
+ - [optional](#T-optional-function-1)
+ - [setEnum](#T-setEnum-function-1)
+ - [union](#T-union-function-1)
+
+
+##### Signature
+
+
+```ts
+
+```
+
+---
+
+## Properties
+
+### `any` \{#T-any-var}
+
+Public Readonly Variable
+
+Validation that accepts any value. Generally this should be avoided, but you can use it as an escape hatch if you want to work without validations for e.g. a prototype.
+
+
+##### Signature
+
+
+```ts
+any: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `array` \{#T-array-var}
+
+Public Readonly Variable
+
+Validates that a value is an array. To check the contents of the array, use T.arrayOf.
+
+
+##### Signature
+
+
+```ts
+array: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `bigint` \{#T-bigint-var}
+
+Public Readonly Variable
+
+Validates that a value is a bigint.
+
+
+##### Signature
+
+
+```ts
+bigint: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `boolean` \{#T-boolean-var}
+
+Public Readonly Variable
+
+Validates that a value is boolean.
+
+
+##### Signature
+
+
+```ts
+boolean: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `integer` \{#T-integer-var}
+
+Public Readonly Variable
+
+Fails if number is not an integer
+
+
+##### Signature
+
+
+```ts
+integer: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `nonZeroInteger` \{#T-nonZeroInteger-var}
+
+Public Readonly Variable
+
+Fails if value \<= 0 and is not an integer
+
+
+##### Signature
+
+
+```ts
+nonZeroInteger: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `nonZeroNumber` \{#T-nonZeroNumber-var}
+
+Public Readonly Variable
+
+Fails if value \<= 0
+
+
+##### Signature
+
+
+```ts
+nonZeroNumber: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `number` \{#T-number-var}
+
+Public Readonly Variable
+
+Validates that a value is a finite non-NaN number.
+
+
+##### Signature
+
+
+```ts
+number: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `positiveInteger` \{#T-positiveInteger-var}
+
+Public Readonly Variable
+
+Fails if value \< 0 and is not an integer
+
+
+##### Signature
+
+
+```ts
+positiveInteger: Validator
+```
+
+##### References
+
+[Validator](/gen/validate/T-Validator-class)
+
+---
+
+### `positiveNumber` \{#T-positiveNumber-var}
+
+