tldraw/packages/tlschema/api-report.md
Steve Ruiz 57bb341593
ShapeUtil refactor, Editor cleanup (#1611)
This PR improves the ergonomics of `ShapeUtil` classes.

### Cached methods

First, I've remove the cached methods (such as `bounds`) from the
`ShapeUtil` class and lifted this to the `Editor` class.

Previously, calling `ShapeUtil.getBounds` would return the un-cached
bounds of a shape, while calling `ShapeUtil.bounds` would return the
cached bounds of a shape. We also had `Editor.getBounds`, which would
call `ShapeUtil.bounds`. It was confusing. The cached methods like
`outline` were also marked with "please don't override", which suggested
the architecture was just wrong.

The only weirdness from this is that utils sometimes reach out to the
editor for cached versions of data rather than calling their own cached
methods. It's still an easier story to tell than what we had before.

### More defaults

We now have three and only three `abstract` methods for a `ShapeUtil`:
- `getDefaultProps` (renamed from `defaultProps`)
- `getBounds`,
- `component`
-  `indicator`

Previously, we also had `getCenter` as an abstract method, though this
was usually just the middle of the bounds anyway.

### Editing bounds

This PR removes the concept of editingBounds. The viewport will no
longer animate to editing shapes.

### Active area manager

This PR also removes the active area manager, which was not being used
in the way we expected it to be.

### Dpr manager

This PR removes the dpr manager and uses a hook instead to update it
from React. This is one less runtime browser dependency in the app, one
less thing to document.

### Moving things around

This PR also continues to try to organize related methods and properties
in the editor.

### Change Type

- [x] `major` — Breaking change

### Release Notes

- [editor] renames `defaultProps` to `getDefaultProps`
- [editor] removes `outline`, `outlineSegments`, `handles`, `bounds`
- [editor] renames `renderBackground` to `backgroundComponent`
2023-06-19 14:01:18 +00:00

36 KiB

API Report File for "@tldraw/tlschema"

Do not edit this file. It is a report generated by API Extractor.


import { BaseRecord } from '@tldraw/store';
import { Expand } from '@tldraw/utils';
import { Migrations } from '@tldraw/store';
import { RecordId } from '@tldraw/store';
import { RecordType } from '@tldraw/store';
import { Signal } from 'signia';
import { Store } from '@tldraw/store';
import { StoreSchema } from '@tldraw/store';
import { StoreSnapshot } from '@tldraw/store';
import { T } from '@tldraw/validate';
import { UnknownRecord } from '@tldraw/store';

// @public (undocumented)
export const ArrowShapeArrowheadEndStyle: EnumStyleProp<"arrow" | "bar" | "diamond" | "dot" | "inverted" | "none" | "pipe" | "square" | "triangle">;

// @public (undocumented)
export const ArrowShapeArrowheadStartStyle: EnumStyleProp<"arrow" | "bar" | "diamond" | "dot" | "inverted" | "none" | "pipe" | "square" | "triangle">;

// @internal (undocumented)
export const arrowShapeMigrations: Migrations;

// @public (undocumented)
export const arrowShapeProps: {
    labelColor: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    fill: EnumStyleProp<"none" | "pattern" | "semi" | "solid">;
    dash: EnumStyleProp<"dashed" | "dotted" | "draw" | "solid">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    arrowheadStart: EnumStyleProp<"arrow" | "bar" | "diamond" | "dot" | "inverted" | "none" | "pipe" | "square" | "triangle">;
    arrowheadEnd: EnumStyleProp<"arrow" | "bar" | "diamond" | "dot" | "inverted" | "none" | "pipe" | "square" | "triangle">;
    font: EnumStyleProp<"draw" | "mono" | "sans" | "serif">;
    start: T.UnionValidator<"type", {
        binding: T.ObjectValidator<{
            type: "binding";
            boundShapeId: TLShapeId;
            normalizedAnchor: Vec2dModel;
            isExact: boolean;
        }>;
        point: T.ObjectValidator<{
            type: "point";
            x: number;
            y: number;
        }>;
    }, never>;
    end: T.UnionValidator<"type", {
        binding: T.ObjectValidator<{
            type: "binding";
            boundShapeId: TLShapeId;
            normalizedAnchor: Vec2dModel;
            isExact: boolean;
        }>;
        point: T.ObjectValidator<{
            type: "point";
            x: number;
            y: number;
        }>;
    }, never>;
    bend: T.Validator<number>;
    text: T.Validator<string>;
};

// @public
export const assetIdValidator: T.Validator<TLAssetId>;

// @internal (undocumented)
export const assetMigrations: Migrations;

// @public (undocumented)
export const AssetRecordType: RecordType<TLAsset, "props" | "type">;

// @internal (undocumented)
export const assetValidator: T.Validator<TLAsset>;

// @internal (undocumented)
export const bookmarkShapeMigrations: Migrations;

// @public (undocumented)
export const bookmarkShapeProps: {
    w: T.Validator<number>;
    h: T.Validator<number>;
    assetId: T.Validator<TLAssetId | null>;
    url: T.Validator<string>;
};

// @public
export interface Box2dModel {
    // (undocumented)
    h: number;
    // (undocumented)
    w: number;
    // (undocumented)
    x: number;
    // (undocumented)
    y: number;
}

// @public (undocumented)
export const box2dModelValidator: T.Validator<Box2dModel>;

// @public (undocumented)
export const CameraRecordType: RecordType<TLCamera, never>;

// @public
export const canvasUiColorTypeValidator: T.Validator<"accent" | "black" | "laser" | "muted-1" | "selection-fill" | "selection-stroke" | "white">;

// @internal (undocumented)
export function CLIENT_FIXUP_SCRIPT(persistedStore: StoreSnapshot<TLRecord>): StoreSnapshot<TLRecord>;

// @public
export function createAssetValidator<Type extends string, Props extends object>(type: Type, props: T.Validator<Props>): T.ObjectValidator<{
    id: TLAssetId;
    typeName: 'asset';
    type: Type;
    props: Props;
}>;

// @public (undocumented)
export const createPresenceStateDerivation: ($user: Signal<{
    id: string;
    color: string;
    name: string;
}>, instanceId?: TLInstancePresence['id']) => (store: TLStore) => Signal<null | TLInstancePresence>;

// @public (undocumented)
export function createShapeId(id?: string): TLShapeId;

// @public (undocumented)
export function createShapeValidator<Type extends string, Props extends object>(type: Type, props?: {
    [K in keyof Props]: T.Validatable<Props[K]>;
}): T.ObjectValidator<{
    id: TLShapeId;
    typeName: "shape";
    x: number;
    y: number;
    rotation: number;
    index: string;
    parentId: TLParentId;
    type: Type;
    isLocked: boolean;
    opacity: number;
    props: Props | Record<string, unknown>;
}>;

// @public
export function createTLSchema({ shapes }: {
    shapes: Record<string, SchemaShapeInfo>;
}): TLSchema;

// @public (undocumented)
export const DefaultColorStyle: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;

// @public (undocumented)
export const DefaultDashStyle: EnumStyleProp<"dashed" | "dotted" | "draw" | "solid">;

// @public (undocumented)
export const DefaultFillStyle: EnumStyleProp<"none" | "pattern" | "semi" | "solid">;

// @public (undocumented)
export const DefaultFontStyle: EnumStyleProp<"draw" | "mono" | "sans" | "serif">;

// @public (undocumented)
export const DefaultHorizontalAlignStyle: EnumStyleProp<"end-legacy" | "end" | "middle-legacy" | "middle" | "start-legacy" | "start">;

// @public (undocumented)
export const DefaultSizeStyle: EnumStyleProp<"l" | "m" | "s" | "xl">;

// @public (undocumented)
export const DefaultVerticalAlignStyle: EnumStyleProp<"end" | "middle" | "start">;

// @public (undocumented)
export const DocumentRecordType: RecordType<TLDocument, never>;

// @internal (undocumented)
export const drawShapeMigrations: Migrations;

// @public (undocumented)
export const drawShapeProps: {
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    fill: EnumStyleProp<"none" | "pattern" | "semi" | "solid">;
    dash: EnumStyleProp<"dashed" | "dotted" | "draw" | "solid">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    segments: T.ArrayOfValidator<{
        type: "free" | "straight";
        points: Vec2dModel[];
    }>;
    isComplete: T.Validator<boolean>;
    isClosed: T.Validator<boolean>;
    isPen: T.Validator<boolean>;
};

// @public (undocumented)
export const 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;
}];

// @public (undocumented)
export 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;
};

// @internal (undocumented)
export const embedShapeMigrations: Migrations;

// @public
export const embedShapePermissionDefaults: {
    readonly 'allow-downloads-without-user-activation': false;
    readonly 'allow-downloads': false;
    readonly 'allow-modals': false;
    readonly 'allow-orientation-lock': false;
    readonly 'allow-pointer-lock': false;
    readonly 'allow-popups': true;
    readonly 'allow-popups-to-escape-sandbox': false;
    readonly 'allow-presentation': false;
    readonly 'allow-storage-access-by-user-activation': false;
    readonly 'allow-top-navigation': false;
    readonly 'allow-top-navigation-by-user-activation': false;
    readonly 'allow-scripts': true;
    readonly 'allow-same-origin': true;
    readonly 'allow-forms': true;
};

// @public (undocumented)
export const embedShapeProps: {
    w: T.Validator<number>;
    h: T.Validator<number>;
    url: T.Validator<string>;
};

// @public (undocumented)
export class EnumStyleProp<T> extends StyleProp<T> {
    // @internal
    constructor(id: string, defaultValue: T, values: readonly T[]);
    // (undocumented)
    readonly values: readonly T[];
}

// @internal (undocumented)
export function fixupRecord(oldRecord: TLRecord): {
    record: any;
    issues: string[];
};

// @internal (undocumented)
export const frameShapeMigrations: Migrations;

// @public (undocumented)
export const frameShapeProps: {
    w: T.Validator<number>;
    h: T.Validator<number>;
    name: T.Validator<string>;
};

// @public (undocumented)
export const GeoShapeGeoStyle: 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">;

// @internal (undocumented)
export const geoShapeMigrations: Migrations;

// @public (undocumented)
export const geoShapeProps: {
    geo: 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">;
    labelColor: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    fill: EnumStyleProp<"none" | "pattern" | "semi" | "solid">;
    dash: EnumStyleProp<"dashed" | "dotted" | "draw" | "solid">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    font: EnumStyleProp<"draw" | "mono" | "sans" | "serif">;
    align: EnumStyleProp<"end-legacy" | "end" | "middle-legacy" | "middle" | "start-legacy" | "start">;
    verticalAlign: EnumStyleProp<"end" | "middle" | "start">;
    url: T.Validator<string>;
    w: T.Validator<number>;
    h: T.Validator<number>;
    growY: T.Validator<number>;
    text: T.Validator<string>;
};

// @public (undocumented)
export function getDefaultTranslationLocale(): TLLanguage['locale'];

// @internal (undocumented)
export function getShapePropKeysByStyle(props: Record<string, T.Validatable<any>>): Map<StyleProp<unknown>, string>;

// @internal (undocumented)
export const groupShapeMigrations: Migrations;

// @internal (undocumented)
export const groupShapeProps: ShapeProps<TLGroupShape>;

// @internal (undocumented)
export const highlightShapeMigrations: Migrations;

// @public (undocumented)
export const highlightShapeProps: {
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    segments: T.ArrayOfValidator<{
        type: "free" | "straight";
        points: Vec2dModel[];
    }>;
    isComplete: T.Validator<boolean>;
    isPen: T.Validator<boolean>;
};

// @internal (undocumented)
export function idValidator<Id extends RecordId<UnknownRecord>>(prefix: Id['__type__']['typeName']): T.Validator<Id>;

// @internal (undocumented)
export const imageShapeMigrations: Migrations;

// @public (undocumented)
export const imageShapeProps: {
    w: T.Validator<number>;
    h: T.Validator<number>;
    playing: T.Validator<boolean>;
    url: T.Validator<string>;
    assetId: T.Validator<TLAssetId | null>;
    crop: T.Validator<{
        topLeft: Vec2dModel;
        bottomRight: Vec2dModel;
    } | null>;
};

// @public (undocumented)
export const InstancePageStateRecordType: RecordType<TLInstancePageState, "pageId">;

// @public (undocumented)
export const InstancePresenceRecordType: RecordType<TLInstancePresence, "currentPageId" | "userId" | "userName">;

// @public (undocumented)
export function isPageId(id: string): id is TLPageId;

// @public (undocumented)
export function isShape(record?: UnknownRecord): record is TLShape;

// @public (undocumented)
export function isShapeId(id?: string): id is TLShapeId;

// @public (undocumented)
export const 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: "繁體中文 (台灣)";
}];

// @internal (undocumented)
export const lineShapeMigrations: Migrations;

// @public (undocumented)
export const lineShapeProps: {
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    dash: EnumStyleProp<"dashed" | "dotted" | "draw" | "solid">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    spline: EnumStyleProp<"cubic" | "line">;
    handles: T.DictValidator<string, TLHandle>;
};

// @public (undocumented)
export const LineShapeSplineStyle: EnumStyleProp<"cubic" | "line">;

// @internal (undocumented)
export const noteShapeMigrations: Migrations;

// @public (undocumented)
export const noteShapeProps: {
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    font: EnumStyleProp<"draw" | "mono" | "sans" | "serif">;
    align: EnumStyleProp<"end-legacy" | "end" | "middle-legacy" | "middle" | "start-legacy" | "start">;
    verticalAlign: EnumStyleProp<"end" | "middle" | "start">;
    growY: T.Validator<number>;
    url: T.Validator<string>;
    text: T.Validator<string>;
};

// @internal (undocumented)
export const opacityValidator: T.Validator<number>;

// @internal (undocumented)
export const pageIdValidator: T.Validator<TLPageId>;

// @public (undocumented)
export const PageRecordType: RecordType<TLPage, "index" | "name">;

// @public (undocumented)
export const parentIdValidator: T.Validator<TLParentId>;

// @public (undocumented)
export const PointerRecordType: RecordType<TLPointer, never>;

// @internal (undocumented)
export const rootShapeMigrations: Migrations;

// @public (undocumented)
export type SchemaShapeInfo = {
    migrations?: Migrations;
    props?: Record<string, {
        validate: (prop: any) => any;
    }>;
};

// @internal (undocumented)
export const scribbleValidator: T.Validator<TLScribble>;

// @public (undocumented)
export const shapeIdValidator: T.Validator<TLShapeId>;

// @public (undocumented)
export type ShapeProps<Shape extends TLBaseShape<any, any>> = {
    [K in keyof Shape['props']]: T.Validatable<Shape['props'][K]>;
};

// @public (undocumented)
export class StyleProp<Type> implements T.Validatable<Type> {
    constructor(id: string, defaultValue: Type, type: T.Validatable<Type>);
    // (undocumented)
    readonly defaultValue: Type;
    // (undocumented)
    static define<Type>(uniqueId: string, { defaultValue, type }: {
        defaultValue: Type;
        type?: T.Validatable<Type>;
    }): StyleProp<Type>;
    // (undocumented)
    static defineEnum<const Values extends readonly unknown[]>(uniqueId: string, { defaultValue, values }: {
        defaultValue: Values[number];
        values: Values;
    }): EnumStyleProp<Values[number]>;
    // (undocumented)
    readonly id: string;
    // (undocumented)
    readonly type: T.Validatable<Type>;
    // (undocumented)
    validate(value: unknown): Type;
}

// @internal (undocumented)
export const textShapeMigrations: Migrations;

// @public (undocumented)
export const textShapeProps: {
    color: EnumStyleProp<"black" | "blue" | "green" | "grey" | "light-blue" | "light-green" | "light-red" | "light-violet" | "orange" | "red" | "violet" | "yellow">;
    size: EnumStyleProp<"l" | "m" | "s" | "xl">;
    font: EnumStyleProp<"draw" | "mono" | "sans" | "serif">;
    align: EnumStyleProp<"end-legacy" | "end" | "middle-legacy" | "middle" | "start-legacy" | "start">;
    w: T.Validator<number>;
    text: T.Validator<string>;
    scale: T.Validator<number>;
    autoSize: T.Validator<boolean>;
};

// @public
export const TL_CANVAS_UI_COLOR_TYPES: Set<"accent" | "black" | "laser" | "muted-1" | "selection-fill" | "selection-stroke" | "white">;

// @public (undocumented)
export type TLArrowShape = TLBaseShape<'arrow', TLArrowShapeProps>;

// @public (undocumented)
export type TLArrowShapeArrowheadStyle = T.TypeOf<typeof ArrowShapeArrowheadStartStyle>;

// @public (undocumented)
export type TLArrowShapeProps = ShapePropsType<typeof arrowShapeProps>;

// @public (undocumented)
export type TLArrowShapeTerminal = T.TypeOf<typeof ArrowShapeTerminal>;

// @public (undocumented)
export type TLAsset = TLBookmarkAsset | TLImageAsset | TLVideoAsset;

// @public (undocumented)
export type TLAssetId = RecordId<TLBaseAsset<any, any>>;

// @public (undocumented)
export type TLAssetPartial<T extends TLAsset = TLAsset> = T extends T ? {
    id: TLAssetId;
    type: T['type'];
    props?: Partial<T['props']>;
} & Partial<Omit<T, 'id' | 'props' | 'type'>> : never;

// @public (undocumented)
export type TLAssetShape = Extract<TLShape, {
    props: {
        assetId: TLAssetId;
    };
}>;

// @public (undocumented)
export interface TLBaseAsset<Type extends string, Props> extends BaseRecord<'asset', TLAssetId> {
    // (undocumented)
    props: Props;
    // (undocumented)
    type: Type;
}

// @public (undocumented)
export interface TLBaseShape<Type extends string, Props extends object> extends BaseRecord<'shape', TLShapeId> {
    // (undocumented)
    index: string;
    // (undocumented)
    isLocked: boolean;
    // (undocumented)
    opacity: TLOpacityType;
    // (undocumented)
    parentId: TLParentId;
    // (undocumented)
    props: Props;
    // (undocumented)
    rotation: number;
    // (undocumented)
    type: Type;
    // (undocumented)
    x: number;
    // (undocumented)
    y: number;
}

// @public
export type TLBookmarkAsset = TLBaseAsset<'bookmark', {
    title: string;
    description: string;
    image: string;
    src: null | string;
}>;

// @public (undocumented)
export type TLBookmarkShape = TLBaseShape<'bookmark', TLBookmarkShapeProps>;

// @public
export interface TLCamera extends BaseRecord<'camera', TLCameraId> {
    // (undocumented)
    x: number;
    // (undocumented)
    y: number;
    // (undocumented)
    z: number;
}

// @public
export type TLCameraId = RecordId<TLCamera>;

// @public
export type TLCanvasUiColor = SetValue<typeof TL_CANVAS_UI_COLOR_TYPES>;

// @public
export interface TLCursor {
    // (undocumented)
    color: TLCanvasUiColor;
    // (undocumented)
    rotation: number;
    // (undocumented)
    type: TLCursorType;
}

// @public
export type TLCursorType = SetValue<typeof TL_CURSOR_TYPES>;

// @public (undocumented)
export type TLDefaultColorStyle = T.TypeOf<typeof DefaultColorStyle>;

// @public (undocumented)
export type TLDefaultDashStyle = T.TypeOf<typeof DefaultDashStyle>;

// @public (undocumented)
export type TLDefaultFillStyle = T.TypeOf<typeof DefaultFillStyle>;

// @public (undocumented)
export type TLDefaultFontStyle = T.TypeOf<typeof DefaultFontStyle>;

// @public (undocumented)
export type TLDefaultHorizontalAlignStyle = T.TypeOf<typeof DefaultHorizontalAlignStyle>;

// @public
export type TLDefaultShape = TLArrowShape | TLBookmarkShape | TLDrawShape | TLEmbedShape | TLFrameShape | TLGeoShape | TLGroupShape | TLHighlightShape | TLImageShape | TLLineShape | TLNoteShape | TLTextShape | TLVideoShape;

// @public (undocumented)
export type TLDefaultSizeStyle = T.TypeOf<typeof DefaultSizeStyle>;

// @public (undocumented)
export type TLDefaultVerticalAlignStyle = T.TypeOf<typeof DefaultVerticalAlignStyle>;

// @public
export interface TLDocument extends BaseRecord<'document', RecordId<TLDocument>> {
    // (undocumented)
    gridSize: number;
    // (undocumented)
    name: string;
}

// @public (undocumented)
export const TLDOCUMENT_ID: RecordId<TLDocument>;

// @public (undocumented)
export type TLDrawShape = TLBaseShape<'draw', TLDrawShapeProps>;

// @public (undocumented)
export type TLDrawShapeSegment = T.TypeOf<typeof DrawShapeSegment>;

// @public (undocumented)
export type TLEmbedShape = TLBaseShape<'embed', TLEmbedShapeProps>;

// @public (undocumented)
export type TLEmbedShapePermissions = {
    [K in keyof typeof embedShapePermissionDefaults]?: boolean;
};

// @public (undocumented)
export type TLFrameShape = TLBaseShape<'frame', TLFrameShapeProps>;

// @public (undocumented)
export type TLGeoShape = TLBaseShape<'geo', TLGeoShapeProps>;

// @public (undocumented)
export type TLGroupShape = TLBaseShape<'group', TLGroupShapeProps>;

// @public
export interface TLHandle {
    // (undocumented)
    canBind?: boolean;
    id: string;
    // (undocumented)
    index: string;
    // (undocumented)
    type: TLHandleType;
    // (undocumented)
    x: number;
    // (undocumented)
    y: number;
}

// @public
export type TLHandleType = SetValue<typeof TL_HANDLE_TYPES>;

// @public (undocumented)
export type TLHighlightShape = TLBaseShape<'highlight', TLHighlightShapeProps>;

// @public
export type TLImageAsset = TLBaseAsset<'image', {
    w: number;
    h: number;
    name: string;
    isAnimated: boolean;
    mimeType: null | string;
    src: null | string;
}>;

// @public (undocumented)
export type TLImageShape = TLBaseShape<'image', TLImageShapeProps>;

// @public (undocumented)
export type TLImageShapeCrop = T.TypeOf<typeof ImageShapeCrop>;

// @public (undocumented)
export type TLImageShapeProps = ShapePropsType<typeof imageShapeProps>;

// @public
export interface TLInstance extends BaseRecord<'instance', TLInstanceId> {
    // (undocumented)
    brush: Box2dModel | null;
    // (undocumented)
    chatMessage: string;
    // (undocumented)
    currentPageId: TLPageId;
    // (undocumented)
    cursor: TLCursor;
    // (undocumented)
    exportBackground: boolean;
    // (undocumented)
    followingUserId: null | string;
    // (undocumented)
    highlightedUserIds: string[];
    // (undocumented)
    isChatting: boolean;
    // (undocumented)
    isDebugMode: boolean;
    // (undocumented)
    isFocusMode: boolean;
    // (undocumented)
    isGridMode: boolean;
    // (undocumented)
    isPenMode: boolean;
    // (undocumented)
    isToolLocked: boolean;
    // (undocumented)
    opacityForNextShape: TLOpacityType;
    // (undocumented)
    screenBounds: Box2dModel;
    // (undocumented)
    scribble: null | TLScribble;
    // (undocumented)
    stylesForNextShape: Record<string, unknown>;
    // (undocumented)
    zoomBrush: Box2dModel | null;
}

// @public (undocumented)
export const TLINSTANCE_ID: TLInstanceId;

// @public (undocumented)
export type TLInstanceId = RecordId<TLInstance>;

// @public
export interface TLInstancePageState extends BaseRecord<'instance_page_state', TLInstancePageStateId> {
    // (undocumented)
    croppingId: null | TLShapeId;
    // (undocumented)
    editingId: null | TLShapeId;
    // (undocumented)
    erasingIds: TLShapeId[];
    // (undocumented)
    focusLayerId: null | TLShapeId;
    // (undocumented)
    hintingIds: TLShapeId[];
    // (undocumented)
    hoveredId: null | TLShapeId;
    // (undocumented)
    pageId: RecordId<TLPage>;
    // (undocumented)
    selectedIds: TLShapeId[];
}

// @public (undocumented)
export interface TLInstancePresence extends BaseRecord<'instance_presence', TLInstancePresenceID> {
    // (undocumented)
    brush: Box2dModel | null;
    // (undocumented)
    camera: {
        x: number;
        y: number;
        z: number;
    };
    // (undocumented)
    chatMessage: string;
    // (undocumented)
    color: string;
    // (undocumented)
    currentPageId: TLPageId;
    // (undocumented)
    cursor: {
        x: number;
        y: number;
        type: TLCursor['type'];
        rotation: number;
    };
    // (undocumented)
    followingUserId: null | string;
    // (undocumented)
    lastActivityTimestamp: number;
    // (undocumented)
    screenBounds: Box2dModel;
    // (undocumented)
    scribble: null | TLScribble;
    // (undocumented)
    selectedIds: TLShapeId[];
    // (undocumented)
    userId: string;
    // (undocumented)
    userName: string;
}

// @public (undocumented)
export type TLLanguage = (typeof LANGUAGES)[number];

// @public (undocumented)
export type TLLineShape = TLBaseShape<'line', TLLineShapeProps>;

// @public (undocumented)
export type TLNoteShape = TLBaseShape<'note', TLNoteShapeProps>;

// @public (undocumented)
export type TLOpacityType = number;

// @public
export interface TLPage extends BaseRecord<'page', TLPageId> {
    // (undocumented)
    index: string;
    // (undocumented)
    name: string;
}

// @public (undocumented)
export type TLPageId = RecordId<TLPage>;

// @public (undocumented)
export type TLParentId = TLPageId | TLShapeId;

// @public (undocumented)
export const TLPOINTER_ID: TLPointerId;

// @public (undocumented)
export type TLRecord = TLAsset | TLCamera | TLDocument | TLInstance | TLInstancePageState | TLInstancePresence | TLPage | TLPointer | TLShape;

// @public (undocumented)
export type TLSchema = StoreSchema<TLRecord, TLStoreProps>;

// @public
export type TLScribble = {
    points: Vec2dModel[];
    size: number;
    color: TLCanvasUiColor;
    opacity: number;
    state: SetValue<typeof TL_SCRIBBLE_STATES>;
    delay: number;
};

// @public
export type TLShape = TLDefaultShape | TLUnknownShape;

// @public (undocumented)
export type TLShapeId = RecordId<TLUnknownShape>;

// @public (undocumented)
export type TLShapePartial<T extends TLShape = TLShape> = T extends T ? {
    id: TLShapeId;
    type: T['type'];
    props?: Partial<T['props']>;
} & Partial<Omit<T, 'id' | 'props' | 'type'>> : never;

// @public (undocumented)
export type TLShapeProp = keyof TLShapeProps;

// @public (undocumented)
export type TLShapeProps = Identity<UnionToIntersection<TLDefaultShape['props']>>;

// @public (undocumented)
export type TLStore = Store<TLRecord, TLStoreProps>;

// @public (undocumented)
export type TLStoreProps = {
    defaultName: string;
};

// @public (undocumented)
export type TLStoreSchema = StoreSchema<TLRecord, TLStoreProps>;

// @public (undocumented)
export type TLStoreSnapshot = StoreSnapshot<TLRecord>;

// @public (undocumented)
export type TLTextShape = TLBaseShape<'text', TLTextShapeProps>;

// @public (undocumented)
export type TLTextShapeProps = ShapePropsType<typeof textShapeProps>;

// @public
export type TLUnknownShape = TLBaseShape<string, object>;

// @public
export type TLVideoAsset = TLBaseAsset<'video', {
    w: number;
    h: number;
    name: string;
    isAnimated: boolean;
    mimeType: null | string;
    src: null | string;
}>;

// @public (undocumented)
export type TLVideoShape = TLBaseShape<'video', TLVideoShapeProps>;

// @public
export interface Vec2dModel {
    // (undocumented)
    x: number;
    // (undocumented)
    y: number;
    // (undocumented)
    z?: number;
}

// @public (undocumented)
export const vec2dModelValidator: T.Validator<Vec2dModel>;

// @internal (undocumented)
export const videoShapeMigrations: Migrations;

// @public (undocumented)
export const videoShapeProps: {
    w: T.Validator<number>;
    h: T.Validator<number>;
    time: T.Validator<number>;
    playing: T.Validator<boolean>;
    url: T.Validator<string>;
    assetId: T.Validator<TLAssetId | null>;
};

// (No @packageDocumentation comment for this package)