js-draw 1.2.1 → 1.3.0

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 (122) hide show
  1. package/README.md +30 -30
  2. package/dist/Editor.css +70 -4
  3. package/dist/bundle.js +2 -2
  4. package/dist/bundledStyles.js +1 -1
  5. package/dist/cjs/Editor.d.ts +73 -40
  6. package/dist/cjs/Editor.js +90 -24
  7. package/dist/cjs/EditorImage.d.ts +58 -6
  8. package/dist/cjs/EditorImage.js +336 -60
  9. package/dist/cjs/SVGLoader.d.ts +10 -4
  10. package/dist/cjs/SVGLoader.js +30 -10
  11. package/dist/cjs/UndoRedoHistory.d.ts +2 -2
  12. package/dist/cjs/UndoRedoHistory.js +4 -2
  13. package/dist/cjs/Viewport.d.ts +2 -1
  14. package/dist/cjs/Viewport.js +12 -3
  15. package/dist/cjs/commands/Command.d.ts +1 -0
  16. package/dist/cjs/commands/Command.js +1 -0
  17. package/dist/cjs/commands/Erase.js +1 -1
  18. package/dist/cjs/commands/SerializableCommand.d.ts +1 -1
  19. package/dist/cjs/commands/SerializableCommand.js +16 -2
  20. package/dist/cjs/commands/localization.d.ts +2 -0
  21. package/dist/cjs/commands/localization.js +2 -0
  22. package/dist/cjs/components/AbstractComponent.d.ts +38 -0
  23. package/dist/cjs/components/AbstractComponent.js +31 -0
  24. package/dist/cjs/components/BackgroundComponent.d.ts +10 -1
  25. package/dist/cjs/components/BackgroundComponent.js +60 -6
  26. package/dist/cjs/components/SVGGlobalAttributesObject.d.ts +2 -1
  27. package/dist/cjs/components/SVGGlobalAttributesObject.js +30 -1
  28. package/dist/cjs/components/Stroke.d.ts +1 -0
  29. package/dist/cjs/components/Stroke.js +44 -0
  30. package/dist/cjs/components/UnknownSVGObject.d.ts +2 -1
  31. package/dist/cjs/components/UnknownSVGObject.js +30 -1
  32. package/dist/cjs/components/lib.d.ts +2 -2
  33. package/dist/cjs/components/lib.js +15 -2
  34. package/dist/cjs/lib.d.ts +2 -45
  35. package/dist/cjs/lib.js +2 -45
  36. package/dist/cjs/rendering/RenderablePathSpec.d.ts +1 -0
  37. package/dist/cjs/rendering/RenderablePathSpec.js +1 -0
  38. package/dist/cjs/rendering/RenderingStyle.d.ts +1 -0
  39. package/dist/cjs/rendering/lib.d.ts +1 -0
  40. package/dist/cjs/rendering/lib.js +5 -1
  41. package/dist/cjs/rendering/renderers/AbstractRenderer.js +1 -1
  42. package/dist/cjs/shortcuts/KeyboardShortcutManager.d.ts +2 -2
  43. package/dist/cjs/shortcuts/KeyboardShortcutManager.js +2 -2
  44. package/dist/cjs/toolbar/localization.d.ts +1 -0
  45. package/dist/cjs/toolbar/localization.js +1 -0
  46. package/dist/cjs/toolbar/widgets/BaseWidget.js +5 -0
  47. package/dist/cjs/toolbar/widgets/DocumentPropertiesWidget.js +54 -25
  48. package/dist/cjs/toolbar/widgets/components/makeGridSelector.js +8 -0
  49. package/dist/cjs/tools/PanZoom.js +13 -8
  50. package/dist/cjs/tools/ScrollbarTool.d.ts +18 -0
  51. package/dist/cjs/tools/ScrollbarTool.js +85 -0
  52. package/dist/cjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +1 -0
  53. package/dist/cjs/tools/ToolController.js +2 -0
  54. package/dist/cjs/types.d.ts +3 -1
  55. package/dist/cjs/util/adjustEditorThemeForContrast.js +1 -0
  56. package/dist/cjs/util/assertions.d.ts +4 -0
  57. package/dist/cjs/util/assertions.js +12 -1
  58. package/dist/cjs/version.js +1 -1
  59. package/dist/mjs/Editor.d.ts +73 -40
  60. package/dist/mjs/Editor.mjs +90 -24
  61. package/dist/mjs/EditorImage.d.ts +58 -6
  62. package/dist/mjs/EditorImage.mjs +313 -61
  63. package/dist/mjs/SVGLoader.d.ts +10 -4
  64. package/dist/mjs/SVGLoader.mjs +29 -9
  65. package/dist/mjs/UndoRedoHistory.d.ts +2 -2
  66. package/dist/mjs/UndoRedoHistory.mjs +4 -2
  67. package/dist/mjs/Viewport.d.ts +2 -1
  68. package/dist/mjs/Viewport.mjs +12 -3
  69. package/dist/mjs/commands/Command.d.ts +1 -0
  70. package/dist/mjs/commands/Command.mjs +1 -0
  71. package/dist/mjs/commands/Erase.mjs +1 -1
  72. package/dist/mjs/commands/SerializableCommand.d.ts +1 -1
  73. package/dist/mjs/commands/SerializableCommand.mjs +16 -2
  74. package/dist/mjs/commands/localization.d.ts +2 -0
  75. package/dist/mjs/commands/localization.mjs +2 -0
  76. package/dist/mjs/components/AbstractComponent.d.ts +38 -0
  77. package/dist/mjs/components/AbstractComponent.mjs +30 -0
  78. package/dist/mjs/components/BackgroundComponent.d.ts +10 -1
  79. package/dist/mjs/components/BackgroundComponent.mjs +37 -6
  80. package/dist/mjs/components/SVGGlobalAttributesObject.d.ts +2 -1
  81. package/dist/mjs/components/SVGGlobalAttributesObject.mjs +7 -1
  82. package/dist/mjs/components/Stroke.d.ts +1 -0
  83. package/dist/mjs/components/Stroke.mjs +44 -0
  84. package/dist/mjs/components/UnknownSVGObject.d.ts +2 -1
  85. package/dist/mjs/components/UnknownSVGObject.mjs +7 -1
  86. package/dist/mjs/components/lib.d.ts +2 -2
  87. package/dist/mjs/components/lib.mjs +2 -2
  88. package/dist/mjs/lib.d.ts +2 -45
  89. package/dist/mjs/lib.mjs +2 -45
  90. package/dist/mjs/rendering/RenderablePathSpec.d.ts +1 -0
  91. package/dist/mjs/rendering/RenderablePathSpec.mjs +1 -0
  92. package/dist/mjs/rendering/RenderingStyle.d.ts +1 -0
  93. package/dist/mjs/rendering/lib.d.ts +1 -0
  94. package/dist/mjs/rendering/lib.mjs +1 -0
  95. package/dist/mjs/rendering/renderers/AbstractRenderer.mjs +1 -1
  96. package/dist/mjs/shortcuts/KeyboardShortcutManager.d.ts +2 -2
  97. package/dist/mjs/shortcuts/KeyboardShortcutManager.mjs +2 -2
  98. package/dist/mjs/toolbar/localization.d.ts +1 -0
  99. package/dist/mjs/toolbar/localization.mjs +1 -0
  100. package/dist/mjs/toolbar/widgets/BaseWidget.mjs +5 -0
  101. package/dist/mjs/toolbar/widgets/DocumentPropertiesWidget.mjs +54 -25
  102. package/dist/mjs/toolbar/widgets/components/makeGridSelector.mjs +8 -0
  103. package/dist/mjs/tools/PanZoom.mjs +13 -8
  104. package/dist/mjs/tools/ScrollbarTool.d.ts +18 -0
  105. package/dist/mjs/tools/ScrollbarTool.mjs +79 -0
  106. package/dist/mjs/tools/SelectionTool/SelectionTool.selecting.test.d.ts +1 -0
  107. package/dist/mjs/tools/ToolController.mjs +2 -0
  108. package/dist/mjs/types.d.ts +3 -1
  109. package/dist/mjs/util/adjustEditorThemeForContrast.mjs +1 -0
  110. package/dist/mjs/util/assertions.d.ts +4 -0
  111. package/dist/mjs/util/assertions.mjs +10 -0
  112. package/dist/mjs/version.mjs +1 -1
  113. package/package.json +3 -4
  114. package/src/Editor.scss +8 -0
  115. package/src/dialogs/dialogs.scss +2 -1
  116. package/src/toolbar/AbstractToolbar.scss +3 -0
  117. package/src/toolbar/EdgeToolbar.scss +4 -1
  118. package/src/toolbar/widgets/DocumentPropertiesWidget.scss +12 -0
  119. package/src/toolbar/widgets/components/makeGridSelector.scss +6 -1
  120. package/src/tools/ScrollbarTool.scss +57 -0
  121. package/src/tools/{SoundUITool.css → SoundUITool.scss} +4 -0
  122. package/src/tools/tools.scss +2 -1
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # js-draw
2
2
 
3
- [NPM package](https://www.npmjs.com/package/js-draw) | [GitHub](https://github.com/personalizedrefrigerator/js-draw) | [Documentation](https://personalizedrefrigerator.github.io/js-draw/typedoc/) | [Try it!](https://personalizedrefrigerator.github.io/js-draw/example/example.html)
3
+ [NPM package](https://www.npmjs.com/package/js-draw) | [GitHub](https://github.com/personalizedrefrigerator/js-draw) | [Documentation](https://personalizedrefrigerator.github.io/js-draw/typedoc/modules/js_draw.html) | [Try it!](https://personalizedrefrigerator.github.io/js-draw/example/example.html)
4
4
 
5
5
  ![](docs/img/readme-images/js-draw.jpg)
6
6
 
@@ -199,49 +199,49 @@ The editor's color theme is specified using CSS. Its default theme looks like th
199
199
  /* Deafult colors for the editor -- light mode */
200
200
 
201
201
  /* Used for unselected buttons and dialog text. */
202
- --background-color-1: white;
203
- --foreground-color-1: black;
202
+ --background-color-1: white;
203
+ --foreground-color-1: black;
204
204
 
205
- /* Used for some menu/toolbar backgrounds. */
206
- --background-color-2: #f5f5f5;
207
- --foreground-color-2: #2c303a;
205
+ /* Used for some menu/toolbar backgrounds. */
206
+ --background-color-2: #f5f5f5;
207
+ --foreground-color-2: #2c303a;
208
208
 
209
- /* Used for other menu/toolbar backgrounds. */
210
- --background-color-3: #e5e5e5;
211
- --foreground-color-3: #1c202a;
209
+ /* Used for other menu/toolbar backgrounds. */
210
+ --background-color-3: #e5e5e5;
211
+ --foreground-color-3: #1c202a;
212
212
 
213
- /* Used for selected buttons. */
214
- --selection-background-color: #cbdaf1;
215
- --selection-foreground-color: #2c303a;
213
+ /* Used for selected buttons. */
214
+ --selection-background-color: #cbdaf1;
215
+ --selection-foreground-color: #2c303a;
216
216
 
217
- /* Used for dialog backgrounds */
218
- --background-color-transparent: rgba(105, 100, 100, 0.5);
217
+ /* Used for dialog backgrounds */
218
+ --background-color-transparent: rgba(105, 100, 100, 0.5);
219
219
 
220
- /* Used for shadows */
221
- --shadow-color: rgba(0, 0, 0, 0.5);
220
+ /* Used for shadows */
221
+ --shadow-color: rgba(0, 0, 0, 0.5);
222
222
 
223
- /* Color used for some button/input foregrounds */
224
- --primary-action-foreground-color: #15b;
223
+ /* Color used for some button/input foregrounds */
224
+ --primary-action-foreground-color: #15b;
225
225
  }
226
226
 
227
227
  @media (prefers-color-scheme: dark) {
228
228
  .imageEditorContainer {
229
229
  /* Default colors for the editor -- dark mode */
230
- --background-color-1: #151515;
231
- --foreground-color-1: white;
230
+ --background-color-1: #151515;
231
+ --foreground-color-1: white;
232
232
 
233
- --background-color-2: #222;
234
- --foreground-color-2: #efefef;
233
+ --background-color-2: #222;
234
+ --foreground-color-2: #efefef;
235
235
 
236
- --background-color-3: #272627;
237
- --foreground-color-3: #eee;
236
+ --background-color-3: #272627;
237
+ --foreground-color-3: #eee;
238
238
 
239
- --selection-background-color: #607;
240
- --selection-foreground-color: white;
241
- --shadow-color: rgba(250, 250, 250, 0.5);
242
- --background-color-transparent: rgba(50, 50, 50, 0.5);
239
+ --selection-background-color: #607;
240
+ --selection-foreground-color: white;
241
+ --shadow-color: rgba(250, 250, 250, 0.5);
242
+ --background-color-transparent: rgba(50, 50, 50, 0.5);
243
243
 
244
- --primary-action-foreground-color: #7ae;
244
+ --primary-action-foreground-color: #7ae;
245
245
  }
246
246
  }
247
247
  ```
@@ -261,7 +261,7 @@ body .imageEditorContainer {
261
261
  --foreground-color-3: black;
262
262
 
263
263
  --background-color-transparent: rgba(255, 240, 200, 0.5);
264
- --shadow-color: rgba(0, 0, 0, 0.5);
264
+ --shadow-color: rgba(0, 0, 0, 0.5);
265
265
 
266
266
  --selection-background-color: yellow;
267
267
  --selection-foreground-color: black;
package/dist/Editor.css CHANGED
@@ -79,6 +79,15 @@
79
79
  width: 100%;
80
80
  text-align: end;
81
81
  }
82
+ .toolbar-document-properties-widget > * {
83
+ --align-items-to-x: 120px;
84
+ }
85
+ .toolbar-document-properties-widget .js-draw-size-input-row.js-draw-size-input-row {
86
+ display: flex;
87
+ }
88
+ .toolbar-document-properties-widget .js-draw-size-input-row.js-draw-size-input-row.size-input-row--automatic-size {
89
+ display: none;
90
+ }
82
91
 
83
92
  .toolbar-thicknessSliderContainer {
84
93
  display: flex;
@@ -229,7 +238,7 @@
229
238
  flex-shrink: 1;
230
239
  margin: 2px;
231
240
  }
232
- .toolbar-grid-selector .choice-button:focus-within {
241
+ .toolbar-grid-selector .choice-button.focus-visible {
233
242
  outline: 2px solid var(--foreground-color-1);
234
243
  }
235
244
  .toolbar-grid-selector .choice-button input {
@@ -246,6 +255,8 @@
246
255
  align-items: center;
247
256
  justify-content: center;
248
257
  padding: 4px;
258
+ user-select: none;
259
+ -webkit-user-select: none;
249
260
  }
250
261
  .toolbar-grid-selector .choice-button .icon {
251
262
  flex-grow: 1;
@@ -255,6 +266,7 @@
255
266
  .toolbar-grid-selector .choice-button.checked {
256
267
  background-color: var(--selection-background-color);
257
268
  color: var(--selection-foreground-color);
269
+ --icon-color: var(--selection-foreground-color);
258
270
  }
259
271
 
260
272
  /* The *main* root toolbar element */
@@ -303,6 +315,8 @@
303
315
  border-radius: 6px;
304
316
  border: none;
305
317
  box-shadow: 0px 0px 2px var(--shadow-color);
318
+ user-select: none;
319
+ -webkit-user-select: none;
306
320
  transition: background-color 0.15s ease, box-shadow 0.25s ease, opacity 0.2s ease;
307
321
  }
308
322
 
@@ -958,6 +972,7 @@
958
972
  }
959
973
  .toolbar-edgemenu-container .toolbar-edgemenu .toolbar-spacedList {
960
974
  box-sizing: border-box;
975
+ --align-items-to-x: 105px;
961
976
  }
962
977
  .toolbar-edgemenu-container .toolbar-edgemenu .toolbar-spacedList > div {
963
978
  display: flex;
@@ -967,13 +982,14 @@
967
982
  }
968
983
  .toolbar-edgemenu-container .toolbar-edgemenu .toolbar-spacedList > div > label {
969
984
  padding-right: 35px;
970
- min-width: 105px;
985
+ min-width: var(--align-items-to-x);
971
986
  flex-shrink: 1;
972
987
  box-sizing: border-box;
973
988
  }
974
989
  .toolbar-edgemenu-container .toolbar-edgemenu .toolbar-spacedList > div > input[type=checkbox] {
975
990
  width: 20px;
976
991
  height: 20px;
992
+ margin-left: 0;
977
993
  }
978
994
  .toolbar-edgemenu-container .toolbar-edgemenu .toolbar-spacedList > div > input:not([type=checkbox]) {
979
995
  flex-grow: 1;
@@ -1008,6 +1024,52 @@
1008
1024
  display: inline-block;
1009
1025
  }
1010
1026
 
1027
+ .ScrollbarTool-overlay {
1028
+ width: 0;
1029
+ height: 0;
1030
+ overflow: visible;
1031
+ opacity: 0.2;
1032
+ pointer-events: none;
1033
+ --fade-out-animation: 1s ease 0s fade-out;
1034
+ --scrollbar-size: 3px;
1035
+ }
1036
+ @media (prefers-reduced-motion: reduce) {
1037
+ .ScrollbarTool-overlay {
1038
+ --fade-out-animation: none !important;
1039
+ }
1040
+ }
1041
+ @keyframes fade-out {
1042
+ from {
1043
+ opacity: 0.2;
1044
+ }
1045
+ to {
1046
+ opacity: 0;
1047
+ }
1048
+ }
1049
+ .ScrollbarTool-overlay:not(.just-updated) {
1050
+ animation: var(--fade-out-animation);
1051
+ opacity: 0;
1052
+ }
1053
+ .ScrollbarTool-overlay .vertical-scrollbar, .ScrollbarTool-overlay .horizontal-scrollbar {
1054
+ width: var(--scrollbar-size);
1055
+ height: var(--scrollbar-size);
1056
+ min-width: var(--scrollbar-size);
1057
+ min-height: var(--scrollbar-size);
1058
+ background-color: var(--foreground-color-1);
1059
+ border-radius: var(--scrollbar-size);
1060
+ position: absolute;
1061
+ }
1062
+ .ScrollbarTool-overlay .vertical-scrollbar.represents-no-scroll, .ScrollbarTool-overlay .horizontal-scrollbar.represents-no-scroll {
1063
+ animation: var(--fade-out-animation);
1064
+ opacity: 0;
1065
+ }
1066
+ .ScrollbarTool-overlay:not(.scrollbar-left) .vertical-scrollbar {
1067
+ margin-left: calc(var(--editor-current-display-width-px) - var(--scrollbar-size));
1068
+ }
1069
+ .ScrollbarTool-overlay:not(.scrollbar-top) .horizontal-scrollbar {
1070
+ margin-top: calc(var(--editor-current-display-height-px) - var(--scrollbar-size));
1071
+ }
1072
+
1011
1073
  .selection-tool-selection-background {
1012
1074
  background-color: var(--selection-background-color);
1013
1075
  opacity: 0.5;
@@ -1058,6 +1120,10 @@
1058
1120
  overflow: hidden;
1059
1121
  }
1060
1122
 
1123
+ .js-draw-sound-ui-toggle button {
1124
+ margin-top: 1px;
1125
+ }
1126
+
1061
1127
  .js-draw-sound-ui-toggle:focus-within, .js-draw-sound-ui-toggle.sound-ui-tool-enabled {
1062
1128
  overflow: visible;
1063
1129
  z-index: 5;
@@ -1097,7 +1163,7 @@
1097
1163
  text-decoration: underline;
1098
1164
  }
1099
1165
 
1100
- .dialog-container {
1166
+ .dialog-container.dialog-container {
1101
1167
  background-color: var(--background-color-transparent);
1102
1168
  backdrop-filter: blur(5px);
1103
1169
  -webkit-backdrop-filter: blur(5px);
@@ -1110,7 +1176,7 @@
1110
1176
  align-items: center;
1111
1177
  justify-content: center;
1112
1178
  }
1113
- .dialog-container dialog {
1179
+ .dialog-container.dialog-container dialog {
1114
1180
  background-color: var(--background-color-1);
1115
1181
  color: var(--foreground-color-1);
1116
1182
  border: none;