@bigbluebutton/tldraw 2.0.0-alpha.19 → 2.0.0-alpha.20
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/index.d.ts +55 -50
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js +2 -2
- package/dist-cjs/lib/shapes/bookmark/BookmarkShapeUtil.js.map +1 -1
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js +3 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/Brushing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Idle.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js +3 -0
- package/dist-cjs/lib/tools/SelectTool/childStates/Resizing.js.map +2 -2
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js +7 -6
- package/dist-cjs/lib/tools/SelectTool/childStates/Translating.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useActions.js +13 -0
- package/dist-cjs/lib/ui/hooks/useActions.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useEventsProvider.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useMenuSchema.js +5 -0
- package/dist-cjs/lib/ui/hooks/useMenuSchema.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/usePreloadAssets.js +1 -0
- package/dist-cjs/lib/ui/hooks/usePreloadAssets.js.map +2 -2
- package/dist-cjs/lib/ui/hooks/useTranslation/TLUiTranslationKey.js.map +1 -1
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js +2 -0
- package/dist-cjs/lib/ui/hooks/useTranslation/defaultTranslation.js.map +2 -2
- package/dist-cjs/lib/utils/assets/assets.js +5 -1
- package/dist-cjs/lib/utils/assets/assets.js.map +2 -2
- package/dist-esm/index.d.mts +55 -50
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs +2 -2
- package/dist-esm/lib/shapes/bookmark/BookmarkShapeUtil.mjs.map +1 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs +4 -0
- package/dist-esm/lib/tools/SelectTool/childStates/Brushing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Idle.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs +5 -1
- package/dist-esm/lib/tools/SelectTool/childStates/Resizing.mjs.map +2 -2
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs +9 -7
- package/dist-esm/lib/tools/SelectTool/childStates/Translating.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useActions.mjs +13 -0
- package/dist-esm/lib/ui/hooks/useActions.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useEventsProvider.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useMenuSchema.mjs +5 -0
- package/dist-esm/lib/ui/hooks/useMenuSchema.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/usePreloadAssets.mjs +1 -0
- package/dist-esm/lib/ui/hooks/usePreloadAssets.mjs.map +2 -2
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs +2 -0
- package/dist-esm/lib/ui/hooks/useTranslation/defaultTranslation.mjs.map +2 -2
- package/dist-esm/lib/utils/assets/assets.mjs +5 -1
- package/dist-esm/lib/utils/assets/assets.mjs.map +2 -2
- package/package.json +3 -3
- package/src/lib/shapes/bookmark/BookmarkShapeUtil.tsx +2 -2
- package/src/lib/shapes/line/LineShapeUtil.test.ts +1 -1
- package/src/lib/tools/SelectTool/childStates/Brushing.ts +6 -0
- package/src/lib/tools/SelectTool/childStates/Idle.ts +6 -2
- package/src/lib/tools/SelectTool/childStates/Resizing.ts +6 -0
- package/src/lib/tools/SelectTool/childStates/Translating.ts +10 -7
- package/src/lib/ui/hooks/useActions.tsx +13 -0
- package/src/lib/ui/hooks/useEventsProvider.tsx +1 -0
- package/src/lib/ui/hooks/useMenuSchema.tsx +5 -0
- package/src/lib/ui/hooks/usePreloadAssets.ts +1 -0
- package/src/lib/ui/hooks/useTranslation/TLUiTranslationKey.ts +2 -0
- package/src/lib/ui/hooks/useTranslation/defaultTranslation.ts +2 -0
- package/src/lib/utils/assets/assets.ts +5 -1
- package/src/test/TLUserPreferences.test.ts +4 -1
- package/src/test/TestEditor.ts +3 -0
- package/src/test/resizing.test.ts +22 -0
- package/src/test/selection-omnibus.test.ts +93 -0
- package/src/test/translating.test.ts +35 -0
package/dist-cjs/index.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ import { EnumStyleProp } from '@bigbluebutton/editor';
|
|
|
14
14
|
import { Geometry2d } from '@bigbluebutton/editor';
|
|
15
15
|
import { Group2d } from '@bigbluebutton/editor';
|
|
16
16
|
import { JsonObject } from '@bigbluebutton/editor';
|
|
17
|
+
import { JSX as JSX_2 } from 'react/jsx-runtime';
|
|
17
18
|
import { LANGUAGES } from '@bigbluebutton/editor';
|
|
18
19
|
import { Matrix2d } from '@bigbluebutton/editor';
|
|
19
20
|
import { Matrix2dModel } from '@bigbluebutton/editor';
|
|
@@ -95,6 +96,7 @@ import { TLStore } from '@bigbluebutton/editor';
|
|
|
95
96
|
import { TLStoreWithStatus } from '@bigbluebutton/editor';
|
|
96
97
|
import { TLSvgOptions } from '@bigbluebutton/editor';
|
|
97
98
|
import { TLTextShape } from '@bigbluebutton/editor';
|
|
99
|
+
import { TLTickEventHandler } from '@bigbluebutton/editor';
|
|
98
100
|
import { TLUnknownShape } from '@bigbluebutton/editor';
|
|
99
101
|
import { TLVideoShape } from '@bigbluebutton/editor';
|
|
100
102
|
import { UnionValidator } from '@bigbluebutton/editor';
|
|
@@ -217,8 +219,8 @@ export declare class ArrowShapeUtil extends ShapeUtil<TLArrowShape> {
|
|
|
217
219
|
onTranslateStart: TLOnTranslateStartHandler<TLArrowShape>;
|
|
218
220
|
onResize: TLOnResizeHandler<TLArrowShape>;
|
|
219
221
|
onDoubleClickHandle: (shape: TLArrowShape, handle: TLHandle) => TLShapePartial<TLArrowShape> | void;
|
|
220
|
-
component(shape: TLArrowShape):
|
|
221
|
-
indicator(shape: TLArrowShape):
|
|
222
|
+
component(shape: TLArrowShape): JSX_2.Element | null;
|
|
223
|
+
indicator(shape: TLArrowShape): JSX_2.Element | null;
|
|
222
224
|
onEditEnd: TLOnEditEndHandler<TLArrowShape>;
|
|
223
225
|
toSvg(shape: TLArrowShape, ctx: SvgExportContext): SVGGElement;
|
|
224
226
|
getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[];
|
|
@@ -231,7 +233,7 @@ declare function Body_2({ className, children, style, }: {
|
|
|
231
233
|
className?: string;
|
|
232
234
|
children: any;
|
|
233
235
|
style?: React.CSSProperties;
|
|
234
|
-
}):
|
|
236
|
+
}): JSX_2.Element;
|
|
235
237
|
|
|
236
238
|
/** @public */
|
|
237
239
|
export declare class BookmarkShapeUtil extends BaseBoxShapeUtil<TLBookmarkShape> {
|
|
@@ -246,8 +248,8 @@ export declare class BookmarkShapeUtil extends BaseBoxShapeUtil<TLBookmarkShape>
|
|
|
246
248
|
canResize: () => boolean;
|
|
247
249
|
hideSelectionBoundsFg: () => boolean;
|
|
248
250
|
getDefaultProps(): TLBookmarkShape['props'];
|
|
249
|
-
component(shape: TLBookmarkShape):
|
|
250
|
-
indicator(shape: TLBookmarkShape):
|
|
251
|
+
component(shape: TLBookmarkShape): JSX_2.Element;
|
|
252
|
+
indicator(shape: TLBookmarkShape): JSX_2.Element;
|
|
251
253
|
onBeforeCreate?: TLOnBeforeCreateHandler<TLBookmarkShape>;
|
|
252
254
|
onBeforeUpdate?: TLOnBeforeUpdateHandler<TLBookmarkShape>;
|
|
253
255
|
}
|
|
@@ -261,7 +263,7 @@ declare type BoxWidthHeight = {
|
|
|
261
263
|
export declare function BreakPointProvider({ forceMobile, children, }: {
|
|
262
264
|
forceMobile?: boolean;
|
|
263
265
|
children: any;
|
|
264
|
-
}):
|
|
266
|
+
}): JSX_2.Element;
|
|
265
267
|
|
|
266
268
|
declare class Brushing extends StateNode {
|
|
267
269
|
static id: string;
|
|
@@ -286,6 +288,7 @@ declare class Brushing extends StateNode {
|
|
|
286
288
|
target: 'canvas';
|
|
287
289
|
}) => void;
|
|
288
290
|
onExit: () => void;
|
|
291
|
+
onTick: TLTickEventHandler;
|
|
289
292
|
onPointerMove: () => void;
|
|
290
293
|
onPointerUp: TLEventHandlers['onPointerUp'];
|
|
291
294
|
onComplete: TLEventHandlers['onComplete'];
|
|
@@ -304,10 +307,10 @@ declare class Brushing extends StateNode {
|
|
|
304
307
|
export declare const Button: React_3.ForwardRefExoticComponent<TLUiButtonProps & React_3.RefAttributes<HTMLButtonElement>>;
|
|
305
308
|
|
|
306
309
|
/** @public */
|
|
307
|
-
declare function CheckboxItem({ children, onSelect, ...rest }: DropdownMenuCheckboxItemProps):
|
|
310
|
+
declare function CheckboxItem({ children, onSelect, ...rest }: DropdownMenuCheckboxItemProps): JSX_2.Element;
|
|
308
311
|
|
|
309
312
|
/** @public */
|
|
310
|
-
declare function CloseButton():
|
|
313
|
+
declare function CloseButton(): JSX_2.Element;
|
|
311
314
|
|
|
312
315
|
declare enum ColorStyle {
|
|
313
316
|
White = "white",
|
|
@@ -344,12 +347,12 @@ declare function Content({ side, align, sideOffset, alignOffset, children, }: {
|
|
|
344
347
|
sideOffset?: number;
|
|
345
348
|
align?: 'center' | 'end' | 'start';
|
|
346
349
|
side?: 'bottom' | 'left' | 'right' | 'top';
|
|
347
|
-
}):
|
|
350
|
+
}): JSX_2.Element;
|
|
348
351
|
|
|
349
352
|
/** @public */
|
|
350
353
|
export declare const ContextMenu: ({ children }: {
|
|
351
354
|
children: any;
|
|
352
|
-
}) =>
|
|
355
|
+
}) => JSX_2.Element;
|
|
353
356
|
|
|
354
357
|
/**
|
|
355
358
|
* Copy the given shapes to the clipboard.
|
|
@@ -585,8 +588,8 @@ export declare class DrawShapeUtil extends ShapeUtil<TLDrawShape> {
|
|
|
585
588
|
hideSelectionBoundsFg: (shape: TLDrawShape) => boolean;
|
|
586
589
|
getDefaultProps(): TLDrawShape['props'];
|
|
587
590
|
getGeometry(shape: TLDrawShape): Circle2d | Polyline2d;
|
|
588
|
-
component(shape: TLDrawShape):
|
|
589
|
-
indicator(shape: TLDrawShape):
|
|
591
|
+
component(shape: TLDrawShape): JSX_2.Element;
|
|
592
|
+
indicator(shape: TLDrawShape): JSX_2.Element;
|
|
590
593
|
toSvg(shape: TLDrawShape, ctx: SvgExportContext): SVGGElement;
|
|
591
594
|
getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[];
|
|
592
595
|
onResize: TLOnResizeHandler<TLDrawShape>;
|
|
@@ -660,8 +663,8 @@ export declare class EmbedShapeUtil extends BaseBoxShapeUtil<TLEmbedShape> {
|
|
|
660
663
|
getDefaultProps(): TLEmbedShape['props'];
|
|
661
664
|
isAspectRatioLocked: TLShapeUtilFlag<TLEmbedShape>;
|
|
662
665
|
onResize: TLOnResizeHandler<TLEmbedShape>;
|
|
663
|
-
component(shape: TLEmbedShape):
|
|
664
|
-
indicator(shape: TLEmbedShape):
|
|
666
|
+
component(shape: TLEmbedShape): JSX_2.Element;
|
|
667
|
+
indicator(shape: TLEmbedShape): JSX_2.Element;
|
|
665
668
|
}
|
|
666
669
|
|
|
667
670
|
/** @public */
|
|
@@ -735,7 +738,7 @@ declare enum FontStyle {
|
|
|
735
738
|
declare function Footer({ className, children }: {
|
|
736
739
|
className?: string;
|
|
737
740
|
children: any;
|
|
738
|
-
}):
|
|
741
|
+
}): JSX_2.Element;
|
|
739
742
|
|
|
740
743
|
/** @public */
|
|
741
744
|
export declare class FrameShapeTool extends BaseBoxShapeTool {
|
|
@@ -758,9 +761,9 @@ export declare class FrameShapeUtil extends BaseBoxShapeUtil<TLFrameShape> {
|
|
|
758
761
|
canEdit: () => boolean;
|
|
759
762
|
getDefaultProps(): TLFrameShape['props'];
|
|
760
763
|
getGeometry(shape: TLFrameShape): Geometry2d;
|
|
761
|
-
component(shape: TLFrameShape):
|
|
764
|
+
component(shape: TLFrameShape): JSX_2.Element;
|
|
762
765
|
toSvg(shape: TLFrameShape): Promise<SVGElement> | SVGElement;
|
|
763
|
-
indicator(shape: TLFrameShape):
|
|
766
|
+
indicator(shape: TLFrameShape): JSX_2.Element;
|
|
764
767
|
canReceiveNewChildrenOfType: (shape: TLShape, _type: TLShape['type']) => boolean;
|
|
765
768
|
providesBackgroundForChildren(): boolean;
|
|
766
769
|
canDropShapes: (shape: TLFrameShape, _shapes: TLShape[]) => boolean;
|
|
@@ -804,8 +807,8 @@ export declare class GeoShapeUtil extends BaseBoxShapeUtil<TLGeoShape> {
|
|
|
804
807
|
getDefaultProps(): TLGeoShape['props'];
|
|
805
808
|
getGeometry(shape: TLGeoShape): Geometry2d;
|
|
806
809
|
onEditEnd: TLOnEditEndHandler<TLGeoShape>;
|
|
807
|
-
component(shape: TLGeoShape):
|
|
808
|
-
indicator(shape: TLGeoShape):
|
|
810
|
+
component(shape: TLGeoShape): JSX_2.Element;
|
|
811
|
+
indicator(shape: TLGeoShape): JSX_2.Element;
|
|
809
812
|
toSvg(shape: TLGeoShape, ctx: SvgExportContext): SVGElement;
|
|
810
813
|
getCanvasSvgDefs(): TLShapeUtilCanvasSvgDef[];
|
|
811
814
|
onResize: TLOnResizeHandler<TLGeoShape>;
|
|
@@ -948,7 +951,7 @@ declare function getTranslatingSnapshot(editor: Editor): {
|
|
|
948
951
|
declare function Group({ children, size, }: {
|
|
949
952
|
children: any;
|
|
950
953
|
size?: 'medium' | 'small' | 'tiny' | 'wide';
|
|
951
|
-
}):
|
|
954
|
+
}): JSX_2.Element;
|
|
952
955
|
|
|
953
956
|
declare interface GroupShape extends TDBaseShape {
|
|
954
957
|
type: TDShapeType.Group;
|
|
@@ -970,7 +973,7 @@ export declare class HandTool extends StateNode {
|
|
|
970
973
|
declare function Header({ className, children }: {
|
|
971
974
|
className?: string;
|
|
972
975
|
children: any;
|
|
973
|
-
}):
|
|
976
|
+
}): JSX_2.Element;
|
|
974
977
|
|
|
975
978
|
/** @public */
|
|
976
979
|
export declare class HighlightShapeTool extends StateNode {
|
|
@@ -1000,9 +1003,9 @@ export declare class HighlightShapeUtil extends ShapeUtil<TLHighlightShape> {
|
|
|
1000
1003
|
hideSelectionBoundsFg: (shape: TLHighlightShape) => boolean;
|
|
1001
1004
|
getDefaultProps(): TLHighlightShape['props'];
|
|
1002
1005
|
getGeometry(shape: TLHighlightShape): Circle2d | Polygon2d;
|
|
1003
|
-
component(shape: TLHighlightShape):
|
|
1004
|
-
backgroundComponent(shape: TLHighlightShape):
|
|
1005
|
-
indicator(shape: TLHighlightShape):
|
|
1006
|
+
component(shape: TLHighlightShape): JSX_2.Element;
|
|
1007
|
+
backgroundComponent(shape: TLHighlightShape): JSX_2.Element;
|
|
1008
|
+
indicator(shape: TLHighlightShape): JSX_2.Element;
|
|
1006
1009
|
toSvg(shape: TLHighlightShape): SVGPathElement;
|
|
1007
1010
|
toBackgroundSvg(shape: TLHighlightShape): SVGPathElement;
|
|
1008
1011
|
onResize: TLOnResizeHandler<TLHighlightShape>;
|
|
@@ -1147,15 +1150,15 @@ export declare class ImageShapeUtil extends BaseBoxShapeUtil<TLImageShape> {
|
|
|
1147
1150
|
isAspectRatioLocked: () => boolean;
|
|
1148
1151
|
canCrop: () => boolean;
|
|
1149
1152
|
getDefaultProps(): TLImageShape['props'];
|
|
1150
|
-
component(shape: TLImageShape):
|
|
1151
|
-
indicator(shape: TLImageShape):
|
|
1153
|
+
component(shape: TLImageShape): JSX_2.Element;
|
|
1154
|
+
indicator(shape: TLImageShape): JSX_2.Element | null;
|
|
1152
1155
|
toSvg(shape: TLImageShape): Promise<SVGGElement>;
|
|
1153
1156
|
onDoubleClick: (shape: TLImageShape) => void;
|
|
1154
1157
|
onDoubleClickEdge: TLOnDoubleClickHandler<TLImageShape>;
|
|
1155
1158
|
}
|
|
1156
1159
|
|
|
1157
1160
|
/** @public */
|
|
1158
|
-
declare function Indicator():
|
|
1161
|
+
declare function Indicator(): JSX_2.Element;
|
|
1159
1162
|
|
|
1160
1163
|
/** @public */
|
|
1161
1164
|
export declare const Input: React_3.ForwardRefExoticComponent<TLUiInputProps & React_3.RefAttributes<HTMLInputElement>>;
|
|
@@ -1164,7 +1167,7 @@ export declare const Input: React_3.ForwardRefExoticComponent<TLUiInputProps & R
|
|
|
1164
1167
|
export declare function isGifAnimated(file: File): Promise<boolean>;
|
|
1165
1168
|
|
|
1166
1169
|
/** @public */
|
|
1167
|
-
declare function Item({ noClose, ...props }: DropdownMenuItemProps):
|
|
1170
|
+
declare function Item({ noClose, ...props }: DropdownMenuItemProps): JSX_2.Element;
|
|
1168
1171
|
|
|
1169
1172
|
declare type Join<T, K> = K extends null ? {
|
|
1170
1173
|
[R in keyof T]: T[R];
|
|
@@ -1227,8 +1230,8 @@ export declare class LineShapeUtil extends ShapeUtil<TLLineShape> {
|
|
|
1227
1230
|
getOutlineSegments(shape: TLLineShape): Vec2d[][];
|
|
1228
1231
|
onResize: TLOnResizeHandler<TLLineShape>;
|
|
1229
1232
|
onHandleChange: TLOnHandleChangeHandler<TLLineShape>;
|
|
1230
|
-
component(shape: TLLineShape):
|
|
1231
|
-
indicator(shape: TLLineShape):
|
|
1233
|
+
component(shape: TLLineShape): JSX_2.Element | undefined;
|
|
1234
|
+
indicator(shape: TLLineShape): JSX_2.Element;
|
|
1232
1235
|
toSvg(shape: TLLineShape): SVGGElement;
|
|
1233
1236
|
}
|
|
1234
1237
|
|
|
@@ -1289,8 +1292,8 @@ export declare class NoteShapeUtil extends ShapeUtil<TLNoteShape> {
|
|
|
1289
1292
|
getDefaultProps(): TLNoteShape['props'];
|
|
1290
1293
|
getHeight(shape: TLNoteShape): number;
|
|
1291
1294
|
getGeometry(shape: TLNoteShape): Rectangle2d;
|
|
1292
|
-
component(shape: TLNoteShape):
|
|
1293
|
-
indicator(shape: TLNoteShape):
|
|
1295
|
+
component(shape: TLNoteShape): JSX_2.Element;
|
|
1296
|
+
indicator(shape: TLNoteShape): JSX_2.Element;
|
|
1294
1297
|
toSvg(shape: TLNoteShape, ctx: SvgExportContext): SVGGElement;
|
|
1295
1298
|
onBeforeCreate: (next: TLNoteShape) => {
|
|
1296
1299
|
props: {
|
|
@@ -1342,7 +1345,7 @@ export declare class NoteShapeUtil extends ShapeUtil<TLNoteShape> {
|
|
|
1342
1345
|
}
|
|
1343
1346
|
|
|
1344
1347
|
/** @public */
|
|
1345
|
-
export declare function OfflineIndicator():
|
|
1348
|
+
export declare function OfflineIndicator(): JSX_2.Element;
|
|
1346
1349
|
|
|
1347
1350
|
/* Excluded from this release type: parseAndLoadDocument */
|
|
1348
1351
|
|
|
@@ -1615,7 +1618,7 @@ declare class PointingShape extends StateNode {
|
|
|
1615
1618
|
}
|
|
1616
1619
|
|
|
1617
1620
|
/** @public */
|
|
1618
|
-
declare function RadioItem({ children, onSelect, ...rest }: DropdownMenuCheckboxItemProps):
|
|
1621
|
+
declare function RadioItem({ children, onSelect, ...rest }: DropdownMenuCheckboxItemProps): JSX_2.Element;
|
|
1619
1622
|
|
|
1620
1623
|
declare interface RectangleShape extends TDBaseShape {
|
|
1621
1624
|
type: TDShapeType.Rectangle;
|
|
@@ -1660,6 +1663,7 @@ declare class Resizing extends StateNode {
|
|
|
1660
1663
|
creationCursorOffset: VecLike;
|
|
1661
1664
|
private snapshot;
|
|
1662
1665
|
onEnter: TLEnterEventHandler;
|
|
1666
|
+
onTick: TLTickEventHandler;
|
|
1663
1667
|
onPointerMove: TLEventHandlers['onPointerMove'];
|
|
1664
1668
|
onKeyDown: TLEventHandlers['onKeyDown'];
|
|
1665
1669
|
onKeyUp: TLEventHandlers['onKeyUp'];
|
|
@@ -1707,7 +1711,7 @@ declare function Root({ id, children, modal, debugOpen, }: {
|
|
|
1707
1711
|
children: any;
|
|
1708
1712
|
modal?: boolean;
|
|
1709
1713
|
debugOpen?: boolean;
|
|
1710
|
-
}):
|
|
1714
|
+
}): JSX_2.Element;
|
|
1711
1715
|
|
|
1712
1716
|
declare class Rotating extends StateNode {
|
|
1713
1717
|
static id: string;
|
|
@@ -1815,21 +1819,21 @@ declare interface StickyShape extends TDBaseShape {
|
|
|
1815
1819
|
declare function Sub({ id, children }: {
|
|
1816
1820
|
id: string;
|
|
1817
1821
|
children: any;
|
|
1818
|
-
}):
|
|
1822
|
+
}): JSX_2.Element;
|
|
1819
1823
|
|
|
1820
1824
|
/** @public */
|
|
1821
1825
|
declare function SubContent({ alignOffset, sideOffset, children, }: {
|
|
1822
1826
|
alignOffset?: number;
|
|
1823
1827
|
sideOffset?: number;
|
|
1824
1828
|
children: any;
|
|
1825
|
-
}):
|
|
1829
|
+
}): JSX_2.Element;
|
|
1826
1830
|
|
|
1827
1831
|
/** @public */
|
|
1828
1832
|
declare function SubTrigger({ label, 'data-testid': testId, 'data-direction': dataDirection, }: {
|
|
1829
1833
|
label: Exclude<string, TLUiTranslationKey> | TLUiTranslationKey;
|
|
1830
1834
|
'data-testid'?: string;
|
|
1831
1835
|
'data-direction'?: 'left' | 'right';
|
|
1832
|
-
}):
|
|
1836
|
+
}): JSX_2.Element;
|
|
1833
1837
|
|
|
1834
1838
|
declare type TDAsset = TDImageAsset | TDVideoAsset;
|
|
1835
1839
|
|
|
@@ -1926,8 +1930,8 @@ export declare class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
1926
1930
|
getGeometry(shape: TLTextShape): Rectangle2d;
|
|
1927
1931
|
canEdit: () => boolean;
|
|
1928
1932
|
isAspectRatioLocked: TLShapeUtilFlag<TLTextShape>;
|
|
1929
|
-
component(shape: TLTextShape):
|
|
1930
|
-
indicator(shape: TLTextShape):
|
|
1933
|
+
component(shape: TLTextShape): JSX_2.Element;
|
|
1934
|
+
indicator(shape: TLTextShape): JSX_2.Element | null;
|
|
1931
1935
|
toSvg(shape: TLTextShape, ctx: SvgExportContext): SVGGElement;
|
|
1932
1936
|
onResize: TLOnResizeHandler<TLTextShape>;
|
|
1933
1937
|
onBeforeCreate: (shape: TLTextShape) => {
|
|
@@ -1998,19 +2002,19 @@ export declare class TextShapeUtil extends ShapeUtil<TLTextShape> {
|
|
|
1998
2002
|
declare function Title({ className, children }: {
|
|
1999
2003
|
className?: string;
|
|
2000
2004
|
children: any;
|
|
2001
|
-
}):
|
|
2005
|
+
}): JSX_2.Element;
|
|
2002
2006
|
|
|
2003
2007
|
/** @public */
|
|
2004
2008
|
declare type TLCopyType = 'jpeg' | 'json' | 'png' | 'svg';
|
|
2005
2009
|
|
|
2006
2010
|
/** @public */
|
|
2007
|
-
export declare function Tldraw(props: TldrawProps):
|
|
2011
|
+
export declare function Tldraw(props: TldrawProps): JSX_2.Element;
|
|
2008
2012
|
|
|
2009
2013
|
/** @public */
|
|
2010
2014
|
export declare const TLDRAW_FILE_EXTENSION: ".tldr";
|
|
2011
2015
|
|
|
2012
2016
|
/** @public */
|
|
2013
|
-
export declare function TldrawCropHandles({ size, width, height, hideAlternateHandles, }: TldrawCropHandlesProps):
|
|
2017
|
+
export declare function TldrawCropHandles({ size, width, height, hideAlternateHandles, }: TldrawCropHandlesProps): JSX_2.Element;
|
|
2014
2018
|
|
|
2015
2019
|
/** @public */
|
|
2016
2020
|
export declare interface TldrawCropHandlesProps {
|
|
@@ -2107,7 +2111,7 @@ export declare interface TldrawUiBaseProps {
|
|
|
2107
2111
|
}
|
|
2108
2112
|
|
|
2109
2113
|
/** @public */
|
|
2110
|
-
export declare function TldrawUiContextProvider({ overrides, assetUrls, onUiEvent, forceMobile, children, }: TldrawUiContextProviderProps):
|
|
2114
|
+
export declare function TldrawUiContextProvider({ overrides, assetUrls, onUiEvent, forceMobile, children, }: TldrawUiContextProviderProps): JSX_2.Element;
|
|
2111
2115
|
|
|
2112
2116
|
/**
|
|
2113
2117
|
* Props for the {@link @bigbluebutton/tldraw#Tldraw} and {@link TldrawUi} components.
|
|
@@ -2362,6 +2366,7 @@ export declare interface TLUiEventMap {
|
|
|
2362
2366
|
'toggle-debug-mode': null;
|
|
2363
2367
|
'toggle-lock': null;
|
|
2364
2368
|
'toggle-reduce-motion': null;
|
|
2369
|
+
'toggle-edge-scrolling': null;
|
|
2365
2370
|
'exit-pen-mode': null;
|
|
2366
2371
|
'stop-following': null;
|
|
2367
2372
|
'open-cursor-chat': null;
|
|
@@ -2590,7 +2595,7 @@ export declare type TLUiTranslation = {
|
|
|
2590
2595
|
export declare type TLUiTranslationContextType = TLUiTranslation;
|
|
2591
2596
|
|
|
2592
2597
|
/** @public */
|
|
2593
|
-
export declare type TLUiTranslationKey = 'action.align-bottom' | 'action.align-center-horizontal.short' | 'action.align-center-horizontal' | 'action.align-center-vertical.short' | 'action.align-center-vertical' | 'action.align-left' | 'action.align-right' | 'action.align-top' | 'action.back-to-content' | 'action.bring-forward' | 'action.bring-to-front' | 'action.convert-to-bookmark' | 'action.convert-to-embed' | 'action.copy-as-json.short' | 'action.copy-as-json' | 'action.copy-as-png.short' | 'action.copy-as-png' | 'action.copy-as-svg.short' | 'action.copy-as-svg' | 'action.copy' | 'action.cut' | 'action.delete' | 'action.distribute-horizontal.short' | 'action.distribute-horizontal' | 'action.distribute-vertical.short' | 'action.distribute-vertical' | 'action.duplicate' | 'action.edit-link' | 'action.exit-pen-mode' | 'action.export-as-json.short' | 'action.export-as-json' | 'action.export-as-png.short' | 'action.export-as-png' | 'action.export-as-svg.short' | 'action.export-as-svg' | 'action.fit-frame-to-content' | 'action.flip-horizontal.short' | 'action.flip-horizontal' | 'action.flip-vertical.short' | 'action.flip-vertical' | 'action.fork-project' | 'action.group' | 'action.insert-embed' | 'action.insert-media' | 'action.leave-shared-project' | 'action.new-project' | 'action.new-shared-project' | 'action.open-cursor-chat' | 'action.open-embed-link' | 'action.open-file' | 'action.pack' | 'action.paste' | 'action.print' | 'action.redo' | 'action.remove-frame' | 'action.rotate-ccw' | 'action.rotate-cw' | 'action.save-copy' | 'action.select-all' | 'action.select-none' | 'action.send-backward' | 'action.send-to-back' | 'action.share-project' | 'action.stack-horizontal.short' | 'action.stack-horizontal' | 'action.stack-vertical.short' | 'action.stack-vertical' | 'action.stop-following' | 'action.stretch-horizontal.short' | 'action.stretch-horizontal' | 'action.stretch-vertical.short' | 'action.stretch-vertical' | 'action.toggle-auto-size' | 'action.toggle-dark-mode.menu' | 'action.toggle-dark-mode' | 'action.toggle-debug-mode.menu' | 'action.toggle-debug-mode' | 'action.toggle-focus-mode.menu' | 'action.toggle-focus-mode' | 'action.toggle-grid.menu' | 'action.toggle-grid' | 'action.toggle-lock' | 'action.toggle-reduce-motion.menu' | 'action.toggle-reduce-motion' | 'action.toggle-snap-mode.menu' | 'action.toggle-snap-mode' | 'action.toggle-tool-lock.menu' | 'action.toggle-tool-lock' | 'action.toggle-transparent.context-menu' | 'action.toggle-transparent.menu' | 'action.toggle-transparent' | 'action.undo' | 'action.ungroup' | 'action.unlock-all' | 'action.zoom-in' | 'action.zoom-out' | 'action.zoom-to-100' | 'action.zoom-to-fit' | 'action.zoom-to-selection' | 'actions-menu.title' | 'align-style.end' | 'align-style.justify' | 'align-style.middle' | 'align-style.start' | 'arrowheadEnd-style.arrow' | 'arrowheadEnd-style.bar' | 'arrowheadEnd-style.diamond' | 'arrowheadEnd-style.dot' | 'arrowheadEnd-style.inverted' | 'arrowheadEnd-style.none' | 'arrowheadEnd-style.pipe' | 'arrowheadEnd-style.square' | 'arrowheadEnd-style.triangle' | 'arrowheadStart-style.arrow' | 'arrowheadStart-style.bar' | 'arrowheadStart-style.diamond' | 'arrowheadStart-style.dot' | 'arrowheadStart-style.inverted' | 'arrowheadStart-style.none' | 'arrowheadStart-style.pipe' | 'arrowheadStart-style.square' | 'arrowheadStart-style.triangle' | 'color-style.black' | 'color-style.blue' | 'color-style.green' | 'color-style.grey' | 'color-style.light-blue' | 'color-style.light-green' | 'color-style.light-red' | 'color-style.light-violet' | 'color-style.orange' | 'color-style.red' | 'color-style.violet' | 'color-style.yellow' | 'context-menu.arrange' | 'context-menu.copy-as' | 'context-menu.export-as' | 'context-menu.move-to-page' | 'context-menu.reorder' | 'context.pages.new-page' | 'cursor-chat.type-to-chat' | 'dash-style.dashed' | 'dash-style.dotted' | 'dash-style.draw' | 'dash-style.solid' | 'debug-panel.more' | 'edit-link-dialog.cancel' | 'edit-link-dialog.clear' | 'edit-link-dialog.detail' | 'edit-link-dialog.invalid-url' | 'edit-link-dialog.save' | 'edit-link-dialog.title' | 'edit-link-dialog.url' | 'edit-pages-dialog.move-down' | 'edit-pages-dialog.move-up' | 'embed-dialog.back' | 'embed-dialog.cancel' | 'embed-dialog.create' | 'embed-dialog.instruction' | 'embed-dialog.invalid-url' | 'embed-dialog.title' | 'embed-dialog.url' | 'file-system.confirm-clear.cancel' | 'file-system.confirm-clear.continue' | 'file-system.confirm-clear.description' | 'file-system.confirm-clear.dont-show-again' | 'file-system.confirm-clear.title' | 'file-system.confirm-open.cancel' | 'file-system.confirm-open.description' | 'file-system.confirm-open.dont-show-again' | 'file-system.confirm-open.open' | 'file-system.confirm-open.title' | 'file-system.file-open-error.file-format-version-too-new' | 'file-system.file-open-error.generic-corrupted-file' | 'file-system.file-open-error.not-a-tldraw-file' | 'file-system.file-open-error.title' | 'file-system.shared-document-file-open-error.description' | 'file-system.shared-document-file-open-error.title' | 'fill-style.none' | 'fill-style.pattern' | 'fill-style.semi' | 'fill-style.solid' | 'focus-mode.toggle-focus-mode' | 'font-style.draw' | 'font-style.mono' | 'font-style.sans' | 'font-style.serif' | 'geo-style.arrow-down' | 'geo-style.arrow-left' | 'geo-style.arrow-right' | 'geo-style.arrow-up' | 'geo-style.check-box' | 'geo-style.cloud' | 'geo-style.diamond' | 'geo-style.ellipse' | 'geo-style.hexagon' | 'geo-style.octagon' | 'geo-style.oval' | 'geo-style.pentagon' | 'geo-style.rectangle' | 'geo-style.rhombus-2' | 'geo-style.rhombus' | 'geo-style.star' | 'geo-style.trapezoid' | 'geo-style.triangle' | 'geo-style.x-box' | 'help-menu.about' | 'help-menu.discord' | 'help-menu.github' | 'help-menu.keyboard-shortcuts' | 'help-menu.title' | 'help-menu.twitter' | 'home-project-dialog.description' | 'home-project-dialog.ok' | 'home-project-dialog.title' | 'menu.copy-as' | 'menu.edit' | 'menu.export-as' | 'menu.file' | 'menu.language' | 'menu.preferences' | 'menu.title' | 'menu.view' | 'navigation-zone.toggle-minimap' | 'navigation-zone.zoom' | 'opacity-style.0.1' | 'opacity-style.0.25' | 'opacity-style.0.5' | 'opacity-style.0.75' | 'opacity-style.1' | 'page-menu.create-new-page' | 'page-menu.edit-done' | 'page-menu.edit-start' | 'page-menu.go-to-page' | 'page-menu.max-page-count-reached' | 'page-menu.new-page-initial-name' | 'page-menu.submenu.delete' | 'page-menu.submenu.duplicate-page' | 'page-menu.submenu.move-down' | 'page-menu.submenu.move-up' | 'page-menu.submenu.rename' | 'page-menu.submenu.title' | 'page-menu.title' | 'people-menu.change-color' | 'people-menu.change-name' | 'people-menu.follow' | 'people-menu.following' | 'people-menu.invite' | 'people-menu.leading' | 'people-menu.title' | 'people-menu.user' | 'rename-project-dialog.cancel' | 'rename-project-dialog.rename' | 'rename-project-dialog.title' | 'share-menu.copy-link-note' | 'share-menu.copy-link' | 'share-menu.copy-readonly-link-note' | 'share-menu.copy-readonly-link' | 'share-menu.create-snapshot-link' | 'share-menu.default-project-name' | 'share-menu.fork-note' | 'share-menu.offline-note' | 'share-menu.project-too-large' | 'share-menu.readonly-link' | 'share-menu.save-note' | 'share-menu.share-project' | 'share-menu.snapshot-link-note' | 'share-menu.title' | 'share-menu.upload-failed' | 'sharing.confirm-leave.cancel' | 'sharing.confirm-leave.description' | 'sharing.confirm-leave.dont-show-again' | 'sharing.confirm-leave.leave' | 'sharing.confirm-leave.title' | 'shortcuts-dialog.collaboration' | 'shortcuts-dialog.edit' | 'shortcuts-dialog.file' | 'shortcuts-dialog.preferences' | 'shortcuts-dialog.title' | 'shortcuts-dialog.tools' | 'shortcuts-dialog.transform' | 'shortcuts-dialog.view' | 'size-style.l' | 'size-style.m' | 'size-style.s' | 'size-style.xl' | 'spline-style.cubic' | 'spline-style.line' | 'status.offline' | 'status.online' | 'style-panel.align' | 'style-panel.arrowhead-end' | 'style-panel.arrowhead-start' | 'style-panel.arrowheads' | 'style-panel.color' | 'style-panel.dash' | 'style-panel.fill' | 'style-panel.font' | 'style-panel.geo' | 'style-panel.mixed' | 'style-panel.opacity' | 'style-panel.position' | 'style-panel.size' | 'style-panel.spline' | 'style-panel.title' | 'style-panel.vertical-align' | 'toast.close' | 'toast.error.copy-fail.desc' | 'toast.error.copy-fail.title' | 'toast.error.export-fail.desc' | 'toast.error.export-fail.title' | 'tool-panel.drawing' | 'tool-panel.more' | 'tool-panel.shapes' | 'tool.arrow-down' | 'tool.arrow-left' | 'tool.arrow-right' | 'tool.arrow-up' | 'tool.arrow' | 'tool.asset' | 'tool.check-box' | 'tool.cloud' | 'tool.diamond' | 'tool.draw' | 'tool.ellipse' | 'tool.embed' | 'tool.eraser' | 'tool.frame' | 'tool.hand' | 'tool.hexagon' | 'tool.highlight' | 'tool.laser' | 'tool.line' | 'tool.note' | 'tool.octagon' | 'tool.oval' | 'tool.pentagon' | 'tool.rectangle' | 'tool.rhombus' | 'tool.select' | 'tool.star' | 'tool.text' | 'tool.trapezoid' | 'tool.triangle' | 'tool.x-box' | 'vscode.file-open.backup-failed' | 'vscode.file-open.backup-saved' | 'vscode.file-open.backup' | 'vscode.file-open.desc' | 'vscode.file-open.dont-show-again' | 'vscode.file-open.open';
|
|
2598
|
+
export declare type TLUiTranslationKey = 'action.align-bottom' | 'action.align-center-horizontal.short' | 'action.align-center-horizontal' | 'action.align-center-vertical.short' | 'action.align-center-vertical' | 'action.align-left' | 'action.align-right' | 'action.align-top' | 'action.back-to-content' | 'action.bring-forward' | 'action.bring-to-front' | 'action.convert-to-bookmark' | 'action.convert-to-embed' | 'action.copy-as-json.short' | 'action.copy-as-json' | 'action.copy-as-png.short' | 'action.copy-as-png' | 'action.copy-as-svg.short' | 'action.copy-as-svg' | 'action.copy' | 'action.cut' | 'action.delete' | 'action.distribute-horizontal.short' | 'action.distribute-horizontal' | 'action.distribute-vertical.short' | 'action.distribute-vertical' | 'action.duplicate' | 'action.edit-link' | 'action.exit-pen-mode' | 'action.export-as-json.short' | 'action.export-as-json' | 'action.export-as-png.short' | 'action.export-as-png' | 'action.export-as-svg.short' | 'action.export-as-svg' | 'action.fit-frame-to-content' | 'action.flip-horizontal.short' | 'action.flip-horizontal' | 'action.flip-vertical.short' | 'action.flip-vertical' | 'action.fork-project' | 'action.group' | 'action.insert-embed' | 'action.insert-media' | 'action.leave-shared-project' | 'action.new-project' | 'action.new-shared-project' | 'action.open-cursor-chat' | 'action.open-embed-link' | 'action.open-file' | 'action.pack' | 'action.paste' | 'action.print' | 'action.redo' | 'action.remove-frame' | 'action.rotate-ccw' | 'action.rotate-cw' | 'action.save-copy' | 'action.select-all' | 'action.select-none' | 'action.send-backward' | 'action.send-to-back' | 'action.share-project' | 'action.stack-horizontal.short' | 'action.stack-horizontal' | 'action.stack-vertical.short' | 'action.stack-vertical' | 'action.stop-following' | 'action.stretch-horizontal.short' | 'action.stretch-horizontal' | 'action.stretch-vertical.short' | 'action.stretch-vertical' | 'action.toggle-auto-size' | 'action.toggle-dark-mode.menu' | 'action.toggle-dark-mode' | 'action.toggle-debug-mode.menu' | 'action.toggle-debug-mode' | 'action.toggle-edge-scrolling.menu' | 'action.toggle-edge-scrolling' | 'action.toggle-focus-mode.menu' | 'action.toggle-focus-mode' | 'action.toggle-grid.menu' | 'action.toggle-grid' | 'action.toggle-lock' | 'action.toggle-reduce-motion.menu' | 'action.toggle-reduce-motion' | 'action.toggle-snap-mode.menu' | 'action.toggle-snap-mode' | 'action.toggle-tool-lock.menu' | 'action.toggle-tool-lock' | 'action.toggle-transparent.context-menu' | 'action.toggle-transparent.menu' | 'action.toggle-transparent' | 'action.undo' | 'action.ungroup' | 'action.unlock-all' | 'action.zoom-in' | 'action.zoom-out' | 'action.zoom-to-100' | 'action.zoom-to-fit' | 'action.zoom-to-selection' | 'actions-menu.title' | 'align-style.end' | 'align-style.justify' | 'align-style.middle' | 'align-style.start' | 'arrowheadEnd-style.arrow' | 'arrowheadEnd-style.bar' | 'arrowheadEnd-style.diamond' | 'arrowheadEnd-style.dot' | 'arrowheadEnd-style.inverted' | 'arrowheadEnd-style.none' | 'arrowheadEnd-style.pipe' | 'arrowheadEnd-style.square' | 'arrowheadEnd-style.triangle' | 'arrowheadStart-style.arrow' | 'arrowheadStart-style.bar' | 'arrowheadStart-style.diamond' | 'arrowheadStart-style.dot' | 'arrowheadStart-style.inverted' | 'arrowheadStart-style.none' | 'arrowheadStart-style.pipe' | 'arrowheadStart-style.square' | 'arrowheadStart-style.triangle' | 'color-style.black' | 'color-style.blue' | 'color-style.green' | 'color-style.grey' | 'color-style.light-blue' | 'color-style.light-green' | 'color-style.light-red' | 'color-style.light-violet' | 'color-style.orange' | 'color-style.red' | 'color-style.violet' | 'color-style.yellow' | 'context-menu.arrange' | 'context-menu.copy-as' | 'context-menu.export-as' | 'context-menu.move-to-page' | 'context-menu.reorder' | 'context.pages.new-page' | 'cursor-chat.type-to-chat' | 'dash-style.dashed' | 'dash-style.dotted' | 'dash-style.draw' | 'dash-style.solid' | 'debug-panel.more' | 'edit-link-dialog.cancel' | 'edit-link-dialog.clear' | 'edit-link-dialog.detail' | 'edit-link-dialog.invalid-url' | 'edit-link-dialog.save' | 'edit-link-dialog.title' | 'edit-link-dialog.url' | 'edit-pages-dialog.move-down' | 'edit-pages-dialog.move-up' | 'embed-dialog.back' | 'embed-dialog.cancel' | 'embed-dialog.create' | 'embed-dialog.instruction' | 'embed-dialog.invalid-url' | 'embed-dialog.title' | 'embed-dialog.url' | 'file-system.confirm-clear.cancel' | 'file-system.confirm-clear.continue' | 'file-system.confirm-clear.description' | 'file-system.confirm-clear.dont-show-again' | 'file-system.confirm-clear.title' | 'file-system.confirm-open.cancel' | 'file-system.confirm-open.description' | 'file-system.confirm-open.dont-show-again' | 'file-system.confirm-open.open' | 'file-system.confirm-open.title' | 'file-system.file-open-error.file-format-version-too-new' | 'file-system.file-open-error.generic-corrupted-file' | 'file-system.file-open-error.not-a-tldraw-file' | 'file-system.file-open-error.title' | 'file-system.shared-document-file-open-error.description' | 'file-system.shared-document-file-open-error.title' | 'fill-style.none' | 'fill-style.pattern' | 'fill-style.semi' | 'fill-style.solid' | 'focus-mode.toggle-focus-mode' | 'font-style.draw' | 'font-style.mono' | 'font-style.sans' | 'font-style.serif' | 'geo-style.arrow-down' | 'geo-style.arrow-left' | 'geo-style.arrow-right' | 'geo-style.arrow-up' | 'geo-style.check-box' | 'geo-style.cloud' | 'geo-style.diamond' | 'geo-style.ellipse' | 'geo-style.hexagon' | 'geo-style.octagon' | 'geo-style.oval' | 'geo-style.pentagon' | 'geo-style.rectangle' | 'geo-style.rhombus-2' | 'geo-style.rhombus' | 'geo-style.star' | 'geo-style.trapezoid' | 'geo-style.triangle' | 'geo-style.x-box' | 'help-menu.about' | 'help-menu.discord' | 'help-menu.github' | 'help-menu.keyboard-shortcuts' | 'help-menu.title' | 'help-menu.twitter' | 'home-project-dialog.description' | 'home-project-dialog.ok' | 'home-project-dialog.title' | 'menu.copy-as' | 'menu.edit' | 'menu.export-as' | 'menu.file' | 'menu.language' | 'menu.preferences' | 'menu.title' | 'menu.view' | 'navigation-zone.toggle-minimap' | 'navigation-zone.zoom' | 'opacity-style.0.1' | 'opacity-style.0.25' | 'opacity-style.0.5' | 'opacity-style.0.75' | 'opacity-style.1' | 'page-menu.create-new-page' | 'page-menu.edit-done' | 'page-menu.edit-start' | 'page-menu.go-to-page' | 'page-menu.max-page-count-reached' | 'page-menu.new-page-initial-name' | 'page-menu.submenu.delete' | 'page-menu.submenu.duplicate-page' | 'page-menu.submenu.move-down' | 'page-menu.submenu.move-up' | 'page-menu.submenu.rename' | 'page-menu.submenu.title' | 'page-menu.title' | 'people-menu.change-color' | 'people-menu.change-name' | 'people-menu.follow' | 'people-menu.following' | 'people-menu.invite' | 'people-menu.leading' | 'people-menu.title' | 'people-menu.user' | 'rename-project-dialog.cancel' | 'rename-project-dialog.rename' | 'rename-project-dialog.title' | 'share-menu.copy-link-note' | 'share-menu.copy-link' | 'share-menu.copy-readonly-link-note' | 'share-menu.copy-readonly-link' | 'share-menu.create-snapshot-link' | 'share-menu.default-project-name' | 'share-menu.fork-note' | 'share-menu.offline-note' | 'share-menu.project-too-large' | 'share-menu.readonly-link' | 'share-menu.save-note' | 'share-menu.share-project' | 'share-menu.snapshot-link-note' | 'share-menu.title' | 'share-menu.upload-failed' | 'sharing.confirm-leave.cancel' | 'sharing.confirm-leave.description' | 'sharing.confirm-leave.dont-show-again' | 'sharing.confirm-leave.leave' | 'sharing.confirm-leave.title' | 'shortcuts-dialog.collaboration' | 'shortcuts-dialog.edit' | 'shortcuts-dialog.file' | 'shortcuts-dialog.preferences' | 'shortcuts-dialog.title' | 'shortcuts-dialog.tools' | 'shortcuts-dialog.transform' | 'shortcuts-dialog.view' | 'size-style.l' | 'size-style.m' | 'size-style.s' | 'size-style.xl' | 'spline-style.cubic' | 'spline-style.line' | 'status.offline' | 'status.online' | 'style-panel.align' | 'style-panel.arrowhead-end' | 'style-panel.arrowhead-start' | 'style-panel.arrowheads' | 'style-panel.color' | 'style-panel.dash' | 'style-panel.fill' | 'style-panel.font' | 'style-panel.geo' | 'style-panel.mixed' | 'style-panel.opacity' | 'style-panel.position' | 'style-panel.size' | 'style-panel.spline' | 'style-panel.title' | 'style-panel.vertical-align' | 'toast.close' | 'toast.error.copy-fail.desc' | 'toast.error.copy-fail.title' | 'toast.error.export-fail.desc' | 'toast.error.export-fail.title' | 'tool-panel.drawing' | 'tool-panel.more' | 'tool-panel.shapes' | 'tool.arrow-down' | 'tool.arrow-left' | 'tool.arrow-right' | 'tool.arrow-up' | 'tool.arrow' | 'tool.asset' | 'tool.check-box' | 'tool.cloud' | 'tool.diamond' | 'tool.draw' | 'tool.ellipse' | 'tool.embed' | 'tool.eraser' | 'tool.frame' | 'tool.hand' | 'tool.hexagon' | 'tool.highlight' | 'tool.laser' | 'tool.line' | 'tool.note' | 'tool.octagon' | 'tool.oval' | 'tool.pentagon' | 'tool.rectangle' | 'tool.rhombus' | 'tool.select' | 'tool.star' | 'tool.text' | 'tool.trapezoid' | 'tool.triangle' | 'tool.x-box' | 'vscode.file-open.backup-failed' | 'vscode.file-open.backup-saved' | 'vscode.file-open.backup' | 'vscode.file-open.desc' | 'vscode.file-open.dont-show-again' | 'vscode.file-open.open';
|
|
2594
2599
|
|
|
2595
2600
|
/** @public */
|
|
2596
2601
|
declare interface TLUiTranslationProviderProps {
|
|
@@ -2701,6 +2706,7 @@ declare class Translating extends StateNode {
|
|
|
2701
2706
|
onInteractionEnd?: string;
|
|
2702
2707
|
}) => void;
|
|
2703
2708
|
onExit: () => void;
|
|
2709
|
+
onTick: TLTickEventHandler;
|
|
2704
2710
|
onPointerMove: () => void;
|
|
2705
2711
|
onKeyDown: () => void;
|
|
2706
2712
|
onKeyUp: TLEventHandlers['onKeyUp'];
|
|
@@ -2709,7 +2715,6 @@ declare class Translating extends StateNode {
|
|
|
2709
2715
|
onCancel: TLEventHandlers['onCancel'];
|
|
2710
2716
|
protected startCloning(): void;
|
|
2711
2717
|
protected stopCloning(): void;
|
|
2712
|
-
updateParent: () => void;
|
|
2713
2718
|
reset(): void;
|
|
2714
2719
|
protected complete(): void;
|
|
2715
2720
|
private cancel;
|
|
@@ -2770,13 +2775,13 @@ declare interface TriangleShape extends TDBaseShape {
|
|
|
2770
2775
|
declare function Trigger({ children, 'data-testid': testId, }: {
|
|
2771
2776
|
children: any;
|
|
2772
2777
|
'data-testid'?: string;
|
|
2773
|
-
}):
|
|
2778
|
+
}): JSX_2.Element;
|
|
2774
2779
|
|
|
2775
2780
|
/** @public */
|
|
2776
2781
|
export declare const truncateStringWithEllipsis: (str: string, maxLength: number) => string;
|
|
2777
2782
|
|
|
2778
2783
|
/** @public */
|
|
2779
|
-
export declare function UiEventsProvider({ onEvent, children }: EventsProviderProps):
|
|
2784
|
+
export declare function UiEventsProvider({ onEvent, children }: EventsProviderProps): JSX_2.Element;
|
|
2780
2785
|
|
|
2781
2786
|
/** @public */
|
|
2782
2787
|
export declare function useActions(): TLUiActionsContextType;
|
|
@@ -2904,8 +2909,8 @@ export declare class VideoShapeUtil extends BaseBoxShapeUtil<TLVideoShape> {
|
|
|
2904
2909
|
canEdit: () => boolean;
|
|
2905
2910
|
isAspectRatioLocked: () => boolean;
|
|
2906
2911
|
getDefaultProps(): TLVideoShape['props'];
|
|
2907
|
-
component(shape: TLVideoShape):
|
|
2908
|
-
indicator(shape: TLVideoShape):
|
|
2912
|
+
component(shape: TLVideoShape): JSX_2.Element;
|
|
2913
|
+
indicator(shape: TLVideoShape): JSX_2.Element;
|
|
2909
2914
|
toSvg(shape: TLVideoShape): SVGGElement;
|
|
2910
2915
|
}
|
|
2911
2916
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/shapes/bookmark/BookmarkShapeUtil.tsx"],
|
|
4
|
-
"sourcesContent": ["import {\n\tAssetRecordType,\n\tBaseBoxShapeUtil,\n\tEditor,\n\tHTMLContainer,\n\tTLAssetId,\n\tTLBookmarkAsset,\n\tTLBookmarkShape,\n\tTLOnBeforeCreateHandler,\n\tTLOnBeforeUpdateHandler,\n\tbookmarkShapeMigrations,\n\tbookmarkShapeProps,\n\tdebounce,\n\tgetHashForString,\n\tisValidUrl,\n\tstopEventPropagation,\n\ttoDomPrecision,\n} from '@bigbluebutton/editor'\nimport { truncateStringWithEllipsis } from '../../utils/text/text'\nimport { HyperlinkButton } from '../shared/HyperlinkButton'\nimport { getRotatedBoxShadow } from '../shared/rotated-box-shadow'\n\n/** @public */\nexport class BookmarkShapeUtil extends BaseBoxShapeUtil<TLBookmarkShape> {\n\tstatic override type = 'bookmark' as const\n\tstatic override props = bookmarkShapeProps\n\tstatic override migrations = bookmarkShapeMigrations\n\n\toverride canResize = () => false\n\n\toverride hideSelectionBoundsFg = () => true\n\n\toverride getDefaultProps(): TLBookmarkShape['props'] {\n\t\treturn {\n\t\t\turl: '',\n\t\t\tw: 300,\n\t\t\th: 320,\n\t\t\tassetId: null,\n\t\t}\n\t}\n\n\toverride component(shape: TLBookmarkShape) {\n\t\tconst asset = (\n\t\t\tshape.props.assetId ? this.editor.getAsset(shape.props.assetId) : null\n\t\t) as TLBookmarkAsset\n\n\t\tconst pageRotation = this.editor.getShapePageTransform(shape)!.rotation()\n\n\t\tconst address = getHumanReadableAddress(shape)\n\n\t\treturn (\n\t\t\t<HTMLContainer>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"tl-bookmark__container\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tboxShadow: getRotatedBoxShadow(pageRotation),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"tl-bookmark__image_container\">\n\t\t\t\t\t\t{asset?.props.image ? (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tclassName=\"tl-bookmark__image\"\n\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\tsrc={asset?.props.image}\n\t\t\t\t\t\t\t\talt={asset?.props.title || ''}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"tl-bookmark__placeholder\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<HyperlinkButton url={shape.props.url} zoomLevel={this.editor.getZoomLevel()} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"tl-bookmark__copy_container\">\n\t\t\t\t\t\t{asset?.props.title && (\n\t\t\t\t\t\t\t<h2 className=\"tl-bookmark__heading\">\n\t\t\t\t\t\t\t\t{truncateStringWithEllipsis(asset?.props.title || '', 54)}\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{asset?.props.description && (\n\t\t\t\t\t\t\t<p className=\"tl-bookmark__description\">\n\t\t\t\t\t\t\t\t{truncateStringWithEllipsis(asset?.props.description || '', 128)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclassName=\"tl-bookmark__link\"\n\t\t\t\t\t\t\thref={shape.props.url || ''}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tonPointerDown={stopEventPropagation}\n\t\t\t\t\t\t\tonPointerUp={stopEventPropagation}\n\t\t\t\t\t\t\tonClick={stopEventPropagation}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{truncateStringWithEllipsis(address, 45)}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</HTMLContainer>\n\t\t)\n\t}\n\n\toverride indicator(shape: TLBookmarkShape) {\n\t\treturn (\n\t\t\t<rect\n\t\t\t\twidth={toDomPrecision(shape.props.w)}\n\t\t\t\theight={toDomPrecision(shape.props.h)}\n\t\t\t\trx=\"
|
|
4
|
+
"sourcesContent": ["import {\n\tAssetRecordType,\n\tBaseBoxShapeUtil,\n\tEditor,\n\tHTMLContainer,\n\tTLAssetId,\n\tTLBookmarkAsset,\n\tTLBookmarkShape,\n\tTLOnBeforeCreateHandler,\n\tTLOnBeforeUpdateHandler,\n\tbookmarkShapeMigrations,\n\tbookmarkShapeProps,\n\tdebounce,\n\tgetHashForString,\n\tisValidUrl,\n\tstopEventPropagation,\n\ttoDomPrecision,\n} from '@bigbluebutton/editor'\nimport { truncateStringWithEllipsis } from '../../utils/text/text'\nimport { HyperlinkButton } from '../shared/HyperlinkButton'\nimport { getRotatedBoxShadow } from '../shared/rotated-box-shadow'\n\n/** @public */\nexport class BookmarkShapeUtil extends BaseBoxShapeUtil<TLBookmarkShape> {\n\tstatic override type = 'bookmark' as const\n\tstatic override props = bookmarkShapeProps\n\tstatic override migrations = bookmarkShapeMigrations\n\n\toverride canResize = () => false\n\n\toverride hideSelectionBoundsFg = () => true\n\n\toverride getDefaultProps(): TLBookmarkShape['props'] {\n\t\treturn {\n\t\t\turl: '',\n\t\t\tw: 300,\n\t\t\th: 320,\n\t\t\tassetId: null,\n\t\t}\n\t}\n\n\toverride component(shape: TLBookmarkShape) {\n\t\tconst asset = (\n\t\t\tshape.props.assetId ? this.editor.getAsset(shape.props.assetId) : null\n\t\t) as TLBookmarkAsset\n\n\t\tconst pageRotation = this.editor.getShapePageTransform(shape)!.rotation()\n\n\t\tconst address = getHumanReadableAddress(shape)\n\n\t\treturn (\n\t\t\t<HTMLContainer>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"tl-bookmark__container\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tboxShadow: getRotatedBoxShadow(pageRotation),\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"tl-bookmark__image_container\">\n\t\t\t\t\t\t{asset?.props.image ? (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tclassName=\"tl-bookmark__image\"\n\t\t\t\t\t\t\t\tdraggable={false}\n\t\t\t\t\t\t\t\tsrc={asset?.props.image}\n\t\t\t\t\t\t\t\talt={asset?.props.title || ''}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<div className=\"tl-bookmark__placeholder\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<HyperlinkButton url={shape.props.url} zoomLevel={this.editor.getZoomLevel()} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"tl-bookmark__copy_container\">\n\t\t\t\t\t\t{asset?.props.title && (\n\t\t\t\t\t\t\t<h2 className=\"tl-bookmark__heading\">\n\t\t\t\t\t\t\t\t{truncateStringWithEllipsis(asset?.props.title || '', 54)}\n\t\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{asset?.props.description && (\n\t\t\t\t\t\t\t<p className=\"tl-bookmark__description\">\n\t\t\t\t\t\t\t\t{truncateStringWithEllipsis(asset?.props.description || '', 128)}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\tclassName=\"tl-bookmark__link\"\n\t\t\t\t\t\t\thref={shape.props.url || ''}\n\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t\t\t\t\tonPointerDown={stopEventPropagation}\n\t\t\t\t\t\t\tonPointerUp={stopEventPropagation}\n\t\t\t\t\t\t\tonClick={stopEventPropagation}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{truncateStringWithEllipsis(address, 45)}\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</HTMLContainer>\n\t\t)\n\t}\n\n\toverride indicator(shape: TLBookmarkShape) {\n\t\treturn (\n\t\t\t<rect\n\t\t\t\twidth={toDomPrecision(shape.props.w)}\n\t\t\t\theight={toDomPrecision(shape.props.h)}\n\t\t\t\trx=\"6\"\n\t\t\t\try=\"6\"\n\t\t\t/>\n\t\t)\n\t}\n\n\toverride onBeforeCreate?: TLOnBeforeCreateHandler<TLBookmarkShape> = (shape) => {\n\t\tupdateBookmarkAssetOnUrlChange(this.editor, shape)\n\t}\n\n\toverride onBeforeUpdate?: TLOnBeforeUpdateHandler<TLBookmarkShape> = (prev, shape) => {\n\t\tif (prev.props.url !== shape.props.url) {\n\t\t\tif (!isValidUrl(shape.props.url)) {\n\t\t\t\treturn { ...shape, props: { ...shape.props, url: prev.props.url } }\n\t\t\t} else {\n\t\t\t\tupdateBookmarkAssetOnUrlChange(this.editor, shape)\n\t\t\t}\n\t\t}\n\t}\n}\n\n/** @internal */\nexport const getHumanReadableAddress = (shape: TLBookmarkShape) => {\n\ttry {\n\t\tconst url = new URL(shape.props.url)\n\t\tconst path = url.pathname.replace(/\\/*$/, '')\n\t\treturn `${url.hostname}${path}`\n\t} catch (e) {\n\t\treturn shape.props.url\n\t}\n}\n\nfunction updateBookmarkAssetOnUrlChange(editor: Editor, shape: TLBookmarkShape) {\n\tconst { url } = shape.props\n\n\t// Derive the asset id from the URL\n\tconst assetId: TLAssetId = AssetRecordType.createId(getHashForString(url))\n\n\tif (editor.getAsset(assetId)) {\n\t\t// Existing asset for this URL?\n\t\tif (shape.props.assetId !== assetId) {\n\t\t\teditor.updateShapes<TLBookmarkShape>([\n\t\t\t\t{\n\t\t\t\t\tid: shape.id,\n\t\t\t\t\ttype: shape.type,\n\t\t\t\t\tprops: { assetId },\n\t\t\t\t},\n\t\t\t])\n\t\t}\n\t} else {\n\t\t// No asset for this URL?\n\n\t\t// First, clear out the existing asset reference\n\t\teditor.updateShapes<TLBookmarkShape>([\n\t\t\t{\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tprops: { assetId: null },\n\t\t\t},\n\t\t])\n\n\t\t// Then try to asyncronously create a new one\n\t\tcreateBookmarkAssetOnUrlChange(editor, shape)\n\t}\n}\n\nconst createBookmarkAssetOnUrlChange = debounce(async (editor: Editor, shape: TLBookmarkShape) => {\n\tconst { url } = shape.props\n\n\t// Create the asset using the external content manager's createAssetFromUrl method.\n\t// This may be overwritten by the user (for example, we overwrite it on tldraw.com)\n\tconst asset = await editor.getAssetForExternalContent({ type: 'url', url })\n\n\tif (!asset) {\n\t\t// No asset? Just leave the bookmark as a null assetId.\n\t\treturn\n\t}\n\n\teditor.batch(() => {\n\t\t// Create the new asset\n\t\teditor.createAssets([asset])\n\n\t\t// And update the shape\n\t\teditor.updateShapes<TLBookmarkShape>([\n\t\t\t{\n\t\t\t\tid: shape.id,\n\t\t\t\ttype: shape.type,\n\t\t\t\tprops: { assetId: asset.id },\n\t\t\t},\n\t\t])\n\t})\n}, 500)\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -50,6 +50,9 @@ class Brushing extends import_editor.StateNode {
|
|
|
50
50
|
this.initialSelectedShapeIds = [];
|
|
51
51
|
this.editor.updateInstanceState({ brush: null });
|
|
52
52
|
};
|
|
53
|
+
onTick = () => {
|
|
54
|
+
(0, import_editor.moveCameraWhenCloseToEdge)(this.editor);
|
|
55
|
+
};
|
|
53
56
|
onPointerMove = () => {
|
|
54
57
|
this.hitTestShapes();
|
|
55
58
|
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/tools/SelectTool/childStates/Brushing.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n\tBox2d,\n\tHIT_TEST_MARGIN,\n\tMatrix2d,\n\tStateNode,\n\tTLCancelEvent,\n\tTLEventHandlers,\n\tTLFrameShape,\n\tTLGroupShape,\n\tTLInterruptEvent,\n\tTLKeyboardEvent,\n\tTLPageId,\n\tTLPointerEventInfo,\n\tTLShape,\n\tTLShapeId,\n\tVec2d,\n\tpointInPolygon,\n\tpolygonsIntersect,\n} from '@bigbluebutton/editor'\n\nexport class Brushing extends StateNode {\n\tstatic override id = 'brushing'\n\n\tinfo = {} as TLPointerEventInfo & { target: 'canvas' }\n\n\tbrush = new Box2d()\n\tinitialSelectedShapeIds: TLShapeId[] = []\n\texcludedShapeIds = new Set<TLShapeId>()\n\n\t// The shape that the brush started on\n\tinitialStartShape: TLShape | null = null\n\n\toverride onEnter = (info: TLPointerEventInfo & { target: 'canvas' }) => {\n\t\tconst { altKey, currentPagePoint } = this.editor.inputs\n\n\t\tif (altKey) {\n\t\t\tthis.parent.transition('scribble_brushing', info)\n\t\t\treturn\n\t\t}\n\n\t\tthis.excludedShapeIds = new Set(\n\t\t\tthis.editor\n\t\t\t\t.getCurrentPageShapes()\n\t\t\t\t.filter(\n\t\t\t\t\t(shape) =>\n\t\t\t\t\t\tthis.editor.isShapeOfType<TLGroupShape>(shape, 'group') ||\n\t\t\t\t\t\tthis.editor.isShapeOrAncestorLocked(shape)\n\t\t\t\t)\n\t\t\t\t.map((shape) => shape.id)\n\t\t)\n\n\t\tthis.info = info\n\t\tthis.initialSelectedShapeIds = this.editor.getSelectedShapeIds().slice()\n\t\tthis.initialStartShape = this.editor.getShapesAtPoint(currentPagePoint)[0]\n\t\tthis.onPointerMove()\n\t}\n\n\toverride onExit = () => {\n\t\tthis.initialSelectedShapeIds = []\n\t\tthis.editor.updateInstanceState({ brush: null })\n\t}\n\n\toverride onPointerMove = () => {\n\t\tthis.hitTestShapes()\n\t}\n\n\toverride onPointerUp: TLEventHandlers['onPointerUp'] = () => {\n\t\tthis.complete()\n\t}\n\n\toverride onComplete: TLEventHandlers['onComplete'] = () => {\n\t\tthis.complete()\n\t}\n\n\toverride onCancel?: TLCancelEvent | undefined = (info) => {\n\t\tthis.editor.setSelectedShapes(this.initialSelectedShapeIds, { squashing: true })\n\t\tthis.parent.transition('idle', info)\n\t}\n\n\toverride onKeyDown: TLEventHandlers['onKeyDown'] = (info) => {\n\t\tif (this.editor.inputs.altKey) {\n\t\t\tthis.parent.transition('scribble_brushing', info)\n\t\t} else {\n\t\t\tthis.hitTestShapes()\n\t\t}\n\t}\n\n\toverride onKeyUp?: TLKeyboardEvent | undefined = () => {\n\t\tthis.hitTestShapes()\n\t}\n\n\tprivate complete() {\n\t\tthis.parent.transition('idle')\n\t}\n\n\tprivate hitTestShapes() {\n\t\tconst zoomLevel = this.editor.getZoomLevel()\n\t\tconst currentPageShapes = this.editor.getCurrentPageShapes()\n\t\tconst currentPageId = this.editor.getCurrentPageId()\n\t\tconst {\n\t\t\tinputs: { originPagePoint, currentPagePoint, shiftKey, ctrlKey },\n\t\t} = this.editor\n\n\t\t// Set the brush to contain the current and origin points\n\t\tthis.brush.setTo(Box2d.FromPoints([originPagePoint, currentPagePoint]))\n\n\t\t// We'll be collecting shape ids\n\t\tconst results = new Set(shiftKey ? this.initialSelectedShapeIds : [])\n\n\t\tlet A: Vec2d,\n\t\t\tB: Vec2d,\n\t\t\tshape: TLShape,\n\t\t\tpageBounds: Box2d | undefined,\n\t\t\tpageTransform: Matrix2d | undefined,\n\t\t\tlocalCorners: Vec2d[]\n\n\t\t// We'll be testing the corners of the brush against the shapes\n\t\tconst { corners } = this.brush\n\n\t\tconst { excludedShapeIds } = this\n\n\t\ttestAllShapes: for (let i = 0, n = currentPageShapes.length; i < n; i++) {\n\t\t\tshape = currentPageShapes[i]\n\t\t\tif (excludedShapeIds.has(shape.id)) continue testAllShapes\n\t\t\tif (results.has(shape.id)) continue testAllShapes\n\n\t\t\tpageBounds = this.editor.getShapePageBounds(shape)\n\t\t\tif (!pageBounds) continue testAllShapes\n\n\t\t\t// If the brush fully wraps a shape, it's almost certainly a hit\n\t\t\tif (this.brush.contains(pageBounds)) {\n\t\t\t\tthis.handleHit(shape, currentPagePoint, currentPageId, results, corners)\n\t\t\t\tcontinue testAllShapes\n\t\t\t}\n\n\t\t\t// Should we even test for a single segment intersections? Only if\n\t\t\t// we're not holding the ctrl key for alternate selection mode\n\t\t\t// (only wraps count!), or if the shape is a frame.\n\t\t\tif (ctrlKey || this.editor.isShapeOfType<TLFrameShape>(shape, 'frame')) {\n\t\t\t\tcontinue testAllShapes\n\t\t\t}\n\n\t\t\t// If the brush collides the page bounds, then do hit tests against\n\t\t\t// each of the brush's four sides.\n\t\t\tif (this.brush.collides(pageBounds)) {\n\t\t\t\t// Shapes expect to hit test line segments in their own coordinate system,\n\t\t\t\t// so we first need to get the brush corners in the shape's local space.\n\t\t\t\tconst geometry = this.editor.getShapeGeometry(shape)\n\n\t\t\t\tpageTransform = this.editor.getShapePageTransform(shape)\n\n\t\t\t\tif (!pageTransform) {\n\t\t\t\t\tcontinue testAllShapes\n\t\t\t\t}\n\n\t\t\t\t// Check whether any of the the brush edges intersect the shape\n\t\t\t\tlocalCorners = pageTransform.clone().invert().applyToPoints(corners)\n\n\t\t\t\thitTestBrushEdges: for (let i = 0; i < localCorners.length; i++) {\n\t\t\t\t\tA = localCorners[i]\n\t\t\t\t\tB = localCorners[(i + 1) % localCorners.length]\n\n\t\t\t\t\tif (geometry.hitTestLineSegment(A, B, HIT_TEST_MARGIN / zoomLevel)) {\n\t\t\t\t\t\tthis.handleHit(shape, currentPagePoint, currentPageId, results, corners)\n\t\t\t\t\t\tbreak hitTestBrushEdges\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.updateInstanceState({ brush: { ...this.brush.toJson() } })\n\t\tthis.editor.setSelectedShapes(Array.from(results), { squashing: true })\n\t}\n\n\toverride onInterrupt: TLInterruptEvent = () => {\n\t\tthis.editor.updateInstanceState({ brush: null })\n\t}\n\n\tprivate handleHit(\n\t\tshape: TLShape,\n\t\tcurrentPagePoint: Vec2d,\n\t\tcurrentPageId: TLPageId,\n\t\tresults: Set<TLShapeId>,\n\t\tcorners: Vec2d[]\n\t) {\n\t\tif (shape.parentId === currentPageId) {\n\t\t\tresults.add(shape.id)\n\t\t\treturn\n\t\t}\n\n\t\t// Find the outermost selectable shape, check to see if it has a\n\t\t// page mask; and if so, check to see if the brush intersects it\n\t\tconst selectedShape = this.editor.getOutermostSelectableShape(shape)\n\t\tconst pageMask = this.editor.getShapeMask(selectedShape.id)\n\n\t\tif (\n\t\t\tpageMask &&\n\t\t\t!polygonsIntersect(pageMask, corners) &&\n\t\t\t!pointInPolygon(currentPagePoint, pageMask)\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tresults.add(selectedShape.id)\n\t}\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import {\n\tBox2d,\n\tHIT_TEST_MARGIN,\n\tMatrix2d,\n\tStateNode,\n\tTLCancelEvent,\n\tTLEventHandlers,\n\tTLFrameShape,\n\tTLGroupShape,\n\tTLInterruptEvent,\n\tTLKeyboardEvent,\n\tTLPageId,\n\tTLPointerEventInfo,\n\tTLShape,\n\tTLShapeId,\n\tTLTickEventHandler,\n\tVec2d,\n\tmoveCameraWhenCloseToEdge,\n\tpointInPolygon,\n\tpolygonsIntersect,\n} from '@bigbluebutton/editor'\n\nexport class Brushing extends StateNode {\n\tstatic override id = 'brushing'\n\n\tinfo = {} as TLPointerEventInfo & { target: 'canvas' }\n\n\tbrush = new Box2d()\n\tinitialSelectedShapeIds: TLShapeId[] = []\n\texcludedShapeIds = new Set<TLShapeId>()\n\n\t// The shape that the brush started on\n\tinitialStartShape: TLShape | null = null\n\n\toverride onEnter = (info: TLPointerEventInfo & { target: 'canvas' }) => {\n\t\tconst { altKey, currentPagePoint } = this.editor.inputs\n\n\t\tif (altKey) {\n\t\t\tthis.parent.transition('scribble_brushing', info)\n\t\t\treturn\n\t\t}\n\n\t\tthis.excludedShapeIds = new Set(\n\t\t\tthis.editor\n\t\t\t\t.getCurrentPageShapes()\n\t\t\t\t.filter(\n\t\t\t\t\t(shape) =>\n\t\t\t\t\t\tthis.editor.isShapeOfType<TLGroupShape>(shape, 'group') ||\n\t\t\t\t\t\tthis.editor.isShapeOrAncestorLocked(shape)\n\t\t\t\t)\n\t\t\t\t.map((shape) => shape.id)\n\t\t)\n\n\t\tthis.info = info\n\t\tthis.initialSelectedShapeIds = this.editor.getSelectedShapeIds().slice()\n\t\tthis.initialStartShape = this.editor.getShapesAtPoint(currentPagePoint)[0]\n\t\tthis.onPointerMove()\n\t}\n\n\toverride onExit = () => {\n\t\tthis.initialSelectedShapeIds = []\n\t\tthis.editor.updateInstanceState({ brush: null })\n\t}\n\n\toverride onTick: TLTickEventHandler = () => {\n\t\tmoveCameraWhenCloseToEdge(this.editor)\n\t}\n\n\toverride onPointerMove = () => {\n\t\tthis.hitTestShapes()\n\t}\n\n\toverride onPointerUp: TLEventHandlers['onPointerUp'] = () => {\n\t\tthis.complete()\n\t}\n\n\toverride onComplete: TLEventHandlers['onComplete'] = () => {\n\t\tthis.complete()\n\t}\n\n\toverride onCancel?: TLCancelEvent | undefined = (info) => {\n\t\tthis.editor.setSelectedShapes(this.initialSelectedShapeIds, { squashing: true })\n\t\tthis.parent.transition('idle', info)\n\t}\n\n\toverride onKeyDown: TLEventHandlers['onKeyDown'] = (info) => {\n\t\tif (this.editor.inputs.altKey) {\n\t\t\tthis.parent.transition('scribble_brushing', info)\n\t\t} else {\n\t\t\tthis.hitTestShapes()\n\t\t}\n\t}\n\n\toverride onKeyUp?: TLKeyboardEvent | undefined = () => {\n\t\tthis.hitTestShapes()\n\t}\n\n\tprivate complete() {\n\t\tthis.parent.transition('idle')\n\t}\n\n\tprivate hitTestShapes() {\n\t\tconst zoomLevel = this.editor.getZoomLevel()\n\t\tconst currentPageShapes = this.editor.getCurrentPageShapes()\n\t\tconst currentPageId = this.editor.getCurrentPageId()\n\t\tconst {\n\t\t\tinputs: { originPagePoint, currentPagePoint, shiftKey, ctrlKey },\n\t\t} = this.editor\n\n\t\t// Set the brush to contain the current and origin points\n\t\tthis.brush.setTo(Box2d.FromPoints([originPagePoint, currentPagePoint]))\n\n\t\t// We'll be collecting shape ids\n\t\tconst results = new Set(shiftKey ? this.initialSelectedShapeIds : [])\n\n\t\tlet A: Vec2d,\n\t\t\tB: Vec2d,\n\t\t\tshape: TLShape,\n\t\t\tpageBounds: Box2d | undefined,\n\t\t\tpageTransform: Matrix2d | undefined,\n\t\t\tlocalCorners: Vec2d[]\n\n\t\t// We'll be testing the corners of the brush against the shapes\n\t\tconst { corners } = this.brush\n\n\t\tconst { excludedShapeIds } = this\n\n\t\ttestAllShapes: for (let i = 0, n = currentPageShapes.length; i < n; i++) {\n\t\t\tshape = currentPageShapes[i]\n\t\t\tif (excludedShapeIds.has(shape.id)) continue testAllShapes\n\t\t\tif (results.has(shape.id)) continue testAllShapes\n\n\t\t\tpageBounds = this.editor.getShapePageBounds(shape)\n\t\t\tif (!pageBounds) continue testAllShapes\n\n\t\t\t// If the brush fully wraps a shape, it's almost certainly a hit\n\t\t\tif (this.brush.contains(pageBounds)) {\n\t\t\t\tthis.handleHit(shape, currentPagePoint, currentPageId, results, corners)\n\t\t\t\tcontinue testAllShapes\n\t\t\t}\n\n\t\t\t// Should we even test for a single segment intersections? Only if\n\t\t\t// we're not holding the ctrl key for alternate selection mode\n\t\t\t// (only wraps count!), or if the shape is a frame.\n\t\t\tif (ctrlKey || this.editor.isShapeOfType<TLFrameShape>(shape, 'frame')) {\n\t\t\t\tcontinue testAllShapes\n\t\t\t}\n\n\t\t\t// If the brush collides the page bounds, then do hit tests against\n\t\t\t// each of the brush's four sides.\n\t\t\tif (this.brush.collides(pageBounds)) {\n\t\t\t\t// Shapes expect to hit test line segments in their own coordinate system,\n\t\t\t\t// so we first need to get the brush corners in the shape's local space.\n\t\t\t\tconst geometry = this.editor.getShapeGeometry(shape)\n\n\t\t\t\tpageTransform = this.editor.getShapePageTransform(shape)\n\n\t\t\t\tif (!pageTransform) {\n\t\t\t\t\tcontinue testAllShapes\n\t\t\t\t}\n\n\t\t\t\t// Check whether any of the the brush edges intersect the shape\n\t\t\t\tlocalCorners = pageTransform.clone().invert().applyToPoints(corners)\n\n\t\t\t\thitTestBrushEdges: for (let i = 0; i < localCorners.length; i++) {\n\t\t\t\t\tA = localCorners[i]\n\t\t\t\t\tB = localCorners[(i + 1) % localCorners.length]\n\n\t\t\t\t\tif (geometry.hitTestLineSegment(A, B, HIT_TEST_MARGIN / zoomLevel)) {\n\t\t\t\t\t\tthis.handleHit(shape, currentPagePoint, currentPageId, results, corners)\n\t\t\t\t\t\tbreak hitTestBrushEdges\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.editor.updateInstanceState({ brush: { ...this.brush.toJson() } })\n\t\tthis.editor.setSelectedShapes(Array.from(results), { squashing: true })\n\t}\n\n\toverride onInterrupt: TLInterruptEvent = () => {\n\t\tthis.editor.updateInstanceState({ brush: null })\n\t}\n\n\tprivate handleHit(\n\t\tshape: TLShape,\n\t\tcurrentPagePoint: Vec2d,\n\t\tcurrentPageId: TLPageId,\n\t\tresults: Set<TLShapeId>,\n\t\tcorners: Vec2d[]\n\t) {\n\t\tif (shape.parentId === currentPageId) {\n\t\t\tresults.add(shape.id)\n\t\t\treturn\n\t\t}\n\n\t\t// Find the outermost selectable shape, check to see if it has a\n\t\t// page mask; and if so, check to see if the brush intersects it\n\t\tconst selectedShape = this.editor.getOutermostSelectableShape(shape)\n\t\tconst pageMask = this.editor.getShapeMask(selectedShape.id)\n\n\t\tif (\n\t\t\tpageMask &&\n\t\t\t!polygonsIntersect(pageMask, corners) &&\n\t\t\t!pointInPolygon(currentPagePoint, pageMask)\n\t\t) {\n\t\t\treturn\n\t\t}\n\n\t\tresults.add(selectedShape.id)\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["i"]
|
|
7
7
|
}
|
|
@@ -59,7 +59,7 @@ class Idle extends import_editor.StateNode {
|
|
|
59
59
|
switch (info.target) {
|
|
60
60
|
case "canvas": {
|
|
61
61
|
const hitShape = (0, import_getHitShapeOnCanvasPointerDown.getHitShapeOnCanvasPointerDown)(this.editor);
|
|
62
|
-
if (hitShape) {
|
|
62
|
+
if (hitShape && !hitShape.isLocked) {
|
|
63
63
|
this.onPointerDown({
|
|
64
64
|
...info,
|
|
65
65
|
shape: hitShape,
|
|
@@ -136,7 +136,7 @@ class Idle extends import_editor.StateNode {
|
|
|
136
136
|
}
|
|
137
137
|
default: {
|
|
138
138
|
const hoveredShape = this.editor.getHoveredShape();
|
|
139
|
-
if (hoveredShape && !this.editor.getSelectedShapeIds().includes(hoveredShape.id)) {
|
|
139
|
+
if (hoveredShape && !this.editor.getSelectedShapeIds().includes(hoveredShape.id) && !hoveredShape.isLocked) {
|
|
140
140
|
this.onPointerDown({
|
|
141
141
|
...info,
|
|
142
142
|
shape: hoveredShape,
|