@konfuzio/document-validation-ui 0.1.5-styles-refactor → 0.1.6-multi-ann-set

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 (61) hide show
  1. package/dist/css/app.css +1 -1
  2. package/dist/index.html +1 -1
  3. package/dist/js/app.js +1 -1
  4. package/dist/js/app.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/assets/images/DraggableIcon.vue +14 -0
  7. package/src/assets/images/GridIcon.vue +16 -0
  8. package/src/assets/images/MagicWandIcon.vue +16 -0
  9. package/src/assets/images/NotFoundIcon.vue +16 -0
  10. package/src/assets/images/SettingsIcon.vue +14 -0
  11. package/src/assets/images/SplitZigZag.vue +47 -14
  12. package/src/assets/images/StarIcon.vue +16 -0
  13. package/src/assets/scss/ann_set_table_options.scss +26 -0
  14. package/src/assets/scss/annotation_details.scss +85 -73
  15. package/src/assets/scss/document_annotations.scss +54 -57
  16. package/src/assets/scss/document_category.scss +0 -1
  17. package/src/assets/scss/document_dashboard.scss +7 -2
  18. package/src/assets/scss/document_edit.scss +90 -46
  19. package/src/assets/scss/main.scss +108 -49
  20. package/src/assets/scss/multi_ann_table_overlay.scss +44 -0
  21. package/src/assets/scss/splitting_confirmation_modal.scss +41 -0
  22. package/src/assets/scss/variables.scss +2 -0
  23. package/src/components/DocumentAnnotations/AnnotationActionButtons.vue +153 -0
  24. package/src/components/DocumentAnnotations/AnnotationDetails.vue +28 -7
  25. package/src/components/DocumentAnnotations/AnnotationRow.vue +131 -40
  26. package/src/components/DocumentAnnotations/AnnotationSetActionButtons.vue +86 -0
  27. package/src/components/DocumentAnnotations/CategorizeModal.vue +24 -2
  28. package/src/components/DocumentAnnotations/DocumentAnnotations.vue +114 -82
  29. package/src/components/DocumentAnnotations/EmptyAnnotation.vue +16 -3
  30. package/src/components/DocumentAnnotations/ExtractingData.vue +3 -3
  31. package/src/components/DocumentAnnotations/index.js +0 -1
  32. package/src/components/DocumentCategory.vue +13 -5
  33. package/src/components/DocumentDashboard.vue +17 -6
  34. package/src/components/DocumentEdit/DocumentEdit.vue +208 -68
  35. package/src/components/DocumentEdit/EditConfirmationModal.vue +54 -0
  36. package/src/components/DocumentEdit/EditPages.vue +29 -18
  37. package/src/components/DocumentEdit/EditSidebar.vue +92 -45
  38. package/src/components/DocumentEdit/SidebarButtons.vue +53 -0
  39. package/src/components/DocumentEdit/SplitInfoBar.vue +19 -0
  40. package/src/components/DocumentEdit/SplitOverview.vue +4 -5
  41. package/src/components/{DocumentError.vue → DocumentModals/DocumentErrorModal.vue} +3 -4
  42. package/src/components/{NotOptimizedViewportModal.vue → DocumentModals/NotOptimizedViewportModal.vue} +2 -2
  43. package/src/components/DocumentModals/SplittingSuggestionsModal.vue +120 -0
  44. package/src/components/DocumentPage/ActionBar.vue +3 -3
  45. package/src/components/DocumentPage/AnnSetTableOptions.vue +107 -0
  46. package/src/components/DocumentPage/DocumentPage.vue +12 -2
  47. package/src/components/DocumentPage/MultiAnnSelection.vue +89 -1
  48. package/src/components/DocumentPage/MultiAnnotationTableOverlay.vue +274 -0
  49. package/src/components/DocumentPage/MultiAnnotationTablePopup.vue +19 -46
  50. package/src/components/DocumentPage/ScrollingDocument.vue +11 -2
  51. package/src/components/DocumentTopBar/DocumentTopBarButtons.vue +35 -30
  52. package/src/components/DocumentTopBar/KeyboardActionsDescription.vue +3 -1
  53. package/src/locales/de.json +23 -6
  54. package/src/locales/en.json +24 -6
  55. package/src/locales/es.json +23 -6
  56. package/src/store/display.js +44 -0
  57. package/src/store/document.js +171 -23
  58. package/src/store/edit.js +67 -48
  59. package/src/store/project.js +14 -14
  60. package/src/components/DocumentAnnotations/ActionButtons.vue +0 -257
  61. package/src/components/DocumentAnnotations/RejectedLabels.vue +0 -96
@@ -7,7 +7,6 @@
7
7
 
8
8
  &.split-overview-component {
9
9
  min-width: 600px;
10
- flex: 0;
11
10
  }
12
11
 
13
12
  .pages-section {
@@ -15,6 +14,9 @@
15
14
  overflow-y: scroll;
16
15
  border-right: $component-border;
17
16
  border-left: $component-border;
17
+ display: flex;
18
+ flex-direction: column;
19
+ justify-content: space-between;
18
20
 
19
21
  .document-grid {
20
22
  padding: 42px;
@@ -165,85 +167,127 @@
165
167
  }
166
168
  }
167
169
  }
170
+
171
+ .info-bar {
172
+ position: sticky;
173
+ width: -moz-fit-content;
174
+ width: fit-content;
175
+ bottom: 20px;
176
+ left: 0;
177
+ right: 0;
178
+ margin: 0 auto;
179
+ padding: 10px;
180
+
181
+ .split-info-bar {
182
+ padding: 5px 13px;
183
+ min-height: 32px;
184
+ height: auto;
185
+ display: flex;
186
+ align-items: center;
187
+ justify-content: center;
188
+ gap: 3px;
189
+ background-color: $text-color;
190
+ color: $white;
191
+ font-weight: 400;
192
+ font-size: 14px;
193
+ border-radius: 52px;
194
+ text-align: center;
195
+ }
196
+ }
168
197
  }
169
198
 
170
199
  .sidebar {
171
200
  width: 45%;
201
+ max-width: 300px;
202
+ min-width: 270px;
172
203
  background-color: $background;
173
204
 
174
205
  .edit-sidebar {
175
206
  display: flex;
176
207
  flex-direction: column;
177
208
  align-items: center;
178
- justify-content: center;
209
+ justify-content: flex-start;
179
210
  text-align: center;
180
- height: calc(100% - 60px);
181
- gap: 50px;
182
-
183
- .sidebar-header {
184
- width: 85%;
185
- height: 50%;
186
-
187
- h3 {
188
- color: $text-color;
189
- font-weight: 600;
190
- font-size: 16px;
191
- line-height: 24px;
192
- padding-bottom: 15px;
193
- }
194
-
195
- .description {
196
- color: $grey;
197
- font-size: 14px;
198
- font-weight: 400;
199
- line-height: 20px;
200
-
201
- &:last-child {
202
- padding-top: 12px;
203
- }
204
- }
205
- }
211
+ height: 100%;
206
212
 
207
213
  .buttons-container {
208
214
  width: 85%;
209
215
  display: flex;
210
216
  flex-direction: column;
211
- gap: 24px;
212
217
  color: $grey-dark;
213
218
 
214
219
  .pages-selected {
215
220
  font-weight: 400;
216
221
  font-size: 14px;
222
+ margin-bottom: 15px;
217
223
 
218
224
  &.disabled {
219
225
  color: $grey;
220
226
  }
221
227
  }
222
228
 
223
- .rotate {
229
+ .edit-buttons {
224
230
  display: flex;
225
231
  flex-direction: column;
226
232
  gap: 8px;
227
- }
233
+ border-bottom: 1px solid $grey-detail;
228
234
 
229
- .rotate-button {
230
- display: flex;
231
- align-items: center;
232
- justify-content: center;
233
- padding: 0 !important;
234
- white-space: initial;
235
- line-height: 1;
236
- gap: 5px;
235
+ .sidebar-buttons {
236
+ .edit-mode-btn {
237
+ display: flex;
238
+ width: 100%;
237
239
 
238
- .button-content {
239
- display: flex;
240
- align-items: center;
241
- justify-content: center;
240
+ .button-content {
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+ gap: 9px;
245
+
246
+ .button-text {
247
+ font-size: 14px;
248
+ font-weight: 500;
249
+ max-width: 70%;
250
+ }
251
+ }
252
+ }
242
253
 
243
- .button-text {
244
- font-size: 16px;
245
- max-width: 70%;
254
+ &:first-child {
255
+ margin-top: 14px;
246
256
  }
257
+
258
+ &:last-child {
259
+ margin-bottom: 14px;
260
+ }
261
+ }
262
+
263
+ &:first-child {
264
+ margin-top: 14px;
265
+ }
266
+
267
+ &:last-child {
268
+ margin-bottom: 14px;
269
+ }
270
+ }
271
+ }
272
+
273
+ .smart-split {
274
+ .switch {
275
+ .control-label {
276
+ .switch-text {
277
+ font-size: 14px;
278
+ padding-right: 10px;
279
+ color: $grey-dark;
280
+ font-weight: 500;
281
+ }
282
+ }
283
+
284
+ .new-badge {
285
+ background: linear-gradient(90deg, #c1ff79 0%, #79fff7 100%);
286
+ border-radius: 36px;
287
+ font-weight: 700;
288
+ font-size: 11px;
289
+ padding: 5px;
290
+ color: $text-color;
247
291
  }
248
292
  }
249
293
  }
@@ -37,7 +37,7 @@ body {
37
37
  }
38
38
  }
39
39
 
40
- &.reject-decline-btn {
40
+ &.missing-decline-btn {
41
41
  font-size: 14px;
42
42
  color: $grey-blue !important;
43
43
  font-weight: 500;
@@ -56,7 +56,7 @@ body {
56
56
  }
57
57
  }
58
58
 
59
- &:not(.is-text, .is-primary, .reject-btn) {
59
+ &:not(.is-text, .is-primary, .missing-btn) {
60
60
  background-color: $white;
61
61
  color: $text-color;
62
62
  }
@@ -83,7 +83,7 @@ body {
83
83
  padding-right: 4px;
84
84
  }
85
85
 
86
- &.reject-all-btn {
86
+ &.all-missing-btn {
87
87
  padding-right: 4px;
88
88
  }
89
89
 
@@ -109,7 +109,7 @@ body {
109
109
  }
110
110
  }
111
111
 
112
- &.rotate-button[disabled] {
112
+ &.edit-mode-btn[disabled] {
113
113
  border: 1px solid $detail;
114
114
  }
115
115
 
@@ -251,6 +251,10 @@ body {
251
251
  background-color: $primary;
252
252
  }
253
253
 
254
+ a.dropdown-item.is-disabled {
255
+ color: $grey-blue !important;
256
+ }
257
+
254
258
  &.dropdown-menu-animation {
255
259
  a.navbar-item {
256
260
  color: $text-color;
@@ -309,6 +313,10 @@ body {
309
313
  .modal-content {
310
314
  .modal-card-body {
311
315
  border-radius: 16px 16px 16px 16px !important;
316
+
317
+ &.split-modal {
318
+ padding-bottom: 0;
319
+ }
312
320
  }
313
321
  }
314
322
  }
@@ -356,6 +364,49 @@ body {
356
364
  background-color: $full-black;
357
365
  opacity: 0.5;
358
366
  }
367
+
368
+ &.edit-modal {
369
+ .modal-content {
370
+ max-width: 440px !important;
371
+
372
+ .header {
373
+ display: flex;
374
+ align-items: center;
375
+ gap: 8px;
376
+ padding-bottom: 15px;
377
+ font-weight: 500;
378
+ font-size: 18px;
379
+ }
380
+
381
+ .content {
382
+ text-align: left;
383
+ font-weight: 400;
384
+ font-size: 14px;
385
+ color: $grey-blue;
386
+ }
387
+
388
+ .modal-card-foot {
389
+ display: flex;
390
+ gap: 5px;
391
+
392
+ .recommended {
393
+ font-weight: 600;
394
+ font-size: 11px;
395
+ background-color: rgba(255, 255, 255, 0.2);
396
+ padding: 2px 5px;
397
+ border-radius: 36px;
398
+ }
399
+
400
+ .button {
401
+ width: 100%;
402
+
403
+ &.is-primary {
404
+ font-weight: 500;
405
+ }
406
+ }
407
+ }
408
+ }
409
+ }
359
410
  }
360
411
 
361
412
  .invisible-parent-modal {
@@ -415,6 +466,8 @@ body {
415
466
  }
416
467
 
417
468
  .b-tooltip {
469
+ height: 100%;
470
+ align-items: center;
418
471
  .tooltip-content {
419
472
  background-color: $text-color !important;
420
473
 
@@ -423,11 +476,14 @@ body {
423
476
  text-decoration: underline;
424
477
  font-weight: 500;
425
478
  }
479
+ &:before {
480
+ border-bottom-color: $text-color !important;
481
+ }
426
482
  }
427
483
 
428
484
  &.left-aligned {
429
485
  .tooltip-content {
430
- left: 10px !important;
486
+ left: -3px !important;
431
487
  transform: none !important;
432
488
  padding: 8px 10px !important;
433
489
 
@@ -492,6 +548,7 @@ body {
492
548
 
493
549
  &.bottom-aligned {
494
550
  width: 100%;
551
+ bottom: 10px;
495
552
 
496
553
  .tooltip-content {
497
554
  &::before {
@@ -507,47 +564,9 @@ body {
507
564
  }
508
565
  }
509
566
  }
510
- }
511
-
512
- .rejected-tag-container {
513
- .tags {
514
- margin: 0 !important;
515
-
516
- .tag {
517
- margin-bottom: 0 !important;
518
- color: $dark;
519
- font-weight: 400;
520
- background-color: $detail;
521
- border-style: none !important;
522
-
523
- &:hover {
524
- background-color: $detail !important;
525
- }
526
567
 
527
- &.is-delete {
528
- cursor: pointer;
529
-
530
- &::before {
531
- height: 1.5px;
532
- border-radius: 4px;
533
- }
534
-
535
- &::after {
536
- width: 1.5px;
537
- border-radius: 4px;
538
- }
539
- }
540
- }
541
-
542
- &.loading-active {
543
- .is-delete {
544
- display: none !important;
545
- }
546
-
547
- .tag {
548
- border-radius: 4px;
549
- }
550
- }
568
+ &.split-tooltip {
569
+ width: 100%;
551
570
  }
552
571
  }
553
572
 
@@ -619,6 +638,9 @@ body {
619
638
  }
620
639
 
621
640
  .b-table {
641
+ .table-wrapper {
642
+ overflow: visible !important;
643
+ }
622
644
  &.full-height {
623
645
  height: 100%;
624
646
  .table-wrapper {
@@ -628,10 +650,34 @@ body {
628
650
  }
629
651
  }
630
652
  }
631
- .table {
653
+
654
+ &.dark-header {
655
+ .table {
656
+ thead {
657
+ background-color: $black !important;
658
+ th {
659
+ font-weight: 400;
660
+ background-color: $black !important;
661
+ }
662
+ }
663
+ }
664
+ }
665
+
666
+ &.header-32 {
667
+ thead {
668
+ height: 32px;
669
+ }
670
+ }
671
+
672
+ .table,
673
+ .table-wrapper {
674
+ &.has-sticky-header {
675
+ max-height: 200px;
676
+ height: fit-content;
677
+ }
632
678
  cursor: text;
633
679
  thead {
634
- background-color: #7b61ff;
680
+ background-color: $purple !important;
635
681
  font-weight: 500;
636
682
  font-size: 10px;
637
683
  line-height: 18px;
@@ -642,8 +688,8 @@ body {
642
688
  margin: 0;
643
689
  }
644
690
  }
645
- background-color: #7b61ff;
646
- color: white;
691
+ background-color: $purple !important;
692
+ color: white !important;
647
693
  vertical-align: middle;
648
694
  &[draggable="true"] {
649
695
  cursor: move;
@@ -679,5 +725,18 @@ body {
679
725
  }
680
726
  }
681
727
  }
728
+
729
+ .switch {
730
+ input[type="checkbox"] {
731
+ &:checked + .check {
732
+ background: $primary !important;
733
+ box-shadow: none !important;
734
+ }
735
+
736
+ &:focus + .check {
737
+ box-shadow: none !important;
738
+ }
739
+ }
740
+ }
682
741
  }
683
742
  }
@@ -0,0 +1,44 @@
1
+ @import "./imports.scss";
2
+
3
+ .multi-ann-table-overlay {
4
+ position: absolute;
5
+ bottom: 0;
6
+ height: fit-content;
7
+ z-index: 40;
8
+ width: 100%;
9
+ background-color: $background;
10
+
11
+ .multi-ann-set-table {
12
+ padding-bottom: 6px;
13
+
14
+ .table-wrapper {
15
+ overflow: visible;
16
+ .header-dropdown {
17
+ cursor: pointer;
18
+ overflow: visible;
19
+ white-space: nowrap;
20
+ text-overflow: ellipsis;
21
+
22
+ .icon.arrow {
23
+ margin-left: 4px;
24
+ }
25
+ .draggable {
26
+ margin-right: 4px;
27
+ cursor: move;
28
+ }
29
+
30
+ .delete-action {
31
+ color: $red;
32
+ }
33
+ }
34
+
35
+ .annotations-table {
36
+ height: 22px;
37
+ display: flex;
38
+ white-space: nowrap;
39
+ text-overflow: ellipsis;
40
+ overflow: visible;
41
+ }
42
+ }
43
+ }
44
+ }
@@ -0,0 +1,41 @@
1
+ @import "./imports.scss";
2
+
3
+ .splitting-confirmation-modal {
4
+ .header {
5
+ display: flex;
6
+ align-items: center;
7
+ gap: 8px;
8
+ padding-bottom: 15px;
9
+ font-weight: 500;
10
+ font-size: 18px;
11
+ }
12
+
13
+ .content {
14
+ text-align: left;
15
+ font-weight: 400;
16
+ font-size: 14px;
17
+ color: $text-color;
18
+ }
19
+
20
+ .modal-card-foot {
21
+ display: flex;
22
+ flex-direction: column;
23
+ gap: 10px;
24
+
25
+ .recommended {
26
+ font-weight: 600;
27
+ font-size: 11px;
28
+ background-color: rgba(255, 255, 255, 0.2);
29
+ padding: 2px 5px;
30
+ border-radius: 36px;
31
+ }
32
+
33
+ .button {
34
+ width: 100%;
35
+
36
+ &.is-primary {
37
+ font-weight: 500;
38
+ }
39
+ }
40
+ }
41
+ }
@@ -37,6 +37,8 @@ $yellow: #ffd600;
37
37
  $warning-yellow: #fec84b;
38
38
 
39
39
  $blue: #2f80ed;
40
+ $purple: #7b61ff;
41
+ $purple-low-opacity: rgba(123, 97, 255, 0.08);
40
42
  $text-color: #1a1a1a;
41
43
 
42
44
  :root {
@@ -0,0 +1,153 @@
1
+ <template>
2
+ <div class="action-buttons">
3
+ <!-- loading -->
4
+ <div v-if="isLoading">
5
+ <b-notification :closable="false" class="loading-background">
6
+ <b-loading :active="isLoading" :is-full-page="loadingOnFullPage">
7
+ <b-icon icon="spinner" class="fa-spin loading-icon-size spinner" />
8
+ </b-loading>
9
+ </b-notification>
10
+ </div>
11
+
12
+ <!-- save button -->
13
+ <b-button
14
+ v-if="saveBtn && !isLoading && !publicView"
15
+ :class="[
16
+ 'annotation-save-btn text-btn',
17
+ actionBar && 'action-bar-save-btn',
18
+ actionBar ? 'tertiary-button' : 'primary-button',
19
+ ]"
20
+ type="is-primary"
21
+ @click.stop="save"
22
+ >
23
+ {{ $t("save") }}
24
+ </b-button>
25
+
26
+ <!-- cancel button -->
27
+ <b-button
28
+ v-if="cancelBtn && !isLoading"
29
+ class="is-small annotation-cancel-btn"
30
+ icon-left="xmark"
31
+ @click.stop="cancel"
32
+ />
33
+
34
+ <!-- decline button -->
35
+ <div
36
+ v-if="declineBtn && !isLoading && !saveBtn && !cancelBtn && !publicView"
37
+ class="missing-decline-button-container"
38
+ >
39
+ <b-button
40
+ type="is-ghost"
41
+ class="missing-decline-btn decline-btn"
42
+ @click.stop="decline"
43
+ >
44
+ {{ $t("decline") }}
45
+ </b-button>
46
+ </div>
47
+
48
+ <!-- accept button -->
49
+ <b-button
50
+ v-if="acceptBtn && !isLoading && !saveBtn && !cancelBtn && !publicView"
51
+ class="annotation-accept-btn primary-button"
52
+ type="is-primary"
53
+ @click.stop="accept"
54
+ >
55
+ {{ $t("accept") }}
56
+ </b-button>
57
+
58
+ <!-- missing button -->
59
+ <div
60
+ v-if="
61
+ showMissingBtn && !isLoading && !cancelBtn && !saveBtn && !publicView
62
+ "
63
+ class="missing-decline-button-container"
64
+ >
65
+ <b-button
66
+ type="is-ghost"
67
+ class="missing-decline-btn missing-btn"
68
+ @click.stop="markAsMissing"
69
+ >
70
+ {{ $t("missing_annotation") }}
71
+ </b-button>
72
+ </div>
73
+
74
+ <!-- Restore not found annotations -->
75
+ <b-button
76
+ v-if="restoreBtn && !isLoading && !publicView"
77
+ class="restore-btn"
78
+ type="is-primary"
79
+ @click.stop="restore"
80
+ >
81
+ {{ $t("restore") }}
82
+ </b-button>
83
+ </div>
84
+ </template>
85
+ <script>
86
+ /* Component for showing actions for each annotation row */
87
+ import { mapState } from "vuex";
88
+ export default {
89
+ name: "AnnotationActionButtons",
90
+ props: {
91
+ saveBtn: {
92
+ type: Boolean,
93
+ },
94
+ cancelBtn: {
95
+ type: Boolean,
96
+ },
97
+ showMissingBtn: {
98
+ type: Boolean,
99
+ },
100
+ isLoading: {
101
+ type: Boolean,
102
+ },
103
+ acceptBtn: {
104
+ type: Boolean,
105
+ },
106
+ declineBtn: {
107
+ type: Boolean,
108
+ },
109
+ actionBar: {
110
+ type: Boolean,
111
+ required: false,
112
+ },
113
+ restoreBtn: {
114
+ type: Boolean,
115
+ required: false,
116
+ },
117
+ },
118
+ data() {
119
+ return {
120
+ loadingOnFullPage: false,
121
+ };
122
+ },
123
+ computed: {
124
+ ...mapState("document", ["publicView", "missingAnnotations"]),
125
+ },
126
+ methods: {
127
+ save() {
128
+ this.$emit("save");
129
+ },
130
+ cancel() {
131
+ this.$emit("cancel");
132
+ },
133
+ accept() {
134
+ this.$emit("accept");
135
+ },
136
+ markAsMissing() {
137
+ this.$emit("mark-as-missing");
138
+ },
139
+ decline() {
140
+ this.$emit("decline");
141
+ },
142
+ restore() {
143
+ this.$emit("restore");
144
+ },
145
+ },
146
+ };
147
+ </script>
148
+
149
+ <style
150
+ scoped
151
+ lang="scss"
152
+ src="../../assets/scss/document_annotations.scss"
153
+ ></style>