@konfuzio/document-validation-ui 0.1.14 → 0.1.15

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 (101) hide show
  1. package/README.md +12 -0
  2. package/cypress.config.js +13 -0
  3. package/dist/css/app.css +1 -1
  4. package/dist/index.html +1 -1
  5. package/dist/js/app.js +1 -1
  6. package/dist/js/app.js.map +1 -1
  7. package/dist/js/chunk-vendors.js +3 -3
  8. package/dist/js/chunk-vendors.js.map +1 -1
  9. package/package.json +5 -1
  10. package/src/api.js +53 -23
  11. package/src/assets/images/DraggableIcon.vue +14 -0
  12. package/src/assets/images/GridIcon.vue +16 -0
  13. package/src/assets/images/MagicWandIcon.vue +16 -0
  14. package/src/assets/images/NotFoundIcon.vue +16 -0
  15. package/src/assets/images/ServerImage.vue +19 -9
  16. package/src/assets/images/SettingsIcon.vue +14 -0
  17. package/src/assets/images/SplitZigZag.vue +47 -14
  18. package/src/assets/images/StarIcon.vue +16 -0
  19. package/src/assets/scss/ann_set_table_options.scss +26 -0
  20. package/src/assets/scss/annotation_details.scss +86 -71
  21. package/src/assets/scss/choose_label_set_modal.scss +1 -1
  22. package/src/assets/scss/document_annotations.scss +242 -229
  23. package/src/assets/scss/document_category.scss +12 -7
  24. package/src/assets/scss/document_dashboard.scss +7 -2
  25. package/src/assets/scss/document_edit.scss +151 -173
  26. package/src/assets/scss/document_name.scss +0 -2
  27. package/src/assets/scss/document_thumbnails.scss +1 -1
  28. package/src/assets/scss/document_toolbar.scss +23 -1
  29. package/src/assets/scss/document_top_bar.scss +40 -1
  30. package/src/assets/scss/edit_page_thumbnail.scss +53 -0
  31. package/src/assets/scss/multi_ann_table_overlay.scss +38 -0
  32. package/src/assets/scss/new_annotation.scss +17 -3
  33. package/src/assets/scss/scrolling_document.scss +1 -1
  34. package/src/assets/scss/theme.scss +801 -0
  35. package/src/assets/scss/variables.scss +5 -663
  36. package/src/components/App.cy.js +7 -0
  37. package/src/components/App.vue +98 -11
  38. package/src/components/DocumentAnnotations/AnnotationActionButtons.vue +168 -0
  39. package/src/components/DocumentAnnotations/AnnotationContent.vue +50 -84
  40. package/src/components/DocumentAnnotations/AnnotationDetails.vue +37 -12
  41. package/src/components/DocumentAnnotations/AnnotationRow.vue +244 -199
  42. package/src/components/DocumentAnnotations/AnnotationSetActionButtons.vue +89 -0
  43. package/src/components/DocumentAnnotations/ChooseLabelSetModal.vue +4 -2
  44. package/src/components/DocumentAnnotations/DocumentAnnotations.cy.js +295 -0
  45. package/src/components/DocumentAnnotations/DocumentAnnotations.vue +195 -146
  46. package/src/components/DocumentAnnotations/DocumentLabel.vue +46 -9
  47. package/src/components/DocumentAnnotations/EmptyAnnotation.vue +59 -88
  48. package/src/components/DocumentAnnotations/ExtractingData.vue +18 -6
  49. package/src/components/DocumentAnnotations/MultiAnnotationTableOverlay.vue +337 -0
  50. package/src/components/DocumentAnnotations/index.js +1 -1
  51. package/src/components/DocumentCategory.vue +89 -65
  52. package/src/components/DocumentDashboard.vue +59 -48
  53. package/src/components/DocumentEdit/DocumentEdit.vue +302 -105
  54. package/src/components/DocumentEdit/EditConfirmationModal.vue +55 -0
  55. package/src/components/DocumentEdit/EditPageThumbnail.vue +114 -0
  56. package/src/components/DocumentEdit/EditPages.vue +60 -103
  57. package/src/components/DocumentEdit/EditSidebar.vue +101 -48
  58. package/src/components/DocumentEdit/{SplitOverview.vue → RenameAndCategorize.vue} +15 -13
  59. package/src/components/DocumentEdit/SidebarButtons.vue +53 -0
  60. package/src/components/DocumentEdit/SplitInfoBar.vue +21 -0
  61. package/src/components/DocumentEdit/index.js +1 -1
  62. package/src/components/{DocumentError.vue → DocumentModals/DocumentErrorModal.vue} +9 -8
  63. package/src/components/{NotOptimizedViewportModal.vue → DocumentModals/NotOptimizedViewportModal.vue} +2 -2
  64. package/src/components/DocumentPage/ActionBar.vue +3 -3
  65. package/src/components/DocumentPage/AnnSetTableOptions.vue +110 -0
  66. package/src/components/DocumentPage/BoxSelection.vue +4 -1
  67. package/src/components/DocumentPage/DocumentPage.vue +92 -68
  68. package/src/components/DocumentPage/DocumentToolbar.vue +105 -16
  69. package/src/components/DocumentPage/DummyPage.vue +9 -7
  70. package/src/components/DocumentPage/MultiAnnSelection.vue +96 -27
  71. package/src/components/DocumentPage/NewAnnotation.vue +31 -35
  72. package/src/components/DocumentPage/ScrollingDocument.vue +46 -5
  73. package/src/components/DocumentPage/ScrollingPage.vue +5 -6
  74. package/src/components/DocumentThumbnails/DocumentThumbnails.cy.js +64 -0
  75. package/src/components/DocumentThumbnails/DocumentThumbnails.vue +53 -13
  76. package/src/components/DocumentTopBar/DocumentName.vue +16 -4
  77. package/src/components/DocumentTopBar/DocumentTopBar.vue +86 -15
  78. package/src/components/DocumentTopBar/DocumentTopBarButtons.vue +99 -72
  79. package/src/components/DocumentTopBar/KeyboardActionsDescription.vue +6 -3
  80. package/src/components/DocumentsList/DocumentsList.vue +6 -2
  81. package/src/components/index.js +1 -0
  82. package/src/constants.js +2 -1
  83. package/src/icons.js +45 -0
  84. package/src/locales/de.json +48 -21
  85. package/src/locales/en.json +37 -11
  86. package/src/locales/es.json +41 -13
  87. package/src/main.js +5 -66
  88. package/src/store/category.js +20 -36
  89. package/src/store/display.js +74 -1
  90. package/src/store/document.js +305 -109
  91. package/src/store/edit.js +160 -61
  92. package/src/store/project.js +46 -16
  93. package/src/store/selection.js +42 -10
  94. package/src/utils/utils.js +36 -0
  95. package/dist/css/chunk-vendors.css +0 -5
  96. package/src/assets/scss/categorize_modal.scss +0 -45
  97. package/src/assets/scss/main.scss +0 -24
  98. package/src/components/DocumentAnnotations/ActionButtons.vue +0 -250
  99. package/src/components/DocumentAnnotations/CategorizeModal.vue +0 -219
  100. package/src/components/DocumentAnnotations/RejectedLabels.vue +0 -96
  101. package/src/components/DocumentPage/MultiAnnotationTablePopup.vue +0 -253
@@ -1,6 +1,6 @@
1
1
  @import "./imports.scss";
2
2
 
3
- .labels-sidebar {
3
+ #labels-sidebar {
4
4
  font-family: $font-family;
5
5
  flex: 1;
6
6
  background-color: $background;
@@ -49,11 +49,6 @@
49
49
  overflow: auto;
50
50
  max-height: 100%;
51
51
 
52
- &.showing-rejected {
53
- height: calc(100% - 56px);
54
- padding-bottom: 130px;
55
- }
56
-
57
52
  .annotation-set-group {
58
53
  .label-set-header {
59
54
  display: flex;
@@ -73,235 +68,292 @@
73
68
  color: $text;
74
69
  }
75
70
  }
76
- }
77
71
 
78
- .labels {
79
- .label {
80
- .label-group {
72
+ .ann-set-table {
73
+ display: flex;
74
+ align-items: center;
75
+ width: fit-content;
76
+ cursor: pointer;
77
+ &:not(:last-child) {
78
+ padding-bottom: 12px;
79
+ }
80
+
81
+ .ann-set-table-icon {
82
+ padding: 4px 8px;
83
+ border-radius: 32px;
84
+ margin-left: 14px;
85
+ background: $purple-low-opacity;
81
86
  display: flex;
82
- flex-direction: row;
83
- justify-content: space-between;
87
+ width: fit-content;
84
88
  align-items: center;
85
- border-bottom: 1px solid $grey-lightest;
86
- min-height: 44px;
87
- cursor: pointer;
88
-
89
- .label-group-left {
90
- display: flex;
91
- flex-direction: row;
92
- padding-left: 28px;
93
- color: $text-lighter;
94
- align-items: center;
95
-
96
- .label-name {
97
- padding-left: 20px;
98
- }
99
- }
100
-
101
- .label-group-right {
102
- display: flex;
103
- flex-direction: row;
89
+ .ann-set-number {
104
90
  font-weight: 400;
105
91
  font-size: 14px;
106
92
  line-height: 20px;
107
- padding-right: 16px;
108
- cursor: default;
109
-
110
- .label-annotations-pending {
111
- padding: 0px 8px;
112
- border-radius: 20px;
113
- background: $grey-lighter-low-opacity;
114
- color: $text-lighter;
115
- margin-right: 4px;
116
- }
117
-
118
- .label-annotations-accepted {
119
- padding: 0px 8px;
120
- border-radius: 20px;
121
- background: $green-low-opacity;
122
- color: $green;
123
- }
93
+ margin-left: 4px;
124
94
  }
125
95
  }
126
-
127
- .label-group-annotation-list {
128
- background-color: $grey-hover;
129
-
130
- .annotation-row {
131
- padding-left: 16px;
132
- }
133
- }
134
-
135
- .label-name {
136
- color: $text-lighter;
137
- word-break: break-word;
96
+ .ann-set-table-label-set-name {
97
+ margin-left: 8px;
138
98
  font-size: 14px;
139
99
  line-height: 20px;
140
- font-weight: 400;
141
100
  }
101
+ }
142
102
 
143
- .annotation-row {
144
- width: 100%;
145
- border-bottom: 1px solid $grey-lightest;
146
- transition: background-color 0.2s ease-out;
147
- display: flex;
148
- align-items: center;
149
- padding-right: 5px;
150
-
151
- .annotation-row-left {
152
- flex: 1;
153
- padding-left: 8px;
103
+ .labels {
104
+ .label {
105
+ .label-group {
154
106
  display: flex;
107
+ flex-direction: row;
108
+ justify-content: space-between;
155
109
  align-items: center;
110
+ border-bottom: 1px solid $grey-lightest;
111
+ min-height: 44px;
112
+ cursor: pointer;
156
113
 
157
- .label-name {
158
- padding: 10px 0;
159
- padding-right: 4px;
160
- }
161
- }
162
-
163
- .annotation-row-right {
164
- width: 60%;
165
- display: flex;
166
- align-items: center;
114
+ .label-group-left {
115
+ display: flex;
116
+ flex-direction: row;
117
+ padding-left: 28px;
118
+ color: $text-lighter;
119
+ align-items: center;
167
120
 
168
- .notification {
169
- background-color: transparent;
121
+ .label-name {
122
+ padding-left: 20px;
123
+ }
170
124
  }
171
125
 
172
- .annotation-content {
173
- width: 100%;
126
+ .label-group-right {
127
+ display: flex;
128
+ flex-direction: row;
129
+ font-weight: 400;
174
130
  font-size: 14px;
175
131
  line-height: 20px;
176
- font-weight: 400;
132
+ padding-right: 16px;
133
+ cursor: default;
134
+
135
+ .label-annotations-pending {
136
+ padding: 0px 8px;
137
+ border-radius: 20px;
138
+ background: $grey-lighter-low-opacity;
139
+ color: $text-lighter;
140
+ margin-right: 4px;
141
+ }
177
142
 
178
- .annotation,
179
- .empty-annotation {
180
- min-height: 36px;
181
- display: flex;
182
- align-items: center;
143
+ .label-annotations-accepted {
144
+ padding: 0px 8px;
145
+ border-radius: 20px;
146
+ background: $green-low-opacity;
147
+ color: $green;
183
148
  }
149
+ }
150
+ }
184
151
 
185
- .loading-container {
186
- height: 20px;
187
- display: flex;
188
- align-items: center;
152
+ .label-group-annotation-list {
153
+ background-color: $grey-hover;
189
154
 
190
- .loading-icon-size {
191
- width: 13px;
192
- height: 13px;
193
- }
155
+ .annotation-row {
156
+ padding-left: 16px;
157
+ }
158
+ }
159
+
160
+ .label-name {
161
+ color: $text-lighter;
162
+ word-break: break-word;
163
+ font-size: 14px;
164
+ line-height: 20px;
165
+ font-weight: 400;
166
+ }
167
+
168
+ .annotation-row {
169
+ width: 100%;
170
+ border-bottom: 1px solid $grey-lightest;
171
+ transition: background-color 0.2s ease-out;
172
+ display: flex;
173
+ align-items: center;
174
+ padding-right: 5px;
175
+
176
+ .annotation-row-left {
177
+ flex: 1;
178
+ padding-left: 8px;
179
+ display: flex;
180
+ align-items: center;
181
+
182
+ .annotation-icon {
183
+ height: 40px;
184
+ padding: 0 15px;
194
185
  }
195
186
 
196
- .spinner {
197
- color: $grey;
187
+ .label-name {
188
+ padding: 10px 0;
189
+ padding-right: 4px;
198
190
  }
199
191
  }
200
192
 
201
- .buttons-container {
193
+ .annotation-row-right {
194
+ width: 60%;
202
195
  display: flex;
203
- gap: 8px;
204
- }
196
+ align-items: center;
205
197
 
206
- .annotation-value {
207
- display: inline-block;
208
- color: $text;
209
- padding: 0 8px;
210
- border: none;
211
- background-color: transparent;
212
- inline-size: 100%;
213
- overflow-wrap: break-word;
214
- word-break: break-all;
215
-
216
- &:focus {
217
- outline: none;
198
+ .notification {
199
+ background-color: transparent;
218
200
  }
219
201
 
220
- &.label-empty {
221
- font-weight: 500;
202
+ .annotation-content {
203
+ width: 100%;
222
204
  font-size: 14px;
223
- color: $primary;
205
+ line-height: 20px;
206
+ font-weight: 400;
207
+
208
+ .annotation,
209
+ .empty-annotation {
210
+ min-height: 36px;
211
+ display: flex;
212
+ align-items: center;
213
+ }
224
214
 
225
- &.clicked {
226
- font-weight: 400;
227
- color: $text-lighter;
215
+ .loading-container {
216
+ height: 20px;
217
+ display: flex;
218
+ align-items: center;
219
+
220
+ .loading-icon-size {
221
+ width: 13px;
222
+ height: 13px;
223
+ }
224
+ }
225
+
226
+ .spinner {
227
+ color: $grey;
228
228
  }
229
229
  }
230
- }
231
- }
232
230
 
233
- .empty-annotation {
234
- display: flex;
235
- width: 100%;
236
- justify-content: space-between;
237
- }
231
+ .buttons-container {
232
+ display: flex;
233
+ gap: 8px;
234
+ }
238
235
 
239
- &:hover,
240
- &.selected {
241
- background-color: $grey-lightest;
242
- }
236
+ .annotation-value {
237
+ display: inline-block;
238
+ color: $text;
239
+ padding: 0 8px;
240
+ border: none;
241
+ background-color: transparent;
242
+ inline-size: 100%;
243
+ overflow-wrap: break-word;
244
+ word-break: break-all;
245
+
246
+ &:focus {
247
+ outline: none;
248
+ }
243
249
 
244
- &.hovered-empty-labels {
245
- background-color: $grey-lightest;
246
- border-bottom-color: $grey-detail;
247
- }
250
+ &.label-empty {
251
+ font-weight: 500;
252
+ font-size: 14px;
253
+ color: $primary;
248
254
 
249
- &.hovered-pending-annotations {
250
- position: relative;
251
- border-bottom-color: $primary;
255
+ &.clicked-ann {
256
+ font-weight: 400;
257
+ color: $text-lighter;
258
+ }
259
+ }
260
+ }
261
+ }
252
262
 
253
- &:before {
254
- display: block;
255
- content: "";
263
+ .empty-annotation {
264
+ display: flex;
256
265
  width: 100%;
257
- height: 100%;
258
- background: $primary;
259
- opacity: 0.1;
260
- position: absolute;
261
- top: 0;
262
- left: 0;
266
+ justify-content: space-between;
263
267
  }
264
- }
265
268
 
266
- &.editing {
267
- background-color: $background;
268
- border-bottom: 1px solid $primary;
269
- }
269
+ &:hover,
270
+ &.selected {
271
+ background-color: $grey-lightest;
272
+ }
270
273
 
271
- .saving-changes {
272
- color: $grey;
273
- }
274
+ &.hovered-empty-labels {
275
+ background-color: $grey-lightest;
276
+ border-bottom-color: $grey-detail;
277
+ }
274
278
 
275
- .error-editing {
276
- color: $red;
277
- animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
278
- transform: translate3d(0, 0, 0);
279
- }
279
+ &.hovered-pending-annotations {
280
+ position: relative;
281
+ border-bottom-color: $primary;
282
+
283
+ &:before {
284
+ display: block;
285
+ content: "";
286
+ width: 100%;
287
+ height: 100%;
288
+ background: $primary;
289
+ opacity: 0.1;
290
+ position: absolute;
291
+ top: 0;
292
+ left: 0;
293
+ }
294
+ }
295
+
296
+ &.editing {
297
+ background-color: $background;
298
+ border-bottom: 1px solid $primary;
299
+ }
280
300
 
281
- @keyframes shake {
282
- 10%,
283
- 90% {
284
- transform: translate3d(-1px, 0, 0);
301
+ .not-found-text {
302
+ color: $grey;
303
+ opacity: 0.3;
285
304
  }
286
305
 
287
- 20%,
288
- 80% {
289
- transform: translate3d(2px, 0, 0);
306
+ .saving-changes {
307
+ color: $grey;
290
308
  }
291
309
 
292
- 30%,
293
- 50%,
294
- 70% {
295
- transform: translate3d(-4px, 0, 0);
310
+ .error-editing {
311
+ color: $red;
312
+ animation: shake 0.82s cubic-bezier(0.36, 0.07, 0.19, 0.97) both;
313
+ transform: translate3d(0, 0, 0);
296
314
  }
297
315
 
298
- 40%,
299
- 60% {
300
- transform: translate3d(4px, 0, 0);
316
+ @keyframes shake {
317
+ 10%,
318
+ 90% {
319
+ transform: translate3d(-1px, 0, 0);
320
+ }
321
+
322
+ 20%,
323
+ 80% {
324
+ transform: translate3d(2px, 0, 0);
325
+ }
326
+
327
+ 30%,
328
+ 50%,
329
+ 70% {
330
+ transform: translate3d(-4px, 0, 0);
331
+ }
332
+
333
+ 40%,
334
+ 60% {
335
+ transform: translate3d(4px, 0, 0);
336
+ }
301
337
  }
302
338
  }
303
339
  }
304
340
  }
341
+
342
+ .no-labels {
343
+ display: flex;
344
+ gap: 5px;
345
+ padding-left: 28px;
346
+ color: $text-lighter;
347
+ font-size: 14px;
348
+ line-height: 20px;
349
+ min-height: 44px;
350
+
351
+ a {
352
+ color: $white;
353
+ text-decoration: underline;
354
+ font-weight: 500;
355
+ }
356
+ }
305
357
  }
306
358
  }
307
359
 
@@ -329,7 +381,8 @@
329
381
  width: 32px;
330
382
  }
331
383
 
332
- &.accept-all-btn {
384
+ &.accept-all-btn,
385
+ &.restore-btn {
333
386
  color: $primary !important;
334
387
  font-size: 14px !important;
335
388
  font-weight: 500;
@@ -373,10 +426,10 @@
373
426
  }
374
427
  }
375
428
 
376
- .reject-decline-button-container {
429
+ .missing-button-container, .decline-button-container {
377
430
  background-color: transparent;
378
431
 
379
- .reject-decline-btn {
432
+ .missing-btn, .decline-btn {
380
433
  color: $grey-blue !important;
381
434
  font-size: 14px !important;
382
435
  font-weight: 500;
@@ -394,56 +447,16 @@
394
447
  }
395
448
  }
396
449
  }
450
+ }
397
451
 
398
- .rejected-labels-list {
399
- position: absolute;
400
- bottom: 0;
401
- background-color: $background;
402
- max-height: 120px;
403
- width: 100%;
404
- border-top: $component-border;
405
-
406
- .rejected-label-container {
407
- margin-top: 15px;
408
- margin-bottom: 5px;
409
-
410
- .title {
411
- font-weight: 400;
412
- font-size: 14px;
413
- line-height: 20px;
414
- color: $text-color;
415
- padding-bottom: 15px;
416
- margin: 0;
417
- padding-left: 15px;
418
- }
419
-
420
- .rejected-tag-container {
421
- display: flex;
422
- gap: 8px;
423
- flex-wrap: wrap;
424
- overflow-y: scroll;
425
- max-height: 60px;
426
- padding-left: 15px;
427
- padding-right: 35px;
428
- padding-bottom: 15px;
429
-
430
- .label-name {
431
- &.loading {
432
- margin-right: 24px;
433
- }
434
- }
435
-
436
- .tag-loading-container {
437
- position: relative;
438
- right: 25px;
439
- width: 20px;
440
-
441
- .loading-background {
442
- padding: 12px;
443
- }
444
- }
445
- }
446
- }
452
+ .annotation-row {
453
+ display: flex;
454
+ align-items: center;
455
+ .annotation-icon {
456
+ display: flex;
457
+ }
458
+ .annotation-value {
459
+ outline: none;
447
460
  }
448
461
  }
449
462
 
@@ -2,27 +2,33 @@
2
2
 
3
3
  .category-chooser {
4
4
  cursor: pointer;
5
+ height: 100%;
5
6
 
6
7
  &.split-mode {
7
- border: 1px solid $grey-detail;
8
+ border: 1px solid $grey-outline;
8
9
  border-radius: 4px;
9
10
  background-color: $white;
11
+
12
+ &:hover {
13
+ border-color: $grey-outline-dark;
14
+ background-color: transparent;
15
+ }
10
16
  }
11
17
 
12
18
  &.disabled {
13
19
  cursor: not-allowed;
14
20
  }
15
21
 
22
+ &:not(.split-mode) {
23
+ .category-drop-down {
24
+ border-right: $component-border;
25
+ }
26
+ }
16
27
  .category-drop-down {
17
28
  display: flex;
18
29
  height: 100%;
19
30
  align-items: center;
20
31
  padding: 0 8px 0 14px;
21
- border-right: $component-border;
22
-
23
- &:hover {
24
- background-color: $background;
25
- }
26
32
 
27
33
  .caret-section {
28
34
  padding-top: 5px;
@@ -42,7 +48,6 @@
42
48
 
43
49
  .category-info {
44
50
  min-width: 100px;
45
- width: 100px;
46
51
  margin-left: 5px;
47
52
  margin-right: 5px;
48
53
 
@@ -17,14 +17,19 @@
17
17
 
18
18
  .dashboard-document {
19
19
  height: 100%;
20
- overflow-y: auto;
21
- overflow-x: hidden;
20
+ overflow: auto;
22
21
  position: relative;
23
22
  flex: 1;
24
23
  background-image: radial-gradient(#bfc1c9 0.8px, #ededed 0.1px);
25
24
  background-size: 9px 9px;
26
25
  }
27
26
 
27
+ &.edit-mode {
28
+ .dashboard-document {
29
+ flex: 1.5;
30
+ }
31
+ }
32
+
28
33
  @media print {
29
34
  .dashboard-document {
30
35
  position: static;