js-draw 1.12.0 → 1.13.2
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/Editor.css +66 -118
- package/dist/bundle.js +2 -2
- package/dist/bundledStyles.js +1 -1
- package/dist/cjs/Editor.d.ts +4 -2
- package/dist/cjs/Editor.js +50 -39
- package/dist/cjs/components/AbstractComponent.d.ts +7 -0
- package/dist/cjs/components/AbstractComponent.js +7 -5
- package/dist/cjs/components/util/StrokeSmoother.d.ts +0 -1
- package/dist/cjs/components/util/StrokeSmoother.js +6 -17
- package/dist/cjs/localizations/es.js +11 -22
- package/dist/cjs/rendering/Display.d.ts +2 -0
- package/dist/cjs/rendering/Display.js +4 -0
- package/dist/cjs/toolbar/DropdownToolbar.d.ts +3 -1
- package/dist/cjs/toolbar/DropdownToolbar.js +2 -0
- package/dist/cjs/toolbar/EdgeToolbar.js +6 -5
- package/dist/cjs/toolbar/widgets/BaseWidget.js +2 -0
- package/dist/cjs/toolbar/widgets/InsertImageWidget.js +11 -4
- package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +10 -0
- package/dist/cjs/util/addLongPressOrHoverCssClasses.d.ts +10 -0
- package/dist/cjs/util/addLongPressOrHoverCssClasses.js +34 -0
- package/dist/cjs/util/fileToBase64Url.d.ts +9 -0
- package/dist/cjs/util/fileToBase64Url.js +39 -0
- package/dist/cjs/util/fileToBase64Url.test.d.ts +1 -0
- package/dist/cjs/util/listenForLongPressOrHover.d.ts +13 -0
- package/dist/cjs/util/listenForLongPressOrHover.js +80 -0
- package/dist/cjs/util/listenForLongPressOrHover.test.d.ts +1 -0
- package/dist/cjs/version.js +1 -1
- package/dist/mjs/Editor.d.ts +4 -2
- package/dist/mjs/Editor.mjs +50 -39
- package/dist/mjs/components/AbstractComponent.d.ts +7 -0
- package/dist/mjs/components/AbstractComponent.mjs +7 -5
- package/dist/mjs/components/util/StrokeSmoother.d.ts +0 -1
- package/dist/mjs/components/util/StrokeSmoother.mjs +6 -17
- package/dist/mjs/localizations/es.mjs +11 -22
- package/dist/mjs/rendering/Display.d.ts +2 -0
- package/dist/mjs/rendering/Display.mjs +4 -0
- package/dist/mjs/toolbar/DropdownToolbar.d.ts +3 -1
- package/dist/mjs/toolbar/DropdownToolbar.mjs +2 -0
- package/dist/mjs/toolbar/EdgeToolbar.mjs +6 -5
- package/dist/mjs/toolbar/widgets/BaseWidget.mjs +2 -0
- package/dist/mjs/toolbar/widgets/InsertImageWidget.mjs +11 -4
- package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +10 -0
- package/dist/mjs/util/addLongPressOrHoverCssClasses.d.ts +10 -0
- package/dist/mjs/util/addLongPressOrHoverCssClasses.mjs +29 -0
- package/dist/mjs/util/fileToBase64Url.d.ts +9 -0
- package/dist/mjs/util/fileToBase64Url.mjs +37 -0
- package/dist/mjs/util/fileToBase64Url.test.d.ts +1 -0
- package/dist/mjs/util/listenForLongPressOrHover.d.ts +13 -0
- package/dist/mjs/util/listenForLongPressOrHover.mjs +78 -0
- package/dist/mjs/util/listenForLongPressOrHover.test.d.ts +1 -0
- package/dist/mjs/version.mjs +1 -1
- package/package.json +2 -2
- package/src/toolbar/EdgeToolbar.scss +19 -97
- package/src/toolbar/utils/labelVisibleOnHover.scss +114 -0
- package/src/toolbar/widgets/components/makeGridSelector.scss +1 -0
- package/dist/cjs/util/fileToBase64.d.ts +0 -3
- package/dist/cjs/util/fileToBase64.js +0 -15
- package/dist/mjs/util/fileToBase64.d.ts +0 -3
- package/dist/mjs/util/fileToBase64.mjs +0 -13
@@ -0,0 +1,114 @@
|
|
1
|
+
|
2
|
+
$label-visible-opacity: 0.8;
|
3
|
+
$show-delay: 0.3s;
|
4
|
+
|
5
|
+
@keyframes rehide-label {
|
6
|
+
0% { opacity: $label-visible-opacity; }
|
7
|
+
80% { opacity: $label-visible-opacity; }
|
8
|
+
100% { opacity: 0.1; }
|
9
|
+
}
|
10
|
+
|
11
|
+
@keyframes show-label-delayed {
|
12
|
+
0% { opacity: 0; }
|
13
|
+
// Keep the label hidden before showing
|
14
|
+
80% { opacity: 0; }
|
15
|
+
100% { opacity: $label-visible-opacity; }
|
16
|
+
}
|
17
|
+
|
18
|
+
@keyframes show-label-now {
|
19
|
+
0% { opacity: 0; }
|
20
|
+
5% { opacity: 0; }
|
21
|
+
100% { opacity: $label-visible-opacity; }
|
22
|
+
}
|
23
|
+
|
24
|
+
@keyframes keep-label-hidden {
|
25
|
+
0% { opacity: 0; }
|
26
|
+
100% { opacity: 0; }
|
27
|
+
}
|
28
|
+
|
29
|
+
// Shows a lable on hover
|
30
|
+
// Uses the --button-label-hover-offset-y and --button-label-hover-offset-x
|
31
|
+
// variables to determine the label's position.
|
32
|
+
//
|
33
|
+
// If the label is in a scrolling container, that container should have position: relative;
|
34
|
+
// as this allows absolutely positioned children to scroll with the container (rather than
|
35
|
+
// remaining stationary).
|
36
|
+
@mixin label-visible-on-hover($label-selector) {
|
37
|
+
// Using CSS classes set by addLongPressOrHoverCssClasses avoids sticky
|
38
|
+
// hover on touch devices.
|
39
|
+
&:not(.no-long-press-or-hover):not(.has-long-press-or-hover) {
|
40
|
+
// Only show an animation when opening the label due to a hover --
|
41
|
+
// show the label immediately otherwise.
|
42
|
+
&:hover:not(:focus-visible) > #{$label-selector},
|
43
|
+
// When the user is pressing/long-pressing the button
|
44
|
+
&:active > #{$label-selector}
|
45
|
+
{
|
46
|
+
opacity: $label-visible-opacity;
|
47
|
+
animation: 1s ease show-label-delayed;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
&.has-long-press-or-hover > #{$label-selector} {
|
52
|
+
opacity: $label-visible-opacity;
|
53
|
+
}
|
54
|
+
|
55
|
+
$keyboard-hide-animation: 1.5s ease rehide-label;
|
56
|
+
|
57
|
+
// .focus-visible: Allow setting focus-visible from JS (in cases where this
|
58
|
+
// element isn't the focus target and the browser doesn't support :has).
|
59
|
+
&:focus-visible, &.focus-visible {
|
60
|
+
& > #{$label-selector} {
|
61
|
+
animation: $keyboard-hide-animation;
|
62
|
+
opacity: 0;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
// Make the :has selector separate its own statement -- some browsers don't
|
67
|
+
// support :has, which would make the entire statement block have no effect.
|
68
|
+
&:has(:focus-visible) > #{$label-selector} {
|
69
|
+
animation: $keyboard-hide-animation;
|
70
|
+
opacity: 0;
|
71
|
+
}
|
72
|
+
|
73
|
+
& > #{$label-selector} {
|
74
|
+
opacity: 0;
|
75
|
+
position: absolute;
|
76
|
+
margin-top: var(--button-label-hover-offset-y);
|
77
|
+
margin-left: var(--button-label-hover-offset-x);
|
78
|
+
z-index: 1;
|
79
|
+
|
80
|
+
// The label is often mostly invisible/just below a toolbar item.
|
81
|
+
// If there are multiple toolbar rows, ensure that a label doesn't prevent
|
82
|
+
// clicking on items in the second row:
|
83
|
+
pointer-events: none;
|
84
|
+
|
85
|
+
background-color: var(--background-color-1);
|
86
|
+
color: var(--foreground-color-1);
|
87
|
+
border-radius: 25px;
|
88
|
+
padding: 10px;
|
89
|
+
|
90
|
+
transition: $show-delay ease opacity, 0.2s ease margin-top;
|
91
|
+
|
92
|
+
@media (prefers-reduced-motion: reduce) {
|
93
|
+
transition: none;
|
94
|
+
}
|
95
|
+
}
|
96
|
+
}
|
97
|
+
|
98
|
+
// Allows manually showing the label
|
99
|
+
@mixin show-label-now($label-selector) {
|
100
|
+
& > #{$label-selector} {
|
101
|
+
// Set opacity manually (rather than in an animation) to take advantage of
|
102
|
+
// `transition`. Without this, when animations are cancelled and replaced,
|
103
|
+
// the label may flicker.
|
104
|
+
opacity: $label-visible-opacity;
|
105
|
+
|
106
|
+
$hide-animation-length: 1.5s;
|
107
|
+
$keep-hidden-delay: calc($hide-animation-length + $show-delay);
|
108
|
+
|
109
|
+
$hide-animation: 1.5s ease rehide-label $show-delay;
|
110
|
+
$keep-hidden-animation: 1s ease keep-label-hidden $keep-hidden-delay infinite;
|
111
|
+
|
112
|
+
animation: $hide-animation, $keep-hidden-animation;
|
113
|
+
}
|
114
|
+
}
|
@@ -1,15 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
const fileToBase64 = (file, onprogress) => {
|
4
|
-
const reader = new FileReader();
|
5
|
-
return new Promise((resolve, reject) => {
|
6
|
-
reader.onload = () => resolve(reader.result);
|
7
|
-
reader.onerror = reject;
|
8
|
-
reader.onabort = reject;
|
9
|
-
reader.onprogress = (evt) => {
|
10
|
-
onprogress?.(evt);
|
11
|
-
};
|
12
|
-
reader.readAsDataURL(file);
|
13
|
-
});
|
14
|
-
};
|
15
|
-
exports.default = fileToBase64;
|
@@ -1,13 +0,0 @@
|
|
1
|
-
const fileToBase64 = (file, onprogress) => {
|
2
|
-
const reader = new FileReader();
|
3
|
-
return new Promise((resolve, reject) => {
|
4
|
-
reader.onload = () => resolve(reader.result);
|
5
|
-
reader.onerror = reject;
|
6
|
-
reader.onabort = reject;
|
7
|
-
reader.onprogress = (evt) => {
|
8
|
-
onprogress?.(evt);
|
9
|
-
};
|
10
|
-
reader.readAsDataURL(file);
|
11
|
-
});
|
12
|
-
};
|
13
|
-
export default fileToBase64;
|