|
@@ -4092,116 +4092,112 @@ class App extends React.Component<AppProps, AppState> {
|
|
|
actionToggleStats,
|
|
|
];
|
|
|
|
|
|
- ContextMenu.push({
|
|
|
- options: viewModeOptions,
|
|
|
- top,
|
|
|
- left,
|
|
|
- actionManager: this.actionManager,
|
|
|
- appState: this.state,
|
|
|
- container: this.excalidrawContainerRef.current!,
|
|
|
- });
|
|
|
-
|
|
|
if (this.state.viewModeEnabled) {
|
|
|
- return;
|
|
|
+ ContextMenu.push({
|
|
|
+ options: viewModeOptions,
|
|
|
+ top,
|
|
|
+ left,
|
|
|
+ actionManager: this.actionManager,
|
|
|
+ appState: this.state,
|
|
|
+ container: this.excalidrawContainerRef.current!,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ ContextMenu.push({
|
|
|
+ options: [
|
|
|
+ this.isMobile &&
|
|
|
+ navigator.clipboard && {
|
|
|
+ name: "paste",
|
|
|
+ perform: (elements, appStates) => {
|
|
|
+ this.pasteFromClipboard(null);
|
|
|
+ return {
|
|
|
+ commitToHistory: false,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ contextItemLabel: "labels.paste",
|
|
|
+ },
|
|
|
+ this.isMobile && navigator.clipboard && separator,
|
|
|
+ probablySupportsClipboardBlob &&
|
|
|
+ elements.length > 0 &&
|
|
|
+ actionCopyAsPng,
|
|
|
+ probablySupportsClipboardWriteText &&
|
|
|
+ elements.length > 0 &&
|
|
|
+ actionCopyAsSvg,
|
|
|
+ ((probablySupportsClipboardBlob && elements.length > 0) ||
|
|
|
+ (probablySupportsClipboardWriteText && elements.length > 0)) &&
|
|
|
+ separator,
|
|
|
+ actionSelectAll,
|
|
|
+ separator,
|
|
|
+ typeof this.props.gridModeEnabled === "undefined" &&
|
|
|
+ actionToggleGridMode,
|
|
|
+ typeof this.props.zenModeEnabled === "undefined" &&
|
|
|
+ actionToggleZenMode,
|
|
|
+ typeof this.props.viewModeEnabled === "undefined" &&
|
|
|
+ actionToggleViewMode,
|
|
|
+ actionToggleStats,
|
|
|
+ ],
|
|
|
+ top,
|
|
|
+ left,
|
|
|
+ actionManager: this.actionManager,
|
|
|
+ appState: this.state,
|
|
|
+ container: this.excalidrawContainerRef.current!,
|
|
|
+ });
|
|
|
}
|
|
|
-
|
|
|
- ContextMenu.push({
|
|
|
- options: [
|
|
|
- this.isMobile &&
|
|
|
- navigator.clipboard && {
|
|
|
- name: "paste",
|
|
|
- perform: (elements, appStates) => {
|
|
|
- this.pasteFromClipboard(null);
|
|
|
- return {
|
|
|
- commitToHistory: false,
|
|
|
- };
|
|
|
+ } else if (type === "element") {
|
|
|
+ if (this.state.viewModeEnabled) {
|
|
|
+ ContextMenu.push({
|
|
|
+ options: [navigator.clipboard && actionCopy, ...options],
|
|
|
+ top,
|
|
|
+ left,
|
|
|
+ actionManager: this.actionManager,
|
|
|
+ appState: this.state,
|
|
|
+ container: this.excalidrawContainerRef.current!,
|
|
|
+ });
|
|
|
+ } else {
|
|
|
+ ContextMenu.push({
|
|
|
+ options: [
|
|
|
+ this.isMobile && actionCut,
|
|
|
+ this.isMobile && navigator.clipboard && actionCopy,
|
|
|
+ this.isMobile &&
|
|
|
+ navigator.clipboard && {
|
|
|
+ name: "paste",
|
|
|
+ perform: (elements, appStates) => {
|
|
|
+ this.pasteFromClipboard(null);
|
|
|
+ return {
|
|
|
+ commitToHistory: false,
|
|
|
+ };
|
|
|
+ },
|
|
|
+ contextItemLabel: "labels.paste",
|
|
|
},
|
|
|
- contextItemLabel: "labels.paste",
|
|
|
- },
|
|
|
- this.isMobile && navigator.clipboard && separator,
|
|
|
- probablySupportsClipboardBlob &&
|
|
|
- elements.length > 0 &&
|
|
|
- actionCopyAsPng,
|
|
|
- probablySupportsClipboardWriteText &&
|
|
|
- elements.length > 0 &&
|
|
|
- actionCopyAsSvg,
|
|
|
- ((probablySupportsClipboardBlob && elements.length > 0) ||
|
|
|
- (probablySupportsClipboardWriteText && elements.length > 0)) &&
|
|
|
+ this.isMobile && separator,
|
|
|
+ ...options,
|
|
|
separator,
|
|
|
- actionSelectAll,
|
|
|
- separator,
|
|
|
- typeof this.props.gridModeEnabled === "undefined" &&
|
|
|
- actionToggleGridMode,
|
|
|
- typeof this.props.zenModeEnabled === "undefined" &&
|
|
|
- actionToggleZenMode,
|
|
|
- typeof this.props.viewModeEnabled === "undefined" &&
|
|
|
- actionToggleViewMode,
|
|
|
- actionToggleStats,
|
|
|
- ],
|
|
|
- top,
|
|
|
- left,
|
|
|
- actionManager: this.actionManager,
|
|
|
- appState: this.state,
|
|
|
- container: this.excalidrawContainerRef.current!,
|
|
|
- });
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (this.state.viewModeEnabled) {
|
|
|
- ContextMenu.push({
|
|
|
- options: [navigator.clipboard && actionCopy, ...options],
|
|
|
- top,
|
|
|
- left,
|
|
|
- actionManager: this.actionManager,
|
|
|
- appState: this.state,
|
|
|
- container: this.excalidrawContainerRef.current!,
|
|
|
- });
|
|
|
- return;
|
|
|
+ actionCopyStyles,
|
|
|
+ actionPasteStyles,
|
|
|
+ separator,
|
|
|
+ maybeGroupAction && actionGroup,
|
|
|
+ maybeUngroupAction && actionUngroup,
|
|
|
+ (maybeGroupAction || maybeUngroupAction) && separator,
|
|
|
+ actionAddToLibrary,
|
|
|
+ separator,
|
|
|
+ actionSendBackward,
|
|
|
+ actionBringForward,
|
|
|
+ actionSendToBack,
|
|
|
+ actionBringToFront,
|
|
|
+ separator,
|
|
|
+ maybeFlipHorizontal && actionFlipHorizontal,
|
|
|
+ maybeFlipVertical && actionFlipVertical,
|
|
|
+ (maybeFlipHorizontal || maybeFlipVertical) && separator,
|
|
|
+ actionDuplicateSelection,
|
|
|
+ actionDeleteSelected,
|
|
|
+ ],
|
|
|
+ top,
|
|
|
+ left,
|
|
|
+ actionManager: this.actionManager,
|
|
|
+ appState: this.state,
|
|
|
+ container: this.excalidrawContainerRef.current!,
|
|
|
+ });
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
- ContextMenu.push({
|
|
|
- options: [
|
|
|
- this.isMobile && actionCut,
|
|
|
- this.isMobile && navigator.clipboard && actionCopy,
|
|
|
- this.isMobile &&
|
|
|
- navigator.clipboard && {
|
|
|
- name: "paste",
|
|
|
- perform: (elements, appStates) => {
|
|
|
- this.pasteFromClipboard(null);
|
|
|
- return {
|
|
|
- commitToHistory: false,
|
|
|
- };
|
|
|
- },
|
|
|
- contextItemLabel: "labels.paste",
|
|
|
- },
|
|
|
- this.isMobile && separator,
|
|
|
- ...options,
|
|
|
- separator,
|
|
|
- actionCopyStyles,
|
|
|
- actionPasteStyles,
|
|
|
- separator,
|
|
|
- maybeGroupAction && actionGroup,
|
|
|
- maybeUngroupAction && actionUngroup,
|
|
|
- (maybeGroupAction || maybeUngroupAction) && separator,
|
|
|
- actionAddToLibrary,
|
|
|
- separator,
|
|
|
- actionSendBackward,
|
|
|
- actionBringForward,
|
|
|
- actionSendToBack,
|
|
|
- actionBringToFront,
|
|
|
- separator,
|
|
|
- maybeFlipHorizontal && actionFlipHorizontal,
|
|
|
- maybeFlipVertical && actionFlipVertical,
|
|
|
- (maybeFlipHorizontal || maybeFlipVertical) && separator,
|
|
|
- actionDuplicateSelection,
|
|
|
- actionDeleteSelected,
|
|
|
- ],
|
|
|
- top,
|
|
|
- left,
|
|
|
- actionManager: this.actionManager,
|
|
|
- appState: this.state,
|
|
|
- container: this.excalidrawContainerRef.current!,
|
|
|
- });
|
|
|
};
|
|
|
|
|
|
private handleWheel = withBatchedUpdates((event: WheelEvent) => {
|