js-draw 1.29.2 → 1.30.1
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/bundle.js +44 -34
- package/dist/cjs/Editor.d.ts +2 -2
- package/dist/cjs/Editor.js +16 -9
- package/dist/cjs/components/ImageComponent.js +1 -1
- package/dist/cjs/components/builders/FreehandLineBuilder.d.ts +5 -1
- package/dist/cjs/components/builders/FreehandLineBuilder.js +7 -4
- package/dist/cjs/components/builders/PolylineBuilder.d.ts +5 -1
- package/dist/cjs/components/builders/PolylineBuilder.js +7 -4
- package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -0
- package/dist/cjs/components/builders/PressureSensitiveFreehandLineBuilder.js +13 -10
- package/dist/cjs/components/builders/autocorrect/makeShapeFitAutocorrect.js +3 -0
- package/dist/cjs/components/builders/autocorrect/makeSnapToGridAutocorrect.js +3 -0
- package/dist/cjs/components/builders/types.d.ts +6 -0
- package/dist/cjs/dialogs/makeMessageDialog.js +5 -3
- package/dist/cjs/localizations/getLocalizationTable.js +2 -0
- package/dist/cjs/localizations/sk.d.ts +3 -0
- package/dist/cjs/localizations/sk.js +182 -0
- package/dist/cjs/rendering/Display.d.ts +2 -0
- package/dist/cjs/rendering/Display.js +13 -4
- package/dist/cjs/rendering/renderers/AbstractRenderer.d.ts +20 -1
- package/dist/cjs/rendering/renderers/AbstractRenderer.js +7 -0
- package/dist/cjs/rendering/renderers/AcceleratedInkingCanvasRenderer.d.ts +22 -0
- package/dist/cjs/rendering/renderers/AcceleratedInkingCanvasRenderer.js +50 -0
- package/dist/cjs/toolbar/EdgeToolbar.js +3 -2
- package/dist/cjs/toolbar/IconProvider.js +1 -1
- package/dist/cjs/toolbar/utils/HelpDisplay.js +7 -6
- package/dist/cjs/toolbar/widgets/BaseWidget.js +1 -1
- package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +5 -3
- package/dist/cjs/toolbar/widgets/HandToolWidget.js +4 -3
- package/dist/cjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.js +14 -11
- package/dist/cjs/toolbar/widgets/PenToolWidget.js +2 -1
- package/dist/cjs/toolbar/widgets/components/makeButtonGrid.js +3 -2
- package/dist/cjs/toolbar/widgets/components/makeColorInput.js +2 -1
- package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +2 -2
- package/dist/cjs/toolbar/widgets/components/makeSnappedList.js +1 -1
- package/dist/cjs/tools/FindTool.js +3 -2
- package/dist/cjs/tools/Pen.d.ts +2 -0
- package/dist/cjs/tools/Pen.js +24 -12
- package/dist/cjs/tools/SelectionTool/SelectionMenuShortcut.js +7 -2
- package/dist/cjs/tools/SoundUITool.js +6 -4
- package/dist/cjs/tools/util/createMenuOverlay.js +9 -7
- package/dist/cjs/util/dom/createButton.d.ts +7 -0
- package/dist/cjs/util/dom/createButton.js +20 -0
- package/dist/cjs/util/{createElement.d.ts → dom/createElement.d.ts} +3 -0
- package/dist/cjs/version.js +1 -1
- package/dist/mjs/Editor.d.ts +2 -2
- package/dist/mjs/Editor.mjs +16 -9
- package/dist/mjs/components/ImageComponent.mjs +1 -1
- package/dist/mjs/components/builders/FreehandLineBuilder.d.ts +5 -1
- package/dist/mjs/components/builders/FreehandLineBuilder.mjs +7 -4
- package/dist/mjs/components/builders/PolylineBuilder.d.ts +5 -1
- package/dist/mjs/components/builders/PolylineBuilder.mjs +7 -4
- package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.d.ts +1 -0
- package/dist/mjs/components/builders/PressureSensitiveFreehandLineBuilder.mjs +13 -10
- package/dist/mjs/components/builders/autocorrect/makeShapeFitAutocorrect.mjs +3 -0
- package/dist/mjs/components/builders/autocorrect/makeSnapToGridAutocorrect.mjs +3 -0
- package/dist/mjs/components/builders/types.d.ts +6 -0
- package/dist/mjs/dialogs/makeMessageDialog.mjs +5 -3
- package/dist/mjs/localizations/getLocalizationTable.mjs +2 -0
- package/dist/mjs/localizations/sk.d.ts +3 -0
- package/dist/mjs/localizations/sk.mjs +180 -0
- package/dist/mjs/rendering/Display.d.ts +2 -0
- package/dist/mjs/rendering/Display.mjs +13 -4
- package/dist/mjs/rendering/renderers/AbstractRenderer.d.ts +20 -1
- package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +7 -0
- package/dist/mjs/rendering/renderers/AcceleratedInkingCanvasRenderer.d.ts +22 -0
- package/dist/mjs/rendering/renderers/AcceleratedInkingCanvasRenderer.mjs +44 -0
- package/dist/mjs/toolbar/EdgeToolbar.mjs +3 -2
- package/dist/mjs/toolbar/IconProvider.mjs +1 -1
- package/dist/mjs/toolbar/utils/HelpDisplay.mjs +7 -6
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +1 -1
- package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +5 -3
- package/dist/mjs/toolbar/widgets/HandToolWidget.mjs +4 -3
- package/dist/mjs/toolbar/widgets/InsertImageWidget/InsertImageWidget.mjs +14 -11
- package/dist/mjs/toolbar/widgets/PenToolWidget.mjs +2 -1
- package/dist/mjs/toolbar/widgets/components/makeButtonGrid.mjs +3 -2
- package/dist/mjs/toolbar/widgets/components/makeColorInput.mjs +2 -1
- package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +2 -2
- package/dist/mjs/toolbar/widgets/components/makeSnappedList.mjs +1 -1
- package/dist/mjs/tools/FindTool.mjs +3 -2
- package/dist/mjs/tools/Pen.d.ts +2 -0
- package/dist/mjs/tools/Pen.mjs +24 -12
- package/dist/mjs/tools/SelectionTool/SelectionMenuShortcut.mjs +4 -2
- package/dist/mjs/tools/SoundUITool.mjs +6 -4
- package/dist/mjs/tools/util/createMenuOverlay.mjs +9 -7
- package/dist/mjs/util/dom/createButton.d.ts +7 -0
- package/dist/mjs/util/dom/createButton.mjs +15 -0
- package/dist/mjs/util/{createElement.d.ts → dom/createElement.d.ts} +3 -0
- package/dist/mjs/version.mjs +1 -1
- package/package.json +4 -4
- /package/dist/cjs/util/{addLongPressOrHoverCssClasses.d.ts → dom/addLongPressOrHoverCssClasses.d.ts} +0 -0
- /package/dist/cjs/util/{addLongPressOrHoverCssClasses.js → dom/addLongPressOrHoverCssClasses.js} +0 -0
- /package/dist/cjs/util/{cloneElementWithStyles.d.ts → dom/cloneElementWithStyles.d.ts} +0 -0
- /package/dist/cjs/util/{cloneElementWithStyles.js → dom/cloneElementWithStyles.js} +0 -0
- /package/dist/cjs/util/{createElement.js → dom/createElement.js} +0 -0
- /package/dist/cjs/util/{listenForKeyboardEventsFrom.d.ts → dom/listenForKeyboardEventsFrom.d.ts} +0 -0
- /package/dist/cjs/util/{listenForKeyboardEventsFrom.js → dom/listenForKeyboardEventsFrom.js} +0 -0
- /package/dist/cjs/util/{listenForLongPressOrHover.d.ts → dom/listenForLongPressOrHover.d.ts} +0 -0
- /package/dist/cjs/util/{listenForLongPressOrHover.js → dom/listenForLongPressOrHover.js} +0 -0
- /package/dist/cjs/util/{listenForLongPressOrHover.test.d.ts → dom/listenForLongPressOrHover.test.d.ts} +0 -0
- /package/dist/cjs/util/{stopPropagationOfScrollingWheelEvents.d.ts → dom/stopPropagationOfScrollingWheelEvents.d.ts} +0 -0
- /package/dist/cjs/util/{stopPropagationOfScrollingWheelEvents.js → dom/stopPropagationOfScrollingWheelEvents.js} +0 -0
- /package/dist/cjs/util/{waitForImageLoaded.d.ts → dom/waitForImageLoaded.d.ts} +0 -0
- /package/dist/cjs/util/{waitForImageLoaded.js → dom/waitForImageLoaded.js} +0 -0
- /package/dist/mjs/util/{addLongPressOrHoverCssClasses.d.ts → dom/addLongPressOrHoverCssClasses.d.ts} +0 -0
- /package/dist/mjs/util/{addLongPressOrHoverCssClasses.mjs → dom/addLongPressOrHoverCssClasses.mjs} +0 -0
- /package/dist/mjs/util/{cloneElementWithStyles.d.ts → dom/cloneElementWithStyles.d.ts} +0 -0
- /package/dist/mjs/util/{cloneElementWithStyles.mjs → dom/cloneElementWithStyles.mjs} +0 -0
- /package/dist/mjs/util/{createElement.mjs → dom/createElement.mjs} +0 -0
- /package/dist/mjs/util/{listenForKeyboardEventsFrom.d.ts → dom/listenForKeyboardEventsFrom.d.ts} +0 -0
- /package/dist/mjs/util/{listenForKeyboardEventsFrom.mjs → dom/listenForKeyboardEventsFrom.mjs} +0 -0
- /package/dist/mjs/util/{listenForLongPressOrHover.d.ts → dom/listenForLongPressOrHover.d.ts} +0 -0
- /package/dist/mjs/util/{listenForLongPressOrHover.mjs → dom/listenForLongPressOrHover.mjs} +0 -0
- /package/dist/mjs/util/{listenForLongPressOrHover.test.d.ts → dom/listenForLongPressOrHover.test.d.ts} +0 -0
- /package/dist/mjs/util/{stopPropagationOfScrollingWheelEvents.d.ts → dom/stopPropagationOfScrollingWheelEvents.d.ts} +0 -0
- /package/dist/mjs/util/{stopPropagationOfScrollingWheelEvents.mjs → dom/stopPropagationOfScrollingWheelEvents.mjs} +0 -0
- /package/dist/mjs/util/{waitForImageLoaded.d.ts → dom/waitForImageLoaded.d.ts} +0 -0
- /package/dist/mjs/util/{waitForImageLoaded.mjs → dom/waitForImageLoaded.mjs} +0 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
import { StrokeStyle } from '../RenderingStyle';
|
2
|
+
import { DraftInkPresenter } from './AbstractRenderer';
|
3
|
+
import CanvasRenderer from './CanvasRenderer';
|
4
|
+
import Viewport from '../../Viewport';
|
5
|
+
declare class CanvasInkPresenter implements DraftInkPresenter {
|
6
|
+
private viewport;
|
7
|
+
private enabled;
|
8
|
+
private presenter;
|
9
|
+
private style;
|
10
|
+
constructor(canvas: HTMLCanvasElement, viewport: Viewport);
|
11
|
+
setEnabled(pointerId: number, enabled: boolean): void;
|
12
|
+
updateStyle(style: StrokeStyle): void;
|
13
|
+
onEvent(event: PointerEvent): void;
|
14
|
+
}
|
15
|
+
/** A canvas that uses the web ink API for accelerated inking. */
|
16
|
+
export default class AcceleratedInkingCanvasRenderer extends CanvasRenderer {
|
17
|
+
private inkPresenter;
|
18
|
+
constructor(ctx: CanvasRenderingContext2D, viewport: Viewport);
|
19
|
+
getDraftInkPresenter(): CanvasInkPresenter;
|
20
|
+
onEvent(event: PointerEvent): void;
|
21
|
+
}
|
22
|
+
export {};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const CanvasRenderer_1 = __importDefault(require("./CanvasRenderer"));
|
7
|
+
class CanvasInkPresenter {
|
8
|
+
constructor(canvas, viewport) {
|
9
|
+
this.viewport = viewport;
|
10
|
+
this.enabled = new Map();
|
11
|
+
this.presenter = null;
|
12
|
+
this.style = { color: 'black', diameter: 2 };
|
13
|
+
if ('ink' in navigator && navigator.ink) {
|
14
|
+
const ink = navigator.ink;
|
15
|
+
ink.requestPresenter({ presentationArea: canvas }).then((presenter) => {
|
16
|
+
this.presenter = presenter;
|
17
|
+
});
|
18
|
+
}
|
19
|
+
}
|
20
|
+
setEnabled(pointerId, enabled) {
|
21
|
+
this.enabled.set(pointerId, enabled);
|
22
|
+
}
|
23
|
+
updateStyle(style) {
|
24
|
+
const colorString = style.color.toString();
|
25
|
+
// style.diameter must be a postive integer.
|
26
|
+
this.style = {
|
27
|
+
color: colorString,
|
28
|
+
diameter: Math.ceil(style.width / this.viewport.getSizeOfPixelOnCanvas()),
|
29
|
+
};
|
30
|
+
}
|
31
|
+
onEvent(event) {
|
32
|
+
if (this.presenter && this.enabled.get(event.pointerId) && event.isTrusted) {
|
33
|
+
this.presenter.updateInkTrailStartPoint(event, this.style);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
/** A canvas that uses the web ink API for accelerated inking. */
|
38
|
+
class AcceleratedInkingCanvasRenderer extends CanvasRenderer_1.default {
|
39
|
+
constructor(ctx, viewport) {
|
40
|
+
super(ctx, viewport);
|
41
|
+
this.inkPresenter = new CanvasInkPresenter(ctx.canvas, viewport);
|
42
|
+
}
|
43
|
+
getDraftInkPresenter() {
|
44
|
+
return this.inkPresenter;
|
45
|
+
}
|
46
|
+
onEvent(event) {
|
47
|
+
this.inkPresenter.onEvent(event);
|
48
|
+
}
|
49
|
+
}
|
50
|
+
exports.default = AcceleratedInkingCanvasRenderer;
|
@@ -9,8 +9,9 @@ const constants_1 = require("./constants");
|
|
9
9
|
const EdgeToolbarLayoutManager_1 = __importDefault(require("./widgets/layout/EdgeToolbarLayoutManager"));
|
10
10
|
const ReactiveValue_1 = require("../util/ReactiveValue");
|
11
11
|
const AbstractToolbar_1 = __importDefault(require("./AbstractToolbar"));
|
12
|
-
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../util/stopPropagationOfScrollingWheelEvents"));
|
12
|
+
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../util/dom/stopPropagationOfScrollingWheelEvents"));
|
13
13
|
const makeDraggable_1 = __importDefault(require("./utils/makeDraggable"));
|
14
|
+
const createButton_1 = __importDefault(require("../util/dom/createButton"));
|
14
15
|
/**
|
15
16
|
* Creates an `EdgeToolbar`.
|
16
17
|
*
|
@@ -92,7 +93,7 @@ class EdgeToolbar extends AbstractToolbar_1.default {
|
|
92
93
|
this.menuContainer.classList.remove(belowEdgeClassName);
|
93
94
|
}
|
94
95
|
});
|
95
|
-
this.closeButton =
|
96
|
+
this.closeButton = (0, createButton_1.default)();
|
96
97
|
this.closeButton.classList.add('drag-elem');
|
97
98
|
// The close button has default focus -- forward its events to the main editor so that keyboard
|
98
99
|
// shortcuts still work.
|
@@ -15,7 +15,7 @@ const Viewport_1 = __importDefault(require("../Viewport"));
|
|
15
15
|
const FreehandLineBuilder_1 = require("../components/builders/FreehandLineBuilder");
|
16
16
|
const PolylineBuilder_1 = require("../components/builders/PolylineBuilder");
|
17
17
|
const Eraser_1 = require("../tools/Eraser");
|
18
|
-
const createElement_1 = require("../util/createElement");
|
18
|
+
const createElement_1 = require("../util/dom/createElement");
|
19
19
|
const types_1 = require("../tools/SelectionTool/types");
|
20
20
|
const svgNamespace = 'http://www.w3.org/2000/svg';
|
21
21
|
let checkerboardIdCounter = 0;
|
@@ -12,8 +12,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const math_1 = require("@js-draw/math");
|
13
13
|
const makeDraggable_1 = __importDefault(require("./makeDraggable"));
|
14
14
|
const ReactiveValue_1 = require("../../util/ReactiveValue");
|
15
|
-
const cloneElementWithStyles_1 = __importDefault(require("../../util/cloneElementWithStyles"));
|
16
|
-
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../util/addLongPressOrHoverCssClasses"));
|
15
|
+
const cloneElementWithStyles_1 = __importDefault(require("../../util/dom/cloneElementWithStyles"));
|
16
|
+
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../util/dom/addLongPressOrHoverCssClasses"));
|
17
|
+
const createButton_1 = __importDefault(require("../../util/dom/createButton"));
|
17
18
|
/**
|
18
19
|
* Creates the main content of the help overlay.
|
19
20
|
*
|
@@ -219,7 +220,7 @@ class HelpDisplay {
|
|
219
220
|
}
|
220
221
|
};
|
221
222
|
const makeCloseButton = () => {
|
222
|
-
const closeButton =
|
223
|
+
const closeButton = (0, createButton_1.default)();
|
223
224
|
closeButton.classList.add('close-button');
|
224
225
|
closeButton.appendChild(this.context.icons.makeCloseIcon());
|
225
226
|
const label = this.context.localization.close;
|
@@ -278,8 +279,8 @@ class HelpDisplay {
|
|
278
279
|
const makeNavigationButtons = (navigation) => {
|
279
280
|
const navigationButtonContainer = document.createElement('div');
|
280
281
|
navigationButtonContainer.classList.add('navigation-buttons');
|
281
|
-
const nextButton =
|
282
|
-
const previousButton =
|
282
|
+
const nextButton = (0, createButton_1.default)();
|
283
|
+
const previousButton = (0, createButton_1.default)();
|
283
284
|
nextButton.textContent = this.context.localization.next;
|
284
285
|
previousButton.textContent = this.context.localization.previous;
|
285
286
|
nextButton.classList.add('next');
|
@@ -429,7 +430,7 @@ class HelpDisplay {
|
|
429
430
|
createToggleButton() {
|
430
431
|
const buttonContainer = document.createElement('div');
|
431
432
|
buttonContainer.classList.add('toolbar-help-overlay-button');
|
432
|
-
const helpButton =
|
433
|
+
const helpButton = (0, createButton_1.default)();
|
433
434
|
helpButton.classList.add('button');
|
434
435
|
const icon = this.context.icons.makeHelpIcon();
|
435
436
|
icon.classList.add('icon');
|
@@ -20,7 +20,7 @@ const ToolbarShortcutHandler_1 = __importDefault(require("../../tools/ToolbarSho
|
|
20
20
|
const inputEvents_1 = require("../../inputEvents");
|
21
21
|
const constants_1 = require("../constants");
|
22
22
|
const DropdownLayoutManager_1 = __importDefault(require("./layout/DropdownLayoutManager"));
|
23
|
-
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../util/addLongPressOrHoverCssClasses"));
|
23
|
+
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../util/dom/addLongPressOrHoverCssClasses"));
|
24
24
|
const HelpDisplay_1 = __importDefault(require("../utils/HelpDisplay"));
|
25
25
|
const assertions_1 = require("../../util/assertions");
|
26
26
|
/**
|
@@ -45,6 +45,7 @@ const types_1 = require("../../types");
|
|
45
45
|
const constants_1 = require("../constants");
|
46
46
|
const makeColorInput_1 = __importDefault(require("./components/makeColorInput"));
|
47
47
|
const BaseWidget_1 = __importDefault(require("./BaseWidget"));
|
48
|
+
const createButton_1 = __importDefault(require("../../util/dom/createButton"));
|
48
49
|
class DocumentPropertiesWidget extends BaseWidget_1.default {
|
49
50
|
constructor(editor, localizationTable) {
|
50
51
|
super(editor, 'document-properties-widget', localizationTable);
|
@@ -254,9 +255,10 @@ class DocumentPropertiesWidget extends BaseWidget_1.default {
|
|
254
255
|
this.editor.dispatch(image.setAutoresizeEnabled(checked));
|
255
256
|
});
|
256
257
|
// The "About..." button
|
257
|
-
const aboutButton =
|
258
|
-
|
259
|
-
|
258
|
+
const aboutButton = (0, createButton_1.default)({
|
259
|
+
classList: ['about-button'],
|
260
|
+
text: this.localizationTable.about,
|
261
|
+
});
|
260
262
|
aboutButton.onclick = () => {
|
261
263
|
this.editor.showAboutDialog();
|
262
264
|
};
|
@@ -44,11 +44,12 @@ const constants_1 = require("../constants");
|
|
44
44
|
const BaseToolWidget_1 = __importDefault(require("./BaseToolWidget"));
|
45
45
|
const BaseWidget_1 = __importDefault(require("./BaseWidget"));
|
46
46
|
const makeSeparator_1 = __importDefault(require("./components/makeSeparator"));
|
47
|
+
const createButton_1 = __importDefault(require("../../util/dom/createButton"));
|
47
48
|
const makeZoomControl = (localizationTable, editor, helpDisplay) => {
|
48
49
|
const zoomLevelRow = document.createElement('div');
|
49
|
-
const increaseButton =
|
50
|
-
const decreaseButton =
|
51
|
-
const resetViewButton =
|
50
|
+
const increaseButton = (0, createButton_1.default)();
|
51
|
+
const decreaseButton = (0, createButton_1.default)();
|
52
|
+
const resetViewButton = (0, createButton_1.default)();
|
52
53
|
const zoomLevelDisplay = document.createElement('span');
|
53
54
|
increaseButton.innerText = '+';
|
54
55
|
decreaseButton.innerText = '-';
|
@@ -18,6 +18,7 @@ const bytesToSizeString_1 = __importDefault(require("../../../util/bytesToSizeSt
|
|
18
18
|
const ImageWrapper_1 = require("./ImageWrapper");
|
19
19
|
const makeSnappedList_1 = __importDefault(require("../components/makeSnappedList"));
|
20
20
|
const fileToImages_1 = __importDefault(require("./fileToImages"));
|
21
|
+
const createButton_1 = __importDefault(require("../../../util/dom/createButton"));
|
21
22
|
/**
|
22
23
|
* Provides a widget that allows inserting or modifying raster images.
|
23
24
|
*
|
@@ -83,7 +84,7 @@ class InsertImageWidget extends BaseWidget_1.default {
|
|
83
84
|
const actionButtonRow = document.createElement('div');
|
84
85
|
actionButtonRow.classList.add('action-button-row');
|
85
86
|
this.statusView.classList.add('insert-image-image-status-view');
|
86
|
-
this.submitButton =
|
87
|
+
this.submitButton = (0, createButton_1.default)();
|
87
88
|
this.selectedFiles = selectedFiles;
|
88
89
|
this.imageAltTextInput = document.createElement('input');
|
89
90
|
// Label the alt text input
|
@@ -170,16 +171,18 @@ class InsertImageWidget extends BaseWidget_1.default {
|
|
170
171
|
const sizeText = document.createElement('span');
|
171
172
|
sizeText.innerText = this.localizationTable.imageSize(Math.round(size), units);
|
172
173
|
// Add a button to allow decreasing the size of large images.
|
173
|
-
const decreaseSizeButton =
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
resetSizeButton
|
180
|
-
|
181
|
-
|
182
|
-
|
174
|
+
const decreaseSizeButton = (0, createButton_1.default)({
|
175
|
+
text: this.localizationTable.decreaseImageSize,
|
176
|
+
onClick: () => {
|
177
|
+
currentImage?.decreaseSize();
|
178
|
+
},
|
179
|
+
});
|
180
|
+
const resetSizeButton = (0, createButton_1.default)({
|
181
|
+
text: this.localizationTable.resetImage,
|
182
|
+
onClick: () => {
|
183
|
+
currentImage?.reset();
|
184
|
+
},
|
185
|
+
});
|
183
186
|
this.statusView.replaceChildren(sizeText);
|
184
187
|
if (currentImage?.isLarge()) {
|
185
188
|
this.statusView.appendChild(decreaseSizeButton);
|
@@ -18,6 +18,7 @@ const constants_1 = require("../constants");
|
|
18
18
|
const makeThicknessSlider_1 = __importDefault(require("./components/makeThicknessSlider"));
|
19
19
|
const makeGridSelector_1 = __importDefault(require("./components/makeGridSelector"));
|
20
20
|
const PolylineBuilder_1 = require("../../components/builders/PolylineBuilder");
|
21
|
+
const createElement_1 = __importDefault(require("../../util/dom/createElement"));
|
21
22
|
/**
|
22
23
|
* This toolbar widget allows a user to control a single {@link Pen} tool.
|
23
24
|
*
|
@@ -184,7 +185,7 @@ class PenToolWidget extends BaseToolWidget_1.default {
|
|
184
185
|
const container = document.createElement('div');
|
185
186
|
container.classList.add('action-button-row', `${constants_1.toolbarCSSPrefix}-pen-tool-toggle-buttons`);
|
186
187
|
const addToggleButton = (labelText, icon) => {
|
187
|
-
const button =
|
188
|
+
const button = (0, createElement_1.default)('button', { type: 'button' });
|
188
189
|
button.classList.add(`${constants_1.toolbarCSSPrefix}-toggle-button`);
|
189
190
|
const iconElement = icon.cloneNode(true);
|
190
191
|
iconElement.classList.add('icon');
|
@@ -3,7 +3,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../../util/addLongPressOrHoverCssClasses"));
|
6
|
+
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../../util/dom/addLongPressOrHoverCssClasses"));
|
7
|
+
const createButton_1 = __importDefault(require("../../../util/dom/createButton"));
|
7
8
|
/**
|
8
9
|
* Creates HTML `button` elements from `buttonSpecs` and displays them in a
|
9
10
|
* grid with `columnCount` columns.
|
@@ -13,7 +14,7 @@ const makeButtonGrid = (buttonSpecs, columnCount) => {
|
|
13
14
|
container.classList.add('toolbar-button-grid');
|
14
15
|
container.style.setProperty('--column-count', `${columnCount}`);
|
15
16
|
const makeButton = (buttonSpec) => {
|
16
|
-
const buttonElement =
|
17
|
+
const buttonElement = (0, createButton_1.default)();
|
17
18
|
buttonElement.classList.add('button');
|
18
19
|
const iconElement = buttonSpec.icon();
|
19
20
|
iconElement.classList.add('icon');
|
@@ -7,6 +7,7 @@ exports.makeColorInput = void 0;
|
|
7
7
|
const math_1 = require("@js-draw/math");
|
8
8
|
const PipetteTool_1 = __importDefault(require("../../../tools/PipetteTool"));
|
9
9
|
const types_1 = require("../../../types");
|
10
|
+
const createButton_1 = __importDefault(require("../../../util/dom/createButton"));
|
10
11
|
// Returns [ color input, input container, callback to change the color value ].
|
11
12
|
const makeColorInput = (editor, onColorChange) => {
|
12
13
|
const container = document.createElement('span');
|
@@ -100,7 +101,7 @@ const makeColorInput = (editor, onColorChange) => {
|
|
100
101
|
};
|
101
102
|
exports.makeColorInput = makeColorInput;
|
102
103
|
const addPipetteTool = (editor, container, onColorChange) => {
|
103
|
-
const pipetteButton =
|
104
|
+
const pipetteButton = (0, createButton_1.default)();
|
104
105
|
pipetteButton.classList.add('pipetteButton');
|
105
106
|
pipetteButton.title = editor.localization.pickColorFromScreen;
|
106
107
|
pipetteButton.setAttribute('alt', pipetteButton.title);
|
@@ -4,8 +4,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const ReactiveValue_1 = require("../../../util/ReactiveValue");
|
7
|
-
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../../../util/stopPropagationOfScrollingWheelEvents"));
|
8
|
-
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../../util/addLongPressOrHoverCssClasses"));
|
7
|
+
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../../../util/dom/stopPropagationOfScrollingWheelEvents"));
|
8
|
+
const addLongPressOrHoverCssClasses_1 = __importDefault(require("../../../util/dom/addLongPressOrHoverCssClasses"));
|
9
9
|
const constants_1 = require("../../constants");
|
10
10
|
let idCounter = 0;
|
11
11
|
/**
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../../../util/stopPropagationOfScrollingWheelEvents"));
|
6
|
+
const stopPropagationOfScrollingWheelEvents_1 = __importDefault(require("../../../util/dom/stopPropagationOfScrollingWheelEvents"));
|
7
7
|
const ReactiveValue_1 = require("../../../util/ReactiveValue");
|
8
8
|
/**
|
9
9
|
* Creates a list that snaps to each item and reports the selected item.
|
@@ -10,6 +10,7 @@ const TextComponent_1 = __importDefault(require("../components/TextComponent"));
|
|
10
10
|
const ImageComponent_1 = __importDefault(require("../components/ImageComponent"));
|
11
11
|
const BaseTool_1 = __importDefault(require("./BaseTool"));
|
12
12
|
const keybindings_1 = require("./keybindings");
|
13
|
+
const createButton_1 = __importDefault(require("../util/dom/createButton"));
|
13
14
|
const cssPrefix = 'find-tool';
|
14
15
|
class FindTool extends BaseTool_1.default {
|
15
16
|
constructor(editor) {
|
@@ -67,8 +68,8 @@ class FindTool extends BaseTool_1.default {
|
|
67
68
|
fillOverlay() {
|
68
69
|
const label = document.createElement('label');
|
69
70
|
this.searchInput = document.createElement('input');
|
70
|
-
const nextBtn =
|
71
|
-
const closeBtn =
|
71
|
+
const nextBtn = (0, createButton_1.default)();
|
72
|
+
const closeBtn = (0, createButton_1.default)();
|
72
73
|
// Math.random() ensures that the ID is unique (to allow us to refer to it
|
73
74
|
// with an htmlFor).
|
74
75
|
this.searchInput.setAttribute('id', `${cssPrefix}-searchInput-${Math.random()}`);
|
package/dist/cjs/tools/Pen.d.ts
CHANGED
@@ -25,6 +25,7 @@ export default class Pen extends BaseTool {
|
|
25
25
|
private currentDeviceType;
|
26
26
|
private currentPointerId;
|
27
27
|
private styleValue;
|
28
|
+
private wetInkRenderer;
|
28
29
|
private style;
|
29
30
|
private shapeAutocompletionEnabled;
|
30
31
|
private pressureSensitivityEnabled;
|
@@ -42,6 +43,7 @@ export default class Pen extends BaseTool {
|
|
42
43
|
eventCanBeDeliveredToNonActiveTool(event: PointerEvt): boolean;
|
43
44
|
onPointerMove({ current }: PointerEvt): void;
|
44
45
|
onPointerUp({ current }: PointerEvt): boolean;
|
46
|
+
private postGestureCleanup;
|
45
47
|
onGestureCancel(): void;
|
46
48
|
private removedAutocorrectedShapeRecently;
|
47
49
|
private autocorrectShape;
|
package/dist/cjs/tools/Pen.js
CHANGED
@@ -78,6 +78,7 @@ class Pen extends BaseTool_1.default {
|
|
78
78
|
this.style = newValue;
|
79
79
|
this.noteUpdated();
|
80
80
|
});
|
81
|
+
this.wetInkRenderer = this.editor.display.getWetInkRenderer();
|
81
82
|
}
|
82
83
|
getPressureMultiplier() {
|
83
84
|
const thickness = this.style.thickness;
|
@@ -109,13 +110,17 @@ class Pen extends BaseTool_1.default {
|
|
109
110
|
// Displays the stroke that is currently being built with the display's `wetInkRenderer`.
|
110
111
|
previewStroke() {
|
111
112
|
this.editor.clearWetInk();
|
112
|
-
const wetInkRenderer = this.editor.display.getWetInkRenderer();
|
113
113
|
if (this.autocorrectedShape) {
|
114
114
|
const visibleRect = this.editor.viewport.visibleRect;
|
115
|
-
this.autocorrectedShape.render(wetInkRenderer, visibleRect);
|
115
|
+
this.autocorrectedShape.render(this.wetInkRenderer, visibleRect);
|
116
116
|
}
|
117
|
-
else {
|
118
|
-
this.builder
|
117
|
+
else if (this.builder) {
|
118
|
+
this.builder.preview(this.wetInkRenderer);
|
119
|
+
if (this.builder.inkTrailStyle) {
|
120
|
+
const trailStyle = this.builder.inkTrailStyle();
|
121
|
+
const draftInkPresenter = this.wetInkRenderer.getDraftInkPresenter();
|
122
|
+
draftInkPresenter.updateStyle(trailStyle);
|
123
|
+
}
|
119
124
|
}
|
120
125
|
}
|
121
126
|
// Throws if no stroke builder exists.
|
@@ -151,6 +156,10 @@ class Pen extends BaseTool_1.default {
|
|
151
156
|
}
|
152
157
|
this.lastAutocorrectedShape = null;
|
153
158
|
this.removedAutocorrectedShapeTime = 0;
|
159
|
+
if (this.builder.inkTrailStyle) {
|
160
|
+
// Accelerate inking
|
161
|
+
this.wetInkRenderer.getDraftInkPresenter().setEnabled(current.id, true);
|
162
|
+
}
|
154
163
|
return true;
|
155
164
|
}
|
156
165
|
return false;
|
@@ -209,12 +218,21 @@ class Pen extends BaseTool_1.default {
|
|
209
218
|
this.finalizeStroke();
|
210
219
|
return false;
|
211
220
|
}
|
212
|
-
|
221
|
+
postGestureCleanup() {
|
222
|
+
if (this.currentPointerId !== null) {
|
223
|
+
this.wetInkRenderer.getDraftInkPresenter().setEnabled(this.currentPointerId, false);
|
224
|
+
}
|
213
225
|
this.builder = null;
|
226
|
+
this.lastPoint = null;
|
227
|
+
this.autocorrectedShape = null;
|
228
|
+
this.lastAutocorrectedShape = null;
|
214
229
|
this.editor.clearWetInk();
|
215
230
|
this.stationaryDetector?.destroy();
|
216
231
|
this.stationaryDetector = null;
|
217
232
|
}
|
233
|
+
onGestureCancel() {
|
234
|
+
this.postGestureCleanup();
|
235
|
+
}
|
218
236
|
removedAutocorrectedShapeRecently() {
|
219
237
|
return this.removedAutocorrectedShapeTime > performance.now() - 320;
|
220
238
|
}
|
@@ -263,13 +281,7 @@ class Pen extends BaseTool_1.default {
|
|
263
281
|
console.warn('Pen: Not adding empty stroke', stroke, 'to the canvas.');
|
264
282
|
}
|
265
283
|
}
|
266
|
-
this.
|
267
|
-
this.lastPoint = null;
|
268
|
-
this.autocorrectedShape = null;
|
269
|
-
this.lastAutocorrectedShape = null;
|
270
|
-
this.editor.clearWetInk();
|
271
|
-
this.stationaryDetector?.destroy();
|
272
|
-
this.stationaryDetector = null;
|
284
|
+
this.postGestureCleanup();
|
273
285
|
}
|
274
286
|
noteUpdated() {
|
275
287
|
this.editor.notifier.dispatch(types_1.EditorEventType.ToolUpdated, {
|
@@ -1,7 +1,11 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
6
|
const math_1 = require("@js-draw/math");
|
4
7
|
const SelectionTool_1 = require("./SelectionTool");
|
8
|
+
const createButton_1 = __importDefault(require("../../util/dom/createButton"));
|
5
9
|
const verticalOffset = 40;
|
6
10
|
class SelectionMenuShortcut {
|
7
11
|
constructor(parent, viewport, icon, showContextMenu, localization) {
|
@@ -22,8 +26,9 @@ class SelectionMenuShortcut {
|
|
22
26
|
this.updatePosition();
|
23
27
|
}
|
24
28
|
initUI() {
|
25
|
-
const button =
|
26
|
-
|
29
|
+
const button = (0, createButton_1.default)({
|
30
|
+
classList: ['icon'],
|
31
|
+
});
|
27
32
|
button.replaceChildren(this.icon);
|
28
33
|
button.ariaLabel = this.localization.selectionMenu__show;
|
29
34
|
button.title = button.ariaLabel;
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const math_1 = require("@js-draw/math");
|
7
7
|
const BaseTool_1 = __importDefault(require("./BaseTool"));
|
8
|
+
const createButton_1 = __importDefault(require("../util/dom/createButton"));
|
8
9
|
class SoundFeedback {
|
9
10
|
constructor() {
|
10
11
|
this.closed = false;
|
@@ -97,10 +98,11 @@ class SoundUITool extends BaseTool_1.default {
|
|
97
98
|
// Create a screen-reader-usable method of toggling the tool:
|
98
99
|
this.toggleButtonContainer = document.createElement('div');
|
99
100
|
this.toggleButtonContainer.classList.add('js-draw-sound-ui-toggle');
|
100
|
-
this.toggleButton =
|
101
|
-
|
102
|
-
|
103
|
-
|
101
|
+
this.toggleButton = (0, createButton_1.default)({
|
102
|
+
onClick: () => {
|
103
|
+
this.setEnabled(!this.isEnabled());
|
104
|
+
},
|
105
|
+
});
|
104
106
|
this.toggleButtonContainer.appendChild(this.toggleButton);
|
105
107
|
this.updateToggleButtonText();
|
106
108
|
editor.createHTMLOverlay(this.toggleButtonContainer);
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const waitForTimeout_1 = __importDefault(require("../../util/waitForTimeout"));
|
7
7
|
const types_1 = require("../../types");
|
8
|
+
const createButton_1 = __importDefault(require("../../util/dom/createButton"));
|
8
9
|
let idCounter = 0;
|
9
10
|
const createMenuOverlay = async (editor, canvasAnchor, options) => {
|
10
11
|
const overlay = document.createElement('div');
|
@@ -101,16 +102,17 @@ const createMenuOverlay = async (editor, canvasAnchor, options) => {
|
|
101
102
|
}
|
102
103
|
});
|
103
104
|
for (const option of options) {
|
104
|
-
const optionElement =
|
105
|
+
const optionElement = (0, createButton_1.default)({
|
106
|
+
classList: ['option', 'editor-popup-menu-option'],
|
107
|
+
onClick: (event) => {
|
108
|
+
if (event.defaultPrevented)
|
109
|
+
return;
|
110
|
+
onOptionSelected(option.key);
|
111
|
+
},
|
112
|
+
});
|
105
113
|
optionElement.id = `menu-overlay-option-${idCounter++}`;
|
106
114
|
optionElement.role = 'menuitem';
|
107
|
-
optionElement.classList.add('option', 'editor-popup-menu-option');
|
108
115
|
optionElement.replaceChildren(option.icon(), document.createTextNode(option.text));
|
109
|
-
optionElement.onclick = (event) => {
|
110
|
-
if (event.defaultPrevented)
|
111
|
-
return;
|
112
|
-
onOptionSelected(option.key);
|
113
|
-
};
|
114
116
|
contentElement.appendChild(optionElement);
|
115
117
|
if (optionElements.length === 0) {
|
116
118
|
optionElement.autofocus = true;
|
@@ -0,0 +1,20 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const createElement_1 = __importDefault(require("./createElement"));
|
7
|
+
const createButton = ({ onClick, text, classList = [] } = {}) => {
|
8
|
+
const button = (0, createElement_1.default)('button', { type: 'button' });
|
9
|
+
if (onClick) {
|
10
|
+
button.onclick = onClick;
|
11
|
+
}
|
12
|
+
if (text) {
|
13
|
+
button.textContent = text;
|
14
|
+
}
|
15
|
+
for (const className of classList) {
|
16
|
+
button.classList.add(className);
|
17
|
+
}
|
18
|
+
return button;
|
19
|
+
};
|
20
|
+
exports.default = createButton;
|
package/dist/cjs/version.js
CHANGED
package/dist/mjs/Editor.d.ts
CHANGED
@@ -340,9 +340,9 @@ export declare class Editor {
|
|
340
340
|
* A protected method that can override setPointerCapture in environments where it may fail
|
341
341
|
* (e.g. with synthetic events). @internal
|
342
342
|
*/
|
343
|
-
protected setPointerCapture(target: HTMLElement,
|
343
|
+
protected setPointerCapture(target: HTMLElement, pointer: PointerEvent): void;
|
344
344
|
/** Can be overridden in a testing environment to handle synthetic events. @internal */
|
345
|
-
protected releasePointerCapture(target: HTMLElement,
|
345
|
+
protected releasePointerCapture(target: HTMLElement, pointer: PointerEvent): void;
|
346
346
|
/**
|
347
347
|
* Dispatches a `PointerEvent` to the editor. The target element for `evt` must have the same top left
|
348
348
|
* as the content of the editor.
|