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.
Files changed (59) hide show
  1. package/dist/Editor.css +66 -118
  2. package/dist/bundle.js +2 -2
  3. package/dist/bundledStyles.js +1 -1
  4. package/dist/cjs/Editor.d.ts +4 -2
  5. package/dist/cjs/Editor.js +50 -39
  6. package/dist/cjs/components/AbstractComponent.d.ts +7 -0
  7. package/dist/cjs/components/AbstractComponent.js +7 -5
  8. package/dist/cjs/components/util/StrokeSmoother.d.ts +0 -1
  9. package/dist/cjs/components/util/StrokeSmoother.js +6 -17
  10. package/dist/cjs/localizations/es.js +11 -22
  11. package/dist/cjs/rendering/Display.d.ts +2 -0
  12. package/dist/cjs/rendering/Display.js +4 -0
  13. package/dist/cjs/toolbar/DropdownToolbar.d.ts +3 -1
  14. package/dist/cjs/toolbar/DropdownToolbar.js +2 -0
  15. package/dist/cjs/toolbar/EdgeToolbar.js +6 -5
  16. package/dist/cjs/toolbar/widgets/BaseWidget.js +2 -0
  17. package/dist/cjs/toolbar/widgets/InsertImageWidget.js +11 -4
  18. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +10 -0
  19. package/dist/cjs/util/addLongPressOrHoverCssClasses.d.ts +10 -0
  20. package/dist/cjs/util/addLongPressOrHoverCssClasses.js +34 -0
  21. package/dist/cjs/util/fileToBase64Url.d.ts +9 -0
  22. package/dist/cjs/util/fileToBase64Url.js +39 -0
  23. package/dist/cjs/util/fileToBase64Url.test.d.ts +1 -0
  24. package/dist/cjs/util/listenForLongPressOrHover.d.ts +13 -0
  25. package/dist/cjs/util/listenForLongPressOrHover.js +80 -0
  26. package/dist/cjs/util/listenForLongPressOrHover.test.d.ts +1 -0
  27. package/dist/cjs/version.js +1 -1
  28. package/dist/mjs/Editor.d.ts +4 -2
  29. package/dist/mjs/Editor.mjs +50 -39
  30. package/dist/mjs/components/AbstractComponent.d.ts +7 -0
  31. package/dist/mjs/components/AbstractComponent.mjs +7 -5
  32. package/dist/mjs/components/util/StrokeSmoother.d.ts +0 -1
  33. package/dist/mjs/components/util/StrokeSmoother.mjs +6 -17
  34. package/dist/mjs/localizations/es.mjs +11 -22
  35. package/dist/mjs/rendering/Display.d.ts +2 -0
  36. package/dist/mjs/rendering/Display.mjs +4 -0
  37. package/dist/mjs/toolbar/DropdownToolbar.d.ts +3 -1
  38. package/dist/mjs/toolbar/DropdownToolbar.mjs +2 -0
  39. package/dist/mjs/toolbar/EdgeToolbar.mjs +6 -5
  40. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +2 -0
  41. package/dist/mjs/toolbar/widgets/InsertImageWidget.mjs +11 -4
  42. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +10 -0
  43. package/dist/mjs/util/addLongPressOrHoverCssClasses.d.ts +10 -0
  44. package/dist/mjs/util/addLongPressOrHoverCssClasses.mjs +29 -0
  45. package/dist/mjs/util/fileToBase64Url.d.ts +9 -0
  46. package/dist/mjs/util/fileToBase64Url.mjs +37 -0
  47. package/dist/mjs/util/fileToBase64Url.test.d.ts +1 -0
  48. package/dist/mjs/util/listenForLongPressOrHover.d.ts +13 -0
  49. package/dist/mjs/util/listenForLongPressOrHover.mjs +78 -0
  50. package/dist/mjs/util/listenForLongPressOrHover.test.d.ts +1 -0
  51. package/dist/mjs/version.mjs +1 -1
  52. package/package.json +2 -2
  53. package/src/toolbar/EdgeToolbar.scss +19 -97
  54. package/src/toolbar/utils/labelVisibleOnHover.scss +114 -0
  55. package/src/toolbar/widgets/components/makeGridSelector.scss +1 -0
  56. package/dist/cjs/util/fileToBase64.d.ts +0 -3
  57. package/dist/cjs/util/fileToBase64.js +0 -15
  58. package/dist/mjs/util/fileToBase64.d.ts +0 -3
  59. 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
+ }
@@ -16,6 +16,7 @@
16
16
  display: flex;
17
17
  flex-direction: column-reverse;
18
18
  box-sizing: border-box;
19
+ cursor: pointer;
19
20
 
20
21
  flex-shrink: 1;
21
22
  margin: 2px;
@@ -1,3 +0,0 @@
1
- type ProgressListener = (evt: ProgressEvent<FileReader>) => void;
2
- declare const fileToBase64: (file: File, onprogress?: ProgressListener) => Promise<string | null>;
3
- export default fileToBase64;
@@ -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,3 +0,0 @@
1
- type ProgressListener = (evt: ProgressEvent<FileReader>) => void;
2
- declare const fileToBase64: (file: File, onprogress?: ProgressListener) => Promise<string | null>;
3
- export 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;