@tldraw/tlschema 4.5.3 → 4.6.0-canary.0bcbb3ed5bcb
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-cjs/createTLSchema.js +27 -1
- package/dist-cjs/createTLSchema.js.map +2 -2
- package/dist-cjs/index.d.ts +265 -11
- package/dist-cjs/index.js +7 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/records/TLCustomRecord.js +102 -0
- package/dist-cjs/records/TLCustomRecord.js.map +7 -0
- package/dist-cjs/records/TLRecord.js.map +1 -1
- package/dist-esm/createTLSchema.mjs +30 -1
- package/dist-esm/createTLSchema.mjs.map +2 -2
- package/dist-esm/index.d.mts +265 -11
- package/dist-esm/index.mjs +13 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/records/TLCustomRecord.mjs +85 -0
- package/dist-esm/records/TLCustomRecord.mjs.map +7 -0
- package/package.json +5 -5
- package/src/createTLSchema.ts +49 -8
- package/src/index.ts +15 -1
- package/src/records/TLCustomRecord.ts +297 -0
- package/src/records/TLRecord.ts +81 -12
|
@@ -33,6 +33,7 @@ var import_TLArrowBinding = require("./bindings/TLArrowBinding");
|
|
|
33
33
|
var import_TLAsset = require("./records/TLAsset");
|
|
34
34
|
var import_TLBinding = require("./records/TLBinding");
|
|
35
35
|
var import_TLCamera = require("./records/TLCamera");
|
|
36
|
+
var import_TLCustomRecord = require("./records/TLCustomRecord");
|
|
36
37
|
var import_TLDocument = require("./records/TLDocument");
|
|
37
38
|
var import_TLInstance = require("./records/TLInstance");
|
|
38
39
|
var import_TLPage = require("./records/TLPage");
|
|
@@ -76,6 +77,7 @@ const defaultBindingSchemas = {
|
|
|
76
77
|
function createTLSchema({
|
|
77
78
|
shapes = defaultShapeSchemas,
|
|
78
79
|
bindings = defaultBindingSchemas,
|
|
80
|
+
records = {},
|
|
79
81
|
migrations
|
|
80
82
|
} = {}) {
|
|
81
83
|
const stylesById = /* @__PURE__ */ new Map();
|
|
@@ -90,6 +92,28 @@ function createTLSchema({
|
|
|
90
92
|
const ShapeRecordType = (0, import_TLShape.createShapeRecordType)(shapes);
|
|
91
93
|
const BindingRecordType = (0, import_TLBinding.createBindingRecordType)(bindings);
|
|
92
94
|
const InstanceRecordType = (0, import_TLInstance.createInstanceRecordType)(stylesById);
|
|
95
|
+
const builtInTypeNames = /* @__PURE__ */ new Set([
|
|
96
|
+
"asset",
|
|
97
|
+
"binding",
|
|
98
|
+
"camera",
|
|
99
|
+
"document",
|
|
100
|
+
"instance",
|
|
101
|
+
"instance_page_state",
|
|
102
|
+
"page",
|
|
103
|
+
"instance_presence",
|
|
104
|
+
"pointer",
|
|
105
|
+
"shape",
|
|
106
|
+
"store"
|
|
107
|
+
]);
|
|
108
|
+
const customRecordTypes = {};
|
|
109
|
+
for (const [typeName, config] of Object.entries(records)) {
|
|
110
|
+
if (builtInTypeNames.has(typeName)) {
|
|
111
|
+
throw new Error(
|
|
112
|
+
`Custom record type name '${typeName}' conflicts with tldraw's built-in record type of that name. Choose a different name instead.`
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
customRecordTypes[typeName] = (0, import_TLCustomRecord.createCustomRecordType)(typeName, config);
|
|
116
|
+
}
|
|
93
117
|
return import_store.StoreSchema.create(
|
|
94
118
|
{
|
|
95
119
|
asset: import_TLAsset.AssetRecordType,
|
|
@@ -101,7 +125,8 @@ function createTLSchema({
|
|
|
101
125
|
page: import_TLPage.PageRecordType,
|
|
102
126
|
instance_presence: import_TLPresence.InstancePresenceRecordType,
|
|
103
127
|
pointer: import_TLPointer.PointerRecordType,
|
|
104
|
-
shape: ShapeRecordType
|
|
128
|
+
shape: ShapeRecordType,
|
|
129
|
+
...customRecordTypes
|
|
105
130
|
},
|
|
106
131
|
{
|
|
107
132
|
migrations: [
|
|
@@ -120,6 +145,7 @@ function createTLSchema({
|
|
|
120
145
|
import_TLVideoAsset.videoAssetMigrations,
|
|
121
146
|
...(0, import_recordsWithProps.processPropsMigrations)("shape", shapes),
|
|
122
147
|
...(0, import_recordsWithProps.processPropsMigrations)("binding", bindings),
|
|
148
|
+
...(0, import_TLCustomRecord.processCustomRecordMigrations)(records),
|
|
123
149
|
...migrations ?? []
|
|
124
150
|
],
|
|
125
151
|
onValidationFailure: import_TLStore.onValidationFailure,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/createTLSchema.ts"],
|
|
4
|
-
"sourcesContent": ["import { LegacyMigrations, MigrationSequence, StoreSchema, StoreValidator } from '@tldraw/store'\nimport { objectMapValues } from '@tldraw/utils'\nimport { TLStoreProps, createIntegrityChecker, onValidationFailure } from './TLStore'\nimport { bookmarkAssetMigrations } from './assets/TLBookmarkAsset'\nimport { imageAssetMigrations } from './assets/TLImageAsset'\nimport { videoAssetMigrations } from './assets/TLVideoAsset'\nimport { arrowBindingMigrations, arrowBindingProps } from './bindings/TLArrowBinding'\nimport { AssetRecordType, assetMigrations } from './records/TLAsset'\nimport { TLBinding, TLDefaultBinding, createBindingRecordType } from './records/TLBinding'\nimport { CameraRecordType, cameraMigrations } from './records/TLCamera'\nimport { DocumentRecordType, documentMigrations } from './records/TLDocument'\nimport { createInstanceRecordType, instanceMigrations } from './records/TLInstance'\nimport { PageRecordType, pageMigrations } from './records/TLPage'\nimport { InstancePageStateRecordType, instancePageStateMigrations } from './records/TLPageState'\nimport { PointerRecordType, pointerMigrations } from './records/TLPointer'\nimport { InstancePresenceRecordType, instancePresenceMigrations } from './records/TLPresence'\nimport { TLRecord } from './records/TLRecord'\nimport {\n\tTLDefaultShape,\n\tTLShape,\n\tcreateShapeRecordType,\n\tgetShapePropKeysByStyle,\n\trootShapeMigrations,\n} from './records/TLShape'\nimport { RecordProps, TLPropsMigrations, processPropsMigrations } from './recordsWithProps'\nimport { arrowShapeMigrations, arrowShapeProps } from './shapes/TLArrowShape'\nimport { TLBaseShape } from './shapes/TLBaseShape'\nimport { bookmarkShapeMigrations, bookmarkShapeProps } from './shapes/TLBookmarkShape'\nimport { drawShapeMigrations, drawShapeProps } from './shapes/TLDrawShape'\nimport { embedShapeMigrations, embedShapeProps } from './shapes/TLEmbedShape'\nimport { frameShapeMigrations, frameShapeProps } from './shapes/TLFrameShape'\nimport { geoShapeMigrations, geoShapeProps } from './shapes/TLGeoShape'\nimport { groupShapeMigrations, groupShapeProps } from './shapes/TLGroupShape'\nimport { highlightShapeMigrations, highlightShapeProps } from './shapes/TLHighlightShape'\nimport { imageShapeMigrations, imageShapeProps } from './shapes/TLImageShape'\nimport { lineShapeMigrations, lineShapeProps } from './shapes/TLLineShape'\nimport { noteShapeMigrations, noteShapeProps } from './shapes/TLNoteShape'\nimport { textShapeMigrations, textShapeProps } from './shapes/TLTextShape'\nimport { videoShapeMigrations, videoShapeProps } from './shapes/TLVideoShape'\nimport { storeMigrations } from './store-migrations'\nimport { StyleProp } from './styles/StyleProp'\n\n/**\n * Configuration information for a schema type (shape or binding), including its properties,\n * metadata, and migration sequences for data evolution over time.\n *\n * @public\n * @example\n * ```ts\n * import { arrowShapeMigrations, arrowShapeProps } from './shapes/TLArrowShape'\n *\n * const myShapeSchema: SchemaPropsInfo = {\n * migrations: arrowShapeMigrations,\n * props: arrowShapeProps,\n * meta: {\n * customField: T.string,\n * },\n * }\n * ```\n */\nexport interface SchemaPropsInfo {\n\t/**\n\t * Migration sequences for handling data evolution over time. Can be legacy migrations,\n\t * props-specific migrations, or general migration sequences.\n\t */\n\tmigrations?: LegacyMigrations | TLPropsMigrations | MigrationSequence\n\n\t/**\n\t * Validation schema for the shape or binding properties. Maps property names to their validators.\n\t */\n\tprops?: Record<string, StoreValidator<any>>\n\n\t/**\n\t * Validation schema for metadata fields. Maps metadata field names to their validators.\n\t */\n\tmeta?: Record<string, StoreValidator<any>>\n}\n\n/**\n * The complete schema definition for a tldraw store, encompassing all record types,\n * validation rules, and migration sequences. This schema defines the structure of\n * the persistent data model used by tldraw.\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas } from '@tldraw/tlschema'\n * import { Store } from '@tldraw/store'\n *\n * const schema: TLSchema = createTLSchema({\n * shapes: defaultShapeSchemas,\n * })\n *\n * const store = new Store({ schema })\n * ```\n */\nexport type TLSchema = StoreSchema<TLRecord, TLStoreProps>\n\n/**\n * Default shape schema configurations for all built-in tldraw shape types.\n * Each shape type includes its validation props and migration sequences.\n *\n * This object contains schema information for:\n * - arrow: Directional lines that can bind to other shapes\n * - bookmark: Website bookmark cards with preview information\n * - draw: Freehand drawing paths created with drawing tools\n * - embed: Embedded content from external services (YouTube, Figma, etc.)\n * - frame: Container shapes for organizing content\n * - geo: Geometric shapes (rectangles, ellipses, triangles, etc.)\n * - group: Logical groupings of multiple shapes\n * - highlight: Highlighting strokes from the highlighter tool\n * - image: Raster image shapes referencing image assets\n * - line: Multi-point lines and splines\n * - note: Sticky note shapes with text content\n * - text: Rich text shapes with formatting support\n * - video: Video shapes referencing video assets\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas } from '@tldraw/tlschema'\n *\n * // Use all default shapes\n * const schema = createTLSchema({\n * shapes: defaultShapeSchemas,\n * })\n *\n * // Use only specific default shapes\n * const minimalSchema = createTLSchema({\n * shapes: {\n * geo: defaultShapeSchemas.geo,\n * text: defaultShapeSchemas.text,\n * },\n * })\n * ```\n */\nexport const defaultShapeSchemas = {\n\tarrow: { migrations: arrowShapeMigrations, props: arrowShapeProps },\n\tbookmark: { migrations: bookmarkShapeMigrations, props: bookmarkShapeProps },\n\tdraw: { migrations: drawShapeMigrations, props: drawShapeProps },\n\tembed: { migrations: embedShapeMigrations, props: embedShapeProps },\n\tframe: { migrations: frameShapeMigrations, props: frameShapeProps },\n\tgeo: { migrations: geoShapeMigrations, props: geoShapeProps },\n\tgroup: { migrations: groupShapeMigrations, props: groupShapeProps },\n\thighlight: { migrations: highlightShapeMigrations, props: highlightShapeProps },\n\timage: { migrations: imageShapeMigrations, props: imageShapeProps },\n\tline: { migrations: lineShapeMigrations, props: lineShapeProps },\n\tnote: { migrations: noteShapeMigrations, props: noteShapeProps },\n\ttext: { migrations: textShapeMigrations, props: textShapeProps },\n\tvideo: { migrations: videoShapeMigrations, props: videoShapeProps },\n} satisfies {\n\t[T in TLDefaultShape['type']]: {\n\t\tmigrations: SchemaPropsInfo['migrations']\n\t\tprops: RecordProps<TLBaseShape<T, Extract<TLDefaultShape, { type: T }>['props']>>\n\t}\n}\n\n/**\n * Default binding schema configurations for all built-in tldraw binding types.\n * Bindings represent relationships between shapes, such as arrows connected to shapes.\n *\n * Currently includes:\n * - arrow: Bindings that connect arrow shapes to other shapes at specific anchor points\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultBindingSchemas } from '@tldraw/tlschema'\n *\n * // Use default bindings\n * const schema = createTLSchema({\n * bindings: defaultBindingSchemas,\n * })\n *\n * // Add custom binding alongside defaults\n * const customSchema = createTLSchema({\n * bindings: {\n * ...defaultBindingSchemas,\n * myCustomBinding: {\n * props: myCustomBindingProps,\n * migrations: myCustomBindingMigrations,\n * },\n * },\n * })\n * ```\n */\nexport const defaultBindingSchemas = {\n\tarrow: { migrations: arrowBindingMigrations, props: arrowBindingProps },\n} satisfies { [T in TLDefaultBinding['type']]: SchemaPropsInfo }\n\n/**\n * Creates a complete TLSchema for use with tldraw stores. This schema defines the structure,\n * validation, and migration sequences for all record types in a tldraw application.\n *\n * The schema includes all core record types (pages, cameras, instances, etc.) plus the\n * shape and binding types you specify. Style properties are automatically collected from\n * all shapes to ensure consistency across the application.\n *\n * @param options - Configuration options for the schema\n * - shapes - Shape schema configurations. Defaults to defaultShapeSchemas if not provided\n * - bindings - Binding schema configurations. Defaults to defaultBindingSchemas if not provided\n * - migrations - Additional migration sequences to include in the schema\n * @returns A complete TLSchema ready for use with Store creation\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas, defaultBindingSchemas } from '@tldraw/tlschema'\n * import { Store } from '@tldraw/store'\n *\n * // Create schema with all default shapes and bindings\n * const schema = createTLSchema()\n *\n * // Create schema with custom shapes added\n * const customSchema = createTLSchema({\n * shapes: {\n * ...defaultShapeSchemas,\n * myCustomShape: {\n * props: myCustomShapeProps,\n * migrations: myCustomShapeMigrations,\n * },\n * },\n * })\n *\n * // Create schema with only specific shapes\n * const minimalSchema = createTLSchema({\n * shapes: {\n * geo: defaultShapeSchemas.geo,\n * text: defaultShapeSchemas.text,\n * },\n * bindings: defaultBindingSchemas,\n * })\n *\n * // Use the schema with a store\n * const store = new Store({\n * schema: customSchema,\n * props: {\n * defaultName: 'My Drawing',\n * },\n * })\n * ```\n */\nexport function createTLSchema({\n\tshapes = defaultShapeSchemas,\n\tbindings = defaultBindingSchemas,\n\tmigrations,\n}: {\n\tshapes?: Record<string, SchemaPropsInfo>\n\tbindings?: Record<string, SchemaPropsInfo>\n\tmigrations?: readonly MigrationSequence[]\n} = {}): TLSchema {\n\tconst stylesById = new Map<string, StyleProp<unknown>>()\n\tfor (const shape of objectMapValues(shapes)) {\n\t\tfor (const style of getShapePropKeysByStyle(shape.props ?? {}).keys()) {\n\t\t\tif (stylesById.has(style.id) && stylesById.get(style.id) !== style) {\n\t\t\t\tthrow new Error(`Multiple StyleProp instances with the same id: ${style.id}`)\n\t\t\t}\n\t\t\tstylesById.set(style.id, style)\n\t\t}\n\t}\n\n\tconst ShapeRecordType = createShapeRecordType(shapes)\n\tconst BindingRecordType = createBindingRecordType(bindings)\n\tconst InstanceRecordType = createInstanceRecordType(stylesById)\n\n\treturn StoreSchema.create(\n\t\t{\n\t\t\tasset: AssetRecordType,\n\t\t\tbinding: BindingRecordType,\n\t\t\tcamera: CameraRecordType,\n\t\t\tdocument: DocumentRecordType,\n\t\t\tinstance: InstanceRecordType,\n\t\t\tinstance_page_state: InstancePageStateRecordType,\n\t\t\tpage: PageRecordType,\n\t\t\tinstance_presence: InstancePresenceRecordType,\n\t\t\tpointer: PointerRecordType,\n\t\t\tshape: ShapeRecordType,\n\t\t},\n\t\t{\n\t\t\tmigrations: [\n\t\t\t\tstoreMigrations,\n\t\t\t\tassetMigrations,\n\t\t\t\tcameraMigrations,\n\t\t\t\tdocumentMigrations,\n\t\t\t\tinstanceMigrations,\n\t\t\t\tinstancePageStateMigrations,\n\t\t\t\tpageMigrations,\n\t\t\t\tinstancePresenceMigrations,\n\t\t\t\tpointerMigrations,\n\t\t\t\trootShapeMigrations,\n\n\t\t\t\tbookmarkAssetMigrations,\n\t\t\t\timageAssetMigrations,\n\t\t\t\tvideoAssetMigrations,\n\n\t\t\t\t...processPropsMigrations<TLShape>('shape', shapes),\n\t\t\t\t...processPropsMigrations<TLBinding>('binding', bindings),\n\n\t\t\t\t...(migrations ?? []),\n\t\t\t],\n\t\t\tonValidationFailure,\n\t\t\tcreateIntegrityChecker,\n\t\t}\n\t)\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiF;AACjF,mBAAgC;AAChC,qBAA0E;AAC1E,6BAAwC;AACxC,0BAAqC;AACrC,0BAAqC;AACrC,4BAA0D;AAC1D,qBAAiD;AACjD,uBAAqE;AACrE,sBAAmD;AACnD,wBAAuD;AACvD,wBAA6D;AAC7D,oBAA+C;AAC/C,yBAAyE;AACzE,uBAAqD;AACrD,wBAAuE;AAEvE,qBAMO;AACP,8BAAuE;AACvE,0BAAsD;AAEtD,6BAA4D;AAC5D,yBAAoD;AACpD,0BAAsD;AACtD,0BAAsD;AACtD,wBAAkD;AAClD,0BAAsD;AACtD,8BAA8D;AAC9D,0BAAsD;AACtD,yBAAoD;AACpD,yBAAoD;AACpD,yBAAoD;AACpD,0BAAsD;AACtD,8BAAgC;AAiGzB,MAAM,sBAAsB;AAAA,EAClC,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,UAAU,EAAE,YAAY,gDAAyB,OAAO,0CAAmB;AAAA,EAC3E,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,KAAK,EAAE,YAAY,sCAAoB,OAAO,gCAAc;AAAA,EAC5D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,WAAW,EAAE,YAAY,kDAA0B,OAAO,4CAAoB;AAAA,EAC9E,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AACnE;AAoCO,MAAM,wBAAwB;AAAA,EACpC,OAAO,EAAE,YAAY,8CAAwB,OAAO,wCAAkB;AACvE;
|
|
4
|
+
"sourcesContent": ["import { LegacyMigrations, MigrationSequence, StoreSchema, StoreValidator } from '@tldraw/store'\nimport { objectMapValues } from '@tldraw/utils'\nimport { TLStoreProps, createIntegrityChecker, onValidationFailure } from './TLStore'\nimport { bookmarkAssetMigrations } from './assets/TLBookmarkAsset'\nimport { imageAssetMigrations } from './assets/TLImageAsset'\nimport { videoAssetMigrations } from './assets/TLVideoAsset'\nimport { arrowBindingMigrations, arrowBindingProps } from './bindings/TLArrowBinding'\nimport { AssetRecordType, assetMigrations } from './records/TLAsset'\nimport { TLBinding, TLDefaultBinding, createBindingRecordType } from './records/TLBinding'\nimport { CameraRecordType, cameraMigrations } from './records/TLCamera'\nimport {\n\tCustomRecordInfo,\n\tcreateCustomRecordType,\n\tprocessCustomRecordMigrations,\n} from './records/TLCustomRecord'\nimport { DocumentRecordType, documentMigrations } from './records/TLDocument'\nimport { createInstanceRecordType, instanceMigrations } from './records/TLInstance'\nimport { PageRecordType, pageMigrations } from './records/TLPage'\nimport { InstancePageStateRecordType, instancePageStateMigrations } from './records/TLPageState'\nimport { PointerRecordType, pointerMigrations } from './records/TLPointer'\nimport { InstancePresenceRecordType, instancePresenceMigrations } from './records/TLPresence'\nimport { TLRecord } from './records/TLRecord'\nimport {\n\tTLDefaultShape,\n\tTLShape,\n\tcreateShapeRecordType,\n\tgetShapePropKeysByStyle,\n\trootShapeMigrations,\n} from './records/TLShape'\nimport { RecordProps, TLPropsMigrations, processPropsMigrations } from './recordsWithProps'\nimport { arrowShapeMigrations, arrowShapeProps } from './shapes/TLArrowShape'\nimport { TLBaseShape } from './shapes/TLBaseShape'\nimport { bookmarkShapeMigrations, bookmarkShapeProps } from './shapes/TLBookmarkShape'\nimport { drawShapeMigrations, drawShapeProps } from './shapes/TLDrawShape'\nimport { embedShapeMigrations, embedShapeProps } from './shapes/TLEmbedShape'\nimport { frameShapeMigrations, frameShapeProps } from './shapes/TLFrameShape'\nimport { geoShapeMigrations, geoShapeProps } from './shapes/TLGeoShape'\nimport { groupShapeMigrations, groupShapeProps } from './shapes/TLGroupShape'\nimport { highlightShapeMigrations, highlightShapeProps } from './shapes/TLHighlightShape'\nimport { imageShapeMigrations, imageShapeProps } from './shapes/TLImageShape'\nimport { lineShapeMigrations, lineShapeProps } from './shapes/TLLineShape'\nimport { noteShapeMigrations, noteShapeProps } from './shapes/TLNoteShape'\nimport { textShapeMigrations, textShapeProps } from './shapes/TLTextShape'\nimport { videoShapeMigrations, videoShapeProps } from './shapes/TLVideoShape'\nimport { storeMigrations } from './store-migrations'\nimport { StyleProp } from './styles/StyleProp'\n\n/**\n * Configuration information for a schema type (shape or binding), including its properties,\n * metadata, and migration sequences for data evolution over time.\n *\n * @public\n * @example\n * ```ts\n * import { arrowShapeMigrations, arrowShapeProps } from './shapes/TLArrowShape'\n *\n * const myShapeSchema: SchemaPropsInfo = {\n * migrations: arrowShapeMigrations,\n * props: arrowShapeProps,\n * meta: {\n * customField: T.string,\n * },\n * }\n * ```\n */\nexport interface SchemaPropsInfo {\n\t/**\n\t * Migration sequences for handling data evolution over time. Can be legacy migrations,\n\t * props-specific migrations, or general migration sequences.\n\t */\n\tmigrations?: LegacyMigrations | TLPropsMigrations | MigrationSequence\n\n\t/**\n\t * Validation schema for the shape or binding properties. Maps property names to their validators.\n\t */\n\tprops?: Record<string, StoreValidator<any>>\n\n\t/**\n\t * Validation schema for metadata fields. Maps metadata field names to their validators.\n\t */\n\tmeta?: Record<string, StoreValidator<any>>\n}\n\n/**\n * The complete schema definition for a tldraw store, encompassing all record types,\n * validation rules, and migration sequences. This schema defines the structure of\n * the persistent data model used by tldraw.\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas } from '@tldraw/tlschema'\n * import { Store } from '@tldraw/store'\n *\n * const schema: TLSchema = createTLSchema({\n * shapes: defaultShapeSchemas,\n * })\n *\n * const store = new Store({ schema })\n * ```\n */\nexport type TLSchema = StoreSchema<TLRecord, TLStoreProps>\n\n/**\n * Default shape schema configurations for all built-in tldraw shape types.\n * Each shape type includes its validation props and migration sequences.\n *\n * This object contains schema information for:\n * - arrow: Directional lines that can bind to other shapes\n * - bookmark: Website bookmark cards with preview information\n * - draw: Freehand drawing paths created with drawing tools\n * - embed: Embedded content from external services (YouTube, Figma, etc.)\n * - frame: Container shapes for organizing content\n * - geo: Geometric shapes (rectangles, ellipses, triangles, etc.)\n * - group: Logical groupings of multiple shapes\n * - highlight: Highlighting strokes from the highlighter tool\n * - image: Raster image shapes referencing image assets\n * - line: Multi-point lines and splines\n * - note: Sticky note shapes with text content\n * - text: Rich text shapes with formatting support\n * - video: Video shapes referencing video assets\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas } from '@tldraw/tlschema'\n *\n * // Use all default shapes\n * const schema = createTLSchema({\n * shapes: defaultShapeSchemas,\n * })\n *\n * // Use only specific default shapes\n * const minimalSchema = createTLSchema({\n * shapes: {\n * geo: defaultShapeSchemas.geo,\n * text: defaultShapeSchemas.text,\n * },\n * })\n * ```\n */\nexport const defaultShapeSchemas = {\n\tarrow: { migrations: arrowShapeMigrations, props: arrowShapeProps },\n\tbookmark: { migrations: bookmarkShapeMigrations, props: bookmarkShapeProps },\n\tdraw: { migrations: drawShapeMigrations, props: drawShapeProps },\n\tembed: { migrations: embedShapeMigrations, props: embedShapeProps },\n\tframe: { migrations: frameShapeMigrations, props: frameShapeProps },\n\tgeo: { migrations: geoShapeMigrations, props: geoShapeProps },\n\tgroup: { migrations: groupShapeMigrations, props: groupShapeProps },\n\thighlight: { migrations: highlightShapeMigrations, props: highlightShapeProps },\n\timage: { migrations: imageShapeMigrations, props: imageShapeProps },\n\tline: { migrations: lineShapeMigrations, props: lineShapeProps },\n\tnote: { migrations: noteShapeMigrations, props: noteShapeProps },\n\ttext: { migrations: textShapeMigrations, props: textShapeProps },\n\tvideo: { migrations: videoShapeMigrations, props: videoShapeProps },\n} satisfies {\n\t[T in TLDefaultShape['type']]: {\n\t\tmigrations: SchemaPropsInfo['migrations']\n\t\tprops: RecordProps<TLBaseShape<T, Extract<TLDefaultShape, { type: T }>['props']>>\n\t}\n}\n\n/**\n * Default binding schema configurations for all built-in tldraw binding types.\n * Bindings represent relationships between shapes, such as arrows connected to shapes.\n *\n * Currently includes:\n * - arrow: Bindings that connect arrow shapes to other shapes at specific anchor points\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultBindingSchemas } from '@tldraw/tlschema'\n *\n * // Use default bindings\n * const schema = createTLSchema({\n * bindings: defaultBindingSchemas,\n * })\n *\n * // Add custom binding alongside defaults\n * const customSchema = createTLSchema({\n * bindings: {\n * ...defaultBindingSchemas,\n * myCustomBinding: {\n * props: myCustomBindingProps,\n * migrations: myCustomBindingMigrations,\n * },\n * },\n * })\n * ```\n */\nexport const defaultBindingSchemas = {\n\tarrow: { migrations: arrowBindingMigrations, props: arrowBindingProps },\n} satisfies { [T in TLDefaultBinding['type']]: SchemaPropsInfo }\n\n/**\n * Creates a complete TLSchema for use with tldraw stores. This schema defines the structure,\n * validation, and migration sequences for all record types in a tldraw application.\n *\n * The schema includes all core record types (pages, cameras, instances, etc.) plus the\n * shape, binding, and custom record types you specify. Style properties are automatically\n * collected from all shapes to ensure consistency across the application.\n *\n * @param options - Configuration options for the schema\n * - shapes - Shape schema configurations. Defaults to defaultShapeSchemas if not provided\n * - bindings - Binding schema configurations. Defaults to defaultBindingSchemas if not provided\n * - records - Custom record type configurations. These are additional record types beyond\n * the built-in shapes, bindings, assets, etc.\n * - migrations - Additional migration sequences to include in the schema\n * @returns A complete TLSchema ready for use with Store creation\n *\n * @public\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas, defaultBindingSchemas } from '@tldraw/tlschema'\n * import { Store } from '@tldraw/store'\n *\n * // Create schema with all default shapes and bindings\n * const schema = createTLSchema()\n *\n * // Create schema with custom shapes added\n * const customSchema = createTLSchema({\n * shapes: {\n * ...defaultShapeSchemas,\n * myCustomShape: {\n * props: myCustomShapeProps,\n * migrations: myCustomShapeMigrations,\n * },\n * },\n * })\n *\n * // Create schema with custom record types\n * const schemaWithCustomRecords = createTLSchema({\n * records: {\n * comment: {\n * scope: 'document',\n * validator: T.object({\n * id: T.string,\n * typeName: T.literal('comment'),\n * text: T.string,\n * shapeId: T.string,\n * }),\n * },\n * },\n * })\n *\n * // Use the schema with a store\n * const store = new Store({\n * schema: customSchema,\n * props: {\n * defaultName: 'My Drawing',\n * },\n * })\n * ```\n */\nexport function createTLSchema({\n\tshapes = defaultShapeSchemas,\n\tbindings = defaultBindingSchemas,\n\trecords = {},\n\tmigrations,\n}: {\n\tshapes?: Record<string, SchemaPropsInfo>\n\tbindings?: Record<string, SchemaPropsInfo>\n\trecords?: Record<string, CustomRecordInfo>\n\tmigrations?: readonly MigrationSequence[]\n} = {}): TLSchema {\n\tconst stylesById = new Map<string, StyleProp<unknown>>()\n\tfor (const shape of objectMapValues(shapes)) {\n\t\tfor (const style of getShapePropKeysByStyle(shape.props ?? {}).keys()) {\n\t\t\tif (stylesById.has(style.id) && stylesById.get(style.id) !== style) {\n\t\t\t\tthrow new Error(`Multiple StyleProp instances with the same id: ${style.id}`)\n\t\t\t}\n\t\t\tstylesById.set(style.id, style)\n\t\t}\n\t}\n\n\tconst ShapeRecordType = createShapeRecordType(shapes)\n\tconst BindingRecordType = createBindingRecordType(bindings)\n\tconst InstanceRecordType = createInstanceRecordType(stylesById)\n\n\t// Create RecordTypes for custom records\n\tconst builtInTypeNames = new Set([\n\t\t'asset',\n\t\t'binding',\n\t\t'camera',\n\t\t'document',\n\t\t'instance',\n\t\t'instance_page_state',\n\t\t'page',\n\t\t'instance_presence',\n\t\t'pointer',\n\t\t'shape',\n\t\t'store',\n\t])\n\tconst customRecordTypes: Record<string, { createId: any }> = {}\n\tfor (const [typeName, config] of Object.entries(records)) {\n\t\tif (builtInTypeNames.has(typeName)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Custom record type name '${typeName}' conflicts with tldraw's built-in record type of that name. Choose a different name instead.`\n\t\t\t)\n\t\t}\n\t\tcustomRecordTypes[typeName] = createCustomRecordType(typeName, config)\n\t}\n\n\treturn StoreSchema.create(\n\t\t{\n\t\t\tasset: AssetRecordType,\n\t\t\tbinding: BindingRecordType,\n\t\t\tcamera: CameraRecordType,\n\t\t\tdocument: DocumentRecordType,\n\t\t\tinstance: InstanceRecordType,\n\t\t\tinstance_page_state: InstancePageStateRecordType,\n\t\t\tpage: PageRecordType,\n\t\t\tinstance_presence: InstancePresenceRecordType,\n\t\t\tpointer: PointerRecordType,\n\t\t\tshape: ShapeRecordType,\n\t\t\t...customRecordTypes,\n\t\t},\n\t\t{\n\t\t\tmigrations: [\n\t\t\t\tstoreMigrations,\n\t\t\t\tassetMigrations,\n\t\t\t\tcameraMigrations,\n\t\t\t\tdocumentMigrations,\n\t\t\t\tinstanceMigrations,\n\t\t\t\tinstancePageStateMigrations,\n\t\t\t\tpageMigrations,\n\t\t\t\tinstancePresenceMigrations,\n\t\t\t\tpointerMigrations,\n\t\t\t\trootShapeMigrations,\n\n\t\t\t\tbookmarkAssetMigrations,\n\t\t\t\timageAssetMigrations,\n\t\t\t\tvideoAssetMigrations,\n\n\t\t\t\t...processPropsMigrations<TLShape>('shape', shapes),\n\t\t\t\t...processPropsMigrations<TLBinding>('binding', bindings),\n\t\t\t\t...processCustomRecordMigrations(records),\n\n\t\t\t\t...(migrations ?? []),\n\t\t\t],\n\t\t\tonValidationFailure,\n\t\t\tcreateIntegrityChecker,\n\t\t}\n\t)\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiF;AACjF,mBAAgC;AAChC,qBAA0E;AAC1E,6BAAwC;AACxC,0BAAqC;AACrC,0BAAqC;AACrC,4BAA0D;AAC1D,qBAAiD;AACjD,uBAAqE;AACrE,sBAAmD;AACnD,4BAIO;AACP,wBAAuD;AACvD,wBAA6D;AAC7D,oBAA+C;AAC/C,yBAAyE;AACzE,uBAAqD;AACrD,wBAAuE;AAEvE,qBAMO;AACP,8BAAuE;AACvE,0BAAsD;AAEtD,6BAA4D;AAC5D,yBAAoD;AACpD,0BAAsD;AACtD,0BAAsD;AACtD,wBAAkD;AAClD,0BAAsD;AACtD,8BAA8D;AAC9D,0BAAsD;AACtD,yBAAoD;AACpD,yBAAoD;AACpD,yBAAoD;AACpD,0BAAsD;AACtD,8BAAgC;AAiGzB,MAAM,sBAAsB;AAAA,EAClC,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,UAAU,EAAE,YAAY,gDAAyB,OAAO,0CAAmB;AAAA,EAC3E,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,KAAK,EAAE,YAAY,sCAAoB,OAAO,gCAAc;AAAA,EAC5D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,WAAW,EAAE,YAAY,kDAA0B,OAAO,4CAAoB;AAAA,EAC9E,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AAAA,EAClE,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,MAAM,EAAE,YAAY,wCAAqB,OAAO,kCAAe;AAAA,EAC/D,OAAO,EAAE,YAAY,0CAAsB,OAAO,oCAAgB;AACnE;AAoCO,MAAM,wBAAwB;AAAA,EACpC,OAAO,EAAE,YAAY,8CAAwB,OAAO,wCAAkB;AACvE;AA8DO,SAAS,eAAe;AAAA,EAC9B,SAAS;AAAA,EACT,WAAW;AAAA,EACX,UAAU,CAAC;AAAA,EACX;AACD,IAKI,CAAC,GAAa;AACjB,QAAM,aAAa,oBAAI,IAAgC;AACvD,aAAW,aAAS,8BAAgB,MAAM,GAAG;AAC5C,eAAW,aAAS,wCAAwB,MAAM,SAAS,CAAC,CAAC,EAAE,KAAK,GAAG;AACtE,UAAI,WAAW,IAAI,MAAM,EAAE,KAAK,WAAW,IAAI,MAAM,EAAE,MAAM,OAAO;AACnE,cAAM,IAAI,MAAM,kDAAkD,MAAM,EAAE,EAAE;AAAA,MAC7E;AACA,iBAAW,IAAI,MAAM,IAAI,KAAK;AAAA,IAC/B;AAAA,EACD;AAEA,QAAM,sBAAkB,sCAAsB,MAAM;AACpD,QAAM,wBAAoB,0CAAwB,QAAQ;AAC1D,QAAM,yBAAqB,4CAAyB,UAAU;AAG9D,QAAM,mBAAmB,oBAAI,IAAI;AAAA,IAChC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD,CAAC;AACD,QAAM,oBAAuD,CAAC;AAC9D,aAAW,CAAC,UAAU,MAAM,KAAK,OAAO,QAAQ,OAAO,GAAG;AACzD,QAAI,iBAAiB,IAAI,QAAQ,GAAG;AACnC,YAAM,IAAI;AAAA,QACT,4BAA4B,QAAQ;AAAA,MACrC;AAAA,IACD;AACA,sBAAkB,QAAQ,QAAI,8CAAuB,UAAU,MAAM;AAAA,EACtE;AAEA,SAAO,yBAAY;AAAA,IAClB;AAAA,MACC,OAAO;AAAA,MACP,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,UAAU;AAAA,MACV,qBAAqB;AAAA,MACrB,MAAM;AAAA,MACN,mBAAmB;AAAA,MACnB,SAAS;AAAA,MACT,OAAO;AAAA,MACP,GAAG;AAAA,IACJ;AAAA,IACA;AAAA,MACC,YAAY;AAAA,QACX;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QAEA,OAAG,gDAAgC,SAAS,MAAM;AAAA,QAClD,OAAG,gDAAkC,WAAW,QAAQ;AAAA,QACxD,OAAG,qDAA8B,OAAO;AAAA,QAExC,GAAI,cAAc,CAAC;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD;AACD;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist-cjs/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { MakeUndefinedOptional } from '@tldraw/utils';
|
|
|
7
7
|
import { MigrationId } from '@tldraw/store';
|
|
8
8
|
import { MigrationSequence } from '@tldraw/store';
|
|
9
9
|
import { RecordId } from '@tldraw/store';
|
|
10
|
+
import { RecordScope } from '@tldraw/store';
|
|
10
11
|
import { RecordType } from '@tldraw/store';
|
|
11
12
|
import { SerializedStore } from '@tldraw/store';
|
|
12
13
|
import { Signal } from '@tldraw/state';
|
|
@@ -717,6 +718,82 @@ export declare function createBindingValidator<Type extends string, Props extend
|
|
|
717
718
|
[K in keyof Meta]: T.Validatable<Meta[K]>;
|
|
718
719
|
}): T.ObjectValidator<Expand< { [P in "fromId" | "id" | "meta" | "toId" | "typeName" | (undefined extends Props ? never : "props") | (undefined extends Type ? never : "type")]: TLBaseBinding<Type, Props>[P]; } & { [P in (undefined extends Props ? "props" : never) | (undefined extends Type ? "type" : never)]?: TLBaseBinding<Type, Props>[P] | undefined; }>>;
|
|
719
720
|
|
|
721
|
+
/**
|
|
722
|
+
* Creates a unique ID for a custom record type.
|
|
723
|
+
*
|
|
724
|
+
* @param typeName - The type name of the custom record
|
|
725
|
+
* @param id - Optional custom ID suffix. If not provided, a unique ID will be generated
|
|
726
|
+
* @returns A properly formatted record ID
|
|
727
|
+
*
|
|
728
|
+
* @example
|
|
729
|
+
* ```ts
|
|
730
|
+
* // Create with auto-generated ID
|
|
731
|
+
* const commentId = createCustomRecordId('comment') // 'comment:abc123'
|
|
732
|
+
*
|
|
733
|
+
* // Create with custom ID
|
|
734
|
+
* const customId = createCustomRecordId('comment', 'my-comment') // 'comment:my-comment'
|
|
735
|
+
* ```
|
|
736
|
+
*
|
|
737
|
+
* @public
|
|
738
|
+
*/
|
|
739
|
+
export declare function createCustomRecordId<T extends string>(typeName: T, id?: string): RecordId<UnknownRecord> & `${T}:${string}`;
|
|
740
|
+
|
|
741
|
+
/**
|
|
742
|
+
* Creates properly formatted migration IDs for custom record migrations.
|
|
743
|
+
*
|
|
744
|
+
* Generates standardized migration IDs following the convention:
|
|
745
|
+
* `com.tldraw.{recordType}/{version}`
|
|
746
|
+
*
|
|
747
|
+
* @param recordType - The type name of the custom record
|
|
748
|
+
* @param ids - Record mapping migration names to version numbers
|
|
749
|
+
* @returns Record with the same keys but formatted migration ID values
|
|
750
|
+
*
|
|
751
|
+
* @example
|
|
752
|
+
* ```ts
|
|
753
|
+
* const commentVersions = createCustomRecordMigrationIds('comment', {
|
|
754
|
+
* AddAuthorId: 1,
|
|
755
|
+
* AddCreatedAt: 2,
|
|
756
|
+
* RefactorReactions: 3
|
|
757
|
+
* })
|
|
758
|
+
* // Result: {
|
|
759
|
+
* // AddAuthorId: 'com.tldraw.comment/1',
|
|
760
|
+
* // AddCreatedAt: 'com.tldraw.comment/2',
|
|
761
|
+
* // RefactorReactions: 'com.tldraw.comment/3'
|
|
762
|
+
* // }
|
|
763
|
+
* ```
|
|
764
|
+
*
|
|
765
|
+
* @public
|
|
766
|
+
*/
|
|
767
|
+
export declare function createCustomRecordMigrationIds<const S extends string, const T extends Record<string, number>>(recordType: S, ids: T): {
|
|
768
|
+
[k in keyof T]: `com.tldraw.${S}/${T[k]}`;
|
|
769
|
+
};
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* Creates a migration sequence for custom record types.
|
|
773
|
+
*
|
|
774
|
+
* This is a pass-through function that maintains the same structure as the input.
|
|
775
|
+
* It's used for consistency and to provide a clear API for defining custom record migrations.
|
|
776
|
+
*
|
|
777
|
+
* @param migrations - The migration sequence to create
|
|
778
|
+
* @returns The same migration sequence (pass-through)
|
|
779
|
+
*
|
|
780
|
+
* @example
|
|
781
|
+
* ```ts
|
|
782
|
+
* const commentMigrations = createCustomRecordMigrationSequence({
|
|
783
|
+
* sequence: [
|
|
784
|
+
* {
|
|
785
|
+
* id: 'com.myapp.comment/1',
|
|
786
|
+
* up: (record) => ({ ...record, authorId: record.authorId ?? 'unknown' }),
|
|
787
|
+
* down: ({ authorId, ...record }) => record
|
|
788
|
+
* }
|
|
789
|
+
* ]
|
|
790
|
+
* })
|
|
791
|
+
* ```
|
|
792
|
+
*
|
|
793
|
+
* @public
|
|
794
|
+
*/
|
|
795
|
+
export declare function createCustomRecordMigrationSequence(migrations: TLPropsMigrations): TLPropsMigrations;
|
|
796
|
+
|
|
720
797
|
/**
|
|
721
798
|
* Creates a derivation that represents the current presence state of the current user.
|
|
722
799
|
*
|
|
@@ -882,12 +959,14 @@ export declare function createShapeValidator<Type extends string, Props extends
|
|
|
882
959
|
* validation, and migration sequences for all record types in a tldraw application.
|
|
883
960
|
*
|
|
884
961
|
* The schema includes all core record types (pages, cameras, instances, etc.) plus the
|
|
885
|
-
* shape and
|
|
886
|
-
* all shapes to ensure consistency across the application.
|
|
962
|
+
* shape, binding, and custom record types you specify. Style properties are automatically
|
|
963
|
+
* collected from all shapes to ensure consistency across the application.
|
|
887
964
|
*
|
|
888
965
|
* @param options - Configuration options for the schema
|
|
889
966
|
* - shapes - Shape schema configurations. Defaults to defaultShapeSchemas if not provided
|
|
890
967
|
* - bindings - Binding schema configurations. Defaults to defaultBindingSchemas if not provided
|
|
968
|
+
* - records - Custom record type configurations. These are additional record types beyond
|
|
969
|
+
* the built-in shapes, bindings, assets, etc.
|
|
891
970
|
* - migrations - Additional migration sequences to include in the schema
|
|
892
971
|
* @returns A complete TLSchema ready for use with Store creation
|
|
893
972
|
*
|
|
@@ -911,13 +990,19 @@ export declare function createShapeValidator<Type extends string, Props extends
|
|
|
911
990
|
* },
|
|
912
991
|
* })
|
|
913
992
|
*
|
|
914
|
-
* // Create schema with
|
|
915
|
-
* const
|
|
916
|
-
*
|
|
917
|
-
*
|
|
918
|
-
*
|
|
993
|
+
* // Create schema with custom record types
|
|
994
|
+
* const schemaWithCustomRecords = createTLSchema({
|
|
995
|
+
* records: {
|
|
996
|
+
* comment: {
|
|
997
|
+
* scope: 'document',
|
|
998
|
+
* validator: T.object({
|
|
999
|
+
* id: T.string,
|
|
1000
|
+
* typeName: T.literal('comment'),
|
|
1001
|
+
* text: T.string,
|
|
1002
|
+
* shapeId: T.string,
|
|
1003
|
+
* }),
|
|
1004
|
+
* },
|
|
919
1005
|
* },
|
|
920
|
-
* bindings: defaultBindingSchemas,
|
|
921
1006
|
* })
|
|
922
1007
|
*
|
|
923
1008
|
* // Use the schema with a store
|
|
@@ -929,12 +1014,74 @@ export declare function createShapeValidator<Type extends string, Props extends
|
|
|
929
1014
|
* })
|
|
930
1015
|
* ```
|
|
931
1016
|
*/
|
|
932
|
-
export declare function createTLSchema({ shapes, bindings, migrations }?: {
|
|
1017
|
+
export declare function createTLSchema({ shapes, bindings, records, migrations }?: {
|
|
933
1018
|
bindings?: Record<string, SchemaPropsInfo>;
|
|
934
1019
|
migrations?: readonly MigrationSequence[];
|
|
1020
|
+
records?: Record<string, CustomRecordInfo>;
|
|
935
1021
|
shapes?: Record<string, SchemaPropsInfo>;
|
|
936
1022
|
}): TLSchema;
|
|
937
1023
|
|
|
1024
|
+
/**
|
|
1025
|
+
* Configuration for a custom record type in the schema.
|
|
1026
|
+
*
|
|
1027
|
+
* Custom record types allow you to add entirely new data types to the tldraw store
|
|
1028
|
+
* that don't fit into the existing shape, binding, or asset categories. This is useful
|
|
1029
|
+
* for storing domain-specific data like comments, annotations, or application state
|
|
1030
|
+
* that needs to participate in persistence and synchronization.
|
|
1031
|
+
*
|
|
1032
|
+
* @example
|
|
1033
|
+
* ```ts
|
|
1034
|
+
* const commentRecordConfig: CustomRecordInfo = {
|
|
1035
|
+
* scope: 'document',
|
|
1036
|
+
* validator: T.object({
|
|
1037
|
+
* id: T.string,
|
|
1038
|
+
* typeName: T.literal('comment'),
|
|
1039
|
+
* text: T.string,
|
|
1040
|
+
* shapeId: T.string,
|
|
1041
|
+
* authorId: T.string,
|
|
1042
|
+
* createdAt: T.number,
|
|
1043
|
+
* }),
|
|
1044
|
+
* migrations: createRecordMigrationSequence({
|
|
1045
|
+
* sequenceId: 'com.myapp.comment',
|
|
1046
|
+
* recordType: 'comment',
|
|
1047
|
+
* sequence: [],
|
|
1048
|
+
* }),
|
|
1049
|
+
* }
|
|
1050
|
+
* ```
|
|
1051
|
+
*
|
|
1052
|
+
* @public
|
|
1053
|
+
*/
|
|
1054
|
+
export declare interface CustomRecordInfo {
|
|
1055
|
+
/**
|
|
1056
|
+
* The scope determines how records of this type are persisted and synchronized:
|
|
1057
|
+
* - **document**: Persisted and synced across all clients
|
|
1058
|
+
* - **session**: Local to current session, not synced
|
|
1059
|
+
* - **presence**: Ephemeral presence data, may be synced but not persisted
|
|
1060
|
+
*/
|
|
1061
|
+
scope: RecordScope;
|
|
1062
|
+
/**
|
|
1063
|
+
* Validator for the complete record structure.
|
|
1064
|
+
*
|
|
1065
|
+
* Should validate the entire record including `id` and `typeName` fields.
|
|
1066
|
+
* Use validators like T.object, T.string, etc.
|
|
1067
|
+
*/
|
|
1068
|
+
validator: T.Validatable<any>;
|
|
1069
|
+
/**
|
|
1070
|
+
* Optional migration sequence for handling schema evolution over time.
|
|
1071
|
+
*
|
|
1072
|
+
* Can be a full MigrationSequence or a simplified TLPropsMigrations format.
|
|
1073
|
+
* If not provided, an empty migration sequence will be created automatically.
|
|
1074
|
+
*/
|
|
1075
|
+
migrations?: MigrationSequence | TLPropsMigrations;
|
|
1076
|
+
/**
|
|
1077
|
+
* Optional factory function that returns default property values for new records.
|
|
1078
|
+
*
|
|
1079
|
+
* Called when creating new records to provide initial values for any properties
|
|
1080
|
+
* not explicitly provided during creation.
|
|
1081
|
+
*/
|
|
1082
|
+
createDefaultProperties?: () => Record<string, unknown>;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
938
1085
|
/**
|
|
939
1086
|
* Default binding schema configurations for all built-in tldraw binding types.
|
|
940
1087
|
* Bindings represent relationships between shapes, such as arrows connected to shapes.
|
|
@@ -1971,6 +2118,47 @@ export declare function isBinding(record?: UnknownRecord): record is TLBinding;
|
|
|
1971
2118
|
*/
|
|
1972
2119
|
export declare function isBindingId(id?: string): id is TLBindingId;
|
|
1973
2120
|
|
|
2121
|
+
/**
|
|
2122
|
+
* Type guard to check if a record is of a specific custom type.
|
|
2123
|
+
*
|
|
2124
|
+
* @param typeName - The type name to check against
|
|
2125
|
+
* @param record - The record to check
|
|
2126
|
+
* @returns True if the record is of the specified type
|
|
2127
|
+
*
|
|
2128
|
+
* @example
|
|
2129
|
+
* ```ts
|
|
2130
|
+
* function handleRecord(record: TLRecord) {
|
|
2131
|
+
* if (isCustomRecord('comment', record)) {
|
|
2132
|
+
* // Handle comment record
|
|
2133
|
+
* console.log(`Comment: ${record.text}`)
|
|
2134
|
+
* }
|
|
2135
|
+
* }
|
|
2136
|
+
* ```
|
|
2137
|
+
*
|
|
2138
|
+
* @public
|
|
2139
|
+
*/
|
|
2140
|
+
export declare function isCustomRecord(typeName: string, record?: UnknownRecord): boolean;
|
|
2141
|
+
|
|
2142
|
+
/**
|
|
2143
|
+
* Type guard to check if a string is a valid ID for a specific custom record type.
|
|
2144
|
+
*
|
|
2145
|
+
* @param typeName - The type name to check against
|
|
2146
|
+
* @param id - The string to check
|
|
2147
|
+
* @returns True if the string is a valid ID for the specified record type
|
|
2148
|
+
*
|
|
2149
|
+
* @example
|
|
2150
|
+
* ```ts
|
|
2151
|
+
* const id = 'comment:abc123'
|
|
2152
|
+
* if (isCustomRecordId('comment', id)) {
|
|
2153
|
+
* // id is now typed as a comment record ID
|
|
2154
|
+
* const comment = store.get(id)
|
|
2155
|
+
* }
|
|
2156
|
+
* ```
|
|
2157
|
+
*
|
|
2158
|
+
* @public
|
|
2159
|
+
*/
|
|
2160
|
+
export declare function isCustomRecordId(typeName: string, id?: string): boolean;
|
|
2161
|
+
|
|
1974
2162
|
/**
|
|
1975
2163
|
* Type guard to check if a record is a TLDocument.
|
|
1976
2164
|
* Useful for filtering or type narrowing when working with mixed record types.
|
|
@@ -3787,6 +3975,13 @@ export declare interface TLCursor {
|
|
|
3787
3975
|
*/
|
|
3788
3976
|
export declare type TLCursorType = SetValue<typeof TL_CURSOR_TYPES>;
|
|
3789
3977
|
|
|
3978
|
+
/**
|
|
3979
|
+
* Union type representing a custom record from the TLGlobalRecordPropsMap.
|
|
3980
|
+
*
|
|
3981
|
+
* @public
|
|
3982
|
+
*/
|
|
3983
|
+
export declare type TLCustomRecord = TLIndexedRecords[keyof TLIndexedRecords];
|
|
3984
|
+
|
|
3790
3985
|
/**
|
|
3791
3986
|
* The default set of bindings that are available in the editor.
|
|
3792
3987
|
* Currently includes only arrow bindings, but can be extended with custom bindings.
|
|
@@ -3994,6 +4189,16 @@ export declare type TLDefaultFontStyle = T.TypeOf<typeof DefaultFontStyle>;
|
|
|
3994
4189
|
*/
|
|
3995
4190
|
export declare type TLDefaultHorizontalAlignStyle = T.TypeOf<typeof DefaultHorizontalAlignStyle>;
|
|
3996
4191
|
|
|
4192
|
+
/**
|
|
4193
|
+
* Union type of all built-in tldraw record types.
|
|
4194
|
+
*
|
|
4195
|
+
* This includes persistent records (documents, pages, shapes, assets, bindings)
|
|
4196
|
+
* and session/presence records (cameras, instances, pointers, page states).
|
|
4197
|
+
*
|
|
4198
|
+
* @public
|
|
4199
|
+
*/
|
|
4200
|
+
export declare type TLDefaultRecord = TLAsset | TLBinding | TLCamera | TLDocument | TLInstance | TLInstancePageState | TLInstancePresence | TLPage | TLPointer | TLShape;
|
|
4201
|
+
|
|
3997
4202
|
/**
|
|
3998
4203
|
* The default set of shapes that are available in the editor.
|
|
3999
4204
|
*
|
|
@@ -4407,6 +4612,41 @@ export declare interface TLGeoShapeProps {
|
|
|
4407
4612
|
export declare interface TLGlobalBindingPropsMap {
|
|
4408
4613
|
}
|
|
4409
4614
|
|
|
4615
|
+
/**
|
|
4616
|
+
* Interface for extending tldraw with custom record types via TypeScript module augmentation.
|
|
4617
|
+
*
|
|
4618
|
+
* Custom record types allow you to add entirely new data types to the tldraw store that
|
|
4619
|
+
* don't fit into the existing shape, binding, or asset categories. Each key in this
|
|
4620
|
+
* interface becomes a new record type name, and the value should be your full record type.
|
|
4621
|
+
*
|
|
4622
|
+
* @example
|
|
4623
|
+
* ```ts
|
|
4624
|
+
* import { BaseRecord, RecordId } from '@tldraw/store'
|
|
4625
|
+
*
|
|
4626
|
+
* // Define your custom record type
|
|
4627
|
+
* interface TLComment extends BaseRecord<'comment', RecordId<TLComment>> {
|
|
4628
|
+
* text: string
|
|
4629
|
+
* shapeId: TLShapeId
|
|
4630
|
+
* authorId: string
|
|
4631
|
+
* createdAt: number
|
|
4632
|
+
* }
|
|
4633
|
+
*
|
|
4634
|
+
* // Augment the global record props map
|
|
4635
|
+
* declare module '@tldraw/tlschema' {
|
|
4636
|
+
* interface TLGlobalRecordPropsMap {
|
|
4637
|
+
* comment: TLComment
|
|
4638
|
+
* }
|
|
4639
|
+
* }
|
|
4640
|
+
*
|
|
4641
|
+
* // Now TLRecord includes your custom comment type
|
|
4642
|
+
* // and you can use it with createTLSchema()
|
|
4643
|
+
* ```
|
|
4644
|
+
*
|
|
4645
|
+
* @public
|
|
4646
|
+
*/
|
|
4647
|
+
export declare interface TLGlobalRecordPropsMap {
|
|
4648
|
+
}
|
|
4649
|
+
|
|
4410
4650
|
/** @public */
|
|
4411
4651
|
export declare interface TLGlobalShapePropsMap {
|
|
4412
4652
|
}
|
|
@@ -4700,6 +4940,19 @@ export declare type TLIndexedBindings = {
|
|
|
4700
4940
|
}> : TLBaseBinding<K, TLGlobalBindingPropsMap[K & keyof TLGlobalBindingPropsMap]>;
|
|
4701
4941
|
};
|
|
4702
4942
|
|
|
4943
|
+
/**
|
|
4944
|
+
* Index type that maps custom record type names to their record types.
|
|
4945
|
+
*
|
|
4946
|
+
* Similar to TLIndexedShapes and TLIndexedBindings, this type creates a mapping
|
|
4947
|
+
* from type name keys to their corresponding record types, filtering out any
|
|
4948
|
+
* disabled types (those set to null or undefined in TLGlobalRecordPropsMap).
|
|
4949
|
+
*
|
|
4950
|
+
* @public
|
|
4951
|
+
*/
|
|
4952
|
+
export declare type TLIndexedRecords = {
|
|
4953
|
+
[K in keyof TLGlobalRecordPropsMap as TLGlobalRecordPropsMap[K] extends null | undefined ? never : K]: TLGlobalRecordPropsMap[K];
|
|
4954
|
+
};
|
|
4955
|
+
|
|
4703
4956
|
/** @public */
|
|
4704
4957
|
export declare type TLIndexedShapes = {
|
|
4705
4958
|
[K in keyof TLGlobalShapePropsMap | TLDefaultShape['type'] as K extends TLDefaultShape['type'] ? K extends 'group' ? K : K extends keyof TLGlobalShapePropsMap ? TLGlobalShapePropsMap[K] extends null | undefined ? never : K : K : K]: K extends 'group' ? Extract<TLDefaultShape, {
|
|
@@ -5385,7 +5638,8 @@ export declare interface TLPropsMigrations {
|
|
|
5385
5638
|
/**
|
|
5386
5639
|
* Union type representing all possible record types in a tldraw store.
|
|
5387
5640
|
* This includes both persistent records (documents, pages, shapes, assets, bindings)
|
|
5388
|
-
* and session/presence records (cameras, instances, pointers, page states)
|
|
5641
|
+
* and session/presence records (cameras, instances, pointers, page states),
|
|
5642
|
+
* as well as any custom record types added via TLGlobalRecordPropsMap augmentation.
|
|
5389
5643
|
*
|
|
5390
5644
|
* Records are organized by scope:
|
|
5391
5645
|
* - **document**: Persisted across sessions (shapes, pages, assets, bindings, documents)
|
|
@@ -5425,7 +5679,7 @@ export declare interface TLPropsMigrations {
|
|
|
5425
5679
|
*
|
|
5426
5680
|
* @public
|
|
5427
5681
|
*/
|
|
5428
|
-
export declare type TLRecord =
|
|
5682
|
+
export declare type TLRecord = TLCustomRecord | TLDefaultRecord;
|
|
5429
5683
|
|
|
5430
5684
|
/**
|
|
5431
5685
|
* Type representing rich text content in tldraw. Rich text follows a document-based
|
package/dist-cjs/index.js
CHANGED
|
@@ -74,6 +74,9 @@ __export(index_exports, {
|
|
|
74
74
|
createBindingPropsMigrationIds: () => import_TLBinding.createBindingPropsMigrationIds,
|
|
75
75
|
createBindingPropsMigrationSequence: () => import_TLBinding.createBindingPropsMigrationSequence,
|
|
76
76
|
createBindingValidator: () => import_TLBaseBinding.createBindingValidator,
|
|
77
|
+
createCustomRecordId: () => import_TLCustomRecord.createCustomRecordId,
|
|
78
|
+
createCustomRecordMigrationIds: () => import_TLCustomRecord.createCustomRecordMigrationIds,
|
|
79
|
+
createCustomRecordMigrationSequence: () => import_TLCustomRecord.createCustomRecordMigrationSequence,
|
|
77
80
|
createPresenceStateDerivation: () => import_createPresenceStateDerivation.createPresenceStateDerivation,
|
|
78
81
|
createShapeId: () => import_TLShape.createShapeId,
|
|
79
82
|
createShapePropsMigrationIds: () => import_TLShape.createShapePropsMigrationIds,
|
|
@@ -105,6 +108,8 @@ __export(index_exports, {
|
|
|
105
108
|
imageShapeProps: () => import_TLImageShape.imageShapeProps,
|
|
106
109
|
isBinding: () => import_TLBinding.isBinding,
|
|
107
110
|
isBindingId: () => import_TLBinding.isBindingId,
|
|
111
|
+
isCustomRecord: () => import_TLCustomRecord.isCustomRecord,
|
|
112
|
+
isCustomRecordId: () => import_TLCustomRecord.isCustomRecordId,
|
|
108
113
|
isDocument: () => import_TLDocument.isDocument,
|
|
109
114
|
isPageId: () => import_TLPage.isPageId,
|
|
110
115
|
isShape: () => import_TLShape.isShape,
|
|
@@ -147,6 +152,7 @@ var import_TLScribble = require("./misc/TLScribble");
|
|
|
147
152
|
var import_TLAsset = require("./records/TLAsset");
|
|
148
153
|
var import_TLBinding = require("./records/TLBinding");
|
|
149
154
|
var import_TLCamera = require("./records/TLCamera");
|
|
155
|
+
var import_TLCustomRecord = require("./records/TLCustomRecord");
|
|
150
156
|
var import_TLDocument = require("./records/TLDocument");
|
|
151
157
|
var import_TLInstance = require("./records/TLInstance");
|
|
152
158
|
var import_TLPage = require("./records/TLPage");
|
|
@@ -181,7 +187,7 @@ var import_translations = require("./translations/translations");
|
|
|
181
187
|
var import_b64Vecs = require("./misc/b64Vecs");
|
|
182
188
|
(0, import_utils.registerTldrawLibraryVersion)(
|
|
183
189
|
"@tldraw/tlschema",
|
|
184
|
-
"4.
|
|
190
|
+
"4.6.0-canary.0bcbb3ed5bcb",
|
|
185
191
|
"cjs"
|
|
186
192
|
);
|
|
187
193
|
//# sourceMappingURL=index.js.map
|
package/dist-cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * @fileoverview\n * Main entry point for the tldraw schema package. Exports the complete type system,\n * data structures, validation, and migrations for tldraw's persisted data.\n *\n * This package provides:\n * - Schema creation utilities (createTLSchema, defaultShapeSchemas, defaultBindingSchemas)\n * - All built-in shape types (TLGeoShape, TLTextShape, TLArrowShape, etc.)\n * - Asset management types and validators (TLImageAsset, TLVideoAsset, TLBookmarkAsset)\n * - Binding system for shape relationships (TLArrowBinding)\n * - Store integration types (TLStore, TLStoreProps, TLStoreSnapshot)\n * - Style properties for consistent styling (DefaultColorStyle, DefaultSizeStyle, etc.)\n * - Validation utilities and type guards\n * - Migration systems for schema evolution\n * - Geometry and utility types\n *\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas, TLStore } from '@tldraw/tlschema'\n *\n * // Create a schema with default shapes\n * const schema = createTLSchema({\n * shapes: defaultShapeSchemas\n * })\n *\n * // Use with a store\n * const store = new Store({ schema })\n * ```\n *\n * @public\n */\n\nimport { registerTldrawLibraryVersion } from '@tldraw/utils'\nexport { assetIdValidator, createAssetValidator, type TLBaseAsset } from './assets/TLBaseAsset'\nexport { type TLBookmarkAsset } from './assets/TLBookmarkAsset'\nexport { type TLImageAsset } from './assets/TLImageAsset'\nexport { type TLVideoAsset } from './assets/TLVideoAsset'\nexport {\n\tarrowBindingMigrations,\n\tarrowBindingProps,\n\tarrowBindingVersions,\n\tElbowArrowSnap,\n\ttype TLArrowBinding,\n\ttype TLArrowBindingProps,\n} from './bindings/TLArrowBinding'\nexport {\n\tbindingIdValidator,\n\tcreateBindingValidator,\n\ttype TLBaseBinding,\n} from './bindings/TLBaseBinding'\nexport {\n\tcreatePresenceStateDerivation,\n\tgetDefaultUserPresence,\n\ttype TLPresenceStateInfo,\n\ttype TLPresenceUserInfo,\n} from './createPresenceStateDerivation'\nexport {\n\tcreateTLSchema,\n\tdefaultBindingSchemas,\n\tdefaultShapeSchemas,\n\ttype SchemaPropsInfo,\n\ttype TLSchema,\n} from './createTLSchema'\nexport {\n\tboxModelValidator,\n\tvecModelValidator,\n\ttype BoxModel,\n\ttype VecModel,\n} from './misc/geometry-types'\nexport { idValidator } from './misc/id-validator'\nexport {\n\tcanvasUiColorTypeValidator,\n\tTL_CANVAS_UI_COLOR_TYPES,\n\ttype TLCanvasUiColor,\n} from './misc/TLColor'\nexport { TL_CURSOR_TYPES, type TLCursor, type TLCursorType } from './misc/TLCursor'\nexport { TL_HANDLE_TYPES, type TLHandle, type TLHandleType } from './misc/TLHandle'\nexport { opacityValidator, type TLOpacityType } from './misc/TLOpacity'\nexport { richTextValidator, toRichText, type TLRichText } from './misc/TLRichText'\nexport { scribbleValidator, TL_SCRIBBLE_STATES, type TLScribble } from './misc/TLScribble'\nexport {\n\tassetMigrations,\n\tAssetRecordType,\n\tassetValidator,\n\ttype TLAsset,\n\ttype TLAssetId,\n\ttype TLAssetPartial,\n\ttype TLAssetShape,\n} from './records/TLAsset'\nexport {\n\tcreateBindingId,\n\tcreateBindingPropsMigrationIds,\n\tcreateBindingPropsMigrationSequence,\n\tisBinding,\n\tisBindingId,\n\trootBindingMigrations,\n\ttype TLBinding,\n\ttype TLBindingCreate,\n\ttype TLBindingId,\n\ttype TLBindingUpdate,\n\ttype TLDefaultBinding,\n\ttype TLGlobalBindingPropsMap,\n\ttype TLIndexedBindings,\n\ttype TLUnknownBinding,\n} from './records/TLBinding'\nexport { CameraRecordType, type TLCamera, type TLCameraId } from './records/TLCamera'\nexport {\n\tDocumentRecordType,\n\tisDocument,\n\tTLDOCUMENT_ID,\n\ttype TLDocument,\n} from './records/TLDocument'\nexport {\n\tpluckPreservingValues,\n\tTLINSTANCE_ID,\n\ttype TLInstance,\n\ttype TLInstanceId,\n} from './records/TLInstance'\nexport {\n\tisPageId,\n\tpageIdValidator,\n\tPageRecordType,\n\ttype TLPage,\n\ttype TLPageId,\n} from './records/TLPage'\nexport {\n\tInstancePageStateRecordType,\n\ttype TLInstancePageState,\n\ttype TLInstancePageStateId,\n} from './records/TLPageState'\nexport {\n\tPointerRecordType,\n\tTLPOINTER_ID,\n\ttype TLPointer,\n\ttype TLPointerId,\n} from './records/TLPointer'\nexport {\n\tInstancePresenceRecordType,\n\ttype TLInstancePresence,\n\ttype TLInstancePresenceID,\n} from './records/TLPresence'\nexport {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,mBAA6C;AAC7C,yBAAyE;AAIzE,4BAOO;AACP,2BAIO;AACP,2CAKO;AACP,4BAMO;AACP,4BAKO;AACP,0BAA4B;AAC5B,qBAIO;AACP,sBAAkE;AAClE,sBAAkE;AAClE,uBAAqD;AACrD,wBAA+D;AAC/D,wBAAuE;AACvE,qBAQO;AACP,uBAeO;AACP,sBAAiE;AACjE,wBAKO;AACP,wBAKO;AACP,oBAMO;AACP,yBAIO;AACP,uBAKO;AACP,wBAIO;
|
|
4
|
+
"sourcesContent": ["/**\n * @fileoverview\n * Main entry point for the tldraw schema package. Exports the complete type system,\n * data structures, validation, and migrations for tldraw's persisted data.\n *\n * This package provides:\n * - Schema creation utilities (createTLSchema, defaultShapeSchemas, defaultBindingSchemas)\n * - All built-in shape types (TLGeoShape, TLTextShape, TLArrowShape, etc.)\n * - Asset management types and validators (TLImageAsset, TLVideoAsset, TLBookmarkAsset)\n * - Binding system for shape relationships (TLArrowBinding)\n * - Store integration types (TLStore, TLStoreProps, TLStoreSnapshot)\n * - Style properties for consistent styling (DefaultColorStyle, DefaultSizeStyle, etc.)\n * - Validation utilities and type guards\n * - Migration systems for schema evolution\n * - Geometry and utility types\n *\n * @example\n * ```ts\n * import { createTLSchema, defaultShapeSchemas, TLStore } from '@tldraw/tlschema'\n *\n * // Create a schema with default shapes\n * const schema = createTLSchema({\n * shapes: defaultShapeSchemas\n * })\n *\n * // Use with a store\n * const store = new Store({ schema })\n * ```\n *\n * @public\n */\n\nimport { registerTldrawLibraryVersion } from '@tldraw/utils'\nexport { assetIdValidator, createAssetValidator, type TLBaseAsset } from './assets/TLBaseAsset'\nexport { type TLBookmarkAsset } from './assets/TLBookmarkAsset'\nexport { type TLImageAsset } from './assets/TLImageAsset'\nexport { type TLVideoAsset } from './assets/TLVideoAsset'\nexport {\n\tarrowBindingMigrations,\n\tarrowBindingProps,\n\tarrowBindingVersions,\n\tElbowArrowSnap,\n\ttype TLArrowBinding,\n\ttype TLArrowBindingProps,\n} from './bindings/TLArrowBinding'\nexport {\n\tbindingIdValidator,\n\tcreateBindingValidator,\n\ttype TLBaseBinding,\n} from './bindings/TLBaseBinding'\nexport {\n\tcreatePresenceStateDerivation,\n\tgetDefaultUserPresence,\n\ttype TLPresenceStateInfo,\n\ttype TLPresenceUserInfo,\n} from './createPresenceStateDerivation'\nexport {\n\tcreateTLSchema,\n\tdefaultBindingSchemas,\n\tdefaultShapeSchemas,\n\ttype SchemaPropsInfo,\n\ttype TLSchema,\n} from './createTLSchema'\nexport {\n\tboxModelValidator,\n\tvecModelValidator,\n\ttype BoxModel,\n\ttype VecModel,\n} from './misc/geometry-types'\nexport { idValidator } from './misc/id-validator'\nexport {\n\tcanvasUiColorTypeValidator,\n\tTL_CANVAS_UI_COLOR_TYPES,\n\ttype TLCanvasUiColor,\n} from './misc/TLColor'\nexport { TL_CURSOR_TYPES, type TLCursor, type TLCursorType } from './misc/TLCursor'\nexport { TL_HANDLE_TYPES, type TLHandle, type TLHandleType } from './misc/TLHandle'\nexport { opacityValidator, type TLOpacityType } from './misc/TLOpacity'\nexport { richTextValidator, toRichText, type TLRichText } from './misc/TLRichText'\nexport { scribbleValidator, TL_SCRIBBLE_STATES, type TLScribble } from './misc/TLScribble'\nexport {\n\tassetMigrations,\n\tAssetRecordType,\n\tassetValidator,\n\ttype TLAsset,\n\ttype TLAssetId,\n\ttype TLAssetPartial,\n\ttype TLAssetShape,\n} from './records/TLAsset'\nexport {\n\tcreateBindingId,\n\tcreateBindingPropsMigrationIds,\n\tcreateBindingPropsMigrationSequence,\n\tisBinding,\n\tisBindingId,\n\trootBindingMigrations,\n\ttype TLBinding,\n\ttype TLBindingCreate,\n\ttype TLBindingId,\n\ttype TLBindingUpdate,\n\ttype TLDefaultBinding,\n\ttype TLGlobalBindingPropsMap,\n\ttype TLIndexedBindings,\n\ttype TLUnknownBinding,\n} from './records/TLBinding'\nexport { CameraRecordType, type TLCamera, type TLCameraId } from './records/TLCamera'\nexport {\n\tcreateCustomRecordId,\n\tcreateCustomRecordMigrationIds,\n\tcreateCustomRecordMigrationSequence,\n\tisCustomRecord,\n\tisCustomRecordId,\n\ttype CustomRecordInfo,\n} from './records/TLCustomRecord'\nexport {\n\tDocumentRecordType,\n\tisDocument,\n\tTLDOCUMENT_ID,\n\ttype TLDocument,\n} from './records/TLDocument'\nexport {\n\tpluckPreservingValues,\n\tTLINSTANCE_ID,\n\ttype TLInstance,\n\ttype TLInstanceId,\n} from './records/TLInstance'\nexport {\n\tisPageId,\n\tpageIdValidator,\n\tPageRecordType,\n\ttype TLPage,\n\ttype TLPageId,\n} from './records/TLPage'\nexport {\n\tInstancePageStateRecordType,\n\ttype TLInstancePageState,\n\ttype TLInstancePageStateId,\n} from './records/TLPageState'\nexport {\n\tPointerRecordType,\n\tTLPOINTER_ID,\n\ttype TLPointer,\n\ttype TLPointerId,\n} from './records/TLPointer'\nexport {\n\tInstancePresenceRecordType,\n\ttype TLInstancePresence,\n\ttype TLInstancePresenceID,\n} from './records/TLPresence'\nexport {\n\ttype TLCustomRecord,\n\ttype TLDefaultRecord,\n\ttype TLGlobalRecordPropsMap,\n\ttype TLIndexedRecords,\n\ttype TLRecord,\n} from './records/TLRecord'\nexport {\n\tcreateShapeId,\n\tcreateShapePropsMigrationIds,\n\tcreateShapePropsMigrationSequence,\n\tgetShapePropKeysByStyle,\n\tisShape,\n\tisShapeId,\n\trootShapeMigrations,\n\ttype ExtractShapeByProps,\n\ttype TLCreateShapePartial,\n\ttype TLDefaultShape,\n\ttype TLGlobalShapePropsMap,\n\ttype TLIndexedShapes,\n\ttype TLParentId,\n\ttype TLShape,\n\ttype TLShapeId,\n\ttype TLShapePartial,\n\ttype TLUnknownShape,\n} from './records/TLShape'\nexport {\n\ttype RecordProps,\n\ttype RecordPropsType,\n\ttype TLPropsMigration,\n\ttype TLPropsMigrations,\n} from './recordsWithProps'\nexport { type ShapeWithCrop, type TLShapeCrop } from './shapes/ShapeWithCrop'\nexport {\n\tArrowShapeArrowheadEndStyle,\n\tArrowShapeArrowheadStartStyle,\n\tArrowShapeKindStyle,\n\tarrowShapeMigrations,\n\tarrowShapeProps,\n\tarrowShapeVersions,\n\ttype TLArrowShape,\n\ttype TLArrowShapeArrowheadStyle,\n\ttype TLArrowShapeKind,\n\ttype TLArrowShapeProps,\n} from './shapes/TLArrowShape'\nexport {\n\tcreateShapeValidator,\n\tparentIdValidator,\n\tshapeIdValidator,\n\ttype TLBaseShape,\n} from './shapes/TLBaseShape'\nexport {\n\tbookmarkShapeMigrations,\n\tbookmarkShapeProps,\n\ttype TLBookmarkShape,\n\ttype TLBookmarkShapeProps,\n} from './shapes/TLBookmarkShape'\nexport {\n\tcompressLegacySegments,\n\tdrawShapeMigrations,\n\tdrawShapeProps,\n\ttype TLDrawShape,\n\ttype TLDrawShapeProps,\n\ttype TLDrawShapeSegment,\n} from './shapes/TLDrawShape'\nexport {\n\tembedShapeMigrations,\n\tembedShapeProps,\n\ttype TLEmbedShape,\n\ttype TLEmbedShapeProps,\n} from './shapes/TLEmbedShape'\nexport {\n\tframeShapeMigrations,\n\tframeShapeProps,\n\ttype TLFrameShape,\n\ttype TLFrameShapeProps,\n} from './shapes/TLFrameShape'\nexport {\n\tGeoShapeGeoStyle,\n\tgeoShapeMigrations,\n\tgeoShapeProps,\n\ttype TLGeoShape,\n\ttype TLGeoShapeGeoStyle,\n\ttype TLGeoShapeProps,\n} from './shapes/TLGeoShape'\nexport {\n\tgroupShapeMigrations,\n\tgroupShapeProps,\n\ttype TLGroupShape,\n\ttype TLGroupShapeProps,\n} from './shapes/TLGroupShape'\nexport {\n\thighlightShapeMigrations,\n\thighlightShapeProps,\n\ttype TLHighlightShape,\n\ttype TLHighlightShapeProps,\n} from './shapes/TLHighlightShape'\nexport {\n\tImageShapeCrop,\n\timageShapeMigrations,\n\timageShapeProps,\n\ttype TLImageShape,\n\ttype TLImageShapeProps,\n} from './shapes/TLImageShape'\nexport {\n\tlineShapeMigrations,\n\tlineShapeProps,\n\tLineShapeSplineStyle,\n\ttype TLLineShape,\n\ttype TLLineShapePoint,\n\ttype TLLineShapeProps,\n\ttype TLLineShapeSplineStyle,\n} from './shapes/TLLineShape'\nexport {\n\tnoteShapeMigrations,\n\tnoteShapeProps,\n\ttype TLNoteShape,\n\ttype TLNoteShapeProps,\n} from './shapes/TLNoteShape'\nexport {\n\ttextShapeMigrations,\n\ttextShapeProps,\n\ttype TLTextShape,\n\ttype TLTextShapeProps,\n} from './shapes/TLTextShape'\nexport {\n\tvideoShapeMigrations,\n\tvideoShapeProps,\n\ttype TLVideoShape,\n\ttype TLVideoShapeProps,\n} from './shapes/TLVideoShape'\nexport { EnumStyleProp, StyleProp, type StylePropValue } from './styles/StyleProp'\nexport {\n\tdefaultColorNames,\n\tDefaultColorStyle,\n\tDefaultColorThemePalette,\n\tDefaultLabelColorStyle,\n\tgetColorValue,\n\tgetDefaultColorTheme,\n\ttype TLDefaultColorStyle,\n\ttype TLDefaultColorTheme,\n\ttype TLDefaultColorThemeColor,\n} from './styles/TLColorStyle'\nexport { DefaultDashStyle, type TLDefaultDashStyle } from './styles/TLDashStyle'\nexport { DefaultFillStyle, type TLDefaultFillStyle } from './styles/TLFillStyle'\nexport {\n\tDefaultFontFamilies,\n\tDefaultFontStyle,\n\ttype TLDefaultFontStyle,\n} from './styles/TLFontStyle'\nexport {\n\tDefaultHorizontalAlignStyle,\n\ttype TLDefaultHorizontalAlignStyle,\n} from './styles/TLHorizontalAlignStyle'\nexport { DefaultSizeStyle, type TLDefaultSizeStyle } from './styles/TLSizeStyle'\nexport { DefaultTextAlignStyle, type TLDefaultTextAlignStyle } from './styles/TLTextAlignStyle'\nexport {\n\tDefaultVerticalAlignStyle,\n\ttype TLDefaultVerticalAlignStyle,\n} from './styles/TLVerticalAlignStyle'\nexport {\n\ttype TLAssetContext,\n\ttype TLAssetStore,\n\ttype TLSerializedStore,\n\ttype TLStore,\n\ttype TLStoreProps,\n\ttype TLStoreSchema,\n\ttype TLStoreSnapshot,\n} from './TLStore'\nexport {\n\tgetDefaultTranslationLocale,\n\tLANGUAGES,\n\ttype TLLanguage,\n} from './translations/translations'\nexport { type SetValue } from './util-types'\n\nregisterTldrawLibraryVersion(\n\t(globalThis as any).TLDRAW_LIBRARY_NAME,\n\t(globalThis as any).TLDRAW_LIBRARY_VERSION,\n\t(globalThis as any).TLDRAW_LIBRARY_MODULES\n)\n\nexport { b64Vecs } from './misc/b64Vecs'\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,mBAA6C;AAC7C,yBAAyE;AAIzE,4BAOO;AACP,2BAIO;AACP,2CAKO;AACP,4BAMO;AACP,4BAKO;AACP,0BAA4B;AAC5B,qBAIO;AACP,sBAAkE;AAClE,sBAAkE;AAClE,uBAAqD;AACrD,wBAA+D;AAC/D,wBAAuE;AACvE,qBAQO;AACP,uBAeO;AACP,sBAAiE;AACjE,4BAOO;AACP,wBAKO;AACP,wBAKO;AACP,oBAMO;AACP,yBAIO;AACP,uBAKO;AACP,wBAIO;AAQP,qBAkBO;AAQP,0BAWO;AACP,yBAKO;AACP,6BAKO;AACP,yBAOO;AACP,0BAKO;AACP,0BAKO;AACP,wBAOO;AACP,0BAKO;AACP,8BAKO;AACP,0BAMO;AACP,yBAQO;AACP,yBAKO;AACP,yBAKO;AACP,0BAKO;AACP,uBAA8D;AAC9D,0BAUO;AACP,yBAA0D;AAC1D,yBAA0D;AAC1D,yBAIO;AACP,oCAGO;AACP,yBAA0D;AAC1D,8BAAoE;AACpE,kCAGO;AAUP,0BAIO;AASP,qBAAwB;AAAA,IANxB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|