@konfuzio/document-validation-ui 0.1.19-dev.1 → 0.1.19

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 (145) hide show
  1. package/.eslintrc.js +10 -10
  2. package/.prettierrc.json +1 -1
  3. package/LICENSE +21 -21
  4. package/README.md +24 -24
  5. package/cypress.config.js +13 -13
  6. package/dist/css/app.css +1 -1
  7. package/dist/index.html +1 -1
  8. package/dist/js/app.js +1 -1
  9. package/dist/js/app.js.map +1 -1
  10. package/dist/js/chunk-vendors.js +1 -1
  11. package/dist/js/chunk-vendors.js.map +1 -1
  12. package/jest.config.js +4 -4
  13. package/package.json +66 -66
  14. package/src/api.js +82 -82
  15. package/src/assets/images/AcceptedCheckMark.vue +8 -8
  16. package/src/assets/images/AcceptedUser.vue +8 -8
  17. package/src/assets/images/ActionIcon.vue +60 -60
  18. package/src/assets/images/ArrowDownKey.vue +11 -11
  19. package/src/assets/images/ArrowUpKey.vue +11 -11
  20. package/src/assets/images/CategoryIconImg.vue +13 -13
  21. package/src/assets/images/CheckMark.vue +8 -8
  22. package/src/assets/images/DraggableIcon.vue +14 -14
  23. package/src/assets/images/EditDocIcon.vue +12 -12
  24. package/src/assets/images/EmptyStateImg.vue +129 -129
  25. package/src/assets/images/ErrorIcon.vue +28 -28
  26. package/src/assets/images/EyeIcon.vue +11 -11
  27. package/src/assets/images/FileNameNotSavedImage.vue +26 -26
  28. package/src/assets/images/FileNameSavedImage.vue +14 -14
  29. package/src/assets/images/FitZoomIcon.vue +16 -16
  30. package/src/assets/images/GridIcon.vue +16 -16
  31. package/src/assets/images/KeyboardIcon.vue +16 -16
  32. package/src/assets/images/MagicWandIcon.vue +16 -16
  33. package/src/assets/images/MinusIcon.vue +13 -13
  34. package/src/assets/images/NotFoundIcon.vue +16 -16
  35. package/src/assets/images/NotOptimizedIllustration.vue +651 -651
  36. package/src/assets/images/PlusIcon.vue +13 -13
  37. package/src/assets/images/QuestionMark.vue +12 -12
  38. package/src/assets/images/ServerImage.vue +73 -73
  39. package/src/assets/images/SettingsIcon.vue +14 -14
  40. package/src/assets/images/SplitLines.vue +18 -18
  41. package/src/assets/images/SplitZigZag.vue +49 -49
  42. package/src/assets/images/StarIcon.vue +16 -16
  43. package/src/assets/images/StatusImg.vue +14 -14
  44. package/src/assets/images/TranslateArrows.vue +33 -33
  45. package/src/assets/scss/ann_set_table_options.scss +26 -26
  46. package/src/assets/scss/annotation_details.scss +141 -141
  47. package/src/assets/scss/choose_label_set_modal.scss +65 -65
  48. package/src/assets/scss/document_action_bar.scss +37 -37
  49. package/src/assets/scss/document_annotations.scss +558 -537
  50. package/src/assets/scss/document_category.scss +85 -85
  51. package/src/assets/scss/document_dashboard.scss +52 -52
  52. package/src/assets/scss/document_edit.scss +410 -410
  53. package/src/assets/scss/document_error.scss +81 -81
  54. package/src/assets/scss/document_name.scss +60 -60
  55. package/src/assets/scss/document_page.scss +12 -12
  56. package/src/assets/scss/document_thumbnails.scss +41 -41
  57. package/src/assets/scss/document_toolbar.scss +111 -111
  58. package/src/assets/scss/document_top_bar.scss +171 -171
  59. package/src/assets/scss/document_viewport_modal.scss +25 -25
  60. package/src/assets/scss/documents_list.scss +141 -141
  61. package/src/assets/scss/edit_page_thumbnail.scss +53 -53
  62. package/src/assets/scss/empty_state.scss +34 -34
  63. package/src/assets/scss/extracting_data.scss +35 -35
  64. package/src/assets/scss/imports.scss +1 -1
  65. package/src/assets/scss/multi_ann_table_overlay.scss +38 -38
  66. package/src/assets/scss/multi_ann_table_popup.scss +12 -12
  67. package/src/assets/scss/new_annotation.scss +102 -102
  68. package/src/assets/scss/scrolling_document.scss +19 -19
  69. package/src/assets/scss/theme.scss +801 -801
  70. package/src/assets/scss/variables.scss +66 -66
  71. package/src/components/App.cy.js +7 -7
  72. package/src/components/App.vue +187 -187
  73. package/src/components/DocumentAnnotations/AnnotationActionButtons.vue +152 -168
  74. package/src/components/DocumentAnnotations/AnnotationContent.vue +210 -210
  75. package/src/components/DocumentAnnotations/AnnotationDetails.vue +251 -251
  76. package/src/components/DocumentAnnotations/AnnotationRow.vue +752 -752
  77. package/src/components/DocumentAnnotations/AnnotationSetActionButtons.vue +89 -89
  78. package/src/components/DocumentAnnotations/ChooseLabelSetModal.vue +186 -186
  79. package/src/components/DocumentAnnotations/DocumentAnnotations.cy.js +441 -441
  80. package/src/components/DocumentAnnotations/DocumentAnnotations.vue +534 -534
  81. package/src/components/DocumentAnnotations/DocumentLabel.vue +189 -189
  82. package/src/components/DocumentAnnotations/EmptyAnnotation.vue +193 -193
  83. package/src/components/DocumentAnnotations/EmptyState.vue +21 -21
  84. package/src/components/DocumentAnnotations/ExtractingData.vue +41 -41
  85. package/src/components/DocumentAnnotations/LoadingAnnotations.vue +43 -43
  86. package/src/components/DocumentAnnotations/LoadingLabels.vue +43 -43
  87. package/src/components/DocumentAnnotations/MultiAnnotationTableOverlay.vue +338 -338
  88. package/src/components/DocumentAnnotations/index.js +8 -8
  89. package/src/components/DocumentCategory.vue +281 -281
  90. package/src/components/DocumentDashboard.vue +170 -170
  91. package/src/components/DocumentEdit/DocumentEdit.cy.js +541 -541
  92. package/src/components/DocumentEdit/DocumentEdit.vue +503 -503
  93. package/src/components/DocumentEdit/EditConfirmationModal.vue +55 -55
  94. package/src/components/DocumentEdit/EditPageThumbnail.vue +114 -114
  95. package/src/components/DocumentEdit/EditPages.vue +161 -161
  96. package/src/components/DocumentEdit/EditSidebar.vue +154 -154
  97. package/src/components/DocumentEdit/RenameAndCategorize.vue +184 -184
  98. package/src/components/DocumentEdit/SidebarButtons.vue +53 -53
  99. package/src/components/DocumentEdit/SplitInfoBar.vue +21 -21
  100. package/src/components/DocumentEdit/index.js +4 -4
  101. package/src/components/DocumentModals/DocumentErrorModal.vue +58 -58
  102. package/src/components/DocumentModals/NotOptimizedViewportModal.vue +51 -51
  103. package/src/components/DocumentPage/ActionBar.vue +48 -48
  104. package/src/components/DocumentPage/AnnSetTableOptions.vue +111 -111
  105. package/src/components/DocumentPage/BoxSelection.vue +152 -152
  106. package/src/components/DocumentPage/DocumentPage.cy.js +92 -92
  107. package/src/components/DocumentPage/DocumentPage.vue +568 -568
  108. package/src/components/DocumentPage/DocumentToolbar.cy.js +215 -215
  109. package/src/components/DocumentPage/DocumentToolbar.vue +228 -228
  110. package/src/components/DocumentPage/DummyPage.vue +55 -55
  111. package/src/components/DocumentPage/MultiAnnSelection.vue +371 -371
  112. package/src/components/DocumentPage/NewAnnotation.vue +308 -308
  113. package/src/components/DocumentPage/ScrollingDocument.vue +149 -149
  114. package/src/components/DocumentPage/ScrollingPage.vue +179 -179
  115. package/src/components/DocumentPage/index.js +5 -5
  116. package/src/components/DocumentThumbnails/DocumentThumbnails.cy.js +67 -67
  117. package/src/components/DocumentThumbnails/DocumentThumbnails.vue +132 -132
  118. package/src/components/DocumentThumbnails/LoadingThumbnail.vue +25 -25
  119. package/src/components/DocumentThumbnails/index.js +1 -1
  120. package/src/components/DocumentTopBar/DocumentName.vue +236 -236
  121. package/src/components/DocumentTopBar/DocumentTopBar.cy.js +222 -222
  122. package/src/components/DocumentTopBar/DocumentTopBar.vue +202 -202
  123. package/src/components/DocumentTopBar/DocumentTopBarButtons.vue +183 -183
  124. package/src/components/DocumentTopBar/KeyboardActionsDescription.vue +74 -74
  125. package/src/components/DocumentTopBar/index.js +3 -3
  126. package/src/components/DocumentsList/DocumentsList.vue +121 -121
  127. package/src/components/DocumentsList/index.js +1 -1
  128. package/src/components/ErrorMessage.vue +40 -40
  129. package/src/components/index.js +1 -1
  130. package/src/constants.js +5 -5
  131. package/src/directives/scroll.js +28 -28
  132. package/src/i18n.js +22 -22
  133. package/src/icons.js +45 -45
  134. package/src/locales/de.json +148 -148
  135. package/src/locales/en.json +148 -148
  136. package/src/main.js +26 -26
  137. package/src/store/category.js +191 -191
  138. package/src/store/display.js +311 -311
  139. package/src/store/document.js +1438 -1438
  140. package/src/store/edit.js +316 -316
  141. package/src/store/index.js +21 -21
  142. package/src/store/project.js +143 -143
  143. package/src/store/selection.js +210 -210
  144. package/src/utils/utils.js +54 -54
  145. package/vue.config.js +25 -25
@@ -1,251 +1,251 @@
1
- <template>
2
- <b-tooltip
3
- :animated="false"
4
- :position="fromTable ? 'is-top' : 'is-bottom'"
5
- :class="[!fromTable && 'left-aligned', 'annotation-details']"
6
- >
7
- <div :class="['label-icon', fromTable && 'is-small']">
8
- <div v-if="(created(annotation) || edited(annotation)) && !isNegative(annotation) && !publicView">
9
- <div
10
- :class="[
11
- 'annotation-details-icon',
12
- animate ? 'animated-ripple' : '',
13
- 'user-icon',
14
- ]"
15
- >
16
- <AcceptedUser />
17
- </div>
18
- </div>
19
- <div
20
- v-else-if="annotationIsNotFound(annotationSet, label) && !publicView"
21
- :class="['annotation-details-icon', animate ? 'animated-ripple' : '']"
22
- >
23
- <NotFoundIcon />
24
- </div>
25
- <div
26
- v-else-if="notExtracted(annotation) || isNegative(annotation) && !publicView"
27
- :class="[
28
- 'annotation-details-icon',
29
- animate ? 'animated-ripple' : '',
30
- 'question-icon',
31
- ]"
32
- >
33
- <QuestionMark />
34
- </div>
35
- <div v-else>
36
- <div
37
- v-if="accepted(annotation) && !publicView"
38
- :class="[
39
- 'annotation-details-icon success',
40
- animate ? 'animated-ripple' : '',
41
- ]"
42
- >
43
- <AcceptedCheckMark />
44
- </div>
45
- <div
46
- v-else
47
- :class="['annotation-details-icon', animate ? 'animated-ripple' : '']"
48
- >
49
- <CheckMark class="pending" />
50
- </div>
51
- </div>
52
- </div>
53
-
54
- <template #content>
55
- <div class="label-details">
56
- <div v-if="description" class="label-description">
57
- <span>{{ description }}</span>
58
- </div>
59
- <div
60
- v-if="confidence(annotation) && !isNegative(annotation)"
61
- :class="['confidence', publicView && 'tooltip-in-public-view']"
62
- >
63
- <span>{{ $t("confidence") }}</span
64
- ><span
65
- :class="[
66
- 'value',
67
- confidence(annotation) <= 0.2
68
- ? 'red'
69
- : confidence(annotation) <= 0.5
70
- ? 'yellow'
71
- : '',
72
- ]"
73
- >{{ Math.floor(confidence(annotation) * 100) / 100 }}</span
74
- >
75
- </div>
76
- <div v-if="!publicView" class="revision">
77
- <div class="detail-icons">
78
- <div v-if="created(annotation) || edited(annotation)">
79
- <div
80
- :class="[
81
- 'annotation-details-icon',
82
- animate ? 'animated-ripple' : '',
83
- 'user-icon',
84
- ]"
85
- >
86
- <AcceptedUser />
87
- </div>
88
- </div>
89
- <div
90
- v-else-if="notExtracted(annotation)"
91
- :class="[
92
- 'annotation-details-icon',
93
- animate ? 'animated-ripple' : '',
94
- 'question-icon',
95
- ]"
96
- >
97
- <QuestionMark />
98
- </div>
99
- <div v-else>
100
- <div
101
- v-if="accepted(annotation)"
102
- :class="[
103
- 'annotation-details-icon',
104
- animate ? 'animated-ripple' : '',
105
- ]"
106
- >
107
- <AcceptedCheckMark />
108
- </div>
109
- <div
110
- v-else
111
- :class="[
112
- 'annotation-details-icon',
113
- animate ? 'animated-ripple' : '',
114
- ]"
115
- >
116
- <CheckMark />
117
- </div>
118
- </div>
119
- {{ getText() }}
120
- </div>
121
- </div>
122
- </div>
123
- </template>
124
- </b-tooltip>
125
- </template>
126
- <script>
127
- import { mapGetters, mapState } from "vuex";
128
- import CheckMark from "../../assets/images/CheckMark";
129
- import AcceptedCheckMark from "../../assets/images/AcceptedCheckMark";
130
- import QuestionMark from "../../assets/images/QuestionMark";
131
- import AcceptedUser from "../../assets/images/AcceptedUser";
132
- import NotFoundIcon from "../../assets/images/NotFoundIcon";
133
-
134
- export default {
135
- name: "AnnotationDetails",
136
- components: {
137
- CheckMark,
138
- QuestionMark,
139
- AcceptedCheckMark,
140
- AcceptedUser,
141
- NotFoundIcon,
142
- },
143
- props: {
144
- description: {
145
- type: String,
146
- default: null,
147
- required: false,
148
- },
149
- annotation: {
150
- type: Object,
151
- default: null,
152
- },
153
- annotationSet: {
154
- type: Object,
155
- default: null,
156
- },
157
- label: {
158
- type: Object,
159
- default: null,
160
- },
161
- fromTable: {
162
- type: Boolean,
163
- default: false,
164
- },
165
- },
166
- data() {
167
- return {
168
- animate: false,
169
- };
170
- },
171
- computed: {
172
- ...mapGetters("document", [
173
- "confidence",
174
- "notExtracted",
175
- "created",
176
- "edited",
177
- "accepted",
178
- "isNegative",
179
- "getUser",
180
- "annotationIsNotFound",
181
- ]),
182
- ...mapState("document", ["publicView"]),
183
- },
184
- watch: {
185
- annotation(newAnnotation, oldAnnotation) {
186
- // animate an annotation being accepted
187
- if (
188
- newAnnotation &&
189
- newAnnotation.id &&
190
- this.accepted(newAnnotation) &&
191
- !this.accepted(oldAnnotation)
192
- ) {
193
- this.animate = true;
194
- setTimeout(() => {
195
- this.animate = false;
196
- }, 2000);
197
- }
198
- },
199
- },
200
- mounted() {
201
- this.changePositionOfTooltip();
202
- },
203
- methods: {
204
- getText() {
205
- if (this.notExtracted(this.annotation) || this.isNegative(this.annotation)) {
206
- return this.$t("not_found_in_document");
207
- } else if (this.created(this.annotation)) {
208
- return this.getUser(this.annotation)
209
- ? `${this.$t("created_by")} ${this.getUser(this.annotation)}`
210
- : this.$t("created");
211
- } else if (this.accepted(this.annotation)) {
212
- return this.getUser(this.annotation)
213
- ? `${this.$t("approved_by")} ${this.getUser(this.annotation)}`
214
- : this.$t("approved");
215
- } else {
216
- return this.$t("not_revised_yet");
217
- }
218
- },
219
- changePositionOfTooltip() {
220
- // Get all elements
221
- const annDetails = document.getElementsByClassName("annotation-details");
222
-
223
- // Only last 3 rows will change the position
224
- if (annDetails) {
225
- let lastElementsInList;
226
-
227
- if (annDetails.length >= 3) {
228
- lastElementsInList = annDetails.length - 2;
229
- } else {
230
- return;
231
- }
232
-
233
- for (let i = lastElementsInList; i < annDetails.length; i++) {
234
- this.updateClass(annDetails, i);
235
- }
236
- }
237
- },
238
- updateClass(array, index) {
239
- if (!array[index]) return;
240
-
241
- array[index].classList.remove("is-bottom");
242
- array[index].classList.add("is-top");
243
- },
244
- },
245
- };
246
- </script>
247
- <style
248
- scoped
249
- lang="scss"
250
- src="../../assets/scss/annotation_details.scss"
251
- ></style>
1
+ <template>
2
+ <b-tooltip
3
+ :animated="false"
4
+ :position="fromTable ? 'is-top' : 'is-bottom'"
5
+ :class="[!fromTable && 'left-aligned', 'annotation-details']"
6
+ >
7
+ <div :class="['label-icon', fromTable && 'is-small']">
8
+ <div v-if="(created(annotation) || edited(annotation)) && !isNegative(annotation) && !publicView">
9
+ <div
10
+ :class="[
11
+ 'annotation-details-icon',
12
+ animate ? 'animated-ripple' : '',
13
+ 'user-icon',
14
+ ]"
15
+ >
16
+ <AcceptedUser />
17
+ </div>
18
+ </div>
19
+ <div
20
+ v-else-if="annotationIsNotFound(annotationSet, label) && !publicView"
21
+ :class="['annotation-details-icon', animate ? 'animated-ripple' : '']"
22
+ >
23
+ <NotFoundIcon />
24
+ </div>
25
+ <div
26
+ v-else-if="notExtracted(annotation) || isNegative(annotation) && !publicView"
27
+ :class="[
28
+ 'annotation-details-icon',
29
+ animate ? 'animated-ripple' : '',
30
+ 'question-icon',
31
+ ]"
32
+ >
33
+ <QuestionMark />
34
+ </div>
35
+ <div v-else>
36
+ <div
37
+ v-if="accepted(annotation) && !publicView"
38
+ :class="[
39
+ 'annotation-details-icon success',
40
+ animate ? 'animated-ripple' : '',
41
+ ]"
42
+ >
43
+ <AcceptedCheckMark />
44
+ </div>
45
+ <div
46
+ v-else
47
+ :class="['annotation-details-icon', animate ? 'animated-ripple' : '']"
48
+ >
49
+ <CheckMark class="pending" />
50
+ </div>
51
+ </div>
52
+ </div>
53
+
54
+ <template #content>
55
+ <div class="label-details">
56
+ <div v-if="description" class="label-description">
57
+ <span>{{ description }}</span>
58
+ </div>
59
+ <div
60
+ v-if="confidence(annotation) && !isNegative(annotation)"
61
+ :class="['confidence', publicView && 'tooltip-in-public-view']"
62
+ >
63
+ <span>{{ $t("confidence") }}</span
64
+ ><span
65
+ :class="[
66
+ 'value',
67
+ confidence(annotation) <= 0.2
68
+ ? 'red'
69
+ : confidence(annotation) <= 0.5
70
+ ? 'yellow'
71
+ : '',
72
+ ]"
73
+ >{{ Math.floor(confidence(annotation) * 100) / 100 }}</span
74
+ >
75
+ </div>
76
+ <div v-if="!publicView" class="revision">
77
+ <div class="detail-icons">
78
+ <div v-if="created(annotation) || edited(annotation)">
79
+ <div
80
+ :class="[
81
+ 'annotation-details-icon',
82
+ animate ? 'animated-ripple' : '',
83
+ 'user-icon',
84
+ ]"
85
+ >
86
+ <AcceptedUser />
87
+ </div>
88
+ </div>
89
+ <div
90
+ v-else-if="notExtracted(annotation)"
91
+ :class="[
92
+ 'annotation-details-icon',
93
+ animate ? 'animated-ripple' : '',
94
+ 'question-icon',
95
+ ]"
96
+ >
97
+ <QuestionMark />
98
+ </div>
99
+ <div v-else>
100
+ <div
101
+ v-if="accepted(annotation)"
102
+ :class="[
103
+ 'annotation-details-icon',
104
+ animate ? 'animated-ripple' : '',
105
+ ]"
106
+ >
107
+ <AcceptedCheckMark />
108
+ </div>
109
+ <div
110
+ v-else
111
+ :class="[
112
+ 'annotation-details-icon',
113
+ animate ? 'animated-ripple' : '',
114
+ ]"
115
+ >
116
+ <CheckMark />
117
+ </div>
118
+ </div>
119
+ {{ getText() }}
120
+ </div>
121
+ </div>
122
+ </div>
123
+ </template>
124
+ </b-tooltip>
125
+ </template>
126
+ <script>
127
+ import { mapGetters, mapState } from "vuex";
128
+ import CheckMark from "../../assets/images/CheckMark";
129
+ import AcceptedCheckMark from "../../assets/images/AcceptedCheckMark";
130
+ import QuestionMark from "../../assets/images/QuestionMark";
131
+ import AcceptedUser from "../../assets/images/AcceptedUser";
132
+ import NotFoundIcon from "../../assets/images/NotFoundIcon";
133
+
134
+ export default {
135
+ name: "AnnotationDetails",
136
+ components: {
137
+ CheckMark,
138
+ QuestionMark,
139
+ AcceptedCheckMark,
140
+ AcceptedUser,
141
+ NotFoundIcon,
142
+ },
143
+ props: {
144
+ description: {
145
+ type: String,
146
+ default: null,
147
+ required: false,
148
+ },
149
+ annotation: {
150
+ type: Object,
151
+ default: null,
152
+ },
153
+ annotationSet: {
154
+ type: Object,
155
+ default: null,
156
+ },
157
+ label: {
158
+ type: Object,
159
+ default: null,
160
+ },
161
+ fromTable: {
162
+ type: Boolean,
163
+ default: false,
164
+ },
165
+ },
166
+ data() {
167
+ return {
168
+ animate: false,
169
+ };
170
+ },
171
+ computed: {
172
+ ...mapGetters("document", [
173
+ "confidence",
174
+ "notExtracted",
175
+ "created",
176
+ "edited",
177
+ "accepted",
178
+ "isNegative",
179
+ "getUser",
180
+ "annotationIsNotFound",
181
+ ]),
182
+ ...mapState("document", ["publicView"]),
183
+ },
184
+ watch: {
185
+ annotation(newAnnotation, oldAnnotation) {
186
+ // animate an annotation being accepted
187
+ if (
188
+ newAnnotation &&
189
+ newAnnotation.id &&
190
+ this.accepted(newAnnotation) &&
191
+ !this.accepted(oldAnnotation)
192
+ ) {
193
+ this.animate = true;
194
+ setTimeout(() => {
195
+ this.animate = false;
196
+ }, 2000);
197
+ }
198
+ },
199
+ },
200
+ mounted() {
201
+ this.changePositionOfTooltip();
202
+ },
203
+ methods: {
204
+ getText() {
205
+ if (this.notExtracted(this.annotation) || this.isNegative(this.annotation)) {
206
+ return this.$t("not_found_in_document");
207
+ } else if (this.created(this.annotation)) {
208
+ return this.getUser(this.annotation)
209
+ ? `${this.$t("created_by")} ${this.getUser(this.annotation)}`
210
+ : this.$t("created");
211
+ } else if (this.accepted(this.annotation)) {
212
+ return this.getUser(this.annotation)
213
+ ? `${this.$t("approved_by")} ${this.getUser(this.annotation)}`
214
+ : this.$t("approved");
215
+ } else {
216
+ return this.$t("not_revised_yet");
217
+ }
218
+ },
219
+ changePositionOfTooltip() {
220
+ // Get all elements
221
+ const annDetails = document.getElementsByClassName("annotation-details");
222
+
223
+ // Only last 3 rows will change the position
224
+ if (annDetails) {
225
+ let lastElementsInList;
226
+
227
+ if (annDetails.length >= 3) {
228
+ lastElementsInList = annDetails.length - 2;
229
+ } else {
230
+ return;
231
+ }
232
+
233
+ for (let i = lastElementsInList; i < annDetails.length; i++) {
234
+ this.updateClass(annDetails, i);
235
+ }
236
+ }
237
+ },
238
+ updateClass(array, index) {
239
+ if (!array[index]) return;
240
+
241
+ array[index].classList.remove("is-bottom");
242
+ array[index].classList.add("is-top");
243
+ },
244
+ },
245
+ };
246
+ </script>
247
+ <style
248
+ scoped
249
+ lang="scss"
250
+ src="../../assets/scss/annotation_details.scss"
251
+ ></style>