js-draw 1.20.3 → 1.21.2
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +1 -1
- package/dist/Editor.css +136 -26
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -1
- package/dist/cjs/Editor.d.ts +27 -6
- package/dist/cjs/Editor.js +30 -8
- package/dist/cjs/SVGLoader/SVGLoader.js +2 -2
- package/dist/cjs/Viewport.d.ts +2 -2
- package/dist/cjs/commands/Command.d.ts +5 -0
- package/dist/cjs/commands/Command.js +5 -0
- package/dist/cjs/commands/SerializableCommand.d.ts +7 -0
- package/dist/cjs/commands/SerializableCommand.js +9 -0
- package/dist/cjs/dialogs/makeAboutDialog.d.ts +1 -1
- package/dist/cjs/dialogs/makeAboutDialog.js +10 -25
- package/dist/cjs/dialogs/makeMessageDialog.d.ts +11 -0
- package/dist/cjs/dialogs/makeMessageDialog.js +56 -0
- package/dist/cjs/image/EditorImage.d.ts +15 -1
- package/dist/cjs/image/EditorImage.js +15 -5
- package/dist/cjs/inputEvents.d.ts +10 -2
- package/dist/cjs/inputEvents.js +1 -0
- package/dist/cjs/localizations/es.js +3 -0
- package/dist/cjs/rendering/Display.d.ts +1 -0
- package/dist/cjs/rendering/Display.js +1 -0
- package/dist/cjs/rendering/TextRenderingStyle.d.ts +7 -6
- package/dist/cjs/rendering/TextRenderingStyle.js +1 -0
- package/dist/cjs/rendering/renderers/CanvasRenderer.d.ts +12 -3
- package/dist/cjs/rendering/renderers/CanvasRenderer.js +15 -2
- package/dist/cjs/rendering/renderers/DummyRenderer.d.ts +1 -1
- package/dist/cjs/testing/firstElementAncestorOfNode.d.ts +1 -1
- package/dist/cjs/testing/firstElementAncestorOfNode.js +1 -1
- package/dist/cjs/testing/sendPenEvent.d.ts +2 -2
- package/dist/cjs/testing/sendTouchEvent.d.ts +2 -2
- package/dist/cjs/toolbar/AbstractToolbar.d.ts +6 -1
- package/dist/cjs/toolbar/AbstractToolbar.js +6 -1
- package/dist/cjs/toolbar/IconProvider.d.ts +1 -1
- package/dist/cjs/toolbar/IconProvider.js +6 -1
- package/dist/cjs/toolbar/widgets/BaseWidget.d.ts +8 -0
- package/dist/cjs/toolbar/widgets/BaseWidget.js +8 -0
- package/dist/cjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
- package/dist/cjs/toolbar/widgets/HandToolWidget.js +1 -0
- package/dist/cjs/toolbar/widgets/InsertImageWidget/ImageWrapper.d.ts +1 -1
- package/dist/cjs/toolbar/widgets/PenToolWidget.d.ts +6 -0
- package/dist/cjs/toolbar/widgets/PenToolWidget.js +5 -0
- package/dist/cjs/types.d.ts +5 -0
- package/dist/cjs/types.js +1 -0
- package/dist/cjs/util/ClipboardHandler.d.ts +9 -1
- package/dist/cjs/util/ClipboardHandler.js +82 -24
- package/dist/cjs/version.js +1 -1
- package/dist/mjs/Editor.d.ts +27 -6
- package/dist/mjs/Editor.mjs +31 -9
- package/dist/mjs/SVGLoader/SVGLoader.mjs +2 -2
- package/dist/mjs/Viewport.d.ts +2 -2
- package/dist/mjs/commands/Command.d.ts +5 -0
- package/dist/mjs/commands/Command.mjs +5 -0
- package/dist/mjs/commands/SerializableCommand.d.ts +7 -0
- package/dist/mjs/commands/SerializableCommand.mjs +9 -0
- package/dist/mjs/dialogs/makeAboutDialog.d.ts +1 -1
- package/dist/mjs/dialogs/makeAboutDialog.mjs +7 -25
- package/dist/mjs/dialogs/makeMessageDialog.d.ts +11 -0
- package/dist/mjs/dialogs/makeMessageDialog.mjs +51 -0
- package/dist/mjs/image/EditorImage.d.ts +15 -1
- package/dist/mjs/image/EditorImage.mjs +15 -5
- package/dist/mjs/inputEvents.d.ts +10 -2
- package/dist/mjs/inputEvents.mjs +1 -0
- package/dist/mjs/localizations/es.mjs +3 -0
- package/dist/mjs/rendering/Display.d.ts +1 -0
- package/dist/mjs/rendering/Display.mjs +1 -0
- package/dist/mjs/rendering/TextRenderingStyle.d.ts +7 -6
- package/dist/mjs/rendering/TextRenderingStyle.mjs +1 -0
- package/dist/mjs/rendering/renderers/CanvasRenderer.d.ts +12 -3
- package/dist/mjs/rendering/renderers/CanvasRenderer.mjs +15 -2
- package/dist/mjs/rendering/renderers/DummyRenderer.d.ts +1 -1
- package/dist/mjs/testing/firstElementAncestorOfNode.d.ts +1 -1
- package/dist/mjs/testing/firstElementAncestorOfNode.mjs +1 -1
- package/dist/mjs/testing/sendPenEvent.d.ts +2 -2
- package/dist/mjs/testing/sendTouchEvent.d.ts +2 -2
- package/dist/mjs/toolbar/AbstractToolbar.d.ts +6 -1
- package/dist/mjs/toolbar/AbstractToolbar.mjs +6 -1
- package/dist/mjs/toolbar/IconProvider.d.ts +1 -1
- package/dist/mjs/toolbar/IconProvider.mjs +6 -1
- package/dist/mjs/toolbar/widgets/BaseWidget.d.ts +8 -0
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +8 -0
- package/dist/mjs/toolbar/widgets/HandToolWidget.d.ts +1 -0
- package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +1 -0
- package/dist/mjs/toolbar/widgets/InsertImageWidget/ImageWrapper.d.ts +1 -1
- package/dist/mjs/toolbar/widgets/PenToolWidget.d.ts +6 -0
- package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +5 -0
- package/dist/mjs/types.d.ts +5 -0
- package/dist/mjs/types.mjs +1 -0
- package/dist/mjs/util/ClipboardHandler.d.ts +9 -1
- package/dist/mjs/util/ClipboardHandler.mjs +82 -24
- package/dist/mjs/version.mjs +1 -1
- package/package.json +8 -9
- package/src/dialogs/dialogs.scss +9 -21
- package/src/dialogs/makeAboutDialog.scss +13 -33
- package/src/dialogs/makeMessageDialog.scss +46 -0
- package/dist/cjs/tools/BaseTool.d.ts +0 -60
- package/dist/cjs/tools/BaseTool.js +0 -174
- package/dist/cjs/tools/Eraser.d.ts +0 -56
- package/dist/cjs/tools/Eraser.js +0 -295
- package/dist/cjs/tools/Eraser.test.d.ts +0 -1
- package/dist/cjs/tools/FindTool.d.ts +0 -21
- package/dist/cjs/tools/FindTool.js +0 -137
- package/dist/cjs/tools/FindTool.test.d.ts +0 -1
- package/dist/cjs/tools/InputFilter/FunctionMapper.d.ts +0 -12
- package/dist/cjs/tools/InputFilter/FunctionMapper.js +0 -21
- package/dist/cjs/tools/InputFilter/InputMapper.d.ts +0 -23
- package/dist/cjs/tools/InputFilter/InputMapper.js +0 -38
- package/dist/cjs/tools/InputFilter/InputPipeline.d.ts +0 -15
- package/dist/cjs/tools/InputFilter/InputPipeline.js +0 -54
- package/dist/cjs/tools/InputFilter/InputPipeline.test.d.ts +0 -1
- package/dist/cjs/tools/InputFilter/InputStabilizer.d.ts +0 -29
- package/dist/cjs/tools/InputFilter/InputStabilizer.js +0 -181
- package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.d.ts +0 -21
- package/dist/cjs/tools/InputFilter/StrokeKeyboardControl.js +0 -84
- package/dist/cjs/tools/PanZoom.d.ts +0 -119
- package/dist/cjs/tools/PanZoom.js +0 -508
- package/dist/cjs/tools/PanZoom.test.d.ts +0 -1
- package/dist/cjs/tools/PasteHandler.d.ts +0 -23
- package/dist/cjs/tools/PasteHandler.js +0 -109
- package/dist/cjs/tools/Pen.d.ts +0 -53
- package/dist/cjs/tools/Pen.js +0 -318
- package/dist/cjs/tools/Pen.test.d.ts +0 -1
- package/dist/cjs/tools/PipetteTool.d.ts +0 -28
- package/dist/cjs/tools/PipetteTool.js +0 -69
- package/dist/cjs/tools/ScrollbarTool.d.ts +0 -18
- package/dist/cjs/tools/ScrollbarTool.js +0 -85
- package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -9
- package/dist/cjs/tools/SelectionTool/SelectAllShortcutHandler.js +0 -32
- package/dist/cjs/tools/SelectionTool/Selection.d.ts +0 -71
- package/dist/cjs/tools/SelectionTool/Selection.js +0 -620
- package/dist/cjs/tools/SelectionTool/SelectionHandle.d.ts +0 -62
- package/dist/cjs/tools/SelectionTool/SelectionHandle.js +0 -141
- package/dist/cjs/tools/SelectionTool/SelectionTool.d.ts +0 -40
- package/dist/cjs/tools/SelectionTool/SelectionTool.js +0 -494
- package/dist/cjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +0 -1
- package/dist/cjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
- package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.d.ts +0 -23
- package/dist/cjs/tools/SelectionTool/ToPointerAutoscroller.js +0 -83
- package/dist/cjs/tools/SelectionTool/TransformMode.d.ts +0 -42
- package/dist/cjs/tools/SelectionTool/TransformMode.js +0 -155
- package/dist/cjs/tools/SelectionTool/types.d.ts +0 -28
- package/dist/cjs/tools/SelectionTool/types.js +0 -14
- package/dist/cjs/tools/SoundUITool.d.ts +0 -26
- package/dist/cjs/tools/SoundUITool.js +0 -171
- package/dist/cjs/tools/TextTool.d.ts +0 -36
- package/dist/cjs/tools/TextTool.js +0 -285
- package/dist/cjs/tools/TextTool.test.d.ts +0 -1
- package/dist/cjs/tools/ToolController.d.ts +0 -73
- package/dist/cjs/tools/ToolController.js +0 -304
- package/dist/cjs/tools/ToolController.test.d.ts +0 -1
- package/dist/cjs/tools/ToolEnabledGroup.d.ts +0 -6
- package/dist/cjs/tools/ToolEnabledGroup.js +0 -13
- package/dist/cjs/tools/ToolSwitcherShortcut.d.ts +0 -16
- package/dist/cjs/tools/ToolSwitcherShortcut.js +0 -40
- package/dist/cjs/tools/ToolbarShortcutHandler.d.ts +0 -12
- package/dist/cjs/tools/ToolbarShortcutHandler.js +0 -34
- package/dist/cjs/tools/UndoRedoShortcut.d.ts +0 -8
- package/dist/cjs/tools/UndoRedoShortcut.js +0 -27
- package/dist/cjs/tools/UndoRedoShortcut.test.d.ts +0 -1
- package/dist/cjs/tools/keybindings.d.ts +0 -18
- package/dist/cjs/tools/keybindings.js +0 -49
- package/dist/cjs/tools/lib.d.ts +0 -14
- package/dist/cjs/tools/lib.js +0 -36
- package/dist/cjs/tools/localization.d.ts +0 -34
- package/dist/cjs/tools/localization.js +0 -36
- package/dist/cjs/tools/util/StationaryPenDetector.d.ts +0 -22
- package/dist/cjs/tools/util/StationaryPenDetector.js +0 -95
- package/dist/mjs/tools/BaseTool.d.ts +0 -60
- package/dist/mjs/tools/BaseTool.mjs +0 -172
- package/dist/mjs/tools/Eraser.d.ts +0 -56
- package/dist/mjs/tools/Eraser.mjs +0 -288
- package/dist/mjs/tools/Eraser.test.d.ts +0 -1
- package/dist/mjs/tools/FindTool.d.ts +0 -21
- package/dist/mjs/tools/FindTool.mjs +0 -131
- package/dist/mjs/tools/FindTool.test.d.ts +0 -1
- package/dist/mjs/tools/InputFilter/FunctionMapper.d.ts +0 -12
- package/dist/mjs/tools/InputFilter/FunctionMapper.mjs +0 -15
- package/dist/mjs/tools/InputFilter/InputMapper.d.ts +0 -23
- package/dist/mjs/tools/InputFilter/InputMapper.mjs +0 -36
- package/dist/mjs/tools/InputFilter/InputPipeline.d.ts +0 -15
- package/dist/mjs/tools/InputFilter/InputPipeline.mjs +0 -49
- package/dist/mjs/tools/InputFilter/InputPipeline.test.d.ts +0 -1
- package/dist/mjs/tools/InputFilter/InputStabilizer.d.ts +0 -29
- package/dist/mjs/tools/InputFilter/InputStabilizer.mjs +0 -175
- package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.d.ts +0 -21
- package/dist/mjs/tools/InputFilter/StrokeKeyboardControl.mjs +0 -78
- package/dist/mjs/tools/PanZoom.d.ts +0 -119
- package/dist/mjs/tools/PanZoom.mjs +0 -501
- package/dist/mjs/tools/PanZoom.test.d.ts +0 -1
- package/dist/mjs/tools/PasteHandler.d.ts +0 -23
- package/dist/mjs/tools/PasteHandler.mjs +0 -103
- package/dist/mjs/tools/Pen.d.ts +0 -53
- package/dist/mjs/tools/Pen.mjs +0 -312
- package/dist/mjs/tools/Pen.test.d.ts +0 -1
- package/dist/mjs/tools/PipetteTool.d.ts +0 -28
- package/dist/mjs/tools/PipetteTool.mjs +0 -63
- package/dist/mjs/tools/ScrollbarTool.d.ts +0 -18
- package/dist/mjs/tools/ScrollbarTool.mjs +0 -79
- package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.d.ts +0 -9
- package/dist/mjs/tools/SelectionTool/SelectAllShortcutHandler.mjs +0 -26
- package/dist/mjs/tools/SelectionTool/Selection.d.ts +0 -71
- package/dist/mjs/tools/SelectionTool/Selection.mjs +0 -592
- package/dist/mjs/tools/SelectionTool/SelectionHandle.d.ts +0 -62
- package/dist/mjs/tools/SelectionTool/SelectionHandle.mjs +0 -137
- package/dist/mjs/tools/SelectionTool/SelectionTool.d.ts +0 -40
- package/dist/mjs/tools/SelectionTool/SelectionTool.mjs +0 -488
- package/dist/mjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +0 -1
- package/dist/mjs/tools/SelectionTool/SelectionTool.test.d.ts +0 -1
- package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.d.ts +0 -23
- package/dist/mjs/tools/SelectionTool/ToPointerAutoscroller.mjs +0 -77
- package/dist/mjs/tools/SelectionTool/TransformMode.d.ts +0 -42
- package/dist/mjs/tools/SelectionTool/TransformMode.mjs +0 -146
- package/dist/mjs/tools/SelectionTool/types.d.ts +0 -28
- package/dist/mjs/tools/SelectionTool/types.mjs +0 -11
- package/dist/mjs/tools/SoundUITool.d.ts +0 -26
- package/dist/mjs/tools/SoundUITool.mjs +0 -165
- package/dist/mjs/tools/TextTool.d.ts +0 -36
- package/dist/mjs/tools/TextTool.mjs +0 -279
- package/dist/mjs/tools/TextTool.test.d.ts +0 -1
- package/dist/mjs/tools/ToolController.d.ts +0 -73
- package/dist/mjs/tools/ToolController.mjs +0 -275
- package/dist/mjs/tools/ToolController.test.d.ts +0 -1
- package/dist/mjs/tools/ToolEnabledGroup.d.ts +0 -6
- package/dist/mjs/tools/ToolEnabledGroup.mjs +0 -10
- package/dist/mjs/tools/ToolSwitcherShortcut.d.ts +0 -16
- package/dist/mjs/tools/ToolSwitcherShortcut.mjs +0 -34
- package/dist/mjs/tools/ToolbarShortcutHandler.d.ts +0 -12
- package/dist/mjs/tools/ToolbarShortcutHandler.mjs +0 -28
- package/dist/mjs/tools/UndoRedoShortcut.d.ts +0 -8
- package/dist/mjs/tools/UndoRedoShortcut.mjs +0 -21
- package/dist/mjs/tools/UndoRedoShortcut.test.d.ts +0 -1
- package/dist/mjs/tools/keybindings.d.ts +0 -18
- package/dist/mjs/tools/keybindings.mjs +0 -43
- package/dist/mjs/tools/lib.d.ts +0 -14
- package/dist/mjs/tools/lib.mjs +0 -14
- package/dist/mjs/tools/localization.d.ts +0 -34
- package/dist/mjs/tools/localization.mjs +0 -33
- package/dist/mjs/tools/util/StationaryPenDetector.d.ts +0 -22
- package/dist/mjs/tools/util/StationaryPenDetector.mjs +0 -92
- package/src/tools/FindTool.css +0 -7
- package/src/tools/ScrollbarTool.scss +0 -57
- package/src/tools/SelectionTool/SelectionTool.scss +0 -137
- package/src/tools/SoundUITool.scss +0 -22
- package/src/tools/tools.scss +0 -5
@@ -17,7 +17,8 @@ export declare enum InputEvtType {
|
|
17
17
|
KeyPressEvent = 5,
|
18
18
|
KeyUpEvent = 6,
|
19
19
|
CopyEvent = 7,
|
20
|
-
PasteEvent = 8
|
20
|
+
PasteEvent = 8,
|
21
|
+
ContextMenu = 9
|
21
22
|
}
|
22
23
|
export interface WheelEvt {
|
23
24
|
readonly kind: InputEvtType.WheelEvt;
|
@@ -76,18 +77,25 @@ export interface PointerMoveEvt extends PointerEvtBase {
|
|
76
77
|
export interface PointerUpEvt extends PointerEvtBase {
|
77
78
|
readonly kind: InputEvtType.PointerUpEvt;
|
78
79
|
}
|
80
|
+
export interface ContextMenuEvt {
|
81
|
+
readonly kind: InputEvtType.ContextMenu;
|
82
|
+
readonly screenPos: Point2;
|
83
|
+
readonly canvasPos: Point2;
|
84
|
+
}
|
79
85
|
/**
|
80
86
|
* An internal `js-draw` pointer event type.
|
81
87
|
*
|
82
88
|
* This **is not** the same as a DOM pointer event.
|
83
89
|
*/
|
84
90
|
export type PointerEvt = PointerDownEvt | PointerMoveEvt | PointerUpEvt;
|
91
|
+
/** The type of any internal {@link PointerEvt} record. */
|
92
|
+
export type PointerEvtType = InputEvtType.PointerDownEvt | InputEvtType.PointerMoveEvt | InputEvtType.PointerUpEvt;
|
85
93
|
/**
|
86
94
|
* An internal `js-draw` input event type.
|
87
95
|
*
|
88
96
|
* These are not DOM events.
|
89
97
|
*/
|
90
|
-
export type InputEvt = KeyPressEvent | KeyUpEvent | WheelEvt | GestureCancelEvt | PointerEvt | CopyEvent | PasteEvent;
|
98
|
+
export type InputEvt = KeyPressEvent | KeyUpEvent | WheelEvt | GestureCancelEvt | PointerEvt | CopyEvent | PasteEvent | ContextMenuEvt;
|
91
99
|
export declare const keyUpEventFromHTMLEvent: (event: KeyboardEvent) => KeyUpEvent;
|
92
100
|
export declare const keyPressEventFromHTMLEvent: (event: KeyboardEvent) => KeyPressEvent;
|
93
101
|
export declare const isPointerEvt: (event: InputEvt) => event is PointerEvt;
|
package/dist/mjs/inputEvents.mjs
CHANGED
@@ -9,6 +9,7 @@ export var InputEvtType;
|
|
9
9
|
InputEvtType[InputEvtType["KeyUpEvent"] = 6] = "KeyUpEvent";
|
10
10
|
InputEvtType[InputEvtType["CopyEvent"] = 7] = "CopyEvent";
|
11
11
|
InputEvtType[InputEvtType["PasteEvent"] = 8] = "PasteEvent";
|
12
|
+
InputEvtType[InputEvtType["ContextMenu"] = 9] = "ContextMenu";
|
12
13
|
})(InputEvtType || (InputEvtType = {}));
|
13
14
|
// Constructor
|
14
15
|
const keyEventFromHTMLEvent = (kind, event) => {
|
@@ -41,6 +41,9 @@ const localization = {
|
|
41
41
|
filledRectanglePen: 'Rectángulo sin borde',
|
42
42
|
lockRotation: 'Bloquea rotación',
|
43
43
|
paste: 'Pegar',
|
44
|
+
selectionMenu__paste: 'Pegar',
|
45
|
+
selectionMenu__delete: 'Eliminar',
|
46
|
+
selectionMenu__duplicate: 'Duplicar',
|
44
47
|
closeSidebar: (toolName) => `Close sidebar for ${toolName}`,
|
45
48
|
dropdownShown: (toolName) => `Menú por ${toolName} es visible`,
|
46
49
|
dropdownHidden: (toolName) => { return `Menú por ${toolName} fue ocultado`; },
|
@@ -22,10 +22,11 @@ export declare const cloneTextStyle: (style: TextRenderingStyle) => {
|
|
22
22
|
};
|
23
23
|
size: number;
|
24
24
|
fontFamily: string;
|
25
|
-
fontWeight?: string
|
26
|
-
fontStyle?: string
|
27
|
-
fontVariant?: string
|
25
|
+
fontWeight?: string;
|
26
|
+
fontStyle?: string;
|
27
|
+
fontVariant?: string;
|
28
28
|
};
|
29
|
+
/** `json` can either be a `string` or an `object`. */
|
29
30
|
export declare const textStyleFromJSON: (json: any) => TextRenderingStyle;
|
30
31
|
export declare const textStyleToJSON: (style: TextRenderingStyle) => {
|
31
32
|
renderingStyle: {
|
@@ -37,7 +38,7 @@ export declare const textStyleToJSON: (style: TextRenderingStyle) => {
|
|
37
38
|
};
|
38
39
|
size: number;
|
39
40
|
fontFamily: string;
|
40
|
-
fontWeight?: string
|
41
|
-
fontStyle?: string
|
42
|
-
fontVariant?: string
|
41
|
+
fontWeight?: string;
|
42
|
+
fontStyle?: string;
|
43
|
+
fontVariant?: string;
|
43
44
|
};
|
@@ -5,6 +5,7 @@ export const cloneTextStyle = (style) => {
|
|
5
5
|
renderingStyle: cloneStyle(style.renderingStyle),
|
6
6
|
};
|
7
7
|
};
|
8
|
+
/** `json` can either be a `string` or an `object`. */
|
8
9
|
export const textStyleFromJSON = (json) => {
|
9
10
|
if (typeof json === 'string') {
|
10
11
|
json = JSON.parse(json);
|
@@ -8,9 +8,15 @@ import RenderablePathSpec from '../RenderablePathSpec';
|
|
8
8
|
* Renders onto a `CanvasRenderingContext2D`.
|
9
9
|
*
|
10
10
|
* @example
|
11
|
-
* ```ts
|
12
|
-
*
|
11
|
+
* ```ts,runnable
|
12
|
+
* import {Editor,CanvasRenderer} from 'js-draw';
|
13
13
|
*
|
14
|
+
* // Create an editor and load initial data -- don't add to the body (hidden editor).
|
15
|
+
* const editor = new Editor(document.createElement('div'));
|
16
|
+
* await editor.loadFromSVG('<svg><path d="m0,0 l100,5 l-50,60 l30,20 z" fill="green"/></svg>');
|
17
|
+
* ---visible---
|
18
|
+
* // Given some editor.
|
19
|
+
* // Set up the canvas to be drawn onto.
|
14
20
|
* const canvas = document.createElement('canvas');
|
15
21
|
* const ctx = canvas.getContext('2d');
|
16
22
|
*
|
@@ -22,6 +28,9 @@ import RenderablePathSpec from '../RenderablePathSpec';
|
|
22
28
|
* // Render editor.image onto the renderer
|
23
29
|
* const renderer = new CanvasRenderer(ctx, viewport);
|
24
30
|
* editor.image.render(renderer, viewport);
|
31
|
+
*
|
32
|
+
* // Add the rendered canvas to the document.
|
33
|
+
* document.body.appendChild(canvas);
|
25
34
|
* ```
|
26
35
|
*/
|
27
36
|
export default class CanvasRenderer extends AbstractRenderer {
|
@@ -39,7 +48,7 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
39
48
|
*/
|
40
49
|
constructor(ctx: CanvasRenderingContext2D, viewport: Viewport);
|
41
50
|
private transformBy;
|
42
|
-
canRenderFromWithoutDataLoss(other: AbstractRenderer):
|
51
|
+
canRenderFromWithoutDataLoss(other: AbstractRenderer): other is CanvasRenderer;
|
43
52
|
renderFromOtherOfSameType(transformBy: Mat33, other: AbstractRenderer): void;
|
44
53
|
setDraftMode(draftMode: boolean): void;
|
45
54
|
displaySize(): Vec2;
|
@@ -6,9 +6,15 @@ import { visualEquivalent } from '../RenderablePathSpec.mjs';
|
|
6
6
|
* Renders onto a `CanvasRenderingContext2D`.
|
7
7
|
*
|
8
8
|
* @example
|
9
|
-
* ```ts
|
10
|
-
*
|
9
|
+
* ```ts,runnable
|
10
|
+
* import {Editor,CanvasRenderer} from 'js-draw';
|
11
11
|
*
|
12
|
+
* // Create an editor and load initial data -- don't add to the body (hidden editor).
|
13
|
+
* const editor = new Editor(document.createElement('div'));
|
14
|
+
* await editor.loadFromSVG('<svg><path d="m0,0 l100,5 l-50,60 l30,20 z" fill="green"/></svg>');
|
15
|
+
* ---visible---
|
16
|
+
* // Given some editor.
|
17
|
+
* // Set up the canvas to be drawn onto.
|
12
18
|
* const canvas = document.createElement('canvas');
|
13
19
|
* const ctx = canvas.getContext('2d');
|
14
20
|
*
|
@@ -20,6 +26,9 @@ import { visualEquivalent } from '../RenderablePathSpec.mjs';
|
|
20
26
|
* // Render editor.image onto the renderer
|
21
27
|
* const renderer = new CanvasRenderer(ctx, viewport);
|
22
28
|
* editor.image.render(renderer, viewport);
|
29
|
+
*
|
30
|
+
* // Add the rendered canvas to the document.
|
31
|
+
* document.body.appendChild(canvas);
|
23
32
|
* ```
|
24
33
|
*/
|
25
34
|
export default class CanvasRenderer extends AbstractRenderer {
|
@@ -171,6 +180,10 @@ export default class CanvasRenderer extends AbstractRenderer {
|
|
171
180
|
this.ctx.restore();
|
172
181
|
}
|
173
182
|
drawImage(image) {
|
183
|
+
// .drawImage can fail for zero-size images.
|
184
|
+
if (image.image.width === 0 || image.image.height === 0) {
|
185
|
+
return;
|
186
|
+
}
|
174
187
|
this.ctx.save();
|
175
188
|
const transform = this.getCanvasToScreenTransform().rightMul(image.transform);
|
176
189
|
this.transformBy(transform);
|
@@ -27,7 +27,7 @@ export default class DummyRenderer extends AbstractRenderer {
|
|
27
27
|
startObject(boundingBox: Rect2, _clip: boolean): void;
|
28
28
|
endObject(): void;
|
29
29
|
isTooSmallToRender(_rect: Rect2): boolean;
|
30
|
-
canRenderFromWithoutDataLoss(other: AbstractRenderer):
|
30
|
+
canRenderFromWithoutDataLoss(other: AbstractRenderer): other is DummyRenderer;
|
31
31
|
renderFromOtherOfSameType(transform: Mat33, other: AbstractRenderer): void;
|
32
32
|
toString(): string;
|
33
33
|
}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
/** Returns the first ancestor of the given node that is an HTMLElement */
|
1
|
+
/** Returns the first ancestor of the given node (or the node itself) that is an HTMLElement */
|
2
2
|
declare const firstElementAncestorOfNode: (node: Node | null) => HTMLElement | null;
|
3
3
|
export default firstElementAncestorOfNode;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/** Returns the first ancestor of the given node that is an HTMLElement */
|
1
|
+
/** Returns the first ancestor of the given node (or the node itself) that is an HTMLElement */
|
2
2
|
const firstElementAncestorOfNode = (node) => {
|
3
3
|
if (node instanceof HTMLElement) {
|
4
4
|
return node;
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import Editor from '../Editor';
|
2
2
|
import { Point2 } from '@js-draw/math';
|
3
3
|
import Pointer, { PointerDevice } from '../Pointer';
|
4
|
-
import {
|
4
|
+
import { PointerEvtType } from '../inputEvents';
|
5
5
|
/**
|
6
6
|
* Dispatch a pen event to the currently selected tool.
|
7
7
|
* Intended for unit tests.
|
8
8
|
*
|
9
9
|
* @see {@link sendTouchEvent}
|
10
10
|
*/
|
11
|
-
declare const sendPenEvent: (editor: Editor, eventType:
|
11
|
+
declare const sendPenEvent: (editor: Editor, eventType: PointerEvtType, point: Point2, allPointers?: Pointer[], deviceType?: PointerDevice) => Pointer;
|
12
12
|
export default sendPenEvent;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import Editor from '../Editor';
|
2
2
|
import { Vec2 } from '@js-draw/math';
|
3
3
|
import Pointer from '../Pointer';
|
4
|
-
import {
|
4
|
+
import { PointerEvtType } from '../inputEvents';
|
5
5
|
/**
|
6
6
|
* Dispatch a touch event to the currently selected tool. Intended for unit tests.
|
7
7
|
*
|
@@ -38,5 +38,5 @@ import { InputEvtType } from '../inputEvents';
|
|
38
38
|
* }
|
39
39
|
* ```
|
40
40
|
*/
|
41
|
-
declare const sendTouchEvent: (editor: Editor, eventType:
|
41
|
+
declare const sendTouchEvent: (editor: Editor, eventType: PointerEvtType, screenPos: Vec2, allOtherPointers?: Pointer[]) => Pointer;
|
42
42
|
export default sendTouchEvent;
|
@@ -13,6 +13,11 @@ export type ToolbarActionButtonOptions = {
|
|
13
13
|
mustBeToplevel?: boolean;
|
14
14
|
autoDisableInReadOnlyEditors?: boolean;
|
15
15
|
};
|
16
|
+
/**
|
17
|
+
* Abstract base class for js-draw editor toolbars.
|
18
|
+
*
|
19
|
+
* See {@link Editor.addToolbar}, {@link makeDropdownToolbar}, and {@link makeEdgeToolbar}.
|
20
|
+
*/
|
16
21
|
export default abstract class AbstractToolbar {
|
17
22
|
#private;
|
18
23
|
protected editor: Editor;
|
@@ -82,7 +87,7 @@ export default abstract class AbstractToolbar {
|
|
82
87
|
* Called by `serializeState` to attach any additional JSONifyable data
|
83
88
|
* to the serialized result.
|
84
89
|
*
|
85
|
-
* @
|
90
|
+
* @returns an object that can be converted to JSON with `JSON.stringify`.
|
86
91
|
*/
|
87
92
|
protected serializeInternal(): any;
|
88
93
|
/**
|
@@ -31,6 +31,11 @@ import { Color4 } from '@js-draw/math';
|
|
31
31
|
import { toolbarCSSPrefix } from './constants.mjs';
|
32
32
|
import SaveActionWidget from './widgets/SaveActionWidget.mjs';
|
33
33
|
import ExitActionWidget from './widgets/ExitActionWidget.mjs';
|
34
|
+
/**
|
35
|
+
* Abstract base class for js-draw editor toolbars.
|
36
|
+
*
|
37
|
+
* See {@link Editor.addToolbar}, {@link makeDropdownToolbar}, and {@link makeEdgeToolbar}.
|
38
|
+
*/
|
34
39
|
class AbstractToolbar {
|
35
40
|
/** @internal */
|
36
41
|
constructor(editor, localizationTable = defaultToolbarLocalization) {
|
@@ -217,7 +222,7 @@ class AbstractToolbar {
|
|
217
222
|
* Called by `serializeState` to attach any additional JSONifyable data
|
218
223
|
* to the serialized result.
|
219
224
|
*
|
220
|
-
* @
|
225
|
+
* @returns an object that can be converted to JSON with `JSON.stringify`.
|
221
226
|
*/
|
222
227
|
serializeInternal() { }
|
223
228
|
/**
|
@@ -63,7 +63,7 @@ export default class IconProvider {
|
|
63
63
|
/** Renamed to {@link makeResizeImageToSelectionIcon} @deprecated */
|
64
64
|
makeResizeViewportIcon(): IconElemType;
|
65
65
|
makeDuplicateSelectionIcon(): IconElemType;
|
66
|
-
|
66
|
+
makeCopyIcon(): IconElemType;
|
67
67
|
makePasteIcon(): IconElemType;
|
68
68
|
makeDeleteSelectionIcon(): IconElemType;
|
69
69
|
makeCloseIcon(): IconElemType;
|
@@ -705,7 +705,12 @@ class IconProvider {
|
|
705
705
|
M 10,25 10,90 70,90 70,60 40,60 40,25 10,25 z
|
706
706
|
`);
|
707
707
|
}
|
708
|
-
|
708
|
+
makeCopyIcon() {
|
709
|
+
return this.makeIconFromPath(`
|
710
|
+
M 45,10 45,55 90,55 90,10 45,10 z
|
711
|
+
M 10,25 10,90 70,90 70,60 40,60 40,25 10,25 z
|
712
|
+
`);
|
713
|
+
}
|
709
714
|
makePasteIcon() {
|
710
715
|
const icon = this.makeIconFromPath(`
|
711
716
|
M 50 0 L 50 5 L 35 5 L 40 24.75 L 20 25 L 20 100 L 85 100 L 100 90 L 100 24 L 75.1 24.3 L 80 5 L 65 5 L 65 0 L 50 0 z
|
@@ -13,6 +13,14 @@ export declare enum ToolbarWidgetTag {
|
|
13
13
|
Undo = "undo",
|
14
14
|
Redo = "redo"
|
15
15
|
}
|
16
|
+
/**
|
17
|
+
* The `abstract` base class for items that can be shown in a `js-draw` toolbar. See also {@link AbstractToolbar.addWidget}.
|
18
|
+
*
|
19
|
+
* See [the custom tool example](https://github.com/personalizedrefrigerator/js-draw/blob/main/docs/examples/example-custom-tools/example.ts)
|
20
|
+
* for how to create a custom toolbar widget for a tool.
|
21
|
+
*
|
22
|
+
* For custom action buttons, {@link AbstractToolbar.addActionButton} may be sufficient for most use cases.
|
23
|
+
*/
|
16
24
|
export default abstract class BaseWidget {
|
17
25
|
#private;
|
18
26
|
protected editor: Editor;
|
@@ -26,6 +26,14 @@ export var ToolbarWidgetTag;
|
|
26
26
|
ToolbarWidgetTag["Undo"] = "undo";
|
27
27
|
ToolbarWidgetTag["Redo"] = "redo";
|
28
28
|
})(ToolbarWidgetTag || (ToolbarWidgetTag = {}));
|
29
|
+
/**
|
30
|
+
* The `abstract` base class for items that can be shown in a `js-draw` toolbar. See also {@link AbstractToolbar.addWidget}.
|
31
|
+
*
|
32
|
+
* See [the custom tool example](https://github.com/personalizedrefrigerator/js-draw/blob/main/docs/examples/example-custom-tools/example.ts)
|
33
|
+
* for how to create a custom toolbar widget for a tool.
|
34
|
+
*
|
35
|
+
* For custom action buttons, {@link AbstractToolbar.addActionButton} may be sufficient for most use cases.
|
36
|
+
*/
|
29
37
|
class BaseWidget {
|
30
38
|
constructor(editor, id, localizationTable) {
|
31
39
|
_BaseWidget_instances.add(this);
|
@@ -4,6 +4,7 @@ import { ToolbarLocalization } from '../localization';
|
|
4
4
|
import BaseToolWidget from './BaseToolWidget';
|
5
5
|
import { SavedToolbuttonState } from './BaseWidget';
|
6
6
|
import HelpDisplay from '../utils/HelpDisplay';
|
7
|
+
/** This toolbar widget allows controlling the editor's {@link PanZoom} tool(s). */
|
7
8
|
export default class HandToolWidget extends BaseToolWidget {
|
8
9
|
private allowTogglingBaseTool;
|
9
10
|
protected overridePanZoomTool: PanZoom;
|
@@ -102,6 +102,7 @@ class HandModeWidget extends BaseWidget {
|
|
102
102
|
return this.helpText;
|
103
103
|
}
|
104
104
|
}
|
105
|
+
/** This toolbar widget allows controlling the editor's {@link PanZoom} tool(s). */
|
105
106
|
export default class HandToolWidget extends BaseToolWidget {
|
106
107
|
constructor(editor,
|
107
108
|
// Can either be the primary pan/zoom tool (in the primary tools list) or
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { RenderableImage } from '
|
1
|
+
import { RenderableImage } from '../../../rendering/renderers/AbstractRenderer';
|
2
2
|
/** Handles filtering and other operations on an image. */
|
3
3
|
export declare class ImageWrapper {
|
4
4
|
private imageBase64Url;
|
@@ -6,12 +6,18 @@ import { ToolbarLocalization } from '../localization';
|
|
6
6
|
import BaseToolWidget from './BaseToolWidget';
|
7
7
|
import { SavedToolbuttonState } from './BaseWidget';
|
8
8
|
import HelpDisplay from '../utils/HelpDisplay';
|
9
|
+
/** Represents a style that can be applied to a pen tool. */
|
9
10
|
export interface PenTypeRecord {
|
10
11
|
name: string;
|
11
12
|
id: string;
|
12
13
|
isShapeBuilder?: boolean;
|
13
14
|
factory: ComponentBuilderFactory;
|
14
15
|
}
|
16
|
+
/**
|
17
|
+
* This toolbar widget allows a user to control a single {@link Pen} tool.
|
18
|
+
*
|
19
|
+
* See also {@link AbstractToolbar.addDefaultToolWidgets}.
|
20
|
+
*/
|
15
21
|
export default class PenToolWidget extends BaseToolWidget {
|
16
22
|
private tool;
|
17
23
|
private updateInputs;
|
@@ -13,6 +13,11 @@ import { toolbarCSSPrefix } from '../constants.mjs';
|
|
13
13
|
import makeThicknessSlider from './components/makeThicknessSlider.mjs';
|
14
14
|
import makeGridSelector from './components/makeGridSelector.mjs';
|
15
15
|
import { makePolylineBuilder } from '../../components/builders/PolylineBuilder.mjs';
|
16
|
+
/**
|
17
|
+
* This toolbar widget allows a user to control a single {@link Pen} tool.
|
18
|
+
*
|
19
|
+
* See also {@link AbstractToolbar.addDefaultToolWidgets}.
|
20
|
+
*/
|
16
21
|
class PenToolWidget extends BaseToolWidget {
|
17
22
|
constructor(editor, tool, localization) {
|
18
23
|
super(editor, tool, 'pen', localization);
|
package/dist/mjs/types.d.ts
CHANGED
@@ -4,7 +4,12 @@ import type BaseTool from './tools/BaseTool';
|
|
4
4
|
import type AbstractComponent from './components/AbstractComponent';
|
5
5
|
import type Command from './commands/Command';
|
6
6
|
import type { WidgetContentLayoutManager } from './toolbar/widgets/layout/types';
|
7
|
+
/**
|
8
|
+
* The type of the {@link Editor.notifier}, which provides notifications for
|
9
|
+
* various editor-related events.
|
10
|
+
*/
|
7
11
|
export type EditorNotifier = EventDispatcher<EditorEventType, EditorEventDataType>;
|
12
|
+
/** @see {@link EditorNotifier} */
|
8
13
|
export declare enum EditorEventType {
|
9
14
|
ToolEnabled = 0,
|
10
15
|
ToolDisabled = 1,
|
package/dist/mjs/types.mjs
CHANGED
@@ -1,4 +1,8 @@
|
|
1
1
|
import { Editor } from '../Editor';
|
2
|
+
interface Callbacks {
|
3
|
+
onPasteError(error: Error | unknown): void;
|
4
|
+
onCopyError(error: Error | unknown): void;
|
5
|
+
}
|
2
6
|
/**
|
3
7
|
* Handles conversion between the browser clipboard APIs and internal
|
4
8
|
* js-draw clipboard events.
|
@@ -6,7 +10,8 @@ import { Editor } from '../Editor';
|
|
6
10
|
export default class ClipboardHandler {
|
7
11
|
#private;
|
8
12
|
private editor;
|
9
|
-
|
13
|
+
private callbacks?;
|
14
|
+
constructor(editor: Editor, callbacks?: Callbacks | undefined);
|
10
15
|
/**
|
11
16
|
* Pastes data from the clipboard into the editor associated with
|
12
17
|
* this handler.
|
@@ -16,6 +21,7 @@ export default class ClipboardHandler {
|
|
16
21
|
* @returns true if the paste event was handled by the editor.
|
17
22
|
*/
|
18
23
|
paste(event?: DragEvent | ClipboardEvent): Promise<boolean>;
|
24
|
+
private pasteInternal;
|
19
25
|
/**
|
20
26
|
* Copies text from the editor associated with this.
|
21
27
|
*
|
@@ -24,4 +30,6 @@ export default class ClipboardHandler {
|
|
24
30
|
* images.
|
25
31
|
*/
|
26
32
|
copy(event?: ClipboardEvent): Promise<void>;
|
33
|
+
private copyInternal;
|
27
34
|
}
|
35
|
+
export {};
|
@@ -20,8 +20,9 @@ mime.endsWith('+xml') || mime.startsWith('text/');
|
|
20
20
|
* js-draw clipboard events.
|
21
21
|
*/
|
22
22
|
class ClipboardHandler {
|
23
|
-
constructor(editor) {
|
23
|
+
constructor(editor, callbacks) {
|
24
24
|
this.editor = editor;
|
25
|
+
this.callbacks = callbacks;
|
25
26
|
_ClipboardHandler_preferClipboardEvents.set(this, false);
|
26
27
|
}
|
27
28
|
/**
|
@@ -32,7 +33,27 @@ class ClipboardHandler {
|
|
32
33
|
* `navigator.clipboard` will be used instead.
|
33
34
|
* @returns true if the paste event was handled by the editor.
|
34
35
|
*/
|
35
|
-
|
36
|
+
paste(event) {
|
37
|
+
const onError = (error) => {
|
38
|
+
if (this.callbacks?.onPasteError) {
|
39
|
+
this.callbacks.onPasteError(error);
|
40
|
+
return Promise.resolve(false);
|
41
|
+
}
|
42
|
+
else {
|
43
|
+
throw error;
|
44
|
+
}
|
45
|
+
};
|
46
|
+
try {
|
47
|
+
// Use .catch rather than `async` to prevent future modifications from
|
48
|
+
// moving clipboard handling logic out of user event handlers.
|
49
|
+
// In the past, `await`s have caused permissions issues in some browsers.
|
50
|
+
return this.pasteInternal(event).catch(onError);
|
51
|
+
}
|
52
|
+
catch (error) {
|
53
|
+
return onError(error);
|
54
|
+
}
|
55
|
+
}
|
56
|
+
async pasteInternal(event) {
|
36
57
|
const editor = this.editor;
|
37
58
|
const clipboardData = event?.dataTransfer ?? event?.clipboardData ?? null;
|
38
59
|
const hasEvent = !!clipboardData;
|
@@ -131,45 +152,82 @@ class ClipboardHandler {
|
|
131
152
|
* images.
|
132
153
|
*/
|
133
154
|
copy(event) {
|
134
|
-
const
|
155
|
+
const onError = (error) => {
|
156
|
+
if (this.callbacks?.onCopyError) {
|
157
|
+
this.callbacks.onCopyError(error);
|
158
|
+
return Promise.resolve();
|
159
|
+
}
|
160
|
+
else {
|
161
|
+
throw error;
|
162
|
+
}
|
163
|
+
};
|
164
|
+
try {
|
165
|
+
// As above, use `.catch` to be certain that certain copyInternal
|
166
|
+
// is run now, before returning.
|
167
|
+
return this.copyInternal(event).catch(onError);
|
168
|
+
}
|
169
|
+
catch (error) {
|
170
|
+
return onError(error);
|
171
|
+
}
|
172
|
+
}
|
173
|
+
copyInternal(event) {
|
174
|
+
const mimeToData = new Map();
|
135
175
|
if (this.editor.toolController.dispatchInputEvent({
|
136
176
|
kind: InputEvtType.CopyEvent,
|
137
177
|
setData: (mime, data) => {
|
138
|
-
mimeToData
|
178
|
+
mimeToData.set(mime, data);
|
139
179
|
},
|
140
180
|
})) {
|
141
181
|
event?.preventDefault();
|
142
182
|
}
|
143
|
-
const mimeTypes =
|
183
|
+
const mimeTypes = [...mimeToData.keys()];
|
144
184
|
const hasNonTextMimeTypes = mimeTypes.some(mime => !isTextMimeType(mime));
|
145
|
-
const copyToEvent = () => {
|
185
|
+
const copyToEvent = (reason) => {
|
146
186
|
if (!event) {
|
147
|
-
throw new Error(
|
187
|
+
throw new Error(`Unable to copy -- no event provided${reason ? `. Original error: ${reason}` : ''}`);
|
148
188
|
}
|
149
|
-
for (const key
|
150
|
-
const value = mimeToData[key];
|
189
|
+
for (const [key, value] of mimeToData.entries()) {
|
151
190
|
if (typeof value === 'string') {
|
152
191
|
event.clipboardData?.setData(key, value);
|
153
192
|
}
|
154
193
|
}
|
155
194
|
};
|
156
195
|
const copyToClipboardApi = () => {
|
157
|
-
const
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
196
|
+
const mapInternalDataToBrowserData = (originalMimeToData) => {
|
197
|
+
const mappedMimeToData = Object.create(null);
|
198
|
+
for (const [key, data] of originalMimeToData.entries()) {
|
199
|
+
if (typeof data === 'string') {
|
200
|
+
const loadedData = new Blob([new TextEncoder().encode(data)], { type: key });
|
201
|
+
mappedMimeToData[key] = loadedData;
|
202
|
+
}
|
203
|
+
else {
|
204
|
+
mappedMimeToData[key] = data;
|
205
|
+
}
|
206
|
+
// Different platforms have varying support for different clipboard MIME types:
|
207
|
+
// - As of September 2024, image/svg+xml is unsupported on iOS
|
208
|
+
// - text/html is unsupported on Chrome/Android (and perhaps Chrome on other platforms).
|
209
|
+
// - See https://issues.chromium.org/issues/40851502
|
210
|
+
if (key === 'image/svg+xml') {
|
211
|
+
mappedMimeToData['text/html'] ??= mappedMimeToData[key];
|
212
|
+
}
|
167
213
|
}
|
168
|
-
|
169
|
-
|
214
|
+
return mappedMimeToData;
|
215
|
+
};
|
216
|
+
const removeUnsupportedMime = (originalMimeToData) => {
|
217
|
+
const filteredMimeToData = Object.create(null);
|
218
|
+
for (const [key, data] of Object.entries(originalMimeToData)) {
|
219
|
+
// Browser support for ClipboardItem.supports is limited as of mid 2024. However, some browsers
|
220
|
+
// that do support `.supports` throw an exception when attempting to copy an unsupported MIME type
|
221
|
+
// (e.g. Firefox).
|
222
|
+
const unsupported = 'supports' in ClipboardItem && typeof ClipboardItem.supports === 'function' && !ClipboardItem.supports(key);
|
223
|
+
if (!unsupported) {
|
224
|
+
filteredMimeToData[key] = data;
|
225
|
+
}
|
170
226
|
}
|
171
|
-
|
172
|
-
|
227
|
+
return filteredMimeToData;
|
228
|
+
};
|
229
|
+
const browserMimeToData = removeUnsupportedMime(mapInternalDataToBrowserData(mimeToData));
|
230
|
+
return navigator.clipboard.write([new ClipboardItem(browserMimeToData)]);
|
173
231
|
};
|
174
232
|
const supportsClipboardApi = (typeof ClipboardItem !== 'undefined'
|
175
233
|
&& typeof navigator?.clipboard?.write !== 'undefined');
|
@@ -178,7 +236,7 @@ class ClipboardHandler {
|
|
178
236
|
const fallBackToCopyEvent = (reason) => {
|
179
237
|
console.warn('Unable to copy to the clipboard API. Future calls to .copy will use ClipboardEvents if possible.', reason);
|
180
238
|
__classPrivateFieldSet(this, _ClipboardHandler_preferClipboardEvents, true, "f");
|
181
|
-
copyToEvent();
|
239
|
+
copyToEvent(reason);
|
182
240
|
};
|
183
241
|
try {
|
184
242
|
clipboardApiPromise = copyToClipboardApi();
|
package/dist/mjs/version.mjs
CHANGED