@konfuzio/document-validation-ui 0.1.1

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 (131) hide show
  1. package/.eslintrc.js +11 -0
  2. package/.prettierrc.json +1 -0
  3. package/LICENSE +21 -0
  4. package/README.md +13 -0
  5. package/dist/css/app.0c8973f8.css +1 -0
  6. package/dist/css/chunk-vendors.053b6b6e.css +5 -0
  7. package/dist/favicon.ico +0 -0
  8. package/dist/index.html +1 -0
  9. package/dist/js/app.17fe48c4.js +2 -0
  10. package/dist/js/app.17fe48c4.js.map +1 -0
  11. package/dist/js/chunk-vendors.a48fca3f.js +47 -0
  12. package/dist/js/chunk-vendors.a48fca3f.js.map +1 -0
  13. package/jest.config.js +4 -0
  14. package/package.json +60 -0
  15. package/src/.DS_Store +0 -0
  16. package/src/api.js +49 -0
  17. package/src/assets/images/AcceptedCheckMark.vue +8 -0
  18. package/src/assets/images/AcceptedUser.vue +8 -0
  19. package/src/assets/images/ActionIcon.vue +60 -0
  20. package/src/assets/images/ArrowDownKey.vue +11 -0
  21. package/src/assets/images/ArrowUpKey.vue +11 -0
  22. package/src/assets/images/CategoryIconImg.vue +13 -0
  23. package/src/assets/images/CheckMark.vue +8 -0
  24. package/src/assets/images/EditDocIcon.vue +12 -0
  25. package/src/assets/images/EmptyStateImg.vue +129 -0
  26. package/src/assets/images/ErrorIcon.vue +28 -0
  27. package/src/assets/images/EyeIcon.vue +11 -0
  28. package/src/assets/images/FileNameNotSavedImage.vue +26 -0
  29. package/src/assets/images/FileNameSavedImage.vue +14 -0
  30. package/src/assets/images/FitZoomIcon.vue +16 -0
  31. package/src/assets/images/KeyboardIcon.vue +16 -0
  32. package/src/assets/images/MinusIcon.vue +13 -0
  33. package/src/assets/images/NotOptimizedIllustration.vue +651 -0
  34. package/src/assets/images/PlusIcon.vue +13 -0
  35. package/src/assets/images/QuestionMark.vue +12 -0
  36. package/src/assets/images/ServerImage.vue +63 -0
  37. package/src/assets/images/SplitLines.vue +18 -0
  38. package/src/assets/images/SplitZigZag.vue +16 -0
  39. package/src/assets/images/StatusImg.vue +14 -0
  40. package/src/assets/images/UserIcon.vue +8 -0
  41. package/src/assets/scss/annotation_details.scss +126 -0
  42. package/src/assets/scss/categorize_modal.scss +42 -0
  43. package/src/assets/scss/choose_label_set_modal.scss +62 -0
  44. package/src/assets/scss/document_action_bar.scss +37 -0
  45. package/src/assets/scss/document_annotations.scss +472 -0
  46. package/src/assets/scss/document_category.scss +80 -0
  47. package/src/assets/scss/document_dashboard.scss +47 -0
  48. package/src/assets/scss/document_dataset_status.scss +46 -0
  49. package/src/assets/scss/document_edit.scss +431 -0
  50. package/src/assets/scss/document_error.scss +81 -0
  51. package/src/assets/scss/document_handover.scss +200 -0
  52. package/src/assets/scss/document_name.scss +62 -0
  53. package/src/assets/scss/document_page.scss +8 -0
  54. package/src/assets/scss/document_thumbnails.scss +41 -0
  55. package/src/assets/scss/document_toolbar.scss +89 -0
  56. package/src/assets/scss/document_top_bar.scss +139 -0
  57. package/src/assets/scss/document_viewport_modal.scss +25 -0
  58. package/src/assets/scss/documents_list.scss +130 -0
  59. package/src/assets/scss/empty_state.scss +34 -0
  60. package/src/assets/scss/extracting_data.scss +35 -0
  61. package/src/assets/scss/imports.scss +1 -0
  62. package/src/assets/scss/main.scss +24 -0
  63. package/src/assets/scss/multi_ann_table_popup.scss +12 -0
  64. package/src/assets/scss/new_annotation.scss +86 -0
  65. package/src/assets/scss/scrolling_document.scss +19 -0
  66. package/src/assets/scss/variables.scss +696 -0
  67. package/src/components/App.vue +112 -0
  68. package/src/components/DocumentAnnotations/ActionButtons.vue +237 -0
  69. package/src/components/DocumentAnnotations/AnnotationContent.vue +249 -0
  70. package/src/components/DocumentAnnotations/AnnotationDetails.vue +292 -0
  71. package/src/components/DocumentAnnotations/AnnotationRow.vue +616 -0
  72. package/src/components/DocumentAnnotations/CategorizeModal.vue +159 -0
  73. package/src/components/DocumentAnnotations/ChooseLabelSetModal.vue +155 -0
  74. package/src/components/DocumentAnnotations/DocumentAnnotations.vue +502 -0
  75. package/src/components/DocumentAnnotations/DocumentLabel.vue +148 -0
  76. package/src/components/DocumentAnnotations/EmptyAnnotation.vue +222 -0
  77. package/src/components/DocumentAnnotations/EmptyState.vue +21 -0
  78. package/src/components/DocumentAnnotations/ExtractingData.vue +29 -0
  79. package/src/components/DocumentAnnotations/LoadingAnnotations.vue +43 -0
  80. package/src/components/DocumentAnnotations/LoadingLabels.vue +43 -0
  81. package/src/components/DocumentAnnotations/RejectedLabels.vue +96 -0
  82. package/src/components/DocumentAnnotations/index.js +8 -0
  83. package/src/components/DocumentCategory.vue +156 -0
  84. package/src/components/DocumentDashboard.vue +159 -0
  85. package/src/components/DocumentEdit/DocumentEdit.vue +279 -0
  86. package/src/components/DocumentEdit/EditPages.vue +213 -0
  87. package/src/components/DocumentEdit/EditSidebar.vue +118 -0
  88. package/src/components/DocumentEdit/SplitOverview.vue +182 -0
  89. package/src/components/DocumentEdit/index.js +4 -0
  90. package/src/components/DocumentError.vue +53 -0
  91. package/src/components/DocumentPage/ActionBar.vue +48 -0
  92. package/src/components/DocumentPage/BoxSelection.vue +149 -0
  93. package/src/components/DocumentPage/DocumentPage.vue +517 -0
  94. package/src/components/DocumentPage/DocumentToolbar.vue +145 -0
  95. package/src/components/DocumentPage/DummyPage.vue +53 -0
  96. package/src/components/DocumentPage/MultiAnnSelection.vue +302 -0
  97. package/src/components/DocumentPage/MultiAnnotationTablePopup.vue +253 -0
  98. package/src/components/DocumentPage/NewAnnotation.vue +283 -0
  99. package/src/components/DocumentPage/ScrollingDocument.vue +108 -0
  100. package/src/components/DocumentPage/ScrollingPage.vue +184 -0
  101. package/src/components/DocumentPage/index.js +5 -0
  102. package/src/components/DocumentThumbnails/DocumentThumbnails.vue +92 -0
  103. package/src/components/DocumentThumbnails/LoadingThumbnail.vue +25 -0
  104. package/src/components/DocumentThumbnails/index.js +1 -0
  105. package/src/components/DocumentTopBar/DocumentDatasetStatus.vue +103 -0
  106. package/src/components/DocumentTopBar/DocumentHandover.vue +202 -0
  107. package/src/components/DocumentTopBar/DocumentName.vue +224 -0
  108. package/src/components/DocumentTopBar/DocumentTopBar.vue +144 -0
  109. package/src/components/DocumentTopBar/DocumentTopBarButtons.vue +148 -0
  110. package/src/components/DocumentTopBar/KeyboardActionsDescription.vue +71 -0
  111. package/src/components/DocumentTopBar/index.js +5 -0
  112. package/src/components/DocumentsList/DocumentsList.vue +126 -0
  113. package/src/components/DocumentsList/index.js +1 -0
  114. package/src/components/ErrorMessage.vue +40 -0
  115. package/src/components/NotOptimizedViewportModal.vue +54 -0
  116. package/src/constants.js +4 -0
  117. package/src/directives/scroll.js +28 -0
  118. package/src/i18n.js +23 -0
  119. package/src/locales/de.json +114 -0
  120. package/src/locales/en.json +114 -0
  121. package/src/locales/es.json +113 -0
  122. package/src/main.js +87 -0
  123. package/src/store/category.js +193 -0
  124. package/src/store/display.js +238 -0
  125. package/src/store/document.js +1057 -0
  126. package/src/store/edit.js +210 -0
  127. package/src/store/index.js +22 -0
  128. package/src/store/project.js +95 -0
  129. package/src/store/selection.js +179 -0
  130. package/src/utils/utils.js +3 -0
  131. package/vue.config.js +13 -0
@@ -0,0 +1,148 @@
1
+ <template>
2
+ <div class="buttons">
3
+ <div v-if="editMode" class="edit-mode-buttons">
4
+ <b-button
5
+ :label="$t('cancel')"
6
+ class="button-cancel"
7
+ type="is-default"
8
+ @click="closeEditMode"
9
+ />
10
+ <b-button
11
+ :label="
12
+ editMode &&
13
+ updatedDocument &&
14
+ updatedDocument.length > 1 &&
15
+ !splitOverview
16
+ ? $t('next')
17
+ : $t('submit')
18
+ "
19
+ type="is-primary"
20
+ :disabled="false"
21
+ class="button-next"
22
+ @click="handleButton"
23
+ />
24
+ </div>
25
+
26
+ <div
27
+ v-if="!editMode && !selectedDocument.is_reviewed && !publicView"
28
+ class="finish-review-button-container"
29
+ >
30
+ <ActionButtons
31
+ :finish-review-btn="finishReviewBtn"
32
+ :finish-disabled="finishDisabled"
33
+ :is-loading="isLoading"
34
+ @finish-review="handleFinishReview"
35
+ />
36
+ </div>
37
+ </div>
38
+ </template>
39
+
40
+ <script>
41
+ import { mapState } from "vuex";
42
+ import ActionButtons from "../DocumentAnnotations/ActionButtons";
43
+
44
+ export default {
45
+ name: "DocumentTopBarButtons",
46
+ components: {
47
+ ActionButtons,
48
+ },
49
+ data() {
50
+ return {
51
+ finishReviewBtn: true,
52
+ finishDisabled: true,
53
+ emptyLabels: null,
54
+ isLoading: false,
55
+ };
56
+ },
57
+
58
+ computed: {
59
+ ...mapState("document", [
60
+ "selectedDocument",
61
+ "publicView",
62
+ "finishedReview",
63
+ ]),
64
+ ...mapState("edit", ["editMode", "splitOverview", "updatedDocument"]),
65
+ },
66
+
67
+ watch: {
68
+ finishedReview(newValue) {
69
+ if (newValue) {
70
+ this.finishDisabled = false;
71
+ } else {
72
+ this.finishDisabled = true;
73
+ }
74
+ },
75
+ publicView(newValue) {
76
+ if (newValue) {
77
+ this.finishDisabled = true;
78
+ }
79
+ },
80
+ },
81
+ mounted() {
82
+ this.finishDisabled = !this.finishedReview;
83
+ },
84
+ methods: {
85
+ /** EDIT MODE */
86
+ closeEditMode() {
87
+ this.$store.dispatch("edit/disableEditMode");
88
+ this.$store.dispatch("edit/setSplitOverview", false);
89
+ this.$store.dispatch("edit/setUpdatedDocument", null);
90
+ this.$store.dispatch("edit/setSelectedPages", null);
91
+ this.$nextTick(() => {
92
+ // reset to first page
93
+ this.$store.dispatch("display/updateCurrentPage", 1);
94
+ });
95
+ },
96
+ handleButton() {
97
+ // Check if we are not in the split overview
98
+ // and if we have a split document
99
+ if (!this.splitOverview && this.updatedDocument.length > 1) {
100
+ // Enable the "next" button to go to the overview
101
+ this.$store.dispatch("edit/setSplitOverview", true);
102
+ this.$store.dispatch("edit/setSelectedPages", null);
103
+ }
104
+
105
+ // If we are in the overview (so more than 1 doc)
106
+ // or in the edit mode (only 1 doc)
107
+ else if (this.updatedDocument) {
108
+ // Send update request to the backend
109
+ this.$store
110
+ .dispatch("edit/editDocument", this.updatedDocument)
111
+ .catch((error) => {
112
+ this.$store.dispatch("document/createErrorMessage", {
113
+ error,
114
+ serverErrorMessage: this.$t("server_error"),
115
+ defaultErrorMessage: this.$t("edit_error"),
116
+ });
117
+ });
118
+
119
+ // Close edit mode
120
+ this.closeEditMode();
121
+ }
122
+ },
123
+ handleFinishReview() {
124
+ // update document
125
+ const updatedDocumentReviewStatus = {
126
+ is_reviewed: true,
127
+ };
128
+
129
+ this.isLoading = true;
130
+
131
+ this.$store
132
+ .dispatch("document/updateDocument", updatedDocumentReviewStatus)
133
+ .catch((error) => {
134
+ this.$store.dispatch("document/createErrorMessage", {
135
+ error,
136
+ serverErrorMessage: this.$t("server_error"),
137
+ defaultErrorMessage: this.$t("review_error"),
138
+ });
139
+ })
140
+ .finally(() => {
141
+ this.isLoading = false;
142
+ });
143
+ },
144
+ },
145
+ };
146
+ </script>
147
+
148
+ <style scoped lang="scss" src="../../assets/scss/document_top_bar.scss"></style>
@@ -0,0 +1,71 @@
1
+ <template>
2
+ <div
3
+ v-if="!publicView && !selectedDocument.is_reviewed && !editMode"
4
+ class="keyboard-actions-description"
5
+ >
6
+ <section class="b-tooltips">
7
+ <b-tooltip position="is-left" size="is-large" class="left-down-aligned">
8
+ <KeyboardIcon />
9
+
10
+ <template #content>
11
+ <div class="tooltip-title">
12
+ {{ $t("use_your_keyboard") }}
13
+ </div>
14
+
15
+ <div class="tooltip-description">
16
+ <div class="content-line">
17
+ <div class="action-item">
18
+ <div class="key"><ArrowUpKey /></div>
19
+ <div class="key"><ArrowDownKey /></div>
20
+ <div class="keyboard-action-text">{{ $t("arrow_keys") }}</div>
21
+ </div>
22
+
23
+ <div class="tooltip-divider"></div>
24
+
25
+ <div class="action-item">
26
+ <div class="key">{{ "ESC" }}</div>
27
+ <div class="keyboard-action-text">{{ $t("esc_key") }}</div>
28
+ </div>
29
+ </div>
30
+
31
+ <div class="content-line">
32
+ <div class="action-item">
33
+ <div class="key">{{ "ENTER" }}</div>
34
+ <div class="keyboard-action-text">{{ $t("enter_key") }}</div>
35
+ </div>
36
+
37
+ <div class="tooltip-divider"></div>
38
+
39
+ <div class="action-item">
40
+ <div class="key">{{ "DELETE" }}</div>
41
+ <div class="keyboard-action-text">{{ $t("delete_key") }}</div>
42
+ </div>
43
+ </div>
44
+ </div>
45
+ </template>
46
+ </b-tooltip>
47
+ </section>
48
+ </div>
49
+ </template>
50
+
51
+ <script>
52
+ import { mapState } from "vuex";
53
+ import KeyboardIcon from "../../assets/images/KeyboardIcon";
54
+ import ArrowUpKey from "../../assets/images/ArrowUpKey";
55
+ import ArrowDownKey from "../../assets/images/ArrowDownKey";
56
+
57
+ export default {
58
+ name: "KeyboardActionsDescription",
59
+ components: {
60
+ KeyboardIcon,
61
+ ArrowUpKey,
62
+ ArrowDownKey,
63
+ },
64
+ computed: {
65
+ ...mapState("edit", ["editMode"]),
66
+ ...mapState("document", ["selectedDocument", "publicView"]),
67
+ },
68
+ };
69
+ </script>
70
+
71
+ <style scoped lang="scss" src="../../assets/scss/document_top_bar.scss"></style>
@@ -0,0 +1,5 @@
1
+ export { default as DocumentTopBar } from "./DocumentTopBar";
2
+ export { default as DocumentName } from "./DocumentName";
3
+ export { default as DatasetStatus } from "./DocumentDatasetStatus";
4
+ export { default as Handover } from "./DocumentHandover";
5
+ export { default as DocumentTopBarButtons } from "./DocumentTopBarButtons";
@@ -0,0 +1,126 @@
1
+ <template>
2
+ <div
3
+ v-if="documentsAvailableToReview && documentsAvailableToReview.length > 0"
4
+ class="documents-list"
5
+ >
6
+ <div
7
+ v-if="showCategoryInfo && selectedCategory"
8
+ class="documents-list-top"
9
+ >
10
+ <div class="documents-list-top-left">
11
+ <h2>{{ selectedCategory.name }}</h2>
12
+ <p>
13
+ {{ selectedCategory.description }}
14
+ </p>
15
+ </div>
16
+ <div class="documents-list-top-right">
17
+ <div class="action-box">
18
+ <span>{{ $t("upload_documents") }}</span>
19
+ <b-button
20
+ class="action-button"
21
+ type="is-primary"
22
+ @click="requestTrialAccess"
23
+ >
24
+ {{ $t("request_trial") }}
25
+ </b-button>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <div class="documents-list-bottom">
30
+ <b-carousel-list
31
+ :data="documentsAvailableToReview"
32
+ :items-to-show="5"
33
+ >
34
+ <template #item="document">
35
+ <div
36
+ :class="[
37
+ 'documents-list-thumbnail',
38
+ selectedDocument.id == document.id && 'selected'
39
+ ]"
40
+ @click="changeDocument(document.id)"
41
+ >
42
+ <ServerImage
43
+ :class="[
44
+ 'img-thumbnail',
45
+ selectedDocument.id == document.id && 'selected'
46
+ ]"
47
+ :image-url="`${document.thumbnail_url}?${document.updated_at}`"
48
+ >
49
+ <b-skeleton
50
+ width="20px"
51
+ height="100%"
52
+ />
53
+ </ServerImage>
54
+ <div
55
+ :class="[
56
+ 'document-name',
57
+ selectedDocument.id == document.id && 'selected'
58
+ ]"
59
+ >
60
+ <!-- if is the current document, then we use the store variable to get the file name edits in real time -->
61
+ {{
62
+ selectedDocument.id == document.id
63
+ ? selectedDocument.data_file_name
64
+ : document.data_file_name
65
+ }}
66
+ </div>
67
+ <div
68
+ v-if="documentHadErrorDuringExtraction(document)"
69
+ class="error-icon"
70
+ >
71
+ <ErrorIcon />
72
+ </div>
73
+ </div>
74
+ </template>
75
+ </b-carousel-list>
76
+ </div>
77
+ </div>
78
+ </template>
79
+ <script>
80
+ import { mapGetters, mapState } from "vuex";
81
+ import ServerImage from "../../assets/images/ServerImage";
82
+ import ErrorIcon from "../../assets/images/ErrorIcon";
83
+
84
+ /**
85
+ * This component creates a horizontal list of documents
86
+ * with thumbnail pictures which are clickable.
87
+ */
88
+
89
+ export default {
90
+ name: "DocumentsList",
91
+ components: {
92
+ ServerImage,
93
+ ErrorIcon
94
+ },
95
+ data() {
96
+ return {
97
+ showCategoryInfo: false,
98
+ selectedCategory: null,
99
+ documentsList: null
100
+ };
101
+ },
102
+ computed: {
103
+ ...mapState("document", ["selectedDocument"]),
104
+ ...mapState("category", ["documentsAvailableToReview"]),
105
+ ...mapGetters("category", ["category"]),
106
+ ...mapGetters("document", ["documentHadErrorDuringExtraction"])
107
+ },
108
+ watch: {
109
+ showCategoryInfo(newValue) {
110
+ if (newValue) {
111
+ this.selectedCategory = this.category(this.selectedDocument.category);
112
+ }
113
+ }
114
+ },
115
+ methods: {
116
+ changeDocument(documentId) {
117
+ this.$store.dispatch("document/setDocId", documentId);
118
+ this.$store.dispatch("document/fetchDocument");
119
+ },
120
+ requestTrialAccess() {
121
+ window.open("https://konfuzio.com", "_blank");
122
+ }
123
+ }
124
+ };
125
+ </script>
126
+ <style scoped lang="scss" src="../../assets/scss/documents_list.scss"></style>
@@ -0,0 +1 @@
1
+ export { default as DocumentsList } from "./DocumentsList";
@@ -0,0 +1,40 @@
1
+ <template>
2
+ <b-message>
3
+ <div v-if="serverError" class="message-container">
4
+ <span class="server-error">
5
+ {{ errorMessage }}
6
+ <span class="contact-support" @click="handleGetSupport">
7
+ {{ $t("get_support") }} <b-icon icon="arrow-right" size="is-small"
8
+ /></span>
9
+ </span>
10
+ </div>
11
+ <div v-else class="message-container">
12
+ {{ errorMessage }}
13
+ </div>
14
+ <div class="btn-container" type="button" @click="handleErrorClose">
15
+ <b-icon icon="xmark" class="close-btn error-icon" size="is-small" />
16
+ </div>
17
+ </b-message>
18
+ </template>
19
+
20
+ <script>
21
+ import { mapState } from "vuex";
22
+
23
+ export default {
24
+ name: "ErrorMessage",
25
+ computed: {
26
+ ...mapState("document", ["errorMessage", "serverError"]),
27
+ },
28
+ methods: {
29
+ handleGetSupport() {
30
+ const error = "Server error";
31
+ this.$store.dispatch("document/contactSupport", error);
32
+ },
33
+ handleErrorClose() {
34
+ this.$store.dispatch("document/setErrorMessage", null);
35
+ },
36
+ },
37
+ };
38
+ </script>
39
+
40
+ <style scoped lang="scss" src="../assets/scss/variables.scss"></style>
@@ -0,0 +1,54 @@
1
+ <template>
2
+ <section class="viewport-modal">
3
+ <b-modal
4
+ v-model="isModalActive"
5
+ class="modal-text-center"
6
+ :width="500"
7
+ >
8
+ <section class="modal-card-body">
9
+ <div class="image">
10
+ <Illustration />
11
+ </div>
12
+ <div class="content">
13
+ <h3>{{ $t("small_viewport_title") }}</h3>
14
+ <p>{{ $t("small_viewport_info") }}</p>
15
+ </div>
16
+ </section>
17
+ <footer class="modal-card-foot">
18
+ <b-button
19
+ type="is-primary"
20
+ @click="handleNotOptimizedModal"
21
+ >
22
+ {{ $t("ok") }}
23
+ </b-button>
24
+ </footer>
25
+ </b-modal>
26
+ </section>
27
+ </template>
28
+
29
+ <script>
30
+ import Illustration from "../assets/images/NotOptimizedIllustration";
31
+
32
+ export default {
33
+ name: "NotOptimizedViewportModal",
34
+ components: {
35
+ Illustration
36
+ },
37
+ data() {
38
+ return {
39
+ isModalActive: true
40
+ };
41
+ },
42
+ methods: {
43
+ handleNotOptimizedModal() {
44
+ this.isModalActive = false;
45
+ }
46
+ }
47
+ };
48
+ </script>
49
+
50
+ <style
51
+ scoped
52
+ lang="scss"
53
+ src="../assets/scss/document_viewport_modal.scss"
54
+ ></style>
@@ -0,0 +1,4 @@
1
+ export const PIXEL_RATIO = window.devicePixelRatio || 1;
2
+ export const VIEWPORT_RATIO = 0.98;
3
+ export const MINIMUM_APP_WIDTH = 600;
4
+ export const MINIMUM_OPTIMIZED_APP_WIDTH = 1024;
@@ -0,0 +1,28 @@
1
+ function inserted(el, binding) {
2
+ const callback = binding.value;
3
+ if (binding.modifiers.immediate) {
4
+ callback();
5
+ }
6
+ const throttledScroll = throttle(callback, 300);
7
+ el.addEventListener("scroll", throttledScroll, true);
8
+ }
9
+
10
+ function throttle(callback, limit) {
11
+ var waiting = false; // Initially, we're not waiting
12
+ return function() {
13
+ // We return a throttled function
14
+ if (!waiting) {
15
+ // If we're not waiting
16
+ callback.apply(this, arguments); // Execute users function
17
+ waiting = true; // Prevent future invocations
18
+ setTimeout(function() {
19
+ // After a period of time
20
+ waiting = false; // And allow future invocations
21
+ }, limit);
22
+ }
23
+ };
24
+ }
25
+
26
+ export default {
27
+ inserted
28
+ };
package/src/i18n.js ADDED
@@ -0,0 +1,23 @@
1
+ import Vue from 'vue'
2
+ import VueI18n from 'vue-i18n'
3
+
4
+ Vue.use(VueI18n)
5
+
6
+ function loadLocaleMessages() {
7
+ const locales = require.context('./locales', true, /[A-Za-z0-9-_,\s]+\.json$/i)
8
+ const messages = {}
9
+ locales.keys().forEach(key => {
10
+ const matched = key.match(/([A-Za-z0-9-_]+)\./i)
11
+ if (matched && matched.length > 1) {
12
+ const locale = matched[1]
13
+ messages[locale] = locales(key)
14
+ }
15
+ })
16
+ return messages
17
+ }
18
+
19
+ export default new VueI18n({
20
+ locale: process.env.VUE_APP_I18N_LOCALE || 'en',
21
+ fallbackLocale: 'en',
22
+ messages: loadLocaleMessages()
23
+ })
@@ -0,0 +1,114 @@
1
+ {
2
+ "no_label_sets_found": "Keine Label Sets vorhanden",
3
+ "no_label_sets_found_description": "In diesem Dokument sind keine Label Sets vorhanden.",
4
+ "no_labels_found": "Keine Labels vorhanden",
5
+ "no_labels_description": "In diesem Label Set sind keine Labels vorhanden.",
6
+ "resolution_not_supported": "Die App wird bei dieser Auflösung nicht unterstützt",
7
+ "upload_documents": "Laden Sie Ihre Dokumente hoch",
8
+ "request_trial": "Fordern Sie Ihren Probezugang an",
9
+ "warning_message": "Die KI kann nicht trainiert werden, wenn Sie den Text manuell ändern.",
10
+ "category": "Kategorie",
11
+ "status": "Status",
12
+ "preparation": "Vorbereitung",
13
+ "training": "Training",
14
+ "test": "Test",
15
+ "excluded": "Ausgenommen",
16
+ "set_status": "Setzen Sie bitte einen Status",
17
+ "category_error": "Die Kategorie kann nicht geändert werden, da bereits akzeptierte Annotationen oder manuell erstellte Annotationen zu diesem Dokument vorhanden sind.",
18
+ "status_error": "Wir konnten den Status nicht ändern. Bitte versuchen Sie es später erneut.",
19
+ "edit": "Bearbeiten",
20
+ "save": "Speichern",
21
+ "autosaving": "Automatisches Speichern...",
22
+ "saved": "Gespeichert",
23
+ "not_saved": "Konnte nicht gespeichert werden. Versuchen Sie es noch einmal",
24
+ "handover": "Übergeben",
25
+ "handover_document": "Übergabedokument",
26
+ "type_email": "Bitte geben Sie eine E-Mail ein",
27
+ "invalid_email": "Bitte geben Sie eine gültige E-Mail-Adresse ein.",
28
+ "members": "Mitglieder",
29
+ "select": "Auswählen",
30
+ "document_successfully_handed": "Dokument erfolgreich übergeben an",
31
+ "handover_not_possible": "Eine Übergabe war nicht möglich. Bitte versuchen Sie es später erneut.",
32
+ "small_viewport_title": "Kleine Ansichtsfenstergröße",
33
+ "small_viewport_info": "Es tut uns leid, aber Konfuzio ist nicht für diese Ansichtsfenstergröße optimiert. Für eine bessere Bedienbarkeit öffnen Sie es bitte in einem größeren Ansichtsfenster.",
34
+ "ok": "Ok, verstanden",
35
+ "no_data_found": "Zum Bearbeiten anklicken...",
36
+ "draw_box_document": "Find <i>{label_name}</i> in the document",
37
+ "accuracy": "Genauigkeit",
38
+ "not_found_in_document": "Im Dokument nicht gefunden",
39
+ "approved_by": "Genehmigt von",
40
+ "approved": "Genehmigt",
41
+ "created_by": "Erstellt von",
42
+ "edited_by": "Bearbeitet durch",
43
+ "edited": "Bearbeitet",
44
+ "created": "Manuell erzeugt",
45
+ "not_revised_yet": "Noch nicht geprüft",
46
+ "rotate_pages": "Seiten drehen",
47
+ "rotate_all": "Alles drehen",
48
+ "cancel": "Beenden",
49
+ "apply": "Anwenden",
50
+ "data_being_extracted": "Neue Daten werden extrahiert",
51
+ "analysing_document": "Wir analysieren Ihr Dokument.",
52
+ "few_minutes": "Dies könnte ein paar Minuten dauern.",
53
+ "reject_label": "Ablehnen",
54
+ "rejected": "Abgelehnt",
55
+ "ann_exists": "Eine Annotation für dieses Label und Label-Set existiert bereits.",
56
+ "lite_mode": "Schreibgeschützt",
57
+ "limited_functionalities": "Sie verwenden die schreibgeschützte Version mit begrenzten Funktionalitäten.",
58
+ "split": "Aufteilen",
59
+ "reorder": "Umsortieren",
60
+ "edit_error": "Die Änderungen konnten nicht gespeichert werden. Bitte versuchen Sie es später erneut.",
61
+ "overview": "Übersicht",
62
+ "select_pages": "Sie können nun Seiten drehen, neu sortieren und Dokumente splitten.",
63
+ "edit_document": "Dokument bearbeiten (Early Access)",
64
+ "edit_early_access": "Sie sind einer der Nutzer, die Zugang zu diesen Funktionalitäten vor dem offiziellen Erscheinungstermin erhalten.",
65
+ "selected": "ausgewählt",
66
+ "rotate_selected": "Ausgewählte Seite drehen",
67
+ "edit_not_available": "Dokumente mit dem Status 'Vorbereitung', 'Training' oder 'Test' sowie Dokumente mit dem Status 'Schreibgeschützt' oder 'Geprüft' können nicht bearbeitet werden.",
68
+ "back_to_edit": "Zurück zum Bearbeiten Modus",
69
+ "split_document": "Dokument aufteilen",
70
+ "submit": "Senden",
71
+ "next": "Weiter",
72
+ "select_label": "Label auswählen",
73
+ "select_annotation_set": "Wähle Annotation Set",
74
+ "accept": "Akzeptieren",
75
+ "document_error_title": "Dokumentenfehler",
76
+ "document_error_info": "Es tut uns leid, das Dokument ist auf ein Problem gestoßen und seine Daten können nicht wiederhergestellt werden.",
77
+ "contact_support": "Support kontaktieren",
78
+ "finish_review": "Nachprüfung beenden",
79
+ "review_error": "Beim Abschluss der Überprüfung ist etwas schief gelaufen. Bitte versuchen Sie es später erneut.",
80
+ "document_reviewed": "Eine Bearbeitung ist nicht mehr möglich, da das Dokument bereits geprüft wurde.",
81
+ "reviewed_mode": "Geprüft",
82
+ "error_creating_annotation": "Die Annotation konnte nicht erzeugt werden. Bitte versuchen Sie es später erneut.",
83
+ "categorize_document_title": "Dokument Kategorisieren",
84
+ "categorized_as": "Dieses Dokument ist kategorisiert als",
85
+ "not_categorized": "Nicht kategorisiert. Bitte wählen Sie vor dem Annotieren eine Kategorie aus: ",
86
+ "choose_category": "Wählen Sie bitte eine Kategorie",
87
+ "select_category": "Wählen Sie bitte die richtige Kategorie aus.",
88
+ "categorized_error": "Wenn dies nicht die richtige Kategorie ist, ändern Sie diese bitte und wir fahren mit der erneuten Extraktion fort.",
89
+ "categorize_document_no_category_description": "Bitten Sie den Projektmanager, eine Beschreibung dieser Kategorie hinzuzufügen, um mehr über diese Kategorie zu erfahren.",
90
+ "annotations_pending": "Ausstehende Annotationen",
91
+ "annotations_accepted": "Akzeptierte Annotationen",
92
+ "reject_all_empty": "Alle fehlenden Annotationen ablehnen",
93
+ "no_labels_to_choose": "Keine Labels",
94
+ "accept_group": "Alle akzeptieren",
95
+ "use_your_keyboard": "Benutze deine Tastatur",
96
+ "arrow_keys": "Navigieren",
97
+ "esc_key": "Exit",
98
+ "enter_key": "Akzeptieren oder Speichern",
99
+ "delete_key": "Ablehnen",
100
+ "decline": "Decline",
101
+ "server_error": "We are currently experiencing a server issue. Please try again later or",
102
+ "get_support": "Get Support",
103
+ "no_labels_available": "Das ausgewählte Annotations-Set enthält keine nicht ausgefüllten oder multiplen Labels.",
104
+ "new_ann_set_title": "Neues Annotations-Set",
105
+ "new_ann_set_description": "Wählen Sie ein Datenmodell aus den vorhandenen aus. Das neue Annotations-Set enthält dieselben Beschriftungen.",
106
+ "select_label_set": "Wählen Sie das Label-Set-Modell aus",
107
+ "new_ann_set_hint": "Das neue Set wird erst in dem Moment erstellt, in dem Sie Ihre Annotationen speichern.",
108
+ "new": "Neu",
109
+ "continue": "Weiter",
110
+ "new_multi_ann_title": "Erstellen Sie mehrere Annotationen",
111
+ "new_multi_ann_description": "Wählen Sie ein Datenmodell aus den vorhandenen aus und deaktivieren Sie dann die Labels, die in diesem Dokument nicht vorhanden sind.",
112
+ "drag_drop_columns_multi_ann": "Drag and Drop, um die Reihenfolge der Labels zu ändern",
113
+ "error_creating_multi_ann": "Nicht alle Annotationen wurden erfolgreich erstellt."
114
+ }