vibe-editor 0.0.5 → 0.0.6

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vibe-editor",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "main": "src/scripts/js/scripts/VIBE.js",
5
5
  "keywords": [],
6
6
  "author": "Matthias Nowakowski",
@@ -15,7 +15,8 @@
15
15
  "files": [
16
16
  "src/images/*/*",
17
17
  "src/scripts/js/*",
18
- "src/fonts/*"
18
+ "src/fonts/*",
19
+ "src/styles/*.css"
19
20
  ],
20
21
  "dependencies": {
21
22
  "@babel/plugin-transform-classes": "^7.16.7",
@@ -76,17 +76,13 @@ class PhantomElementHandler {
76
76
  var _a, _b, _c, _d, _e;
77
77
  if (this.m2s.getLastMouseEnter().staff === null)
78
78
  return;
79
- // var pt = coordinates.transformToDOMMatrixCoordinates(e.clientX, e.clientY, this.interactionOverlay)
80
- // var relX = pt.x
81
- // var relY = pt.y
82
79
  var definitionScale = (_b = cq.getVrvSVG(this.containerId).querySelector("#" + ((_a = this.m2s.getLastMouseEnter().staff) === null || _a === void 0 ? void 0 : _a.getAttribute("refId")))) === null || _b === void 0 ? void 0 : _b.closest(".definition-scale");
83
- if (definitionScale == undefined || definitionScale == null)
80
+ if (!definitionScale)
84
81
  return;
85
- var pt = coordinates.transformToDOMMatrixCoordinates(e.clientX, e.clientY, this.interactionOverlay);
82
+ var pt = coordinates.transformToDOMMatrixCoordinates(e.clientX, e.clientY, cq.getInteractOverlay(this.containerId));
86
83
  var relX = pt.x;
87
84
  var relY = pt.y;
88
- var dsCoords = coordinates.getDOMMatrixCoordinates(definitionScale, definitionScale.closest(".page"));
89
- //console.log(relX, dsCoords, definitionScale.getBoundingClientRect())
85
+ var dsCoords = coordinates.getDOMMatrixCoordinates(definitionScale, cq.getInteractOverlay(this.containerId));
90
86
  if (relX < dsCoords.left || relX > dsCoords.right) {
91
87
  this.isTrackingMouse = false;
92
88
  return;
@@ -117,9 +113,6 @@ class PhantomElementHandler {
117
113
  });
118
114
  this.setPhantomLineListeners();
119
115
  }
120
- // if(e.type === "draggingNote"){
121
- // console.log(phantomNoteElement, this.phantomLines)
122
- // }
123
116
  }
124
117
  removeLines() {
125
118
  var lines = this.interactionOverlay.querySelectorAll(".phantomLine");
@@ -4,10 +4,6 @@ const cq = require("../utils/convenienceQueries");
4
4
  const meiConverter = require("../utils/MEIConverter");
5
5
  class WindowHandler {
6
6
  constructor() {
7
- /**
8
- * Update all elements that are affected by a window size change
9
- */
10
- this.scrollingTimer = new Array();
11
7
  this.updateFunction = this.update.bind(this);
12
8
  /**
13
9
  * Reload svg when registered events ended
@@ -26,17 +22,18 @@ class WindowHandler {
26
22
  while (this.w !== this.w.parent) {
27
23
  this.w = this.w.parent;
28
24
  }
25
+ this.scrollingTimer = new Array();
29
26
  }
30
27
  setListeners() {
31
28
  this.eventContainer = this.container;
32
29
  window.addEventListener("scroll", this.updateFunction);
33
30
  //window.addEventListener("resize", this.update)
34
- this.w.addEventListener("resize", this.reloadSVGFunction);
31
+ //this.w.addEventListener("resize", this.reloadSVGFunction)
35
32
  this.w.addEventListener("deviceorientation", this.updateFunction);
36
33
  this.eventContainer.querySelector("#sidebarContainer").addEventListener("transitionend", this.updateFunction);
37
- this.eventContainer.querySelector("#sidebarContainer").addEventListener("transitionend", this.reloadSVGFunction);
34
+ //this.eventContainer.querySelector("#sidebarContainer").addEventListener("transitionend", this.reloadSVGFunction)
38
35
  this.eventContainer.querySelector("#sidebarContainer").addEventListener("resizemove", this.updateFunction);
39
- this.eventContainer.querySelector("#sidebarContainer").addEventListener("resizemove", this.reloadSVGFunction);
36
+ //this.eventContainer.querySelector("#sidebarContainer").addEventListener("resizemove", this.reloadSVGFunction)
40
37
  this.vrvSVG.addEventListener("scroll", this.updateFunction);
41
38
  //this.vrvSVG.addEventListener("resize", this.update)
42
39
  this.vrvSVG.addEventListener("deviceorientation", this.updateFunction);
@@ -71,6 +68,9 @@ class WindowHandler {
71
68
  (_h = this.eventContainer) === null || _h === void 0 ? void 0 : _h.removeEventListener("loadingEnd", this.loadContainerAttrFunction);
72
69
  return this;
73
70
  }
71
+ /**
72
+ * Update all elements that are affected by a window size change
73
+ */
74
74
  update(e) {
75
75
  var _a;
76
76
  // special rule for transition events since so much with different propertynames are fired
@@ -12,9 +12,9 @@ class VerovioWrapper {
12
12
  //@ts-ignore
13
13
  this.vrvToolkit = new verovio.toolkit() || null;
14
14
  this.r = 1;
15
- // if (this.isRetina()) {
16
- // this.r = 2
17
- // }
15
+ if (this.isRetina()) {
16
+ this.r = 2;
17
+ }
18
18
  this.widthValue = 1500;
19
19
  var pageWidth = (this.widthValue / (window.devicePixelRatio / this.r)) / (screen.availHeight / window.innerWidth);
20
20
  this.options = {
@@ -24,7 +24,7 @@ class VerovioWrapper {
24
24
  pageMarginTop: 50,
25
25
  adjustPageHeight: true,
26
26
  font: 'Bravura',
27
- pageWidth: pageWidth,
27
+ //pageWidth: pageWidth, // adjust size with window size
28
28
  //pageHeight: pageWidth / 4,
29
29
  //justifyVertically: true,
30
30
  svgViewBox: true,
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.transformToDOMMatrixCoordinates = exports.getDOMMatrixCoordinates = void 0;
3
+ exports.transformToDOMMatrixCoordinates = exports.getCanvasCordinates = exports.getDOMMatrixCoordinates = void 0;
4
4
  /**
5
5
  * Get DOMMatrix coordnates of element according to parent canvas class. Returns null if no canvas is found. If element is DOMRect, canvas must be provided
6
6
  * @param element
@@ -33,9 +33,33 @@ function getDOMMatrixCoordinates(element, canvas = null) {
33
33
  ptRB = ptRB.matrixTransform(canvasMatrix);
34
34
  var width = ptRB.x - ptLT.x;
35
35
  var height = ptRB.y - ptLT.y;
36
- return { left: ptLT.x, top: ptLT.y, right: ptRB.x, bottom: ptRB.y, width: width, height: height, x: ptLT.x, y: ptLT.y };
36
+ return { left: ptLT.x, top: ptLT.y, right: ptRB.x, bottom: ptRB.y, width: width, height: height, x: ptLT.x, y: ptLT.y, matrix: canvasMatrix };
37
37
  }
38
38
  exports.getDOMMatrixCoordinates = getDOMMatrixCoordinates;
39
+ function getCanvasCordinates(coords, canvas = null) {
40
+ if (!coords.matrix) {
41
+ throw new Error("DOMMatrix is missing.");
42
+ }
43
+ if (canvas === null) {
44
+ canvas = canvas instanceof Element ? canvas.closest(".canvas") : null;
45
+ if (canvas instanceof DOMRect) {
46
+ throw new Error("Canvas must be provided, if input is instance of DOMRect. Actual instance: " + canvas.constructor.name);
47
+ }
48
+ if (canvas === null)
49
+ return;
50
+ }
51
+ // Reverse the transformation
52
+ var canvasMatrix = coords.matrix.inverse();
53
+ var ptLT = new DOMPoint(coords.left, coords.top);
54
+ ptLT = ptLT.matrixTransform(canvasMatrix);
55
+ var ptRB = new DOMPoint(coords.right, coords.bottom);
56
+ ptRB = ptRB.matrixTransform(canvasMatrix);
57
+ var width = ptRB.x - ptLT.x;
58
+ var height = ptRB.y - ptLT.y;
59
+ // Create and return the DOMRect
60
+ return new DOMRect(ptLT.x, ptLT.y, width, height);
61
+ }
62
+ exports.getCanvasCordinates = getCanvasCordinates;
39
63
  /**
40
64
  * Transforms the given coordinates for a given canvas
41
65
  * @param x
@@ -0,0 +1,811 @@
1
+ @import '~bootstrap/dist/css/bootstrap.min.css';
2
+
3
+ @font-face {
4
+ font-family: "Bravura";
5
+ src: url('../fonts/bravura/svg/Bravura.svg#7377dd80c36b825ad2214a14c2421925') format('svg');
6
+ font-weight: normal;
7
+ font-style: normal;
8
+ }
9
+
10
+ @font-face {
11
+ font-family: "BravuraText";
12
+ src: url('../fonts/bravura/svg/BravuraText.svg#f678e10c1f5609a8428c245cc86aa255') format('svg');
13
+ font-weight: normal;
14
+ font-style: normal;}
15
+
16
+ .dropdown button{
17
+ height: 100%;
18
+ }
19
+
20
+ .vibe-container{
21
+ position: absolute;
22
+ width: 100%;
23
+ height: 100%;
24
+ background: white;
25
+ /* overflow: scroll; */
26
+ }
27
+
28
+ body.waiting * {
29
+ cursor: wait !important;
30
+ }
31
+ /*
32
+ .textmode * {
33
+ cursor: text;
34
+ } */
35
+
36
+
37
+ #scoreRects > :is(.notehead, .clef, .meterSig, .keySig, .rest, .harm, .manipulator, .slur, .tie, .tupletNum, .tupletBracket):hover{
38
+ cursor: pointer;
39
+ }
40
+
41
+ #scoreRects .notehead:hover{
42
+ cursor: ns-resize !important;
43
+ }
44
+
45
+ .clickmode{
46
+ cursor: crosshair
47
+ }
48
+
49
+ #vrvSVG{
50
+ top: 0px;
51
+ width: 100%;
52
+ height: auto;
53
+ position: absolute;
54
+ display: flex;
55
+ flex-direction: column;
56
+ }
57
+
58
+ /* .layer:not(.activeLayer) *{
59
+ fill: rgba(0, 0 , 0, 0.2)
60
+ } */
61
+
62
+ /* .layer:not(.activeLayer) :is(.rest, .mRest) > use{
63
+ fill: rgba(0, 0 , 0, 0.0)
64
+ } */
65
+
66
+ .page{
67
+ translate: 0 10%;
68
+ }
69
+
70
+ #vrvSVG .systemLine{
71
+ stroke: black;
72
+ stroke-dasharray: 10rem;
73
+ stroke-width: 1rem;
74
+ }
75
+
76
+ #interactionOverlay{
77
+ position: absolute;
78
+ top: 0px;
79
+ width: 100%;
80
+ z-index: 100;
81
+ }
82
+
83
+ /* This one is for Debugging.
84
+ Change fill-opacity and stroke-opacity to display boundsing boxes*/
85
+ .debug #scoreRects *, #scoreRects .moving{
86
+ stroke-width: 1px;
87
+ stroke: black;
88
+ fill: gray;
89
+ fill-opacity: 0.1;
90
+ stroke-opacity: 1;
91
+ }
92
+
93
+ /* .debug > div#svgContainer > svg#interactionOverlay{
94
+ stroke-width: 2px;
95
+ stroke: red;
96
+ stroke-opacity: 1;
97
+ stroke-dasharray: 10px;
98
+ } */
99
+
100
+ /* .debug #vrvSVG{
101
+ stroke-width: 2px;
102
+ stroke: blue;
103
+ stroke-opacity: 1;
104
+ stroke-dasharray: 2px;
105
+ } */
106
+
107
+ /* .debug .page{
108
+ stroke-width: 2px;
109
+ stroke: green;
110
+ stroke-opacity: 1;
111
+ stroke-dasharray: 5px;
112
+ } */
113
+
114
+ #scoreRects *{
115
+ stroke-width: 1px;
116
+ stroke: black;
117
+ fill: gray;
118
+ fill-opacity: 0;
119
+ stroke-opacity: 0;
120
+ }
121
+
122
+
123
+ text{
124
+ cursor: text;
125
+ }
126
+
127
+
128
+ /*
129
+ #svgContainer, .annotLinkedText, .annotLinkedText *{
130
+ white-space: pre;
131
+ }
132
+ */
133
+
134
+ #svgContainer{
135
+ position: relative;
136
+ height: 100%;
137
+ overflow: scroll;
138
+ }
139
+
140
+ .staff.lastEntered > .staffLine:first-of-type, .staff.lastEntered > .staffLine:last-of-type, .staff.lastEntered ~ .barLine{
141
+ filter: drop-shadow(5px 16px 15px black)
142
+ }
143
+
144
+ /* .note, .note *, .rest, .rest *, .staff, .measure, .manipulator, .slur, .tie *{
145
+ cursor: pointer !important;
146
+ } */
147
+
148
+ /*
149
+ * TOOLBAR
150
+ */
151
+
152
+ .verticalLine{
153
+ border-left: 1px solid black;
154
+ height: auto;
155
+ position: absolute;
156
+ }
157
+
158
+ #insertMode.empty{
159
+ background-image: url(../images/GUI/edit-solid.svg);
160
+ background-position-x: 10%;
161
+ }
162
+
163
+
164
+ #insertMode{
165
+ background-color: white;
166
+ color: black;
167
+ }
168
+
169
+ .smufl{
170
+ font-family: "BravuraText";
171
+ /* font-size: xx-large; */
172
+ font-size: 160%;
173
+ }
174
+
175
+ .harm *{
176
+ font-family: "BravuraText";
177
+ }
178
+
179
+ #playBtn{
180
+ background-image: url(../images/GUI/play-solid.svg);
181
+ background-size: 80%;
182
+ }
183
+
184
+ #pauseBtn{
185
+ background-image: url(../images/GUI/pause-solid.svg);
186
+ background-size: 80%;
187
+ }
188
+
189
+ #rewindBtn{
190
+ background-image: url(../images/GUI/backward-fast-solid.svg);
191
+ background-size: 80%;
192
+ }
193
+
194
+ #zoomInBtn{
195
+ background-image: url(../images/GUI/zoomin.svg);
196
+ background-size: 80%;
197
+ }
198
+
199
+ #zoomOutBtn{
200
+ background-image: url(../images/GUI/zoomout.svg);
201
+ background-size: 80%;
202
+ }
203
+
204
+ #tupletBtn{
205
+ background-image: url(../images/GUI/triplet.svg);
206
+ background-size: 80%;
207
+ color: rgba(0, 0, 0, 0.0)
208
+ }
209
+
210
+ .btn{
211
+ background-repeat: no-repeat;
212
+ background-position-x: center;
213
+ background-position-y: center;
214
+ outline: none;
215
+ font-family: Bravura;
216
+ font-size: larger;
217
+ }
218
+
219
+ .articulationGroup .btn{
220
+ font-size: larger;
221
+ }
222
+
223
+ .btn-group-md{
224
+ display: flex;
225
+ }
226
+
227
+ /* .btn:hover, .btn.selected {
228
+ filter: invert();
229
+ color: black;
230
+ background-color: white;
231
+ } */
232
+
233
+ .btn:hover{
234
+ background-color: lightgray;
235
+ color: #ffffff;
236
+
237
+ }
238
+
239
+ .btn.selected {
240
+ background-color: black;
241
+ color: #ffffff;
242
+
243
+ }
244
+
245
+ #btnToolbar{
246
+ top: 0px;
247
+ transition: 0.5s;
248
+ /*height: 5%;*/
249
+ }
250
+
251
+ #customToolbar :first-child{
252
+ margin-left: 0.25em;
253
+ }
254
+
255
+ #customToolbar{
256
+ box-shadow: 0px 1px 3px lightgray;
257
+ }
258
+
259
+ #btnToolbar{
260
+ box-shadow: inset 0px -3px 3px lightgray;
261
+ }
262
+
263
+ .dropdown-item.selected{
264
+ background-color: antiquewhite;
265
+ font-weight: bold;
266
+ }
267
+
268
+ .accordion-item, .accordion-header{
269
+ border-bottom-style: solid;
270
+ border-bottom-color: black;
271
+ border-bottom-width: 1.5px;
272
+ }
273
+
274
+ .accordion-button{
275
+ padding: 1.5rem 1.25rem !important;
276
+ }
277
+
278
+ #midiDeviceSelect{
279
+ width: 100%;
280
+ }
281
+
282
+ #toggleSidebar{
283
+ border-bottom-left-radius: 0;
284
+ border-top-left-radius: 0;
285
+ }
286
+
287
+ #toggleSidebar.closedSidebar{
288
+ background-image: url(../images/GUI/bars-solid.svg);
289
+ background-size: 80%;
290
+ }
291
+
292
+ #toggleSidebar.openSidebar{
293
+ background-image: url(../images/GUI/bars-solid.svg);
294
+ background-size: 80%;
295
+ }
296
+
297
+ #insertDropdownKM .hide{
298
+ display: none;
299
+ }
300
+
301
+ #insertToggleDiv{
302
+ display: none;
303
+ }
304
+
305
+ #fileSelectGroup{
306
+ align-self: flex-end;
307
+ margin-left: auto;
308
+ display:flex;
309
+ }
310
+
311
+ /* #midiSelectGroup{
312
+ align-self:baseline;
313
+ margin-left: auto;
314
+ display:flex
315
+ } */
316
+
317
+ #handlerGroup{
318
+ display: none
319
+ }
320
+
321
+ #importXML, #importAudioFile{
322
+ display: none;
323
+ }
324
+
325
+ #sidebarContainer{
326
+ position: absolute;
327
+ left: 0;
328
+ top: 0;
329
+ height: 100%;
330
+ border-color: black;
331
+ border-style: solid;
332
+ border-width: 1px;
333
+ background-color: white;
334
+ transition: 0.5s;
335
+ border-top-left-radius: 5px;
336
+ border-bottom-left-radius: 5px;
337
+ overflow: visible;
338
+ display: flex;
339
+ flex-direction: column;
340
+ }
341
+
342
+ #sidebarContainer a{
343
+ display: block;
344
+ padding-left: 10px;
345
+ }
346
+
347
+ /* #sidebarContainer *{
348
+ font-size: 10pt;
349
+ } */
350
+
351
+ #sidebarContainer.closedSidebar{
352
+ visibility: hidden;
353
+ width: 0
354
+ }
355
+
356
+ #sidebarContainer.openSidebar{
357
+ visibility: visible;
358
+ width: 10%;
359
+ }
360
+
361
+ #sidebarContainer.openSidebar ~ div {
362
+ margin-left: 10%;
363
+ width: 90%;
364
+ flex-wrap: wrap;
365
+ display: flex;
366
+ transition: 0.5s;
367
+ }
368
+
369
+ #sidebarContainer.closedSidebar ~ div{
370
+ margin-left: 0;
371
+ width: 100%;
372
+ transition: 0.5s;
373
+ }
374
+
375
+ #sidebarList{
376
+ position: relative;
377
+ overflow: scroll;
378
+ width: 100%;
379
+ resize: vertical;
380
+ }
381
+
382
+ .dropKey, .dropClef, .dropTime, .dropTempo{
383
+ fill: orange;
384
+ color: orange;
385
+ }
386
+
387
+ #timeDiv{
388
+ cursor:pointer !important;
389
+ }
390
+
391
+ #annotList{
392
+ width: 100%;
393
+ position: relative;
394
+ background-color: white;
395
+ border-top-color: black;
396
+ border-left-color: white;
397
+ border-right-color: white;
398
+ border-bottom-color: white;
399
+ border-style: double;
400
+ overflow: scroll;
401
+ order: 2;
402
+ resize: vertical;
403
+ }
404
+
405
+ #annotList > a{
406
+ white-space: pre-line;
407
+ overflow: unset;
408
+ }
409
+
410
+
411
+ .list-group{
412
+ display: block;
413
+ }
414
+
415
+ #btnToolbar{
416
+ display: flex;
417
+ }
418
+
419
+ .btn-toolbar:not(:empty){
420
+ border-top-color: rgba(0, 0, 0, 0);
421
+ border-right-color: rgba(0, 0, 0, 0);
422
+ border-left-color: rgba(0, 0, 0, 0);
423
+ border-bottom-color: black;
424
+ border-bottom-style: solid;
425
+ border-bottom-width: 3px;
426
+ }
427
+
428
+ .tabBtn{
429
+ border-bottom-color: rgba(0, 0, 0, 0.0);
430
+ border-bottom-left-radius: 0% !important;
431
+ border-bottom-right-radius: 0% !important;
432
+ margin-bottom: -3px;
433
+ }
434
+ [role="group"]{
435
+ margin-top: 3px;
436
+ margin-bottom: 3px;
437
+ }
438
+
439
+ #customToolbar [role="group"]{
440
+ margin-top: 1%;
441
+ margin-bottom: 1%;
442
+ }
443
+
444
+ [role="group"] button:first-of-type{
445
+ border-bottom-left-radius: .2rem;
446
+ border-top-left-radius: .2rem;
447
+ }
448
+
449
+ [role="group"] button:last-of-type{
450
+ border-bottom-right-radius: .2rem;
451
+ border-top-right-radius: .2rem;
452
+ }
453
+
454
+ .btn-group-md>.btn, .btn-sm{
455
+ border-radius: 0%;
456
+ }
457
+
458
+
459
+ /*
460
+ * ANNOTATIONS
461
+ */
462
+
463
+ /*
464
+ #annotationCanvas.back *{
465
+ opacity: 0.5;
466
+ }*/
467
+
468
+ /* #annotationCanvas.front *{
469
+ opacity: 1;
470
+ } */
471
+
472
+
473
+
474
+ .annotLinkedText .annotFO{
475
+ /*background-color: rgba(255, 255, 153, 0.8);*/
476
+ background-color: rgba(0, 0, 0, 0.1);
477
+ border-radius: 0px 10px 10px 10px;
478
+ border-color: black;
479
+ border-style: solid;
480
+ border-width: 3px;
481
+ position: absolute;
482
+ }
483
+
484
+ .annotFO{
485
+ /* width: 100%;
486
+ height: 100%; */
487
+ width: 15%;
488
+ height: 10%;
489
+ }
490
+
491
+
492
+ .annotStaticText .annotFO div{
493
+ background-color: rgb(201, 167, 167);
494
+ border: 1px solid black;
495
+ }
496
+
497
+ .annotDiv{
498
+ height: 100%;
499
+ width: 100%;
500
+ }
501
+
502
+ .annotLine{
503
+ stroke-width: 2px;
504
+ stroke: lightskyblue;
505
+ stroke-dasharray: 2px;
506
+ }
507
+
508
+
509
+ .lineDragRect{
510
+ stroke-width: 1px;
511
+ stroke: black;
512
+ fill: wheat;
513
+ height: 10px;
514
+ width: 10px;
515
+ transform: translate(-5, -5);
516
+ }
517
+
518
+ .highlightAnnotation, .highlightChord{
519
+ /*fill-opacity: 0.1;
520
+ outline-style: dotted;
521
+ outline-width: 0.5px;
522
+ outline-color: black; */
523
+ filter: drop-shadow( 0px 0px 3em teal)
524
+ }
525
+
526
+ #playCursor{
527
+ stroke-width: 10px;
528
+ stroke: orangered;
529
+ }
530
+
531
+ .layer[n="1"] .highlighted{
532
+
533
+ filter: drop-shadow(30px 10px 4px rgb(255, 71, 255));
534
+ }
535
+
536
+ #phantomNote.l1{
537
+ fill: rgb(255, 71, 255)
538
+ }
539
+
540
+
541
+ .layer[n="2"] .highlighted{
542
+ filter: drop-shadow(30px 10px 4px green);
543
+ }
544
+
545
+ #phantomNote.l2{
546
+ fill: green;
547
+ }
548
+
549
+ .layer[n="3"] .highlighted{
550
+ filter: drop-shadow(30px 10px 4px blue);
551
+ }
552
+
553
+ #phantomNote.l3{
554
+ fill: blue;
555
+ }
556
+
557
+ .layer[n="4"] .highlighted{
558
+ filter: drop-shadow(30px 10px 4px orange);
559
+ }
560
+
561
+ #phantomNote.l4{
562
+ fill: orange;
563
+ }
564
+
565
+ .customAnnotShape{
566
+ fill: orange;
567
+ fill-opacity: 0.2;
568
+ outline-style: dotted;
569
+ outline-width: 0.5px;
570
+ outline-color: black;
571
+ }
572
+
573
+ .customAnnotShape.selected{
574
+ outline-style: dashed;
575
+ outline-color:cornflowerblue;
576
+ outline-width: 1;
577
+ }
578
+
579
+
580
+ .annotLinkedText.selected > .annotFO, .annotStaticText.selected > .annotFO{
581
+ border-color:cornflowerblue;
582
+ border-width: 1;
583
+ border-style: dashed;
584
+ }
585
+
586
+
587
+ [contentEditable=false]:empty:not(:focus):before{
588
+ content:attr(data-text);
589
+ color: lightgray;
590
+ }
591
+
592
+ g.currentlyPlaying *{
593
+ fill:red !important;
594
+ fill-opacity: 1;
595
+ }
596
+
597
+ #followerRect{
598
+ fill: red;
599
+ fill-opacity: 0.3;
600
+ outline-style: none;
601
+ }
602
+
603
+ .marked, .marked *{
604
+ /* fill: red !important; */
605
+ filter: invert() drop-shadow(0 0 1rem crimson);
606
+ }
607
+
608
+ .lastAdded{
609
+ fill:darkcyan
610
+ }
611
+
612
+ .playing{
613
+ fill: red
614
+ }
615
+
616
+ /* LABELS */
617
+
618
+ .labelDiv{
619
+ border: 2px solid black;
620
+ border-radius: 10px;
621
+ height: fit-content;
622
+ width: fit-content;
623
+ min-width: 50px;
624
+ background-color: beige;
625
+ font-size: 40px;
626
+ font-family: 'Times New Roman', Times, serif;
627
+ }
628
+
629
+ .labekFO{
630
+ height: 100%;
631
+ width: 100%;
632
+ }
633
+
634
+ /* KEYMODE */
635
+
636
+ #keyModeSelectRect{
637
+ stroke: black;
638
+ stroke-opacity: 1;
639
+ stroke-width: 2px;
640
+ fill: lightskyblue;
641
+ fill-opacity: 0.4;
642
+ }
643
+
644
+ /* #manipulatorCanvas > #cursor{
645
+ display: none
646
+ } */
647
+
648
+ /* CLICK MODE */
649
+
650
+
651
+ /* #phantomNote{
652
+ transform: skew(-20deg);
653
+ } */
654
+
655
+
656
+ .phantomLine, .phantomMarker{
657
+ stroke-width: 2px;
658
+ stroke:black;
659
+ opacity: 0.5;
660
+ }
661
+
662
+
663
+ /*StatusBar*/
664
+
665
+ #statusBar{
666
+ position: absolute;
667
+ height: 5%;
668
+ width: 100%;
669
+ bottom: 0;
670
+ background-color: lightskyblue;
671
+ border-style: outset;
672
+ z-index: 100;
673
+ }
674
+
675
+
676
+ /*Score Manipulator*/
677
+
678
+ #manipulatorCanvas{
679
+ z-index: 101;
680
+ }
681
+
682
+ .signElement{
683
+ stroke: black;
684
+ stroke-width: 10%;
685
+ }
686
+
687
+ #measureAdder, #measureRemover{
688
+ height: 10%;
689
+ width: 10%;
690
+ }
691
+
692
+ #manipulationButton{
693
+ stroke:black;
694
+ stroke-width: 5%;
695
+ fill: antiquewhite;
696
+ }
697
+
698
+ .manipulator:hover *:not(.selected) , .manipulator.selected{
699
+ filter: invert();
700
+ cursor: pointer;
701
+ }
702
+
703
+ .voiceBtn.inactive rect{
704
+ fill: lightgray;
705
+ }
706
+
707
+ .voiceBtn.inactive text{
708
+ fill: gray;
709
+ }
710
+
711
+
712
+ .voiceBtn rect, .voiceBtn foreignObject{
713
+ stroke-width: 5%;
714
+ stroke: black;
715
+ width: 100%;
716
+ height: 100%;
717
+ fill: antiquewhite
718
+ }
719
+
720
+ rect.voiceBtn{
721
+ stroke: black;
722
+ fill: antiquewhite;
723
+ }
724
+
725
+ .voiceBtn foreignObject > div{
726
+ text-align: center;
727
+ position:relative;
728
+ top: -20%;
729
+ }
730
+
731
+ /* .voiceBtn text, .voiceBtn foreignObject > div{
732
+ font-size: 100%;
733
+ width: 100%;
734
+ height: 100%;
735
+ fill: black;
736
+ }
737
+
738
+
739
+
740
+ rect.voiceBtn + text{
741
+ font-size: 100%;
742
+ fill: black;
743
+ } */
744
+
745
+ .tooltip.show{
746
+ display:contents;
747
+ background: skyblue;
748
+ color: #643045;
749
+ font-weight: bold;
750
+ padding: 5px 10px;
751
+ font-size: 13px;
752
+ border-radius: 4px;
753
+ border-color: maroon;
754
+ display: block;
755
+ opacity: 1;
756
+ position: absolute;
757
+ }
758
+
759
+ /* .tooltip{
760
+ inset: !important;
761
+ } */
762
+
763
+ .tooltip.hide{
764
+ display: none
765
+ }
766
+
767
+ .overfillMark{
768
+ color:rgba(0, 0, 0, 0.5);
769
+ font-size: 12em;
770
+ font-weight: bolder;
771
+ z-index: 100;
772
+
773
+ }
774
+
775
+ /*Disable interaction*/
776
+
777
+ #ff_warning{
778
+ background: rgba(0, 0, 0, 0.25);
779
+ width: 100%;
780
+ margin: auto;
781
+ height: 100%;
782
+ text-align: center;
783
+ font-size: xx-large;
784
+ color:crimson;
785
+ text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;
786
+ }
787
+
788
+ .hideUI{
789
+ display: none !important;
790
+ }
791
+
792
+ #pauseNote{
793
+ display: none;
794
+ }
795
+
796
+ #interactionOverlay, #vrvSVG > svg{
797
+ transform-origin: top left
798
+ }
799
+
800
+ .indexBase{
801
+ font-size: 0.7em;
802
+ }
803
+
804
+ foreignObject > [contenteditable]{
805
+ font-family: Consolas, Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono, Bitstream Vera Sans Mono, Courier New, monospace, serif;
806
+ font-size: 1em;
807
+ }
808
+
809
+ button{
810
+ box-shadow: none !important;
811
+ }