js-draw 0.9.0 → 0.9.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 (65) hide show
  1. package/.github/ISSUE_TEMPLATE/translation.yml +742 -0
  2. package/CHANGELOG.md +8 -0
  3. package/build_tools/buildTranslationTemplate.ts +119 -0
  4. package/dist/build_tools/buildTranslationTemplate.d.ts +1 -0
  5. package/dist/build_tools/buildTranslationTemplate.js +93 -0
  6. package/dist/bundle.js +1 -1
  7. package/dist/src/Editor.d.ts +1 -0
  8. package/dist/src/Editor.js +20 -3
  9. package/dist/src/SVGLoader.js +1 -1
  10. package/dist/src/Viewport.js +3 -5
  11. package/dist/src/commands/Command.d.ts +2 -2
  12. package/dist/src/commands/uniteCommands.js +19 -10
  13. package/dist/src/components/{Text.d.ts → TextComponent.d.ts} +0 -0
  14. package/dist/src/components/{Text.js → TextComponent.js} +0 -0
  15. package/dist/src/components/builders/LineBuilder.js +4 -0
  16. package/dist/src/components/lib.d.ts +1 -1
  17. package/dist/src/components/lib.js +1 -1
  18. package/dist/src/components/util/StrokeSmoother.js +1 -1
  19. package/dist/src/rendering/renderers/AbstractRenderer.d.ts +1 -1
  20. package/dist/src/rendering/renderers/CanvasRenderer.d.ts +1 -1
  21. package/dist/src/rendering/renderers/CanvasRenderer.js +1 -1
  22. package/dist/src/rendering/renderers/DummyRenderer.d.ts +1 -1
  23. package/dist/src/rendering/renderers/SVGRenderer.d.ts +1 -1
  24. package/dist/src/rendering/renderers/SVGRenderer.js +6 -1
  25. package/dist/src/rendering/renderers/TextOnlyRenderer.d.ts +1 -1
  26. package/dist/src/rendering/renderers/TextOnlyRenderer.js +2 -2
  27. package/dist/src/toolbar/IconProvider.d.ts +1 -1
  28. package/dist/src/tools/FindTool.d.ts +21 -0
  29. package/dist/src/tools/FindTool.js +113 -0
  30. package/dist/src/tools/SelectionTool/Selection.js +43 -12
  31. package/dist/src/tools/SelectionTool/SelectionTool.js +1 -1
  32. package/dist/src/tools/TextTool.d.ts +1 -1
  33. package/dist/src/tools/TextTool.js +1 -1
  34. package/dist/src/tools/ToolController.js +2 -0
  35. package/dist/src/tools/localization.d.ts +6 -0
  36. package/dist/src/tools/localization.js +6 -0
  37. package/package.json +2 -1
  38. package/src/Editor.css +1 -0
  39. package/src/Editor.toSVG.test.ts +1 -1
  40. package/src/Editor.ts +27 -3
  41. package/src/SVGLoader.ts +1 -1
  42. package/src/Viewport.ts +3 -5
  43. package/src/commands/Command.ts +2 -2
  44. package/src/commands/uniteCommands.ts +21 -10
  45. package/src/components/{Text.test.ts → TextComponent.test.ts} +1 -1
  46. package/src/components/{Text.ts → TextComponent.ts} +0 -0
  47. package/src/components/builders/LineBuilder.ts +4 -0
  48. package/src/components/lib.ts +1 -1
  49. package/src/components/util/StrokeSmoother.ts +1 -1
  50. package/src/rendering/renderers/AbstractRenderer.ts +1 -1
  51. package/src/rendering/renderers/CanvasRenderer.ts +1 -1
  52. package/src/rendering/renderers/DummyRenderer.ts +1 -1
  53. package/src/rendering/renderers/SVGRenderer.ts +6 -2
  54. package/src/rendering/renderers/TextOnlyRenderer.ts +3 -3
  55. package/src/toolbar/IconProvider.ts +1 -1
  56. package/src/tools/FindTool.css +7 -0
  57. package/src/tools/FindTool.ts +151 -0
  58. package/src/tools/PasteHandler.ts +1 -1
  59. package/src/tools/SelectionTool/Selection.ts +52 -11
  60. package/src/tools/SelectionTool/SelectionTool.ts +1 -1
  61. package/src/tools/TextTool.ts +1 -1
  62. package/src/tools/ToolController.ts +2 -0
  63. package/src/tools/localization.ts +14 -0
  64. package/.firebase/hosting.ZG9jcw.cache +0 -338
  65. package/.github/ISSUE_TEMPLATE/translation.md +0 -100
@@ -0,0 +1,742 @@
1
+ name: Translation
2
+ # This template is auto-generated by build_tools/buildTranslationTemplate.ts
3
+ # Do not modify it directly.
4
+ description: Translate the editor to a new language!
5
+ title: "[Translation]: <language>"
6
+ labels: [localization]
7
+ assignees: []
8
+ body:
9
+ - type: markdown
10
+ attributes:
11
+ value: |
12
+ Thank you for taking the time to translate `js-draw`! If you don't have time to translate all of the strings below, feel free to submit an incomplete translation and edit it later. Use this template to update an existing translation or to create a new translation.
13
+ - type: markdown
14
+ attributes:
15
+ value: |
16
+ (Optional)Ifyouwouldliketosubmitapullrequestthatappliesthistranslation,notethatexistingtranslationsarepresentin[src/localizations/](https://github.com/personalizedrefrigerator/js-draw/tree/main/src/localizations).
17
+ - type: input
18
+ id: language-name
19
+ attributes:
20
+ label: "Language"
21
+ description: "The name of the language to translate to in English (e.g. Spanish)"
22
+ validations:
23
+ required: true
24
+ - type: input
25
+ id: translation-pen
26
+ attributes:
27
+ label: "pen"
28
+ description: "Translate `Pen`."
29
+ placeholder: "Pen"
30
+ validations:
31
+ required: false
32
+ - type: input
33
+ id: translation-eraser
34
+ attributes:
35
+ label: "eraser"
36
+ description: "Translate `Eraser`."
37
+ placeholder: "Eraser"
38
+ validations:
39
+ required: false
40
+ - type: input
41
+ id: translation-select
42
+ attributes:
43
+ label: "select"
44
+ description: "Translate `Select`."
45
+ placeholder: "Select"
46
+ validations:
47
+ required: false
48
+ - type: input
49
+ id: translation-handTool
50
+ attributes:
51
+ label: "handTool"
52
+ description: "Translate `Pan`."
53
+ placeholder: "Pan"
54
+ validations:
55
+ required: false
56
+ - type: input
57
+ id: translation-zoom
58
+ attributes:
59
+ label: "zoom"
60
+ description: "Translate `Zoom`."
61
+ placeholder: "Zoom"
62
+ validations:
63
+ required: false
64
+ - type: input
65
+ id: translation-resetView
66
+ attributes:
67
+ label: "resetView"
68
+ description: "Translate `Reset view`."
69
+ placeholder: "Reset view"
70
+ validations:
71
+ required: false
72
+ - type: input
73
+ id: translation-thicknessLabel
74
+ attributes:
75
+ label: "thicknessLabel"
76
+ description: "Translate `Thickness: `."
77
+ placeholder: "Thickness: "
78
+ validations:
79
+ required: false
80
+ - type: input
81
+ id: translation-colorLabel
82
+ attributes:
83
+ label: "colorLabel"
84
+ description: "Translate `Color: `."
85
+ placeholder: "Color: "
86
+ validations:
87
+ required: false
88
+ - type: input
89
+ id: translation-fontLabel
90
+ attributes:
91
+ label: "fontLabel"
92
+ description: "Translate `Font: `."
93
+ placeholder: "Font: "
94
+ validations:
95
+ required: false
96
+ - type: input
97
+ id: translation-resizeImageToSelection
98
+ attributes:
99
+ label: "resizeImageToSelection"
100
+ description: "Translate `Resize image to selection`."
101
+ placeholder: "Resize image to selection"
102
+ validations:
103
+ required: false
104
+ - type: input
105
+ id: translation-deleteSelection
106
+ attributes:
107
+ label: "deleteSelection"
108
+ description: "Translate `Delete selection`."
109
+ placeholder: "Delete selection"
110
+ validations:
111
+ required: false
112
+ - type: input
113
+ id: translation-duplicateSelection
114
+ attributes:
115
+ label: "duplicateSelection"
116
+ description: "Translate `Duplicate selection`."
117
+ placeholder: "Duplicate selection"
118
+ validations:
119
+ required: false
120
+ - type: input
121
+ id: translation-undo
122
+ attributes:
123
+ label: "undo"
124
+ description: "Translate `Undo`."
125
+ placeholder: "Undo"
126
+ validations:
127
+ required: false
128
+ - type: input
129
+ id: translation-redo
130
+ attributes:
131
+ label: "redo"
132
+ description: "Translate `Redo`."
133
+ placeholder: "Redo"
134
+ validations:
135
+ required: false
136
+ - type: input
137
+ id: translation-selectObjectType
138
+ attributes:
139
+ label: "selectObjectType"
140
+ description: "Translate `Object type: `."
141
+ placeholder: "Object type: "
142
+ validations:
143
+ required: false
144
+ - type: input
145
+ id: translation-pickColorFromScreen
146
+ attributes:
147
+ label: "pickColorFromScreen"
148
+ description: "Translate `Pick color from screen`."
149
+ placeholder: "Pick color from screen"
150
+ validations:
151
+ required: false
152
+ - type: input
153
+ id: translation-clickToPickColorAnnouncement
154
+ attributes:
155
+ label: "clickToPickColorAnnouncement"
156
+ description: "Translate `Click on the screen to pick a color`."
157
+ placeholder: "Click on the screen to pick a color"
158
+ validations:
159
+ required: false
160
+ - type: input
161
+ id: translation-selectionToolKeyboardShortcuts
162
+ attributes:
163
+ label: "selectionToolKeyboardShortcuts"
164
+ description: "Translate `Selection tool: Use arrow keys to move selected items, lowercase/uppercase ‘i’ and ‘o’ to resize.`."
165
+ placeholder: "Selection tool: Use arrow keys to move selected items, lowercase/uppercase ‘i’ and ‘o’ to resize."
166
+ validations:
167
+ required: false
168
+ - type: input
169
+ id: translation-touchPanning
170
+ attributes:
171
+ label: "touchPanning"
172
+ description: "Translate `Touchscreen panning`."
173
+ placeholder: "Touchscreen panning"
174
+ validations:
175
+ required: false
176
+ - type: input
177
+ id: translation-freehandPen
178
+ attributes:
179
+ label: "freehandPen"
180
+ description: "Translate `Freehand`."
181
+ placeholder: "Freehand"
182
+ validations:
183
+ required: false
184
+ - type: input
185
+ id: translation-pressureSensitiveFreehandPen
186
+ attributes:
187
+ label: "pressureSensitiveFreehandPen"
188
+ description: "Translate `Freehand (pressure sensitive)`."
189
+ placeholder: "Freehand (pressure sensitive)"
190
+ validations:
191
+ required: false
192
+ - type: input
193
+ id: translation-arrowPen
194
+ attributes:
195
+ label: "arrowPen"
196
+ description: "Translate `Arrow`."
197
+ placeholder: "Arrow"
198
+ validations:
199
+ required: false
200
+ - type: input
201
+ id: translation-linePen
202
+ attributes:
203
+ label: "linePen"
204
+ description: "Translate `Line`."
205
+ placeholder: "Line"
206
+ validations:
207
+ required: false
208
+ - type: input
209
+ id: translation-outlinedRectanglePen
210
+ attributes:
211
+ label: "outlinedRectanglePen"
212
+ description: "Translate `Outlined rectangle`."
213
+ placeholder: "Outlined rectangle"
214
+ validations:
215
+ required: false
216
+ - type: input
217
+ id: translation-filledRectanglePen
218
+ attributes:
219
+ label: "filledRectanglePen"
220
+ description: "Translate `Filled rectangle`."
221
+ placeholder: "Filled rectangle"
222
+ validations:
223
+ required: false
224
+ - type: input
225
+ id: translation-lockRotation
226
+ attributes:
227
+ label: "lockRotation"
228
+ description: "Translate `Lock rotation`."
229
+ placeholder: "Lock rotation"
230
+ validations:
231
+ required: false
232
+ - type: input
233
+ id: translation-dropdownShown
234
+ attributes:
235
+ label: "dropdownShown"
236
+ description: "Translate ``(toolName) => `Dropdown for ${toolName} shown` ``."
237
+ placeholder: "(toolName) => `Dropdown for ${toolName} shown`"
238
+ validations:
239
+ required: false
240
+ - type: input
241
+ id: translation-dropdownHidden
242
+ attributes:
243
+ label: "dropdownHidden"
244
+ description: "Translate ``(toolName) => `Dropdown for ${toolName} hidden` ``."
245
+ placeholder: "(toolName) => `Dropdown for ${toolName} hidden`"
246
+ validations:
247
+ required: false
248
+ - type: input
249
+ id: translation-zoomLevel
250
+ attributes:
251
+ label: "zoomLevel"
252
+ description: "Translate ``(zoomPercent) => `Zoom: ${zoomPercent}%` ``."
253
+ placeholder: "(zoomPercent) => `Zoom: ${zoomPercent}%`"
254
+ validations:
255
+ required: false
256
+ - type: input
257
+ id: translation-colorChangedAnnouncement
258
+ attributes:
259
+ label: "colorChangedAnnouncement"
260
+ description: "Translate ``(color) => `Color changed to ${color}` ``."
261
+ placeholder: "(color) => `Color changed to ${color}`"
262
+ validations:
263
+ required: false
264
+ - type: input
265
+ id: translation-penTool
266
+ attributes:
267
+ label: "penTool"
268
+ description: "Translate ``(penId) => `Pen ${penId}` ``."
269
+ placeholder: "(penId) => `Pen ${penId}`"
270
+ validations:
271
+ required: false
272
+ - type: input
273
+ id: translation-selectionTool
274
+ attributes:
275
+ label: "selectionTool"
276
+ description: "Translate `Selection`."
277
+ placeholder: "Selection"
278
+ validations:
279
+ required: false
280
+ - type: input
281
+ id: translation-eraserTool
282
+ attributes:
283
+ label: "eraserTool"
284
+ description: "Translate `Eraser`."
285
+ placeholder: "Eraser"
286
+ validations:
287
+ required: false
288
+ - type: input
289
+ id: translation-touchPanTool
290
+ attributes:
291
+ label: "touchPanTool"
292
+ description: "Translate `Touch panning`."
293
+ placeholder: "Touch panning"
294
+ validations:
295
+ required: false
296
+ - type: input
297
+ id: translation-twoFingerPanZoomTool
298
+ attributes:
299
+ label: "twoFingerPanZoomTool"
300
+ description: "Translate `Panning and zooming`."
301
+ placeholder: "Panning and zooming"
302
+ validations:
303
+ required: false
304
+ - type: input
305
+ id: translation-undoRedoTool
306
+ attributes:
307
+ label: "undoRedoTool"
308
+ description: "Translate `Undo/Redo`."
309
+ placeholder: "Undo/Redo"
310
+ validations:
311
+ required: false
312
+ - type: input
313
+ id: translation-rightClickDragPanTool
314
+ attributes:
315
+ label: "rightClickDragPanTool"
316
+ description: "Translate `Right-click drag`."
317
+ placeholder: "Right-click drag"
318
+ validations:
319
+ required: false
320
+ - type: input
321
+ id: translation-pipetteTool
322
+ attributes:
323
+ label: "pipetteTool"
324
+ description: "Translate `Pick color from screen`."
325
+ placeholder: "Pick color from screen"
326
+ validations:
327
+ required: false
328
+ - type: input
329
+ id: translation-keyboardPanZoom
330
+ attributes:
331
+ label: "keyboardPanZoom"
332
+ description: "Translate `Keyboard pan/zoom shortcuts`."
333
+ placeholder: "Keyboard pan/zoom shortcuts"
334
+ validations:
335
+ required: false
336
+ - type: input
337
+ id: translation-textTool
338
+ attributes:
339
+ label: "textTool"
340
+ description: "Translate `Text`."
341
+ placeholder: "Text"
342
+ validations:
343
+ required: false
344
+ - type: input
345
+ id: translation-enterTextToInsert
346
+ attributes:
347
+ label: "enterTextToInsert"
348
+ description: "Translate `Text to insert`."
349
+ placeholder: "Text to insert"
350
+ validations:
351
+ required: false
352
+ - type: input
353
+ id: translation-changeTool
354
+ attributes:
355
+ label: "changeTool"
356
+ description: "Translate `Change tool`."
357
+ placeholder: "Change tool"
358
+ validations:
359
+ required: false
360
+ - type: input
361
+ id: translation-pasteHandler
362
+ attributes:
363
+ label: "pasteHandler"
364
+ description: "Translate `Copy paste handler`."
365
+ placeholder: "Copy paste handler"
366
+ validations:
367
+ required: false
368
+ - type: input
369
+ id: translation-findLabel
370
+ attributes:
371
+ label: "findLabel"
372
+ description: "Translate `Find`."
373
+ placeholder: "Find"
374
+ validations:
375
+ required: false
376
+ - type: input
377
+ id: translation-toNextMatch
378
+ attributes:
379
+ label: "toNextMatch"
380
+ description: "Translate `Next`."
381
+ placeholder: "Next"
382
+ validations:
383
+ required: false
384
+ - type: input
385
+ id: translation-closeFindDialog
386
+ attributes:
387
+ label: "closeFindDialog"
388
+ description: "Translate `Close`."
389
+ placeholder: "Close"
390
+ validations:
391
+ required: false
392
+ - type: input
393
+ id: translation-findDialogShown
394
+ attributes:
395
+ label: "findDialogShown"
396
+ description: "Translate `Find dialog shown`."
397
+ placeholder: "Find dialog shown"
398
+ validations:
399
+ required: false
400
+ - type: input
401
+ id: translation-findDialogHidden
402
+ attributes:
403
+ label: "findDialogHidden"
404
+ description: "Translate `Find dialog hidden`."
405
+ placeholder: "Find dialog hidden"
406
+ validations:
407
+ required: false
408
+ - type: input
409
+ id: translation-focusedFoundText
410
+ attributes:
411
+ label: "focusedFoundText"
412
+ description: "Translate ``(matchIdx, totalMatches) => `Viewing match ${matchIdx} of ${totalMatches}` ``."
413
+ placeholder: "(matchIdx, totalMatches) => `Viewing match ${matchIdx} of ${totalMatches}`"
414
+ validations:
415
+ required: false
416
+ - type: input
417
+ id: translation-anyDevicePanning
418
+ attributes:
419
+ label: "anyDevicePanning"
420
+ description: "Translate `Any device panning`."
421
+ placeholder: "Any device panning"
422
+ validations:
423
+ required: false
424
+ - type: input
425
+ id: translation-copied
426
+ attributes:
427
+ label: "copied"
428
+ description: "Translate ``(count, description) => `Copied ${count} ${description}` ``."
429
+ placeholder: "(count, description) => `Copied ${count} ${description}`"
430
+ validations:
431
+ required: false
432
+ - type: input
433
+ id: translation-pasted
434
+ attributes:
435
+ label: "pasted"
436
+ description: "Translate ``(count, description) => `Pasted ${count} ${description}` ``."
437
+ placeholder: "(count, description) => `Pasted ${count} ${description}`"
438
+ validations:
439
+ required: false
440
+ - type: input
441
+ id: translation-toolEnabledAnnouncement
442
+ attributes:
443
+ label: "toolEnabledAnnouncement"
444
+ description: "Translate ``(toolName) => `${toolName} enabled` ``."
445
+ placeholder: "(toolName) => `${toolName} enabled`"
446
+ validations:
447
+ required: false
448
+ - type: input
449
+ id: translation-toolDisabledAnnouncement
450
+ attributes:
451
+ label: "toolDisabledAnnouncement"
452
+ description: "Translate ``(toolName) => `${toolName} disabled` ``."
453
+ placeholder: "(toolName) => `${toolName} disabled`"
454
+ validations:
455
+ required: false
456
+ - type: input
457
+ id: translation-updatedViewport
458
+ attributes:
459
+ label: "updatedViewport"
460
+ description: "Translate `Transformed Viewport`."
461
+ placeholder: "Transformed Viewport"
462
+ validations:
463
+ required: false
464
+ - type: input
465
+ id: translation-transformedElements
466
+ attributes:
467
+ label: "transformedElements"
468
+ description: "Translate ``(elemCount) => `Transformed ${elemCount} element${elemCount === 1 ? '' : 's'}` ``."
469
+ placeholder: "(elemCount) => `Transformed ${elemCount} element${elemCount === 1 ? '' : 's'}`"
470
+ validations:
471
+ required: false
472
+ - type: input
473
+ id: translation-resizeOutputCommand
474
+ attributes:
475
+ label: "resizeOutputCommand"
476
+ description: "Translate ``(newSize) => `Resized image to ${newSize.w}x${newSize.h}` ``."
477
+ placeholder: "(newSize) => `Resized image to ${newSize.w}x${newSize.h}`"
478
+ validations:
479
+ required: false
480
+ - type: input
481
+ id: translation-addElementAction
482
+ attributes:
483
+ label: "addElementAction"
484
+ description: "Translate ``(componentDescription) => `Added ${componentDescription}` ``."
485
+ placeholder: "(componentDescription) => `Added ${componentDescription}`"
486
+ validations:
487
+ required: false
488
+ - type: input
489
+ id: translation-eraseAction
490
+ attributes:
491
+ label: "eraseAction"
492
+ description: "Translate ``(componentDescription, numElems) => `Erased ${numElems} ${componentDescription}` ``."
493
+ placeholder: "(componentDescription, numElems) => `Erased ${numElems} ${componentDescription}`"
494
+ validations:
495
+ required: false
496
+ - type: input
497
+ id: translation-duplicateAction
498
+ attributes:
499
+ label: "duplicateAction"
500
+ description: "Translate ``(componentDescription, numElems) => `Duplicated ${numElems} ${componentDescription}` ``."
501
+ placeholder: "(componentDescription, numElems) => `Duplicated ${numElems} ${componentDescription}`"
502
+ validations:
503
+ required: false
504
+ - type: input
505
+ id: translation-unionOf
506
+ attributes:
507
+ label: "unionOf"
508
+ description: "Translate ``(actionDescription, actionCount) => `Union: ${actionCount} ${actionDescription}` ``."
509
+ placeholder: "(actionDescription, actionCount) => `Union: ${actionCount} ${actionDescription}`"
510
+ validations:
511
+ required: false
512
+ - type: input
513
+ id: translation-inverseOf
514
+ attributes:
515
+ label: "inverseOf"
516
+ description: "Translate ``(actionDescription) => `Inverse of ${actionDescription}` ``."
517
+ placeholder: "(actionDescription) => `Inverse of ${actionDescription}`"
518
+ validations:
519
+ required: false
520
+ - type: input
521
+ id: translation-elements
522
+ attributes:
523
+ label: "elements"
524
+ description: "Translate `Elements`."
525
+ placeholder: "Elements"
526
+ validations:
527
+ required: false
528
+ - type: input
529
+ id: translation-erasedNoElements
530
+ attributes:
531
+ label: "erasedNoElements"
532
+ description: "Translate `Erased nothing`."
533
+ placeholder: "Erased nothing"
534
+ validations:
535
+ required: false
536
+ - type: input
537
+ id: translation-duplicatedNoElements
538
+ attributes:
539
+ label: "duplicatedNoElements"
540
+ description: "Translate `Duplicated nothing`."
541
+ placeholder: "Duplicated nothing"
542
+ validations:
543
+ required: false
544
+ - type: input
545
+ id: translation-rotatedBy
546
+ attributes:
547
+ label: "rotatedBy"
548
+ description: "Translate ``(degrees) => `Rotated by ${Math.abs(degrees)} degrees ${degrees < 0 ? 'clockwise' : 'counter-clockwise'}` ``."
549
+ placeholder: "(degrees) => `Rotated by ${Math.abs(degrees)} degrees ${degrees < 0 ? 'clockwise' : 'counter-clockwise'}`"
550
+ validations:
551
+ required: false
552
+ - type: input
553
+ id: translation-movedLeft
554
+ attributes:
555
+ label: "movedLeft"
556
+ description: "Translate `Moved left`."
557
+ placeholder: "Moved left"
558
+ validations:
559
+ required: false
560
+ - type: input
561
+ id: translation-movedUp
562
+ attributes:
563
+ label: "movedUp"
564
+ description: "Translate `Moved up`."
565
+ placeholder: "Moved up"
566
+ validations:
567
+ required: false
568
+ - type: input
569
+ id: translation-movedDown
570
+ attributes:
571
+ label: "movedDown"
572
+ description: "Translate `Moved down`."
573
+ placeholder: "Moved down"
574
+ validations:
575
+ required: false
576
+ - type: input
577
+ id: translation-movedRight
578
+ attributes:
579
+ label: "movedRight"
580
+ description: "Translate `Moved right`."
581
+ placeholder: "Moved right"
582
+ validations:
583
+ required: false
584
+ - type: input
585
+ id: translation-zoomedOut
586
+ attributes:
587
+ label: "zoomedOut"
588
+ description: "Translate `Zoomed out`."
589
+ placeholder: "Zoomed out"
590
+ validations:
591
+ required: false
592
+ - type: input
593
+ id: translation-zoomedIn
594
+ attributes:
595
+ label: "zoomedIn"
596
+ description: "Translate `Zoomed in`."
597
+ placeholder: "Zoomed in"
598
+ validations:
599
+ required: false
600
+ - type: input
601
+ id: translation-selectedElements
602
+ attributes:
603
+ label: "selectedElements"
604
+ description: "Translate ``(count) => `Selected ${count} element${count === 1 ? '' : 's'}` ``."
605
+ placeholder: "(count) => `Selected ${count} element${count === 1 ? '' : 's'}`"
606
+ validations:
607
+ required: false
608
+ - type: input
609
+ id: translation-unlabeledImageNode
610
+ attributes:
611
+ label: "unlabeledImageNode"
612
+ description: "Translate `Unlabeled image`."
613
+ placeholder: "Unlabeled image"
614
+ validations:
615
+ required: false
616
+ - type: input
617
+ id: translation-stroke
618
+ attributes:
619
+ label: "stroke"
620
+ description: "Translate `Stroke`."
621
+ placeholder: "Stroke"
622
+ validations:
623
+ required: false
624
+ - type: input
625
+ id: translation-svgObject
626
+ attributes:
627
+ label: "svgObject"
628
+ description: "Translate `SVG Object`."
629
+ placeholder: "SVG Object"
630
+ validations:
631
+ required: false
632
+ - type: input
633
+ id: translation-text
634
+ attributes:
635
+ label: "text"
636
+ description: "Translate ``(text) => `Text object: ${text}` ``."
637
+ placeholder: "(text) => `Text object: ${text}`"
638
+ validations:
639
+ required: false
640
+ - type: input
641
+ id: translation-imageNode
642
+ attributes:
643
+ label: "imageNode"
644
+ description: "Translate ``(label) => `Image: ${label}` ``."
645
+ placeholder: "(label) => `Image: ${label}`"
646
+ validations:
647
+ required: false
648
+ - type: input
649
+ id: translation-pathNodeCount
650
+ attributes:
651
+ label: "pathNodeCount"
652
+ description: "Translate ``(count) => `There are ${count} visible path objects.` ``."
653
+ placeholder: "(count) => `There are ${count} visible path objects.`"
654
+ validations:
655
+ required: false
656
+ - type: input
657
+ id: translation-textNodeCount
658
+ attributes:
659
+ label: "textNodeCount"
660
+ description: "Translate ``(count) => `There are ${count} visible text nodes.` ``."
661
+ placeholder: "(count) => `There are ${count} visible text nodes.`"
662
+ validations:
663
+ required: false
664
+ - type: input
665
+ id: translation-imageNodeCount
666
+ attributes:
667
+ label: "imageNodeCount"
668
+ description: "Translate ``(nodeCount) => `There are ${nodeCount} visible image nodes.` ``."
669
+ placeholder: "(nodeCount) => `There are ${nodeCount} visible image nodes.`"
670
+ validations:
671
+ required: false
672
+ - type: input
673
+ id: translation-textNode
674
+ attributes:
675
+ label: "textNode"
676
+ description: "Translate ``(content) => `Text: ${content}` ``."
677
+ placeholder: "(content) => `Text: ${content}`"
678
+ validations:
679
+ required: false
680
+ - type: input
681
+ id: translation-rerenderAsText
682
+ attributes:
683
+ label: "rerenderAsText"
684
+ description: "Translate `Re-render as text`."
685
+ placeholder: "Re-render as text"
686
+ validations:
687
+ required: false
688
+ - type: input
689
+ id: translation-accessibilityInputInstructions
690
+ attributes:
691
+ label: "accessibilityInputInstructions"
692
+ description: "Translate `Press \"t\" to read the contents of the viewport as text. Use the arrow keys to move the viewport, click and drag to draw strokes. Press \"w\" to zoom in and \"s\" to zoom out.`."
693
+ placeholder: "Press \"t\" to read the contents of the viewport as text. Use the arrow keys to move the viewport, click and drag to draw strokes. Press \"w\" to zoom in and \"s\" to zoom out."
694
+ validations:
695
+ required: false
696
+ - type: input
697
+ id: translation-loading
698
+ attributes:
699
+ label: "loading"
700
+ description: "Translate ``(percentage) => `Loading ${percentage}%...` ``."
701
+ placeholder: "(percentage) => `Loading ${percentage}%...`"
702
+ validations:
703
+ required: false
704
+ - type: input
705
+ id: translation-imageEditor
706
+ attributes:
707
+ label: "imageEditor"
708
+ description: "Translate `Image Editor`."
709
+ placeholder: "Image Editor"
710
+ validations:
711
+ required: false
712
+ - type: input
713
+ id: translation-doneLoading
714
+ attributes:
715
+ label: "doneLoading"
716
+ description: "Translate `Done loading`."
717
+ placeholder: "Done loading"
718
+ validations:
719
+ required: false
720
+ - type: input
721
+ id: translation-undoAnnouncement
722
+ attributes:
723
+ label: "undoAnnouncement"
724
+ description: "Translate ``(commandDescription) => `Undid ${commandDescription}` ``."
725
+ placeholder: "(commandDescription) => `Undid ${commandDescription}`"
726
+ validations:
727
+ required: false
728
+ - type: input
729
+ id: translation-redoAnnouncement
730
+ attributes:
731
+ label: "redoAnnouncement"
732
+ description: "Translate ``(commandDescription) => `Redid ${commandDescription}` ``."
733
+ placeholder: "(commandDescription) => `Redid ${commandDescription}`"
734
+ validations:
735
+ required: false
736
+ - type: textarea
737
+ id: additional-comments
738
+ attributes:
739
+ label: "Additional information"
740
+ placeholder: "Any additional information/comments on the translation can go here."
741
+ validations:
742
+ required: false