@konfuzio/document-validation-ui 0.2.2-dev.3 → 0.2.3-dev.0
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/dist/js/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"js/app.js","mappings":"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","sources":["webpack://@konfuzio/document-validation-ui/./src/locales/ sync [A-Za-z0-9-_,\\s]+\\.json$i","webpack://@konfuzio/document-validation-ui/./src/components/App.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentDashboard.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentSetChooser.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CategoryIconImg.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CategoryIconImg.vue?d754","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentSetChooser.vue?3115","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentName.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ServerImage.vue","webpack://@konfuzio/document-validation-ui/./src/utils/keycloak.js","webpack://@konfuzio/document-validation-ui/./src/api.js","webpack://@konfuzio/document-validation-ui/./src/assets/images/ServerImage.vue?c65a","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameSavedImage.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameSavedImage.vue?afb3","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameNotSavedImage.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameNotSavedImage.vue?46eb","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentName.vue?9b9e","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBarButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBarButtons.vue?78f1","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/KeyboardActionsDescription.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/KeyboardIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/KeyboardIcon.vue?ff3f","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowUpKey.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowUpKey.vue?e16a","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowDownKey.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowDownKey.vue?dadd","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/KeyboardActionsDescription.vue?f5d9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBar.vue?e0c0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentPage.vue","webpack://@konfuzio/document-validation-ui/./src/constants.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/BoxSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/BoxSelection.vue?db17","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SpanSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SpanSelection.vue?ee73","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/PlaceholderSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/PlaceholderSelection.vue?ad84","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnotationPopup.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnotationPopup.vue?2abd","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnSetTableOptions.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SettingsIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SettingsIcon.vue?31e1","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnSetTableOptions.vue?4247","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentPage.vue?3163","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DummyPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DummyPage.vue?1d01","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingDocument.vue","webpack://@konfuzio/document-validation-ui/./src/directives/scroll.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingPage.vue?4d28","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentToolbar.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FitZoomIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FitZoomIcon.vue?01c6","webpack://@konfuzio/document-validation-ui/./src/assets/images/PlusIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/PlusIcon.vue?038a","webpack://@konfuzio/document-validation-ui/./src/assets/images/MinusIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/MinusIcon.vue?5afc","webpack://@konfuzio/document-validation-ui/./src/assets/images/EditDocIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EditDocIcon.vue?2154","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentToolbar.vue?3258","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SearchBar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SearchBar.vue?f30d","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingDocument.vue?1b17","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/DocumentThumbnails.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/LoadingThumbnail.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/LoadingThumbnail.vue?6ef0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/DocumentThumbnails.vue?b65b","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentAnnotations.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyState.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EmptyStateImg.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EmptyStateImg.vue?d064","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyState.vue?8eb6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ExtractingData.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ExtractingData.vue?f1b3","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationSetActionButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationSetActionButtons.vue?7993","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentLabel.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationRow.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationDetails.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CheckMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CheckMark.vue?07d4","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedCheckMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedCheckMark.vue?8b1f","webpack://@konfuzio/document-validation-ui/./src/assets/images/QuestionMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/QuestionMark.vue?1bf1","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedUser.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedUser.vue?c643","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotFoundIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotFoundIcon.vue?82f7","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationDetails.vue?2329","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationContent.vue","webpack://@konfuzio/document-validation-ui/./src/utils/utils.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationContent.vue?a2de","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyAnnotation.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyAnnotation.vue?0887","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationActionButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationActionButtons.vue?2b76","webpack://@konfuzio/document-validation-ui/./src/assets/images/TranslateArrows.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/TranslateArrows.vue?95d9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationRow.vue?90e0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentLabel.vue?bb02","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationFilters.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationFilters.vue?543f","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingAnnotations.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingLabels.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingLabels.vue?d415","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingAnnotations.vue?0e1a","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentAnnotations.vue?cbb7","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ChooseLabelSetModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ChooseLabelSetModal.vue?df58","webpack://@konfuzio/document-validation-ui/./src/assets/images/DraggableIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/DraggableIcon.vue?2174","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/MultiAnnotationTableOverlay.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/DocumentEdit.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditSidebar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SidebarButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SidebarButtons.vue?2c61","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditSidebar.vue?3934","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/RenameAndCategorize.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentCategory.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentCategory.vue?ee51","webpack://@konfuzio/document-validation-ui/./src/assets/images/EyeIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EyeIcon.vue?4331","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/RenameAndCategorize.vue?7974","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPages.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitLines.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitLines.vue?99b4","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitZigZag.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitZigZag.vue?caf0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPageThumbnail.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPageThumbnail.vue?a710","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPages.vue?6cb3","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SplitInfoBar.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/StarIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/StarIcon.vue?3c5a","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SplitInfoBar.vue?a72c","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditConfirmationModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditConfirmationModal.vue?3ea6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/DocumentEdit.vue?497e","webpack://@konfuzio/document-validation-ui/./src/components/ErrorMessage.vue","webpack://@konfuzio/document-validation-ui/./src/components/ErrorMessage.vue?c4a9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/NotOptimizedViewportModal.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotOptimizedIllustration.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotOptimizedIllustration.vue?2dd6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/NotOptimizedViewportModal.vue?3a38","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/AnnotationDeletedModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/AnnotationDeletedModal.vue?2594","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/DocumentErrorModal.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ErrorIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ErrorIcon.vue?4b6c","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/DocumentErrorModal.vue?df30","webpack://@konfuzio/document-validation-ui/./src/components/DocumentDashboard.vue?2842","webpack://@konfuzio/document-validation-ui/./src/components/ErrorPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/ErrorPage.vue?ab67","webpack://@konfuzio/document-validation-ui/./src/components/DocumentsList/DocumentsList.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentsList/DocumentsList.vue?b30f","webpack://@konfuzio/document-validation-ui/./src/components/App.vue?15c7","webpack://@konfuzio/document-validation-ui/./src/i18n.js","webpack://@konfuzio/document-validation-ui/./src/store/display.js","webpack://@konfuzio/document-validation-ui/./src/store/document.js","webpack://@konfuzio/document-validation-ui/./src/store/category.js","webpack://@konfuzio/document-validation-ui/./src/store/project.js","webpack://@konfuzio/document-validation-ui/./src/store/selection.js","webpack://@konfuzio/document-validation-ui/./src/store/edit.js","webpack://@konfuzio/document-validation-ui/./src/store/index.js","webpack://@konfuzio/document-validation-ui/./src/icons.js","webpack://@konfuzio/document-validation-ui/./src/main.js","webpack://@konfuzio/document-validation-ui/webpack/bootstrap","webpack://@konfuzio/document-validation-ui/webpack/runtime/amd options","webpack://@konfuzio/document-validation-ui/webpack/runtime/chunk loaded","webpack://@konfuzio/document-validation-ui/webpack/runtime/compat get default export","webpack://@konfuzio/document-validation-ui/webpack/runtime/define property getters","webpack://@konfuzio/document-validation-ui/webpack/runtime/global","webpack://@konfuzio/document-validation-ui/webpack/runtime/harmony module decorator","webpack://@konfuzio/document-validation-ui/webpack/runtime/hasOwnProperty shorthand","webpack://@konfuzio/document-validation-ui/webpack/runtime/make namespace object","webpack://@konfuzio/document-validation-ui/webpack/runtime/jsonp chunk loading","webpack://@konfuzio/document-validation-ui/webpack/startup"],"sourcesContent":["var map = {\n\t\"./de.json\": 5894,\n\t\"./en.json\": 4174,\n\t\"./es.json\": 6725\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5432;","<template>\n <div class=\"dv-ui-app-container dv-ui-theme\">\n <DocumentsList v-if=\"showDocumentsList\" />\n <DocumentDashboard v-if=\"!pageError\" />\n <ErrorPage v-else :error=\"pageError\" />\n </div>\n</template>\n<script>\nimport Vue from \"vue\";\nimport { mapState } from \"vuex\";\nimport * as Sentry from \"@sentry/vue\";\nimport DocumentDashboard from \"./DocumentDashboard\";\nimport ErrorPage from \"./ErrorPage\";\nimport { DocumentsList } from \"./DocumentsList\";\nimport {\n getURLQueryParam,\n getURLPath,\n getURLValueFromHash,\n} from \"../utils/utils\";\nimport { Integrations } from \"@sentry/tracing\";\nimport API from \"../api\";\nimport { initKeycloak } from \"../utils/keycloak\";\nimport { debounce } from \"../utils/utils\";\n\nexport default {\n name: \"App\",\n components: {\n DocumentsList,\n DocumentDashboard,\n ErrorPage,\n },\n props: {\n document: {\n type: String,\n required: false,\n default: null,\n },\n // eslint-disable-next-line vue/prop-name-casing\n user_token: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n full_mode: {\n type: String,\n required: false,\n default: \"false\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_documents_navigation: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_missing_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_feedback_needed_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_accepted_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sentry_dsn: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sentry_env: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n api_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n image_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/require-default-prop\n locale: {\n type: String,\n required: false,\n },\n // eslint-disable-next-line vue/prop-name-casing\n documents_list_path: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n details_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotation: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotationSet: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_realm: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_client_id: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n hide_empty_label_sets: {\n type: String,\n required: false,\n default: \"false\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotation_content_width: {\n type: String,\n required: false,\n default: \"60\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n remove_branding: {\n type: String,\n required: false,\n default: \"false\",\n },\n },\n computed: {\n ...mapState(\"display\", [\"pageError\"]),\n documentId() {\n if (getURLQueryParam(\"document\")) {\n return getURLQueryParam(\"document\");\n } else if (getURLPath(\"d\")) {\n return getURLPath(\"d\");\n } else if (process.env.VUE_APP_DOCUMENT) {\n return process.env.VUE_APP_DOCUMENT;\n } else if (this.document) {\n return this.document;\n } else {\n return null;\n }\n },\n userToken() {\n if (process.env.VUE_APP_USER_TOKEN) {\n return process.env.VUE_APP_USER_TOKEN;\n } else if (this.user_token) {\n return this.user_token;\n } else {\n return null;\n }\n },\n fullMode() {\n if (process.env.VUE_APP_FULL_MODE) {\n return process.env.VUE_APP_FULL_MODE;\n } else if (this.full_mode && this.full_mode === \"true\") {\n return this.full_mode;\n } else {\n return null;\n }\n },\n showDocumentsNavigation() {\n if (process.env.VUE_APP_SHOW_DOCUMENTS_NAVIGATION) {\n return process.env.VUE_APP_SHOW_DOCUMENTS_NAVIGATION === \"true\";\n } else {\n return this.show_documents_navigation === \"true\";\n }\n },\n removeBranding() {\n if (process.env.VUE_APP_REMOVE_BRANDING) {\n return process.env.VUE_APP_REMOVE_BRANDING === \"true\";\n } else {\n return this.remove_branding === \"true\";\n }\n },\n showMissingAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return false;\n } else if (process.env.VUE_APP_SHOW_MISSING_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_MISSING_ANNOTATIONS === \"true\";\n } else {\n return this.show_missing_annotations === \"true\";\n }\n },\n showAcceptedAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return false;\n } else if (process.env.VUE_APP_SHOW_ACCEPTED_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_ACCEPTED_ANNOTATIONS === \"true\";\n } else {\n return this.show_accepted_annotations === \"true\";\n }\n },\n showFeedbackNeededAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return true;\n } else if (process.env.VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS === \"true\";\n } else {\n return this.show_feedback_needed_annotations === \"true\";\n }\n },\n isPublicView() {\n if (\n this.userToken ||\n this.fullMode ||\n (this.ssoUrl && this.ssoRealm && this.ssoClientId)\n ) {\n return false;\n } else {\n return true;\n }\n },\n showDocumentsList() {\n return process.env.VUE_APP_SHOW_DOCUMENTS_LIST;\n },\n documentsListPath() {\n if (process.env.VUE_APP_DOCUMENTS_LIST_PATH) {\n return process.env.VUE_APP_DOCUMENTS_LIST_PATH;\n } else if (this.documents_list_path && this.documents_list_path !== \"\") {\n return this.documents_list_path;\n } else {\n return null;\n }\n },\n detailsUrl() {\n if (process.env.VUE_APP_DETAILS_URL) {\n return process.env.VUE_APP_DETAILS_URL;\n } else if (this.details_url) {\n return this.details_url;\n } else {\n return null;\n }\n },\n ssoUrl() {\n if (process.env.VUE_APP_SSO_URL) {\n return process.env.VUE_APP_SSO_URL;\n } else if (this.sso_url) {\n return this.sso_url;\n } else {\n return null;\n }\n },\n ssoRealm() {\n if (process.env.VUE_APP_SSO_REALM) {\n return process.env.VUE_APP_SSO_REALM;\n } else if (this.sso_realm) {\n return this.sso_realm;\n } else {\n return null;\n }\n },\n ssoClientId() {\n if (process.env.VUE_APP_SSO_CLIENT_ID) {\n return process.env.VUE_APP_SSO_CLIENT_ID;\n } else if (this.sso_client_id) {\n return this.sso_client_id;\n } else {\n return null;\n }\n },\n annotationId() {\n if (getURLValueFromHash(\"ann\")) {\n return getURLValueFromHash(\"ann\");\n } else if (process.env.VUE_APP_ANNOTATION) {\n return process.env.VUE_APP_ANNOTATION;\n } else if (this.annotation) {\n return this.annotation;\n } else {\n return null;\n }\n },\n annotationSetId() {\n if (getURLValueFromHash(\"templ\")) {\n return getURLValueFromHash(\"templ\");\n } else if (process.env.VUE_APP_ANNOTATION_SET) {\n return process.env.VUE_APP_ANNOTATION_SET;\n } else if (this.annotationSet) {\n return this.annotationSet;\n } else {\n return null;\n }\n },\n hideEmptyLabelSets() {\n if (process.env.VUE_APP_HIDE_EMPTY_LABEL_SETS) {\n return process.env.VUE_APP_HIDE_EMPTY_LABEL_SETS === \"true\";\n } else {\n return this.hide_empty_label_sets === \"true\";\n }\n },\n annotationContentWidth() {\n if (process.env.VUE_APP_ANNOTATION_CONTENT_WIDTH) {\n return process.env.VUE_APP_ANNOTATION_CONTENT_WIDTH;\n } else {\n return this.annotation_content_width;\n }\n },\n },\n async created() {\n // Sentry config\n if (process.env.NODE_ENV != \"development\") {\n Sentry.init({\n Vue,\n dsn: process.env.VUE_APP_SENTRY_DSN,\n integrations: [new Integrations.BrowserTracing()],\n environment: process.env.VUE_APP_SENTRY_ENV,\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n\n // If false, errors won't show up in devtools\n logErrors: true,\n\n tracingOptions: {\n trackComponents: true,\n },\n });\n }\n\n // Log app version\n console.log(\n `${this.removeBranding ? \"\" : require(\"../../package.json\").name} ${\n require(\"../../package.json\").version\n }`\n );\n\n console.log(\"-------\");\n\n // locale config\n if (this.locale && this.locale !== \"\") {\n this.$i18n.locale = this.locale;\n }\n\n // api config\n if (this.userToken) {\n API.setAuthToken(this.userToken);\n } else if (this.ssoUrl && this.ssoRealm && this.ssoClientId) {\n await initKeycloak(this.ssoUrl, this.ssoRealm, this.ssoClientId);\n }\n\n API.setLocale(this.$i18n.locale);\n\n if (this.api_url !== \"\") {\n API.setApiUrl(this.api_url);\n }\n if (this.image_url !== \"\") {\n API.setFileUrl(this.image_url);\n }\n\n // document and project config\n Promise.all([\n this.$store.dispatch(\"display/setDetailsUrl\", this.detailsUrl),\n this.$store.dispatch(\n \"display/setAnnotationWidth\",\n this.annotationContentWidth\n ),\n this.$store.dispatch(\n \"display/hideEmptyLabelSets\",\n this.hideEmptyLabelSets\n ),\n this.$store.dispatch(\n \"display/showDocumentsNavigation\",\n this.showDocumentsNavigation\n ),\n this.$store.dispatch(\"display/showBranding\", !this.removeBranding),\n this.$store.dispatch(\n \"document/showMissingAnnotations\",\n this.showMissingAnnotations\n ),\n this.$store.dispatch(\n \"document/showFeedbackNeededAnnotations\",\n this.showFeedbackNeededAnnotations\n ),\n this.$store.dispatch(\n \"document/showAcceptedAnnotations\",\n this.showAcceptedAnnotations\n ),\n this.$store.dispatch(\"document/setDocId\", this.documentId),\n this.$store.dispatch(\"document/setPublicView\", this.isPublicView),\n this.$store.dispatch(\"document/setAnnotationId\", this.annotationId),\n this.$store.dispatch(\"document/setAnnotationSetId\", this.annotationSetId),\n this.$store.dispatch(\n \"project/setDocumentsListPath\",\n this.documentsListPath\n ),\n ]).finally(() => {\n this.$store.dispatch(\"document/fetchDocument\");\n });\n\n // Stop error resizeObserver\n const _ = window.ResizeObserver;\n window.ResizeObserver = class ResizeObserver extends _ {\n constructor(callback) {\n callback = debounce(callback, 20);\n super(callback);\n }\n };\n },\n};\n</script>\n\n<style lang=\"scss\" src=\"../assets/scss/theme.scss\"></style>\n","<template>\n <div class=\"dashboard\">\n <DocumentTopBar />\n <div :class=\"['dashboard-viewer', renameAndCategorize ? 'edit-mode' : '']\">\n <DocumentThumbnails v-if=\"!editMode\" ref=\"documentPages\" />\n <splitpanes class=\"default-theme\">\n <pane :size=\"50\" :min-size=\"10\">\n <ScrollingDocument\n ref=\"scrollingDocument\"\n class=\"dashboard-document\"\n />\n </pane>\n <pane :size=\"50\" class=\"document-sidebar\">\n <DocumentAnnotations v-if=\"!editMode\" ref=\"annotations\" />\n <DocumentEdit v-else ref=\"editView\" />\n </pane>\n </splitpanes>\n\n <ChooseLabelSetModal\n v-if=\"showChooseLabelSetModal && showChooseLabelSetModal.show\"\n :is-multiple-annotations=\"showChooseLabelSetModal.isMultipleAnnotations\"\n @finish=\"showChooseLabelSetModal.finish\"\n />\n\n <transition name=\"slide-fade\">\n <div\n v-if=\"showActionError\"\n class=\"error-message\"\n :style=\"{ width: `${errorMessageWidth}px` }\"\n >\n <ErrorMessage />\n </div>\n </transition>\n </div>\n <div v-if=\"showDocumentError\" class=\"error-modal\">\n <DocumentErrorModal />\n </div>\n <div v-if=\"!optimalResolution\" class=\"not-optimized\">\n <NotOptimizedViewportModal />\n </div>\n <div>\n <AnnotationDeletedModal />\n </div>\n <div v-if=\"!isMinimumWidth\" class=\"not-supported\">\n <div class=\"text\">\n {{ $t(\"resolution_not_supported\") }}\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport { DocumentTopBar } from \"./DocumentTopBar\";\nimport { ScrollingDocument } from \"./DocumentPage\";\nimport { DocumentThumbnails } from \"./DocumentThumbnails\";\nimport { DocumentAnnotations } from \"./DocumentAnnotations\";\nimport { DocumentEdit } from \"./DocumentEdit\";\nimport ErrorMessage from \"./ErrorMessage\";\nimport NotOptimizedViewportModal from \"../components/DocumentModals/NotOptimizedViewportModal\";\nimport AnnotationDeletedModal from \"../components/DocumentModals/AnnotationDeletedModal\";\nimport DocumentErrorModal from \"../components/DocumentModals/DocumentErrorModal\";\nimport ChooseLabelSetModal from \"../components/DocumentAnnotations/ChooseLabelSetModal\";\nimport { Splitpanes, Pane } from \"splitpanes\";\nimport \"splitpanes/dist/splitpanes.css\";\n\n/**\n * This component shows the PDF pages in a scrolling component and\n * the annotations on the side.\n */\nexport default {\n name: \"DocumentDashboard\",\n components: {\n Splitpanes,\n Pane,\n DocumentTopBar,\n ScrollingDocument,\n DocumentThumbnails,\n DocumentAnnotations,\n DocumentEdit,\n ErrorMessage,\n NotOptimizedViewportModal,\n DocumentErrorModal,\n ChooseLabelSetModal,\n AnnotationDeletedModal,\n },\n data() {\n return {\n resizeObserver: null,\n unwatchSelectedDocument: null,\n documentContainerLeftPadding: 0,\n documentContainerWidth: 0,\n };\n },\n computed: {\n ...mapState(\"display\", [\n \"scale\",\n \"fit\",\n \"optimalResolution\",\n \"pageWidthScale\",\n \"currentPage\",\n \"showAnnSetTable\",\n \"showChooseLabelSetModal\",\n ]),\n ...mapState(\"document\", [\n \"showActionError\",\n \"showDocumentError\",\n \"errorMessageWidth\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapState(\"edit\", [\"editMode\", \"renameAndCategorize\"]),\n ...mapGetters(\"display\", [\"isMinimumWidth\"]),\n },\n\n watch: {\n selectedDocument(newDocument, oldDocument) {\n if (newDocument && !oldDocument) {\n // first time\n this.resizeObserver.observe(this.$refs.scrollingDocument.$el);\n } else if (newDocument) {\n this.onDocumentResize();\n }\n },\n fit(newFit, oldFit) {\n if (newFit !== oldFit) {\n this.onDocumentResize();\n }\n },\n },\n mounted() {\n this.resizeObserver = new ResizeObserver(this.onDocumentResize);\n },\n unmounted() {\n if (this.$refs.scrollingDocument) {\n this.resizeObserver.unobserve(this.$refs.scrollingDocument.$el);\n }\n },\n methods: {\n elementsWidth() {\n let elementsWidth = 1;\n if (this.$refs.editView) {\n elementsWidth += this.$refs.editView.$el.clientWidth;\n }\n if (this.$refs.documentPages) {\n elementsWidth += this.$refs.documentPages.$el.clientWidth;\n }\n if (this.$refs.annotations) {\n elementsWidth += this.$refs.annotations.$el.clientWidth;\n }\n return elementsWidth;\n },\n onDocumentResize() {\n if (this.$refs.scrollingDocument) {\n this.documentContainerLeftPadding =\n this.$refs.scrollingDocument.$el.getBoundingClientRect().left;\n this.documentContainerWidth =\n this.$refs.scrollingDocument.$el.offsetWidth;\n this.$store.dispatch(\n \"display/updateOptimalResolution\",\n this.$el.offsetWidth\n );\n if (this.selectedDocument.pages[0]) {\n this.$store.dispatch(\"display/updateScale\", {\n elementsWidth: this.elementsWidth(),\n client: {\n width: this.$el.clientWidth,\n height: this.$el.clientHeight,\n },\n viewport: {\n width: this.selectedDocument.pages[0].size[0],\n height: this.selectedDocument.pages[0].size[1],\n },\n });\n }\n }\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../assets/scss/document_dashboard.scss\"></style>\n","<template>\n <div id=\"document-top-bar-component\" ref=\"documentTopBar\">\n <div\n v-if=\"selectedDocument && selectedDocument.pages.length > 0 && !loading\"\n :class=\"['document-top-bar', editMode && 'edit-mode-top-bar']\"\n >\n <div class=\"left-bar-components\">\n <DocumentSetChooser\n v-if=\"!publicView && !recalculatingAnnotations && !editMode\"\n />\n <a\n v-if=\"\n showBranding &&\n !(selectedDocument.documentSet !== null && documentSet === null)\n \"\n class=\"app-info\"\n target=\"_blank\"\n href=\"https://konfuzio.com\"\n >\n <span>{{ $t(\"powered_by\") }}</span>\n </a>\n </div>\n\n <div\n id=\"document-info\"\n :class=\"[\n 'center-bar-components',\n recalculatingAnnotations && 'single-component',\n ]\"\n >\n <div\n :style=\"`visibility: ${previousDocument ? 'visible' : 'hidden'}`\"\n class=\"left-arrow navigation-arrow\"\n type=\"button\"\n @click=\"navigateToDocument(previousDocument)\"\n >\n <b-icon icon=\"angle-left\" size=\"is-small\" />\n </div>\n\n <DocumentName :data-file-name=\"selectedDocument.data_file_name\" />\n\n <div\n class=\"right-arrow navigation-arrow\"\n :style=\"`visibility: ${nextDocument ? 'visible' : 'hidden'}`\"\n type=\"button\"\n @click=\"navigateToDocument(nextDocument)\"\n >\n <b-icon icon=\"angle-right\" size=\"is-small\" />\n </div>\n </div>\n\n <div class=\"right-bar-components\">\n <div v-if=\"!recalculatingAnnotations\" class=\"right-components\">\n <div\n v-if=\"!editMode && (!publicView || !isDocumentReviewed)\"\n class=\"keyboard-actions-info\"\n >\n <KeyboardActionsDescription />\n </div>\n\n <div\n v-if=\"!editMode && (publicView || isDocumentReviewed)\"\n class=\"read-only-info\"\n >\n <b-tooltip\n :animated=\"false\"\n position=\"is-bottom\"\n class=\"right-aligned width-184\"\n >\n <span v-if=\"publicView\">\n {{ $t(\"lite_mode\") }}\n </span>\n <span v-else class=\"doc-reviewed\">\n {{ $t(\"reviewed_mode\") }}\n </span>\n <b-icon\n :class=\"[\n 'info-icon is-small',\n !publicView && isDocumentReviewed && 'info-reviewed',\n ]\"\n icon=\"circle-info\"\n />\n <template #content>\n <div v-if=\"publicView\" class=\"read-only-details\">\n {{ $t(\"limited_functionalities\") }}\n </div>\n <div v-else class=\"read-only-details\">\n {{ $t(\"document_reviewed\") }}\n </div>\n </template>\n </b-tooltip>\n </div>\n\n <div class=\"top-bar-buttons\">\n <DocumentTopBarButtons />\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"loading-top-bar\">\n <b-skeleton position=\"is-centered\" width=\"20%\" height=\"60%\" />\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport DocumentSetChooser from \"./DocumentSetChooser\";\nimport DocumentName from \"./DocumentName\";\nimport DocumentTopBarButtons from \"./DocumentTopBarButtons\";\nimport KeyboardActionsDescription from \"./KeyboardActionsDescription\";\n\n/**\n * This component has different functionalities\n * based on Dashboard View or Edit Mode\n */\n\nexport default {\n name: \"DocumentTopBar\",\n components: {\n DocumentSetChooser,\n DocumentName,\n DocumentTopBarButtons,\n KeyboardActionsDescription,\n },\n data() {\n return {\n previousDocument: null,\n nextDocument: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"documentSet\",\n \"publicView\",\n \"loading\",\n \"recalculatingAnnotations\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"display\", [\"showDocumentsNavigation\", \"showBranding\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReviewed\",\n \"isDocumentReadyToBeReviewed\",\n \"waitingForSplittingConfirmation\",\n ]),\n },\n watch: {\n loading(newValue) {\n if (!newValue && this.showDocumentsNavigation) {\n this.$store\n .dispatch(\"project/fetchDocumentListForNavigation\")\n .then((results) => {\n this.getPreviousAndNextDocuments(results);\n });\n }\n },\n },\n created() {\n window.addEventListener(\"resize\", this.handleResize);\n },\n unmounted() {\n window.removeEventListener(\"resize\", this.handleResize);\n },\n mounted() {\n if (this.$refs.documentTopBar) {\n this.setComponentWidth(this.$refs.documentTopBar.offsetWidth);\n }\n },\n methods: {\n setComponentWidth(width) {\n // set width for the error messages to match the width\n // and avoid going over the Dashboard\n this.$store.dispatch(\"document/setErrorMessageWidth\", width);\n },\n handleResize() {\n if (this.$refs.documentTopBar) {\n this.setComponentWidth(this.$refs.documentTopBar.offsetWidth);\n }\n },\n getPreviousAndNextDocuments(filteredDocuments) {\n if (!filteredDocuments) return;\n\n const found = filteredDocuments.find(\n (document) => document.id === this.selectedDocument.id\n );\n\n const indexOfCurrentDocument = filteredDocuments.indexOf(found);\n\n if (!(indexOfCurrentDocument < 0)) {\n this.previousDocument = filteredDocuments[indexOfCurrentDocument - 1];\n this.nextDocument = filteredDocuments[indexOfCurrentDocument + 1];\n } else {\n this.previousDocument = filteredDocuments[0];\n this.nextDocument = filteredDocuments[1];\n }\n },\n navigateToDocument(document) {\n if (!document) return;\n this.$store.dispatch(\"document/changeCurrentDocument\", document.id);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","<template>\n <b-dropdown\n v-if=\"\n documentSet &&\n documentSet.documents &&\n documentSet.documents.length > 1 &&\n categories\n \"\n v-model=\"selectedDocId\"\n class=\"document-set-dropdown dropdown-full-width\"\n aria-role=\"list\"\n scrollable\n >\n <template #trigger>\n <div class=\"dropdown-doc-set\">\n <div class=\"dropdown-left\">\n <CategoryIcon />\n </div>\n <div class=\"dropdown-text\">\n <div class=\"top-part\">\n {{ $t(\"document_section\") }}\n </div>\n <div class=\"bottom-part\">\n {{\n `${categoryName(\n selectedDocument.category\n )} ${numberOfDocumentInSet(selectedDocument)}`\n }}\n </div>\n </div>\n <div class=\"dropdown-right\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </div>\n </div>\n </template>\n\n <b-dropdown-item\n v-for=\"doc in documentSet.documents\"\n :key=\"doc.id\"\n aria-role=\"listitem\"\n class=\"list-item\"\n :value=\"doc.id\"\n @click=\"handleDocumentClick(doc)\"\n >\n <span>\n {{\n `${categoryName(doc.category)} ${numberOfDocumentInSet(doc)}`\n }}</span\n >\n </b-dropdown-item>\n </b-dropdown>\n <div\n v-else-if=\"selectedDocument.documentSet !== null && documentSet === null\"\n class=\"loading-bar\"\n >\n <b-skeleton width=\"100px\" height=\"60%\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CategoryIcon from \"../../assets/images/CategoryIconImg\";\n\nexport default {\n name: \"DocumentSetChooser\",\n components: {\n CategoryIcon,\n },\n data() {\n return {\n selectedDocId: 0,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\"numberOfDocumentInSet\"]),\n ...mapGetters(\"category\", [\"categoryName\"]),\n ...mapState(\"document\", [\"documentSet\", \"selectedDocument\"]),\n ...mapState(\"category\", [\"categories\"]),\n },\n mounted() {\n this.selectedDocId = this.selectedDocument.id;\n },\n methods: {\n handleDocumentClick(document) {\n this.$store.dispatch(\"document/changeCurrentDocument\", document.id);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_set_chooser.scss\"\n></style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n >\n <path\n fill=\"#1A1A1A\"\n d=\"M20.47,7.37s0,0,0-.08l-.06-.15a.71.71,0,0,0-.07-.09.94.94,0,0,0-.09-.12l-.09-.07L20,6.78l-7.5-4.63a1,1,0,0,0-1.06,0L4,6.78l-.09.08-.09.07a.94.94,0,0,0-.09.12.71.71,0,0,0-.07.09l-.06.15s0,0,0,.08a1.15,1.15,0,0,0,0,.26v8.74a1,1,0,0,0,.47.85l7.5,4.63h0a.47.47,0,0,0,.15.06s.05,0,.08,0a.86.86,0,0,0,.52,0s.05,0,.08,0a.47.47,0,0,0,.15-.06h0L20,17.22a1,1,0,0,0,.47-.85V7.63A1.15,1.15,0,0,0,20.47,7.37ZM11,19.21l-5.5-3.4V9.43L11,12.82Zm1-8.12L6.4,7.63,12,4.18l5.6,3.45Zm6.5,4.72L13,19.21V12.82l5.5-3.39Z\"\n />\n </svg>\n</template>\n","import { render } from \"./CategoryIconImg.vue?vue&type=template&id=2094f2f0\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentSetChooser.vue?vue&type=template&id=57a73f96&scoped=true\"\nimport script from \"./DocumentSetChooser.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentSetChooser.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_set_chooser.scss?vue&type=style&index=0&id=57a73f96&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-57a73f96\"]])\n\nexport default __exports__","<template>\n <div\n :class=\"['document-name-component', editMode && 'document-name-edit-mode']\"\n >\n <div class=\"document-icon\">\n <ServerImage\n :height=\"'22px'\"\n :image-url=\"`${selectedDocument.thumbnail_url}?${selectedDocument.downloaded_at}`\"\n >\n <b-skeleton width=\"15px\" height=\"22px\" :rounded=\"false\" />\n </ServerImage>\n </div>\n <b-tooltip\n :label=\"fullText\"\n multilined\n :active=\"isFileNameBiggerThanMaxSize && !isEditable\"\n size=\"is-large\"\n position=\"is-bottom\"\n >\n <span class=\"file-name-section\">\n <span\n :class=\"['document-name', isEditable && 'is-editable']\"\n :contenteditable=\"isEditable\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown.enter=\"handleSave\"\n @blur=\"handleSave\"\n >{{ textContent }}</span\n >\n </span>\n </b-tooltip>\n\n <div\n v-if=\"\n !publicView &&\n !isDocumentReviewed &&\n showEditBtn &&\n !editMode &&\n !recalculatingAnnotations\n \"\n class=\"edit-btn btn\"\n @click=\"handleEdit\"\n >\n {{ $t(\"rename\") }}\n </div>\n <div\n v-if=\"showSaveBtn && !editMode\"\n class=\"save-btn btn\"\n @click=\"handleSave\"\n >\n {{ $t(\"save\") }}\n </div>\n <div v-if=\"saving\" class=\"message-container\">\n <span class=\"loading-container\">\n <b-notification :closable=\"false\" class=\"loading-background\">\n <b-loading v-model=\"saving\" :is-full-page=\"isFullPage\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </b-loading>\n </b-notification>\n </span>\n <span>{{ $t(\"autosaving\") }}</span>\n </div>\n <div v-if=\"changed\" class=\"message-container\">\n <span v-if=\"saved\" class=\"cloud-icon\"><FileNameSaved /></span>\n <span v-else class=\"cloud-icon\"><FileNameNotSaved /></span>\n <span>{{ saved ? $t(\"saved\") : $t(\"not_saved\") }}</span>\n </div>\n\n <div v-if=\"detailsUrl\" class=\"details-btn btn\" @click=\"openDocumentDetails\">\n {{ $t(\"document_details\") }}\n </div>\n </div>\n</template>\n\n<script>\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport FileNameSaved from \"../../assets/images/FileNameSavedImage\";\nimport FileNameNotSaved from \"../../assets/images/FileNameNotSavedImage\";\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"DocumentName\",\n components: {\n ServerImage,\n FileNameSaved,\n FileNameNotSaved,\n },\n props: {\n dataFileName: {\n type: String,\n default: \"\",\n },\n },\n data() {\n return {\n maxFilenameChars: 26,\n isEditable: false,\n showEditBtn: true,\n showSaveBtn: false,\n fileExtension: null,\n fileName: null,\n oldFileName: null,\n saving: false,\n isFullPage: false,\n changed: false,\n saved: false,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"publicView\",\n \"recalculatingAnnotations\",\n \"documentId\",\n ]),\n ...mapState(\"display\", [\"optimalResolution\", \"detailsUrl\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n textContent() {\n if (this.isEditable) {\n return this.oldFileName;\n } else if (this.fileName) {\n return this.shortFilenameIfNeeded(\n `${this.fileName}.${this.fileExtension}`\n );\n } else {\n return this.shortFilenameIfNeeded(this.dataFileName);\n }\n },\n fullText() {\n if (this.fileName) {\n return this.fileName;\n } else {\n return this.dataFileName;\n }\n },\n isFileNameBiggerThanMaxSize() {\n if (this.fileName) {\n return this.fileName.length >= this.maxFilenameChars;\n } else {\n return this.dataFileName.length >= this.maxFilenameChars;\n }\n },\n },\n updated() {\n const contentEditable = document.querySelector(\".document-name\");\n if (this.isEditable && contentEditable) {\n contentEditable.focus();\n this.handleCaretPlacing(contentEditable);\n }\n\n if (this.changed) {\n const that = this;\n setTimeout(function () {\n that.saved = false;\n that.changed = false;\n that.showEditBtn = true;\n this.showSaveBtn = false;\n }, 4000);\n }\n },\n methods: {\n shortFilenameIfNeeded(filename) {\n if (filename && filename.length >= this.maxFilenameChars) {\n return (\n filename.substr(0, this.maxFilenameChars / 2) +\n \"...\" +\n filename.substr(\n filename.length - this.maxFilenameChars / 2,\n filename.length\n )\n );\n }\n return filename;\n },\n handleFileName() {\n // Save the file name and the extension in different variables\n this.fileName = this.dataFileName.split(\".\").slice(0, -1).join(\".\");\n\n this.fileExtension = this.dataFileName.split(\".\").at(-1);\n },\n handleEdit() {\n // Split file name and extension to only edit name\n this.handleFileName();\n\n this.isEditable = true;\n this.showEditBtn = false;\n this.showSaveBtn = true;\n this.oldFileName = this.fileName;\n },\n handleCaretPlacing(contentEditable) {\n let range, selection;\n if (document.createRange) {\n range = document.createRange(); //Create a range (a range is a like the selection but invisible)\n range.selectNodeContents(contentEditable); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n selection = window.getSelection(); //get the selection object (allows you to change selection)\n selection.removeAllRanges(); //remove any selections already made\n selection.addRange(range); //make the range you have just created the visible selection\n } else if (document.selection) {\n range = document.body.createTextRange(); //Create a range (a range is a like the selection but invisible)\n range.moveToElementText(contentEditable); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n range.select(); //Select the range (make it the visible selection\n }\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n handleInput(event) {\n const input = event.target.textContent;\n\n // Set the new file name to the new input value\n if (input === \"\") {\n // If the user deletes the name:\n this.fileName = \"untitled\";\n } else {\n this.fileName = input.trim();\n }\n },\n handleSave(event) {\n this.isEditable = false;\n\n event.target.textContent = this.fileName;\n\n const updatedFileName = {\n data_file_name: `${this.fileName}.${this.fileExtension}`,\n };\n\n this.showSaveBtn = false;\n this.saving = true;\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedFileName)\n .then((response) => {\n // Check if the response is successful or not\n if (response) {\n // if successful, set the old name to be the new name\n this.changed = true;\n this.oldFileName = this.fileName;\n this.saved = true;\n }\n })\n .catch((error) => {\n this.changed = true;\n event.target.textContent = this.oldFileName;\n this.fileName = this.oldFileName;\n })\n .finally(() => {\n this.saving = false;\n });\n\n // Remove focus from contenteditable\n const contentNotEditable = document.querySelector(\".document-name\");\n if (contentNotEditable) {\n contentNotEditable.blur();\n }\n },\n openDocumentDetails() {\n window.location.href = this.detailsUrl;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_name.scss\"></style>\n","<template>\n <div v-observe-visibility=\"visibilityChanged\" style=\"display: flex\">\n <img v-show=\"loaded\" ref=\"imgTag\" :height=\"height\" />\n <slot v-if=\"!loaded\" />\n </div>\n</template>\n\n<script>\nimport api from \"../../api\";\n\nexport default {\n name: \"ServerImage\",\n props: {\n imageUrl: {\n required: true,\n type: String,\n },\n height: {\n default: null,\n type: String,\n },\n width: {\n default: null,\n type: String,\n },\n },\n data() {\n return {\n loaded: false,\n isVisible: false,\n };\n },\n watch: {\n imageUrl() {\n if (this.isVisible) {\n this.loadImage();\n }\n },\n },\n methods: {\n loadImage() {\n if (!this.imageUrl) return;\n return api\n .makeFileRequest(this.imageUrl)\n .then((myBlob) => {\n this.$refs.imgTag.src = URL.createObjectURL(myBlob);\n if (this.height) {\n this.$refs.imgTag.style.height = this.height;\n }\n if (this.width) {\n this.$refs.imgTag.style.width = this.width;\n }\n this.loaded = true;\n })\n .catch((error) => {\n this.loaded = false;\n });\n },\n visibilityChanged(isVisible) {\n if (!this.isVisible && isVisible) {\n this.isVisible = isVisible;\n this.loadImage();\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","import Keycloak from \"keycloak-js\";\nimport API from \"../api\";\n\nlet keycloak;\n\nexport const initKeycloak = async (url, realm, clientId) => {\n keycloak = new Keycloak({\n url,\n realm,\n clientId,\n });\n\n try {\n const authenticated = await keycloak.init({\n onLoad: \"login-required\",\n enableLogging: true,\n });\n if (authenticated) {\n API.setIsKeycloakAuth(true);\n API.setAuthToken(keycloak.token);\n } else {\n console.error(\"User is not authenticated\");\n }\n } catch (error) {\n console.error(\"Failed to initialize adapter:\", error);\n }\n};\n\nexport const updateKeycloakToken = () => {\n return new Promise(async (resolve, reject) => {\n if (keycloak) {\n await keycloak.updateToken(30);\n API.setAuthToken(keycloak.token);\n resolve();\n } else {\n reject();\n }\n });\n};\n","import axios from \"axios\";\nimport { updateKeycloakToken } from \"./utils/keycloak\";\n\nlet HTTP, FILE_REQUEST, authToken, appLocale, isKeycloakAuth;\nconst DEFAULT_URL = \"https://app.konfuzio.com\";\nconst FILE_URL = process.env.VUE_APP_IMAGE_URL;\n\naxios.defaults.xsrfCookieName = \"csrftoken\";\naxios.defaults.xsrfHeaderName = \"X-CSRFToken\";\n\nHTTP = axios.create({\n baseURL: process.env.VUE_APP_API_URL || `${DEFAULT_URL}/api/v3/`,\n});\n\nFILE_REQUEST = axios.create({\n baseURL: FILE_URL || `${DEFAULT_URL}`,\n responseType: \"blob\",\n});\n\nconst setAuthToken = (token) => {\n if (token !== authToken) {\n authToken = token;\n }\n};\n\nconst setIsKeycloakAuth = (result) => {\n isKeycloakAuth = result;\n};\n\nconst setApiUrl = (url) => {\n HTTP.defaults.baseURL = url;\n};\n\nconst setFileUrl = (url) => {\n FILE_REQUEST.defaults.baseURL = url;\n};\n\nconst setLocale = (locale) => {\n appLocale = locale;\n};\n\nconst getInterceptorConfig = async (config) => {\n if (isKeycloakAuth) {\n await updateKeycloakToken();\n }\n\n if (authToken) {\n config.headers[\"Authorization\"] = `${isKeycloakAuth ? \"Bearer\" : \"Token\"\n } ${authToken}`;\n }\n config.headers[\"Accept-Language\"] = `${appLocale}-${appLocale}`;\n\n return config;\n};\n\nHTTP.interceptors.request.use(getInterceptorConfig, async (error) => {\n return Promise.reject(error);\n});\n\nFILE_REQUEST.interceptors.request.use(getInterceptorConfig, (error) => {\n return Promise.reject(error);\n});\n\nconst makeFileRequest = (fileUrl) => {\n return new Promise((resolve, reject) => {\n if (process.env.NODE_ENV === \"test\") {\n reject(\"Running unit tests!\");\n return;\n }\n FILE_REQUEST.get(fileUrl)\n .then((response) => {\n return response.data;\n })\n .then((myBlob) => {\n resolve(myBlob);\n })\n .catch((error) => {\n if (error.response.status === 428) {\n // retry request after 2 seconds\n setTimeout(() => {\n makeFileRequest(fileUrl)\n .then((response) => {\n resolve(response);\n })\n .catch((error) => {\n reject(error);\n });\n }, 2000);\n }\n reject(error);\n });\n });\n};\n\nconst makeGetPaginatedRequest = (request, hasParams = false) => {\n let returnResponse = [];\n let toFinishLoop = false;\n\n let separator = hasParams ? \"&\" : \"?\";\n let loopRequest = `${request}${separator}limit=100`;\n\n return new Promise(async (resolve, reject) => {\n do {\n try {\n let response = await HTTP.get(loopRequest);\n if (response && response.data) {\n const data = response.data;\n if (data.results) {\n returnResponse = [...returnResponse, ...data.results];\n }\n if (data.next) {\n loopRequest = data.next;\n } else {\n toFinishLoop = true;\n }\n } else {\n reject(\"Error getting paginated results.\");\n }\n } catch (error) {\n reject(error);\n toFinishLoop = true;\n console.log(error);\n }\n } while (!toFinishLoop);\n resolve(returnResponse);\n });\n};\n\nexport default {\n HTTP,\n setApiUrl,\n setFileUrl,\n makeFileRequest,\n makeGetPaginatedRequest,\n setAuthToken,\n setIsKeycloakAuth,\n setLocale,\n FILE_REQUEST,\n DEFAULT_URL,\n FILE_URL,\n};\n","import { render } from \"./ServerImage.vue?vue&type=template&id=be92e2fe&scoped=true\"\nimport script from \"./ServerImage.vue?vue&type=script&lang=js\"\nexport * from \"./ServerImage.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=be92e2fe&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-be92e2fe\"]])\n\nexport default __exports__","<template>\n <svg\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.2844 12.3934H4.71415C2.48261 12.3934 0.666992 10.5708 0.666992 8.34388C0.666992 6.31069 2.17392 4.61975 4.12801 4.33512C4.49407 1.97428 6.54159 0.166016 9.0002 0.166016C11.4588 0.166016 13.5063 1.97428 13.8749 4.33512C15.8267 4.61976 17.3337 6.3109 17.3337 8.34388C17.3337 10.5708 15.5182 12.3934 13.2842 12.3934H13.2844ZM4.71415 5.90411C3.36987 5.90411 2.27921 6.99729 2.27921 8.34388C2.27921 9.68564 3.36987 10.7788 4.71415 10.7788H13.2844C14.6286 10.7788 15.7216 9.68564 15.7216 8.34388C15.7216 6.99729 14.6284 5.90411 13.2844 5.90411H13.1265C12.6817 5.90411 12.3205 5.54539 12.3205 5.09557C12.3205 3.26812 10.8304 1.77802 9.00061 1.77802C7.16847 1.77802 5.68072 3.26812 5.68072 5.09557C5.68072 5.5452 5.3195 5.90411 4.87217 5.90411H4.71415Z\"\n fill=\"#858C9A\"\n />\n </svg>\n</template>\n","import { render } from \"./FileNameSavedImage.vue?vue&type=template&id=36f6ec4e\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.4269 13.1159H4.57073C2.7855 13.1159 1.33301 11.6578 1.33301 9.87627C1.33301 8.24972 2.53855 6.89697 4.10182 6.66927C4.39467 4.7806 6.03269 3.33398 7.99957 3.33398C9.96646 3.33398 11.6045 4.7806 11.8994 6.66927C13.4608 6.89698 14.6663 8.24989 14.6663 9.87627C14.6663 11.6578 13.214 13.1159 11.4267 13.1159H11.4269ZM4.57073 7.92446C3.49531 7.92446 2.62278 8.799 2.62278 9.87627C2.62278 10.9497 3.49531 11.8242 4.57073 11.8242H11.4269C12.5023 11.8242 13.3767 10.9497 13.3767 9.87627C13.3767 8.799 12.5022 7.92446 11.4269 7.92446H11.3006C10.9448 7.92446 10.6558 7.63749 10.6558 7.27762C10.6558 5.81567 9.46374 4.62359 7.9999 4.62359C6.53419 4.62359 5.34399 5.81567 5.34399 7.27762C5.34399 7.63733 5.05501 7.92446 4.69715 7.92446H4.57073Z\"\n fill=\"#858C9A\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.47098 2.86203C2.73133 2.60168 3.15344 2.60168 3.41379 2.86203L14.471 13.9192C14.7313 14.1796 14.7313 14.6017 14.471 14.862C14.2106 15.1224 13.7885 15.1224 13.5282 14.862L2.47098 3.80484C2.21063 3.54449 2.21063 3.12238 2.47098 2.86203Z\"\n fill=\"#858C9A\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M1.99957 2.39007C2.52027 1.86938 3.36449 1.86938 3.88519 2.39007L14.9424 13.4473C15.4631 13.968 15.4631 14.8122 14.9424 15.3329C14.4217 15.8536 13.5775 15.8536 13.0568 15.3329L1.99957 4.27569C1.47887 3.75499 1.47887 2.91077 1.99957 2.39007ZM3.41379 2.86148C3.15344 2.60113 2.73133 2.60113 2.47098 2.86148C2.21063 3.12183 2.21063 3.54394 2.47098 3.80429L13.5282 14.8615C13.7885 15.1218 14.2106 15.1218 14.471 14.8615C14.7313 14.6011 14.7313 14.179 14.471 13.9187L3.41379 2.86148Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./FileNameNotSavedImage.vue?vue&type=template&id=53d233a4\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentName.vue?vue&type=template&id=605ff746&scoped=true\"\nimport script from \"./DocumentName.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentName.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_name.scss?vue&type=style&index=0&id=605ff746&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-605ff746\"]])\n\nexport default __exports__","<template>\n <div class=\"buttons\">\n <div v-if=\"editMode\" class=\"edit-mode-buttons\">\n <b-button\n :label=\"$t('back_to_annotations')\"\n class=\"button-cancel primary-button edit-mode-btn\"\n type=\"is-default\"\n :disabled=\"\n !documentHasCategory ||\n waitingForSplittingConfirmation(selectedDocument)\n \"\n @click=\"closeEditMode\"\n />\n\n <b-tooltip\n :active=\"!enableSubmit\"\n position=\"is-bottom\"\n :label=\"$t('select_category')\"\n class=\"right-aligned no-right-margin\"\n >\n <b-button\n :label=\"editMode && !renameAndCategorize ? $t('next') : $t('submit')\"\n type=\"is-primary\"\n :class=\"[\n 'button-next primary-button edit-mode-btn',\n renameAndCategorize && 'submit-btn',\n ]\"\n :disabled=\"renameAndCategorize && !enableSubmit\"\n @click=\"handleButton\"\n />\n </b-tooltip>\n </div>\n\n <div\n v-if=\"!editMode && !isDocumentReviewed && !publicView\"\n id=\"review-btn\"\n class=\"finish-review-button-container\"\n >\n <b-tooltip\n :active=\"!isReviewButtonActive\"\n position=\"is-bottom\"\n multilined\n class=\"right-aligned no-right-margin\"\n >\n <b-button\n :class=\"['finish-review-btn', 'text-btn', 'primary-button']\"\n type=\"is-primary\"\n :disabled=\"!isReviewButtonActive\"\n @click.stop=\"handleFinishReview\"\n >\n <span v-if=\"!isLoading\">\n {{ $t(\"finish_review\") }}\n </span>\n\n <div v-else>\n <b-notification :closable=\"false\" :class=\"['loading-background']\">\n <b-loading :active=\"isLoading\" :is-full-page=\"false\">\n <b-icon\n icon=\"spinner\"\n class=\"fa-spin loading-icon-size spinner\"\n />\n </b-loading>\n </b-notification>\n </div>\n </b-button>\n\n <template #content> {{ $t(\"disabled_finish_review\") }} </template>\n </b-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"DocumentTopBarButtons\",\n data() {\n return {\n emptyLabels: null,\n isLoading: false,\n enableSubmit: false,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"publicView\",\n \"annotationSets\",\n \"thumbnailIsLoaded\",\n ]),\n ...mapState(\"edit\", [\"editMode\", \"renameAndCategorize\", \"updatedDocument\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReadyToFinishReview\",\n \"isDocumentReviewed\",\n \"waitingForSplittingConfirmation\",\n ]),\n ...mapGetters(\"edit\", [\"documentShouldBePostprocessed\"]),\n isReviewButtonActive() {\n return this.isDocumentReadyToFinishReview;\n },\n documentHasCategory() {\n return this.selectedDocument.category;\n },\n },\n\n watch: {\n updatedDocument(newValue) {\n if (!newValue) return;\n\n this.submitValidation(newValue);\n },\n },\n\n mounted() {\n if (this.updatedDocument) {\n this.submitValidation(this.updatedDocument);\n }\n },\n\n methods: {\n submitValidation(document) {\n const found = document.find((item) => !item.category);\n\n if (!found) {\n this.enableSubmit = true;\n } else {\n this.enableSubmit = false;\n }\n },\n closeEditMode() {\n this.$store.dispatch(\"edit/disableEditMode\");\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n this.$store.dispatch(\"edit/setUpdatedDocument\", null);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n this.$nextTick(() => {\n // reset to first page\n this.$store.dispatch(\"display/updateCurrentPage\", 1);\n });\n },\n handleButton() {\n // Check if we are not in the Rename and Categorize view\n // and if we have a split document\n if (!this.renameAndCategorize) {\n // Enable the \"next\" button\n this.$store.dispatch(\"edit/setRenameAndCategorize\", true);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n } else if (\n this.selectedDocument.category_is_revised &&\n this.documentShouldBePostprocessed\n ) {\n // Show confirmation modal to user if the document was split, reordered or rotated\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", true);\n } else {\n this.$store.dispatch(\"edit/setSubmitEditChanges\", true);\n }\n },\n handleFinishReview() {\n // update document\n const updatedDocumentReviewStatus = {\n is_reviewed: true,\n };\n\n this.isLoading = true;\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedDocumentReviewStatus)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"review_error\"),\n });\n })\n .finally(() => {\n this.isLoading = false;\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","import { render } from \"./DocumentTopBarButtons.vue?vue&type=template&id=3767df42&scoped=true\"\nimport script from \"./DocumentTopBarButtons.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentTopBarButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=3767df42&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3767df42\"]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!publicView && !isDocumentReviewed && !editMode\"\n class=\"keyboard-actions-description\"\n >\n <section class=\"b-tooltips\">\n <b-tooltip position=\"is-left\" size=\"is-large\" class=\"left-down-aligned\">\n <KeyboardIcon />\n\n <template #content>\n <div class=\"tooltip-title\">\n {{ $t(\"use_your_keyboard\") }}\n </div>\n\n <div class=\"tooltip-description\">\n <div class=\"content-line\">\n <div class=\"action-item\">\n <div class=\"key\"><ArrowUpKey /></div>\n <div class=\"key\"><ArrowDownKey /></div>\n <div class=\"keyboard-action-text\">{{ $t(\"arrow_keys\") }}</div>\n </div>\n\n <div class=\"tooltip-divider\"></div>\n\n <div class=\"action-item\">\n <div class=\"key\">{{ \"ESC\" }}</div>\n <div class=\"keyboard-action-text\">{{ $t(\"esc_key\") }}</div>\n </div>\n </div>\n\n <div class=\"content-line\">\n <div class=\"action-item\">\n <div class=\"key\">{{ \"ENTER\" }}</div>\n <div class=\"keyboard-action-text\">{{ $t(\"enter_key\") }}</div>\n </div>\n\n <div class=\"tooltip-divider\"></div>\n\n <div class=\"action-item\">\n <div class=\"key\">{{ \"DELETE\" }}</div>\n <div class=\"keyboard-action-text\">\n {{ $t(\"missing_annotation\") }}\n </div>\n </div>\n </div>\n </div>\n </template>\n </b-tooltip>\n </section>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport KeyboardIcon from \"../../assets/images/KeyboardIcon\";\nimport ArrowUpKey from \"../../assets/images/ArrowUpKey\";\nimport ArrowDownKey from \"../../assets/images/ArrowDownKey\";\n\nexport default {\n name: \"KeyboardActionsDescription\",\n components: {\n KeyboardIcon,\n ArrowUpKey,\n ArrowDownKey,\n },\n computed: {\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"document\", [\"selectedDocument\", \"publicView\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","<template>\n <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.30187 0.167969H15.6994C16.1387 0.167955 16.5177 0.167942 16.8298 0.193445C17.1593 0.220362 17.487 0.279792 17.8023 0.440454C18.2727 0.680138 18.6552 1.06259 18.8948 1.53299C19.0555 1.84831 19.1149 2.17599 19.1418 2.50545C19.1673 2.81759 19.1673 3.19655 19.1673 3.63583V8.36678C19.1673 8.80606 19.1673 9.18502 19.1418 9.49716C19.1149 9.82661 19.0555 10.1543 18.8948 10.4696C18.6552 10.94 18.2727 11.3225 17.8023 11.5622C17.487 11.7228 17.1593 11.7822 16.8298 11.8092C16.5177 11.8347 16.1387 11.8347 15.6994 11.8346H4.30188C3.86259 11.8347 3.48361 11.8347 3.17146 11.8092C2.84201 11.7822 2.51433 11.7228 2.19901 11.5622C1.7286 11.3225 1.34615 10.94 1.10647 10.4696C0.945808 10.1543 0.886378 9.82661 0.85946 9.49716C0.833957 9.18502 0.83397 8.80605 0.833985 8.36676V3.63585C0.83397 3.19656 0.833957 2.81759 0.85946 2.50545C0.886378 2.17599 0.945808 1.84831 1.10647 1.53299C1.34615 1.06259 1.7286 0.680137 2.19901 0.440454C2.51433 0.279792 2.84201 0.220362 3.17146 0.193445C3.48361 0.167942 3.86258 0.167955 4.30187 0.167969ZM3.30718 1.85458C3.0808 1.87307 2.99686 1.90447 2.95566 1.92546C2.79886 2.00536 2.67138 2.13284 2.59148 2.28964C2.57049 2.33085 2.53909 2.41478 2.52059 2.64117C2.5013 2.87728 2.50065 3.18751 2.50065 3.66797V8.33464C2.50065 8.8151 2.5013 9.12533 2.52059 9.36144C2.53909 9.58783 2.57049 9.67176 2.59148 9.71296C2.67138 9.86976 2.79886 9.99725 2.95566 10.0771C2.99686 10.0981 3.0808 10.1295 3.30718 10.148C3.5433 10.1673 3.85352 10.168 4.33399 10.168H15.6673C16.1478 10.168 16.458 10.1673 16.6941 10.148C16.9205 10.1295 17.0044 10.0981 17.0456 10.0771C17.2024 9.99725 17.3299 9.86977 17.4098 9.71296C17.4308 9.67176 17.4622 9.58783 17.4807 9.36144C17.5 9.12533 17.5007 8.8151 17.5007 8.33464V3.66797C17.5007 3.18751 17.5 2.87728 17.4807 2.64117C17.4622 2.41478 17.4308 2.33085 17.4098 2.28964C17.3299 2.13284 17.2024 2.00536 17.0456 1.92546C17.0044 1.90447 16.9205 1.87307 16.6941 1.85458C16.458 1.83528 16.1478 1.83464 15.6673 1.83464H4.33399C3.85352 1.83464 3.5433 1.83528 3.30718 1.85458ZM4.16732 4.33464C4.16732 3.8744 4.54042 3.5013 5.00065 3.5013H5.00899C5.46922 3.5013 5.84232 3.8744 5.84232 4.33464C5.84232 4.79487 5.46922 5.16797 5.00899 5.16797H5.00065C4.54042 5.16797 4.16732 4.79487 4.16732 4.33464ZM7.50065 4.33464C7.50065 3.8744 7.87375 3.5013 8.33399 3.5013H8.34232C8.80256 3.5013 9.17565 3.8744 9.17565 4.33464C9.17565 4.79487 8.80256 5.16797 8.34232 5.16797H8.33399C7.87375 5.16797 7.50065 4.79487 7.50065 4.33464ZM10.834 4.33464C10.834 3.8744 11.2071 3.5013 11.6673 3.5013H11.6757C12.1359 3.5013 12.509 3.8744 12.509 4.33464C12.509 4.79487 12.1359 5.16797 11.6757 5.16797H11.6673C11.2071 5.16797 10.834 4.79487 10.834 4.33464ZM14.1673 4.33464C14.1673 3.8744 14.5404 3.5013 15.0007 3.5013H15.009C15.4692 3.5013 15.8423 3.8744 15.8423 4.33464C15.8423 4.79487 15.4692 5.16797 15.009 5.16797H15.0007C14.5404 5.16797 14.1673 4.79487 14.1673 4.33464ZM5.00065 8.08464C5.00065 7.6244 5.37375 7.2513 5.83399 7.2513H14.1673C14.6276 7.2513 15.0007 7.6244 15.0007 8.08464C15.0007 8.54487 14.6276 8.91797 14.1673 8.91797H5.83399C5.37375 8.91797 5.00065 8.54487 5.00065 8.08464Z\"\n fill=\"#1A1A1A\"\n />\n </svg>\n</template>\n","import { render } from \"./KeyboardIcon.vue?vue&type=template&id=31030eca\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"8\"\n height=\"6\"\n viewBox=\"0 0 8 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4 5.5L0 0.5L8 0.5L4 5.5Z\" fill=\"white\" />\n </svg>\n</template>\n","import { render } from \"./ArrowUpKey.vue?vue&type=template&id=44fb817a\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"8\"\n height=\"6\"\n viewBox=\"0 0 8 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4 0.5L0 5.5L8 5.5L4 0.5Z\" fill=\"white\" />\n </svg>\n</template>\n","import { render } from \"./ArrowDownKey.vue?vue&type=template&id=0662d913\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./KeyboardActionsDescription.vue?vue&type=template&id=bcf0f440&scoped=true\"\nimport script from \"./KeyboardActionsDescription.vue?vue&type=script&lang=js\"\nexport * from \"./KeyboardActionsDescription.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=bcf0f440&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bcf0f440\"]])\n\nexport default __exports__","import { render } from \"./DocumentTopBar.vue?vue&type=template&id=bd7cf984&scoped=true\"\nimport script from \"./DocumentTopBar.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentTopBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=bd7cf984&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bd7cf984\"]])\n\nexport default __exports__","<template>\n <div\n ref=\"pdfContainer\"\n :class=\"[\n 'pdf-page-container',\n (categorizeModalIsActive ||\n editMode ||\n publicView ||\n isDocumentReviewed) &&\n 'default-cursor',\n page.number === currentPage && 'current-page',\n ]\"\n >\n <AnnotationPopup\n v-if=\"!isSelecting && spanSelectionsForPage(page).length > 0\"\n :spans=\"spanSelectionsForPage(page)\"\n :container-width=\"scaledViewport.width\"\n :container-height=\"scaledViewport.height\"\n :page=\"page\"\n @close=\"closePopups\"\n />\n\n <div\n v-if=\"showAnnotationLabel\"\n class=\"annotation-label\"\n :style=\"getAnnotationLabelPosition(showAnnotationLabel)\"\n >\n {{ showAnnotationLabel.labelName }}\n </div>\n\n <AnnSetTableOptions v-if=\"showAnnSetTable\" :page=\"page\" />\n\n <v-stage\n v-if=\"image && scale\"\n ref=\"stage\"\n :config=\"scaledViewport\"\n :style=\"canvasStyle\"\n @mousedown=\"onMouseDown\"\n @mouseup=\"onMouseUp\"\n @mousemove=\"onMouseMove\"\n >\n <v-layer>\n <v-image\n :config=\"{\n image,\n width: scaledViewport.width,\n height: scaledViewport.height,\n listening: false,\n }\"\n />\n <template v-if=\"pageInVisibleRange && !editMode\">\n <template v-if=\"searchResults.length > 0\">\n <v-rect\n v-for=\"(bbox, index) in searchResults\"\n :key=\"'sr' + index\"\n :config=\"{\n ...selectionTextRect(bbox, bbox === currentSearchResultForPage),\n }\"\n ></v-rect>\n </template>\n <v-group\n v-if=\"\n !categorizeModalIsActive || !publicView || !isDocumentReviewed\n \"\n ref=\"entities\"\n >\n <v-rect\n v-for=\"(entity, index) in scaledEntities(page.entities, page)\"\n :key=\"index\"\n :config=\"entityRect(entity)\"\n @click=\"handleClickedEntity(entity)\"\n @mouseenter=\"onElementEnter\"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n <template v-for=\"annotation in pageAnnotations\">\n <template\n v-for=\"(bbox, index) in annotation.span.filter(\n (bbox) => bbox.page_index + 1 == page.number\n )\"\n >\n <v-group>\n <v-rect\n v-if=\"!isAnnotationInEditMode(annotation.id)\"\n :config=\"annotationRect(bbox, annotation.id)\"\n @click=\"handleFocusedAnnotation(annotation)\"\n @mouseenter=\"onElementEnter(annotation, bbox)\"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n </template>\n <template\n v-if=\"annotation.metadata && annotation.metadata.checkbox\"\n >\n <v-group>\n <v-rect\n v-if=\"!isAnnotationInEditMode(annotation.id)\"\n :config=\"\n annotationRect(\n annotation.metadata.checkbox.bbox,\n annotation.id\n )\n \"\n @click=\"handleFocusedAnnotation(annotation)\"\n @mouseenter=\"\n onElementEnter(\n annotation,\n annotation.metadata.checkbox.bbox\n )\n \"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n </template>\n </template>\n </template>\n </v-layer>\n <v-layer>\n <template\n v-for=\"(span, index) in spanSelectionsForPage(page)\"\n :key=\"index\"\n >\n <span-selection :id=\"index\" :span=\"span\" :page=\"page\" />\n </template>\n <template\n v-for=\"(span, index) in placeholderSelectionForPage(page)\"\n :key=\"`${index}_placeholder`\"\n >\n <placeholder-selection :span=\"span\" :page=\"page\" />\n </template>\n <template v-if=\"page.number === selectionPage\">\n <box-selection :page=\"page\" />\n </template>\n </v-layer>\n </v-stage>\n <b-skeleton\n v-else\n position=\"is-centered\"\n :width=\"scaledViewport.width\"\n :height=\"scaledViewport.height\"\n />\n </div>\n</template>\n<script>\nimport { mapState, mapGetters, mapActions } from \"vuex\";\nimport { PIXEL_RATIO } from \"../../constants\";\nimport api from \"../../api\";\nimport BoxSelection from \"./BoxSelection\";\nimport SpanSelection from \"./SpanSelection\";\nimport PlaceholderSelection from \"./PlaceholderSelection\";\nimport AnnotationPopup from \"./AnnotationPopup\";\nimport AnnSetTableOptions from \"./AnnSetTableOptions\";\n\nexport default {\n name: \"DocumentPage\",\n components: {\n BoxSelection,\n SpanSelection,\n PlaceholderSelection,\n AnnotationPopup,\n AnnSetTableOptions,\n },\n\n props: {\n page: {\n type: Object,\n required: true,\n },\n imageBlob: {\n type: Blob,\n required: false,\n default: null,\n },\n },\n\n data() {\n return {\n image: null,\n };\n },\n\n computed: {\n ...mapState(\"selection\", [\n \"selectedEntities\",\n \"spanSelection\",\n \"isSelecting\",\n ]),\n ...mapState(\"display\", [\n \"scale\",\n \"categorizeModalIsActive\",\n \"searchEnabled\",\n \"currentPage\",\n \"showAnnSetTable\",\n ]),\n ...mapState(\"document\", [\n \"documentAnnotationSelected\",\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"publicView\",\n \"annotationId\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"display\", [\n \"visiblePageRange\",\n \"bboxToRect\",\n \"scaledEntities\",\n ]),\n ...mapGetters(\"selection\", [\n \"isSelectionValid\",\n \"spanSelectionsForPage\",\n \"placeholderSelectionForPage\",\n ]),\n ...mapGetters(\"document\", [\n \"getAnnotationsFiltered\",\n \"isAnnotationInEditMode\",\n \"isDocumentReadyToBeReviewed\",\n \"isDocumentReviewed\",\n \"labelOfAnnotation\",\n ]),\n selectionPage() {\n return this.selection && this.selection.pageNumber;\n },\n showFocusedAnnotation() {\n return (\n this.documentAnnotationSelected &&\n this.documentAnnotationSelected.page === this.page.number &&\n this.visiblePageRange.includes(this.documentAnnotationSelected.page) &&\n !this.isAnnotationInEditMode(this.documentAnnotationSelected.id)\n );\n },\n actualSizeViewport() {\n return {\n width: this.page.size[0] * this.scale,\n height: this.page.size[1] * this.scale,\n };\n },\n scaledViewport() {\n const { width: actualSizeWidth, height: actualSizeHeight } =\n this.actualSizeViewport;\n const [pixelWidth, pixelHeight] = [actualSizeWidth, actualSizeHeight].map(\n (dim) => dim / PIXEL_RATIO\n );\n return { width: pixelWidth, height: pixelHeight };\n },\n\n canvasStyle() {\n const { width, height } = this.scaledViewport;\n return `width: ${width}px; height: ${height}px;`;\n },\n\n pageInVisibleRange() {\n return this.visiblePageRange.includes(this.page.number);\n },\n\n /**\n * A filtered version of `annotations` for the chosen page.\n * Include annotations that have *at least* one bbox in the page.\n * If the annotation's bboxes span multiple pages, each DocumentPage receives\n * it and only shows the ones that match the pageNumber.\n */\n pageAnnotations() {\n const annotations = [];\n if (this.getAnnotationsFiltered.annotations) {\n this.getAnnotationsFiltered.annotations.map((annotation) => {\n if (\n annotation.span.find(\n (span) => span.page_index + 1 === this.page.number\n )\n ) {\n annotations.push(annotation);\n }\n });\n }\n return annotations;\n },\n\n selection() {\n return this.$store.getters[\"selection/getSelectionForPage\"](\n this.page.number\n );\n },\n\n searchResults() {\n const results = this.$store.getters[\"display/searchResultsForPage\"](\n this.page.number\n );\n return results;\n },\n\n currentSearchResultForPage() {\n return this.$store.getters[\"display/currentSearchResultForPage\"](\n this.page.number\n );\n },\n showAnnotationLabel() {\n if (\n this.showFocusedAnnotation &&\n !this.isSelecting &&\n this.documentAnnotationSelected &&\n this.documentAnnotationSelected.labelName !== \"\"\n ) {\n return this.documentAnnotationSelected;\n } else {\n return null;\n }\n },\n },\n watch: {\n recalculatingAnnotations(newState) {\n if (!newState) {\n this.drawPage(true);\n }\n },\n scale() {\n this.closePopups();\n },\n\n page(newValue, oldValue) {\n if (newValue.image_url !== oldValue.image_url) {\n this.drawPage(true);\n }\n },\n searchEnabled(isEnabled) {\n if (isEnabled) {\n this.closePopups();\n }\n },\n },\n mounted() {\n if (\n this.selectedDocument &&\n this.selectedDocument.labeling_available === 1\n ) {\n this.drawPage();\n }\n },\n methods: {\n ...mapActions(\"selection\", [\n \"startSelection\",\n \"endSelection\",\n \"moveSelection\",\n ]),\n isAnnotationFocused(annotationId) {\n return (\n this.documentAnnotationSelected &&\n annotationId === this.documentAnnotationSelected.id\n );\n },\n\n onMouseDown(event) {\n if (\n this.categorizeModalIsActive ||\n this.editMode ||\n this.publicView ||\n this.isDocumentReviewed\n )\n return;\n\n if (\n event.target.getParent() &&\n event.target.getParent().className === \"Transformer\" &&\n !event.target.name().includes(\"anchor\")\n ) {\n // if we are editing a box then close popups\n this.closePopups();\n\n return;\n }\n\n // check if element and delegate to it\n if (\n event.target.name() === \"entity\" ||\n event.target.name() === \"annotation\" ||\n event.target.name() === \"multiAnnBoxSelection\" ||\n event.target.name() === \"multiAnnBoxTransformer\" ||\n event.target.name() === \"multiAnnButton\" ||\n event.target.name() === \"boxSelection\" ||\n event.target.name() === \"boxTransformer\" ||\n event.target.name().includes(\"spanSelection\") ||\n event.target.name().includes(\"spanTransformer\") ||\n event.target.name().includes(\"anchor\")\n ) {\n return;\n }\n\n // anything else, we start selecting\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.startSelection({\n pageNumber: this.page.number,\n start: {\n x: position.x,\n y: position.y,\n },\n });\n },\n onMouseMove() {\n // if we are not editing, do nothing\n if (!this.isSelecting) {\n return;\n }\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.moveSelection({\n end: {\n x: position.x,\n y: position.y,\n },\n });\n },\n\n onMouseUp() {\n // if we are not editing, do nothing\n if (!this.isSelecting) {\n return;\n }\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.endSelection({\n x: position.x,\n y: position.y,\n });\n },\n\n handleFocusedAnnotation(annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", annotation.id);\n this.closePopups();\n },\n\n handleClickedEntity(entity) {\n this.$store.dispatch(\"selection/entityClick\", entity);\n },\n\n onElementEnter(annotation = null, span = null) {\n if (\n !this.categorizeModalIsActive &&\n !this.publicView &&\n !this.editMode &&\n !this.isDocumentReviewed\n ) {\n this.$refs.stage.$el.style.cursor = \"pointer\";\n }\n\n if (annotation) {\n const label = this.labelOfAnnotation(annotation);\n if (label) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation,\n label,\n span,\n scrollTo: false,\n });\n }\n }\n },\n\n onElementLeave() {\n this.$refs.stage.$el.style.cursor = \"inherit\";\n this.$store.dispatch(\"document/disableDocumentAnnotationSelected\");\n },\n\n /**\n * Konva draws pages like this.\n */\n drawPage(force = false) {\n if (this.image && !force) {\n return;\n }\n if (process.env.NODE_ENV === \"test\") {\n return;\n }\n\n const convertBlob = (blob) => {\n const image = new Image();\n image.src = URL.createObjectURL(blob);\n image.onload = () => {\n // set image only when it is loaded\n this.image = image;\n };\n };\n\n if (!this.imageBlob) {\n api\n .makeFileRequest(\n `${this.page.image_url}?${this.selectedDocument.downloaded_at}`\n )\n .then((myBlob) => {\n convertBlob(myBlob);\n })\n .catch((error) => {});\n } else {\n convertBlob(this.imageBlob);\n }\n },\n\n selectionTextRect(bbox, isFocused) {\n return {\n fill: isFocused ? \"orange\" : \"greenyellow\",\n stroke: isFocused ? \"orange\" : \"\",\n globalCompositeOperation: \"multiply\",\n ...this.bboxToRect(this.page, bbox),\n };\n },\n\n /**\n * Builds the konva config object for the entity.\n */\n entityRect(entity) {\n return {\n stroke: \"#ccc\",\n strokeWidth: 1,\n dash: [5, 2],\n fill: \"transparent\",\n globalCompositeOperation: \"multiply\",\n transformsEnabled: \"position\",\n hitStrokeWidth: 0,\n shadowForStrokeEnabled: false,\n perfectDrawEnabled: false,\n name: \"entity\",\n ...entity.scaled,\n };\n },\n\n /**\n * Builds the konva config object for the annotation.\n */\n annotationRect(bbox, annotationId, draggable) {\n const selected = this.annotationId == annotationId && !this.searchEnabled;\n const focused = this.isAnnotationFocused(annotationId);\n let fillColor = \"yellow\";\n let strokeWidth = 0;\n let strokeColor = \"\";\n\n // if annotation is selected\n if (selected) {\n fillColor = \"orange\";\n strokeWidth = 1;\n strokeColor = \"black\";\n } // if hovered\n else if (focused) {\n fillColor = \"#67E9B7\";\n strokeWidth = 1;\n strokeColor = \"black\";\n }\n return {\n fill: fillColor,\n globalCompositeOperation: \"multiply\",\n strokeWidth: strokeWidth,\n stroke: strokeColor,\n name: \"annotation\",\n draggable,\n ...this.bboxToRect(this.page, bbox),\n };\n },\n getAnnotationLabelPosition(annotation) {\n if (annotation && this.$refs.stage) {\n const maxCharacters = 10;\n const minimumSpaceTopY = 50;\n const rect = this.bboxToRect(this.page, annotation.span);\n\n if (\n annotation.labelName.length > maxCharacters &&\n rect.y < minimumSpaceTopY\n ) {\n return `left: ${rect.x}px; top: ${rect.y + rect.height}px`;\n } else {\n return `left: ${rect.x}px; bottom: ${\n this.$refs.stage.$el.clientHeight - rect.y\n }px`;\n }\n } else {\n return \"\";\n }\n },\n closePopups() {\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: [],\n selection: null,\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_page.scss\"></style>\n","export const PIXEL_RATIO = window.devicePixelRatio || 1;\nexport const VIEWPORT_RATIO = 0.98;\nexport const MINIMUM_APP_WIDTH = 600;\nexport const MINIMUM_OPTIMIZED_APP_WIDTH = 950;\nexport const TEXT_BREAKPOINT_WIDTH = 1800;\n","<template>\n <v-group>\n <v-rect\n v-if=\"isSelectionValid\"\n ref=\"boxSelection\"\n :config=\"config\"\n :stroke-scale-enabled=\"false\"\n @dragend=\"onChange\"\n @transformend=\"onChange\"\n />\n <v-transformer\n v-if=\"editable\"\n ref=\"boxTransformer\"\n :config=\"transformerConfig\"\n />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters, mapState, mapActions } from \"vuex\";\n\nexport default {\n props: {\n page: {\n required: true,\n type: Object,\n },\n editable: {\n required: false,\n type: Boolean,\n default: true,\n },\n },\n computed: {\n /**\n * Konva options of the selection rectangle, based on the\n * `selection` object.\n */\n config() {\n return {\n x: this.selection.start.x,\n y: this.selection.start.y,\n width: this.selection.end.x - this.selection.start.x,\n height: this.selection.end.y - this.selection.start.y,\n fill: this.isSelecting ? \"#7B61FFB3\" : \"transparent\",\n stroke: this.isSelecting ? \"transparent\" : \"#7B61FFB3\",\n strokeWidth: 1,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n name: \"boxSelection\",\n draggable: true,\n };\n },\n\n transformerConfig() {\n return {\n borderEnabled: false,\n rotateEnabled: false,\n ignoreStroke: true,\n keepRatio: false,\n anchorStroke: \"#7B61FF\",\n anchorSize: 6,\n };\n },\n ...mapState(\"selection\", [\n \"selection\",\n \"isSelecting\",\n \"elementSelected\",\n \"spanSelection\",\n ]),\n ...mapState(\"document\", [\"editAnnotation\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"scaledEntities\"]),\n ...mapGetters(\"selection\", [\"isSelectionValid\", \"entitiesOnSelection\"]),\n },\n watch: {\n isSelecting(isSelecting) {\n if (!isSelecting) {\n this.updateTransformer();\n this.handleSelection();\n }\n },\n },\n mounted() {\n if (!this.selection.custom) {\n // if annotation was selected, then add transformer\n this.updateTransformer();\n }\n },\n methods: {\n handleSelection() {\n const box = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: this.scaledEntities(\n this.entitiesOnSelection(box, this.page),\n this.page\n ),\n selection: box,\n });\n },\n updateTransformer() {\n // here we need to manually attach or detach Transformer node\n const transformer = this.$refs.boxTransformer;\n\n // maybe we're out of sync and the transformer is not available, just return\n if (!transformer) {\n return;\n }\n\n const transformerNode = transformer.getNode();\n const stage = transformerNode.getStage();\n let selectedNode;\n if (stage) {\n selectedNode = stage.findOne(\".boxSelection\");\n }\n\n // do nothing if selected node is already attached\n if (selectedNode === transformerNode.node()) {\n return;\n }\n\n if (selectedNode) {\n // attach to another node\n transformerNode.nodes([selectedNode]);\n } else {\n // remove transformer\n transformerNode.nodes([]);\n }\n\n transformerNode.getLayer().batchDraw();\n },\n\n /**\n * This method is used for both transforms and drags since it just\n * retrieves the rect's new attributes from the event and uses those\n * to set the new selection state.\n */\n onChange(event) {\n const { x, y, scaleX, scaleY, skewX, width, height } = event.target.attrs;\n const realWidth = width * scaleX;\n const realHeight = height * scaleY;\n let start;\n let end;\n\n // we need to figure out if there's skewing going on, to fix start/end points\n // (other cases appear to fix themselves automatically)\n if (skewX >= 0) {\n start = { x, y };\n end = {\n x: start.x + realWidth,\n y: start.y + realHeight,\n };\n } else {\n end = { x, y };\n start = { x: end.x - realWidth, y: end.y - realHeight };\n }\n\n this.moveSelection({ start, end });\n\n // reset node's everything after transform (we don't want to deal with that,\n // just with regular x/y/width/height)\n const node = this.$refs.boxSelection.getNode();\n node.skewX(0);\n node.skewY(0);\n node.rotation(0);\n node.scaleX(1);\n node.scaleY(1);\n\n this.handleSelection();\n },\n ...mapActions(\"selection\", [\"moveSelection\"]),\n },\n};\n</script>\n","import { render } from \"./BoxSelection.vue?vue&type=template&id=a0b37b56\"\nimport script from \"./BoxSelection.vue?vue&type=script&lang=js\"\nexport * from \"./BoxSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <v-group>\n <v-rect\n ref=\"spanSelection\"\n :config=\"config\"\n :stroke-scale-enabled=\"false\"\n @dragend=\"onChange\"\n @transformend=\"onChange\"\n />\n <v-transformer\n v-if=\"!isSelectionValid\"\n ref=\"spanTransformer\"\n :config=\"transformerConfig\"\n />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n props: {\n id: {\n required: true,\n type: Number,\n },\n page: {\n required: true,\n type: Object,\n },\n span: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n selection: {\n start: null,\n end: null,\n },\n box: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n };\n },\n computed: {\n /**\n * Konva options of the selection rectangle, based on the\n * `selection` object.\n */\n config() {\n const primaryColor = window\n .getComputedStyle(document.body)\n .getPropertyValue(\"--primary-color\");\n return {\n x: this.box.x,\n y: this.box.y,\n width: this.box.width,\n height: this.box.height,\n stroke: \"#7B61FFB3\",\n fill: `${primaryColor}77`,\n strokeWidth: 1,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n perfectDrawEnabled: false,\n name: `spanSelection_${this.id}`,\n draggable: true,\n };\n },\n transformerConfig() {\n return {\n borderEnabled: false,\n rotateEnabled: false,\n ignoreStroke: true,\n keepRatio: false,\n anchorStroke: \"#7B61FF\",\n anchorSize: 6,\n name: `spanTransformer_${this.id}`,\n };\n },\n ...mapState(\"document\", [\"editAnnotation\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"bboxToRect\", \"scaledEntities\"]),\n ...mapGetters(\"selection\", [\"entitiesOnSelection\", \"isSelectionValid\"]),\n },\n watch: {\n box() {\n this.updateTransformer();\n this.setSelection();\n },\n span() {\n this.box = this.bboxToRect(this.page, this.span);\n },\n },\n mounted() {\n this.box = this.bboxToRect(this.page, this.span);\n this.setSelection();\n this.$nextTick(() => {\n this.updateTransformer();\n });\n },\n methods: {\n setSelection() {\n this.selection = {\n start: {\n x: this.box.x,\n y: this.box.y,\n },\n end: {\n x: this.box.x + this.box.width,\n y: this.box.y + this.box.height,\n },\n };\n },\n startSelection(start) {\n this.selection.start = start;\n },\n\n moveSelection(points) {\n // only apply when we have a large enough selection, otherwise we risk counting misclicks\n if (this.selection) {\n const xDiff = Math.abs(this.selection.start.x - points.end.x);\n const yDiff = Math.abs(this.selection.start.y - points.end.y);\n if (xDiff > 5 && yDiff > 5) {\n const { start, end } = points;\n if (start) {\n this.selection.start = start;\n }\n if (end) {\n this.selection.end = end;\n }\n }\n }\n },\n\n endSelection(end) {\n let xDiff;\n let yDiff;\n\n if (end) {\n xDiff = Math.abs(this.selection.start.x - end.x);\n yDiff = Math.abs(this.selection.start.y - end.y);\n }\n\n // if \"end\" is not provided, start and end points are the same, or if we have a selection smaller than 5x5,\n // just reset\n if (\n !end ||\n (yDiff <= 5 && xDiff <= 5) ||\n (this.selection.start.x === end.x && this.selection.start.y == end.y)\n ) {\n this.selection.start = null;\n this.selection.end = null;\n } else {\n this.selection.start.x = this.selection.start.x - selectionPadding;\n this.selection.start.y = this.selection.start.y - selectionPadding;\n\n end.x = end.x + selectionPadding;\n end.y = end.y + selectionPadding;\n\n this.selection.end = end;\n }\n },\n handleSelection() {\n this.box = {\n x: this.selection.start.x,\n y: this.selection.start.y,\n width: this.selection.end.x - this.selection.start.x,\n height: this.selection.end.y - this.selection.start.y,\n };\n\n const box = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: this.scaledEntities(\n this.entitiesOnSelection(box, this.page),\n this.page\n ),\n selection: box,\n });\n },\n updateTransformer() {\n // here we need to manually attach or detach Transformer node\n const transformer = this.$refs.spanTransformer;\n\n // maybe we're out of sync and the transformer is not available, just return\n if (!transformer) {\n return;\n }\n\n const transformerNode = transformer.getNode();\n const stage = transformerNode.getStage();\n let selectedNode;\n if (stage) {\n selectedNode = stage.findOne(`.spanSelection_${this.id}`);\n }\n\n // do nothing if selected node is already attached\n if (selectedNode === transformerNode.node()) {\n return;\n }\n\n if (selectedNode) {\n // attach to another node\n transformerNode.nodes([selectedNode]);\n } else {\n // remove transformer\n transformerNode.nodes([]);\n }\n\n transformerNode.getLayer().batchDraw();\n },\n\n /**\n * This method is used for both transforms and drags since it just\n * retrieves the rect's new attributes from the event and uses those\n * to set the new selection state.\n */\n onChange(event) {\n const { x, y, scaleX, scaleY, skewX, width, height } = event.target.attrs;\n const realWidth = width * scaleX;\n const realHeight = height * scaleY;\n let start;\n let end;\n\n // we need to figure out if there's skewing going on, to fix start/end points\n // (other cases appear to fix themselves automatically)\n if (skewX >= 0) {\n start = { x, y };\n end = {\n x: start.x + realWidth,\n y: start.y + realHeight,\n };\n } else {\n end = { x, y };\n start = { x: end.x - realWidth, y: end.y - realHeight };\n }\n\n this.moveSelection({ start, end });\n\n // reset node's everything after transform (we don't want to deal with that,\n // just with regular x/y/width/height)\n const node = this.$refs.spanSelection.getNode();\n node.skewX(0);\n node.skewY(0);\n node.rotation(0);\n node.scaleX(1);\n node.scaleY(1);\n\n this.handleSelection();\n },\n },\n};\n</script>\n","import { render } from \"./SpanSelection.vue?vue&type=template&id=f493e30e\"\nimport script from \"./SpanSelection.vue?vue&type=script&lang=js\"\nexport * from \"./SpanSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <v-group>\n <v-rect ref=\"placeholderSelection\" :config=\"placeholderConfig\" />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\";\nexport default {\n props: {\n span: {\n required: true,\n type: Object,\n },\n page: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n selection: {\n start: null,\n end: null,\n },\n };\n },\n computed: {\n placeholderConfig() {\n const box = this.bboxToRect(this.page, this.span);\n const primaryColor = window\n .getComputedStyle(document.body)\n .getPropertyValue(\"--primary-color\");\n return {\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n fill: \"transparent\",\n stroke: primaryColor,\n strokeWidth: 3,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n name: \"placeholderSelection\",\n draggable: false,\n };\n },\n ...mapGetters(\"display\", [\"bboxToRect\"]),\n },\n};\n</script>\n","import { render } from \"./PlaceholderSelection.vue?vue&type=template&id=b5101d9a\"\nimport script from \"./PlaceholderSelection.vue?vue&type=script&lang=js\"\nexport * from \"./PlaceholderSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<!-- eslint-disable vue/no-v-html -->\n<template>\n <div\n class=\"annotation-popup\"\n :style=\"{\n left: `${left}px`,\n top: `${top}px`,\n height: `${heightOfPopup}px`,\n }\"\n >\n <div v-if=\"!editAnnotation\">\n <div v-if=\"spanLoading\" class=\"popup-input\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </div>\n <input\n v-else\n v-model=\"textFromEntities\"\n class=\"popup-input\"\n type=\"text\"\n :disabled=\"true\"\n />\n </div>\n <b-dropdown\n v-model=\"selectedSet\"\n :disabled=\"!textFromEntities\"\n aria-role=\"list\"\n :class=\"[\n 'annotation-dropdown',\n 'no-padding-bottom',\n 'no-padding-top',\n 'dropdown-full-width',\n setsList.length === 0 ? 'no-padding-top' : '',\n ]\"\n scrollable\n >\n <template #trigger>\n <b-button\n :class=\"[\n 'popup-input',\n selectedSet ? '' : 'not-selected',\n 'has-right-icon',\n ]\"\n type=\"is-text\"\n >\n <span class=\"input-text\">\n {{\n selectedSet\n ? `${selectedSet.label_set.name} ${\n selectedSet.id\n ? numberOfAnnotationSetGroup(selectedSet)\n : `${numberOfLabelSetGroup(selectedSet.label_set)} (${$t(\n \"new\"\n )})`\n }`\n : $t(\"select_annotation_set\")\n }}</span\n >\n <span class=\"caret-icon\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </span>\n </b-button>\n </template>\n <b-button\n type=\"is-ghost\"\n :class=\"['add-ann-set', 'dropdown-item', 'no-icon-margin']\"\n icon-left=\"plus\"\n @click=\"openAnnotationSetCreation\"\n >\n {{ $t(\"new_ann_set_title\") }}\n </b-button>\n <b-dropdown-item\n v-for=\"(set, index) in setsList\"\n :key=\"`${set.label_set.id}_${index}`\"\n aria-role=\"listitem\"\n :value=\"set\"\n >\n <span>{{\n `${set.label_set.name} ${\n set.id\n ? numberOfAnnotationSetGroup(set)\n : `${numberOfLabelSetGroup(set.label_set)} (${$t(\"new\")})`\n }`\n }}</span>\n </b-dropdown-item>\n </b-dropdown>\n <b-tooltip\n multilined\n :active=\"selectedSet && (!labels || labels.length === 0)\"\n size=\"is-large\"\n position=\"is-bottom\"\n class=\"bottom-aligned\"\n >\n <template #content>\n <div\n v-html=\"\n `${$t('no_labels_available')} ${\n showBranding ? $t('no_labels_available_link') : ''\n }`\n \"\n ></div>\n </template>\n <b-dropdown\n v-model=\"selectedLabel\"\n aria-role=\"list\"\n :disabled=\"!textFromEntities || !labels || labels.length === 0\"\n scrollable\n class=\"label-dropdown annotation-dropdown dropdown-full-width\"\n >\n <template #trigger>\n <b-button\n :class=\"[\n 'popup-input',\n selectedLabel ? '' : 'not-selected',\n 'has-right-icon',\n ]\"\n type=\"is-text\"\n >\n <span class=\"input-text\">{{\n selectedLabel\n ? selectedLabel.name\n : labels && labels.length === 0\n ? $t(\"no_labels_to_choose\")\n : $t(\"select_label\")\n }}</span>\n <span class=\"caret-icon\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </span>\n </b-button>\n </template>\n <b-dropdown-item\n v-for=\"label in labels\"\n :key=\"label.id\"\n aria-role=\"listitem\"\n :value=\"label\"\n >\n <span>{{ label.name }}</span>\n </b-dropdown-item>\n </b-dropdown>\n </b-tooltip>\n <div class=\"annotation-buttons\">\n <b-button\n type=\"is-text\"\n class=\"cancel-button popup-button primary-button\"\n :label=\"$t('cancel')\"\n :disabled=\"loading\"\n @click.prevent=\"close\"\n />\n <b-button\n type=\"is-primary\"\n class=\"popup-button primary-button\"\n :label=\"$t('save')\"\n :disabled=\"loading || !spanSelection || !selectedLabel\"\n @click.prevent=\"save\"\n />\n </div>\n </div>\n</template>\n<script>\n/**\n * This component is used to show a popup\n * for creating a new annotation.\n */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n props: {\n spans: {\n required: true,\n type: Array,\n },\n containerWidth: {\n type: Number,\n required: true,\n },\n containerHeight: {\n type: Number,\n required: true,\n },\n page: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n heightOfPopup: 192,\n margin: 12,\n widthOfPopup: 205,\n selectedLabel: null,\n selectedSet: null,\n labels: null,\n loading: false,\n isAnnSetModalShowing: false,\n setsList: [],\n };\n },\n computed: {\n ...mapState(\"document\", [\"annotationSets\", \"documentId\", \"editAnnotation\"]),\n ...mapGetters(\"document\", [\n \"numberOfAnnotationSetGroup\",\n \"numberOfLabelSetGroup\",\n \"labelsFilteredForAnnotationCreation\",\n ]),\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"bboxToRect\"]),\n ...mapState(\"selection\", [\"spanSelection\", \"selection\", \"spanLoading\"]),\n top() {\n if (this.selection && this.selection.end) {\n const top = this.selection.end.y + this.margin;\n //check if the popup will not go off the container on the top\n return top + this.heightOfPopup < this.containerHeight\n ? top\n : this.selection.end.y - this.heightOfPopup;\n } else {\n const normalizedSpan = this.bboxToRect(this.page, this.spans[0]);\n const top = normalizedSpan.y - this.heightOfPopup; // subtract the height of the popup plus some margin\n\n //check if the popup will not go off the container on the top\n return normalizedSpan.y > this.heightOfPopup\n ? top\n : normalizedSpan.y + normalizedSpan.height + this.margin;\n }\n },\n left() {\n if (this.selection && this.selection.start && this.selection.end) {\n const left = this.selection.start.x;\n //check if the popup will not go off the container on the right\n return left + this.widthOfPopup < this.containerWidth\n ? left\n : this.containerWidth - this.widthOfPopup;\n } else {\n const normalizedSpan = this.bboxToRect(this.page, this.spans[0]);\n const left =\n normalizedSpan.x + normalizedSpan.width / 2 - this.widthOfPopup / 2; // add the entity half width to be centered and then subtract half the width of the popup\n\n //check if the popup will not go off the container\n if (left + this.widthOfPopup > this.containerWidth) {\n // on the right side\n return this.containerWidth - this.widthOfPopup;\n } else {\n // on the left side\n return left > 0 ? left : 0;\n }\n }\n },\n textFromEntities() {\n let text = \"\";\n this.spans.forEach((span) => {\n text = `${text} ${span.offset_string}`;\n });\n\n return text.trim();\n },\n },\n watch: {\n selectedSet(newValue, oldValue) {\n this.selectedLabel = null;\n this.labels = this.labelsFilteredForAnnotationCreation(newValue);\n if (oldValue === null && this.editAnnotation) {\n this.selectedLabel = this.editAnnotation.label;\n } else if (this.labels.length === 1) {\n this.selectedLabel = this.labels[0];\n }\n },\n },\n mounted() {\n this.setsList = this.orderedSetList([...this.annotationSets]);\n\n if (this.editAnnotation) {\n this.heightOfPopup = 142;\n this.selectedSet = this.editAnnotation.annotationSet;\n } else if (this.setsList.length === 1) {\n this.selectedSet = this.setsList[0];\n }\n\n setTimeout(() => {\n // prevent click propagation when opening the popup\n document.body.addEventListener(\"click\", this.clickOutside);\n }, 200);\n },\n unmounted() {\n document.body.removeEventListener(\"click\", this.clickOutside);\n },\n methods: {\n orderedSetList(setsList) {\n setsList.sort((a, b) => {\n const nameA = a.label_set.name;\n const nameB = b.label_set.name;\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n // names must be equal\n return 0;\n });\n return setsList;\n },\n close() {\n if (this.editAnnotation) {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n }\n this.$store.dispatch(\"selection/disableSelection\");\n this.$emit(\"close\");\n },\n save() {\n if (this.editAnnotation) {\n this.loading = true;\n this.$store.dispatch(\"document/setEditAnnotation\", {\n id: this.editAnnotation.id,\n index: this.editAnnotation.index,\n label: this.selectedLabel,\n labelSet: this.selectedSet.label_set,\n annotationSet: this.selectedSet,\n pageNumber: this.editAnnotation.pageNumber,\n });\n\n document.getElementById(\"save-ann\").click();\n\n return;\n } else {\n this.loading = true;\n\n let selection_bbox = null;\n\n if (this.selection && this.selection.start && this.selection.end) {\n selection_bbox = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n }\n\n const annotationToCreate = {\n document: this.documentId,\n span: this.spans,\n label: this.selectedLabel.id,\n is_correct: true,\n revised: false,\n };\n\n if (selection_bbox) {\n annotationToCreate.selection_bbox = selection_bbox;\n }\n\n if (this.selectedSet.id) {\n annotationToCreate.annotation_set = this.selectedSet.id;\n } else {\n annotationToCreate.label_set = this.selectedSet.label_set.id;\n }\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_creating_annotation\"),\n });\n })\n .finally(() => {\n this.close();\n this.loading = false;\n });\n }\n },\n chooseLabelSet(labelSet) {\n // check if there's already a new entry for that label set to be created\n const existsIndex = this.setsList.findIndex((set) => {\n return set.id === null && set.label_set.id === labelSet.id;\n });\n\n const newSet = {\n label_set: labelSet,\n labels: labelSet.labels,\n id: null,\n };\n if (existsIndex >= 0) {\n this.setsList[existsIndex] = newSet;\n } else {\n this.setsList.unshift(newSet);\n }\n this.selectedSet = newSet;\n },\n openAnnotationSetCreation() {\n this.$store.dispatch(\"display/showChooseLabelSetModal\", {\n show: true,\n finish: this.chooseLabelSet,\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/new_annotation.scss\"></style>\n","import { render } from \"./AnnotationPopup.vue?vue&type=template&id=48319ede&scoped=true\"\nimport script from \"./AnnotationPopup.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationPopup.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/new_annotation.scss?vue&type=style&index=0&id=48319ede&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-48319ede\"]])\n\nexport default __exports__","<template>\n <div\n class=\"ann-set-table-header\"\n :style=\"{ left: `${coordinates.x}px`, top: `${coordinates.y}px` }\"\n >\n <b-dropdown\n aria-role=\"list\"\n class=\"ann-set-table-header-dropdown\"\n position=\"is-top-right\"\n scrollable\n >\n <template #trigger>\n <span class=\"ann-set-label-set-name\">{{ labelSetName }}</span>\n <SettingsIcon />\n </template>\n <b-dropdown-item\n aria-role=\"listitem\"\n class=\"delete-action\"\n @click=\"handleDelete()\"\n >\n <span>{{ $t(\"delete_table\") }}</span></b-dropdown-item\n >\n </b-dropdown>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport SettingsIcon from \"../../assets/images/SettingsIcon\";\n\nexport default {\n name: \"AnnSetTableOptions\",\n components: {\n SettingsIcon,\n },\n props: {\n page: {\n type: Object,\n required: true,\n },\n },\n computed: {\n ...mapGetters(\"document\", [\n \"annotationSetsInTable\",\n \"annotationsInAnnotationsSets\",\n ]),\n ...mapGetters(\"display\", [\"bboxToPoint\"]),\n ...mapState(\"display\", [\"showAnnSetTable\"]),\n labelSetName() {\n return this.showAnnSetTable[0].label_set.name;\n },\n coordinates() {\n let xFinal = 0;\n let yFinal = 0;\n const paddingTop = 40;\n\n this.showAnnSetTable.forEach((annotationSet) => {\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n annotation.span.forEach((span) => {\n const { x, y } = this.bboxToPoint(this.page, {\n x: span.x0,\n y: span.y0,\n });\n if (xFinal === 0 || x < xFinal) {\n xFinal = x;\n }\n if (yFinal === 0 || y < yFinal) {\n yFinal = y - paddingTop;\n }\n });\n });\n });\n }\n });\n return { x: xFinal, y: yFinal };\n },\n },\n methods: {\n handleDelete() {\n const annotationsToDelete = this.annotationsInAnnotationsSets(\n this.showAnnSetTable\n );\n\n for (let i = 0; i < annotationsToDelete.length; i++) {\n const annotationToDelete = annotationsToDelete[i];\n this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: annotationToDelete.id,\n annotationSet: null, // TODO: test if annotation set should be added if the feature is available again\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n this.$store.dispatch(\"display/showAnnSetTable\", null);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/ann_set_table_options.scss\"\n></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.361 8.4396C13.2541 8.31795 13.1952 8.16154 13.1952 7.9996C13.1952 7.83767 13.2541 7.68126 13.361 7.55961L14.2143 6.5996C14.3084 6.49472 14.3668 6.36274 14.3811 6.22261C14.3955 6.08248 14.3651 5.9414 14.2943 5.8196L12.961 3.51294C12.8909 3.39129 12.7843 3.29486 12.6562 3.2374C12.5281 3.17993 12.3851 3.16438 12.2477 3.19294L10.9943 3.44627C10.8349 3.47922 10.6688 3.45266 10.5276 3.3716C10.3864 3.29055 10.2797 3.16059 10.2277 3.00627L9.821 1.78627C9.77627 1.65386 9.69107 1.53885 9.57742 1.4575C9.46377 1.37615 9.32743 1.33258 9.18766 1.33294H6.521C6.37562 1.32535 6.23175 1.36556 6.11138 1.44741C5.991 1.52927 5.90072 1.64828 5.85433 1.78627L5.481 3.00627C5.429 3.16059 5.32231 3.29055 5.18107 3.3716C5.03983 3.45266 4.87381 3.47922 4.71433 3.44627L3.42767 3.19294C3.29737 3.17453 3.16453 3.19509 3.0459 3.25203C2.92726 3.30898 2.82813 3.39976 2.761 3.51294L1.42767 5.8196C1.35511 5.94004 1.32248 6.08033 1.33445 6.22042C1.34643 6.36051 1.40239 6.49323 1.49433 6.5996L2.341 7.55961C2.44788 7.68126 2.50682 7.83767 2.50682 7.9996C2.50682 8.16154 2.44788 8.31795 2.341 8.4396L1.49433 9.39961C1.40239 9.50598 1.34643 9.6387 1.33445 9.77879C1.32248 9.91888 1.35511 10.0592 1.42767 10.1796L2.761 12.4863C2.83106 12.6079 2.93774 12.7044 3.06583 12.7618C3.19392 12.8193 3.33688 12.8348 3.47433 12.8063L4.72766 12.5529C4.88714 12.52 5.05317 12.5465 5.19441 12.6276C5.33565 12.7087 5.44233 12.8386 5.49433 12.9929L5.901 14.2129C5.94738 14.3509 6.03766 14.4699 6.15804 14.5518C6.27842 14.6337 6.42229 14.6739 6.56766 14.6663H9.23433C9.37409 14.6666 9.51044 14.6231 9.62408 14.5417C9.73773 14.4604 9.82294 14.3454 9.86766 14.2129L10.2743 12.9929C10.3263 12.8386 10.433 12.7087 10.5743 12.6276C10.7155 12.5465 10.8815 12.52 11.041 12.5529L12.2943 12.8063C12.4318 12.8348 12.5747 12.8193 12.7028 12.7618C12.8309 12.7044 12.9376 12.6079 13.0077 12.4863L14.341 10.1796C14.4118 10.0578 14.4422 9.91673 14.4278 9.7766C14.4134 9.63647 14.355 9.50449 14.261 9.39961L13.361 8.4396ZM12.3677 9.33294L12.901 9.93294L12.0477 11.4129L11.261 11.2529C10.7809 11.1548 10.2814 11.2364 9.85739 11.4821C9.43341 11.7279 9.11443 12.1208 8.961 12.5863L8.70767 13.3329H7.001L6.761 12.5729C6.60757 12.1075 6.28859 11.7146 5.8646 11.4688C5.44062 11.223 4.94115 11.1415 4.461 11.2396L3.67433 11.3996L2.80767 9.92627L3.341 9.32627C3.66897 8.95959 3.85029 8.48489 3.85029 7.99294C3.85029 7.50098 3.66897 7.02629 3.341 6.6596L2.80767 6.0596L3.661 4.59294L4.44767 4.75294C4.92781 4.85109 5.42728 4.76953 5.85127 4.52374C6.27525 4.27795 6.59423 3.88504 6.74766 3.4196L7.001 2.66627H8.70767L8.961 3.42627C9.11443 3.89171 9.43341 4.28462 9.85739 4.5304C10.2814 4.77619 10.7809 4.85775 11.261 4.7596L12.0477 4.5996L12.901 6.0796L12.3677 6.67961C12.0434 7.04545 11.8643 7.51739 11.8643 8.00627C11.8643 8.49515 12.0434 8.9671 12.3677 9.33294ZM7.85433 5.33294C7.32691 5.33294 6.81134 5.48934 6.37281 5.78235C5.93428 6.07537 5.59249 6.49185 5.39065 6.97912C5.18882 7.46638 5.13601 8.00256 5.2389 8.51985C5.3418 9.03713 5.59577 9.51228 5.96871 9.88522C6.34165 10.2582 6.81681 10.5121 7.33409 10.615C7.85137 10.7179 8.38755 10.6651 8.87482 10.4633C9.36209 10.2615 9.77857 9.91966 10.0716 9.48113C10.3646 9.04259 10.521 8.52702 10.521 7.9996C10.521 7.29236 10.24 6.61408 9.73995 6.11399C9.23985 5.61389 8.56158 5.33294 7.85433 5.33294ZM7.85433 9.33294C7.59062 9.33294 7.33284 9.25474 7.11357 9.10823C6.89431 8.96172 6.72341 8.75348 6.62249 8.50985C6.52158 8.26621 6.49517 7.99813 6.54662 7.73948C6.59807 7.48084 6.72505 7.24327 6.91152 7.0568C7.09799 6.87033 7.33557 6.74334 7.59421 6.69189C7.85285 6.64044 8.12094 6.66685 8.36458 6.76777C8.60821 6.86868 8.81645 7.03958 8.96296 7.25884C9.10947 7.47811 9.18766 7.7359 9.18766 7.9996C9.18766 8.35323 9.04719 8.69237 8.79714 8.94241C8.54709 9.19246 8.20795 9.33294 7.85433 9.33294Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./SettingsIcon.vue?vue&type=template&id=46e4b628\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnSetTableOptions.vue?vue&type=template&id=0f7fbff8&scoped=true\"\nimport script from \"./AnnSetTableOptions.vue?vue&type=script&lang=js\"\nexport * from \"./AnnSetTableOptions.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/ann_set_table_options.scss?vue&type=style&index=0&id=0f7fbff8&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f7fbff8\"]])\n\nexport default __exports__","import { render } from \"./DocumentPage.vue?vue&type=template&id=6c500392&scoped=true\"\nimport script from \"./DocumentPage.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentPage.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_page.scss?vue&type=style&index=0&id=6c500392&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6c500392\"]])\n\nexport default __exports__","<template>\n <div :style=\"canvasStyle\">\n <b-skeleton\n :width=\"`${scaledViewport.width}px`\"\n :height=\"`${scaledViewport.height}px`\"\n />\n </div>\n</template>\n\n<script>\n/**\n * This component is used to mimick an actual page's height/width to\n * act as a placeholder (mainly for scrolling) instead of rendering the\n * full page canvas when it's not needed (unfocused pages).\n */\n\nimport { mapState } from \"vuex\";\nimport { PIXEL_RATIO } from \"../../constants\";\n\nexport default {\n props: {\n width: {\n default: 0,\n type: Number,\n },\n height: {\n default: 0,\n type: Number,\n },\n },\n computed: {\n ...mapState(\"display\", [\"scale\"]),\n actualSizeViewport() {\n return {\n width: this.width * this.scale,\n height: this.height * this.scale,\n };\n },\n\n scaledViewport() {\n const { width: actualSizeWidth, height: actualSizeHeight } =\n this.actualSizeViewport;\n const [pixelWidth, pixelHeight] = [actualSizeWidth, actualSizeHeight].map(\n (dim) => Math.ceil(dim / PIXEL_RATIO)\n );\n return { width: pixelWidth, height: pixelHeight };\n },\n\n canvasStyle() {\n const { width, height } = this.scaledViewport;\n return `width: ${width}px; height: ${height}px; margin: 0 auto`;\n },\n },\n};\n</script>\n","import { render } from \"./DummyPage.vue?vue&type=template&id=4b39794c\"\nimport script from \"./DummyPage.vue?vue&type=script&lang=js\"\nexport * from \"./DummyPage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div id=\"scrolling-document\">\n <div ref=\"scrollingDocument\" class=\"scrolling-document\">\n <transition :name=\"searchEnabled ? 'slide-down' : 'slide-up'\">\n <SearchBar v-if=\"searchEnabled\" />\n </transition>\n <div\n v-if=\"\n selectedDocument && scale && !loading && !recalculatingAnnotations\n \"\n >\n <ScrollingPage\n v-for=\"page in editMode ? pagesForPostprocess : pages\"\n :key=\"page.number\"\n ref=\"scrollingPage\"\n :page=\"page\"\n :client-height=\"clientHeight\"\n :scroll-top=\"scrollTop\"\n class=\"scrolling-page\"\n @page-jump=\"onPageJump\"\n />\n </div>\n\n <div v-else class=\"loading-page\">\n <b-skeleton width=\"100%\" height=\"1000px\" />\n </div>\n </div>\n <Toolbar v-if=\"showToolbar\" />\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport scroll from \"../../directives/scroll\";\nimport ScrollingPage from \"./ScrollingPage\";\nimport Toolbar from \"./DocumentToolbar\";\nimport SearchBar from \"./SearchBar\";\n\nexport default {\n components: {\n ScrollingPage,\n Toolbar,\n SearchBar,\n },\n directives: {\n scroll,\n },\n\n data() {\n return {\n scrollTop: 0,\n clientHeight: 0,\n scrollTimeout: null,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"loading\",\n \"annotationSets\",\n ]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"documentPagesListForEditMode\",\n \"pagesForPostprocess\",\n ]),\n ...mapState(\"display\", [\n \"scale\",\n \"pageChangedFromThumbnail\",\n \"currentPage\",\n \"searchEnabled\",\n ]),\n ...mapGetters(\"display\", [\"visiblePageRange\"]),\n\n pages() {\n if (this.selectedDocument) {\n return this.selectedDocument.pages;\n } else {\n return [];\n }\n },\n showToolbar() {\n return !this.loading && this.pages.length > 0 && this.scale;\n },\n },\n watch: {\n loading() {\n this.scrollTop = 0;\n },\n },\n mounted() {\n this.$refs.scrollingDocument.addEventListener(\"scroll\", this.handleScroll);\n },\n\n methods: {\n updateScrollBounds() {\n const { scrollTop, clientHeight } = this.$refs.scrollingDocument;\n this.scrollTop = scrollTop;\n this.clientHeight = clientHeight;\n },\n /**\n * Scrolls the ScrollingDocument to the offset specified by scrollTop & scrollLeft (if zoomed in)\n * (i.e., another page).\n */\n onPageJump(scrollTop, scrollLeft) {\n const scrollY = scrollTop - (this.$refs.scrollingDocument.offsetTop + 4); // + 4 due to margin between pages\n const scrollX = scrollLeft - this.$refs.scrollingDocument.offsetLeft - 4; // - 4 to add more space before the entity\n\n this.$refs.scrollingDocument.scroll(scrollX, scrollY);\n },\n handleScroll() {\n this.updateScrollBounds();\n if (this.pages.length === 1) return;\n\n this.isScrolling = true;\n\n clearTimeout(this.scrollTimeout);\n\n this.scrollTimeout = setTimeout(() => {\n this.isScrolling = false;\n\n if (\n this.pageChangedFromThumbnail &&\n this.visiblePageRange[1] === this.currentPage\n ) {\n this.$store.dispatch(\"display/setPageChangedFromThumbnail\", false);\n }\n }, 300);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/scrolling_document.scss\"\n></style>\n","function inserted(el, binding) {\n const callback = binding.value;\n if (binding.modifiers.immediate) {\n callback();\n }\n const throttledScroll = throttle(callback, 300);\n el.addEventListener(\"scroll\", throttledScroll, true);\n}\n\nfunction throttle(callback, limit) {\n var waiting = false; // Initially, we're not waiting\n return function() {\n // We return a throttled function\n if (!waiting) {\n // If we're not waiting\n callback.apply(this, arguments); // Execute users function\n waiting = true; // Prevent future invocations\n setTimeout(function() {\n // After a period of time\n waiting = false; // And allow future invocations\n }, limit);\n }\n };\n}\n\nexport default {\n inserted\n};\n","<template>\n <div v-observe-visibility=\"visibilityChanged\">\n <DummyPage\n v-if=\"!loadedPage\"\n :width=\"page.size[0]\"\n :height=\"page.size[1]\"\n />\n <DocumentPage v-else :page=\"loadedPage\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport DocumentPage from \"../DocumentPage/DocumentPage\";\nimport DummyPage from \"../DocumentPage/DummyPage\";\n\nexport default {\n name: \"ScrollingPage\",\n\n components: {\n DocumentPage,\n DummyPage,\n },\n\n props: {\n page: {\n type: Object,\n required: true,\n },\n scrollTop: {\n type: Number,\n required: true,\n },\n clientHeight: {\n type: Number,\n required: true,\n },\n },\n\n data() {\n return {\n elementTop: 0,\n elementHeight: 0,\n previousFocusedAnnotation: null,\n previousY: null,\n pageBeingLoaded: false,\n isScrolling: false,\n };\n },\n\n computed: {\n ...mapState(\"display\", [\"pageChangedFromThumbnail\", \"currentPage\"]),\n ...mapState(\"document\", [\n \"pages\",\n \"documentAnnotationSelected\",\n \"loading\",\n \"annotationId\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"display\", [\"visiblePageRange\", \"bboxToRect\"]),\n ...mapGetters(\"document\", [\"scrollDocumentToAnnotation\", \"annotationById\"]),\n\n loadedPage() {\n if (this.editMode) {\n return this.page;\n }\n let loadedPage = null;\n if (this.page && this.pages) {\n loadedPage = this.pages.find((p) => p.number === this.page.number);\n }\n if (!loadedPage && this.pageInVisibleRange(this.page)) {\n if (!this.pageBeingLoaded) {\n this.loadPage();\n }\n }\n return loadedPage;\n },\n\n isElementFocused() {\n const { elementTop, bottom, elementHeight, scrollTop, clientHeight } =\n this;\n if (!elementHeight) return;\n\n const halfHeight = elementHeight / 2;\n const halfScreen = clientHeight / 2;\n const delta = elementHeight >= halfScreen ? halfScreen : halfHeight;\n const threshold = scrollTop + delta;\n\n return elementTop < threshold && bottom >= threshold;\n },\n\n bottom() {\n return this.elementTop + this.elementHeight;\n },\n\n scrollBottom() {\n return this.scrollTop + this.clientHeight;\n },\n\n currentSearchResultForPage() {\n return this.$store.getters[\"display/currentSearchResultForPage\"](\n this.page.number\n );\n },\n spanForAnnotationSelected() {\n if (this.annotationId) {\n const annotation = this.annotationById(this.annotationId);\n if (\n annotation &&\n annotation.span &&\n annotation.span.length > 0 &&\n annotation.span[0].page_index + 1 === this.page.number\n ) {\n return annotation.span[0];\n }\n }\n return null;\n },\n },\n\n watch: {\n scrollTop: \"updateElementBounds\",\n clientHeight: \"updateElementBounds\",\n annotationId() {\n this.scrollDocumentToPosition(this.spanForAnnotationSelected);\n },\n\n /**\n * Scroll to the focused annotation if it changes and it's on this page.\n */\n scrollDocumentToAnnotation(isToScroll) {\n if (\n isToScroll &&\n this.documentAnnotationSelected.page === this.page.number\n ) {\n this.scrollDocumentToPosition(this.documentAnnotationSelected.span);\n }\n },\n isElementFocused(focused) {\n if (!this.loading && focused && !this.pageChangedFromThumbnail) {\n this.$store.dispatch(\"display/updateCurrentPage\", this.page.number);\n }\n },\n currentPage(number) {\n if (this.page.number === number && !this.isElementFocused) {\n this.$emit(\"page-jump\", this.elementTop, 0);\n }\n },\n /**\n * Scroll to the search result if the current one changes and it's on this page.\n */\n currentSearchResultForPage(res) {\n // skip page jump if the result is null (the current search result is not on this page)\n if (!res) {\n return;\n }\n const y = this.getYForBbox(res); // y of the search result\n const totalY = y + this.elementTop; // y of search result + page top\n // skip page jump if the search result is already visible on this page\n if (totalY < this.scrollBottom && totalY > this.scrollTop) {\n return;\n }\n this.$nextTick(function () {\n this.scrollTo(y);\n });\n },\n },\n mounted() {\n this.updateElementBounds();\n this.scrollDocumentToPosition(this.spanForAnnotationSelected);\n },\n\n methods: {\n loadPage() {\n this.pageBeingLoaded = true;\n this.$store\n .dispatch(\"document/fetchDocumentPage\", this.page.number)\n .then(() => {\n this.pageBeingLoaded = false;\n });\n },\n visibilityChanged(isVisible) {\n if (isVisible && !this.loadedPage && !this.pageBeingLoaded) {\n this.loadPage();\n }\n if (!isVisible && this.loadedPage) {\n this.$store.dispatch(\"document/unloadDocumentPage\", this.page.number);\n }\n },\n pageInVisibleRange(page) {\n return (\n this.currentPage === page.number ||\n this.visiblePageRange.includes(page.number)\n );\n },\n scrollDocumentToPosition(span) {\n if (span) {\n // We wait for the page to be focused before actually scrolling\n // to the focused annotation.\n this.$nextTick(() => {\n // Scroll to the annotation\n this.scrollTo(\n this.getYForBbox(span) - 100, // offset for edit annotation popup\n this.getXForBbox(span)\n );\n });\n }\n },\n updateElementBounds() {\n const { offsetTop, offsetHeight } = this.$el;\n this.elementTop = offsetTop;\n this.elementHeight = offsetHeight;\n },\n\n /**\n * Calculate the y-position of this bbox on the page\n * from its top, the scale and the image scale (calculated\n * from the page object).\n */\n getYForBbox(bbox) {\n return this.bboxToRect(this.page, bbox).y;\n },\n\n getXForBbox(bbox) {\n return this.bboxToRect(this.page, bbox).x;\n },\n\n /**\n * Scroll to a relative position in the page. It gets added\n * the page's element top and a padding margin.\n */\n scrollTo(y, x) {\n this.$emit(\"page-jump\", this.elementTop + y - 80, x);\n },\n },\n};\n</script>\n","import { render } from \"./ScrollingPage.vue?vue&type=template&id=7036ed76\"\nimport script from \"./ScrollingPage.vue?vue&type=script&lang=js\"\nexport * from \"./ScrollingPage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div id=\"toolbar-container\">\n <div :class=\"['toolbar', recalculatingAnnotations && 'hidden']\">\n <b-tooltip\n :label=\"tooltipInfo\"\n multilined\n :active=\"editModeDisabled\"\n size=\"is-large\"\n class=\"top-aligned\"\n >\n <div\n v-if=\"isEditModeAvailable\"\n id=\"edit-mode-button\"\n :class=\"[\n 'icons icons-left',\n editModeDisabled && 'edit-mode-disabled',\n ]\"\n @click=\"handleEdit\"\n >\n <div class=\"edit-icon icon\">\n <EditDocIcon />\n </div>\n <span class=\"edit-text\">{{ $t(\"edit\") }}</span>\n </div>\n </b-tooltip>\n <div v-if=\"isEditModeAvailable\" class=\"toolbar-divider\" />\n <div\n v-if=\"!publicView && !editMode\"\n class=\"search-document icons\"\n @click=\"toggleSearch\"\n >\n <b-icon icon=\"search\" size=\"is-small\" class=\"search-icon\" />\n </div>\n\n <div v-if=\"!publicView\" class=\"download-file icons\">\n <b-dropdown aria-role=\"list\" position=\"is-top-right\" scrollable>\n <template #trigger>\n <b-icon icon=\"download\" size=\"is-small\" class=\"download-file\" />\n </template>\n\n <b-dropdown-item\n class=\"original-file\"\n aria-role=\"listitem\"\n @click=\"handleDownloadFile()\"\n >{{ $t(\"original_file\") }}</b-dropdown-item\n >\n <b-dropdown-item\n class=\"ocr-file\"\n aria-role=\"listitem\"\n @click=\"handleDownloadFile('ocr')\"\n >{{ $t(\"pdf_file\") }}</b-dropdown-item\n >\n </b-dropdown>\n </div>\n\n <div v-if=\"!publicView\" class=\"toolbar-divider\" />\n\n <div class=\"icons icons-right\">\n <div\n :class=\"[\n 'fit-zoom',\n 'icon',\n currentPercentage === 50 && 'zoom-disabled',\n ]\"\n @click.prevent.stop=\"fitAuto\"\n >\n <FitZoomIcon />\n </div>\n <div\n :class=\"['zoom-in icon', isZoomInExceeding && 'zoom-disabled']\"\n @click.prevent.stop=\"zoomIn\"\n >\n <PlusIcon />\n </div>\n <div\n :class=\"['zoom-out icon', isZoomOutExceeding && 'zoom-disabled']\"\n @click.prevent.stop=\"zoomOut\"\n >\n <MinusIcon />\n </div>\n <div id=\"zoom-percentage\" class=\"percentage\">\n {{ `${currentPercentage}%` }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapActions, mapState, mapGetters } from \"vuex\";\nimport FitZoomIcon from \"../../assets/images/FitZoomIcon\";\nimport PlusIcon from \"../../assets/images/PlusIcon\";\nimport MinusIcon from \"../../assets/images/MinusIcon\";\nimport EditDocIcon from \"../../assets/images/EditDocIcon\";\nimport api from \"../../api\";\n\nexport default {\n name: \"DocumentToolbar\",\n components: {\n FitZoomIcon,\n PlusIcon,\n MinusIcon,\n EditDocIcon,\n },\n data() {\n return {\n currentPercentage: 100,\n fitWidthScale: 1, // baseline for 100%\n maxPercentage: 500,\n defaultPercentage: 0.25,\n fitPercentage: 0.5,\n toolbarModalOpen: true,\n editModeDisabled: false,\n tooltipInfo: null,\n };\n },\n computed: {\n ...mapState(\"display\", [\"scale\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"edit\", [\"isEditModeAvailable\"]),\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"recalculatingAnnotations\",\n \"publicView\",\n ]),\n ...mapGetters(\"document\", [\"documentCannotBeEdited\"]),\n isZoomInExceeding() {\n return this.currentPercentage === this.maxPercentage;\n },\n isZoomOutExceeding() {\n return this.currentPercentage === this.defaultPercentage * 100;\n },\n },\n watch: {\n selectedDocument(newValue) {\n if (this.documentCannotBeEdited(newValue)) {\n this.editModeDisabled = true;\n }\n },\n scale(newScale) {\n if (this.fitWidthScale > 0) {\n this.currentPercentage = Math.round((newScale / this.fitWidthScale) * 100);\n } else {\n this.currentPercentage = Math.round(newScale * 100);\n }\n },\n },\n mounted() {\n if (this.selectedDocument) {\n if (this.documentCannotBeEdited(this.selectedDocument)) {\n this.editModeDisabled = true;\n }\n }\n },\n updated() {\n if (this.selectedDocument.is_reviewed) {\n this.tooltipInfo = this.$t(\"document_reviewed\");\n } else {\n this.tooltipInfo = this.$t(\"edit_not_available\");\n }\n },\n methods: {\n ...mapActions(\"display\", [\"toggleSearch\"]),\n handleEdit() {\n if (this.editModeDisabled) return;\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"edit/enableEditMode\");\n },\n zoomIn() {\n if (this.currentPercentage === this.maxPercentage) return;\n\n // exit edit mode of Annotation if changing zoom during editing\n this.cancelAnnotationEditMode();\n this.currentPercentage += this.defaultPercentage * 100;\n this.updateScale(this.scale + this.defaultPercentage);\n },\n zoomOut() {\n if (this.currentPercentage === this.defaultPercentage * 100) {\n return;\n }\n\n // exit edit mode of Annotation if changing zoom during editing\n this.cancelAnnotationEditMode();\n\n this.currentPercentage -= this.defaultPercentage * 100;\n this.updateScale(this.scale - this.defaultPercentage);\n },\n fitAuto() {\n this.cancelAnnotationEditMode();\n this.$store.dispatch(\"display/updateFit\", \"all\").then(() => {\n this.$nextTick(() => {\n this.fitWidthScale = this.scale;\n this.currentPercentage = 100;\n });\n });\n },\n updateScale(scale) {\n this.$store.dispatch(\"display/updateFit\", \"custom\").then(() => {\n this.$store.dispatch(\"display/updateScale\", { scale });\n });\n },\n handleDownloadFile(fileType) {\n let fileUrl;\n // get the file name without the extension\n let fileName = this.selectedDocument.data_file_name;\n\n if (fileType === \"ocr\") {\n fileUrl = this.selectedDocument.file_url;\n fileName = `${fileType}_${fileName}`;\n } else {\n fileUrl = `/doc/show-original/${this.selectedDocument.id}/`;\n }\n\n // Automatically download original or ocr files\n return api\n .makeFileRequest(fileUrl)\n .then((myBlob) => {\n const url = URL.createObjectURL(myBlob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", fileName);\n link.click();\n URL.revokeObjectURL(link.href);\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_downloading_file\"),\n });\n console.log(error);\n });\n },\n cancelAnnotationEditMode() {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_toolbar.scss\"></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.66683 9.99935C2.29864 9.99935 2.00016 9.70087 2.00016 9.33268C2.00016 8.96449 2.29864 8.66602 2.66683 8.66602H6.66683C7.03502 8.66602 7.3335 8.96449 7.3335 9.33268V13.3327C7.3335 13.7009 7.03502 13.9994 6.66683 13.9994C6.29864 13.9994 6.00016 13.7009 6.00016 13.3327V10.9422L2.47157 14.4708C2.21122 14.7311 1.78911 14.7311 1.52876 14.4708C1.26841 14.2104 1.26841 13.7883 1.52876 13.5279L5.05735 9.99935H2.66683Z\"\n />\n <path\n d=\"M13.3334 6.00065C13.7016 6.00065 14.0001 6.29913 14.0001 6.66732C14.0001 7.03551 13.7016 7.33398 13.3334 7.33398L9.33341 7.33398C8.96522 7.33398 8.66675 7.03551 8.66675 6.66732L8.66675 2.66732C8.66675 2.29913 8.96523 2.00065 9.33342 2.00065C9.7016 2.00065 10.0001 2.29913 10.0001 2.66732L10.0001 5.05784L13.5287 1.52925C13.789 1.2689 14.2111 1.2689 14.4715 1.52925C14.7318 1.78959 14.7318 2.21171 14.4715 2.47205L10.9429 6.00065L13.3334 6.00065Z\"\n />\n </svg>\n</template>\n","import { render } from \"./FitZoomIcon.vue?vue&type=template&id=620a804c\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"11\"\n height=\"12\"\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.49935 0.667969C5.13116 0.667969 4.83268 0.966447 4.83268 1.33464V5.33463H0.832682C0.464492 5.33463 0.166016 5.63311 0.166016 6.0013C0.166016 6.36949 0.464493 6.66797 0.832682 6.66797H4.83268V10.668C4.83268 11.0362 5.13116 11.3346 5.49935 11.3346C5.86754 11.3346 6.16602 11.0362 6.16602 10.668V6.66797H10.166C10.5342 6.66797 10.8327 6.36949 10.8327 6.0013C10.8327 5.63311 10.5342 5.33463 10.166 5.33463H6.16602V1.33464C6.16602 0.966446 5.86754 0.667969 5.49935 0.667969Z\"\n />\n </svg>\n</template>\n","import { render } from \"./PlusIcon.vue?vue&type=template&id=1a258512\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"11\"\n height=\"2\"\n viewBox=\"0 0 11 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.834635 1.66536C0.466446 1.66536 0.167969 1.36689 0.167969 0.998698C0.167969 0.630508 0.466445 0.332031 0.834635 0.332031H10.168C10.5362 0.332031 10.8346 0.630508 10.8346 0.998698C10.8346 1.36689 10.5362 1.66536 10.168 1.66536H0.834635Z\"\n />\n </svg>\n</template>\n","import { render } from \"./MinusIcon.vue?vue&type=template&id=4bf60aaa\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M20.71,16.71l-2.42-2.42a1,1,0,0,0-1.42,0l-3.58,3.58a1,1,0,0,0-.29.71V21a1,1,0,0,0,1,1h2.42a1,1,0,0,0,.71-.29l3.58-3.58A1,1,0,0,0,20.71,16.71ZM16,20H15V19l2.58-2.58,1,1Zm-6,0H6a1,1,0,0,1-1-1V5A1,1,0,0,1,6,4h5V7a3,3,0,0,0,3,3h3v1a1,1,0,0,0,2,0V9s0,0,0-.06a1.31,1.31,0,0,0-.06-.27l0-.09a1.07,1.07,0,0,0-.19-.28h0l-6-6h0a1.07,1.07,0,0,0-.28-.19.32.32,0,0,0-.09,0L12.06,2H6A3,3,0,0,0,3,5V19a3,3,0,0,0,3,3h4a1,1,0,0,0,0-2ZM13,5.41,15.59,8H14a1,1,0,0,1-1-1ZM8,14h6a1,1,0,0,0,0-2H8a1,1,0,0,0,0,2Zm0-4H9A1,1,0,0,0,9,8H8a1,1,0,0,0,0,2Zm2,6H8a1,1,0,0,0,0,2h2a1,1,0,0,0,0-2Z\"\n />\n </svg>\n</template>\n","import { render } from \"./EditDocIcon.vue?vue&type=template&id=3bdcb0e2\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentToolbar.vue?vue&type=template&id=0ef4bf7c&scoped=true\"\nimport script from \"./DocumentToolbar.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentToolbar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_toolbar.scss?vue&type=style&index=0&id=0ef4bf7c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ef4bf7c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-search\">\n <div class=\"search-container\">\n <input\n ref=\"searchInput\"\n v-model=\"search\"\n :placeholder=\"$t('search')\"\n class=\"search-input\"\n @keyup.13=\"focusSearchResult(1)\"\n />\n <div v-if=\"searchLoading\" class=\"search-loading\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </div>\n\n <div\n v-else-if=\"\n searchResults.length === 0 && search.length >= minSearchLength\n \"\n class=\"search-no-results\"\n >\n {{ $t(\"no_results\") }}\n </div>\n <div v-else class=\"search-navigation\">\n <span v-if=\"searchBelowMinimum\" class=\"search-counters\">\n {{ $t(\"search_below_minimum\") }}\n </span>\n <span v-else class=\"search-counters\"\n >{{ currentCounter }}/{{ searchResults.length }}</span\n >\n <b-button\n v-if=\"!searchBelowMinimum\"\n class=\"is-ghost is-small next-search\"\n :disabled=\"!searchResults.length || searchResults.length <= 1\"\n @click=\"focusSearchResult(1)\"\n ><b-icon icon=\"angle-down\" class=\"is-small\"\n /></b-button>\n\n <b-button\n v-if=\"!searchBelowMinimum\"\n class=\"is-ghost is-small previous-search\"\n :disabled=\"!searchResults.length || searchResults.length <= 1\"\n @click=\"focusSearchResult(-1)\"\n ><b-icon icon=\"angle-up\" class=\"is-small\"\n /></b-button>\n </div>\n <div class=\"search-close\">\n <b-button class=\"is-ghost is-small\" @click=\"closeSearch\">\n <b-icon icon=\"xmark\" class=\"is-small\" />\n </b-button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"SearchBar\",\n data() {\n return {\n search: \"\",\n minSearchLength: 3,\n };\n },\n computed: {\n ...mapState(\"display\", [\n \"currentSearchResult\",\n \"currentSearch\",\n \"searchEnabled\",\n \"searchResults\",\n \"searchLoading\",\n ]),\n searchBelowMinimum() {\n return (\n this.search &&\n this.search.length > 0 &&\n this.search.length < this.minSearchLength\n );\n },\n currentCounter() {\n return this.currentSearchResult != null && this.searchResults.length > 0\n ? this.currentSearchResult + 1\n : 0;\n },\n },\n watch: {\n search(search) {\n this.$store.dispatch(\"display/setCurrentSearch\", search);\n if (search.length >= this.minSearchLength) {\n this.$store.dispatch(\"display/startSearchLoading\");\n }\n this.$store.dispatch(\"display/debounceSearch\", search);\n },\n currentSearch(search) {\n if (this.search !== search) {\n this.search = search;\n }\n },\n searchEnabled(enabled) {\n if (enabled) {\n this.$nextTick(() => {\n this.$refs.searchInput.focus();\n });\n }\n },\n },\n mounted() {\n if (this.currentSearch !== this.search) {\n this.search = this.currentSearch;\n }\n },\n methods: {\n focusSearchResult(n) {\n this.$store.dispatch(\"display/setCurrentSearchResult\", n);\n },\n closeSearch() {\n this.$store.dispatch(\"display/resetSearch\");\n this.$store.dispatch(\"display/toggleSearch\");\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_search_bar.scss\"\n></style>\n","import { render } from \"./SearchBar.vue?vue&type=template&id=4a901e3d&scoped=true\"\nimport script from \"./SearchBar.vue?vue&type=script&lang=js\"\nexport * from \"./SearchBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_search_bar.scss?vue&type=style&index=0&id=4a901e3d&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4a901e3d\"]])\n\nexport default __exports__","import { render } from \"./ScrollingDocument.vue?vue&type=template&id=0f38cc3c&scoped=true\"\nimport script from \"./ScrollingDocument.vue?vue&type=script&lang=js\"\nexport * from \"./ScrollingDocument.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/scrolling_document.scss?vue&type=style&index=0&id=0f38cc3c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f38cc3c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-pages\" ref=\"documentThumbnails\">\n <div v-if=\"selectedDocument\" ref=\"docPage\">\n <div\n v-for=\"page in selectedDocument.pages\"\n :key=\"page.id\"\n :class=\"[\n 'document-thumbnail',\n currentPage == page.number && 'selected',\n ]\"\n @click=\"changePage(page.number)\"\n >\n <div class=\"image-section\">\n <div class=\"image-container\">\n <ServerImage\n v-if=\"!loading && !recalculatingAnnotations\"\n :class=\"[\n 'img-thumbnail',\n currentPage == page.number && 'selected',\n ]\"\n :width=\"'40px'\"\n :image-url=\"`${page.thumbnail_url}?${selectedDocument.downloaded_at}`\"\n >\n <LoadingThumbnail />\n </ServerImage>\n <LoadingThumbnail v-else />\n </div>\n </div>\n <div class=\"number-thumbnail\">\n {{ page.number }}\n </div>\n </div>\n </div>\n <div v-else class=\"document-thumbnail-loading\">\n <div class=\"document-thumbnail\">\n <div class=\"image-section\">\n <div class=\"image-container\">\n <LoadingThumbnail />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport LoadingThumbnail from \"./LoadingThumbnail.vue\";\n\n/**\n * This component creates a vertical list of the document pages\n * with thumbnail pictures of it which are also clickable.\n * It also creates a grid list of the pages in the toolbar modal\n * to allow the user to rotate them.\n */\nexport default {\n name: \"DocumentThumbnails\",\n components: {\n ServerImage,\n LoadingThumbnail,\n },\n data() {\n return {\n thumbnailClicked: null,\n previousScrollPosition: 0,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"recalculatingAnnotations\",\n \"loading\",\n ]),\n ...mapState(\"display\", [\"currentPage\"]),\n },\n watch: {\n currentPage(newPage) {\n if (!newPage || newPage == this.thumbnailClicked) return;\n\n // handle thumbnail selection when scrolling the document\n this.scrollToThumbnail(newPage);\n },\n },\n\n methods: {\n /* Change page if not the currently open and not in modal */\n changePage(pageNumber) {\n this.thumbnailClicked = pageNumber;\n\n if (\n !this.loading &&\n !this.recalculatingAnnotations &&\n pageNumber != this.currentPage\n ) {\n this.$store.dispatch(\"display/setPageChangedFromThumbnail\", true);\n this.$store.dispatch(\"display/updateCurrentPage\", pageNumber);\n }\n },\n\n scrollToThumbnail(page) {\n // select only the active thumbnail\n this.thumbnailClicked = null;\n this.$refs.docPage.children[page - 1].scrollIntoView({\n behavior: \"smooth\",\n });\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","<template>\n <div class=\"loading-thumbnail\">\n <b-skeleton width=\"40px\" height=\"57px\" />\n </div>\n</template>\n\n<script>\n/**\n * This component shows a skeleton instead of the thumbnails\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingThumbnail\",\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","import { render } from \"./LoadingThumbnail.vue?vue&type=template&id=714f8116&scoped=true\"\nimport script from \"./LoadingThumbnail.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingThumbnail.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=714f8116&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-714f8116\"]])\n\nexport default __exports__","import { render } from \"./DocumentThumbnails.vue?vue&type=template&id=b21f512c&scoped=true\"\nimport script from \"./DocumentThumbnails.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentThumbnails.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=b21f512c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b21f512c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-annotations\" @click=\"cleanSelection\">\n <!-- When extracting annotations after editing -->\n <div v-if=\"recalculatingAnnotations\" class=\"extracting-data\">\n <ExtractingData />\n </div>\n\n <!-- When document data is still loading -->\n <div\n v-else-if=\"!getAnnotationsFiltered.annotationSets || loading\"\n class=\"document-annotations-loading\"\n >\n <div\n v-for=\"n in numberOfLoadingAnnotations\"\n :key=\"n\"\n class=\"loading-annotation-set\"\n >\n <LoadingAnnotations />\n </div>\n </div>\n <div\n v-else-if=\"\n getAnnotationsFiltered.annotationSets.length === 0 &&\n !isSearchingAnnotationList\n \"\n class=\"empty-annotation-sets\"\n >\n <EmptyState />\n </div>\n\n <div v-else ref=\"annotationList\" class=\"annotation-set-list\">\n <AnnotationFilters\n v-if=\"isDocumentEditable\"\n @openAll=\"openAllAccordions\"\n />\n\n <div\n v-if=\"\n getAnnotationsFiltered.annotationSets.length === 0 &&\n isSearchingAnnotationList\n \"\n class=\"empty-annotation-sets\"\n >\n <EmptyState :is-search=\"true\" />\n </div>\n <div v-if=\"annotationSetsAccordion\" class=\"annotation-sets-accordions\">\n <div\n v-for=\"(\n annotationSet, indexGroup\n ) in getAnnotationsFiltered.annotationSets\"\n :key=\"indexGroup\"\n :class=\"[\n 'annotation-set-group',\n indexGroup === 0 && 'no-top-margin',\n !isAccordionOpen(annotationSet) && 'annotation-set-collapsed',\n ]\"\n >\n <div class=\"label-set-header\" @click=\"toggleAccordion(annotationSet)\">\n <div class=\"label-set-name\">\n <b-icon\n :icon=\"\n isAccordionOpen(annotationSet) ? 'angle-up' : 'angle-down'\n \"\n size=\"is-12\"\n />\n {{\n `${annotationSet.label_set.name} ${numberOfAnnotationSetGroup(\n annotationSet\n )}`\n }}\n </div>\n <div\n v-if=\"\n !publicView &&\n !isDocumentReviewed &&\n annotationSet.labels.length !== 0\n \"\n class=\"labelset-action-buttons\"\n >\n <AnnotationSetActionButtons\n :is-placeholder=\"!isAccordionOpen(annotationSet)\"\n :number-of-empty-labels-in-annotation-set=\"\n emptyLabels(annotationSet).length\n \"\n :number-of-not-correct-annotations-in-annotation-set=\"\n notCorrectAnnotations(annotationSet).length\n \"\n @mark-all-empty-missing=\"\n markAnnotationsAsMissing(null, null, annotationSet, true)\n \"\n @hover-annotation-set-to-mark-missing=\"\n handleHoverAnnotationSet(annotationSet, 'missing')\n \"\n @leave-annotation-set-to-mark-missing=\"\n handleHoverAnnotationSet(null)\n \"\n @accept-all-pending-annotations=\"\n acceptPendingAnnotationsInAnnotationSet(annotationSet)\n \"\n @hover-annotation-set-to-accept=\"\n handleHoverAnnotationSet(annotationSet, 'accept')\n \"\n @leave-annotation-set-to-accept=\"handleHoverAnnotationSet(null)\"\n />\n </div>\n </div>\n\n <b-collapse\n :model-value=\"isAccordionOpen(annotationSet)\"\n animation=\"slide\"\n >\n <div\n v-if=\"annotationSet.labels.length > 0\"\n class=\"annotation-sets-list\"\n >\n <div v-for=\"label in annotationSet.labels\" :key=\"label.id\">\n <div\n v-if=\"!(label.annotations.length === 0 && publicView)\"\n class=\"labels\"\n >\n <DocumentLabel\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n :index-group=\"indexGroup\"\n @handle-missing-annotation=\"markAnnotationsAsMissing\"\n />\n </div>\n </div>\n </div>\n\n <div\n v-else-if=\"annotationSet.labels.length === 0\"\n class=\"no-labels\"\n >\n <span>\n {{\n isSearchingAnnotationList\n ? $t(\"no_results\")\n : $t(\"no_labels_in_set\")\n }}</span\n >\n <!-- eslint-disable vue/no-v-html -->\n <span\n v-if=\"\n showBranding &&\n isDocumentEditable &&\n !isSearchingAnnotationList\n \"\n v-html=\"$t('link_to_add_labels')\"\n />\n </div>\n\n <div\n v-else-if=\"\n !annotationSetHasAnnotations(annotationSet) && publicView\n \"\n class=\"no-labels\"\n >\n <span> {{ $t(\"no_annotations_in_annotation_set\") }}</span>\n </div>\n </b-collapse>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport EmptyState from \"./EmptyState\";\nimport ExtractingData from \"./ExtractingData\";\nimport AnnotationSetActionButtons from \"./AnnotationSetActionButtons\";\nimport DocumentLabel from \"./DocumentLabel\";\nimport AnnotationFilters from \"./AnnotationFilters\";\nimport LoadingAnnotations from \"./LoadingAnnotations\";\n\n/**\n * This component loads all annotations for one document\n */\nexport default {\n components: {\n EmptyState,\n ExtractingData,\n AnnotationSetActionButtons,\n DocumentLabel,\n LoadingAnnotations,\n AnnotationFilters,\n },\n data() {\n return {\n count: 0,\n jumpToNextAnnotation: false,\n numberOfLoadingAnnotations: 3,\n annotationSetsAccordion: null,\n };\n },\n\n computed: {\n ...mapState(\"display\", [\"showAnnSetTable\", \"showBranding\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"document\", [\n \"annotationSets\",\n \"documentId\",\n \"annotationId\",\n \"annotationSetId\",\n \"recalculatingAnnotations\",\n \"publicView\",\n \"editAnnotation\",\n \"loading\",\n \"labels\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapGetters(\"document\", [\n \"numberOfAnnotationSetGroup\",\n \"getAnnotationsFiltered\",\n \"emptyLabels\",\n \"notCorrectAnnotations\",\n \"isDocumentReviewed\",\n \"annotationSetOfAnnotation\",\n \"isAnnotationInAnnotationSet\",\n \"isSearchingAnnotationList\",\n ]),\n isAnnotationBeingEdited() {\n return this.editAnnotation && this.editAnnotation.id;\n },\n isDocumentEditable() {\n return !this.publicView && !this.isDocumentReviewed && !this.editMode;\n },\n },\n watch: {\n editAnnotation(newValue) {\n if (!newValue && !this.jumpToNextAnnotation) {\n this.count = 0;\n }\n },\n acceptAnnotation(newValue, oldValue) {\n if (!newValue && oldValue) {\n this.focusOnNextAnnotation();\n this.jumpToNextAnnotation = false;\n }\n },\n getAnnotationsFiltered(newFiltered, oldFiltered) {\n // just load accordions again if the length was changed\n if (\n newFiltered.annotationSets.length !== oldFiltered.annotationSets.length\n ) {\n this.loadAccordions(\n newFiltered.annotationSets,\n oldFiltered.annotationSets\n );\n }\n },\n annotationId(newAnnotationId) {\n if (newAnnotationId) {\n const annotationSet = this.annotationSetOfAnnotation(newAnnotationId);\n if (annotationSet) {\n const newAnnotationSetsAccordion = {\n ...this.annotationSetsAccordion,\n };\n newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] = true;\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n }\n }\n },\n },\n created() {\n window.addEventListener(\"keydown\", this.keyDownHandler);\n\n // validation for when page is hot reloaded and data reinitialize\n if (\n this.getAnnotationsFiltered.annotationSets &&\n this.getAnnotationsFiltered.annotationSets.length > 0\n ) {\n this.loadAccordions(this.getAnnotationsFiltered.annotationSets);\n }\n },\n unmounted() {\n window.removeEventListener(\"keydown\", this.keyDownHandler);\n },\n methods: {\n annotationSetShouldAppear(annotationSet) {\n return !(\n annotationSet.labels.length === 0 && this.isSearchingAnnotationList\n );\n },\n isAccordionOpen(annotationSet) {\n return (\n this.isSearchingAnnotationList ||\n this.annotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] === true\n );\n },\n toggleAccordion(annotationSet) {\n const newAnnotationSetsAccordion = { ...this.annotationSetsAccordion };\n newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] =\n !newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ];\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n },\n openAllAccordions() {\n const newAnnotationSetsAccordion = { ...this.annotationSetsAccordion };\n for (var key in newAnnotationSetsAccordion) {\n newAnnotationSetsAccordion[key] = true;\n }\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n },\n loadAccordions(newAnnotationSets) {\n if (newAnnotationSets) {\n const isFirstTime = this.annotationSetsAccordion === null;\n const newAnnotationSetsAccordion = {};\n const annotationSetsCreated = [];\n\n newAnnotationSets.forEach((newAnnotationSet, index) => {\n if (isFirstTime && this.annotationSetId) {\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = newAnnotationSet.id == this.annotationSetId;\n } else if (isFirstTime && this.annotationId) {\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = this.isAnnotationInAnnotationSet(\n newAnnotationSet,\n this.annotationId\n );\n } else if (isFirstTime && index === 0) {\n // open first one by default\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = true;\n } else {\n const wasCreated = annotationSetsCreated.find(\n (annotationSetCreated) =>\n annotationSetCreated.id &&\n newAnnotationSet.id &&\n newAnnotationSet.id === annotationSetCreated.id\n );\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = wasCreated !== undefined;\n }\n });\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n }\n },\n annotationSetHasAnnotations(annotationSet) {\n const found = annotationSet.labels.find(\n (label) => label.annotations.length > 0\n );\n return found;\n },\n\n focusOnNextAnnotation() {\n const annotations = this.createArray(\"keyboard-nav\");\n\n if (annotations[this.count]) {\n annotations[this.count].click();\n } else {\n this.count = 0;\n return;\n }\n },\n\n scrollToFocusedAnnotationFromKeyHandler() {\n if (!this.editAnnotation) return;\n\n // Get label name for the selected annotation\n let labelForAnnotation;\n\n this.labels.map((label) => {\n const found = label.annotations.find(\n (ann) => ann.id === this.editAnnotation.id\n );\n\n if (found) {\n labelForAnnotation = label;\n return;\n }\n });\n\n const currentAnnotation = this.getAnnotationsFiltered.annotations.find(\n (ann) => ann.id === this.editAnnotation.id\n );\n\n if (currentAnnotation) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation: currentAnnotation,\n label: labelForAnnotation,\n span: currentAnnotation.span[0],\n scrollTo: false,\n });\n\n this.$store.dispatch(\"document/scrollToDocumentAnnotationSelected\");\n }\n },\n\n exitEditMode() {\n this.count = 0;\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/endLoading\");\n },\n\n createArray(className) {\n if (this.$refs.annotationList) {\n return Array.from(\n this.$refs.annotationList.getElementsByClassName(className)\n );\n }\n },\n\n keyDownHandler(event) {\n // only allow keyboard navigation if we are not in public view mode\n if (!this.isDocumentEditable) return;\n\n // Exit edit mode and navigation\n if (event.key === \"Escape\") {\n this.exitEditMode();\n return;\n }\n\n // Not allow starting edit mode with ArrowUp key\n if (event.key === \"ArrowUp\" && !this.isAnnotationBeingEdited) return;\n\n // Get all the annotation elements\n let annotations = this.createArray(\"keyboard-nav\");\n\n // Get clicked element to get the index\n const clickedAnnotations = this.createArray(\"clicked-ann\");\n\n // get index of currently active element\n const currentAnnIndex = annotations.findIndex(\n (el) => el === clickedAnnotations[0]\n );\n\n // navigate with the arrow up or down keys\n if (event.key === \"ArrowDown\") {\n // open accordions\n this.openAllAccordions();\n\n // Check if we are focusing on the Finish Review button\n if (this.count >= annotations.length) {\n const finishBtn = this.createArray(\"finish-review-btn\");\n\n if (finishBtn && finishBtn[0]) {\n finishBtn[0].focus();\n }\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.count = 0;\n if (event.key === \"Enter\" && !finishBtn.disabled) {\n finishBtn.click();\n }\n return;\n }\n\n /**\n * Enable navigation when some annotation is already focused\n */\n // Update count to avoid restarting the navigation\n if (clickedAnnotations[0]) {\n this.count = currentAnnIndex + 1;\n }\n\n const nextElement = annotations[this.count];\n if (nextElement.className.includes(\"label-group\")) {\n // open group and then click on annotation\n // index is the same since group is removed from keyboard nav\n nextElement.click();\n this.$nextTick(() => {\n annotations = this.createArray(\"keyboard-nav\");\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count++;\n });\n } else if (annotations[this.count]) {\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count++;\n }\n\n // scroll to current annotation if not empty\n } else if (event.key === \"ArrowUp\") {\n // Check if the event happened on the first element from the array\n // If so, reset count to 0\n if (clickedAnnotations[0] === annotations[0]) {\n this.count = 0;\n return;\n }\n\n /**\n * Enable navigation when some annotation is already focused\n */\n // Update count to avoid restarting the navigation\n if (clickedAnnotations[0]) {\n this.count = currentAnnIndex - 1;\n }\n\n const previousElement = annotations[this.count];\n if (previousElement.className.includes(\"label-group\")) {\n // open group and then click on annotation\n // index is the same since group is removed from keyboard nav\n previousElement.click();\n this.$nextTick(() => {\n annotations = this.createArray(\"keyboard-nav\");\n // since we are going backwards, we need to go to the last annotation of group\n const currentAnnIndex = annotations.findIndex(\n (el) => el === clickedAnnotations[0]\n );\n this.count = currentAnnIndex - 1;\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count--;\n });\n } else if (annotations[this.count]) {\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count--;\n }\n } else {\n // Check for ENTER or DELETE\n // Accept annotation\n if (event.key === \"Enter\") {\n if (!this.getAnnotationsFiltered.annotations || !this.editAnnotation)\n return;\n\n const currentAnn = this.getAnnotationsFiltered.annotations.find(\n (a) => a.id === this.editAnnotation.id\n );\n\n if (!this.editAnnotation && this.editAnnotation.id !== currentAnn.id)\n return;\n // set focus on next annotation\n this.count = currentAnnIndex + 1;\n this.jumpToNextAnnotation = true;\n } else if (\n event.key === \"Delete\" &&\n annotations[currentAnnIndex].className.includes(\"label-empty\") &&\n annotations[currentAnnIndex].className.includes(\"clicked\")\n ) {\n // Mark annotation as missing\n if (this.editAnnotation.id === annotations[currentAnnIndex].id) {\n this.markAnnotationsAsMissing();\n }\n this.jumpToNextAnnotation = true;\n } else {\n return;\n }\n }\n },\n\n markAnnotationsAsMissing(label, labelSet, annotationSet, markAllMissing) {\n let missing;\n\n if (label && labelSet && !markAllMissing) {\n // if annotation is marked as missing by clicking the button\n\n missing = [\n {\n document: parseInt(this.documentId),\n label: label,\n label_set: labelSet,\n annotation_set: annotationSet,\n },\n ];\n } else if (\n this.editAnnotation &&\n this.editAnnotation.id !== null &&\n this.editAnnotation.annotationSet\n ) {\n // if annotation is marked as missing from \"delete\" key\n\n missing = [\n {\n document: parseInt(this.documentId),\n label: this.editAnnotation.label.id,\n label_set: this.editAnnotation.labelSet.id,\n annotation_set: this.editAnnotation.annotationSet.id,\n },\n ];\n } else if (annotationSet && markAllMissing) {\n // mark all annotations as missing in annotation set\n\n // Check if any of the empty annotations was already marked as missing individually\n // and remove them\n const toMarkAsMissing = this.emptyLabels(annotationSet);\n\n missing = toMarkAsMissing.map((label) => {\n return {\n document: parseInt(this.documentId),\n label: label.id,\n label_set: annotationSet.label_set.id,\n annotation_set: annotationSet.id,\n };\n });\n }\n\n this.$store.dispatch(\"document/setAnnotationsMarkedAsMissing\", missing);\n\n this.$store\n .dispatch(\"document/addMissingAnnotations\", missing)\n .then((response) => {\n if (response) {\n this.jumpToNextAnnotation = true;\n }\n\n this.jumpToNextAnnotation = false;\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/setAnnotationsMarkedAsMissing\", null);\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n });\n },\n\n handleHoverAnnotationSet(annotationSet, type) {\n let hovered;\n\n if (!type && !annotationSet) {\n hovered = null;\n } else {\n hovered = {\n annotationSet: annotationSet,\n type: type,\n };\n }\n\n this.$store.dispatch(\"document/setHoveredAnnotationSet\", hovered);\n },\n\n acceptPendingAnnotationsInAnnotationSet(annotationSet) {\n const annotationsToAccept = [];\n\n annotationSet.labels.map((label) => {\n if (label.annotations.length !== 0) {\n label.annotations.map((ann) => {\n if (!ann.revised) {\n annotationsToAccept.push(ann.id);\n }\n });\n }\n });\n\n if (annotationsToAccept.length !== 0) {\n const acceptedAnnotations = {\n ids: annotationsToAccept,\n is_correct: true,\n revised: true,\n };\n\n this.$store\n .dispatch(\"document/updateMultipleAnnotations\", acceptedAnnotations)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n },\n\n openAnnotationSetTable(tableSet) {\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n if (this.showAnnSetTable && this.showAnnSetTable === tableSet) {\n this.$store.dispatch(\"display/toggleAnnSetTable\", tableSet);\n } else {\n this.$store.dispatch(\"display/showAnnSetTable\", tableSet);\n }\n },\n cleanSelection() {\n this.$store.dispatch(\"document/setAnnotationId\", null);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div class=\"empty-container\">\n <EmptyStateImg />\n <div class=\"empty-text\">\n <p class=\"title\">\n {{ $t(\"no_label_sets_found\") }}\n </p>\n <p v-if=\"!isSearch\" class=\"description\">\n {{ $t(\"no_label_sets_found_description\") }}\n </p>\n </div>\n </div>\n</template>\n<script>\nimport EmptyStateImg from \"../../assets/images/EmptyStateImg\";\nexport default {\n name: \"EmptyState\",\n components: { EmptyStateImg },\n props: {\n isSearch: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/empty_state.scss\"></style>\n","<template>\n <svg\n width=\"122\"\n height=\"165\"\n viewBox=\"0 0 122 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"61\"\n cy=\"61\"\n r=\"61\"\n fill=\"#F7F7F7\"\n />\n <g filter=\"url(#filter0_d_2720_20884)\">\n <rect\n x=\"22\"\n y=\"29\"\n width=\"77.8605\"\n height=\"108\"\n rx=\"4\"\n fill=\"white\"\n />\n </g>\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"41.584\"\n width=\"18.8372\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"59.3965\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"71.2109\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"83.0254\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32\"\n y=\"97\"\n width=\"58\"\n height=\"28\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <defs>\n <filter\n id=\"filter0_d_2720_20884\"\n x=\"2\"\n y=\"17\"\n width=\"117.86\"\n height=\"148\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood\n flood-opacity=\"0\"\n result=\"BackgroundImageFix\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"8\" />\n <feGaussianBlur stdDeviation=\"10\" />\n <feComposite\n in2=\"hardAlpha\"\n operator=\"out\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.07 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2720_20884\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_2720_20884\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg>\n</template>\n<script>\nexport default {\n name: \"EmptyStateImg\"\n};\n</script>\n","import { render } from \"./EmptyStateImg.vue?vue&type=template&id=6e2ab566\"\nimport script from \"./EmptyStateImg.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyStateImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./EmptyState.vue?vue&type=template&id=f6b38116&scoped=true\"\nimport script from \"./EmptyState.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyState.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/empty_state.scss?vue&type=style&index=0&id=f6b38116&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f6b38116\"]])\n\nexport default __exports__","<template>\n <div class=\"data-extraction-container\">\n <div class=\"loading-container\">\n <b-icon icon=\"spinner\" class=\"fa-spin spinner-icon\" />\n </div>\n <div class=\"data-extraction-text\">\n <p class=\"title\">\n <span v-if=\"redirectingUser\"> {{ $t(\"wait_title\") }}</span>\n <span v-else>\n {{ $t(\"data_being_extracted\") }}\n </span>\n </p>\n <div class=\"description\">\n <span v-if=\"redirectingUser\">\n <p>{{ $t(\"redirecting_to_documents_list\") }}</p>\n </span>\n <span v-else>\n <p>{{ $t(\"analysing_document\") }}</p>\n <p>{{ $t(\"few_minutes\") }}</p>\n </span>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"ExtractingData\",\n computed: {\n ...mapState(\"edit\", [\"redirectingUser\"]),\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/extracting_data.scss\"></style>\n","import { render } from \"./ExtractingData.vue?vue&type=template&id=22a5db6f&scoped=true\"\nimport script from \"./ExtractingData.vue?vue&type=script&lang=js\"\nexport * from \"./ExtractingData.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/extracting_data.scss?vue&type=style&index=0&id=22a5db6f&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-22a5db6f\"]])\n\nexport default __exports__","<template>\n <div class=\"action-buttons\">\n <!-- mark all empty labels as missing -->\n <div\n class=\"missing-button-container all-missing\"\n @mouseenter=\"mouseenterAnnotationSet('missing')\"\n @mouseleave=\"mouseleaveAnnotationSet\"\n >\n <b-button\n type=\"is-ghost\"\n class=\"button-action is-button-text-ghost\"\n :disabled=\"numberOfEmptyLabelsInAnnotationSet === 0\"\n @click=\"markAllAsMissing\"\n >\n {{ isPlaceholder ? $t(\"missing_counter\") : $t(\"mark_all_missing\") }} ({{\n numberOfEmptyLabelsInAnnotationSet\n }})\n </b-button>\n </div>\n\n <!-- accept all pending annotations -->\n <div\n class=\"accept-all\"\n @mouseenter=\"mouseenterAnnotationSet('accept')\"\n @mouseleave=\"mouseleaveAnnotationSet\"\n >\n <b-button\n type=\"is-ghost\"\n class=\"button-action is-button-text-ghost accept-all-icon\"\n :disabled=\"numberOfNotCorrectAnnotationsInAnnotationSet === 0\"\n @click=\"acceptAllPending\"\n >\n {{ isPlaceholder ? $t(\"pending_counter\") : $t(\"accept_group\") }} ({{\n numberOfNotCorrectAnnotationsInAnnotationSet\n }})\n </b-button>\n </div>\n </div>\n</template>\n<script>\n/* Component for showing actions for each Annotation Set */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"AnnotationSetActionButtons\",\n props: {\n isPlaceholder: {\n type: Boolean,\n default: false,\n },\n numberOfEmptyLabelsInAnnotationSet: {\n type: Number,\n default: 0,\n },\n numberOfNotCorrectAnnotationsInAnnotationSet: {\n type: Number,\n default: 0,\n },\n },\n computed: {\n ...mapState(\"document\", [\"publicView\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n },\n methods: {\n mouseenterAnnotationSet(type) {\n if (type == \"missing\") {\n this.$emit(\"hover-annotation-set-to-mark-missing\");\n }\n\n if (type == \"accept\") {\n this.$emit(\"hover-annotation-set-to-accept\");\n }\n },\n mouseleaveAnnotationSet() {\n this.$emit(\"leave-annotation-set-to-accept\");\n this.$emit(\"leave-annotation-set-to-mark-missing\");\n },\n markAllAsMissing(e) {\n if (!this.isPlaceholder) {\n e.stopPropagation();\n this.$emit(\"mark-all-empty-missing\");\n }\n },\n acceptAllPending(e) {\n if (!this.isPlaceholder) {\n e.stopPropagation();\n this.$emit(\"accept-all-pending-annotations\");\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_action_buttons.scss\"\n></style>\n","import { render } from \"./AnnotationSetActionButtons.vue?vue&type=template&id=24255449&scoped=true\"\nimport script from \"./AnnotationSetActionButtons.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationSetActionButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_action_buttons.scss?vue&type=style&index=0&id=24255449&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-24255449\"]])\n\nexport default __exports__","<template>\n <div class=\"label\">\n <div v-if=\"annotationSet && annotationsToShow().length > 0\">\n <AnnotationRow\n v-for=\"(annotation, index) in annotationsToShow()\"\n :key=\"index\"\n :annotation=\"annotation\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n />\n </div>\n <div v-else-if=\"annotationSet\">\n <AnnotationRow\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n />\n </div>\n <div v-else-if=\"labelSet\">\n <AnnotationRow :label=\"label\" :label-set=\"labelSet\" />\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport AnnotationRow from \"./AnnotationRow\";\n\n/**\n * This component shows each label and its annotations\n */\nexport default {\n name: \"DocumentLabel\",\n components: { AnnotationRow },\n props: {\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n },\n computed: {\n ...mapState(\"document\", [\"annotationId\", \"publicView\"]),\n ...mapGetters(\"document\", [\n \"numberOfAcceptedAnnotationsInLabel\",\n \"isLabelMultiFalseAndGroupOfAnns\",\n ]),\n },\n methods: {\n annotationsToShow() {\n if (this.isLabelMultiFalseAndGroupOfAnns(this.label)) {\n return [this.label.annotations[0]];\n } else {\n return this.label.annotations;\n }\n },\n labelHasPendingAnnotations(hoveredSet) {\n if (!hoveredSet) return;\n\n const found = this.label.annotations.find((ann) => !ann.is_correct);\n\n return this.annotationSet.id === hoveredSet.annotationSet.id && found;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div\n :class=\"[\n 'annotation-row',\n isSelected && 'selected',\n hoverEmptyLabelRows && 'hovered-empty-labels',\n hoverPendingAnnotationRows && 'hovered-pending-annotations',\n annotationIsNotFound(annotationSet, label) && 'missing',\n isAnnotationInEditMode(currentAnnotationId()) && 'editing',\n publicView && 'clickable-cursor',\n ]\"\n @click=\"onAnnotationClick\"\n @mouseover=\"hoveredAnnotation = currentAnnotationId()\"\n @mouseleave=\"hoveredAnnotation = null\"\n >\n <div class=\"annotations-width-slider\">\n <b-slider\n v-model=\"labelContainerWidth\"\n type=\"is-move\"\n :min=\"20\"\n :max=\"80\"\n :custom-formatter=\"(val) => `${$t('label_size')} ${val}%`\"\n class=\"is-full-height show-hover show-line\"\n :disabled=\"isAnnotationInEditMode()\"\n />\n </div>\n <div\n class=\"annotation-row-left\"\n :style=\"`width:${labelWidth}%`\"\n @mouseenter=\"onAnnotationHoverEnter(defaultSpan)\"\n @mouseleave=\"onAnnotationHoverLeave\"\n >\n <div class=\"annotation-icon\">\n <AnnotationDetails\n :description=\"label.description\"\n :annotation=\"annotation\"\n :annotation-set=\"annotationSet\"\n :label=\"label\"\n />\n </div>\n\n <div\n v-if=\"showLabel\"\n :class=\"[\n 'label-name',\n annotationIsNotFound(annotationSet, label) && 'not-found-text',\n ]\"\n >\n <span @click=\"selectAnnotation\">{{ label.name }} </span>\n </div>\n\n <div\n v-if=\"\n showAnnotationTranslations &&\n annotation &&\n annotation.translated_string\n \"\n :class=\"['annotation-translation', !isDocumentReviewed && 'pointer']\"\n @click=\"editAnnotationTranslation(annotation.id)\"\n >\n <b-tooltip :animated=\"false\" position=\"is-bottom\">\n <div class=\"icon\">\n <TranslateArrows :translation=\"annotation.translated_string\" />\n </div>\n\n <template #content>\n <div class=\"translation-details\">\n <div class=\"translation-title\">\n <span>{{ $t(\"translated_string_title\") }}</span>\n <span\n :class=\"[\n 'translated-string',\n !annotation.translated_string && 'no-translation',\n ]\"\n >\n {{\n annotation.translated_string\n ? annotation.translated_string\n : $t(\"no_translated_string\")\n }}\n </span>\n </div>\n </div>\n <div class=\"translation-info\">\n <div v-if=\"!isDocumentReviewed\" class=\"annotation-details-link\">\n {{\n annotation.translated_string\n ? $t(\"edit_translation\")\n : $t(\"add_translation\")\n }}\n </div>\n </div>\n </template>\n </b-tooltip>\n </div>\n </div>\n\n <div class=\"annotation-row-right\" :style=\"`width:${annotationWidth}%`\">\n <div class=\"annotation-content\">\n <div\n v-if=\"isAnnotationInEditMode(currentAnnotationId()) && spanLoading\"\n >\n <b-icon style=\"width: 16px\" icon=\"spinner\" class=\"fa-spin\" />\n </div>\n <div v-else-if=\"annotation\" class=\"annotation-items\">\n <b-checkbox\n v-if=\"annotation.metadata && annotation.metadata.checkbox\"\n v-model=\"isChecked\"\n class=\"annotation-checkbox\"\n />\n <div class=\"annotation-spans\">\n <div\n v-for=\"(span, index) in spanForEditing\n ? spanSelection\n : annotation.span\"\n :key=\"index\"\n @mouseenter=\"onAnnotationHoverEnter(span)\"\n @mouseleave=\"onAnnotationHoverLeave\"\n >\n <AnnotationContent\n :ref=\"`span_${annotation.id}_${index}`\"\n :annotation=\"annotation\"\n :span=\"span\"\n :span-index=\"index\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :is-hovered=\"hoveredAnnotation\"\n @save-annotation-changes=\"handleSaveChanges\"\n />\n </div>\n </div>\n </div>\n <div v-else>\n <div\n v-if=\"\n spanSelection.length > 0 &&\n isAnnotationInEditMode(currentAnnotationId())\n \"\n >\n <EmptyAnnotation\n v-for=\"(span, index) in spanSelection\"\n :key=\"index\"\n :span=\"span\"\n :span-index=\"index\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"labelSet\"\n :is-hovered=\"hoveredAnnotation\"\n :is-missing-annotation=\"\n annotationIsNotFound(annotationSet, label)\n \"\n @save-empty-annotation-changes=\"saveEmptyAnnotationChanges\"\n />\n </div>\n <EmptyAnnotation\n v-else\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"labelSet\"\n :is-hovered=\"hoveredAnnotation\"\n :is-missing-annotation=\"annotationIsNotFound(annotationSet, label)\"\n @save-empty-annotation-changes=\"saveEmptyAnnotationChanges\"\n />\n </div>\n </div>\n <div\n v-if=\"showAnnotationActions()\"\n :class=\"`buttons-container ${\n isAnnotationInEditMode(currentAnnotationId()) ? 'is-ann-editing' : ''\n }`\"\n >\n <AnnotationActionButtons\n :annotation=\"annotation\"\n :label=\"label\"\n :show-cancel=\"showCancelButton()\"\n :show-accept=\"showAcceptButton()\"\n :show-decline=\"showDeclineButton()\"\n :show-missing=\"showMissingButton()\"\n :show-search=\"showMissingButton()\"\n :show-save=\"showSaveButton()\"\n :show-restore=\"showRestoreButton()\"\n :show-link=\"showLinkButton()\"\n :is-loading=\"isLoading\"\n @mark-as-missing=\"handleMissingAnnotation\"\n @save=\"handleSaveChanges\"\n @accept=\"handleSaveChanges\"\n @decline=\"handleSaveChanges(true)\"\n @cancel=\"handleCancelButton\"\n @restore=\"handleRestore\"\n @search=\"searchLabelInDocument\"\n @link=\"copyAnnotationLink\"\n />\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapActions, mapGetters, mapState } from \"vuex\";\nimport AnnotationDetails from \"./AnnotationDetails\";\nimport AnnotationContent from \"./AnnotationContent\";\nimport EmptyAnnotation from \"./EmptyAnnotation\";\nimport AnnotationActionButtons from \"./AnnotationActionButtons\";\nimport TranslateArrows from \"../../assets/images/TranslateArrows\";\n\nimport { isElementArray } from \"../../utils/utils\";\nimport api from \"../../api\";\n\nexport default {\n name: \"AnnotationRow\",\n components: {\n AnnotationDetails,\n AnnotationContent,\n EmptyAnnotation,\n AnnotationActionButtons,\n TranslateArrows,\n },\n props: {\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n label: {\n type: Object,\n required: true,\n },\n annotation: {\n type: Object,\n default: null,\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n },\n data() {\n const checkboxValue =\n this.annotation &&\n this.annotation.metadata &&\n this.annotation.metadata.checkbox &&\n this.annotation.metadata.checkbox.is_checked;\n return {\n isLoading: false,\n isSelected: false,\n // annotationAnimationTimeout: null,\n hoveredAnnotation: null,\n checkboxDefaultValue: checkboxValue,\n isCheckboxAvailable: false,\n isChecked: checkboxValue,\n labelContainerWidth: 0,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"annotationId\",\n \"hoveredAnnotationSet\",\n \"publicView\",\n \"newAcceptedAnnotations\",\n \"annotationsMarkedAsMissing\",\n \"documentId\",\n \"showActionError\",\n \"missingAnnotations\",\n ]),\n ...mapState(\"selection\", [\n \"spanSelection\",\n \"selectedEntities\",\n \"spanLoading\",\n ]),\n ...mapState(\"display\", [\"labelWidth\", \"annotationWidth\"]),\n ...mapState(\"project\", [\"showAnnotationTranslations\"]),\n ...mapGetters(\"document\", [\n \"isAnnotationInEditMode\",\n \"annotationIsNotFound\",\n \"isDocumentReviewed\",\n ]),\n defaultSpan() {\n if (\n this.annotation &&\n this.annotation.span &&\n this.annotation.span.length > 0\n ) {\n return this.annotation.span[0];\n }\n return null;\n },\n spanForEditing() {\n return (\n this.spanSelection &&\n isElementArray(this.spanSelection) &&\n this.isAnnotationInEditMode(this.currentAnnotationId())\n );\n },\n isAnnotation() {\n return (\n this.annotation &&\n this.isAnnotationInEditMode(\n this.currentAnnotationId(),\n this.editAnnotation.index\n )\n );\n },\n hoverEmptyLabelRows() {\n return (\n this.hoveredAnnotationSet &&\n this.hoveredAnnotationSet.type == \"missing\" &&\n this.annotationSet &&\n !this.annotationIsNotFound(this.annotationSet, this.label) &&\n this.annotationSet.id === this.hoveredAnnotationSet.annotationSet.id &&\n this.annotationSet.label_set.id ===\n this.hoveredAnnotationSet.annotationSet.label_set.id &&\n this.hoveredEmptyLabels() === this.label.id\n );\n },\n hoverPendingAnnotationRows() {\n return (\n this.hoveredAnnotationSet &&\n this.hoveredAnnotationSet.type == \"accept\" &&\n this.annotation &&\n this.hoveredNotCorrectAnnotations() === this.annotation.id\n );\n },\n },\n watch: {\n labelWidth(width) {\n this.labelContainerWidth = width;\n },\n labelContainerWidth(width) {\n this.setLabelWidth(width);\n },\n annotationId(newAnnotationId) {\n this.checkAnnotationSelection(newAnnotationId);\n },\n editAnnotation(newValue) {\n if (!newValue) {\n this.isLoading = false;\n }\n },\n newAcceptedAnnotations(newValue) {\n if (newValue) {\n this.enableLoading(newValue);\n } else {\n this.isLoading = false;\n }\n },\n annotationsMarkedAsMissing(newValue) {\n if (newValue) {\n this.enableLoading();\n } else {\n this.isLoading = false;\n }\n },\n showActionError(newValue) {\n if (newValue) {\n this.isLoading = false;\n }\n },\n selectedEntities(newValue) {\n if (!newValue) return;\n\n if (this.isAnnotationInEditMode(this.currentAnnotationId())) {\n this.isLoading = true;\n }\n },\n spanSelection(newValue) {\n // check if spanSelection has new value from entity selection\n // to stop loading after the text appears in the field\n if (newValue) {\n this.isLoading = false;\n }\n },\n isChecked() {\n if (this.isCheckboxAvailable) {\n this.handleCheckboxChanged(this.isChecked);\n } else {\n if (this.isChecked !== this.checkboxDefaultValue) {\n this.$buefy.dialog.confirm({\n container: \"#app .dv-ui-app-container\",\n canCancel: [\"button\"],\n message: this.$t(\"edit_ann_content_warning\"),\n onConfirm: () => {\n this.isCheckboxAvailable = true;\n this.handleCheckboxChanged(this.isChecked);\n },\n onCancel: () => {\n this.isChecked = !this.isChecked;\n },\n });\n }\n }\n },\n },\n mounted() {\n this.checkAnnotationSelection(this.annotationId);\n this.labelContainerWidth = this.labelWidth;\n },\n methods: {\n ...mapActions(\"display\", [\"setLabelWidth\"]),\n handleCheckboxChanged(value) {\n this.$store\n .dispatch(\"document/updateAnnotation\", {\n updatedValues: {\n metadata: {\n checkbox: {\n is_checked: value,\n },\n },\n },\n annotationId: this.annotation.id,\n annotationSet: this.annotationSet,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n },\n checkAnnotationSelection(newAnnotationId) {\n if (\n newAnnotationId &&\n this.annotation &&\n this.annotation.id == newAnnotationId\n ) {\n this.isSelected = true;\n // remove annotation selection after some time\n // this.annotationAnimationTimeout = setTimeout(() => {\n // this.$store.dispatch(\"document/setSidebarAnnotationSelected\", null);\n // this.isSelected = false;\n // }, 1200);\n\n // Check if sidebarAnnotationSelected changed from a click or hover\n const runAnimation = () => {\n this.$el.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\",\n });\n };\n runAnimation();\n } else {\n this.isSelected = false;\n }\n },\n currentAnnotationId() {\n if ((!this.annotationSet && !this.labelSet) || !this.label) return;\n\n if (this.annotation && this.annotation.id) return this.annotation.id;\n\n const setId =\n this.annotationSet && this.annotationSet.id\n ? this.annotationSet.id\n : this.labelSet.id;\n\n return `${setId}_${this.label.id}`;\n },\n onAnnotationHoverEnter(span) {\n if (span) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation: this.annotation,\n label: this.label,\n span,\n scrollTo: false,\n });\n }\n },\n onAnnotationHoverLeave() {\n this.$store.dispatch(\"document/disableDocumentAnnotationSelected\");\n },\n onAnnotationClick() {\n this.$store.dispatch(\"document/scrollToDocumentAnnotationSelected\");\n },\n hoveredEmptyLabels() {\n // This method will change the style of the Empty Annotations in the same Label Set\n // when the \"mark all as missing\" button is hovered\n if (!this.hoveredAnnotationSet) return;\n\n const labels = this.hoveredAnnotationSet.annotationSet.labels.map(\n (label) => {\n return JSON.parse(JSON.stringify(label));\n }\n );\n const found = labels.find((l) => l.id === this.label.id);\n\n if (found && found.annotations.length === 0) return found.id;\n return null;\n },\n hoveredNotCorrectAnnotations() {\n // This method will change the style of Annotations in the same Label Set\n // when the \"Accept all\" button is hovered\n if (!this.hoveredAnnotationSet) return;\n\n const annotations =\n this.hoveredAnnotationSet.annotationSet.labels.flatMap((label) => {\n return label.annotations;\n });\n\n // Check if there are no annotations\n if (annotations.length === 0) return;\n\n const found = annotations.find(\n (ann) => ann.id === this.annotation.id && !ann.is_correct\n );\n\n if (found) {\n return found.id;\n } else {\n return null;\n }\n },\n showAnnotationActions() {\n return (\n !this.publicView &&\n !this.isDocumentReviewed &&\n (this.isLoading ||\n this.showLinkButton() ||\n this.showAcceptButton() ||\n this.showDeclineButton() ||\n this.showMissingButton() ||\n this.showCancelButton() ||\n this.showSaveButton() ||\n this.showRestoreButton())\n );\n },\n showLinkButton() {\n return (\n !this.editAnnotation &&\n this.annotation &&\n !this.isLoading &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showAcceptButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotation &&\n !this.annotation.is_correct &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showDeclineButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotation &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showMissingButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n this.hoveredAnnotation &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n !this.annotation &&\n !this.annotationIsNotFound(this.annotationSet, this.label)\n );\n },\n showRestoreButton() {\n return (\n !this.editAnnotation &&\n this.hoveredAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotationIsNotFound(this.annotationSet, this.label)\n );\n },\n showCancelButton() {\n if (!this.editAnnotation || this.isLoading) {\n return false;\n }\n return this.isAnnotationInEditMode(this.currentAnnotationId());\n },\n showSaveButton() {\n if (!this.editAnnotation || this.isLoading) return false;\n\n // Check if it's an Annotation or Empty Annotation\n if (this.isAnnotation) {\n return true;\n } else {\n if (!this.isAnnotationInEditMode(this.currentAnnotationId())) return;\n\n // check if spans are selected\n return this.spanSelection && this.spanSelection.length > 0;\n }\n },\n handleMissingAnnotation() {\n if (!this.label || !this.annotationSet) return;\n\n this.isLoading = true;\n\n // will emit to the DocumentAnnotations component, where the method is handled\n // & dispatched to the store\n this.$parent.$emit(\n \"handle-missing-annotation\",\n this.label.id,\n this.labelSet.id,\n this.annotationSet.id,\n false\n );\n },\n handleSaveChanges(decline = false) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n // Verify if we are editing a filled or empty annotation\n if (\n this.annotation &&\n (this.showAcceptButton() ||\n this.showDeclineButton() ||\n this.isAnnotationInEditMode(\n this.currentAnnotationId(),\n this.editAnnotation.index\n ))\n ) {\n let spans = [];\n let showAiWarning = false;\n\n if (!decline) {\n Object.keys(this.$refs).forEach((ref) => {\n if (ref.includes(`span_${this.annotation.id}`)) {\n const refElement = this.$refs[ref][0];\n // call child component createSpan method\n if (!refElement) return;\n\n const span = refElement.createSpan();\n\n // only add span if it's not null (offset_string not empty)\n if (span) {\n showAiWarning = span.is_custom;\n spans.push(span);\n }\n }\n });\n }\n\n if (showAiWarning) {\n this.$buefy.dialog.confirm({\n container: \"#app .dv-ui-app-container\",\n canCancel: [\"button\"],\n message: this.$t(\"edit_ann_content_warning\"),\n onConfirm: () => this.saveAnnotationChanges(spans, decline),\n onCancel: () => this.handleCancelButton(),\n });\n } else {\n this.saveAnnotationChanges(spans, decline);\n }\n } else if (\n !this.annotation &&\n this.isAnnotationInEditMode(this.currentAnnotationId())\n ) {\n this.saveEmptyAnnotationChanges();\n }\n },\n handleRestore() {\n this.isLoading = true;\n\n const foundItem = this.missingAnnotations.find(\n (item) =>\n item.annotation_set === this.annotationSet.id &&\n item.label === this.label.id &&\n item.label_set === this.labelSet.id\n );\n\n this.$store\n .dispatch(\"document/deleteMissingAnnotation\", foundItem.id)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.isLoading = false;\n this.closedTag = null;\n });\n },\n saveAnnotationChanges(spans, isToDecline) {\n // This function deals with declining Annotations\n // or editing an Annotation or a part of it (if multi line)\n setTimeout(() => {\n this.isLoading = true;\n }, 100);\n\n // check if annotation set was changed\n if (\n !isToDecline &&\n ((this.editAnnotation.annotationSet &&\n (this.editAnnotation.annotationSet.id !== this.annotationSet.id ||\n (this.editAnnotation.annotationSet.id == null &&\n this.labelSet.id !== this.editAnnotation.labelSet.id))) ||\n (this.editAnnotation.label &&\n this.editAnnotation.label.id !== this.label.id))\n ) {\n // first delete annotation, then create new one\n this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: this.annotation.id,\n })\n .then(() => {\n const annotationToCreate = {\n document: this.documentId,\n span: spans,\n label: this.editAnnotation.label.id,\n is_correct: true,\n revised: false,\n };\n\n if (this.editAnnotation.annotationSet.id) {\n annotationToCreate.annotation_set =\n this.editAnnotation.annotationSet.id;\n } else {\n annotationToCreate.label_set = this.editAnnotation.labelSet.id;\n }\n\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_creating_annotation\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.loading = false;\n });\n });\n } else {\n let updatedString; // what will be sent to the API\n let storeAction; // if it will be 'delete' or 'patch'\n\n // Verify if we delete the entire Annotation or a part of the text\n if (isToDecline || spans.length === 0) {\n storeAction = \"document/deleteAnnotation\";\n } else {\n // Editing the Annotation\n // Deleting part of multi-line Annotation\n storeAction = \"document/updateAnnotation\";\n\n updatedString = {\n is_correct: true,\n revised: true,\n span: spans,\n };\n }\n\n // Send to the store for the http patch/delete request\n this.$store\n .dispatch(storeAction, {\n updatedValues: updatedString,\n annotationId: this.annotation.id,\n annotationSet: this.annotationSet,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.isLoading = false;\n });\n }\n },\n saveEmptyAnnotationChanges() {\n let annotationToCreate;\n\n if (this.annotationSet && this.annotationSet.id) {\n annotationToCreate = {\n document: this.documentId,\n span: this.spanSelection,\n label: this.label.id,\n annotation_set: this.annotationSet.id,\n is_correct: true,\n revised: false,\n };\n } else {\n // if annotation set id is null\n annotationToCreate = {\n document: this.documentId,\n span: this.spanSelection,\n label: this.label.id,\n label_set: this.labelSet.id,\n is_correct: true,\n revised: false,\n };\n }\n this.isLoading = true;\n\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.handleCancelButton();\n });\n },\n handleCancelButton() {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.isLoading = false;\n },\n enableLoading(annotations) {\n if (annotations && this.annotation && !this.annotation.is_correct) {\n const found = annotations.find(\n (annotation) => annotation === this.annotation.id\n );\n\n if (found) {\n this.isLoading = true;\n return;\n }\n\n this.isLoading = false;\n return;\n }\n\n // Check for what empty annotations we want to show the loading\n // while waiting for it to be removed from the row\n if (!this.annotationsMarkedAsMissing) {\n this.isLoading = false;\n return;\n }\n\n if (this.annotationsMarkedAsMissing.length > 0) {\n this.annotationsMarkedAsMissing.map((annotation) => {\n // Check if the annotation set and label are marked as missing\n if (\n annotation.label_set === this.labelSet.id &&\n annotation.annotation_set === this.annotationSet.id &&\n annotation.label === this.label.id\n ) {\n // Check if we wanna add loading to all empty annotations\n if (this.hoveredAnnotationSet) {\n this.isLoading = true;\n return;\n }\n\n // or we want to add loading to a single one\n if (\n !this.hoveredAnnotationSet &&\n annotation.label === this.label.id\n ) {\n this.isLoading = true;\n return;\n }\n }\n });\n }\n },\n editAnnotationTranslation(annotationId) {\n if (!annotationId || this.isDocumentReviewed) return;\n\n const baseUrl = api.FILE_URL ? api.FILE_URL : api.DEFAULT_URL;\n\n const annotationDetailsUrl = `${baseUrl}/admin/server/sequenceannotation/${annotationId}/change/`;\n\n window.open(annotationDetailsUrl, \"_blank\");\n },\n searchLabelInDocument() {\n if (this.label) {\n this.$store.dispatch(\"display/enableSearch\", true);\n this.$store.dispatch(\"display/setCurrentSearch\", this.label.name);\n }\n },\n copyAnnotationLink() {\n if (this.annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", this.annotation.id);\n navigator.clipboard.writeText(window.location.href);\n this.$buefy.toast.open({\n container: \"#app .dv-ui-app-container\",\n message: this.$t(\"copied\"),\n });\n }\n },\n selectAnnotation(event) {\n event.stopPropagation();\n if (this.annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", this.annotation.id);\n }\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div>\n <b-tooltip\n :animated=\"false\"\n :position=\"'is-bottom'\"\n :class=\"['left-aligned', 'annotation-details']\"\n >\n <div :class=\"['label-icon']\">\n <div v-if=\"(created(annotation) || edited(annotation)) && !publicView\">\n <div\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'user-icon',\n ]\"\n >\n <AcceptedUser />\n </div>\n </div>\n <div\n v-else-if=\"annotationIsNotFound(annotationSet, label) && !publicView\"\n :class=\"['annotation-details-icon', animate ? 'animated-ripple' : '']\"\n >\n <NotFoundIcon />\n </div>\n <div\n v-else-if=\"notExtracted(annotation) && !publicView\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'question-icon',\n ]\"\n >\n <QuestionMark />\n </div>\n <div v-else>\n <div\n v-if=\"accepted(annotation) && !publicView\"\n :class=\"[\n 'annotation-details-icon success',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <AcceptedCheckMark />\n </div>\n <div\n v-else\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <CheckMark class=\"pending\" />\n </div>\n </div>\n </div>\n\n <template #content>\n <div class=\"label-details\">\n <div\n v-if=\"\n annotation && annotation.metadata && annotation.metadata.checkbox\n \"\n class=\"label-description\"\n >\n <b-icon size=\"is-small\" icon=\"square-check\" />\n <span> {{ $t(\"checkbox_ann_details\") }}</span>\n </div>\n <div v-if=\"description\" class=\"label-description\">\n <span>{{ description }}</span>\n </div>\n <div\n v-if=\"confidence(annotation)\"\n id=\"annotation-details-confidence\"\n :class=\"['confidence', publicView && 'tooltip-in-public-view']\"\n >\n <span>{{ $t(\"confidence\") }}</span\n ><span\n :class=\"[\n 'value',\n confidence(annotation) <= 0.2\n ? 'red'\n : confidence(annotation) <= 0.5\n ? 'yellow'\n : '',\n ]\"\n >{{ Math.floor(confidence(annotation) * 100) / 100 }}</span\n >\n </div>\n <div v-if=\"!publicView\" class=\"revision\">\n <div class=\"detail-icons\">\n <div v-if=\"created(annotation) || edited(annotation)\">\n <div\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'user-icon',\n ]\"\n >\n <AcceptedUser />\n </div>\n </div>\n <div\n v-else-if=\"notExtracted(annotation)\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'question-icon',\n ]\"\n >\n <QuestionMark />\n </div>\n <div v-else>\n <div\n v-if=\"accepted(annotation)\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <AcceptedCheckMark />\n </div>\n <div\n v-else\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <CheckMark />\n </div>\n </div>\n {{ getText() }}\n </div>\n </div>\n </div>\n </template>\n </b-tooltip>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CheckMark from \"../../assets/images/CheckMark\";\nimport AcceptedCheckMark from \"../../assets/images/AcceptedCheckMark\";\nimport QuestionMark from \"../../assets/images/QuestionMark\";\nimport AcceptedUser from \"../../assets/images/AcceptedUser\";\nimport NotFoundIcon from \"../../assets/images/NotFoundIcon\";\n\nexport default {\n name: \"AnnotationDetails\",\n components: {\n CheckMark,\n QuestionMark,\n AcceptedCheckMark,\n AcceptedUser,\n NotFoundIcon,\n },\n props: {\n description: {\n type: String,\n default: null,\n required: false,\n },\n annotation: {\n type: Object,\n default: null,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n label: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n animate: false,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\n \"confidence\",\n \"notExtracted\",\n \"created\",\n \"edited\",\n \"accepted\",\n \"getUser\",\n \"annotationIsNotFound\",\n ]),\n ...mapState(\"document\", [\"publicView\"]),\n },\n watch: {\n annotation(newAnnotation, oldAnnotation) {\n // animate an annotation being accepted\n if (\n newAnnotation &&\n newAnnotation.id &&\n this.accepted(newAnnotation) &&\n !this.accepted(oldAnnotation)\n ) {\n this.animate = true;\n setTimeout(() => {\n this.animate = false;\n }, 2000);\n }\n },\n },\n mounted() {\n this.changePositionOfTooltip();\n },\n methods: {\n getText() {\n if (this.notExtracted(this.annotation)) {\n return this.$t(\"not_found_in_document\");\n } else if (this.created(this.annotation)) {\n return this.getUser(this.annotation)\n ? `${this.$t(\"created_by\")} ${this.getUser(this.annotation)}`\n : this.$t(\"created\");\n } else if (this.accepted(this.annotation)) {\n return this.getUser(this.annotation)\n ? `${this.$t(\"approved_by\")} ${this.getUser(this.annotation)}`\n : this.$t(\"approved\");\n } else {\n return this.$t(\"not_revised_yet\");\n }\n },\n changePositionOfTooltip() {\n // Get all elements\n const annDetails = document.getElementsByClassName(\"annotation-details\");\n\n // Only last 3 rows will change the position\n if (annDetails) {\n let lastElementsInList;\n\n if (annDetails.length >= 3) {\n lastElementsInList = annDetails.length - 2;\n } else {\n return;\n }\n\n for (let i = lastElementsInList; i < annDetails.length; i++) {\n this.updateClass(annDetails, i);\n }\n }\n },\n updateClass(array, index) {\n if (!array[index]) return;\n\n array[index].classList.remove(\"is-bottom\");\n array[index].classList.add(\"is-top\");\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_details.scss\"\n></style>\n","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#E1E1E1\"\n d=\"M18.71,7.21a1,1,0,0,0-1.42,0L9.84,14.67,6.71,11.53A1,1,0,1,0,5.29,13l3.84,3.84a1,1,0,0,0,1.42,0l8.16-8.16A1,1,0,0,0,18.71,7.21Z\"\n />\n </svg>\n</template>\n","import { render } from \"./CheckMark.vue?vue&type=template&id=569e25c6\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4bb543\"\n d=\"M18.71,7.21a1,1,0,0,0-1.42,0L9.84,14.67,6.71,11.53A1,1,0,1,0,5.29,13l3.84,3.84a1,1,0,0,0,1.42,0l8.16-8.16A1,1,0,0,0,18.71,7.21Z\"\n />\n </svg>\n</template>\n","import { render } from \"./AcceptedCheckMark.vue?vue&type=template&id=6b490b92\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n data-name=\"Layer 1\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"#E1E1E1\"\n d=\"M15.33252,9.5A3.5001,3.5001,0,0,0,8.80127,7.75a1.00016,1.00016,0,0,0,1.73242,1A1.50266,1.50266,0,0,1,11.83252,8a1.5,1.5,0,1,1,0,3h-.00244a.94984.94984,0,0,0-.18927.0387,1.03181,1.03181,0,0,0-.19861.04065.98275.98275,0,0,0-.15552.10485,1.00813,1.00813,0,0,0-.162.10975,1.00464,1.00464,0,0,0-.11706.1737.97789.97789,0,0,0-.09668.14417,1.02252,1.02252,0,0,0-.04285.21191A.94847.94847,0,0,0,10.83252,12v1l.00232.01135.0011.49109a1.00016,1.00016,0,0,0,1,.99756h.00244a1.00006,1.00006,0,0,0,.99756-1.00244l-.00153-.66138A3.49363,3.49363,0,0,0,15.33252,9.5Zm-4.20264,6.79A1,1,0,0,0,11.82959,18a1.036,1.036,0,0,0,.71045-.29,1.01517,1.01517,0,0,0,0-1.41992A1.03425,1.03425,0,0,0,11.12988,16.29Z\"\n />\n </svg>\n</template>\n","import { render } from \"./QuestionMark.vue?vue&type=template&id=2e7d5db2\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4bb543\"\n d=\"M15.71,12.71a6,6,0,1,0-7.42,0,10,10,0,0,0-6.22,8.18,1,1,0,0,0,2,.22,8,8,0,0,1,15.9,0,1,1,0,0,0,1,.89h.11a1,1,0,0,0,.88-1.1A10,10,0,0,0,15.71,12.71ZM12,12a4,4,0,1,1,4-4A4,4,0,0,1,12,12Z\"\n />\n </svg>\n</template>\n","import { render } from \"./AcceptedUser.vue?vue&type=template&id=2ff8b4cc\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"10\"\n height=\"11\"\n viewBox=\"0 0 10 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.17854 5.83544L9.75604 2.25794C10.0819 1.9321 10.0819 1.40544 9.75604 1.0796C9.43021 0.75377 8.90354 0.75377 8.57771 1.0796L5.00021 4.6571L1.42271 1.0796C1.09688 0.75377 0.570208 0.75377 0.244375 1.0796C-0.0814583 1.40544 -0.0814583 1.9321 0.244375 2.25794L3.82188 5.83544L0.244375 9.41294C-0.0814583 9.73877 -0.0814583 10.2654 0.244375 10.5913C0.406875 10.7538 0.620208 10.8354 0.833542 10.8354C1.04688 10.8354 1.26021 10.7538 1.42271 10.5913L5.00021 7.01377L8.57771 10.5913C8.74021 10.7538 8.95354 10.8354 9.16687 10.8354C9.38021 10.8354 9.59354 10.7538 9.75604 10.5913C10.0819 10.2654 10.0819 9.73877 9.75604 9.41294L6.17854 5.83544Z\"\n fill=\"#E1E1E1\"\n />\n </svg>\n</template>\n","import { render } from \"./NotFoundIcon.vue?vue&type=template&id=7e3b1b74\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnotationDetails.vue?vue&type=template&id=21369c27&scoped=true\"\nimport script from \"./AnnotationDetails.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationDetails.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_details.scss?vue&type=style&index=0&id=21369c27&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-21369c27\"]])\n\nexport default __exports__","<template>\n <div :id=\"annotation.id\" ref=\"annotation\" class=\"annotation\">\n <span\n :id=\"annotation.id\"\n ref=\"contentEditable\"\n :class=\"[\n 'annotation-value',\n 'keyboard-nav',\n isLoading && 'saving-changes',\n showActionError &&\n editAnnotation &&\n editAnnotation.id === annotation.id &&\n 'error-editing',\n isSpanBeingEdited && 'clicked-ann',\n ]\"\n role=\"textbox\"\n :contenteditable=\"isSpanBeingEdited\"\n @click=\"handleEditAnnotation\"\n @paste=\"handlePaste\"\n @keypress.enter=\"saveAnnotationChanges\"\n >\n {{ span.offset_string }}\n </span>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport { isElementArray } from \"../../utils/utils\";\n\n/**\n * This component is responsible for managing filled annotations.\n */\nexport default {\n name: \"AnnotationContent\",\n props: {\n annotation: {\n type: Object,\n required: true,\n },\n span: {\n type: [Object, Array],\n required: true,\n },\n spanIndex: {\n type: Number,\n required: true,\n },\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n isLoading: false,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\"isAnnotationInEditMode\", \"isDocumentReviewed\"]),\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"publicView\",\n \"annotations\",\n \"newAcceptedAnnotations\",\n \"showActionError\",\n ]),\n isSpanBeingEdited() {\n return this.isAnnotationInEditMode(this.annotation.id, this.spanIndex);\n },\n isAnnotationBeingEdited() {\n return (\n this.editAnnotation && this.annotation.id === this.editAnnotation.id\n );\n },\n },\n\n watch: {\n span() {\n // span content changed, ex. from click on entity\n this.setText(this.span.offset_string);\n },\n },\n\n methods: {\n setText(text) {\n this.$refs.contentEditable.textContent = text;\n },\n getAnnotationText() {\n return this.$refs.contentEditable.textContent.trim();\n },\n handleEditAnnotation(event) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n if (event) {\n event.preventDefault();\n }\n\n if (\n !this.publicView &&\n !this.isDocumentReviewed &&\n !this.isSpanBeingEdited &&\n !this.isLoading\n ) {\n if (!this.isAnnotationBeingEdited) {\n this.$store.dispatch(\n \"selection/setSpanSelection\",\n this.annotation.span\n );\n }\n\n this.$store\n .dispatch(\"document/setEditAnnotation\", {\n id: this.annotation.id,\n index: this.spanIndex,\n label: this.label,\n labelSet: this.annotationSet.label_set,\n annotationSet: this.annotationSet,\n pageNumber: this.span.page_index + 1,\n })\n .then(() => {\n if (this.$refs.contentEditable) {\n this.$refs.contentEditable.focus();\n }\n })\n .catch((error) => {\n console.log(error);\n });\n // check if this is part of a group of spans to show the whole bounding box as a placeholder\n if (this.annotation.selection_bbox && this.annotation.span.length > 1) {\n this.$store.dispatch(\"selection/setPlaceholderSelection\", [\n this.annotation.selection_bbox,\n ]);\n }\n }\n },\n handleCancel() {\n this.setText(this.span.offset_string);\n this.isLoading = false;\n if (this.$refs.contentEditable) {\n this.$refs.contentEditable.blur();\n }\n\n this.$store.dispatch(\"selection/setSpanSelection\", null);\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n saveAnnotationChanges(event) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n if (event) {\n event.preventDefault();\n }\n\n // Validate if we are declining an Annotation that is not multi-lined\n // by deleting the content instead of clicking the 'decline' button\n let isToDecline =\n this.getAnnotationText().length === 0 &&\n (!isElementArray(this.annotation.span) ||\n this.annotation.span.length === 1);\n\n // API call handled in parent component - AnnotationRow\n this.$emit(\"save-annotation-changes\", isToDecline);\n },\n createSpan() {\n const annotationText = this.getAnnotationText();\n if (!annotationText) return;\n\n return {\n offset_string: annotationText,\n page_index: this.span.page_index,\n x0: this.span.x0,\n x1: this.span.x1,\n y0: this.span.y0,\n y1: this.span.y1,\n start_offset: this.span.start_offset,\n end_offset: this.span.end_offset,\n is_custom: this.span.offset_string !== annotationText,\n };\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","export function sleep(duration) {\n new Promise((resolve) => setTimeout(resolve, duration));\n}\n\nexport function getURLQueryParam(param) {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n\n if (urlParams.has(param)) {\n return urlParams.get(param);\n }\n return undefined;\n}\n\nexport function getURLPath(value) {\n const path = window.location.pathname;\n\n if (!path.includes(`/${value}/`)) return;\n\n const id = path.split(value)[1].split(\"/\")[1];\n\n if (id === \"\") return;\n\n return id;\n}\n\nexport function getURLValueFromHash(value) {\n const hash = window.location.hash;\n if (!hash.includes(`#${value}`)) return;\n\n const id = hash.split(`#${value}`)[1].replace(\"/\", \"\");\n\n if (id === \"\") return;\n\n return id;\n}\n\nexport function setURLQueryParam(query, value, deleteParam = \"\") {\n const url = new URL(window.location.href);\n if (value != \"\") {\n if (deleteParam != \"\") {\n url.searchParams.delete(deleteParam);\n }\n url.searchParams.set(query, value);\n } else {\n url.searchParams.delete(query);\n }\n window.history.pushState(null, \"\", url.toString());\n}\n\nexport function setURLAnnotationHash(annotationId) {\n if (annotationId) {\n window.location.hash = `ann${annotationId}`;\n } else {\n history.pushState(\n \"\",\n document.title,\n window.location.pathname + window.location.search\n );\n }\n}\n\nexport function navigateToNewDocumentURL(oldId, newId) {\n const url = window.location.href;\n const newUrl = url.replace(oldId, newId);\n window.location.replace(newUrl);\n}\n\nexport function navigateToDocumentsList(path, projectId) {\n if (!path) return;\n\n const lastCharOfString = path.charAt(path.length - 1);\n let slash = \"/\";\n\n if (lastCharOfString === slash) {\n slash = \"\";\n }\n\n const parameters = `?project=${projectId}`;\n\n const newPath = `${path}${slash}${parameters}`;\n\n window.location.href = newPath;\n\n return true;\n}\n\nexport function isElementArray(element) {\n return Array.isArray(element);\n}\n\nexport function debounce(cb, duration) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n cb(...args);\n }, duration);\n };\n}\n","import { render } from \"./AnnotationContent.vue?vue&type=template&id=8aa3a3c6&scoped=true\"\nimport script from \"./AnnotationContent.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationContent.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=8aa3a3c6&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8aa3a3c6\"]])\n\nexport default __exports__","<template>\n <div v-if=\"!publicView && !isDocumentReviewed\" class=\"empty-annotation\">\n <span\n :id=\"emptyAnnotationId()\"\n ref=\"emptyAnnotation\"\n :class=\"[\n 'annotation-value',\n showActionError && isAnnotationBeingEdited() && 'error-editing',\n isAnnotationBeingEdited() && 'clicked-ann',\n isMissingAnnotation && 'missing-annotation',\n !isMissingAnnotation && 'keyboard-nav',\n ]\"\n :contenteditable=\"isAnnotationBeingEdited()\"\n @keypress.enter=\"saveEmptyAnnotationChanges\"\n @click=\"handleEditEmptyAnnotation\"\n @focus=\"handleEditEmptyAnnotation\"\n ><!-- eslint-disable vue/no-v-html -->\n <span\n v-if=\"isFindingAnnotation\"\n class=\"label-empty-clicked\"\n v-html=\"$t('draw_box_document', { label_name: label.name })\"\n >\n </span>\n <span v-else-if=\"isMissingAnnotation\" class=\"not-found-text\">\n {{ $t(\"missing_from_document\") }}\n </span>\n <span v-else-if=\"span && span.offset_string\">\n {{ span.offset_string }}\n </span>\n <span v-else class=\"label-empty\">\n {{ $t(\"no_data_found\") }}\n </span>\n <!--eslint-enable-->\n </span>\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\n\n/**\n * This component is responsible for managing empty annotations (labels with no annotations).\n */\nexport default {\n name: \"EmptyAnnotation\",\n props: {\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n span: {\n type: Object,\n default: null,\n required: false,\n },\n spanIndex: {\n type: Number,\n required: false,\n default: 0,\n },\n isMissingAnnotation: {\n type: Boolean,\n required: true,\n default: false,\n },\n },\n computed: {\n ...mapGetters(\"document\", [\"isAnnotationInEditMode\", \"isDocumentReviewed\"]),\n ...mapState(\"selection\", [\"spanSelection\"]),\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"publicView\",\n \"showActionError\",\n ]),\n isFindingAnnotation() {\n return (\n this.editAnnotation &&\n this.editAnnotation.id === this.emptyAnnotationId() &&\n (!this.span || !this.span.offset_string)\n );\n },\n },\n\n watch: {\n span(newValue) {\n // if (newValue) {\n // if (isElementArray(newValue))\n // newValue.map((span) => {\n // if (span.offset_string) {\n // span.offset_string =\n // this.$refs.emptyAnnotation.textContent.trim();\n // span.offset_string_original =\n // this.$refs.emptyAnnotation.textContent.trim();\n // }\n // });\n // }\n },\n spanSelection(newValue) {\n if (!newValue) return;\n\n // Check if the bbox has no string\n if (newValue[0] && !newValue[0].offset_string) {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n }\n },\n },\n\n methods: {\n emptyAnnotationId() {\n if ((!this.annotationSet && !this.labelSet) || !this.label) return;\n const id =\n this.annotationSet && this.annotationSet.id != null\n ? this.annotationSet.id\n : this.labelSet.id;\n return `${id}_${this.label.id}`;\n },\n isAnnotationBeingEdited() {\n return this.isAnnotationInEditMode(this.emptyAnnotationId());\n },\n handleEditEmptyAnnotation() {\n if (this.isMissingAnnotation) return;\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/setEditAnnotation\", {\n id: this.emptyAnnotationId(),\n index: this.spanIndex,\n label: this.label,\n labelSet: this.labelSet,\n annotationSet: this.annotationSet,\n });\n },\n saveEmptyAnnotationChanges(event) {\n if (event) {\n event.preventDefault();\n }\n\n // API call handled in parent component - AnnotationRow\n this.$emit(\"save-empty-annotation-changes\");\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./EmptyAnnotation.vue?vue&type=template&id=153d72f9&scoped=true\"\nimport script from \"./EmptyAnnotation.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyAnnotation.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=153d72f9&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-153d72f9\"]])\n\nexport default __exports__","<template>\n <div class=\"action-buttons\">\n <!-- label multi false nav buttons -->\n <b-tooltip\n v-if=\"isLabelMultiFalseAndGroupOfAnns(label) && !showSave\"\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('nav_label_anns')\"\n >\n <div class=\"ann-nav-btns\">\n <span>{{ label.annotations.length }}</span>\n <b-icon\n icon=\"angle-down\"\n class=\"angle-icon center-icon button-icon is-link\"\n @click.stop=\"nextAnn\"\n />\n </div>\n </b-tooltip>\n\n <!-- link button -->\n <b-button\n v-if=\"showLink\"\n id=\"annotation-link-btn\"\n type=\"is-ghost\"\n class=\"button-action is-button-icon\"\n @click.stop=\"link\"\n >\n <b-tooltip\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('annotation_link')\"\n >\n <b-icon icon=\"link\" class=\"link-icon center-icon button-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- decline button -->\n <b-button\n v-if=\"showDecline\"\n class=\"button-action is-button-icon decline-btn\"\n type=\"is-ghost\"\n @click.stop=\"decline\"\n >\n <b-tooltip\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('decline')\"\n >\n <b-icon icon=\"ban\" class=\"decline-icon center-icon button-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- accept button -->\n <b-button\n v-if=\"showAccept\"\n :class=\"`button-action accept-btn ${\n showText ? 'is-button-text' : 'is-button-icon'\n }`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"accept\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"accept\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('accept')\"\n >\n <b-icon\n icon=\"circle-check\"\n class=\"accept-icon center-icon button-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- search button -->\n <b-button\n v-if=\"showSearch\"\n type=\"is-ghost\"\n :class=\"`button-action ${\n showText ? 'is-button-text-ghost' : 'is-button-icon'\n }`\"\n @click.stop=\"search\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{\n $t(\"search_in_document\")\n }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('search_in_document')\"\n >\n <b-icon icon=\"search\" class=\"center-icon button-icon search-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- missing button -->\n <b-button\n v-if=\"showMissing\"\n type=\"is-ghost\"\n :class=\"`button-action ${\n showText ? 'is-button-text-ghost' : 'is-button-icon'\n }`\"\n @click.stop=\"markAsMissing\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{\n $t(\"missing_annotation\")\n }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('missing_annotation')\"\n >\n <b-icon\n icon=\"magnifying-glass-minus\"\n class=\"center-icon button-icon missing-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- save button -->\n <b-button\n v-if=\"showSave\"\n id=\"save-ann\"\n :class=\"`button-action ${showText ? 'is-button-text' : 'is-button-icon'}`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"save\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"save\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('save')\"\n >\n <b-icon icon=\"floppy-disk\" class=\"button-icon center-icon save-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- Restore not found annotations -->\n <b-button\n v-if=\"showRestore\"\n :class=\"`button-action restore-btn ${\n showText ? 'is-button-text' : 'is-button-icon'\n }`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"restore\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"restore\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('restore')\"\n >\n <b-icon\n icon=\"trash-arrow-up\"\n class=\"center-icon button-icon restore-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- cancel button -->\n <b-button\n v-if=\"showCancel\"\n class=\"button-action is-button-icon\"\n :title=\"$t('cancel')\"\n type=\"is-ghost\"\n @click.stop=\"cancel\"\n >\n <b-icon icon=\"xmark\" class=\"cancel-icon center-icon button-icon\" />\n </b-button>\n\n <!-- loading -->\n <b-icon v-if=\"isLoading\" icon=\"spinner\" class=\"fa-spin spinner-icon\" />\n </div>\n</template>\n<script>\n/* Component for showing actions for each annotation row */\nimport { mapGetters, mapState } from \"vuex\";\nimport { TEXT_BREAKPOINT_WIDTH } from \"../../constants\";\nexport default {\n name: \"AnnotationActionButtons\",\n props: {\n annotation: {\n type: Object,\n default: null,\n },\n label: {\n type: Object,\n default: null,\n },\n isLoading: {\n type: Boolean,\n },\n showSave: {\n type: Boolean,\n },\n showCancel: {\n type: Boolean,\n },\n showMissing: {\n type: Boolean,\n },\n showAccept: {\n type: Boolean,\n },\n showDecline: {\n type: Boolean,\n },\n showRestore: {\n type: Boolean,\n },\n showLink: {\n type: Boolean,\n },\n showSearch: {\n type: Boolean,\n },\n },\n data() {\n return {\n tooltipDelay: 700,\n showText: window.innerWidth > TEXT_BREAKPOINT_WIDTH,\n };\n },\n computed: {\n ...mapState(\"document\", [\"publicView\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReviewed\",\n \"isLabelMultiFalseAndGroupOfAnns\",\n ]),\n showHoverButton() {\n return (\n !this.isLoading &&\n !this.cancelBtn &&\n !this.saveBtn &&\n !this.publicView &&\n !this.isDocumentReviewed\n );\n },\n },\n created() {\n window.addEventListener(\"resize\", this.resize);\n },\n\n unmounted() {\n window.removeEventListener(\"resize\", this.resize);\n },\n methods: {\n resize() {\n this.showText = window.innerWidth > TEXT_BREAKPOINT_WIDTH;\n },\n search() {\n this.$emit(\"search\");\n },\n save() {\n this.$emit(\"save\");\n },\n cancel() {\n this.$emit(\"cancel\");\n },\n accept() {\n this.$emit(\"accept\");\n },\n markAsMissing() {\n this.$emit(\"mark-as-missing\");\n },\n decline() {\n this.$emit(\"decline\");\n },\n restore() {\n this.$emit(\"restore\");\n },\n link() {\n this.$emit(\"link\");\n },\n nextAnn() {\n this.$store.dispatch(\n \"document/putNextAnnotationInLabelFirst\",\n this.label\n );\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_action_buttons.scss\"\n></style>\n","import { render } from \"./AnnotationActionButtons.vue?vue&type=template&id=1ca87cbe&scoped=true\"\nimport script from \"./AnnotationActionButtons.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationActionButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_action_buttons.scss?vue&type=style&index=0&id=1ca87cbe&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1ca87cbe\"]])\n\nexport default __exports__","<template>\n <svg\n id=\"exchange\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n >\n <path\n v-if=\"translation\"\n fill=\"#1A1A1A\"\n d=\"M18,10a1,1,0,0,0-1-1H5.41l2.3-2.29A1,1,0,0,0,6.29,5.29l-4,4a1,1,0,0,0-.21,1.09A1,1,0,0,0,3,11H17A1,1,0,0,0,18,10Zm3.92,3.62A1,1,0,0,0,21,13H7a1,1,0,0,0,0,2H18.59l-2.3,2.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l4-4A1,1,0,0,0,21.92,13.62Z\"\n ></path>\n <path\n v-else\n fill=\"#E1E1E1\"\n d=\"M18,10a1,1,0,0,0-1-1H5.41l2.3-2.29A1,1,0,0,0,6.29,5.29l-4,4a1,1,0,0,0-.21,1.09A1,1,0,0,0,3,11H17A1,1,0,0,0,18,10Zm3.92,3.62A1,1,0,0,0,21,13H7a1,1,0,0,0,0,2H18.59l-2.3,2.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l4-4A1,1,0,0,0,21.92,13.62Z\"\n ></path>\n </svg>\n</template>\n\n<script>\nexport default {\n name: \"TranslateArrows\",\n props: {\n translation: {\n type: String,\n default: null,\n required: false,\n },\n },\n};\n</script>\n","import { render } from \"./TranslateArrows.vue?vue&type=template&id=0d0ca21e\"\nimport script from \"./TranslateArrows.vue?vue&type=script&lang=js\"\nexport * from \"./TranslateArrows.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnotationRow.vue?vue&type=template&id=e1003d16&scoped=true\"\nimport script from \"./AnnotationRow.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationRow.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=e1003d16&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e1003d16\"]])\n\nexport default __exports__","import { render } from \"./DocumentLabel.vue?vue&type=template&id=2422371a&scoped=true\"\nimport script from \"./DocumentLabel.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentLabel.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=2422371a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2422371a\"]])\n\nexport default __exports__","<template>\n <div class=\"annotation-options\">\n <div id=\"annotation-search\">\n <b-field>\n <b-taginput\n v-model=\"search\"\n ellipsis\n attached\n icon=\"search\"\n :placeholder=\"$t('search')\"\n >\n <template #tag=\"props\">\n <span>{{ labelNameForAnnotationId(props.tag) || props.tag }}</span>\n </template>\n </b-taginput>\n </b-field>\n </div>\n <div id=\"annotation-filters\">\n <b-switch\n v-model=\"annotationFilters.showFeedbackNeeded\"\n class=\"is-small\"\n >{{ $t(\"human_feedback_needed\") }}</b-switch\n >\n <b-switch v-model=\"annotationFilters.showEmpty\" class=\"is-small\">{{\n $t(\"label_missing_annotations\")\n }}</b-switch>\n <b-switch v-model=\"annotationFilters.showAccepted\" class=\"is-small\">{{\n $t(\"accepted_annotations\")\n }}</b-switch>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nexport default {\n name: \"AnnotationFilters\",\n data() {\n return {\n search: [],\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"annotationSets\",\n \"annotationFilters\",\n \"annotationSearch\",\n ]),\n ...mapGetters(\"document\", [\"annotationById\", \"labelOfAnnotation\"]),\n },\n\n watch: {\n search() {\n if (this.search.length > 0) {\n this.$emit(\"openAll\");\n }\n if (this.search != this.annotationSearch) {\n this.$store.dispatch(\"document/setAnnotationSearch\", this.search);\n }\n },\n },\n mounted() {\n this.search = this.annotationSearch;\n },\n methods: {\n labelNameForAnnotationId(annotationId) {\n const annotation = this.annotationById(Number(annotationId));\n if (annotation) {\n const label = this.labelOfAnnotation(annotation);\n if (label) {\n return label.name;\n }\n }\n return false;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./AnnotationFilters.vue?vue&type=template&id=e268669e&scoped=true\"\nimport script from \"./AnnotationFilters.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationFilters.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=e268669e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e268669e\"]])\n\nexport default __exports__","<template>\n <div class=\"annotations-skeleton\">\n <div class=\"label-set-name-skeleton\">\n <b-skeleton\n width=\"20%\"\n height=\"8px\"\n />\n </div>\n\n <!-- Label rows -->\n <div\n v-for=\"n in numberOfLabelRows\"\n :key=\"n\"\n >\n <LoadingLabels />\n </div>\n </div>\n</template>\n\n<script>\nimport LoadingLabels from \"./LoadingLabels\";\n\n/**\n * This component shows a skeleton instead of the label sets\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingAnnotations\",\n components: { LoadingLabels },\n data() {\n return {\n numberOfLabelRows: 7\n };\n }\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div class=\"label-properties-skeleton\">\n <div class=\"loading-left\">\n <div class=\"circle\">\n <b-skeleton\n circle\n width=\"16px\"\n height=\"16px\"\n />\n </div>\n <div class=\"label-skeleton\">\n <b-skeleton\n width=\"70%\"\n height=\"8px\"\n />\n </div>\n </div>\n\n <div class=\"loading-right\">\n <b-skeleton\n width=\"80%\"\n height=\"8px\"\n />\n </div>\n </div>\n</template>\n\n<script>\n/**\n * This component shows a skeleton instead of the labels and annotations\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingLabels\"\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./LoadingLabels.vue?vue&type=template&id=07542bd0&scoped=true\"\nimport script from \"./LoadingLabels.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingLabels.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=07542bd0&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-07542bd0\"]])\n\nexport default __exports__","import { render } from \"./LoadingAnnotations.vue?vue&type=template&id=90b74e8e&scoped=true\"\nimport script from \"./LoadingAnnotations.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingAnnotations.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=90b74e8e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-90b74e8e\"]])\n\nexport default __exports__","import { render } from \"./DocumentAnnotations.vue?vue&type=template&id=309cdd6e&scoped=true\"\nimport script from \"./DocumentAnnotations.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentAnnotations.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=309cdd6e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-309cdd6e\"]])\n\nexport default __exports__","<!-- eslint-disable vue/no-v-html -->\n<template>\n <section class=\"choose-label-set-modal\">\n <b-modal\n ref=\"modal\"\n v-model=\"show\"\n :can-cancel=\"['x', 'outside']\"\n class=\"modal-absolute modal-400 modal-no-footer model-overflow-visible\"\n :on-cancel=\"close\"\n >\n <section class=\"modal-card-body\">\n <div class=\"content\">\n <h3>\n {{ $t(\"new_ann_set_title\") }}\n </h3>\n <div>\n <div v-if=\"labelSetsFilteredForAnnotationSetCreation.length === 0\">\n <p\n v-html=\"\n `${$t('no_multi_ann_labelset_model')}\n ${showBranding ? $t('no_multi_ann_labelset_model_link') : ''}`\n \"\n />\n </div>\n <div v-else>\n <p>\n {{ $t(\"new_ann_set_description\") }}\n </p>\n\n <div class=\"label-set-list\">\n <div\n v-for=\"labelSetItem in labelSetsFilteredForAnnotationSetCreation\"\n :key=\"labelSetItem.id\"\n class=\"label-set-list-row\"\n >\n <b-button\n class=\"full-width\"\n type=\"is-secondary\"\n @click=\"submit(labelSetItem)\"\n >\n {{\n `${labelSetItem.name} ${numberOfLabelSetGroup(\n labelSetItem\n )}`\n }}\n </b-button>\n <div class=\"labels-list\">\n <span\n v-for=\"(label, index) in labelSetItem.labels\"\n :key=\"label.id\"\n >{{\n `${label.name}${\n index + 1 !== labelSetItem.labels.length ? \", \" : \"\"\n }`\n }}</span\n >\n </div>\n </div>\n </div>\n <p class=\"next-step-description\">\n {{ $t(\"new_ann_set_hint\") }}\n </p>\n </div>\n </div>\n </div>\n </section>\n </b-modal>\n </section>\n</template>\n\n<script>\n/**\n * This component shows a modal to choose a label set from the project\n */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"CreateAnnotationSetModal\",\n data() {\n return {\n show: true,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"document\", [\n \"numberOfLabelSetGroup\",\n \"labelSetsFilteredForAnnotationSetCreation\",\n ]),\n },\n methods: {\n submit(labelSet) {\n this.$emit(\"finish\", labelSet);\n this.close();\n },\n close() {\n this.$store.dispatch(\"display/showChooseLabelSetModal\", null);\n this.$emit(\"close\");\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/choose_label_set_modal.scss\"\n></style>\n","import { render } from \"./ChooseLabelSetModal.vue?vue&type=template&id=565aea8a&scoped=true\"\nimport script from \"./ChooseLabelSetModal.vue?vue&type=script&lang=js\"\nexport * from \"./ChooseLabelSetModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/choose_label_set_modal.scss?vue&type=style&index=0&id=565aea8a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-565aea8a\"]])\n\nexport default __exports__","<template>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.5 4.94922C4.30222 4.94922 4.10888 5.00787 3.94443 5.11775C3.77998 5.22763 3.65181 5.38381 3.57612 5.56654C3.50043 5.74926 3.48063 5.95033 3.51922 6.14431C3.5578 6.33829 3.65304 6.51647 3.79289 6.65633C3.93275 6.79618 4.11093 6.89142 4.30491 6.93C4.49889 6.96859 4.69996 6.94879 4.88268 6.8731C5.06541 6.79741 5.22159 6.66924 5.33147 6.50479C5.44135 6.34034 5.5 6.147 5.5 5.94922C5.5 5.684 5.39464 5.42965 5.20711 5.24211C5.01957 5.05458 4.76522 4.94922 4.5 4.94922ZM4.5 8.44922C4.30222 8.44922 4.10888 8.50787 3.94443 8.61775C3.77998 8.72763 3.65181 8.88381 3.57612 9.06654C3.50043 9.24926 3.48063 9.45033 3.51922 9.64431C3.5578 9.83829 3.65304 10.0165 3.79289 10.1563C3.93275 10.2962 4.11093 10.3914 4.30491 10.43C4.49889 10.4686 4.69996 10.4488 4.88268 10.3731C5.06541 10.2974 5.22159 10.1692 5.33147 10.0048C5.44135 9.84034 5.5 9.647 5.5 9.44922C5.5 9.184 5.39464 8.92965 5.20711 8.74211C5.01957 8.55458 4.76522 8.44922 4.5 8.44922ZM8 3.44922C8.19778 3.44922 8.39112 3.39057 8.55557 3.28069C8.72002 3.17081 8.84819 3.01463 8.92388 2.8319C8.99957 2.64918 9.01937 2.44811 8.98079 2.25413C8.9422 2.06015 8.84696 1.88196 8.70711 1.74211C8.56725 1.60226 8.38907 1.50702 8.19509 1.46843C8.00111 1.42985 7.80004 1.44965 7.61732 1.52534C7.43459 1.60103 7.27841 1.7292 7.16853 1.89365C7.05865 2.0581 7 2.25144 7 2.44922C7 2.71444 7.10536 2.96879 7.29289 3.15633C7.48043 3.34386 7.73478 3.44922 8 3.44922ZM4.5 1.44922C4.30222 1.44922 4.10888 1.50787 3.94443 1.61775C3.77998 1.72763 3.65181 1.88381 3.57612 2.06654C3.50043 2.24926 3.48063 2.45033 3.51922 2.64431C3.5578 2.83829 3.65304 3.01647 3.79289 3.15633C3.93275 3.29618 4.11093 3.39142 4.30491 3.43C4.49889 3.46859 4.69996 3.44879 4.88268 3.3731C5.06541 3.29741 5.22159 3.16924 5.33147 3.00479C5.44135 2.84034 5.5 2.647 5.5 2.44922C5.5 2.184 5.39464 1.92965 5.20711 1.74211C5.01957 1.55458 4.76522 1.44922 4.5 1.44922ZM8 8.44922C7.80222 8.44922 7.60888 8.50787 7.44443 8.61775C7.27998 8.72763 7.15181 8.88381 7.07612 9.06654C7.00043 9.24926 6.98063 9.45033 7.01922 9.64431C7.0578 9.83829 7.15304 10.0165 7.29289 10.1563C7.43275 10.2962 7.61093 10.3914 7.80491 10.43C7.99889 10.4686 8.19996 10.4488 8.38268 10.3731C8.56541 10.2974 8.72159 10.1692 8.83147 10.0048C8.94135 9.84034 9 9.647 9 9.44922C9 9.184 8.89464 8.92965 8.70711 8.74211C8.51957 8.55458 8.26522 8.44922 8 8.44922ZM8 4.94922C7.80222 4.94922 7.60888 5.00787 7.44443 5.11775C7.27998 5.22763 7.15181 5.38381 7.07612 5.56654C7.00043 5.74926 6.98063 5.95033 7.01922 6.14431C7.0578 6.33829 7.15304 6.51647 7.29289 6.65633C7.43275 6.79618 7.61093 6.89142 7.80491 6.93C7.99889 6.96859 8.19996 6.94879 8.38268 6.8731C8.56541 6.79741 8.72159 6.66924 8.83147 6.50479C8.94135 6.34034 9 6.147 9 5.94922C9 5.684 8.89464 5.42965 8.70711 5.24211C8.51957 5.05458 8.26522 4.94922 8 4.94922Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./DraggableIcon.vue?vue&type=template&id=c7a2a124\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"multi-ann-table-overlay\"\n :style=\"{\n left: `${left}px`,\n width: `${width === 0 ? '100%' : `${width}px`}`,\n }\"\n >\n <b-table\n ref=\"table\"\n class=\"multi-ann-set-table dark-header header-32\"\n detail-icon=\"faScissors\"\n :data=\"rows\"\n :sticky-header=\"true\"\n :narrowed=\"true\"\n :bordered=\"false\"\n draggable-column\n @columndragstart=\"columndragstart\"\n @columndrop=\"columndrop\"\n @columndragover=\"columndragover\"\n @columndragleave=\"columndragleave\"\n >\n <b-table-column\n v-for=\"(item, index) in isLoading ? [columns[0]] : columns\"\n :key=\"index\"\n :field=\"item.field\"\n :label=\"item.label.name\"\n >\n <template #header=\"{ column }\">\n <b-dropdown\n :ref=\"getDropdownReference(item)\"\n aria-role=\"list\"\n class=\"header-dropdown\"\n position=\"is-top-right\"\n :close-on-click=\"false\"\n scrollable\n @active-change=\"(e) => onDropdownChange(item, e)\"\n >\n <template #trigger=\"{ active }\">\n <DraggableIcon v-if=\"!isLoading\" class=\"draggable\" />\n <span v-if=\"!isLoading\" :class=\"active ? 'active' : ''\"\n >{{ column.label }}\n </span>\n <b-icon\n v-if=\"!isLoading\"\n :icon=\"active ? 'angle-up' : 'angle-down'\"\n size=\"is-small\"\n class=\"arrow\"\n />\n </template>\n\n <div v-if=\"editingLabels.length === 0\">\n <b-dropdown-item aria-role=\"listitem\" @click=\"editLabel(item)\"\n ><span>{{ $t(\"edit_label\") }}</span></b-dropdown-item\n >\n <b-dropdown-item\n aria-role=\"listitem\"\n class=\"delete-action\"\n @click=\"deleteColumn(item)\"\n >\n <span>{{ $t(\"delete_label\") }}</span></b-dropdown-item\n >\n </div>\n <div v-else>\n <b-dropdown-item\n v-for=\"label in editingLabels\"\n :key=\"label.id\"\n aria-role=\"listitem\"\n :disabled=\"label.disabled\"\n ><span @click=\"!label.disabled && changeLabel(item, label)\">{{\n label.name\n }}</span></b-dropdown-item\n >\n </div>\n </b-dropdown>\n </template>\n\n <template #default=\"props\">\n <div class=\"annotations-table\">\n <b-skeleton v-if=\"isLoading\" width=\"98%\" height=\"90%\" />\n <AnnotationRow\n v-if=\"!isLoading\"\n :annotation=\"props.row[item.field]\"\n :label=\"item.label\"\n :annotation-set=\"item.annotationSet\"\n :show-label=\"false\"\n :show-buttons=\"false\"\n :is-small=\"true\"\n :from-table=\"true\"\n />\n </div>\n </template>\n </b-table-column>\n </b-table>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport AnnotationRow from \"../DocumentAnnotations/AnnotationRow\";\nimport DraggableIcon from \"../../assets/images/DraggableIcon\";\n\nexport default {\n name: \"MultiAnnotationTableOverlay\",\n components: {\n AnnotationRow,\n DraggableIcon,\n },\n props: {\n left: {\n type: Number,\n required: false,\n default: 0,\n },\n width: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n data() {\n return {\n rows: [],\n columns: [],\n orderedAnnotations: [],\n editingLabels: [],\n openDropdown: null,\n draggingColumnIndex: null,\n isLoading: false,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showAnnSetTable\"]),\n ...mapState(\"document\", [\"annotations\"]),\n },\n watch: {\n showAnnSetTable() {\n this.handleColumns();\n this.handleRows();\n },\n annotations() {\n // if there's a change in the annotations content, we update the table\n this.handleColumns();\n this.handleRows();\n },\n columns(columns) {\n if (!columns || (columns && columns.length === 0)) {\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"display/showAnnSetTable\", null);\n }\n },\n },\n mounted() {\n this.handleColumns();\n this.handleRows();\n },\n methods: {\n getDropdownReference(column) {\n return `editDropdown_${column.field}`;\n },\n handleColumns() {\n this.columns = [];\n const labelAlreadyExists = (label) => {\n return (\n this.columns.length > 0 &&\n this.columns.find((a) => a.field === `${label.id}`) != undefined\n );\n };\n\n this.showAnnSetTable.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n if (!labelAlreadyExists(label) && label.annotations.length > 0) {\n const column = {\n field: `${label.id}`,\n label: label,\n annotationSet,\n centered: false,\n };\n this.columns.push(column);\n }\n });\n });\n },\n\n handleRows() {\n this.rows = [];\n this.orderedAnnotations = [];\n\n this.showAnnSetTable.forEach((annotationSet) => {\n let row = {};\n let toAdd = false; // to not push empty labels\n\n annotationSet.labels.forEach((label) => {\n if (label.annotations.length > 0) {\n row[label.id] = label.annotations[0];\n this.orderedAnnotations.push(label.annotations[0]);\n toAdd = true;\n }\n });\n if (toAdd) {\n this.rows.push(row);\n }\n });\n },\n\n async editLabel(column) {\n this.$store\n .dispatch(\n \"project/fetchLabelSetDetails\",\n column.annotationSet.label_set.id\n )\n .then(async (labelSet) => {\n this.editingLabels = [];\n\n labelSet.labels.forEach((label) => {\n const dropdownLabel = {\n ...label,\n disabled:\n this.columns.find((column) => column.label.id === label.id) !==\n undefined,\n };\n this.editingLabels.push(dropdownLabel);\n });\n });\n },\n\n async changeLabel(column, label) {\n this.isLoading = true;\n this.closeDropdown(column);\n for (let i = 0; i < this.rows.length; i++) {\n const annotationToUpdate = this.rows[i][column.label.id];\n await this.$store\n .dispatch(\"document/updateAnnotation\", {\n annotationId: annotationToUpdate.id,\n updatedValues: { label: label.id },\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n this.isLoading = false;\n },\n\n async deleteColumn(column) {\n this.isLoading = true;\n this.closeDropdown(column);\n\n const annotationsToDelete = [];\n for (let i = 0; i < this.rows.length; i++) {\n const annotationToDelete = this.rows[i][column.label.id];\n if (annotationToDelete && annotationToDelete.id) {\n annotationsToDelete.push(annotationToDelete);\n }\n }\n\n annotationsToDelete.forEach(async (annotationToDelete) => {\n await this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: annotationToDelete.id,\n annotationSet: null, // TODO: test if annotation set should be added if the feature is available again\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n });\n\n this.isLoading = false;\n },\n\n onDropdownChange(column, open) {\n this.editingLabels = [];\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n if (open) {\n if (\n this.openDropdown &&\n this.$refs[this.getDropdownReference(column)].length > 0\n ) {\n this.$refs[this.openDropdown][0].toggle();\n }\n this.openDropdown = this.getDropdownReference(column);\n } else {\n if (this.openDropdown === this.getDropdownReference(column)) {\n this.openDropdown = null;\n }\n }\n },\n\n closeDropdown(column) {\n if (\n this.openDropdown &&\n this.$refs[this.getDropdownReference(column)].length > 0\n ) {\n this.$refs[this.getDropdownReference(column)][0].toggle();\n this.openDropdown = null;\n }\n },\n\n columndragstart(payload) {\n this.draggingColumnIndex = payload.index;\n payload.event.dataTransfer.effectAllowed = \"copy\";\n },\n columndragover(payload) {\n payload.event.dataTransfer.dropEffect = \"copy\";\n payload.event.target.closest(\"th\").classList.add(\"is-selected\");\n payload.event.preventDefault();\n },\n columndragleave(payload) {\n payload.event.target.closest(\"th\").classList.remove(\"is-selected\");\n payload.event.preventDefault();\n },\n async columndrop(payload) {\n payload.event.target.closest(\"th\").classList.remove(\"is-selected\");\n const droppedOnColumnIndex = payload.index;\n\n const draggingColumn = this.columns[this.draggingColumnIndex];\n const droppedColumn = this.columns[droppedOnColumnIndex];\n\n await this.changeLabel(draggingColumn, droppedColumn.label);\n await this.changeLabel(droppedColumn, draggingColumn.label);\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/multi_ann_table_overlay.scss\"\n></style>\n","<template>\n <div\n id=\"document-edit\"\n :class=\"[renameAndCategorize && 'rename-and-categorize-component']\"\n >\n <div v-if=\"!renameAndCategorize\" class=\"pages-section\">\n <EditPages\n :splitting-lines=\"splittingLines\"\n :split-suggestions-enabled=\"splitSuggestionsEnabled\"\n @handle-splitting-lines=\"handleSplittingLines\"\n @check-move=\"checkMove\"\n @handle-drag-end=\"handleDragEnd\"\n />\n <div class=\"info-bar\">\n <SplitInfoBar v-if=\"splitSuggestionsEnabled\" />\n </div>\n </div>\n <div v-else class=\"rename-and-categorize-section\">\n <RenameAndCategorize\n :file-name=\"fileName\"\n :file-extension=\"fileExtension\"\n @change-page=\"changePage\"\n />\n </div>\n <div v-if=\"!renameAndCategorize\" class=\"sidebar\">\n <EditSidebar\n :split-suggestions-enabled=\"splitSuggestionsEnabled\"\n @rotate=\"rotatePage\"\n @rotate-all-left=\"handleRotationsToTheLeft\"\n @rotate-all-right=\"handleRotationsToTheRight\"\n @handle-splitting-suggestions=\"applySplittingSuggestions\"\n />\n </div>\n <div class=\"confirmation-modal-container\">\n <EditConfirmationModal @save-changes=\"saveEditChanges\" />\n </div>\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport EditSidebar from \"./EditSidebar\";\nimport RenameAndCategorize from \"./RenameAndCategorize\";\nimport EditPages from \"./EditPages\";\nimport SplitInfoBar from \"./SplitInfoBar\";\nimport EditConfirmationModal from \"./EditConfirmationModal\";\nimport { navigateToDocumentsList } from \"../../utils/utils\";\n\n/**\n * This component shows a document thumbnail grid view and sidebar, to be able to edit the document.\n */\nexport default {\n name: \"DocumentEdit\",\n components: {\n EditSidebar,\n RenameAndCategorize,\n EditPages,\n SplitInfoBar,\n EditConfirmationModal,\n },\n data() {\n return {\n fileName: null,\n fileExtension: null,\n splittingLines: [],\n dragging: false,\n prevPageAtIndex: null,\n splitSuggestionsEnabled: false,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n \"pages\",\n ]),\n ...mapState(\"display\", [\"currentPage\"]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"pagesForPostprocess\",\n \"updatedDocument\",\n \"renameAndCategorize\",\n \"selectedPages\",\n \"submitEditChanges\",\n ]),\n ...mapState(\"project\", [\"projectId\", \"documentsListPath\", \"currentUser\"]),\n ...mapGetters(\"edit\", [\"documentShouldBePostprocessed\"]),\n ...mapGetters(\"document\", [\"waitingForSplittingConfirmation\"]),\n },\n watch: {\n renameAndCategorize(newValue) {\n if (newValue) {\n this.splitFileNameFromExtension();\n }\n },\n pagesForPostprocess(newValue, oldValue) {\n if (newValue) {\n this.saveUpdatedDocuments();\n }\n },\n splittingLines(newValue) {\n const aiSplit = newValue.find((item) => item.origin === \"AI\");\n\n // If there are no AI suggestions left, because of being manually removed by the user\n // the Smart Split switch should be turned off\n if (!aiSplit) {\n this.splitSuggestionsEnabled = false;\n }\n },\n submitEditChanges(newValue) {\n if (!newValue) return;\n\n this.saveEditChanges();\n },\n updatedDocument(newValue, oldValue) {\n if (\n newValue &&\n oldValue &&\n newValue.length !== oldValue.length &&\n newValue.length === 1\n ) {\n this.saveUpdatedDocuments();\n }\n },\n },\n mounted() {\n this.setPages();\n },\n methods: {\n setPages() {\n if (!this.selectedDocument) {\n return;\n }\n\n // set array of pages only with the data we need for postprocessing the document\n this.$store.dispatch(\n \"edit/setPagesForPostprocess\",\n this.createPagesForPostprocess()\n );\n\n // Create array with placeholder data for the splitting points\n if (this.selectedDocument.pages.length > 0) {\n this.selectedDocument.pages.map((page) => {\n if (page.number === this.selectedDocument.pages.length) {\n this.setSplittingArray(page.number, null);\n return;\n }\n this.setSplittingArray(0, null);\n });\n\n if (this.splittingSuggestions) {\n this.splitSuggestionsEnabled = true;\n this.setAutomaticSplitting();\n }\n }\n },\n createPagesForPostprocess() {\n return this.selectedDocument.pages.map((page) => {\n return {\n id: page.id,\n angle: 0,\n number: page.number,\n thumbnail_url: page.thumbnail_url,\n image_url: page.image_url,\n size: page.size,\n updated_at: this.selectedDocument.downloaded_at,\n };\n });\n },\n changePage(pageNumber) {\n // This will scroll to the clicked page\n if (pageNumber != this.currentPage) {\n this.$store.dispatch(\n \"display/updateCurrentPage\",\n parseInt(pageNumber, 10)\n );\n }\n },\n\n /** ROTATE */\n rotatePage(direction) {\n this.selectedPages.forEach((page) => {\n this.$store.dispatch(\"edit/rotatePage\", {\n page,\n direction,\n });\n });\n },\n handleRotationsToTheLeft() {\n this.$store.dispatch(\"edit/updateRotationToTheLeft\");\n },\n handleRotationsToTheRight() {\n this.$store.dispatch(\"edit/updateRotationToTheRight\");\n },\n\n /** SPLIT */\n setAutomaticSplitting() {\n // map over splitting suggestions to find the page number based on the page id\n // to update the splittingLines array with this data\n if (!this.splittingSuggestions) return;\n\n this.splittingSuggestions.map((item) => {\n const lastPage = this.selectedDocument.pages.find(\n (page) => page.id === item.pages[item.pages.length - 1].id\n );\n\n this.handleSplittingLines(lastPage.number, \"AI\");\n });\n },\n applySplittingSuggestions(value) {\n // Show information bar\n this.splitSuggestionsEnabled = value;\n\n // Apply or remove split lines\n this.setAutomaticSplitting();\n },\n setSplittingArray(pageNumber, splittingOrigin) {\n // This function sets the splittingLines array\n // based on splitting suggestions or no suggestions\n this.splittingLines.push({\n page: pageNumber,\n origin: splittingOrigin,\n });\n },\n splitFileNameFromExtension() {\n if (!this.selectedDocument && !this.selectedDocument.data_file_name)\n return;\n\n // Save the file name and the extension in different variables\n // to be used in the next step of the splitting\n this.fileName = this.selectedDocument.data_file_name\n .split(\".\")\n .slice(0, -1)\n .join(\".\");\n\n this.fileExtension = this.selectedDocument.data_file_name\n .split(\".\")\n .at(-1);\n },\n handleSplittingLines(page, origin) {\n // To select and deselect the division lines\n // Add page number & origin to specific index\n // Or replace it with 0 (to keep the same index & array length) if it exists\n const found = this.splittingLines.find((item) => item.page === page);\n\n // new line added or removed based on the page clicked:\n const newPage = { page: page, origin: origin };\n const removedPage = { page: 0, origin: origin };\n\n if (this.splitSuggestionsEnabled && origin === \"AI\") {\n // if manual suggestions were added but we enable automatic splitting,\n // this last one takes over\n this.splittingLines.splice(page - 1, 1, newPage);\n } else if (\n page === this.splittingLines.length ||\n (!this.splitSuggestionsEnabled && !found && origin === \"AI\")\n ) {\n // check if it's the last item to keep unchanged\n // Or if splitting is switched off, but some of the suggestion lines\n // were removed manually\n return;\n } else if (found) {\n // If splitting is switched off and we have manual splits,\n // those should stay unchanged\n if (!this.splitSuggestionsEnabled && found.origin !== origin) {\n return;\n }\n\n this.splittingLines.splice(page - 1, 1, removedPage);\n } else {\n this.splittingLines.splice(page - 1, 1, newPage);\n }\n\n this.saveUpdatedDocuments();\n },\n saveUpdatedDocuments() {\n this.splitFileNameFromExtension();\n\n const clickedLines = this.splittingLines.filter(\n (item) => item.page !== 0\n );\n\n const newDocuments = this.createEachNewDocument(\n clickedLines,\n clickedLines.length\n );\n\n // // Set the state to the created array\n this.$store.dispatch(\"edit/setUpdatedDocument\", newDocuments);\n },\n createEachNewDocument(clickedLines, length) {\n const documents = new Array(length);\n\n for (let i = 0; i < length; i++) {\n const newDocument = {\n name: this.handleNewDocumentName(i),\n category: this.handleNewDocumentCategory(i, clickedLines),\n categories: this.handleNewDocumentCategoriesAndConfidence(\n i,\n clickedLines\n ),\n pages: this.handleNewDocumentPages(i, clickedLines),\n };\n\n // we replace the \"undefined\" with the created object\n documents.splice(i, 1, newDocument);\n }\n\n return documents;\n },\n handleNewDocumentName(index) {\n let newFileName;\n\n if (index === 0) {\n newFileName = this.selectedDocument.data_file_name;\n } else if (index === 1) {\n newFileName = `${this.fileName}_copy.${this.fileExtension}`;\n } else {\n newFileName = `${this.fileName}_copy${index}.${this.fileExtension}`;\n }\n return newFileName;\n },\n handleNewDocumentCategory(index, clickedLines) {\n if (\n this.updatedDocument &&\n this.updatedDocument.length > 1 &&\n clickedLines[index].origin &&\n clickedLines[index].origin === \"AI\"\n ) {\n // get the index of the new document in the splitting suggestions\n // to return its category\n const i = this.indexOfSplittingSuggestion(index, clickedLines);\n\n return this.splittingSuggestions[i].category;\n } else {\n return this.selectedDocument.category;\n }\n },\n handleNewDocumentCategoriesAndConfidence(index, clickedLines) {\n if (\n this.updatedDocument &&\n this.updatedDocument.length > 1 &&\n clickedLines[index].origin &&\n clickedLines[index].origin === \"AI\"\n ) {\n // get the index of the new document in the splitting suggestions\n // to return its category\n const i = this.indexOfSplittingSuggestion(index, clickedLines);\n\n return this.splittingSuggestions[i].categories;\n } else {\n return null;\n }\n },\n handleNewDocumentPages(index, clickedLines) {\n // assign the correct pages to each new document\n let pages;\n\n if (index === 0) {\n pages = this.pagesForPostprocess.slice(0, clickedLines[index].page);\n } else {\n if (!clickedLines[index].page) {\n pages = this.pagesForPostprocess.slice(clickedLines[index - 1].page);\n } else {\n pages = this.pagesForPostprocess.slice(\n clickedLines[index - 1].page,\n clickedLines[index].page\n );\n }\n }\n\n return pages;\n },\n indexOfSplittingSuggestion(index, clickedLines) {\n const foundPage = this.selectedDocument.pages.find(\n (page) => page.number === clickedLines[index].page\n );\n\n const singleSplittingSuggestion = this.splittingSuggestions.find(\n (item) => item.pages[item.pages.length - 1].id === foundPage.id\n );\n\n return this.splittingSuggestions.indexOf(singleSplittingSuggestion);\n },\n\n /** SORT */\n checkMove(e) {\n // Save the page placed originally where the page we are dragging will go\n this.prevPageAtIndex = this.pagesForPostprocess.find(\n (page) =>\n this.pagesForPostprocess.indexOf(page) ===\n e.draggedContext.futureIndex\n );\n },\n handleDragEnd() {\n // Update page numbers\n const pages = this.pagesForPostprocess.map((page) => {\n const index = this.pagesForPostprocess.indexOf(page);\n return {\n ...page,\n number: index + 1,\n };\n });\n\n this.$store.dispatch(\"edit/setPagesForPostprocess\", pages);\n },\n\n /** SUBMIT CHANGES */\n // Send update request to the backend\n saveEditChanges() {\n // Verify if there was splitting, rotating and/or reordering\n if (\n this.documentShouldBePostprocessed ||\n this.waitingForSplittingConfirmation(this.selectedDocument)\n ) {\n // delete the document categories since the backend doesn't need them\n const documentToProcess = this.updatedDocument.map((document) => {\n delete document.categories;\n return document;\n });\n this.$store\n .dispatch(\"edit/editDocument\", documentToProcess)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n\n const redirection = navigateToDocumentsList(\n this.documentsListPath,\n this.projectId\n );\n\n if (redirection) {\n this.$store.dispatch(\"edit/setRedirectingUser\", true);\n }\n } else {\n // Check if only the category and/or name changes:\n const newCategory = this.updatedDocument[0].category;\n const newName = this.updatedDocument[0].name;\n let category = {};\n let name = {};\n let revisedCategory = {};\n\n if (this.selectedDocument.category !== newCategory) {\n Object.assign(category, {\n category: newCategory,\n });\n\n this.$store.dispatch(\"document/startLoading\");\n }\n\n if (!this.selectedDocument.category_is_revised && newCategory) {\n Object.assign(revisedCategory, {\n category_is_revised: true,\n });\n }\n\n if (this.selectedDocument.data_file_name !== newName) {\n Object.assign(name, { data_file_name: newName });\n }\n\n if (!category && !name) {\n return;\n }\n\n const updatedValues = Object.assign(category, revisedCategory, name);\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedValues)\n .catch((error) => {\n this.$store.dispatch(\"document/endLoading\");\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n\n this.closeEditMode();\n },\n\n closeEditMode() {\n this.$store.dispatch(\"edit/disableEditMode\");\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n this.$store.dispatch(\"edit/setUpdatedDocument\", null);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n this.$store.dispatch(\"edit/setSubmitEditChanges\", false);\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", false);\n this.$nextTick(() => {\n // reset to first page\n this.$store.dispatch(\"display/updateCurrentPage\", 1);\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <div class=\"edit-sidebar\">\n <div class=\"buttons-container\">\n <div class=\"rotate-selected edit-buttons\">\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"buttonDisabled\"\n :button-text=\"$t('rotate_selected')\"\n :icon=\"'arrow-rotate-left'\"\n @rotate=\"rotateLeft\"\n />\n\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"buttonDisabled\"\n :button-text=\"$t('rotate_selected')\"\n :icon=\"'arrow-rotate-right'\"\n @rotate=\"rotateRight\"\n />\n\n <p :class=\"['pages-selected', buttonDisabled && 'disabled']\">\n {{ selectedPages.length }} {{ $t(\"selected\") }}\n </p>\n </div>\n\n <div class=\"rotate-all edit-buttons\">\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"false\"\n :button-text=\"$t('rotate_all')\"\n :icon=\"'arrow-rotate-left'\"\n @rotate=\"rotateAllLeft\"\n />\n\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"false\"\n :button-text=\"$t('rotate_all')\"\n :icon=\"'arrow-rotate-right'\"\n @rotate=\"rotateAllRight\"\n />\n </div>\n </div>\n <div class=\"smart-split\">\n <b-tooltip\n multilined\n :active=\"!documentHasProposedSplit(selectedDocument)\"\n position=\"is-bottom\"\n class=\"bottom-aligned split-tooltip\"\n :label=\"tooltipInfo\"\n >\n <b-field>\n <b-switch\n v-model=\"switchStatus\"\n :value=\"true\"\n size=\"is-small\"\n :disabled=\"!documentHasProposedSplit(selectedDocument)\"\n class=\"split-switch\"\n />\n <div class=\"switch-info\">\n <span class=\"switch-text\">{{ $t(\"smart_split\") }}</span>\n </div>\n </b-field>\n </b-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport SidebarButtons from \"./SidebarButtons\";\n\n/**\n * This component renders buttons to rotate single pages or all pages\n * in edit mode\n * */\nexport default {\n name: \"EditSidebar\",\n components: {\n SidebarButtons,\n },\n props: {\n splitSuggestionsEnabled: {\n type: Boolean,\n },\n },\n data() {\n return {\n buttonDisabled: true,\n tooltipInfo: null,\n switchStatus: true,\n };\n },\n computed: {\n ...mapState(\"edit\", [\"selectedPages\", \"updatedDocument\"]),\n ...mapState(\"document\", [\"splittingSuggestions\", \"selectedDocument\"]),\n ...mapGetters(\"document\", [\"documentHasProposedSplit\"]),\n },\n watch: {\n selectedPages(newValue) {\n if (newValue.length > 0) {\n this.buttonDisabled = false;\n } else {\n this.buttonDisabled = true;\n }\n },\n switchStatus(newValue) {\n if (this.splittingSuggestions && this.splittingSuggestions.length > 0)\n this.$emit(\"handle-splitting-suggestions\", newValue);\n },\n splitSuggestionsEnabled(newValue) {\n if (!newValue) {\n this.switchStatus = false;\n }\n },\n updatedDocument(newValue) {\n if (newValue && newValue.length === 1) {\n this.switchStatus = false;\n }\n },\n },\n mounted() {\n this.$nextTick(() => {\n this.switchStatus = this.splitSuggestionsEnabled;\n this.tooltipInfo = this.$t(\"no_splitting_suggestions\");\n });\n },\n methods: {\n rotateLeft() {\n this.$emit(\"rotate\", \"left\");\n },\n rotateRight() {\n this.$emit(\"rotate\", \"right\");\n },\n rotateAllLeft() {\n this.$emit(\"rotate-all-left\");\n },\n rotateAllRight() {\n this.$emit(\"rotate-all-right\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <div class=\"sidebar-buttons\">\n <!-- Rotate buttons -->\n <div v-if=\"showRotateButton\" class=\"rotate-button-container\">\n <b-button\n class=\"rotate-button edit-mode-btn primary-button\"\n :disabled=\"buttonDisabled\"\n @click=\"rotateButton\"\n >\n <div class=\"button-content\">\n <b-icon :icon=\"icon\" class=\"is-small\" />\n <span class=\"button-text\">{{ buttonText }}</span>\n </div>\n </b-button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"SidebarButtons\",\n props: {\n showRotateButton: {\n type: Boolean,\n default: false,\n },\n buttonDisabled: {\n type: Boolean,\n default: true,\n },\n buttonText: {\n type: String,\n default: null,\n },\n icon: {\n type: String,\n default: null,\n },\n tooltipInfo: {\n type: String,\n default: null,\n },\n },\n\n methods: {\n rotateButton() {\n this.$emit(\"rotate\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","import { render } from \"./SidebarButtons.vue?vue&type=template&id=c4cb62fa&scoped=true\"\nimport script from \"./SidebarButtons.vue?vue&type=script&lang=js\"\nexport * from \"./SidebarButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=c4cb62fa&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c4cb62fa\"]])\n\nexport default __exports__","import { render } from \"./EditSidebar.vue?vue&type=template&id=bc1216ea&scoped=true\"\nimport script from \"./EditSidebar.vue?vue&type=script&lang=js\"\nexport * from \"./EditSidebar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=bc1216ea&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bc1216ea\"]])\n\nexport default __exports__","<template>\n <div class=\"rename-and-categorize\">\n <div class=\"back-section\" @click=\"handleBackButton\">\n <div class=\"back-btn-section\">\n <b-icon\n icon=\"arrow-left\"\n class=\"is-small arrow\"\n :style=\"{ color: '#1a1a1a', cursor: 'pointer' }\"\n />\n </div>\n <div class=\"back-text\">\n {{ $t(\"rotate_split_reorder\") }}\n </div>\n </div>\n <div class=\"rename-and-categorize-title\">\n {{ $t(\"rename_and_categorize\") }}\n </div>\n <div class=\"new-documents-container\">\n <div\n v-for=\"(page, index) in updatedDocument\"\n :key=\"index\"\n class=\"document-details\"\n >\n <div class=\"rename-and-categorize-thumbnails\">\n <div class=\"split-documents\">\n <div\n class=\"image-container\"\n @click=\"handlePageChange(page.pages[0].number)\"\n >\n <div\n :class=\"['thumbnail', page.pages.length > 1 && 'page-stack']\"\n >\n <ServerImage\n ref=\"image\"\n :style=\"{\n transform:\n 'rotate(' + getRotation(page.pages[0].id) + 'deg)',\n }\"\n :image-url=\"getImageUrl(page)\"\n class=\"page-thumbnail\"\n >\n <b-skeleton width=\"60px\" height=\"60px\" />\n </ServerImage>\n <div class=\"icon-container\">\n <div class=\"action-icon\">\n <EyeIcon />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"doc-info\">\n <div class=\"file-name-section\">\n <input\n type=\"text\"\n class=\"name-input\"\n :value=\"getFileName(page.name)\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @blur=\"handleChanges(page)\"\n />\n <div class=\"file-extension-container\">\n <span>{{ `.${fileExtension}` }}</span>\n </div>\n </div>\n <div class=\"category\">\n <DocumentCategory\n :selected-document=\"selectedDocument\"\n :split-mode=\"splitMode\"\n :page=\"page\"\n :index=\"index\"\n @category-change=\"handleChanges\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\n/**\n * This component will only be rendered if document pages were split\n */\n\nimport { mapState } from \"vuex\";\nimport DocumentCategory from \"../../components/DocumentCategory\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport EyeIcon from \"../../assets/images/EyeIcon\";\n\nexport default {\n name: \"RenameAndCategorize\",\n components: {\n DocumentCategory,\n ServerImage,\n EyeIcon,\n },\n props: {\n fileName: {\n type: String,\n default: \"\",\n },\n fileExtension: {\n type: String,\n default: \"\",\n },\n },\n data() {\n return {\n splitMode: true,\n updatedFileName: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\"selectedDocument\", \"pages\"]),\n ...mapState(\"edit\", [\"updatedDocument\", \"pagesForPostprocess\"]),\n },\n\n methods: {\n handleBackButton() {\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n handleInput(event) {\n this.updatedFileName = event.target.value.trim();\n },\n handleChanges(page, category) {\n // This function handles file name or category changes\n const updatedPages = this.updatedDocument.map((splitPage) => {\n if (splitPage.pages[0].id === page.pages[0].id) {\n if (this.updatedFileName) {\n return {\n ...splitPage,\n name: `${this.updatedFileName}.${this.fileExtension}`,\n };\n } else if (category) {\n return {\n ...splitPage,\n category: category,\n };\n } else {\n return splitPage;\n }\n }\n return splitPage;\n });\n\n this.$store.dispatch(\"edit/setUpdatedDocument\", updatedPages);\n\n if (this.updatedFileName) {\n this.updatedFileName = null;\n }\n },\n handlePageChange(pageNumber) {\n this.$emit(\"change-page\", pageNumber);\n },\n getFileName(name) {\n if (!name) return;\n\n // Do not show file extension\n return name.split(\".\").slice(0, -1).join(\".\");\n },\n getImageUrl(page) {\n if (!this.pagesForPostprocess || !this.pages || !page) return;\n\n // returns the first thumbnail in the pages array\n // for each new document\n const image = this.pagesForPostprocess.find(\n (p) => p.number === page.pages[0].number\n );\n\n return `${image.thumbnail_url}?${image.updated_at}`;\n },\n getRotation(pageId) {\n // rotate page\n return this.pagesForPostprocess?.find((p) => p.id === pageId)?.angle;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <b-tooltip\n v-if=\"categories\"\n multilined\n :active=\"tooltipIsShown || dropdownIsDisabled\"\n size=\"is-large\"\n position=\"is-bottom\"\n :class=\"[\n editMode\n ? 'right-aligned full-height-tooltip'\n : 'left-aligned full-height-tooltip',\n ]\"\n >\n <template #content>\n <div ref=\"tooltipContent\"></div>\n </template>\n <b-dropdown\n :class=\"[\n 'category-chooser',\n splitMode && 'split-mode',\n isDocumentReviewed && 'disabled',\n ]\"\n aria-role=\"list\"\n scrollable\n :disabled=\"dropdownIsDisabled\"\n >\n <template #trigger>\n <div class=\"category-drop-down\">\n <div class=\"icon\">\n <CategoryIcon />\n </div>\n <div class=\"category-info\">\n <p v-if=\"!splitMode\" class=\"category-title\">\n {{ $t(\"category\") }}\n </p>\n <div class=\"category-name\">\n <span>\n {{ setCategoryDefaultText }}\n </span>\n <span v-if=\"splitMode && setCategoryConfidence >= 0\">\n {{ `(${setCategoryConfidence}%)` }}\n </span>\n </div>\n </div>\n <div :class=\"[!splitMode && 'caret-section']\">\n <b-icon\n icon=\"angle-down\"\n size=\"is-small\"\n :class=\"['caret', splitMode && 'split-mode-caret']\"\n />\n </div>\n </div>\n </template>\n\n <b-dropdown-item\n v-for=\"category in listOfCategories()\"\n :key=\"category.id\"\n aria-role=\"listitem\"\n class=\"list-item\"\n :disabled=\"handleOptionInDropdownDisabled(category)\"\n @click=\"handleChangeCategory(category)\"\n >\n <span>{{ category.name }}</span>\n <span v-if=\"splitMode && category.confidence >= 0\">{{\n ` (${category.confidence}%)`\n }}</span>\n </b-dropdown-item>\n </b-dropdown>\n </b-tooltip>\n <div v-else class=\"loading-bar\">\n <b-skeleton width=\"auto\" height=\"100%\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CategoryIcon from \"../assets/images/CategoryIconImg\";\n\nexport default {\n name: \"DocumentCategory\",\n components: {\n CategoryIcon,\n },\n props: {\n splitMode: {\n type: Boolean,\n },\n page: {\n type: Object,\n default: null,\n },\n index: {\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n categoryError: false,\n tooltipIsShown: false,\n dropdownIsDisabled: false,\n };\n },\n computed: {\n ...mapGetters(\"category\", [\n \"categoryName\",\n \"projectHasSingleCategory\",\n \"categoryConfidence\",\n ]),\n ...mapGetters(\"document\", [\n \"documentCannotBeEdited\",\n \"documentHasCorrectAnnotations\",\n \"isDocumentReviewed\",\n ]),\n ...mapState(\"document\", [\"selectedDocument\", \"annotations\"]),\n ...mapState(\"category\", [\"categories\"]),\n ...mapState(\"edit\", [\"editMode\", \"updatedDocument\"]),\n\n setCategoryDefaultText() {\n if (!this.splitMode) {\n return this.categoryName(this.selectedDocument.category);\n } else {\n const missingCategory = this.updatedDocument.find(\n (item) => !item.category\n );\n\n // if there is just 1 category in the project,\n // and one or more sub-documents has no category,\n // assign the only category by default\n if (this.projectHasSingleCategory && missingCategory) {\n const updatedValuesForDocuments = this.updatedDocument.map(\n (document) => {\n if (!document.category && this.categories) {\n document.category = this.categories[0].id;\n }\n\n return document;\n }\n );\n\n // update the store state\n // so that if the changes are saved the data sent to the API is updated\n // instead of only handling the category name in this component\n this.$store.dispatch(\n \"edit/setUpdatedDocument\",\n updatedValuesForDocuments\n );\n }\n\n const categoryName = this.categoryName(\n this.updatedDocument[this.index].category\n );\n\n return categoryName ? categoryName : this.$t(\"choose_category\");\n }\n },\n\n setCategoryConfidence() {\n if (\n !this.updatedDocument[this.index].categories ||\n !this.categoryName(this.updatedDocument[this.index].category)\n )\n return;\n\n const found = this.updatedDocument[this.index].categories.find(\n (category) => category.id === this.updatedDocument[this.index].category\n );\n\n return this.categoryConfidence(found.confidence);\n },\n },\n watch: {\n annotations() {\n this.checkIfDropdownIsDisabled();\n this.setTooltipText();\n },\n },\n mounted() {\n if (this.projectHasSingleCategory) {\n this.tooltipIsShown = true;\n }\n },\n updated() {\n this.setTooltipText();\n this.checkIfDropdownIsDisabled();\n },\n methods: {\n listOfCategories() {\n let list;\n\n if (this.splitMode && this.updatedDocument[this.index].categories) {\n list = this.handleCategories(\n this.updatedDocument[this.index].categories\n );\n } else if (this.categories) {\n const filtered = this.categories.filter(\n (category) => category.project === this.selectedDocument.project\n );\n list = this.handleCategories(filtered);\n }\n\n return list;\n },\n handleCategories(categories) {\n return categories.map((category) => {\n return {\n id: category.id,\n name: this.categoryName(category.id),\n confidence: this.categoryConfidence(category.confidence),\n };\n });\n },\n checkIfDropdownIsDisabled() {\n if (\n this.projectHasSingleCategory ||\n this.documentCannotBeEdited(this.selectedDocument) ||\n (this.documentHasCorrectAnnotations && !this.splitMode)\n ) {\n this.dropdownIsDisabled = true;\n } else {\n this.dropdownIsDisabled = false;\n }\n },\n // The current category name will change\n // depending on if we are on edit mode or not\n handleOptionInDropdownDisabled(category) {\n if (!this.splitMode)\n return category.id === this.selectedDocument.category;\n\n return category.id === this.updatedDocument[this.index].category;\n },\n handleChangeCategory(category) {\n // handling the category change will be different based on\n // the dropdown being on the topbar or the Rename and Categorize view\n const updatedCategory = {\n category: category.id,\n };\n\n if (!this.splitMode) {\n this.$store.dispatch(\"document/startRecalculatingAnnotations\");\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedCategory)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/endRecalculatingAnnotations\");\n });\n\n return;\n }\n\n // Send the category ID to the Rename and Categorize view\n // to update the new document category\n this.$emit(\"category-change\", this.page, category.id);\n },\n setTooltipText() {\n if (this.categories) {\n // Text set from innerHTML vs 'label' due to html tag in locales file string\n let tooltipText;\n\n if (this.documentCannotBeEdited(this.selectedDocument)) {\n tooltipText = this.$t(\"edit_not_available\");\n } else if (this.documentHasCorrectAnnotations) {\n tooltipText = this.$t(\"approved_annotations\");\n } else if (this.projectHasSingleCategory) {\n tooltipText = this.$t(\"single_category_in_project\");\n }\n\n this.$refs.tooltipContent.innerHTML = tooltipText;\n }\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/document_category.scss\"></style>\n","import { render } from \"./DocumentCategory.vue?vue&type=template&id=00b8045a&scoped=true\"\nimport script from \"./DocumentCategory.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentCategory.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/document_category.scss?vue&type=style&index=0&id=00b8045a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-00b8045a\"]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"#FFFFFF\"\n d=\"M21.92,11.6C19.9,6.91,16.1,4,12,4S4.1,6.91,2.08,11.6a1,1,0,0,0,0,.8C4.1,17.09,7.9,20,12,20s7.9-2.91,9.92-7.6A1,1,0,0,0,21.92,11.6ZM12,18c-3.17,0-6.17-2.29-7.9-6C5.83,8.29,8.83,6,12,6s6.17,2.29,7.9,6C18.17,15.71,15.17,18,12,18ZM12,8a4,4,0,1,0,4,4A4,4,0,0,0,12,8Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,12,14Z\"\n />\n </svg>\n</template>\n","import { render } from \"./EyeIcon.vue?vue&type=template&id=42c8617a\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./RenameAndCategorize.vue?vue&type=template&id=7b950a9d&scoped=true\"\nimport script from \"./RenameAndCategorize.vue?vue&type=script&lang=js\"\nexport * from \"./RenameAndCategorize.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=7b950a9d&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7b950a9d\"]])\n\nexport default __exports__","<template>\n <div class=\"edit-pages\">\n <div class=\"grid-header\">\n <span class=\"header-title\">{{ $t(\"rotate_split_reorder\") }}</span>\n </div>\n <draggable\n v-model=\"editPages\"\n class=\"document-grid\"\n easing=\"cubic-bezier(0.37, 0, 0.63, 1)\"\n item-key=\"id\"\n :move=\"checkMove\"\n @start=\"dragging = true\"\n @end=\"handleDragEnd\"\n >\n <template #item=\"{ element, index }\">\n <div\n :id=\"element.id\"\n :key=\"element.id\"\n class=\"image-section\"\n tabindex=\"0\"\n >\n <div class=\"top-section\">\n <EditPageThumbnail\n :page=\"element\"\n :index=\"index\"\n :rotation=\"getRotation(element.id)\"\n />\n <div\n :class=\"[\n 'splitting-lines',\n splittingLines &&\n splittingLines[index].page === element.number &&\n 'active-split',\n ]\"\n @click=\"handleSplittingLines(element.number, 'manual')\"\n >\n <div class=\"scissors-icon\">\n <b-icon icon=\"scissors\" class=\"is-small\" />\n </div>\n <div\n v-if=\"\n splittingLines &&\n splittingLines[index].page === element.number\n \"\n class=\"lines active-split\"\n >\n <SplitZigZag\n :color=\"\n splittingLines &&\n splittingLines[index].origin &&\n splittingLines[index].origin === 'AI' &&\n splitSuggestionsEnabled\n ? 'green'\n : 'dark'\n \"\n />\n </div>\n <div v-else class=\"lines not-active-split\">\n <SplitLines />\n </div>\n </div>\n </div>\n <div class=\"bottom-section\">\n <span class=\"page-number\">{{ element.number }}</span>\n </div>\n </div>\n </template>\n </draggable>\n </div>\n</template>\n\n<script>\n/**\n * This component renders a grid of the document pages\n * that will be possible to resort, split and/or rotate\n */\n\nimport { mapState } from \"vuex\";\nimport SplitLines from \"../../assets/images/SplitLines\";\nimport SplitZigZag from \"../../assets/images/SplitZigZag\";\nimport EditPageThumbnail from \"./EditPageThumbnail\";\nimport draggable from \"vuedraggable\";\n\nexport default {\n name: \"EditPages\",\n components: {\n SplitLines,\n SplitZigZag,\n EditPageThumbnail,\n draggable,\n },\n props: {\n splittingLines: {\n type: Array,\n default: null,\n },\n splitSuggestionsEnabled: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n editPages: null,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"pages\",\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"pagesForPostprocess\",\n \"renameAndCategorize\",\n ]),\n },\n watch: {\n pagesForPostprocess(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.editPages = newValue;\n }\n },\n editPages(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$store.dispatch(\"edit/setPagesForPostprocess\", newValue);\n }\n },\n renameAndCategorize(newValue) {\n if (newValue) {\n this.editPages = this.pagesForPostprocess;\n }\n },\n },\n mounted() {\n if (this.pagesForPostprocess.length > 0) {\n this.editPages = this.pagesForPostprocess;\n }\n },\n methods: {\n deselect() {\n this.$store.dispatch(\"edit/setSelectedPages\");\n },\n getRotation(pageId) {\n // rotate page\n return this.pagesForPostprocess?.find((p) => p.id === pageId)?.angle;\n },\n handleSplittingLines(page, origin) {\n this.$emit(\"handle-splitting-lines\", page, origin);\n },\n checkMove(event) {\n this.$emit(\"check-move\", event);\n },\n handleDragEnd() {\n this.draggable = false;\n\n this.$emit(\"handle-drag-end\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <svg\n width=\"2\"\n height=\"59\"\n viewBox=\"0 0 2 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 0.908203V58.2693\"\n stroke=\"#858C9A\"\n stroke-opacity=\"0.4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-dasharray=\"2 2\"\n />\n </svg>\n</template>\n","import { render } from \"./SplitLines.vue?vue&type=template&id=68253c62\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <svg\n v-if=\"color === 'dark'\"\n width=\"6\"\n height=\"57\"\n viewBox=\"0 0 6 57\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1L5 7.875L1 14.75L5 21.625L1 28.5L5 35.375L1 42.25L5 49.125L1 56\"\n stroke=\"#1A1A1A\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <svg\n v-if=\"color === 'green'\"\n width=\"6\"\n height=\"52\"\n viewBox=\"0 0 6 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.67383L5 7.81966L1 13.9655L5 20.1113L1 26.2572L5 32.403L1 38.5488L5 44.6947L1 50.8405\"\n stroke=\"#44B78B\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"SplitZigZag\",\n props: {\n color: {\n type: String,\n default: null,\n required: false,\n },\n },\n};\n</script>\n","import { render } from \"./SplitZigZag.vue?vue&type=template&id=97f0589c\"\nimport script from \"./SplitZigZag.vue?vue&type=script&lang=js\"\nexport * from \"./SplitZigZag.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"edit-page-thumbnail\"\n :tabindex=\"index\"\n @mouseenter=\"isHover = true\"\n @mouseleave=\"isHover = false\"\n >\n <div\n :class=\"[\n 'page-thumbnail',\n isVisible && 'visible',\n checkboxValue && 'selected',\n ]\"\n :style=\"`rotate:${rotation}deg`\"\n @click=\"selectPage()\"\n >\n <ServerImage :image-url=\"`${page.thumbnail_url}?${page.updated_at}`\">\n <b-skeleton width=\"80px\" height=\"80px\" />\n </ServerImage>\n\n <div v-if=\"isVisible\" class=\"action-icon\">\n <EyeIcon />\n </div>\n </div>\n <b-checkbox\n v-show=\"isHover || checkboxValue\"\n v-model=\"checkboxValue\"\n class=\"action-checkbox\"\n @input=\"checkboxInput\"\n />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport EyeIcon from \"../../assets/images/EyeIcon\";\n\nexport default {\n name: \"EditPageThumbnail\",\n components: {\n ServerImage,\n EyeIcon,\n },\n props: {\n page: {\n required: true,\n type: Object,\n default: null,\n },\n index: {\n required: true,\n type: Number,\n default: 0,\n },\n rotation: {\n required: false,\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n isHover: false,\n checkboxValue: false,\n };\n },\n computed: {\n ...mapState(\"display\", [\"currentPage\"]),\n ...mapState(\"edit\", [\"selectedPages\"]),\n ...mapGetters(\"edit\", [\"isPageSelected\"]),\n isVisible() {\n return this.currentPage === this.page.number;\n },\n isSelected() {\n return this.isPageSelected(this.page.id) !== undefined;\n },\n },\n watch: {\n isSelected() {\n this.checkboxValue = this.isSelected;\n },\n },\n mounted() {\n this.checkboxValue = this.isSelected;\n },\n methods: {\n selectPage(value = !this.isSelected) {\n this.changePage();\n this.$store.dispatch(\n value ? \"edit/selectPage\" : \"edit/unselectPage\",\n this.page\n );\n },\n checkboxInput(value) {\n this.selectPage(value);\n },\n changePage() {\n if (!this.isVisible) {\n this.$store.dispatch(\n \"display/updateCurrentPage\",\n parseInt(this.page.number, 10)\n );\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/edit_page_thumbnail.scss\"\n></style>\n","import { render } from \"./EditPageThumbnail.vue?vue&type=template&id=3284908e&scoped=true\"\nimport script from \"./EditPageThumbnail.vue?vue&type=script&lang=js\"\nexport * from \"./EditPageThumbnail.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/edit_page_thumbnail.scss?vue&type=style&index=0&id=3284908e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3284908e\"]])\n\nexport default __exports__","import { render } from \"./EditPages.vue?vue&type=template&id=233044dc&scoped=true\"\nimport script from \"./EditPages.vue?vue&type=script&lang=js\"\nexport * from \"./EditPages.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=233044dc&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-233044dc\"]])\n\nexport default __exports__","<template>\n <div class=\"split-info-bar\">\n <div class=\"bar-icon\">\n <StarIcon />\n </div>\n <span> {{ $t(\"smart_split_suggestions\") }}</span>\n </div>\n</template>\n\n<script>\nimport StarIcon from \"../../assets/images/StarIcon\";\n\nexport default {\n name: \"SplitInfoBar\",\n components: {\n StarIcon,\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.99935 0.667969C3.36754 0.667969 3.66602 0.966446 3.66602 1.33464V2.33464H4.66602C5.03421 2.33464 5.33268 2.63311 5.33268 3.0013C5.33268 3.36949 5.03421 3.66797 4.66602 3.66797H3.66602V4.66797C3.66602 5.03616 3.36754 5.33464 2.99935 5.33464C2.63116 5.33464 2.33268 5.03616 2.33268 4.66797V3.66797H1.33268C0.964492 3.66797 0.666016 3.36949 0.666016 3.0013C0.666016 2.63311 0.964492 2.33464 1.33268 2.33464H2.33268V1.33464C2.33268 0.966446 2.63116 0.667969 2.99935 0.667969ZM8.66601 1.33464C8.94186 1.33464 9.18922 1.50452 9.28824 1.76198L10.4444 4.76789C10.6446 5.28859 10.7076 5.43863 10.7936 5.5597C10.88 5.68117 10.9861 5.7873 11.1076 5.87367C11.2287 5.95975 11.3787 6.02268 11.8994 6.22295L14.9053 7.37907C15.1628 7.47809 15.3327 7.72545 15.3327 8.0013C15.3327 8.27715 15.1628 8.52451 14.9053 8.62353L11.8994 9.77965C11.3787 9.97992 11.2287 10.0429 11.1076 10.1289C10.9861 10.2153 10.88 10.3214 10.7936 10.4429C10.7076 10.564 10.6446 10.714 10.4444 11.2347L9.28825 14.2406C9.18922 14.4981 8.94186 14.668 8.66602 14.668C8.39017 14.668 8.14281 14.4981 8.04379 14.2406L6.88767 11.2347C6.6874 10.714 6.62447 10.564 6.53838 10.4429C6.45201 10.3214 6.34588 10.2153 6.22441 10.1289C6.10335 10.0429 5.9533 9.97992 5.4326 9.77965L2.4267 8.62353C2.16923 8.52451 1.99935 8.27715 1.99935 8.0013C1.99935 7.72545 2.16923 7.47809 2.4267 7.37907L5.4326 6.22295C5.9533 6.02268 6.10335 5.95975 6.22441 5.87367C6.34588 5.7873 6.45201 5.68117 6.53838 5.5597C6.62447 5.43863 6.6874 5.28859 6.88767 4.76789L8.04378 1.76198C8.14281 1.50452 8.39017 1.33464 8.66601 1.33464ZM2.99935 10.668C3.36754 10.668 3.66602 10.9664 3.66602 11.3346V12.3346H4.66602C5.03421 12.3346 5.33268 12.6331 5.33268 13.0013C5.33268 13.3695 5.03421 13.668 4.66602 13.668H3.66602V14.668C3.66602 15.0362 3.36754 15.3346 2.99935 15.3346C2.63116 15.3346 2.33268 15.0362 2.33268 14.668V13.668H1.33268C0.964492 13.668 0.666016 13.3695 0.666016 13.0013C0.666016 12.6331 0.964492 12.3346 1.33268 12.3346H2.33268V11.3346C2.33268 10.9664 2.63116 10.668 2.99935 10.668Z\"\n fill=\"#41AF85\"\n />\n </svg>\n</template>\n","import { render } from \"./StarIcon.vue?vue&type=template&id=7e0c3e8e\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SplitInfoBar.vue?vue&type=template&id=53be5126&scoped=true\"\nimport script from \"./SplitInfoBar.vue?vue&type=script&lang=js\"\nexport * from \"./SplitInfoBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=53be5126&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-53be5126\"]])\n\nexport default __exports__","<template>\n <section class=\"edit-confirmation-modal\">\n <b-modal v-model=\"isModalActive\" :can-cancel=\"[]\" class=\"edit-modal\">\n <section class=\"modal-card-body\">\n <div class=\"header\">\n <p class=\"modal-title\">{{ $t(\"confirm_splitting\") }}</p>\n </div>\n <div class=\"content\">{{ $t(\"splitting_warning\") }}</div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button @click=\"closeModal\">\n {{ $t(\"no\") }}\n </b-button>\n <b-button type=\"is-primary\" @click=\"confirmChanges\">\n {{ $t(\"yes\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n/**\n * This component shows a modal to confirm the edit changes in the document\n */\nexport default {\n name: \"EditConfirmationModal\",\n data() {\n return {\n isModalActive: false,\n };\n },\n computed: {\n ...mapState(\"edit\", [\"showEditConfirmationModal\"]),\n },\n watch: {\n showEditConfirmationModal(newValue) {\n this.isModalActive = newValue;\n },\n },\n methods: {\n closeModal() {\n this.isModalActive = false;\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", false);\n },\n confirmChanges() {\n this.$emit(\"save-changes\");\n this.isModalActive = false;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","import { render } from \"./EditConfirmationModal.vue?vue&type=template&id=01991ceb&scoped=true\"\nimport script from \"./EditConfirmationModal.vue?vue&type=script&lang=js\"\nexport * from \"./EditConfirmationModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=01991ceb&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-01991ceb\"]])\n\nexport default __exports__","import { render } from \"./DocumentEdit.vue?vue&type=template&id=0ecba500&scoped=true\"\nimport script from \"./DocumentEdit.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentEdit.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=0ecba500&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ecba500\"]])\n\nexport default __exports__","<template>\n <b-message>\n <div v-if=\"serverError\" class=\"message-container\">\n <span class=\"server-error\">\n {{ errorMessage }}\n <span\n v-if=\"showBranding\"\n class=\"contact-support\"\n @click=\"handleGetSupport\"\n >\n {{ $t(\"get_support\") }} <b-icon icon=\"arrow-right\" size=\"is-small\"\n /></span>\n </span>\n </div>\n <div v-else class=\"message-container\">\n {{ errorMessage }}\n </div>\n <div class=\"btn-container\" type=\"button\" @click=\"handleErrorClose\">\n <b-icon icon=\"xmark\" class=\"close-btn error-icon\" size=\"is-small\" />\n </div>\n </b-message>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"ErrorMessage\",\n computed: {\n ...mapState(\"document\", [\"errorMessage\", \"serverError\"]),\n ...mapState(\"display\", [\"showBranding\"]),\n },\n methods: {\n handleGetSupport() {\n const error = \"Server error\";\n this.$store.dispatch(\"document/contactSupport\", error);\n },\n handleErrorClose() {\n this.$store.dispatch(\"document/setErrorMessage\", null);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/variables.scss\"></style>\n","import { render } from \"./ErrorMessage.vue?vue&type=template&id=4692340c&scoped=true\"\nimport script from \"./ErrorMessage.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorMessage.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/variables.scss?vue&type=style&index=0&id=4692340c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4692340c\"]])\n\nexport default __exports__","<template>\n <section class=\"viewport-modal\">\n <b-modal v-model=\"isModalActive\" class=\"modal-text-center\" :width=\"500\">\n <section class=\"modal-card-body\">\n <div class=\"image\">\n <Illustration />\n </div>\n <div class=\"content\">\n <h3>{{ $t(\"small_viewport_title\") }}</h3>\n <p>{{ $t(\"small_viewport_info\") }}</p>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button\n type=\"is-primary\"\n class=\"primary-button\"\n @click=\"handleNotOptimizedModal\"\n >\n {{ $t(\"ok\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport Illustration from \"../../assets/images/NotOptimizedIllustration\";\n\nexport default {\n name: \"NotOptimizedViewportModal\",\n components: {\n Illustration,\n },\n data() {\n return {\n isModalActive: true,\n };\n },\n methods: {\n handleNotOptimizedModal() {\n this.isModalActive = false;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_viewport_modal.scss\"\n></style>\n","<template>\n <svg\n width=\"179\"\n height=\"202\"\n viewBox=\"0 0 179 202\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity=\"0.6\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M143.279 186.492C131.002 186.492 121.053 188.111 121.053 190.084C121.053 192.056 131.002 193.65 143.279 193.65C155.557 193.65 165.506 192.056 165.506 190.084C165.506 188.111 155.557 186.492 143.279 186.492Z\"\n fill=\"#D7D7D7\"\n />\n <path\n opacity=\"0.6\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M51.001 185.697C36.4215 185.697 24.6074 187.496 24.6074 189.688C24.6074 191.879 36.4215 193.65 51.001 193.65C65.5805 193.65 77.3946 191.879 77.3946 189.688C77.3946 187.496 65.5805 185.697 51.001 185.697Z\"\n fill=\"#D7D7D7\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.6212 55.6689C55.8724 55.6689 52.7847 58.7319 52.7847 62.4941C52.7847 66.575 56.1487 69.2773 59.6635 69.2773C61.3508 69.2773 63.0725 68.6542 64.4742 67.2637C68.7969 63.0201 65.7529 55.6689 59.6212 55.6689ZM59.6807 55.0117C61.5187 55.0117 63.3912 55.6886 64.9145 57.1998C69.6789 61.8815 66.3268 69.8899 59.6212 69.8899C55.5193 69.8899 52.1672 66.5645 52.1235 62.4941C52.1235 57.9908 55.8248 55.0117 59.6807 55.0117Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.6212 50.7079C55.8724 50.7079 52.7847 53.7274 52.7847 57.4905C52.7847 61.6026 56.1527 64.3138 59.6701 64.3138C61.3548 64.3138 63.0738 63.692 64.4742 62.303C68.7969 58.0152 65.7529 50.7079 59.6212 50.7079ZM59.6741 50.0508C61.5148 50.0508 63.3899 50.7263 64.9145 52.2399C69.6789 56.9213 66.3268 64.9289 59.6212 64.9289C55.5193 64.9289 52.1672 61.6026 52.1235 57.4905C52.1235 53.0191 55.8208 50.0508 59.6741 50.0508Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.4537 22.0168C55.2169 22.0168 53.418 23.7907 53.418 25.9445C53.418 28.2869 55.405 29.838 57.4918 29.838C58.4898 29.838 59.5115 29.4834 60.3492 28.6895C62.8923 26.2408 61.0948 22.0168 57.4537 22.0168ZM57.5115 21.6445C58.599 21.6445 59.7075 22.0332 60.6122 22.9044C63.3749 25.6064 61.4011 30.1684 57.4537 30.2102C55.0407 30.1684 53.0236 28.2679 53.0236 25.9445C53.0236 23.3678 55.2209 21.6445 57.5115 21.6445Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M58.3535 20.647C56.1165 20.647 54.3174 22.4249 54.3174 24.5834C54.3174 26.9311 56.3045 28.4843 58.3916 28.4843C59.3898 28.4843 60.4116 28.129 61.2494 27.3346C63.7928 24.8791 61.995 20.647 58.3535 20.647ZM58.4127 20.293C59.5003 20.293 60.6089 20.6775 61.5124 21.5353C64.2755 24.2446 62.3015 28.8587 58.3535 28.8587C55.8968 28.8587 53.9228 26.912 53.9228 24.5834C53.9228 21.9998 56.1217 20.293 58.4127 20.293Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M100.474 9.01953C101.422 9.01953 102.959 9.29418 103.44 9.66344C102.341 15.0553 92.8031 27.241 90.5615 29.1701C85.3734 33.5974 70.7352 40.1285 70.7352 40.1285L67.8782 30.9678C67.8782 30.9678 85.0663 25.9269 86.2971 23.8217C87.9233 21.0174 97.6381 12.0748 100.012 9.04976C100.138 9.02873 100.295 9.01953 100.474 9.01953Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M101.228 4.96094L106.142 5.2734C105.428 7.28761 104.42 9.12079 103.16 10.8212L99.8417 9.65718L101.228 4.96094Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M103.392 0.00195312L105.846 1.04704L106.142 5.40995L101.192 5.04752L103.392 0.00195312Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.4585 30.6621C63.2449 30.6621 65.0325 30.7172 66.8082 30.8261C68.3629 30.9573 69.8723 31.2198 71.1155 31.4389C72.9804 31.7893 74.4898 33.1894 74.9783 34.9844C76.3107 40.0612 77.0655 45.2706 77.1986 50.5233C77.3317 55.7313 73.1574 60.1087 67.8291 60.24L60.592 60.4145C60.5042 60.4171 60.4177 60.4184 60.3298 60.4184C55.7362 60.4184 51.8348 57.0461 51.313 52.5361C50.8245 48.6849 50.0245 43.2131 48.382 34.9398C48.0719 33.234 49.2259 31.5701 51.0016 31.351C52.4671 31.1319 54.3319 30.914 56.1076 30.8261C57.8833 30.7172 59.6709 30.6621 61.4585 30.6621Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.3134 20.7422L63.5843 22.432C63.0139 25.1022 62.9258 29.8623 66.7401 30.7519C66.7401 30.7519 69.6777 34.2663 63.9339 34.2663C57.621 34.2663 56.1739 30.7519 56.1739 30.7519C58.4977 28.4379 58.06 24.1672 57.3134 20.7422Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.5256 20.7422L63.6546 22.437C63.3091 23.9585 63.1357 26.1744 63.8267 27.9552C63.2651 27.8249 62.7049 27.6516 62.1434 27.3911C60.0292 26.392 58.9501 24.8274 57.8271 22.5243C57.7417 21.9159 57.6122 21.3076 57.5256 20.7422Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.515 18.9375C57.7373 18.9375 57.9608 18.9756 58.1805 19.0603C59.43 19.5934 59.775 21.1914 58.74 22.1334C58.0074 22.9121 56.9297 23.4034 55.8094 23.444C55.7887 23.4452 55.7667 23.4452 55.7461 23.4452C54.3311 23.4452 53.9228 22.0757 54.6451 20.9039C55.153 20.0085 56.3314 18.9375 57.515 18.9375Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M60.1306 8.56836C60.4785 8.56836 60.8342 8.59738 61.1952 8.6607C65.9937 9.45221 68.2184 16.0085 68.2615 20.2773C68.3282 23.8272 65.5177 26.6014 62.3343 26.6014C61.2959 26.6014 60.2182 26.3059 59.1876 25.6464C56.3954 23.8417 55.7846 21.1572 54.3891 16.7129C53.0224 12.6591 56.0619 8.56836 60.1306 8.56836Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.3498 9.91992C61.3772 9.91992 61.4046 9.9239 61.4293 9.93185C61.5662 9.93185 61.7032 10.0207 61.795 10.1533C61.8621 10.0883 61.9772 10.0472 62.0881 10.0472C62.1292 10.0472 62.1689 10.0525 62.2059 10.0644C62.3429 10.1095 62.4799 10.197 62.5716 10.3309C62.6251 10.2779 62.71 10.2567 62.799 10.2567C62.8607 10.2567 62.9264 10.2673 62.9826 10.2859C63.1195 10.3747 63.2565 10.5073 63.2565 10.6399C63.3332 10.6213 63.4003 10.6107 63.4633 10.6107C63.5538 10.6107 63.6332 10.6319 63.714 10.6836C63.851 10.7724 63.9428 10.905 63.9428 11.0376C64.0797 11.0376 64.2619 11.0376 64.3537 11.1702C64.4907 11.259 64.5824 11.4354 64.5359 11.613C64.7646 11.613 64.9016 11.7019 64.9934 11.8782C65.0851 12.0545 65.0851 12.276 64.9468 12.4536C65.0851 12.5411 65.1755 12.7626 65.1303 12.9402C65.1303 13.1166 64.9934 13.2929 64.8098 13.338C64.8564 13.5143 64.8098 13.692 64.6728 13.8683C64.5865 13.9532 64.4811 13.9837 64.3688 13.9837C64.3044 13.9837 64.2373 13.9731 64.1701 13.9572C64.1071 14.1719 63.9113 14.3019 63.7058 14.3019C63.6154 14.3019 63.5236 14.2767 63.4401 14.2223C63.3935 14.3112 63.3031 14.4437 63.1661 14.4875C63.0278 14.4875 62.8456 14.4875 62.7538 14.3987C62.7086 14.5312 62.5716 14.6201 62.4347 14.6652C62.2977 14.6652 62.1607 14.6652 62.0689 14.5763C61.9772 14.7089 61.8868 14.7977 61.7484 14.8415C61.7128 14.8534 61.6758 14.8587 61.6388 14.8587C61.5388 14.8587 61.4388 14.8176 61.3375 14.7527C61.2923 14.8852 61.2005 14.9741 61.0635 15.0179C61.0265 15.0298 60.9896 15.0351 60.9539 15.0351C60.8526 15.0351 60.7526 14.994 60.6526 14.9303C60.6074 15.0629 60.4691 15.1504 60.3321 15.1955C60.3061 15.2088 60.2718 15.2141 60.2334 15.2141C60.1417 15.2141 60.0321 15.1822 59.9677 15.1504C59.9212 15.2392 59.7842 15.3281 59.6472 15.3718C59.5911 15.3904 59.5335 15.401 59.4801 15.401C59.4047 15.401 59.3349 15.3798 59.2815 15.3281C59.1938 15.4991 59.0281 15.5972 58.8486 15.5972C58.75 15.5972 58.6473 15.5681 58.55 15.5044C58.5048 15.637 58.413 15.7258 58.2761 15.7696H58.2309C58.1993 15.7776 58.1678 15.7815 58.1364 15.7815C57.987 15.7815 57.8419 15.6954 57.7282 15.5495C57.6254 15.6489 57.4967 15.698 57.3624 15.698C57.3172 15.698 57.2706 15.6927 57.2254 15.6821C57.0433 15.5932 56.9515 15.4169 56.9063 15.2392C56.7227 15.2392 56.5406 15.1504 56.4488 14.9741C56.3118 14.7977 56.3118 14.6201 56.4488 14.4437C56.2666 14.3112 56.1748 14.1335 56.1748 13.9572C56.2201 13.7795 56.3118 13.6031 56.4488 13.5594C56.357 13.4268 56.357 13.2491 56.4036 13.1166C56.4488 12.9402 56.5858 12.8514 56.7227 12.8076C56.6775 12.6737 56.6775 12.4974 56.7227 12.3648C56.8145 12.2322 56.9515 12.1434 57.0885 12.1434C57.0433 12.0108 57.0885 11.8345 57.1802 11.7019C57.2706 11.613 57.409 11.5242 57.5912 11.5242C57.546 11.3916 57.6364 11.2153 57.7282 11.1264C57.8281 11.0615 57.9295 11.0204 58.0295 11.0204C58.0665 11.0204 58.1021 11.0257 58.1391 11.0376C58.1391 10.8613 58.2309 10.7287 58.3678 10.6399C58.4487 10.5882 58.5281 10.5669 58.6089 10.5669C58.6651 10.5669 58.7226 10.5775 58.7788 10.5961C58.8254 10.4635 58.9157 10.3309 59.0527 10.2859C59.1061 10.2527 59.1651 10.2381 59.2253 10.2381C59.3239 10.2381 59.4253 10.2753 59.5102 10.3309C59.5554 10.1533 59.6924 10.0644 59.8294 10.0207C59.8636 10.0101 59.902 10.0035 59.9389 10.0035C60.0527 10.0035 60.1732 10.0538 60.2417 10.1533C60.3321 10.0207 60.4691 9.93185 60.6074 9.93185C60.6403 9.9239 60.6718 9.91992 60.7033 9.91992C60.8389 9.91992 60.943 9.99284 61.0183 10.0644C61.0923 9.99284 61.2279 9.91992 61.3498 9.91992Z\"\n fill=\"#96F3AB\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.1588 10.8242C59.2913 10.8656 59.4239 10.9497 59.4677 11.0751C59.5326 11.0136 59.6453 10.9748 59.7355 10.9748C59.7687 10.9748 59.7978 10.9798 59.8217 10.9911C59.9994 11.0337 60.0869 11.1165 60.1319 11.2846C60.1982 11.2432 60.2645 11.2219 60.3255 11.2219C60.3852 11.2219 60.4409 11.2432 60.4859 11.2846C60.6185 11.326 60.7511 11.4515 60.7511 11.5769C60.8055 11.5606 60.8612 11.5493 60.9155 11.5493C60.9938 11.5493 61.0707 11.5707 61.1489 11.6196C61.2377 11.745 61.3252 11.8705 61.3703 11.9959C61.4034 11.9859 61.4366 11.9796 61.4684 11.9796C61.5665 11.9796 61.658 12.0273 61.7243 12.1214C61.8118 12.2054 61.9006 12.3723 61.9006 12.5404C62.077 12.5404 62.2096 12.6658 62.2547 12.7913C62.3435 12.9581 62.3435 13.1676 62.2547 13.3345C62.3872 13.46 62.4761 13.6281 62.4761 13.7949C62.431 13.963 62.3435 14.0885 62.1658 14.1725C62.2547 14.3394 62.2096 14.5062 62.077 14.6317C62.02 14.7132 61.9258 14.7596 61.8317 14.7596C61.7787 14.7596 61.727 14.7458 61.6792 14.7157C61.6355 14.8412 61.5466 14.9666 61.3703 15.0093C61.3464 15.0206 61.3199 15.0256 61.2907 15.0256C61.2138 15.0256 61.125 14.9867 61.06 14.9252C61.0163 15.0507 60.9275 15.1347 60.7949 15.1761C60.771 15.1874 60.7445 15.1924 60.7166 15.1924C60.6384 15.1924 60.5496 15.1535 60.4859 15.0921C60.4409 15.2175 60.352 15.3016 60.2194 15.3016C60.181 15.3141 60.1465 15.3191 60.1121 15.3191C60.0312 15.3191 59.9596 15.289 59.8668 15.2602C59.8668 15.3442 59.7779 15.427 59.6453 15.4697C59.6095 15.481 59.5738 15.486 59.5393 15.486C59.4438 15.486 59.3563 15.4471 59.2913 15.3856C59.2476 15.5111 59.1588 15.5951 59.0699 15.6365C58.9373 15.6365 58.8047 15.6365 58.7159 15.5525C58.6722 15.6779 58.5833 15.762 58.4507 15.762C58.4269 15.7733 58.4004 15.7783 58.3725 15.7783C58.2943 15.7783 58.2055 15.7394 58.1418 15.6779C58.0967 15.8034 58.0092 15.8874 57.8753 15.9301C57.8408 15.9401 57.8077 15.9464 57.7772 15.9464C57.6923 15.9464 57.6194 15.9075 57.5226 15.846C57.5226 15.9715 57.4338 16.0555 57.3012 16.0969C57.2203 16.0355 57.1262 16.0079 57.0387 16.0079C56.8889 16.0079 56.7536 16.0894 56.7258 16.2224C56.6953 16.2299 56.6635 16.2337 56.633 16.2337C56.4898 16.2337 56.3572 16.1584 56.2843 16.0555C56.2114 16.1245 56.1238 16.1546 56.039 16.1546C55.97 16.1546 55.9011 16.1346 55.8415 16.0969C55.7088 16.0129 55.5763 15.8874 55.5763 15.6779C55.5524 15.6842 55.5285 15.6867 55.5047 15.6867C55.3535 15.6867 55.2103 15.5776 55.1334 15.4697C55.0009 15.3016 55.0009 15.0921 55.0897 14.8838C54.9571 14.7998 54.8245 14.6317 54.8682 14.4234C54.8682 14.298 54.9133 14.1299 55.0459 14.0458C55.0009 13.9204 54.9571 13.7949 55.0009 13.6281C55.0459 13.5026 55.1334 13.4186 55.266 13.3772C55.2222 13.2517 55.2222 13.1263 55.266 12.9581C55.3111 12.8741 55.4437 12.7913 55.5763 12.7486C55.5325 12.6232 55.5763 12.4977 55.62 12.3723C55.7088 12.2468 55.8415 12.2054 55.974 12.2054C55.9303 12.08 55.974 11.9545 56.0628 11.8291C56.1278 11.7676 56.2392 11.7287 56.3294 11.7287C56.3625 11.7287 56.393 11.7337 56.4169 11.745C56.4169 11.6196 56.5044 11.4941 56.5932 11.4101C56.6595 11.3687 56.7258 11.3474 56.7868 11.3474C56.8478 11.3474 56.9035 11.3687 56.9472 11.4101C56.991 11.2846 57.0798 11.1592 57.1686 11.1165C57.219 11.0852 57.2694 11.0714 57.3198 11.0714C57.402 11.0714 57.4842 11.1077 57.5664 11.1592C57.6101 11.0337 57.699 10.9083 57.8316 10.9083C57.8674 10.897 57.9031 10.892 57.9376 10.892C58.0318 10.892 58.1206 10.9309 58.1856 10.9911C58.2293 10.9083 58.3619 10.8242 58.4945 10.8242C58.6284 10.8242 58.761 10.8656 58.8485 10.9911C58.8936 10.8656 59.0262 10.8242 59.1588 10.8242Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.5364 29.3086C26.6811 31.612 33.1016 33.9141 35.9832 35.2869C36.1508 35.3653 36.3929 35.3998 36.7006 35.3998C39.2052 35.3998 45.9555 33.022 50.0023 31.5231C50.3938 31.3744 50.7996 31.3027 51.1989 31.3027C52.5828 31.3027 53.9051 32.1524 54.4131 33.5597L54.9813 34.8887C55.7236 36.8814 54.6317 39.0959 52.6221 39.627C48.4273 40.7515 41.6508 42.3832 37.1012 42.3832C36.6299 42.3832 36.1835 42.3659 35.7645 42.3287C32.8829 42.0632 23.2313 35.9521 20.6116 30.992C20.9598 30.372 22.794 29.4414 23.5364 29.3086Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M22.9388 26.6055C22.9388 26.6055 25.5611 29.4906 23.8421 32.0148L21.0047 31.3838L17.9108 28.2284L22.9388 26.6055Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21.6818 22.998L22.8599 26.824L17.7524 28.4074L17.0103 24.1846L21.6818 22.998Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.4369 17.5859L62.4761 18.9782L59.273 19.3883L57.9757 18.4871L61.4369 17.5859Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.5278 15.7832L66.4471 16.9098L64.4781 18.0365L64.2782 16.4671L66.5278 15.7832Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.7946 20.293C66.8523 20.293 66.9035 20.3264 66.9342 20.3613C66.9764 20.4588 66.9342 20.5548 66.8907 20.6042C65.1405 21.7198 63.261 22.3991 61.2535 22.5445C61.1678 22.5445 61.1255 22.4471 61.1255 22.3511C61.1255 22.2536 61.1678 22.1562 61.2535 22.1562C63.1753 22.0107 65.0125 21.3795 66.7204 20.3133C66.7447 20.2988 66.7703 20.293 66.7946 20.293Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M36.238 35.1719C36.2519 35.1719 36.265 35.1771 36.2733 35.189C36.3347 35.2324 36.3663 35.3205 36.3347 35.4073C36.0873 36.3727 35.5599 39.6635 35.932 42.2086C35.932 42.252 35.9004 42.3401 35.839 42.3835H35.8074C35.7767 42.3835 35.7143 42.3401 35.7143 42.252C35.466 39.9266 35.6213 37.5144 36.1487 35.2758C36.1487 35.2113 36.1989 35.1719 36.238 35.1719Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M51.0916 31.1133C51.136 31.1133 51.1754 31.1345 51.2008 31.1863C52.6822 33.2254 53.0211 35.9725 52.0475 38.3649C51.4965 39.6509 50.5648 40.4917 49.5911 40.5807C49.5492 40.5807 49.4642 40.4917 49.4223 40.4479C49.4223 40.3589 49.5073 40.2712 49.5911 40.2712C50.4378 40.1822 51.2426 39.429 51.7504 38.2773C52.6822 35.9725 52.3864 33.3583 50.9888 31.3643C50.9037 31.2753 50.9469 31.1863 50.9888 31.1425C51.0243 31.1239 51.0586 31.1133 51.0916 31.1133Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.1718 30.6621C71.9216 30.6621 74.9675 34.963 75.5298 38.1416C75.5298 38.2338 75.4865 38.2792 75.3987 38.3259H75.3555C75.3109 38.3259 75.2244 38.2792 75.2244 38.187C74.6621 35.146 71.7459 30.9826 68.1705 30.9826C68.1311 30.9826 68.0931 30.984 68.0538 30.984C67.966 30.984 67.8795 30.9386 67.8795 30.8464C67.8795 30.7556 67.966 30.6635 68.0538 30.6635C68.0931 30.6621 68.1324 30.6621 68.1718 30.6621Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M24.476 29.7617C24.6156 29.8032 24.6616 29.8874 24.6156 29.9704C24.4285 30.9771 22.7998 31.2285 21.4489 31.4384L20.8445 31.564H20.7971C20.705 31.5226 20.6575 31.4798 20.6115 31.4384C20.6115 31.3541 20.6575 31.2699 20.751 31.2285C20.9367 31.2285 21.1697 31.187 21.4028 31.1443C22.6128 30.9356 24.1494 30.7257 24.289 29.8874C24.335 29.8032 24.4285 29.7617 24.476 29.7617Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M86.1418 23.8984C86.1724 23.8984 86.2029 23.9089 86.2293 23.935C88.0822 25.1552 89.9364 27.7693 89.8433 30.0359C89.8433 30.1234 89.7503 30.2096 89.6586 30.2096C89.5655 30.1665 89.4725 30.1234 89.4725 30.0359C89.5655 27.8568 87.7585 25.3289 85.9974 24.1532C85.8863 24.0826 86.014 23.8984 86.1418 23.8984Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M99.5986 9.46875C99.6445 9.46875 99.6931 9.48691 99.7347 9.53116C100.225 10.1485 101.395 10.54 102.513 10.54C102.765 10.54 103.015 10.5196 103.256 10.4776C103.281 10.4674 103.302 10.4628 103.321 10.4628C103.372 10.4628 103.407 10.498 103.44 10.5536C103.44 10.6296 103.395 10.7045 103.302 10.7431C103.024 10.7806 102.746 10.818 102.468 10.818C102.422 10.8203 102.378 10.8203 102.333 10.8203C101.224 10.8203 100.168 10.3743 99.4556 9.68323C99.3903 9.57542 99.4875 9.46875 99.5986 9.46875Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M63.3648 35.6211C67.7415 35.6211 71.8946 40.0353 72.6096 45.5187C73.279 51.0007 70.2867 55.459 65.8658 55.459C65.2405 55.459 64.5697 55.3708 63.9901 55.1917C60.3269 54.1667 57.2007 50.243 56.5755 45.5628C56.1738 42.9768 56.7991 40.3467 58.3173 38.2071C59.4794 36.602 61.3552 35.6211 63.3648 35.6211Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.001 37.877C65.1094 37.877 68.7839 41.573 69.2476 46.271C69.6789 50.4648 67.3955 54.0915 63.991 55.0083C63.3026 54.7895 62.6555 54.4844 62.0097 54.1347C59.4253 52.4739 57.3563 49.2415 56.8823 45.5716C56.624 43.7799 56.8396 41.9895 57.4428 40.2856C57.7011 39.5862 58.0886 38.9313 58.52 38.3196C59.2522 38.0564 59.9846 37.8822 60.7169 37.8822C60.8125 37.8783 60.9068 37.877 61.001 37.877Z\"\n fill=\"#46C963\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.4666 40.1309C57.6009 40.1745 57.7339 40.1745 57.8668 40.1745C62.1671 40.6159 65.626 44.3195 65.5369 48.4197C65.5369 50.7565 64.2076 52.9612 62.1232 54.1072C59.4633 52.4312 57.3337 49.1691 56.8459 45.4655C56.6252 43.6573 56.802 41.8505 57.4666 40.1309Z\"\n fill=\"#34B952\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.5343 41.4844C67.1715 41.4844 67.8662 41.7431 68.4734 42.2632C69.6929 43.2981 70.1278 44.9812 69.3874 46.0602L67.6024 48.5635C67.3335 48.9503 66.9143 49.1469 66.4834 49.1469C66.1452 49.1469 65.7992 49.0253 65.5119 48.7796L62.2881 46.0602C61.0685 44.9812 60.6768 43.2981 61.4171 42.2632C61.7827 41.7457 62.3507 41.4921 62.9814 41.4921C63.4045 41.4921 63.8549 41.606 64.2924 41.8311C64.4556 41.9035 64.6345 41.9372 64.8121 41.9372C65.0615 41.9372 65.3083 41.8712 65.5119 41.7444C65.8149 41.5711 66.1648 41.4844 66.5343 41.4844Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.0324 56.8145C68.6784 56.8145 69.327 56.8222 69.977 56.8404C71.5138 56.8844 72.8742 57.9652 73.2689 59.4775C74.6293 64.9669 73.532 72.1435 73.532 72.1435H57.074C57.6884 68.4256 57.8647 64.665 57.5134 60.9043C57.3818 59.0019 58.7857 57.36 60.7171 57.1436C63.1485 56.9376 65.5786 56.8145 68.0324 56.8145Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.0324 56.8145C68.6784 56.8145 69.327 56.8222 69.977 56.8404C71.5138 56.8844 72.8742 57.9652 73.2689 59.4775C74.6293 64.9669 73.532 72.1435 73.532 72.1435H57.074C57.6884 68.4256 57.8647 64.665 57.5134 60.9043C57.3818 59.0019 58.7857 57.36 60.7171 57.1436C63.1485 56.9376 65.5786 56.8145 68.0324 56.8145Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M74.7496 72.1445C76.6739 72.1445 78.2323 73.7096 78.1001 75.6171C77.7435 84.8453 76.5403 109.981 73.6906 122.988C71.9973 140.389 69.3252 189.826 69.3252 189.826H57.0742C57.0742 189.826 60.9949 134.809 64.8703 122.988C60.9055 112.398 61.9297 72.1458 61.9297 72.1458H74.6694C74.6961 72.1445 74.7229 72.1445 74.7496 72.1445Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.5834 86.5742C65.5834 86.5742 65.6274 104.51 63.361 115.43C62.5163 108.851 62.1606 100.169 62.0274 92.3194L65.5834 86.5742Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.0283 72.1445C71.0283 72.1445 62.4253 112.397 56.4119 122.987C53.8224 148.211 44.3864 189.825 44.3864 189.825H32.3149C32.3149 189.825 42.0153 138.631 46.9313 122.987C46.7563 109.979 51.4091 84.844 52.9013 75.6158C53.2526 73.6384 54.9645 72.1445 56.983 72.1445H71.0283Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M53.4149 117.684C53.8457 117.684 54.2778 117.759 54.6982 117.92C56.9688 118.757 57.9731 121.757 56.9256 124.624C56.0626 126.982 54.1076 128.505 52.1526 128.505C51.7309 128.505 51.308 128.434 50.8981 128.284C48.6262 127.447 47.6218 124.403 48.6694 121.537C49.5284 119.225 51.469 117.684 53.4149 117.684Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M53.4149 117.684C53.8457 117.684 54.2778 117.759 54.6982 117.92C56.9688 118.757 57.9731 121.757 56.9256 124.624C56.0626 126.982 54.1076 128.505 52.1526 128.505C51.7309 128.505 51.308 128.434 50.8981 128.284C48.6262 127.447 47.6218 124.403 48.6694 121.537C49.5284 119.225 51.469 117.684 53.4149 117.684Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M43.4331 185.77C45.7484 185.77 47.619 187.607 47.4855 189.826H39.0684C39.1565 187.563 41.1166 185.813 43.4331 185.77Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M70.6791 117.686C70.8675 117.686 71.0572 117.702 71.2483 117.736C73.5208 118.141 75.0813 120.846 74.7246 123.821C74.3532 126.529 72.4988 128.504 70.4266 128.504C70.2556 128.504 70.0833 128.491 69.9109 128.464C67.5943 128.058 66.0792 125.354 66.4346 122.379C66.802 119.653 68.6283 117.686 70.6791 117.686Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M70.6791 117.686C70.8675 117.686 71.0572 117.702 71.2483 117.736C73.5208 118.141 75.0813 120.846 74.7246 123.821C74.3532 126.529 72.4988 128.504 70.4266 128.504C70.2556 128.504 70.0833 128.491 69.9109 128.464C67.5943 128.058 66.0792 125.354 66.4346 122.379C66.802 119.653 68.6283 117.686 70.6791 117.686Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M69.2499 185.77C71.4797 185.77 73.2803 187.563 73.2803 189.826H65.1772C65.1772 187.563 66.9777 185.77 69.2499 185.77Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M54.5479 74.3984C56.4626 74.3984 58.7686 75.6085 60.8997 77.7254C63.4235 80.2323 66.0776 84.5103 66.0776 89.1354C66.0776 89.2209 66.0346 89.2649 65.9472 89.2649C65.9316 89.2727 65.9146 89.2766 65.9003 89.2766C65.8311 89.2766 65.7724 89.2054 65.7724 89.1354C65.7724 84.5971 63.1196 80.4047 60.6388 77.9845C58.5507 75.9104 56.3322 74.7444 54.5479 74.7444C54.4619 74.7444 54.3745 74.6575 54.3745 74.5707C54.3745 74.4852 54.4619 74.3984 54.5479 74.3984Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M76.2573 78.9082C76.2725 78.9082 76.2878 78.9121 76.303 78.92C76.3882 78.92 76.4302 79.0063 76.4302 79.094C75.9635 82.1057 72.2737 87.1676 68.5839 88.8265H68.542C68.3716 88.8265 68.3296 88.608 68.4568 88.5204C71.9775 86.9491 75.7093 81.9304 76.1339 79.0508C76.1339 78.9789 76.1899 78.9082 76.2573 78.9082Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M41.261 185.77C42.811 185.77 44.1648 185.959 44.7573 186.148C44.9195 186.185 44.8567 186.394 44.7089 186.394C44.6972 186.394 44.6841 186.393 44.671 186.389C44.0994 186.242 42.7626 186.061 41.2375 186.061C39.8484 186.061 38.3036 186.211 37.0349 186.671H36.9917C36.9473 186.671 36.8609 186.63 36.8609 186.591C36.8164 186.51 36.8609 186.429 36.9473 186.389C38.2605 185.929 39.8432 185.77 41.261 185.77Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M67.6428 185.316C68.1838 185.316 68.6619 185.408 69.0564 185.565C69.2287 185.617 69.1426 185.935 68.9716 185.935C68.6144 185.793 68.1658 185.707 67.6505 185.707C66.4335 185.707 64.8399 186.183 63.1846 187.517C63.1409 187.517 63.1409 187.571 63.0985 187.571C63.0548 187.571 63.0124 187.517 62.97 187.465C62.9263 187.359 62.9263 187.254 63.0124 187.201C64.7294 185.829 66.3628 185.316 67.6428 185.316Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M98.1937 53.207L97.0674 58.3729C97.0674 58.3729 98.8532 59.9677 100.623 59.9677C100.925 59.9677 101.227 59.9213 101.519 59.8126L101.568 57.6772L98.1937 53.207Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M94.1024 52.3047L93.4658 56.3415L97.5574 58.6145L97.9675 53.326L94.1024 52.3047Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M100.676 50.0508C100.618 50.0508 100.554 50.0688 100.488 50.1107L91.0148 54.8605C90.8649 54.961 90.765 55.1603 90.8649 55.31C90.9145 55.4105 91.0148 55.4601 91.1643 55.4601H91.2642L100.787 50.6608C101.119 50.4945 100.968 50.0508 100.676 50.0508Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M122.739 39.6797C122.25 40.5125 121.909 41.1983 121.518 41.9328C121.127 42.6687 120.736 43.4032 120.345 44.1372C119.613 45.6076 118.881 47.0279 118.148 48.4978C116.732 51.4367 115.365 54.4257 114.046 57.4147L113.851 57.9535C113.803 58.0017 113.803 58.0518 113.753 58.1005C113.704 58.1988 113.656 58.247 113.606 58.2957C113.508 58.394 113.362 58.444 113.216 58.444C113.016 58.463 112.817 58.4734 112.618 58.4734C111.842 58.4734 111.074 58.325 110.334 58.0518C109.065 57.6099 107.844 57.0724 106.671 56.3862C106.085 56.0426 105.451 55.6503 104.864 55.2585L103.986 54.6223C103.741 54.4257 103.4 54.1804 103.204 54.0334L98.418 61.1377C98.9069 61.383 99.2481 61.53 99.6388 61.7752C100.03 61.9705 100.421 62.1671 100.812 62.3623C101.592 62.7546 102.422 63.1469 103.204 63.4891C104.864 64.2249 106.623 64.8125 108.381 65.253C109.358 65.4983 110.334 65.6935 111.36 65.7918C111.653 65.817 111.946 65.8288 112.239 65.8288C113.119 65.8288 113.997 65.7183 114.876 65.4983C117.025 65.0077 118.831 63.6361 119.906 61.7252C120.102 61.4312 120.249 61.1377 120.345 60.8437L120.59 60.2562C121.225 58.8846 121.861 57.4629 122.544 56.0426C123.178 54.671 123.912 53.2989 124.644 51.9273C125.376 50.6039 126.158 49.2824 126.988 47.959C127.379 47.3214 127.818 46.6857 128.209 46.0481C128.6 45.3623 129.087 44.7261 129.478 44.1873L122.739 39.6797Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M140.32 14.4297C139.517 14.4297 138.938 14.9398 138.307 15.9407C137.246 17.5733 134.882 25.8328 135.365 29.246C135.679 31.5474 137.153 32.4654 138.884 32.4654C141.134 32.4654 143.817 30.9188 144.962 28.8501C147.035 25.1907 144.432 16.3366 142.358 15.1489C141.517 14.6669 140.866 14.4297 140.32 14.4297Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M149.834 6.76367C145.531 6.76367 142.086 12.6322 142.557 14.4458C142.993 16.2549 143.717 16.8892 145.457 17.2321C146.122 17.3771 147.197 17.5836 148.4 17.5836C150.423 17.5836 152.808 16.9977 154.203 14.5439C156.04 11.4163 153.913 6.97022 150.144 6.77391C150.041 6.76809 149.936 6.76367 149.834 6.76367Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M133.358 14.8809C132.267 14.8809 131.004 15.4398 130.358 16.2767C129.031 17.9805 129.836 22.6178 130.784 23.3738C131.228 23.73 131.577 23.8973 131.894 23.8973C132.251 23.8973 132.563 23.6818 132.915 23.28C133.578 22.4759 135.331 18.5479 135.331 16.7491C135.331 15.4157 134.428 14.8809 133.358 14.8809Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.481 173.145L129.818 184.866H134.882L134.544 173.145H129.481Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M158.306 170.889L153.34 171.573L156.475 183.061L161.442 182.425L158.306 170.889Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M161.243 180.357C161.211 180.357 161.177 180.362 161.143 180.371L155.653 182.02C155.309 182.119 155.064 182.32 154.917 182.57C153.888 184.068 153.594 185.418 150.016 187.367C149.287 187.759 149.719 189.374 151.248 189.374C151.468 189.374 151.711 189.341 151.977 189.266C154.035 188.665 156.142 187.867 157.662 187.416C160.113 186.716 161.045 186.567 163.005 186.017C163.447 185.867 163.691 185.368 163.544 184.917L161.632 180.621C161.552 180.455 161.403 180.357 161.243 180.357Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.612 183.965C129.321 183.965 129.069 184.1 128.855 184.272C127.516 185.413 125.881 186.603 121.819 187.495C120.927 187.695 121.077 189.826 123.206 189.826C125.387 189.826 128.655 189.678 130.242 189.678C132.817 189.678 133.758 189.826 135.79 189.826C136.285 189.826 136.681 189.43 136.632 188.933L135.988 184.321C135.944 184.106 135.789 183.965 135.618 183.965C135.592 183.965 135.567 183.968 135.542 183.975H129.746C129.7 183.968 129.655 183.965 129.612 183.965Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.481 173.145L129.679 179.005H134.882L134.683 173.145H129.481Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M158.415 170.889L153.34 171.59L154.965 177.651L160.09 177.001L158.415 170.889Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.893 37.875C135.35 37.875 133.814 37.9359 132.278 38.0563C128.292 38.3958 123.778 39.3629 123.778 39.3629C123.778 39.3629 121.378 40.1854 126.179 69.887H146.586C146.251 61.5194 146.202 56.3418 150.188 39.2178C147.306 38.5883 144.426 38.2028 141.545 38.0563C139.983 37.9359 138.436 37.875 136.893 37.875Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M140.708 27.5059L134.966 32.4021C135.552 34.7287 135.648 37.2005 132.291 38.0247C132.291 38.0247 129.031 41.0313 135.21 41.0313C140.806 41.0313 141.633 38.0247 141.633 38.0247C139.541 36.0381 140.124 30.5111 140.708 27.5059Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M138.334 29.3105L134.882 32.1868C135.029 32.7143 135.129 33.2419 135.178 33.8168C136.461 33.6256 138.237 32.2341 138.384 30.9405C138.482 30.3643 138.433 29.8367 138.334 29.3105Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.902 13.0781C136.415 13.0781 135.917 13.1299 135.413 13.2379C130.148 14.374 128.129 21.7264 128.425 26.4632C128.631 30.1127 131.543 32.465 134.807 32.465C136.221 32.465 137.702 32.0227 139.056 31.0524C142.058 28.8822 142.451 26.759 143.633 21.7752C144.784 17.2469 141.274 13.0781 136.902 13.0781Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M142.739 10.8242C141.949 10.8242 141.302 10.9946 140.971 11.2886C139.933 12.1635 139.834 12.8913 140.378 14.0078C140.921 15.1242 144.281 18.9614 146.011 19.6892C146.263 19.7911 146.497 19.8392 146.714 19.8392C148.762 19.8392 149.287 15.6381 148.037 13.6191C146.757 11.6016 144.424 10.8242 142.739 10.8242Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M138.585 11.2734C137.439 11.2734 136.494 11.5268 136.004 11.9515C134.53 13.3192 134.433 14.2477 135.218 15.9083C135.955 17.569 140.767 23.0886 143.222 24.1149C143.602 24.2745 143.955 24.3493 144.28 24.3493C147.236 24.3493 147.937 18.2749 146.168 15.3709C144.304 12.3908 140.996 11.2734 138.585 11.2734Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M125.905 69.8887C125.905 69.8887 121.828 109.124 122.172 124.672C122.516 140.804 128.509 177.651 128.509 177.651H135.437C135.437 177.651 134.355 141.73 134.945 125.89C135.681 108.588 141.183 69.8887 141.183 69.8887H125.905Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.683 175.398L127.229 175.673L127.89 178.101H136.276L136.683 175.398Z\"\n fill=\"#1A2327\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M137.126 77.1055C136.528 77.1055 135.823 77.8377 134.995 79.5344C129.93 89.79 133.981 108.445 135.765 115.429C136.634 104.978 138.177 92.232 139.383 82.8066C138.918 79.4524 138.195 77.1055 137.126 77.1055Z\"\n fill=\"black\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M146.703 69.8887L131.281 69.9369C131.281 69.9369 136.027 110.717 139.635 123.775C143.884 139.318 153.572 176.298 153.572 176.298L160.542 175.372C160.542 175.372 154.314 134.299 152.287 125.724C147.888 107.454 152.287 81.3386 146.703 69.8887Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M161.441 172.693L151.54 174.379L152.795 176.749L161.296 175.701L161.441 172.693Z\"\n fill=\"#1A2327\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.188 21.1914C134.91 21.1914 134.604 21.4461 134.55 21.7786C134.432 22.1352 134.667 22.4931 134.959 22.5387C134.985 22.5414 135.01 22.5427 135.037 22.5427C135.353 22.5427 135.613 22.2854 135.722 21.9127C135.78 21.5547 135.604 21.1968 135.253 21.1968C135.232 21.1928 135.209 21.1914 135.188 21.1914Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M130.709 20.291C130.369 20.291 130.049 20.5457 129.993 20.8769C129.932 21.2804 130.115 21.5927 130.422 21.6383C130.448 21.641 130.476 21.6423 130.501 21.6423C130.834 21.6423 131.106 21.3876 131.218 21.0565C131.28 20.6543 131.097 20.3406 130.79 20.2964C130.762 20.2924 130.737 20.291 130.709 20.291Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.932 19.8398C129.932 19.8398 130.18 20.2895 130.55 20.2895C130.636 20.2895 130.732 20.2641 130.831 20.2025L129.932 19.8398Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.18 22.0938C131.672 22.9174 131.073 23.648 130.38 24.2878C130.712 24.6169 131.119 24.7978 131.567 24.7978C131.617 24.7978 131.668 24.7964 131.719 24.791L132.18 22.0938Z\"\n fill=\"#ED847E\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.639 25.7012C135.603 25.7012 135.567 25.712 135.543 25.7309C134.974 26.1724 134.192 26.4131 133.391 26.4131C133.186 26.4131 132.978 26.3964 132.774 26.3644C132.727 26.3644 132.679 26.405 132.631 26.4438C132.631 26.483 132.679 26.5628 132.727 26.5628C132.966 26.6016 133.203 26.6016 133.395 26.6016C134.254 26.6016 135.114 26.3252 135.733 25.8509C135.782 25.8103 135.782 25.7711 135.733 25.7309C135.71 25.712 135.675 25.7012 135.639 25.7012Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M143.142 22.5449C141.958 22.5449 140.943 23.8958 140.605 24.9347C140.284 26.0145 140.699 27.0525 141.738 27.0525C141.865 27.0525 142.002 27.0372 142.149 27.0038C143.127 26.7013 144.001 26.0966 144.514 25.239C145.235 24.1785 144.618 22.7658 143.382 22.5646C143.302 22.551 143.222 22.5449 143.142 22.5449Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.569 18.9395C135.456 18.9395 135.385 19.034 135.385 19.1633C135.334 19.321 135.439 19.4266 135.596 19.4266C136.223 19.5843 136.798 20.0052 137.06 20.5838C137.111 20.6878 137.163 20.6878 137.216 20.7414H137.425C137.53 20.6358 137.582 20.4782 137.53 20.3725C137.163 19.5843 136.484 19.0577 135.647 18.9521C135.619 18.9442 135.594 18.9395 135.569 18.9395Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M131.174 17.5859C130.409 17.5859 129.669 17.8042 129.141 18.1919C129.03 18.2662 129.03 18.3769 129.141 18.4501C129.195 18.4877 129.251 18.4877 129.36 18.4877C129.417 18.4877 129.471 18.4501 129.526 18.4135C129.948 18.1299 130.492 17.9537 131.087 17.9537C131.189 17.9537 131.295 17.9593 131.399 17.9704C131.509 17.9704 131.675 17.9327 131.731 17.8219C131.731 17.7111 131.62 17.6369 131.509 17.6003C131.397 17.5915 131.287 17.5859 131.174 17.5859Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M153.684 182.411C154.106 182.411 154.705 182.532 155.155 182.677V182.731C154.581 183.056 154.061 183.229 153.713 183.229C153.593 183.229 153.494 183.208 153.421 183.167C153.276 183.057 153.179 182.894 153.179 182.731C153.179 182.677 153.179 182.568 153.227 182.514C153.308 182.441 153.474 182.411 153.684 182.411ZM153.73 182.16C153.457 182.16 153.22 182.212 153.082 182.351C152.986 182.459 152.89 182.622 152.938 182.785C152.938 183.004 153.082 183.221 153.227 183.384L153.276 183.439C153.385 183.49 153.51 183.513 153.646 183.513C154.236 183.513 155.024 183.095 155.493 182.785C155.541 182.731 155.59 182.731 155.59 182.677C155.59 182.622 155.541 182.568 155.493 182.568C155.354 182.49 154.424 182.16 153.73 182.16Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M154.325 181.085C154.374 181.085 154.419 181.099 154.465 181.127C154.509 181.127 154.509 181.127 154.554 181.181C154.914 181.57 155.184 182.122 155.32 182.73C154.779 182.453 154.06 181.735 154.014 181.347C154.014 181.293 154.014 181.181 154.149 181.127C154.217 181.099 154.273 181.085 154.325 181.085ZM154.325 180.809C154.24 180.809 154.149 180.822 154.06 180.85C153.88 180.905 153.789 181.127 153.789 181.347C153.835 181.79 154.284 182.287 154.734 182.675C154.96 182.841 155.23 182.952 155.499 183.061C155.499 183.061 155.544 183.061 155.59 183.007C155.59 183.007 155.59 182.952 155.59 182.896C155.59 182.841 155.184 181.238 154.554 180.85C154.486 180.822 154.408 180.809 154.325 180.809Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M126.862 183.779C127.59 183.878 128.316 184.125 128.995 184.52C128.576 184.575 128.193 184.603 127.862 184.603C127.308 184.603 126.898 184.526 126.717 184.372C126.621 184.273 126.571 184.125 126.571 183.977C126.571 183.927 126.621 183.878 126.669 183.829C126.717 183.779 126.814 183.779 126.862 183.779ZM126.882 183.514C126.757 183.514 126.651 183.534 126.571 183.582C126.426 183.681 126.378 183.779 126.378 183.927C126.329 184.174 126.426 184.372 126.571 184.52C126.911 184.766 127.347 184.865 127.783 184.865C128.316 184.816 128.849 184.766 129.383 184.668C129.43 184.618 129.48 184.618 129.48 184.569C129.48 184.52 129.48 184.421 129.43 184.421C129.222 184.335 127.676 183.514 126.882 183.514Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.998 182.853C128.163 182.853 128.327 182.901 128.436 182.997C128.875 183.428 129.149 183.956 129.203 184.53C128.491 184.195 127.559 183.332 127.668 182.997C127.668 182.948 127.668 182.853 127.888 182.853H127.998ZM127.888 182.613C127.503 182.661 127.395 182.804 127.395 182.948C127.231 183.525 128.602 184.627 129.314 184.866H129.424C129.478 184.818 129.478 184.77 129.478 184.77C129.478 184.674 129.369 183.332 128.656 182.804C128.436 182.661 128.163 182.613 127.888 182.613Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M125.768 68.5352C125.575 68.5352 125.43 68.679 125.43 68.7755L125.575 70.5971C125.623 70.6931 125.768 70.7896 125.962 70.7896H147.1C147.292 70.7896 147.485 70.6458 147.438 70.502L146.905 68.7277C146.808 68.5825 146.663 68.5352 146.567 68.5352H125.768Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M144.03 68.5371C143.922 68.5371 143.885 68.6327 143.885 68.6818L144.065 71.0964C144.065 71.192 144.137 71.2411 144.245 71.2411H144.641C144.712 71.2411 144.785 71.192 144.785 71.0964L144.605 68.6818C144.605 68.6327 144.497 68.5371 144.425 68.5371H144.03Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.368 68.5371C127.264 68.5371 127.229 68.6327 127.229 68.6818L127.402 71.0964C127.437 71.192 127.506 71.2411 127.576 71.2411H127.99C128.06 71.2411 128.129 71.192 128.094 71.0964L127.922 68.6818C127.922 68.6327 127.852 68.5371 127.748 68.5371H127.368Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.54 68.5371C135.436 68.5371 135.332 68.6327 135.385 68.6818L135.645 71.0964C135.645 71.192 135.748 71.2411 135.852 71.2411H136.474C136.578 71.2411 136.683 71.192 136.683 71.0964L136.371 68.6818C136.371 68.6327 136.267 68.5371 136.163 68.5371H135.54Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M134.432 20.7422C134.432 20.7422 134.644 21.1919 135.02 21.1919C135.114 21.1919 135.217 21.1638 135.331 21.0935L134.432 20.7422Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.292 37.4258C129.846 37.6215 124.174 38.0101 122.903 39.0824C121.68 40.155 121.24 61.2577 122.266 68.7128C123.294 76.1701 119.576 141.377 121.337 153.756C129.759 153.142 134.202 153.018 136.409 153.018C137.879 153.018 138.357 153.074 138.357 153.074L138.895 149.272L140.411 153.172C140.411 153.172 147.798 152.519 153.457 152.519C155.983 152.519 158.165 152.649 159.191 153.024C159.093 140.841 153.322 81.336 148.724 69.1529C150.29 53.8987 152.295 39.7168 151.316 38.5958C150.29 37.4754 141.829 37.4258 141.829 37.4258C140.265 39.0824 138.161 40.1068 135.912 40.2529C135.853 40.2542 135.796 40.2542 135.739 40.2542C132.34 40.2542 132.292 37.4258 132.292 37.4258Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.292 37.4258C129.846 37.6215 124.174 38.0101 122.903 39.0824C121.68 40.155 121.24 61.2577 122.266 68.7128C123.294 76.1701 119.576 141.377 121.337 153.756C129.759 153.142 134.202 153.018 136.409 153.018C137.879 153.018 138.357 153.074 138.357 153.074L138.895 149.272L140.411 153.172C140.411 153.172 147.798 152.519 153.457 152.519C155.983 152.519 158.165 152.649 159.191 153.024C159.093 140.841 153.322 81.336 148.724 69.1529C150.29 53.8987 152.295 39.7168 151.316 38.5958C150.29 37.4754 141.829 37.4258 141.829 37.4258C140.265 39.0824 138.161 40.1068 135.912 40.2529C135.853 40.2542 135.796 40.2542 135.739 40.2542C132.34 40.2542 132.292 37.4258 132.292 37.4258Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M139.384 65.832C139.432 66.9106 139.579 67.99 139.869 69.0171C140.751 69.3301 142.668 69.4378 144.592 69.4378C146.153 69.4378 147.72 69.367 148.74 69.2746L148.692 69.1204L148.837 67.5788L139.384 65.832Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M147.937 47.3438C147.937 50.1965 148.524 55.0161 150.019 58.1638C150.394 54.8687 150.766 51.7711 151.086 49.0657L147.937 47.3438Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.19 40.1309C135.105 40.1309 135.018 40.1908 135.018 40.313C135.018 40.4109 134.629 49.9423 134.53 70.3172C134.432 103.873 138.542 148.661 138.591 149.098C138.591 149.196 138.689 149.244 138.739 149.244H138.787C138.885 149.244 138.934 149.146 138.934 149.05C138.885 148.612 134.775 103.873 134.872 70.3172C134.97 49.9423 135.362 40.4109 135.362 40.313C135.362 40.1908 135.277 40.1309 135.19 40.1309Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M142.737 68.5352C142.63 68.5352 142.535 68.6262 142.592 68.7674C143.779 71.8068 146.058 74.2773 149.001 75.7494H149.097C149.144 75.7494 149.192 75.7026 149.239 75.6539C149.286 75.5601 149.239 75.4645 149.144 75.4162C146.296 73.9923 144.111 71.6175 142.923 68.6731C142.886 68.5766 142.808 68.5352 142.737 68.5352Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M120.206 51.4023C119.618 51.4023 119.126 51.938 119.225 52.5233L121.68 71.0198C121.777 71.6533 122.268 72.1389 122.956 72.1389H136.507C136.532 72.1421 136.556 72.1421 136.58 72.1421C137.178 72.1421 137.583 71.5816 137.489 71.0198L135.082 52.5233C134.985 51.8898 134.445 51.4519 133.806 51.4023H120.206Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.546 58.166L136.234 63.4532C136.234 63.4532 137.991 64.4772 139.703 64.4772C140.217 64.4772 140.727 64.3852 141.184 64.1453L140.819 62.0207L136.546 58.166Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.072 68.5371C126.968 68.5371 126.865 68.5867 126.865 68.6873C126.345 71.242 125.099 73.5966 123.231 75.4497C123.178 75.4993 123.178 75.5999 123.231 75.7004C123.282 75.7004 123.333 75.75 123.386 75.75C123.437 75.75 123.489 75.7004 123.542 75.7004C126.812 72.2434 127.228 68.887 127.228 68.7369C127.228 68.6363 127.176 68.5371 127.072 68.5371Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.233 57.7148L132.182 61.9555L137.131 63.5751L136.672 58.0963L132.233 57.7148Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M151.361 38.7793L144.801 43.3883C144.851 43.4361 144.995 43.6309 145.092 43.7269L145.381 44.1634C145.621 44.5038 145.815 44.7947 146.007 45.1351C146.393 45.7167 146.779 46.3958 147.165 47.027C147.888 48.3856 148.563 49.7437 149.143 51.15C150.3 53.9149 151.12 56.8263 151.553 59.8342C151.553 60.1728 151.603 60.5132 151.651 60.9014L151.698 61.2897H151.603C151.023 61.2897 150.494 61.2897 149.914 61.1923C148.563 60.9497 147.165 60.6106 145.863 60.125C145.187 59.8342 144.464 59.5434 143.789 59.2521L142.776 58.7665C142.439 58.6213 142.101 58.4261 141.811 58.2809L138.484 66.0921C139.015 66.2856 139.4 66.383 139.835 66.4803L141.136 66.8686C141.956 67.1102 142.825 67.3528 143.692 67.5481C145.526 67.9841 147.358 68.3232 149.191 68.4683C149.69 68.5121 150.178 68.5369 150.666 68.5369C151.264 68.5369 151.86 68.5004 152.47 68.4205C153.097 68.3232 153.773 68.1775 154.399 67.9349C155.171 67.6441 155.943 67.2554 156.57 66.6738C157.293 66.0443 157.872 65.2674 158.258 64.3454C158.547 63.5689 158.741 62.7443 158.741 61.9196C158.741 61.5805 158.741 61.2405 158.692 60.9014L158.644 60.2224C158.596 59.7846 158.547 59.3481 158.499 58.9121C158.016 55.3708 157.149 51.8773 155.943 48.5308C155.315 46.88 154.64 45.2311 153.918 43.6309C153.531 42.8049 153.145 42.0298 152.712 41.2533L152.084 40.0404L151.747 39.4092C151.603 39.2158 151.506 39.0223 151.361 38.7793Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M151.361 38.7793L144.801 43.3883C144.851 43.4361 144.995 43.6309 145.092 43.7269L145.381 44.1634C145.621 44.5038 145.815 44.7947 146.007 45.1351C146.393 45.7167 146.779 46.3958 147.165 47.027C147.888 48.3856 148.563 49.7437 149.143 51.15C150.3 53.9149 151.12 56.8263 151.553 59.8342C151.553 60.1728 151.603 60.5132 151.651 60.9014L151.698 61.2897H151.603C151.023 61.2897 150.494 61.2897 149.914 61.1923C148.563 60.9497 147.165 60.6106 145.863 60.125C145.187 59.8342 144.464 59.5434 143.789 59.2521L142.776 58.7665C142.439 58.6213 142.101 58.4261 141.811 58.2809L138.484 66.0921C139.015 66.2856 139.4 66.383 139.835 66.4803L141.136 66.8686C141.956 67.1102 142.825 67.3528 143.692 67.5481C145.526 67.9841 147.358 68.3232 149.191 68.4683C149.69 68.5121 150.178 68.5369 150.666 68.5369C151.264 68.5369 151.86 68.5004 152.47 68.4205C153.097 68.3232 153.773 68.1775 154.399 67.9349C155.171 67.6441 155.943 67.2554 156.57 66.6738C157.293 66.0443 157.872 65.2674 158.258 64.3454C158.547 63.5689 158.741 62.7443 158.741 61.9196C158.741 61.5805 158.741 61.2405 158.692 60.9014L158.644 60.2224C158.596 59.7846 158.547 59.3481 158.499 58.9121C158.016 55.3708 157.149 51.8773 155.943 48.5308C155.315 46.88 154.64 45.2311 153.918 43.6309C153.531 42.8049 153.145 42.0298 152.712 41.2533L152.084 40.0404L151.747 39.4092C151.603 39.2158 151.506 39.0223 151.361 38.7793Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M141.458 36.9746C139.761 38.3372 137.869 39.4563 135.784 40.2355C137.288 41.5981 137.335 45.5402 137.335 45.5402C137.335 45.5402 143.884 40.7215 143.643 37.3642C142.963 37.1207 142.235 36.9746 141.458 36.9746Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M131.731 36.9727C131.275 36.9727 130.823 37.0502 130.41 37.2076C128.581 40.5473 132.544 44.6378 132.544 44.6378C132.544 44.6378 133.305 41.3459 134.88 39.9495C133.662 39.4517 132.747 38.3542 132.544 37.0565C132.277 37.0011 132.003 36.9727 131.731 36.9727Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M134.139 12.627C133.196 12.627 132.101 13.3317 130.833 15.0957C129.48 17.0341 136.871 22.2681 139.384 22.996C138.751 20.4968 137.29 12.627 134.139 12.627Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.732 17.8952C135.833 17.8952 135.933 17.8952 136.083 17.9472C137.383 18.2029 138.133 20.04 137.734 21.9306C137.372 23.6836 136.194 24.9358 135.011 24.9358C134.886 24.9358 134.758 24.9218 134.632 24.8916C133.283 24.585 132.532 22.7986 132.932 20.908C133.333 19.172 134.533 17.8952 135.732 17.8952ZM135.667 17.5859C134.314 17.5859 132.986 18.9285 132.583 20.8069C132.182 22.8997 133.033 24.8916 134.533 25.1977C134.683 25.2496 134.783 25.2496 134.933 25.2496C136.334 25.2496 137.633 23.9222 138.034 22.0316C138.483 19.9389 137.633 17.9472 136.133 17.641C135.978 17.6028 135.822 17.5859 135.667 17.5859Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.88 16.9825C129.98 16.9825 130.081 17.0328 130.23 17.0328C131.531 17.3374 132.28 19.1162 131.88 20.9956C131.518 22.7394 130.342 23.9867 129.121 23.9867C128.991 23.9867 128.861 23.9713 128.73 23.9425C127.43 23.6882 126.679 21.8591 127.079 19.9798C127.281 19.0659 127.679 18.3029 128.33 17.6435C128.73 17.2369 129.28 17.0328 129.88 16.9825ZM129.826 16.6855C129.186 16.6855 128.576 16.946 128.13 17.4394C127.43 18.1004 126.979 18.9639 126.779 19.8777C126.33 22.0114 127.18 23.9425 128.681 24.2973C128.83 24.2973 128.98 24.3492 129.13 24.3492C130.479 24.3492 131.83 22.977 132.231 21.0976C132.631 19.0142 131.781 17.0328 130.28 16.7282C130.129 16.6993 129.976 16.6855 129.826 16.6855Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.1 20.7422C132.033 20.7422 131.965 20.7488 131.9 20.762C131.788 20.762 131.731 20.9072 131.788 20.9819C131.788 21.1293 131.9 21.2019 131.957 21.2019C132.004 21.1887 132.053 21.1821 132.102 21.1821C132.333 21.1821 132.557 21.3251 132.744 21.5692C132.744 21.5692 132.8 21.6418 132.857 21.6418C132.913 21.6418 132.968 21.6418 133.026 21.5692C133.081 21.4944 133.081 21.3492 133.026 21.2019C132.792 20.8962 132.439 20.7422 132.1 20.7422Z\"\n fill=\"#3A9C76\"\n />\n </svg>\n</template>\n","import { render } from \"./NotOptimizedIllustration.vue?vue&type=template&id=7180460f\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./NotOptimizedViewportModal.vue?vue&type=template&id=5a442ccf&scoped=true\"\nimport script from \"./NotOptimizedViewportModal.vue?vue&type=script&lang=js\"\nexport * from \"./NotOptimizedViewportModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_viewport_modal.scss?vue&type=style&index=0&id=5a442ccf&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5a442ccf\"]])\n\nexport default __exports__","<template>\n <section class=\"viewport-modal\">\n <b-modal\n v-model=\"isModalActive\"\n class=\"modal-text-center\"\n :width=\"500\"\n :can-cancel=\"false\"\n >\n <section class=\"modal-card-body\">\n <div class=\"content\">\n <h3>{{ $t(\"annotation_deleted\") }}</h3>\n </div>\n </section>\n <footer class=\"modal-card-foot\" style=\"padding-top: 0\">\n <b-button type=\"is-primary\" class=\"primary-button\" @click=\"closeModal\">\n {{ $t(\"ok\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nexport default {\n name: \"AnnotationDeletedModal\",\n data() {\n return {\n isModalActive: window.location.hash === \"#deleted\",\n };\n },\n methods: {\n closeModal() {\n window.location.hash = \"\";\n this.isModalActive = false;\n },\n },\n};\n</script>\n","import { render } from \"./AnnotationDeletedModal.vue?vue&type=template&id=6645487a\"\nimport script from \"./AnnotationDeletedModal.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationDeletedModal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <section class=\"document-error-modal\">\n <b-modal\n v-model=\"isModalActive\"\n :width=\"400\"\n :can-cancel=\"['x']\"\n :on-cancel=\"closeModal\"\n >\n <section class=\"modal-card-body\">\n <div class=\"header\">\n <div class=\"error-icon\">\n <ErrorIcon class=\"icon\" />\n </div>\n </div>\n <div class=\"content\">\n <h3>{{ $t(\"document_error_title\") }}</h3>\n <p>{{ $t(\"document_error_info\") }}</p>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button\n v-if=\"showBranding\"\n type=\"is-primary\"\n class=\"primary-button\"\n @click=\"handleContactSupport\"\n >\n {{ $t(\"contact_support\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport ErrorIcon from \"../../assets/images/ErrorIcon\";\n\nexport default {\n name: \"DocumentErrorModal\",\n components: {\n ErrorIcon,\n },\n data() {\n return {\n isModalActive: true,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showBranding\"]),\n },\n methods: {\n handleContactSupport() {\n const documentError = \"Document error\";\n this.$store.dispatch(\"document/contactSupport\", documentError);\n },\n closeModal() {\n this.$store.dispatch(\"document/setDocumentError\", false);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_error.scss\"></style>\n","<template>\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_5456_102710)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.02582 0.854884C7.32534 0.686248 7.66328 0.597656 8.00701 0.597656C8.35075 0.597656 8.68868 0.686248 8.98821 0.854884C9.28773 1.02352 9.53874 1.26651 9.71701 1.5604L9.71893 1.56357L15.3656 10.9902L15.371 10.9994C15.5456 11.3019 15.638 11.6447 15.639 11.994C15.64 12.3432 15.5495 12.6866 15.3766 12.99C15.2036 13.2934 14.9543 13.5462 14.6533 13.7233C14.3523 13.9004 14.0102 13.9956 13.661 13.9994L13.6537 13.9995L2.35302 13.9995C2.00382 13.9956 1.66171 13.9004 1.36073 13.7233C1.05974 13.5462 0.810381 13.2934 0.637445 12.99C0.46451 12.6866 0.37403 12.3432 0.375008 11.994C0.375986 11.6447 0.468387 11.3019 0.643019 10.9994L0.648434 10.9902L6.297 1.56039C6.47528 1.2665 6.72629 1.02352 7.02582 0.854884ZM8.00701 1.93099C7.89243 1.93099 7.77979 1.96052 7.67995 2.01673C7.58056 2.07269 7.49719 2.15321 7.43782 2.25058L1.79547 11.67C1.73869 11.7699 1.70866 11.8828 1.70834 11.9977C1.70801 12.1141 1.73817 12.2286 1.79582 12.3297C1.85346 12.4308 1.93658 12.5151 2.03691 12.5741C2.13636 12.6327 2.24928 12.6644 2.36461 12.6662H13.6494C13.7647 12.6644 13.8777 12.6327 13.9771 12.5741C14.0774 12.5151 14.1606 12.4308 14.2182 12.3297C14.2759 12.2286 14.306 12.1141 14.3057 11.9977C14.3054 11.8828 14.2753 11.7699 14.2186 11.6701L8.57701 2.2519C8.57675 2.25146 8.57648 2.25102 8.57621 2.25058C8.51683 2.15321 8.43347 2.07269 8.33408 2.01673C8.23424 1.96052 8.12159 1.93099 8.00701 1.93099ZM8.00701 4.66615C8.3752 4.66615 8.67368 4.96463 8.67368 5.33282V7.99949C8.67368 8.36768 8.3752 8.66615 8.00701 8.66615C7.63882 8.66615 7.34035 8.36768 7.34035 7.99949V5.33282C7.34035 4.96463 7.63882 4.66615 8.00701 4.66615ZM7.34035 10.6662C7.34035 10.298 7.63882 9.99949 8.00701 9.99949H8.01368C8.38187 9.99949 8.68035 10.298 8.68035 10.6662C8.68035 11.0343 8.38187 11.3328 8.01368 11.3328H8.00701C7.63882 11.3328 7.34035 11.0343 7.34035 10.6662Z\"\n fill=\"#E7423A\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_5456_102710\">\n <rect\n width=\"16\"\n height=\"16\"\n fill=\"white\"\n transform=\"translate(0.0078125)\"\n />\n </clipPath>\n </defs>\n </svg>\n</template>\n","import { render } from \"./ErrorIcon.vue?vue&type=template&id=e69863f0\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentErrorModal.vue?vue&type=template&id=254242fc&scoped=true\"\nimport script from \"./DocumentErrorModal.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentErrorModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_error.scss?vue&type=style&index=0&id=254242fc&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-254242fc\"]])\n\nexport default __exports__","import { render } from \"./DocumentDashboard.vue?vue&type=template&id=5bb4e541&scoped=true\"\nimport script from \"./DocumentDashboard.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentDashboard.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/document_dashboard.scss?vue&type=style&index=0&id=5bb4e541&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5bb4e541\"]])\n\nexport default __exports__","<template>\n <div class=\"error-page\">\n <b-icon icon=\"circle-exclamation\" size=\"is-48\" class=\"error-icon\" />\n <h1>\n {{ $t(\"document_error_title\") }}\n </h1>\n <h2>\n {{ error ? error : \"\" }}\n </h2>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ErrorPage\",\n props: {\n error: {\n type: String,\n required: false,\n default: null,\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/error_page.scss\"></style>\n","import { render } from \"./ErrorPage.vue?vue&type=template&id=6b311fc9&scoped=true\"\nimport script from \"./ErrorPage.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorPage.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/error_page.scss?vue&type=style&index=0&id=6b311fc9&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b311fc9\"]])\n\nexport default __exports__","<template>\n <div\n v-if=\"documentsAvailableToReview && documentsAvailableToReview.length > 0\"\n class=\"documents-list\"\n >\n <div v-if=\"showCategoryInfo && selectedCategory\" class=\"documents-list-top\">\n <div class=\"documents-list-top-left\">\n <h2>{{ selectedCategory.name }}</h2>\n <p>\n {{ selectedCategory.description }}\n </p>\n </div>\n <div class=\"documents-list-top-right\">\n <div v-if=\"showBranding\" class=\"action-box\">\n <span>{{ $t(\"upload_documents\") }}</span>\n <b-button\n class=\"action-button primary-button\"\n type=\"is-primary\"\n @click=\"requestTrialAccess\"\n >\n {{ $t(\"request_trial\") }}\n </b-button>\n </div>\n </div>\n </div>\n <div class=\"documents-list-bottom\">\n <b-carousel-list :data=\"documentsAvailableToReview\" :items-to-show=\"5\">\n <template #item=\"document\">\n <div\n :class=\"[\n 'documents-list-thumbnail',\n selectedDocument.id == document.id && 'selected',\n ]\"\n @click=\"changeDocument(document.id)\"\n >\n <ServerImage\n :class=\"[\n 'img-thumbnail',\n selectedDocument.id == document.id && 'selected',\n ]\"\n :image-url=\"`${document.thumbnail_url}?${document.updated_at}`\"\n >\n <b-skeleton width=\"20px\" height=\"100%\" />\n </ServerImage>\n <div\n :class=\"[\n 'document-name',\n selectedDocument.id == document.id && 'selected',\n ]\"\n >\n <!-- if is the current document, then we use the store variable to get the file name edits in real time -->\n {{\n selectedDocument.id == document.id\n ? selectedDocument.data_file_name\n : document.data_file_name\n }}\n </div>\n <div\n v-if=\"documentHadErrorDuringExtraction(document)\"\n class=\"error-icon\"\n >\n <ErrorIcon />\n </div>\n </div>\n </template>\n </b-carousel-list>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport ErrorIcon from \"../../assets/images/ErrorIcon\";\nimport {\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n} from \"../../utils/utils\";\n\n/**\n * This component creates a horizontal list of documents\n * with thumbnail pictures which are clickable.\n */\n\nexport default {\n name: \"DocumentsList\",\n components: {\n ServerImage,\n ErrorIcon,\n },\n data() {\n return {\n showCategoryInfo: false,\n selectedCategory: null,\n documentsList: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\"selectedDocument\"]),\n ...mapState(\"category\", [\"documentsAvailableToReview\"]),\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"category\", [\"category\"]),\n ...mapGetters(\"document\", [\"documentHadErrorDuringExtraction\"]),\n },\n watch: {\n showCategoryInfo(newValue) {\n if (newValue) {\n this.selectedCategory = this.category(this.selectedDocument.category);\n }\n },\n },\n methods: {\n changeDocument(documentId) {\n this.$store.dispatch(\"document/changeCurrentDocument\", documentId);\n },\n requestTrialAccess() {\n window.open(\"https://konfuzio.com\", \"_blank\");\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/documents_list.scss\"></style>\n","import { render } from \"./DocumentsList.vue?vue&type=template&id=710ee0ae&scoped=true\"\nimport script from \"./DocumentsList.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentsList.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/documents_list.scss?vue&type=style&index=0&id=710ee0ae&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-710ee0ae\"]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=3a5832aa\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/theme.scss?vue&type=style&index=0&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createI18n } from \"vue-i18n\";\n\nfunction loadLocaleMessages() {\n const locales = require.context(\n \"./locales\",\n true,\n /[A-Za-z0-9-_,\\s]+\\.json$/i\n );\n const messages = {};\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i);\n if (matched && matched.length > 1) {\n const locale = matched[1];\n messages[locale] = locales(key);\n }\n });\n return messages;\n}\n\nexport const i18n = createI18n({\n locale: process.env.VUE_APP_LOCALE || \"en\",\n fallbackLocale: \"en\",\n messages: loadLocaleMessages(),\n});\n","import BigNumber from \"bignumber.js\";\nimport myImports from \"../api\";\nimport {\n PIXEL_RATIO,\n VIEWPORT_RATIO,\n MINIMUM_APP_WIDTH,\n MINIMUM_OPTIMIZED_APP_WIDTH,\n} from \"../constants\";\n\nimport { debounce } from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\n\nconst floor = (value, precision) => {\n const multiplier = Math.pow(10, precision || 0);\n return Math.floor(value * multiplier) / multiplier;\n};\n\nconst state = {\n scale: undefined,\n fit: \"width\",\n currentPage: 1,\n optimalResolution: true,\n interactionBlocked: false,\n categorizeModalIsActive: false,\n pageChangedFromThumbnail: false,\n showAnnSetTable: null,\n showChooseLabelSetModal: null,\n hideEmptyLabelSets: false,\n showDocumentsNavigation: true,\n currentSearch: \"\",\n searchEnabled: false,\n searchResults: [],\n searchLoading: false,\n currentSearchResult: null,\n detailsUrl: null,\n pageError: null,\n labelWidth: 40,\n annotationWidth: 60,\n showBranding: true,\n};\n\nconst getters = {\n isMinimumWidth: (state) => (width) => {\n return width >= MINIMUM_APP_WIDTH;\n },\n pageWidthScale: (state) => (elementsWidth, clientWidth, viewportWidth) => {\n return (\n ((clientWidth - elementsWidth) * PIXEL_RATIO * VIEWPORT_RATIO) /\n viewportWidth\n );\n },\n pageHeightScale: (state) => (clientHeight, viewportHeight) => {\n return (clientHeight * PIXEL_RATIO * VIEWPORT_RATIO) / viewportHeight;\n },\n visiblePageRange: (state, getters, rootState, rootGetters) => {\n const pageCount = rootGetters.pageCount;\n const previousPage = state.currentPage - 1 < 1 ? 1 : state.currentPage - 1;\n const nextPage =\n state.currentPage + 1 > pageCount ? pageCount : state.currentPage + 1;\n return [previousPage, state.currentPage, nextPage];\n },\n\n searchResultsForPage: (state, getters) => (pageNumber) => {\n if (!state.searchEnabled || state.searchResults.length < 1) {\n return [];\n }\n\n return state.searchResults.filter((r) => r.page_index + 1 === pageNumber);\n },\n\n currentSearchResultForPage: (state) => (pageNumber) => {\n if (!state.searchEnabled || state.searchResults.length < 1) {\n return false;\n }\n\n const currentResult = state.searchResults[state.currentSearchResult];\n\n if (!currentResult || currentResult.page_index !== pageNumber - 1) {\n return false;\n }\n\n return currentResult;\n },\n\n /**\n * We take the entities from the backend and resize them according\n * to the `scale` (zoom), the `imageScale` (proportion between the original\n * document and the served image) and `PIXEL_RATIO` (in case of retina displays).\n * We also change the original bbox format to something that can be used with CSS.\n * The original is stored inside the `original` property, since it can be reused\n * when we're sending the entity to the backend for selection or saving.\n */\n scaledEntities: (state, getters) => (entities, page) => {\n // entities are either not loaded yet or empty\n if (!entities || entities.length === 0) {\n return [];\n }\n\n return entities.map((entity) => {\n const box = getters.bboxToRect(page, entity);\n return {\n original: entity,\n scaled: {\n ...box,\n },\n };\n });\n },\n\n /**\n * The proportion between the original size of the page and the\n * image rendering.\n */\n imageScale: (state) => (page) => {\n if (\n page.size &&\n page.size.length > 0 &&\n page.original_size &&\n page.original_size.length > 0\n ) {\n return new BigNumber(page.size[0]).div(page.original_size[0]).toNumber();\n }\n return 0;\n },\n bboxToPoint:\n (state, getters) =>\n (page, point, hasOffset = false) => {\n if (page && page.original_size && page.original_size.length > 1) {\n const imageScale = getters.imageScale(page);\n const { x, y } = point;\n const pageHeight = new BigNumber(page.original_size[1]);\n const newPoint = {\n // left\n x: new BigNumber(x)\n .minus(hasOffset ? 1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n // top\n y: pageHeight\n .minus(new BigNumber(y))\n .minus(hasOffset ? 17.1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n };\n return newPoint;\n }\n return { x: 0, y: 0 };\n },\n bboxToRect:\n (state, getters) =>\n (page, bbox, hasOffset = false) => {\n const imageScale = getters.imageScale(page);\n if (bbox.x0 && bbox.y0) {\n const { x0, x1, y0, y1 } = bbox;\n const pageHeight = new BigNumber(page.original_size[1]);\n const rect = {\n // left\n x: new BigNumber(x0)\n .minus(hasOffset ? 1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n // top\n y: pageHeight\n .minus(new BigNumber(y1))\n .minus(hasOffset ? 17.1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n width: new BigNumber(x1)\n .minus(x0)\n .abs()\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n height: new BigNumber(y1)\n .minus(y0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n };\n return rect;\n }\n return { x: 0, y: 0, width: 0, height: 0 };\n },\n clientToBbox: (state, getters) => (page, start, end) => {\n /**\n * The backend bbox's `y0` and `y1` attributes depend on knowing the\n * page's height.\n */\n const pageHeight = new BigNumber(page.original_size[1]);\n const imageScale = getters.imageScale(page);\n\n /**\n * We use `Math.min` and `Math.max` because depending on how the area\n * selection is made the `start` and `end` attributes might be reversed.\n */\n const x0 = new BigNumber(Math.min(start.x, end.x))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3, BigNumber.ROUND_DOWN)\n .toNumber();\n const x1 = new BigNumber(Math.max(start.x, end.x))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3, BigNumber.ROUND_UP)\n .toNumber();\n const top = new BigNumber(Math.min(start.y, end.y))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3)\n .toNumber();\n const bottom = new BigNumber(Math.max(start.y, end.y))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3)\n .toNumber();\n const y0 = pageHeight.minus(bottom).dp(3, BigNumber.ROUND_DOWN).toNumber();\n const y1 = pageHeight.minus(top).dp(3, BigNumber.ROUND_UP).toNumber();\n\n const bbox = {\n x0,\n x1,\n y0,\n y1,\n page_index: page.number - 1,\n };\n\n return bbox;\n },\n};\n\nconst actions = {\n updateScale({ commit, getters }, { elementsWidth, client, viewport, scale }) {\n /**\n * Determine an ideal scale using viewport of document's first page, the pixel ratio\n * from the browser and a subjective scale factor based on the screen size.\n */\n switch (state.fit) {\n case \"width\":\n commit(\n \"SET_SCALE\",\n getters.pageWidthScale(elementsWidth, client.width, viewport.width)\n );\n break;\n case \"auto\":\n const pageWidthScale = getters.pageWidthScale(\n elementsWidth,\n client.width,\n viewport.width\n );\n const pageHeightScale = getters.pageWidthScale(\n client.height,\n viewport.height\n );\n const autoScale = Math.min(pageWidthScale, pageHeightScale);\n commit(\"SET_SCALE\", autoScale);\n break;\n case \"all\": {\n const widthScale = getters.pageWidthScale(\n elementsWidth,\n client.width,\n viewport.width\n );\n commit(\"SET_SCALE\", widthScale);\n break;\n }\n case \"custom\": {\n if (scale) {\n commit(\"SET_SCALE\", scale);\n }\n break;\n }\n default:\n console.log(\"No fit defined\");\n break;\n }\n },\n\n updateFit({ commit }, fit) {\n commit(\"SET_FIT\", fit);\n },\n\n debounceUpdateCurrentPage: debounce(({ commit, dispatch }, pageNumber) => {\n dispatch(\"updateCurrentPage\", pageNumber);\n }, 300),\n\n updateCurrentPage({ commit }, pageNumber) {\n commit(\"SET_CURRENT_PAGE\", pageNumber);\n },\n updateOptimalResolution({ commit }, width) {\n commit(\"SET_OPTIMAL_RESOLUTION\", width >= MINIMUM_OPTIMIZED_APP_WIDTH);\n },\n showAnnSetTable({ commit }, tableSet) {\n commit(\"SET_ANN_SET_TABLE\", tableSet);\n },\n showDocumentsNavigation({ commit }, show) {\n commit(\"SET_SHOW_DOCUMENTS_NAVIGATION\", show);\n },\n showBranding({ commit }, show) {\n commit(\"SET_SHOW_BRANDING\", show);\n },\n showChooseLabelSetModal({ commit }, options) {\n commit(\"SET_SHOW_CHOOSE_LABEL_SET_MODAL\", options);\n },\n toggleAnnSetTable({ commit }, tableSet) {\n commit(\"TOGGLE_ANN_SET_TABLE\", tableSet);\n },\n setCategorizeModalIsActive: ({ commit }, value) => {\n commit(\"SET_CATEGORIZE_MODAL_IS_ACTIVE\", value);\n },\n setPageChangedFromThumbnail: ({ commit }, value) => {\n commit(\"SET_PAGE_CHANGED_FROM_THUMBNAIL\", value);\n },\n setDetailsUrl: ({ commit }, value) => {\n commit(\"SET_DETAILS_URL\", value);\n },\n setLabelWidth: ({ commit }, value) => {\n commit(\"SET_LABEL_WIDTH\", value);\n commit(\"SET_ANNOTATION_WIDTH\", 100 - value);\n },\n setAnnotationWidth: ({ commit }, value) => {\n const width = Number(value);\n if (width && width >= 20) {\n commit(\"SET_ANNOTATION_WIDTH\", width);\n commit(\"SET_LABEL_WIDTH\", 100 - width);\n } else {\n commit(\"SET_ANNOTATION_WIDTH\", 60);\n commit(\"SET_LABEL_WIDTH\", 40);\n }\n },\n\n debounceSearch: debounce(({ commit, dispatch }, query) => {\n dispatch(\"search\", query);\n }, 300),\n\n startSearchLoading({ commit }) {\n commit(\"SET_SEARCH_LOADING\", true);\n },\n\n hideEmptyLabelSets({ commit }, value) {\n commit(\"HIDE_EMPTY_LABEL_SETS\", value);\n },\n\n search({ commit, rootState }, query) {\n // only allow queries that are at least 3 characters long\n if (query.length >= 3) {\n return HTTP.post(`documents/${rootState.document.documentId}/search/`, {\n q: query,\n }).then((response) => {\n commit(\"SET_SEARCH_RESULTS\", response.data.span);\n commit(\"SET_SEARCH_LOADING\", false);\n });\n } else {\n commit(\"SET_SEARCH_RESULTS\", []);\n commit(\"SET_SEARCH_LOADING\", false);\n }\n },\n\n resetSearch({ commit }) {\n commit(\"SET_CURRENT_SEARCH\", \"\");\n commit(\"SET_SEARCH_RESULTS\", []);\n commit(\"SET_SEARCH_LOADING\", false);\n },\n\n toggleSearch({ commit }) {\n commit(\"TOGGLE_SEARCH\");\n },\n\n enableSearch({ commit }, toEnable) {\n commit(\"ENABLE_SEARCH\", toEnable);\n },\n\n setCurrentSearch({ commit }, currentSearch) {\n commit(\"SET_CURRENT_SEARCH\", currentSearch);\n },\n\n setPageError({ commit }, value) {\n commit(\"SET_PAGE_ERROR\", value);\n },\n\n setCurrentSearchResult({ commit, state }, n) {\n let newSearchResult = state.currentSearchResult + n;\n const searchResultsMaxIndex = state.searchResults.length - 1;\n\n if (newSearchResult > searchResultsMaxIndex) {\n // once we're at the end of the results, start again\n newSearchResult = 0;\n } else if (newSearchResult < 0) {\n // once we're at the beginning of the results, go to the end\n newSearchResult = searchResultsMaxIndex;\n }\n\n commit(\"SET_CURRENT_SEARCH_RESULT\", newSearchResult);\n },\n};\n\nconst mutations = {\n SET_SCALE: (state, scale) => {\n state.scale = floor(scale, 2);\n },\n\n SET_FIT: (state, fit) => {\n state.fit = fit;\n },\n\n SET_OPTIMAL_RESOLUTION: (state, isOptimal) => {\n state.optimalResolution = isOptimal;\n },\n\n SET_CURRENT_PAGE: (state, currentPage) => {\n state.currentPage = currentPage;\n },\n\n SET_LABEL_WIDTH: (state, labelWidth) => {\n state.labelWidth = labelWidth;\n },\n\n SET_ANNOTATION_WIDTH: (state, annotationWidth) => {\n state.annotationWidth = annotationWidth;\n },\n\n SET_SHOW_DOCUMENTS_NAVIGATION: (state, show) => {\n state.showDocumentsNavigation = show;\n },\n\n SET_SHOW_BRANDING: (state, show) => {\n state.showBranding = show;\n },\n\n SET_ANN_SET_TABLE: (state, tableSet) => {\n state.showAnnSetTable = tableSet;\n },\n HIDE_EMPTY_LABEL_SETS: (state, hide) => {\n state.hideEmptyLabelSets = hide;\n },\n\n TOGGLE_ANN_SET_TABLE: (state, tableSet) => {\n if (state.showAnnSetTable) {\n state.showAnnSetTable = null;\n } else {\n state.showAnnSetTable = tableSet;\n }\n },\n\n SET_CATEGORIZE_MODAL_IS_ACTIVE: (state, value) => {\n state.categorizeModalIsActive = value;\n },\n SET_PAGE_CHANGED_FROM_THUMBNAIL: (state, value) => {\n state.pageChangedFromThumbnail = value;\n },\n SET_SHOW_CHOOSE_LABEL_SET_MODAL: (state, options) => {\n state.showChooseLabelSetModal = options;\n },\n SET_SEARCH_RESULTS: (state, searchResults) => {\n state.currentSearchResult = 0;\n state.searchResults = searchResults;\n },\n SET_SEARCH_LOADING: (state, loading) => {\n state.searchLoading = loading;\n },\n TOGGLE_SEARCH: (state) => {\n state.searchEnabled = !state.searchEnabled;\n },\n ENABLE_SEARCH: (state, toEnable) => {\n state.searchEnabled = toEnable;\n },\n SET_CURRENT_SEARCH: (state, currentSearch) => {\n state.currentSearch = currentSearch;\n },\n SET_CURRENT_SEARCH_RESULT: (state, n) => {\n state.currentSearchResult = n;\n },\n SET_DETAILS_URL: (state, value) => {\n state.detailsUrl = value;\n },\n SET_PAGE_ERROR: (state, value) => {\n state.pageError = value;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\nimport {\n sleep,\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n setURLAnnotationHash,\n setURLQueryParam,\n debounce,\n} from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\nconst documentPollDuration = 1000;\nexport const table_reference_api = \"api.v3.dvui.table\";\n\nconst state = {\n loading: true,\n pages: [],\n annotationSets: null,\n annotations: null,\n labels: [],\n documentId: process.env.VUE_APP_DOCUMENT,\n documentSet: null,\n annotationId: null,\n annotationSetId: null,\n documentAnnotationSelected: null,\n selectedDocument: null,\n recalculatingAnnotations: false,\n editAnnotation: null,\n missingAnnotations: [],\n publicView: true,\n showActionError: false,\n errorMessage: null,\n showDocumentError: false,\n annotationsMarkedAsMissing: null,\n errorMessageWidth: null,\n hoveredAnnotationSet: null,\n newAcceptedAnnotations: null,\n serverError: false,\n splittingSuggestions: null,\n enableGroupingFeature: true,\n annotationFilters: {\n showFeedbackNeeded: true,\n showEmpty: true,\n showAccepted: true,\n },\n annotationSearch:\n (getURLQueryParam(\"search\") && getURLQueryParam(\"search\").split(\",\")) || [],\n};\nconst getters = {\n /**\n * Number of pages. If the pages array doesn't exist yet, return 0.\n */\n pageCount: (state) => {\n if (state.selectedDocument.pages) {\n return state.selectedDocument.pages.length;\n }\n return 0;\n },\n\n /**\n * Returns the current page\n */\n pageSelected: (state, _, rootState) => {\n if (state.pages) {\n return state.pages[rootState.display.currentPage - 1];\n }\n return null;\n },\n\n /**\n * Returns a page in the given index\n */\n pageAtIndex: (state) => (index) => {\n if (state.selectedDocument && state.selectedDocument.pages) {\n return state.selectedDocument.pages[index];\n }\n return null;\n },\n\n /**\n * Checks if is to scroll to an annotation in the document\n */\n scrollDocumentToAnnotation: (state) => {\n return (\n state.documentAnnotationSelected &&\n state.documentAnnotationSelected.scrollTo\n );\n },\n\n /**\n * Checks if the document is categorized and ready to start the review\n */\n categorizationIsConfirmed: (state) => {\n if (state.selectedDocument) {\n if (\n state.selectedDocument.category_is_revised ||\n state.selectedDocument.is_reviewed\n ) {\n return true;\n } else if (!state.selectedDocument.category) {\n return false;\n } else {\n // check if there's any annotation already approved\n const found = state.annotations.find((annotation) => {\n return annotation.revised;\n });\n return found != undefined;\n }\n }\n return false;\n },\n\n /**\n * Gets labels for an annotation creation from a label/annotation set\n */\n labelsFilteredForAnnotationCreation: (_, getters) => (set) => {\n let availableLabels = [];\n if (set.id && set.labels) {\n // check if label can be multiple, if there's already an annotation created\n set.labels.map((label) => {\n // check if we already added the same label to the array\n const found = availableLabels.find((l) => l.id === label.id);\n\n if (found) return;\n\n if (label.annotations.length === 0) {\n availableLabels.push(label);\n } else if (label.has_multiple_top_candidates) {\n availableLabels.push(label);\n }\n });\n } else if (set.labels) {\n // if not existing ann set, then return all labels\n availableLabels = set.labels;\n }\n return availableLabels;\n },\n\n /* Checks if annotation is in deleted state */\n isAnnotationDeleted: (state) => (annotation) => {\n if (annotation) {\n return annotation.revised && !annotation.is_correct;\n }\n return false;\n },\n\n /* Checks if the label has annotations to show */\n labelHasAnnotations: (_, getters) => (label) => {\n const annotations = label.annotations.filter((annotation) => {\n return !getters.isAnnotationDeleted(annotation);\n });\n return annotations.length > 0;\n },\n\n /* Checks if the label has annotations to show */\n isLabelMultiFalseAndGroupOfAnns: (state) => (label) => {\n return (\n label &&\n label.annotations &&\n label.annotations.length > 1 &&\n !label.has_multiple_top_candidates &&\n state.enableGroupingFeature\n );\n },\n\n /* Returns the annotations ordered by highest confidence */\n annotationsByConfidence: (state) => (annotations) => {\n annotations.sort((a, b) => {\n // in reverse, comparison was not working correctly in the correct way\n if (a.confidence > b.confidence) {\n return -1;\n } else if (a.confidence < b.confidence) {\n return 1;\n }\n return 0;\n });\n return annotations;\n },\n\n /* Checks if the document has an annotation set */\n annotationSetExists: (state) => (annotationSetId) => {\n return state.annotationSets.find((annSet) => annSet.id === annotationSetId);\n },\n\n /* Get annotation sets created in table */\n annotationSetsInTable: (state) => () => {\n const annotationSetsList = {};\n state.annotationSets.forEach((annotationSet) => {\n let addAnnotationSet = false;\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n if (\n label.annotations &&\n label.annotations.find(\n (annotation) =>\n annotation.origin && annotation.origin === table_reference_api\n )\n ) {\n addAnnotationSet = true;\n return;\n }\n });\n }\n if (addAnnotationSet) {\n // group by label set\n if (annotationSetsList[`${annotationSet.label_set.id}`]) {\n annotationSetsList[`${annotationSet.label_set.id}`].push(\n annotationSet\n );\n } else {\n annotationSetsList[`${annotationSet.label_set.id}`] = [annotationSet];\n }\n }\n });\n\n return annotationSetsList;\n },\n\n /* Get annotation sets */\n annotationSetsToShowInList: (state) => () => {\n const annotationSetsList = [];\n state.annotationSets.forEach((annotationSet) => {\n let addAnnotationSet = true;\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n if (\n label.annotations &&\n label.annotations.find(\n (annotation) =>\n annotation.origin && annotation.origin === table_reference_api\n )\n ) {\n addAnnotationSet = false;\n return;\n }\n });\n }\n if (addAnnotationSet) {\n annotationSetsList.push(annotationSet);\n }\n });\n return annotationSetsList;\n },\n\n /* Get annotations inside a list of annotation sets */\n annotationsInAnnotationsSets: (state) => (annotationsSets) => {\n const annotations = [];\n annotationsSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n annotations.push(annotation);\n });\n });\n });\n return annotations;\n },\n\n /* Get annotation set for a given annotation */\n annotationSetOfAnnotation: (state) => (annotationIdToFind) => {\n let foundAnnotationSet = null;\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n if (annotation.id === annotationIdToFind) {\n foundAnnotationSet = annotationSet;\n return;\n }\n });\n if (foundAnnotationSet) {\n return;\n }\n });\n if (foundAnnotationSet) {\n return;\n }\n });\n return foundAnnotationSet;\n },\n\n /* Get label for a given annotation */\n labelOfAnnotation: (state) => (annotationToFind) => {\n let foundLabel = null;\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n if (annotation.id === annotationToFind.id) {\n foundLabel = label;\n return;\n }\n });\n if (foundLabel) {\n return;\n }\n });\n if (foundLabel) {\n return;\n }\n });\n }\n\n return foundLabel;\n },\n\n getAnnotationsFiltered: (state, getters) => {\n // group annotations for sidebar\n let annotations = [];\n let labels = [];\n let processedAnnotationSets = [];\n let processedLabels = [];\n\n const isSearching = state.annotationSearch.length > 0;\n\n // search feature\n const addAnnotation = (listToAdd, annotation, force) => {\n if (force) {\n listToAdd.push(annotation);\n return true;\n }\n if (isSearching) {\n if (\n annotation.offset_string &&\n state.annotationSearch.find((search) =>\n annotation.offset_string\n .toLowerCase()\n .includes(search.toLowerCase())\n )\n ) {\n listToAdd.push(annotation);\n return true;\n } else if (\n annotation.id &&\n state.annotationSearch.find((search) => `${annotation.id}` === search)\n ) {\n listToAdd.push(annotation);\n return true;\n }\n } else {\n listToAdd.push(annotation);\n return true;\n }\n return false;\n };\n\n const labelHasSearchText = (label) => {\n if (isSearching) {\n if (\n label.name &&\n state.annotationSearch.find((search) =>\n label.name.toLowerCase().includes(search.toLowerCase())\n )\n ) {\n return true;\n }\n } else {\n return false;\n }\n return false;\n };\n\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n labels = [];\n annotationSet.labels.forEach((label) => {\n const labelAnnotations = [];\n let addLabel = false;\n const labelHasSearch = labelHasSearchText(label);\n if (!label.annotations || label.annotations.length === 0) {\n if (\n state.annotationFilters.showEmpty &&\n (!isSearching || labelHasSearch)\n ) {\n addLabel = true;\n }\n } else if (\n !state.annotationFilters.showEmpty ||\n !state.annotationFilters.showFeedbackNeeded ||\n !state.annotationFilters.showAccepted\n ) {\n label.annotations.forEach((annotation) => {\n if (\n state.annotationFilters.showFeedbackNeeded &&\n annotation.revised === false &&\n !annotation.created_by\n ) {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n } else if (\n state.annotationFilters.showAccepted &&\n (annotation.revised === true || annotation.created_by)\n ) {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n }\n });\n } else {\n // add annotations to the document array\n label.annotations.forEach((annotation) => {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n });\n }\n if (addLabel) {\n labels.push({ ...label, annotations: labelAnnotations });\n processedLabels.push(label);\n }\n annotations.push(...labelAnnotations);\n });\n\n // if in search do not add the annotation set\n if (!(state.annotationSearch.length > 0 && labels.length === 0)) {\n processedAnnotationSets.push({ ...annotationSet, labels });\n }\n });\n }\n\n // sort ann sets by name\n processedAnnotationSets.sort((a, b) =>\n a.label_set.name.localeCompare(b.label_set.name)\n );\n\n return {\n annotationSets: processedAnnotationSets,\n labels: processedLabels,\n annotations,\n };\n },\n\n /* Process annotations and extract labels and sets */\n processAnnotationSets: (state, getters, rootState) => (annotationSets) => {\n // group annotations for sidebar\n let annotations = [];\n let labels = [];\n let processedAnnotationSets = [];\n let processedLabels = [];\n\n const sortByConfidenceOrByAnnotationSelected = (annotations) => {\n annotations = getters.annotationsByConfidence(annotations);\n if (state.annotationId) {\n for (let i = 0; i < annotations.length; i++) {\n if (state.annotationId == annotations[i].id) {\n annotations.unshift(annotations.splice(i, 1)[0]);\n }\n }\n }\n return annotations;\n };\n\n annotationSets.forEach((annotationSet) => {\n // check if empty label sets and env variable set as true\n if (\n !(\n (rootState.display.hideEmptyLabelSets || state.publicView) &&\n annotationSet.labels.length === 0\n )\n ) {\n labels = [];\n annotationSet.labels.forEach((label) => {\n let labelAnnotations = [];\n\n // add annotations to the document array\n // remove negative annotations\n label.annotations.forEach((ann) => {\n if (!getters.isNegative(ann)) {\n labelAnnotations.push(ann);\n }\n });\n\n if (!label.has_multiple_top_candidates) {\n // if multi label = false, sort by confidence\n labelAnnotations =\n sortByConfidenceOrByAnnotationSelected(labelAnnotations);\n }\n\n labels.push({ ...label, annotations: labelAnnotations });\n processedLabels.push(label);\n annotations.push(...labelAnnotations);\n });\n processedAnnotationSets.push({ ...annotationSet, labels });\n }\n });\n return {\n annotationSets: processedAnnotationSets,\n labels: processedLabels,\n annotations,\n };\n },\n\n /* Checks if there are annotations correct in the document */\n documentHasCorrectAnnotations: (state) => {\n if (\n !state.annotations ||\n (state.annotations &&\n state.annotations.filter((ann) => ann.is_correct).length > 0)\n ) {\n return true;\n }\n return false;\n },\n\n /* Returns the number of accepted annotations in a label */\n numberOfAcceptedAnnotationsInLabel: (_) => (label) => {\n const annotations = label.annotations.filter((annotation) => {\n return annotation.is_correct;\n });\n return annotations.length;\n },\n\n /**\n * Checks if theres a group of annotation sets and add an index number to them\n */\n numberOfAnnotationSetGroup: (state) => (annotationSet) => {\n let found = false;\n let value = 0;\n let index = 0;\n if (state.annotationSets) {\n let orderedAnnotationSets = [...state.annotationSets];\n orderedAnnotationSets.sort((a, b) => {\n return a.id - b.id || a.label_set.name.localeCompare(b.label_set.name);\n });\n orderedAnnotationSets.map((annotationSetTemp) => {\n if (\n annotationSetTemp.id !== annotationSet.id &&\n annotationSetTemp.label_set.id === annotationSet.label_set.id &&\n annotationSetTemp.label_set.name === annotationSet.label_set.name\n ) {\n found = true;\n index++;\n } else if (\n annotationSetTemp.label_set.id === annotationSet.label_set.id\n ) {\n value = index;\n }\n });\n return found ? `${value + 1}` : \"\";\n }\n return \"\";\n },\n\n /**\n * Checks the number of current document in the document set\n */\n numberOfDocumentInSet: (state) => (document) => {\n let found = false;\n let value = 0;\n let index = 0;\n if (state.documentSet && state.documentSet.documents) {\n state.documentSet.documents.map((documentSetTemp) => {\n if (\n documentSetTemp.id !== document.id &&\n documentSetTemp.category === document.category\n ) {\n found = true;\n index++;\n } else if (documentSetTemp.id === document.id) {\n value = index;\n }\n });\n return found ? `${value + 1}` : \"\";\n }\n return \"\";\n },\n\n /**\n * Checks if theres a group of annotation sets with this label set\n */\n numberOfLabelSetGroup: (state) => (labelSet) => {\n let found = false;\n let index = 0;\n if (state.annotationSets) {\n let orderedAnnotationSets = [...state.annotationSets];\n orderedAnnotationSets.sort((a, b) => {\n return a.id - b.id || a.label_set.name.localeCompare(b.label_set.name);\n });\n orderedAnnotationSets.forEach((annotationSetTemp) => {\n if (\n annotationSetTemp.label_set.id === labelSet.id &&\n annotationSetTemp.label_set.name === labelSet.name\n ) {\n found = true;\n // check if annotation set exists, otherwise it will be new\n if (annotationSetTemp.id) {\n index++;\n }\n }\n });\n return found ? (index === 0 ? \"\" : `${index + 1}`) : \"\";\n }\n return \"\";\n },\n\n /**\n * Gets label sets for an annotation set creation\n */\n labelSetsFilteredForAnnotationSetCreation: (state) => {\n let returnLabelSets = [];\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n // last validation checks if the label set is already present in list\n if (\n (annotationSet.id == null ||\n annotationSet.label_set.has_multiple_annotation_sets) &&\n !returnLabelSets.find(\n (set) => set.id !== null && set.id === annotationSet.label_set.id\n )\n ) {\n const labelSet = { ...annotationSet.label_set };\n labelSet.labels = [...annotationSet.labels];\n returnLabelSets.push(labelSet);\n }\n });\n }\n return returnLabelSets;\n },\n\n /**\n * Get label with annotations filtered if the label supports multiple or not\n */\n annotationsInLabelFiltered: (state) => (label) => {\n let labelToReturn;\n if (\n label.has_multiple_top_candidates === false &&\n label.annotations &&\n label.annotations.length > 1\n ) {\n let highestConfidenceAnnotation = label.annotations[0];\n for (let i = 1; i < label.annotations.length; i++) {\n // check which one has more confidence or if it's the same, then check if one is revised or not\n if (\n highestConfidenceAnnotation.confidence <\n label.annotations[i].confidence ||\n (highestConfidenceAnnotation.confidence ===\n label.annotations[i].confidence &&\n label.annotations[i].revised)\n ) {\n highestConfidenceAnnotation = label.annotations[i];\n }\n }\n labelToReturn = {\n ...label,\n annotations: [highestConfidenceAnnotation],\n };\n } else {\n labelToReturn = {\n ...label,\n };\n }\n return labelToReturn;\n },\n\n /**\n * Checks if annotation is being edited\n */\n isAnnotationInEditMode:\n (state) =>\n (annotationId, index = null) => {\n if (state.editAnnotation && annotationId) {\n if (index != null) {\n return (\n state.editAnnotation.id === annotationId &&\n state.editAnnotation.index === index\n );\n }\n return state.editAnnotation.id === annotationId;\n }\n },\n\n /**\n * Checks if it's currently searching for annotations\n */\n isSearchingAnnotationList: (state) => {\n if (\n !state.annotationFilters.showFeedbackNeeded ||\n !state.annotationFilters.showEmpty ||\n !state.annotationFilters.showAccepted\n ) {\n return true;\n }\n return state.annotationSearch && state.annotationSearch.length > 0;\n },\n\n /**\n * Get number of empty labels per annotation set\n */\n emptyLabels: (state, getters) => (annotationSet) => {\n const pendingEmpty = [];\n\n annotationSet.labels.map((label) => {\n const foundMissing = state.missingAnnotations.find(\n (l) =>\n l.label === label.id &&\n annotationSet.id === l.annotation_set &&\n annotationSet.label_set.id === l.label_set\n );\n\n if (!foundMissing && label.annotations.length === 0) {\n pendingEmpty.push(label);\n }\n });\n\n return pendingEmpty;\n },\n\n annotationIsNotFound: (state) => (annotationSet, label) => {\n // Check if the combined label and label set have been marked as missing\n // or if the document is in public mode\n if (annotationSet) {\n if (state.missingAnnotations.length === 0) {\n return false;\n } else {\n const found = state.missingAnnotations.filter(\n (el) =>\n el.label === label.id &&\n el.annotation_set === annotationSet.id &&\n el.label_set === annotationSet.label_set.id\n );\n return found.length !== 0;\n }\n }\n return false;\n },\n\n isAnnotationInAnnotationSet: (state) => (annotationSet, annotationId) => {\n // Check if the annotation exists in the annotation set\n let exists = false;\n for (let i = 0; i < annotationSet.labels.length; i++) {\n const label = annotationSet.labels[i];\n for (let j = 0; j < label.annotations.length; j++) {\n exists = label.annotations[j].id == annotationId;\n if (exists) {\n break;\n }\n }\n if (exists) {\n break;\n }\n }\n return exists;\n },\n\n annotationById: (state) => (annotationId) => {\n if (state.annotations) {\n return state.annotations.find((ann) => ann.id == annotationId);\n }\n return null;\n },\n\n // Check if document is ready to be finished\n isDocumentReadyToFinishReview: (state) => {\n // check if all annotations are correct\n let notCorrect;\n\n const emptyAnnotations = [];\n\n if (state.labels.length === 0) return false;\n\n if (state.annotationSets && state.annotationSets.length > 0) {\n state.annotationSets.forEach((annSet) => {\n annSet.labels.map((label) => {\n // return only labels with empty annotations\n if (label.annotations.length === 0) {\n emptyAnnotations.push({\n label: label.id,\n label_set: annSet.label_set.id,\n });\n }\n });\n });\n }\n\n if (state.annotations) {\n notCorrect = state.annotations.filter((a) => !a.is_correct);\n\n if (notCorrect) {\n notCorrect.map((annotation) => {\n emptyAnnotations.push(annotation);\n });\n }\n }\n\n // if all annotations are correct\n // and if there are no empty annotations or\n // all empty annotations were marked as missing,\n // we can finish the review\n if (\n !emptyAnnotations ||\n !state.missingAnnotations ||\n state.missingAnnotations.length === emptyAnnotations.length\n ) {\n return true;\n }\n return false;\n },\n\n isDocumentReviewed: (state) => {\n return state.selectedDocument.is_reviewed;\n },\n\n /**\n * Get number of annotations pending review per annotation set\n */\n notCorrectAnnotations: () => (annotationSet) => {\n const labels = annotationSet.labels.filter(\n (label) => label.annotations.length > 0\n );\n\n const annotationsWithPendingReview = [];\n\n labels.map((label) => {\n const foundPendingAnnotations = label.annotations.filter(\n (ann) => !ann.is_correct && !ann.revised\n );\n\n if (foundPendingAnnotations && foundPendingAnnotations.length > 0) {\n foundPendingAnnotations.map((annotation) => {\n annotationsWithPendingReview.push(annotation);\n });\n }\n\n // Check if we have grouped annotations by same label\n if (state.enableGroupingFeature && label.annotations.length < 2) {\n return annotationsWithPendingReview.length - label.annotations.length;\n }\n });\n\n return annotationsWithPendingReview;\n },\n\n /**\n * Check if the document was extracted correctly and is ready to be reviewed\n */\n isDocumentReadyToBeReviewed: () => (document) => {\n return document.status_data === 2 && document.labeling_available === 1;\n },\n\n /**\n * Check if the document had an error during extraction\n */\n documentHadErrorDuringExtraction: () => (document) => {\n return document.status_data === 111;\n },\n\n /**\n * check if the document has a dataset status of 'Training', 'Test' or 'Preparation'\n * or if it is Ready Only / Reviewed\n * and if so disable the option to edit the document\n */\n documentCannotBeEdited:\n (state) =>\n (document = state.selectedDocument) => {\n return (\n document.dataset_status === 1 ||\n document.dataset_status === 2 ||\n document.dataset_status === 3 ||\n document.is_reviewed\n );\n },\n\n /**\n * If automatic splitting is enabled for the project\n */\n waitingForSplittingConfirmation: () => (document) => {\n return document && document.status_data === 41;\n },\n\n /**\n * Show the Smart Split switch or not\n */\n documentHasProposedSplit: () => (document) => {\n return document.proposed_split && document.proposed_split.length > 0;\n },\n\n /**\n * Check the level of confidence of an annotation\n */\n confidence: () => (annotation) => {\n if (annotation) {\n return annotation.confidence;\n } else {\n return null;\n }\n },\n\n /**\n * Check status of annotation\n */\n notExtracted: () => (annotation) => {\n if (annotation) {\n return !annotation.span;\n } else {\n return true;\n }\n },\n created: () => (annotation) => {\n if (annotation) {\n return (\n annotation.created_by && !annotation.revised && annotation.is_correct\n );\n } else {\n return null;\n }\n },\n edited: () => (annotation) => {\n if (annotation) {\n if (annotation.offset_string !== annotation.offset_string_original) {\n return true;\n } else if (annotation.created_by) {\n return true;\n } else {\n return false;\n }\n } else {\n return null;\n }\n },\n accepted: () => (annotation) => {\n if (annotation) {\n return annotation.revised && annotation.is_correct;\n } else {\n return null;\n }\n },\n isNegative: () => (annotation) => {\n if (annotation) {\n return !annotation.is_correct && annotation.revised;\n } else {\n return null;\n }\n },\n\n /**\n * Check for user who created or revised the annotation\n */\n getUser: () => (annotation) => {\n if (annotation) {\n if (annotation.created_by && !annotation.revised) {\n // If the annotation was created but not yet revised\n // we show who created it\n return annotation.created_by;\n } else if (annotation.revised && annotation.revised_by) {\n return annotation.revised_by;\n } else {\n // If both revised_by and created_by are null, we don't show any user\n return null;\n }\n } else {\n return null;\n }\n },\n\n /**\n * Check if there is just one annotation set from a label set\n */\n isOnlyMultipleAnnotationSet: (state) => (annotationSet) => {\n const sameSets = state.annotationSets.filter(\n (set) => set.label_set.id === annotationSet.label_set.id\n );\n\n return sameSets.length === 1 ? true : false;\n },\n\n /**\n * Check if the annotation set can appear multiple times\n */\n annotationSetCanBeMultiple: (_) => (annotationSet) => {\n return annotationSet.label_set.has_multiple_annotation_sets;\n },\n\n /**\n * Check if the annotation set has only empty labels\n */\n annotationSetHasNoFilledLabels: (_) => (annotationSet) => {\n const annotations = annotationSet.labels.flatMap((label) => {\n return label.annotations;\n });\n\n return annotations.length === 0 ? true : false;\n },\n};\n\nconst actions = {\n startLoading: ({ commit }) => {\n commit(\"SET_LOADING\", true);\n commit(\"display/ENABLE_SEARCH\", false, { root: true });\n },\n endLoading: ({ commit }) => {\n commit(\"SET_LOADING\", false);\n },\n setDocId: ({ commit }, id) => {\n commit(\"SET_PAGES\", []);\n commit(\"SET_DOC_ID\", id);\n },\n setAnnotationId: ({ commit, dispatch, getters }, id) => {\n if (id) {\n // check if part of label with multi ann as false\n const annotation = getters.annotationById(id);\n const label = getters.labelOfAnnotation(annotation);\n if (getters.isLabelMultiFalseAndGroupOfAnns(label)) {\n dispatch(\"setAnnotationAsFirstInLabel\", { label, annotation });\n }\n }\n\n commit(\"SET_ANNOTATION_ID\", id);\n setURLAnnotationHash(id);\n },\n setAnnotationSetId: ({ commit }, id) => {\n commit(\"SET_ANNOTATION_SET_ID\", id);\n },\n setAnnotationSets: ({ commit }, annotationSets) => {\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n },\n setEditAnnotation: (\n { commit },\n { id, index, label, labelSet, annotationSet, pageNumber }\n ) => {\n const value = {\n id,\n index,\n label,\n labelSet,\n annotationSet,\n pageNumber,\n };\n commit(\"SET_EDIT_ANNOTATION\", value);\n },\n resetEditAnnotation: ({ commit }) => {\n commit(\"RESET_EDIT_ANNOTATION\");\n },\n setAnnotations: ({ commit }, annotations) => {\n commit(\"SET_ANNOTATIONS\", annotations);\n },\n setLabels: ({ commit }, labels) => {\n commit(\"SET_LABELS\", labels);\n },\n setPages: ({ commit }, pages) => {\n commit(\"SET_PAGES\", pages);\n },\n setSelectedDocument: ({ commit }, document) => {\n commit(\"SET_SELECTED_DOCUMENT\", document);\n },\n setPublicView: ({ commit }, publicView) => {\n commit(\"SET_PUBLIC_VIEW\", publicView);\n },\n startRecalculatingAnnotations: ({ commit }) => {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", true);\n },\n endRecalculatingAnnotations: ({ commit }) => {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", false);\n },\n setMissingAnnotations: ({ commit }, missingAnnotations) => {\n commit(\"SET_MISSING_ANNOTATIONS\", missingAnnotations);\n },\n setErrorMessage: ({ commit, dispatch }, message) => {\n if (message) {\n commit(\"SET_SHOW_ACTION_ERROR\", true);\n } else {\n commit(\"SET_SHOW_ACTION_ERROR\", false);\n }\n\n commit(\"SET_ERROR_MESSAGE\", message);\n\n dispatch(\"closeErrorMessage\");\n },\n setDocumentError: ({ commit }, value) => {\n commit(\"SET_DOCUMENT_ERROR\", value);\n },\n setAnnotationsMarkedAsMissing: ({ commit }, annotations) => {\n commit(\"SET_ANNOTATIONS_MARKED_AS_MISSING\", annotations);\n },\n setErrorMessageWidth: ({ commit }, width) => {\n commit(\"SET_ERROR_MESSAGE_WIDTH\", width);\n },\n setHoveredAnnotationSet: ({ commit }, annotationSet) => {\n commit(\"SET_HOVERED_ANNOTATION_SET\", annotationSet);\n },\n setNewAcceptedAnnotations: ({ commit }, annotations) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", annotations);\n },\n setSplittingSuggestions: ({ commit }, value) => {\n commit(\"SET_SPLITTING_SUGGESTIONS\", value);\n },\n setAnnotationSearch: ({ commit }, value) => {\n commit(\"SET_ANNOTATION_SEARCH\", value);\n },\n\n /**\n * Actions that use HTTP requests always return the axios promise,\n * so they can be `await`ed (useful to set the `loading` status).\n */\n fetchDocument: async ({ commit, state, dispatch, rootState, getters }) => {\n let isRecalculatingAnnotations = false;\n const initialPage = 1;\n\n dispatch(\"startLoading\");\n dispatch(\"display/updateCurrentPage\", initialPage, {\n root: true,\n });\n\n await HTTP.get(`documents/${state.documentId}/`)\n .then((response) => {\n if (response.data) {\n const fetchedDocument = response.data;\n\n const { labels, annotations, annotationSets } =\n getters.processAnnotationSets(fetchedDocument.annotation_sets);\n\n // reset pages to avoid displaying old pages while new ones are loading\n commit(\"SET_PAGES\", []);\n\n // load first page\n if (fetchedDocument.pages.length > 0) {\n dispatch(\"fetchDocumentPage\", initialPage);\n }\n\n // set information on the store\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n commit(\"SET_ANNOTATIONS\", annotations);\n commit(\"SET_LABELS\", labels);\n commit(\"SET_SELECTED_DOCUMENT\", fetchedDocument);\n\n // project\n if (fetchedDocument.project) {\n dispatch(\"project/setProjectId\", fetchedDocument.project, {\n root: true,\n });\n\n dispatch(\n \"project/setShowAnnotationTranslations\",\n fetchedDocument.enable_translated_strings,\n {\n root: true,\n }\n );\n }\n\n if (!state.publicView) {\n dispatch(\"fetchMissingAnnotations\");\n\n dispatch(\"project/fetchCurrentUser\", null, {\n root: true,\n });\n\n if (fetchedDocument.project) {\n dispatch(\"category/fetchCategories\", fetchedDocument.project, {\n root: true,\n });\n }\n if (fetchedDocument.document_set) {\n dispatch(\"fetchDocumentSet\", fetchedDocument.document_set);\n }\n }\n\n if (getters.documentHasProposedSplit(fetchedDocument)) {\n dispatch(\"setSplittingSuggestions\", fetchedDocument.proposed_split);\n }\n\n if (fetchedDocument.labeling_available !== 1) {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", true);\n dispatch(\"pollDocumentEndpoint\");\n }\n }\n })\n .catch((error) => {\n console.log(error, \"Could not fetch document details from the backend\");\n dispatch(\"display/setPageError\", error.response.data.detail, {\n root: true,\n });\n return;\n });\n\n // Check if we first open the document dashboard or the edit mode\n if (\n !state.publicView &&\n state.selectedDocument &&\n (!state.selectedDocument.category ||\n (!state.selectedDocument.category_is_revised &&\n !getters.documentHasCorrectAnnotations &&\n state.missingAnnotations.length === 0))\n ) {\n dispatch(\"edit/enableEditMode\", null, {\n root: true,\n });\n dispatch(\"edit/setRenameAndCategorize\", true, { root: true });\n }\n dispatch(\"endLoading\");\n },\n\n // Get document page data\n fetchDocumentPage: ({ commit, state }, page) => {\n return HTTP.get(`documents/${state.documentId}/pages/${page}/`)\n .then((response) => {\n commit(\"ADD_PAGE\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n // Set document set data\n setDocumentSet: ({ commit }, documentSet) => {\n commit(\"SET_DOC_SET\", documentSet);\n },\n\n // Get document set data\n fetchDocumentSet: ({ commit, state }, documentSetId) => {\n return HTTP.get(\n `document-sets/${documentSetId}/?expand=documents&fields=documents.id,documents.data_file_name,documents.category`\n )\n .then((response) => {\n commit(\"SET_DOC_SET\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n setDocumentAnnotationSelected: (\n { commit },\n { annotation, label, span, scrollTo = false }\n ) => {\n const value = {\n scrollTo,\n id: annotation.id,\n span,\n page: span.page_index + 1,\n labelName: label ? label.name : \"\",\n };\n commit(\"SET_DOCUMENT_ANNOTATION_SELECTED\", value);\n },\n\n scrollToDocumentAnnotationSelected: ({ commit }) => {\n commit(\"SET_DOCUMENT_ANNOTATION_SCROLL\", true);\n },\n\n disableDocumentAnnotationSelected: ({ commit }) => {\n commit(\"SET_DOCUMENT_ANNOTATION_SELECTED\", null);\n },\n\n createAnnotation: ({ commit, getters, dispatch }, { annotation }) => {\n return new Promise((resolve, reject) => {\n HTTP.post(`/annotations/`, annotation)\n .then(async (response) => {\n if (response.status === 201) {\n await dispatch(\"fetchMissingAnnotations\");\n\n if (!getters.annotationSetExists(response.data.annotation_set)) {\n const documentData = await dispatch(\"fetchDocumentData\");\n if (documentData && documentData.annotation_sets) {\n const { labels, annotations, annotationSets } =\n getters.processAnnotationSets(documentData.annotation_sets);\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n commit(\"SET_ANNOTATIONS\", annotations);\n commit(\"SET_LABELS\", labels);\n }\n } else {\n commit(\"ADD_ANNOTATION\", response.data);\n }\n\n if (response.data && response.data.id) {\n dispatch(\"setAnnotationId\", response.data.id);\n }\n resolve(response);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateAnnotation: (\n { commit, getters, dispatch },\n { updatedValues, annotationId }\n ) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", [annotationId]);\n\n return new Promise((resolve, reject) => {\n HTTP.patch(`/annotations/${annotationId}/`, updatedValues)\n .then(async (response) => {\n if (response.status === 200) {\n commit(\"UPDATE_ANNOTATION\", response.data);\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", null);\n if (response.data && response.data.id) {\n dispatch(\"setAnnotationId\", response.data.id);\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n deleteAnnotation: (\n { commit, getters, state },\n { annotationId, annotationSet }\n ) => {\n return new Promise((resolve, reject) => {\n HTTP.delete(`/annotations/${annotationId}/`)\n .then(async (response) => {\n if (response.status === 204) {\n if (state.annotationId === annotationId) {\n commit(\"SET_ANNOTATION_ID\", null);\n setURLAnnotationHash(null);\n }\n\n commit(\"DELETE_ANNOTATION\", annotationId);\n\n // Check if the deleted annotation was the last one in a multiple annotation set\n // and if the annotation set has no annotations\n if (\n annotationSet &&\n getters.annotationSetCanBeMultiple(annotationSet) &&\n getters.annotationSetHasNoFilledLabels(annotationSet)\n ) {\n // Check if there is still 1 or more multiple annotation sets for the same label set\n if (getters.isOnlyMultipleAnnotationSet(annotationSet)) {\n commit(\"UPDATE_ANNOTATION_SET\", annotationSet);\n } else {\n commit(\"DELETE_ANNOTATION_SET\", annotationSet);\n }\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateDocument: ({ commit, state, getters, dispatch }, updatedDocument) => {\n return new Promise((resolve, reject) => {\n HTTP.patch(`/documents/${state.documentId}/`, updatedDocument)\n .then((response) => {\n if (response.status === 200) {\n if (updatedDocument.data_file_name) {\n // if the only change was the file name, don't reload the page\n // only update the file name for the selectedDocument\n commit(\"UPDATE_FILE_NAME\", response.data.data_file_name);\n } else {\n commit(\"SET_SELECTED_DOCUMENT\", response.data);\n\n dispatch(\"pollDocumentEndpoint\");\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n console.log(error);\n // check if review error\n if (\n error.response &&\n error.response.request &&\n error.response.request.response\n ) {\n const is_reviewed = JSON.parse(error.request.response).is_reviewed;\n if (is_reviewed && is_reviewed.length > 0) {\n const errorData = {\n data: [...is_reviewed],\n };\n reject(errorData);\n return;\n }\n }\n reject(error.response);\n });\n });\n },\n\n fetchMissingAnnotations: ({ commit, state, getters }) => {\n return new Promise((resolve, reject) => {\n return myImports\n .makeGetPaginatedRequest(\n `/missing-annotations/?document=${state.documentId}`,\n true\n )\n .then((results) => {\n commit(\"SET_MISSING_ANNOTATIONS\", results);\n resolve(true);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n addMissingAnnotations: ({ commit, getters }, missingAnnotations) => {\n return new Promise((resolve, reject) => {\n HTTP.post(`/missing-annotations/`, missingAnnotations)\n .then(async (response) => {\n if (response.status === 201) {\n commit(\"SET_ANNOTATIONS_MARKED_AS_MISSING\", null);\n commit(\"ADD_MISSING_ANNOTATIONS\", response.data);\n }\n\n resolve(response);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n deleteMissingAnnotation: ({ commit, getters }, id) => {\n return new Promise((resolve, reject) => {\n return HTTP.delete(`/missing-annotations/${id}/`)\n .then((response) => {\n if (response.status === 204) {\n commit(\"DELETE_MISSING_ANNOTATION\", id);\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateMultipleAnnotations: ({ state, commit }, annotations) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", annotations.ids);\n\n return new Promise((resolve, reject) => {\n return HTTP.patch(\n `documents/${state.documentId}/update-annotations/`,\n annotations\n )\n .then((response) => {\n if (response.status === 200) {\n response.data.map((annotation) => {\n commit(\"UPDATE_ANNOTATION\", annotation);\n });\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", null);\n resolve(true);\n }\n })\n .catch((error) => {\n console.log(error);\n reject(error.response);\n });\n });\n },\n\n fetchDocumentStatus: ({ state, getters }) => {\n return new Promise((resolve, reject) => {\n return HTTP.get(\n `documents/${state.documentId}/?fields=status_data,labeling_available`\n )\n .then((response) => {\n if (\n getters.isDocumentReadyToBeReviewed(response.data) ||\n getters.waitingForSplittingConfirmation(response.data)\n ) {\n // ready or has splitting suggestions\n return resolve(true);\n } else if (getters.documentHadErrorDuringExtraction(response.data)) {\n // error\n return reject();\n } else {\n // not yet ready\n return resolve(false);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n // Get document data\n fetchDocumentData: ({ state }) => {\n return new Promise((resolve, reject) => {\n HTTP.get(`documents/${state.documentId}/`)\n .then((response) => {\n return resolve(response.data);\n })\n .catch((error) => {\n reject(error);\n console.log(error);\n });\n });\n },\n\n // Poll Document endpoint to know if the Document is ready to be reviewed\n // or even if there was an error during the extraction\n pollDocumentEndpoint: ({ dispatch }) => {\n return dispatch(\"fetchDocumentStatus\")\n .then((ready) => {\n if (ready) {\n // Stop document recalculating annotations\n dispatch(\"endRecalculatingAnnotations\");\n dispatch(\"fetchDocument\");\n } else {\n sleep(documentPollDuration);\n dispatch(\"pollDocumentEndpoint\");\n }\n })\n .catch((error) => {\n dispatch(\"setDocumentError\", true);\n console.log(error);\n });\n },\n\n createErrorMessage: (\n { commit, dispatch },\n { error, serverErrorMessage, defaultErrorMessage }\n ) => {\n // check type of error\n if (error && error.status >= 500 && error.status < 600) {\n dispatch(\"setErrorMessage\", serverErrorMessage);\n commit(\"SET_SERVER_ERROR\", true);\n } else if (error.data && error.data.length > 0) {\n dispatch(\"setErrorMessage\", error.data[0]);\n } else {\n dispatch(\"setErrorMessage\", defaultErrorMessage);\n }\n },\n\n closeErrorMessage: ({ commit }) => {\n setTimeout(() => {\n commit(\"SET_ERROR_MESSAGE\", null);\n commit(\"SET_SHOW_ACTION_ERROR\", false);\n commit(\"SET_SERVER_ERROR\", false);\n }, 5000);\n },\n\n contactSupport: ({ rootState }, error) => {\n const url = \"https://konfuzio.com/support/\";\n const params = `project=${rootState.project.projectId}&email=${rootState.project.currentUser.username}&issue=${error}`;\n const fullUrl = `${url}?${params}`;\n\n window.open(fullUrl, \"_blank\");\n },\n\n changeCurrentDocument: (\n { commit, state, dispatch, rootState },\n documentId\n ) => {\n // reset splitting suggestions\n if (state.splittingSuggestions) {\n commit(\"SET_SPLITTING_SUGGESTIONS\", null);\n }\n\n if (rootState.edit.editMode) {\n // Reset edit mode when changing the document,\n // in case the change was made from the arrows in the Edit Mode\n // so that the user does not get stuck in this interface\n dispatch(\"edit/disableEditMode\", null, {\n root: true,\n });\n }\n\n commit(\"SET_RECALCULATING_ANNOTATIONS\", false);\n\n if (getURLQueryParam(\"document\") || getURLPath(\"d\")) {\n navigateToNewDocumentURL(state.selectedDocument.id, documentId);\n } else {\n commit(\"SET_DOC_ID\", documentId);\n dispatch(\"fetchDocument\");\n }\n },\n showMissingAnnotations({ commit }, show) {\n commit(\"SET_SHOW_MISSING_ANNOTATIONS\", show);\n },\n showFeedbackNeededAnnotations({ commit }, show) {\n commit(\"SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS\", show);\n },\n showAcceptedAnnotations({ commit }, show) {\n commit(\"SET_SHOW_ACCEPTED_ANNOTATIONS\", show);\n },\n unloadDocumentPage: ({ commit }, pageNumber) => {\n commit(\"REMOVE_PAGE\", pageNumber);\n },\n putNextAnnotationInLabelFirst({ commit }, label) {\n commit(\"PUT_NEXT_ANN_IN_LABEL_FIRST\", label);\n },\n setAnnotationAsFirstInLabel({ commit, state }, { label, annotation }) {\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n if (labelToFind.annotations && labelToFind.annotations.length > 1) {\n for (let i = 0; i < labelToFind.annotations.length; i++) {\n if (labelToFind.annotations[i].id === annotation.id) {\n labelToFind.annotations.unshift(\n labelToFind.annotations.splice(i, 1)[0]\n );\n commit(\"SET_ANNOTATIONS_IN_LABEL\", {\n annotationSet,\n label: labelToFind,\n annotations: labelToFind.annotations,\n });\n }\n }\n }\n }\n });\n });\n },\n putNextAnnotationInLabelFirst({ commit, state, dispatch }, label) {\n dispatch(\"setAnnotationId\", null);\n let newFirstAnn = null;\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n if (labelToFind.annotations && labelToFind.annotations.length > 1) {\n const cloneAnnotations = [...labelToFind.annotations];\n const firstElement = cloneAnnotations.shift();\n cloneAnnotations.push(firstElement);\n commit(\"SET_ANNOTATIONS_IN_LABEL\", {\n annotationSet,\n label: labelToFind,\n annotations: cloneAnnotations,\n });\n newFirstAnn = cloneAnnotations[0];\n return;\n }\n }\n });\n if (newFirstAnn) {\n return;\n }\n });\n\n if (newFirstAnn) {\n dispatch(\"setDocumentAnnotationSelected\", {\n annotation: newFirstAnn,\n label: label,\n span: newFirstAnn.span[0],\n scrollTo: true,\n });\n\n dispatch(\"scrollToDocumentAnnotationSelected\");\n }\n },\n};\n\nconst mutations = {\n SET_LOADING: (state, loading) => {\n state.loading = loading;\n },\n SET_DOC_ID: (state, id) => {\n if (id !== state.documentId) {\n state.documentId = id;\n }\n },\n SET_DOC_SET: (state, documentSet) => {\n // assuming that documents in document set are ordered from new to old\n let documents = [];\n if (documentSet && documentSet.documents) {\n documents = documentSet.documents.slice().reverse();\n }\n\n const orderedDocumentSet = {\n ...documentSet,\n documents,\n };\n\n state.documentSet = orderedDocumentSet;\n },\n SET_ANNOTATION_ID: (state, id) => {\n state.annotationId = id;\n },\n SET_ANNOTATION_SET_ID: (state, id) => {\n state.annotationSetId = id;\n },\n ADD_ANNOTATION: (state, annotation) => {\n state.annotations.push(annotation);\n state.annotationSets.map((annotationSet) => {\n if (\n annotation.annotation_set === annotationSet.id &&\n annotation.label_set &&\n annotationSet.label_set.id === annotation.label_set.id\n ) {\n annotationSet.labels.map((label) => {\n if (annotation.label && annotation.label.id === label.id) {\n const exists = label.annotations.find(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n\n if (!exists) {\n label.annotations.push(annotation);\n return;\n }\n }\n });\n }\n });\n },\n UPDATE_ANNOTATION: (state, annotation) => {\n const indexOfAnnotationInAnnotations = state.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n if (indexOfAnnotationInAnnotations > -1) {\n state.annotations.splice(indexOfAnnotationInAnnotations, 1, annotation);\n }\n let updatedAnnotation = false;\n state.annotationSets.forEach((annotationSet) => {\n if (updatedAnnotation) {\n return;\n }\n annotationSet.labels.forEach((label) => {\n const indexOfAnnotationAnnotationSets = label.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n if (indexOfAnnotationAnnotationSets > -1) {\n // checks if an annotation label was changed and add it to the new label\n if (annotation.label && annotation.label.id !== label.id) {\n label.annotations.splice(indexOfAnnotationAnnotationSets, 1);\n\n const labelToAdd = annotationSet.labels.find(\n (labelToAdd) => labelToAdd.id === annotation.label.id\n );\n labelToAdd.annotations.push(annotation);\n } else {\n label.annotations.splice(\n indexOfAnnotationAnnotationSets,\n 1,\n annotation\n );\n }\n updatedAnnotation = true;\n return;\n }\n });\n });\n },\n DELETE_ANNOTATION: (state, annotationId) => {\n const indexOfAnnotationToDelete = state.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotationId\n );\n if (indexOfAnnotationToDelete > -1) {\n state.annotations.splice(indexOfAnnotationToDelete, 1);\n }\n let deleted = false;\n state.annotationSets.forEach((annotationSet) => {\n if (deleted) {\n return;\n }\n annotationSet.labels.forEach((label) => {\n const indexOfAnnotationInLabelToDelete = label.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotationId\n );\n if (indexOfAnnotationInLabelToDelete > -1) {\n label.annotations.splice(indexOfAnnotationInLabelToDelete, 1);\n deleted = true;\n return;\n }\n });\n });\n },\n SET_ANNOTATIONS: (state, annotations) => {\n state.annotations = annotations;\n },\n SET_ANNOTATION_SETS: (state, annotationSets) => {\n state.annotationSets = annotationSets;\n },\n DELETE_ANNOTATION_SET: (state, annotationSet) => {\n const indexOfSetToDelete = state.annotationSets.findIndex(\n (existingAnnotationSet) => existingAnnotationSet.id === annotationSet.id\n );\n\n if (indexOfSetToDelete === -1) return;\n\n state.annotationSets.splice(indexOfSetToDelete, 1);\n },\n UPDATE_ANNOTATION_SET: (state, annotationSet) => {\n const indexOfExistingAnnotationSet = state.annotationSets.findIndex(\n (existingAnnotationSet) => existingAnnotationSet.id === annotationSet.id\n );\n\n if (indexOfExistingAnnotationSet === -1) return;\n\n const updatedSet = { ...annotationSet, id: null };\n\n state.annotationSets.splice(indexOfExistingAnnotationSet, 1, updatedSet);\n },\n SET_LABELS: (state, labels) => {\n state.labels = labels;\n },\n SET_ANNOTATIONS_IN_LABEL: (state, { label, annotations, annotationSet }) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n delete labelToFind.annotations;\n labelToFind.annotations = annotations;\n return;\n }\n });\n },\n SET_EDIT_ANNOTATION: (state, editAnnotation) => {\n state.editAnnotation = editAnnotation;\n },\n RESET_EDIT_ANNOTATION: (state) => {\n state.editAnnotation = null;\n },\n ADD_PAGE: (state, page) => {\n // if we already have the page in the state, update it in\n // the pages array instead of creating a new one\n const existingPageIndex = state.pages.findIndex(\n (p) => p.number === page.number\n );\n if (existingPageIndex === -1) {\n state.pages.push(page);\n } else {\n state.pages[existingPageIndex] = page;\n }\n },\n SET_PAGES: (state, pages) => {\n state.pages = pages;\n },\n SET_DOCUMENT_ANNOTATION_SELECTED: (state, documentAnnotationSelected) => {\n state.documentAnnotationSelected = documentAnnotationSelected;\n },\n SET_DOCUMENT_ANNOTATION_SCROLL: (state, scrollTo) => {\n if (state.documentAnnotationSelected) {\n state.documentAnnotationSelected.scrollTo = scrollTo;\n }\n },\n SET_SELECTED_DOCUMENT: (state, document) => {\n state.selectedDocument = document;\n\n // this is to handle cache when a document is edited or changed\n if (state.selectedDocument) {\n state.selectedDocument.downloaded_at = Date.now();\n }\n },\n SET_RECALCULATING_ANNOTATIONS: (state, recalculatingAnnotations) => {\n state.recalculatingAnnotations = recalculatingAnnotations;\n },\n SET_MISSING_ANNOTATIONS: (state, missingAnnotations) => {\n state.missingAnnotations = missingAnnotations;\n },\n ADD_MISSING_ANNOTATIONS: (state, annotations) => {\n if (annotations && annotations.length > 0) {\n annotations.map((annotation) => {\n // check if already in missingAnnotations\n const found = state.missingAnnotations.find(\n (missingAnnotation) => missingAnnotation.id === annotation.id\n );\n\n if (found) {\n const indexOfAnnotation = state.missingAnnotations.findIndex(\n (missingAnnotation) => missingAnnotation.id === annotation.id\n );\n\n if (indexOfAnnotation > -1) {\n state.missingAnnotations.splice(indexOfAnnotation, 1, annotation);\n }\n } else {\n state.missingAnnotations.push(annotation);\n }\n });\n } else {\n state.missingAnnotations.push(annotations);\n }\n },\n DELETE_MISSING_ANNOTATION: (state, id) => {\n const indexOfAnnotationToDelete = state.missingAnnotations.findIndex(\n (annotation) => annotation.id === id\n );\n\n if (indexOfAnnotationToDelete > -1) {\n state.missingAnnotations.splice(indexOfAnnotationToDelete, 1);\n }\n },\n SET_SHOW_ACTION_ERROR: (state, value) => {\n state.showActionError = value;\n },\n SET_ERROR_MESSAGE: (state, message) => {\n state.errorMessage = message;\n },\n SET_DOCUMENT_ERROR: (state, value) => {\n state.showDocumentError = value;\n },\n SET_ANNOTATIONS_MARKED_AS_MISSING: (state, annotations) => {\n state.annotationsMarkedAsMissing = annotations;\n },\n SET_ERROR_MESSAGE_WIDTH: (state, width) => {\n state.errorMessageWidth = width;\n },\n SET_PUBLIC_VIEW: (state, value) => {\n state.publicView = value;\n },\n SET_DOCUMENT_IS_READY: (state, value) => {\n state.documentIsReady = value;\n },\n SET_DOCUMENT_HAS_ERROR: (state, value) => {\n state.documentHasError = value;\n },\n SET_HOVERED_ANNOTATION_SET: (state, hoveredAnnotationSet) => {\n state.hoveredAnnotationSet = hoveredAnnotationSet;\n },\n SET_NEW_ACCEPTED_ANNOTATIONS: (state, annotations) => {\n state.newAcceptedAnnotations = annotations;\n },\n SET_SERVER_ERROR: (state, value) => {\n state.serverError = value;\n },\n UPDATE_FILE_NAME: (state, value) => {\n state.selectedDocument.data_file_name = value;\n },\n SET_SPLITTING_SUGGESTIONS: (state, array) => {\n state.splittingSuggestions = array;\n },\n SET_ANNOTATION_SEARCH: (state, search) => {\n state.annotationSearch = search;\n setURLQueryParam(\"search\", search);\n },\n SET_SHOW_MISSING_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showEmpty = show;\n },\n SET_SHOW_ACCEPTED_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showAccepted = show;\n },\n SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showFeedbackNeeded = show;\n },\n REMOVE_PAGE: (state, pageNumber) => {\n state.pages = state.pages.filter((p) => p.number !== pageNumber);\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\n\nconst HTTP = myImports.HTTP;\n\nconst state = {\n documentsAvailableToReview: [], // filtered by user\n categories: null,\n};\n\nconst getters = {\n /**\n * Get the category name for a given category ID\n */\n categoryName: (state) => (categoryId) => {\n if (categoryId && state.categories) {\n const category = state.categories.find(\n (tempCategory) => tempCategory.id == categoryId\n );\n if (category) {\n return category.name;\n }\n }\n return \"\";\n },\n\n categoryConfidence: () => (confidence) => {\n if (!confidence) {\n if (confidence === 0) return confidence.toFixed(2);\n\n return;\n }\n\n return (confidence * 100).toFixed(2);\n },\n\n /**\n * Get the category for a given category ID\n */\n category: (state) => (categoryId) => {\n if (categoryId && state.categories) {\n const category = state.categories.find(\n (tempCategory) => tempCategory.id == categoryId\n );\n if (category) {\n return category;\n }\n }\n return null;\n },\n\n projectHasSingleCategory: (state) => {\n return state.categories && state.categories.length === 1;\n },\n};\n\nconst actions = {\n setDocumentsAvailableToReview: ({ commit }, documentsAvailableToReview) => {\n commit(\"SET_AVAILABLE_DOCUMENTS\", documentsAvailableToReview);\n },\n setCategories: ({ commit }, categories) => {\n commit(\"SET_CATEGORIES\", categories);\n },\n\n createAvailableDocumentsList: (\n { commit, state, dispatch, rootState, rootGetters },\n { categoryId, user, poll }\n ) => {\n if (!state.createAvailableListOfDocuments) return;\n\n const parameters = `category=${categoryId}`;\n\n const sleep = (duration) =>\n new Promise((resolve) => setTimeout(resolve, duration));\n\n // Poll document data until the status_data is 2\n // and labeling is available (done)\n let count = 0;\n const pollUntilLabelingAvailable = (duration) => {\n let errors = 0;\n count += 1;\n\n return dispatch(\n \"project/fetchDocumentListWithParameters\",\n parameters\n ).then((documents) => {\n for (let i = 0; i < documents.length; i++) {\n const found = state.documentsAvailableToReview.find(\n (doc) => doc.id === documents[i].id\n );\n\n if (found) {\n // If the document is already in the available docs array\n // we go to the next item\n continue;\n } else if (\n rootGetters[\"document/isDocumentReadyToBeReviewed\"](documents)\n ) {\n // add available doc to the end of the array\n commit(\"ADD_AVAILABLE_DOCUMENT\", documents);\n } else if (\n rootGetters[\"document/documentHadErrorDuringExtraction\"](documents)\n ) {\n dispatch(\"document/setDocumentError\", null, { root: true });\n // If error, add 1\n // Then go to next item\n errors += 1;\n continue;\n } else {\n // Some other situation, such as labeling not yet available\n // go to next item\n // TODO: we should only poll the documents that are not yet available\n continue;\n }\n }\n // After looping, check if length of both arrays is different\n // And if the difference is due to errors or to docs not ready\n if (\n poll &&\n documents.length !== state.documentsAvailableToReview.length &&\n state.documentsAvailableToReview.length + errors !== documents.length\n ) {\n if (count >= 10) return true;\n\n // We poll the endpoint again\n return sleep(duration).then(() => {\n pollUntilLabelingAvailable(duration);\n });\n } else {\n return true;\n }\n });\n };\n\n // Poll as long as the lengths are different\n if (\n documents.length === 0 ||\n documents.length !== state.documentsAvailableToReview.length\n ) {\n let duration;\n if (count <= 5) {\n duration = 5000;\n } else if (count > 10) {\n duration = 20000;\n } else {\n duration = 10000;\n }\n pollUntilLabelingAvailable(duration);\n } else {\n return;\n }\n },\n\n fetchCategories: ({ commit }, projectId) => {\n return myImports\n .makeGetPaginatedRequest(`categories/?project=${projectId}`, true)\n .then(async (results) => {\n if (results) {\n commit(\"SET_CATEGORIES\", results);\n }\n })\n .catch((error) => {\n console.log(error, \"Could not fetch categories from the backend\");\n });\n },\n};\n\nconst mutations = {\n SET_AVAILABLE_DOCUMENTS: (state, documentsAvailableToReview) => {\n state.documentsAvailableToReview = documentsAvailableToReview;\n },\n ADD_AVAILABLE_DOCUMENT: (state, availableDocument) => {\n const docAlreadyExists = state.documentsAvailableToReview.find(\n (document) => document.id === availableDocument.id\n );\n if (!docAlreadyExists) {\n state.documentsAvailableToReview.push(availableDocument);\n }\n },\n SET_CATEGORIES: (state, categories) => {\n state.categories = categories;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n getters,\n};\n","import myImports from \"../api\";\nconst HTTP = myImports.HTTP;\n\nconst state = {\n projectId: null,\n labelSets: null,\n currentUser: null,\n documentsListPath: null,\n showAnnotationTranslations: false,\n};\n\nconst actions = {\n setProjectId: ({ commit }, projectId) => {\n commit(\"SET_PROJECT_ID\", projectId);\n },\n // Get label details\n fetchLabelSetDetails: ({ commit, state }, labelSetId) => {\n return new Promise((resolve, reject) => {\n HTTP.get(`label-sets/${labelSetId}/`)\n .then((response) => {\n return resolve(response.data);\n })\n .catch((error) => {\n reject(error);\n console.log(error);\n });\n });\n },\n\n // Get label sets from the project\n fetchLabelSets: ({ commit, state }) => {\n return myImports\n .makeGetPaginatedRequest(`label-sets/?project=${state.projectId}`, true)\n .then((results) => {\n commit(\"SET_LABEL_SETS\", results);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n fetchCurrentUser: ({ commit }) => {\n return HTTP.get(`/auth/me/`)\n .then((response) => {\n commit(\"SET_CURRENT_USER\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n setCurrentUser: ({ commit }, currentUser) => {\n commit(\"SET_CURRENT_USER\", currentUser);\n },\n\n setDocumentsListPath: ({ commit }, path) => {\n commit(\"SET_DOCUMENTS_LIST_PATH\", path);\n },\n\n setShowAnnotationTranslations: ({ commit }, show) => {\n commit(\"SET_SHOW_ANNOTATION_TRANSLATIONS\", show);\n },\n\n fetchDocumentListWithParameters: ({ commit, state }, parameters) => {\n return new Promise((resolve, reject) => {\n myImports\n .makeGetPaginatedRequest(\n `documents/?project=${state.projectId}&${parameters}`,\n true\n )\n .then((results) => {\n resolve(results);\n })\n .catch((error) => {\n reject();\n console.log(error, \"Could not fetch document list from the backend\");\n });\n });\n },\n fetchDocumentListForNavigation: ({ commit, state }) => {\n return new Promise((resolve, reject) => {\n myImports\n .makeGetPaginatedRequest(\n `documents/?project=${state.projectId}&is_reviewed=false&fields=id`,\n true\n )\n .then((results) => {\n resolve(results);\n })\n .catch((error) => {\n reject();\n console.log(error, \"Could not fetch document list from the backend\");\n });\n });\n },\n};\n\nconst mutations = {\n SET_PROJECT_ID: (state, projectId) => {\n state.projectId = projectId;\n },\n SET_CURRENT_USER: (state, currentUser) => {\n state.currentUser = currentUser;\n },\n SET_LABEL_SETS: (state, labelSets) => {\n state.labelSets = labelSets;\n },\n SET_DOCUMENTS_LIST_PATH: (state, path) => {\n state.documentsListPath = path;\n },\n SET_SHOW_ANNOTATION_TRANSLATIONS: (state, show) => {\n state.showAnnotationTranslations = show;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\n\nconst HTTP = myImports.HTTP;\n\nconst selectionPadding = 1;\n\nconst state = {\n selection: {\n pageNumber: null,\n start: null,\n end: null,\n },\n isSelecting: false,\n spanSelection: [],\n placeholderSelection: [],\n selectedEntities: [],\n spanLoading: false,\n};\n\nconst getters = {\n isSelectionValid: (state) => {\n /**\n * `endSelection` will reset everything in case of invalid selection.\n * Check the existence of `selection.end` before requesting the\n * content from the backend.\n * */\n return state.selection && state.selection.end != null;\n },\n\n getSelectionForPage: (state) => (pageNumber) => {\n if (state.selection.pageNumber === pageNumber) {\n return state.selection;\n }\n return null;\n },\n\n /**\n * Get entities inside a box\n */\n entitiesOnSelection: (state) => (box, page) => {\n return page.entities.filter(\n (entity) =>\n box.x0 <= entity.x0 &&\n box.x1 >= entity.x1 &&\n box.y0 <= entity.y0 &&\n box.y1 >= entity.y1\n );\n },\n spanSelectionsForPage: (state) => (page) => {\n return state.spanSelection.filter(\n (span) => page.number === span.page_index + 1\n );\n },\n placeholderSelectionForPage: (state) => (page) => {\n return state.placeholderSelection.filter(\n (span) => page.number === span.page_index + 1\n );\n },\n};\n\nconst actions = {\n disableSelection: ({ commit }) => {\n commit(\"RESET_SELECTION\");\n commit(\"SET_SELECTED_ENTITIES\", []);\n commit(\"SET_SPAN_SELECTION\", []);\n commit(\"SET_PLACEHOLDER_SELECTION\", []);\n },\n\n startSelection: ({ commit }, { pageNumber, start }) => {\n commit(\"START_SELECTION\", {\n pageNumber,\n start,\n });\n },\n\n moveSelection: ({ commit, state, dispatch }, points) => {\n // only apply when we have a large enough selection, otherwise we risk counting misclicks\n if (state.selection && state.selection.start) {\n const xDiff = Math.abs(state.selection.start.x - points.end.x);\n const yDiff = Math.abs(state.selection.start.y - points.end.y);\n if (xDiff > 5 && yDiff > 5) {\n commit(\"MOVE_SELECTION\", points);\n }\n }\n },\n\n endSelection: ({ commit, state }, end) => {\n let xDiff;\n let yDiff;\n\n if (end) {\n xDiff = Math.abs(state.selection.start.x - end.x);\n yDiff = Math.abs(state.selection.start.y - end.y);\n }\n\n // if \"end\" is not provided, start and end points are the same, or if we have a selection smaller than 5x5,\n // just reset\n if (\n !end ||\n (yDiff <= 5 && xDiff <= 5) ||\n (state.selection.start.x === end.x && state.selection.start.y == end.y)\n ) {\n commit(\"RESET_SELECTION\");\n } else {\n state.selection.start.x = state.selection.start.x - selectionPadding;\n state.selection.start.y = state.selection.start.y - selectionPadding;\n\n end.x = end.x + selectionPadding;\n end.y = end.y + selectionPadding;\n\n commit(\"END_SELECTION\", end);\n }\n },\n\n setSelectedEntities: ({ commit }, entities) => {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n },\n\n getTextFromBboxes: ({ commit, rootState }, span) => {\n commit(\"SET_SPAN_LOADING\", true);\n return new Promise((resolve, reject) => {\n HTTP.post(`documents/${rootState.document.documentId}/bbox/`, {\n span,\n })\n .then((response) => {\n if (response.data.span.length && response.data.span.length > 0) {\n /**\n * If we have a non-empty bboxes list, we assume there\n * is text here on the backend, so we just set\n * spanSelection to the response.\n */\n resolve(response.data.span);\n } else {\n /**\n * Otherwise, we assume the backend can't identify text\n * on this area, so we set our bbox into spanSelection\n * ready to be passed back to the backend when creating\n * an annotation on this empty area, adding the offset_string\n * attribute, ready to be filled.\n */\n resolve(span);\n }\n })\n .catch((error) => {\n alert(\"Could not fetch the selected text from the backend\");\n reject(error);\n })\n .finally(() => {\n commit(\"SET_SPAN_LOADING\", false);\n });\n });\n },\n\n entitySelection: ({ commit, dispatch, state }, { entities, selection }) => {\n if (entities.length === 0) {\n if (selection) {\n dispatch(\"getTextFromBboxes\", [selection]).then((spans) => {\n commit(\"SET_SPAN_SELECTION\", spans);\n });\n } else {\n commit(\"RESET_SELECTION\");\n commit(\"SET_SPAN_SELECTION\", []);\n }\n commit(\"SET_SELECTED_ENTITIES\", []);\n } else {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n\n dispatch(\"document/setAnnotationId\", null, {\n root: true,\n });\n let span;\n if (entities) {\n span = entities.flatMap((s) => {\n return s.original;\n });\n } else {\n span = [entities];\n }\n commit(\"SET_SPAN_SELECTION\", span);\n dispatch(\"getTextFromBboxes\", span).then((spans) => {\n commit(\"SET_SPAN_SELECTION\", spans);\n });\n }\n },\n\n entityClick: ({ commit, dispatch, state }, entity) => {\n // Check if we are creating a new Annotation\n // or if we are removing a previously selected entity\n // or editing empty one\n const found = state.selectedEntities.find(\n (entityToFind) =>\n entity.scaled.width === entityToFind.scaled.width &&\n entity.original.offset_string === entityToFind.original.offset_string\n );\n\n let entities = state.selectedEntities;\n if (found) {\n entities = [\n ...state.selectedEntities.filter(\n (entityToFilter) =>\n entityToFilter.scaled.width !== entity.scaled.width &&\n entityToFilter.original.offset_string !==\n entity.original.offset_string\n ),\n ];\n } else {\n entities.push(entity);\n }\n\n if (entities.length === 0) {\n commit(\"SET_SELECTED_ENTITIES\", []);\n commit(\"SET_SPAN_SELECTION\", []);\n } else {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n\n dispatch(\"document/setAnnotationId\", null, {\n root: true,\n });\n\n let span;\n\n if (entities) {\n span = entities.flatMap((s) => {\n return s.original;\n });\n } else {\n span = [entities];\n }\n commit(\"SET_SPAN_SELECTION\", span);\n }\n },\n\n setSpanSelection: ({ commit }, span) => {\n commit(\"SET_SPAN_SELECTION\", span);\n },\n setPlaceholderSelection: ({ commit }, span) => {\n commit(\"SET_PLACEHOLDER_SELECTION\", span);\n },\n};\n\nconst mutations = {\n START_SELECTION: (state, { pageNumber, start }) => {\n state.selection.end = null;\n state.selection.pageNumber = pageNumber;\n state.selection.start = start;\n state.isSelecting = true;\n },\n MOVE_SELECTION: (state, points) => {\n const { start, end } = points;\n if (start) {\n state.selection.start = start;\n }\n if (end) {\n state.selection.end = end;\n }\n },\n END_SELECTION: (state, end) => {\n state.selection.end = end;\n state.isSelecting = false;\n },\n RESET_SELECTION: (state) => {\n state.selection.pageNumber = null;\n state.selection.start = null;\n state.selection.end = null;\n },\n SET_SPAN_SELECTION: (state, span) => {\n if (!span) {\n state.spanSelection = [];\n } else {\n state.spanSelection = span;\n }\n },\n ADD_SPAN_SELECTION: (state, span) => {\n state.spanSelection.push(span);\n },\n SET_PLACEHOLDER_SELECTION: (state, span) => {\n if (!span) {\n state.placeholderSelection = [];\n } else {\n state.placeholderSelection = span;\n }\n },\n ADD_PLACEHOLDER_SELECTION: (state, span) => {\n state.placeholderSelection.push(span);\n },\n SET_SELECTED_ENTITIES: (state, entities) => {\n if (!entities) {\n state.selectedEntities = [];\n } else {\n state.selectedEntities = entities;\n }\n },\n SET_SPAN_LOADING: (state, loading) => {\n state.spanLoading = loading;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\nimport {\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n} from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\n\nconst state = {\n editMode: false,\n renameAndCategorize: false,\n isMultipleSelection: true,\n pagesForPostprocess: [],\n selectedPages: [],\n updatedDocument: [],\n showEditConfirmationModal: false,\n submitEditChanges: false,\n redirectingUser: false,\n};\n\nconst getters = {\n isEditModeAvailable: (state, getters, rootState, rootGetters) => {\n return (\n !rootState.document.publicView &&\n !rootGetters[\"document/isDocumentReviewed\"] &&\n !state.editMode\n );\n },\n isPageSelected: (state) => (id) => {\n return state.selectedPages.find((page) => page.id === id);\n },\n\n documentShouldBePostprocessed: (state, _, rootState) => {\n const foundRotatedPage = state.pagesForPostprocess.find(\n (page) => page.angle !== 0\n );\n\n let foundReorderedPage = false;\n\n state.pagesForPostprocess.map((page, index) => {\n if (\n (page.id === rootState.document.selectedDocument.pages[index].id &&\n page.number !==\n rootState.document.selectedDocument.pages[index].number) ||\n (page.id !== rootState.document.selectedDocument.pages[index].id &&\n page.number ===\n rootState.document.selectedDocument.pages[index].number)\n ) {\n foundReorderedPage = true;\n }\n });\n\n return (\n state.updatedDocument.length > 1 || foundRotatedPage || foundReorderedPage\n );\n },\n};\n\nconst actions = {\n enableEditMode: ({ commit }) => {\n commit(\"SET_EDIT_MODE\", true);\n },\n\n disableEditMode: ({ commit }) => {\n commit(\"SET_EDIT_MODE\", false);\n commit(\"SET_RENAME_AND_CATEGORIZE\", false);\n },\n\n setRenameAndCategorize: ({ commit }, value) => {\n commit(\"SET_RENAME_AND_CATEGORIZE\", value);\n },\n\n setPagesForPostprocess: ({ commit }, pages) => {\n commit(\"SET_PAGES_FOR_POSTPROCESS\", pages);\n },\n\n setUpdatedDocument: ({ commit }, updatedDocument) => {\n commit(\"SET_UPDATED_DOCUMENT\", updatedDocument);\n },\n\n setSubmitEditChanges: ({ commit }, value) => {\n commit(\"SET_SUBMIT_EDIT_CHANGES\", value);\n },\n\n selectPage: ({ state, commit }, page) => {\n if (state.isMultipleSelection) {\n commit(\"ADD_SELECTED_PAGE\", page);\n } else {\n commit(\"SET_SELECTED_PAGES\", []);\n commit(\"ADD_SELECTED_PAGE\", page);\n }\n },\n\n unselectPage: ({ state, commit }, selectedPage) => {\n const found = state.selectedPages.find(\n (page) => page.id === selectedPage.id\n );\n if (found) {\n const filtered = state.selectedPages.filter(\n (page) => page.id !== selectedPage.id\n );\n commit(\"SET_SELECTED_PAGES\", filtered);\n }\n },\n\n setSelectedPages: ({ state, commit }, selectedPage) => {\n if (!selectedPage) {\n commit(\"SET_SELECTED_PAGES\", []);\n return;\n }\n\n const found = state.selectedPages.find(\n (page) => page.id === selectedPage.id\n );\n\n if (found) {\n const filtered = state.selectedPages.filter(\n (page) => page.id !== selectedPage.id\n );\n commit(\"SET_SELECTED_PAGES\", filtered);\n } else if (state.isMultipleSelection) {\n commit(\"ADD_SELECTED_PAGE\", selectedPage);\n } else {\n commit(\"SET_SELECTED_PAGES\", []);\n commit(\"ADD_SELECTED_PAGE\", selectedPage);\n }\n },\n\n rotatePage: ({ state, commit }, { page, direction }) => {\n if (state.pagesForPostprocess.find((p) => p.id === page.id)) {\n const pagesForPostprocess = state.pagesForPostprocess.map((p) => {\n let rotatedAngle;\n if (direction === \"left\") {\n rotatedAngle = p.angle - 90;\n if (p.id === page.id) {\n if (rotatedAngle === -270) {\n rotatedAngle = 90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n }\n return p;\n }\n if (direction === \"right\") {\n rotatedAngle = p.angle + 90;\n if (p.id === page.id) {\n if (rotatedAngle === 270) {\n rotatedAngle = -90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n }\n return p;\n }\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", pagesForPostprocess);\n } else {\n if (direction === \"left\") {\n state.pagesForPostprocess.push({\n id: page.id,\n number: page.number,\n angle: -90,\n thumbnail_url: page.thumbnail_url,\n updated_at: page.updated_at,\n });\n }\n\n if (direction === \"right\") {\n state.pagesForPostprocess.push({\n id: page.id,\n number: page.number,\n angle: 90,\n thumbnail_url: page.thumbnail_url,\n updated_at: page.updated_at,\n });\n }\n }\n },\n\n updateRotationToTheLeft: ({ state, commit }) => {\n // updated the angles that will be sent to the backend\n const array = state.pagesForPostprocess.map((p) => {\n let rotatedAngle = p.angle - 90;\n if (rotatedAngle === -270) {\n rotatedAngle = 90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", array);\n },\n\n updateRotationToTheRight: ({ state, commit }) => {\n // updated the angles that will be sent to the backend\n const array = state.pagesForPostprocess.map((p) => {\n let rotatedAngle = p.angle + 90;\n if (rotatedAngle === 270) {\n rotatedAngle = -90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", array);\n },\n\n editDocument: ({ rootState, commit, dispatch }, editedDocument) => {\n dispatch(\"document/startRecalculatingAnnotations\", null, {\n root: true,\n });\n\n const oldId = rootState.document.documentId;\n\n return new Promise((resolve, reject) => {\n HTTP.post(\n `/documents/${rootState.document.documentId}/postprocess/`,\n editedDocument\n )\n .then(async (response) => {\n if (response && response.status === 200) {\n const newId = response.data[0].id;\n dispatch(\"document/setSplittingSuggestions\", null, { root: true });\n\n commit(\"SET_SUBMIT_EDIT_CHANGES\", false);\n\n if (newId != oldId) {\n if (getURLQueryParam(\"document\") || getURLPath(\"docs\")) {\n navigateToNewDocumentURL(oldId, newId);\n } else {\n await dispatch(\"document/setDocId\", newId, {\n root: true,\n });\n\n dispatch(\"document/pollDocumentEndpoint\", null, {\n root: true,\n });\n }\n } else {\n dispatch(\"document/setSelectedDocument\", response.data[0], {\n root: true,\n });\n\n dispatch(\"document/pollDocumentEndpoint\", null, {\n root: true,\n });\n }\n }\n resolve(response);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n setShowEditConfirmationModal: ({ commit }, value) => {\n commit(\"SET_SHOW_EDIT_CONFIRMATION_MODAL\", value);\n },\n\n setRedirectingUser: ({ commit }, value) => {\n commit(\"SET_REDIRECTING_USER\", value);\n },\n};\n\nconst mutations = {\n SET_EDIT_MODE: (state, option) => {\n state.editMode = option;\n },\n\n SET_RENAME_AND_CATEGORIZE: (state, value) => {\n state.renameAndCategorize = value;\n },\n\n SET_PAGES_FOR_POSTPROCESS: (state, pages) => {\n state.pagesForPostprocess = pages;\n },\n\n SET_UPDATED_DOCUMENT: (state, updatedDocument) => {\n state.updatedDocument = updatedDocument;\n },\n SET_SELECTED_PAGES: (state, selectedPages) => {\n state.selectedPages = selectedPages;\n },\n ADD_SELECTED_PAGE: (state, selectedPage) => {\n state.selectedPages.push(selectedPage);\n },\n SET_SHOW_EDIT_CONFIRMATION_MODAL: (state, value) => {\n state.showEditConfirmationModal = value;\n },\n SET_SUBMIT_EDIT_CHANGES: (state, value) => {\n state.submitEditChanges = value;\n },\n SET_REDIRECTING_USER: (state, value) => {\n state.redirectingUser = value;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n getters,\n};\n","import { createStore } from \"vuex\";\n\nimport display from \"./display\";\nimport document from \"./document\";\nimport category from \"./category\";\nimport project from \"./project\";\nimport selection from \"./selection\";\nimport edit from \"./edit\";\n\nexport const store = createStore({\n modules: {\n display,\n document,\n category,\n project,\n selection,\n edit,\n },\n});\n","// internal icons\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faArrowUp,\n faAngleRight,\n faAngleLeft,\n faAngleUp,\n faAngleDown,\n faSpinner,\n faPlus,\n faXmark,\n faMagnifyingGlassMinus,\n faBan,\n faCircleCheck,\n faEllipsisVertical,\n faCircleInfo,\n faArrowRotateLeft,\n faArrowRotateRight,\n faScissors,\n faRepeat,\n faArrowLeft,\n faArrowRight,\n faDownload,\n faSearch,\n faTrashArrowUp,\n faFloppyDisk,\n faCircleExclamation,\n faLink,\n faSquareCheck,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon as Icons } from \"@fortawesome/vue-fontawesome\";\n\nlibrary.add(\n faArrowUp,\n faAngleRight,\n faAngleLeft,\n faAngleUp,\n faAngleDown,\n faSpinner,\n faXmark,\n faMagnifyingGlassMinus,\n faBan,\n faCircleCheck,\n faSpinner,\n faPlus,\n faEllipsisVertical,\n faCircleInfo,\n faArrowRotateLeft,\n faArrowRotateRight,\n faScissors,\n faRepeat,\n faArrowLeft,\n faArrowRight,\n faDownload,\n faSearch,\n faTrashArrowUp,\n faFloppyDisk,\n faCircleExclamation,\n faLink,\n faSquareCheck\n);\n\nexport default Icons;\n","import App from \"./components/App\";\nimport { createApp } from \"vue\";\nimport Buefy from \"buefy\";\nimport VueKonva from \"vue-konva\";\nimport { i18n } from \"./i18n\";\nimport { store } from \"./store\";\nimport VueObserveVisibility from \"vue3-observe-visibility\";\nimport Icons from \"./icons\";\n\nconst app = createApp();\n\napp.component(\"App\", App);\napp.component(\"VueFontawesome\", Icons);\napp.use(VueKonva);\napp.use(Buefy, {\n defaultIconPack: \"fas\",\n defaultIconComponent: \"vue-fontawesome\",\n});\napp.use(VueObserveVisibility);\napp.use(store);\napp.use(i18n);\n\n/**\n * Main entrypoint for the App\n */\napp.mount(\"#app\");\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_konfuzio_document_validation_ui\"] = self[\"webpackChunk_konfuzio_document_validation_ui\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], () => (__webpack_require__(6051)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","class","pageError","error","renameAndCategorize","editMode","ref","size","showChooseLabelSetModal","show","isMultipleAnnotations","finish","name","showActionError","style","errorMessageWidth","showDocumentError","optimalResolution","isMinimumWidth","$t","selectedDocument","pages","length","loading","publicView","recalculatingAnnotations","showBranding","documentSet","isDocumentReviewed","categories","categoryName","numberOfDocumentInSet","xmlns","width","height","viewBox","fill","d","script","__exports__","thumbnail_url","downloaded_at","rounded","label","fullText","multilined","active","isFileNameBiggerThanMaxSize","isEditable","position","contenteditable","handleInput","handlePaste","handleSave","textContent","detailsUrl","loaded","visibilityChanged","initKeycloak","async","url","realm","clientId","authenticated","init","onLoad","enableLogging","setIsKeycloakAuth","setAuthToken","token","console","updateKeycloakToken","Promise","reject","updateToken","HTTP","FILE_REQUEST","authToken","appLocale","isKeycloakAuth","DEFAULT_URL","FILE_URL","VUE_APP_IMAGE_URL","axios","defaults","xsrfCookieName","xsrfHeaderName","create","baseURL","VUE_APP_API_URL","responseType","result","setApiUrl","setFileUrl","setLocale","locale","getInterceptorConfig","config","headers","interceptors","request","use","makeFileRequest","fileUrl","get","then","response","data","myBlob","catch","status","setTimeout","makeGetPaginatedRequest","hasParams","returnResponse","toFinishLoop","separator","loopRequest","results","next","log","props","imageUrl","required","type","String","default","isVisible","watch","this","loadImage","methods","api","$refs","imgTag","src","URL","createObjectURL","shortFilenameIfNeeded","changed","filename","event","disabled","waitingForSplittingConfirmation","closeEditMode","enableSubmit","handleButton","isReviewButtonActive","content","handleFinishReview","isLoading","closable","icon","emptyLabels","computed","isDocumentReadyToFinishReview","documentHasCategory","category","updatedDocument","newValue","submitValidation","mounted","document","found","find","item","$store","dispatch","$nextTick","category_is_revised","documentShouldBePostprocessed","updatedDocumentReviewStatus","is_reviewed","serverErrorMessage","defaultErrorMessage","finally","components","KeyboardIcon","ArrowUpKey","ArrowDownKey","categorizeModalIsActive","currentPage","isSelecting","spanSelectionsForPage","showAnnSetTable","scale","scaledEntities","isAnnotationInEditMode","annotation","placeholderSelectionForPage","PIXEL_RATIO","window","devicePixelRatio","VIEWPORT_RATIO","MINIMUM_APP_WIDTH","MINIMUM_OPTIMIZED_APP_WIDTH","TEXT_BREAKPOINT_WIDTH","isSelectionValid","onChange","transformerConfig","page","editable","Boolean","x","selection","start","y","end","stroke","strokeWidth","globalCompositeOperation","shadowForStrokeEnabled","draggable","borderEnabled","rotateEnabled","ignoreStroke","keepRatio","anchorStroke","anchorSize","updateTransformer","handleSelection","custom","box","clientToBbox","entities","entitiesOnSelection","transformer","boxTransformer","transformerNode","getNode","stage","getStage","selectedNode","findOne","node","nodes","getLayer","batchDraw","scaleX","scaleY","skewX","target","attrs","realWidth","realHeight","moveSelection","boxSelection","skewY","rotation","Number","span","primaryColor","getComputedStyle","body","getPropertyValue","perfectDrawEnabled","setSelection","bboxToRect","startSelection","points","xDiff","Math","abs","yDiff","endSelection","selectionPadding","spanTransformer","spanSelection","placeholderConfig","editAnnotation","spanLoading","textFromEntities","selectedSet","scrollable","trigger","numberOfAnnotationSetGroup","numberOfLabelSetGroup","openAnnotationSetCreation","setsList","set","index","key","label_set","value","labels","selectedLabel","close","save","spans","Array","containerWidth","containerHeight","heightOfPopup","margin","widthOfPopup","isAnnSetModalShowing","top","normalizedSpan","left","text","forEach","offset_string","trim","oldValue","labelsFilteredForAnnotationCreation","orderedSetList","annotationSets","annotationSet","addEventListener","clickOutside","unmounted","removeEventListener","sort","a","b","nameA","nameB","$emit","labelSet","pageNumber","getElementById","click","selection_bbox","annotationToCreate","documentId","is_correct","revised","annotation_set","chooseLabelSet","existsIndex","findIndex","newSet","unshift","coordinates","labelSetName","handleDelete","SettingsIcon","xFinal","yFinal","paddingTop","annotations","bboxToPoint","x0","y0","annotationsToDelete","annotationsInAnnotationsSets","i","annotationToDelete","annotationId","documentAnnotationSelected","getParent","includes","image","canvasStyle","scaledViewport","actualSizeViewport","actualSizeWidth","actualSizeHeight","pixelWidth","pixelHeight","dim","ceil","searchEnabled","pagesForPostprocess","number","clientHeight","scrollTop","onPageJump","inserted","el","binding","callback","modifiers","immediate","throttledScroll","throttle","limit","waiting","apply","arguments","loadedPage","DocumentPage","DummyPage","elementTop","elementHeight","previousFocusedAnnotation","previousY","pageBeingLoaded","isScrolling","p","pageInVisibleRange","loadPage","isElementFocused","bottom","halfHeight","halfScreen","delta","threshold","scrollBottom","currentSearchResultForPage","getters","spanForAnnotationSelected","annotationById","page_index","scrollDocumentToPosition","scrollDocumentToAnnotation","isToScroll","focused","pageChangedFromThumbnail","res","getYForBbox","totalY","scrollTo","updateElementBounds","visiblePageRange","getXForBbox","offsetTop","offsetHeight","$el","bbox","tooltipInfo","editModeDisabled","isEditModeAvailable","handleEdit","toggleSearch","handleDownloadFile","fitAuto","isZoomInExceeding","zoomIn","isZoomOutExceeding","zoomOut","currentPercentage","FitZoomIcon","PlusIcon","MinusIcon","EditDocIcon","fitWidthScale","maxPercentage","defaultPercentage","fitPercentage","toolbarModalOpen","documentCannotBeEdited","newScale","round","updated","cancelAnnotationEditMode","updateScale","fileType","fileName","data_file_name","file_url","link","createElement","href","setAttribute","revokeObjectURL","placeholder","focusSearchResult","search","searchLoading","searchResults","currentCounter","searchBelowMinimum","closeSearch","minSearchLength","currentSearchResult","currentSearch","enabled","searchInput","focus","n","ScrollingPage","Toolbar","SearchBar","directives","scroll","scrollTimeout","showToolbar","scrollingDocument","handleScroll","updateScrollBounds","scrollLeft","scrollY","scrollX","offsetLeft","clearTimeout","changePage","ServerImage","LoadingThumbnail","thumbnailClicked","previousScrollPosition","newPage","scrollToThumbnail","docPage","children","scrollIntoView","behavior","cleanSelection","getAnnotationsFiltered","numberOfLoadingAnnotations","isSearchingAnnotationList","notCorrectAnnotations","isSearch","EmptyStateImg","redirectingUser","mouseenterAnnotationSet","mouseleaveAnnotationSet","numberOfEmptyLabelsInAnnotationSet","markAllAsMissing","isPlaceholder","numberOfNotCorrectAnnotationsInAnnotationSet","acceptAllPending","stopPropagation","annotationsToShow","annotationIsNotFound","onAnnotationClick","hoveredAnnotation","currentAnnotationId","labelContainerWidth","min","max","val","labelWidth","onAnnotationHoverEnter","defaultSpan","onAnnotationHoverLeave","description","selectAnnotation","showAnnotationTranslations","translated_string","annotationWidth","animated","confidence","floor","created","edited","notExtracted","accepted","getText","animate","CheckMark","QuestionMark","AcceptedCheckMark","AcceptedUser","NotFoundIcon","newAnnotation","oldAnnotation","changePositionOfTooltip","getUser","annDetails","getElementsByClassName","lastElementsInList","updateClass","array","classList","remove","add","sleep","duration","getURLQueryParam","param","queryString","location","urlParams","URLSearchParams","has","getURLPath","path","pathname","split","getURLValueFromHash","hash","replace","setURLQueryParam","query","deleteParam","searchParams","delete","history","pushState","toString","setURLAnnotationHash","title","navigateToNewDocumentURL","oldId","newId","newUrl","navigateToDocumentsList","projectId","lastCharOfString","charAt","slash","parameters","newPath","isElementArray","element","isArray","debounce","cb","timer","args","emptyAnnotationId","isAnnotationBeingEdited","saveEmptyAnnotationChanges","handleEditEmptyAnnotation","label_name","spanIndex","isMissingAnnotation","isFindingAnnotation","preventDefault","isLabelMultiFalseAndGroupOfAnns","showSave","delay","tooltipDelay","nextAnn","decline","showText","accept","markAsMissing","restore","cancel","showCancel","showMissing","showAccept","showDecline","showRestore","showLink","showSearch","innerWidth","showHoverButton","cancelBtn","saveBtn","resize","translation","AnnotationRow","labelHasPendingAnnotations","hoveredSet","ann","ellipsis","attached","tag","labelNameForAnnotationId","annotationFilters","showFeedbackNeeded","showEmpty","showAccepted","annotationSearch","labelOfAnnotation","numberOfLabelRows","circle","LoadingLabels","newAnnotationSet","labelSetsFilteredForAnnotationSetCreation","labelSetItem","submit","fileExtension","splittingLines","splitSuggestionsEnabled","handleSplittingLines","checkMove","handleDragEnd","rotatePage","handleRotationsToTheLeft","handleRotationsToTheRight","applySplittingSuggestions","saveEditChanges","buttonDisabled","rotateLeft","rotateRight","selectedPages","rotateAllLeft","rotateAllRight","documentHasProposedSplit","switchStatus","rotateButton","buttonText","showRotateButton","SidebarButtons","splittingSuggestions","handleBackButton","color","cursor","handlePageChange","getImageUrl","getFileName","handleChanges","splitMode","tooltipIsShown","dropdownIsDisabled","setCategoryDefaultText","setCategoryConfidence","listOfCategories","handleOptionInDropdownDisabled","handleChangeCategory","CategoryIcon","categoryError","missingCategory","projectHasSingleCategory","updatedValuesForDocuments","categoryConfidence","checkIfDropdownIsDisabled","setTooltipText","list","handleCategories","filtered","filter","project","documentHasCorrectAnnotations","updatedCategory","tooltipText","tooltipContent","innerHTML","DocumentCategory","EyeIcon","updatedFileName","updatedPages","splitPage","slice","join","updated_at","getRotation","pageId","angle","editPages","easing","move","dragging","tabindex","isHover","selectPage","checkboxValue","checkboxInput","isSelected","undefined","isPageSelected","parseInt","StarIcon","isModalActive","closeModal","confirmChanges","showEditConfirmationModal","EditSidebar","RenameAndCategorize","EditPages","SplitInfoBar","EditConfirmationModal","prevPageAtIndex","splitFileNameFromExtension","saveUpdatedDocuments","aiSplit","origin","submitEditChanges","setPages","createPagesForPostprocess","setSplittingArray","setAutomaticSplitting","image_url","direction","lastPage","splittingOrigin","push","at","removedPage","splice","clickedLines","newDocuments","createEachNewDocument","documents","newDocument","handleNewDocumentName","handleNewDocumentCategory","handleNewDocumentCategoriesAndConfidence","handleNewDocumentPages","newFileName","indexOfSplittingSuggestion","foundPage","singleSplittingSuggestion","indexOf","draggedContext","futureIndex","documentToProcess","redirection","documentsListPath","newCategory","newName","revisedCategory","assign","updatedValues","serverError","errorMessage","handleGetSupport","handleErrorClose","handleNotOptimizedModal","Illustration","handleContactSupport","transform","ErrorIcon","documentError","Splitpanes","Pane","DocumentTopBar","ScrollingDocument","DocumentThumbnails","DocumentAnnotations","DocumentEdit","ErrorMessage","NotOptimizedViewportModal","DocumentErrorModal","ChooseLabelSetModal","AnnotationDeletedModal","resizeObserver","unwatchSelectedDocument","documentContainerLeftPadding","documentContainerWidth","oldDocument","observe","onDocumentResize","fit","newFit","oldFit","ResizeObserver","unobserve","elementsWidth","editView","clientWidth","documentPages","getBoundingClientRect","offsetWidth","client","viewport","documentsAvailableToReview","showCategoryInfo","selectedCategory","requestTrialAccess","changeDocument","documentHadErrorDuringExtraction","documentsList","open","DocumentsList","DocumentDashboard","ErrorPage","user_token","full_mode","show_documents_navigation","show_missing_annotations","show_feedback_needed_annotations","show_accepted_annotations","sentry_dsn","sentry_env","api_url","documents_list_path","details_url","sso_url","sso_realm","sso_client_id","hide_empty_label_sets","annotation_content_width","remove_branding","VUE_APP_DOCUMENT","userToken","VUE_APP_USER_TOKEN","fullMode","VUE_APP_FULL_MODE","showDocumentsNavigation","VUE_APP_SHOW_DOCUMENTS_NAVIGATION","removeBranding","VUE_APP_REMOVE_BRANDING","showMissingAnnotations","VUE_APP_SHOW_MISSING_ANNOTATIONS","showAcceptedAnnotations","VUE_APP_SHOW_ACCEPTED_ANNOTATIONS","showFeedbackNeededAnnotations","VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS","isPublicView","ssoUrl","ssoRealm","ssoClientId","showDocumentsList","VUE_APP_SHOW_DOCUMENTS_LIST","VUE_APP_DOCUMENTS_LIST_PATH","VUE_APP_DETAILS_URL","VUE_APP_SSO_URL","VUE_APP_SSO_REALM","VUE_APP_SSO_CLIENT_ID","VUE_APP_ANNOTATION","annotationSetId","VUE_APP_ANNOTATION_SET","hideEmptyLabelSets","VUE_APP_HIDE_EMPTY_LABEL_SETS","annotationContentWidth","VUE_APP_ANNOTATION_CONTENT_WIDTH","Vue","dsn","VUE_APP_SENTRY_DSN","integrations","environment","VUE_APP_SENTRY_ENV","tracesSampleRate","logErrors","tracingOptions","trackComponents","$i18n","all","_","constructor","super","render","loadLocaleMessages","locales","messages","matched","match","i18n","VUE_APP_LOCALE","fallbackLocale","precision","multiplier","pow","state","interactionBlocked","pageWidthScale","viewportWidth","pageHeightScale","viewportHeight","rootState","rootGetters","pageCount","previousPage","nextPage","searchResultsForPage","r","currentResult","entity","original","scaled","imageScale","original_size","div","toNumber","point","hasOffset","pageHeight","newPoint","minus","times","x1","y1","rect","dp","ROUND_DOWN","ROUND_UP","actions","commit","autoScale","widthScale","updateFit","debounceUpdateCurrentPage","updateCurrentPage","updateOptimalResolution","tableSet","options","toggleAnnSetTable","setCategorizeModalIsActive","setPageChangedFromThumbnail","setDetailsUrl","setLabelWidth","setAnnotationWidth","debounceSearch","startSearchLoading","post","q","resetSearch","enableSearch","toEnable","setCurrentSearch","setPageError","setCurrentSearchResult","newSearchResult","searchResultsMaxIndex","mutations","SET_SCALE","SET_FIT","SET_OPTIMAL_RESOLUTION","isOptimal","SET_CURRENT_PAGE","SET_LABEL_WIDTH","SET_ANNOTATION_WIDTH","SET_SHOW_DOCUMENTS_NAVIGATION","SET_SHOW_BRANDING","SET_ANN_SET_TABLE","HIDE_EMPTY_LABEL_SETS","hide","TOGGLE_ANN_SET_TABLE","SET_CATEGORIZE_MODAL_IS_ACTIVE","SET_PAGE_CHANGED_FROM_THUMBNAIL","SET_SHOW_CHOOSE_LABEL_SET_MODAL","SET_SEARCH_RESULTS","SET_SEARCH_LOADING","TOGGLE_SEARCH","ENABLE_SEARCH","SET_CURRENT_SEARCH","SET_CURRENT_SEARCH_RESULT","SET_DETAILS_URL","SET_PAGE_ERROR","namespaced","documentPollDuration","table_reference_api","missingAnnotations","annotationsMarkedAsMissing","hoveredAnnotationSet","newAcceptedAnnotations","enableGroupingFeature","pageSelected","display","pageAtIndex","categorizationIsConfirmed","availableLabels","l","has_multiple_top_candidates","isAnnotationDeleted","labelHasAnnotations","annotationsByConfidence","annotationSetExists","annSet","annotationSetsInTable","annotationSetsList","addAnnotationSet","annotationSetsToShowInList","annotationsSets","annotationSetOfAnnotation","annotationIdToFind","foundAnnotationSet","annotationToFind","foundLabel","processedAnnotationSets","processedLabels","isSearching","addAnnotation","listToAdd","force","toLowerCase","labelHasSearchText","labelAnnotations","addLabel","labelHasSearch","added","created_by","localeCompare","processAnnotationSets","sortByConfidenceOrByAnnotationSelected","isNegative","numberOfAcceptedAnnotationsInLabel","orderedAnnotationSets","annotationSetTemp","documentSetTemp","returnLabelSets","has_multiple_annotation_sets","annotationsInLabelFiltered","labelToReturn","highestConfidenceAnnotation","pendingEmpty","foundMissing","isAnnotationInAnnotationSet","exists","j","notCorrect","emptyAnnotations","annotationsWithPendingReview","foundPendingAnnotations","isDocumentReadyToBeReviewed","status_data","labeling_available","dataset_status","proposed_split","offset_string_original","revised_by","isOnlyMultipleAnnotationSet","sameSets","annotationSetCanBeMultiple","annotationSetHasNoFilledLabels","flatMap","startLoading","root","endLoading","setDocId","setAnnotationId","setAnnotationSetId","setAnnotationSets","setEditAnnotation","resetEditAnnotation","setAnnotations","setLabels","setSelectedDocument","setPublicView","startRecalculatingAnnotations","endRecalculatingAnnotations","setMissingAnnotations","setErrorMessage","message","setDocumentError","setAnnotationsMarkedAsMissing","setErrorMessageWidth","setHoveredAnnotationSet","setNewAcceptedAnnotations","setSplittingSuggestions","setAnnotationSearch","fetchDocument","initialPage","fetchedDocument","annotation_sets","enable_translated_strings","document_set","detail","fetchDocumentPage","setDocumentSet","fetchDocumentSet","documentSetId","setDocumentAnnotationSelected","labelName","scrollToDocumentAnnotationSelected","disableDocumentAnnotationSelected","createAnnotation","documentData","updateAnnotation","patch","deleteAnnotation","updateDocument","JSON","parse","errorData","fetchMissingAnnotations","addMissingAnnotations","deleteMissingAnnotation","updateMultipleAnnotations","ids","fetchDocumentStatus","fetchDocumentData","pollDocumentEndpoint","ready","createErrorMessage","closeErrorMessage","contactSupport","params","currentUser","username","fullUrl","changeCurrentDocument","edit","unloadDocumentPage","putNextAnnotationInLabelFirst","setAnnotationAsFirstInLabel","labelToFind","newFirstAnn","cloneAnnotations","firstElement","shift","SET_LOADING","SET_DOC_ID","SET_DOC_SET","reverse","orderedDocumentSet","SET_ANNOTATION_ID","SET_ANNOTATION_SET_ID","ADD_ANNOTATION","existingAnnotation","UPDATE_ANNOTATION","indexOfAnnotationInAnnotations","updatedAnnotation","indexOfAnnotationAnnotationSets","labelToAdd","DELETE_ANNOTATION","indexOfAnnotationToDelete","deleted","indexOfAnnotationInLabelToDelete","SET_ANNOTATIONS","SET_ANNOTATION_SETS","DELETE_ANNOTATION_SET","indexOfSetToDelete","existingAnnotationSet","UPDATE_ANNOTATION_SET","indexOfExistingAnnotationSet","updatedSet","SET_LABELS","SET_ANNOTATIONS_IN_LABEL","SET_EDIT_ANNOTATION","RESET_EDIT_ANNOTATION","ADD_PAGE","existingPageIndex","SET_PAGES","SET_DOCUMENT_ANNOTATION_SELECTED","SET_DOCUMENT_ANNOTATION_SCROLL","SET_SELECTED_DOCUMENT","Date","now","SET_RECALCULATING_ANNOTATIONS","SET_MISSING_ANNOTATIONS","ADD_MISSING_ANNOTATIONS","missingAnnotation","indexOfAnnotation","DELETE_MISSING_ANNOTATION","SET_SHOW_ACTION_ERROR","SET_ERROR_MESSAGE","SET_DOCUMENT_ERROR","SET_ANNOTATIONS_MARKED_AS_MISSING","SET_ERROR_MESSAGE_WIDTH","SET_PUBLIC_VIEW","SET_DOCUMENT_IS_READY","documentIsReady","SET_DOCUMENT_HAS_ERROR","documentHasError","SET_HOVERED_ANNOTATION_SET","SET_NEW_ACCEPTED_ANNOTATIONS","SET_SERVER_ERROR","UPDATE_FILE_NAME","SET_SPLITTING_SUGGESTIONS","SET_ANNOTATION_SEARCH","SET_SHOW_MISSING_ANNOTATIONS","SET_SHOW_ACCEPTED_ANNOTATIONS","SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS","REMOVE_PAGE","categoryId","tempCategory","toFixed","setDocumentsAvailableToReview","setCategories","createAvailableDocumentsList","user","poll","createAvailableListOfDocuments","count","pollUntilLabelingAvailable","errors","doc","fetchCategories","SET_AVAILABLE_DOCUMENTS","ADD_AVAILABLE_DOCUMENT","availableDocument","docAlreadyExists","SET_CATEGORIES","labelSets","setProjectId","fetchLabelSetDetails","labelSetId","fetchLabelSets","fetchCurrentUser","setCurrentUser","setDocumentsListPath","setShowAnnotationTranslations","fetchDocumentListWithParameters","fetchDocumentListForNavigation","SET_PROJECT_ID","SET_CURRENT_USER","SET_LABEL_SETS","SET_DOCUMENTS_LIST_PATH","SET_SHOW_ANNOTATION_TRANSLATIONS","placeholderSelection","selectedEntities","getSelectionForPage","disableSelection","setSelectedEntities","getTextFromBboxes","alert","entitySelection","s","entityClick","entityToFind","entityToFilter","setSpanSelection","setPlaceholderSelection","START_SELECTION","MOVE_SELECTION","END_SELECTION","RESET_SELECTION","SET_SPAN_SELECTION","ADD_SPAN_SELECTION","SET_PLACEHOLDER_SELECTION","ADD_PLACEHOLDER_SELECTION","SET_SELECTED_ENTITIES","SET_SPAN_LOADING","isMultipleSelection","foundRotatedPage","foundReorderedPage","enableEditMode","disableEditMode","setRenameAndCategorize","setPagesForPostprocess","setUpdatedDocument","setSubmitEditChanges","unselectPage","selectedPage","setSelectedPages","rotatedAngle","updateRotationToTheLeft","updateRotationToTheRight","editDocument","editedDocument","setShowEditConfirmationModal","setRedirectingUser","SET_EDIT_MODE","option","SET_RENAME_AND_CATEGORIZE","SET_PAGES_FOR_POSTPROCESS","SET_UPDATED_DOCUMENT","SET_SELECTED_PAGES","ADD_SELECTED_PAGE","SET_SHOW_EDIT_CONFIRMATION_MODAL","SET_SUBMIT_EDIT_CHANGES","SET_REDIRECTING_USER","store","modules","app","createApp","component","App","defaultIconPack","defaultIconComponent","mount","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","definition","defineProperty","enumerable","g","globalThis","Function","hmd","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"js/app.js","mappings":"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","sources":["webpack://@konfuzio/document-validation-ui/./src/components/App.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentDashboard.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentSetChooser.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CategoryIconImg.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CategoryIconImg.vue?d754","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentSetChooser.vue?3115","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentName.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ServerImage.vue","webpack://@konfuzio/document-validation-ui/./src/utils/keycloak.js","webpack://@konfuzio/document-validation-ui/./src/api.js","webpack://@konfuzio/document-validation-ui/./src/assets/images/ServerImage.vue?c65a","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameSavedImage.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameSavedImage.vue?afb3","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameNotSavedImage.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FileNameNotSavedImage.vue?46eb","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentName.vue?9b9e","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBarButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBarButtons.vue?78f1","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/KeyboardActionsDescription.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/KeyboardIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/KeyboardIcon.vue?ff3f","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowUpKey.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowUpKey.vue?e16a","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowDownKey.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ArrowDownKey.vue?dadd","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/KeyboardActionsDescription.vue?f5d9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentTopBar/DocumentTopBar.vue?e0c0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentPage.vue","webpack://@konfuzio/document-validation-ui/./src/constants.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/BoxSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/BoxSelection.vue?db17","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SpanSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SpanSelection.vue?ee73","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/PlaceholderSelection.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/PlaceholderSelection.vue?ad84","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnotationPopup.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnotationPopup.vue?2abd","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnSetTableOptions.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SettingsIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SettingsIcon.vue?31e1","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/AnnSetTableOptions.vue?4247","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentPage.vue?3163","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DummyPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DummyPage.vue?1d01","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingDocument.vue","webpack://@konfuzio/document-validation-ui/./src/directives/scroll.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingPage.vue?4d28","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentToolbar.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FitZoomIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/FitZoomIcon.vue?01c6","webpack://@konfuzio/document-validation-ui/./src/assets/images/PlusIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/PlusIcon.vue?038a","webpack://@konfuzio/document-validation-ui/./src/assets/images/MinusIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/MinusIcon.vue?5afc","webpack://@konfuzio/document-validation-ui/./src/assets/images/EditDocIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EditDocIcon.vue?2154","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/DocumentToolbar.vue?3258","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SearchBar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/SearchBar.vue?f30d","webpack://@konfuzio/document-validation-ui/./src/components/DocumentPage/ScrollingDocument.vue?1b17","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/DocumentThumbnails.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/LoadingThumbnail.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/LoadingThumbnail.vue?6ef0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentThumbnails/DocumentThumbnails.vue?b65b","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentAnnotations.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyState.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EmptyStateImg.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EmptyStateImg.vue?d064","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyState.vue?8eb6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ExtractingData.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ExtractingData.vue?f1b3","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationSetActionButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationSetActionButtons.vue?7993","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentLabel.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationRow.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationDetails.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CheckMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/CheckMark.vue?07d4","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedCheckMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedCheckMark.vue?8b1f","webpack://@konfuzio/document-validation-ui/./src/assets/images/QuestionMark.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/QuestionMark.vue?1bf1","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedUser.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/AcceptedUser.vue?c643","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotFoundIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotFoundIcon.vue?82f7","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationDetails.vue?2329","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationContent.vue","webpack://@konfuzio/document-validation-ui/./src/utils/utils.js","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationContent.vue?a2de","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyAnnotation.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/EmptyAnnotation.vue?0887","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationActionButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationActionButtons.vue?2b76","webpack://@konfuzio/document-validation-ui/./src/assets/images/TranslateArrows.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/TranslateArrows.vue?95d9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationRow.vue?90e0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentLabel.vue?bb02","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationFilters.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/AnnotationFilters.vue?543f","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingAnnotations.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingLabels.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingLabels.vue?d415","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/LoadingAnnotations.vue?0e1a","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/DocumentAnnotations.vue?cbb7","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ChooseLabelSetModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/ChooseLabelSetModal.vue?df58","webpack://@konfuzio/document-validation-ui/./src/assets/images/DraggableIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/DraggableIcon.vue?2174","webpack://@konfuzio/document-validation-ui/./src/components/DocumentAnnotations/MultiAnnotationTableOverlay.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/DocumentEdit.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditSidebar.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SidebarButtons.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SidebarButtons.vue?2c61","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditSidebar.vue?3934","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/RenameAndCategorize.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentCategory.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentCategory.vue?ee51","webpack://@konfuzio/document-validation-ui/./src/assets/images/EyeIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/EyeIcon.vue?4331","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/RenameAndCategorize.vue?7974","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPages.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitLines.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitLines.vue?99b4","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitZigZag.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/SplitZigZag.vue?caf0","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPageThumbnail.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPageThumbnail.vue?a710","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditPages.vue?6cb3","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SplitInfoBar.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/StarIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/StarIcon.vue?3c5a","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/SplitInfoBar.vue?a72c","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditConfirmationModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/EditConfirmationModal.vue?3ea6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentEdit/DocumentEdit.vue?497e","webpack://@konfuzio/document-validation-ui/./src/components/ErrorMessage.vue","webpack://@konfuzio/document-validation-ui/./src/components/ErrorMessage.vue?c4a9","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/NotOptimizedViewportModal.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotOptimizedIllustration.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/NotOptimizedIllustration.vue?2dd6","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/NotOptimizedViewportModal.vue?3a38","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/AnnotationDeletedModal.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/AnnotationDeletedModal.vue?2594","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/DocumentErrorModal.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ErrorIcon.vue","webpack://@konfuzio/document-validation-ui/./src/assets/images/ErrorIcon.vue?4b6c","webpack://@konfuzio/document-validation-ui/./src/components/DocumentModals/DocumentErrorModal.vue?df30","webpack://@konfuzio/document-validation-ui/./src/components/DocumentDashboard.vue?2842","webpack://@konfuzio/document-validation-ui/./src/components/ErrorPage.vue","webpack://@konfuzio/document-validation-ui/./src/components/ErrorPage.vue?ab67","webpack://@konfuzio/document-validation-ui/./src/components/DocumentsList/DocumentsList.vue","webpack://@konfuzio/document-validation-ui/./src/components/DocumentsList/DocumentsList.vue?b30f","webpack://@konfuzio/document-validation-ui/./src/components/App.vue?15c7","webpack://@konfuzio/document-validation-ui/./src/i18n.js","webpack://@konfuzio/document-validation-ui/./src/store/display.js","webpack://@konfuzio/document-validation-ui/./src/store/document.js","webpack://@konfuzio/document-validation-ui/./src/store/category.js","webpack://@konfuzio/document-validation-ui/./src/store/project.js","webpack://@konfuzio/document-validation-ui/./src/store/selection.js","webpack://@konfuzio/document-validation-ui/./src/store/edit.js","webpack://@konfuzio/document-validation-ui/./src/store/index.js","webpack://@konfuzio/document-validation-ui/./src/icons.js","webpack://@konfuzio/document-validation-ui/./src/main.js","webpack://@konfuzio/document-validation-ui/./src/locales/ sync [A-Za-z0-9-_,\\s]+\\.json$i","webpack://@konfuzio/document-validation-ui/webpack/bootstrap","webpack://@konfuzio/document-validation-ui/webpack/runtime/amd options","webpack://@konfuzio/document-validation-ui/webpack/runtime/chunk loaded","webpack://@konfuzio/document-validation-ui/webpack/runtime/compat get default export","webpack://@konfuzio/document-validation-ui/webpack/runtime/define property getters","webpack://@konfuzio/document-validation-ui/webpack/runtime/global","webpack://@konfuzio/document-validation-ui/webpack/runtime/harmony module decorator","webpack://@konfuzio/document-validation-ui/webpack/runtime/hasOwnProperty shorthand","webpack://@konfuzio/document-validation-ui/webpack/runtime/make namespace object","webpack://@konfuzio/document-validation-ui/webpack/runtime/jsonp chunk loading","webpack://@konfuzio/document-validation-ui/webpack/startup"],"sourcesContent":["<template>\n <div class=\"dv-ui-app-container dv-ui-theme\">\n <DocumentsList v-if=\"showDocumentsList\" />\n <DocumentDashboard v-if=\"!pageError\" />\n <ErrorPage v-else :error=\"pageError\" />\n </div>\n</template>\n<script>\nimport Vue from \"vue\";\nimport { mapState } from \"vuex\";\nimport * as Sentry from \"@sentry/vue\";\nimport DocumentDashboard from \"./DocumentDashboard\";\nimport ErrorPage from \"./ErrorPage\";\nimport { DocumentsList } from \"./DocumentsList\";\nimport {\n getURLQueryParam,\n getURLPath,\n getURLValueFromHash,\n} from \"../utils/utils\";\nimport { Integrations } from \"@sentry/tracing\";\nimport API from \"../api\";\nimport { initKeycloak } from \"../utils/keycloak\";\nimport { debounce } from \"../utils/utils\";\n\nexport default {\n name: \"App\",\n components: {\n DocumentsList,\n DocumentDashboard,\n ErrorPage,\n },\n props: {\n document: {\n type: String,\n required: false,\n default: null,\n },\n // eslint-disable-next-line vue/prop-name-casing\n user_token: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n full_mode: {\n type: String,\n required: false,\n default: \"false\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_documents_navigation: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_missing_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_feedback_needed_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n show_accepted_annotations: {\n type: String,\n required: false,\n default: \"true\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sentry_dsn: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sentry_env: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n api_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n image_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/require-default-prop\n locale: {\n type: String,\n required: false,\n },\n // eslint-disable-next-line vue/prop-name-casing\n documents_list_path: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n details_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotation: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotationSet: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_url: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_realm: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n sso_client_id: {\n type: String,\n required: false,\n default: \"\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n hide_empty_label_sets: {\n type: String,\n required: false,\n default: \"false\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n annotation_content_width: {\n type: String,\n required: false,\n default: \"60\",\n },\n // eslint-disable-next-line vue/prop-name-casing\n remove_branding: {\n type: String,\n required: false,\n default: \"false\",\n },\n },\n computed: {\n ...mapState(\"display\", [\"pageError\"]),\n documentId() {\n if (getURLQueryParam(\"document\")) {\n return getURLQueryParam(\"document\");\n } else if (getURLPath(\"d\")) {\n return getURLPath(\"d\");\n } else if (process.env.VUE_APP_DOCUMENT) {\n return process.env.VUE_APP_DOCUMENT;\n } else if (this.document) {\n return this.document;\n } else {\n return null;\n }\n },\n userToken() {\n if (process.env.VUE_APP_USER_TOKEN) {\n return process.env.VUE_APP_USER_TOKEN;\n } else if (this.user_token) {\n return this.user_token;\n } else {\n return null;\n }\n },\n fullMode() {\n if (process.env.VUE_APP_FULL_MODE) {\n return process.env.VUE_APP_FULL_MODE;\n } else if (this.full_mode && this.full_mode === \"true\") {\n return this.full_mode;\n } else {\n return null;\n }\n },\n showDocumentsNavigation() {\n if (process.env.VUE_APP_SHOW_DOCUMENTS_NAVIGATION) {\n return process.env.VUE_APP_SHOW_DOCUMENTS_NAVIGATION === \"true\";\n } else {\n return this.show_documents_navigation === \"true\";\n }\n },\n removeBranding() {\n if (process.env.VUE_APP_REMOVE_BRANDING) {\n return process.env.VUE_APP_REMOVE_BRANDING === \"true\";\n } else {\n return this.remove_branding === \"true\";\n }\n },\n showMissingAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return false;\n } else if (process.env.VUE_APP_SHOW_MISSING_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_MISSING_ANNOTATIONS === \"true\";\n } else {\n return this.show_missing_annotations === \"true\";\n }\n },\n showAcceptedAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return false;\n } else if (process.env.VUE_APP_SHOW_ACCEPTED_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_ACCEPTED_ANNOTATIONS === \"true\";\n } else {\n return this.show_accepted_annotations === \"true\";\n }\n },\n showFeedbackNeededAnnotations() {\n if (\n window.location.hash === \"#unrevised\" ||\n window.location.hash === \"#possiblyIncorrect\"\n ) {\n return true;\n } else if (process.env.VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS) {\n return process.env.VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS === \"true\";\n } else {\n return this.show_feedback_needed_annotations === \"true\";\n }\n },\n isPublicView() {\n if (\n this.userToken ||\n this.fullMode ||\n (this.ssoUrl && this.ssoRealm && this.ssoClientId)\n ) {\n return false;\n } else {\n return true;\n }\n },\n showDocumentsList() {\n return process.env.VUE_APP_SHOW_DOCUMENTS_LIST;\n },\n documentsListPath() {\n if (process.env.VUE_APP_DOCUMENTS_LIST_PATH) {\n return process.env.VUE_APP_DOCUMENTS_LIST_PATH;\n } else if (this.documents_list_path && this.documents_list_path !== \"\") {\n return this.documents_list_path;\n } else {\n return null;\n }\n },\n detailsUrl() {\n if (process.env.VUE_APP_DETAILS_URL) {\n return process.env.VUE_APP_DETAILS_URL;\n } else if (this.details_url) {\n return this.details_url;\n } else {\n return null;\n }\n },\n ssoUrl() {\n if (process.env.VUE_APP_SSO_URL) {\n return process.env.VUE_APP_SSO_URL;\n } else if (this.sso_url) {\n return this.sso_url;\n } else {\n return null;\n }\n },\n ssoRealm() {\n if (process.env.VUE_APP_SSO_REALM) {\n return process.env.VUE_APP_SSO_REALM;\n } else if (this.sso_realm) {\n return this.sso_realm;\n } else {\n return null;\n }\n },\n ssoClientId() {\n if (process.env.VUE_APP_SSO_CLIENT_ID) {\n return process.env.VUE_APP_SSO_CLIENT_ID;\n } else if (this.sso_client_id) {\n return this.sso_client_id;\n } else {\n return null;\n }\n },\n annotationId() {\n if (getURLValueFromHash(\"ann\")) {\n return getURLValueFromHash(\"ann\");\n } else if (process.env.VUE_APP_ANNOTATION) {\n return process.env.VUE_APP_ANNOTATION;\n } else if (this.annotation) {\n return this.annotation;\n } else {\n return null;\n }\n },\n annotationSetId() {\n if (getURLValueFromHash(\"templ\")) {\n return getURLValueFromHash(\"templ\");\n } else if (process.env.VUE_APP_ANNOTATION_SET) {\n return process.env.VUE_APP_ANNOTATION_SET;\n } else if (this.annotationSet) {\n return this.annotationSet;\n } else {\n return null;\n }\n },\n hideEmptyLabelSets() {\n if (process.env.VUE_APP_HIDE_EMPTY_LABEL_SETS) {\n return process.env.VUE_APP_HIDE_EMPTY_LABEL_SETS === \"true\";\n } else {\n return this.hide_empty_label_sets === \"true\";\n }\n },\n annotationContentWidth() {\n if (process.env.VUE_APP_ANNOTATION_CONTENT_WIDTH) {\n return process.env.VUE_APP_ANNOTATION_CONTENT_WIDTH;\n } else {\n return this.annotation_content_width;\n }\n },\n },\n async created() {\n // Sentry config\n if (process.env.NODE_ENV != \"development\") {\n Sentry.init({\n Vue,\n dsn: process.env.VUE_APP_SENTRY_DSN,\n integrations: [new Integrations.BrowserTracing()],\n environment: process.env.VUE_APP_SENTRY_ENV,\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 1.0,\n\n // If false, errors won't show up in devtools\n logErrors: true,\n\n tracingOptions: {\n trackComponents: true,\n },\n });\n }\n\n // Log app version\n console.log(\n `${this.removeBranding ? \"\" : require(\"../../package.json\").name} ${\n require(\"../../package.json\").version\n }`\n );\n\n console.log(\"-------\");\n\n // locale config\n if (this.locale && this.locale !== \"\") {\n this.$i18n.locale = this.locale;\n }\n\n // api config\n if (this.userToken) {\n API.setAuthToken(this.userToken);\n } else if (this.ssoUrl && this.ssoRealm && this.ssoClientId) {\n await initKeycloak(this.ssoUrl, this.ssoRealm, this.ssoClientId);\n }\n\n API.setLocale(this.$i18n.locale);\n\n if (this.api_url !== \"\") {\n API.setApiUrl(this.api_url);\n }\n if (this.image_url !== \"\") {\n API.setFileUrl(this.image_url);\n }\n\n // document and project config\n Promise.all([\n this.$store.dispatch(\"display/setDetailsUrl\", this.detailsUrl),\n this.$store.dispatch(\n \"display/setAnnotationWidth\",\n this.annotationContentWidth\n ),\n this.$store.dispatch(\n \"display/hideEmptyLabelSets\",\n this.hideEmptyLabelSets\n ),\n this.$store.dispatch(\n \"display/showDocumentsNavigation\",\n this.showDocumentsNavigation\n ),\n this.$store.dispatch(\"display/showBranding\", !this.removeBranding),\n this.$store.dispatch(\n \"document/showMissingAnnotations\",\n this.showMissingAnnotations\n ),\n this.$store.dispatch(\n \"document/showFeedbackNeededAnnotations\",\n this.showFeedbackNeededAnnotations\n ),\n this.$store.dispatch(\n \"document/showAcceptedAnnotations\",\n this.showAcceptedAnnotations\n ),\n this.$store.dispatch(\"document/setDocId\", this.documentId),\n this.$store.dispatch(\"document/setPublicView\", this.isPublicView),\n this.$store.dispatch(\"document/setAnnotationId\", this.annotationId),\n this.$store.dispatch(\"document/setAnnotationSetId\", this.annotationSetId),\n this.$store.dispatch(\n \"project/setDocumentsListPath\",\n this.documentsListPath\n ),\n ]).finally(() => {\n this.$store.dispatch(\"document/fetchDocument\");\n });\n\n // Stop error resizeObserver\n const _ = window.ResizeObserver;\n window.ResizeObserver = class ResizeObserver extends _ {\n constructor(callback) {\n callback = debounce(callback, 20);\n super(callback);\n }\n };\n },\n};\n</script>\n\n<style lang=\"scss\" src=\"../assets/scss/theme.scss\"></style>\n","<template>\n <div class=\"dashboard\">\n <DocumentTopBar />\n <div :class=\"['dashboard-viewer', renameAndCategorize ? 'edit-mode' : '']\">\n <DocumentThumbnails v-if=\"!editMode\" ref=\"documentPages\" />\n <splitpanes class=\"default-theme\">\n <pane :size=\"50\" :min-size=\"10\">\n <ScrollingDocument\n ref=\"scrollingDocument\"\n class=\"dashboard-document\"\n />\n </pane>\n <pane :size=\"50\" class=\"document-sidebar\">\n <DocumentAnnotations v-if=\"!editMode\" ref=\"annotations\" />\n <DocumentEdit v-else ref=\"editView\" />\n </pane>\n </splitpanes>\n\n <ChooseLabelSetModal\n v-if=\"showChooseLabelSetModal && showChooseLabelSetModal.show\"\n :is-multiple-annotations=\"showChooseLabelSetModal.isMultipleAnnotations\"\n @finish=\"showChooseLabelSetModal.finish\"\n />\n\n <transition name=\"slide-fade\">\n <div\n v-if=\"showActionError\"\n class=\"error-message\"\n :style=\"{ width: `${errorMessageWidth}px` }\"\n >\n <ErrorMessage />\n </div>\n </transition>\n </div>\n <div v-if=\"showDocumentError\" class=\"error-modal\">\n <DocumentErrorModal />\n </div>\n <div v-if=\"!optimalResolution\" class=\"not-optimized\">\n <NotOptimizedViewportModal />\n </div>\n <div>\n <AnnotationDeletedModal />\n </div>\n <div v-if=\"!isMinimumWidth\" class=\"not-supported\">\n <div class=\"text\">\n {{ $t(\"resolution_not_supported\") }}\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport { DocumentTopBar } from \"./DocumentTopBar\";\nimport { ScrollingDocument } from \"./DocumentPage\";\nimport { DocumentThumbnails } from \"./DocumentThumbnails\";\nimport { DocumentAnnotations } from \"./DocumentAnnotations\";\nimport { DocumentEdit } from \"./DocumentEdit\";\nimport ErrorMessage from \"./ErrorMessage\";\nimport NotOptimizedViewportModal from \"../components/DocumentModals/NotOptimizedViewportModal\";\nimport AnnotationDeletedModal from \"../components/DocumentModals/AnnotationDeletedModal\";\nimport DocumentErrorModal from \"../components/DocumentModals/DocumentErrorModal\";\nimport ChooseLabelSetModal from \"../components/DocumentAnnotations/ChooseLabelSetModal\";\nimport { Splitpanes, Pane } from \"splitpanes\";\nimport \"splitpanes/dist/splitpanes.css\";\n\n/**\n * This component shows the PDF pages in a scrolling component and\n * the annotations on the side.\n */\nexport default {\n name: \"DocumentDashboard\",\n components: {\n Splitpanes,\n Pane,\n DocumentTopBar,\n ScrollingDocument,\n DocumentThumbnails,\n DocumentAnnotations,\n DocumentEdit,\n ErrorMessage,\n NotOptimizedViewportModal,\n DocumentErrorModal,\n ChooseLabelSetModal,\n AnnotationDeletedModal,\n },\n data() {\n return {\n resizeObserver: null,\n unwatchSelectedDocument: null,\n documentContainerLeftPadding: 0,\n documentContainerWidth: 0,\n };\n },\n computed: {\n ...mapState(\"display\", [\n \"scale\",\n \"fit\",\n \"optimalResolution\",\n \"pageWidthScale\",\n \"currentPage\",\n \"showAnnSetTable\",\n \"showChooseLabelSetModal\",\n ]),\n ...mapState(\"document\", [\n \"showActionError\",\n \"showDocumentError\",\n \"errorMessageWidth\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapState(\"edit\", [\"editMode\", \"renameAndCategorize\"]),\n ...mapGetters(\"display\", [\"isMinimumWidth\"]),\n },\n\n watch: {\n selectedDocument(newDocument, oldDocument) {\n if (newDocument && !oldDocument) {\n // first time\n this.resizeObserver.observe(this.$refs.scrollingDocument.$el);\n } else if (newDocument) {\n this.onDocumentResize();\n }\n },\n fit(newFit, oldFit) {\n if (newFit !== oldFit) {\n this.onDocumentResize();\n }\n },\n },\n mounted() {\n this.resizeObserver = new ResizeObserver(this.onDocumentResize);\n },\n unmounted() {\n if (this.$refs.scrollingDocument) {\n this.resizeObserver.unobserve(this.$refs.scrollingDocument.$el);\n }\n },\n methods: {\n elementsWidth() {\n let elementsWidth = 1;\n if (this.$refs.editView) {\n elementsWidth += this.$refs.editView.$el.clientWidth;\n }\n if (this.$refs.documentPages) {\n elementsWidth += this.$refs.documentPages.$el.clientWidth;\n }\n if (this.$refs.annotations) {\n elementsWidth += this.$refs.annotations.$el.clientWidth;\n }\n return elementsWidth;\n },\n onDocumentResize() {\n if (this.$refs.scrollingDocument) {\n this.documentContainerLeftPadding =\n this.$refs.scrollingDocument.$el.getBoundingClientRect().left;\n this.documentContainerWidth =\n this.$refs.scrollingDocument.$el.offsetWidth;\n this.$store.dispatch(\n \"display/updateOptimalResolution\",\n this.$el.offsetWidth\n );\n if (this.selectedDocument.pages[0]) {\n this.$store.dispatch(\"display/updateScale\", {\n elementsWidth: this.elementsWidth(),\n client: {\n width: this.$el.clientWidth,\n height: this.$el.clientHeight,\n },\n viewport: {\n width: this.selectedDocument.pages[0].size[0],\n height: this.selectedDocument.pages[0].size[1],\n },\n });\n }\n }\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../assets/scss/document_dashboard.scss\"></style>\n","<template>\n <div id=\"document-top-bar-component\" ref=\"documentTopBar\">\n <div\n v-if=\"selectedDocument && selectedDocument.pages.length > 0 && !loading\"\n :class=\"['document-top-bar', editMode && 'edit-mode-top-bar']\"\n >\n <div class=\"left-bar-components\">\n <DocumentSetChooser\n v-if=\"!publicView && !recalculatingAnnotations && !editMode\"\n />\n <a\n v-if=\"\n showBranding &&\n !(selectedDocument.documentSet !== null && documentSet === null)\n \"\n class=\"app-info\"\n target=\"_blank\"\n href=\"https://konfuzio.com\"\n >\n <span>{{ $t(\"powered_by\") }}</span>\n </a>\n </div>\n\n <div\n id=\"document-info\"\n :class=\"[\n 'center-bar-components',\n recalculatingAnnotations && 'single-component',\n ]\"\n >\n <div\n :style=\"`visibility: ${previousDocument ? 'visible' : 'hidden'}`\"\n class=\"left-arrow navigation-arrow\"\n type=\"button\"\n @click=\"navigateToDocument(previousDocument)\"\n >\n <b-icon icon=\"angle-left\" size=\"is-small\" />\n </div>\n\n <DocumentName :data-file-name=\"selectedDocument.data_file_name\" />\n\n <div\n class=\"right-arrow navigation-arrow\"\n :style=\"`visibility: ${nextDocument ? 'visible' : 'hidden'}`\"\n type=\"button\"\n @click=\"navigateToDocument(nextDocument)\"\n >\n <b-icon icon=\"angle-right\" size=\"is-small\" />\n </div>\n </div>\n\n <div class=\"right-bar-components\">\n <div v-if=\"!recalculatingAnnotations\" class=\"right-components\">\n <div\n v-if=\"!editMode && (!publicView || !isDocumentReviewed)\"\n class=\"keyboard-actions-info\"\n >\n <KeyboardActionsDescription />\n </div>\n\n <div\n v-if=\"!editMode && (publicView || isDocumentReviewed)\"\n class=\"read-only-info\"\n >\n <b-tooltip\n :animated=\"false\"\n position=\"is-bottom\"\n class=\"right-aligned width-184\"\n >\n <span v-if=\"publicView\">\n {{ $t(\"lite_mode\") }}\n </span>\n <span v-else class=\"doc-reviewed\">\n {{ $t(\"reviewed_mode\") }}\n </span>\n <b-icon\n :class=\"[\n 'info-icon is-small',\n !publicView && isDocumentReviewed && 'info-reviewed',\n ]\"\n icon=\"circle-info\"\n />\n <template #content>\n <div v-if=\"publicView\" class=\"read-only-details\">\n {{ $t(\"limited_functionalities\") }}\n </div>\n <div v-else class=\"read-only-details\">\n {{ $t(\"document_reviewed\") }}\n </div>\n </template>\n </b-tooltip>\n </div>\n\n <div class=\"top-bar-buttons\">\n <DocumentTopBarButtons />\n </div>\n </div>\n </div>\n </div>\n <div v-else class=\"loading-top-bar\">\n <b-skeleton position=\"is-centered\" width=\"20%\" height=\"60%\" />\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport DocumentSetChooser from \"./DocumentSetChooser\";\nimport DocumentName from \"./DocumentName\";\nimport DocumentTopBarButtons from \"./DocumentTopBarButtons\";\nimport KeyboardActionsDescription from \"./KeyboardActionsDescription\";\n\n/**\n * This component has different functionalities\n * based on Dashboard View or Edit Mode\n */\n\nexport default {\n name: \"DocumentTopBar\",\n components: {\n DocumentSetChooser,\n DocumentName,\n DocumentTopBarButtons,\n KeyboardActionsDescription,\n },\n data() {\n return {\n previousDocument: null,\n nextDocument: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"documentSet\",\n \"publicView\",\n \"loading\",\n \"recalculatingAnnotations\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"display\", [\"showDocumentsNavigation\", \"showBranding\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReviewed\",\n \"isDocumentReadyToBeReviewed\",\n \"waitingForSplittingConfirmation\",\n ]),\n },\n watch: {\n loading(newValue) {\n if (!newValue && this.showDocumentsNavigation) {\n this.$store\n .dispatch(\"project/fetchDocumentListForNavigation\")\n .then((results) => {\n this.getPreviousAndNextDocuments(results);\n });\n }\n },\n },\n created() {\n window.addEventListener(\"resize\", this.handleResize);\n },\n unmounted() {\n window.removeEventListener(\"resize\", this.handleResize);\n },\n mounted() {\n if (this.$refs.documentTopBar) {\n this.setComponentWidth(this.$refs.documentTopBar.offsetWidth);\n }\n },\n methods: {\n setComponentWidth(width) {\n // set width for the error messages to match the width\n // and avoid going over the Dashboard\n this.$store.dispatch(\"document/setErrorMessageWidth\", width);\n },\n handleResize() {\n if (this.$refs.documentTopBar) {\n this.setComponentWidth(this.$refs.documentTopBar.offsetWidth);\n }\n },\n getPreviousAndNextDocuments(filteredDocuments) {\n if (!filteredDocuments) return;\n\n const found = filteredDocuments.find(\n (document) => document.id === this.selectedDocument.id\n );\n\n const indexOfCurrentDocument = filteredDocuments.indexOf(found);\n\n if (!(indexOfCurrentDocument < 0)) {\n this.previousDocument = filteredDocuments[indexOfCurrentDocument - 1];\n this.nextDocument = filteredDocuments[indexOfCurrentDocument + 1];\n } else {\n this.previousDocument = filteredDocuments[0];\n this.nextDocument = filteredDocuments[1];\n }\n },\n navigateToDocument(document) {\n if (!document) return;\n this.$store.dispatch(\"document/changeCurrentDocument\", document.id);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","<template>\n <b-dropdown\n v-if=\"\n documentSet &&\n documentSet.documents &&\n documentSet.documents.length > 1 &&\n categories\n \"\n v-model=\"selectedDocId\"\n class=\"document-set-dropdown dropdown-full-width\"\n aria-role=\"list\"\n scrollable\n >\n <template #trigger>\n <div class=\"dropdown-doc-set\">\n <div class=\"dropdown-left\">\n <CategoryIcon />\n </div>\n <div class=\"dropdown-text\">\n <div class=\"top-part\">\n {{ $t(\"document_section\") }}\n </div>\n <div class=\"bottom-part\">\n {{\n `${categoryName(\n selectedDocument.category\n )} ${numberOfDocumentInSet(selectedDocument)}`\n }}\n </div>\n </div>\n <div class=\"dropdown-right\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </div>\n </div>\n </template>\n\n <b-dropdown-item\n v-for=\"doc in documentSet.documents\"\n :key=\"doc.id\"\n aria-role=\"listitem\"\n class=\"list-item\"\n :value=\"doc.id\"\n @click=\"handleDocumentClick(doc)\"\n >\n <span>\n {{\n `${categoryName(doc.category)} ${numberOfDocumentInSet(doc)}`\n }}</span\n >\n </b-dropdown-item>\n </b-dropdown>\n <div\n v-else-if=\"selectedDocument.documentSet !== null && documentSet === null\"\n class=\"loading-bar\"\n >\n <b-skeleton width=\"100px\" height=\"60%\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CategoryIcon from \"../../assets/images/CategoryIconImg\";\n\nexport default {\n name: \"DocumentSetChooser\",\n components: {\n CategoryIcon,\n },\n data() {\n return {\n selectedDocId: 0,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\"numberOfDocumentInSet\"]),\n ...mapGetters(\"category\", [\"categoryName\"]),\n ...mapState(\"document\", [\"documentSet\", \"selectedDocument\"]),\n ...mapState(\"category\", [\"categories\"]),\n },\n mounted() {\n this.selectedDocId = this.selectedDocument.id;\n },\n methods: {\n handleDocumentClick(document) {\n this.$store.dispatch(\"document/changeCurrentDocument\", document.id);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_set_chooser.scss\"\n></style>\n","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"22\"\n height=\"22\"\n viewBox=\"0 0 22 22\"\n >\n <path\n fill=\"#1A1A1A\"\n d=\"M20.47,7.37s0,0,0-.08l-.06-.15a.71.71,0,0,0-.07-.09.94.94,0,0,0-.09-.12l-.09-.07L20,6.78l-7.5-4.63a1,1,0,0,0-1.06,0L4,6.78l-.09.08-.09.07a.94.94,0,0,0-.09.12.71.71,0,0,0-.07.09l-.06.15s0,0,0,.08a1.15,1.15,0,0,0,0,.26v8.74a1,1,0,0,0,.47.85l7.5,4.63h0a.47.47,0,0,0,.15.06s.05,0,.08,0a.86.86,0,0,0,.52,0s.05,0,.08,0a.47.47,0,0,0,.15-.06h0L20,17.22a1,1,0,0,0,.47-.85V7.63A1.15,1.15,0,0,0,20.47,7.37ZM11,19.21l-5.5-3.4V9.43L11,12.82Zm1-8.12L6.4,7.63,12,4.18l5.6,3.45Zm6.5,4.72L13,19.21V12.82l5.5-3.39Z\"\n />\n </svg>\n</template>\n","import { render } from \"./CategoryIconImg.vue?vue&type=template&id=2094f2f0\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentSetChooser.vue?vue&type=template&id=57a73f96&scoped=true\"\nimport script from \"./DocumentSetChooser.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentSetChooser.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_set_chooser.scss?vue&type=style&index=0&id=57a73f96&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-57a73f96\"]])\n\nexport default __exports__","<template>\n <div\n :class=\"['document-name-component', editMode && 'document-name-edit-mode']\"\n >\n <div class=\"document-icon\">\n <ServerImage\n :height=\"'22px'\"\n :image-url=\"`${selectedDocument.thumbnail_url}?${selectedDocument.downloaded_at}`\"\n >\n <b-skeleton width=\"15px\" height=\"22px\" :rounded=\"false\" />\n </ServerImage>\n </div>\n <b-tooltip\n :label=\"fullText\"\n multilined\n :active=\"isFileNameBiggerThanMaxSize && !isEditable\"\n size=\"is-large\"\n position=\"is-bottom\"\n >\n <span class=\"file-name-section\">\n <span\n :class=\"['document-name', isEditable && 'is-editable']\"\n :contenteditable=\"isEditable\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @keydown.enter=\"handleSave\"\n @blur=\"handleSave\"\n >{{ textContent }}</span\n >\n </span>\n </b-tooltip>\n\n <div\n v-if=\"\n !publicView &&\n !isDocumentReviewed &&\n showEditBtn &&\n !editMode &&\n !recalculatingAnnotations\n \"\n class=\"edit-btn btn\"\n @click=\"handleEdit\"\n >\n {{ $t(\"rename\") }}\n </div>\n <div\n v-if=\"showSaveBtn && !editMode\"\n class=\"save-btn btn\"\n @click=\"handleSave\"\n >\n {{ $t(\"save\") }}\n </div>\n <div v-if=\"saving\" class=\"message-container\">\n <span class=\"loading-container\">\n <b-notification :closable=\"false\" class=\"loading-background\">\n <b-loading v-model=\"saving\" :is-full-page=\"isFullPage\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </b-loading>\n </b-notification>\n </span>\n <span>{{ $t(\"autosaving\") }}</span>\n </div>\n <div v-if=\"changed\" class=\"message-container\">\n <span v-if=\"saved\" class=\"cloud-icon\"><FileNameSaved /></span>\n <span v-else class=\"cloud-icon\"><FileNameNotSaved /></span>\n <span>{{ saved ? $t(\"saved\") : $t(\"not_saved\") }}</span>\n </div>\n\n <div v-if=\"detailsUrl\" class=\"details-btn btn\" @click=\"openDocumentDetails\">\n {{ $t(\"document_details\") }}\n </div>\n </div>\n</template>\n\n<script>\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport FileNameSaved from \"../../assets/images/FileNameSavedImage\";\nimport FileNameNotSaved from \"../../assets/images/FileNameNotSavedImage\";\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"DocumentName\",\n components: {\n ServerImage,\n FileNameSaved,\n FileNameNotSaved,\n },\n props: {\n dataFileName: {\n type: String,\n default: \"\",\n },\n },\n data() {\n return {\n maxFilenameChars: 26,\n isEditable: false,\n showEditBtn: true,\n showSaveBtn: false,\n fileExtension: null,\n fileName: null,\n oldFileName: null,\n saving: false,\n isFullPage: false,\n changed: false,\n saved: false,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"publicView\",\n \"recalculatingAnnotations\",\n \"documentId\",\n ]),\n ...mapState(\"display\", [\"optimalResolution\", \"detailsUrl\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n textContent() {\n if (this.isEditable) {\n return this.oldFileName;\n } else if (this.fileName) {\n return this.shortFilenameIfNeeded(\n `${this.fileName}.${this.fileExtension}`\n );\n } else {\n return this.shortFilenameIfNeeded(this.dataFileName);\n }\n },\n fullText() {\n if (this.fileName) {\n return this.fileName;\n } else {\n return this.dataFileName;\n }\n },\n isFileNameBiggerThanMaxSize() {\n if (this.fileName) {\n return this.fileName.length >= this.maxFilenameChars;\n } else {\n return this.dataFileName.length >= this.maxFilenameChars;\n }\n },\n },\n updated() {\n const contentEditable = document.querySelector(\".document-name\");\n if (this.isEditable && contentEditable) {\n contentEditable.focus();\n this.handleCaretPlacing(contentEditable);\n }\n\n if (this.changed) {\n const that = this;\n setTimeout(function () {\n that.saved = false;\n that.changed = false;\n that.showEditBtn = true;\n this.showSaveBtn = false;\n }, 4000);\n }\n },\n methods: {\n shortFilenameIfNeeded(filename) {\n if (filename && filename.length >= this.maxFilenameChars) {\n return (\n filename.substr(0, this.maxFilenameChars / 2) +\n \"...\" +\n filename.substr(\n filename.length - this.maxFilenameChars / 2,\n filename.length\n )\n );\n }\n return filename;\n },\n handleFileName() {\n // Save the file name and the extension in different variables\n this.fileName = this.dataFileName.split(\".\").slice(0, -1).join(\".\");\n\n this.fileExtension = this.dataFileName.split(\".\").at(-1);\n },\n handleEdit() {\n // Split file name and extension to only edit name\n this.handleFileName();\n\n this.isEditable = true;\n this.showEditBtn = false;\n this.showSaveBtn = true;\n this.oldFileName = this.fileName;\n },\n handleCaretPlacing(contentEditable) {\n let range, selection;\n if (document.createRange) {\n range = document.createRange(); //Create a range (a range is a like the selection but invisible)\n range.selectNodeContents(contentEditable); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n selection = window.getSelection(); //get the selection object (allows you to change selection)\n selection.removeAllRanges(); //remove any selections already made\n selection.addRange(range); //make the range you have just created the visible selection\n } else if (document.selection) {\n range = document.body.createTextRange(); //Create a range (a range is a like the selection but invisible)\n range.moveToElementText(contentEditable); //Select the entire contents of the element with the range\n range.collapse(false); //collapse the range to the end point. false means collapse to end rather than the start\n range.select(); //Select the range (make it the visible selection\n }\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n handleInput(event) {\n const input = event.target.textContent;\n\n // Set the new file name to the new input value\n if (input === \"\") {\n // If the user deletes the name:\n this.fileName = \"untitled\";\n } else {\n this.fileName = input.trim();\n }\n },\n handleSave(event) {\n this.isEditable = false;\n\n event.target.textContent = this.fileName;\n\n const updatedFileName = {\n data_file_name: `${this.fileName}.${this.fileExtension}`,\n };\n\n this.showSaveBtn = false;\n this.saving = true;\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedFileName)\n .then((response) => {\n // Check if the response is successful or not\n if (response) {\n // if successful, set the old name to be the new name\n this.changed = true;\n this.oldFileName = this.fileName;\n this.saved = true;\n }\n })\n .catch((error) => {\n this.changed = true;\n event.target.textContent = this.oldFileName;\n this.fileName = this.oldFileName;\n })\n .finally(() => {\n this.saving = false;\n });\n\n // Remove focus from contenteditable\n const contentNotEditable = document.querySelector(\".document-name\");\n if (contentNotEditable) {\n contentNotEditable.blur();\n }\n },\n openDocumentDetails() {\n window.location.href = this.detailsUrl;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_name.scss\"></style>\n","<template>\n <div v-observe-visibility=\"visibilityChanged\" style=\"display: flex\">\n <img v-show=\"loaded\" ref=\"imgTag\" :height=\"height\" />\n <slot v-if=\"!loaded\" />\n </div>\n</template>\n\n<script>\nimport api from \"../../api\";\n\nexport default {\n name: \"ServerImage\",\n props: {\n imageUrl: {\n required: true,\n type: String,\n },\n height: {\n default: null,\n type: String,\n },\n width: {\n default: null,\n type: String,\n },\n },\n data() {\n return {\n loaded: false,\n isVisible: false,\n };\n },\n watch: {\n imageUrl() {\n if (this.isVisible) {\n this.loadImage();\n }\n },\n },\n methods: {\n loadImage() {\n if (!this.imageUrl) return;\n return api\n .makeFileRequest(this.imageUrl)\n .then((myBlob) => {\n this.$refs.imgTag.src = URL.createObjectURL(myBlob);\n if (this.height) {\n this.$refs.imgTag.style.height = this.height;\n }\n if (this.width) {\n this.$refs.imgTag.style.width = this.width;\n }\n this.loaded = true;\n })\n .catch((error) => {\n this.loaded = false;\n });\n },\n visibilityChanged(isVisible) {\n if (!this.isVisible && isVisible) {\n this.isVisible = isVisible;\n this.loadImage();\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","import Keycloak from \"keycloak-js\";\nimport API from \"../api\";\n\nlet keycloak;\n\nexport const initKeycloak = async (url, realm, clientId) => {\n keycloak = new Keycloak({\n url,\n realm,\n clientId,\n });\n\n try {\n const authenticated = await keycloak.init({\n onLoad: \"login-required\",\n enableLogging: true,\n });\n if (authenticated) {\n API.setIsKeycloakAuth(true);\n API.setAuthToken(keycloak.token);\n } else {\n console.error(\"User is not authenticated\");\n }\n } catch (error) {\n console.error(\"Failed to initialize adapter:\", error);\n }\n};\n\nexport const updateKeycloakToken = () => {\n return new Promise(async (resolve, reject) => {\n if (keycloak) {\n await keycloak.updateToken(30);\n API.setAuthToken(keycloak.token);\n resolve();\n } else {\n reject();\n }\n });\n};\n","import axios from \"axios\";\nimport { updateKeycloakToken } from \"./utils/keycloak\";\n\nlet HTTP, FILE_REQUEST, authToken, appLocale, isKeycloakAuth;\nconst DEFAULT_URL = \"https://app.konfuzio.com\";\nconst FILE_URL = process.env.VUE_APP_IMAGE_URL;\n\naxios.defaults.xsrfCookieName = \"csrftoken\";\naxios.defaults.xsrfHeaderName = \"X-CSRFToken\";\n\nHTTP = axios.create({\n baseURL: process.env.VUE_APP_API_URL || `${DEFAULT_URL}/api/v3/`,\n});\n\nFILE_REQUEST = axios.create({\n baseURL: FILE_URL || `${DEFAULT_URL}`,\n responseType: \"blob\",\n});\n\nconst setAuthToken = (token) => {\n if (token !== authToken) {\n authToken = token;\n }\n};\n\nconst setIsKeycloakAuth = (result) => {\n isKeycloakAuth = result;\n};\n\nconst setApiUrl = (url) => {\n HTTP.defaults.baseURL = url;\n};\n\nconst setFileUrl = (url) => {\n FILE_REQUEST.defaults.baseURL = url;\n};\n\nconst setLocale = (locale) => {\n appLocale = locale;\n};\n\nconst getInterceptorConfig = async (config) => {\n if (isKeycloakAuth) {\n await updateKeycloakToken();\n }\n\n if (authToken) {\n config.headers[\"Authorization\"] = `${isKeycloakAuth ? \"Bearer\" : \"Token\"\n } ${authToken}`;\n }\n config.headers[\"Accept-Language\"] = `${appLocale}-${appLocale}`;\n\n return config;\n};\n\nHTTP.interceptors.request.use(getInterceptorConfig, async (error) => {\n return Promise.reject(error);\n});\n\nFILE_REQUEST.interceptors.request.use(getInterceptorConfig, (error) => {\n return Promise.reject(error);\n});\n\nconst makeFileRequest = (fileUrl) => {\n return new Promise((resolve, reject) => {\n if (process.env.NODE_ENV === \"test\") {\n reject(\"Running unit tests!\");\n return;\n }\n FILE_REQUEST.get(fileUrl)\n .then((response) => {\n return response.data;\n })\n .then((myBlob) => {\n resolve(myBlob);\n })\n .catch((error) => {\n if (error.response.status === 428) {\n // retry request after 2 seconds\n setTimeout(() => {\n makeFileRequest(fileUrl)\n .then((response) => {\n resolve(response);\n })\n .catch((error) => {\n reject(error);\n });\n }, 2000);\n }\n reject(error);\n });\n });\n};\n\nconst makeGetPaginatedRequest = (request, hasParams = false) => {\n let returnResponse = [];\n let toFinishLoop = false;\n\n let separator = hasParams ? \"&\" : \"?\";\n let loopRequest = `${request}${separator}limit=100`;\n\n return new Promise(async (resolve, reject) => {\n do {\n try {\n let response = await HTTP.get(loopRequest);\n if (response && response.data) {\n const data = response.data;\n if (data.results) {\n returnResponse = [...returnResponse, ...data.results];\n }\n if (data.next) {\n loopRequest = data.next;\n } else {\n toFinishLoop = true;\n }\n } else {\n reject(\"Error getting paginated results.\");\n }\n } catch (error) {\n reject(error);\n toFinishLoop = true;\n console.log(error);\n }\n } while (!toFinishLoop);\n resolve(returnResponse);\n });\n};\n\nexport default {\n HTTP,\n setApiUrl,\n setFileUrl,\n makeFileRequest,\n makeGetPaginatedRequest,\n setAuthToken,\n setIsKeycloakAuth,\n setLocale,\n FILE_REQUEST,\n DEFAULT_URL,\n FILE_URL,\n};\n","import { render } from \"./ServerImage.vue?vue&type=template&id=be92e2fe&scoped=true\"\nimport script from \"./ServerImage.vue?vue&type=script&lang=js\"\nexport * from \"./ServerImage.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=be92e2fe&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-be92e2fe\"]])\n\nexport default __exports__","<template>\n <svg\n width=\"18\"\n height=\"13\"\n viewBox=\"0 0 18 13\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.2844 12.3934H4.71415C2.48261 12.3934 0.666992 10.5708 0.666992 8.34388C0.666992 6.31069 2.17392 4.61975 4.12801 4.33512C4.49407 1.97428 6.54159 0.166016 9.0002 0.166016C11.4588 0.166016 13.5063 1.97428 13.8749 4.33512C15.8267 4.61976 17.3337 6.3109 17.3337 8.34388C17.3337 10.5708 15.5182 12.3934 13.2842 12.3934H13.2844ZM4.71415 5.90411C3.36987 5.90411 2.27921 6.99729 2.27921 8.34388C2.27921 9.68564 3.36987 10.7788 4.71415 10.7788H13.2844C14.6286 10.7788 15.7216 9.68564 15.7216 8.34388C15.7216 6.99729 14.6284 5.90411 13.2844 5.90411H13.1265C12.6817 5.90411 12.3205 5.54539 12.3205 5.09557C12.3205 3.26812 10.8304 1.77802 9.00061 1.77802C7.16847 1.77802 5.68072 3.26812 5.68072 5.09557C5.68072 5.5452 5.3195 5.90411 4.87217 5.90411H4.71415Z\"\n fill=\"#858C9A\"\n />\n </svg>\n</template>\n","import { render } from \"./FileNameSavedImage.vue?vue&type=template&id=36f6ec4e\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M11.4269 13.1159H4.57073C2.7855 13.1159 1.33301 11.6578 1.33301 9.87627C1.33301 8.24972 2.53855 6.89697 4.10182 6.66927C4.39467 4.7806 6.03269 3.33398 7.99957 3.33398C9.96646 3.33398 11.6045 4.7806 11.8994 6.66927C13.4608 6.89698 14.6663 8.24989 14.6663 9.87627C14.6663 11.6578 13.214 13.1159 11.4267 13.1159H11.4269ZM4.57073 7.92446C3.49531 7.92446 2.62278 8.799 2.62278 9.87627C2.62278 10.9497 3.49531 11.8242 4.57073 11.8242H11.4269C12.5023 11.8242 13.3767 10.9497 13.3767 9.87627C13.3767 8.799 12.5022 7.92446 11.4269 7.92446H11.3006C10.9448 7.92446 10.6558 7.63749 10.6558 7.27762C10.6558 5.81567 9.46374 4.62359 7.9999 4.62359C6.53419 4.62359 5.34399 5.81567 5.34399 7.27762C5.34399 7.63733 5.05501 7.92446 4.69715 7.92446H4.57073Z\"\n fill=\"#858C9A\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.47098 2.86203C2.73133 2.60168 3.15344 2.60168 3.41379 2.86203L14.471 13.9192C14.7313 14.1796 14.7313 14.6017 14.471 14.862C14.2106 15.1224 13.7885 15.1224 13.5282 14.862L2.47098 3.80484C2.21063 3.54449 2.21063 3.12238 2.47098 2.86203Z\"\n fill=\"#858C9A\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M1.99957 2.39007C2.52027 1.86938 3.36449 1.86938 3.88519 2.39007L14.9424 13.4473C15.4631 13.968 15.4631 14.8122 14.9424 15.3329C14.4217 15.8536 13.5775 15.8536 13.0568 15.3329L1.99957 4.27569C1.47887 3.75499 1.47887 2.91077 1.99957 2.39007ZM3.41379 2.86148C3.15344 2.60113 2.73133 2.60113 2.47098 2.86148C2.21063 3.12183 2.21063 3.54394 2.47098 3.80429L13.5282 14.8615C13.7885 15.1218 14.2106 15.1218 14.471 14.8615C14.7313 14.6011 14.7313 14.179 14.471 13.9187L3.41379 2.86148Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./FileNameNotSavedImage.vue?vue&type=template&id=53d233a4\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentName.vue?vue&type=template&id=605ff746&scoped=true\"\nimport script from \"./DocumentName.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentName.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_name.scss?vue&type=style&index=0&id=605ff746&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-605ff746\"]])\n\nexport default __exports__","<template>\n <div class=\"buttons\">\n <div v-if=\"editMode\" class=\"edit-mode-buttons\">\n <b-button\n :label=\"$t('back_to_annotations')\"\n class=\"button-cancel primary-button edit-mode-btn\"\n type=\"is-default\"\n :disabled=\"\n !documentHasCategory ||\n waitingForSplittingConfirmation(selectedDocument)\n \"\n @click=\"closeEditMode\"\n />\n\n <b-tooltip\n :active=\"!enableSubmit\"\n position=\"is-bottom\"\n :label=\"$t('select_category')\"\n class=\"right-aligned no-right-margin\"\n >\n <b-button\n :label=\"editMode && !renameAndCategorize ? $t('next') : $t('submit')\"\n type=\"is-primary\"\n :class=\"[\n 'button-next primary-button edit-mode-btn',\n renameAndCategorize && 'submit-btn',\n ]\"\n :disabled=\"renameAndCategorize && !enableSubmit\"\n @click=\"handleButton\"\n />\n </b-tooltip>\n </div>\n\n <div\n v-if=\"!editMode && !isDocumentReviewed && !publicView\"\n id=\"review-btn\"\n class=\"finish-review-button-container\"\n >\n <b-tooltip\n :active=\"!isReviewButtonActive\"\n position=\"is-bottom\"\n multilined\n class=\"right-aligned no-right-margin\"\n >\n <b-button\n :class=\"['finish-review-btn', 'text-btn', 'primary-button']\"\n type=\"is-primary\"\n :disabled=\"!isReviewButtonActive\"\n @click.stop=\"handleFinishReview\"\n >\n <span v-if=\"!isLoading\">\n {{ $t(\"finish_review\") }}\n </span>\n\n <div v-else>\n <b-notification :closable=\"false\" :class=\"['loading-background']\">\n <b-loading :active=\"isLoading\" :is-full-page=\"false\">\n <b-icon\n icon=\"spinner\"\n class=\"fa-spin loading-icon-size spinner\"\n />\n </b-loading>\n </b-notification>\n </div>\n </b-button>\n\n <template #content> {{ $t(\"disabled_finish_review\") }} </template>\n </b-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"DocumentTopBarButtons\",\n data() {\n return {\n emptyLabels: null,\n isLoading: false,\n enableSubmit: false,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"publicView\",\n \"annotationSets\",\n \"thumbnailIsLoaded\",\n ]),\n ...mapState(\"edit\", [\"editMode\", \"renameAndCategorize\", \"updatedDocument\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReadyToFinishReview\",\n \"isDocumentReviewed\",\n \"waitingForSplittingConfirmation\",\n ]),\n ...mapGetters(\"edit\", [\"documentShouldBePostprocessed\"]),\n isReviewButtonActive() {\n return this.isDocumentReadyToFinishReview;\n },\n documentHasCategory() {\n return this.selectedDocument.category;\n },\n },\n\n watch: {\n updatedDocument(newValue) {\n if (!newValue) return;\n\n this.submitValidation(newValue);\n },\n },\n\n mounted() {\n if (this.updatedDocument) {\n this.submitValidation(this.updatedDocument);\n }\n },\n\n methods: {\n submitValidation(document) {\n const found = document.find((item) => !item.category);\n\n if (!found) {\n this.enableSubmit = true;\n } else {\n this.enableSubmit = false;\n }\n },\n closeEditMode() {\n this.$store.dispatch(\"edit/disableEditMode\");\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n this.$store.dispatch(\"edit/setUpdatedDocument\", null);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n this.$nextTick(() => {\n // reset to first page\n this.$store.dispatch(\"display/updateCurrentPage\", 1);\n });\n },\n handleButton() {\n // Check if we are not in the Rename and Categorize view\n // and if we have a split document\n if (!this.renameAndCategorize) {\n // Enable the \"next\" button\n this.$store.dispatch(\"edit/setRenameAndCategorize\", true);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n } else if (\n this.selectedDocument.category_is_revised &&\n this.documentShouldBePostprocessed\n ) {\n // Show confirmation modal to user if the document was split, reordered or rotated\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", true);\n } else {\n this.$store.dispatch(\"edit/setSubmitEditChanges\", true);\n }\n },\n handleFinishReview() {\n // update document\n const updatedDocumentReviewStatus = {\n is_reviewed: true,\n };\n\n this.isLoading = true;\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedDocumentReviewStatus)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"review_error\"),\n });\n })\n .finally(() => {\n this.isLoading = false;\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","import { render } from \"./DocumentTopBarButtons.vue?vue&type=template&id=3767df42&scoped=true\"\nimport script from \"./DocumentTopBarButtons.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentTopBarButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=3767df42&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3767df42\"]])\n\nexport default __exports__","<template>\n <div\n v-if=\"!publicView && !isDocumentReviewed && !editMode\"\n class=\"keyboard-actions-description\"\n >\n <section class=\"b-tooltips\">\n <b-tooltip position=\"is-left\" size=\"is-large\" class=\"left-down-aligned\">\n <KeyboardIcon />\n\n <template #content>\n <div class=\"tooltip-title\">\n {{ $t(\"use_your_keyboard\") }}\n </div>\n\n <div class=\"tooltip-description\">\n <div class=\"content-line\">\n <div class=\"action-item\">\n <div class=\"key\"><ArrowUpKey /></div>\n <div class=\"key\"><ArrowDownKey /></div>\n <div class=\"keyboard-action-text\">{{ $t(\"arrow_keys\") }}</div>\n </div>\n\n <div class=\"tooltip-divider\"></div>\n\n <div class=\"action-item\">\n <div class=\"key\">{{ \"ESC\" }}</div>\n <div class=\"keyboard-action-text\">{{ $t(\"esc_key\") }}</div>\n </div>\n </div>\n\n <div class=\"content-line\">\n <div class=\"action-item\">\n <div class=\"key\">{{ \"ENTER\" }}</div>\n <div class=\"keyboard-action-text\">{{ $t(\"enter_key\") }}</div>\n </div>\n\n <div class=\"tooltip-divider\"></div>\n\n <div class=\"action-item\">\n <div class=\"key\">{{ \"DELETE\" }}</div>\n <div class=\"keyboard-action-text\">\n {{ $t(\"missing_annotation\") }}\n </div>\n </div>\n </div>\n </div>\n </template>\n </b-tooltip>\n </section>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport KeyboardIcon from \"../../assets/images/KeyboardIcon\";\nimport ArrowUpKey from \"../../assets/images/ArrowUpKey\";\nimport ArrowDownKey from \"../../assets/images/ArrowDownKey\";\n\nexport default {\n name: \"KeyboardActionsDescription\",\n components: {\n KeyboardIcon,\n ArrowUpKey,\n ArrowDownKey,\n },\n computed: {\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"document\", [\"selectedDocument\", \"publicView\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_top_bar.scss\"></style>\n","<template>\n <svg\n width=\"20\"\n height=\"12\"\n viewBox=\"0 0 20 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M4.30187 0.167969H15.6994C16.1387 0.167955 16.5177 0.167942 16.8298 0.193445C17.1593 0.220362 17.487 0.279792 17.8023 0.440454C18.2727 0.680138 18.6552 1.06259 18.8948 1.53299C19.0555 1.84831 19.1149 2.17599 19.1418 2.50545C19.1673 2.81759 19.1673 3.19655 19.1673 3.63583V8.36678C19.1673 8.80606 19.1673 9.18502 19.1418 9.49716C19.1149 9.82661 19.0555 10.1543 18.8948 10.4696C18.6552 10.94 18.2727 11.3225 17.8023 11.5622C17.487 11.7228 17.1593 11.7822 16.8298 11.8092C16.5177 11.8347 16.1387 11.8347 15.6994 11.8346H4.30188C3.86259 11.8347 3.48361 11.8347 3.17146 11.8092C2.84201 11.7822 2.51433 11.7228 2.19901 11.5622C1.7286 11.3225 1.34615 10.94 1.10647 10.4696C0.945808 10.1543 0.886378 9.82661 0.85946 9.49716C0.833957 9.18502 0.83397 8.80605 0.833985 8.36676V3.63585C0.83397 3.19656 0.833957 2.81759 0.85946 2.50545C0.886378 2.17599 0.945808 1.84831 1.10647 1.53299C1.34615 1.06259 1.7286 0.680137 2.19901 0.440454C2.51433 0.279792 2.84201 0.220362 3.17146 0.193445C3.48361 0.167942 3.86258 0.167955 4.30187 0.167969ZM3.30718 1.85458C3.0808 1.87307 2.99686 1.90447 2.95566 1.92546C2.79886 2.00536 2.67138 2.13284 2.59148 2.28964C2.57049 2.33085 2.53909 2.41478 2.52059 2.64117C2.5013 2.87728 2.50065 3.18751 2.50065 3.66797V8.33464C2.50065 8.8151 2.5013 9.12533 2.52059 9.36144C2.53909 9.58783 2.57049 9.67176 2.59148 9.71296C2.67138 9.86976 2.79886 9.99725 2.95566 10.0771C2.99686 10.0981 3.0808 10.1295 3.30718 10.148C3.5433 10.1673 3.85352 10.168 4.33399 10.168H15.6673C16.1478 10.168 16.458 10.1673 16.6941 10.148C16.9205 10.1295 17.0044 10.0981 17.0456 10.0771C17.2024 9.99725 17.3299 9.86977 17.4098 9.71296C17.4308 9.67176 17.4622 9.58783 17.4807 9.36144C17.5 9.12533 17.5007 8.8151 17.5007 8.33464V3.66797C17.5007 3.18751 17.5 2.87728 17.4807 2.64117C17.4622 2.41478 17.4308 2.33085 17.4098 2.28964C17.3299 2.13284 17.2024 2.00536 17.0456 1.92546C17.0044 1.90447 16.9205 1.87307 16.6941 1.85458C16.458 1.83528 16.1478 1.83464 15.6673 1.83464H4.33399C3.85352 1.83464 3.5433 1.83528 3.30718 1.85458ZM4.16732 4.33464C4.16732 3.8744 4.54042 3.5013 5.00065 3.5013H5.00899C5.46922 3.5013 5.84232 3.8744 5.84232 4.33464C5.84232 4.79487 5.46922 5.16797 5.00899 5.16797H5.00065C4.54042 5.16797 4.16732 4.79487 4.16732 4.33464ZM7.50065 4.33464C7.50065 3.8744 7.87375 3.5013 8.33399 3.5013H8.34232C8.80256 3.5013 9.17565 3.8744 9.17565 4.33464C9.17565 4.79487 8.80256 5.16797 8.34232 5.16797H8.33399C7.87375 5.16797 7.50065 4.79487 7.50065 4.33464ZM10.834 4.33464C10.834 3.8744 11.2071 3.5013 11.6673 3.5013H11.6757C12.1359 3.5013 12.509 3.8744 12.509 4.33464C12.509 4.79487 12.1359 5.16797 11.6757 5.16797H11.6673C11.2071 5.16797 10.834 4.79487 10.834 4.33464ZM14.1673 4.33464C14.1673 3.8744 14.5404 3.5013 15.0007 3.5013H15.009C15.4692 3.5013 15.8423 3.8744 15.8423 4.33464C15.8423 4.79487 15.4692 5.16797 15.009 5.16797H15.0007C14.5404 5.16797 14.1673 4.79487 14.1673 4.33464ZM5.00065 8.08464C5.00065 7.6244 5.37375 7.2513 5.83399 7.2513H14.1673C14.6276 7.2513 15.0007 7.6244 15.0007 8.08464C15.0007 8.54487 14.6276 8.91797 14.1673 8.91797H5.83399C5.37375 8.91797 5.00065 8.54487 5.00065 8.08464Z\"\n fill=\"#1A1A1A\"\n />\n </svg>\n</template>\n","import { render } from \"./KeyboardIcon.vue?vue&type=template&id=31030eca\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"8\"\n height=\"6\"\n viewBox=\"0 0 8 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4 5.5L0 0.5L8 0.5L4 5.5Z\" fill=\"white\" />\n </svg>\n</template>\n","import { render } from \"./ArrowUpKey.vue?vue&type=template&id=44fb817a\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"8\"\n height=\"6\"\n viewBox=\"0 0 8 6\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4 0.5L0 5.5L8 5.5L4 0.5Z\" fill=\"white\" />\n </svg>\n</template>\n","import { render } from \"./ArrowDownKey.vue?vue&type=template&id=0662d913\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./KeyboardActionsDescription.vue?vue&type=template&id=bcf0f440&scoped=true\"\nimport script from \"./KeyboardActionsDescription.vue?vue&type=script&lang=js\"\nexport * from \"./KeyboardActionsDescription.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=bcf0f440&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bcf0f440\"]])\n\nexport default __exports__","import { render } from \"./DocumentTopBar.vue?vue&type=template&id=bd7cf984&scoped=true\"\nimport script from \"./DocumentTopBar.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentTopBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_top_bar.scss?vue&type=style&index=0&id=bd7cf984&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bd7cf984\"]])\n\nexport default __exports__","<template>\n <div\n ref=\"pdfContainer\"\n :class=\"[\n 'pdf-page-container',\n (categorizeModalIsActive ||\n editMode ||\n publicView ||\n isDocumentReviewed) &&\n 'default-cursor',\n page.number === currentPage && 'current-page',\n ]\"\n >\n <AnnotationPopup\n v-if=\"!isSelecting && spanSelectionsForPage(page).length > 0\"\n :spans=\"spanSelectionsForPage(page)\"\n :container-width=\"scaledViewport.width\"\n :container-height=\"scaledViewport.height\"\n :page=\"page\"\n @close=\"closePopups\"\n />\n\n <div\n v-if=\"showAnnotationLabel\"\n class=\"annotation-label\"\n :style=\"getAnnotationLabelPosition(showAnnotationLabel)\"\n >\n {{ showAnnotationLabel.labelName }}\n </div>\n\n <AnnSetTableOptions v-if=\"showAnnSetTable\" :page=\"page\" />\n\n <v-stage\n v-if=\"image && scale\"\n ref=\"stage\"\n :config=\"scaledViewport\"\n :style=\"canvasStyle\"\n @mousedown=\"onMouseDown\"\n @mouseup=\"onMouseUp\"\n @mousemove=\"onMouseMove\"\n >\n <v-layer>\n <v-image\n :config=\"{\n image,\n width: scaledViewport.width,\n height: scaledViewport.height,\n listening: false,\n }\"\n />\n <template v-if=\"pageInVisibleRange && !editMode\">\n <template v-if=\"searchResults.length > 0\">\n <v-rect\n v-for=\"(bbox, index) in searchResults\"\n :key=\"'sr' + index\"\n :config=\"{\n ...selectionTextRect(bbox, bbox === currentSearchResultForPage),\n }\"\n ></v-rect>\n </template>\n <v-group\n v-if=\"\n !categorizeModalIsActive || !publicView || !isDocumentReviewed\n \"\n ref=\"entities\"\n >\n <v-rect\n v-for=\"(entity, index) in scaledEntities(page.entities, page)\"\n :key=\"index\"\n :config=\"entityRect(entity)\"\n @click=\"handleClickedEntity(entity)\"\n @mouseenter=\"onElementEnter\"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n <template v-for=\"annotation in pageAnnotations\">\n <template\n v-for=\"(bbox, index) in annotation.span.filter(\n (bbox) => bbox.page_index + 1 == page.number\n )\"\n >\n <v-group>\n <v-rect\n v-if=\"!isAnnotationInEditMode(annotation.id)\"\n :config=\"annotationRect(bbox, annotation.id)\"\n @click=\"handleFocusedAnnotation(annotation)\"\n @mouseenter=\"onElementEnter(annotation, bbox)\"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n </template>\n <template\n v-if=\"annotation.metadata && annotation.metadata.checkbox\"\n >\n <v-group>\n <v-rect\n v-if=\"!isAnnotationInEditMode(annotation.id)\"\n :config=\"\n annotationRect(\n annotation.metadata.checkbox.bbox,\n annotation.id\n )\n \"\n @click=\"handleFocusedAnnotation(annotation)\"\n @mouseenter=\"\n onElementEnter(\n annotation,\n annotation.metadata.checkbox.bbox\n )\n \"\n @mouseleave=\"onElementLeave\"\n />\n </v-group>\n </template>\n </template>\n </template>\n </v-layer>\n <v-layer>\n <template\n v-for=\"(span, index) in spanSelectionsForPage(page)\"\n :key=\"index\"\n >\n <span-selection :id=\"index\" :span=\"span\" :page=\"page\" />\n </template>\n <template\n v-for=\"(span, index) in placeholderSelectionForPage(page)\"\n :key=\"`${index}_placeholder`\"\n >\n <placeholder-selection :span=\"span\" :page=\"page\" />\n </template>\n <template v-if=\"page.number === selectionPage\">\n <box-selection :page=\"page\" />\n </template>\n </v-layer>\n </v-stage>\n <b-skeleton\n v-else\n position=\"is-centered\"\n :width=\"scaledViewport.width\"\n :height=\"scaledViewport.height\"\n />\n </div>\n</template>\n<script>\nimport { mapState, mapGetters, mapActions } from \"vuex\";\nimport { PIXEL_RATIO } from \"../../constants\";\nimport api from \"../../api\";\nimport BoxSelection from \"./BoxSelection\";\nimport SpanSelection from \"./SpanSelection\";\nimport PlaceholderSelection from \"./PlaceholderSelection\";\nimport AnnotationPopup from \"./AnnotationPopup\";\nimport AnnSetTableOptions from \"./AnnSetTableOptions\";\n\nexport default {\n name: \"DocumentPage\",\n components: {\n BoxSelection,\n SpanSelection,\n PlaceholderSelection,\n AnnotationPopup,\n AnnSetTableOptions,\n },\n\n props: {\n page: {\n type: Object,\n required: true,\n },\n imageBlob: {\n type: Blob,\n required: false,\n default: null,\n },\n },\n\n data() {\n return {\n image: null,\n };\n },\n\n computed: {\n ...mapState(\"selection\", [\n \"selectedEntities\",\n \"spanSelection\",\n \"isSelecting\",\n ]),\n ...mapState(\"display\", [\n \"scale\",\n \"categorizeModalIsActive\",\n \"searchEnabled\",\n \"currentPage\",\n \"showAnnSetTable\",\n ]),\n ...mapState(\"document\", [\n \"documentAnnotationSelected\",\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"publicView\",\n \"annotationId\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"display\", [\n \"visiblePageRange\",\n \"bboxToRect\",\n \"scaledEntities\",\n ]),\n ...mapGetters(\"selection\", [\n \"isSelectionValid\",\n \"spanSelectionsForPage\",\n \"placeholderSelectionForPage\",\n ]),\n ...mapGetters(\"document\", [\n \"getAnnotationsFiltered\",\n \"isAnnotationInEditMode\",\n \"isDocumentReadyToBeReviewed\",\n \"isDocumentReviewed\",\n \"labelOfAnnotation\",\n ]),\n selectionPage() {\n return this.selection && this.selection.pageNumber;\n },\n showFocusedAnnotation() {\n return (\n this.documentAnnotationSelected &&\n this.documentAnnotationSelected.page === this.page.number &&\n this.visiblePageRange.includes(this.documentAnnotationSelected.page) &&\n !this.isAnnotationInEditMode(this.documentAnnotationSelected.id)\n );\n },\n actualSizeViewport() {\n return {\n width: this.page.size[0] * this.scale,\n height: this.page.size[1] * this.scale,\n };\n },\n scaledViewport() {\n const { width: actualSizeWidth, height: actualSizeHeight } =\n this.actualSizeViewport;\n const [pixelWidth, pixelHeight] = [actualSizeWidth, actualSizeHeight].map(\n (dim) => dim / PIXEL_RATIO\n );\n return { width: pixelWidth, height: pixelHeight };\n },\n\n canvasStyle() {\n const { width, height } = this.scaledViewport;\n return `width: ${width}px; height: ${height}px;`;\n },\n\n pageInVisibleRange() {\n return this.visiblePageRange.includes(this.page.number);\n },\n\n /**\n * A filtered version of `annotations` for the chosen page.\n * Include annotations that have *at least* one bbox in the page.\n * If the annotation's bboxes span multiple pages, each DocumentPage receives\n * it and only shows the ones that match the pageNumber.\n */\n pageAnnotations() {\n const annotations = [];\n if (this.getAnnotationsFiltered.annotations) {\n this.getAnnotationsFiltered.annotations.map((annotation) => {\n if (\n annotation.span.find(\n (span) => span.page_index + 1 === this.page.number\n )\n ) {\n annotations.push(annotation);\n }\n });\n }\n return annotations;\n },\n\n selection() {\n return this.$store.getters[\"selection/getSelectionForPage\"](\n this.page.number\n );\n },\n\n searchResults() {\n const results = this.$store.getters[\"display/searchResultsForPage\"](\n this.page.number\n );\n return results;\n },\n\n currentSearchResultForPage() {\n return this.$store.getters[\"display/currentSearchResultForPage\"](\n this.page.number\n );\n },\n showAnnotationLabel() {\n if (\n this.showFocusedAnnotation &&\n !this.isSelecting &&\n this.documentAnnotationSelected &&\n this.documentAnnotationSelected.labelName !== \"\"\n ) {\n return this.documentAnnotationSelected;\n } else {\n return null;\n }\n },\n },\n watch: {\n recalculatingAnnotations(newState) {\n if (!newState) {\n this.drawPage(true);\n }\n },\n scale() {\n this.closePopups();\n },\n\n page(newValue, oldValue) {\n if (newValue.image_url !== oldValue.image_url) {\n this.drawPage(true);\n }\n },\n searchEnabled(isEnabled) {\n if (isEnabled) {\n this.closePopups();\n }\n },\n },\n mounted() {\n if (\n this.selectedDocument &&\n this.selectedDocument.labeling_available === 1\n ) {\n this.drawPage();\n }\n },\n methods: {\n ...mapActions(\"selection\", [\n \"startSelection\",\n \"endSelection\",\n \"moveSelection\",\n ]),\n isAnnotationFocused(annotationId) {\n return (\n this.documentAnnotationSelected &&\n annotationId === this.documentAnnotationSelected.id\n );\n },\n\n onMouseDown(event) {\n if (\n this.categorizeModalIsActive ||\n this.editMode ||\n this.publicView ||\n this.isDocumentReviewed\n )\n return;\n\n if (\n event.target.getParent() &&\n event.target.getParent().className === \"Transformer\" &&\n !event.target.name().includes(\"anchor\")\n ) {\n // if we are editing a box then close popups\n this.closePopups();\n\n return;\n }\n\n // check if element and delegate to it\n if (\n event.target.name() === \"entity\" ||\n event.target.name() === \"annotation\" ||\n event.target.name() === \"multiAnnBoxSelection\" ||\n event.target.name() === \"multiAnnBoxTransformer\" ||\n event.target.name() === \"multiAnnButton\" ||\n event.target.name() === \"boxSelection\" ||\n event.target.name() === \"boxTransformer\" ||\n event.target.name().includes(\"spanSelection\") ||\n event.target.name().includes(\"spanTransformer\") ||\n event.target.name().includes(\"anchor\")\n ) {\n return;\n }\n\n // anything else, we start selecting\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.startSelection({\n pageNumber: this.page.number,\n start: {\n x: position.x,\n y: position.y,\n },\n });\n },\n onMouseMove() {\n // if we are not editing, do nothing\n if (!this.isSelecting) {\n return;\n }\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.moveSelection({\n end: {\n x: position.x,\n y: position.y,\n },\n });\n },\n\n onMouseUp() {\n // if we are not editing, do nothing\n if (!this.isSelecting) {\n return;\n }\n\n const position = this.$refs.stage.getStage().getPointerPosition();\n this.endSelection({\n x: position.x,\n y: position.y,\n });\n },\n\n handleFocusedAnnotation(annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", annotation.id);\n this.closePopups();\n },\n\n handleClickedEntity(entity) {\n this.$store.dispatch(\"selection/entityClick\", entity);\n },\n\n onElementEnter(annotation = null, span = null) {\n if (\n !this.categorizeModalIsActive &&\n !this.publicView &&\n !this.editMode &&\n !this.isDocumentReviewed\n ) {\n this.$refs.stage.$el.style.cursor = \"pointer\";\n }\n\n if (annotation) {\n const label = this.labelOfAnnotation(annotation);\n if (label) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation,\n label,\n span,\n scrollTo: false,\n });\n }\n }\n },\n\n onElementLeave() {\n this.$refs.stage.$el.style.cursor = \"inherit\";\n this.$store.dispatch(\"document/disableDocumentAnnotationSelected\");\n },\n\n /**\n * Konva draws pages like this.\n */\n drawPage(force = false) {\n if (this.image && !force) {\n return;\n }\n if (process.env.NODE_ENV === \"test\") {\n return;\n }\n\n const convertBlob = (blob) => {\n const image = new Image();\n image.src = URL.createObjectURL(blob);\n image.onload = () => {\n // set image only when it is loaded\n this.image = image;\n };\n };\n\n if (!this.imageBlob) {\n api\n .makeFileRequest(\n `${this.page.image_url}?${this.selectedDocument.downloaded_at}`\n )\n .then((myBlob) => {\n convertBlob(myBlob);\n })\n .catch((error) => {});\n } else {\n convertBlob(this.imageBlob);\n }\n },\n\n selectionTextRect(bbox, isFocused) {\n return {\n fill: isFocused ? \"orange\" : \"greenyellow\",\n stroke: isFocused ? \"orange\" : \"\",\n globalCompositeOperation: \"multiply\",\n ...this.bboxToRect(this.page, bbox),\n };\n },\n\n /**\n * Builds the konva config object for the entity.\n */\n entityRect(entity) {\n return {\n stroke: \"#ccc\",\n strokeWidth: 1,\n dash: [5, 2],\n fill: \"transparent\",\n globalCompositeOperation: \"multiply\",\n transformsEnabled: \"position\",\n hitStrokeWidth: 0,\n shadowForStrokeEnabled: false,\n perfectDrawEnabled: false,\n name: \"entity\",\n ...entity.scaled,\n };\n },\n\n /**\n * Builds the konva config object for the annotation.\n */\n annotationRect(bbox, annotationId, draggable) {\n const selected = this.annotationId == annotationId && !this.searchEnabled;\n const focused = this.isAnnotationFocused(annotationId);\n let fillColor = \"yellow\";\n let strokeWidth = 0;\n let strokeColor = \"\";\n\n // if annotation is selected\n if (selected) {\n fillColor = \"orange\";\n strokeWidth = 1;\n strokeColor = \"black\";\n } // if hovered\n else if (focused) {\n fillColor = \"#67E9B7\";\n strokeWidth = 1;\n strokeColor = \"black\";\n }\n return {\n fill: fillColor,\n globalCompositeOperation: \"multiply\",\n strokeWidth: strokeWidth,\n stroke: strokeColor,\n name: \"annotation\",\n draggable,\n ...this.bboxToRect(this.page, bbox),\n };\n },\n getAnnotationLabelPosition(annotation) {\n if (annotation && this.$refs.stage) {\n const maxCharacters = 10;\n const minimumSpaceTopY = 50;\n const rect = this.bboxToRect(this.page, annotation.span);\n\n if (\n annotation.labelName.length > maxCharacters &&\n rect.y < minimumSpaceTopY\n ) {\n return `left: ${rect.x}px; top: ${rect.y + rect.height}px`;\n } else {\n return `left: ${rect.x}px; bottom: ${\n this.$refs.stage.$el.clientHeight - rect.y\n }px`;\n }\n } else {\n return \"\";\n }\n },\n closePopups() {\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: [],\n selection: null,\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_page.scss\"></style>\n","export const PIXEL_RATIO = window.devicePixelRatio || 1;\nexport const VIEWPORT_RATIO = 0.98;\nexport const MINIMUM_APP_WIDTH = 600;\nexport const MINIMUM_OPTIMIZED_APP_WIDTH = 950;\nexport const TEXT_BREAKPOINT_WIDTH = 1800;\n","<template>\n <v-group>\n <v-rect\n v-if=\"isSelectionValid\"\n ref=\"boxSelection\"\n :config=\"config\"\n :stroke-scale-enabled=\"false\"\n @dragend=\"onChange\"\n @transformend=\"onChange\"\n />\n <v-transformer\n v-if=\"editable\"\n ref=\"boxTransformer\"\n :config=\"transformerConfig\"\n />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters, mapState, mapActions } from \"vuex\";\n\nexport default {\n props: {\n page: {\n required: true,\n type: Object,\n },\n editable: {\n required: false,\n type: Boolean,\n default: true,\n },\n },\n computed: {\n /**\n * Konva options of the selection rectangle, based on the\n * `selection` object.\n */\n config() {\n return {\n x: this.selection.start.x,\n y: this.selection.start.y,\n width: this.selection.end.x - this.selection.start.x,\n height: this.selection.end.y - this.selection.start.y,\n fill: this.isSelecting ? \"#7B61FFB3\" : \"transparent\",\n stroke: this.isSelecting ? \"transparent\" : \"#7B61FFB3\",\n strokeWidth: 1,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n name: \"boxSelection\",\n draggable: true,\n };\n },\n\n transformerConfig() {\n return {\n borderEnabled: false,\n rotateEnabled: false,\n ignoreStroke: true,\n keepRatio: false,\n anchorStroke: \"#7B61FF\",\n anchorSize: 6,\n };\n },\n ...mapState(\"selection\", [\n \"selection\",\n \"isSelecting\",\n \"elementSelected\",\n \"spanSelection\",\n ]),\n ...mapState(\"document\", [\"editAnnotation\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"scaledEntities\"]),\n ...mapGetters(\"selection\", [\"isSelectionValid\", \"entitiesOnSelection\"]),\n },\n watch: {\n isSelecting(isSelecting) {\n if (!isSelecting) {\n this.updateTransformer();\n this.handleSelection();\n }\n },\n },\n mounted() {\n if (!this.selection.custom) {\n // if annotation was selected, then add transformer\n this.updateTransformer();\n }\n },\n methods: {\n handleSelection() {\n const box = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: this.scaledEntities(\n this.entitiesOnSelection(box, this.page),\n this.page\n ),\n selection: box,\n });\n },\n updateTransformer() {\n // here we need to manually attach or detach Transformer node\n const transformer = this.$refs.boxTransformer;\n\n // maybe we're out of sync and the transformer is not available, just return\n if (!transformer) {\n return;\n }\n\n const transformerNode = transformer.getNode();\n const stage = transformerNode.getStage();\n let selectedNode;\n if (stage) {\n selectedNode = stage.findOne(\".boxSelection\");\n }\n\n // do nothing if selected node is already attached\n if (selectedNode === transformerNode.node()) {\n return;\n }\n\n if (selectedNode) {\n // attach to another node\n transformerNode.nodes([selectedNode]);\n } else {\n // remove transformer\n transformerNode.nodes([]);\n }\n\n transformerNode.getLayer().batchDraw();\n },\n\n /**\n * This method is used for both transforms and drags since it just\n * retrieves the rect's new attributes from the event and uses those\n * to set the new selection state.\n */\n onChange(event) {\n const { x, y, scaleX, scaleY, skewX, width, height } = event.target.attrs;\n const realWidth = width * scaleX;\n const realHeight = height * scaleY;\n let start;\n let end;\n\n // we need to figure out if there's skewing going on, to fix start/end points\n // (other cases appear to fix themselves automatically)\n if (skewX >= 0) {\n start = { x, y };\n end = {\n x: start.x + realWidth,\n y: start.y + realHeight,\n };\n } else {\n end = { x, y };\n start = { x: end.x - realWidth, y: end.y - realHeight };\n }\n\n this.moveSelection({ start, end });\n\n // reset node's everything after transform (we don't want to deal with that,\n // just with regular x/y/width/height)\n const node = this.$refs.boxSelection.getNode();\n node.skewX(0);\n node.skewY(0);\n node.rotation(0);\n node.scaleX(1);\n node.scaleY(1);\n\n this.handleSelection();\n },\n ...mapActions(\"selection\", [\"moveSelection\"]),\n },\n};\n</script>\n","import { render } from \"./BoxSelection.vue?vue&type=template&id=a0b37b56\"\nimport script from \"./BoxSelection.vue?vue&type=script&lang=js\"\nexport * from \"./BoxSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <v-group>\n <v-rect\n ref=\"spanSelection\"\n :config=\"config\"\n :stroke-scale-enabled=\"false\"\n @dragend=\"onChange\"\n @transformend=\"onChange\"\n />\n <v-transformer\n v-if=\"!isSelectionValid\"\n ref=\"spanTransformer\"\n :config=\"transformerConfig\"\n />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n props: {\n id: {\n required: true,\n type: Number,\n },\n page: {\n required: true,\n type: Object,\n },\n span: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n selection: {\n start: null,\n end: null,\n },\n box: {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n },\n };\n },\n computed: {\n /**\n * Konva options of the selection rectangle, based on the\n * `selection` object.\n */\n config() {\n const primaryColor = window\n .getComputedStyle(document.body)\n .getPropertyValue(\"--primary-color\");\n return {\n x: this.box.x,\n y: this.box.y,\n width: this.box.width,\n height: this.box.height,\n stroke: \"#7B61FFB3\",\n fill: `${primaryColor}77`,\n strokeWidth: 1,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n perfectDrawEnabled: false,\n name: `spanSelection_${this.id}`,\n draggable: true,\n };\n },\n transformerConfig() {\n return {\n borderEnabled: false,\n rotateEnabled: false,\n ignoreStroke: true,\n keepRatio: false,\n anchorStroke: \"#7B61FF\",\n anchorSize: 6,\n name: `spanTransformer_${this.id}`,\n };\n },\n ...mapState(\"document\", [\"editAnnotation\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"bboxToRect\", \"scaledEntities\"]),\n ...mapGetters(\"selection\", [\"entitiesOnSelection\", \"isSelectionValid\"]),\n },\n watch: {\n box() {\n this.updateTransformer();\n this.setSelection();\n },\n span() {\n this.box = this.bboxToRect(this.page, this.span);\n },\n },\n mounted() {\n this.box = this.bboxToRect(this.page, this.span);\n this.setSelection();\n this.$nextTick(() => {\n this.updateTransformer();\n });\n },\n methods: {\n setSelection() {\n this.selection = {\n start: {\n x: this.box.x,\n y: this.box.y,\n },\n end: {\n x: this.box.x + this.box.width,\n y: this.box.y + this.box.height,\n },\n };\n },\n startSelection(start) {\n this.selection.start = start;\n },\n\n moveSelection(points) {\n // only apply when we have a large enough selection, otherwise we risk counting misclicks\n if (this.selection) {\n const xDiff = Math.abs(this.selection.start.x - points.end.x);\n const yDiff = Math.abs(this.selection.start.y - points.end.y);\n if (xDiff > 5 && yDiff > 5) {\n const { start, end } = points;\n if (start) {\n this.selection.start = start;\n }\n if (end) {\n this.selection.end = end;\n }\n }\n }\n },\n\n endSelection(end) {\n let xDiff;\n let yDiff;\n\n if (end) {\n xDiff = Math.abs(this.selection.start.x - end.x);\n yDiff = Math.abs(this.selection.start.y - end.y);\n }\n\n // if \"end\" is not provided, start and end points are the same, or if we have a selection smaller than 5x5,\n // just reset\n if (\n !end ||\n (yDiff <= 5 && xDiff <= 5) ||\n (this.selection.start.x === end.x && this.selection.start.y == end.y)\n ) {\n this.selection.start = null;\n this.selection.end = null;\n } else {\n this.selection.start.x = this.selection.start.x - selectionPadding;\n this.selection.start.y = this.selection.start.y - selectionPadding;\n\n end.x = end.x + selectionPadding;\n end.y = end.y + selectionPadding;\n\n this.selection.end = end;\n }\n },\n handleSelection() {\n this.box = {\n x: this.selection.start.x,\n y: this.selection.start.y,\n width: this.selection.end.x - this.selection.start.x,\n height: this.selection.end.y - this.selection.start.y,\n };\n\n const box = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n\n this.$store.dispatch(\"selection/entitySelection\", {\n entities: this.scaledEntities(\n this.entitiesOnSelection(box, this.page),\n this.page\n ),\n selection: box,\n });\n },\n updateTransformer() {\n // here we need to manually attach or detach Transformer node\n const transformer = this.$refs.spanTransformer;\n\n // maybe we're out of sync and the transformer is not available, just return\n if (!transformer) {\n return;\n }\n\n const transformerNode = transformer.getNode();\n const stage = transformerNode.getStage();\n let selectedNode;\n if (stage) {\n selectedNode = stage.findOne(`.spanSelection_${this.id}`);\n }\n\n // do nothing if selected node is already attached\n if (selectedNode === transformerNode.node()) {\n return;\n }\n\n if (selectedNode) {\n // attach to another node\n transformerNode.nodes([selectedNode]);\n } else {\n // remove transformer\n transformerNode.nodes([]);\n }\n\n transformerNode.getLayer().batchDraw();\n },\n\n /**\n * This method is used for both transforms and drags since it just\n * retrieves the rect's new attributes from the event and uses those\n * to set the new selection state.\n */\n onChange(event) {\n const { x, y, scaleX, scaleY, skewX, width, height } = event.target.attrs;\n const realWidth = width * scaleX;\n const realHeight = height * scaleY;\n let start;\n let end;\n\n // we need to figure out if there's skewing going on, to fix start/end points\n // (other cases appear to fix themselves automatically)\n if (skewX >= 0) {\n start = { x, y };\n end = {\n x: start.x + realWidth,\n y: start.y + realHeight,\n };\n } else {\n end = { x, y };\n start = { x: end.x - realWidth, y: end.y - realHeight };\n }\n\n this.moveSelection({ start, end });\n\n // reset node's everything after transform (we don't want to deal with that,\n // just with regular x/y/width/height)\n const node = this.$refs.spanSelection.getNode();\n node.skewX(0);\n node.skewY(0);\n node.rotation(0);\n node.scaleX(1);\n node.scaleY(1);\n\n this.handleSelection();\n },\n },\n};\n</script>\n","import { render } from \"./SpanSelection.vue?vue&type=template&id=f493e30e\"\nimport script from \"./SpanSelection.vue?vue&type=script&lang=js\"\nexport * from \"./SpanSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <v-group>\n <v-rect ref=\"placeholderSelection\" :config=\"placeholderConfig\" />\n </v-group>\n</template>\n\n<script>\nimport { mapGetters } from \"vuex\";\nexport default {\n props: {\n span: {\n required: true,\n type: Object,\n },\n page: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n selection: {\n start: null,\n end: null,\n },\n };\n },\n computed: {\n placeholderConfig() {\n const box = this.bboxToRect(this.page, this.span);\n const primaryColor = window\n .getComputedStyle(document.body)\n .getPropertyValue(\"--primary-color\");\n return {\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n fill: \"transparent\",\n stroke: primaryColor,\n strokeWidth: 3,\n globalCompositeOperation: \"multiply\",\n shadowForStrokeEnabled: false,\n name: \"placeholderSelection\",\n draggable: false,\n };\n },\n ...mapGetters(\"display\", [\"bboxToRect\"]),\n },\n};\n</script>\n","import { render } from \"./PlaceholderSelection.vue?vue&type=template&id=b5101d9a\"\nimport script from \"./PlaceholderSelection.vue?vue&type=script&lang=js\"\nexport * from \"./PlaceholderSelection.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<!-- eslint-disable vue/no-v-html -->\n<template>\n <div\n class=\"annotation-popup\"\n :style=\"{\n left: `${left}px`,\n top: `${top}px`,\n height: `${heightOfPopup}px`,\n }\"\n >\n <div v-if=\"!editAnnotation\">\n <div v-if=\"spanLoading\" class=\"popup-input\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </div>\n <input\n v-else\n v-model=\"textFromEntities\"\n class=\"popup-input\"\n type=\"text\"\n :disabled=\"true\"\n />\n </div>\n <b-dropdown\n v-model=\"selectedSet\"\n :disabled=\"!textFromEntities\"\n aria-role=\"list\"\n :class=\"[\n 'annotation-dropdown',\n 'no-padding-bottom',\n 'no-padding-top',\n 'dropdown-full-width',\n setsList.length === 0 ? 'no-padding-top' : '',\n ]\"\n scrollable\n >\n <template #trigger>\n <b-button\n :class=\"[\n 'popup-input',\n selectedSet ? '' : 'not-selected',\n 'has-right-icon',\n ]\"\n type=\"is-text\"\n >\n <span class=\"input-text\">\n {{\n selectedSet\n ? `${selectedSet.label_set.name} ${\n selectedSet.id\n ? numberOfAnnotationSetGroup(selectedSet)\n : `${numberOfLabelSetGroup(selectedSet.label_set)} (${$t(\n \"new\"\n )})`\n }`\n : $t(\"select_annotation_set\")\n }}</span\n >\n <span class=\"caret-icon\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </span>\n </b-button>\n </template>\n <b-button\n type=\"is-ghost\"\n :class=\"['add-ann-set', 'dropdown-item', 'no-icon-margin']\"\n icon-left=\"plus\"\n @click=\"openAnnotationSetCreation\"\n >\n {{ $t(\"new_ann_set_title\") }}\n </b-button>\n <b-dropdown-item\n v-for=\"(set, index) in setsList\"\n :key=\"`${set.label_set.id}_${index}`\"\n aria-role=\"listitem\"\n :value=\"set\"\n >\n <span>{{\n `${set.label_set.name} ${\n set.id\n ? numberOfAnnotationSetGroup(set)\n : `${numberOfLabelSetGroup(set.label_set)} (${$t(\"new\")})`\n }`\n }}</span>\n </b-dropdown-item>\n </b-dropdown>\n <b-tooltip\n multilined\n :active=\"selectedSet && (!labels || labels.length === 0)\"\n size=\"is-large\"\n position=\"is-bottom\"\n class=\"bottom-aligned\"\n >\n <template #content>\n <div\n v-html=\"\n `${$t('no_labels_available')} ${\n showBranding ? $t('no_labels_available_link') : ''\n }`\n \"\n ></div>\n </template>\n <b-dropdown\n v-model=\"selectedLabel\"\n aria-role=\"list\"\n :disabled=\"!textFromEntities || !labels || labels.length === 0\"\n scrollable\n class=\"label-dropdown annotation-dropdown dropdown-full-width\"\n >\n <template #trigger>\n <b-button\n :class=\"[\n 'popup-input',\n selectedLabel ? '' : 'not-selected',\n 'has-right-icon',\n ]\"\n type=\"is-text\"\n >\n <span class=\"input-text\">{{\n selectedLabel\n ? selectedLabel.name\n : labels && labels.length === 0\n ? $t(\"no_labels_to_choose\")\n : $t(\"select_label\")\n }}</span>\n <span class=\"caret-icon\">\n <b-icon icon=\"angle-down\" size=\"is-small\" class=\"caret\" />\n </span>\n </b-button>\n </template>\n <b-dropdown-item\n v-for=\"label in labels\"\n :key=\"label.id\"\n aria-role=\"listitem\"\n :value=\"label\"\n >\n <span>{{ label.name }}</span>\n </b-dropdown-item>\n </b-dropdown>\n </b-tooltip>\n <div class=\"annotation-buttons\">\n <b-button\n type=\"is-text\"\n class=\"cancel-button popup-button primary-button\"\n :label=\"$t('cancel')\"\n :disabled=\"loading\"\n @click.prevent=\"close\"\n />\n <b-button\n type=\"is-primary\"\n class=\"popup-button primary-button\"\n :label=\"$t('save')\"\n :disabled=\"loading || !spanSelection || !selectedLabel\"\n @click.prevent=\"save\"\n />\n </div>\n </div>\n</template>\n<script>\n/**\n * This component is used to show a popup\n * for creating a new annotation.\n */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n props: {\n spans: {\n required: true,\n type: Array,\n },\n containerWidth: {\n type: Number,\n required: true,\n },\n containerHeight: {\n type: Number,\n required: true,\n },\n page: {\n required: true,\n type: Object,\n },\n },\n data() {\n return {\n heightOfPopup: 192,\n margin: 12,\n widthOfPopup: 205,\n selectedLabel: null,\n selectedSet: null,\n labels: null,\n loading: false,\n isAnnSetModalShowing: false,\n setsList: [],\n };\n },\n computed: {\n ...mapState(\"document\", [\"annotationSets\", \"documentId\", \"editAnnotation\"]),\n ...mapGetters(\"document\", [\n \"numberOfAnnotationSetGroup\",\n \"numberOfLabelSetGroup\",\n \"labelsFilteredForAnnotationCreation\",\n ]),\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"display\", [\"clientToBbox\", \"bboxToRect\"]),\n ...mapState(\"selection\", [\"spanSelection\", \"selection\", \"spanLoading\"]),\n top() {\n if (this.selection && this.selection.end) {\n const top = this.selection.end.y + this.margin;\n //check if the popup will not go off the container on the top\n return top + this.heightOfPopup < this.containerHeight\n ? top\n : this.selection.end.y - this.heightOfPopup;\n } else {\n const normalizedSpan = this.bboxToRect(this.page, this.spans[0]);\n const top = normalizedSpan.y - this.heightOfPopup; // subtract the height of the popup plus some margin\n\n //check if the popup will not go off the container on the top\n return normalizedSpan.y > this.heightOfPopup\n ? top\n : normalizedSpan.y + normalizedSpan.height + this.margin;\n }\n },\n left() {\n if (this.selection && this.selection.start && this.selection.end) {\n const left = this.selection.start.x;\n //check if the popup will not go off the container on the right\n return left + this.widthOfPopup < this.containerWidth\n ? left\n : this.containerWidth - this.widthOfPopup;\n } else {\n const normalizedSpan = this.bboxToRect(this.page, this.spans[0]);\n const left =\n normalizedSpan.x + normalizedSpan.width / 2 - this.widthOfPopup / 2; // add the entity half width to be centered and then subtract half the width of the popup\n\n //check if the popup will not go off the container\n if (left + this.widthOfPopup > this.containerWidth) {\n // on the right side\n return this.containerWidth - this.widthOfPopup;\n } else {\n // on the left side\n return left > 0 ? left : 0;\n }\n }\n },\n textFromEntities() {\n let text = \"\";\n this.spans.forEach((span) => {\n text = `${text} ${span.offset_string}`;\n });\n\n return text.trim();\n },\n },\n watch: {\n selectedSet(newValue, oldValue) {\n this.selectedLabel = null;\n this.labels = this.labelsFilteredForAnnotationCreation(newValue);\n if (oldValue === null && this.editAnnotation) {\n this.selectedLabel = this.editAnnotation.label;\n } else if (this.labels.length > 0) {\n this.selectedLabel = this.labels[0];\n }\n },\n },\n mounted() {\n this.setsList = this.orderedSetList([...this.annotationSets]);\n\n if (this.editAnnotation) {\n this.heightOfPopup = 142;\n this.selectedSet = this.editAnnotation.annotationSet;\n } else if (this.setsList.length === 1) {\n this.selectedSet = this.setsList[0];\n }\n\n setTimeout(() => {\n // prevent click propagation when opening the popup\n document.body.addEventListener(\"click\", this.clickOutside);\n }, 200);\n },\n unmounted() {\n document.body.removeEventListener(\"click\", this.clickOutside);\n },\n methods: {\n orderedSetList(setsList) {\n setsList.sort((a, b) => {\n const nameA = a.label_set.name;\n const nameB = b.label_set.name;\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n\n // names must be equal\n return 0;\n });\n return setsList;\n },\n close() {\n if (this.editAnnotation) {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n }\n this.$store.dispatch(\"selection/disableSelection\");\n this.$emit(\"close\");\n },\n save() {\n if (this.editAnnotation) {\n this.loading = true;\n this.$store.dispatch(\"document/setEditAnnotation\", {\n id: this.editAnnotation.id,\n index: this.editAnnotation.index,\n label: this.selectedLabel,\n labelSet: this.selectedSet.label_set,\n annotationSet: this.selectedSet,\n pageNumber: this.editAnnotation.pageNumber,\n });\n\n document.getElementById(\"save-ann\").click();\n\n return;\n } else {\n this.loading = true;\n\n let selection_bbox = null;\n\n if (this.selection && this.selection.start && this.selection.end) {\n selection_bbox = this.clientToBbox(\n this.page,\n this.selection.start,\n this.selection.end\n );\n }\n\n const annotationToCreate = {\n document: this.documentId,\n span: this.spans,\n label: this.selectedLabel.id,\n is_correct: true,\n revised: false,\n };\n\n if (selection_bbox) {\n annotationToCreate.selection_bbox = selection_bbox;\n }\n\n if (this.selectedSet.id) {\n annotationToCreate.annotation_set = this.selectedSet.id;\n } else {\n annotationToCreate.label_set = this.selectedSet.label_set.id;\n }\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_creating_annotation\"),\n });\n })\n .finally(() => {\n this.close();\n this.loading = false;\n });\n }\n },\n chooseLabelSet(labelSet) {\n // check if there's already a new entry for that label set to be created\n const existsIndex = this.setsList.findIndex((set) => {\n return set.id === null && set.label_set.id === labelSet.id;\n });\n\n const newSet = {\n label_set: labelSet,\n labels: labelSet.labels,\n id: null,\n };\n if (existsIndex >= 0) {\n this.setsList[existsIndex] = newSet;\n } else {\n this.setsList.unshift(newSet);\n }\n this.selectedSet = newSet;\n },\n openAnnotationSetCreation() {\n this.$store.dispatch(\"display/showChooseLabelSetModal\", {\n show: true,\n finish: this.chooseLabelSet,\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/new_annotation.scss\"></style>\n","import { render } from \"./AnnotationPopup.vue?vue&type=template&id=60c53a7e&scoped=true\"\nimport script from \"./AnnotationPopup.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationPopup.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/new_annotation.scss?vue&type=style&index=0&id=60c53a7e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-60c53a7e\"]])\n\nexport default __exports__","<template>\n <div\n class=\"ann-set-table-header\"\n :style=\"{ left: `${coordinates.x}px`, top: `${coordinates.y}px` }\"\n >\n <b-dropdown\n aria-role=\"list\"\n class=\"ann-set-table-header-dropdown\"\n position=\"is-top-right\"\n scrollable\n >\n <template #trigger>\n <span class=\"ann-set-label-set-name\">{{ labelSetName }}</span>\n <SettingsIcon />\n </template>\n <b-dropdown-item\n aria-role=\"listitem\"\n class=\"delete-action\"\n @click=\"handleDelete()\"\n >\n <span>{{ $t(\"delete_table\") }}</span></b-dropdown-item\n >\n </b-dropdown>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport SettingsIcon from \"../../assets/images/SettingsIcon\";\n\nexport default {\n name: \"AnnSetTableOptions\",\n components: {\n SettingsIcon,\n },\n props: {\n page: {\n type: Object,\n required: true,\n },\n },\n computed: {\n ...mapGetters(\"document\", [\n \"annotationSetsInTable\",\n \"annotationsInAnnotationsSets\",\n ]),\n ...mapGetters(\"display\", [\"bboxToPoint\"]),\n ...mapState(\"display\", [\"showAnnSetTable\"]),\n labelSetName() {\n return this.showAnnSetTable[0].label_set.name;\n },\n coordinates() {\n let xFinal = 0;\n let yFinal = 0;\n const paddingTop = 40;\n\n this.showAnnSetTable.forEach((annotationSet) => {\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n annotation.span.forEach((span) => {\n const { x, y } = this.bboxToPoint(this.page, {\n x: span.x0,\n y: span.y0,\n });\n if (xFinal === 0 || x < xFinal) {\n xFinal = x;\n }\n if (yFinal === 0 || y < yFinal) {\n yFinal = y - paddingTop;\n }\n });\n });\n });\n }\n });\n return { x: xFinal, y: yFinal };\n },\n },\n methods: {\n handleDelete() {\n const annotationsToDelete = this.annotationsInAnnotationsSets(\n this.showAnnSetTable\n );\n\n for (let i = 0; i < annotationsToDelete.length; i++) {\n const annotationToDelete = annotationsToDelete[i];\n this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: annotationToDelete.id,\n annotationSet: null, // TODO: test if annotation set should be added if the feature is available again\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n this.$store.dispatch(\"display/showAnnSetTable\", null);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/ann_set_table_options.scss\"\n></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M13.361 8.4396C13.2541 8.31795 13.1952 8.16154 13.1952 7.9996C13.1952 7.83767 13.2541 7.68126 13.361 7.55961L14.2143 6.5996C14.3084 6.49472 14.3668 6.36274 14.3811 6.22261C14.3955 6.08248 14.3651 5.9414 14.2943 5.8196L12.961 3.51294C12.8909 3.39129 12.7843 3.29486 12.6562 3.2374C12.5281 3.17993 12.3851 3.16438 12.2477 3.19294L10.9943 3.44627C10.8349 3.47922 10.6688 3.45266 10.5276 3.3716C10.3864 3.29055 10.2797 3.16059 10.2277 3.00627L9.821 1.78627C9.77627 1.65386 9.69107 1.53885 9.57742 1.4575C9.46377 1.37615 9.32743 1.33258 9.18766 1.33294H6.521C6.37562 1.32535 6.23175 1.36556 6.11138 1.44741C5.991 1.52927 5.90072 1.64828 5.85433 1.78627L5.481 3.00627C5.429 3.16059 5.32231 3.29055 5.18107 3.3716C5.03983 3.45266 4.87381 3.47922 4.71433 3.44627L3.42767 3.19294C3.29737 3.17453 3.16453 3.19509 3.0459 3.25203C2.92726 3.30898 2.82813 3.39976 2.761 3.51294L1.42767 5.8196C1.35511 5.94004 1.32248 6.08033 1.33445 6.22042C1.34643 6.36051 1.40239 6.49323 1.49433 6.5996L2.341 7.55961C2.44788 7.68126 2.50682 7.83767 2.50682 7.9996C2.50682 8.16154 2.44788 8.31795 2.341 8.4396L1.49433 9.39961C1.40239 9.50598 1.34643 9.6387 1.33445 9.77879C1.32248 9.91888 1.35511 10.0592 1.42767 10.1796L2.761 12.4863C2.83106 12.6079 2.93774 12.7044 3.06583 12.7618C3.19392 12.8193 3.33688 12.8348 3.47433 12.8063L4.72766 12.5529C4.88714 12.52 5.05317 12.5465 5.19441 12.6276C5.33565 12.7087 5.44233 12.8386 5.49433 12.9929L5.901 14.2129C5.94738 14.3509 6.03766 14.4699 6.15804 14.5518C6.27842 14.6337 6.42229 14.6739 6.56766 14.6663H9.23433C9.37409 14.6666 9.51044 14.6231 9.62408 14.5417C9.73773 14.4604 9.82294 14.3454 9.86766 14.2129L10.2743 12.9929C10.3263 12.8386 10.433 12.7087 10.5743 12.6276C10.7155 12.5465 10.8815 12.52 11.041 12.5529L12.2943 12.8063C12.4318 12.8348 12.5747 12.8193 12.7028 12.7618C12.8309 12.7044 12.9376 12.6079 13.0077 12.4863L14.341 10.1796C14.4118 10.0578 14.4422 9.91673 14.4278 9.7766C14.4134 9.63647 14.355 9.50449 14.261 9.39961L13.361 8.4396ZM12.3677 9.33294L12.901 9.93294L12.0477 11.4129L11.261 11.2529C10.7809 11.1548 10.2814 11.2364 9.85739 11.4821C9.43341 11.7279 9.11443 12.1208 8.961 12.5863L8.70767 13.3329H7.001L6.761 12.5729C6.60757 12.1075 6.28859 11.7146 5.8646 11.4688C5.44062 11.223 4.94115 11.1415 4.461 11.2396L3.67433 11.3996L2.80767 9.92627L3.341 9.32627C3.66897 8.95959 3.85029 8.48489 3.85029 7.99294C3.85029 7.50098 3.66897 7.02629 3.341 6.6596L2.80767 6.0596L3.661 4.59294L4.44767 4.75294C4.92781 4.85109 5.42728 4.76953 5.85127 4.52374C6.27525 4.27795 6.59423 3.88504 6.74766 3.4196L7.001 2.66627H8.70767L8.961 3.42627C9.11443 3.89171 9.43341 4.28462 9.85739 4.5304C10.2814 4.77619 10.7809 4.85775 11.261 4.7596L12.0477 4.5996L12.901 6.0796L12.3677 6.67961C12.0434 7.04545 11.8643 7.51739 11.8643 8.00627C11.8643 8.49515 12.0434 8.9671 12.3677 9.33294ZM7.85433 5.33294C7.32691 5.33294 6.81134 5.48934 6.37281 5.78235C5.93428 6.07537 5.59249 6.49185 5.39065 6.97912C5.18882 7.46638 5.13601 8.00256 5.2389 8.51985C5.3418 9.03713 5.59577 9.51228 5.96871 9.88522C6.34165 10.2582 6.81681 10.5121 7.33409 10.615C7.85137 10.7179 8.38755 10.6651 8.87482 10.4633C9.36209 10.2615 9.77857 9.91966 10.0716 9.48113C10.3646 9.04259 10.521 8.52702 10.521 7.9996C10.521 7.29236 10.24 6.61408 9.73995 6.11399C9.23985 5.61389 8.56158 5.33294 7.85433 5.33294ZM7.85433 9.33294C7.59062 9.33294 7.33284 9.25474 7.11357 9.10823C6.89431 8.96172 6.72341 8.75348 6.62249 8.50985C6.52158 8.26621 6.49517 7.99813 6.54662 7.73948C6.59807 7.48084 6.72505 7.24327 6.91152 7.0568C7.09799 6.87033 7.33557 6.74334 7.59421 6.69189C7.85285 6.64044 8.12094 6.66685 8.36458 6.76777C8.60821 6.86868 8.81645 7.03958 8.96296 7.25884C9.10947 7.47811 9.18766 7.7359 9.18766 7.9996C9.18766 8.35323 9.04719 8.69237 8.79714 8.94241C8.54709 9.19246 8.20795 9.33294 7.85433 9.33294Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./SettingsIcon.vue?vue&type=template&id=46e4b628\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnSetTableOptions.vue?vue&type=template&id=0f7fbff8&scoped=true\"\nimport script from \"./AnnSetTableOptions.vue?vue&type=script&lang=js\"\nexport * from \"./AnnSetTableOptions.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/ann_set_table_options.scss?vue&type=style&index=0&id=0f7fbff8&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f7fbff8\"]])\n\nexport default __exports__","import { render } from \"./DocumentPage.vue?vue&type=template&id=6c500392&scoped=true\"\nimport script from \"./DocumentPage.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentPage.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_page.scss?vue&type=style&index=0&id=6c500392&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6c500392\"]])\n\nexport default __exports__","<template>\n <div :style=\"canvasStyle\">\n <b-skeleton\n :width=\"`${scaledViewport.width}px`\"\n :height=\"`${scaledViewport.height}px`\"\n />\n </div>\n</template>\n\n<script>\n/**\n * This component is used to mimick an actual page's height/width to\n * act as a placeholder (mainly for scrolling) instead of rendering the\n * full page canvas when it's not needed (unfocused pages).\n */\n\nimport { mapState } from \"vuex\";\nimport { PIXEL_RATIO } from \"../../constants\";\n\nexport default {\n props: {\n width: {\n default: 0,\n type: Number,\n },\n height: {\n default: 0,\n type: Number,\n },\n },\n computed: {\n ...mapState(\"display\", [\"scale\"]),\n actualSizeViewport() {\n return {\n width: this.width * this.scale,\n height: this.height * this.scale,\n };\n },\n\n scaledViewport() {\n const { width: actualSizeWidth, height: actualSizeHeight } =\n this.actualSizeViewport;\n const [pixelWidth, pixelHeight] = [actualSizeWidth, actualSizeHeight].map(\n (dim) => Math.ceil(dim / PIXEL_RATIO)\n );\n return { width: pixelWidth, height: pixelHeight };\n },\n\n canvasStyle() {\n const { width, height } = this.scaledViewport;\n return `width: ${width}px; height: ${height}px; margin: 0 auto`;\n },\n },\n};\n</script>\n","import { render } from \"./DummyPage.vue?vue&type=template&id=4b39794c\"\nimport script from \"./DummyPage.vue?vue&type=script&lang=js\"\nexport * from \"./DummyPage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div id=\"scrolling-document\">\n <div ref=\"scrollingDocument\" class=\"scrolling-document\">\n <transition :name=\"searchEnabled ? 'slide-down' : 'slide-up'\">\n <SearchBar v-if=\"searchEnabled\" />\n </transition>\n <div\n v-if=\"\n selectedDocument && scale && !loading && !recalculatingAnnotations\n \"\n >\n <ScrollingPage\n v-for=\"page in editMode ? pagesForPostprocess : pages\"\n :key=\"page.number\"\n ref=\"scrollingPage\"\n :page=\"page\"\n :client-height=\"clientHeight\"\n :scroll-top=\"scrollTop\"\n class=\"scrolling-page\"\n @page-jump=\"onPageJump\"\n />\n </div>\n\n <div v-else class=\"loading-page\">\n <b-skeleton width=\"100%\" height=\"1000px\" />\n </div>\n </div>\n <Toolbar v-if=\"showToolbar\" />\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport scroll from \"../../directives/scroll\";\nimport ScrollingPage from \"./ScrollingPage\";\nimport Toolbar from \"./DocumentToolbar\";\nimport SearchBar from \"./SearchBar\";\n\nexport default {\n components: {\n ScrollingPage,\n Toolbar,\n SearchBar,\n },\n directives: {\n scroll,\n },\n\n data() {\n return {\n scrollTop: 0,\n clientHeight: 0,\n scrollTimeout: null,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"loading\",\n \"annotationSets\",\n ]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"documentPagesListForEditMode\",\n \"pagesForPostprocess\",\n ]),\n ...mapState(\"display\", [\n \"scale\",\n \"pageChangedFromThumbnail\",\n \"currentPage\",\n \"searchEnabled\",\n ]),\n ...mapGetters(\"display\", [\"visiblePageRange\"]),\n\n pages() {\n if (this.selectedDocument) {\n return this.selectedDocument.pages;\n } else {\n return [];\n }\n },\n showToolbar() {\n return !this.loading && this.pages.length > 0 && this.scale;\n },\n },\n watch: {\n loading() {\n this.scrollTop = 0;\n },\n },\n mounted() {\n this.$refs.scrollingDocument.addEventListener(\"scroll\", this.handleScroll);\n },\n\n methods: {\n updateScrollBounds() {\n const { scrollTop, clientHeight } = this.$refs.scrollingDocument;\n this.scrollTop = scrollTop;\n this.clientHeight = clientHeight;\n },\n /**\n * Scrolls the ScrollingDocument to the offset specified by scrollTop & scrollLeft (if zoomed in)\n * (i.e., another page).\n */\n onPageJump(scrollTop, scrollLeft) {\n const scrollY = scrollTop - (this.$refs.scrollingDocument.offsetTop + 4); // + 4 due to margin between pages\n const scrollX = scrollLeft - this.$refs.scrollingDocument.offsetLeft - 4; // - 4 to add more space before the entity\n\n this.$refs.scrollingDocument.scroll(scrollX, scrollY);\n },\n handleScroll() {\n this.updateScrollBounds();\n if (this.pages.length === 1) return;\n\n this.isScrolling = true;\n\n clearTimeout(this.scrollTimeout);\n\n this.scrollTimeout = setTimeout(() => {\n this.isScrolling = false;\n\n if (\n this.pageChangedFromThumbnail &&\n this.visiblePageRange[1] === this.currentPage\n ) {\n this.$store.dispatch(\"display/setPageChangedFromThumbnail\", false);\n }\n }, 300);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/scrolling_document.scss\"\n></style>\n","function inserted(el, binding) {\n const callback = binding.value;\n if (binding.modifiers.immediate) {\n callback();\n }\n const throttledScroll = throttle(callback, 300);\n el.addEventListener(\"scroll\", throttledScroll, true);\n}\n\nfunction throttle(callback, limit) {\n var waiting = false; // Initially, we're not waiting\n return function() {\n // We return a throttled function\n if (!waiting) {\n // If we're not waiting\n callback.apply(this, arguments); // Execute users function\n waiting = true; // Prevent future invocations\n setTimeout(function() {\n // After a period of time\n waiting = false; // And allow future invocations\n }, limit);\n }\n };\n}\n\nexport default {\n inserted\n};\n","<template>\n <div v-observe-visibility=\"visibilityChanged\">\n <DummyPage\n v-if=\"!loadedPage\"\n :width=\"page.size[0]\"\n :height=\"page.size[1]\"\n />\n <DocumentPage v-else :page=\"loadedPage\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport DocumentPage from \"../DocumentPage/DocumentPage\";\nimport DummyPage from \"../DocumentPage/DummyPage\";\n\nexport default {\n name: \"ScrollingPage\",\n\n components: {\n DocumentPage,\n DummyPage,\n },\n\n props: {\n page: {\n type: Object,\n required: true,\n },\n scrollTop: {\n type: Number,\n required: true,\n },\n clientHeight: {\n type: Number,\n required: true,\n },\n },\n\n data() {\n return {\n elementTop: 0,\n elementHeight: 0,\n previousFocusedAnnotation: null,\n previousY: null,\n pageBeingLoaded: false,\n isScrolling: false,\n };\n },\n\n computed: {\n ...mapState(\"display\", [\"pageChangedFromThumbnail\", \"currentPage\"]),\n ...mapState(\"document\", [\n \"pages\",\n \"documentAnnotationSelected\",\n \"loading\",\n \"annotationId\",\n ]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"display\", [\"visiblePageRange\", \"bboxToRect\"]),\n ...mapGetters(\"document\", [\"scrollDocumentToAnnotation\", \"annotationById\"]),\n\n loadedPage() {\n if (this.editMode) {\n return this.page;\n }\n let loadedPage = null;\n if (this.page && this.pages) {\n loadedPage = this.pages.find((p) => p.number === this.page.number);\n }\n if (!loadedPage && this.pageInVisibleRange(this.page)) {\n if (!this.pageBeingLoaded) {\n this.loadPage();\n }\n }\n return loadedPage;\n },\n\n isElementFocused() {\n const { elementTop, bottom, elementHeight, scrollTop, clientHeight } =\n this;\n if (!elementHeight) return;\n\n const halfHeight = elementHeight / 2;\n const halfScreen = clientHeight / 2;\n const delta = elementHeight >= halfScreen ? halfScreen : halfHeight;\n const threshold = scrollTop + delta;\n\n return elementTop < threshold && bottom >= threshold;\n },\n\n bottom() {\n return this.elementTop + this.elementHeight;\n },\n\n scrollBottom() {\n return this.scrollTop + this.clientHeight;\n },\n\n currentSearchResultForPage() {\n return this.$store.getters[\"display/currentSearchResultForPage\"](\n this.page.number\n );\n },\n spanForAnnotationSelected() {\n if (this.annotationId) {\n const annotation = this.annotationById(this.annotationId);\n if (\n annotation &&\n annotation.span &&\n annotation.span.length > 0 &&\n annotation.span[0].page_index + 1 === this.page.number\n ) {\n return annotation.span[0];\n }\n }\n return null;\n },\n },\n\n watch: {\n scrollTop: \"updateElementBounds\",\n clientHeight: \"updateElementBounds\",\n annotationId() {\n this.scrollDocumentToPosition(this.spanForAnnotationSelected);\n },\n\n /**\n * Scroll to the focused annotation if it changes and it's on this page.\n */\n scrollDocumentToAnnotation(isToScroll) {\n if (\n isToScroll &&\n this.documentAnnotationSelected.page === this.page.number\n ) {\n this.scrollDocumentToPosition(this.documentAnnotationSelected.span);\n }\n },\n isElementFocused(focused) {\n if (!this.loading && focused && !this.pageChangedFromThumbnail) {\n this.$store.dispatch(\"display/updateCurrentPage\", this.page.number);\n }\n },\n currentPage(number) {\n if (this.page.number === number && !this.isElementFocused) {\n this.$emit(\"page-jump\", this.elementTop, 0);\n }\n },\n /**\n * Scroll to the search result if the current one changes and it's on this page.\n */\n currentSearchResultForPage(res) {\n // skip page jump if the result is null (the current search result is not on this page)\n if (!res) {\n return;\n }\n const y = this.getYForBbox(res); // y of the search result\n const totalY = y + this.elementTop; // y of search result + page top\n // skip page jump if the search result is already visible on this page\n if (totalY < this.scrollBottom && totalY > this.scrollTop) {\n return;\n }\n this.$nextTick(function () {\n this.scrollTo(y);\n });\n },\n },\n mounted() {\n this.updateElementBounds();\n this.scrollDocumentToPosition(this.spanForAnnotationSelected);\n },\n\n methods: {\n loadPage() {\n this.pageBeingLoaded = true;\n this.$store\n .dispatch(\"document/fetchDocumentPage\", this.page.number)\n .then(() => {\n this.pageBeingLoaded = false;\n });\n },\n visibilityChanged(isVisible) {\n if (isVisible && !this.loadedPage && !this.pageBeingLoaded) {\n this.loadPage();\n }\n if (!isVisible && this.loadedPage) {\n this.$store.dispatch(\"document/unloadDocumentPage\", this.page.number);\n }\n },\n pageInVisibleRange(page) {\n return (\n this.currentPage === page.number ||\n this.visiblePageRange.includes(page.number)\n );\n },\n scrollDocumentToPosition(span) {\n if (span) {\n // We wait for the page to be focused before actually scrolling\n // to the focused annotation.\n this.$nextTick(() => {\n // Scroll to the annotation\n this.scrollTo(\n this.getYForBbox(span) - 100, // offset for edit annotation popup\n this.getXForBbox(span)\n );\n });\n }\n },\n updateElementBounds() {\n const { offsetTop, offsetHeight } = this.$el;\n this.elementTop = offsetTop;\n this.elementHeight = offsetHeight;\n },\n\n /**\n * Calculate the y-position of this bbox on the page\n * from its top, the scale and the image scale (calculated\n * from the page object).\n */\n getYForBbox(bbox) {\n return this.bboxToRect(this.page, bbox).y;\n },\n\n getXForBbox(bbox) {\n return this.bboxToRect(this.page, bbox).x;\n },\n\n /**\n * Scroll to a relative position in the page. It gets added\n * the page's element top and a padding margin.\n */\n scrollTo(y, x) {\n this.$emit(\"page-jump\", this.elementTop + y - 80, x);\n },\n },\n};\n</script>\n","import { render } from \"./ScrollingPage.vue?vue&type=template&id=7036ed76\"\nimport script from \"./ScrollingPage.vue?vue&type=script&lang=js\"\nexport * from \"./ScrollingPage.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div id=\"toolbar-container\">\n <div :class=\"['toolbar', recalculatingAnnotations && 'hidden']\">\n <b-tooltip\n :label=\"tooltipInfo\"\n multilined\n :active=\"editModeDisabled\"\n size=\"is-large\"\n class=\"top-aligned\"\n >\n <div\n v-if=\"isEditModeAvailable\"\n id=\"edit-mode-button\"\n :class=\"[\n 'icons icons-left',\n editModeDisabled && 'edit-mode-disabled',\n ]\"\n @click=\"handleEdit\"\n >\n <div class=\"edit-icon icon\">\n <EditDocIcon />\n </div>\n <span class=\"edit-text\">{{ $t(\"edit\") }}</span>\n </div>\n </b-tooltip>\n <div v-if=\"isEditModeAvailable\" class=\"toolbar-divider\" />\n <div\n v-if=\"!publicView && !editMode\"\n class=\"search-document icons\"\n @click=\"toggleSearch\"\n >\n <b-icon icon=\"search\" size=\"is-small\" class=\"search-icon\" />\n </div>\n\n <div v-if=\"!publicView\" class=\"download-file icons\">\n <b-dropdown aria-role=\"list\" position=\"is-top-right\" scrollable>\n <template #trigger>\n <b-icon icon=\"download\" size=\"is-small\" class=\"download-file\" />\n </template>\n\n <b-dropdown-item\n class=\"original-file\"\n aria-role=\"listitem\"\n @click=\"handleDownloadFile()\"\n >{{ $t(\"original_file\") }}</b-dropdown-item\n >\n <b-dropdown-item\n class=\"ocr-file\"\n aria-role=\"listitem\"\n @click=\"handleDownloadFile('ocr')\"\n >{{ $t(\"pdf_file\") }}</b-dropdown-item\n >\n </b-dropdown>\n </div>\n\n <div v-if=\"!publicView\" class=\"toolbar-divider\" />\n\n <div class=\"icons icons-right\">\n <div\n :class=\"[\n 'fit-zoom',\n 'icon',\n currentPercentage === 50 && 'zoom-disabled',\n ]\"\n @click.prevent.stop=\"fitAuto\"\n >\n <FitZoomIcon />\n </div>\n <div\n :class=\"['zoom-in icon', isZoomInExceeding && 'zoom-disabled']\"\n @click.prevent.stop=\"zoomIn\"\n >\n <PlusIcon />\n </div>\n <div\n :class=\"['zoom-out icon', isZoomOutExceeding && 'zoom-disabled']\"\n @click.prevent.stop=\"zoomOut\"\n >\n <MinusIcon />\n </div>\n <div id=\"zoom-percentage\" class=\"percentage\">\n {{ `${currentPercentage}%` }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapActions, mapState, mapGetters } from \"vuex\";\nimport FitZoomIcon from \"../../assets/images/FitZoomIcon\";\nimport PlusIcon from \"../../assets/images/PlusIcon\";\nimport MinusIcon from \"../../assets/images/MinusIcon\";\nimport EditDocIcon from \"../../assets/images/EditDocIcon\";\nimport api from \"../../api\";\n\nexport default {\n name: \"DocumentToolbar\",\n components: {\n FitZoomIcon,\n PlusIcon,\n MinusIcon,\n EditDocIcon,\n },\n data() {\n return {\n currentPercentage: 100,\n fitWidthScale: 1, // baseline for 100%\n maxPercentage: 500,\n defaultPercentage: 0.25,\n fitPercentage: 0.5,\n toolbarModalOpen: true,\n editModeDisabled: false,\n tooltipInfo: null,\n };\n },\n computed: {\n ...mapState(\"display\", [\"scale\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapGetters(\"edit\", [\"isEditModeAvailable\"]),\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"recalculatingAnnotations\",\n \"publicView\",\n ]),\n ...mapGetters(\"document\", [\"documentCannotBeEdited\"]),\n isZoomInExceeding() {\n return this.currentPercentage === this.maxPercentage;\n },\n isZoomOutExceeding() {\n return this.currentPercentage === this.defaultPercentage * 100;\n },\n },\n watch: {\n selectedDocument(newValue) {\n if (this.documentCannotBeEdited(newValue)) {\n this.editModeDisabled = true;\n }\n },\n scale(newScale) {\n if (this.fitWidthScale > 0) {\n this.currentPercentage = Math.round((newScale / this.fitWidthScale) * 100);\n } else {\n this.currentPercentage = Math.round(newScale * 100);\n }\n },\n },\n mounted() {\n if (this.selectedDocument) {\n if (this.documentCannotBeEdited(this.selectedDocument)) {\n this.editModeDisabled = true;\n }\n }\n },\n updated() {\n if (this.selectedDocument.is_reviewed) {\n this.tooltipInfo = this.$t(\"document_reviewed\");\n } else {\n this.tooltipInfo = this.$t(\"edit_not_available\");\n }\n },\n methods: {\n ...mapActions(\"display\", [\"toggleSearch\"]),\n handleEdit() {\n if (this.editModeDisabled) return;\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"edit/enableEditMode\");\n },\n zoomIn() {\n if (this.currentPercentage === this.maxPercentage) return;\n\n // exit edit mode of Annotation if changing zoom during editing\n this.cancelAnnotationEditMode();\n this.currentPercentage += this.defaultPercentage * 100;\n this.updateScale(this.scale + this.defaultPercentage);\n },\n zoomOut() {\n if (this.currentPercentage === this.defaultPercentage * 100) {\n return;\n }\n\n // exit edit mode of Annotation if changing zoom during editing\n this.cancelAnnotationEditMode();\n\n this.currentPercentage -= this.defaultPercentage * 100;\n this.updateScale(this.scale - this.defaultPercentage);\n },\n fitAuto() {\n this.cancelAnnotationEditMode();\n this.$store.dispatch(\"display/updateFit\", \"all\").then(() => {\n this.$nextTick(() => {\n this.fitWidthScale = this.scale;\n this.currentPercentage = 100;\n });\n });\n },\n updateScale(scale) {\n this.$store.dispatch(\"display/updateFit\", \"custom\").then(() => {\n this.$store.dispatch(\"display/updateScale\", { scale });\n });\n },\n handleDownloadFile(fileType) {\n let fileUrl;\n // get the file name without the extension\n let fileName = this.selectedDocument.data_file_name;\n\n if (fileType === \"ocr\") {\n fileUrl = this.selectedDocument.file_url;\n fileName = `${fileType}_${fileName}`;\n } else {\n fileUrl = `/doc/show-original/${this.selectedDocument.id}/`;\n }\n\n // Automatically download original or ocr files\n return api\n .makeFileRequest(fileUrl)\n .then((myBlob) => {\n const url = URL.createObjectURL(myBlob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.setAttribute(\"download\", fileName);\n link.click();\n URL.revokeObjectURL(link.href);\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_downloading_file\"),\n });\n console.log(error);\n });\n },\n cancelAnnotationEditMode() {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_toolbar.scss\"></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M2.66683 9.99935C2.29864 9.99935 2.00016 9.70087 2.00016 9.33268C2.00016 8.96449 2.29864 8.66602 2.66683 8.66602H6.66683C7.03502 8.66602 7.3335 8.96449 7.3335 9.33268V13.3327C7.3335 13.7009 7.03502 13.9994 6.66683 13.9994C6.29864 13.9994 6.00016 13.7009 6.00016 13.3327V10.9422L2.47157 14.4708C2.21122 14.7311 1.78911 14.7311 1.52876 14.4708C1.26841 14.2104 1.26841 13.7883 1.52876 13.5279L5.05735 9.99935H2.66683Z\"\n />\n <path\n d=\"M13.3334 6.00065C13.7016 6.00065 14.0001 6.29913 14.0001 6.66732C14.0001 7.03551 13.7016 7.33398 13.3334 7.33398L9.33341 7.33398C8.96522 7.33398 8.66675 7.03551 8.66675 6.66732L8.66675 2.66732C8.66675 2.29913 8.96523 2.00065 9.33342 2.00065C9.7016 2.00065 10.0001 2.29913 10.0001 2.66732L10.0001 5.05784L13.5287 1.52925C13.789 1.2689 14.2111 1.2689 14.4715 1.52925C14.7318 1.78959 14.7318 2.21171 14.4715 2.47205L10.9429 6.00065L13.3334 6.00065Z\"\n />\n </svg>\n</template>\n","import { render } from \"./FitZoomIcon.vue?vue&type=template&id=620a804c\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"11\"\n height=\"12\"\n viewBox=\"0 0 11 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M5.49935 0.667969C5.13116 0.667969 4.83268 0.966447 4.83268 1.33464V5.33463H0.832682C0.464492 5.33463 0.166016 5.63311 0.166016 6.0013C0.166016 6.36949 0.464493 6.66797 0.832682 6.66797H4.83268V10.668C4.83268 11.0362 5.13116 11.3346 5.49935 11.3346C5.86754 11.3346 6.16602 11.0362 6.16602 10.668V6.66797H10.166C10.5342 6.66797 10.8327 6.36949 10.8327 6.0013C10.8327 5.63311 10.5342 5.33463 10.166 5.33463H6.16602V1.33464C6.16602 0.966446 5.86754 0.667969 5.49935 0.667969Z\"\n />\n </svg>\n</template>\n","import { render } from \"./PlusIcon.vue?vue&type=template&id=1a258512\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"11\"\n height=\"2\"\n viewBox=\"0 0 11 2\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M0.834635 1.66536C0.466446 1.66536 0.167969 1.36689 0.167969 0.998698C0.167969 0.630508 0.466445 0.332031 0.834635 0.332031H10.168C10.5362 0.332031 10.8346 0.630508 10.8346 0.998698C10.8346 1.36689 10.5362 1.66536 10.168 1.66536H0.834635Z\"\n />\n </svg>\n</template>\n","import { render } from \"./MinusIcon.vue?vue&type=template&id=4bf60aaa\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"24\"\n width=\"24\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M20.71,16.71l-2.42-2.42a1,1,0,0,0-1.42,0l-3.58,3.58a1,1,0,0,0-.29.71V21a1,1,0,0,0,1,1h2.42a1,1,0,0,0,.71-.29l3.58-3.58A1,1,0,0,0,20.71,16.71ZM16,20H15V19l2.58-2.58,1,1Zm-6,0H6a1,1,0,0,1-1-1V5A1,1,0,0,1,6,4h5V7a3,3,0,0,0,3,3h3v1a1,1,0,0,0,2,0V9s0,0,0-.06a1.31,1.31,0,0,0-.06-.27l0-.09a1.07,1.07,0,0,0-.19-.28h0l-6-6h0a1.07,1.07,0,0,0-.28-.19.32.32,0,0,0-.09,0L12.06,2H6A3,3,0,0,0,3,5V19a3,3,0,0,0,3,3h4a1,1,0,0,0,0-2ZM13,5.41,15.59,8H14a1,1,0,0,1-1-1ZM8,14h6a1,1,0,0,0,0-2H8a1,1,0,0,0,0,2Zm0-4H9A1,1,0,0,0,9,8H8a1,1,0,0,0,0,2Zm2,6H8a1,1,0,0,0,0,2h2a1,1,0,0,0,0-2Z\"\n />\n </svg>\n</template>\n","import { render } from \"./EditDocIcon.vue?vue&type=template&id=3bdcb0e2\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentToolbar.vue?vue&type=template&id=0ef4bf7c&scoped=true\"\nimport script from \"./DocumentToolbar.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentToolbar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_toolbar.scss?vue&type=style&index=0&id=0ef4bf7c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ef4bf7c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-search\">\n <div class=\"search-container\">\n <input\n ref=\"searchInput\"\n v-model=\"search\"\n :placeholder=\"$t('search')\"\n class=\"search-input\"\n @keyup.13=\"focusSearchResult(1)\"\n />\n <div v-if=\"searchLoading\" class=\"search-loading\">\n <b-icon icon=\"spinner\" class=\"fa-spin loading-icon-size spinner\" />\n </div>\n\n <div\n v-else-if=\"\n searchResults.length === 0 && search.length >= minSearchLength\n \"\n class=\"search-no-results\"\n >\n {{ $t(\"no_results\") }}\n </div>\n <div v-else class=\"search-navigation\">\n <span v-if=\"searchBelowMinimum\" class=\"search-counters\">\n {{ $t(\"search_below_minimum\") }}\n </span>\n <span v-else class=\"search-counters\"\n >{{ currentCounter }}/{{ searchResults.length }}</span\n >\n <b-button\n v-if=\"!searchBelowMinimum\"\n class=\"is-ghost is-small next-search\"\n :disabled=\"!searchResults.length || searchResults.length <= 1\"\n @click=\"focusSearchResult(1)\"\n ><b-icon icon=\"angle-down\" class=\"is-small\"\n /></b-button>\n\n <b-button\n v-if=\"!searchBelowMinimum\"\n class=\"is-ghost is-small previous-search\"\n :disabled=\"!searchResults.length || searchResults.length <= 1\"\n @click=\"focusSearchResult(-1)\"\n ><b-icon icon=\"angle-up\" class=\"is-small\"\n /></b-button>\n </div>\n <div class=\"search-close\">\n <b-button class=\"is-ghost is-small\" @click=\"closeSearch\">\n <b-icon icon=\"xmark\" class=\"is-small\" />\n </b-button>\n </div>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"SearchBar\",\n data() {\n return {\n search: \"\",\n minSearchLength: 3,\n };\n },\n computed: {\n ...mapState(\"display\", [\n \"currentSearchResult\",\n \"currentSearch\",\n \"searchEnabled\",\n \"searchResults\",\n \"searchLoading\",\n ]),\n searchBelowMinimum() {\n return (\n this.search &&\n this.search.length > 0 &&\n this.search.length < this.minSearchLength\n );\n },\n currentCounter() {\n return this.currentSearchResult != null && this.searchResults.length > 0\n ? this.currentSearchResult + 1\n : 0;\n },\n },\n watch: {\n search(search) {\n this.$store.dispatch(\"display/setCurrentSearch\", search);\n if (search.length >= this.minSearchLength) {\n this.$store.dispatch(\"display/startSearchLoading\");\n }\n this.$store.dispatch(\"display/debounceSearch\", search);\n },\n currentSearch(search) {\n if (this.search !== search) {\n this.search = search;\n }\n },\n searchEnabled(enabled) {\n if (enabled) {\n this.$nextTick(() => {\n this.$refs.searchInput.focus();\n });\n }\n },\n },\n mounted() {\n if (this.currentSearch !== this.search) {\n this.search = this.currentSearch;\n }\n },\n methods: {\n focusSearchResult(n) {\n this.$store.dispatch(\"display/setCurrentSearchResult\", n);\n },\n closeSearch() {\n this.$store.dispatch(\"display/resetSearch\");\n this.$store.dispatch(\"display/toggleSearch\");\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_search_bar.scss\"\n></style>\n","import { render } from \"./SearchBar.vue?vue&type=template&id=4a901e3d&scoped=true\"\nimport script from \"./SearchBar.vue?vue&type=script&lang=js\"\nexport * from \"./SearchBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_search_bar.scss?vue&type=style&index=0&id=4a901e3d&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4a901e3d\"]])\n\nexport default __exports__","import { render } from \"./ScrollingDocument.vue?vue&type=template&id=0f38cc3c&scoped=true\"\nimport script from \"./ScrollingDocument.vue?vue&type=script&lang=js\"\nexport * from \"./ScrollingDocument.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/scrolling_document.scss?vue&type=style&index=0&id=0f38cc3c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0f38cc3c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-pages\" ref=\"documentThumbnails\">\n <div v-if=\"selectedDocument\" ref=\"docPage\">\n <div\n v-for=\"page in selectedDocument.pages\"\n :key=\"page.id\"\n :class=\"[\n 'document-thumbnail',\n currentPage == page.number && 'selected',\n ]\"\n @click=\"changePage(page.number)\"\n >\n <div class=\"image-section\">\n <div class=\"image-container\">\n <ServerImage\n v-if=\"!loading && !recalculatingAnnotations\"\n :class=\"[\n 'img-thumbnail',\n currentPage == page.number && 'selected',\n ]\"\n :width=\"'40px'\"\n :image-url=\"`${page.thumbnail_url}?${selectedDocument.downloaded_at}`\"\n >\n <LoadingThumbnail />\n </ServerImage>\n <LoadingThumbnail v-else />\n </div>\n </div>\n <div class=\"number-thumbnail\">\n {{ page.number }}\n </div>\n </div>\n </div>\n <div v-else class=\"document-thumbnail-loading\">\n <div class=\"document-thumbnail\">\n <div class=\"image-section\">\n <div class=\"image-container\">\n <LoadingThumbnail />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport LoadingThumbnail from \"./LoadingThumbnail.vue\";\n\n/**\n * This component creates a vertical list of the document pages\n * with thumbnail pictures of it which are also clickable.\n * It also creates a grid list of the pages in the toolbar modal\n * to allow the user to rotate them.\n */\nexport default {\n name: \"DocumentThumbnails\",\n components: {\n ServerImage,\n LoadingThumbnail,\n },\n data() {\n return {\n thumbnailClicked: null,\n previousScrollPosition: 0,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"selectedDocument\",\n \"recalculatingAnnotations\",\n \"loading\",\n ]),\n ...mapState(\"display\", [\"currentPage\"]),\n },\n watch: {\n currentPage(newPage) {\n if (!newPage || newPage == this.thumbnailClicked) return;\n\n // handle thumbnail selection when scrolling the document\n this.scrollToThumbnail(newPage);\n },\n },\n\n methods: {\n /* Change page if not the currently open and not in modal */\n changePage(pageNumber) {\n this.thumbnailClicked = pageNumber;\n\n if (\n !this.loading &&\n !this.recalculatingAnnotations &&\n pageNumber != this.currentPage\n ) {\n this.$store.dispatch(\"display/setPageChangedFromThumbnail\", true);\n this.$store.dispatch(\"display/updateCurrentPage\", pageNumber);\n }\n },\n\n scrollToThumbnail(page) {\n // select only the active thumbnail\n this.thumbnailClicked = null;\n this.$refs.docPage.children[page - 1].scrollIntoView({\n behavior: \"smooth\",\n });\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","<template>\n <div class=\"loading-thumbnail\">\n <b-skeleton width=\"40px\" height=\"57px\" />\n </div>\n</template>\n\n<script>\n/**\n * This component shows a skeleton instead of the thumbnails\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingThumbnail\",\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_thumbnails.scss\"\n></style>\n","import { render } from \"./LoadingThumbnail.vue?vue&type=template&id=714f8116&scoped=true\"\nimport script from \"./LoadingThumbnail.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingThumbnail.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=714f8116&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-714f8116\"]])\n\nexport default __exports__","import { render } from \"./DocumentThumbnails.vue?vue&type=template&id=b21f512c&scoped=true\"\nimport script from \"./DocumentThumbnails.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentThumbnails.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_thumbnails.scss?vue&type=style&index=0&id=b21f512c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-b21f512c\"]])\n\nexport default __exports__","<template>\n <div id=\"document-annotations\" @click=\"cleanSelection\">\n <!-- When extracting annotations after editing -->\n <div v-if=\"recalculatingAnnotations\" class=\"extracting-data\">\n <ExtractingData />\n </div>\n\n <!-- When document data is still loading -->\n <div\n v-else-if=\"!getAnnotationsFiltered.annotationSets || loading\"\n class=\"document-annotations-loading\"\n >\n <div\n v-for=\"n in numberOfLoadingAnnotations\"\n :key=\"n\"\n class=\"loading-annotation-set\"\n >\n <LoadingAnnotations />\n </div>\n </div>\n <div\n v-else-if=\"\n getAnnotationsFiltered.annotationSets.length === 0 &&\n !isSearchingAnnotationList\n \"\n class=\"empty-annotation-sets\"\n >\n <EmptyState />\n </div>\n\n <div v-else ref=\"annotationList\" class=\"annotation-set-list\">\n <AnnotationFilters\n v-if=\"isDocumentEditable\"\n @openAll=\"openAllAccordions\"\n />\n\n <div\n v-if=\"\n getAnnotationsFiltered.annotationSets.length === 0 &&\n isSearchingAnnotationList\n \"\n class=\"empty-annotation-sets\"\n >\n <EmptyState :is-search=\"true\" />\n </div>\n <div v-if=\"annotationSetsAccordion\" class=\"annotation-sets-accordions\">\n <div\n v-for=\"(\n annotationSet, indexGroup\n ) in getAnnotationsFiltered.annotationSets\"\n :key=\"indexGroup\"\n :class=\"[\n 'annotation-set-group',\n indexGroup === 0 && 'no-top-margin',\n !isAccordionOpen(annotationSet) && 'annotation-set-collapsed',\n ]\"\n >\n <div class=\"label-set-header\" @click=\"toggleAccordion(annotationSet)\">\n <div class=\"label-set-name\">\n <b-icon\n :icon=\"\n isAccordionOpen(annotationSet) ? 'angle-up' : 'angle-down'\n \"\n size=\"is-12\"\n />\n {{\n `${annotationSet.label_set.name} ${numberOfAnnotationSetGroup(\n annotationSet\n )}`\n }}\n </div>\n <div\n v-if=\"\n !publicView &&\n !isDocumentReviewed &&\n annotationSet.labels.length !== 0\n \"\n class=\"labelset-action-buttons\"\n >\n <AnnotationSetActionButtons\n :is-placeholder=\"!isAccordionOpen(annotationSet)\"\n :number-of-empty-labels-in-annotation-set=\"\n emptyLabels(annotationSet).length\n \"\n :number-of-not-correct-annotations-in-annotation-set=\"\n notCorrectAnnotations(annotationSet).length\n \"\n @mark-all-empty-missing=\"\n markAnnotationsAsMissing(null, null, annotationSet, true)\n \"\n @hover-annotation-set-to-mark-missing=\"\n handleHoverAnnotationSet(annotationSet, 'missing')\n \"\n @leave-annotation-set-to-mark-missing=\"\n handleHoverAnnotationSet(null)\n \"\n @accept-all-pending-annotations=\"\n acceptPendingAnnotationsInAnnotationSet(annotationSet)\n \"\n @hover-annotation-set-to-accept=\"\n handleHoverAnnotationSet(annotationSet, 'accept')\n \"\n @leave-annotation-set-to-accept=\"handleHoverAnnotationSet(null)\"\n />\n </div>\n </div>\n\n <b-collapse\n :model-value=\"isAccordionOpen(annotationSet)\"\n animation=\"slide\"\n >\n <div\n v-if=\"annotationSet.labels.length > 0\"\n class=\"annotation-sets-list\"\n >\n <div v-for=\"label in annotationSet.labels\" :key=\"label.id\">\n <div\n v-if=\"!(label.annotations.length === 0 && publicView)\"\n class=\"labels\"\n >\n <DocumentLabel\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n :index-group=\"indexGroup\"\n @handle-missing-annotation=\"markAnnotationsAsMissing\"\n />\n </div>\n </div>\n </div>\n\n <div\n v-else-if=\"annotationSet.labels.length === 0\"\n class=\"no-labels\"\n >\n <span>\n {{\n isSearchingAnnotationList\n ? $t(\"no_results\")\n : $t(\"no_labels_in_set\")\n }}</span\n >\n <!-- eslint-disable vue/no-v-html -->\n <span\n v-if=\"\n showBranding &&\n isDocumentEditable &&\n !isSearchingAnnotationList\n \"\n v-html=\"$t('link_to_add_labels')\"\n />\n </div>\n\n <div\n v-else-if=\"\n !annotationSetHasAnnotations(annotationSet) && publicView\n \"\n class=\"no-labels\"\n >\n <span> {{ $t(\"no_annotations_in_annotation_set\") }}</span>\n </div>\n </b-collapse>\n </div>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport EmptyState from \"./EmptyState\";\nimport ExtractingData from \"./ExtractingData\";\nimport AnnotationSetActionButtons from \"./AnnotationSetActionButtons\";\nimport DocumentLabel from \"./DocumentLabel\";\nimport AnnotationFilters from \"./AnnotationFilters\";\nimport LoadingAnnotations from \"./LoadingAnnotations\";\n\n/**\n * This component loads all annotations for one document\n */\nexport default {\n components: {\n EmptyState,\n ExtractingData,\n AnnotationSetActionButtons,\n DocumentLabel,\n LoadingAnnotations,\n AnnotationFilters,\n },\n data() {\n return {\n count: 0,\n jumpToNextAnnotation: false,\n numberOfLoadingAnnotations: 3,\n annotationSetsAccordion: null,\n };\n },\n\n computed: {\n ...mapState(\"display\", [\"showAnnSetTable\", \"showBranding\"]),\n ...mapState(\"edit\", [\"editMode\"]),\n ...mapState(\"document\", [\n \"annotationSets\",\n \"documentId\",\n \"annotationId\",\n \"annotationSetId\",\n \"recalculatingAnnotations\",\n \"publicView\",\n \"editAnnotation\",\n \"loading\",\n \"labels\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapGetters(\"document\", [\n \"numberOfAnnotationSetGroup\",\n \"getAnnotationsFiltered\",\n \"emptyLabels\",\n \"notCorrectAnnotations\",\n \"isDocumentReviewed\",\n \"annotationSetOfAnnotation\",\n \"isAnnotationInAnnotationSet\",\n \"isSearchingAnnotationList\",\n ]),\n isAnnotationBeingEdited() {\n return this.editAnnotation && this.editAnnotation.id;\n },\n isDocumentEditable() {\n return !this.publicView && !this.isDocumentReviewed && !this.editMode;\n },\n },\n watch: {\n editAnnotation(newValue) {\n if (!newValue && !this.jumpToNextAnnotation) {\n this.count = 0;\n }\n },\n acceptAnnotation(newValue, oldValue) {\n if (!newValue && oldValue) {\n this.focusOnNextAnnotation();\n this.jumpToNextAnnotation = false;\n }\n },\n getAnnotationsFiltered(newFiltered, oldFiltered) {\n // just load accordions again if the length was changed\n if (\n newFiltered.annotationSets.length !== oldFiltered.annotationSets.length\n ) {\n this.loadAccordions(\n newFiltered.annotationSets,\n oldFiltered.annotationSets\n );\n }\n },\n annotationId(newAnnotationId) {\n if (newAnnotationId) {\n const annotationSet = this.annotationSetOfAnnotation(newAnnotationId);\n if (annotationSet) {\n const newAnnotationSetsAccordion = {\n ...this.annotationSetsAccordion,\n };\n newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] = true;\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n }\n }\n },\n },\n created() {\n window.addEventListener(\"keydown\", this.keyDownHandler);\n\n // validation for when page is hot reloaded and data reinitialize\n if (\n this.getAnnotationsFiltered.annotationSets &&\n this.getAnnotationsFiltered.annotationSets.length > 0\n ) {\n this.loadAccordions(this.getAnnotationsFiltered.annotationSets);\n }\n },\n unmounted() {\n window.removeEventListener(\"keydown\", this.keyDownHandler);\n },\n methods: {\n annotationSetShouldAppear(annotationSet) {\n return !(\n annotationSet.labels.length === 0 && this.isSearchingAnnotationList\n );\n },\n isAccordionOpen(annotationSet) {\n return (\n this.isSearchingAnnotationList ||\n this.annotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] === true\n );\n },\n toggleAccordion(annotationSet) {\n const newAnnotationSetsAccordion = { ...this.annotationSetsAccordion };\n newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ] =\n !newAnnotationSetsAccordion[\n annotationSet.id || annotationSet.label_set.id\n ];\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n },\n openAllAccordions() {\n const newAnnotationSetsAccordion = { ...this.annotationSetsAccordion };\n for (var key in newAnnotationSetsAccordion) {\n newAnnotationSetsAccordion[key] = true;\n }\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n },\n loadAccordions(newAnnotationSets) {\n if (newAnnotationSets) {\n const isFirstTime = this.annotationSetsAccordion === null;\n const newAnnotationSetsAccordion = {};\n const annotationSetsCreated = [];\n\n newAnnotationSets.forEach((newAnnotationSet, index) => {\n if (isFirstTime && this.annotationSetId) {\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = newAnnotationSet.id == this.annotationSetId;\n } else if (isFirstTime && this.annotationId) {\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = this.isAnnotationInAnnotationSet(\n newAnnotationSet,\n this.annotationId\n );\n } else if (isFirstTime && index === 0) {\n // open first one by default\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = true;\n } else {\n const wasCreated = annotationSetsCreated.find(\n (annotationSetCreated) =>\n annotationSetCreated.id &&\n newAnnotationSet.id &&\n newAnnotationSet.id === annotationSetCreated.id\n );\n newAnnotationSetsAccordion[\n newAnnotationSet.id || newAnnotationSet.label_set.id\n ] = wasCreated !== undefined;\n }\n });\n this.annotationSetsAccordion = newAnnotationSetsAccordion;\n }\n },\n annotationSetHasAnnotations(annotationSet) {\n const found = annotationSet.labels.find(\n (label) => label.annotations.length > 0\n );\n return found;\n },\n\n focusOnNextAnnotation() {\n const annotations = this.createArray(\"keyboard-nav\");\n\n if (annotations[this.count]) {\n annotations[this.count].click();\n } else {\n this.count = 0;\n return;\n }\n },\n\n scrollToFocusedAnnotationFromKeyHandler() {\n if (!this.editAnnotation) return;\n\n // Get label name for the selected annotation\n let labelForAnnotation;\n\n this.labels.map((label) => {\n const found = label.annotations.find(\n (ann) => ann.id === this.editAnnotation.id\n );\n\n if (found) {\n labelForAnnotation = label;\n return;\n }\n });\n\n const currentAnnotation = this.getAnnotationsFiltered.annotations.find(\n (ann) => ann.id === this.editAnnotation.id\n );\n\n if (currentAnnotation) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation: currentAnnotation,\n label: labelForAnnotation,\n span: currentAnnotation.span[0],\n scrollTo: false,\n });\n\n this.$store.dispatch(\"document/scrollToDocumentAnnotationSelected\");\n }\n },\n\n exitEditMode() {\n this.count = 0;\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/endLoading\");\n },\n\n createArray(className) {\n if (this.$refs.annotationList) {\n return Array.from(\n this.$refs.annotationList.getElementsByClassName(className)\n );\n }\n },\n\n keyDownHandler(event) {\n // only allow keyboard navigation if we are not in public view mode\n if (!this.isDocumentEditable) return;\n\n // Exit edit mode and navigation\n if (event.key === \"Escape\") {\n this.exitEditMode();\n return;\n }\n\n // Not allow starting edit mode with ArrowUp key\n if (event.key === \"ArrowUp\" && !this.isAnnotationBeingEdited) return;\n\n // Get all the annotation elements\n let annotations = this.createArray(\"keyboard-nav\");\n\n // Get clicked element to get the index\n const clickedAnnotations = this.createArray(\"clicked-ann\");\n\n // get index of currently active element\n const currentAnnIndex = annotations.findIndex(\n (el) => el === clickedAnnotations[0]\n );\n\n // navigate with the arrow up or down keys\n if (event.key === \"ArrowDown\") {\n // open accordions\n this.openAllAccordions();\n\n // Check if we are focusing on the Finish Review button\n if (this.count >= annotations.length) {\n const finishBtn = this.createArray(\"finish-review-btn\");\n\n if (finishBtn && finishBtn[0]) {\n finishBtn[0].focus();\n }\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.count = 0;\n if (event.key === \"Enter\" && !finishBtn.disabled) {\n finishBtn.click();\n }\n return;\n }\n\n /**\n * Enable navigation when some annotation is already focused\n */\n // Update count to avoid restarting the navigation\n if (clickedAnnotations[0]) {\n this.count = currentAnnIndex + 1;\n }\n\n const nextElement = annotations[this.count];\n if (nextElement.className.includes(\"label-group\")) {\n // open group and then click on annotation\n // index is the same since group is removed from keyboard nav\n nextElement.click();\n this.$nextTick(() => {\n annotations = this.createArray(\"keyboard-nav\");\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count++;\n });\n } else if (annotations[this.count]) {\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count++;\n }\n\n // scroll to current annotation if not empty\n } else if (event.key === \"ArrowUp\") {\n // Check if the event happened on the first element from the array\n // If so, reset count to 0\n if (clickedAnnotations[0] === annotations[0]) {\n this.count = 0;\n return;\n }\n\n /**\n * Enable navigation when some annotation is already focused\n */\n // Update count to avoid restarting the navigation\n if (clickedAnnotations[0]) {\n this.count = currentAnnIndex - 1;\n }\n\n const previousElement = annotations[this.count];\n if (previousElement.className.includes(\"label-group\")) {\n // open group and then click on annotation\n // index is the same since group is removed from keyboard nav\n previousElement.click();\n this.$nextTick(() => {\n annotations = this.createArray(\"keyboard-nav\");\n // since we are going backwards, we need to go to the last annotation of group\n const currentAnnIndex = annotations.findIndex(\n (el) => el === clickedAnnotations[0]\n );\n this.count = currentAnnIndex - 1;\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count--;\n });\n } else if (annotations[this.count]) {\n annotations[this.count].click();\n this.scrollToFocusedAnnotationFromKeyHandler();\n this.count--;\n }\n } else {\n // Check for ENTER or DELETE\n // Accept annotation\n if (event.key === \"Enter\") {\n if (!this.getAnnotationsFiltered.annotations || !this.editAnnotation)\n return;\n\n const currentAnn = this.getAnnotationsFiltered.annotations.find(\n (a) => a.id === this.editAnnotation.id\n );\n\n if (!this.editAnnotation && this.editAnnotation.id !== currentAnn.id)\n return;\n // set focus on next annotation\n this.count = currentAnnIndex + 1;\n this.jumpToNextAnnotation = true;\n } else if (\n event.key === \"Delete\" &&\n annotations[currentAnnIndex].className.includes(\"label-empty\") &&\n annotations[currentAnnIndex].className.includes(\"clicked\")\n ) {\n // Mark annotation as missing\n if (this.editAnnotation.id === annotations[currentAnnIndex].id) {\n this.markAnnotationsAsMissing();\n }\n this.jumpToNextAnnotation = true;\n } else {\n return;\n }\n }\n },\n\n markAnnotationsAsMissing(label, labelSet, annotationSet, markAllMissing) {\n let missing;\n\n if (label && labelSet && !markAllMissing) {\n // if annotation is marked as missing by clicking the button\n\n missing = [\n {\n document: parseInt(this.documentId),\n label: label,\n label_set: labelSet,\n annotation_set: annotationSet,\n },\n ];\n } else if (\n this.editAnnotation &&\n this.editAnnotation.id !== null &&\n this.editAnnotation.annotationSet\n ) {\n // if annotation is marked as missing from \"delete\" key\n\n missing = [\n {\n document: parseInt(this.documentId),\n label: this.editAnnotation.label.id,\n label_set: this.editAnnotation.labelSet.id,\n annotation_set: this.editAnnotation.annotationSet.id,\n },\n ];\n } else if (annotationSet && markAllMissing) {\n // mark all annotations as missing in annotation set\n\n // Check if any of the empty annotations was already marked as missing individually\n // and remove them\n const toMarkAsMissing = this.emptyLabels(annotationSet);\n\n missing = toMarkAsMissing.map((label) => {\n return {\n document: parseInt(this.documentId),\n label: label.id,\n label_set: annotationSet.label_set.id,\n annotation_set: annotationSet.id,\n };\n });\n }\n\n this.$store.dispatch(\"document/setAnnotationsMarkedAsMissing\", missing);\n\n this.$store\n .dispatch(\"document/addMissingAnnotations\", missing)\n .then((response) => {\n if (response) {\n this.jumpToNextAnnotation = true;\n }\n\n this.jumpToNextAnnotation = false;\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/setAnnotationsMarkedAsMissing\", null);\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n });\n },\n\n handleHoverAnnotationSet(annotationSet, type) {\n let hovered;\n\n if (!type && !annotationSet) {\n hovered = null;\n } else {\n hovered = {\n annotationSet: annotationSet,\n type: type,\n };\n }\n\n this.$store.dispatch(\"document/setHoveredAnnotationSet\", hovered);\n },\n\n acceptPendingAnnotationsInAnnotationSet(annotationSet) {\n const annotationsToAccept = [];\n\n annotationSet.labels.map((label) => {\n if (label.annotations.length !== 0) {\n label.annotations.map((ann) => {\n if (!ann.revised) {\n annotationsToAccept.push(ann.id);\n }\n });\n }\n });\n\n if (annotationsToAccept.length !== 0) {\n const acceptedAnnotations = {\n ids: annotationsToAccept,\n is_correct: true,\n revised: true,\n };\n\n this.$store\n .dispatch(\"document/updateMultipleAnnotations\", acceptedAnnotations)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n },\n\n openAnnotationSetTable(tableSet) {\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n if (this.showAnnSetTable && this.showAnnSetTable === tableSet) {\n this.$store.dispatch(\"display/toggleAnnSetTable\", tableSet);\n } else {\n this.$store.dispatch(\"display/showAnnSetTable\", tableSet);\n }\n },\n cleanSelection() {\n this.$store.dispatch(\"document/setAnnotationId\", null);\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div class=\"empty-container\">\n <EmptyStateImg />\n <div class=\"empty-text\">\n <p class=\"title\">\n {{ $t(\"no_label_sets_found\") }}\n </p>\n <p v-if=\"!isSearch\" class=\"description\">\n {{ $t(\"no_label_sets_found_description\") }}\n </p>\n </div>\n </div>\n</template>\n<script>\nimport EmptyStateImg from \"../../assets/images/EmptyStateImg\";\nexport default {\n name: \"EmptyState\",\n components: { EmptyStateImg },\n props: {\n isSearch: {\n type: Boolean,\n required: false,\n default: false,\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/empty_state.scss\"></style>\n","<template>\n <svg\n width=\"122\"\n height=\"165\"\n viewBox=\"0 0 122 165\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"61\"\n cy=\"61\"\n r=\"61\"\n fill=\"#F7F7F7\"\n />\n <g filter=\"url(#filter0_d_2720_20884)\">\n <rect\n x=\"22\"\n y=\"29\"\n width=\"77.8605\"\n height=\"108\"\n rx=\"4\"\n fill=\"white\"\n />\n </g>\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"41.584\"\n width=\"18.8372\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"59.3965\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"71.2109\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32.0449\"\n y=\"83.0254\"\n width=\"57.7674\"\n height=\"6.27907\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <rect\n opacity=\"0.7\"\n x=\"32\"\n y=\"97\"\n width=\"58\"\n height=\"28\"\n rx=\"2\"\n stroke=\"#BFBFBF\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"3 2\"\n />\n <defs>\n <filter\n id=\"filter0_d_2720_20884\"\n x=\"2\"\n y=\"17\"\n width=\"117.86\"\n height=\"148\"\n filterUnits=\"userSpaceOnUse\"\n color-interpolation-filters=\"sRGB\"\n >\n <feFlood\n flood-opacity=\"0\"\n result=\"BackgroundImageFix\"\n />\n <feColorMatrix\n in=\"SourceAlpha\"\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\"\n result=\"hardAlpha\"\n />\n <feOffset dy=\"8\" />\n <feGaussianBlur stdDeviation=\"10\" />\n <feComposite\n in2=\"hardAlpha\"\n operator=\"out\"\n />\n <feColorMatrix\n type=\"matrix\"\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.07 0\"\n />\n <feBlend\n mode=\"normal\"\n in2=\"BackgroundImageFix\"\n result=\"effect1_dropShadow_2720_20884\"\n />\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"effect1_dropShadow_2720_20884\"\n result=\"shape\"\n />\n </filter>\n </defs>\n </svg>\n</template>\n<script>\nexport default {\n name: \"EmptyStateImg\"\n};\n</script>\n","import { render } from \"./EmptyStateImg.vue?vue&type=template&id=6e2ab566\"\nimport script from \"./EmptyStateImg.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyStateImg.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./EmptyState.vue?vue&type=template&id=f6b38116&scoped=true\"\nimport script from \"./EmptyState.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyState.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/empty_state.scss?vue&type=style&index=0&id=f6b38116&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-f6b38116\"]])\n\nexport default __exports__","<template>\n <div class=\"data-extraction-container\">\n <div class=\"loading-container\">\n <b-icon icon=\"spinner\" class=\"fa-spin spinner-icon\" />\n </div>\n <div class=\"data-extraction-text\">\n <p class=\"title\">\n <span v-if=\"redirectingUser\"> {{ $t(\"wait_title\") }}</span>\n <span v-else>\n {{ $t(\"data_being_extracted\") }}\n </span>\n </p>\n <div class=\"description\">\n <span v-if=\"redirectingUser\">\n <p>{{ $t(\"redirecting_to_documents_list\") }}</p>\n </span>\n <span v-else>\n <p>{{ $t(\"analysing_document\") }}</p>\n <p>{{ $t(\"few_minutes\") }}</p>\n </span>\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"ExtractingData\",\n computed: {\n ...mapState(\"edit\", [\"redirectingUser\"]),\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/extracting_data.scss\"></style>\n","import { render } from \"./ExtractingData.vue?vue&type=template&id=22a5db6f&scoped=true\"\nimport script from \"./ExtractingData.vue?vue&type=script&lang=js\"\nexport * from \"./ExtractingData.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/extracting_data.scss?vue&type=style&index=0&id=22a5db6f&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-22a5db6f\"]])\n\nexport default __exports__","<template>\n <div class=\"action-buttons\">\n <!-- mark all empty labels as missing -->\n <div\n class=\"missing-button-container all-missing\"\n @mouseenter=\"mouseenterAnnotationSet('missing')\"\n @mouseleave=\"mouseleaveAnnotationSet\"\n >\n <b-button\n type=\"is-ghost\"\n class=\"button-action is-button-text-ghost\"\n :disabled=\"numberOfEmptyLabelsInAnnotationSet === 0\"\n @click=\"markAllAsMissing\"\n >\n {{ isPlaceholder ? $t(\"missing_counter\") : $t(\"mark_all_missing\") }} ({{\n numberOfEmptyLabelsInAnnotationSet\n }})\n </b-button>\n </div>\n\n <!-- accept all pending annotations -->\n <div\n class=\"accept-all\"\n @mouseenter=\"mouseenterAnnotationSet('accept')\"\n @mouseleave=\"mouseleaveAnnotationSet\"\n >\n <b-button\n type=\"is-ghost\"\n class=\"button-action is-button-text-ghost accept-all-icon\"\n :disabled=\"numberOfNotCorrectAnnotationsInAnnotationSet === 0\"\n @click=\"acceptAllPending\"\n >\n {{ isPlaceholder ? $t(\"pending_counter\") : $t(\"accept_group\") }} ({{\n numberOfNotCorrectAnnotationsInAnnotationSet\n }})\n </b-button>\n </div>\n </div>\n</template>\n<script>\n/* Component for showing actions for each Annotation Set */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"AnnotationSetActionButtons\",\n props: {\n isPlaceholder: {\n type: Boolean,\n default: false,\n },\n numberOfEmptyLabelsInAnnotationSet: {\n type: Number,\n default: 0,\n },\n numberOfNotCorrectAnnotationsInAnnotationSet: {\n type: Number,\n default: 0,\n },\n },\n computed: {\n ...mapState(\"document\", [\"publicView\"]),\n ...mapGetters(\"document\", [\"isDocumentReviewed\"]),\n },\n methods: {\n mouseenterAnnotationSet(type) {\n if (type == \"missing\") {\n this.$emit(\"hover-annotation-set-to-mark-missing\");\n }\n\n if (type == \"accept\") {\n this.$emit(\"hover-annotation-set-to-accept\");\n }\n },\n mouseleaveAnnotationSet() {\n this.$emit(\"leave-annotation-set-to-accept\");\n this.$emit(\"leave-annotation-set-to-mark-missing\");\n },\n markAllAsMissing(e) {\n if (!this.isPlaceholder) {\n e.stopPropagation();\n this.$emit(\"mark-all-empty-missing\");\n }\n },\n acceptAllPending(e) {\n if (!this.isPlaceholder) {\n e.stopPropagation();\n this.$emit(\"accept-all-pending-annotations\");\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_action_buttons.scss\"\n></style>\n","import { render } from \"./AnnotationSetActionButtons.vue?vue&type=template&id=24255449&scoped=true\"\nimport script from \"./AnnotationSetActionButtons.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationSetActionButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_action_buttons.scss?vue&type=style&index=0&id=24255449&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-24255449\"]])\n\nexport default __exports__","<template>\n <div class=\"label\">\n <div v-if=\"annotationSet && annotationsToShow().length > 0\">\n <AnnotationRow\n v-for=\"(annotation, index) in annotationsToShow()\"\n :key=\"index\"\n :annotation=\"annotation\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n />\n </div>\n <div v-else-if=\"annotationSet\">\n <AnnotationRow\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"annotationSet.label_set\"\n />\n </div>\n <div v-else-if=\"labelSet\">\n <AnnotationRow :label=\"label\" :label-set=\"labelSet\" />\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport AnnotationRow from \"./AnnotationRow\";\n\n/**\n * This component shows each label and its annotations\n */\nexport default {\n name: \"DocumentLabel\",\n components: { AnnotationRow },\n props: {\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n },\n computed: {\n ...mapState(\"document\", [\"annotationId\", \"publicView\"]),\n ...mapGetters(\"document\", [\n \"numberOfAcceptedAnnotationsInLabel\",\n \"isLabelMultiFalseAndGroupOfAnns\",\n ]),\n },\n methods: {\n annotationsToShow() {\n if (this.isLabelMultiFalseAndGroupOfAnns(this.label)) {\n return [this.label.annotations[0]];\n } else {\n return this.label.annotations;\n }\n },\n labelHasPendingAnnotations(hoveredSet) {\n if (!hoveredSet) return;\n\n const found = this.label.annotations.find((ann) => !ann.is_correct);\n\n return this.annotationSet.id === hoveredSet.annotationSet.id && found;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div\n :class=\"[\n 'annotation-row',\n isSelected && 'selected',\n hoverEmptyLabelRows && 'hovered-empty-labels',\n hoverPendingAnnotationRows && 'hovered-pending-annotations',\n annotationIsNotFound(annotationSet, label) && 'missing',\n isAnnotationInEditMode(currentAnnotationId()) && 'editing',\n publicView && 'clickable-cursor',\n ]\"\n @click=\"onAnnotationClick\"\n @mouseover=\"hoveredAnnotation = currentAnnotationId()\"\n @mouseleave=\"hoveredAnnotation = null\"\n >\n <div class=\"annotations-width-slider\">\n <b-slider\n v-model=\"labelContainerWidth\"\n type=\"is-move\"\n :min=\"20\"\n :max=\"80\"\n :custom-formatter=\"(val) => `${$t('label_size')} ${val}%`\"\n class=\"is-full-height show-hover show-line\"\n :disabled=\"isAnnotationInEditMode()\"\n />\n </div>\n <div\n class=\"annotation-row-left\"\n :style=\"`width:${labelWidth}%`\"\n @mouseenter=\"onAnnotationHoverEnter(defaultSpan)\"\n @mouseleave=\"onAnnotationHoverLeave\"\n >\n <div class=\"annotation-icon\">\n <AnnotationDetails\n :description=\"label.description\"\n :annotation=\"annotation\"\n :annotation-set=\"annotationSet\"\n :label=\"label\"\n />\n </div>\n\n <div\n v-if=\"showLabel\"\n :class=\"[\n 'label-name',\n annotationIsNotFound(annotationSet, label) && 'not-found-text',\n ]\"\n >\n <span @click=\"selectAnnotation\">{{ label.name }} </span>\n </div>\n\n <div\n v-if=\"\n showAnnotationTranslations &&\n annotation &&\n annotation.translated_string\n \"\n :class=\"['annotation-translation', !isDocumentReviewed && 'pointer']\"\n @click=\"editAnnotationTranslation(annotation.id)\"\n >\n <b-tooltip :animated=\"false\" position=\"is-bottom\">\n <div class=\"icon\">\n <TranslateArrows :translation=\"annotation.translated_string\" />\n </div>\n\n <template #content>\n <div class=\"translation-details\">\n <div class=\"translation-title\">\n <span>{{ $t(\"translated_string_title\") }}</span>\n <span\n :class=\"[\n 'translated-string',\n !annotation.translated_string && 'no-translation',\n ]\"\n >\n {{\n annotation.translated_string\n ? annotation.translated_string\n : $t(\"no_translated_string\")\n }}\n </span>\n </div>\n </div>\n <div class=\"translation-info\">\n <div v-if=\"!isDocumentReviewed\" class=\"annotation-details-link\">\n {{\n annotation.translated_string\n ? $t(\"edit_translation\")\n : $t(\"add_translation\")\n }}\n </div>\n </div>\n </template>\n </b-tooltip>\n </div>\n </div>\n\n <div class=\"annotation-row-right\" :style=\"`width:${annotationWidth}%`\">\n <div class=\"annotation-content\">\n <div\n v-if=\"isAnnotationInEditMode(currentAnnotationId()) && spanLoading\"\n >\n <b-icon style=\"width: 16px\" icon=\"spinner\" class=\"fa-spin\" />\n </div>\n <div v-else-if=\"annotation\" class=\"annotation-items\">\n <b-checkbox\n v-if=\"annotation.metadata && annotation.metadata.checkbox\"\n v-model=\"isChecked\"\n class=\"annotation-checkbox\"\n />\n <div class=\"annotation-spans\">\n <div\n v-for=\"(span, index) in spanForEditing\n ? spanSelection\n : annotation.span\"\n :key=\"index\"\n @mouseenter=\"onAnnotationHoverEnter(span)\"\n @mouseleave=\"onAnnotationHoverLeave\"\n >\n <AnnotationContent\n :ref=\"`span_${annotation.id}_${index}`\"\n :annotation=\"annotation\"\n :span=\"span\"\n :span-index=\"index\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :is-hovered=\"hoveredAnnotation\"\n @save-annotation-changes=\"handleSaveChanges\"\n />\n </div>\n </div>\n </div>\n <div v-else>\n <div\n v-if=\"\n spanSelection.length > 0 &&\n isAnnotationInEditMode(currentAnnotationId())\n \"\n >\n <EmptyAnnotation\n v-for=\"(span, index) in spanSelection\"\n :key=\"index\"\n :span=\"span\"\n :span-index=\"index\"\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"labelSet\"\n :is-hovered=\"hoveredAnnotation\"\n :is-missing-annotation=\"\n annotationIsNotFound(annotationSet, label)\n \"\n @save-empty-annotation-changes=\"saveEmptyAnnotationChanges\"\n />\n </div>\n <EmptyAnnotation\n v-else\n :label=\"label\"\n :annotation-set=\"annotationSet\"\n :label-set=\"labelSet\"\n :is-hovered=\"hoveredAnnotation\"\n :is-missing-annotation=\"annotationIsNotFound(annotationSet, label)\"\n @save-empty-annotation-changes=\"saveEmptyAnnotationChanges\"\n />\n </div>\n </div>\n <div\n v-if=\"showAnnotationActions()\"\n :class=\"`buttons-container ${\n isAnnotationInEditMode(currentAnnotationId()) ? 'is-ann-editing' : ''\n }`\"\n >\n <AnnotationActionButtons\n :annotation=\"annotation\"\n :label=\"label\"\n :show-cancel=\"showCancelButton()\"\n :show-accept=\"showAcceptButton()\"\n :show-decline=\"showDeclineButton()\"\n :show-missing=\"showMissingButton()\"\n :show-search=\"showMissingButton()\"\n :show-save=\"showSaveButton()\"\n :show-restore=\"showRestoreButton()\"\n :show-link=\"showLinkButton()\"\n :is-loading=\"isLoading\"\n @mark-as-missing=\"handleMissingAnnotation\"\n @save=\"handleSaveChanges\"\n @accept=\"handleSaveChanges\"\n @decline=\"handleSaveChanges(true)\"\n @cancel=\"handleCancelButton\"\n @restore=\"handleRestore\"\n @search=\"searchLabelInDocument\"\n @link=\"copyAnnotationLink\"\n />\n </div>\n </div>\n </div>\n</template>\n<script>\nimport { mapActions, mapGetters, mapState } from \"vuex\";\nimport AnnotationDetails from \"./AnnotationDetails\";\nimport AnnotationContent from \"./AnnotationContent\";\nimport EmptyAnnotation from \"./EmptyAnnotation\";\nimport AnnotationActionButtons from \"./AnnotationActionButtons\";\nimport TranslateArrows from \"../../assets/images/TranslateArrows\";\n\nimport { isElementArray } from \"../../utils/utils\";\nimport api from \"../../api\";\n\nexport default {\n name: \"AnnotationRow\",\n components: {\n AnnotationDetails,\n AnnotationContent,\n EmptyAnnotation,\n AnnotationActionButtons,\n TranslateArrows,\n },\n props: {\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n label: {\n type: Object,\n required: true,\n },\n annotation: {\n type: Object,\n default: null,\n },\n showLabel: {\n type: Boolean,\n default: true,\n },\n },\n data() {\n const checkboxValue =\n this.annotation &&\n this.annotation.metadata &&\n this.annotation.metadata.checkbox &&\n this.annotation.metadata.checkbox.is_checked;\n return {\n isLoading: false,\n isSelected: false,\n // annotationAnimationTimeout: null,\n hoveredAnnotation: null,\n checkboxDefaultValue: checkboxValue,\n isCheckboxAvailable: false,\n isChecked: checkboxValue,\n labelContainerWidth: 0,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"annotationId\",\n \"hoveredAnnotationSet\",\n \"publicView\",\n \"newAcceptedAnnotations\",\n \"annotationsMarkedAsMissing\",\n \"documentId\",\n \"showActionError\",\n \"missingAnnotations\",\n ]),\n ...mapState(\"selection\", [\n \"spanSelection\",\n \"selectedEntities\",\n \"spanLoading\",\n ]),\n ...mapState(\"display\", [\"labelWidth\", \"annotationWidth\"]),\n ...mapState(\"project\", [\"showAnnotationTranslations\"]),\n ...mapGetters(\"document\", [\n \"isAnnotationInEditMode\",\n \"annotationIsNotFound\",\n \"isDocumentReviewed\",\n ]),\n defaultSpan() {\n if (\n this.annotation &&\n this.annotation.span &&\n this.annotation.span.length > 0\n ) {\n return this.annotation.span[0];\n }\n return null;\n },\n spanForEditing() {\n return (\n this.spanSelection &&\n isElementArray(this.spanSelection) &&\n this.isAnnotationInEditMode(this.currentAnnotationId())\n );\n },\n isAnnotation() {\n return (\n this.annotation &&\n this.isAnnotationInEditMode(\n this.currentAnnotationId(),\n this.editAnnotation.index\n )\n );\n },\n hoverEmptyLabelRows() {\n return (\n this.hoveredAnnotationSet &&\n this.hoveredAnnotationSet.type == \"missing\" &&\n this.annotationSet &&\n !this.annotationIsNotFound(this.annotationSet, this.label) &&\n this.annotationSet.id === this.hoveredAnnotationSet.annotationSet.id &&\n this.annotationSet.label_set.id ===\n this.hoveredAnnotationSet.annotationSet.label_set.id &&\n this.hoveredEmptyLabels() === this.label.id\n );\n },\n hoverPendingAnnotationRows() {\n return (\n this.hoveredAnnotationSet &&\n this.hoveredAnnotationSet.type == \"accept\" &&\n this.annotation &&\n this.hoveredNotCorrectAnnotations() === this.annotation.id\n );\n },\n },\n watch: {\n labelWidth(width) {\n this.labelContainerWidth = width;\n },\n labelContainerWidth(width) {\n this.setLabelWidth(width);\n },\n annotationId(newAnnotationId) {\n this.checkAnnotationSelection(newAnnotationId);\n },\n editAnnotation(newValue) {\n if (!newValue) {\n this.isLoading = false;\n }\n },\n newAcceptedAnnotations(newValue) {\n if (newValue) {\n this.enableLoading(newValue);\n } else {\n this.isLoading = false;\n }\n },\n annotationsMarkedAsMissing(newValue) {\n if (newValue) {\n this.enableLoading();\n } else {\n this.isLoading = false;\n }\n },\n showActionError(newValue) {\n if (newValue) {\n this.isLoading = false;\n }\n },\n selectedEntities(newValue) {\n if (!newValue) return;\n\n if (this.isAnnotationInEditMode(this.currentAnnotationId())) {\n this.isLoading = true;\n }\n },\n spanSelection(newValue) {\n // check if spanSelection has new value from entity selection\n // to stop loading after the text appears in the field\n if (newValue) {\n this.isLoading = false;\n }\n },\n isChecked() {\n if (this.isCheckboxAvailable) {\n this.handleCheckboxChanged(this.isChecked);\n } else {\n if (this.isChecked !== this.checkboxDefaultValue) {\n this.$buefy.dialog.confirm({\n container: \"#app .dv-ui-app-container\",\n canCancel: [\"button\"],\n message: this.$t(\"edit_ann_content_warning\"),\n onConfirm: () => {\n this.isCheckboxAvailable = true;\n this.handleCheckboxChanged(this.isChecked);\n },\n onCancel: () => {\n this.isChecked = !this.isChecked;\n },\n });\n }\n }\n },\n },\n mounted() {\n this.checkAnnotationSelection(this.annotationId);\n this.labelContainerWidth = this.labelWidth;\n },\n methods: {\n ...mapActions(\"display\", [\"setLabelWidth\"]),\n handleCheckboxChanged(value) {\n this.$store\n .dispatch(\"document/updateAnnotation\", {\n updatedValues: {\n metadata: {\n checkbox: {\n is_checked: value,\n },\n },\n },\n annotationId: this.annotation.id,\n annotationSet: this.annotationSet,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n },\n checkAnnotationSelection(newAnnotationId) {\n if (\n newAnnotationId &&\n this.annotation &&\n this.annotation.id == newAnnotationId\n ) {\n this.isSelected = true;\n // remove annotation selection after some time\n // this.annotationAnimationTimeout = setTimeout(() => {\n // this.$store.dispatch(\"document/setSidebarAnnotationSelected\", null);\n // this.isSelected = false;\n // }, 1200);\n\n // Check if sidebarAnnotationSelected changed from a click or hover\n const runAnimation = () => {\n this.$el.scrollIntoView({\n behavior: \"smooth\",\n block: \"center\",\n inline: \"nearest\",\n });\n };\n runAnimation();\n } else {\n this.isSelected = false;\n }\n },\n currentAnnotationId() {\n if ((!this.annotationSet && !this.labelSet) || !this.label) return;\n\n if (this.annotation && this.annotation.id) return this.annotation.id;\n\n const setId =\n this.annotationSet && this.annotationSet.id\n ? this.annotationSet.id\n : this.labelSet.id;\n\n return `${setId}_${this.label.id}`;\n },\n onAnnotationHoverEnter(span) {\n if (span) {\n this.$store.dispatch(\"document/setDocumentAnnotationSelected\", {\n annotation: this.annotation,\n label: this.label,\n span,\n scrollTo: false,\n });\n }\n },\n onAnnotationHoverLeave() {\n this.$store.dispatch(\"document/disableDocumentAnnotationSelected\");\n },\n onAnnotationClick() {\n this.$store.dispatch(\"document/scrollToDocumentAnnotationSelected\");\n },\n hoveredEmptyLabels() {\n // This method will change the style of the Empty Annotations in the same Label Set\n // when the \"mark all as missing\" button is hovered\n if (!this.hoveredAnnotationSet) return;\n\n const labels = this.hoveredAnnotationSet.annotationSet.labels.map(\n (label) => {\n return JSON.parse(JSON.stringify(label));\n }\n );\n const found = labels.find((l) => l.id === this.label.id);\n\n if (found && found.annotations.length === 0) return found.id;\n return null;\n },\n hoveredNotCorrectAnnotations() {\n // This method will change the style of Annotations in the same Label Set\n // when the \"Accept all\" button is hovered\n if (!this.hoveredAnnotationSet) return;\n\n const annotations =\n this.hoveredAnnotationSet.annotationSet.labels.flatMap((label) => {\n return label.annotations;\n });\n\n // Check if there are no annotations\n if (annotations.length === 0) return;\n\n const found = annotations.find(\n (ann) => ann.id === this.annotation.id && !ann.is_correct\n );\n\n if (found) {\n return found.id;\n } else {\n return null;\n }\n },\n showAnnotationActions() {\n return (\n !this.publicView &&\n !this.isDocumentReviewed &&\n (this.isLoading ||\n this.showLinkButton() ||\n this.showAcceptButton() ||\n this.showDeclineButton() ||\n this.showMissingButton() ||\n this.showCancelButton() ||\n this.showSaveButton() ||\n this.showRestoreButton())\n );\n },\n showLinkButton() {\n return (\n !this.editAnnotation &&\n this.annotation &&\n !this.isLoading &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showAcceptButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotation &&\n !this.annotation.is_correct &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showDeclineButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotation &&\n this.hoveredAnnotation === this.annotation.id\n );\n },\n showMissingButton() {\n return (\n !this.editAnnotation &&\n !this.isLoading &&\n this.hoveredAnnotation &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n !this.annotation &&\n !this.annotationIsNotFound(this.annotationSet, this.label)\n );\n },\n showRestoreButton() {\n return (\n !this.editAnnotation &&\n this.hoveredAnnotation &&\n !this.isLoading &&\n !this.isAnnotationInEditMode(this.currentAnnotationId()) &&\n this.annotationIsNotFound(this.annotationSet, this.label)\n );\n },\n showCancelButton() {\n if (!this.editAnnotation || this.isLoading) {\n return false;\n }\n return this.isAnnotationInEditMode(this.currentAnnotationId());\n },\n showSaveButton() {\n if (!this.editAnnotation || this.isLoading) return false;\n\n // Check if it's an Annotation or Empty Annotation\n if (this.isAnnotation) {\n return true;\n } else {\n if (!this.isAnnotationInEditMode(this.currentAnnotationId())) return;\n\n // check if spans are selected\n return this.spanSelection && this.spanSelection.length > 0;\n }\n },\n handleMissingAnnotation() {\n if (!this.label || !this.annotationSet) return;\n\n this.isLoading = true;\n\n // will emit to the DocumentAnnotations component, where the method is handled\n // & dispatched to the store\n this.$parent.$emit(\n \"handle-missing-annotation\",\n this.label.id,\n this.labelSet.id,\n this.annotationSet.id,\n false\n );\n },\n handleSaveChanges(decline = false) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n // Verify if we are editing a filled or empty annotation\n if (\n this.annotation &&\n (this.showAcceptButton() ||\n this.showDeclineButton() ||\n this.isAnnotationInEditMode(\n this.currentAnnotationId(),\n this.editAnnotation.index\n ))\n ) {\n let spans = [];\n let showAiWarning = false;\n\n if (!decline) {\n Object.keys(this.$refs).forEach((ref) => {\n if (ref.includes(`span_${this.annotation.id}`)) {\n const refElement = this.$refs[ref][0];\n // call child component createSpan method\n if (!refElement) return;\n\n const span = refElement.createSpan();\n\n // only add span if it's not null (offset_string not empty)\n if (span) {\n showAiWarning = span.is_custom;\n spans.push(span);\n }\n }\n });\n }\n\n if (showAiWarning) {\n this.$buefy.dialog.confirm({\n container: \"#app .dv-ui-app-container\",\n canCancel: [\"button\"],\n message: this.$t(\"edit_ann_content_warning\"),\n onConfirm: () => this.saveAnnotationChanges(spans, decline),\n onCancel: () => this.handleCancelButton(),\n });\n } else {\n this.saveAnnotationChanges(spans, decline);\n }\n } else if (\n !this.annotation &&\n this.isAnnotationInEditMode(this.currentAnnotationId())\n ) {\n this.saveEmptyAnnotationChanges();\n }\n },\n handleRestore() {\n this.isLoading = true;\n\n const foundItem = this.missingAnnotations.find(\n (item) =>\n item.annotation_set === this.annotationSet.id &&\n item.label === this.label.id &&\n item.label_set === this.labelSet.id\n );\n\n this.$store\n .dispatch(\"document/deleteMissingAnnotation\", foundItem.id)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.isLoading = false;\n this.closedTag = null;\n });\n },\n saveAnnotationChanges(spans, isToDecline) {\n // This function deals with declining Annotations\n // or editing an Annotation or a part of it (if multi line)\n setTimeout(() => {\n this.isLoading = true;\n }, 100);\n\n // check if annotation set was changed\n if (\n !isToDecline &&\n ((this.editAnnotation.annotationSet &&\n (this.editAnnotation.annotationSet.id !== this.annotationSet.id ||\n (this.editAnnotation.annotationSet.id == null &&\n this.labelSet.id !== this.editAnnotation.labelSet.id))) ||\n (this.editAnnotation.label &&\n this.editAnnotation.label.id !== this.label.id))\n ) {\n // first delete annotation, then create new one\n this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: this.annotation.id,\n })\n .then(() => {\n const annotationToCreate = {\n document: this.documentId,\n span: spans,\n label: this.editAnnotation.label.id,\n is_correct: true,\n revised: false,\n };\n\n if (this.editAnnotation.annotationSet.id) {\n annotationToCreate.annotation_set =\n this.editAnnotation.annotationSet.id;\n } else {\n annotationToCreate.label_set = this.editAnnotation.labelSet.id;\n }\n\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"error_creating_annotation\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.loading = false;\n });\n });\n } else {\n let updatedString; // what will be sent to the API\n let storeAction; // if it will be 'delete' or 'patch'\n\n // Verify if we delete the entire Annotation or a part of the text\n if (isToDecline || spans.length === 0) {\n storeAction = \"document/deleteAnnotation\";\n } else {\n // Editing the Annotation\n // Deleting part of multi-line Annotation\n storeAction = \"document/updateAnnotation\";\n\n updatedString = {\n is_correct: true,\n revised: true,\n span: spans,\n };\n }\n\n // Send to the store for the http patch/delete request\n this.$store\n .dispatch(storeAction, {\n updatedValues: updatedString,\n annotationId: this.annotation.id,\n annotationSet: this.annotationSet,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.isLoading = false;\n });\n }\n },\n saveEmptyAnnotationChanges() {\n let annotationToCreate;\n\n if (this.annotationSet && this.annotationSet.id) {\n annotationToCreate = {\n document: this.documentId,\n span: this.spanSelection,\n label: this.label.id,\n annotation_set: this.annotationSet.id,\n is_correct: true,\n revised: false,\n };\n } else {\n // if annotation set id is null\n annotationToCreate = {\n document: this.documentId,\n span: this.spanSelection,\n label: this.label.id,\n label_set: this.labelSet.id,\n is_correct: true,\n revised: false,\n };\n }\n this.isLoading = true;\n\n this.$store\n .dispatch(\"document/createAnnotation\", {\n annotation: annotationToCreate,\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.handleCancelButton();\n });\n },\n handleCancelButton() {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n this.isLoading = false;\n },\n enableLoading(annotations) {\n if (annotations && this.annotation && !this.annotation.is_correct) {\n const found = annotations.find(\n (annotation) => annotation === this.annotation.id\n );\n\n if (found) {\n this.isLoading = true;\n return;\n }\n\n this.isLoading = false;\n return;\n }\n\n // Check for what empty annotations we want to show the loading\n // while waiting for it to be removed from the row\n if (!this.annotationsMarkedAsMissing) {\n this.isLoading = false;\n return;\n }\n\n if (this.annotationsMarkedAsMissing.length > 0) {\n this.annotationsMarkedAsMissing.map((annotation) => {\n // Check if the annotation set and label are marked as missing\n if (\n annotation.label_set === this.labelSet.id &&\n annotation.annotation_set === this.annotationSet.id &&\n annotation.label === this.label.id\n ) {\n // Check if we wanna add loading to all empty annotations\n if (this.hoveredAnnotationSet) {\n this.isLoading = true;\n return;\n }\n\n // or we want to add loading to a single one\n if (\n !this.hoveredAnnotationSet &&\n annotation.label === this.label.id\n ) {\n this.isLoading = true;\n return;\n }\n }\n });\n }\n },\n editAnnotationTranslation(annotationId) {\n if (!annotationId || this.isDocumentReviewed) return;\n\n const baseUrl = api.FILE_URL ? api.FILE_URL : api.DEFAULT_URL;\n\n const annotationDetailsUrl = `${baseUrl}/admin/server/sequenceannotation/${annotationId}/change/`;\n\n window.open(annotationDetailsUrl, \"_blank\");\n },\n searchLabelInDocument() {\n if (this.label) {\n this.$store.dispatch(\"display/enableSearch\", true);\n this.$store.dispatch(\"display/setCurrentSearch\", this.label.name);\n }\n },\n copyAnnotationLink() {\n if (this.annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", this.annotation.id);\n navigator.clipboard.writeText(window.location.href);\n this.$buefy.toast.open({\n container: \"#app .dv-ui-app-container\",\n message: this.$t(\"copied\"),\n });\n }\n },\n selectAnnotation(event) {\n event.stopPropagation();\n if (this.annotation) {\n this.$store.dispatch(\"document/setAnnotationId\", this.annotation.id);\n }\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div>\n <b-tooltip\n :animated=\"false\"\n :position=\"'is-bottom'\"\n :class=\"['left-aligned', 'annotation-details']\"\n >\n <div :class=\"['label-icon']\">\n <div v-if=\"(created(annotation) || edited(annotation)) && !publicView\">\n <div\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'user-icon',\n ]\"\n >\n <AcceptedUser />\n </div>\n </div>\n <div\n v-else-if=\"annotationIsNotFound(annotationSet, label) && !publicView\"\n :class=\"['annotation-details-icon', animate ? 'animated-ripple' : '']\"\n >\n <NotFoundIcon />\n </div>\n <div\n v-else-if=\"notExtracted(annotation) && !publicView\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'question-icon',\n ]\"\n >\n <QuestionMark />\n </div>\n <div v-else>\n <div\n v-if=\"accepted(annotation) && !publicView\"\n :class=\"[\n 'annotation-details-icon success',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <AcceptedCheckMark />\n </div>\n <div\n v-else\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <CheckMark class=\"pending\" />\n </div>\n </div>\n </div>\n\n <template #content>\n <div class=\"label-details\">\n <div\n v-if=\"\n annotation && annotation.metadata && annotation.metadata.checkbox\n \"\n class=\"label-description\"\n >\n <b-icon size=\"is-small\" icon=\"square-check\" />\n <span> {{ $t(\"checkbox_ann_details\") }}</span>\n </div>\n <div v-if=\"description\" class=\"label-description\">\n <span>{{ description }}</span>\n </div>\n <div\n v-if=\"confidence(annotation)\"\n id=\"annotation-details-confidence\"\n :class=\"['confidence', publicView && 'tooltip-in-public-view']\"\n >\n <span>{{ $t(\"confidence\") }}</span\n ><span\n :class=\"[\n 'value',\n confidence(annotation) <= 0.2\n ? 'red'\n : confidence(annotation) <= 0.5\n ? 'yellow'\n : '',\n ]\"\n >{{ Math.floor(confidence(annotation) * 100) / 100 }}</span\n >\n </div>\n <div v-if=\"!publicView\" class=\"revision\">\n <div class=\"detail-icons\">\n <div v-if=\"created(annotation) || edited(annotation)\">\n <div\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'user-icon',\n ]\"\n >\n <AcceptedUser />\n </div>\n </div>\n <div\n v-else-if=\"notExtracted(annotation)\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n 'question-icon',\n ]\"\n >\n <QuestionMark />\n </div>\n <div v-else>\n <div\n v-if=\"accepted(annotation)\"\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <AcceptedCheckMark />\n </div>\n <div\n v-else\n :class=\"[\n 'annotation-details-icon',\n animate ? 'animated-ripple' : '',\n ]\"\n >\n <CheckMark />\n </div>\n </div>\n {{ getText() }}\n </div>\n </div>\n </div>\n </template>\n </b-tooltip>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CheckMark from \"../../assets/images/CheckMark\";\nimport AcceptedCheckMark from \"../../assets/images/AcceptedCheckMark\";\nimport QuestionMark from \"../../assets/images/QuestionMark\";\nimport AcceptedUser from \"../../assets/images/AcceptedUser\";\nimport NotFoundIcon from \"../../assets/images/NotFoundIcon\";\n\nexport default {\n name: \"AnnotationDetails\",\n components: {\n CheckMark,\n QuestionMark,\n AcceptedCheckMark,\n AcceptedUser,\n NotFoundIcon,\n },\n props: {\n description: {\n type: String,\n default: null,\n required: false,\n },\n annotation: {\n type: Object,\n default: null,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n label: {\n type: Object,\n default: null,\n },\n },\n data() {\n return {\n animate: false,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\n \"confidence\",\n \"notExtracted\",\n \"created\",\n \"edited\",\n \"accepted\",\n \"getUser\",\n \"annotationIsNotFound\",\n ]),\n ...mapState(\"document\", [\"publicView\"]),\n },\n watch: {\n annotation(newAnnotation, oldAnnotation) {\n // animate an annotation being accepted\n if (\n newAnnotation &&\n newAnnotation.id &&\n this.accepted(newAnnotation) &&\n !this.accepted(oldAnnotation)\n ) {\n this.animate = true;\n setTimeout(() => {\n this.animate = false;\n }, 2000);\n }\n },\n },\n mounted() {\n this.changePositionOfTooltip();\n },\n methods: {\n getText() {\n if (this.notExtracted(this.annotation)) {\n return this.$t(\"not_found_in_document\");\n } else if (this.created(this.annotation)) {\n return this.getUser(this.annotation)\n ? `${this.$t(\"created_by\")} ${this.getUser(this.annotation)}`\n : this.$t(\"created\");\n } else if (this.accepted(this.annotation)) {\n return this.getUser(this.annotation)\n ? `${this.$t(\"approved_by\")} ${this.getUser(this.annotation)}`\n : this.$t(\"approved\");\n } else {\n return this.$t(\"not_revised_yet\");\n }\n },\n changePositionOfTooltip() {\n // Get all elements\n const annDetails = document.getElementsByClassName(\"annotation-details\");\n\n // Only last 3 rows will change the position\n if (annDetails) {\n let lastElementsInList;\n\n if (annDetails.length >= 3) {\n lastElementsInList = annDetails.length - 2;\n } else {\n return;\n }\n\n for (let i = lastElementsInList; i < annDetails.length; i++) {\n this.updateClass(annDetails, i);\n }\n }\n },\n updateClass(array, index) {\n if (!array[index]) return;\n\n array[index].classList.remove(\"is-bottom\");\n array[index].classList.add(\"is-top\");\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_details.scss\"\n></style>\n","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#E1E1E1\"\n d=\"M18.71,7.21a1,1,0,0,0-1.42,0L9.84,14.67,6.71,11.53A1,1,0,1,0,5.29,13l3.84,3.84a1,1,0,0,0,1.42,0l8.16-8.16A1,1,0,0,0,18.71,7.21Z\"\n />\n </svg>\n</template>\n","import { render } from \"./CheckMark.vue?vue&type=template&id=569e25c6\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4bb543\"\n d=\"M18.71,7.21a1,1,0,0,0-1.42,0L9.84,14.67,6.71,11.53A1,1,0,1,0,5.29,13l3.84,3.84a1,1,0,0,0,1.42,0l8.16-8.16A1,1,0,0,0,18.71,7.21Z\"\n />\n </svg>\n</template>\n","import { render } from \"./AcceptedCheckMark.vue?vue&type=template&id=6b490b92\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n data-name=\"Layer 1\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"#E1E1E1\"\n d=\"M15.33252,9.5A3.5001,3.5001,0,0,0,8.80127,7.75a1.00016,1.00016,0,0,0,1.73242,1A1.50266,1.50266,0,0,1,11.83252,8a1.5,1.5,0,1,1,0,3h-.00244a.94984.94984,0,0,0-.18927.0387,1.03181,1.03181,0,0,0-.19861.04065.98275.98275,0,0,0-.15552.10485,1.00813,1.00813,0,0,0-.162.10975,1.00464,1.00464,0,0,0-.11706.1737.97789.97789,0,0,0-.09668.14417,1.02252,1.02252,0,0,0-.04285.21191A.94847.94847,0,0,0,10.83252,12v1l.00232.01135.0011.49109a1.00016,1.00016,0,0,0,1,.99756h.00244a1.00006,1.00006,0,0,0,.99756-1.00244l-.00153-.66138A3.49363,3.49363,0,0,0,15.33252,9.5Zm-4.20264,6.79A1,1,0,0,0,11.82959,18a1.036,1.036,0,0,0,.71045-.29,1.01517,1.01517,0,0,0,0-1.41992A1.03425,1.03425,0,0,0,11.12988,16.29Z\"\n />\n </svg>\n</template>\n","import { render } from \"./QuestionMark.vue?vue&type=template&id=2e7d5db2\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n <path\n fill=\"#4bb543\"\n d=\"M15.71,12.71a6,6,0,1,0-7.42,0,10,10,0,0,0-6.22,8.18,1,1,0,0,0,2,.22,8,8,0,0,1,15.9,0,1,1,0,0,0,1,.89h.11a1,1,0,0,0,.88-1.1A10,10,0,0,0,15.71,12.71ZM12,12a4,4,0,1,1,4-4A4,4,0,0,1,12,12Z\"\n />\n </svg>\n</template>\n","import { render } from \"./AcceptedUser.vue?vue&type=template&id=2ff8b4cc\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <svg\n width=\"10\"\n height=\"11\"\n viewBox=\"0 0 10 11\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M6.17854 5.83544L9.75604 2.25794C10.0819 1.9321 10.0819 1.40544 9.75604 1.0796C9.43021 0.75377 8.90354 0.75377 8.57771 1.0796L5.00021 4.6571L1.42271 1.0796C1.09688 0.75377 0.570208 0.75377 0.244375 1.0796C-0.0814583 1.40544 -0.0814583 1.9321 0.244375 2.25794L3.82188 5.83544L0.244375 9.41294C-0.0814583 9.73877 -0.0814583 10.2654 0.244375 10.5913C0.406875 10.7538 0.620208 10.8354 0.833542 10.8354C1.04688 10.8354 1.26021 10.7538 1.42271 10.5913L5.00021 7.01377L8.57771 10.5913C8.74021 10.7538 8.95354 10.8354 9.16687 10.8354C9.38021 10.8354 9.59354 10.7538 9.75604 10.5913C10.0819 10.2654 10.0819 9.73877 9.75604 9.41294L6.17854 5.83544Z\"\n fill=\"#E1E1E1\"\n />\n </svg>\n</template>\n","import { render } from \"./NotFoundIcon.vue?vue&type=template&id=7e3b1b74\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnotationDetails.vue?vue&type=template&id=21369c27&scoped=true\"\nimport script from \"./AnnotationDetails.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationDetails.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_details.scss?vue&type=style&index=0&id=21369c27&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-21369c27\"]])\n\nexport default __exports__","<template>\n <div :id=\"annotation.id\" ref=\"annotation\" class=\"annotation\">\n <span\n :id=\"annotation.id\"\n ref=\"contentEditable\"\n :class=\"[\n 'annotation-value',\n 'keyboard-nav',\n isLoading && 'saving-changes',\n showActionError &&\n editAnnotation &&\n editAnnotation.id === annotation.id &&\n 'error-editing',\n isSpanBeingEdited && 'clicked-ann',\n ]\"\n role=\"textbox\"\n :contenteditable=\"isSpanBeingEdited\"\n @click=\"handleEditAnnotation\"\n @paste=\"handlePaste\"\n @keypress.enter=\"saveAnnotationChanges\"\n >\n {{ span.offset_string }}\n </span>\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport { isElementArray } from \"../../utils/utils\";\n\n/**\n * This component is responsible for managing filled annotations.\n */\nexport default {\n name: \"AnnotationContent\",\n props: {\n annotation: {\n type: Object,\n required: true,\n },\n span: {\n type: [Object, Array],\n required: true,\n },\n spanIndex: {\n type: Number,\n required: true,\n },\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n required: true,\n },\n },\n data() {\n return {\n isLoading: false,\n };\n },\n computed: {\n ...mapGetters(\"document\", [\"isAnnotationInEditMode\", \"isDocumentReviewed\"]),\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"publicView\",\n \"annotations\",\n \"newAcceptedAnnotations\",\n \"showActionError\",\n ]),\n isSpanBeingEdited() {\n return this.isAnnotationInEditMode(this.annotation.id, this.spanIndex);\n },\n isAnnotationBeingEdited() {\n return (\n this.editAnnotation && this.annotation.id === this.editAnnotation.id\n );\n },\n },\n\n watch: {\n span() {\n // span content changed, ex. from click on entity\n this.setText(this.span.offset_string);\n },\n },\n\n methods: {\n setText(text) {\n this.$refs.contentEditable.textContent = text;\n },\n getAnnotationText() {\n return this.$refs.contentEditable.textContent.trim();\n },\n handleEditAnnotation(event) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n if (event) {\n event.preventDefault();\n }\n\n if (\n !this.publicView &&\n !this.isDocumentReviewed &&\n !this.isSpanBeingEdited &&\n !this.isLoading\n ) {\n if (!this.isAnnotationBeingEdited) {\n this.$store.dispatch(\n \"selection/setSpanSelection\",\n this.annotation.span\n );\n }\n\n this.$store\n .dispatch(\"document/setEditAnnotation\", {\n id: this.annotation.id,\n index: this.spanIndex,\n label: this.label,\n labelSet: this.annotationSet.label_set,\n annotationSet: this.annotationSet,\n pageNumber: this.span.page_index + 1,\n })\n .then(() => {\n if (this.$refs.contentEditable) {\n this.$refs.contentEditable.focus();\n }\n })\n .catch((error) => {\n console.log(error);\n });\n // check if this is part of a group of spans to show the whole bounding box as a placeholder\n if (this.annotation.selection_bbox && this.annotation.span.length > 1) {\n this.$store.dispatch(\"selection/setPlaceholderSelection\", [\n this.annotation.selection_bbox,\n ]);\n }\n }\n },\n handleCancel() {\n this.setText(this.span.offset_string);\n this.isLoading = false;\n if (this.$refs.contentEditable) {\n this.$refs.contentEditable.blur();\n }\n\n this.$store.dispatch(\"selection/setSpanSelection\", null);\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n saveAnnotationChanges(event) {\n if (this.publicView || this.isDocumentReviewed) return;\n\n if (event) {\n event.preventDefault();\n }\n\n // Validate if we are declining an Annotation that is not multi-lined\n // by deleting the content instead of clicking the 'decline' button\n let isToDecline =\n this.getAnnotationText().length === 0 &&\n (!isElementArray(this.annotation.span) ||\n this.annotation.span.length === 1);\n\n // API call handled in parent component - AnnotationRow\n this.$emit(\"save-annotation-changes\", isToDecline);\n },\n createSpan() {\n const annotationText = this.getAnnotationText();\n if (!annotationText) return;\n\n return {\n offset_string: annotationText,\n page_index: this.span.page_index,\n x0: this.span.x0,\n x1: this.span.x1,\n y0: this.span.y0,\n y1: this.span.y1,\n start_offset: this.span.start_offset,\n end_offset: this.span.end_offset,\n is_custom: this.span.offset_string !== annotationText,\n };\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","export function sleep(duration) {\n new Promise((resolve) => setTimeout(resolve, duration));\n}\n\nexport function getURLQueryParam(param) {\n const queryString = window.location.search;\n const urlParams = new URLSearchParams(queryString);\n\n if (urlParams.has(param)) {\n return urlParams.get(param);\n }\n return undefined;\n}\n\nexport function getURLPath(value) {\n const path = window.location.pathname;\n\n if (!path.includes(`/${value}/`)) return;\n\n const id = path.split(value)[1].split(\"/\")[1];\n\n if (id === \"\") return;\n\n return id;\n}\n\nexport function getURLValueFromHash(value) {\n const hash = window.location.hash;\n if (!hash.includes(`#${value}`)) return;\n\n const id = hash.split(`#${value}`)[1].replace(\"/\", \"\");\n\n if (id === \"\") return;\n\n return id;\n}\n\nexport function setURLQueryParam(query, value, deleteParam = \"\") {\n const url = new URL(window.location.href);\n if (value != \"\") {\n if (deleteParam != \"\") {\n url.searchParams.delete(deleteParam);\n }\n url.searchParams.set(query, value);\n } else {\n url.searchParams.delete(query);\n }\n window.history.pushState(null, \"\", url.toString());\n}\n\nexport function setURLAnnotationHash(annotationId) {\n if (annotationId) {\n window.location.hash = `ann${annotationId}`;\n } else {\n history.pushState(\n \"\",\n document.title,\n window.location.pathname + window.location.search\n );\n }\n}\n\nexport function navigateToNewDocumentURL(oldId, newId) {\n const url = window.location.href;\n const newUrl = url.replace(oldId, newId);\n window.location.replace(newUrl);\n}\n\nexport function navigateToDocumentsList(path, projectId) {\n if (!path) return;\n\n const lastCharOfString = path.charAt(path.length - 1);\n let slash = \"/\";\n\n if (lastCharOfString === slash) {\n slash = \"\";\n }\n\n const parameters = `?project=${projectId}`;\n\n const newPath = `${path}${slash}${parameters}`;\n\n window.location.href = newPath;\n\n return true;\n}\n\nexport function isElementArray(element) {\n return Array.isArray(element);\n}\n\nexport function debounce(cb, duration) {\n let timer;\n return (...args) => {\n clearTimeout(timer);\n timer = setTimeout(() => {\n cb(...args);\n }, duration);\n };\n}\n","import { render } from \"./AnnotationContent.vue?vue&type=template&id=8aa3a3c6&scoped=true\"\nimport script from \"./AnnotationContent.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationContent.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=8aa3a3c6&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-8aa3a3c6\"]])\n\nexport default __exports__","<template>\n <div v-if=\"!publicView && !isDocumentReviewed\" class=\"empty-annotation\">\n <span\n :id=\"emptyAnnotationId()\"\n ref=\"emptyAnnotation\"\n :class=\"[\n 'annotation-value',\n showActionError && isAnnotationBeingEdited() && 'error-editing',\n isAnnotationBeingEdited() && 'clicked-ann',\n isMissingAnnotation && 'missing-annotation',\n !isMissingAnnotation && 'keyboard-nav',\n ]\"\n :contenteditable=\"isAnnotationBeingEdited()\"\n @keypress.enter=\"saveEmptyAnnotationChanges\"\n @click=\"handleEditEmptyAnnotation\"\n @focus=\"handleEditEmptyAnnotation\"\n ><!-- eslint-disable vue/no-v-html -->\n <span\n v-if=\"isFindingAnnotation\"\n class=\"label-empty-clicked\"\n v-html=\"$t('draw_box_document', { label_name: label.name })\"\n >\n </span>\n <span v-else-if=\"isMissingAnnotation\" class=\"not-found-text\">\n {{ $t(\"missing_from_document\") }}\n </span>\n <span v-else-if=\"span && span.offset_string\">\n {{ span.offset_string }}\n </span>\n <span v-else class=\"label-empty\">\n {{ $t(\"no_data_found\") }}\n </span>\n <!--eslint-enable-->\n </span>\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\n\n/**\n * This component is responsible for managing empty annotations (labels with no annotations).\n */\nexport default {\n name: \"EmptyAnnotation\",\n props: {\n label: {\n type: Object,\n required: true,\n },\n annotationSet: {\n type: Object,\n default: null,\n },\n labelSet: {\n type: Object,\n required: true,\n },\n span: {\n type: Object,\n default: null,\n required: false,\n },\n spanIndex: {\n type: Number,\n required: false,\n default: 0,\n },\n isMissingAnnotation: {\n type: Boolean,\n required: true,\n default: false,\n },\n },\n computed: {\n ...mapGetters(\"document\", [\"isAnnotationInEditMode\", \"isDocumentReviewed\"]),\n ...mapState(\"selection\", [\"spanSelection\"]),\n ...mapState(\"document\", [\n \"editAnnotation\",\n \"publicView\",\n \"showActionError\",\n ]),\n isFindingAnnotation() {\n return (\n this.editAnnotation &&\n this.editAnnotation.id === this.emptyAnnotationId() &&\n (!this.span || !this.span.offset_string)\n );\n },\n },\n\n watch: {\n span(newValue) {\n // if (newValue) {\n // if (isElementArray(newValue))\n // newValue.map((span) => {\n // if (span.offset_string) {\n // span.offset_string =\n // this.$refs.emptyAnnotation.textContent.trim();\n // span.offset_string_original =\n // this.$refs.emptyAnnotation.textContent.trim();\n // }\n // });\n // }\n },\n spanSelection(newValue) {\n if (!newValue) return;\n\n // Check if the bbox has no string\n if (newValue[0] && !newValue[0].offset_string) {\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"selection/disableSelection\");\n }\n },\n },\n\n methods: {\n emptyAnnotationId() {\n if ((!this.annotationSet && !this.labelSet) || !this.label) return;\n const id =\n this.annotationSet && this.annotationSet.id != null\n ? this.annotationSet.id\n : this.labelSet.id;\n return `${id}_${this.label.id}`;\n },\n isAnnotationBeingEdited() {\n return this.isAnnotationInEditMode(this.emptyAnnotationId());\n },\n handleEditEmptyAnnotation() {\n if (this.isMissingAnnotation) return;\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/setEditAnnotation\", {\n id: this.emptyAnnotationId(),\n index: this.spanIndex,\n label: this.label,\n labelSet: this.labelSet,\n annotationSet: this.annotationSet,\n });\n },\n saveEmptyAnnotationChanges(event) {\n if (event) {\n event.preventDefault();\n }\n\n // API call handled in parent component - AnnotationRow\n this.$emit(\"save-empty-annotation-changes\");\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./EmptyAnnotation.vue?vue&type=template&id=153d72f9&scoped=true\"\nimport script from \"./EmptyAnnotation.vue?vue&type=script&lang=js\"\nexport * from \"./EmptyAnnotation.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=153d72f9&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-153d72f9\"]])\n\nexport default __exports__","<template>\n <div class=\"action-buttons\">\n <!-- label multi false nav buttons -->\n <b-tooltip\n v-if=\"isLabelMultiFalseAndGroupOfAnns(label) && !showSave\"\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('nav_label_anns')\"\n >\n <div class=\"ann-nav-btns\">\n <span>{{ label.annotations.length }}</span>\n <b-icon\n icon=\"angle-down\"\n class=\"angle-icon center-icon button-icon is-link\"\n @click.stop=\"nextAnn\"\n />\n </div>\n </b-tooltip>\n\n <!-- link button -->\n <b-button\n v-if=\"showLink\"\n id=\"annotation-link-btn\"\n type=\"is-ghost\"\n class=\"button-action is-button-icon\"\n @click.stop=\"link\"\n >\n <b-tooltip\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('annotation_link')\"\n >\n <b-icon icon=\"link\" class=\"link-icon center-icon button-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- decline button -->\n <b-button\n v-if=\"showDecline\"\n class=\"button-action is-button-icon decline-btn\"\n type=\"is-ghost\"\n @click.stop=\"decline\"\n >\n <b-tooltip\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('decline')\"\n >\n <b-icon icon=\"ban\" class=\"decline-icon center-icon button-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- accept button -->\n <b-button\n v-if=\"showAccept\"\n :class=\"`button-action accept-btn ${\n showText ? 'is-button-text' : 'is-button-icon'\n }`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"accept\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"accept\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('accept')\"\n >\n <b-icon\n icon=\"circle-check\"\n class=\"accept-icon center-icon button-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- search button -->\n <b-button\n v-if=\"showSearch\"\n type=\"is-ghost\"\n :class=\"`button-action ${\n showText ? 'is-button-text-ghost' : 'is-button-icon'\n }`\"\n @click.stop=\"search\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{\n $t(\"search_in_document\")\n }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('search_in_document')\"\n >\n <b-icon icon=\"search\" class=\"center-icon button-icon search-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- missing button -->\n <b-button\n v-if=\"showMissing\"\n type=\"is-ghost\"\n :class=\"`button-action ${\n showText ? 'is-button-text-ghost' : 'is-button-icon'\n }`\"\n @click.stop=\"markAsMissing\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{\n $t(\"missing_annotation\")\n }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('missing_annotation')\"\n >\n <b-icon\n icon=\"magnifying-glass-minus\"\n class=\"center-icon button-icon missing-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- save button -->\n <b-button\n v-if=\"showSave\"\n id=\"save-ann\"\n :class=\"`button-action ${showText ? 'is-button-text' : 'is-button-icon'}`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"save\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"save\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('save')\"\n >\n <b-icon icon=\"floppy-disk\" class=\"button-icon center-icon save-icon\" />\n </b-tooltip>\n </b-button>\n\n <!-- Restore not found annotations -->\n <b-button\n v-if=\"showRestore\"\n :class=\"`button-action restore-btn ${\n showText ? 'is-button-text' : 'is-button-icon'\n }`\"\n :type=\"showText ? 'is-primary' : 'is-ghost'\"\n @click.stop=\"restore\"\n >\n <span v-if=\"showText\" class=\"button-text\">{{ $t(\"restore\") }}</span>\n <b-tooltip\n v-else\n :delay=\"tooltipDelay\"\n position=\"is-left\"\n :label=\"$t('restore')\"\n >\n <b-icon\n icon=\"trash-arrow-up\"\n class=\"center-icon button-icon restore-icon\"\n />\n </b-tooltip>\n </b-button>\n\n <!-- cancel button -->\n <b-button\n v-if=\"showCancel\"\n class=\"button-action is-button-icon\"\n :title=\"$t('cancel')\"\n type=\"is-ghost\"\n @click.stop=\"cancel\"\n >\n <b-icon icon=\"xmark\" class=\"cancel-icon center-icon button-icon\" />\n </b-button>\n\n <!-- loading -->\n <b-icon v-if=\"isLoading\" icon=\"spinner\" class=\"fa-spin spinner-icon\" />\n </div>\n</template>\n<script>\n/* Component for showing actions for each annotation row */\nimport { mapGetters, mapState } from \"vuex\";\nimport { TEXT_BREAKPOINT_WIDTH } from \"../../constants\";\nexport default {\n name: \"AnnotationActionButtons\",\n props: {\n annotation: {\n type: Object,\n default: null,\n },\n label: {\n type: Object,\n default: null,\n },\n isLoading: {\n type: Boolean,\n },\n showSave: {\n type: Boolean,\n },\n showCancel: {\n type: Boolean,\n },\n showMissing: {\n type: Boolean,\n },\n showAccept: {\n type: Boolean,\n },\n showDecline: {\n type: Boolean,\n },\n showRestore: {\n type: Boolean,\n },\n showLink: {\n type: Boolean,\n },\n showSearch: {\n type: Boolean,\n },\n },\n data() {\n return {\n tooltipDelay: 700,\n showText: window.innerWidth > TEXT_BREAKPOINT_WIDTH,\n };\n },\n computed: {\n ...mapState(\"document\", [\"publicView\"]),\n ...mapGetters(\"document\", [\n \"isDocumentReviewed\",\n \"isLabelMultiFalseAndGroupOfAnns\",\n ]),\n showHoverButton() {\n return (\n !this.isLoading &&\n !this.cancelBtn &&\n !this.saveBtn &&\n !this.publicView &&\n !this.isDocumentReviewed\n );\n },\n },\n created() {\n window.addEventListener(\"resize\", this.resize);\n },\n\n unmounted() {\n window.removeEventListener(\"resize\", this.resize);\n },\n methods: {\n resize() {\n this.showText = window.innerWidth > TEXT_BREAKPOINT_WIDTH;\n },\n search() {\n this.$emit(\"search\");\n },\n save() {\n this.$emit(\"save\");\n },\n cancel() {\n this.$emit(\"cancel\");\n },\n accept() {\n this.$emit(\"accept\");\n },\n markAsMissing() {\n this.$emit(\"mark-as-missing\");\n },\n decline() {\n this.$emit(\"decline\");\n },\n restore() {\n this.$emit(\"restore\");\n },\n link() {\n this.$emit(\"link\");\n },\n nextAnn() {\n this.$store.dispatch(\n \"document/putNextAnnotationInLabelFirst\",\n this.label\n );\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/annotation_action_buttons.scss\"\n></style>\n","import { render } from \"./AnnotationActionButtons.vue?vue&type=template&id=1ca87cbe&scoped=true\"\nimport script from \"./AnnotationActionButtons.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationActionButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/annotation_action_buttons.scss?vue&type=style&index=0&id=1ca87cbe&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-1ca87cbe\"]])\n\nexport default __exports__","<template>\n <svg\n id=\"exchange\"\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n width=\"24\"\n height=\"24\"\n >\n <path\n v-if=\"translation\"\n fill=\"#1A1A1A\"\n d=\"M18,10a1,1,0,0,0-1-1H5.41l2.3-2.29A1,1,0,0,0,6.29,5.29l-4,4a1,1,0,0,0-.21,1.09A1,1,0,0,0,3,11H17A1,1,0,0,0,18,10Zm3.92,3.62A1,1,0,0,0,21,13H7a1,1,0,0,0,0,2H18.59l-2.3,2.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l4-4A1,1,0,0,0,21.92,13.62Z\"\n ></path>\n <path\n v-else\n fill=\"#E1E1E1\"\n d=\"M18,10a1,1,0,0,0-1-1H5.41l2.3-2.29A1,1,0,0,0,6.29,5.29l-4,4a1,1,0,0,0-.21,1.09A1,1,0,0,0,3,11H17A1,1,0,0,0,18,10Zm3.92,3.62A1,1,0,0,0,21,13H7a1,1,0,0,0,0,2H18.59l-2.3,2.29a1,1,0,0,0,0,1.42,1,1,0,0,0,1.42,0l4-4A1,1,0,0,0,21.92,13.62Z\"\n ></path>\n </svg>\n</template>\n\n<script>\nexport default {\n name: \"TranslateArrows\",\n props: {\n translation: {\n type: String,\n default: null,\n required: false,\n },\n },\n};\n</script>\n","import { render } from \"./TranslateArrows.vue?vue&type=template&id=0d0ca21e\"\nimport script from \"./TranslateArrows.vue?vue&type=script&lang=js\"\nexport * from \"./TranslateArrows.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./AnnotationRow.vue?vue&type=template&id=e1003d16&scoped=true\"\nimport script from \"./AnnotationRow.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationRow.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=e1003d16&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e1003d16\"]])\n\nexport default __exports__","import { render } from \"./DocumentLabel.vue?vue&type=template&id=2422371a&scoped=true\"\nimport script from \"./DocumentLabel.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentLabel.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=2422371a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-2422371a\"]])\n\nexport default __exports__","<template>\n <div class=\"annotation-options\">\n <div id=\"annotation-search\">\n <b-field>\n <b-taginput\n v-model=\"search\"\n ellipsis\n attached\n icon=\"search\"\n :placeholder=\"$t('search')\"\n >\n <template #tag=\"props\">\n <span>{{ labelNameForAnnotationId(props.tag) || props.tag }}</span>\n </template>\n </b-taginput>\n </b-field>\n </div>\n <div id=\"annotation-filters\">\n <b-switch\n v-model=\"annotationFilters.showFeedbackNeeded\"\n class=\"is-small\"\n >{{ $t(\"human_feedback_needed\") }}</b-switch\n >\n <b-switch v-model=\"annotationFilters.showEmpty\" class=\"is-small\">{{\n $t(\"label_missing_annotations\")\n }}</b-switch>\n <b-switch v-model=\"annotationFilters.showAccepted\" class=\"is-small\">{{\n $t(\"accepted_annotations\")\n }}</b-switch>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nexport default {\n name: \"AnnotationFilters\",\n data() {\n return {\n search: [],\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"annotationSets\",\n \"annotationFilters\",\n \"annotationSearch\",\n ]),\n ...mapGetters(\"document\", [\"annotationById\", \"labelOfAnnotation\"]),\n },\n\n watch: {\n search() {\n if (this.search.length > 0) {\n this.$emit(\"openAll\");\n }\n if (this.search != this.annotationSearch) {\n this.$store.dispatch(\"document/setAnnotationSearch\", this.search);\n }\n },\n },\n mounted() {\n this.search = this.annotationSearch;\n },\n methods: {\n labelNameForAnnotationId(annotationId) {\n const annotation = this.annotationById(Number(annotationId));\n if (annotation) {\n const label = this.labelOfAnnotation(annotation);\n if (label) {\n return label.name;\n }\n }\n return false;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./AnnotationFilters.vue?vue&type=template&id=e268669e&scoped=true\"\nimport script from \"./AnnotationFilters.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationFilters.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=e268669e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-e268669e\"]])\n\nexport default __exports__","<template>\n <div class=\"annotations-skeleton\">\n <div class=\"label-set-name-skeleton\">\n <b-skeleton\n width=\"20%\"\n height=\"8px\"\n />\n </div>\n\n <!-- Label rows -->\n <div\n v-for=\"n in numberOfLabelRows\"\n :key=\"n\"\n >\n <LoadingLabels />\n </div>\n </div>\n</template>\n\n<script>\nimport LoadingLabels from \"./LoadingLabels\";\n\n/**\n * This component shows a skeleton instead of the label sets\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingAnnotations\",\n components: { LoadingLabels },\n data() {\n return {\n numberOfLabelRows: 7\n };\n }\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","<template>\n <div class=\"label-properties-skeleton\">\n <div class=\"loading-left\">\n <div class=\"circle\">\n <b-skeleton\n circle\n width=\"16px\"\n height=\"16px\"\n />\n </div>\n <div class=\"label-skeleton\">\n <b-skeleton\n width=\"70%\"\n height=\"8px\"\n />\n </div>\n </div>\n\n <div class=\"loading-right\">\n <b-skeleton\n width=\"80%\"\n height=\"8px\"\n />\n </div>\n </div>\n</template>\n\n<script>\n/**\n * This component shows a skeleton instead of the labels and annotations\n * while some document data is still loading\n */\n\nexport default {\n name: \"LoadingLabels\"\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_annotations.scss\"\n></style>\n","import { render } from \"./LoadingLabels.vue?vue&type=template&id=07542bd0&scoped=true\"\nimport script from \"./LoadingLabels.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingLabels.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=07542bd0&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-07542bd0\"]])\n\nexport default __exports__","import { render } from \"./LoadingAnnotations.vue?vue&type=template&id=90b74e8e&scoped=true\"\nimport script from \"./LoadingAnnotations.vue?vue&type=script&lang=js\"\nexport * from \"./LoadingAnnotations.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=90b74e8e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-90b74e8e\"]])\n\nexport default __exports__","import { render } from \"./DocumentAnnotations.vue?vue&type=template&id=309cdd6e&scoped=true\"\nimport script from \"./DocumentAnnotations.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentAnnotations.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_annotations.scss?vue&type=style&index=0&id=309cdd6e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-309cdd6e\"]])\n\nexport default __exports__","<!-- eslint-disable vue/no-v-html -->\n<template>\n <section class=\"choose-label-set-modal\">\n <b-modal\n ref=\"modal\"\n v-model=\"show\"\n :can-cancel=\"['x', 'outside']\"\n class=\"modal-absolute modal-400 modal-no-footer model-overflow-visible\"\n :on-cancel=\"close\"\n >\n <section class=\"modal-card-body\">\n <div class=\"content\">\n <h3>\n {{ $t(\"new_ann_set_title\") }}\n </h3>\n <div>\n <div v-if=\"labelSetsFilteredForAnnotationSetCreation.length === 0\">\n <p\n v-html=\"\n `${$t('no_multi_ann_labelset_model')}\n ${showBranding ? $t('no_multi_ann_labelset_model_link') : ''}`\n \"\n />\n </div>\n <div v-else>\n <p>\n {{ $t(\"new_ann_set_description\") }}\n </p>\n\n <div class=\"label-set-list\">\n <div\n v-for=\"labelSetItem in labelSetsFilteredForAnnotationSetCreation\"\n :key=\"labelSetItem.id\"\n class=\"label-set-list-row\"\n >\n <b-button\n class=\"full-width\"\n type=\"is-secondary\"\n @click=\"submit(labelSetItem)\"\n >\n {{\n `${labelSetItem.name} ${numberOfLabelSetGroup(\n labelSetItem\n )}`\n }}\n </b-button>\n <div class=\"labels-list\">\n <span\n v-for=\"(label, index) in labelSetItem.labels\"\n :key=\"label.id\"\n >{{\n `${label.name}${\n index + 1 !== labelSetItem.labels.length ? \", \" : \"\"\n }`\n }}</span\n >\n </div>\n </div>\n </div>\n <p class=\"next-step-description\">\n {{ $t(\"new_ann_set_hint\") }}\n </p>\n </div>\n </div>\n </div>\n </section>\n </b-modal>\n </section>\n</template>\n\n<script>\n/**\n * This component shows a modal to choose a label set from the project\n */\n\nimport { mapGetters, mapState } from \"vuex\";\n\nexport default {\n name: \"CreateAnnotationSetModal\",\n data() {\n return {\n show: true,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"document\", [\n \"numberOfLabelSetGroup\",\n \"labelSetsFilteredForAnnotationSetCreation\",\n ]),\n },\n methods: {\n submit(labelSet) {\n this.$emit(\"finish\", labelSet);\n this.close();\n },\n close() {\n this.$store.dispatch(\"display/showChooseLabelSetModal\", null);\n this.$emit(\"close\");\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/choose_label_set_modal.scss\"\n></style>\n","import { render } from \"./ChooseLabelSetModal.vue?vue&type=template&id=565aea8a&scoped=true\"\nimport script from \"./ChooseLabelSetModal.vue?vue&type=script&lang=js\"\nexport * from \"./ChooseLabelSetModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/choose_label_set_modal.scss?vue&type=style&index=0&id=565aea8a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-565aea8a\"]])\n\nexport default __exports__","<template>\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M4.5 4.94922C4.30222 4.94922 4.10888 5.00787 3.94443 5.11775C3.77998 5.22763 3.65181 5.38381 3.57612 5.56654C3.50043 5.74926 3.48063 5.95033 3.51922 6.14431C3.5578 6.33829 3.65304 6.51647 3.79289 6.65633C3.93275 6.79618 4.11093 6.89142 4.30491 6.93C4.49889 6.96859 4.69996 6.94879 4.88268 6.8731C5.06541 6.79741 5.22159 6.66924 5.33147 6.50479C5.44135 6.34034 5.5 6.147 5.5 5.94922C5.5 5.684 5.39464 5.42965 5.20711 5.24211C5.01957 5.05458 4.76522 4.94922 4.5 4.94922ZM4.5 8.44922C4.30222 8.44922 4.10888 8.50787 3.94443 8.61775C3.77998 8.72763 3.65181 8.88381 3.57612 9.06654C3.50043 9.24926 3.48063 9.45033 3.51922 9.64431C3.5578 9.83829 3.65304 10.0165 3.79289 10.1563C3.93275 10.2962 4.11093 10.3914 4.30491 10.43C4.49889 10.4686 4.69996 10.4488 4.88268 10.3731C5.06541 10.2974 5.22159 10.1692 5.33147 10.0048C5.44135 9.84034 5.5 9.647 5.5 9.44922C5.5 9.184 5.39464 8.92965 5.20711 8.74211C5.01957 8.55458 4.76522 8.44922 4.5 8.44922ZM8 3.44922C8.19778 3.44922 8.39112 3.39057 8.55557 3.28069C8.72002 3.17081 8.84819 3.01463 8.92388 2.8319C8.99957 2.64918 9.01937 2.44811 8.98079 2.25413C8.9422 2.06015 8.84696 1.88196 8.70711 1.74211C8.56725 1.60226 8.38907 1.50702 8.19509 1.46843C8.00111 1.42985 7.80004 1.44965 7.61732 1.52534C7.43459 1.60103 7.27841 1.7292 7.16853 1.89365C7.05865 2.0581 7 2.25144 7 2.44922C7 2.71444 7.10536 2.96879 7.29289 3.15633C7.48043 3.34386 7.73478 3.44922 8 3.44922ZM4.5 1.44922C4.30222 1.44922 4.10888 1.50787 3.94443 1.61775C3.77998 1.72763 3.65181 1.88381 3.57612 2.06654C3.50043 2.24926 3.48063 2.45033 3.51922 2.64431C3.5578 2.83829 3.65304 3.01647 3.79289 3.15633C3.93275 3.29618 4.11093 3.39142 4.30491 3.43C4.49889 3.46859 4.69996 3.44879 4.88268 3.3731C5.06541 3.29741 5.22159 3.16924 5.33147 3.00479C5.44135 2.84034 5.5 2.647 5.5 2.44922C5.5 2.184 5.39464 1.92965 5.20711 1.74211C5.01957 1.55458 4.76522 1.44922 4.5 1.44922ZM8 8.44922C7.80222 8.44922 7.60888 8.50787 7.44443 8.61775C7.27998 8.72763 7.15181 8.88381 7.07612 9.06654C7.00043 9.24926 6.98063 9.45033 7.01922 9.64431C7.0578 9.83829 7.15304 10.0165 7.29289 10.1563C7.43275 10.2962 7.61093 10.3914 7.80491 10.43C7.99889 10.4686 8.19996 10.4488 8.38268 10.3731C8.56541 10.2974 8.72159 10.1692 8.83147 10.0048C8.94135 9.84034 9 9.647 9 9.44922C9 9.184 8.89464 8.92965 8.70711 8.74211C8.51957 8.55458 8.26522 8.44922 8 8.44922ZM8 4.94922C7.80222 4.94922 7.60888 5.00787 7.44443 5.11775C7.27998 5.22763 7.15181 5.38381 7.07612 5.56654C7.00043 5.74926 6.98063 5.95033 7.01922 6.14431C7.0578 6.33829 7.15304 6.51647 7.29289 6.65633C7.43275 6.79618 7.61093 6.89142 7.80491 6.93C7.99889 6.96859 8.19996 6.94879 8.38268 6.8731C8.56541 6.79741 8.72159 6.66924 8.83147 6.50479C8.94135 6.34034 9 6.147 9 5.94922C9 5.684 8.89464 5.42965 8.70711 5.24211C8.51957 5.05458 8.26522 4.94922 8 4.94922Z\"\n fill=\"white\"\n />\n </svg>\n</template>\n","import { render } from \"./DraggableIcon.vue?vue&type=template&id=c7a2a124\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"multi-ann-table-overlay\"\n :style=\"{\n left: `${left}px`,\n width: `${width === 0 ? '100%' : `${width}px`}`,\n }\"\n >\n <b-table\n ref=\"table\"\n class=\"multi-ann-set-table dark-header header-32\"\n detail-icon=\"faScissors\"\n :data=\"rows\"\n :sticky-header=\"true\"\n :narrowed=\"true\"\n :bordered=\"false\"\n draggable-column\n @columndragstart=\"columndragstart\"\n @columndrop=\"columndrop\"\n @columndragover=\"columndragover\"\n @columndragleave=\"columndragleave\"\n >\n <b-table-column\n v-for=\"(item, index) in isLoading ? [columns[0]] : columns\"\n :key=\"index\"\n :field=\"item.field\"\n :label=\"item.label.name\"\n >\n <template #header=\"{ column }\">\n <b-dropdown\n :ref=\"getDropdownReference(item)\"\n aria-role=\"list\"\n class=\"header-dropdown\"\n position=\"is-top-right\"\n :close-on-click=\"false\"\n scrollable\n @active-change=\"(e) => onDropdownChange(item, e)\"\n >\n <template #trigger=\"{ active }\">\n <DraggableIcon v-if=\"!isLoading\" class=\"draggable\" />\n <span v-if=\"!isLoading\" :class=\"active ? 'active' : ''\"\n >{{ column.label }}\n </span>\n <b-icon\n v-if=\"!isLoading\"\n :icon=\"active ? 'angle-up' : 'angle-down'\"\n size=\"is-small\"\n class=\"arrow\"\n />\n </template>\n\n <div v-if=\"editingLabels.length === 0\">\n <b-dropdown-item aria-role=\"listitem\" @click=\"editLabel(item)\"\n ><span>{{ $t(\"edit_label\") }}</span></b-dropdown-item\n >\n <b-dropdown-item\n aria-role=\"listitem\"\n class=\"delete-action\"\n @click=\"deleteColumn(item)\"\n >\n <span>{{ $t(\"delete_label\") }}</span></b-dropdown-item\n >\n </div>\n <div v-else>\n <b-dropdown-item\n v-for=\"label in editingLabels\"\n :key=\"label.id\"\n aria-role=\"listitem\"\n :disabled=\"label.disabled\"\n ><span @click=\"!label.disabled && changeLabel(item, label)\">{{\n label.name\n }}</span></b-dropdown-item\n >\n </div>\n </b-dropdown>\n </template>\n\n <template #default=\"props\">\n <div class=\"annotations-table\">\n <b-skeleton v-if=\"isLoading\" width=\"98%\" height=\"90%\" />\n <AnnotationRow\n v-if=\"!isLoading\"\n :annotation=\"props.row[item.field]\"\n :label=\"item.label\"\n :annotation-set=\"item.annotationSet\"\n :show-label=\"false\"\n :show-buttons=\"false\"\n :is-small=\"true\"\n :from-table=\"true\"\n />\n </div>\n </template>\n </b-table-column>\n </b-table>\n </div>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport AnnotationRow from \"../DocumentAnnotations/AnnotationRow\";\nimport DraggableIcon from \"../../assets/images/DraggableIcon\";\n\nexport default {\n name: \"MultiAnnotationTableOverlay\",\n components: {\n AnnotationRow,\n DraggableIcon,\n },\n props: {\n left: {\n type: Number,\n required: false,\n default: 0,\n },\n width: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n data() {\n return {\n rows: [],\n columns: [],\n orderedAnnotations: [],\n editingLabels: [],\n openDropdown: null,\n draggingColumnIndex: null,\n isLoading: false,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showAnnSetTable\"]),\n ...mapState(\"document\", [\"annotations\"]),\n },\n watch: {\n showAnnSetTable() {\n this.handleColumns();\n this.handleRows();\n },\n annotations() {\n // if there's a change in the annotations content, we update the table\n this.handleColumns();\n this.handleRows();\n },\n columns(columns) {\n if (!columns || (columns && columns.length === 0)) {\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n this.$store.dispatch(\"display/showAnnSetTable\", null);\n }\n },\n },\n mounted() {\n this.handleColumns();\n this.handleRows();\n },\n methods: {\n getDropdownReference(column) {\n return `editDropdown_${column.field}`;\n },\n handleColumns() {\n this.columns = [];\n const labelAlreadyExists = (label) => {\n return (\n this.columns.length > 0 &&\n this.columns.find((a) => a.field === `${label.id}`) != undefined\n );\n };\n\n this.showAnnSetTable.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n if (!labelAlreadyExists(label) && label.annotations.length > 0) {\n const column = {\n field: `${label.id}`,\n label: label,\n annotationSet,\n centered: false,\n };\n this.columns.push(column);\n }\n });\n });\n },\n\n handleRows() {\n this.rows = [];\n this.orderedAnnotations = [];\n\n this.showAnnSetTable.forEach((annotationSet) => {\n let row = {};\n let toAdd = false; // to not push empty labels\n\n annotationSet.labels.forEach((label) => {\n if (label.annotations.length > 0) {\n row[label.id] = label.annotations[0];\n this.orderedAnnotations.push(label.annotations[0]);\n toAdd = true;\n }\n });\n if (toAdd) {\n this.rows.push(row);\n }\n });\n },\n\n async editLabel(column) {\n this.$store\n .dispatch(\n \"project/fetchLabelSetDetails\",\n column.annotationSet.label_set.id\n )\n .then(async (labelSet) => {\n this.editingLabels = [];\n\n labelSet.labels.forEach((label) => {\n const dropdownLabel = {\n ...label,\n disabled:\n this.columns.find((column) => column.label.id === label.id) !==\n undefined,\n };\n this.editingLabels.push(dropdownLabel);\n });\n });\n },\n\n async changeLabel(column, label) {\n this.isLoading = true;\n this.closeDropdown(column);\n for (let i = 0; i < this.rows.length; i++) {\n const annotationToUpdate = this.rows[i][column.label.id];\n await this.$store\n .dispatch(\"document/updateAnnotation\", {\n annotationId: annotationToUpdate.id,\n updatedValues: { label: label.id },\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n this.isLoading = false;\n },\n\n async deleteColumn(column) {\n this.isLoading = true;\n this.closeDropdown(column);\n\n const annotationsToDelete = [];\n for (let i = 0; i < this.rows.length; i++) {\n const annotationToDelete = this.rows[i][column.label.id];\n if (annotationToDelete && annotationToDelete.id) {\n annotationsToDelete.push(annotationToDelete);\n }\n }\n\n annotationsToDelete.forEach(async (annotationToDelete) => {\n await this.$store\n .dispatch(\"document/deleteAnnotation\", {\n annotationId: annotationToDelete.id,\n annotationSet: null, // TODO: test if annotation set should be added if the feature is available again\n })\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n });\n\n this.isLoading = false;\n },\n\n onDropdownChange(column, open) {\n this.editingLabels = [];\n this.$store.dispatch(\"selection/disableSelection\");\n this.$store.dispatch(\"document/resetEditAnnotation\");\n if (open) {\n if (\n this.openDropdown &&\n this.$refs[this.getDropdownReference(column)].length > 0\n ) {\n this.$refs[this.openDropdown][0].toggle();\n }\n this.openDropdown = this.getDropdownReference(column);\n } else {\n if (this.openDropdown === this.getDropdownReference(column)) {\n this.openDropdown = null;\n }\n }\n },\n\n closeDropdown(column) {\n if (\n this.openDropdown &&\n this.$refs[this.getDropdownReference(column)].length > 0\n ) {\n this.$refs[this.getDropdownReference(column)][0].toggle();\n this.openDropdown = null;\n }\n },\n\n columndragstart(payload) {\n this.draggingColumnIndex = payload.index;\n payload.event.dataTransfer.effectAllowed = \"copy\";\n },\n columndragover(payload) {\n payload.event.dataTransfer.dropEffect = \"copy\";\n payload.event.target.closest(\"th\").classList.add(\"is-selected\");\n payload.event.preventDefault();\n },\n columndragleave(payload) {\n payload.event.target.closest(\"th\").classList.remove(\"is-selected\");\n payload.event.preventDefault();\n },\n async columndrop(payload) {\n payload.event.target.closest(\"th\").classList.remove(\"is-selected\");\n const droppedOnColumnIndex = payload.index;\n\n const draggingColumn = this.columns[this.draggingColumnIndex];\n const droppedColumn = this.columns[droppedOnColumnIndex];\n\n await this.changeLabel(draggingColumn, droppedColumn.label);\n await this.changeLabel(droppedColumn, draggingColumn.label);\n },\n },\n};\n</script>\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/multi_ann_table_overlay.scss\"\n></style>\n","<template>\n <div\n id=\"document-edit\"\n :class=\"[renameAndCategorize && 'rename-and-categorize-component']\"\n >\n <div v-if=\"!renameAndCategorize\" class=\"pages-section\">\n <EditPages\n :splitting-lines=\"splittingLines\"\n :split-suggestions-enabled=\"splitSuggestionsEnabled\"\n @handle-splitting-lines=\"handleSplittingLines\"\n @check-move=\"checkMove\"\n @handle-drag-end=\"handleDragEnd\"\n />\n <div class=\"info-bar\">\n <SplitInfoBar v-if=\"splitSuggestionsEnabled\" />\n </div>\n </div>\n <div v-else class=\"rename-and-categorize-section\">\n <RenameAndCategorize\n :file-name=\"fileName\"\n :file-extension=\"fileExtension\"\n @change-page=\"changePage\"\n />\n </div>\n <div v-if=\"!renameAndCategorize\" class=\"sidebar\">\n <EditSidebar\n :split-suggestions-enabled=\"splitSuggestionsEnabled\"\n @rotate=\"rotatePage\"\n @rotate-all-left=\"handleRotationsToTheLeft\"\n @rotate-all-right=\"handleRotationsToTheRight\"\n @handle-splitting-suggestions=\"applySplittingSuggestions\"\n />\n </div>\n <div class=\"confirmation-modal-container\">\n <EditConfirmationModal @save-changes=\"saveEditChanges\" />\n </div>\n </div>\n</template>\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport EditSidebar from \"./EditSidebar\";\nimport RenameAndCategorize from \"./RenameAndCategorize\";\nimport EditPages from \"./EditPages\";\nimport SplitInfoBar from \"./SplitInfoBar\";\nimport EditConfirmationModal from \"./EditConfirmationModal\";\nimport { navigateToDocumentsList } from \"../../utils/utils\";\n\n/**\n * This component shows a document thumbnail grid view and sidebar, to be able to edit the document.\n */\nexport default {\n name: \"DocumentEdit\",\n components: {\n EditSidebar,\n RenameAndCategorize,\n EditPages,\n SplitInfoBar,\n EditConfirmationModal,\n },\n data() {\n return {\n fileName: null,\n fileExtension: null,\n splittingLines: [],\n dragging: false,\n prevPageAtIndex: null,\n splitSuggestionsEnabled: false,\n };\n },\n computed: {\n ...mapState(\"document\", [\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n \"pages\",\n ]),\n ...mapState(\"display\", [\"currentPage\"]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"pagesForPostprocess\",\n \"updatedDocument\",\n \"renameAndCategorize\",\n \"selectedPages\",\n \"submitEditChanges\",\n ]),\n ...mapState(\"project\", [\"projectId\", \"documentsListPath\", \"currentUser\"]),\n ...mapGetters(\"edit\", [\"documentShouldBePostprocessed\"]),\n ...mapGetters(\"document\", [\"waitingForSplittingConfirmation\"]),\n },\n watch: {\n renameAndCategorize(newValue) {\n if (newValue) {\n this.splitFileNameFromExtension();\n }\n },\n pagesForPostprocess(newValue, oldValue) {\n if (newValue) {\n this.saveUpdatedDocuments();\n }\n },\n splittingLines(newValue) {\n const aiSplit = newValue.find((item) => item.origin === \"AI\");\n\n // If there are no AI suggestions left, because of being manually removed by the user\n // the Smart Split switch should be turned off\n if (!aiSplit) {\n this.splitSuggestionsEnabled = false;\n }\n },\n submitEditChanges(newValue) {\n if (!newValue) return;\n\n this.saveEditChanges();\n },\n updatedDocument(newValue, oldValue) {\n if (\n newValue &&\n oldValue &&\n newValue.length !== oldValue.length &&\n newValue.length === 1\n ) {\n this.saveUpdatedDocuments();\n }\n },\n },\n mounted() {\n this.setPages();\n },\n methods: {\n setPages() {\n if (!this.selectedDocument) {\n return;\n }\n\n // set array of pages only with the data we need for postprocessing the document\n this.$store.dispatch(\n \"edit/setPagesForPostprocess\",\n this.createPagesForPostprocess()\n );\n\n // Create array with placeholder data for the splitting points\n if (this.selectedDocument.pages.length > 0) {\n this.selectedDocument.pages.map((page) => {\n if (page.number === this.selectedDocument.pages.length) {\n this.setSplittingArray(page.number, null);\n return;\n }\n this.setSplittingArray(0, null);\n });\n\n if (this.splittingSuggestions) {\n this.splitSuggestionsEnabled = true;\n this.setAutomaticSplitting();\n }\n }\n },\n createPagesForPostprocess() {\n return this.selectedDocument.pages.map((page) => {\n return {\n id: page.id,\n angle: 0,\n number: page.number,\n thumbnail_url: page.thumbnail_url,\n image_url: page.image_url,\n size: page.size,\n updated_at: this.selectedDocument.downloaded_at,\n };\n });\n },\n changePage(pageNumber) {\n // This will scroll to the clicked page\n if (pageNumber != this.currentPage) {\n this.$store.dispatch(\n \"display/updateCurrentPage\",\n parseInt(pageNumber, 10)\n );\n }\n },\n\n /** ROTATE */\n rotatePage(direction) {\n this.selectedPages.forEach((page) => {\n this.$store.dispatch(\"edit/rotatePage\", {\n page,\n direction,\n });\n });\n },\n handleRotationsToTheLeft() {\n this.$store.dispatch(\"edit/updateRotationToTheLeft\");\n },\n handleRotationsToTheRight() {\n this.$store.dispatch(\"edit/updateRotationToTheRight\");\n },\n\n /** SPLIT */\n setAutomaticSplitting() {\n // map over splitting suggestions to find the page number based on the page id\n // to update the splittingLines array with this data\n if (!this.splittingSuggestions) return;\n\n this.splittingSuggestions.map((item) => {\n const lastPage = this.selectedDocument.pages.find(\n (page) => page.id === item.pages[item.pages.length - 1].id\n );\n\n this.handleSplittingLines(lastPage.number, \"AI\");\n });\n },\n applySplittingSuggestions(value) {\n // Show information bar\n this.splitSuggestionsEnabled = value;\n\n // Apply or remove split lines\n this.setAutomaticSplitting();\n },\n setSplittingArray(pageNumber, splittingOrigin) {\n // This function sets the splittingLines array\n // based on splitting suggestions or no suggestions\n this.splittingLines.push({\n page: pageNumber,\n origin: splittingOrigin,\n });\n },\n splitFileNameFromExtension() {\n if (!this.selectedDocument && !this.selectedDocument.data_file_name)\n return;\n\n // Save the file name and the extension in different variables\n // to be used in the next step of the splitting\n this.fileName = this.selectedDocument.data_file_name\n .split(\".\")\n .slice(0, -1)\n .join(\".\");\n\n this.fileExtension = this.selectedDocument.data_file_name\n .split(\".\")\n .at(-1);\n },\n handleSplittingLines(page, origin) {\n // To select and deselect the division lines\n // Add page number & origin to specific index\n // Or replace it with 0 (to keep the same index & array length) if it exists\n const found = this.splittingLines.find((item) => item.page === page);\n\n // new line added or removed based on the page clicked:\n const newPage = { page: page, origin: origin };\n const removedPage = { page: 0, origin: origin };\n\n if (this.splitSuggestionsEnabled && origin === \"AI\") {\n // if manual suggestions were added but we enable automatic splitting,\n // this last one takes over\n this.splittingLines.splice(page - 1, 1, newPage);\n } else if (\n page === this.splittingLines.length ||\n (!this.splitSuggestionsEnabled && !found && origin === \"AI\")\n ) {\n // check if it's the last item to keep unchanged\n // Or if splitting is switched off, but some of the suggestion lines\n // were removed manually\n return;\n } else if (found) {\n // If splitting is switched off and we have manual splits,\n // those should stay unchanged\n if (!this.splitSuggestionsEnabled && found.origin !== origin) {\n return;\n }\n\n this.splittingLines.splice(page - 1, 1, removedPage);\n } else {\n this.splittingLines.splice(page - 1, 1, newPage);\n }\n\n this.saveUpdatedDocuments();\n },\n saveUpdatedDocuments() {\n this.splitFileNameFromExtension();\n\n const clickedLines = this.splittingLines.filter(\n (item) => item.page !== 0\n );\n\n const newDocuments = this.createEachNewDocument(\n clickedLines,\n clickedLines.length\n );\n\n // // Set the state to the created array\n this.$store.dispatch(\"edit/setUpdatedDocument\", newDocuments);\n },\n createEachNewDocument(clickedLines, length) {\n const documents = new Array(length);\n\n for (let i = 0; i < length; i++) {\n const newDocument = {\n name: this.handleNewDocumentName(i),\n category: this.handleNewDocumentCategory(i, clickedLines),\n categories: this.handleNewDocumentCategoriesAndConfidence(\n i,\n clickedLines\n ),\n pages: this.handleNewDocumentPages(i, clickedLines),\n };\n\n // we replace the \"undefined\" with the created object\n documents.splice(i, 1, newDocument);\n }\n\n return documents;\n },\n handleNewDocumentName(index) {\n let newFileName;\n\n if (index === 0) {\n newFileName = this.selectedDocument.data_file_name;\n } else if (index === 1) {\n newFileName = `${this.fileName}_copy.${this.fileExtension}`;\n } else {\n newFileName = `${this.fileName}_copy${index}.${this.fileExtension}`;\n }\n return newFileName;\n },\n handleNewDocumentCategory(index, clickedLines) {\n if (\n this.updatedDocument &&\n this.updatedDocument.length > 1 &&\n clickedLines[index].origin &&\n clickedLines[index].origin === \"AI\"\n ) {\n // get the index of the new document in the splitting suggestions\n // to return its category\n const i = this.indexOfSplittingSuggestion(index, clickedLines);\n\n return this.splittingSuggestions[i].category;\n } else {\n return this.selectedDocument.category;\n }\n },\n handleNewDocumentCategoriesAndConfidence(index, clickedLines) {\n if (\n this.updatedDocument &&\n this.updatedDocument.length > 1 &&\n clickedLines[index].origin &&\n clickedLines[index].origin === \"AI\"\n ) {\n // get the index of the new document in the splitting suggestions\n // to return its category\n const i = this.indexOfSplittingSuggestion(index, clickedLines);\n\n return this.splittingSuggestions[i].categories;\n } else {\n return null;\n }\n },\n handleNewDocumentPages(index, clickedLines) {\n // assign the correct pages to each new document\n let pages;\n\n if (index === 0) {\n pages = this.pagesForPostprocess.slice(0, clickedLines[index].page);\n } else {\n if (!clickedLines[index].page) {\n pages = this.pagesForPostprocess.slice(clickedLines[index - 1].page);\n } else {\n pages = this.pagesForPostprocess.slice(\n clickedLines[index - 1].page,\n clickedLines[index].page\n );\n }\n }\n\n return pages;\n },\n indexOfSplittingSuggestion(index, clickedLines) {\n const foundPage = this.selectedDocument.pages.find(\n (page) => page.number === clickedLines[index].page\n );\n\n const singleSplittingSuggestion = this.splittingSuggestions.find(\n (item) => item.pages[item.pages.length - 1].id === foundPage.id\n );\n\n return this.splittingSuggestions.indexOf(singleSplittingSuggestion);\n },\n\n /** SORT */\n checkMove(e) {\n // Save the page placed originally where the page we are dragging will go\n this.prevPageAtIndex = this.pagesForPostprocess.find(\n (page) =>\n this.pagesForPostprocess.indexOf(page) ===\n e.draggedContext.futureIndex\n );\n },\n handleDragEnd() {\n // Update page numbers\n const pages = this.pagesForPostprocess.map((page) => {\n const index = this.pagesForPostprocess.indexOf(page);\n return {\n ...page,\n number: index + 1,\n };\n });\n\n this.$store.dispatch(\"edit/setPagesForPostprocess\", pages);\n },\n\n /** SUBMIT CHANGES */\n // Send update request to the backend\n saveEditChanges() {\n // Verify if there was splitting, rotating and/or reordering\n if (\n this.documentShouldBePostprocessed ||\n this.waitingForSplittingConfirmation(this.selectedDocument)\n ) {\n // delete the document categories since the backend doesn't need them\n const documentToProcess = this.updatedDocument.map((document) => {\n delete document.categories;\n return document;\n });\n this.$store\n .dispatch(\"edit/editDocument\", documentToProcess)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n\n const redirection = navigateToDocumentsList(\n this.documentsListPath,\n this.projectId\n );\n\n if (redirection) {\n this.$store.dispatch(\"edit/setRedirectingUser\", true);\n }\n } else {\n // Check if only the category and/or name changes:\n const newCategory = this.updatedDocument[0].category;\n const newName = this.updatedDocument[0].name;\n let category = {};\n let name = {};\n let revisedCategory = {};\n\n if (this.selectedDocument.category !== newCategory) {\n Object.assign(category, {\n category: newCategory,\n });\n\n this.$store.dispatch(\"document/startLoading\");\n }\n\n if (!this.selectedDocument.category_is_revised && newCategory) {\n Object.assign(revisedCategory, {\n category_is_revised: true,\n });\n }\n\n if (this.selectedDocument.data_file_name !== newName) {\n Object.assign(name, { data_file_name: newName });\n }\n\n if (!category && !name) {\n return;\n }\n\n const updatedValues = Object.assign(category, revisedCategory, name);\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedValues)\n .catch((error) => {\n this.$store.dispatch(\"document/endLoading\");\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n });\n }\n\n this.closeEditMode();\n },\n\n closeEditMode() {\n this.$store.dispatch(\"edit/disableEditMode\");\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n this.$store.dispatch(\"edit/setUpdatedDocument\", null);\n this.$store.dispatch(\"edit/setSelectedPages\", null);\n this.$store.dispatch(\"edit/setSubmitEditChanges\", false);\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", false);\n this.$nextTick(() => {\n // reset to first page\n this.$store.dispatch(\"display/updateCurrentPage\", 1);\n });\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <div class=\"edit-sidebar\">\n <div class=\"buttons-container\">\n <div class=\"rotate-selected edit-buttons\">\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"buttonDisabled\"\n :button-text=\"$t('rotate_selected')\"\n :icon=\"'arrow-rotate-left'\"\n @rotate=\"rotateLeft\"\n />\n\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"buttonDisabled\"\n :button-text=\"$t('rotate_selected')\"\n :icon=\"'arrow-rotate-right'\"\n @rotate=\"rotateRight\"\n />\n\n <p :class=\"['pages-selected', buttonDisabled && 'disabled']\">\n {{ selectedPages.length }} {{ $t(\"selected\") }}\n </p>\n </div>\n\n <div class=\"rotate-all edit-buttons\">\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"false\"\n :button-text=\"$t('rotate_all')\"\n :icon=\"'arrow-rotate-left'\"\n @rotate=\"rotateAllLeft\"\n />\n\n <SidebarButtons\n :show-rotate-button=\"true\"\n :button-disabled=\"false\"\n :button-text=\"$t('rotate_all')\"\n :icon=\"'arrow-rotate-right'\"\n @rotate=\"rotateAllRight\"\n />\n </div>\n </div>\n <div class=\"smart-split\">\n <b-tooltip\n multilined\n :active=\"!documentHasProposedSplit(selectedDocument)\"\n position=\"is-bottom\"\n class=\"bottom-aligned split-tooltip\"\n :label=\"tooltipInfo\"\n >\n <b-field>\n <b-switch\n v-model=\"switchStatus\"\n :value=\"true\"\n size=\"is-small\"\n :disabled=\"!documentHasProposedSplit(selectedDocument)\"\n class=\"split-switch\"\n />\n <div class=\"switch-info\">\n <span class=\"switch-text\">{{ $t(\"smart_split\") }}</span>\n </div>\n </b-field>\n </b-tooltip>\n </div>\n </div>\n</template>\n\n<script>\nimport { mapState, mapGetters } from \"vuex\";\nimport SidebarButtons from \"./SidebarButtons\";\n\n/**\n * This component renders buttons to rotate single pages or all pages\n * in edit mode\n * */\nexport default {\n name: \"EditSidebar\",\n components: {\n SidebarButtons,\n },\n props: {\n splitSuggestionsEnabled: {\n type: Boolean,\n },\n },\n data() {\n return {\n buttonDisabled: true,\n tooltipInfo: null,\n switchStatus: true,\n };\n },\n computed: {\n ...mapState(\"edit\", [\"selectedPages\", \"updatedDocument\"]),\n ...mapState(\"document\", [\"splittingSuggestions\", \"selectedDocument\"]),\n ...mapGetters(\"document\", [\"documentHasProposedSplit\"]),\n },\n watch: {\n selectedPages(newValue) {\n if (newValue.length > 0) {\n this.buttonDisabled = false;\n } else {\n this.buttonDisabled = true;\n }\n },\n switchStatus(newValue) {\n if (this.splittingSuggestions && this.splittingSuggestions.length > 0)\n this.$emit(\"handle-splitting-suggestions\", newValue);\n },\n splitSuggestionsEnabled(newValue) {\n if (!newValue) {\n this.switchStatus = false;\n }\n },\n updatedDocument(newValue) {\n if (newValue && newValue.length === 1) {\n this.switchStatus = false;\n }\n },\n },\n mounted() {\n this.$nextTick(() => {\n this.switchStatus = this.splitSuggestionsEnabled;\n this.tooltipInfo = this.$t(\"no_splitting_suggestions\");\n });\n },\n methods: {\n rotateLeft() {\n this.$emit(\"rotate\", \"left\");\n },\n rotateRight() {\n this.$emit(\"rotate\", \"right\");\n },\n rotateAllLeft() {\n this.$emit(\"rotate-all-left\");\n },\n rotateAllRight() {\n this.$emit(\"rotate-all-right\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <div class=\"sidebar-buttons\">\n <!-- Rotate buttons -->\n <div v-if=\"showRotateButton\" class=\"rotate-button-container\">\n <b-button\n class=\"rotate-button edit-mode-btn primary-button\"\n :disabled=\"buttonDisabled\"\n @click=\"rotateButton\"\n >\n <div class=\"button-content\">\n <b-icon :icon=\"icon\" class=\"is-small\" />\n <span class=\"button-text\">{{ buttonText }}</span>\n </div>\n </b-button>\n </div>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"SidebarButtons\",\n props: {\n showRotateButton: {\n type: Boolean,\n default: false,\n },\n buttonDisabled: {\n type: Boolean,\n default: true,\n },\n buttonText: {\n type: String,\n default: null,\n },\n icon: {\n type: String,\n default: null,\n },\n tooltipInfo: {\n type: String,\n default: null,\n },\n },\n\n methods: {\n rotateButton() {\n this.$emit(\"rotate\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","import { render } from \"./SidebarButtons.vue?vue&type=template&id=c4cb62fa&scoped=true\"\nimport script from \"./SidebarButtons.vue?vue&type=script&lang=js\"\nexport * from \"./SidebarButtons.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=c4cb62fa&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-c4cb62fa\"]])\n\nexport default __exports__","import { render } from \"./EditSidebar.vue?vue&type=template&id=bc1216ea&scoped=true\"\nimport script from \"./EditSidebar.vue?vue&type=script&lang=js\"\nexport * from \"./EditSidebar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=bc1216ea&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-bc1216ea\"]])\n\nexport default __exports__","<template>\n <div class=\"rename-and-categorize\">\n <div class=\"back-section\" @click=\"handleBackButton\">\n <div class=\"back-btn-section\">\n <b-icon\n icon=\"arrow-left\"\n class=\"is-small arrow\"\n :style=\"{ color: '#1a1a1a', cursor: 'pointer' }\"\n />\n </div>\n <div class=\"back-text\">\n {{ $t(\"rotate_split_reorder\") }}\n </div>\n </div>\n <div class=\"rename-and-categorize-title\">\n {{ $t(\"rename_and_categorize\") }}\n </div>\n <div class=\"new-documents-container\">\n <div\n v-for=\"(page, index) in updatedDocument\"\n :key=\"index\"\n class=\"document-details\"\n >\n <div class=\"rename-and-categorize-thumbnails\">\n <div class=\"split-documents\">\n <div\n class=\"image-container\"\n @click=\"handlePageChange(page.pages[0].number)\"\n >\n <div\n :class=\"['thumbnail', page.pages.length > 1 && 'page-stack']\"\n >\n <ServerImage\n ref=\"image\"\n :style=\"{\n transform:\n 'rotate(' + getRotation(page.pages[0].id) + 'deg)',\n }\"\n :image-url=\"getImageUrl(page)\"\n class=\"page-thumbnail\"\n >\n <b-skeleton width=\"60px\" height=\"60px\" />\n </ServerImage>\n <div class=\"icon-container\">\n <div class=\"action-icon\">\n <EyeIcon />\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div class=\"doc-info\">\n <div class=\"file-name-section\">\n <input\n type=\"text\"\n class=\"name-input\"\n :value=\"getFileName(page.name)\"\n @input=\"handleInput\"\n @paste=\"handlePaste\"\n @blur=\"handleChanges(page)\"\n />\n <div class=\"file-extension-container\">\n <span>{{ `.${fileExtension}` }}</span>\n </div>\n </div>\n <div class=\"category\">\n <DocumentCategory\n :selected-document=\"selectedDocument\"\n :split-mode=\"splitMode\"\n :page=\"page\"\n :index=\"index\"\n @category-change=\"handleChanges\"\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script>\n/**\n * This component will only be rendered if document pages were split\n */\n\nimport { mapState } from \"vuex\";\nimport DocumentCategory from \"../../components/DocumentCategory\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport EyeIcon from \"../../assets/images/EyeIcon\";\n\nexport default {\n name: \"RenameAndCategorize\",\n components: {\n DocumentCategory,\n ServerImage,\n EyeIcon,\n },\n props: {\n fileName: {\n type: String,\n default: \"\",\n },\n fileExtension: {\n type: String,\n default: \"\",\n },\n },\n data() {\n return {\n splitMode: true,\n updatedFileName: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\"selectedDocument\", \"pages\"]),\n ...mapState(\"edit\", [\"updatedDocument\", \"pagesForPostprocess\"]),\n },\n\n methods: {\n handleBackButton() {\n this.$store.dispatch(\"edit/setRenameAndCategorize\", false);\n },\n handlePaste(event) {\n // TODO: modify to only paste plain text\n event.preventDefault();\n },\n handleInput(event) {\n this.updatedFileName = event.target.value.trim();\n },\n handleChanges(page, category) {\n // This function handles file name or category changes\n const updatedPages = this.updatedDocument.map((splitPage) => {\n if (splitPage.pages[0].id === page.pages[0].id) {\n if (this.updatedFileName) {\n return {\n ...splitPage,\n name: `${this.updatedFileName}.${this.fileExtension}`,\n };\n } else if (category) {\n return {\n ...splitPage,\n category: category,\n };\n } else {\n return splitPage;\n }\n }\n return splitPage;\n });\n\n this.$store.dispatch(\"edit/setUpdatedDocument\", updatedPages);\n\n if (this.updatedFileName) {\n this.updatedFileName = null;\n }\n },\n handlePageChange(pageNumber) {\n this.$emit(\"change-page\", pageNumber);\n },\n getFileName(name) {\n if (!name) return;\n\n // Do not show file extension\n return name.split(\".\").slice(0, -1).join(\".\");\n },\n getImageUrl(page) {\n if (!this.pagesForPostprocess || !this.pages || !page) return;\n\n // returns the first thumbnail in the pages array\n // for each new document\n const image = this.pagesForPostprocess.find(\n (p) => p.number === page.pages[0].number\n );\n\n return `${image.thumbnail_url}?${image.updated_at}`;\n },\n getRotation(pageId) {\n // rotate page\n return this.pagesForPostprocess?.find((p) => p.id === pageId)?.angle;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <b-tooltip\n v-if=\"categories\"\n multilined\n :active=\"tooltipIsShown || dropdownIsDisabled\"\n size=\"is-large\"\n position=\"is-bottom\"\n :class=\"[\n editMode\n ? 'right-aligned full-height-tooltip'\n : 'left-aligned full-height-tooltip',\n ]\"\n >\n <template #content>\n <div ref=\"tooltipContent\"></div>\n </template>\n <b-dropdown\n :class=\"[\n 'category-chooser',\n splitMode && 'split-mode',\n isDocumentReviewed && 'disabled',\n ]\"\n aria-role=\"list\"\n scrollable\n :disabled=\"dropdownIsDisabled\"\n >\n <template #trigger>\n <div class=\"category-drop-down\">\n <div class=\"icon\">\n <CategoryIcon />\n </div>\n <div class=\"category-info\">\n <p v-if=\"!splitMode\" class=\"category-title\">\n {{ $t(\"category\") }}\n </p>\n <div class=\"category-name\">\n <span>\n {{ setCategoryDefaultText }}\n </span>\n <span v-if=\"splitMode && setCategoryConfidence >= 0\">\n {{ `(${setCategoryConfidence}%)` }}\n </span>\n </div>\n </div>\n <div :class=\"[!splitMode && 'caret-section']\">\n <b-icon\n icon=\"angle-down\"\n size=\"is-small\"\n :class=\"['caret', splitMode && 'split-mode-caret']\"\n />\n </div>\n </div>\n </template>\n\n <b-dropdown-item\n v-for=\"category in listOfCategories()\"\n :key=\"category.id\"\n aria-role=\"listitem\"\n class=\"list-item\"\n :disabled=\"handleOptionInDropdownDisabled(category)\"\n @click=\"handleChangeCategory(category)\"\n >\n <span>{{ category.name }}</span>\n <span v-if=\"splitMode && category.confidence >= 0\">{{\n ` (${category.confidence}%)`\n }}</span>\n </b-dropdown-item>\n </b-dropdown>\n </b-tooltip>\n <div v-else class=\"loading-bar\">\n <b-skeleton width=\"auto\" height=\"100%\" />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport CategoryIcon from \"../assets/images/CategoryIconImg\";\n\nexport default {\n name: \"DocumentCategory\",\n components: {\n CategoryIcon,\n },\n props: {\n splitMode: {\n type: Boolean,\n },\n page: {\n type: Object,\n default: null,\n },\n index: {\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n categoryError: false,\n tooltipIsShown: false,\n dropdownIsDisabled: false,\n };\n },\n computed: {\n ...mapGetters(\"category\", [\n \"categoryName\",\n \"projectHasSingleCategory\",\n \"categoryConfidence\",\n ]),\n ...mapGetters(\"document\", [\n \"documentCannotBeEdited\",\n \"documentHasCorrectAnnotations\",\n \"isDocumentReviewed\",\n ]),\n ...mapState(\"document\", [\"selectedDocument\", \"annotations\"]),\n ...mapState(\"category\", [\"categories\"]),\n ...mapState(\"edit\", [\"editMode\", \"updatedDocument\"]),\n\n setCategoryDefaultText() {\n if (!this.splitMode) {\n return this.categoryName(this.selectedDocument.category);\n } else {\n const missingCategory = this.updatedDocument.find(\n (item) => !item.category\n );\n\n // if there is just 1 category in the project,\n // and one or more sub-documents has no category,\n // assign the only category by default\n if (this.projectHasSingleCategory && missingCategory) {\n const updatedValuesForDocuments = this.updatedDocument.map(\n (document) => {\n if (!document.category && this.categories) {\n document.category = this.categories[0].id;\n }\n\n return document;\n }\n );\n\n // update the store state\n // so that if the changes are saved the data sent to the API is updated\n // instead of only handling the category name in this component\n this.$store.dispatch(\n \"edit/setUpdatedDocument\",\n updatedValuesForDocuments\n );\n }\n\n const categoryName = this.categoryName(\n this.updatedDocument[this.index].category\n );\n\n return categoryName ? categoryName : this.$t(\"choose_category\");\n }\n },\n\n setCategoryConfidence() {\n if (\n !this.updatedDocument[this.index].categories ||\n !this.categoryName(this.updatedDocument[this.index].category)\n )\n return;\n\n const found = this.updatedDocument[this.index].categories.find(\n (category) => category.id === this.updatedDocument[this.index].category\n );\n\n return this.categoryConfidence(found.confidence);\n },\n },\n watch: {\n annotations() {\n this.checkIfDropdownIsDisabled();\n this.setTooltipText();\n },\n },\n mounted() {\n if (this.projectHasSingleCategory) {\n this.tooltipIsShown = true;\n }\n },\n updated() {\n this.setTooltipText();\n this.checkIfDropdownIsDisabled();\n },\n methods: {\n listOfCategories() {\n let list;\n\n if (this.splitMode && this.updatedDocument[this.index].categories) {\n list = this.handleCategories(\n this.updatedDocument[this.index].categories\n );\n } else if (this.categories) {\n const filtered = this.categories.filter(\n (category) => category.project === this.selectedDocument.project\n );\n list = this.handleCategories(filtered);\n }\n\n return list;\n },\n handleCategories(categories) {\n return categories.map((category) => {\n return {\n id: category.id,\n name: this.categoryName(category.id),\n confidence: this.categoryConfidence(category.confidence),\n };\n });\n },\n checkIfDropdownIsDisabled() {\n if (\n this.projectHasSingleCategory ||\n this.documentCannotBeEdited(this.selectedDocument) ||\n (this.documentHasCorrectAnnotations && !this.splitMode)\n ) {\n this.dropdownIsDisabled = true;\n } else {\n this.dropdownIsDisabled = false;\n }\n },\n // The current category name will change\n // depending on if we are on edit mode or not\n handleOptionInDropdownDisabled(category) {\n if (!this.splitMode)\n return category.id === this.selectedDocument.category;\n\n return category.id === this.updatedDocument[this.index].category;\n },\n handleChangeCategory(category) {\n // handling the category change will be different based on\n // the dropdown being on the topbar or the Rename and Categorize view\n const updatedCategory = {\n category: category.id,\n };\n\n if (!this.splitMode) {\n this.$store.dispatch(\"document/startRecalculatingAnnotations\");\n\n this.$store\n .dispatch(\"document/updateDocument\", updatedCategory)\n .catch((error) => {\n this.$store.dispatch(\"document/createErrorMessage\", {\n error,\n serverErrorMessage: this.$t(\"server_error\"),\n defaultErrorMessage: this.$t(\"edit_error\"),\n });\n })\n .finally(() => {\n this.$store.dispatch(\"document/endRecalculatingAnnotations\");\n });\n\n return;\n }\n\n // Send the category ID to the Rename and Categorize view\n // to update the new document category\n this.$emit(\"category-change\", this.page, category.id);\n },\n setTooltipText() {\n if (this.categories) {\n // Text set from innerHTML vs 'label' due to html tag in locales file string\n let tooltipText;\n\n if (this.documentCannotBeEdited(this.selectedDocument)) {\n tooltipText = this.$t(\"edit_not_available\");\n } else if (this.documentHasCorrectAnnotations) {\n tooltipText = this.$t(\"approved_annotations\");\n } else if (this.projectHasSingleCategory) {\n tooltipText = this.$t(\"single_category_in_project\");\n }\n\n this.$refs.tooltipContent.innerHTML = tooltipText;\n }\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/document_category.scss\"></style>\n","import { render } from \"./DocumentCategory.vue?vue&type=template&id=00b8045a&scoped=true\"\nimport script from \"./DocumentCategory.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentCategory.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/document_category.scss?vue&type=style&index=0&id=00b8045a&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-00b8045a\"]])\n\nexport default __exports__","<template>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n >\n <path\n fill=\"#FFFFFF\"\n d=\"M21.92,11.6C19.9,6.91,16.1,4,12,4S4.1,6.91,2.08,11.6a1,1,0,0,0,0,.8C4.1,17.09,7.9,20,12,20s7.9-2.91,9.92-7.6A1,1,0,0,0,21.92,11.6ZM12,18c-3.17,0-6.17-2.29-7.9-6C5.83,8.29,8.83,6,12,6s6.17,2.29,7.9,6C18.17,15.71,15.17,18,12,18ZM12,8a4,4,0,1,0,4,4A4,4,0,0,0,12,8Zm0,6a2,2,0,1,1,2-2A2,2,0,0,1,12,14Z\"\n />\n </svg>\n</template>\n","import { render } from \"./EyeIcon.vue?vue&type=template&id=42c8617a\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./RenameAndCategorize.vue?vue&type=template&id=7b950a9d&scoped=true\"\nimport script from \"./RenameAndCategorize.vue?vue&type=script&lang=js\"\nexport * from \"./RenameAndCategorize.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=7b950a9d&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-7b950a9d\"]])\n\nexport default __exports__","<template>\n <div class=\"edit-pages\">\n <div class=\"grid-header\">\n <span class=\"header-title\">{{ $t(\"rotate_split_reorder\") }}</span>\n </div>\n <draggable\n v-model=\"editPages\"\n class=\"document-grid\"\n easing=\"cubic-bezier(0.37, 0, 0.63, 1)\"\n item-key=\"id\"\n :move=\"checkMove\"\n @start=\"dragging = true\"\n @end=\"handleDragEnd\"\n >\n <template #item=\"{ element, index }\">\n <div\n :id=\"element.id\"\n :key=\"element.id\"\n class=\"image-section\"\n tabindex=\"0\"\n >\n <div class=\"top-section\">\n <EditPageThumbnail\n :page=\"element\"\n :index=\"index\"\n :rotation=\"getRotation(element.id)\"\n />\n <div\n :class=\"[\n 'splitting-lines',\n splittingLines &&\n splittingLines[index].page === element.number &&\n 'active-split',\n ]\"\n @click=\"handleSplittingLines(element.number, 'manual')\"\n >\n <div class=\"scissors-icon\">\n <b-icon icon=\"scissors\" class=\"is-small\" />\n </div>\n <div\n v-if=\"\n splittingLines &&\n splittingLines[index].page === element.number\n \"\n class=\"lines active-split\"\n >\n <SplitZigZag\n :color=\"\n splittingLines &&\n splittingLines[index].origin &&\n splittingLines[index].origin === 'AI' &&\n splitSuggestionsEnabled\n ? 'green'\n : 'dark'\n \"\n />\n </div>\n <div v-else class=\"lines not-active-split\">\n <SplitLines />\n </div>\n </div>\n </div>\n <div class=\"bottom-section\">\n <span class=\"page-number\">{{ element.number }}</span>\n </div>\n </div>\n </template>\n </draggable>\n </div>\n</template>\n\n<script>\n/**\n * This component renders a grid of the document pages\n * that will be possible to resort, split and/or rotate\n */\n\nimport { mapState } from \"vuex\";\nimport SplitLines from \"../../assets/images/SplitLines\";\nimport SplitZigZag from \"../../assets/images/SplitZigZag\";\nimport EditPageThumbnail from \"./EditPageThumbnail\";\nimport draggable from \"vuedraggable\";\n\nexport default {\n name: \"EditPages\",\n components: {\n SplitLines,\n SplitZigZag,\n EditPageThumbnail,\n draggable,\n },\n props: {\n splittingLines: {\n type: Array,\n default: null,\n },\n splitSuggestionsEnabled: {\n type: Boolean,\n default: false,\n },\n },\n data() {\n return {\n editPages: null,\n };\n },\n\n computed: {\n ...mapState(\"document\", [\n \"pages\",\n \"recalculatingAnnotations\",\n \"selectedDocument\",\n \"splittingSuggestions\",\n ]),\n ...mapState(\"edit\", [\n \"editMode\",\n \"pagesForPostprocess\",\n \"renameAndCategorize\",\n ]),\n },\n watch: {\n pagesForPostprocess(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.editPages = newValue;\n }\n },\n editPages(newValue, oldValue) {\n if (newValue !== oldValue) {\n this.$store.dispatch(\"edit/setPagesForPostprocess\", newValue);\n }\n },\n renameAndCategorize(newValue) {\n if (newValue) {\n this.editPages = this.pagesForPostprocess;\n }\n },\n },\n mounted() {\n if (this.pagesForPostprocess.length > 0) {\n this.editPages = this.pagesForPostprocess;\n }\n },\n methods: {\n deselect() {\n this.$store.dispatch(\"edit/setSelectedPages\");\n },\n getRotation(pageId) {\n // rotate page\n return this.pagesForPostprocess?.find((p) => p.id === pageId)?.angle;\n },\n handleSplittingLines(page, origin) {\n this.$emit(\"handle-splitting-lines\", page, origin);\n },\n checkMove(event) {\n this.$emit(\"check-move\", event);\n },\n handleDragEnd() {\n this.draggable = false;\n\n this.$emit(\"handle-drag-end\");\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <svg\n width=\"2\"\n height=\"59\"\n viewBox=\"0 0 2 59\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 0.908203V58.2693\"\n stroke=\"#858C9A\"\n stroke-opacity=\"0.4\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n stroke-dasharray=\"2 2\"\n />\n </svg>\n</template>\n","import { render } from \"./SplitLines.vue?vue&type=template&id=68253c62\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div>\n <svg\n v-if=\"color === 'dark'\"\n width=\"6\"\n height=\"57\"\n viewBox=\"0 0 6 57\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1L5 7.875L1 14.75L5 21.625L1 28.5L5 35.375L1 42.25L5 49.125L1 56\"\n stroke=\"#1A1A1A\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n\n <svg\n v-if=\"color === 'green'\"\n width=\"6\"\n height=\"52\"\n viewBox=\"0 0 6 52\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n d=\"M1 1.67383L5 7.81966L1 13.9655L5 20.1113L1 26.2572L5 32.403L1 38.5488L5 44.6947L1 50.8405\"\n stroke=\"#44B78B\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"SplitZigZag\",\n props: {\n color: {\n type: String,\n default: null,\n required: false,\n },\n },\n};\n</script>\n","import { render } from \"./SplitZigZag.vue?vue&type=template&id=97f0589c\"\nimport script from \"./SplitZigZag.vue?vue&type=script&lang=js\"\nexport * from \"./SplitZigZag.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <div\n class=\"edit-page-thumbnail\"\n :tabindex=\"index\"\n @mouseenter=\"isHover = true\"\n @mouseleave=\"isHover = false\"\n >\n <div\n :class=\"[\n 'page-thumbnail',\n isVisible && 'visible',\n checkboxValue && 'selected',\n ]\"\n :style=\"`rotate:${rotation}deg`\"\n @click=\"selectPage()\"\n >\n <ServerImage :image-url=\"`${page.thumbnail_url}?${page.updated_at}`\">\n <b-skeleton width=\"80px\" height=\"80px\" />\n </ServerImage>\n\n <div v-if=\"isVisible\" class=\"action-icon\">\n <EyeIcon />\n </div>\n </div>\n <b-checkbox\n v-show=\"isHover || checkboxValue\"\n v-model=\"checkboxValue\"\n class=\"action-checkbox\"\n @input=\"checkboxInput\"\n />\n </div>\n</template>\n\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport EyeIcon from \"../../assets/images/EyeIcon\";\n\nexport default {\n name: \"EditPageThumbnail\",\n components: {\n ServerImage,\n EyeIcon,\n },\n props: {\n page: {\n required: true,\n type: Object,\n default: null,\n },\n index: {\n required: true,\n type: Number,\n default: 0,\n },\n rotation: {\n required: false,\n type: Number,\n default: 0,\n },\n },\n data() {\n return {\n isHover: false,\n checkboxValue: false,\n };\n },\n computed: {\n ...mapState(\"display\", [\"currentPage\"]),\n ...mapState(\"edit\", [\"selectedPages\"]),\n ...mapGetters(\"edit\", [\"isPageSelected\"]),\n isVisible() {\n return this.currentPage === this.page.number;\n },\n isSelected() {\n return this.isPageSelected(this.page.id) !== undefined;\n },\n },\n watch: {\n isSelected() {\n this.checkboxValue = this.isSelected;\n },\n },\n mounted() {\n this.checkboxValue = this.isSelected;\n },\n methods: {\n selectPage(value = !this.isSelected) {\n this.changePage();\n this.$store.dispatch(\n value ? \"edit/selectPage\" : \"edit/unselectPage\",\n this.page\n );\n },\n checkboxInput(value) {\n this.selectPage(value);\n },\n changePage() {\n if (!this.isVisible) {\n this.$store.dispatch(\n \"display/updateCurrentPage\",\n parseInt(this.page.number, 10)\n );\n }\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/edit_page_thumbnail.scss\"\n></style>\n","import { render } from \"./EditPageThumbnail.vue?vue&type=template&id=3284908e&scoped=true\"\nimport script from \"./EditPageThumbnail.vue?vue&type=script&lang=js\"\nexport * from \"./EditPageThumbnail.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/edit_page_thumbnail.scss?vue&type=style&index=0&id=3284908e&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-3284908e\"]])\n\nexport default __exports__","import { render } from \"./EditPages.vue?vue&type=template&id=233044dc&scoped=true\"\nimport script from \"./EditPages.vue?vue&type=script&lang=js\"\nexport * from \"./EditPages.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=233044dc&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-233044dc\"]])\n\nexport default __exports__","<template>\n <div class=\"split-info-bar\">\n <div class=\"bar-icon\">\n <StarIcon />\n </div>\n <span> {{ $t(\"smart_split_suggestions\") }}</span>\n </div>\n</template>\n\n<script>\nimport StarIcon from \"../../assets/images/StarIcon\";\n\nexport default {\n name: \"SplitInfoBar\",\n components: {\n StarIcon,\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","<template>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.99935 0.667969C3.36754 0.667969 3.66602 0.966446 3.66602 1.33464V2.33464H4.66602C5.03421 2.33464 5.33268 2.63311 5.33268 3.0013C5.33268 3.36949 5.03421 3.66797 4.66602 3.66797H3.66602V4.66797C3.66602 5.03616 3.36754 5.33464 2.99935 5.33464C2.63116 5.33464 2.33268 5.03616 2.33268 4.66797V3.66797H1.33268C0.964492 3.66797 0.666016 3.36949 0.666016 3.0013C0.666016 2.63311 0.964492 2.33464 1.33268 2.33464H2.33268V1.33464C2.33268 0.966446 2.63116 0.667969 2.99935 0.667969ZM8.66601 1.33464C8.94186 1.33464 9.18922 1.50452 9.28824 1.76198L10.4444 4.76789C10.6446 5.28859 10.7076 5.43863 10.7936 5.5597C10.88 5.68117 10.9861 5.7873 11.1076 5.87367C11.2287 5.95975 11.3787 6.02268 11.8994 6.22295L14.9053 7.37907C15.1628 7.47809 15.3327 7.72545 15.3327 8.0013C15.3327 8.27715 15.1628 8.52451 14.9053 8.62353L11.8994 9.77965C11.3787 9.97992 11.2287 10.0429 11.1076 10.1289C10.9861 10.2153 10.88 10.3214 10.7936 10.4429C10.7076 10.564 10.6446 10.714 10.4444 11.2347L9.28825 14.2406C9.18922 14.4981 8.94186 14.668 8.66602 14.668C8.39017 14.668 8.14281 14.4981 8.04379 14.2406L6.88767 11.2347C6.6874 10.714 6.62447 10.564 6.53838 10.4429C6.45201 10.3214 6.34588 10.2153 6.22441 10.1289C6.10335 10.0429 5.9533 9.97992 5.4326 9.77965L2.4267 8.62353C2.16923 8.52451 1.99935 8.27715 1.99935 8.0013C1.99935 7.72545 2.16923 7.47809 2.4267 7.37907L5.4326 6.22295C5.9533 6.02268 6.10335 5.95975 6.22441 5.87367C6.34588 5.7873 6.45201 5.68117 6.53838 5.5597C6.62447 5.43863 6.6874 5.28859 6.88767 4.76789L8.04378 1.76198C8.14281 1.50452 8.39017 1.33464 8.66601 1.33464ZM2.99935 10.668C3.36754 10.668 3.66602 10.9664 3.66602 11.3346V12.3346H4.66602C5.03421 12.3346 5.33268 12.6331 5.33268 13.0013C5.33268 13.3695 5.03421 13.668 4.66602 13.668H3.66602V14.668C3.66602 15.0362 3.36754 15.3346 2.99935 15.3346C2.63116 15.3346 2.33268 15.0362 2.33268 14.668V13.668H1.33268C0.964492 13.668 0.666016 13.3695 0.666016 13.0013C0.666016 12.6331 0.964492 12.3346 1.33268 12.3346H2.33268V11.3346C2.33268 10.9664 2.63116 10.668 2.99935 10.668Z\"\n fill=\"#41AF85\"\n />\n </svg>\n</template>\n","import { render } from \"./StarIcon.vue?vue&type=template&id=7e0c3e8e\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./SplitInfoBar.vue?vue&type=template&id=53be5126&scoped=true\"\nimport script from \"./SplitInfoBar.vue?vue&type=script&lang=js\"\nexport * from \"./SplitInfoBar.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=53be5126&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-53be5126\"]])\n\nexport default __exports__","<template>\n <section class=\"edit-confirmation-modal\">\n <b-modal v-model=\"isModalActive\" :can-cancel=\"[]\" class=\"edit-modal\">\n <section class=\"modal-card-body\">\n <div class=\"header\">\n <p class=\"modal-title\">{{ $t(\"confirm_splitting\") }}</p>\n </div>\n <div class=\"content\">{{ $t(\"splitting_warning\") }}</div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button @click=\"closeModal\">\n {{ $t(\"no\") }}\n </b-button>\n <b-button type=\"is-primary\" @click=\"confirmChanges\">\n {{ $t(\"yes\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n/**\n * This component shows a modal to confirm the edit changes in the document\n */\nexport default {\n name: \"EditConfirmationModal\",\n data() {\n return {\n isModalActive: false,\n };\n },\n computed: {\n ...mapState(\"edit\", [\"showEditConfirmationModal\"]),\n },\n watch: {\n showEditConfirmationModal(newValue) {\n this.isModalActive = newValue;\n },\n },\n methods: {\n closeModal() {\n this.isModalActive = false;\n this.$store.dispatch(\"edit/setShowEditConfirmationModal\", false);\n },\n confirmChanges() {\n this.$emit(\"save-changes\");\n this.isModalActive = false;\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_edit.scss\"></style>\n","import { render } from \"./EditConfirmationModal.vue?vue&type=template&id=01991ceb&scoped=true\"\nimport script from \"./EditConfirmationModal.vue?vue&type=script&lang=js\"\nexport * from \"./EditConfirmationModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=01991ceb&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-01991ceb\"]])\n\nexport default __exports__","import { render } from \"./DocumentEdit.vue?vue&type=template&id=0ecba500&scoped=true\"\nimport script from \"./DocumentEdit.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentEdit.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_edit.scss?vue&type=style&index=0&id=0ecba500&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-0ecba500\"]])\n\nexport default __exports__","<template>\n <b-message>\n <div v-if=\"serverError\" class=\"message-container\">\n <span class=\"server-error\">\n {{ errorMessage }}\n <span\n v-if=\"showBranding\"\n class=\"contact-support\"\n @click=\"handleGetSupport\"\n >\n {{ $t(\"get_support\") }} <b-icon icon=\"arrow-right\" size=\"is-small\"\n /></span>\n </span>\n </div>\n <div v-else class=\"message-container\">\n {{ errorMessage }}\n </div>\n <div class=\"btn-container\" type=\"button\" @click=\"handleErrorClose\">\n <b-icon icon=\"xmark\" class=\"close-btn error-icon\" size=\"is-small\" />\n </div>\n </b-message>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\n\nexport default {\n name: \"ErrorMessage\",\n computed: {\n ...mapState(\"document\", [\"errorMessage\", \"serverError\"]),\n ...mapState(\"display\", [\"showBranding\"]),\n },\n methods: {\n handleGetSupport() {\n const error = \"Server error\";\n this.$store.dispatch(\"document/contactSupport\", error);\n },\n handleErrorClose() {\n this.$store.dispatch(\"document/setErrorMessage\", null);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/variables.scss\"></style>\n","import { render } from \"./ErrorMessage.vue?vue&type=template&id=4692340c&scoped=true\"\nimport script from \"./ErrorMessage.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorMessage.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/variables.scss?vue&type=style&index=0&id=4692340c&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-4692340c\"]])\n\nexport default __exports__","<template>\n <section class=\"viewport-modal\">\n <b-modal v-model=\"isModalActive\" class=\"modal-text-center\" :width=\"500\">\n <section class=\"modal-card-body\">\n <div class=\"image\">\n <Illustration />\n </div>\n <div class=\"content\">\n <h3>{{ $t(\"small_viewport_title\") }}</h3>\n <p>{{ $t(\"small_viewport_info\") }}</p>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button\n type=\"is-primary\"\n class=\"primary-button\"\n @click=\"handleNotOptimizedModal\"\n >\n {{ $t(\"ok\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport Illustration from \"../../assets/images/NotOptimizedIllustration\";\n\nexport default {\n name: \"NotOptimizedViewportModal\",\n components: {\n Illustration,\n },\n data() {\n return {\n isModalActive: true,\n };\n },\n methods: {\n handleNotOptimizedModal() {\n this.isModalActive = false;\n },\n },\n};\n</script>\n\n<style\n scoped\n lang=\"scss\"\n src=\"../../assets/scss/document_viewport_modal.scss\"\n></style>\n","<template>\n <svg\n width=\"179\"\n height=\"202\"\n viewBox=\"0 0 179 202\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n opacity=\"0.6\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M143.279 186.492C131.002 186.492 121.053 188.111 121.053 190.084C121.053 192.056 131.002 193.65 143.279 193.65C155.557 193.65 165.506 192.056 165.506 190.084C165.506 188.111 155.557 186.492 143.279 186.492Z\"\n fill=\"#D7D7D7\"\n />\n <path\n opacity=\"0.6\"\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M51.001 185.697C36.4215 185.697 24.6074 187.496 24.6074 189.688C24.6074 191.879 36.4215 193.65 51.001 193.65C65.5805 193.65 77.3946 191.879 77.3946 189.688C77.3946 187.496 65.5805 185.697 51.001 185.697Z\"\n fill=\"#D7D7D7\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.6212 55.6689C55.8724 55.6689 52.7847 58.7319 52.7847 62.4941C52.7847 66.575 56.1487 69.2773 59.6635 69.2773C61.3508 69.2773 63.0725 68.6542 64.4742 67.2637C68.7969 63.0201 65.7529 55.6689 59.6212 55.6689ZM59.6807 55.0117C61.5187 55.0117 63.3912 55.6886 64.9145 57.1998C69.6789 61.8815 66.3268 69.8899 59.6212 69.8899C55.5193 69.8899 52.1672 66.5645 52.1235 62.4941C52.1235 57.9908 55.8248 55.0117 59.6807 55.0117Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.6212 50.7079C55.8724 50.7079 52.7847 53.7274 52.7847 57.4905C52.7847 61.6026 56.1527 64.3138 59.6701 64.3138C61.3548 64.3138 63.0738 63.692 64.4742 62.303C68.7969 58.0152 65.7529 50.7079 59.6212 50.7079ZM59.6741 50.0508C61.5148 50.0508 63.3899 50.7263 64.9145 52.2399C69.6789 56.9213 66.3268 64.9289 59.6212 64.9289C55.5193 64.9289 52.1672 61.6026 52.1235 57.4905C52.1235 53.0191 55.8208 50.0508 59.6741 50.0508Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.4537 22.0168C55.2169 22.0168 53.418 23.7907 53.418 25.9445C53.418 28.2869 55.405 29.838 57.4918 29.838C58.4898 29.838 59.5115 29.4834 60.3492 28.6895C62.8923 26.2408 61.0948 22.0168 57.4537 22.0168ZM57.5115 21.6445C58.599 21.6445 59.7075 22.0332 60.6122 22.9044C63.3749 25.6064 61.4011 30.1684 57.4537 30.2102C55.0407 30.1684 53.0236 28.2679 53.0236 25.9445C53.0236 23.3678 55.2209 21.6445 57.5115 21.6445Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M58.3535 20.647C56.1165 20.647 54.3174 22.4249 54.3174 24.5834C54.3174 26.9311 56.3045 28.4843 58.3916 28.4843C59.3898 28.4843 60.4116 28.129 61.2494 27.3346C63.7928 24.8791 61.995 20.647 58.3535 20.647ZM58.4127 20.293C59.5003 20.293 60.6089 20.6775 61.5124 21.5353C64.2755 24.2446 62.3015 28.8587 58.3535 28.8587C55.8968 28.8587 53.9228 26.912 53.9228 24.5834C53.9228 21.9998 56.1217 20.293 58.4127 20.293Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M100.474 9.01953C101.422 9.01953 102.959 9.29418 103.44 9.66344C102.341 15.0553 92.8031 27.241 90.5615 29.1701C85.3734 33.5974 70.7352 40.1285 70.7352 40.1285L67.8782 30.9678C67.8782 30.9678 85.0663 25.9269 86.2971 23.8217C87.9233 21.0174 97.6381 12.0748 100.012 9.04976C100.138 9.02873 100.295 9.01953 100.474 9.01953Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M101.228 4.96094L106.142 5.2734C105.428 7.28761 104.42 9.12079 103.16 10.8212L99.8417 9.65718L101.228 4.96094Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M103.392 0.00195312L105.846 1.04704L106.142 5.40995L101.192 5.04752L103.392 0.00195312Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.4585 30.6621C63.2449 30.6621 65.0325 30.7172 66.8082 30.8261C68.3629 30.9573 69.8723 31.2198 71.1155 31.4389C72.9804 31.7893 74.4898 33.1894 74.9783 34.9844C76.3107 40.0612 77.0655 45.2706 77.1986 50.5233C77.3317 55.7313 73.1574 60.1087 67.8291 60.24L60.592 60.4145C60.5042 60.4171 60.4177 60.4184 60.3298 60.4184C55.7362 60.4184 51.8348 57.0461 51.313 52.5361C50.8245 48.6849 50.0245 43.2131 48.382 34.9398C48.0719 33.234 49.2259 31.5701 51.0016 31.351C52.4671 31.1319 54.3319 30.914 56.1076 30.8261C57.8833 30.7172 59.6709 30.6621 61.4585 30.6621Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.3134 20.7422L63.5843 22.432C63.0139 25.1022 62.9258 29.8623 66.7401 30.7519C66.7401 30.7519 69.6777 34.2663 63.9339 34.2663C57.621 34.2663 56.1739 30.7519 56.1739 30.7519C58.4977 28.4379 58.06 24.1672 57.3134 20.7422Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.5256 20.7422L63.6546 22.437C63.3091 23.9585 63.1357 26.1744 63.8267 27.9552C63.2651 27.8249 62.7049 27.6516 62.1434 27.3911C60.0292 26.392 58.9501 24.8274 57.8271 22.5243C57.7417 21.9159 57.6122 21.3076 57.5256 20.7422Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.515 18.9375C57.7373 18.9375 57.9608 18.9756 58.1805 19.0603C59.43 19.5934 59.775 21.1914 58.74 22.1334C58.0074 22.9121 56.9297 23.4034 55.8094 23.444C55.7887 23.4452 55.7667 23.4452 55.7461 23.4452C54.3311 23.4452 53.9228 22.0757 54.6451 20.9039C55.153 20.0085 56.3314 18.9375 57.515 18.9375Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M60.1306 8.56836C60.4785 8.56836 60.8342 8.59738 61.1952 8.6607C65.9937 9.45221 68.2184 16.0085 68.2615 20.2773C68.3282 23.8272 65.5177 26.6014 62.3343 26.6014C61.2959 26.6014 60.2182 26.3059 59.1876 25.6464C56.3954 23.8417 55.7846 21.1572 54.3891 16.7129C53.0224 12.6591 56.0619 8.56836 60.1306 8.56836Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.3498 9.91992C61.3772 9.91992 61.4046 9.9239 61.4293 9.93185C61.5662 9.93185 61.7032 10.0207 61.795 10.1533C61.8621 10.0883 61.9772 10.0472 62.0881 10.0472C62.1292 10.0472 62.1689 10.0525 62.2059 10.0644C62.3429 10.1095 62.4799 10.197 62.5716 10.3309C62.6251 10.2779 62.71 10.2567 62.799 10.2567C62.8607 10.2567 62.9264 10.2673 62.9826 10.2859C63.1195 10.3747 63.2565 10.5073 63.2565 10.6399C63.3332 10.6213 63.4003 10.6107 63.4633 10.6107C63.5538 10.6107 63.6332 10.6319 63.714 10.6836C63.851 10.7724 63.9428 10.905 63.9428 11.0376C64.0797 11.0376 64.2619 11.0376 64.3537 11.1702C64.4907 11.259 64.5824 11.4354 64.5359 11.613C64.7646 11.613 64.9016 11.7019 64.9934 11.8782C65.0851 12.0545 65.0851 12.276 64.9468 12.4536C65.0851 12.5411 65.1755 12.7626 65.1303 12.9402C65.1303 13.1166 64.9934 13.2929 64.8098 13.338C64.8564 13.5143 64.8098 13.692 64.6728 13.8683C64.5865 13.9532 64.4811 13.9837 64.3688 13.9837C64.3044 13.9837 64.2373 13.9731 64.1701 13.9572C64.1071 14.1719 63.9113 14.3019 63.7058 14.3019C63.6154 14.3019 63.5236 14.2767 63.4401 14.2223C63.3935 14.3112 63.3031 14.4437 63.1661 14.4875C63.0278 14.4875 62.8456 14.4875 62.7538 14.3987C62.7086 14.5312 62.5716 14.6201 62.4347 14.6652C62.2977 14.6652 62.1607 14.6652 62.0689 14.5763C61.9772 14.7089 61.8868 14.7977 61.7484 14.8415C61.7128 14.8534 61.6758 14.8587 61.6388 14.8587C61.5388 14.8587 61.4388 14.8176 61.3375 14.7527C61.2923 14.8852 61.2005 14.9741 61.0635 15.0179C61.0265 15.0298 60.9896 15.0351 60.9539 15.0351C60.8526 15.0351 60.7526 14.994 60.6526 14.9303C60.6074 15.0629 60.4691 15.1504 60.3321 15.1955C60.3061 15.2088 60.2718 15.2141 60.2334 15.2141C60.1417 15.2141 60.0321 15.1822 59.9677 15.1504C59.9212 15.2392 59.7842 15.3281 59.6472 15.3718C59.5911 15.3904 59.5335 15.401 59.4801 15.401C59.4047 15.401 59.3349 15.3798 59.2815 15.3281C59.1938 15.4991 59.0281 15.5972 58.8486 15.5972C58.75 15.5972 58.6473 15.5681 58.55 15.5044C58.5048 15.637 58.413 15.7258 58.2761 15.7696H58.2309C58.1993 15.7776 58.1678 15.7815 58.1364 15.7815C57.987 15.7815 57.8419 15.6954 57.7282 15.5495C57.6254 15.6489 57.4967 15.698 57.3624 15.698C57.3172 15.698 57.2706 15.6927 57.2254 15.6821C57.0433 15.5932 56.9515 15.4169 56.9063 15.2392C56.7227 15.2392 56.5406 15.1504 56.4488 14.9741C56.3118 14.7977 56.3118 14.6201 56.4488 14.4437C56.2666 14.3112 56.1748 14.1335 56.1748 13.9572C56.2201 13.7795 56.3118 13.6031 56.4488 13.5594C56.357 13.4268 56.357 13.2491 56.4036 13.1166C56.4488 12.9402 56.5858 12.8514 56.7227 12.8076C56.6775 12.6737 56.6775 12.4974 56.7227 12.3648C56.8145 12.2322 56.9515 12.1434 57.0885 12.1434C57.0433 12.0108 57.0885 11.8345 57.1802 11.7019C57.2706 11.613 57.409 11.5242 57.5912 11.5242C57.546 11.3916 57.6364 11.2153 57.7282 11.1264C57.8281 11.0615 57.9295 11.0204 58.0295 11.0204C58.0665 11.0204 58.1021 11.0257 58.1391 11.0376C58.1391 10.8613 58.2309 10.7287 58.3678 10.6399C58.4487 10.5882 58.5281 10.5669 58.6089 10.5669C58.6651 10.5669 58.7226 10.5775 58.7788 10.5961C58.8254 10.4635 58.9157 10.3309 59.0527 10.2859C59.1061 10.2527 59.1651 10.2381 59.2253 10.2381C59.3239 10.2381 59.4253 10.2753 59.5102 10.3309C59.5554 10.1533 59.6924 10.0644 59.8294 10.0207C59.8636 10.0101 59.902 10.0035 59.9389 10.0035C60.0527 10.0035 60.1732 10.0538 60.2417 10.1533C60.3321 10.0207 60.4691 9.93185 60.6074 9.93185C60.6403 9.9239 60.6718 9.91992 60.7033 9.91992C60.8389 9.91992 60.943 9.99284 61.0183 10.0644C61.0923 9.99284 61.2279 9.91992 61.3498 9.91992Z\"\n fill=\"#96F3AB\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M59.1588 10.8242C59.2913 10.8656 59.4239 10.9497 59.4677 11.0751C59.5326 11.0136 59.6453 10.9748 59.7355 10.9748C59.7687 10.9748 59.7978 10.9798 59.8217 10.9911C59.9994 11.0337 60.0869 11.1165 60.1319 11.2846C60.1982 11.2432 60.2645 11.2219 60.3255 11.2219C60.3852 11.2219 60.4409 11.2432 60.4859 11.2846C60.6185 11.326 60.7511 11.4515 60.7511 11.5769C60.8055 11.5606 60.8612 11.5493 60.9155 11.5493C60.9938 11.5493 61.0707 11.5707 61.1489 11.6196C61.2377 11.745 61.3252 11.8705 61.3703 11.9959C61.4034 11.9859 61.4366 11.9796 61.4684 11.9796C61.5665 11.9796 61.658 12.0273 61.7243 12.1214C61.8118 12.2054 61.9006 12.3723 61.9006 12.5404C62.077 12.5404 62.2096 12.6658 62.2547 12.7913C62.3435 12.9581 62.3435 13.1676 62.2547 13.3345C62.3872 13.46 62.4761 13.6281 62.4761 13.7949C62.431 13.963 62.3435 14.0885 62.1658 14.1725C62.2547 14.3394 62.2096 14.5062 62.077 14.6317C62.02 14.7132 61.9258 14.7596 61.8317 14.7596C61.7787 14.7596 61.727 14.7458 61.6792 14.7157C61.6355 14.8412 61.5466 14.9666 61.3703 15.0093C61.3464 15.0206 61.3199 15.0256 61.2907 15.0256C61.2138 15.0256 61.125 14.9867 61.06 14.9252C61.0163 15.0507 60.9275 15.1347 60.7949 15.1761C60.771 15.1874 60.7445 15.1924 60.7166 15.1924C60.6384 15.1924 60.5496 15.1535 60.4859 15.0921C60.4409 15.2175 60.352 15.3016 60.2194 15.3016C60.181 15.3141 60.1465 15.3191 60.1121 15.3191C60.0312 15.3191 59.9596 15.289 59.8668 15.2602C59.8668 15.3442 59.7779 15.427 59.6453 15.4697C59.6095 15.481 59.5738 15.486 59.5393 15.486C59.4438 15.486 59.3563 15.4471 59.2913 15.3856C59.2476 15.5111 59.1588 15.5951 59.0699 15.6365C58.9373 15.6365 58.8047 15.6365 58.7159 15.5525C58.6722 15.6779 58.5833 15.762 58.4507 15.762C58.4269 15.7733 58.4004 15.7783 58.3725 15.7783C58.2943 15.7783 58.2055 15.7394 58.1418 15.6779C58.0967 15.8034 58.0092 15.8874 57.8753 15.9301C57.8408 15.9401 57.8077 15.9464 57.7772 15.9464C57.6923 15.9464 57.6194 15.9075 57.5226 15.846C57.5226 15.9715 57.4338 16.0555 57.3012 16.0969C57.2203 16.0355 57.1262 16.0079 57.0387 16.0079C56.8889 16.0079 56.7536 16.0894 56.7258 16.2224C56.6953 16.2299 56.6635 16.2337 56.633 16.2337C56.4898 16.2337 56.3572 16.1584 56.2843 16.0555C56.2114 16.1245 56.1238 16.1546 56.039 16.1546C55.97 16.1546 55.9011 16.1346 55.8415 16.0969C55.7088 16.0129 55.5763 15.8874 55.5763 15.6779C55.5524 15.6842 55.5285 15.6867 55.5047 15.6867C55.3535 15.6867 55.2103 15.5776 55.1334 15.4697C55.0009 15.3016 55.0009 15.0921 55.0897 14.8838C54.9571 14.7998 54.8245 14.6317 54.8682 14.4234C54.8682 14.298 54.9133 14.1299 55.0459 14.0458C55.0009 13.9204 54.9571 13.7949 55.0009 13.6281C55.0459 13.5026 55.1334 13.4186 55.266 13.3772C55.2222 13.2517 55.2222 13.1263 55.266 12.9581C55.3111 12.8741 55.4437 12.7913 55.5763 12.7486C55.5325 12.6232 55.5763 12.4977 55.62 12.3723C55.7088 12.2468 55.8415 12.2054 55.974 12.2054C55.9303 12.08 55.974 11.9545 56.0628 11.8291C56.1278 11.7676 56.2392 11.7287 56.3294 11.7287C56.3625 11.7287 56.393 11.7337 56.4169 11.745C56.4169 11.6196 56.5044 11.4941 56.5932 11.4101C56.6595 11.3687 56.7258 11.3474 56.7868 11.3474C56.8478 11.3474 56.9035 11.3687 56.9472 11.4101C56.991 11.2846 57.0798 11.1592 57.1686 11.1165C57.219 11.0852 57.2694 11.0714 57.3198 11.0714C57.402 11.0714 57.4842 11.1077 57.5664 11.1592C57.6101 11.0337 57.699 10.9083 57.8316 10.9083C57.8674 10.897 57.9031 10.892 57.9376 10.892C58.0318 10.892 58.1206 10.9309 58.1856 10.9911C58.2293 10.9083 58.3619 10.8242 58.4945 10.8242C58.6284 10.8242 58.761 10.8656 58.8485 10.9911C58.8936 10.8656 59.0262 10.8242 59.1588 10.8242Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M23.5364 29.3086C26.6811 31.612 33.1016 33.9141 35.9832 35.2869C36.1508 35.3653 36.3929 35.3998 36.7006 35.3998C39.2052 35.3998 45.9555 33.022 50.0023 31.5231C50.3938 31.3744 50.7996 31.3027 51.1989 31.3027C52.5828 31.3027 53.9051 32.1524 54.4131 33.5597L54.9813 34.8887C55.7236 36.8814 54.6317 39.0959 52.6221 39.627C48.4273 40.7515 41.6508 42.3832 37.1012 42.3832C36.6299 42.3832 36.1835 42.3659 35.7645 42.3287C32.8829 42.0632 23.2313 35.9521 20.6116 30.992C20.9598 30.372 22.794 29.4414 23.5364 29.3086Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M22.9388 26.6055C22.9388 26.6055 25.5611 29.4906 23.8421 32.0148L21.0047 31.3838L17.9108 28.2284L22.9388 26.6055Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M21.6818 22.998L22.8599 26.824L17.7524 28.4074L17.0103 24.1846L21.6818 22.998Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.4369 17.5859L62.4761 18.9782L59.273 19.3883L57.9757 18.4871L61.4369 17.5859Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.5278 15.7832L66.4471 16.9098L64.4781 18.0365L64.2782 16.4671L66.5278 15.7832Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.7946 20.293C66.8523 20.293 66.9035 20.3264 66.9342 20.3613C66.9764 20.4588 66.9342 20.5548 66.8907 20.6042C65.1405 21.7198 63.261 22.3991 61.2535 22.5445C61.1678 22.5445 61.1255 22.4471 61.1255 22.3511C61.1255 22.2536 61.1678 22.1562 61.2535 22.1562C63.1753 22.0107 65.0125 21.3795 66.7204 20.3133C66.7447 20.2988 66.7703 20.293 66.7946 20.293Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M36.238 35.1719C36.2519 35.1719 36.265 35.1771 36.2733 35.189C36.3347 35.2324 36.3663 35.3205 36.3347 35.4073C36.0873 36.3727 35.5599 39.6635 35.932 42.2086C35.932 42.252 35.9004 42.3401 35.839 42.3835H35.8074C35.7767 42.3835 35.7143 42.3401 35.7143 42.252C35.466 39.9266 35.6213 37.5144 36.1487 35.2758C36.1487 35.2113 36.1989 35.1719 36.238 35.1719Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M51.0916 31.1133C51.136 31.1133 51.1754 31.1345 51.2008 31.1863C52.6822 33.2254 53.0211 35.9725 52.0475 38.3649C51.4965 39.6509 50.5648 40.4917 49.5911 40.5807C49.5492 40.5807 49.4642 40.4917 49.4223 40.4479C49.4223 40.3589 49.5073 40.2712 49.5911 40.2712C50.4378 40.1822 51.2426 39.429 51.7504 38.2773C52.6822 35.9725 52.3864 33.3583 50.9888 31.3643C50.9037 31.2753 50.9469 31.1863 50.9888 31.1425C51.0243 31.1239 51.0586 31.1133 51.0916 31.1133Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.1718 30.6621C71.9216 30.6621 74.9675 34.963 75.5298 38.1416C75.5298 38.2338 75.4865 38.2792 75.3987 38.3259H75.3555C75.3109 38.3259 75.2244 38.2792 75.2244 38.187C74.6621 35.146 71.7459 30.9826 68.1705 30.9826C68.1311 30.9826 68.0931 30.984 68.0538 30.984C67.966 30.984 67.8795 30.9386 67.8795 30.8464C67.8795 30.7556 67.966 30.6635 68.0538 30.6635C68.0931 30.6621 68.1324 30.6621 68.1718 30.6621Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M24.476 29.7617C24.6156 29.8032 24.6616 29.8874 24.6156 29.9704C24.4285 30.9771 22.7998 31.2285 21.4489 31.4384L20.8445 31.564H20.7971C20.705 31.5226 20.6575 31.4798 20.6115 31.4384C20.6115 31.3541 20.6575 31.2699 20.751 31.2285C20.9367 31.2285 21.1697 31.187 21.4028 31.1443C22.6128 30.9356 24.1494 30.7257 24.289 29.8874C24.335 29.8032 24.4285 29.7617 24.476 29.7617Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M86.1418 23.8984C86.1724 23.8984 86.2029 23.9089 86.2293 23.935C88.0822 25.1552 89.9364 27.7693 89.8433 30.0359C89.8433 30.1234 89.7503 30.2096 89.6586 30.2096C89.5655 30.1665 89.4725 30.1234 89.4725 30.0359C89.5655 27.8568 87.7585 25.3289 85.9974 24.1532C85.8863 24.0826 86.014 23.8984 86.1418 23.8984Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M99.5986 9.46875C99.6445 9.46875 99.6931 9.48691 99.7347 9.53116C100.225 10.1485 101.395 10.54 102.513 10.54C102.765 10.54 103.015 10.5196 103.256 10.4776C103.281 10.4674 103.302 10.4628 103.321 10.4628C103.372 10.4628 103.407 10.498 103.44 10.5536C103.44 10.6296 103.395 10.7045 103.302 10.7431C103.024 10.7806 102.746 10.818 102.468 10.818C102.422 10.8203 102.378 10.8203 102.333 10.8203C101.224 10.8203 100.168 10.3743 99.4556 9.68323C99.3903 9.57542 99.4875 9.46875 99.5986 9.46875Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M63.3648 35.6211C67.7415 35.6211 71.8946 40.0353 72.6096 45.5187C73.279 51.0007 70.2867 55.459 65.8658 55.459C65.2405 55.459 64.5697 55.3708 63.9901 55.1917C60.3269 54.1667 57.2007 50.243 56.5755 45.5628C56.1738 42.9768 56.7991 40.3467 58.3173 38.2071C59.4794 36.602 61.3552 35.6211 63.3648 35.6211Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M61.001 37.877C65.1094 37.877 68.7839 41.573 69.2476 46.271C69.6789 50.4648 67.3955 54.0915 63.991 55.0083C63.3026 54.7895 62.6555 54.4844 62.0097 54.1347C59.4253 52.4739 57.3563 49.2415 56.8823 45.5716C56.624 43.7799 56.8396 41.9895 57.4428 40.2856C57.7011 39.5862 58.0886 38.9313 58.52 38.3196C59.2522 38.0564 59.9846 37.8822 60.7169 37.8822C60.8125 37.8783 60.9068 37.877 61.001 37.877Z\"\n fill=\"#46C963\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M57.4666 40.1309C57.6009 40.1745 57.7339 40.1745 57.8668 40.1745C62.1671 40.6159 65.626 44.3195 65.5369 48.4197C65.5369 50.7565 64.2076 52.9612 62.1232 54.1072C59.4633 52.4312 57.3337 49.1691 56.8459 45.4655C56.6252 43.6573 56.802 41.8505 57.4666 40.1309Z\"\n fill=\"#34B952\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M66.5343 41.4844C67.1715 41.4844 67.8662 41.7431 68.4734 42.2632C69.6929 43.2981 70.1278 44.9812 69.3874 46.0602L67.6024 48.5635C67.3335 48.9503 66.9143 49.1469 66.4834 49.1469C66.1452 49.1469 65.7992 49.0253 65.5119 48.7796L62.2881 46.0602C61.0685 44.9812 60.6768 43.2981 61.4171 42.2632C61.7827 41.7457 62.3507 41.4921 62.9814 41.4921C63.4045 41.4921 63.8549 41.606 64.2924 41.8311C64.4556 41.9035 64.6345 41.9372 64.8121 41.9372C65.0615 41.9372 65.3083 41.8712 65.5119 41.7444C65.8149 41.5711 66.1648 41.4844 66.5343 41.4844Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.0324 56.8145C68.6784 56.8145 69.327 56.8222 69.977 56.8404C71.5138 56.8844 72.8742 57.9652 73.2689 59.4775C74.6293 64.9669 73.532 72.1435 73.532 72.1435H57.074C57.6884 68.4256 57.8647 64.665 57.5134 60.9043C57.3818 59.0019 58.7857 57.36 60.7171 57.1436C63.1485 56.9376 65.5786 56.8145 68.0324 56.8145Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M68.0324 56.8145C68.6784 56.8145 69.327 56.8222 69.977 56.8404C71.5138 56.8844 72.8742 57.9652 73.2689 59.4775C74.6293 64.9669 73.532 72.1435 73.532 72.1435H57.074C57.6884 68.4256 57.8647 64.665 57.5134 60.9043C57.3818 59.0019 58.7857 57.36 60.7171 57.1436C63.1485 56.9376 65.5786 56.8145 68.0324 56.8145Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M74.7496 72.1445C76.6739 72.1445 78.2323 73.7096 78.1001 75.6171C77.7435 84.8453 76.5403 109.981 73.6906 122.988C71.9973 140.389 69.3252 189.826 69.3252 189.826H57.0742C57.0742 189.826 60.9949 134.809 64.8703 122.988C60.9055 112.398 61.9297 72.1458 61.9297 72.1458H74.6694C74.6961 72.1445 74.7229 72.1445 74.7496 72.1445Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M65.5834 86.5742C65.5834 86.5742 65.6274 104.51 63.361 115.43C62.5163 108.851 62.1606 100.169 62.0274 92.3194L65.5834 86.5742Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M71.0283 72.1445C71.0283 72.1445 62.4253 112.397 56.4119 122.987C53.8224 148.211 44.3864 189.825 44.3864 189.825H32.3149C32.3149 189.825 42.0153 138.631 46.9313 122.987C46.7563 109.979 51.4091 84.844 52.9013 75.6158C53.2526 73.6384 54.9645 72.1445 56.983 72.1445H71.0283Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M53.4149 117.684C53.8457 117.684 54.2778 117.759 54.6982 117.92C56.9688 118.757 57.9731 121.757 56.9256 124.624C56.0626 126.982 54.1076 128.505 52.1526 128.505C51.7309 128.505 51.308 128.434 50.8981 128.284C48.6262 127.447 47.6218 124.403 48.6694 121.537C49.5284 119.225 51.469 117.684 53.4149 117.684Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M53.4149 117.684C53.8457 117.684 54.2778 117.759 54.6982 117.92C56.9688 118.757 57.9731 121.757 56.9256 124.624C56.0626 126.982 54.1076 128.505 52.1526 128.505C51.7309 128.505 51.308 128.434 50.8981 128.284C48.6262 127.447 47.6218 124.403 48.6694 121.537C49.5284 119.225 51.469 117.684 53.4149 117.684Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M43.4331 185.77C45.7484 185.77 47.619 187.607 47.4855 189.826H39.0684C39.1565 187.563 41.1166 185.813 43.4331 185.77Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M70.6791 117.686C70.8675 117.686 71.0572 117.702 71.2483 117.736C73.5208 118.141 75.0813 120.846 74.7246 123.821C74.3532 126.529 72.4988 128.504 70.4266 128.504C70.2556 128.504 70.0833 128.491 69.9109 128.464C67.5943 128.058 66.0792 125.354 66.4346 122.379C66.802 119.653 68.6283 117.686 70.6791 117.686Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M70.6791 117.686C70.8675 117.686 71.0572 117.702 71.2483 117.736C73.5208 118.141 75.0813 120.846 74.7246 123.821C74.3532 126.529 72.4988 128.504 70.4266 128.504C70.2556 128.504 70.0833 128.491 69.9109 128.464C67.5943 128.058 66.0792 125.354 66.4346 122.379C66.802 119.653 68.6283 117.686 70.6791 117.686Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M69.2499 185.77C71.4797 185.77 73.2803 187.563 73.2803 189.826H65.1772C65.1772 187.563 66.9777 185.77 69.2499 185.77Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M54.5479 74.3984C56.4626 74.3984 58.7686 75.6085 60.8997 77.7254C63.4235 80.2323 66.0776 84.5103 66.0776 89.1354C66.0776 89.2209 66.0346 89.2649 65.9472 89.2649C65.9316 89.2727 65.9146 89.2766 65.9003 89.2766C65.8311 89.2766 65.7724 89.2054 65.7724 89.1354C65.7724 84.5971 63.1196 80.4047 60.6388 77.9845C58.5507 75.9104 56.3322 74.7444 54.5479 74.7444C54.4619 74.7444 54.3745 74.6575 54.3745 74.5707C54.3745 74.4852 54.4619 74.3984 54.5479 74.3984Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M76.2573 78.9082C76.2725 78.9082 76.2878 78.9121 76.303 78.92C76.3882 78.92 76.4302 79.0063 76.4302 79.094C75.9635 82.1057 72.2737 87.1676 68.5839 88.8265H68.542C68.3716 88.8265 68.3296 88.608 68.4568 88.5204C71.9775 86.9491 75.7093 81.9304 76.1339 79.0508C76.1339 78.9789 76.1899 78.9082 76.2573 78.9082Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M41.261 185.77C42.811 185.77 44.1648 185.959 44.7573 186.148C44.9195 186.185 44.8567 186.394 44.7089 186.394C44.6972 186.394 44.6841 186.393 44.671 186.389C44.0994 186.242 42.7626 186.061 41.2375 186.061C39.8484 186.061 38.3036 186.211 37.0349 186.671H36.9917C36.9473 186.671 36.8609 186.63 36.8609 186.591C36.8164 186.51 36.8609 186.429 36.9473 186.389C38.2605 185.929 39.8432 185.77 41.261 185.77Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M67.6428 185.316C68.1838 185.316 68.6619 185.408 69.0564 185.565C69.2287 185.617 69.1426 185.935 68.9716 185.935C68.6144 185.793 68.1658 185.707 67.6505 185.707C66.4335 185.707 64.8399 186.183 63.1846 187.517C63.1409 187.517 63.1409 187.571 63.0985 187.571C63.0548 187.571 63.0124 187.517 62.97 187.465C62.9263 187.359 62.9263 187.254 63.0124 187.201C64.7294 185.829 66.3628 185.316 67.6428 185.316Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M98.1937 53.207L97.0674 58.3729C97.0674 58.3729 98.8532 59.9677 100.623 59.9677C100.925 59.9677 101.227 59.9213 101.519 59.8126L101.568 57.6772L98.1937 53.207Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M94.1024 52.3047L93.4658 56.3415L97.5574 58.6145L97.9675 53.326L94.1024 52.3047Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M100.676 50.0508C100.618 50.0508 100.554 50.0688 100.488 50.1107L91.0148 54.8605C90.8649 54.961 90.765 55.1603 90.8649 55.31C90.9145 55.4105 91.0148 55.4601 91.1643 55.4601H91.2642L100.787 50.6608C101.119 50.4945 100.968 50.0508 100.676 50.0508Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M122.739 39.6797C122.25 40.5125 121.909 41.1983 121.518 41.9328C121.127 42.6687 120.736 43.4032 120.345 44.1372C119.613 45.6076 118.881 47.0279 118.148 48.4978C116.732 51.4367 115.365 54.4257 114.046 57.4147L113.851 57.9535C113.803 58.0017 113.803 58.0518 113.753 58.1005C113.704 58.1988 113.656 58.247 113.606 58.2957C113.508 58.394 113.362 58.444 113.216 58.444C113.016 58.463 112.817 58.4734 112.618 58.4734C111.842 58.4734 111.074 58.325 110.334 58.0518C109.065 57.6099 107.844 57.0724 106.671 56.3862C106.085 56.0426 105.451 55.6503 104.864 55.2585L103.986 54.6223C103.741 54.4257 103.4 54.1804 103.204 54.0334L98.418 61.1377C98.9069 61.383 99.2481 61.53 99.6388 61.7752C100.03 61.9705 100.421 62.1671 100.812 62.3623C101.592 62.7546 102.422 63.1469 103.204 63.4891C104.864 64.2249 106.623 64.8125 108.381 65.253C109.358 65.4983 110.334 65.6935 111.36 65.7918C111.653 65.817 111.946 65.8288 112.239 65.8288C113.119 65.8288 113.997 65.7183 114.876 65.4983C117.025 65.0077 118.831 63.6361 119.906 61.7252C120.102 61.4312 120.249 61.1377 120.345 60.8437L120.59 60.2562C121.225 58.8846 121.861 57.4629 122.544 56.0426C123.178 54.671 123.912 53.2989 124.644 51.9273C125.376 50.6039 126.158 49.2824 126.988 47.959C127.379 47.3214 127.818 46.6857 128.209 46.0481C128.6 45.3623 129.087 44.7261 129.478 44.1873L122.739 39.6797Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M140.32 14.4297C139.517 14.4297 138.938 14.9398 138.307 15.9407C137.246 17.5733 134.882 25.8328 135.365 29.246C135.679 31.5474 137.153 32.4654 138.884 32.4654C141.134 32.4654 143.817 30.9188 144.962 28.8501C147.035 25.1907 144.432 16.3366 142.358 15.1489C141.517 14.6669 140.866 14.4297 140.32 14.4297Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M149.834 6.76367C145.531 6.76367 142.086 12.6322 142.557 14.4458C142.993 16.2549 143.717 16.8892 145.457 17.2321C146.122 17.3771 147.197 17.5836 148.4 17.5836C150.423 17.5836 152.808 16.9977 154.203 14.5439C156.04 11.4163 153.913 6.97022 150.144 6.77391C150.041 6.76809 149.936 6.76367 149.834 6.76367Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M133.358 14.8809C132.267 14.8809 131.004 15.4398 130.358 16.2767C129.031 17.9805 129.836 22.6178 130.784 23.3738C131.228 23.73 131.577 23.8973 131.894 23.8973C132.251 23.8973 132.563 23.6818 132.915 23.28C133.578 22.4759 135.331 18.5479 135.331 16.7491C135.331 15.4157 134.428 14.8809 133.358 14.8809Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.481 173.145L129.818 184.866H134.882L134.544 173.145H129.481Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M158.306 170.889L153.34 171.573L156.475 183.061L161.442 182.425L158.306 170.889Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M161.243 180.357C161.211 180.357 161.177 180.362 161.143 180.371L155.653 182.02C155.309 182.119 155.064 182.32 154.917 182.57C153.888 184.068 153.594 185.418 150.016 187.367C149.287 187.759 149.719 189.374 151.248 189.374C151.468 189.374 151.711 189.341 151.977 189.266C154.035 188.665 156.142 187.867 157.662 187.416C160.113 186.716 161.045 186.567 163.005 186.017C163.447 185.867 163.691 185.368 163.544 184.917L161.632 180.621C161.552 180.455 161.403 180.357 161.243 180.357Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.612 183.965C129.321 183.965 129.069 184.1 128.855 184.272C127.516 185.413 125.881 186.603 121.819 187.495C120.927 187.695 121.077 189.826 123.206 189.826C125.387 189.826 128.655 189.678 130.242 189.678C132.817 189.678 133.758 189.826 135.79 189.826C136.285 189.826 136.681 189.43 136.632 188.933L135.988 184.321C135.944 184.106 135.789 183.965 135.618 183.965C135.592 183.965 135.567 183.968 135.542 183.975H129.746C129.7 183.968 129.655 183.965 129.612 183.965Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.481 173.145L129.679 179.005H134.882L134.683 173.145H129.481Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M158.415 170.889L153.34 171.59L154.965 177.651L160.09 177.001L158.415 170.889Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.893 37.875C135.35 37.875 133.814 37.9359 132.278 38.0563C128.292 38.3958 123.778 39.3629 123.778 39.3629C123.778 39.3629 121.378 40.1854 126.179 69.887H146.586C146.251 61.5194 146.202 56.3418 150.188 39.2178C147.306 38.5883 144.426 38.2028 141.545 38.0563C139.983 37.9359 138.436 37.875 136.893 37.875Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M140.708 27.5059L134.966 32.4021C135.552 34.7287 135.648 37.2005 132.291 38.0247C132.291 38.0247 129.031 41.0313 135.21 41.0313C140.806 41.0313 141.633 38.0247 141.633 38.0247C139.541 36.0381 140.124 30.5111 140.708 27.5059Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M138.334 29.3105L134.882 32.1868C135.029 32.7143 135.129 33.2419 135.178 33.8168C136.461 33.6256 138.237 32.2341 138.384 30.9405C138.482 30.3643 138.433 29.8367 138.334 29.3105Z\"\n fill=\"#1A2327\"\n fill-opacity=\"0.129412\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.902 13.0781C136.415 13.0781 135.917 13.1299 135.413 13.2379C130.148 14.374 128.129 21.7264 128.425 26.4632C128.631 30.1127 131.543 32.465 134.807 32.465C136.221 32.465 137.702 32.0227 139.056 31.0524C142.058 28.8822 142.451 26.759 143.633 21.7752C144.784 17.2469 141.274 13.0781 136.902 13.0781Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M142.739 10.8242C141.949 10.8242 141.302 10.9946 140.971 11.2886C139.933 12.1635 139.834 12.8913 140.378 14.0078C140.921 15.1242 144.281 18.9614 146.011 19.6892C146.263 19.7911 146.497 19.8392 146.714 19.8392C148.762 19.8392 149.287 15.6381 148.037 13.6191C146.757 11.6016 144.424 10.8242 142.739 10.8242Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M138.585 11.2734C137.439 11.2734 136.494 11.5268 136.004 11.9515C134.53 13.3192 134.433 14.2477 135.218 15.9083C135.955 17.569 140.767 23.0886 143.222 24.1149C143.602 24.2745 143.955 24.3493 144.28 24.3493C147.236 24.3493 147.937 18.2749 146.168 15.3709C144.304 12.3908 140.996 11.2734 138.585 11.2734Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M125.905 69.8887C125.905 69.8887 121.828 109.124 122.172 124.672C122.516 140.804 128.509 177.651 128.509 177.651H135.437C135.437 177.651 134.355 141.73 134.945 125.89C135.681 108.588 141.183 69.8887 141.183 69.8887H125.905Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.683 175.398L127.229 175.673L127.89 178.101H136.276L136.683 175.398Z\"\n fill=\"#1A2327\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M137.126 77.1055C136.528 77.1055 135.823 77.8377 134.995 79.5344C129.93 89.79 133.981 108.445 135.765 115.429C136.634 104.978 138.177 92.232 139.383 82.8066C138.918 79.4524 138.195 77.1055 137.126 77.1055Z\"\n fill=\"black\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M146.703 69.8887L131.281 69.9369C131.281 69.9369 136.027 110.717 139.635 123.775C143.884 139.318 153.572 176.298 153.572 176.298L160.542 175.372C160.542 175.372 154.314 134.299 152.287 125.724C147.888 107.454 152.287 81.3386 146.703 69.8887Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M161.441 172.693L151.54 174.379L152.795 176.749L161.296 175.701L161.441 172.693Z\"\n fill=\"#1A2327\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.188 21.1914C134.91 21.1914 134.604 21.4461 134.55 21.7786C134.432 22.1352 134.667 22.4931 134.959 22.5387C134.985 22.5414 135.01 22.5427 135.037 22.5427C135.353 22.5427 135.613 22.2854 135.722 21.9127C135.78 21.5547 135.604 21.1968 135.253 21.1968C135.232 21.1928 135.209 21.1914 135.188 21.1914Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M130.709 20.291C130.369 20.291 130.049 20.5457 129.993 20.8769C129.932 21.2804 130.115 21.5927 130.422 21.6383C130.448 21.641 130.476 21.6423 130.501 21.6423C130.834 21.6423 131.106 21.3876 131.218 21.0565C131.28 20.6543 131.097 20.3406 130.79 20.2964C130.762 20.2924 130.737 20.291 130.709 20.291Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.932 19.8398C129.932 19.8398 130.18 20.2895 130.55 20.2895C130.636 20.2895 130.732 20.2641 130.831 20.2025L129.932 19.8398Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.18 22.0938C131.672 22.9174 131.073 23.648 130.38 24.2878C130.712 24.6169 131.119 24.7978 131.567 24.7978C131.617 24.7978 131.668 24.7964 131.719 24.791L132.18 22.0938Z\"\n fill=\"#ED847E\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.639 25.7012C135.603 25.7012 135.567 25.712 135.543 25.7309C134.974 26.1724 134.192 26.4131 133.391 26.4131C133.186 26.4131 132.978 26.3964 132.774 26.3644C132.727 26.3644 132.679 26.405 132.631 26.4438C132.631 26.483 132.679 26.5628 132.727 26.5628C132.966 26.6016 133.203 26.6016 133.395 26.6016C134.254 26.6016 135.114 26.3252 135.733 25.8509C135.782 25.8103 135.782 25.7711 135.733 25.7309C135.71 25.712 135.675 25.7012 135.639 25.7012Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M143.142 22.5449C141.958 22.5449 140.943 23.8958 140.605 24.9347C140.284 26.0145 140.699 27.0525 141.738 27.0525C141.865 27.0525 142.002 27.0372 142.149 27.0038C143.127 26.7013 144.001 26.0966 144.514 25.239C145.235 24.1785 144.618 22.7658 143.382 22.5646C143.302 22.551 143.222 22.5449 143.142 22.5449Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.569 18.9395C135.456 18.9395 135.385 19.034 135.385 19.1633C135.334 19.321 135.439 19.4266 135.596 19.4266C136.223 19.5843 136.798 20.0052 137.06 20.5838C137.111 20.6878 137.163 20.6878 137.216 20.7414H137.425C137.53 20.6358 137.582 20.4782 137.53 20.3725C137.163 19.5843 136.484 19.0577 135.647 18.9521C135.619 18.9442 135.594 18.9395 135.569 18.9395Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M131.174 17.5859C130.409 17.5859 129.669 17.8042 129.141 18.1919C129.03 18.2662 129.03 18.3769 129.141 18.4501C129.195 18.4877 129.251 18.4877 129.36 18.4877C129.417 18.4877 129.471 18.4501 129.526 18.4135C129.948 18.1299 130.492 17.9537 131.087 17.9537C131.189 17.9537 131.295 17.9593 131.399 17.9704C131.509 17.9704 131.675 17.9327 131.731 17.8219C131.731 17.7111 131.62 17.6369 131.509 17.6003C131.397 17.5915 131.287 17.5859 131.174 17.5859Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M153.684 182.411C154.106 182.411 154.705 182.532 155.155 182.677V182.731C154.581 183.056 154.061 183.229 153.713 183.229C153.593 183.229 153.494 183.208 153.421 183.167C153.276 183.057 153.179 182.894 153.179 182.731C153.179 182.677 153.179 182.568 153.227 182.514C153.308 182.441 153.474 182.411 153.684 182.411ZM153.73 182.16C153.457 182.16 153.22 182.212 153.082 182.351C152.986 182.459 152.89 182.622 152.938 182.785C152.938 183.004 153.082 183.221 153.227 183.384L153.276 183.439C153.385 183.49 153.51 183.513 153.646 183.513C154.236 183.513 155.024 183.095 155.493 182.785C155.541 182.731 155.59 182.731 155.59 182.677C155.59 182.622 155.541 182.568 155.493 182.568C155.354 182.49 154.424 182.16 153.73 182.16Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M154.325 181.085C154.374 181.085 154.419 181.099 154.465 181.127C154.509 181.127 154.509 181.127 154.554 181.181C154.914 181.57 155.184 182.122 155.32 182.73C154.779 182.453 154.06 181.735 154.014 181.347C154.014 181.293 154.014 181.181 154.149 181.127C154.217 181.099 154.273 181.085 154.325 181.085ZM154.325 180.809C154.24 180.809 154.149 180.822 154.06 180.85C153.88 180.905 153.789 181.127 153.789 181.347C153.835 181.79 154.284 182.287 154.734 182.675C154.96 182.841 155.23 182.952 155.499 183.061C155.499 183.061 155.544 183.061 155.59 183.007C155.59 183.007 155.59 182.952 155.59 182.896C155.59 182.841 155.184 181.238 154.554 180.85C154.486 180.822 154.408 180.809 154.325 180.809Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M126.862 183.779C127.59 183.878 128.316 184.125 128.995 184.52C128.576 184.575 128.193 184.603 127.862 184.603C127.308 184.603 126.898 184.526 126.717 184.372C126.621 184.273 126.571 184.125 126.571 183.977C126.571 183.927 126.621 183.878 126.669 183.829C126.717 183.779 126.814 183.779 126.862 183.779ZM126.882 183.514C126.757 183.514 126.651 183.534 126.571 183.582C126.426 183.681 126.378 183.779 126.378 183.927C126.329 184.174 126.426 184.372 126.571 184.52C126.911 184.766 127.347 184.865 127.783 184.865C128.316 184.816 128.849 184.766 129.383 184.668C129.43 184.618 129.48 184.618 129.48 184.569C129.48 184.52 129.48 184.421 129.43 184.421C129.222 184.335 127.676 183.514 126.882 183.514Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.998 182.853C128.163 182.853 128.327 182.901 128.436 182.997C128.875 183.428 129.149 183.956 129.203 184.53C128.491 184.195 127.559 183.332 127.668 182.997C127.668 182.948 127.668 182.853 127.888 182.853H127.998ZM127.888 182.613C127.503 182.661 127.395 182.804 127.395 182.948C127.231 183.525 128.602 184.627 129.314 184.866H129.424C129.478 184.818 129.478 184.77 129.478 184.77C129.478 184.674 129.369 183.332 128.656 182.804C128.436 182.661 128.163 182.613 127.888 182.613Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M125.768 68.5352C125.575 68.5352 125.43 68.679 125.43 68.7755L125.575 70.5971C125.623 70.6931 125.768 70.7896 125.962 70.7896H147.1C147.292 70.7896 147.485 70.6458 147.438 70.502L146.905 68.7277C146.808 68.5825 146.663 68.5352 146.567 68.5352H125.768Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M144.03 68.5371C143.922 68.5371 143.885 68.6327 143.885 68.6818L144.065 71.0964C144.065 71.192 144.137 71.2411 144.245 71.2411H144.641C144.712 71.2411 144.785 71.192 144.785 71.0964L144.605 68.6818C144.605 68.6327 144.497 68.5371 144.425 68.5371H144.03Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.368 68.5371C127.264 68.5371 127.229 68.6327 127.229 68.6818L127.402 71.0964C127.437 71.192 127.506 71.2411 127.576 71.2411H127.99C128.06 71.2411 128.129 71.192 128.094 71.0964L127.922 68.6818C127.922 68.6327 127.852 68.5371 127.748 68.5371H127.368Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.54 68.5371C135.436 68.5371 135.332 68.6327 135.385 68.6818L135.645 71.0964C135.645 71.192 135.748 71.2411 135.852 71.2411H136.474C136.578 71.2411 136.683 71.192 136.683 71.0964L136.371 68.6818C136.371 68.6327 136.267 68.5371 136.163 68.5371H135.54Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M134.432 20.7422C134.432 20.7422 134.644 21.1919 135.02 21.1919C135.114 21.1919 135.217 21.1638 135.331 21.0935L134.432 20.7422Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.292 37.4258C129.846 37.6215 124.174 38.0101 122.903 39.0824C121.68 40.155 121.24 61.2577 122.266 68.7128C123.294 76.1701 119.576 141.377 121.337 153.756C129.759 153.142 134.202 153.018 136.409 153.018C137.879 153.018 138.357 153.074 138.357 153.074L138.895 149.272L140.411 153.172C140.411 153.172 147.798 152.519 153.457 152.519C155.983 152.519 158.165 152.649 159.191 153.024C159.093 140.841 153.322 81.336 148.724 69.1529C150.29 53.8987 152.295 39.7168 151.316 38.5958C150.29 37.4754 141.829 37.4258 141.829 37.4258C140.265 39.0824 138.161 40.1068 135.912 40.2529C135.853 40.2542 135.796 40.2542 135.739 40.2542C132.34 40.2542 132.292 37.4258 132.292 37.4258Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.292 37.4258C129.846 37.6215 124.174 38.0101 122.903 39.0824C121.68 40.155 121.24 61.2577 122.266 68.7128C123.294 76.1701 119.576 141.377 121.337 153.756C129.759 153.142 134.202 153.018 136.409 153.018C137.879 153.018 138.357 153.074 138.357 153.074L138.895 149.272L140.411 153.172C140.411 153.172 147.798 152.519 153.457 152.519C155.983 152.519 158.165 152.649 159.191 153.024C159.093 140.841 153.322 81.336 148.724 69.1529C150.29 53.8987 152.295 39.7168 151.316 38.5958C150.29 37.4754 141.829 37.4258 141.829 37.4258C140.265 39.0824 138.161 40.1068 135.912 40.2529C135.853 40.2542 135.796 40.2542 135.739 40.2542C132.34 40.2542 132.292 37.4258 132.292 37.4258Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M139.384 65.832C139.432 66.9106 139.579 67.99 139.869 69.0171C140.751 69.3301 142.668 69.4378 144.592 69.4378C146.153 69.4378 147.72 69.367 148.74 69.2746L148.692 69.1204L148.837 67.5788L139.384 65.832Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M147.937 47.3438C147.937 50.1965 148.524 55.0161 150.019 58.1638C150.394 54.8687 150.766 51.7711 151.086 49.0657L147.937 47.3438Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.19 40.1309C135.105 40.1309 135.018 40.1908 135.018 40.313C135.018 40.4109 134.629 49.9423 134.53 70.3172C134.432 103.873 138.542 148.661 138.591 149.098C138.591 149.196 138.689 149.244 138.739 149.244H138.787C138.885 149.244 138.934 149.146 138.934 149.05C138.885 148.612 134.775 103.873 134.872 70.3172C134.97 49.9423 135.362 40.4109 135.362 40.313C135.362 40.1908 135.277 40.1309 135.19 40.1309Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M142.737 68.5352C142.63 68.5352 142.535 68.6262 142.592 68.7674C143.779 71.8068 146.058 74.2773 149.001 75.7494H149.097C149.144 75.7494 149.192 75.7026 149.239 75.6539C149.286 75.5601 149.239 75.4645 149.144 75.4162C146.296 73.9923 144.111 71.6175 142.923 68.6731C142.886 68.5766 142.808 68.5352 142.737 68.5352Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M120.206 51.4023C119.618 51.4023 119.126 51.938 119.225 52.5233L121.68 71.0198C121.777 71.6533 122.268 72.1389 122.956 72.1389H136.507C136.532 72.1421 136.556 72.1421 136.58 72.1421C137.178 72.1421 137.583 71.5816 137.489 71.0198L135.082 52.5233C134.985 51.8898 134.445 51.4519 133.806 51.4023H120.206Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M136.546 58.166L136.234 63.4532C136.234 63.4532 137.991 64.4772 139.703 64.4772C140.217 64.4772 140.727 64.3852 141.184 64.1453L140.819 62.0207L136.546 58.166Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M127.072 68.5371C126.968 68.5371 126.865 68.5867 126.865 68.6873C126.345 71.242 125.099 73.5966 123.231 75.4497C123.178 75.4993 123.178 75.5999 123.231 75.7004C123.282 75.7004 123.333 75.75 123.386 75.75C123.437 75.75 123.489 75.7004 123.542 75.7004C126.812 72.2434 127.228 68.887 127.228 68.7369C127.228 68.6363 127.176 68.5371 127.072 68.5371Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.233 57.7148L132.182 61.9555L137.131 63.5751L136.672 58.0963L132.233 57.7148Z\"\n fill=\"#FFC3BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M151.361 38.7793L144.801 43.3883C144.851 43.4361 144.995 43.6309 145.092 43.7269L145.381 44.1634C145.621 44.5038 145.815 44.7947 146.007 45.1351C146.393 45.7167 146.779 46.3958 147.165 47.027C147.888 48.3856 148.563 49.7437 149.143 51.15C150.3 53.9149 151.12 56.8263 151.553 59.8342C151.553 60.1728 151.603 60.5132 151.651 60.9014L151.698 61.2897H151.603C151.023 61.2897 150.494 61.2897 149.914 61.1923C148.563 60.9497 147.165 60.6106 145.863 60.125C145.187 59.8342 144.464 59.5434 143.789 59.2521L142.776 58.7665C142.439 58.6213 142.101 58.4261 141.811 58.2809L138.484 66.0921C139.015 66.2856 139.4 66.383 139.835 66.4803L141.136 66.8686C141.956 67.1102 142.825 67.3528 143.692 67.5481C145.526 67.9841 147.358 68.3232 149.191 68.4683C149.69 68.5121 150.178 68.5369 150.666 68.5369C151.264 68.5369 151.86 68.5004 152.47 68.4205C153.097 68.3232 153.773 68.1775 154.399 67.9349C155.171 67.6441 155.943 67.2554 156.57 66.6738C157.293 66.0443 157.872 65.2674 158.258 64.3454C158.547 63.5689 158.741 62.7443 158.741 61.9196C158.741 61.5805 158.741 61.2405 158.692 60.9014L158.644 60.2224C158.596 59.7846 158.547 59.3481 158.499 58.9121C158.016 55.3708 157.149 51.8773 155.943 48.5308C155.315 46.88 154.64 45.2311 153.918 43.6309C153.531 42.8049 153.145 42.0298 152.712 41.2533L152.084 40.0404L151.747 39.4092C151.603 39.2158 151.506 39.0223 151.361 38.7793Z\"\n fill=\"#80ED99\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M151.361 38.7793L144.801 43.3883C144.851 43.4361 144.995 43.6309 145.092 43.7269L145.381 44.1634C145.621 44.5038 145.815 44.7947 146.007 45.1351C146.393 45.7167 146.779 46.3958 147.165 47.027C147.888 48.3856 148.563 49.7437 149.143 51.15C150.3 53.9149 151.12 56.8263 151.553 59.8342C151.553 60.1728 151.603 60.5132 151.651 60.9014L151.698 61.2897H151.603C151.023 61.2897 150.494 61.2897 149.914 61.1923C148.563 60.9497 147.165 60.6106 145.863 60.125C145.187 59.8342 144.464 59.5434 143.789 59.2521L142.776 58.7665C142.439 58.6213 142.101 58.4261 141.811 58.2809L138.484 66.0921C139.015 66.2856 139.4 66.383 139.835 66.4803L141.136 66.8686C141.956 67.1102 142.825 67.3528 143.692 67.5481C145.526 67.9841 147.358 68.3232 149.191 68.4683C149.69 68.5121 150.178 68.5369 150.666 68.5369C151.264 68.5369 151.86 68.5004 152.47 68.4205C153.097 68.3232 153.773 68.1775 154.399 67.9349C155.171 67.6441 155.943 67.2554 156.57 66.6738C157.293 66.0443 157.872 65.2674 158.258 64.3454C158.547 63.5689 158.741 62.7443 158.741 61.9196C158.741 61.5805 158.741 61.2405 158.692 60.9014L158.644 60.2224C158.596 59.7846 158.547 59.3481 158.499 58.9121C158.016 55.3708 157.149 51.8773 155.943 48.5308C155.315 46.88 154.64 45.2311 153.918 43.6309C153.531 42.8049 153.145 42.0298 152.712 41.2533L152.084 40.0404L151.747 39.4092C151.603 39.2158 151.506 39.0223 151.361 38.7793Z\"\n fill=\"#ABF2BD\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M141.458 36.9746C139.761 38.3372 137.869 39.4563 135.784 40.2355C137.288 41.5981 137.335 45.5402 137.335 45.5402C137.335 45.5402 143.884 40.7215 143.643 37.3642C142.963 37.1207 142.235 36.9746 141.458 36.9746Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M131.731 36.9727C131.275 36.9727 130.823 37.0502 130.41 37.2076C128.581 40.5473 132.544 44.6378 132.544 44.6378C132.544 44.6378 133.305 41.3459 134.88 39.9495C133.662 39.4517 132.747 38.3542 132.544 37.0565C132.277 37.0011 132.003 36.9727 131.731 36.9727Z\"\n fill=\"#44B78B\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M134.139 12.627C133.196 12.627 132.101 13.3317 130.833 15.0957C129.48 17.0341 136.871 22.2681 139.384 22.996C138.751 20.4968 137.29 12.627 134.139 12.627Z\"\n fill=\"#263238\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M135.732 17.8952C135.833 17.8952 135.933 17.8952 136.083 17.9472C137.383 18.2029 138.133 20.04 137.734 21.9306C137.372 23.6836 136.194 24.9358 135.011 24.9358C134.886 24.9358 134.758 24.9218 134.632 24.8916C133.283 24.585 132.532 22.7986 132.932 20.908C133.333 19.172 134.533 17.8952 135.732 17.8952ZM135.667 17.5859C134.314 17.5859 132.986 18.9285 132.583 20.8069C132.182 22.8997 133.033 24.8916 134.533 25.1977C134.683 25.2496 134.783 25.2496 134.933 25.2496C136.334 25.2496 137.633 23.9222 138.034 22.0316C138.483 19.9389 137.633 17.9472 136.133 17.641C135.978 17.6028 135.822 17.5859 135.667 17.5859Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M129.88 16.9825C129.98 16.9825 130.081 17.0328 130.23 17.0328C131.531 17.3374 132.28 19.1162 131.88 20.9956C131.518 22.7394 130.342 23.9867 129.121 23.9867C128.991 23.9867 128.861 23.9713 128.73 23.9425C127.43 23.6882 126.679 21.8591 127.079 19.9798C127.281 19.0659 127.679 18.3029 128.33 17.6435C128.73 17.2369 129.28 17.0328 129.88 16.9825ZM129.826 16.6855C129.186 16.6855 128.576 16.946 128.13 17.4394C127.43 18.1004 126.979 18.9639 126.779 19.8777C126.33 22.0114 127.18 23.9425 128.681 24.2973C128.83 24.2973 128.98 24.3492 129.13 24.3492C130.479 24.3492 131.83 22.977 132.231 21.0976C132.631 19.0142 131.781 17.0328 130.28 16.7282C130.129 16.6993 129.976 16.6855 129.826 16.6855Z\"\n fill=\"#3A9C76\"\n />\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M132.1 20.7422C132.033 20.7422 131.965 20.7488 131.9 20.762C131.788 20.762 131.731 20.9072 131.788 20.9819C131.788 21.1293 131.9 21.2019 131.957 21.2019C132.004 21.1887 132.053 21.1821 132.102 21.1821C132.333 21.1821 132.557 21.3251 132.744 21.5692C132.744 21.5692 132.8 21.6418 132.857 21.6418C132.913 21.6418 132.968 21.6418 133.026 21.5692C133.081 21.4944 133.081 21.3492 133.026 21.2019C132.792 20.8962 132.439 20.7422 132.1 20.7422Z\"\n fill=\"#3A9C76\"\n />\n </svg>\n</template>\n","import { render } from \"./NotOptimizedIllustration.vue?vue&type=template&id=7180460f\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./NotOptimizedViewportModal.vue?vue&type=template&id=5a442ccf&scoped=true\"\nimport script from \"./NotOptimizedViewportModal.vue?vue&type=script&lang=js\"\nexport * from \"./NotOptimizedViewportModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_viewport_modal.scss?vue&type=style&index=0&id=5a442ccf&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5a442ccf\"]])\n\nexport default __exports__","<template>\n <section class=\"viewport-modal\">\n <b-modal\n v-model=\"isModalActive\"\n class=\"modal-text-center\"\n :width=\"500\"\n :can-cancel=\"false\"\n >\n <section class=\"modal-card-body\">\n <div class=\"content\">\n <h3>{{ $t(\"annotation_deleted\") }}</h3>\n </div>\n </section>\n <footer class=\"modal-card-foot\" style=\"padding-top: 0\">\n <b-button type=\"is-primary\" class=\"primary-button\" @click=\"closeModal\">\n {{ $t(\"ok\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nexport default {\n name: \"AnnotationDeletedModal\",\n data() {\n return {\n isModalActive: window.location.hash === \"#deleted\",\n };\n },\n methods: {\n closeModal() {\n window.location.hash = \"\";\n this.isModalActive = false;\n },\n },\n};\n</script>\n","import { render } from \"./AnnotationDeletedModal.vue?vue&type=template&id=6645487a\"\nimport script from \"./AnnotationDeletedModal.vue?vue&type=script&lang=js\"\nexport * from \"./AnnotationDeletedModal.vue?vue&type=script&lang=js\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","<template>\n <section class=\"document-error-modal\">\n <b-modal\n v-model=\"isModalActive\"\n :width=\"400\"\n :can-cancel=\"['x']\"\n :on-cancel=\"closeModal\"\n >\n <section class=\"modal-card-body\">\n <div class=\"header\">\n <div class=\"error-icon\">\n <ErrorIcon class=\"icon\" />\n </div>\n </div>\n <div class=\"content\">\n <h3>{{ $t(\"document_error_title\") }}</h3>\n <p>{{ $t(\"document_error_info\") }}</p>\n </div>\n </section>\n <footer class=\"modal-card-foot\">\n <b-button\n v-if=\"showBranding\"\n type=\"is-primary\"\n class=\"primary-button\"\n @click=\"handleContactSupport\"\n >\n {{ $t(\"contact_support\") }}\n </b-button>\n </footer>\n </b-modal>\n </section>\n</template>\n\n<script>\nimport { mapState } from \"vuex\";\nimport ErrorIcon from \"../../assets/images/ErrorIcon\";\n\nexport default {\n name: \"DocumentErrorModal\",\n components: {\n ErrorIcon,\n },\n data() {\n return {\n isModalActive: true,\n };\n },\n computed: {\n ...mapState(\"display\", [\"showBranding\"]),\n },\n methods: {\n handleContactSupport() {\n const documentError = \"Document error\";\n this.$store.dispatch(\"document/contactSupport\", documentError);\n },\n closeModal() {\n this.$store.dispatch(\"document/setDocumentError\", false);\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../../assets/scss/document_error.scss\"></style>\n","<template>\n <svg\n width=\"17\"\n height=\"16\"\n viewBox=\"0 0 17 16\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <g clip-path=\"url(#clip0_5456_102710)\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M7.02582 0.854884C7.32534 0.686248 7.66328 0.597656 8.00701 0.597656C8.35075 0.597656 8.68868 0.686248 8.98821 0.854884C9.28773 1.02352 9.53874 1.26651 9.71701 1.5604L9.71893 1.56357L15.3656 10.9902L15.371 10.9994C15.5456 11.3019 15.638 11.6447 15.639 11.994C15.64 12.3432 15.5495 12.6866 15.3766 12.99C15.2036 13.2934 14.9543 13.5462 14.6533 13.7233C14.3523 13.9004 14.0102 13.9956 13.661 13.9994L13.6537 13.9995L2.35302 13.9995C2.00382 13.9956 1.66171 13.9004 1.36073 13.7233C1.05974 13.5462 0.810381 13.2934 0.637445 12.99C0.46451 12.6866 0.37403 12.3432 0.375008 11.994C0.375986 11.6447 0.468387 11.3019 0.643019 10.9994L0.648434 10.9902L6.297 1.56039C6.47528 1.2665 6.72629 1.02352 7.02582 0.854884ZM8.00701 1.93099C7.89243 1.93099 7.77979 1.96052 7.67995 2.01673C7.58056 2.07269 7.49719 2.15321 7.43782 2.25058L1.79547 11.67C1.73869 11.7699 1.70866 11.8828 1.70834 11.9977C1.70801 12.1141 1.73817 12.2286 1.79582 12.3297C1.85346 12.4308 1.93658 12.5151 2.03691 12.5741C2.13636 12.6327 2.24928 12.6644 2.36461 12.6662H13.6494C13.7647 12.6644 13.8777 12.6327 13.9771 12.5741C14.0774 12.5151 14.1606 12.4308 14.2182 12.3297C14.2759 12.2286 14.306 12.1141 14.3057 11.9977C14.3054 11.8828 14.2753 11.7699 14.2186 11.6701L8.57701 2.2519C8.57675 2.25146 8.57648 2.25102 8.57621 2.25058C8.51683 2.15321 8.43347 2.07269 8.33408 2.01673C8.23424 1.96052 8.12159 1.93099 8.00701 1.93099ZM8.00701 4.66615C8.3752 4.66615 8.67368 4.96463 8.67368 5.33282V7.99949C8.67368 8.36768 8.3752 8.66615 8.00701 8.66615C7.63882 8.66615 7.34035 8.36768 7.34035 7.99949V5.33282C7.34035 4.96463 7.63882 4.66615 8.00701 4.66615ZM7.34035 10.6662C7.34035 10.298 7.63882 9.99949 8.00701 9.99949H8.01368C8.38187 9.99949 8.68035 10.298 8.68035 10.6662C8.68035 11.0343 8.38187 11.3328 8.01368 11.3328H8.00701C7.63882 11.3328 7.34035 11.0343 7.34035 10.6662Z\"\n fill=\"#E7423A\"\n />\n </g>\n <defs>\n <clipPath id=\"clip0_5456_102710\">\n <rect\n width=\"16\"\n height=\"16\"\n fill=\"white\"\n transform=\"translate(0.0078125)\"\n />\n </clipPath>\n </defs>\n </svg>\n</template>\n","import { render } from \"./ErrorIcon.vue?vue&type=template&id=e69863f0\"\nconst script = {}\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { render } from \"./DocumentErrorModal.vue?vue&type=template&id=254242fc&scoped=true\"\nimport script from \"./DocumentErrorModal.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentErrorModal.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/document_error.scss?vue&type=style&index=0&id=254242fc&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-254242fc\"]])\n\nexport default __exports__","import { render } from \"./DocumentDashboard.vue?vue&type=template&id=5bb4e541&scoped=true\"\nimport script from \"./DocumentDashboard.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentDashboard.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/document_dashboard.scss?vue&type=style&index=0&id=5bb4e541&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-5bb4e541\"]])\n\nexport default __exports__","<template>\n <div class=\"error-page\">\n <b-icon icon=\"circle-exclamation\" size=\"is-48\" class=\"error-icon\" />\n <h1>\n {{ $t(\"document_error_title\") }}\n </h1>\n <h2>\n {{ error ? error : \"\" }}\n </h2>\n </div>\n</template>\n\n<script>\nexport default {\n name: \"ErrorPage\",\n props: {\n error: {\n type: String,\n required: false,\n default: null,\n },\n },\n};\n</script>\n\n<style scoped lang=\"scss\" src=\"../assets/scss/error_page.scss\"></style>\n","import { render } from \"./ErrorPage.vue?vue&type=template&id=6b311fc9&scoped=true\"\nimport script from \"./ErrorPage.vue?vue&type=script&lang=js\"\nexport * from \"./ErrorPage.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/error_page.scss?vue&type=style&index=0&id=6b311fc9&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-6b311fc9\"]])\n\nexport default __exports__","<template>\n <div\n v-if=\"documentsAvailableToReview && documentsAvailableToReview.length > 0\"\n class=\"documents-list\"\n >\n <div v-if=\"showCategoryInfo && selectedCategory\" class=\"documents-list-top\">\n <div class=\"documents-list-top-left\">\n <h2>{{ selectedCategory.name }}</h2>\n <p>\n {{ selectedCategory.description }}\n </p>\n </div>\n <div class=\"documents-list-top-right\">\n <div v-if=\"showBranding\" class=\"action-box\">\n <span>{{ $t(\"upload_documents\") }}</span>\n <b-button\n class=\"action-button primary-button\"\n type=\"is-primary\"\n @click=\"requestTrialAccess\"\n >\n {{ $t(\"request_trial\") }}\n </b-button>\n </div>\n </div>\n </div>\n <div class=\"documents-list-bottom\">\n <b-carousel-list :data=\"documentsAvailableToReview\" :items-to-show=\"5\">\n <template #item=\"document\">\n <div\n :class=\"[\n 'documents-list-thumbnail',\n selectedDocument.id == document.id && 'selected',\n ]\"\n @click=\"changeDocument(document.id)\"\n >\n <ServerImage\n :class=\"[\n 'img-thumbnail',\n selectedDocument.id == document.id && 'selected',\n ]\"\n :image-url=\"`${document.thumbnail_url}?${document.updated_at}`\"\n >\n <b-skeleton width=\"20px\" height=\"100%\" />\n </ServerImage>\n <div\n :class=\"[\n 'document-name',\n selectedDocument.id == document.id && 'selected',\n ]\"\n >\n <!-- if is the current document, then we use the store variable to get the file name edits in real time -->\n {{\n selectedDocument.id == document.id\n ? selectedDocument.data_file_name\n : document.data_file_name\n }}\n </div>\n <div\n v-if=\"documentHadErrorDuringExtraction(document)\"\n class=\"error-icon\"\n >\n <ErrorIcon />\n </div>\n </div>\n </template>\n </b-carousel-list>\n </div>\n </div>\n</template>\n<script>\nimport { mapGetters, mapState } from \"vuex\";\nimport ServerImage from \"../../assets/images/ServerImage\";\nimport ErrorIcon from \"../../assets/images/ErrorIcon\";\nimport {\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n} from \"../../utils/utils\";\n\n/**\n * This component creates a horizontal list of documents\n * with thumbnail pictures which are clickable.\n */\n\nexport default {\n name: \"DocumentsList\",\n components: {\n ServerImage,\n ErrorIcon,\n },\n data() {\n return {\n showCategoryInfo: false,\n selectedCategory: null,\n documentsList: null,\n };\n },\n computed: {\n ...mapState(\"document\", [\"selectedDocument\"]),\n ...mapState(\"category\", [\"documentsAvailableToReview\"]),\n ...mapState(\"display\", [\"showBranding\"]),\n ...mapGetters(\"category\", [\"category\"]),\n ...mapGetters(\"document\", [\"documentHadErrorDuringExtraction\"]),\n },\n watch: {\n showCategoryInfo(newValue) {\n if (newValue) {\n this.selectedCategory = this.category(this.selectedDocument.category);\n }\n },\n },\n methods: {\n changeDocument(documentId) {\n this.$store.dispatch(\"document/changeCurrentDocument\", documentId);\n },\n requestTrialAccess() {\n window.open(\"https://konfuzio.com\", \"_blank\");\n },\n },\n};\n</script>\n<style scoped lang=\"scss\" src=\"../../assets/scss/documents_list.scss\"></style>\n","import { render } from \"./DocumentsList.vue?vue&type=template&id=710ee0ae&scoped=true\"\nimport script from \"./DocumentsList.vue?vue&type=script&lang=js\"\nexport * from \"./DocumentsList.vue?vue&type=script&lang=js\"\n\nimport \"../../assets/scss/documents_list.scss?vue&type=style&index=0&id=710ee0ae&scoped=true&lang=scss&external\"\n\nimport exportComponent from \"../../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render],['__scopeId',\"data-v-710ee0ae\"]])\n\nexport default __exports__","import { render } from \"./App.vue?vue&type=template&id=3a5832aa\"\nimport script from \"./App.vue?vue&type=script&lang=js\"\nexport * from \"./App.vue?vue&type=script&lang=js\"\n\nimport \"../assets/scss/theme.scss?vue&type=style&index=0&lang=scss&external\"\n\nimport exportComponent from \"../../node_modules/@vue/cli-service/node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { createI18n } from \"vue-i18n\";\n\nfunction loadLocaleMessages() {\n const locales = require.context(\n \"./locales\",\n true,\n /[A-Za-z0-9-_,\\s]+\\.json$/i\n );\n const messages = {};\n locales.keys().forEach((key) => {\n const matched = key.match(/([A-Za-z0-9-_]+)\\./i);\n if (matched && matched.length > 1) {\n const locale = matched[1];\n messages[locale] = locales(key);\n }\n });\n return messages;\n}\n\nexport const i18n = createI18n({\n locale: process.env.VUE_APP_LOCALE || \"en\",\n fallbackLocale: \"en\",\n messages: loadLocaleMessages(),\n});\n","import BigNumber from \"bignumber.js\";\nimport myImports from \"../api\";\nimport {\n PIXEL_RATIO,\n VIEWPORT_RATIO,\n MINIMUM_APP_WIDTH,\n MINIMUM_OPTIMIZED_APP_WIDTH,\n} from \"../constants\";\n\nimport { debounce } from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\n\nconst floor = (value, precision) => {\n const multiplier = Math.pow(10, precision || 0);\n return Math.floor(value * multiplier) / multiplier;\n};\n\nconst state = {\n scale: undefined,\n fit: \"width\",\n currentPage: 1,\n optimalResolution: true,\n interactionBlocked: false,\n categorizeModalIsActive: false,\n pageChangedFromThumbnail: false,\n showAnnSetTable: null,\n showChooseLabelSetModal: null,\n hideEmptyLabelSets: false,\n showDocumentsNavigation: true,\n currentSearch: \"\",\n searchEnabled: false,\n searchResults: [],\n searchLoading: false,\n currentSearchResult: null,\n detailsUrl: null,\n pageError: null,\n labelWidth: 40,\n annotationWidth: 60,\n showBranding: true,\n};\n\nconst getters = {\n isMinimumWidth: (state) => (width) => {\n return width >= MINIMUM_APP_WIDTH;\n },\n pageWidthScale: (state) => (elementsWidth, clientWidth, viewportWidth) => {\n return (\n ((clientWidth - elementsWidth) * PIXEL_RATIO * VIEWPORT_RATIO) /\n viewportWidth\n );\n },\n pageHeightScale: (state) => (clientHeight, viewportHeight) => {\n return (clientHeight * PIXEL_RATIO * VIEWPORT_RATIO) / viewportHeight;\n },\n visiblePageRange: (state, getters, rootState, rootGetters) => {\n const pageCount = rootGetters.pageCount;\n const previousPage = state.currentPage - 1 < 1 ? 1 : state.currentPage - 1;\n const nextPage =\n state.currentPage + 1 > pageCount ? pageCount : state.currentPage + 1;\n return [previousPage, state.currentPage, nextPage];\n },\n\n searchResultsForPage: (state, getters) => (pageNumber) => {\n if (!state.searchEnabled || state.searchResults.length < 1) {\n return [];\n }\n\n return state.searchResults.filter((r) => r.page_index + 1 === pageNumber);\n },\n\n currentSearchResultForPage: (state) => (pageNumber) => {\n if (!state.searchEnabled || state.searchResults.length < 1) {\n return false;\n }\n\n const currentResult = state.searchResults[state.currentSearchResult];\n\n if (!currentResult || currentResult.page_index !== pageNumber - 1) {\n return false;\n }\n\n return currentResult;\n },\n\n /**\n * We take the entities from the backend and resize them according\n * to the `scale` (zoom), the `imageScale` (proportion between the original\n * document and the served image) and `PIXEL_RATIO` (in case of retina displays).\n * We also change the original bbox format to something that can be used with CSS.\n * The original is stored inside the `original` property, since it can be reused\n * when we're sending the entity to the backend for selection or saving.\n */\n scaledEntities: (state, getters) => (entities, page) => {\n // entities are either not loaded yet or empty\n if (!entities || entities.length === 0) {\n return [];\n }\n\n return entities.map((entity) => {\n const box = getters.bboxToRect(page, entity);\n return {\n original: entity,\n scaled: {\n ...box,\n },\n };\n });\n },\n\n /**\n * The proportion between the original size of the page and the\n * image rendering.\n */\n imageScale: (state) => (page) => {\n if (\n page.size &&\n page.size.length > 0 &&\n page.original_size &&\n page.original_size.length > 0\n ) {\n return new BigNumber(page.size[0]).div(page.original_size[0]).toNumber();\n }\n return 0;\n },\n bboxToPoint:\n (state, getters) =>\n (page, point, hasOffset = false) => {\n if (page && page.original_size && page.original_size.length > 1) {\n const imageScale = getters.imageScale(page);\n const { x, y } = point;\n const pageHeight = new BigNumber(page.original_size[1]);\n const newPoint = {\n // left\n x: new BigNumber(x)\n .minus(hasOffset ? 1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n // top\n y: pageHeight\n .minus(new BigNumber(y))\n .minus(hasOffset ? 17.1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n };\n return newPoint;\n }\n return { x: 0, y: 0 };\n },\n bboxToRect:\n (state, getters) =>\n (page, bbox, hasOffset = false) => {\n const imageScale = getters.imageScale(page);\n if (bbox.x0 && bbox.y0) {\n const { x0, x1, y0, y1 } = bbox;\n const pageHeight = new BigNumber(page.original_size[1]);\n const rect = {\n // left\n x: new BigNumber(x0)\n .minus(hasOffset ? 1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n // top\n y: pageHeight\n .minus(new BigNumber(y1))\n .minus(hasOffset ? 17.1 : 0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n width: new BigNumber(x1)\n .minus(x0)\n .abs()\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n height: new BigNumber(y1)\n .minus(y0)\n .times(state.scale)\n .times(imageScale)\n .div(PIXEL_RATIO)\n .toNumber(),\n };\n return rect;\n }\n return { x: 0, y: 0, width: 0, height: 0 };\n },\n clientToBbox: (state, getters) => (page, start, end) => {\n /**\n * The backend bbox's `y0` and `y1` attributes depend on knowing the\n * page's height.\n */\n const pageHeight = new BigNumber(page.original_size[1]);\n const imageScale = getters.imageScale(page);\n\n /**\n * We use `Math.min` and `Math.max` because depending on how the area\n * selection is made the `start` and `end` attributes might be reversed.\n */\n const x0 = new BigNumber(Math.min(start.x, end.x))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3, BigNumber.ROUND_DOWN)\n .toNumber();\n const x1 = new BigNumber(Math.max(start.x, end.x))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3, BigNumber.ROUND_UP)\n .toNumber();\n const top = new BigNumber(Math.min(start.y, end.y))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3)\n .toNumber();\n const bottom = new BigNumber(Math.max(start.y, end.y))\n .div(state.scale)\n .div(imageScale)\n .times(PIXEL_RATIO)\n .dp(3)\n .toNumber();\n const y0 = pageHeight.minus(bottom).dp(3, BigNumber.ROUND_DOWN).toNumber();\n const y1 = pageHeight.minus(top).dp(3, BigNumber.ROUND_UP).toNumber();\n\n const bbox = {\n x0,\n x1,\n y0,\n y1,\n page_index: page.number - 1,\n };\n\n return bbox;\n },\n};\n\nconst actions = {\n updateScale({ commit, getters }, { elementsWidth, client, viewport, scale }) {\n /**\n * Determine an ideal scale using viewport of document's first page, the pixel ratio\n * from the browser and a subjective scale factor based on the screen size.\n */\n switch (state.fit) {\n case \"width\":\n commit(\n \"SET_SCALE\",\n getters.pageWidthScale(elementsWidth, client.width, viewport.width)\n );\n break;\n case \"auto\":\n const pageWidthScale = getters.pageWidthScale(\n elementsWidth,\n client.width,\n viewport.width\n );\n const pageHeightScale = getters.pageWidthScale(\n client.height,\n viewport.height\n );\n const autoScale = Math.min(pageWidthScale, pageHeightScale);\n commit(\"SET_SCALE\", autoScale);\n break;\n case \"all\": {\n const widthScale = getters.pageWidthScale(\n elementsWidth,\n client.width,\n viewport.width\n );\n commit(\"SET_SCALE\", widthScale);\n break;\n }\n case \"custom\": {\n if (scale) {\n commit(\"SET_SCALE\", scale);\n }\n break;\n }\n default:\n console.log(\"No fit defined\");\n break;\n }\n },\n\n updateFit({ commit }, fit) {\n commit(\"SET_FIT\", fit);\n },\n\n debounceUpdateCurrentPage: debounce(({ commit, dispatch }, pageNumber) => {\n dispatch(\"updateCurrentPage\", pageNumber);\n }, 300),\n\n updateCurrentPage({ commit }, pageNumber) {\n commit(\"SET_CURRENT_PAGE\", pageNumber);\n },\n updateOptimalResolution({ commit }, width) {\n commit(\"SET_OPTIMAL_RESOLUTION\", width >= MINIMUM_OPTIMIZED_APP_WIDTH);\n },\n showAnnSetTable({ commit }, tableSet) {\n commit(\"SET_ANN_SET_TABLE\", tableSet);\n },\n showDocumentsNavigation({ commit }, show) {\n commit(\"SET_SHOW_DOCUMENTS_NAVIGATION\", show);\n },\n showBranding({ commit }, show) {\n commit(\"SET_SHOW_BRANDING\", show);\n },\n showChooseLabelSetModal({ commit }, options) {\n commit(\"SET_SHOW_CHOOSE_LABEL_SET_MODAL\", options);\n },\n toggleAnnSetTable({ commit }, tableSet) {\n commit(\"TOGGLE_ANN_SET_TABLE\", tableSet);\n },\n setCategorizeModalIsActive: ({ commit }, value) => {\n commit(\"SET_CATEGORIZE_MODAL_IS_ACTIVE\", value);\n },\n setPageChangedFromThumbnail: ({ commit }, value) => {\n commit(\"SET_PAGE_CHANGED_FROM_THUMBNAIL\", value);\n },\n setDetailsUrl: ({ commit }, value) => {\n commit(\"SET_DETAILS_URL\", value);\n },\n setLabelWidth: ({ commit }, value) => {\n commit(\"SET_LABEL_WIDTH\", value);\n commit(\"SET_ANNOTATION_WIDTH\", 100 - value);\n },\n setAnnotationWidth: ({ commit }, value) => {\n const width = Number(value);\n if (width && width >= 20) {\n commit(\"SET_ANNOTATION_WIDTH\", width);\n commit(\"SET_LABEL_WIDTH\", 100 - width);\n } else {\n commit(\"SET_ANNOTATION_WIDTH\", 60);\n commit(\"SET_LABEL_WIDTH\", 40);\n }\n },\n\n debounceSearch: debounce(({ commit, dispatch }, query) => {\n dispatch(\"search\", query);\n }, 300),\n\n startSearchLoading({ commit }) {\n commit(\"SET_SEARCH_LOADING\", true);\n },\n\n hideEmptyLabelSets({ commit }, value) {\n commit(\"HIDE_EMPTY_LABEL_SETS\", value);\n },\n\n search({ commit, rootState }, query) {\n // only allow queries that are at least 3 characters long\n if (query.length >= 3) {\n return HTTP.post(`documents/${rootState.document.documentId}/search/`, {\n q: query,\n }).then((response) => {\n commit(\"SET_SEARCH_RESULTS\", response.data.span);\n commit(\"SET_SEARCH_LOADING\", false);\n });\n } else {\n commit(\"SET_SEARCH_RESULTS\", []);\n commit(\"SET_SEARCH_LOADING\", false);\n }\n },\n\n resetSearch({ commit }) {\n commit(\"SET_CURRENT_SEARCH\", \"\");\n commit(\"SET_SEARCH_RESULTS\", []);\n commit(\"SET_SEARCH_LOADING\", false);\n },\n\n toggleSearch({ commit }) {\n commit(\"TOGGLE_SEARCH\");\n },\n\n enableSearch({ commit }, toEnable) {\n commit(\"ENABLE_SEARCH\", toEnable);\n },\n\n setCurrentSearch({ commit }, currentSearch) {\n commit(\"SET_CURRENT_SEARCH\", currentSearch);\n },\n\n setPageError({ commit }, value) {\n commit(\"SET_PAGE_ERROR\", value);\n },\n\n setCurrentSearchResult({ commit, state }, n) {\n let newSearchResult = state.currentSearchResult + n;\n const searchResultsMaxIndex = state.searchResults.length - 1;\n\n if (newSearchResult > searchResultsMaxIndex) {\n // once we're at the end of the results, start again\n newSearchResult = 0;\n } else if (newSearchResult < 0) {\n // once we're at the beginning of the results, go to the end\n newSearchResult = searchResultsMaxIndex;\n }\n\n commit(\"SET_CURRENT_SEARCH_RESULT\", newSearchResult);\n },\n};\n\nconst mutations = {\n SET_SCALE: (state, scale) => {\n state.scale = floor(scale, 2);\n },\n\n SET_FIT: (state, fit) => {\n state.fit = fit;\n },\n\n SET_OPTIMAL_RESOLUTION: (state, isOptimal) => {\n state.optimalResolution = isOptimal;\n },\n\n SET_CURRENT_PAGE: (state, currentPage) => {\n state.currentPage = currentPage;\n },\n\n SET_LABEL_WIDTH: (state, labelWidth) => {\n state.labelWidth = labelWidth;\n },\n\n SET_ANNOTATION_WIDTH: (state, annotationWidth) => {\n state.annotationWidth = annotationWidth;\n },\n\n SET_SHOW_DOCUMENTS_NAVIGATION: (state, show) => {\n state.showDocumentsNavigation = show;\n },\n\n SET_SHOW_BRANDING: (state, show) => {\n state.showBranding = show;\n },\n\n SET_ANN_SET_TABLE: (state, tableSet) => {\n state.showAnnSetTable = tableSet;\n },\n HIDE_EMPTY_LABEL_SETS: (state, hide) => {\n state.hideEmptyLabelSets = hide;\n },\n\n TOGGLE_ANN_SET_TABLE: (state, tableSet) => {\n if (state.showAnnSetTable) {\n state.showAnnSetTable = null;\n } else {\n state.showAnnSetTable = tableSet;\n }\n },\n\n SET_CATEGORIZE_MODAL_IS_ACTIVE: (state, value) => {\n state.categorizeModalIsActive = value;\n },\n SET_PAGE_CHANGED_FROM_THUMBNAIL: (state, value) => {\n state.pageChangedFromThumbnail = value;\n },\n SET_SHOW_CHOOSE_LABEL_SET_MODAL: (state, options) => {\n state.showChooseLabelSetModal = options;\n },\n SET_SEARCH_RESULTS: (state, searchResults) => {\n state.currentSearchResult = 0;\n state.searchResults = searchResults;\n },\n SET_SEARCH_LOADING: (state, loading) => {\n state.searchLoading = loading;\n },\n TOGGLE_SEARCH: (state) => {\n state.searchEnabled = !state.searchEnabled;\n },\n ENABLE_SEARCH: (state, toEnable) => {\n state.searchEnabled = toEnable;\n },\n SET_CURRENT_SEARCH: (state, currentSearch) => {\n state.currentSearch = currentSearch;\n },\n SET_CURRENT_SEARCH_RESULT: (state, n) => {\n state.currentSearchResult = n;\n },\n SET_DETAILS_URL: (state, value) => {\n state.detailsUrl = value;\n },\n SET_PAGE_ERROR: (state, value) => {\n state.pageError = value;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\nimport {\n sleep,\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n setURLAnnotationHash,\n setURLQueryParam,\n debounce,\n} from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\nconst documentPollDuration = 1000;\nexport const table_reference_api = \"api.v3.dvui.table\";\n\nconst state = {\n loading: true,\n pages: [],\n annotationSets: null,\n annotations: null,\n labels: [],\n documentId: process.env.VUE_APP_DOCUMENT,\n documentSet: null,\n annotationId: null,\n annotationSetId: null,\n documentAnnotationSelected: null,\n selectedDocument: null,\n recalculatingAnnotations: false,\n editAnnotation: null,\n missingAnnotations: [],\n publicView: true,\n showActionError: false,\n errorMessage: null,\n showDocumentError: false,\n annotationsMarkedAsMissing: null,\n errorMessageWidth: null,\n hoveredAnnotationSet: null,\n newAcceptedAnnotations: null,\n serverError: false,\n splittingSuggestions: null,\n enableGroupingFeature: true,\n annotationFilters: {\n showFeedbackNeeded: true,\n showEmpty: true,\n showAccepted: true,\n },\n annotationSearch:\n (getURLQueryParam(\"search\") && getURLQueryParam(\"search\").split(\",\")) || [],\n};\nconst getters = {\n /**\n * Number of pages. If the pages array doesn't exist yet, return 0.\n */\n pageCount: (state) => {\n if (state.selectedDocument.pages) {\n return state.selectedDocument.pages.length;\n }\n return 0;\n },\n\n /**\n * Returns the current page\n */\n pageSelected: (state, _, rootState) => {\n if (state.pages) {\n return state.pages[rootState.display.currentPage - 1];\n }\n return null;\n },\n\n /**\n * Returns a page in the given index\n */\n pageAtIndex: (state) => (index) => {\n if (state.selectedDocument && state.selectedDocument.pages) {\n return state.selectedDocument.pages[index];\n }\n return null;\n },\n\n /**\n * Checks if is to scroll to an annotation in the document\n */\n scrollDocumentToAnnotation: (state) => {\n return (\n state.documentAnnotationSelected &&\n state.documentAnnotationSelected.scrollTo\n );\n },\n\n /**\n * Checks if the document is categorized and ready to start the review\n */\n categorizationIsConfirmed: (state) => {\n if (state.selectedDocument) {\n if (\n state.selectedDocument.category_is_revised ||\n state.selectedDocument.is_reviewed\n ) {\n return true;\n } else if (!state.selectedDocument.category) {\n return false;\n } else {\n // check if there's any annotation already approved\n const found = state.annotations.find((annotation) => {\n return annotation.revised;\n });\n return found != undefined;\n }\n }\n return false;\n },\n\n /**\n * Gets labels for an annotation creation from a label/annotation set\n */\n labelsFilteredForAnnotationCreation: (_, getters) => (set) => {\n let availableLabels = [];\n if (set.id && set.labels) {\n // check if label can be multiple, if there's already an annotation created\n set.labels.map((label) => {\n // check if we already added the same label to the array\n const found = availableLabels.find((l) => l.id === label.id);\n\n if (found) return;\n\n if (label.annotations.length === 0) {\n availableLabels.push(label);\n } else if (label.has_multiple_top_candidates) {\n availableLabels.push(label);\n }\n });\n } else if (set.labels) {\n // if not existing ann set, then return all labels\n availableLabels = set.labels;\n }\n return availableLabels;\n },\n\n /* Checks if annotation is in deleted state */\n isAnnotationDeleted: (state) => (annotation) => {\n if (annotation) {\n return annotation.revised && !annotation.is_correct;\n }\n return false;\n },\n\n /* Checks if the label has annotations to show */\n labelHasAnnotations: (_, getters) => (label) => {\n const annotations = label.annotations.filter((annotation) => {\n return !getters.isAnnotationDeleted(annotation);\n });\n return annotations.length > 0;\n },\n\n /* Checks if the label has annotations to show */\n isLabelMultiFalseAndGroupOfAnns: (state) => (label) => {\n return (\n label &&\n label.annotations &&\n label.annotations.length > 1 &&\n !label.has_multiple_top_candidates &&\n state.enableGroupingFeature\n );\n },\n\n /* Returns the annotations ordered by highest confidence */\n annotationsByConfidence: (state) => (annotations) => {\n annotations.sort((a, b) => {\n // in reverse, comparison was not working correctly in the correct way\n if (a.confidence > b.confidence) {\n return -1;\n } else if (a.confidence < b.confidence) {\n return 1;\n }\n return 0;\n });\n return annotations;\n },\n\n /* Checks if the document has an annotation set */\n annotationSetExists: (state) => (annotationSetId) => {\n return state.annotationSets.find((annSet) => annSet.id === annotationSetId);\n },\n\n /* Get annotation sets created in table */\n annotationSetsInTable: (state) => () => {\n const annotationSetsList = {};\n state.annotationSets.forEach((annotationSet) => {\n let addAnnotationSet = false;\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n if (\n label.annotations &&\n label.annotations.find(\n (annotation) =>\n annotation.origin && annotation.origin === table_reference_api\n )\n ) {\n addAnnotationSet = true;\n return;\n }\n });\n }\n if (addAnnotationSet) {\n // group by label set\n if (annotationSetsList[`${annotationSet.label_set.id}`]) {\n annotationSetsList[`${annotationSet.label_set.id}`].push(\n annotationSet\n );\n } else {\n annotationSetsList[`${annotationSet.label_set.id}`] = [annotationSet];\n }\n }\n });\n\n return annotationSetsList;\n },\n\n /* Get annotation sets */\n annotationSetsToShowInList: (state) => () => {\n const annotationSetsList = [];\n state.annotationSets.forEach((annotationSet) => {\n let addAnnotationSet = true;\n if (annotationSet.labels) {\n annotationSet.labels.forEach((label) => {\n if (\n label.annotations &&\n label.annotations.find(\n (annotation) =>\n annotation.origin && annotation.origin === table_reference_api\n )\n ) {\n addAnnotationSet = false;\n return;\n }\n });\n }\n if (addAnnotationSet) {\n annotationSetsList.push(annotationSet);\n }\n });\n return annotationSetsList;\n },\n\n /* Get annotations inside a list of annotation sets */\n annotationsInAnnotationsSets: (state) => (annotationsSets) => {\n const annotations = [];\n annotationsSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n annotations.push(annotation);\n });\n });\n });\n return annotations;\n },\n\n /* Get annotation set for a given annotation */\n annotationSetOfAnnotation: (state) => (annotationIdToFind) => {\n let foundAnnotationSet = null;\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n if (annotation.id === annotationIdToFind) {\n foundAnnotationSet = annotationSet;\n return;\n }\n });\n if (foundAnnotationSet) {\n return;\n }\n });\n if (foundAnnotationSet) {\n return;\n }\n });\n return foundAnnotationSet;\n },\n\n /* Get label for a given annotation */\n labelOfAnnotation: (state) => (annotationToFind) => {\n let foundLabel = null;\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((label) => {\n label.annotations.forEach((annotation) => {\n if (annotation.id === annotationToFind.id) {\n foundLabel = label;\n return;\n }\n });\n if (foundLabel) {\n return;\n }\n });\n if (foundLabel) {\n return;\n }\n });\n }\n\n return foundLabel;\n },\n\n getAnnotationsFiltered: (state, getters) => {\n // group annotations for sidebar\n let annotations = [];\n let labels = [];\n let processedAnnotationSets = [];\n let processedLabels = [];\n\n const isSearching = state.annotationSearch.length > 0;\n\n // search feature\n const addAnnotation = (listToAdd, annotation, force) => {\n if (force) {\n listToAdd.push(annotation);\n return true;\n }\n if (isSearching) {\n if (\n annotation.offset_string &&\n state.annotationSearch.find((search) =>\n annotation.offset_string\n .toLowerCase()\n .includes(search.toLowerCase())\n )\n ) {\n listToAdd.push(annotation);\n return true;\n } else if (\n annotation.id &&\n state.annotationSearch.find((search) => `${annotation.id}` === search)\n ) {\n listToAdd.push(annotation);\n return true;\n }\n } else {\n listToAdd.push(annotation);\n return true;\n }\n return false;\n };\n\n const labelHasSearchText = (label) => {\n if (isSearching) {\n if (\n label.name &&\n state.annotationSearch.find((search) =>\n label.name.toLowerCase().includes(search.toLowerCase())\n )\n ) {\n return true;\n }\n } else {\n return false;\n }\n return false;\n };\n\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n labels = [];\n annotationSet.labels.forEach((label) => {\n const labelAnnotations = [];\n let addLabel = false;\n const labelHasSearch = labelHasSearchText(label);\n if (!label.annotations || label.annotations.length === 0) {\n if (\n state.annotationFilters.showEmpty &&\n (!isSearching || labelHasSearch)\n ) {\n addLabel = true;\n }\n } else if (\n !state.annotationFilters.showEmpty ||\n !state.annotationFilters.showFeedbackNeeded ||\n !state.annotationFilters.showAccepted\n ) {\n label.annotations.forEach((annotation) => {\n if (\n state.annotationFilters.showFeedbackNeeded &&\n annotation.revised === false &&\n !annotation.created_by\n ) {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n } else if (\n state.annotationFilters.showAccepted &&\n (annotation.revised === true || annotation.created_by)\n ) {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n }\n });\n } else {\n // add annotations to the document array\n label.annotations.forEach((annotation) => {\n const added = addAnnotation(\n labelAnnotations,\n annotation,\n labelHasSearch\n );\n if (added) {\n addLabel = true;\n }\n });\n }\n if (addLabel) {\n labels.push({ ...label, annotations: labelAnnotations });\n processedLabels.push(label);\n }\n annotations.push(...labelAnnotations);\n });\n\n // if in search do not add the annotation set\n if (!(state.annotationSearch.length > 0 && labels.length === 0)) {\n processedAnnotationSets.push({ ...annotationSet, labels });\n }\n });\n }\n\n // sort ann sets by name\n processedAnnotationSets.sort((a, b) =>\n a.label_set.name.localeCompare(b.label_set.name)\n );\n\n return {\n annotationSets: processedAnnotationSets,\n labels: processedLabels,\n annotations,\n };\n },\n\n /* Process annotations and extract labels and sets */\n processAnnotationSets: (state, getters, rootState) => (annotationSets) => {\n // group annotations for sidebar\n let annotations = [];\n let labels = [];\n let processedAnnotationSets = [];\n let processedLabels = [];\n\n const sortByConfidenceOrByAnnotationSelected = (annotations) => {\n annotations = getters.annotationsByConfidence(annotations);\n if (state.annotationId) {\n for (let i = 0; i < annotations.length; i++) {\n if (state.annotationId == annotations[i].id) {\n annotations.unshift(annotations.splice(i, 1)[0]);\n }\n }\n }\n return annotations;\n };\n\n annotationSets.forEach((annotationSet) => {\n // check if empty label sets and env variable set as true\n if (\n !(\n (rootState.display.hideEmptyLabelSets || state.publicView) &&\n annotationSet.labels.length === 0\n )\n ) {\n labels = [];\n annotationSet.labels.forEach((label) => {\n let labelAnnotations = [];\n\n // add annotations to the document array\n // remove negative annotations\n label.annotations.forEach((ann) => {\n if (!getters.isNegative(ann)) {\n labelAnnotations.push(ann);\n }\n });\n\n if (!label.has_multiple_top_candidates) {\n // if multi label = false, sort by confidence\n labelAnnotations =\n sortByConfidenceOrByAnnotationSelected(labelAnnotations);\n }\n\n labels.push({ ...label, annotations: labelAnnotations });\n processedLabels.push(label);\n annotations.push(...labelAnnotations);\n });\n processedAnnotationSets.push({ ...annotationSet, labels });\n }\n });\n return {\n annotationSets: processedAnnotationSets,\n labels: processedLabels,\n annotations,\n };\n },\n\n /* Checks if there are annotations correct in the document */\n documentHasCorrectAnnotations: (state) => {\n if (\n !state.annotations ||\n (state.annotations &&\n state.annotations.filter((ann) => ann.is_correct).length > 0)\n ) {\n return true;\n }\n return false;\n },\n\n /* Returns the number of accepted annotations in a label */\n numberOfAcceptedAnnotationsInLabel: (_) => (label) => {\n const annotations = label.annotations.filter((annotation) => {\n return annotation.is_correct;\n });\n return annotations.length;\n },\n\n /**\n * Checks if theres a group of annotation sets and add an index number to them\n */\n numberOfAnnotationSetGroup: (state) => (annotationSet) => {\n let found = false;\n let value = 0;\n let index = 0;\n if (state.annotationSets) {\n let orderedAnnotationSets = [...state.annotationSets];\n orderedAnnotationSets.sort((a, b) => {\n return a.id - b.id || a.label_set.name.localeCompare(b.label_set.name);\n });\n orderedAnnotationSets.map((annotationSetTemp) => {\n if (\n annotationSetTemp.id !== annotationSet.id &&\n annotationSetTemp.label_set.id === annotationSet.label_set.id &&\n annotationSetTemp.label_set.name === annotationSet.label_set.name\n ) {\n found = true;\n index++;\n } else if (\n annotationSetTemp.label_set.id === annotationSet.label_set.id\n ) {\n value = index;\n }\n });\n return found ? `${value + 1}` : \"\";\n }\n return \"\";\n },\n\n /**\n * Checks the number of current document in the document set\n */\n numberOfDocumentInSet: (state) => (document) => {\n let found = false;\n let value = 0;\n let index = 0;\n if (state.documentSet && state.documentSet.documents) {\n state.documentSet.documents.map((documentSetTemp) => {\n if (\n documentSetTemp.id !== document.id &&\n documentSetTemp.category === document.category\n ) {\n found = true;\n index++;\n } else if (documentSetTemp.id === document.id) {\n value = index;\n }\n });\n return found ? `${value + 1}` : \"\";\n }\n return \"\";\n },\n\n /**\n * Checks if theres a group of annotation sets with this label set\n */\n numberOfLabelSetGroup: (state) => (labelSet) => {\n let found = false;\n let index = 0;\n if (state.annotationSets) {\n let orderedAnnotationSets = [...state.annotationSets];\n orderedAnnotationSets.sort((a, b) => {\n return a.id - b.id || a.label_set.name.localeCompare(b.label_set.name);\n });\n orderedAnnotationSets.forEach((annotationSetTemp) => {\n if (\n annotationSetTemp.label_set.id === labelSet.id &&\n annotationSetTemp.label_set.name === labelSet.name\n ) {\n found = true;\n // check if annotation set exists, otherwise it will be new\n if (annotationSetTemp.id) {\n index++;\n }\n }\n });\n return found ? (index === 0 ? \"\" : `${index + 1}`) : \"\";\n }\n return \"\";\n },\n\n /**\n * Gets label sets for an annotation set creation\n */\n labelSetsFilteredForAnnotationSetCreation: (state) => {\n let returnLabelSets = [];\n if (state.annotationSets) {\n state.annotationSets.forEach((annotationSet) => {\n // last validation checks if the label set is already present in list\n if (\n (annotationSet.id == null ||\n annotationSet.label_set.has_multiple_annotation_sets) &&\n !returnLabelSets.find(\n (set) => set.id !== null && set.id === annotationSet.label_set.id\n )\n ) {\n const labelSet = { ...annotationSet.label_set };\n labelSet.labels = [...annotationSet.labels];\n returnLabelSets.push(labelSet);\n }\n });\n }\n return returnLabelSets;\n },\n\n /**\n * Get label with annotations filtered if the label supports multiple or not\n */\n annotationsInLabelFiltered: (state) => (label) => {\n let labelToReturn;\n if (\n label.has_multiple_top_candidates === false &&\n label.annotations &&\n label.annotations.length > 1\n ) {\n let highestConfidenceAnnotation = label.annotations[0];\n for (let i = 1; i < label.annotations.length; i++) {\n // check which one has more confidence or if it's the same, then check if one is revised or not\n if (\n highestConfidenceAnnotation.confidence <\n label.annotations[i].confidence ||\n (highestConfidenceAnnotation.confidence ===\n label.annotations[i].confidence &&\n label.annotations[i].revised)\n ) {\n highestConfidenceAnnotation = label.annotations[i];\n }\n }\n labelToReturn = {\n ...label,\n annotations: [highestConfidenceAnnotation],\n };\n } else {\n labelToReturn = {\n ...label,\n };\n }\n return labelToReturn;\n },\n\n /**\n * Checks if annotation is being edited\n */\n isAnnotationInEditMode:\n (state) =>\n (annotationId, index = null) => {\n if (state.editAnnotation && annotationId) {\n if (index != null) {\n return (\n state.editAnnotation.id === annotationId &&\n state.editAnnotation.index === index\n );\n }\n return state.editAnnotation.id === annotationId;\n }\n },\n\n /**\n * Checks if it's currently searching for annotations\n */\n isSearchingAnnotationList: (state) => {\n if (\n !state.annotationFilters.showFeedbackNeeded ||\n !state.annotationFilters.showEmpty ||\n !state.annotationFilters.showAccepted\n ) {\n return true;\n }\n return state.annotationSearch && state.annotationSearch.length > 0;\n },\n\n /**\n * Get number of empty labels per annotation set\n */\n emptyLabels: (state, getters) => (annotationSet) => {\n const pendingEmpty = [];\n\n annotationSet.labels.map((label) => {\n const foundMissing = state.missingAnnotations.find(\n (l) =>\n l.label === label.id &&\n annotationSet.id === l.annotation_set &&\n annotationSet.label_set.id === l.label_set\n );\n\n if (!foundMissing && label.annotations.length === 0) {\n pendingEmpty.push(label);\n }\n });\n\n return pendingEmpty;\n },\n\n annotationIsNotFound: (state) => (annotationSet, label) => {\n // Check if the combined label and label set have been marked as missing\n // or if the document is in public mode\n if (annotationSet) {\n if (state.missingAnnotations.length === 0) {\n return false;\n } else {\n const found = state.missingAnnotations.filter(\n (el) =>\n el.label === label.id &&\n el.annotation_set === annotationSet.id &&\n el.label_set === annotationSet.label_set.id\n );\n return found.length !== 0;\n }\n }\n return false;\n },\n\n isAnnotationInAnnotationSet: (state) => (annotationSet, annotationId) => {\n // Check if the annotation exists in the annotation set\n let exists = false;\n for (let i = 0; i < annotationSet.labels.length; i++) {\n const label = annotationSet.labels[i];\n for (let j = 0; j < label.annotations.length; j++) {\n exists = label.annotations[j].id == annotationId;\n if (exists) {\n break;\n }\n }\n if (exists) {\n break;\n }\n }\n return exists;\n },\n\n annotationById: (state) => (annotationId) => {\n if (state.annotations) {\n return state.annotations.find((ann) => ann.id == annotationId);\n }\n return null;\n },\n\n // Check if document is ready to be finished\n isDocumentReadyToFinishReview: (state) => {\n // check if all annotations are correct\n let notCorrect;\n\n const emptyAnnotations = [];\n\n if (state.labels.length === 0) return false;\n\n if (state.annotationSets && state.annotationSets.length > 0) {\n state.annotationSets.forEach((annSet) => {\n annSet.labels.map((label) => {\n // return only labels with empty annotations\n if (label.annotations.length === 0) {\n emptyAnnotations.push({\n label: label.id,\n label_set: annSet.label_set.id,\n });\n }\n });\n });\n }\n\n if (state.annotations) {\n notCorrect = state.annotations.filter((a) => !a.is_correct);\n\n if (notCorrect) {\n notCorrect.map((annotation) => {\n emptyAnnotations.push(annotation);\n });\n }\n }\n\n // if all annotations are correct\n // and if there are no empty annotations or\n // all empty annotations were marked as missing,\n // we can finish the review\n if (\n !emptyAnnotations ||\n !state.missingAnnotations ||\n state.missingAnnotations.length === emptyAnnotations.length\n ) {\n return true;\n }\n return false;\n },\n\n isDocumentReviewed: (state) => {\n return state.selectedDocument.is_reviewed;\n },\n\n /**\n * Get number of annotations pending review per annotation set\n */\n notCorrectAnnotations: () => (annotationSet) => {\n const labels = annotationSet.labels.filter(\n (label) => label.annotations.length > 0\n );\n\n const annotationsWithPendingReview = [];\n\n labels.map((label) => {\n const foundPendingAnnotations = label.annotations.filter(\n (ann) => !ann.is_correct && !ann.revised\n );\n\n if (foundPendingAnnotations && foundPendingAnnotations.length > 0) {\n foundPendingAnnotations.map((annotation) => {\n annotationsWithPendingReview.push(annotation);\n });\n }\n\n // Check if we have grouped annotations by same label\n if (state.enableGroupingFeature && label.annotations.length < 2) {\n return annotationsWithPendingReview.length - label.annotations.length;\n }\n });\n\n return annotationsWithPendingReview;\n },\n\n /**\n * Check if the document was extracted correctly and is ready to be reviewed\n */\n isDocumentReadyToBeReviewed: () => (document) => {\n return document.status_data === 2 && document.labeling_available === 1;\n },\n\n /**\n * Check if the document had an error during extraction\n */\n documentHadErrorDuringExtraction: () => (document) => {\n return document.status_data === 111;\n },\n\n /**\n * check if the document has a dataset status of 'Training', 'Test' or 'Preparation'\n * or if it is Ready Only / Reviewed\n * and if so disable the option to edit the document\n */\n documentCannotBeEdited:\n (state) =>\n (document = state.selectedDocument) => {\n return (\n document.dataset_status === 1 ||\n document.dataset_status === 2 ||\n document.dataset_status === 3 ||\n document.is_reviewed\n );\n },\n\n /**\n * If automatic splitting is enabled for the project\n */\n waitingForSplittingConfirmation: () => (document) => {\n return document && document.status_data === 41;\n },\n\n /**\n * Show the Smart Split switch or not\n */\n documentHasProposedSplit: () => (document) => {\n return document.proposed_split && document.proposed_split.length > 0;\n },\n\n /**\n * Check the level of confidence of an annotation\n */\n confidence: () => (annotation) => {\n if (annotation) {\n return annotation.confidence;\n } else {\n return null;\n }\n },\n\n /**\n * Check status of annotation\n */\n notExtracted: () => (annotation) => {\n if (annotation) {\n return !annotation.span;\n } else {\n return true;\n }\n },\n created: () => (annotation) => {\n if (annotation) {\n return (\n annotation.created_by && !annotation.revised && annotation.is_correct\n );\n } else {\n return null;\n }\n },\n edited: () => (annotation) => {\n if (annotation) {\n if (annotation.offset_string !== annotation.offset_string_original) {\n return true;\n } else if (annotation.created_by) {\n return true;\n } else {\n return false;\n }\n } else {\n return null;\n }\n },\n accepted: () => (annotation) => {\n if (annotation) {\n return annotation.revised && annotation.is_correct;\n } else {\n return null;\n }\n },\n isNegative: () => (annotation) => {\n if (annotation) {\n return !annotation.is_correct && annotation.revised;\n } else {\n return null;\n }\n },\n\n /**\n * Check for user who created or revised the annotation\n */\n getUser: () => (annotation) => {\n if (annotation) {\n if (annotation.created_by && !annotation.revised) {\n // If the annotation was created but not yet revised\n // we show who created it\n return annotation.created_by;\n } else if (annotation.revised && annotation.revised_by) {\n return annotation.revised_by;\n } else {\n // If both revised_by and created_by are null, we don't show any user\n return null;\n }\n } else {\n return null;\n }\n },\n\n /**\n * Check if there is just one annotation set from a label set\n */\n isOnlyMultipleAnnotationSet: (state) => (annotationSet) => {\n const sameSets = state.annotationSets.filter(\n (set) => set.label_set.id === annotationSet.label_set.id\n );\n\n return sameSets.length === 1 ? true : false;\n },\n\n /**\n * Check if the annotation set can appear multiple times\n */\n annotationSetCanBeMultiple: (_) => (annotationSet) => {\n return annotationSet.label_set.has_multiple_annotation_sets;\n },\n\n /**\n * Check if the annotation set has only empty labels\n */\n annotationSetHasNoFilledLabels: (_) => (annotationSet) => {\n const annotations = annotationSet.labels.flatMap((label) => {\n return label.annotations;\n });\n\n return annotations.length === 0 ? true : false;\n },\n};\n\nconst actions = {\n startLoading: ({ commit }) => {\n commit(\"SET_LOADING\", true);\n commit(\"display/ENABLE_SEARCH\", false, { root: true });\n },\n endLoading: ({ commit }) => {\n commit(\"SET_LOADING\", false);\n },\n setDocId: ({ commit }, id) => {\n commit(\"SET_PAGES\", []);\n commit(\"SET_DOC_ID\", id);\n },\n setAnnotationId: ({ commit, dispatch, getters }, id) => {\n if (id) {\n // check if part of label with multi ann as false\n const annotation = getters.annotationById(id);\n const label = getters.labelOfAnnotation(annotation);\n if (getters.isLabelMultiFalseAndGroupOfAnns(label)) {\n dispatch(\"setAnnotationAsFirstInLabel\", { label, annotation });\n }\n }\n\n commit(\"SET_ANNOTATION_ID\", id);\n setURLAnnotationHash(id);\n },\n setAnnotationSetId: ({ commit }, id) => {\n commit(\"SET_ANNOTATION_SET_ID\", id);\n },\n setAnnotationSets: ({ commit }, annotationSets) => {\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n },\n setEditAnnotation: (\n { commit },\n { id, index, label, labelSet, annotationSet, pageNumber }\n ) => {\n const value = {\n id,\n index,\n label,\n labelSet,\n annotationSet,\n pageNumber,\n };\n commit(\"SET_EDIT_ANNOTATION\", value);\n },\n resetEditAnnotation: ({ commit }) => {\n commit(\"RESET_EDIT_ANNOTATION\");\n },\n setAnnotations: ({ commit }, annotations) => {\n commit(\"SET_ANNOTATIONS\", annotations);\n },\n setLabels: ({ commit }, labels) => {\n commit(\"SET_LABELS\", labels);\n },\n setPages: ({ commit }, pages) => {\n commit(\"SET_PAGES\", pages);\n },\n setSelectedDocument: ({ commit }, document) => {\n commit(\"SET_SELECTED_DOCUMENT\", document);\n },\n setPublicView: ({ commit }, publicView) => {\n commit(\"SET_PUBLIC_VIEW\", publicView);\n },\n startRecalculatingAnnotations: ({ commit }) => {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", true);\n },\n endRecalculatingAnnotations: ({ commit }) => {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", false);\n },\n setMissingAnnotations: ({ commit }, missingAnnotations) => {\n commit(\"SET_MISSING_ANNOTATIONS\", missingAnnotations);\n },\n setErrorMessage: ({ commit, dispatch }, message) => {\n if (message) {\n commit(\"SET_SHOW_ACTION_ERROR\", true);\n } else {\n commit(\"SET_SHOW_ACTION_ERROR\", false);\n }\n\n commit(\"SET_ERROR_MESSAGE\", message);\n\n dispatch(\"closeErrorMessage\");\n },\n setDocumentError: ({ commit }, value) => {\n commit(\"SET_DOCUMENT_ERROR\", value);\n },\n setAnnotationsMarkedAsMissing: ({ commit }, annotations) => {\n commit(\"SET_ANNOTATIONS_MARKED_AS_MISSING\", annotations);\n },\n setErrorMessageWidth: ({ commit }, width) => {\n commit(\"SET_ERROR_MESSAGE_WIDTH\", width);\n },\n setHoveredAnnotationSet: ({ commit }, annotationSet) => {\n commit(\"SET_HOVERED_ANNOTATION_SET\", annotationSet);\n },\n setNewAcceptedAnnotations: ({ commit }, annotations) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", annotations);\n },\n setSplittingSuggestions: ({ commit }, value) => {\n commit(\"SET_SPLITTING_SUGGESTIONS\", value);\n },\n setAnnotationSearch: ({ commit }, value) => {\n commit(\"SET_ANNOTATION_SEARCH\", value);\n },\n\n /**\n * Actions that use HTTP requests always return the axios promise,\n * so they can be `await`ed (useful to set the `loading` status).\n */\n fetchDocument: async ({ commit, state, dispatch, rootState, getters }) => {\n let isRecalculatingAnnotations = false;\n const initialPage = 1;\n\n dispatch(\"startLoading\");\n dispatch(\"display/updateCurrentPage\", initialPage, {\n root: true,\n });\n\n await HTTP.get(`documents/${state.documentId}/`)\n .then((response) => {\n if (response.data) {\n const fetchedDocument = response.data;\n\n const { labels, annotations, annotationSets } =\n getters.processAnnotationSets(fetchedDocument.annotation_sets);\n\n // reset pages to avoid displaying old pages while new ones are loading\n commit(\"SET_PAGES\", []);\n\n // load first page\n if (fetchedDocument.pages.length > 0) {\n dispatch(\"fetchDocumentPage\", initialPage);\n }\n\n // set information on the store\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n commit(\"SET_ANNOTATIONS\", annotations);\n commit(\"SET_LABELS\", labels);\n commit(\"SET_SELECTED_DOCUMENT\", fetchedDocument);\n\n // project\n if (fetchedDocument.project) {\n dispatch(\"project/setProjectId\", fetchedDocument.project, {\n root: true,\n });\n\n dispatch(\n \"project/setShowAnnotationTranslations\",\n fetchedDocument.enable_translated_strings,\n {\n root: true,\n }\n );\n }\n\n if (!state.publicView) {\n dispatch(\"fetchMissingAnnotations\");\n\n dispatch(\"project/fetchCurrentUser\", null, {\n root: true,\n });\n\n if (fetchedDocument.project) {\n dispatch(\"category/fetchCategories\", fetchedDocument.project, {\n root: true,\n });\n }\n if (fetchedDocument.document_set) {\n dispatch(\"fetchDocumentSet\", fetchedDocument.document_set);\n }\n }\n\n if (getters.documentHasProposedSplit(fetchedDocument)) {\n dispatch(\"setSplittingSuggestions\", fetchedDocument.proposed_split);\n }\n\n if (fetchedDocument.labeling_available !== 1) {\n commit(\"SET_RECALCULATING_ANNOTATIONS\", true);\n dispatch(\"pollDocumentEndpoint\");\n }\n }\n })\n .catch((error) => {\n console.log(error, \"Could not fetch document details from the backend\");\n dispatch(\"display/setPageError\", error.response.data.detail, {\n root: true,\n });\n return;\n });\n\n // Check if we first open the document dashboard or the edit mode\n if (\n !state.publicView &&\n state.selectedDocument &&\n (!state.selectedDocument.category ||\n (!state.selectedDocument.category_is_revised &&\n !getters.documentHasCorrectAnnotations &&\n state.missingAnnotations.length === 0))\n ) {\n dispatch(\"edit/enableEditMode\", null, {\n root: true,\n });\n dispatch(\"edit/setRenameAndCategorize\", true, { root: true });\n }\n dispatch(\"endLoading\");\n },\n\n // Get document page data\n fetchDocumentPage: ({ commit, state }, page) => {\n return HTTP.get(`documents/${state.documentId}/pages/${page}/`)\n .then((response) => {\n commit(\"ADD_PAGE\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n // Set document set data\n setDocumentSet: ({ commit }, documentSet) => {\n commit(\"SET_DOC_SET\", documentSet);\n },\n\n // Get document set data\n fetchDocumentSet: ({ commit, state }, documentSetId) => {\n return HTTP.get(\n `document-sets/${documentSetId}/?expand=documents&fields=documents.id,documents.data_file_name,documents.category`\n )\n .then((response) => {\n commit(\"SET_DOC_SET\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n setDocumentAnnotationSelected: (\n { commit },\n { annotation, label, span, scrollTo = false }\n ) => {\n const value = {\n scrollTo,\n id: annotation.id,\n span,\n page: span.page_index + 1,\n labelName: label ? label.name : \"\",\n };\n commit(\"SET_DOCUMENT_ANNOTATION_SELECTED\", value);\n },\n\n scrollToDocumentAnnotationSelected: ({ commit }) => {\n commit(\"SET_DOCUMENT_ANNOTATION_SCROLL\", true);\n },\n\n disableDocumentAnnotationSelected: ({ commit }) => {\n commit(\"SET_DOCUMENT_ANNOTATION_SELECTED\", null);\n },\n\n createAnnotation: ({ commit, getters, dispatch }, { annotation }) => {\n return new Promise((resolve, reject) => {\n HTTP.post(`/annotations/`, annotation)\n .then(async (response) => {\n if (response.status === 201) {\n await dispatch(\"fetchMissingAnnotations\");\n\n if (!getters.annotationSetExists(response.data.annotation_set)) {\n const documentData = await dispatch(\"fetchDocumentData\");\n if (documentData && documentData.annotation_sets) {\n const { labels, annotations, annotationSets } =\n getters.processAnnotationSets(documentData.annotation_sets);\n commit(\"SET_ANNOTATION_SETS\", annotationSets);\n commit(\"SET_ANNOTATIONS\", annotations);\n commit(\"SET_LABELS\", labels);\n }\n } else {\n commit(\"ADD_ANNOTATION\", response.data);\n }\n\n if (response.data && response.data.id) {\n dispatch(\"setAnnotationId\", response.data.id);\n }\n resolve(response);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateAnnotation: (\n { commit, getters, dispatch },\n { updatedValues, annotationId }\n ) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", [annotationId]);\n\n return new Promise((resolve, reject) => {\n HTTP.patch(`/annotations/${annotationId}/`, updatedValues)\n .then(async (response) => {\n if (response.status === 200) {\n commit(\"UPDATE_ANNOTATION\", response.data);\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", null);\n if (response.data && response.data.id) {\n dispatch(\"setAnnotationId\", response.data.id);\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n deleteAnnotation: (\n { commit, getters, state },\n { annotationId, annotationSet }\n ) => {\n return new Promise((resolve, reject) => {\n HTTP.delete(`/annotations/${annotationId}/`)\n .then(async (response) => {\n if (response.status === 204) {\n if (state.annotationId === annotationId) {\n commit(\"SET_ANNOTATION_ID\", null);\n setURLAnnotationHash(null);\n }\n\n commit(\"DELETE_ANNOTATION\", annotationId);\n\n // Check if the deleted annotation was the last one in a multiple annotation set\n // and if the annotation set has no annotations\n if (\n annotationSet &&\n getters.annotationSetCanBeMultiple(annotationSet) &&\n getters.annotationSetHasNoFilledLabels(annotationSet)\n ) {\n // Check if there is still 1 or more multiple annotation sets for the same label set\n if (getters.isOnlyMultipleAnnotationSet(annotationSet)) {\n commit(\"UPDATE_ANNOTATION_SET\", annotationSet);\n } else {\n commit(\"DELETE_ANNOTATION_SET\", annotationSet);\n }\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateDocument: ({ commit, state, getters, dispatch }, updatedDocument) => {\n return new Promise((resolve, reject) => {\n HTTP.patch(`/documents/${state.documentId}/`, updatedDocument)\n .then((response) => {\n if (response.status === 200) {\n if (updatedDocument.data_file_name) {\n // if the only change was the file name, don't reload the page\n // only update the file name for the selectedDocument\n commit(\"UPDATE_FILE_NAME\", response.data.data_file_name);\n } else {\n commit(\"SET_SELECTED_DOCUMENT\", response.data);\n\n dispatch(\"pollDocumentEndpoint\");\n }\n\n resolve(true);\n }\n })\n .catch((error) => {\n console.log(error);\n // check if review error\n if (\n error.response &&\n error.response.request &&\n error.response.request.response\n ) {\n const is_reviewed = JSON.parse(error.request.response).is_reviewed;\n if (is_reviewed && is_reviewed.length > 0) {\n const errorData = {\n data: [...is_reviewed],\n };\n reject(errorData);\n return;\n }\n }\n reject(error.response);\n });\n });\n },\n\n fetchMissingAnnotations: ({ commit, state, getters }) => {\n return new Promise((resolve, reject) => {\n return myImports\n .makeGetPaginatedRequest(\n `/missing-annotations/?document=${state.documentId}`,\n true\n )\n .then((results) => {\n commit(\"SET_MISSING_ANNOTATIONS\", results);\n resolve(true);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n addMissingAnnotations: ({ commit, getters }, missingAnnotations) => {\n return new Promise((resolve, reject) => {\n HTTP.post(`/missing-annotations/`, missingAnnotations)\n .then(async (response) => {\n if (response.status === 201) {\n commit(\"SET_ANNOTATIONS_MARKED_AS_MISSING\", null);\n commit(\"ADD_MISSING_ANNOTATIONS\", response.data);\n }\n\n resolve(response);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n deleteMissingAnnotation: ({ commit, getters }, id) => {\n return new Promise((resolve, reject) => {\n return HTTP.delete(`/missing-annotations/${id}/`)\n .then((response) => {\n if (response.status === 204) {\n commit(\"DELETE_MISSING_ANNOTATION\", id);\n resolve(true);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n updateMultipleAnnotations: ({ state, commit }, annotations) => {\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", annotations.ids);\n\n return new Promise((resolve, reject) => {\n return HTTP.patch(\n `documents/${state.documentId}/update-annotations/`,\n annotations\n )\n .then((response) => {\n if (response.status === 200) {\n response.data.map((annotation) => {\n commit(\"UPDATE_ANNOTATION\", annotation);\n });\n commit(\"SET_NEW_ACCEPTED_ANNOTATIONS\", null);\n resolve(true);\n }\n })\n .catch((error) => {\n console.log(error);\n reject(error.response);\n });\n });\n },\n\n fetchDocumentStatus: ({ state, getters }) => {\n return new Promise((resolve, reject) => {\n return HTTP.get(\n `documents/${state.documentId}/?fields=status_data,labeling_available`\n )\n .then((response) => {\n if (\n getters.isDocumentReadyToBeReviewed(response.data) ||\n getters.waitingForSplittingConfirmation(response.data)\n ) {\n // ready or has splitting suggestions\n return resolve(true);\n } else if (getters.documentHadErrorDuringExtraction(response.data)) {\n // error\n return reject();\n } else {\n // not yet ready\n return resolve(false);\n }\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n // Get document data\n fetchDocumentData: ({ state }) => {\n return new Promise((resolve, reject) => {\n HTTP.get(`documents/${state.documentId}/`)\n .then((response) => {\n return resolve(response.data);\n })\n .catch((error) => {\n reject(error);\n console.log(error);\n });\n });\n },\n\n // Poll Document endpoint to know if the Document is ready to be reviewed\n // or even if there was an error during the extraction\n pollDocumentEndpoint: ({ dispatch }) => {\n return dispatch(\"fetchDocumentStatus\")\n .then((ready) => {\n if (ready) {\n // Stop document recalculating annotations\n dispatch(\"endRecalculatingAnnotations\");\n dispatch(\"fetchDocument\");\n } else {\n sleep(documentPollDuration);\n dispatch(\"pollDocumentEndpoint\");\n }\n })\n .catch((error) => {\n dispatch(\"setDocumentError\", true);\n console.log(error);\n });\n },\n\n createErrorMessage: (\n { commit, dispatch },\n { error, serverErrorMessage, defaultErrorMessage }\n ) => {\n // check type of error\n if (error && error.status >= 500 && error.status < 600) {\n dispatch(\"setErrorMessage\", serverErrorMessage);\n commit(\"SET_SERVER_ERROR\", true);\n } else if (error.data && error.data.length > 0) {\n dispatch(\"setErrorMessage\", error.data[0]);\n } else {\n dispatch(\"setErrorMessage\", defaultErrorMessage);\n }\n },\n\n closeErrorMessage: ({ commit }) => {\n setTimeout(() => {\n commit(\"SET_ERROR_MESSAGE\", null);\n commit(\"SET_SHOW_ACTION_ERROR\", false);\n commit(\"SET_SERVER_ERROR\", false);\n }, 5000);\n },\n\n contactSupport: ({ rootState }, error) => {\n const url = \"https://konfuzio.com/support/\";\n const params = `project=${rootState.project.projectId}&email=${rootState.project.currentUser.username}&issue=${error}`;\n const fullUrl = `${url}?${params}`;\n\n window.open(fullUrl, \"_blank\");\n },\n\n changeCurrentDocument: (\n { commit, state, dispatch, rootState },\n documentId\n ) => {\n // reset splitting suggestions\n if (state.splittingSuggestions) {\n commit(\"SET_SPLITTING_SUGGESTIONS\", null);\n }\n\n if (rootState.edit.editMode) {\n // Reset edit mode when changing the document,\n // in case the change was made from the arrows in the Edit Mode\n // so that the user does not get stuck in this interface\n dispatch(\"edit/disableEditMode\", null, {\n root: true,\n });\n }\n\n commit(\"SET_RECALCULATING_ANNOTATIONS\", false);\n\n if (getURLQueryParam(\"document\") || getURLPath(\"d\")) {\n navigateToNewDocumentURL(state.selectedDocument.id, documentId);\n } else {\n commit(\"SET_DOC_ID\", documentId);\n dispatch(\"fetchDocument\");\n }\n },\n showMissingAnnotations({ commit }, show) {\n commit(\"SET_SHOW_MISSING_ANNOTATIONS\", show);\n },\n showFeedbackNeededAnnotations({ commit }, show) {\n commit(\"SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS\", show);\n },\n showAcceptedAnnotations({ commit }, show) {\n commit(\"SET_SHOW_ACCEPTED_ANNOTATIONS\", show);\n },\n unloadDocumentPage: ({ commit }, pageNumber) => {\n commit(\"REMOVE_PAGE\", pageNumber);\n },\n putNextAnnotationInLabelFirst({ commit }, label) {\n commit(\"PUT_NEXT_ANN_IN_LABEL_FIRST\", label);\n },\n setAnnotationAsFirstInLabel({ commit, state }, { label, annotation }) {\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n if (labelToFind.annotations && labelToFind.annotations.length > 1) {\n for (let i = 0; i < labelToFind.annotations.length; i++) {\n if (labelToFind.annotations[i].id === annotation.id) {\n labelToFind.annotations.unshift(\n labelToFind.annotations.splice(i, 1)[0]\n );\n commit(\"SET_ANNOTATIONS_IN_LABEL\", {\n annotationSet,\n label: labelToFind,\n annotations: labelToFind.annotations,\n });\n }\n }\n }\n }\n });\n });\n },\n putNextAnnotationInLabelFirst({ commit, state, dispatch }, label) {\n dispatch(\"setAnnotationId\", null);\n let newFirstAnn = null;\n state.annotationSets.forEach((annotationSet) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n if (labelToFind.annotations && labelToFind.annotations.length > 1) {\n const cloneAnnotations = [...labelToFind.annotations];\n const firstElement = cloneAnnotations.shift();\n cloneAnnotations.push(firstElement);\n commit(\"SET_ANNOTATIONS_IN_LABEL\", {\n annotationSet,\n label: labelToFind,\n annotations: cloneAnnotations,\n });\n newFirstAnn = cloneAnnotations[0];\n return;\n }\n }\n });\n if (newFirstAnn) {\n return;\n }\n });\n\n if (newFirstAnn) {\n dispatch(\"setDocumentAnnotationSelected\", {\n annotation: newFirstAnn,\n label: label,\n span: newFirstAnn.span[0],\n scrollTo: true,\n });\n\n dispatch(\"scrollToDocumentAnnotationSelected\");\n }\n },\n};\n\nconst mutations = {\n SET_LOADING: (state, loading) => {\n state.loading = loading;\n },\n SET_DOC_ID: (state, id) => {\n if (id !== state.documentId) {\n state.documentId = id;\n }\n },\n SET_DOC_SET: (state, documentSet) => {\n // assuming that documents in document set are ordered from new to old\n let documents = [];\n if (documentSet && documentSet.documents) {\n documents = documentSet.documents.slice().reverse();\n }\n\n const orderedDocumentSet = {\n ...documentSet,\n documents,\n };\n\n state.documentSet = orderedDocumentSet;\n },\n SET_ANNOTATION_ID: (state, id) => {\n state.annotationId = id;\n },\n SET_ANNOTATION_SET_ID: (state, id) => {\n state.annotationSetId = id;\n },\n ADD_ANNOTATION: (state, annotation) => {\n state.annotations.push(annotation);\n state.annotationSets.map((annotationSet) => {\n if (\n annotation.annotation_set === annotationSet.id &&\n annotation.label_set &&\n annotationSet.label_set.id === annotation.label_set.id\n ) {\n annotationSet.labels.map((label) => {\n if (annotation.label && annotation.label.id === label.id) {\n const exists = label.annotations.find(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n\n if (!exists) {\n label.annotations.push(annotation);\n return;\n }\n }\n });\n }\n });\n },\n UPDATE_ANNOTATION: (state, annotation) => {\n const indexOfAnnotationInAnnotations = state.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n if (indexOfAnnotationInAnnotations > -1) {\n state.annotations.splice(indexOfAnnotationInAnnotations, 1, annotation);\n }\n let updatedAnnotation = false;\n state.annotationSets.forEach((annotationSet) => {\n if (updatedAnnotation) {\n return;\n }\n annotationSet.labels.forEach((label) => {\n const indexOfAnnotationAnnotationSets = label.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotation.id\n );\n if (indexOfAnnotationAnnotationSets > -1) {\n // checks if an annotation label was changed and add it to the new label\n if (annotation.label && annotation.label.id !== label.id) {\n label.annotations.splice(indexOfAnnotationAnnotationSets, 1);\n\n const labelToAdd = annotationSet.labels.find(\n (labelToAdd) => labelToAdd.id === annotation.label.id\n );\n labelToAdd.annotations.push(annotation);\n } else {\n label.annotations.splice(\n indexOfAnnotationAnnotationSets,\n 1,\n annotation\n );\n }\n updatedAnnotation = true;\n return;\n }\n });\n });\n },\n DELETE_ANNOTATION: (state, annotationId) => {\n const indexOfAnnotationToDelete = state.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotationId\n );\n if (indexOfAnnotationToDelete > -1) {\n state.annotations.splice(indexOfAnnotationToDelete, 1);\n }\n let deleted = false;\n state.annotationSets.forEach((annotationSet) => {\n if (deleted) {\n return;\n }\n annotationSet.labels.forEach((label) => {\n const indexOfAnnotationInLabelToDelete = label.annotations.findIndex(\n (existingAnnotation) => existingAnnotation.id === annotationId\n );\n if (indexOfAnnotationInLabelToDelete > -1) {\n label.annotations.splice(indexOfAnnotationInLabelToDelete, 1);\n deleted = true;\n return;\n }\n });\n });\n },\n SET_ANNOTATIONS: (state, annotations) => {\n state.annotations = annotations;\n },\n SET_ANNOTATION_SETS: (state, annotationSets) => {\n state.annotationSets = annotationSets;\n },\n DELETE_ANNOTATION_SET: (state, annotationSet) => {\n const indexOfSetToDelete = state.annotationSets.findIndex(\n (existingAnnotationSet) => existingAnnotationSet.id === annotationSet.id\n );\n\n if (indexOfSetToDelete === -1) return;\n\n state.annotationSets.splice(indexOfSetToDelete, 1);\n },\n UPDATE_ANNOTATION_SET: (state, annotationSet) => {\n const indexOfExistingAnnotationSet = state.annotationSets.findIndex(\n (existingAnnotationSet) => existingAnnotationSet.id === annotationSet.id\n );\n\n if (indexOfExistingAnnotationSet === -1) return;\n\n const updatedSet = { ...annotationSet, id: null };\n\n state.annotationSets.splice(indexOfExistingAnnotationSet, 1, updatedSet);\n },\n SET_LABELS: (state, labels) => {\n state.labels = labels;\n },\n SET_ANNOTATIONS_IN_LABEL: (state, { label, annotations, annotationSet }) => {\n annotationSet.labels.forEach((labelToFind) => {\n if (labelToFind.id === label.id) {\n delete labelToFind.annotations;\n labelToFind.annotations = annotations;\n return;\n }\n });\n },\n SET_EDIT_ANNOTATION: (state, editAnnotation) => {\n state.editAnnotation = editAnnotation;\n },\n RESET_EDIT_ANNOTATION: (state) => {\n state.editAnnotation = null;\n },\n ADD_PAGE: (state, page) => {\n // if we already have the page in the state, update it in\n // the pages array instead of creating a new one\n const existingPageIndex = state.pages.findIndex(\n (p) => p.number === page.number\n );\n if (existingPageIndex === -1) {\n state.pages.push(page);\n } else {\n state.pages[existingPageIndex] = page;\n }\n },\n SET_PAGES: (state, pages) => {\n state.pages = pages;\n },\n SET_DOCUMENT_ANNOTATION_SELECTED: (state, documentAnnotationSelected) => {\n state.documentAnnotationSelected = documentAnnotationSelected;\n },\n SET_DOCUMENT_ANNOTATION_SCROLL: (state, scrollTo) => {\n if (state.documentAnnotationSelected) {\n state.documentAnnotationSelected.scrollTo = scrollTo;\n }\n },\n SET_SELECTED_DOCUMENT: (state, document) => {\n state.selectedDocument = document;\n\n // this is to handle cache when a document is edited or changed\n if (state.selectedDocument) {\n state.selectedDocument.downloaded_at = Date.now();\n }\n },\n SET_RECALCULATING_ANNOTATIONS: (state, recalculatingAnnotations) => {\n state.recalculatingAnnotations = recalculatingAnnotations;\n },\n SET_MISSING_ANNOTATIONS: (state, missingAnnotations) => {\n state.missingAnnotations = missingAnnotations;\n },\n ADD_MISSING_ANNOTATIONS: (state, annotations) => {\n if (annotations && annotations.length > 0) {\n annotations.map((annotation) => {\n // check if already in missingAnnotations\n const found = state.missingAnnotations.find(\n (missingAnnotation) => missingAnnotation.id === annotation.id\n );\n\n if (found) {\n const indexOfAnnotation = state.missingAnnotations.findIndex(\n (missingAnnotation) => missingAnnotation.id === annotation.id\n );\n\n if (indexOfAnnotation > -1) {\n state.missingAnnotations.splice(indexOfAnnotation, 1, annotation);\n }\n } else {\n state.missingAnnotations.push(annotation);\n }\n });\n } else {\n state.missingAnnotations.push(annotations);\n }\n },\n DELETE_MISSING_ANNOTATION: (state, id) => {\n const indexOfAnnotationToDelete = state.missingAnnotations.findIndex(\n (annotation) => annotation.id === id\n );\n\n if (indexOfAnnotationToDelete > -1) {\n state.missingAnnotations.splice(indexOfAnnotationToDelete, 1);\n }\n },\n SET_SHOW_ACTION_ERROR: (state, value) => {\n state.showActionError = value;\n },\n SET_ERROR_MESSAGE: (state, message) => {\n state.errorMessage = message;\n },\n SET_DOCUMENT_ERROR: (state, value) => {\n state.showDocumentError = value;\n },\n SET_ANNOTATIONS_MARKED_AS_MISSING: (state, annotations) => {\n state.annotationsMarkedAsMissing = annotations;\n },\n SET_ERROR_MESSAGE_WIDTH: (state, width) => {\n state.errorMessageWidth = width;\n },\n SET_PUBLIC_VIEW: (state, value) => {\n state.publicView = value;\n },\n SET_DOCUMENT_IS_READY: (state, value) => {\n state.documentIsReady = value;\n },\n SET_DOCUMENT_HAS_ERROR: (state, value) => {\n state.documentHasError = value;\n },\n SET_HOVERED_ANNOTATION_SET: (state, hoveredAnnotationSet) => {\n state.hoveredAnnotationSet = hoveredAnnotationSet;\n },\n SET_NEW_ACCEPTED_ANNOTATIONS: (state, annotations) => {\n state.newAcceptedAnnotations = annotations;\n },\n SET_SERVER_ERROR: (state, value) => {\n state.serverError = value;\n },\n UPDATE_FILE_NAME: (state, value) => {\n state.selectedDocument.data_file_name = value;\n },\n SET_SPLITTING_SUGGESTIONS: (state, array) => {\n state.splittingSuggestions = array;\n },\n SET_ANNOTATION_SEARCH: (state, search) => {\n state.annotationSearch = search;\n setURLQueryParam(\"search\", search);\n },\n SET_SHOW_MISSING_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showEmpty = show;\n },\n SET_SHOW_ACCEPTED_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showAccepted = show;\n },\n SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS: (state, show) => {\n state.annotationFilters.showFeedbackNeeded = show;\n },\n REMOVE_PAGE: (state, pageNumber) => {\n state.pages = state.pages.filter((p) => p.number !== pageNumber);\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\n\nconst HTTP = myImports.HTTP;\n\nconst state = {\n documentsAvailableToReview: [], // filtered by user\n categories: null,\n};\n\nconst getters = {\n /**\n * Get the category name for a given category ID\n */\n categoryName: (state) => (categoryId) => {\n if (categoryId && state.categories) {\n const category = state.categories.find(\n (tempCategory) => tempCategory.id == categoryId\n );\n if (category) {\n return category.name;\n }\n }\n return \"\";\n },\n\n categoryConfidence: () => (confidence) => {\n if (!confidence) {\n if (confidence === 0) return confidence.toFixed(2);\n\n return;\n }\n\n return (confidence * 100).toFixed(2);\n },\n\n /**\n * Get the category for a given category ID\n */\n category: (state) => (categoryId) => {\n if (categoryId && state.categories) {\n const category = state.categories.find(\n (tempCategory) => tempCategory.id == categoryId\n );\n if (category) {\n return category;\n }\n }\n return null;\n },\n\n projectHasSingleCategory: (state) => {\n return state.categories && state.categories.length === 1;\n },\n};\n\nconst actions = {\n setDocumentsAvailableToReview: ({ commit }, documentsAvailableToReview) => {\n commit(\"SET_AVAILABLE_DOCUMENTS\", documentsAvailableToReview);\n },\n setCategories: ({ commit }, categories) => {\n commit(\"SET_CATEGORIES\", categories);\n },\n\n createAvailableDocumentsList: (\n { commit, state, dispatch, rootState, rootGetters },\n { categoryId, user, poll }\n ) => {\n if (!state.createAvailableListOfDocuments) return;\n\n const parameters = `category=${categoryId}`;\n\n const sleep = (duration) =>\n new Promise((resolve) => setTimeout(resolve, duration));\n\n // Poll document data until the status_data is 2\n // and labeling is available (done)\n let count = 0;\n const pollUntilLabelingAvailable = (duration) => {\n let errors = 0;\n count += 1;\n\n return dispatch(\n \"project/fetchDocumentListWithParameters\",\n parameters\n ).then((documents) => {\n for (let i = 0; i < documents.length; i++) {\n const found = state.documentsAvailableToReview.find(\n (doc) => doc.id === documents[i].id\n );\n\n if (found) {\n // If the document is already in the available docs array\n // we go to the next item\n continue;\n } else if (\n rootGetters[\"document/isDocumentReadyToBeReviewed\"](documents)\n ) {\n // add available doc to the end of the array\n commit(\"ADD_AVAILABLE_DOCUMENT\", documents);\n } else if (\n rootGetters[\"document/documentHadErrorDuringExtraction\"](documents)\n ) {\n dispatch(\"document/setDocumentError\", null, { root: true });\n // If error, add 1\n // Then go to next item\n errors += 1;\n continue;\n } else {\n // Some other situation, such as labeling not yet available\n // go to next item\n // TODO: we should only poll the documents that are not yet available\n continue;\n }\n }\n // After looping, check if length of both arrays is different\n // And if the difference is due to errors or to docs not ready\n if (\n poll &&\n documents.length !== state.documentsAvailableToReview.length &&\n state.documentsAvailableToReview.length + errors !== documents.length\n ) {\n if (count >= 10) return true;\n\n // We poll the endpoint again\n return sleep(duration).then(() => {\n pollUntilLabelingAvailable(duration);\n });\n } else {\n return true;\n }\n });\n };\n\n // Poll as long as the lengths are different\n if (\n documents.length === 0 ||\n documents.length !== state.documentsAvailableToReview.length\n ) {\n let duration;\n if (count <= 5) {\n duration = 5000;\n } else if (count > 10) {\n duration = 20000;\n } else {\n duration = 10000;\n }\n pollUntilLabelingAvailable(duration);\n } else {\n return;\n }\n },\n\n fetchCategories: ({ commit }, projectId) => {\n return myImports\n .makeGetPaginatedRequest(`categories/?project=${projectId}`, true)\n .then(async (results) => {\n if (results) {\n commit(\"SET_CATEGORIES\", results);\n }\n })\n .catch((error) => {\n console.log(error, \"Could not fetch categories from the backend\");\n });\n },\n};\n\nconst mutations = {\n SET_AVAILABLE_DOCUMENTS: (state, documentsAvailableToReview) => {\n state.documentsAvailableToReview = documentsAvailableToReview;\n },\n ADD_AVAILABLE_DOCUMENT: (state, availableDocument) => {\n const docAlreadyExists = state.documentsAvailableToReview.find(\n (document) => document.id === availableDocument.id\n );\n if (!docAlreadyExists) {\n state.documentsAvailableToReview.push(availableDocument);\n }\n },\n SET_CATEGORIES: (state, categories) => {\n state.categories = categories;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n getters,\n};\n","import myImports from \"../api\";\nconst HTTP = myImports.HTTP;\n\nconst state = {\n projectId: null,\n labelSets: null,\n currentUser: null,\n documentsListPath: null,\n showAnnotationTranslations: false,\n};\n\nconst actions = {\n setProjectId: ({ commit }, projectId) => {\n commit(\"SET_PROJECT_ID\", projectId);\n },\n // Get label details\n fetchLabelSetDetails: ({ commit, state }, labelSetId) => {\n return new Promise((resolve, reject) => {\n HTTP.get(`label-sets/${labelSetId}/`)\n .then((response) => {\n return resolve(response.data);\n })\n .catch((error) => {\n reject(error);\n console.log(error);\n });\n });\n },\n\n // Get label sets from the project\n fetchLabelSets: ({ commit, state }) => {\n return myImports\n .makeGetPaginatedRequest(`label-sets/?project=${state.projectId}`, true)\n .then((results) => {\n commit(\"SET_LABEL_SETS\", results);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n fetchCurrentUser: ({ commit }) => {\n return HTTP.get(`/auth/me/`)\n .then((response) => {\n commit(\"SET_CURRENT_USER\", response.data);\n })\n .catch((error) => {\n console.log(error);\n });\n },\n\n setCurrentUser: ({ commit }, currentUser) => {\n commit(\"SET_CURRENT_USER\", currentUser);\n },\n\n setDocumentsListPath: ({ commit }, path) => {\n commit(\"SET_DOCUMENTS_LIST_PATH\", path);\n },\n\n setShowAnnotationTranslations: ({ commit }, show) => {\n commit(\"SET_SHOW_ANNOTATION_TRANSLATIONS\", show);\n },\n\n fetchDocumentListWithParameters: ({ commit, state }, parameters) => {\n return new Promise((resolve, reject) => {\n myImports\n .makeGetPaginatedRequest(\n `documents/?project=${state.projectId}&${parameters}`,\n true\n )\n .then((results) => {\n resolve(results);\n })\n .catch((error) => {\n reject();\n console.log(error, \"Could not fetch document list from the backend\");\n });\n });\n },\n fetchDocumentListForNavigation: ({ commit, state }) => {\n return new Promise((resolve, reject) => {\n myImports\n .makeGetPaginatedRequest(\n `documents/?project=${state.projectId}&is_reviewed=false&fields=id`,\n true\n )\n .then((results) => {\n resolve(results);\n })\n .catch((error) => {\n reject();\n console.log(error, \"Could not fetch document list from the backend\");\n });\n });\n },\n};\n\nconst mutations = {\n SET_PROJECT_ID: (state, projectId) => {\n state.projectId = projectId;\n },\n SET_CURRENT_USER: (state, currentUser) => {\n state.currentUser = currentUser;\n },\n SET_LABEL_SETS: (state, labelSets) => {\n state.labelSets = labelSets;\n },\n SET_DOCUMENTS_LIST_PATH: (state, path) => {\n state.documentsListPath = path;\n },\n SET_SHOW_ANNOTATION_TRANSLATIONS: (state, show) => {\n state.showAnnotationTranslations = show;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\n\nconst HTTP = myImports.HTTP;\n\nconst selectionPadding = 1;\n\nconst state = {\n selection: {\n pageNumber: null,\n start: null,\n end: null,\n },\n isSelecting: false,\n spanSelection: [],\n placeholderSelection: [],\n selectedEntities: [],\n spanLoading: false,\n};\n\nconst getters = {\n isSelectionValid: (state) => {\n /**\n * `endSelection` will reset everything in case of invalid selection.\n * Check the existence of `selection.end` before requesting the\n * content from the backend.\n * */\n return state.selection && state.selection.end != null;\n },\n\n getSelectionForPage: (state) => (pageNumber) => {\n if (state.selection.pageNumber === pageNumber) {\n return state.selection;\n }\n return null;\n },\n\n /**\n * Get entities inside a box\n */\n entitiesOnSelection: (state) => (box, page) => {\n return page.entities.filter(\n (entity) =>\n box.x0 <= entity.x0 &&\n box.x1 >= entity.x1 &&\n box.y0 <= entity.y0 &&\n box.y1 >= entity.y1\n );\n },\n spanSelectionsForPage: (state) => (page) => {\n return state.spanSelection.filter(\n (span) => page.number === span.page_index + 1\n );\n },\n placeholderSelectionForPage: (state) => (page) => {\n return state.placeholderSelection.filter(\n (span) => page.number === span.page_index + 1\n );\n },\n};\n\nconst actions = {\n disableSelection: ({ commit }) => {\n commit(\"RESET_SELECTION\");\n commit(\"SET_SELECTED_ENTITIES\", []);\n commit(\"SET_SPAN_SELECTION\", []);\n commit(\"SET_PLACEHOLDER_SELECTION\", []);\n },\n\n startSelection: ({ commit }, { pageNumber, start }) => {\n commit(\"START_SELECTION\", {\n pageNumber,\n start,\n });\n },\n\n moveSelection: ({ commit, state, dispatch }, points) => {\n // only apply when we have a large enough selection, otherwise we risk counting misclicks\n if (state.selection && state.selection.start) {\n const xDiff = Math.abs(state.selection.start.x - points.end.x);\n const yDiff = Math.abs(state.selection.start.y - points.end.y);\n if (xDiff > 5 && yDiff > 5) {\n commit(\"MOVE_SELECTION\", points);\n }\n }\n },\n\n endSelection: ({ commit, state }, end) => {\n let xDiff;\n let yDiff;\n\n if (end) {\n xDiff = Math.abs(state.selection.start.x - end.x);\n yDiff = Math.abs(state.selection.start.y - end.y);\n }\n\n // if \"end\" is not provided, start and end points are the same, or if we have a selection smaller than 5x5,\n // just reset\n if (\n !end ||\n (yDiff <= 5 && xDiff <= 5) ||\n (state.selection.start.x === end.x && state.selection.start.y == end.y)\n ) {\n commit(\"RESET_SELECTION\");\n } else {\n state.selection.start.x = state.selection.start.x - selectionPadding;\n state.selection.start.y = state.selection.start.y - selectionPadding;\n\n end.x = end.x + selectionPadding;\n end.y = end.y + selectionPadding;\n\n commit(\"END_SELECTION\", end);\n }\n },\n\n setSelectedEntities: ({ commit }, entities) => {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n },\n\n getTextFromBboxes: ({ commit, rootState }, span) => {\n commit(\"SET_SPAN_LOADING\", true);\n return new Promise((resolve, reject) => {\n HTTP.post(`documents/${rootState.document.documentId}/bbox/`, {\n span,\n })\n .then((response) => {\n if (response.data.span.length && response.data.span.length > 0) {\n /**\n * If we have a non-empty bboxes list, we assume there\n * is text here on the backend, so we just set\n * spanSelection to the response.\n */\n resolve(response.data.span);\n } else {\n /**\n * Otherwise, we assume the backend can't identify text\n * on this area, so we set our bbox into spanSelection\n * ready to be passed back to the backend when creating\n * an annotation on this empty area, adding the offset_string\n * attribute, ready to be filled.\n */\n resolve(span);\n }\n })\n .catch((error) => {\n alert(\"Could not fetch the selected text from the backend\");\n reject(error);\n })\n .finally(() => {\n commit(\"SET_SPAN_LOADING\", false);\n });\n });\n },\n\n entitySelection: ({ commit, dispatch, state }, { entities, selection }) => {\n if (entities.length === 0) {\n if (selection) {\n dispatch(\"getTextFromBboxes\", [selection]).then((spans) => {\n commit(\"SET_SPAN_SELECTION\", spans);\n });\n } else {\n commit(\"RESET_SELECTION\");\n commit(\"SET_SPAN_SELECTION\", []);\n }\n commit(\"SET_SELECTED_ENTITIES\", []);\n } else {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n\n dispatch(\"document/setAnnotationId\", null, {\n root: true,\n });\n let span;\n if (entities) {\n span = entities.flatMap((s) => {\n return s.original;\n });\n } else {\n span = [entities];\n }\n commit(\"SET_SPAN_SELECTION\", span);\n dispatch(\"getTextFromBboxes\", span).then((spans) => {\n commit(\"SET_SPAN_SELECTION\", spans);\n });\n }\n },\n\n entityClick: ({ commit, dispatch, state }, entity) => {\n // Check if we are creating a new Annotation\n // or if we are removing a previously selected entity\n // or editing empty one\n const found = state.selectedEntities.find(\n (entityToFind) =>\n entity.scaled.width === entityToFind.scaled.width &&\n entity.original.offset_string === entityToFind.original.offset_string\n );\n\n let entities = state.selectedEntities;\n if (found) {\n entities = [\n ...state.selectedEntities.filter(\n (entityToFilter) =>\n entityToFilter.scaled.width !== entity.scaled.width &&\n entityToFilter.original.offset_string !==\n entity.original.offset_string\n ),\n ];\n } else {\n entities.push(entity);\n }\n\n if (entities.length === 0) {\n commit(\"SET_SELECTED_ENTITIES\", []);\n commit(\"SET_SPAN_SELECTION\", []);\n } else {\n commit(\"SET_SELECTED_ENTITIES\", entities);\n\n dispatch(\"document/setAnnotationId\", null, {\n root: true,\n });\n\n let span;\n\n if (entities) {\n span = entities.flatMap((s) => {\n return s.original;\n });\n } else {\n span = [entities];\n }\n commit(\"SET_SPAN_SELECTION\", span);\n }\n },\n\n setSpanSelection: ({ commit }, span) => {\n commit(\"SET_SPAN_SELECTION\", span);\n },\n setPlaceholderSelection: ({ commit }, span) => {\n commit(\"SET_PLACEHOLDER_SELECTION\", span);\n },\n};\n\nconst mutations = {\n START_SELECTION: (state, { pageNumber, start }) => {\n state.selection.end = null;\n state.selection.pageNumber = pageNumber;\n state.selection.start = start;\n state.isSelecting = true;\n },\n MOVE_SELECTION: (state, points) => {\n const { start, end } = points;\n if (start) {\n state.selection.start = start;\n }\n if (end) {\n state.selection.end = end;\n }\n },\n END_SELECTION: (state, end) => {\n state.selection.end = end;\n state.isSelecting = false;\n },\n RESET_SELECTION: (state) => {\n state.selection.pageNumber = null;\n state.selection.start = null;\n state.selection.end = null;\n },\n SET_SPAN_SELECTION: (state, span) => {\n if (!span) {\n state.spanSelection = [];\n } else {\n state.spanSelection = span;\n }\n },\n ADD_SPAN_SELECTION: (state, span) => {\n state.spanSelection.push(span);\n },\n SET_PLACEHOLDER_SELECTION: (state, span) => {\n if (!span) {\n state.placeholderSelection = [];\n } else {\n state.placeholderSelection = span;\n }\n },\n ADD_PLACEHOLDER_SELECTION: (state, span) => {\n state.placeholderSelection.push(span);\n },\n SET_SELECTED_ENTITIES: (state, entities) => {\n if (!entities) {\n state.selectedEntities = [];\n } else {\n state.selectedEntities = entities;\n }\n },\n SET_SPAN_LOADING: (state, loading) => {\n state.spanLoading = loading;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n getters,\n actions,\n mutations,\n};\n","import myImports from \"../api\";\nimport {\n getURLQueryParam,\n navigateToNewDocumentURL,\n getURLPath,\n} from \"../utils/utils\";\n\nconst HTTP = myImports.HTTP;\n\nconst state = {\n editMode: false,\n renameAndCategorize: false,\n isMultipleSelection: true,\n pagesForPostprocess: [],\n selectedPages: [],\n updatedDocument: [],\n showEditConfirmationModal: false,\n submitEditChanges: false,\n redirectingUser: false,\n};\n\nconst getters = {\n isEditModeAvailable: (state, getters, rootState, rootGetters) => {\n return (\n !rootState.document.publicView &&\n !rootGetters[\"document/isDocumentReviewed\"] &&\n !state.editMode\n );\n },\n isPageSelected: (state) => (id) => {\n return state.selectedPages.find((page) => page.id === id);\n },\n\n documentShouldBePostprocessed: (state, _, rootState) => {\n const foundRotatedPage = state.pagesForPostprocess.find(\n (page) => page.angle !== 0\n );\n\n let foundReorderedPage = false;\n\n state.pagesForPostprocess.map((page, index) => {\n if (\n (page.id === rootState.document.selectedDocument.pages[index].id &&\n page.number !==\n rootState.document.selectedDocument.pages[index].number) ||\n (page.id !== rootState.document.selectedDocument.pages[index].id &&\n page.number ===\n rootState.document.selectedDocument.pages[index].number)\n ) {\n foundReorderedPage = true;\n }\n });\n\n return (\n state.updatedDocument.length > 1 || foundRotatedPage || foundReorderedPage\n );\n },\n};\n\nconst actions = {\n enableEditMode: ({ commit }) => {\n commit(\"SET_EDIT_MODE\", true);\n },\n\n disableEditMode: ({ commit }) => {\n commit(\"SET_EDIT_MODE\", false);\n commit(\"SET_RENAME_AND_CATEGORIZE\", false);\n },\n\n setRenameAndCategorize: ({ commit }, value) => {\n commit(\"SET_RENAME_AND_CATEGORIZE\", value);\n },\n\n setPagesForPostprocess: ({ commit }, pages) => {\n commit(\"SET_PAGES_FOR_POSTPROCESS\", pages);\n },\n\n setUpdatedDocument: ({ commit }, updatedDocument) => {\n commit(\"SET_UPDATED_DOCUMENT\", updatedDocument);\n },\n\n setSubmitEditChanges: ({ commit }, value) => {\n commit(\"SET_SUBMIT_EDIT_CHANGES\", value);\n },\n\n selectPage: ({ state, commit }, page) => {\n if (state.isMultipleSelection) {\n commit(\"ADD_SELECTED_PAGE\", page);\n } else {\n commit(\"SET_SELECTED_PAGES\", []);\n commit(\"ADD_SELECTED_PAGE\", page);\n }\n },\n\n unselectPage: ({ state, commit }, selectedPage) => {\n const found = state.selectedPages.find(\n (page) => page.id === selectedPage.id\n );\n if (found) {\n const filtered = state.selectedPages.filter(\n (page) => page.id !== selectedPage.id\n );\n commit(\"SET_SELECTED_PAGES\", filtered);\n }\n },\n\n setSelectedPages: ({ state, commit }, selectedPage) => {\n if (!selectedPage) {\n commit(\"SET_SELECTED_PAGES\", []);\n return;\n }\n\n const found = state.selectedPages.find(\n (page) => page.id === selectedPage.id\n );\n\n if (found) {\n const filtered = state.selectedPages.filter(\n (page) => page.id !== selectedPage.id\n );\n commit(\"SET_SELECTED_PAGES\", filtered);\n } else if (state.isMultipleSelection) {\n commit(\"ADD_SELECTED_PAGE\", selectedPage);\n } else {\n commit(\"SET_SELECTED_PAGES\", []);\n commit(\"ADD_SELECTED_PAGE\", selectedPage);\n }\n },\n\n rotatePage: ({ state, commit }, { page, direction }) => {\n if (state.pagesForPostprocess.find((p) => p.id === page.id)) {\n const pagesForPostprocess = state.pagesForPostprocess.map((p) => {\n let rotatedAngle;\n if (direction === \"left\") {\n rotatedAngle = p.angle - 90;\n if (p.id === page.id) {\n if (rotatedAngle === -270) {\n rotatedAngle = 90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n }\n return p;\n }\n if (direction === \"right\") {\n rotatedAngle = p.angle + 90;\n if (p.id === page.id) {\n if (rotatedAngle === 270) {\n rotatedAngle = -90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n }\n return p;\n }\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", pagesForPostprocess);\n } else {\n if (direction === \"left\") {\n state.pagesForPostprocess.push({\n id: page.id,\n number: page.number,\n angle: -90,\n thumbnail_url: page.thumbnail_url,\n updated_at: page.updated_at,\n });\n }\n\n if (direction === \"right\") {\n state.pagesForPostprocess.push({\n id: page.id,\n number: page.number,\n angle: 90,\n thumbnail_url: page.thumbnail_url,\n updated_at: page.updated_at,\n });\n }\n }\n },\n\n updateRotationToTheLeft: ({ state, commit }) => {\n // updated the angles that will be sent to the backend\n const array = state.pagesForPostprocess.map((p) => {\n let rotatedAngle = p.angle - 90;\n if (rotatedAngle === -270) {\n rotatedAngle = 90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", array);\n },\n\n updateRotationToTheRight: ({ state, commit }) => {\n // updated the angles that will be sent to the backend\n const array = state.pagesForPostprocess.map((p) => {\n let rotatedAngle = p.angle + 90;\n if (rotatedAngle === 270) {\n rotatedAngle = -90;\n }\n return {\n ...p,\n angle: rotatedAngle,\n };\n });\n\n commit(\"SET_PAGES_FOR_POSTPROCESS\", array);\n },\n\n editDocument: ({ rootState, commit, dispatch }, editedDocument) => {\n dispatch(\"document/startRecalculatingAnnotations\", null, {\n root: true,\n });\n\n const oldId = rootState.document.documentId;\n\n return new Promise((resolve, reject) => {\n HTTP.post(\n `/documents/${rootState.document.documentId}/postprocess/`,\n editedDocument\n )\n .then(async (response) => {\n if (response && response.status === 200) {\n const newId = response.data[0].id;\n dispatch(\"document/setSplittingSuggestions\", null, { root: true });\n\n commit(\"SET_SUBMIT_EDIT_CHANGES\", false);\n\n if (newId != oldId) {\n if (getURLQueryParam(\"document\") || getURLPath(\"docs\")) {\n navigateToNewDocumentURL(oldId, newId);\n } else {\n await dispatch(\"document/setDocId\", newId, {\n root: true,\n });\n\n dispatch(\"document/pollDocumentEndpoint\", null, {\n root: true,\n });\n }\n } else {\n dispatch(\"document/setSelectedDocument\", response.data[0], {\n root: true,\n });\n\n dispatch(\"document/pollDocumentEndpoint\", null, {\n root: true,\n });\n }\n }\n resolve(response);\n })\n .catch((error) => {\n reject(error.response);\n console.log(error);\n });\n });\n },\n\n setShowEditConfirmationModal: ({ commit }, value) => {\n commit(\"SET_SHOW_EDIT_CONFIRMATION_MODAL\", value);\n },\n\n setRedirectingUser: ({ commit }, value) => {\n commit(\"SET_REDIRECTING_USER\", value);\n },\n};\n\nconst mutations = {\n SET_EDIT_MODE: (state, option) => {\n state.editMode = option;\n },\n\n SET_RENAME_AND_CATEGORIZE: (state, value) => {\n state.renameAndCategorize = value;\n },\n\n SET_PAGES_FOR_POSTPROCESS: (state, pages) => {\n state.pagesForPostprocess = pages;\n },\n\n SET_UPDATED_DOCUMENT: (state, updatedDocument) => {\n state.updatedDocument = updatedDocument;\n },\n SET_SELECTED_PAGES: (state, selectedPages) => {\n state.selectedPages = selectedPages;\n },\n ADD_SELECTED_PAGE: (state, selectedPage) => {\n state.selectedPages.push(selectedPage);\n },\n SET_SHOW_EDIT_CONFIRMATION_MODAL: (state, value) => {\n state.showEditConfirmationModal = value;\n },\n SET_SUBMIT_EDIT_CHANGES: (state, value) => {\n state.submitEditChanges = value;\n },\n SET_REDIRECTING_USER: (state, value) => {\n state.redirectingUser = value;\n },\n};\n\nexport default {\n namespaced: true,\n state,\n actions,\n mutations,\n getters,\n};\n","import { createStore } from \"vuex\";\n\nimport display from \"./display\";\nimport document from \"./document\";\nimport category from \"./category\";\nimport project from \"./project\";\nimport selection from \"./selection\";\nimport edit from \"./edit\";\n\nexport const store = createStore({\n modules: {\n display,\n document,\n category,\n project,\n selection,\n edit,\n },\n});\n","// internal icons\nimport { library } from \"@fortawesome/fontawesome-svg-core\";\nimport {\n faArrowUp,\n faAngleRight,\n faAngleLeft,\n faAngleUp,\n faAngleDown,\n faSpinner,\n faPlus,\n faXmark,\n faMagnifyingGlassMinus,\n faBan,\n faCircleCheck,\n faEllipsisVertical,\n faCircleInfo,\n faArrowRotateLeft,\n faArrowRotateRight,\n faScissors,\n faRepeat,\n faArrowLeft,\n faArrowRight,\n faDownload,\n faSearch,\n faTrashArrowUp,\n faFloppyDisk,\n faCircleExclamation,\n faLink,\n faSquareCheck,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon as Icons } from \"@fortawesome/vue-fontawesome\";\n\nlibrary.add(\n faArrowUp,\n faAngleRight,\n faAngleLeft,\n faAngleUp,\n faAngleDown,\n faSpinner,\n faXmark,\n faMagnifyingGlassMinus,\n faBan,\n faCircleCheck,\n faSpinner,\n faPlus,\n faEllipsisVertical,\n faCircleInfo,\n faArrowRotateLeft,\n faArrowRotateRight,\n faScissors,\n faRepeat,\n faArrowLeft,\n faArrowRight,\n faDownload,\n faSearch,\n faTrashArrowUp,\n faFloppyDisk,\n faCircleExclamation,\n faLink,\n faSquareCheck\n);\n\nexport default Icons;\n","import App from \"./components/App\";\nimport { createApp } from \"vue\";\nimport Buefy from \"buefy\";\nimport VueKonva from \"vue-konva\";\nimport { i18n } from \"./i18n\";\nimport { store } from \"./store\";\nimport VueObserveVisibility from \"vue3-observe-visibility\";\nimport Icons from \"./icons\";\n\nconst app = createApp();\n\napp.component(\"App\", App);\napp.component(\"VueFontawesome\", Icons);\napp.use(VueKonva);\napp.use(Buefy, {\n defaultIconPack: \"fas\",\n defaultIconComponent: \"vue-fontawesome\",\n});\napp.use(VueObserveVisibility);\napp.use(store);\napp.use(i18n);\n\n/**\n * Main entrypoint for the App\n */\napp.mount(\"#app\");\n","var map = {\n\t\"./de.json\": 5894,\n\t\"./en.json\": 4174,\n\t\"./es.json\": 6725\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 5432;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdO = {};","var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.hmd = (module) => {\n\tmodule = Object.create(module);\n\tif (!module.children) module.children = [];\n\tObject.defineProperty(module, 'exports', {\n\t\tenumerable: true,\n\t\tset: () => {\n\t\t\tthrow new Error('ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: ' + module.id);\n\t\t}\n\t});\n\treturn module;\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t524: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunk_konfuzio_document_validation_ui\"] = self[\"webpackChunk_konfuzio_document_validation_ui\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [504], () => (__webpack_require__(2338)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["class","pageError","error","renameAndCategorize","editMode","ref","size","showChooseLabelSetModal","show","isMultipleAnnotations","finish","name","showActionError","style","errorMessageWidth","showDocumentError","optimalResolution","isMinimumWidth","$t","id","selectedDocument","pages","length","loading","publicView","recalculatingAnnotations","showBranding","documentSet","isDocumentReviewed","categories","categoryName","numberOfDocumentInSet","xmlns","width","height","viewBox","fill","d","script","__exports__","thumbnail_url","downloaded_at","rounded","label","fullText","multilined","active","isFileNameBiggerThanMaxSize","isEditable","position","contenteditable","handleInput","handlePaste","handleSave","textContent","detailsUrl","loaded","visibilityChanged","initKeycloak","async","url","realm","clientId","authenticated","init","onLoad","enableLogging","setIsKeycloakAuth","setAuthToken","token","console","updateKeycloakToken","Promise","resolve","reject","updateToken","HTTP","FILE_REQUEST","authToken","appLocale","isKeycloakAuth","DEFAULT_URL","FILE_URL","VUE_APP_IMAGE_URL","axios","defaults","xsrfCookieName","xsrfHeaderName","create","baseURL","VUE_APP_API_URL","responseType","result","setApiUrl","setFileUrl","setLocale","locale","getInterceptorConfig","config","headers","interceptors","request","use","makeFileRequest","fileUrl","get","then","response","data","myBlob","catch","status","setTimeout","makeGetPaginatedRequest","hasParams","returnResponse","toFinishLoop","separator","loopRequest","results","next","log","props","imageUrl","required","type","String","default","isVisible","watch","this","loadImage","methods","api","$refs","imgTag","src","URL","createObjectURL","shortFilenameIfNeeded","changed","filename","event","disabled","waitingForSplittingConfirmation","closeEditMode","enableSubmit","handleButton","isReviewButtonActive","content","handleFinishReview","isLoading","closable","icon","emptyLabels","computed","isDocumentReadyToFinishReview","documentHasCategory","category","updatedDocument","newValue","submitValidation","mounted","document","found","find","item","$store","dispatch","$nextTick","category_is_revised","documentShouldBePostprocessed","updatedDocumentReviewStatus","is_reviewed","serverErrorMessage","defaultErrorMessage","finally","components","KeyboardIcon","ArrowUpKey","ArrowDownKey","categorizeModalIsActive","currentPage","isSelecting","spanSelectionsForPage","showAnnSetTable","scale","scaledEntities","isAnnotationInEditMode","annotation","placeholderSelectionForPage","PIXEL_RATIO","window","devicePixelRatio","VIEWPORT_RATIO","MINIMUM_APP_WIDTH","MINIMUM_OPTIMIZED_APP_WIDTH","TEXT_BREAKPOINT_WIDTH","isSelectionValid","onChange","transformerConfig","page","Object","editable","Boolean","x","selection","start","y","end","stroke","strokeWidth","globalCompositeOperation","shadowForStrokeEnabled","draggable","borderEnabled","rotateEnabled","ignoreStroke","keepRatio","anchorStroke","anchorSize","updateTransformer","handleSelection","custom","box","clientToBbox","entities","entitiesOnSelection","transformer","boxTransformer","transformerNode","getNode","stage","getStage","selectedNode","findOne","node","nodes","getLayer","batchDraw","scaleX","scaleY","skewX","target","attrs","realWidth","realHeight","moveSelection","boxSelection","skewY","rotation","Number","span","primaryColor","getComputedStyle","body","getPropertyValue","perfectDrawEnabled","setSelection","bboxToRect","startSelection","points","xDiff","Math","abs","yDiff","endSelection","selectionPadding","spanTransformer","spanSelection","placeholderConfig","editAnnotation","spanLoading","textFromEntities","selectedSet","scrollable","trigger","numberOfAnnotationSetGroup","numberOfLabelSetGroup","openAnnotationSetCreation","setsList","set","index","key","label_set","value","labels","selectedLabel","close","save","spans","Array","containerWidth","containerHeight","heightOfPopup","margin","widthOfPopup","isAnnSetModalShowing","top","normalizedSpan","left","text","forEach","offset_string","trim","oldValue","labelsFilteredForAnnotationCreation","orderedSetList","annotationSets","annotationSet","addEventListener","clickOutside","unmounted","removeEventListener","sort","a","b","nameA","nameB","$emit","labelSet","pageNumber","getElementById","click","selection_bbox","annotationToCreate","documentId","is_correct","revised","annotation_set","chooseLabelSet","existsIndex","findIndex","newSet","unshift","coordinates","labelSetName","handleDelete","SettingsIcon","xFinal","yFinal","paddingTop","annotations","bboxToPoint","x0","y0","annotationsToDelete","annotationsInAnnotationsSets","i","annotationToDelete","annotationId","documentAnnotationSelected","getParent","includes","image","canvasStyle","scaledViewport","actualSizeViewport","actualSizeWidth","actualSizeHeight","pixelWidth","pixelHeight","map","dim","ceil","searchEnabled","pagesForPostprocess","number","clientHeight","scrollTop","onPageJump","inserted","el","binding","callback","modifiers","immediate","throttledScroll","throttle","limit","waiting","apply","arguments","loadedPage","DocumentPage","DummyPage","elementTop","elementHeight","previousFocusedAnnotation","previousY","pageBeingLoaded","isScrolling","p","pageInVisibleRange","loadPage","isElementFocused","bottom","halfHeight","halfScreen","delta","threshold","scrollBottom","currentSearchResultForPage","getters","spanForAnnotationSelected","annotationById","page_index","scrollDocumentToPosition","scrollDocumentToAnnotation","isToScroll","focused","pageChangedFromThumbnail","res","getYForBbox","totalY","scrollTo","updateElementBounds","visiblePageRange","getXForBbox","offsetTop","offsetHeight","$el","bbox","tooltipInfo","editModeDisabled","isEditModeAvailable","handleEdit","toggleSearch","handleDownloadFile","fitAuto","isZoomInExceeding","zoomIn","isZoomOutExceeding","zoomOut","currentPercentage","FitZoomIcon","PlusIcon","MinusIcon","EditDocIcon","fitWidthScale","maxPercentage","defaultPercentage","fitPercentage","toolbarModalOpen","documentCannotBeEdited","newScale","round","updated","cancelAnnotationEditMode","updateScale","fileType","fileName","data_file_name","file_url","link","createElement","href","setAttribute","revokeObjectURL","placeholder","focusSearchResult","search","searchLoading","searchResults","currentCounter","searchBelowMinimum","closeSearch","minSearchLength","currentSearchResult","currentSearch","enabled","searchInput","focus","n","ScrollingPage","Toolbar","SearchBar","directives","scroll","scrollTimeout","showToolbar","scrollingDocument","handleScroll","updateScrollBounds","scrollLeft","scrollY","scrollX","offsetLeft","clearTimeout","changePage","ServerImage","LoadingThumbnail","thumbnailClicked","previousScrollPosition","newPage","scrollToThumbnail","docPage","children","scrollIntoView","behavior","cleanSelection","getAnnotationsFiltered","numberOfLoadingAnnotations","isSearchingAnnotationList","notCorrectAnnotations","isSearch","EmptyStateImg","redirectingUser","mouseenterAnnotationSet","mouseleaveAnnotationSet","numberOfEmptyLabelsInAnnotationSet","markAllAsMissing","isPlaceholder","numberOfNotCorrectAnnotationsInAnnotationSet","acceptAllPending","e","stopPropagation","annotationsToShow","annotationIsNotFound","onAnnotationClick","hoveredAnnotation","currentAnnotationId","labelContainerWidth","min","max","val","labelWidth","onAnnotationHoverEnter","defaultSpan","onAnnotationHoverLeave","description","selectAnnotation","showAnnotationTranslations","translated_string","annotationWidth","animated","confidence","floor","created","edited","notExtracted","accepted","getText","animate","CheckMark","QuestionMark","AcceptedCheckMark","AcceptedUser","NotFoundIcon","newAnnotation","oldAnnotation","changePositionOfTooltip","getUser","annDetails","getElementsByClassName","lastElementsInList","updateClass","array","classList","remove","add","sleep","duration","getURLQueryParam","param","queryString","location","urlParams","URLSearchParams","has","getURLPath","path","pathname","split","getURLValueFromHash","hash","replace","setURLQueryParam","query","deleteParam","searchParams","delete","history","pushState","toString","setURLAnnotationHash","title","navigateToNewDocumentURL","oldId","newId","newUrl","navigateToDocumentsList","projectId","lastCharOfString","charAt","slash","parameters","newPath","isElementArray","element","isArray","debounce","cb","timer","args","emptyAnnotationId","isAnnotationBeingEdited","saveEmptyAnnotationChanges","handleEditEmptyAnnotation","label_name","spanIndex","isMissingAnnotation","isFindingAnnotation","preventDefault","isLabelMultiFalseAndGroupOfAnns","showSave","delay","tooltipDelay","nextAnn","decline","showText","accept","markAsMissing","restore","cancel","showCancel","showMissing","showAccept","showDecline","showRestore","showLink","showSearch","innerWidth","showHoverButton","cancelBtn","saveBtn","resize","translation","AnnotationRow","labelHasPendingAnnotations","hoveredSet","ann","ellipsis","attached","tag","labelNameForAnnotationId","annotationFilters","showFeedbackNeeded","showEmpty","showAccepted","annotationSearch","labelOfAnnotation","numberOfLabelRows","circle","LoadingLabels","newAnnotationSet","labelSetsFilteredForAnnotationSetCreation","labelSetItem","submit","fileExtension","splittingLines","splitSuggestionsEnabled","handleSplittingLines","checkMove","handleDragEnd","rotatePage","handleRotationsToTheLeft","handleRotationsToTheRight","applySplittingSuggestions","saveEditChanges","buttonDisabled","rotateLeft","rotateRight","selectedPages","rotateAllLeft","rotateAllRight","documentHasProposedSplit","switchStatus","rotateButton","buttonText","showRotateButton","SidebarButtons","splittingSuggestions","handleBackButton","color","cursor","handlePageChange","getImageUrl","getFileName","handleChanges","splitMode","tooltipIsShown","dropdownIsDisabled","setCategoryDefaultText","setCategoryConfidence","listOfCategories","handleOptionInDropdownDisabled","handleChangeCategory","CategoryIcon","categoryError","missingCategory","projectHasSingleCategory","updatedValuesForDocuments","categoryConfidence","checkIfDropdownIsDisabled","setTooltipText","list","handleCategories","filtered","filter","project","documentHasCorrectAnnotations","updatedCategory","tooltipText","tooltipContent","innerHTML","DocumentCategory","EyeIcon","updatedFileName","updatedPages","splitPage","slice","join","updated_at","getRotation","pageId","angle","editPages","easing","move","dragging","tabindex","isHover","selectPage","checkboxValue","checkboxInput","isSelected","undefined","isPageSelected","parseInt","StarIcon","isModalActive","closeModal","confirmChanges","showEditConfirmationModal","EditSidebar","RenameAndCategorize","EditPages","SplitInfoBar","EditConfirmationModal","prevPageAtIndex","splitFileNameFromExtension","saveUpdatedDocuments","aiSplit","origin","submitEditChanges","setPages","createPagesForPostprocess","setSplittingArray","setAutomaticSplitting","image_url","direction","lastPage","splittingOrigin","push","at","removedPage","splice","clickedLines","newDocuments","createEachNewDocument","documents","newDocument","handleNewDocumentName","handleNewDocumentCategory","handleNewDocumentCategoriesAndConfidence","handleNewDocumentPages","newFileName","indexOfSplittingSuggestion","foundPage","singleSplittingSuggestion","indexOf","draggedContext","futureIndex","documentToProcess","redirection","documentsListPath","newCategory","newName","revisedCategory","assign","updatedValues","serverError","errorMessage","handleGetSupport","handleErrorClose","handleNotOptimizedModal","Illustration","handleContactSupport","transform","ErrorIcon","documentError","Splitpanes","Pane","DocumentTopBar","ScrollingDocument","DocumentThumbnails","DocumentAnnotations","DocumentEdit","ErrorMessage","NotOptimizedViewportModal","DocumentErrorModal","ChooseLabelSetModal","AnnotationDeletedModal","resizeObserver","unwatchSelectedDocument","documentContainerLeftPadding","documentContainerWidth","oldDocument","observe","onDocumentResize","fit","newFit","oldFit","ResizeObserver","unobserve","elementsWidth","editView","clientWidth","documentPages","getBoundingClientRect","offsetWidth","client","viewport","documentsAvailableToReview","showCategoryInfo","selectedCategory","requestTrialAccess","changeDocument","documentHadErrorDuringExtraction","documentsList","open","DocumentsList","DocumentDashboard","ErrorPage","user_token","full_mode","show_documents_navigation","show_missing_annotations","show_feedback_needed_annotations","show_accepted_annotations","sentry_dsn","sentry_env","api_url","documents_list_path","details_url","sso_url","sso_realm","sso_client_id","hide_empty_label_sets","annotation_content_width","remove_branding","VUE_APP_DOCUMENT","userToken","VUE_APP_USER_TOKEN","fullMode","VUE_APP_FULL_MODE","showDocumentsNavigation","VUE_APP_SHOW_DOCUMENTS_NAVIGATION","removeBranding","VUE_APP_REMOVE_BRANDING","showMissingAnnotations","VUE_APP_SHOW_MISSING_ANNOTATIONS","showAcceptedAnnotations","VUE_APP_SHOW_ACCEPTED_ANNOTATIONS","showFeedbackNeededAnnotations","VUE_APP_SHOW_FEEDBACK_NEEDED_ANNOTATIONS","isPublicView","ssoUrl","ssoRealm","ssoClientId","showDocumentsList","VUE_APP_SHOW_DOCUMENTS_LIST","VUE_APP_DOCUMENTS_LIST_PATH","VUE_APP_DETAILS_URL","VUE_APP_SSO_URL","VUE_APP_SSO_REALM","VUE_APP_SSO_CLIENT_ID","VUE_APP_ANNOTATION","annotationSetId","VUE_APP_ANNOTATION_SET","hideEmptyLabelSets","VUE_APP_HIDE_EMPTY_LABEL_SETS","annotationContentWidth","VUE_APP_ANNOTATION_CONTENT_WIDTH","Vue","dsn","VUE_APP_SENTRY_DSN","integrations","environment","VUE_APP_SENTRY_ENV","tracesSampleRate","logErrors","tracingOptions","trackComponents","$i18n","all","_","constructor","super","render","loadLocaleMessages","locales","messages","keys","matched","match","i18n","VUE_APP_LOCALE","fallbackLocale","precision","multiplier","pow","state","interactionBlocked","pageWidthScale","viewportWidth","pageHeightScale","viewportHeight","rootState","rootGetters","pageCount","previousPage","nextPage","searchResultsForPage","r","currentResult","entity","original","scaled","imageScale","original_size","div","toNumber","point","hasOffset","pageHeight","newPoint","minus","times","x1","y1","rect","dp","ROUND_DOWN","ROUND_UP","actions","commit","autoScale","widthScale","updateFit","debounceUpdateCurrentPage","updateCurrentPage","updateOptimalResolution","tableSet","options","toggleAnnSetTable","setCategorizeModalIsActive","setPageChangedFromThumbnail","setDetailsUrl","setLabelWidth","setAnnotationWidth","debounceSearch","startSearchLoading","post","q","resetSearch","enableSearch","toEnable","setCurrentSearch","setPageError","setCurrentSearchResult","newSearchResult","searchResultsMaxIndex","mutations","SET_SCALE","SET_FIT","SET_OPTIMAL_RESOLUTION","isOptimal","SET_CURRENT_PAGE","SET_LABEL_WIDTH","SET_ANNOTATION_WIDTH","SET_SHOW_DOCUMENTS_NAVIGATION","SET_SHOW_BRANDING","SET_ANN_SET_TABLE","HIDE_EMPTY_LABEL_SETS","hide","TOGGLE_ANN_SET_TABLE","SET_CATEGORIZE_MODAL_IS_ACTIVE","SET_PAGE_CHANGED_FROM_THUMBNAIL","SET_SHOW_CHOOSE_LABEL_SET_MODAL","SET_SEARCH_RESULTS","SET_SEARCH_LOADING","TOGGLE_SEARCH","ENABLE_SEARCH","SET_CURRENT_SEARCH","SET_CURRENT_SEARCH_RESULT","SET_DETAILS_URL","SET_PAGE_ERROR","namespaced","documentPollDuration","table_reference_api","missingAnnotations","annotationsMarkedAsMissing","hoveredAnnotationSet","newAcceptedAnnotations","enableGroupingFeature","pageSelected","display","pageAtIndex","categorizationIsConfirmed","availableLabels","l","has_multiple_top_candidates","isAnnotationDeleted","labelHasAnnotations","annotationsByConfidence","annotationSetExists","annSet","annotationSetsInTable","annotationSetsList","addAnnotationSet","annotationSetsToShowInList","annotationsSets","annotationSetOfAnnotation","annotationIdToFind","foundAnnotationSet","annotationToFind","foundLabel","processedAnnotationSets","processedLabels","isSearching","addAnnotation","listToAdd","force","toLowerCase","labelHasSearchText","labelAnnotations","addLabel","labelHasSearch","added","created_by","localeCompare","processAnnotationSets","sortByConfidenceOrByAnnotationSelected","isNegative","numberOfAcceptedAnnotationsInLabel","orderedAnnotationSets","annotationSetTemp","documentSetTemp","returnLabelSets","has_multiple_annotation_sets","annotationsInLabelFiltered","labelToReturn","highestConfidenceAnnotation","pendingEmpty","foundMissing","isAnnotationInAnnotationSet","exists","j","notCorrect","emptyAnnotations","annotationsWithPendingReview","foundPendingAnnotations","isDocumentReadyToBeReviewed","status_data","labeling_available","dataset_status","proposed_split","offset_string_original","revised_by","isOnlyMultipleAnnotationSet","sameSets","annotationSetCanBeMultiple","annotationSetHasNoFilledLabels","flatMap","startLoading","root","endLoading","setDocId","setAnnotationId","setAnnotationSetId","setAnnotationSets","setEditAnnotation","resetEditAnnotation","setAnnotations","setLabels","setSelectedDocument","setPublicView","startRecalculatingAnnotations","endRecalculatingAnnotations","setMissingAnnotations","setErrorMessage","message","setDocumentError","setAnnotationsMarkedAsMissing","setErrorMessageWidth","setHoveredAnnotationSet","setNewAcceptedAnnotations","setSplittingSuggestions","setAnnotationSearch","fetchDocument","initialPage","fetchedDocument","annotation_sets","enable_translated_strings","document_set","detail","fetchDocumentPage","setDocumentSet","fetchDocumentSet","documentSetId","setDocumentAnnotationSelected","labelName","scrollToDocumentAnnotationSelected","disableDocumentAnnotationSelected","createAnnotation","documentData","updateAnnotation","patch","deleteAnnotation","updateDocument","JSON","parse","errorData","fetchMissingAnnotations","addMissingAnnotations","deleteMissingAnnotation","updateMultipleAnnotations","ids","fetchDocumentStatus","fetchDocumentData","pollDocumentEndpoint","ready","createErrorMessage","closeErrorMessage","contactSupport","params","currentUser","username","fullUrl","changeCurrentDocument","edit","unloadDocumentPage","putNextAnnotationInLabelFirst","setAnnotationAsFirstInLabel","labelToFind","newFirstAnn","cloneAnnotations","firstElement","shift","SET_LOADING","SET_DOC_ID","SET_DOC_SET","reverse","orderedDocumentSet","SET_ANNOTATION_ID","SET_ANNOTATION_SET_ID","ADD_ANNOTATION","existingAnnotation","UPDATE_ANNOTATION","indexOfAnnotationInAnnotations","updatedAnnotation","indexOfAnnotationAnnotationSets","labelToAdd","DELETE_ANNOTATION","indexOfAnnotationToDelete","deleted","indexOfAnnotationInLabelToDelete","SET_ANNOTATIONS","SET_ANNOTATION_SETS","DELETE_ANNOTATION_SET","indexOfSetToDelete","existingAnnotationSet","UPDATE_ANNOTATION_SET","indexOfExistingAnnotationSet","updatedSet","SET_LABELS","SET_ANNOTATIONS_IN_LABEL","SET_EDIT_ANNOTATION","RESET_EDIT_ANNOTATION","ADD_PAGE","existingPageIndex","SET_PAGES","SET_DOCUMENT_ANNOTATION_SELECTED","SET_DOCUMENT_ANNOTATION_SCROLL","SET_SELECTED_DOCUMENT","Date","now","SET_RECALCULATING_ANNOTATIONS","SET_MISSING_ANNOTATIONS","ADD_MISSING_ANNOTATIONS","missingAnnotation","indexOfAnnotation","DELETE_MISSING_ANNOTATION","SET_SHOW_ACTION_ERROR","SET_ERROR_MESSAGE","SET_DOCUMENT_ERROR","SET_ANNOTATIONS_MARKED_AS_MISSING","SET_ERROR_MESSAGE_WIDTH","SET_PUBLIC_VIEW","SET_DOCUMENT_IS_READY","documentIsReady","SET_DOCUMENT_HAS_ERROR","documentHasError","SET_HOVERED_ANNOTATION_SET","SET_NEW_ACCEPTED_ANNOTATIONS","SET_SERVER_ERROR","UPDATE_FILE_NAME","SET_SPLITTING_SUGGESTIONS","SET_ANNOTATION_SEARCH","SET_SHOW_MISSING_ANNOTATIONS","SET_SHOW_ACCEPTED_ANNOTATIONS","SET_SHOW_FEEDBACK_NEEDED_ANNOTATIONS","REMOVE_PAGE","categoryId","tempCategory","toFixed","setDocumentsAvailableToReview","setCategories","createAvailableDocumentsList","user","poll","createAvailableListOfDocuments","count","pollUntilLabelingAvailable","errors","doc","fetchCategories","SET_AVAILABLE_DOCUMENTS","ADD_AVAILABLE_DOCUMENT","availableDocument","docAlreadyExists","SET_CATEGORIES","labelSets","setProjectId","fetchLabelSetDetails","labelSetId","fetchLabelSets","fetchCurrentUser","setCurrentUser","setDocumentsListPath","setShowAnnotationTranslations","fetchDocumentListWithParameters","fetchDocumentListForNavigation","SET_PROJECT_ID","SET_CURRENT_USER","SET_LABEL_SETS","SET_DOCUMENTS_LIST_PATH","SET_SHOW_ANNOTATION_TRANSLATIONS","placeholderSelection","selectedEntities","getSelectionForPage","disableSelection","setSelectedEntities","getTextFromBboxes","alert","entitySelection","s","entityClick","entityToFind","entityToFilter","setSpanSelection","setPlaceholderSelection","START_SELECTION","MOVE_SELECTION","END_SELECTION","RESET_SELECTION","SET_SPAN_SELECTION","ADD_SPAN_SELECTION","SET_PLACEHOLDER_SELECTION","ADD_PLACEHOLDER_SELECTION","SET_SELECTED_ENTITIES","SET_SPAN_LOADING","isMultipleSelection","foundRotatedPage","foundReorderedPage","enableEditMode","disableEditMode","setRenameAndCategorize","setPagesForPostprocess","setUpdatedDocument","setSubmitEditChanges","unselectPage","selectedPage","setSelectedPages","rotatedAngle","updateRotationToTheLeft","updateRotationToTheRight","editDocument","editedDocument","setShowEditConfirmationModal","setRedirectingUser","SET_EDIT_MODE","option","SET_RENAME_AND_CATEGORIZE","SET_PAGES_FOR_POSTPROCESS","SET_UPDATED_DOCUMENT","SET_SELECTED_PAGES","ADD_SELECTED_PAGE","SET_SHOW_EDIT_CONFIRMATION_MODAL","SET_SUBMIT_EDIT_CHANGES","SET_REDIRECTING_USER","store","modules","app","createApp","component","App","defaultIconPack","defaultIconComponent","mount","webpackContext","req","webpackContextResolve","__webpack_require__","o","Error","code","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","m","amdO","deferred","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","getter","__esModule","definition","defineProperty","enumerable","g","globalThis","Function","hmd","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","bind","__webpack_exports__"],"sourceRoot":""}
|