@tldraw/editor 3.8.0-canary.80294e641ad6 → 3.8.0-canary.86aae29d7f4a

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.
Files changed (93) hide show
  1. package/dist-cjs/index.d.ts +250 -58
  2. package/dist-cjs/index.js +14 -8
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +2 -5
  5. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  6. package/dist-cjs/lib/config/TLSessionStateSnapshot.js.map +2 -2
  7. package/dist-cjs/lib/config/createTLStore.js +4 -2
  8. package/dist-cjs/lib/config/createTLStore.js.map +2 -2
  9. package/dist-cjs/lib/editor/Editor.js +83 -19
  10. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  11. package/dist-cjs/lib/editor/managers/SnapManager/BoundsSnaps.js.map +2 -2
  12. package/dist-cjs/lib/editor/managers/TextManager.js +1 -0
  13. package/dist-cjs/lib/editor/managers/TextManager.js.map +2 -2
  14. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  15. package/dist-cjs/lib/editor/shapes/shared/resizeScaled.js +66 -0
  16. package/dist-cjs/lib/editor/shapes/shared/resizeScaled.js.map +7 -0
  17. package/dist-cjs/lib/editor/types/SvgExportContext.js.map +2 -2
  18. package/dist-cjs/lib/editor/types/emit-types.js.map +1 -1
  19. package/dist-cjs/lib/editor/types/external-content.js.map +1 -1
  20. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  21. package/dist-cjs/lib/exports/StyleEmbedder.js.map +2 -2
  22. package/dist-cjs/lib/exports/exportToSvg.js.map +2 -2
  23. package/dist-cjs/lib/exports/getSvgAsImage.js +83 -0
  24. package/dist-cjs/lib/exports/getSvgAsImage.js.map +7 -0
  25. package/dist-cjs/lib/exports/getSvgJsx.js +16 -3
  26. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  27. package/dist-cjs/lib/hooks/useLocalStore.js +1 -1
  28. package/dist-cjs/lib/hooks/useLocalStore.js.map +2 -2
  29. package/dist-cjs/lib/options.js +2 -1
  30. package/dist-cjs/lib/options.js.map +2 -2
  31. package/dist-cjs/lib/utils/browserCanvasMaxSize.js +75 -0
  32. package/dist-cjs/lib/utils/browserCanvasMaxSize.js.map +7 -0
  33. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +3 -1
  34. package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
  35. package/dist-cjs/version.js +3 -3
  36. package/dist-cjs/version.js.map +1 -1
  37. package/dist-esm/index.d.mts +250 -58
  38. package/dist-esm/index.mjs +7 -1
  39. package/dist-esm/index.mjs.map +2 -2
  40. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +2 -5
  41. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  42. package/dist-esm/lib/config/TLSessionStateSnapshot.mjs.map +2 -2
  43. package/dist-esm/lib/config/createTLStore.mjs +4 -2
  44. package/dist-esm/lib/config/createTLStore.mjs.map +2 -2
  45. package/dist-esm/lib/editor/Editor.mjs +83 -19
  46. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  47. package/dist-esm/lib/editor/managers/SnapManager/BoundsSnaps.mjs.map +2 -2
  48. package/dist-esm/lib/editor/managers/TextManager.mjs +1 -0
  49. package/dist-esm/lib/editor/managers/TextManager.mjs.map +2 -2
  50. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  51. package/dist-esm/lib/editor/shapes/shared/resizeScaled.mjs +46 -0
  52. package/dist-esm/lib/editor/shapes/shared/resizeScaled.mjs.map +7 -0
  53. package/dist-esm/lib/editor/types/SvgExportContext.mjs.map +2 -2
  54. package/dist-esm/lib/exports/StyleEmbedder.mjs.map +2 -2
  55. package/dist-esm/lib/exports/exportToSvg.mjs.map +2 -2
  56. package/dist-esm/lib/exports/getSvgAsImage.mjs +63 -0
  57. package/dist-esm/lib/exports/getSvgAsImage.mjs.map +7 -0
  58. package/dist-esm/lib/exports/getSvgJsx.mjs +16 -3
  59. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  60. package/dist-esm/lib/hooks/useLocalStore.mjs +1 -1
  61. package/dist-esm/lib/hooks/useLocalStore.mjs.map +2 -2
  62. package/dist-esm/lib/options.mjs +2 -1
  63. package/dist-esm/lib/options.mjs.map +2 -2
  64. package/dist-esm/lib/utils/browserCanvasMaxSize.mjs +45 -0
  65. package/dist-esm/lib/utils/browserCanvasMaxSize.mjs.map +7 -0
  66. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +3 -1
  67. package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
  68. package/dist-esm/version.mjs +3 -3
  69. package/dist-esm/version.mjs.map +1 -1
  70. package/editor.css +2 -1
  71. package/package.json +22 -20
  72. package/src/index.ts +19 -1
  73. package/src/lib/components/default-components/DefaultCanvas.tsx +2 -5
  74. package/src/lib/config/TLSessionStateSnapshot.ts +3 -1
  75. package/src/lib/config/createTLStore.ts +4 -2
  76. package/src/lib/editor/Editor.ts +132 -42
  77. package/src/lib/editor/managers/SnapManager/BoundsSnaps.ts +4 -4
  78. package/src/lib/editor/managers/TextManager.ts +1 -0
  79. package/src/lib/editor/shapes/ShapeUtil.ts +30 -1
  80. package/src/lib/editor/shapes/shared/resizeScaled.ts +61 -0
  81. package/src/lib/editor/types/SvgExportContext.tsx +21 -0
  82. package/src/lib/editor/types/emit-types.ts +1 -0
  83. package/src/lib/editor/types/external-content.ts +90 -50
  84. package/src/lib/editor/types/misc-types.ts +55 -2
  85. package/src/lib/exports/StyleEmbedder.ts +1 -1
  86. package/src/lib/exports/exportToSvg.tsx +2 -2
  87. package/src/lib/exports/getSvgAsImage.ts +92 -0
  88. package/src/lib/exports/getSvgJsx.tsx +17 -2
  89. package/src/lib/hooks/useLocalStore.ts +1 -1
  90. package/src/lib/options.ts +6 -0
  91. package/src/lib/utils/browserCanvasMaxSize.ts +65 -0
  92. package/src/lib/utils/sync/TLLocalSyncClient.ts +3 -1
  93. package/src/version.ts +3 -3
@@ -68,6 +68,7 @@ import { TLPropsMigrations } from '@tldraw/tlschema';
68
68
  import { TLRecord } from '@tldraw/tlschema';
69
69
  import { TLScribble } from '@tldraw/tlschema';
70
70
  import { TLShape } from '@tldraw/tlschema';
71
+ import { TLShapeCrop } from '@tldraw/tlschema';
71
72
  import { TLShapeId } from '@tldraw/tlschema';
72
73
  import { TLShapePartial } from '@tldraw/tlschema';
73
74
  import { TLStore } from '@tldraw/tlschema';
@@ -536,6 +537,8 @@ export declare type BoxLike = Box | BoxModel;
536
537
  */
537
538
  export declare function canonicalizeRotation(a: number): number;
538
539
 
540
+ /* Excluded from this release type: CanvasMaxSize */
541
+
539
542
  /**
540
543
  * Get the center of a circle from three points.
541
544
  *
@@ -615,6 +618,8 @@ export declare function clamp(n: number, min: number, max: number): number;
615
618
  */
616
619
  export declare function clampRadians(r: number): number;
617
620
 
621
+ /* Excluded from this release type: clampToBrowserMaxCanvasSize */
622
+
618
623
  /** @public */
619
624
  export declare class ClickManager {
620
625
  editor: Editor;
@@ -880,6 +885,7 @@ export declare const defaultTldrawOptions: {
880
885
  readonly maxPointsPerDrawShape: 500;
881
886
  readonly maxShapesPerPage: 4000;
882
887
  readonly multiClickDurationMs: 200;
888
+ readonly noteShapeResizeMode: "none";
883
889
  readonly temporaryAssetPreviewLifetimeMs: 180000;
884
890
  readonly textShadowLod: 0.35;
885
891
  };
@@ -1113,6 +1119,14 @@ export declare class Editor extends EventEmitter<TLEventMap> {
1113
1119
  getShapeUtil<S extends TLUnknownShape>(shape: S | TLShapePartial<S>): ShapeUtil<S>;
1114
1120
  getShapeUtil<S extends TLUnknownShape>(type: S['type']): ShapeUtil<S>;
1115
1121
  getShapeUtil<T extends ShapeUtil>(type: T extends ShapeUtil<infer R> ? R['type'] : string): T;
1122
+ /**
1123
+ * Returns true if the editor has a shape util for the given shape / shape type.
1124
+ *
1125
+ * @param shape - A shape, shape partial, or shape type.
1126
+ */
1127
+ hasShapeUtil<S extends TLUnknownShape>(shape: S | TLShapePartial<S>): boolean;
1128
+ hasShapeUtil<S extends TLUnknownShape>(type: S['type']): boolean;
1129
+ hasShapeUtil<T extends ShapeUtil>(type: T extends ShapeUtil<infer R> ? R['type'] : string): boolean;
1116
1130
  /**
1117
1131
  * A map of shape utility classes (TLShapeUtils) by shape type.
1118
1132
  *
@@ -2348,6 +2362,7 @@ export declare class Editor extends EventEmitter<TLEventMap> {
2348
2362
  */
2349
2363
  getAsset<T extends TLAsset>(asset: T | T['id']): T | undefined;
2350
2364
  resolveAssetUrl(assetId: null | TLAssetId, context: {
2365
+ dpr?: number;
2351
2366
  screenScale?: number;
2352
2367
  shouldResolveToOriginal?: boolean;
2353
2368
  }): Promise<null | string>;
@@ -2355,7 +2370,10 @@ export declare class Editor extends EventEmitter<TLEventMap> {
2355
2370
  * Upload an asset to the store's asset service, returning a URL that can be used to resolve the
2356
2371
  * asset.
2357
2372
  */
2358
- uploadAsset(asset: TLAsset, file: File, abortSignal?: AbortSignal): Promise<string>;
2373
+ uploadAsset(asset: TLAsset, file: File, abortSignal?: AbortSignal): Promise<{
2374
+ meta?: JsonObject;
2375
+ src: string;
2376
+ }>;
2359
2377
  private _getShapeGeometryCache;
2360
2378
  /**
2361
2379
  * Get the geometry of a shape.
@@ -3426,7 +3444,7 @@ export declare class Editor extends EventEmitter<TLEventMap> {
3426
3444
  *
3427
3445
  * @public
3428
3446
  */
3429
- registerExternalAssetHandler<T extends TLExternalAssetContent['type']>(type: T, handler: ((info: TLExternalAssetContent & {
3447
+ registerExternalAssetHandler<T extends TLExternalAsset['type']>(type: T, handler: ((info: TLExternalAsset & {
3430
3448
  type: T;
3431
3449
  }) => Promise<TLAsset>) | null): this;
3432
3450
  /**
@@ -3472,8 +3490,8 @@ export declare class Editor extends EventEmitter<TLEventMap> {
3472
3490
  * @param info - Info about the external content.
3473
3491
  * @returns The asset.
3474
3492
  */
3475
- getAssetForExternalContent(info: TLExternalAssetContent): Promise<TLAsset | undefined>;
3476
- hasExternalAssetHandler(type: TLExternalAssetContent['type']): boolean;
3493
+ getAssetForExternalContent(info: TLExternalAsset): Promise<TLAsset | undefined>;
3494
+ hasExternalAssetHandler(type: TLExternalAsset['type']): boolean;
3477
3495
  /* Excluded from this release type: externalContentHandlers */
3478
3496
  /**
3479
3497
  * Register an external content handler. This handler will be called when the editor receives
@@ -3538,7 +3556,7 @@ export declare class Editor extends EventEmitter<TLEventMap> {
3538
3556
  *
3539
3557
  * @public
3540
3558
  */
3541
- getSvgElement(shapes: TLShape[] | TLShapeId[], opts?: TLImageExportOptions): Promise<{
3559
+ getSvgElement(shapes: TLShape[] | TLShapeId[], opts?: TLSvgExportOptions): Promise<{
3542
3560
  height: number;
3543
3561
  svg: SVGSVGElement;
3544
3562
  width: number;
@@ -3553,13 +3571,27 @@ export declare class Editor extends EventEmitter<TLEventMap> {
3553
3571
  *
3554
3572
  * @public
3555
3573
  */
3556
- getSvgString(shapes: TLShape[] | TLShapeId[], opts?: TLImageExportOptions): Promise<{
3574
+ getSvgString(shapes: TLShape[] | TLShapeId[], opts?: TLSvgExportOptions): Promise<{
3557
3575
  height: number;
3558
3576
  svg: string;
3559
3577
  width: number;
3560
3578
  } | undefined>;
3561
3579
  /** @deprecated Use {@link Editor.getSvgString} or {@link Editor.getSvgElement} instead. */
3562
- getSvg(shapes: TLShape[] | TLShapeId[], opts?: TLImageExportOptions): Promise<SVGSVGElement | undefined>;
3580
+ getSvg(shapes: TLShape[] | TLShapeId[], opts?: TLSvgExportOptions): Promise<SVGSVGElement | undefined>;
3581
+ /**
3582
+ * Get an exported image of the given shapes.
3583
+ *
3584
+ * @param shapes - The shapes (or shape ids) to export.
3585
+ * @param opts - Options for the export.
3586
+ *
3587
+ * @returns A blob of the image.
3588
+ * @public
3589
+ */
3590
+ toImage(shapes: TLShape[] | TLShapeId[], opts?: TLImageExportOptions): Promise<{
3591
+ blob: Blob;
3592
+ height: number;
3593
+ width: number;
3594
+ }>;
3563
3595
  /**
3564
3596
  * The app's current input state.
3565
3597
  *
@@ -4073,6 +4105,15 @@ export declare function getPolygonVertices(width: number, height: number, sides:
4073
4105
  /** @public */
4074
4106
  export declare function getSnapshot(store: TLStore): TLEditorSnapshot;
4075
4107
 
4108
+ /** @public */
4109
+ export declare function getSvgAsImage(svgString: string, options: {
4110
+ height: number;
4111
+ pixelRatio?: number;
4112
+ quality?: number;
4113
+ type: 'jpeg' | 'png' | 'webp';
4114
+ width: number;
4115
+ }): Promise<Blob | null>;
4116
+
4076
4117
  /**
4077
4118
  * Turn an array of points into a path of quadradic curves.
4078
4119
  *
@@ -4652,6 +4693,23 @@ export declare interface ResizeBoxOptions {
4652
4693
  maxHeight?: number;
4653
4694
  }
4654
4695
 
4696
+ /**
4697
+ * Resize a shape that has a scale prop.
4698
+ *
4699
+ * @param shape - The shape to resize
4700
+ * @param info - The resize info
4701
+ *
4702
+ * @public */
4703
+ export declare function resizeScaled(shape: TLBaseShape<any, {
4704
+ scale: number;
4705
+ }>, { initialBounds, scaleX, scaleY, newPoint, handle }: TLResizeInfo<any>): {
4706
+ props: {
4707
+ scale: number;
4708
+ };
4709
+ x: number;
4710
+ y: number;
4711
+ };
4712
+
4655
4713
  /** @public */
4656
4714
  export declare const ROTATE_CORNER_TO_SELECTION_CORNER: {
4657
4715
  readonly bottom_left_rotate: "bottom_left";
@@ -5023,6 +5081,15 @@ export declare abstract class ShapeUtil<Shape extends TLUnknownShape = TLUnknown
5023
5081
  * @public
5024
5082
  */
5025
5083
  onBeforeUpdate?(prev: Shape, next: Shape): Shape | void;
5084
+ /**
5085
+ * A callback called when a shape changes from a crop.
5086
+ *
5087
+ * @param shape - The shape at the start of the crop.
5088
+ * @param info - Info about the crop.
5089
+ * @returns A change to apply to the shape, or void.
5090
+ * @public
5091
+ */
5092
+ onCrop?(shape: Shape, info: TLCropInfo<Shape>): Omit<TLShapePartial<Shape>, 'id' | 'type'> | undefined | void;
5026
5093
  /**
5027
5094
  * A callback called when some other shapes are dragged over this one.
5028
5095
  *
@@ -5404,10 +5471,27 @@ export declare interface SvgExportContext {
5404
5471
  * method depending on your use-case.
5405
5472
  */
5406
5473
  waitUntil(promise: Promise<void>): void;
5474
+ /**
5475
+ * Resolve an asset URL in the context of this export. Supply the asset ID and the width in
5476
+ * shape-pixels it'll be displayed at, and this will resolve the asset according to the export
5477
+ * options.
5478
+ */
5479
+ resolveAssetUrl(assetId: TLAssetId, width: number): Promise<null | string>;
5407
5480
  /**
5408
5481
  * Whether the export should be in dark mode.
5409
5482
  */
5410
5483
  readonly isDarkMode: boolean;
5484
+ /**
5485
+ * The scale of the export - how much CSS pixels will be scaled up/down by.
5486
+ */
5487
+ readonly scale: number;
5488
+ /**
5489
+ * Use this value to optionally downscale images in the export. If we're exporting directly to
5490
+ * an SVG, this will usually be null, and you shouldn't downscale images. If the export is to a
5491
+ * raster format like PNG, this will be the number of raster pixels in the resulting bitmap per
5492
+ * CSS pixel in the resulting SVG.
5493
+ */
5494
+ readonly pixelRatio: null | number;
5411
5495
  }
5412
5496
 
5413
5497
  /** @public */
@@ -5498,6 +5582,12 @@ export declare interface TLBaseEventInfo {
5498
5582
  accelKey: boolean;
5499
5583
  }
5500
5584
 
5585
+ /** @public */
5586
+ export declare interface TLBaseExternalContent {
5587
+ sources?: TLExternalContentSource[];
5588
+ point?: VecLike;
5589
+ }
5590
+
5501
5591
  /** @public */
5502
5592
  export declare interface TLBindingUtilConstructor<T extends TLUnknownBinding, U extends BindingUtil<T> = BindingUtil<T>> {
5503
5593
  new (editor: Editor): U;
@@ -5663,6 +5753,24 @@ export declare interface TLContent {
5663
5753
  schema: SerializedSchema;
5664
5754
  }
5665
5755
 
5756
+ /**
5757
+ * Info about a crop.
5758
+ * @param handle - The handle being dragged.
5759
+ * @param change - The distance the handle is moved.
5760
+ * @param initialShape - The shape at the start of the resize.
5761
+ * @public
5762
+ */
5763
+ export declare interface TLCropInfo<T extends TLShape> {
5764
+ handle: SelectionHandle;
5765
+ change: Vec;
5766
+ crop: TLShapeCrop;
5767
+ uncroppedSize: {
5768
+ h: number;
5769
+ w: number;
5770
+ };
5771
+ initialShape: T;
5772
+ }
5773
+
5666
5774
  /** @public */
5667
5775
  export declare interface TLCursorProps {
5668
5776
  className?: string;
@@ -5915,6 +6023,11 @@ export declare interface TldrawOptions {
5915
6023
  readonly exportProvider: ComponentType<{
5916
6024
  children: React.ReactNode;
5917
6025
  }>;
6026
+ /**
6027
+ * How should the note shape resize? By default it does not resize (except automatically based on its text content),
6028
+ * but you can set it to be user-resizable using scale.
6029
+ */
6030
+ readonly noteShapeResizeMode: 'none' | 'scale';
5918
6031
  }
5919
6032
 
5920
6033
  /** @public */
@@ -6016,6 +6129,13 @@ export declare interface TLEditorSnapshot {
6016
6129
  session: TLSessionStateSnapshot;
6017
6130
  }
6018
6131
 
6132
+ /** @public */
6133
+ export declare interface TLEmbedExternalContent<EmbedDefinition> extends TLBaseExternalContent {
6134
+ type: 'embed';
6135
+ url: string;
6136
+ embed: EmbedDefinition;
6137
+ }
6138
+
6019
6139
  /** @public */
6020
6140
  export declare type TLEnterEventHandler = (info: any, from: string) => void;
6021
6141
 
@@ -6041,6 +6161,13 @@ export declare interface TLErrorBoundaryProps {
6041
6161
  fallback: TLErrorFallbackComponent;
6042
6162
  }
6043
6163
 
6164
+ /** @public */
6165
+ export declare interface TLErrorExternalContentSource {
6166
+ type: 'error';
6167
+ data: null | string;
6168
+ reason: string;
6169
+ }
6170
+
6044
6171
  /** @public */
6045
6172
  export declare type TLErrorFallbackComponent = ComponentType<{
6046
6173
  editor?: Editor;
@@ -6086,6 +6213,7 @@ export declare interface TLEventMap {
6086
6213
  }];
6087
6214
  'stop-camera-animation': [];
6088
6215
  'stop-following': [];
6216
+ 'before-event': [TLEventInfo];
6089
6217
  event: [TLEventInfo];
6090
6218
  tick: [number];
6091
6219
  frame: [number];
@@ -6100,58 +6228,40 @@ export declare type TLEventMapHandler<T extends keyof TLEventMap> = (...args: TL
6100
6228
  /** @public */
6101
6229
  export declare type TLEventName = 'cancel' | 'complete' | 'interrupt' | 'tick' | 'wheel' | TLCLickEventName | TLKeyboardEventName | TLPinchEventName | TLPointerEventName;
6102
6230
 
6231
+ /** @public */
6232
+ export declare interface TLExcalidrawExternalContentSource {
6233
+ type: 'excalidraw';
6234
+ data: any;
6235
+ }
6236
+
6103
6237
  /** @public */
6104
6238
  export declare type TLExitEventHandler = (info: any, to: string) => void;
6105
6239
 
6106
6240
  /** @public */
6107
- export declare type TLExternalAssetContent = {
6108
- assetId?: TLAssetId;
6109
- file: File;
6241
+ export declare type TLExportType = 'jpeg' | 'png' | 'svg' | 'webp';
6242
+
6243
+ /** @public */
6244
+ export declare type TLExternalAsset = TLFileExternalAsset | TLUrlExternalAsset;
6245
+
6246
+ /** @public */
6247
+ export declare type TLExternalContent<EmbedDefinition> = TLEmbedExternalContent<EmbedDefinition> | TLFilesExternalContent | TLSvgTextExternalContent | TLTextExternalContent | TLUrlExternalContent;
6248
+
6249
+ /** @public */
6250
+ export declare type TLExternalContentSource = TLErrorExternalContentSource | TLExcalidrawExternalContentSource | TLTextExternalContentSource | TLTldrawExternalContentSource;
6251
+
6252
+ /** @public */
6253
+ export declare interface TLFileExternalAsset {
6110
6254
  type: 'file';
6111
- } | {
6112
- type: 'url';
6113
- url: string;
6114
- };
6255
+ file: File;
6256
+ assetId?: TLAssetId;
6257
+ }
6115
6258
 
6116
6259
  /** @public */
6117
- export declare type TLExternalContent<EmbedDefinition> = {
6118
- point?: VecLike;
6119
- sources?: TLExternalContentSource[];
6120
- } & ({
6121
- embed: EmbedDefinition;
6122
- type: 'embed';
6123
- url: string;
6124
- } | {
6260
+ export declare interface TLFilesExternalContent extends TLBaseExternalContent {
6261
+ type: 'files';
6125
6262
  files: File[];
6126
6263
  ignoreParent: boolean;
6127
- type: 'files';
6128
- } | {
6129
- text: string;
6130
- type: 'svg-text';
6131
- } | {
6132
- text: string;
6133
- type: 'text';
6134
- } | {
6135
- type: 'url';
6136
- url: string;
6137
- });
6138
-
6139
- /** @public */
6140
- export declare type TLExternalContentSource = {
6141
- data: any;
6142
- type: 'excalidraw';
6143
- } | {
6144
- data: null | string;
6145
- reason: string;
6146
- type: 'error';
6147
- } | {
6148
- data: string;
6149
- subtype: 'html' | 'json' | 'text' | 'url';
6150
- type: 'text';
6151
- } | {
6152
- data: TLContent;
6153
- type: 'tldraw';
6154
- };
6264
+ }
6155
6265
 
6156
6266
  /** @public */
6157
6267
  export declare interface TLGridProps {
@@ -6209,15 +6319,16 @@ export declare interface TLHistoryMark {
6209
6319
  }
6210
6320
 
6211
6321
  /** @public */
6212
- export declare interface TLImageExportOptions {
6213
- bounds?: Box;
6214
- scale?: number;
6322
+ export declare interface TLImageExportOptions extends TLSvgExportOptions {
6323
+ /**
6324
+ * If the export is being converted to a lossy bitmap format (e.g. jpeg), this is the quality of
6325
+ * the export. This is a number between 0 and 1.
6326
+ */
6215
6327
  quality?: number;
6216
- pixelRatio?: number;
6217
- background?: boolean;
6218
- padding?: number;
6219
- darkMode?: boolean;
6220
- preserveAspectRatio?: React.SVGAttributes<SVGSVGElement>['preserveAspectRatio'];
6328
+ /**
6329
+ * The format to export as. Defaults to 'png'.
6330
+ */
6331
+ format?: TLExportType;
6221
6332
  }
6222
6333
 
6223
6334
  /** @public */
@@ -6721,12 +6832,75 @@ export declare type TLStoreWithStatus = {
6721
6832
  readonly store: TLStore;
6722
6833
  };
6723
6834
 
6835
+ /** @public */
6836
+ export declare interface TLSvgExportOptions {
6837
+ /**
6838
+ * The bounding box, in page coordinates, of the area being exported.
6839
+ */
6840
+ bounds?: Box;
6841
+ /**
6842
+ * The logical scale of the export. This scales the resulting size of the SVG being generated.
6843
+ */
6844
+ scale?: number;
6845
+ /**
6846
+ * When exporting an SVG, the expected pixel ratio of the export will be passed in to
6847
+ * {@link @tldraw/tlschema#TLAssetStore.resolve} as the `dpr` property, so that assets can be
6848
+ * downscaled to the appropriate resolution.
6849
+ *
6850
+ * When exporting to a bitmap image format, the size of the resulting image will be multiplied
6851
+ * by this number.
6852
+ *
6853
+ * For SVG exports, this defaults to undefined - which means we'll request original-quality
6854
+ * assets. For bitmap exports, this defaults to 2.
6855
+ */
6856
+ pixelRatio?: number;
6857
+ /**
6858
+ * Should the background color be included in the export? If false, the generated image will be
6859
+ * transparent (if exporting to a format that supports transparency).
6860
+ */
6861
+ background?: boolean;
6862
+ /**
6863
+ * How much padding to include around the bounds of exports? Defaults to 32px.
6864
+ */
6865
+ padding?: number;
6866
+ /**
6867
+ * Should the export be rendered in dark mode (true) or light mode (false)? Defaults to the
6868
+ * current instance's dark mode setting.
6869
+ */
6870
+ darkMode?: boolean;
6871
+ /**
6872
+ * The
6873
+ * {@link https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio | `preserveAspectRatio` }
6874
+ * attribute of the SVG element.
6875
+ */
6876
+ preserveAspectRatio?: React.SVGAttributes<SVGSVGElement>['preserveAspectRatio'];
6877
+ }
6878
+
6724
6879
  /**
6725
6880
  * @public
6726
6881
  * @deprecated use {@link TLImageExportOptions} instead
6727
6882
  */
6728
6883
  export declare type TLSvgOptions = TLImageExportOptions;
6729
6884
 
6885
+ /** @public */
6886
+ export declare interface TLSvgTextExternalContent extends TLBaseExternalContent {
6887
+ type: 'svg-text';
6888
+ text: string;
6889
+ }
6890
+
6891
+ /** @public */
6892
+ export declare interface TLTextExternalContent extends TLBaseExternalContent {
6893
+ type: 'text';
6894
+ text: string;
6895
+ }
6896
+
6897
+ /** @public */
6898
+ export declare interface TLTextExternalContentSource {
6899
+ type: 'text';
6900
+ data: string;
6901
+ subtype: 'html' | 'json' | 'text' | 'url';
6902
+ }
6903
+
6730
6904
  /** @public */
6731
6905
  export declare type TLTickEvent = (info: TLTickEventInfo) => void;
6732
6906
 
@@ -6744,6 +6918,24 @@ export declare interface TLTickEventInfo {
6744
6918
  */
6745
6919
  export declare const tltime: Timers;
6746
6920
 
6921
+ /** @public */
6922
+ export declare interface TLTldrawExternalContentSource {
6923
+ type: 'tldraw';
6924
+ data: TLContent;
6925
+ }
6926
+
6927
+ /** @public */
6928
+ export declare interface TLUrlExternalAsset {
6929
+ type: 'url';
6930
+ url: string;
6931
+ }
6932
+
6933
+ /** @public */
6934
+ export declare interface TLUrlExternalContent extends TLBaseExternalContent {
6935
+ type: 'url';
6936
+ url: string;
6937
+ }
6938
+
6747
6939
  /** @public */
6748
6940
  export declare interface TLUser {
6749
6941
  readonly userPreferences: Signal<TLUserPreferences>;
package/dist-cjs/index.js CHANGED
@@ -17,8 +17,8 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
19
19
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
- var src_exports = {};
21
- __export(src_exports, {
20
+ var index_exports = {};
21
+ __export(index_exports, {
22
22
  Arc2d: () => import_Arc2d.Arc2d,
23
23
  BaseBoxShapeTool: () => import_BaseBoxShapeTool.BaseBoxShapeTool,
24
24
  BaseBoxShapeUtil: () => import_BaseBoxShapeUtil.BaseBoxShapeUtil,
@@ -107,6 +107,7 @@ __export(src_exports, {
107
107
  centerOfCircleFromThreePoints: () => import_utils2.centerOfCircleFromThreePoints,
108
108
  clamp: () => import_utils2.clamp,
109
109
  clampRadians: () => import_utils2.clampRadians,
110
+ clampToBrowserMaxCanvasSize: () => import_browserCanvasMaxSize.clampToBrowserMaxCanvasSize,
110
111
  clockwiseAngleDist: () => import_utils2.clockwiseAngleDist,
111
112
  computed: () => import_state.computed,
112
113
  coreShapes: () => import_defaultShapes.coreShapes,
@@ -137,6 +138,7 @@ __export(src_exports, {
137
138
  getPolygonVertices: () => import_utils2.getPolygonVertices,
138
139
  getRotationSnapshot: () => import_rotation.getRotationSnapshot,
139
140
  getSnapshot: () => import_TLEditorSnapshot.getSnapshot,
141
+ getSvgAsImage: () => import_getSvgAsImage.getSvgAsImage,
140
142
  getSvgPathFromPoints: () => import_getSvgPathFromPoints.getSvgPathFromPoints,
141
143
  getUserPreferences: () => import_TLUserPreferences.getUserPreferences,
142
144
  hardReset: () => import_hardReset.hardReset,
@@ -173,6 +175,7 @@ __export(src_exports, {
173
175
  refreshPage: () => import_refreshPage.refreshPage,
174
176
  releasePointerCapture: () => import_dom.releasePointerCapture,
175
177
  resizeBox: () => import_resizeBox.resizeBox,
178
+ resizeScaled: () => import_resizeScaled.resizeScaled,
176
179
  rotateSelectionHandle: () => import_Box.rotateSelectionHandle,
177
180
  runtime: () => import_runtime.runtime,
178
181
  sanitizeId: () => import_useSafeId.sanitizeId,
@@ -230,7 +233,7 @@ __export(src_exports, {
230
233
  userTypeValidator: () => import_TLUserPreferences.userTypeValidator,
231
234
  whyAmIRunning: () => import_state.whyAmIRunning
232
235
  });
233
- module.exports = __toCommonJS(src_exports);
236
+ module.exports = __toCommonJS(index_exports);
234
237
  var import_utils = require("@tldraw/utils");
235
238
  var import_at = require("core-js/stable/array/at.js");
236
239
  var import_flat_map = require("core-js/stable/array/flat-map.js");
@@ -239,11 +242,12 @@ var import_at2 = require("core-js/stable/string/at.js");
239
242
  var import_replace_all = require("core-js/stable/string/replace-all.js");
240
243
  var import_state = require("@tldraw/state");
241
244
  var import_state_react = require("@tldraw/state-react");
245
+ var import_resizeScaled = require("./lib/editor/shapes/shared/resizeScaled");
242
246
  var import_LocalIndexedDb = require("./lib/utils/sync/LocalIndexedDb");
243
- __reExport(src_exports, require("@tldraw/store"), module.exports);
244
- __reExport(src_exports, require("@tldraw/tlschema"), module.exports);
245
- __reExport(src_exports, require("@tldraw/utils"), module.exports);
246
- __reExport(src_exports, require("@tldraw/validate"), module.exports);
247
+ __reExport(index_exports, require("@tldraw/store"), module.exports);
248
+ __reExport(index_exports, require("@tldraw/tlschema"), module.exports);
249
+ __reExport(index_exports, require("@tldraw/utils"), module.exports);
250
+ __reExport(index_exports, require("@tldraw/validate"), module.exports);
247
251
  var import_TldrawEditor = require("./lib/TldrawEditor");
248
252
  var import_ErrorBoundary = require("./lib/components/ErrorBoundary");
249
253
  var import_HTMLContainer = require("./lib/components/HTMLContainer");
@@ -294,6 +298,7 @@ var import_Pointing = require("./lib/editor/tools/BaseBoxShapeTool/children/Poin
294
298
  var import_StateNode = require("./lib/editor/tools/StateNode");
295
299
  var import_SvgExportContext = require("./lib/editor/types/SvgExportContext");
296
300
  var import_event_types = require("./lib/editor/types/event-types");
301
+ var import_getSvgAsImage = require("./lib/exports/getSvgAsImage");
297
302
  var import_environment = require("./lib/globals/environment");
298
303
  var import_menus = require("./lib/globals/menus");
299
304
  var import_time = require("./lib/globals/time");
@@ -339,6 +344,7 @@ var import_intersect = require("./lib/primitives/intersect");
339
344
  var import_utils2 = require("./lib/primitives/utils");
340
345
  var import_SharedStylesMap = require("./lib/utils/SharedStylesMap");
341
346
  var import_assets = require("./lib/utils/assets");
347
+ var import_browserCanvasMaxSize = require("./lib/utils/browserCanvasMaxSize");
342
348
  var import_debug_flags = require("./lib/utils/debug-flags");
343
349
  var import_deepLinks = require("./lib/utils/deepLinks");
344
350
  var import_dom = require("./lib/utils/dom");
@@ -359,7 +365,7 @@ function debugEnableLicensing() {
359
365
  }
360
366
  (0, import_utils.registerTldrawLibraryVersion)(
361
367
  "@tldraw/editor",
362
- "3.8.0-canary.80294e641ad6",
368
+ "3.8.0-canary.86aae29d7f4a",
363
369
  "cjs"
364
370
  );
365
371
  //# sourceMappingURL=index.js.map