diff --git a/.gitignore b/.gitignore
index 509ae4bb..10851e8c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,3 +44,4 @@ cypress/screenshots
.idea
*.db
.vercel
+.parcel-cache
diff --git a/.prettierignore b/.prettierignore
index 809e6e15..c50b8c98 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -11,3 +11,4 @@ cypress/snapshots/*
cypress/videos/*
cypress/screenshots/*
yarn.lock
+.parcel-cache
diff --git a/desktop/main.css b/desktop/main.css
new file mode 100644
index 00000000..b8c02fc3
--- /dev/null
+++ b/desktop/main.css
@@ -0,0 +1,2 @@
+@import url("https://rsms.me/inter/inter.css");
+/*# sourceMappingURL=main.css.map */
diff --git a/desktop/main.css.map b/desktop/main.css.map
new file mode 100644
index 00000000..24bb62a2
--- /dev/null
+++ b/desktop/main.css.map
@@ -0,0 +1 @@
+{"mappings":"AAAA,8CAA8C","sources":["./src/components/Theme/theme.css"],"sourcesContent":["@import url(\"https://rsms.me/inter/inter.css\");\n"],"names":[],"version":3,"file":"main.css.map"}
\ No newline at end of file
diff --git a/desktop/main.js b/desktop/main.js
index 77933107..6a0b2c57 100644
--- a/desktop/main.js
+++ b/desktop/main.js
@@ -1,70 +1,2 @@
-// Modules to control application life and create native browser window
-const { app, BrowserWindow, Menu, shell } = require("electron")
-const path = require("path")
-const menuTemplate = require("./menu-template")
-const { format: formatUrl } = require("url")
-
-function createWindow() {
- // Create the browser window.
- const mainWindow = new BrowserWindow({
- width: 1200,
- height: 800,
- webPreferences: {
- nodeIntegration: true,
- webSecurity: false,
- // preload: path.join(__dirname, "preload.js")
- },
- })
-
- const menu = Menu.buildFromTemplate(menuTemplate)
- Menu.setApplicationMenu(menu)
-
- // and load the index.html of the app.
- if (process.env.USE_DEV_SERVER) {
- // USAGE: DEV_SERVER_URL=https://e2a6dfb7.ngrok.io npm run start:desktop:dev
- mainWindow.loadURL(process.env.DEV_SERVER_URL || "http://localhost:6001")
- } else {
- mainWindow.loadURL(
- formatUrl({
- pathname: path.join(__dirname, "../build", "index.html"),
- protocol: "file",
- slashes: true,
- })
- )
- }
-
- // Don't open links in electron browser
- mainWindow.webContents.on("new-window", function (event, url) {
- event.preventDefault()
- shell.openExternal(url)
- })
-
- mainWindow.webContents.on("will-navigate", function (event, url) {
- event.preventDefault()
- shell.openExternal(url)
- })
-
- // Open the DevTools.
- // mainWindow.webContents.openDevTools()
-}
-
-// This method will be called when Electron has finished
-// initialization and is ready to create browser windows.
-// Some APIs can only be used after this event occurs.
-app.on("ready", createWindow)
-
-// Quit when all windows are closed.
-app.on("window-all-closed", function () {
- // On macOS it is common for applications and their menu bar
- // to stay active until the user quits explicitly with Cmd + Q
- if (process.platform !== "darwin") app.quit()
-})
-
-app.on("activate", function () {
- // On macOS it's common to re-create a window in the app when the
- // dock icon is clicked and there are no other windows open.
- if (BrowserWindow.getAllWindows().length === 0) createWindow()
-})
-
-// In this file you can include the rest of your app's specific main process
-// code. You can also put them in separate files and require them here.
+function e(e){return e&&e.__esModule?e.default:e}var t=e(require("@material-ui/icons/ThreeDRotation")),o=e(require("@material-ui/icons/Help")),n=e(require("@material-ui/icons/Audiotrack")),a=e(require("@material-ui/icons/Edit")),i=e(require("@material-ui/icons/TextFormat")),r=e(require("@material-ui/icons/RemoveRedEye")),l=e(require("@babel/runtime/helpers/esm/defineProperty")),s=e(require("@material-ui/core/Typography")),d=e(require("lodash/range")),c=e(require("@material-ui/core/ListSubheader")),u=e(require("@material-ui/core/ListItemText")),m=e(require("@material-ui/core/ListItemIcon")),p=e(require("@material-ui/core/ListItem")),g=e(require("@material-ui/core/List")),f=e(require("@material-ui/core/Drawer")),v=e(require("@material-ui/icons/CheckCircle")),h=e(require("@material-ui/icons/RadioButtonUnchecked")),x=e(require("@material-ui/icons/KeyboardArrowLeft")),b=e(require("@material-ui/icons/KeyboardArrowRight")),y=e(require("react-markdown")),w=e(require("@material-ui/core/Grid")),k=require("@material-ui/core").makeStyles,E=e(require("material-survey/components/Survey")),S=e(require("react-time-series")),T=e(require("@material-ui/icons/Delete")),C=e(require("react-material-workspace-layout/Workspace")),I=e(require("lodash/without")),D=e(require("@material-ui/core/Checkbox")),A=e(require("@material-ui/core/Button")),j=e(require("use-event-callback")),q=e(require("react-image-annotate")),N=e(require("@babel/runtime/helpers/esm/slicedToArray")),L=e(require("@babel/runtime/helpers/esm/createForOfIteratorHelper")),P=e(require("@babel/runtime/helpers/esm/toConsumableArray")),R=e(require("@material-ui/core/Box")),U=e(require("react-nlp-annotate")),M=e(require("i18next-browser-languagedetector")),O=require("react-i18next"),z=O.initReactI18next,H=O.useTranslation,B=e(require("i18next")),_=require("@material-ui/core/colors"),V=_.blue,F=_.green,G=_.red,W=_.deepOrange,J=_.pink,K=_.teal,Y=_.deepPurple,Q=_.indigo,X=_.cyan,Z=_.purple,$=_.grey,ee=require("@material-ui/core/styles"),te=ee.ThemeProvider,oe=ee.styled,ne=ee.makeStyles,ae=e(require("@material-ui/core/styles/createMuiTheme")),ie=e(require("react-dom")),re=require("react"),le=e(re),se=re.useMemo,de=re.useState,ce=re.useEffect,ue=e(require("@babel/runtime/helpers/esm/objectWithoutProperties")),me=e(require("@babel/runtime/helpers/esm/objectSpread2"));require("./main.css");var pe=ae({palette:{primary:V,secondary:V},typography:{fontFamily:'"Inter", "Roboto", sans-serif',button:{textTransform:"none"}}}),ge=function(e){var t=e.children;return le.createElement(te,{theme:pe},t)},fe=e(JSON.parse('{"starting-page-download-version":"Download Version","download":"Download","download-json":"Download JSON","download-csv":"Download CSV","universaldatatool-description":"Open-Source Data Labeling tool","new-file":"New File","start-from-template":"Start from Template","open-file":"Open File","open-collaborative-session":"Open Collaborative Session","add-authentication":"Add Authentification","create-training-course":"Create a Training Course","no-recent-files":"No Recent Files","downloading-and-installing-udt":"Downloading and Installing UDT","labeling-images":"Labeling Images","start-page-about-first-paragraph":"The Universal Data Tool (UDT) is an open-source web or downloadable tool for labeling data for usage in machine learning or data processing systems.","start-page-about-second-paragraph":"The Universal Data Tool supports Computer Vision, Natural Language Processing (including Named Entity Recognition and Audio Transcription) workflows.","the-udt-uses-an":"The UDT uses an","start-page-about-third-paragraph":"that can be easily read by programs as a ground-truth dataset for machine learning algorithms.","open-a-template":"Open a template","to-see-how-the-udt-could-work-for-your-data":"to see how the UDT could work for your data.","edit-json":"Edit JSON","clear-labels":"Clear All Labels","telemetry":"Telemetry","custom-collaboration-server":"Custom Collaboration Server","label-help":"Label Help","label-help-api-key":"Label Help API Key","an-error-has-occurred":"An error has occurred","sample-brushes":"Sample Brushes","complete":"Complete","review":"Review","collaborate":"Collaborate","join-a-session":"Join a Session","leave-session":"Leave Session","next":"Next","configure-3d-explanation-text-part-1":"Hey, this isn\'t currently available, but if you\'d like this functionality please let us know by leaving a thumbs up on","github-issue":"github issue","add-new-field":"Add New Field","remove-field":"Remove Field","preview":"Preview","add-input":"Add Input","text-input":"Text Input","exclusive-choice":"Exclusive Choice","drop-down-autocomplete":"Dropdown / Autocomplete","multiple-item-dropdown-autocomplete":"Multiple Item Dropdown / Autocomplete","download-urls-dialog":"This transformation will download all the urls from your samples to your computer, and change the paths to filenames. This is usually not a good idea if you\'re collaborating with others, but is very useful if you\'re about to build a model.","no-recent-items":"No Recent Items","explore-more":"Explore More","reopen-google-drive-picker":"Reopen Google Drive Picker","import-from-google-drive-explanation-text":"Make sure your Google Drive files are available via a link","import-from-google-drive-explanation-bold-text":"If you don\'t, the files will not appear when you\'re labeling","select-video-quality":"Select Video Quality","desktop-only":"Desktop Only","auth-must-be-configured":"Auth Must Be Configured","must-be-signed-in":"Must Be Signed In","paste-urls":"Paste URLs","files-from-directory":"Files from Directory","import-text-snippets":"Import Text Snippets","import-toy-dataset":"Import Toy Dataset","import-from":"Import from","import-from-cognito-s3":"Import from S3 (Cognito)","export-to-cognito-s3":"Export to S3 (Cognito)","import-from-s3":"Import from S3 (IAM)","upload-to-s3":"Upload via S3","name":"Name","type":"Type","size":"Size","actions":"Actions","import":"Import","sign-in":"Sign in","complete-sign-up":"Complete Sign Up","complete-your-sign-up":"Complete your Sign Up","transform-local-files-to-web-urls-explanation":"This transformation will upload your local samples to the cloud Note: This can take a little while.","convert-video-keyframes-to-samples":"Convert Video Keyframes to Samples","transform-local-files-to-web-urls":"Transform Local Files to Web URLs","convert-video-frames-to-images":"Convert Video Frames to Images","transform-video-frames-to-images-dialog-explanation-text":"This transformation will convert samples that reference a video frame into an image. This is a useful step before creating a model. You can only convert videos that are downloaded on your computer. Note: This can take a little while.","transform-video-keyframes-dialog-explanation-text":"This operation will convert keyframes set on a video into individual image segmentation frames. Your interface type will change from \'video_segmentation\' into \'image_segmentation\'. This is sometimes helpful when preparing video data for a computer vision model.","transform-video-keyframes-dialog-explanation-warning":"You need to label some keyframes to use this.","universal-data-viewer-interface-warning":"This interface hasn\'t been set up properly, try selecting an interface in the \'Setup\' tab.","setup-project":"Setup Project","other-formats":"Other Formats","import-from-coco":"Import from COCO","remember-me":"Remember me","login-with":"Login with","about":"About","start":"Start","recent":"Recent","help":"Help","github-repository":"Github repository","youtube-channel":"Youtube channel","logout":"Logout","username":"Username","password":"Password","star":"Star","check-this-wiki":"Check this wiki","guide-to-set-up-cognito":"guide for setting up AWS Cognito with the Universal Data Tool","close":"Close","project-name":"Project Name","projects":"Projects","export-project":"Export Project","create-project":"Create Project","warning-project-exist":"Warning : This project name already exist. If you continue the \\n existing project with the same name will be replaced","has-samples-folder":"Make sure the project has \\"samples\\" folder","annotations":"Annotations","last-modified":"Last Modified","select-project":"Select Project","take-samples-from-project":"Take samples from project","annotation-processing":"Annotation Processing","keep-both-annotations":"Keep both annotations","keep-incoming-annotations":"Keep incoming annotations","keep-current-annotations":"Keep current annotations","choose-file-type":"Choose file type","load-image-file":"Load image file","load-pdf-file":"Load PDF file","load-text-file":"Load text file","load-audio-file":"Load audio file","load-video-file":"Load video file","assets":"Assets","has-data-folder":"Make sure the project has \\"data\\" folder","load-assets":"Load Assets","load-annotations":"Load Annotations"}')),ve=e(JSON.parse('{"starting-page-download-version":"Version à télécharger","download":"Télécharger","universaldatatool-description":"Outil d\'étiquetage des données open source","new-file":"Nouveau dossier","start-from-template":"Partir du modèle","open-file":"Dossier public","open-collaborative-session":"Session de collaboration ouverte","add-authentication":"Ajouter l\'authentification","create-training-course":"Créer un cours de formation","no-recent-files":"Aucun dossier récent","downloading-and-installing-udt":"Téléchargement et installation d\'UDT","labeling-images":"Étiquetage des images","start-page-about-first-paragraph":"Universal Data Tool (UDT) est un outil web ou téléchargeable à code open source pour l\'étiquetage des données destinées à être utilisées dans l\'apprentissage machine ou les systèmes de traitement des données.","start-page-about-second-paragraph":"UDT prend en charge les flux de travail de la vision par ordinateur, du traitement du langage naturel (y compris la reconnaissance d\'entités nommées et la transcription audio).","the-udt-uses-an":"UDT utilise un","start-page-about-third-paragraph":"qui peut être facilement lu par les programmes comme un ensemble de données de base pour les algorithmes d\'apprentissage machine.","open-a-template":"Ouvrir un modèle","to-see-how-the-udt-could-work-for-your-data":"pour voir comment l\'UDT pourrait fonctionner pour vos données.","edit-json":"Modifier JSON","clear-labels":"Effacer tous les labels","telemetry":"Télémétrie","custom-collaboration-server":"Serveur de collaboration personnalisée","label-help":"Label Help","label-help-api-key":"Label Help API Clé","an-error-has-occurred":"Une erreur s\'est produite","sample-brushes":"Brosses à échantillons","complete":"Compléter","review":"Revue","collaborate":"Collaborer","join-a-session":"Participer à une session","leave-session":"Séance de congé","next":"Suivant","configure-3d-explanation-text-part-1":"Hey, ce n\'est pas disponible actuellement, mais si vous souhaitez bénéficier de cette fonctionnalité, veuillez nous le faire savoir en laissant un avis sur","github-issue":"numéro de github","add-new-field":"Ajouter un nouveau champ","remove-field":"Supprimer un champ","preview":"Aperçu","add-input":"Ajouter une entrée","text-input":"Saisie de texte","exclusive-choice":"Choix exclusif","drop-down-autocomplete":"Dropdown / Autocomplete","multiple-item-dropdown-autocomplete":"Éléments multiples Dropdown / Autocomplete","download-urls-dialog":"Cette transformation téléchargera toutes les urls de vos échantillons sur votre ordinateur, et modifiera les chemins d\'accès aux noms de fichiers. Ce n\'est généralement pas une bonne idée si vous collaborez avec d\'autres personnes, mais c\'est très utile si vous êtes sur le point de construire un modèle.","no-recent-items":"Pas d\'articles récents","explore-more":"En savoir plus","reopen-google-drive-picker":"Réouvrir Google Drive Picker","import-from-google-drive-explanation-text":"Assurez-vous que vos fichiers Google Drive sont disponibles via un lien","import-from-google-drive-explanation-bold-text":"Si vous ne le faites pas, les dossiers n\'apparaîtront pas lorsque vous étiqueterez","select-video-quality":"Choisir la qualité vidéo","desktop-only":"Bureau uniquement","auth-must-be-configured":"L\'authentification doit être configurée","must-be-signed-in":"Doit être authentifié","paste-urls":"Coller les URL","files-from-directory":"Fichiers du répertoire","import-text-snippets":"Importer des bribes de texte","import-toy-dataset":"Import Toy Dataset","import-from":"Importation de","import-from-cognito-s3":"Importer de S3 (Cognito)","export-to-cognito-s3":"Exporter vers S3 (Cognito)","import-from-s3":"Importer de S3 (IAM)","upload-to-s3":"Exporter vers S3","name":"Nom","type":"Tapez","size":"Taille","actions":"Actions","import":"Importer","sign-in":"Se connecter","complete-sign-up":"Compléter l\'inscription","complete-your-sign-up":"Complétez votre inscription","transform-local-files-to-web-urls-explanation":"Cette transformation téléchargera vos échantillons locaux dans le nuage Remarque : Cela peut prendre un certain temps.","convert-video-keyframes-to-samples":"Convertir des images clés vidéo en échantillons","transform-local-files-to-web-urls":"Transformer les fichiers locaux en URL Web","convert-video-frames-to-images":"Convertir des images vidéo en images","transform-video-frames-to-images-dialog-explanation-text":"Cette transformation convertira en image les échantillons qui font référence à une trame vidéo. C\'est une étape utile avant de créer un modèle. Vous ne pouvez convertir que les vidéos qui sont téléchargées sur votre ordinateur. Note : Cela peut prendre un peu de temps.","transform-video-keyframes-dialog-explanation-text":"Cette opération permettra de convertir les images clés d\'une vidéo en images individuelles de segmentation d\'images. Votre type d\'interface passera de \'video_segmentation\' à \'image_segmentation\'. Cette opération est parfois utile lors de la préparation des données vidéo pour un modèle de vision par ordinateur.","transform-video-keyframes-dialog-explanation-warning":"Pour l\'utiliser, vous devez étiqueter certaines images clés.","universal-data-viewer-interface-warning":"Cette interface n\'a pas été configurée correctement, essayez de sélectionner une interface dans l\'onglet \'Configuration\'.","setup-project":"Projet de mise en place","remember-me":"Se souvenir de moi","login-with":"Authentifier avec","about":"À propos","start":"Commencer","recent":"Récent","help":"Aide","github-repository":"Dépôt Github","youtube-channel":"Chaîne Youtube","logout":"Déconnexion","username":"Nom d\'utilisateur","password":"Mot de passe","star":"Étoile","check-this-wiki":"Voyez ce","guide-to-set-up-cognito":"guide pour configurer AWS Cognito avec Universal Data Tool","close":"Fermer","project-name":"Nom du projet","projects":"Projets","export-project":"Exporter un projet","create-project":"Créer un projet","warning-project-exist":"Avertissement : Le nom de ce projet est préexistant. Si vous continuer, \\n le projet existant sera remplacé.","has-samples-folder":"Assurez-vous que le projet a un répertoire \\"samples\\"","annotations":"Annotations","last-modified":"Dernière modification","select-project":"Sélectionner un projet","take-samples-from-project":"Prendre les échantillons du projet","annotation-processing":"Gestion des annotations","keep-both-annotations":"Garder tous types d\'annotations","keep-incoming-annotations":"Garder les nouvelles annotations","keep-current-annotations":"Garder les anciennes annotations","choose-file-type":"Choisir le type de fichier de données","load-image-file":"Télécharger les fichiers d\'images","load-pdf-file":"Télécharger les fichiers PDFs","load-text-file":"Télécharger les fichiers textes","load-audio-file":"Télécharger les fichiers audio","load-video-file":"Télécharger les fichiers vidéo","assets":"Fichiers de données","has-data-folder":"Assurez-vous que le projet a un répertoire \\"data\\"","load-assets":"Charger les fichiers de données","load-annotations":"Charger les annotations"}')),he=e(JSON.parse('{"starting-page-download-version":"下载版本","download":"下载中心","universaldatatool-description":"开源数据标签","new-file":"新文件","start-from-template":"从模板开始","open-file":"打开文件","open-collaborative-session":"公开合作会议","add-authentication":"添加认证","create-training-course":"创建培训课程","no-recent-files":"最近没有文件","downloading-and-installing-udt":"下载和安装UDT","labeling-images":"标签图片","start-page-about-first-paragraph":"通用数据工具(UDT)是一个开源的网络或可下载的工具,用于标记数据,以便在机器学习或数据处理系统中使用。","start-page-about-second-paragraph":"通用数据工具支持计算机视觉、自然语言处理(包括命名实体识别和音频转录)工作流程。","the-udt-uses-an":"UDT使用的是","start-page-about-third-paragraph":"可以很容易地被程序读取,作为机器学习算法的地真数据集。","open-a-template":"打开一个模板","to-see-how-the-udt-could-work-for-your-data":"看看UDT如何为您的数据工作。","edit-json":"编辑JSON","clear-labels":"Clear All Labels","telemetry":"遥测","custom-collaboration-server":"自定义协作服务器","label-help":"标签帮助","label-help-api-key":"标签帮助 API 密钥","an-error-has-occurred":"发生了一个错误","sample-brushes":"刷子样品","complete":"完整","review":"回顾","collaborate":"协作","join-a-session":"加入会议","leave-session":"休会","next":"下一个","configure-3d-explanation-text-part-1":"嘿,这是不是目前可用,但如果你想这个功能,请让我们知道,留下大拇指上的","github-issue":"github问题","add-new-field":"添加新领域","remove-field":"移除字段","preview":"Preview","add-input":"添加输入","text-input":"文本输入","exclusive-choice":"独家选择","drop-down-autocomplete":"下拉式/自动完成","multiple-item-dropdown-autocomplete":"多个项目下拉/自动完成","download-urls-dialog":"这个转换会将所有的URL从你的样本下载到你的电脑,并将路径改为文件名。如果您正在与他人合作,这通常不是一个好主意,但如果您要建立一个模型,这非常有用。","no-recent-items":"最近没有项目","explore-more":"探索更多","reopen-google-drive-picker":"重新打开Google Drive Picker","import-from-google-drive-explanation-text":"确保你的Google Drive文件可以通过链接获得。","import-from-google-drive-explanation-bold-text":"如果你不这样做,当你在标注时,文件将不会出现","select-video-quality":"选择视频质量","desktop-only":"仅限桌面","auth-must-be-configured":"必须配置Auth","must-be-signed-in":"必须签到","paste-urls":"粘贴URL","files-from-directory":"文件从目录","import-text-snippets":"导入文本片段","import-toy-dataset":"导入玩具数据集","import-from":"进口自","name":"名称","type":"种类","size":"尺寸","actions":"行动","import":"进口","sign-in":"登录","complete-sign-up":"完成注册","complete-your-sign-up":"完成您的注册","transform-local-files-to-web-urls-explanation":"此转换将把您的本地样本上传到云端 注意:这可能需要一点时间。","convert-video-keyframes-to-samples":"将视频关键帧转换为样本","transform-local-files-to-web-urls":"将本地文件转换为Web URL","convert-video-frames-to-images":"将视频帧转换为图像","transform-video-frames-to-images-dialog-explanation-text":"此转换将参考视频帧的样本转换为图像。这是创建模型之前的一个有用步骤。您只能转换下载到计算机上的视频。注意:这可能需要一点时间。","transform-video-keyframes-dialog-explanation-text":"此操作将把视频上设置的关键帧转换为单个图像分割帧。你的接口类型将从 \'video_segmentation \'变为 \'image_segmentation\'。这在为计算机视觉模型准备视频数据时有时会有帮助。","transform-video-keyframes-dialog-explanation-warning":"你需要给一些关键帧贴上标签才能使用。","universal-data-viewer-interface-warning":"这个接口没有正确设置,请尝试在 \'设置 \'选项卡中选择一个接口。","setup-project":"设置项目"}')),xe=e(JSON.parse('{"starting-page-download-version":"Baixar Versão","download":"Baixar","download-json":"Baixar JSON","download-csv":"Baixar CSV","universaldatatool-description":"Rotulador de dados de código aberto","new-file":"Novo arquivo","start-from-template":"Iniciar apartir de um modelo","open-file":"Abrir arquivo","open-collaborative-session":"Abrir sessão colaborativa","add-authentication":"Adicionar autenticação","create-training-course":"Criar um curso de treinamento","no-recent-files":"Sem arquivos recentes","downloading-and-installing-udt":"Baixando e instalando o UDT","labeling-images":"Rotulando imagens","start-page-about-first-paragraph":"O Universal Data Tool (UDT) é uma ferramenta web ou baixável de código aberto para rotulação de dados para uso em aprendizado de máquina ou em processamento de sistemas.","start-page-about-second-paragraph":"O Universal Data Tool tem suporte para visão computacional, fluxo de trabalho para processamento de linguagem natural (incluindo reconhecimento de entidade nomeada e transcrição de audio).","the-udt-uses-an":"O UDT usa uma","start-page-about-third-paragraph":"que pode ser facilmente lido por programas como um conjunto de dados verdadeiros para algoritmos de aprendizado de máquina.","open-a-template":"Abrir um modelo","to-see-how-the-udt-could-work-for-your-data":"para ver como o UDT pode trabalhar com seus dados.","edit-json":"Editar JSON","clear-labels":"Limpar todos os rótulos","telemetry":"Telemetria","custom-collaboration-server":"Servidor de colaboração personalizado","label-help":"Ajuda com Rótulo","label-help-api-key":"Ajudo com a chave da API do rótulo","an-error-has-occurred":"Ocorreu um erro","sample-brushes":"Pincéis de amostra","complete":"Completo","review":"Revisar","collaborate":"Colaborar","join-a-session":"Entrar em uma sessão","leave-session":"Sair da sessão","next":"Próximo","configure-3d-explanation-text-part-1":"Ei, isso ainda não está disponível, mas se você gostaria dessa funcionalidade for favor deixe nos saber deixando um gostei","github-issue":"Questão no GitHub","add-new-field":"Adicionar novo campo","remove-field":"Remover campo","preview":"Pré-visualizar","add-input":"Adicionar entrada","text-input":"Texto de entrada","exclusive-choice":"Escolha exclusiva","drop-down-autocomplete":"Drop-down / Auto completar","multiple-item-dropdown-autocomplete":"Drop-down vários itens / Auto completar","download-urls-dialog":"Essa transformação irá baixar todas urls de sua amostra para seu computador e muda o caminho de arquivos para nome de arquivo. Geralmente essa não é uma boa ideia caso você queria trabalhar em colaboração com outras pessoas, mas isso será muito útil se você quiser construir um modelo.","no-recent-items":"Sem itens recentes","explore-more":"Explorar mais","reopen-google-drive-picker":"Reabrir selecionador do Google drive","import-from-google-drive-explanation-text":"Tenha certeza que seus arquivos do google drive estão válidos através do link","import-from-google-drive-explanation-bold-text":"Se você achar melhor não, os arquivos não irão desaparecer quanto você fizer a rotulação","select-video-quality":"Selecione a qualidade de video","desktop-only":"Apenas para desktop","auth-must-be-configured":"Autenticação precisa ser configurada","must-be-signed-in":"Precisa estar logado","paste-urls":"Colar URLs","files-from-directory":"Arquivos de diretório","import-text-snippets":"Importar trechos de texto","import-toy-dataset":"Importar conjunto de dados de brinquedo","import-from":"Importar de","import-from-cognito-s3":"Importar do S3 (Cognito)","import-from-s3":"Importar do S3 (IAM)","upload-to-s3":"Enviar via S3","name":"Nome","type":"Tipo","size":"Tamanho","actions":"Ações","import":"Importar","sign-in":"Cadastrar","complete-sign-up":"Completar cadastro","complete-your-sign-up":"Complete seu cadastro","transform-local-files-to-web-urls-explanation":"Essa transformação irá enviar suas amostras locais para a nuvem. Aviso: Isso pode demorar um pouco.","convert-video-keyframes-to-samples":"Converter frames de video em amostras","transform-local-files-to-web-urls":"Transformar arquivos locais em web URLs","convert-video-frames-to-images":"Converter frames de video em imagens","transform-video-frames-to-images-dialog-explanation-text":"Essa trnasformação irá converter suas amostras que referenciam um frame de video em uma imagem. Isso pode ser útil para alguns passos anteriores à criação de modelo. Você pode apenas converter videos que estão baixados em seu computador. Aviso: Isso pode demorar um pouco.","transform-video-keyframes-dialog-explanation-text":"Essa operação irá converter os frames do video em uma imagem individual segmentada em frames. Seu tipo de interface irá mudar de \'video_segmentation\' para \'image_segmentation\'. As vezes isso é de grande ajuda para preparar seus dados de video para um modelo de visão computacional.","transform-video-keyframes-dialog-explanation-warning":"Você precisa rotular alguns frames para usar isso.","universal-data-viewer-interface-warning":"Essa interface não foi estabelecidade de forma apropriada, tente selecionar uma interface na aba de configuração.","setup-project":"Projeto de confuguração"}')),be=e(JSON.parse('{"starting-page-download-version":"Download Versie","download":"Download","download-json":"Download JSON","download-csv":"Download CSV","universaldatatool-description":"Open-Source Data Labelen","new-file":"Nieuw Bestand","start-from-template":"Gebruik Template","open-file":"Open Bestand","open-collaborative-session":"Open Samenwerkingssessie","add-authentication":"Authenticatie Toevoegen","create-training-course":"Creëer een Cursus","no-recent-files":"Geen Recente Bestanden","downloading-and-installing-udt":"UDT Sownloaden en Installeren","labeling-images":"Afbeeldingen Labelen","start-page-about-first-paragraph":"De Universal Data Tool (UDT) is een open-source tool voor het labelen van gegevens voor gebruik in machine learning of gegevens verwerkingssystemen. De tool heeft zowel een dekstop als web app.","start-page-about-second-paragraph":"De Universal Data Tool ondersteunt Computer Vision, Natural Language Processing (inclusief \'Named Entity Recognition\' en \'Audio Transcription\') workflows.","the-udt-uses-an":"The UDT gebruikt een","start-page-about-third-paragraph":"die gemakkelijk door programma\'s kan worden gelezen als een controle dataset voor machine learning algoritmes.","open-a-template":"Open een Template","to-see-how-the-udt-could-work-for-your-data":"om te zien hoe de UDT werkt voor uw gegevens.","edit-json":"Bewerk JSON","clear-labels":"Wis Alle Labels","telemetry":"Telemetrie","custom-collaboration-server":"Aangepaste Samenwerkings Server","label-help":"Label Hulp","label-help-api-key":"Label Hulp API code","an-error-has-occurred":"Er is een fout opgetreden","sample-brushes":"Sample Brushes","complete":"Afronden","review":"Beoordelen","collaborate":"Samenwerken","join-a-session":"Neem deel aan een sessie","leave-session":"Verlaat Sessie","next":"Volgende","configure-3d-explanation-text-part-1":"Hé, dit is momenteel nog niet beschikbaar, maar als je deze functionaliteit wilt, laat het ons dan weten door op het duimpje omhoog te klikken","github-issue":"github issue","add-new-field":"Nieuw Veld Toevoegen","remove-field":"Veld Verwijderen","preview":"Voorbeeld","add-input":"Invoer Toevoegen","text-input":"Tekst Toevoegen","exclusive-choice":"Exclusieve Keuze","drop-down-autocomplete":"Dropdown Menu / Automatisch Aanvullen","multiple-item-dropdown-autocomplete":"Meerdere items Dropdown Menu / Automatisch Aanvullen","download-urls-dialog":"Deze transformatie downloadt alle URL\'s van uw samples naar uw computer en verandert de paden naar bestandsnamen. Dit is meestal geen goed idee als u met anderen samenwerkt, maar het is erg handig als u op het punt staat een model te bouwen.","no-recent-items":"Geen Recente Items","explore-more":"Meer Ontdekken","reopen-google-drive-picker":"Open Google Drive menu opnieuw","import-from-google-drive-explanation-text":"Zorg ervoor dat uw Google Drive-bestanden beschikbaar zijn via een link","import-from-google-drive-explanation-bold-text":"Als u dat niet doet, worden de bestanden niet weergegeven tijdens het labelen","select-video-quality":"Selecteer Videokwaliteit","desktop-only":"Alleen Bureaublad","auth-must-be-configured":"Authentificatie moet worden geconfigureerd","must-be-signed-in":"U moet eerst inloggen","paste-urls":"Plak URL\'s","files-from-directory":"Bestanden uit Directory","import-text-snippets":"Importeer Tekstfragmenten","import-toy-dataset":"Importeer Voorbeeld Dataset","import-from":"Importeren van","import-from-cognito-s3":"Importeren vanuit S3 (Cognito)","import-from-s3":"Importeren vanuit S3 (IAM)","upload-to-s3":"Uploaden via S3","name":"Naam","type":"Type","size":"Grootte","actions":"Acties","import":"Importeren","sign-in":"Inloggen","complete-sign-up":"Voltooi Registratie","complete-your-sign-up":"Voltooi uw Registratie","transform-local-files-to-web-urls-explanation":"Deze transformatie uploadt uw lokale samples naar de cloud. Opmerking: dit kan even duren.","convert-video-keyframes-to-samples":"Converteer video keyframes naar voorbeelden","transform-local-files-to-web-urls":"Transformeer lokale bestanden naar web-URL\'s","convert-video-frames-to-images":"Converteer videoframes naar afbeeldingen","transform-video-frames-to-images-dialog-explanation-text":"Deze transformatie converteert samples die naar een videoframe verwijzen naar een afbeelding. Dit is een handige stap voordat u een model maakt. U kunt alleen video\'s converteren die op uw computer zijn gedownload. Let op: dit kan even duren.","transform-video-keyframes-dialog-explanation-text":"Met deze bewerking worden keyframes die op een video zijn ingesteld, geconverteerd naar afzonderlijke beeldsegmentatieframes. Uw interfacetype verandert van \'video_segmentation\' in \'image_segmentation\'. Dit is soms handig bij het voorbereiden van videogegevens voor een computervisiemodel.","transform-video-keyframes-dialog-explanation-warning":"U moet een aantal keyframes labelen om dit te gebruiken.","universal-data-viewer-interface-warning":"Deze interface is niet goed ingesteld, probeer een interface te selecteren op het tabblad \'Instellingen\'.","setup-project":"Project Opzetten"}'));B.use(M).use(z).init({fallbackLng:"en",debug:!1,interpolation:{escapeValue:!1},resources:{fr:{translation:ve},en:{translation:fe},cn:{translation:he},pt:{translation:xe},nl:{translation:be}}});var ye=function(e){var t=e.sample,o=e.interface,n=e.onExit,a=e.sampleIndex,i=e.onModifySample,r=e.disableHotkeys,l=(t||{}).annotation,s=void 0===l?null:l,d=s?"string"==typeof s?[s]:s:void 0;if(!o.labels)throw new Error("Labels not defined. Try defining some labels in Setup");var c=o.labels.map((function(e){return"string"==typeof e?{id:e,description:e,displayName:e}:e})).map((function(e){return e.displayName?e:me(me({},e),{},{displayName:e.id})}));return le.createElement(U,{key:a,type:"label-document",labels:c,multipleLabels:null==o?void 0:o.multiple,separatorRegex:null==o?void 0:o.wordSplitRegex,document:null==t?void 0:t.document,initialLabels:d,hotkeysEnabled:!r,onPrev:function(e){i(me(me({},t),{},{annotation:e})),n("go-to-previous")},onNext:function(e){i(me(me({},t),{},{annotation:e})),n("go-to-next")},onFinish:function(e){i(me(me({},t),{},{annotation:e})),n()}})},we=function(e){var t,o=[],n=0,a=L(e||[]);try{for(a.s();!(t=a.n()).done;){var i=t.value;i.label&&o.push({text:i.text,label:i.label,start:n,end:n+i.text.length}),n+=i.text.length}}catch(e){a.e(e)}finally{a.f()}return o},ke=function(e){var t,o=e.sequence,n=e.relationships,a=new Set((n||[]).flatMap((function(e){return[e.from,e.to]}))),i=[],r=0,l=L(o||[]);try{for(l.s();!(t=l.n()).done;){var s=t.value;(s.label||s.textId&&a.has(s.textId))&&i.push({text:s.text,textId:s.textId,label:s.label,start:r,end:r+s.text.length-1}),r+=s.text.length}}catch(e){l.e(e)}finally{l.f()}return{entities:i,relations:n}},Ee=function(e,t){if(t){var o=[];(t=P(t)).sort((function(e,t){return e.start-t.start}));for(var n=0,a=0;a0}))}},Se=function(e){var t=e.sample,o=e.interface,n=e.onModifySample,a=e.disableHotkeys,i=e.sampleIndex,r=e.onExit,l=(null==t?void 0:t.annotation)?Ee(null==t?void 0:t.document,null==t?void 0:t.annotation.entities):null;if(!(null==o?void 0:o.labels))throw new Error("Labels not defined. Try adding some labels in setup.");return le.createElement(U,{key:i,titleContent:le.createElement(R,{paddingLeft:4},"Sample ",i),type:"label-sequence",separatorRegex:null==o?void 0:o.wordSplitRegex,document:null==t?void 0:t.document,labels:null==o?void 0:o.labels,initialSequence:l,hotkeysEnabled:!a,onPrev:function(e){var o={entities:we(e)};n(me(me({},t),{},{annotation:o})),r("go-to-previous")},onNext:function(e){var o={entities:we(e)};n(me(me({},t),{},{annotation:o})),r("go-to-next")},onFinish:function(e){var o={entities:we(e)};n(me(me({},t),{},{annotation:o})),r()}})},Te=function(e){var t,o,n=e.sample,a=e.interface,i=e.onExit,r=e.onModifySample,l=e.disableHotkeys,s=e.sampleIndex,d=(null==n?void 0:n.annotation)?Ee(null==n?void 0:n.document,null==n||null===(t=n.annotation)||void 0===t?void 0:t.entities):void 0,c=(null==n||null===(o=n.annotation)||void 0===o?void 0:o.relations)||[];if(!(null==a?void 0:a.relationLabels))throw new Error("Relation labels not defined. Try adding some labels in setup.");return le.createElement(U,{key:s,titleContent:le.createElement(R,{paddingLeft:4},"Sample ",s),type:"label-relationships",separatorRegex:null==a?void 0:a.wordSplitRegex,document:null==n?void 0:n.document,entityLabels:null==a?void 0:a.entityLabels,relationshipLabels:null==a?void 0:a.relationLabels,initialSequence:d,initialRelationships:c,hotkeysEnabled:!l,onPrev:function(e){r(me(me({},n),{},{annotation:ke(e)})),i("go-to-previous")},onNext:function(e){r(me(me({},n),{},{annotation:ke(e)})),i("go-to-next")},onFinish:function(e){r(me(me({},n),{},{annotation:ke(e)})),i()}})};function Ce(){var e,t,o=(e=0,t=360,Math.floor(Math.random()*(t-e+1))+e);return"hsl(".concat(o.toString(),",").concat(100..toString(),"%,").concat(50..toString(),"%)")}var Ie=function(){return Math.random().toString().split(".")[1]},De=function(e){switch(e.regionType){case"bounding-box":return{id:e.id||Ie(),cls:e.classification,tags:e.labels,color:e.color||Ce(),type:"box",x:e.centerX-e.width/2,y:e.centerY-e.height/2,w:e.width,h:e.height};case"point":return{id:e.id||Ie(),type:"point",tags:e.labels,cls:e.classification,color:e.color||Ce(),x:e.x,y:e.y};case"polygon":return{id:e.id||Ie(),type:"polygon",tags:e.labels,cls:e.classification,color:e.color||Ce(),open:!1,points:e.points.map((function(e){return[e.x,e.y]}))};case"line":case"pixel-mask":throw new Error('Unsupported region "'.concat(JSON.stringify(e),'"'));case"keypoints":return{id:e.id||Ie(),type:"keypoints",keypointsDefinitionId:e.keypointsDefinitionId,points:e.points};default:return null}},Ae=function(e){switch(e.type){case"point":return{regionType:"point",id:e.id,x:e.x,y:e.y,classification:e.cls,labels:e.tags,color:e.color};case"box":return{regionType:"bounding-box",id:e.id,centerX:e.x+e.w/2,centerY:e.y+e.h/2,width:e.w,height:e.h,classification:e.cls,labels:e.tags,color:e.color};case"polygon":return{regionType:"polygon",id:e.id,classification:e.cls,labels:e.tags,color:e.color,points:e.points.map((function(e){var t=N(e,2);return{x:t[0],y:t[1]}}))};case"keypoints":return{id:e.id||Ie(),keypointsDefinitionId:e.keypointsDefinitionId,regionType:"keypoints",points:e.points};default:throw new Error('Unsupported riaRegion "'.concat(JSON.stringify(e),'"'))}},je=function(e){var t=e.title,o=e.taskDatum,n=e.index,a=e.output;o=o||{};var i=a?Array.isArray(a)?a.map(De):[De(a)]:void 0;if(o.imageUrl)return{src:o.imageUrl,name:t||"Sample ".concat(n),regions:i};if(o.videoUrl&&void 0!==o.videoFrameAt)return{src:o.videoUrl,frameTime:o.videoFrameAt,name:t||"Sample ".concat(n),regions:i};throw new Error('Task Datum not supported "'.concat(JSON.stringify(o),'"'))},qe=function(e){var t={};for(var o in e)t[o]={regions:e[o].regions.map(De)};return t},Ne={"bounding-box":"create-box",polygon:["create-polygon","create-expanding-line"],point:"create-point","allowed-area":"modify-allowed-area"},Le=oe("div")({"& .fullscreen":{height:"100%"}}),Pe={},Re=function(e){var t=e.sampleIndex,o=e.interface,n=e.sample,a=e.containerProps,i=void 0===a?Pe:a,r=e.onModifySample,l=de(!0),s=N(l,2),d=s[0],c=s[1],u=de("select"),m=N(u,2),p=m[0],g=m[1],f=o.regionTypesAllowed,v=void 0===f?["bounding-box"]:f,h=!Boolean(null==o?void 0:o.multipleRegionLabels),x="image_pixel_segmentation"===(null==o?void 0:o.type),b=j((function(e){var t=e.images[0],o=w?(t.regions||[]).map(Ae):je((t.regions||[])[0]),a=e.allowedArea||{},i=a.x,l=a.y,s=a.w,d=a.h;r(me(me({},n),{},{annotation:o},e.allowedArea?{allowedArea:{x:i,y:l,width:s,height:d}}:{}))})),y=se((function(){return x?{regionClsList:["background"].concat(o.labels||[]).map((function(e){return"string"==typeof e?e:e.id}))}:h?{regionClsList:(o.labels||[]).map((function(e){return"string"==typeof e?e:e.id}))}:{regionTagList:(o.labels||[]).map((function(e){return"string"==typeof e?e:e.id}))}}),[h,o.labels,x]),w=o.multipleRegions||void 0===o.multipleRegions,k=j((function(e,t){b(e),c(e.showTags),g(e.selectedTool),i.onExit(t)})),E=j((function(e){return k(e,"go-to-next")})),S=j((function(e){return k(e,"go-to-previous")})),T=se((function(){return[je({title:i.title||"Sample ".concat(t),taskDatum:n,output:n.annotation,selectedIndex:t})]}),[t,i.title]),C="image_pixel_segmentation"===o.type?void 0:se((function(){return["select"].concat(v.flatMap((function(e){return Ne[e]})).filter(Boolean))}),[v]),I=se((function(){if(!o.allowedArea&&!(null==n?void 0:n.allowedArea))return{x:0,y:0,w:1,h:1};var e=(null==n?void 0:n.allowedArea)||(null==o?void 0:o.allowedArea);return{x:e.x,y:e.y,w:e.width,h:e.height}}),[o.allowedArea,null==n?void 0:n.allowedArea]);return le.createElement(Le,{style:{height:i.height||"calc(100% - 70px)",minHeight:600,width:"100%"}},le.createElement(q,Object.assign({key:t,fullImageSegmentationMode:x,selectedImage:0,taskDescription:o.description,hideNext:i.hideNext,hidePrev:i.hidePrev,hideHeader:i.hideHeader,hideHeaderText:i.hideHeaderText,showTags:d},y,{autoSegmentationOptions:o.autoSegmentationEngine,allowedArea:I,onNextImage:E,onPrevImage:S,enabledTools:C,selectedTool:p,images:T,onExit:k})))},Ue=oe("div")({fontSize:24,fontWeight:"bold"}),Me=function(e){var t=e.children,o=e.onNext,n=e.onPrev,a=e.onRemoveSample,i=e.currentSampleIndex,r=void 0===i?0:i,l=e.numberOfSamples,s=void 0===l?1:l,d=e.globalSampleIndex,c=void 0===d?1:d,u=e.titleContent,m=e.onClickHeaderItem,p=se((function(){return[a&&{name:"Delete",icon:le.createElement(T,null),onClick:function(){return a(c)}},(r>0||n)&&{name:"Prev",onClick:n,disabled:0===r},{name:"Next",onClick:o},{name:"Save"}].filter(Boolean)}),[r,c,o,n,a]);return le.createElement(C,{headerLeftSide:void 0===u?le.createElement(R,{paddingLeft:2},le.createElement(Ue,null,"Sample"," ",s>1?"".concat(r," / ").concat(s):"".concat(c))):u,onClickHeaderItem:m,headerItems:p,iconSidebarItems:[],rightSidebarItems:[]},le.createElement(R,{padding:2,style:{width:"100%"}},t))},Oe=[V[600],F[600],G[600],W[600],J[600],K[600],Y[600],Q[600],V[600],X[600],Z[600]],ze="abcdefghijklmnopqrstuvwxyz1234567890".split(""),He=function(e){var t=e.id.split("").reduce((function(e,t,o){return e+(ze.indexOf(t)+1)}),0);return Oe[t%Oe.length]},Be=oe("div")({maxWidth:"100vw",display:"flex",flexDirection:"column"}),_e=oe("div")({position:"relative",display:"flex",flexGrow:1}),Ve=oe("img")({display:"inline-block",position:"absolute",left:0,top:0,width:"100%",height:"100%",objectFit:"contain"}),Fe=oe("div")({paddingLeft:50,paddingRight:50,marginTop:8,textAlign:"center",flexShrink:0}),Ge=oe(A)({margin:8,color:"#fff",fontSize:18,paddingRight:16,transition:"transform 50ms ease"}),We={},Je=[],Ke=function(e){var t=e.sampleIndex,o=e.interface,n=e.sample,a=e.containerProps,i=void 0===a?We:a,r=e.onModifySample,l=i.disableHotkeys;if(!o.labels)throw new Error("No labels defined. Add some labels in Setup to continue.");var s=de(null),d=N(s,2),c=d[0],u=d[1],m=de(Je),p=N(m,2),g=p[0],f=p[1],v=se((function(){return o.labels.map((function(e){return"string"==typeof e?{id:e,description:e}:e}))}),[o.labels]),h=j((function(e){r(me(me({},n),{},{annotation:g})),i.onExit&&i.onExit()})),x=j((function(){r(me(me({},n),{},{annotation:g})),i.onExit("go-to-next")})),b=j((function(){r(me(me({},n),{},{annotation:g})),i.onExit("go-to-previous")}));ce((function(){var e=setTimeout((function(){u(null)}),100);return function(){return clearTimeout(e)}}),[c]);var y=j((function(e){var t;u(e),t="string"!=typeof g&&(g||[]).includes(e.id)?I(g,e.id):o.multiple?g.concat([e.id]):e.id,f(t),!o.multiple&&t.length>0&&(r(me(me({},n),{},{annotation:t})),i.onExit("go-to-next"))}));ce((function(){var e=null==n?void 0:n.annotation;e||(e=[]),"string"==typeof e&&(e=[e]),f(e)}),[t,n]);var w=se((function(){if(l)return[{},{}];var e,t={" ":x,backspace:b,enter:h,rightarrow:x,leftarrow:b},o={},n=L(v);try{var a=function(){var n=e.value,a=n.id.split("").filter((function(e){return ze.includes(e)})).find((function(e){return!t[e.toLowerCase()]}));if(!a)return"continue";t[a]=function(){return y(n)},o[n.id]=a};for(n.s();!(e=n.n()).done;)a()}catch(e){n.e(e)}finally{n.f()}return[t,o]}),[v,y,h,x,b,l]),k=N(w,2),E=k[0],S=k[1];return ce((function(){if(!l){var e=function(e){var t=e.key.toLowerCase();E[t]&&E[t]()};return window.addEventListener("keydown",e),function(){window.removeEventListener("keydown",e)}}}),[E,l]),le.createElement(Me,Object.assign({},i,{onNext:x,onPrev:b,onRemoveSample:i.onRemoveSample,onClickHeaderItem:h,currentSampleIndex:t}),le.createElement(Be,{style:{height:i.height||"calc(100% - 70px)",minHeight:600}},le.createElement(_e,null,le.createElement(Ve,{src:null==n?void 0:n.imageUrl})),le.createElement(Fe,null,v.map((function(e){return le.createElement(Ge,{key:e.id,onClick:function(){return y(e)},style:{backgroundColor:He(e),transform:c===e?"scale(1.1,1.1)":void 0}},le.createElement(D,{style:{color:"#fff"},checked:"object"==typeof g?g.includes(e.id):g===e.id}),e.id,S[e.id]?" (".concat(S[e.id],")"):"")})))))},Ye={"bounding-box":"create-box",polygon:"create-polygon","full-segmentation":"create-polygon",point:"create-point"},Qe={},Xe=function(e){var t=e.interface,o=e.sampleIndex,n=e.sample,a=e.containerProps,i=void 0===a?Qe:a,r=e.onModifySample,l=t.regionTypesAllowed,s=void 0===l?["bounding-box"]:l,d=!Boolean(null==t?void 0:t.multipleRegionLabels),c=se((function(){return d?{regionClsList:(t.labels||[]).map((function(e){return"string"==typeof e?e:e.id}))}:{regionTagList:(t.labels||[]).map((function(e){return"string"==typeof e?e:e.id}))}}),[d,t.labels]),u=function(e){var t={};for(var o in e.keyframes)t[o]={regions:e.keyframes[o].regions.map(Ae)};return t},m=j((function(e){var t={keyframes:u(e)};r(me(me({},n),{},{annotation:t})),i.onExit&&i.onExit()})),p=j((function(e){var t={keyframes:u(e)};r(me(me({},n),{},{annotation:t})),i.onExit&&i.onExit("go-to-next")})),g=j((function(e){var t={keyframes:u(e)};r(me(me({},n),{},{annotation:t})),i.onExit&&i.onExit("go-to-previous")})),f=se((function(){return["select"].concat(s.map((function(e){return Ye[e]})).filter(Boolean))}),[s]);if(!n)throw new Error("No sample data provided selected");if(!n.videoUrl)throw new Error("Sample must have videoUrl");var v=n.annotation||{};return le.createElement("div",{style:{height:i.height||"calc(100vh - 70px)",width:"100%",minHeight:600}},le.createElement(q,Object.assign({key:o,taskDescription:t.description},c,{enabledTools:f,keyframes:qe((null==v?void 0:v.keyframes)||{}),onNextImage:p,onPrevImage:g,videoName:n.customId||"",videoTime:0,videoSrc:n.videoUrl,onExit:m})))},Ze=function(e){var t=e.sampleIndex,o=e.sample,n=e.interface,a=e.onModifySample,i=e.onExit;return le.createElement(U,{key:t,titleContent:le.createElement(R,{paddingLeft:4},"Sample ",t),type:"transcribe",audio:o.audioUrl,phraseBank:n.phraseBank,initialTranscriptionText:o.annotation||"",onPrev:function(e){a(me(me({},o),{},{annotation:e})),i("go-to-previous")},onNext:function(e){a(me(me({},o),{},{annotation:e})),i("go-to-next")},onFinish:function(e){a(me(me({},o),{},{annotation:e})),i()}})},$e=oe("div")({"& .fullscreen":{height:"100%"}}),et={},tt=["create-keypoints"],ot=function(e){e.sampleIndex;var t=e.interface,o=e.sampleIndex,n=e.sample,a=e.containerProps,i=void 0===a?et:a,r=e.onModifySample,l=j((function(e){var t=(e.images[0].regions||[]).map(Ae);r(me(me({},n),{},{annotation:t}))})),s=j((function(e,t){l(e),i.onExit&&i.onExit(t)})),d=j((function(e){l(e),s(e,"go-to-next")})),c=j((function(e){l(e),s(e,"go-to-previous")})),u=se((function(){return n?[je({title:i.title||"Sample ".concat(o),taskDatum:n,output:null==n?void 0:n.annotation})]:[]}),[o,i.title]);return le.createElement($e,{style:{height:i.height||"calc(100% - 70px)",minHeight:600,width:"100%"}},n?le.createElement(q,{key:o,keypointDefinitions:t.keypointDefinitions,selectedImage:0,taskDescription:t.description,onNextImage:d,onPrevImage:c,enabledTools:tt,images:u,onExit:s}):"loading...")},nt=oe("div")({maxWidth:"100vw",display:"flex",flexDirection:"column"}),at={},it=function(e){var t=e.sampleIndex,o=e.interface,n=e.sample,a=e.containerProps,i=void 0===a?at:a,r=e.onModifySample,l=de(n),s=N(l,2),d=s[0],c=s[1],u=j((function(){r(d),i.onExit&&i.onExit()})),m=j((function(){r(d),i.onExit("go-to-next")})),p=j((function(){r(d),i.onExit("go-to-previous")}));return le.createElement(Me,Object.assign({},i,{onNext:m,onPrev:p,onRemoveSample:i.onRemoveSample,onClickHeaderItem:u,currentSampleIndex:t}),le.createElement(nt,{style:{height:i.height||"calc(100% - 70px)",minHeight:600}},le.createElement(S,{sample:d,interface:o,onModifySample:c})))};function rt(e){var t=e.description,o=e.imageUrl,n=e.url,a=e.pdfUrl;return t||(o?".concat(o,")"):a?"[PDF Link](".concat(a,")")+''):n?"Use this [Link](".concat(n,")"):null)}var lt=ne({linkButtonContainer:{marginLeft:8,marginRight:8},linkButton:{textTransform:"none",cursor:"pointer",textDecoration:"underline"}}),st=function(e){var t=e.onClick,o=e.text,n=lt();return le.createElement("span",{className:n.linkButtonContainer},"(",le.createElement("span",{onClick:t,className:n.linkButton},o),")")},dt=k((function(e){return{footer:{backgroundColor:"#fff",marginTop:40},footerContent:{alignItems:"center",padding:20,display:"flex",justifyContent:"space-between"},footerBorder:{borderTop:"1px solid #ccc",marginLeft:20,marginRight:20},footerCount:{display:"inline-flex"},allSamplesButton:{color:"#fff",border:"1px solid rgba(255,255,255,0.5)",marginRight:10,paddingLeft:8},sampleIcon:{marginRight:8},menuButton:{marginRight:8,color:"#fff"},grow:{flexGrow:1},buttons:{"& > *":{margin:4}},description:{padding:10,"& img":{maxWidth:"calc(100% - 16px)",marginLeft:8,marginRight:8,maxHeight:600}},sectionHeader:{fontWeight:700,fontSize:12,padding:10,paddingTop:16,textTransform:"uppercase",color:$[600]},content:{padding:10}}})),ct=function(e){var t=e.hideDescription,o=void 0===t?'"true"'===window.localStorage.getItem("hideDescription"):t,n=(e.lastSampleExitText,e.onExit),a=e.requireCompleteToPressNext,i=void 0!==a&&a,r=(e.samples,e.minContentHeight),l=e.currentSampleIndex,s=e.totalSamples,k=e.onChangeSample,E=e.taskOutput,S=void 0===E?[]:E,T=e.description,C=e.children,I=dt(),D=de(o),j=N(D,2),q=j[0],L=j[1],P=function(e){window.localStorage.setItem("hideDescription",'"'.concat(e?"true":"false",'"')),L(e)},R=de(!1),U=N(R,2),M=U[0],O=U[1];return le.createElement(le.Fragment,null,le.createElement(w,{container:!0},!q&&le.createElement(w,{item:!0,xs:12,sm:12,md:6},le.createElement("div",{className:I.sectionHeader},"Description",le.createElement(st,{onClick:function(){return P(!0)},text:"hide"})),le.createElement("div",{className:I.description},le.createElement(y,{escapeHtml:!1,source:T}))),le.createElement(w,{item:!0,xs:12,sm:12,md:q?12:6},le.createElement("div",{className:I.sectionHeader},"Sample ",l+1,"/",s,q&&le.createElement(st,{onClick:function(){return P(!1)},text:"show description"}),s>1&&le.createElement(st,{onClick:function(){return O(!0)},text:"view all"}),n&&le.createElement(st,{onClick:function(){return n()},text:"exit without saving"})),le.createElement("div",{style:{minHeight:r},className:I.content},C)),s>1&&le.createElement(w,{item:!0,xs:12},le.createElement("div",{className:I.footer},le.createElement("div",{className:I.footerBorder}),le.createElement("div",{className:I.footerContent},le.createElement(A,{onClick:function(){return k((l-1+s)%s)}},le.createElement(x,null)," Prev Sample"),le.createElement(A,{onClick:function(){return O(!0)},className:I.footerCount},l+1," / ",s),le.createElement(A,{disabled:i&&!S[l],onClick:function(){return k((l+1)%s)}},i&&!S[l]?"Save to Continue":"Next Sample",le.createElement(b,null)))))),le.createElement(f,{open:M,anchor:"left",onClose:function(){return O(!1)}},le.createElement(g,{style:{minWidth:300}},le.createElement(c,null,"Samples"),d(0,s).map((function(e){return le.createElement(p,{style:{backgroundColor:e===l?$[200]:void 0},button:!0,onClick:function(){return k(e)}},le.createElement(m,{style:{color:e===l?V[500]:void 0}},S[e]?le.createElement(v,null):le.createElement(h,null)),le.createElement(u,null,"Sample ",e+1))})))))},ut=function(e){var t=e.containerProps,o=e.interface,n=e.sample,a=e.sampleIndex,i=e.onModifySample,r=n.surveyjs||o.surveyjs;if(!r)throw new Error("No survey/form created. Try adding some inputs in Setup");return le.createElement(ct,Object.assign({},t,{currentSampleIndex:a,taskOutput:null==n?void 0:n.annotation,description:rt(n)||(null==o?void 0:o.description)}),le.createElement(E,{key:a,variant:"flat",form:r,defaultAnswers:n.annotation||void 0,completeText:"Save & Next",onFinish:function(e){i(me(me({},n),{},{annotation:e})),t.onExit("go-to-next")}}))},mt=ne({root:{padding:50,textAlign:"center"},title:{margin:50},explain:{}}),pt=function(e){var t=e.title,o=e.description,n=e.children,a=mt();return le.createElement("div",{className:a.root},le.createElement(s,{variant:"h4",component:"div",className:a.title},t),le.createElement(s,{variant:"h6",component:"div",className:a.explain},o||n))},gt=function(){return le.createElement(pt,{title:"No Samples to Show"},"Make sure that ",le.createElement("code",null,"samples")," is defined and not empty.",le.createElement("br",null),le.createElement("br",null),"Need help setting up? ")},ft=function(e){var l=e.type,s=ue(e,["type"]);switch(l){case"image_label":case"image_segmentation":return le.createElement(r,s);case"audio_transcription":return le.createElement(n,s);case"data_entry":return le.createElement(a,s);case"text_entity_recognition":return le.createElement(i,s);case"3d_bounding_box":return le.createElement(t,s);default:return le.createElement(o,s)}},vt=oe("div")({fontSize:18,fontWeight:"bold",color:$[700],borderBottom:"1px solid ".concat($[300]),paddingBottom:8,marginBottom:8,paddingLeft:8}),ht=oe(A)({display:"flex",textAlign:"left",justifyContent:"flex-start",marginTop:8}),xt=function(e){var t=e.sample,o=e.interface,n=e.onModifySample,a=e.containerProps,i=e.sampleIndex,r=o.fields,s=de(),d=N(s,2),c=d[0],u=d[1],m=H().t;if(!r)throw new Error("No fields defined. Try adding a field in Setup");return c?le.createElement(bt,{interface:c.interface,sample:me(me({},t),{},{annotation:(t.annotation||{})[c.fieldName]}),onExit:function(){return u(null)},onModifySample:function(e){n(me(me({},t),{},{annotation:me(me({},t.annotation),{},l({},c.fieldName,e))})),u(null)}}):le.createElement(ct,Object.assign({},a,{currentSampleIndex:i,description:rt(t)||o.description}),le.createElement(vt,null,"Fields"),r.map((function(e,o){return le.createElement(ht,{key:e.fieldName,onClick:function(){u(me(me({},e),{},{index:o}))},fullWidth:!0,variant:"outlined"},le.createElement(ft,{style:{color:$[500],marginRight:16},type:e.interface.type}),e.fieldName,le.createElement(R,{flexGrow:1}),le.createElement(D,{checked:Boolean((t.annotation||{})[e.fieldName])}),le.createElement(b,null))})),le.createElement(ht,{onClick:function(){return a.onExit("go-to-next")},fullWidth:!0,variant:"outlined"},le.createElement(b,{style:{color:$[500],marginRight:16}}),m("next"),le.createElement(R,{flexGrow:1}),le.createElement(R,{height:"42px"}),le.createElement(b,null)))},bt=function(e){var t=e.interface,o=e.sample,n=e.onExit,a=e.loading,i=e.onRemoveSample,r=e.hideHeader,l=e.hideHeaderText,s=e.hideNext,d=e.hidePrev,c=e.hideDescription,u=e.disableHotkeys,m=void 0!==u&&u,p=e.title,g=e.sampleIndex,f=e.onModifySample,v=e.height,h=e.onClickSetup,x=H().t,b=se((function(){return{hideHeader:r,hideHeaderText:l,hideNext:s,hidePrev:d,hideDescription:c,title:p,onExit:n,onRemoveSample:i,height:v,disableHotkeys:m,globalSampleIndex:g}}),[r,l,s,d,c,p,v,n,m,i,g]);if(a)return le.createElement(pt,{title:"Loading Sample...",description:""});if(!(null==t?void 0:t.type))return le.createElement(pt,{title:"Set up your project to begin labeling",description:le.createElement("p",null,x("universal-data-viewer-interface-warning"),le.createElement("br",null),le.createElement("br",null),le.createElement(A,{color:"primary",variant:"contained",onClick:h},x("setup-project")))});if(!o)return le.createElement(gt,null);switch(null==t?void 0:t.type){case"data_entry":return le.createElement(ut,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"text_classification":return le.createElement(ye,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"text_entity_recognition":return le.createElement(Se,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"text_entity_relations":return le.createElement(Te,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"image_segmentation":case"image_pixel_segmentation":return le.createElement(Re,{containerProps:b,sampleIndex:g,interface:t,sample:o,onExit:n,onModifySample:f});case"image_classification":return le.createElement(Ke,{containerProps:b,sampleIndex:g,interface:t,sample:o,onExit:n,onModifySample:f});case"video_segmentation":return le.createElement(Xe,{containerProps:b,sampleIndex:g,interface:t,sample:o,onExit:n,onModifySample:f});case"composite":return le.createElement(xt,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"audio_transcription":return le.createElement(Ze,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"image_landmark_annotation":return le.createElement(ot,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});case"time_series":return le.createElement(it,{containerProps:b,sampleIndex:g,interface:t,sample:o,onModifySample:f,onExit:n});default:return'"'.concat(null==t?void 0:t.type,'" not supported')}},yt=function(e){var t=e.container,o=e.udt,n=ue(e,["container","udt"]);ie.render(le.createElement(ge,null,le.createElement(bt,me(me({},n),{},{dataset:o,onModifySample:function(e,t){n.onSaveSample&&n.onSaveSample(me(me({},o.samples[e]),{},{annotation:t}),e)}}))),"string"==typeof t?document.getElementById(t):t)};window.UniversalDataTool={open:yt,UniversalDataViewer:yt};
+//# sourceMappingURL=main.js.map
diff --git a/desktop/main.js.map b/desktop/main.js.map
new file mode 100644
index 00000000..2e7eb22a
--- /dev/null
+++ b/desktop/main.js.map
@@ -0,0 +1 @@
+{"mappings":"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","sources":["./node_modules/@parcel/scope-hoisting/lib/helpers.js","./src/components/Theme/index.js","./src/i18n/locales/en/translation.json","./src/i18n/locales/fr/translations.json","./src/i18n/locales/cn/translations.json","./src/i18n/locales/pt-br/translation.json","./src/i18n/locales/nl/translation.json","./src/i18n/index.js","./src/components/TextClassification/index.js","./src/components/TextEntityRecognition/convert-react-nlp-annotate-types.js","./src/components/TextEntityRecognition/index.js","./src/components/TextEntityRelations/index.js","./src/utils/ria-format.js","./src/components/ImageSegmentation/index.js","./src/components/WorkspaceContainer/index.js","./src/components/ImageClassification/index.js","./src/components/VideoSegmentation/index.js","./src/components/AudioTranscription/index.js","./src/components/ImageLandmarkAnnotation/index.js","./src/components/TimeSeries/index.js","./src/utils/get-task-description.js","./src/components/SampleContainer/LinkButton.js","./src/components/SampleContainer/index.js","./src/components/DataEntry/index.js","./src/components/BadDataset/index.js","./src/components/EmptySampleContainer/index.js","./src/components/InterfaceIcon/index.js","./src/components/Composite/index.js","./src/components/UniversalSampleEditor/index.js","./src/vanilla/index.js"],"sourcesContent":["var $parcel$global =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n\nfunction $parcel$interopDefault(a) {\n return a && a.__esModule ? a.default : a;\n}\n\nfunction $parcel$defineInteropFlag(a) {\n Object.defineProperty(a, '__esModule', {value: true});\n}\n\nfunction $parcel$export(e, n, v) {\n Object.defineProperty(e, n, {get: v, enumerable: true});\n}\n\nfunction $parcel$exportWildcard(dest, source) {\n Object.keys(source).forEach(function(key) {\n if (key === 'default' || key === '__esModule') {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function get() {\n return source[key];\n },\n });\n });\n\n return dest;\n}\n\nfunction $parcel$missingModule(name) {\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n}\n","import React from \"react\"\nimport createMuiTheme from \"@material-ui/core/styles/createMuiTheme\"\nimport { ThemeProvider } from \"@material-ui/core/styles\"\nimport \"./theme.css\"\nimport * as colors from \"@material-ui/core/colors\"\n\nconst theme = createMuiTheme({\n palette: {\n primary: colors.blue,\n secondary: colors.blue,\n },\n typography: {\n fontFamily: '\"Inter\", \"Roboto\", sans-serif',\n button: {\n textTransform: \"none\",\n },\n },\n})\n\nexport default ({ children }: any) => {\n return {children}\n}\n","{\n \"starting-page-download-version\": \"Download Version\",\n \"download\": \"Download\",\n \"download-json\": \"Download JSON\",\n \"download-csv\": \"Download CSV\",\n \"universaldatatool-description\": \"Open-Source Data Labeling tool\",\n \"new-file\": \"New File\",\n \"start-from-template\": \"Start from Template\",\n \"open-file\": \"Open File\",\n \"open-collaborative-session\": \"Open Collaborative Session\",\n \"add-authentication\": \"Add Authentification\",\n \"create-training-course\": \"Create a Training Course\",\n \"no-recent-files\": \"No Recent Files\",\n \"downloading-and-installing-udt\": \"Downloading and Installing UDT\",\n \"labeling-images\": \"Labeling Images\",\n \"start-page-about-first-paragraph\": \"The Universal Data Tool (UDT) is an open-source web or downloadable tool for labeling data for usage in machine learning or data processing systems.\",\n \"start-page-about-second-paragraph\": \"The Universal Data Tool supports Computer Vision, Natural Language Processing (including Named Entity Recognition and Audio Transcription) workflows.\",\n \"the-udt-uses-an\": \"The UDT uses an\",\n \"start-page-about-third-paragraph\": \"that can be easily read by programs as a ground-truth dataset for machine learning algorithms.\",\n \"open-a-template\": \"Open a template\",\n \"to-see-how-the-udt-could-work-for-your-data\": \"to see how the UDT could work for your data.\",\n \"edit-json\": \"Edit JSON\",\n \"clear-labels\": \"Clear All Labels\",\n \"telemetry\": \"Telemetry\",\n \"custom-collaboration-server\": \"Custom Collaboration Server\",\n \"label-help\": \"Label Help\",\n \"label-help-api-key\": \"Label Help API Key\",\n \"an-error-has-occurred\": \"An error has occurred\",\n \"sample-brushes\": \"Sample Brushes\",\n \"complete\": \"Complete\",\n \"review\": \"Review\",\n \"collaborate\": \"Collaborate\",\n \"join-a-session\": \"Join a Session\",\n \"leave-session\": \"Leave Session\",\n \"next\": \"Next\",\n \"configure-3d-explanation-text-part-1\": \"Hey, this isn't currently available, but if you'd like this functionality please let us know by leaving a thumbs up on\",\n \"github-issue\": \"github issue\",\n \"add-new-field\": \"Add New Field\",\n \"remove-field\": \"Remove Field\",\n \"preview\": \"Preview\",\n \"add-input\": \"Add Input\",\n \"text-input\": \"Text Input\",\n \"exclusive-choice\": \"Exclusive Choice\",\n \"drop-down-autocomplete\": \"Dropdown / Autocomplete\",\n \"multiple-item-dropdown-autocomplete\": \"Multiple Item Dropdown / Autocomplete\",\n \"download-urls-dialog\": \"This transformation will download all the urls from your samples to your computer, and change the paths to filenames. This is usually not a good idea if you're collaborating with others, but is very useful if you're about to build a model.\",\n \"no-recent-items\": \"No Recent Items\",\n \"explore-more\": \"Explore More\",\n \"reopen-google-drive-picker\": \"Reopen Google Drive Picker\",\n \"import-from-google-drive-explanation-text\": \"Make sure your Google Drive files are available via a link\",\n \"import-from-google-drive-explanation-bold-text\": \"If you don't, the files will not appear when you're labeling\",\n \"select-video-quality\": \"Select Video Quality\",\n \"desktop-only\": \"Desktop Only\",\n \"auth-must-be-configured\": \"Auth Must Be Configured\",\n \"must-be-signed-in\": \"Must Be Signed In\",\n \"paste-urls\": \"Paste URLs\",\n \"files-from-directory\": \"Files from Directory\",\n \"import-text-snippets\": \"Import Text Snippets\",\n \"import-toy-dataset\": \"Import Toy Dataset\",\n \"import-from\": \"Import from\",\n \"import-from-cognito-s3\": \"Import from S3 (Cognito)\",\n \"export-to-cognito-s3\": \"Export to S3 (Cognito)\",\n \"import-from-s3\": \"Import from S3 (IAM)\",\n \"upload-to-s3\": \"Upload via S3\",\n \"name\": \"Name\",\n \"type\": \"Type\",\n \"size\": \"Size\",\n \"actions\": \"Actions\",\n \"import\": \"Import\",\n \"sign-in\": \"Sign in\",\n \"complete-sign-up\": \"Complete Sign Up\",\n \"complete-your-sign-up\": \"Complete your Sign Up\",\n \"transform-local-files-to-web-urls-explanation\": \"This transformation will upload your local samples to the cloud Note: This can take a little while.\",\n \"convert-video-keyframes-to-samples\": \"Convert Video Keyframes to Samples\",\n \"transform-local-files-to-web-urls\": \"Transform Local Files to Web URLs\",\n \"convert-video-frames-to-images\": \"Convert Video Frames to Images\",\n \"transform-video-frames-to-images-dialog-explanation-text\": \"This transformation will convert samples that reference a video frame into an image. This is a useful step before creating a model. You can only convert videos that are downloaded on your computer. Note: This can take a little while.\",\n \"transform-video-keyframes-dialog-explanation-text\": \"This operation will convert keyframes set on a video into individual image segmentation frames. Your interface type will change from 'video_segmentation' into 'image_segmentation'. This is sometimes helpful when preparing video data for a computer vision model.\",\n \"transform-video-keyframes-dialog-explanation-warning\": \"You need to label some keyframes to use this.\",\n \"universal-data-viewer-interface-warning\": \"This interface hasn't been set up properly, try selecting an interface in the 'Setup' tab.\",\n \"setup-project\": \"Setup Project\",\n \"other-formats\": \"Other Formats\",\n \"import-from-coco\": \"Import from COCO\",\n \"remember-me\": \"Remember me\",\n \"login-with\": \"Login with\",\n \"about\": \"About\",\n \"start\": \"Start\",\n \"recent\": \"Recent\",\n \"help\": \"Help\",\n \"github-repository\": \"Github repository\",\n \"youtube-channel\": \"Youtube channel\",\n \"logout\": \"Logout\",\n \"username\": \"Username\",\n \"password\": \"Password\",\n \"star\": \"Star\",\n \"check-this-wiki\": \"Check this wiki\",\n \"guide-to-set-up-cognito\": \"guide for setting up AWS Cognito with the Universal Data Tool\",\n \"close\": \"Close\",\n \"project-name\": \"Project Name\",\n \"projects\": \"Projects\",\n \"export-project\": \"Export Project\",\n \"create-project\": \"Create Project\",\n \"warning-project-exist\": \"Warning : This project name already exist. If you continue the \\n existing project with the same name will be replaced\",\n \"has-samples-folder\": \"Make sure the project has \\\"samples\\\" folder\",\n \"annotations\": \"Annotations\",\n \"last-modified\": \"Last Modified\",\n \"select-project\": \"Select Project\",\n \"take-samples-from-project\": \"Take samples from project\",\n \"annotation-processing\": \"Annotation Processing\",\n \"keep-both-annotations\": \"Keep both annotations\",\n \"keep-incoming-annotations\": \"Keep incoming annotations\",\n \"keep-current-annotations\": \"Keep current annotations\",\n \"choose-file-type\": \"Choose file type\",\n \"load-image-file\": \"Load image file\",\n \"load-pdf-file\": \"Load PDF file\",\n \"load-text-file\": \"Load text file\",\n \"load-audio-file\": \"Load audio file\",\n \"load-video-file\": \"Load video file\",\n \"assets\": \"Assets\",\n \"has-data-folder\": \"Make sure the project has \\\"data\\\" folder\",\n \"load-assets\": \"Load Assets\",\n \"load-annotations\": \"Load Annotations\"\n}\n","{\n \"starting-page-download-version\": \"Version à télécharger\",\n \"download\": \"Télécharger\",\n \"universaldatatool-description\": \"Outil d'étiquetage des données open source\",\n \"new-file\": \"Nouveau dossier\",\n \"start-from-template\": \"Partir du modèle\",\n \"open-file\": \"Dossier public\",\n \"open-collaborative-session\": \"Session de collaboration ouverte\",\n \"add-authentication\": \"Ajouter l'authentification\",\n \"create-training-course\": \"Créer un cours de formation\",\n \"no-recent-files\": \"Aucun dossier récent\",\n \"downloading-and-installing-udt\": \"Téléchargement et installation d'UDT\",\n \"labeling-images\": \"Étiquetage des images\",\n \"start-page-about-first-paragraph\": \"Universal Data Tool (UDT) est un outil web ou téléchargeable à code open source pour l'étiquetage des données destinées à être utilisées dans l'apprentissage machine ou les systèmes de traitement des données.\",\n \"start-page-about-second-paragraph\": \"UDT prend en charge les flux de travail de la vision par ordinateur, du traitement du langage naturel (y compris la reconnaissance d'entités nommées et la transcription audio).\",\n \"the-udt-uses-an\": \"UDT utilise un\",\n \"start-page-about-third-paragraph\": \"qui peut être facilement lu par les programmes comme un ensemble de données de base pour les algorithmes d'apprentissage machine.\",\n \"open-a-template\": \"Ouvrir un modèle\",\n \"to-see-how-the-udt-could-work-for-your-data\": \"pour voir comment l'UDT pourrait fonctionner pour vos données.\",\n \"edit-json\": \"Modifier JSON\",\n \"clear-labels\": \"Effacer tous les labels\",\n \"telemetry\": \"Télémétrie\",\n \"custom-collaboration-server\": \"Serveur de collaboration personnalisée\",\n \"label-help\": \"Label Help\",\n \"label-help-api-key\": \"Label Help API Clé\",\n \"an-error-has-occurred\": \"Une erreur s'est produite\",\n \"sample-brushes\": \"Brosses à échantillons\",\n \"complete\": \"Compléter\",\n \"review\": \"Revue\",\n \"collaborate\": \"Collaborer\",\n \"join-a-session\": \"Participer à une session\",\n \"leave-session\": \"Séance de congé\",\n \"next\": \"Suivant\",\n \"configure-3d-explanation-text-part-1\": \"Hey, ce n'est pas disponible actuellement, mais si vous souhaitez bénéficier de cette fonctionnalité, veuillez nous le faire savoir en laissant un avis sur\",\n \"github-issue\": \"numéro de github\",\n \"add-new-field\": \"Ajouter un nouveau champ\",\n \"remove-field\": \"Supprimer un champ\",\n \"preview\": \"Aperçu\",\n \"add-input\": \"Ajouter une entrée\",\n \"text-input\": \"Saisie de texte\",\n \"exclusive-choice\": \"Choix exclusif\",\n \"drop-down-autocomplete\": \"Dropdown / Autocomplete\",\n \"multiple-item-dropdown-autocomplete\": \"Éléments multiples Dropdown / Autocomplete\",\n \"download-urls-dialog\": \"Cette transformation téléchargera toutes les urls de vos échantillons sur votre ordinateur, et modifiera les chemins d'accès aux noms de fichiers. Ce n'est généralement pas une bonne idée si vous collaborez avec d'autres personnes, mais c'est très utile si vous êtes sur le point de construire un modèle.\",\n \"no-recent-items\": \"Pas d'articles récents\",\n \"explore-more\": \"En savoir plus\",\n \"reopen-google-drive-picker\": \"Réouvrir Google Drive Picker\",\n \"import-from-google-drive-explanation-text\": \"Assurez-vous que vos fichiers Google Drive sont disponibles via un lien\",\n \"import-from-google-drive-explanation-bold-text\": \"Si vous ne le faites pas, les dossiers n'apparaîtront pas lorsque vous étiqueterez\",\n \"select-video-quality\": \"Choisir la qualité vidéo\",\n \"desktop-only\": \"Bureau uniquement\",\n \"auth-must-be-configured\": \"L'authentification doit être configurée\",\n \"must-be-signed-in\": \"Doit être authentifié\",\n \"paste-urls\": \"Coller les URL\",\n \"files-from-directory\": \"Fichiers du répertoire\",\n \"import-text-snippets\": \"Importer des bribes de texte\",\n \"import-toy-dataset\": \"Import Toy Dataset\",\n \"import-from\": \"Importation de\",\n \"import-from-cognito-s3\": \"Importer de S3 (Cognito)\",\n \"export-to-cognito-s3\": \"Exporter vers S3 (Cognito)\",\n \"import-from-s3\": \"Importer de S3 (IAM)\",\n \"upload-to-s3\": \"Exporter vers S3\",\n \"name\": \"Nom\",\n \"type\": \"Tapez\",\n \"size\": \"Taille\",\n \"actions\": \"Actions\",\n \"import\": \"Importer\",\n \"sign-in\": \"Se connecter\",\n \"complete-sign-up\": \"Compléter l'inscription\",\n \"complete-your-sign-up\": \"Complétez votre inscription\",\n \"transform-local-files-to-web-urls-explanation\": \"Cette transformation téléchargera vos échantillons locaux dans le nuage Remarque : Cela peut prendre un certain temps.\",\n \"convert-video-keyframes-to-samples\": \"Convertir des images clés vidéo en échantillons\",\n \"transform-local-files-to-web-urls\": \"Transformer les fichiers locaux en URL Web\",\n \"convert-video-frames-to-images\": \"Convertir des images vidéo en images\",\n \"transform-video-frames-to-images-dialog-explanation-text\": \"Cette transformation convertira en image les échantillons qui font référence à une trame vidéo. C'est une étape utile avant de créer un modèle. Vous ne pouvez convertir que les vidéos qui sont téléchargées sur votre ordinateur. Note : Cela peut prendre un peu de temps.\",\n \"transform-video-keyframes-dialog-explanation-text\": \"Cette opération permettra de convertir les images clés d'une vidéo en images individuelles de segmentation d'images. Votre type d'interface passera de 'video_segmentation' à 'image_segmentation'. Cette opération est parfois utile lors de la préparation des données vidéo pour un modèle de vision par ordinateur.\",\n \"transform-video-keyframes-dialog-explanation-warning\": \"Pour l'utiliser, vous devez étiqueter certaines images clés.\",\n \"universal-data-viewer-interface-warning\": \"Cette interface n'a pas été configurée correctement, essayez de sélectionner une interface dans l'onglet 'Configuration'.\",\n \"setup-project\": \"Projet de mise en place\",\n \"remember-me\": \"Se souvenir de moi\",\n \"login-with\": \"Authentifier avec\",\n \"about\": \"À propos\",\n \"start\": \"Commencer\",\n \"recent\": \"Récent\",\n \"help\": \"Aide\",\n \"github-repository\": \"Dépôt Github\",\n \"youtube-channel\": \"Chaîne Youtube\",\n \"logout\": \"Déconnexion\",\n \"username\": \"Nom d'utilisateur\",\n \"password\": \"Mot de passe\",\n \"star\": \"Étoile\",\n \"check-this-wiki\": \"Voyez ce\",\n \"guide-to-set-up-cognito\": \"guide pour configurer AWS Cognito avec Universal Data Tool\",\n \"close\": \"Fermer\",\n \"project-name\": \"Nom du projet\",\n \"projects\": \"Projets\",\n \"export-project\": \"Exporter un projet\",\n \"create-project\": \"Créer un projet\",\n \"warning-project-exist\": \"Avertissement : Le nom de ce projet est préexistant. Si vous continuer, \\n le projet existant sera remplacé.\",\n \"has-samples-folder\": \"Assurez-vous que le projet a un répertoire \\\"samples\\\"\",\n \"annotations\": \"Annotations\",\n \"last-modified\": \"Dernière modification\",\n \"select-project\": \"Sélectionner un projet\",\n \"take-samples-from-project\": \"Prendre les échantillons du projet\",\n \"annotation-processing\": \"Gestion des annotations\",\n \"keep-both-annotations\": \"Garder tous types d'annotations\",\n \"keep-incoming-annotations\": \"Garder les nouvelles annotations\",\n \"keep-current-annotations\": \"Garder les anciennes annotations\",\n \"choose-file-type\": \"Choisir le type de fichier de données\",\n \"load-image-file\": \"Télécharger les fichiers d'images\",\n \"load-pdf-file\": \"Télécharger les fichiers PDFs\",\n \"load-text-file\": \"Télécharger les fichiers textes\",\n \"load-audio-file\": \"Télécharger les fichiers audio\",\n \"load-video-file\": \"Télécharger les fichiers vidéo\",\n \"assets\": \"Fichiers de données\",\n \"has-data-folder\": \"Assurez-vous que le projet a un répertoire \\\"data\\\"\",\n \"load-assets\": \"Charger les fichiers de données\",\n \"load-annotations\": \"Charger les annotations\"\n}\n","{\n \"starting-page-download-version\": \"下载版本\",\n \"download\": \"下载中心\",\n \"universaldatatool-description\": \"开源数据标签\",\n \"new-file\": \"新文件\",\n \"start-from-template\": \"从模板开始\",\n \"open-file\": \"打开文件\",\n \"open-collaborative-session\": \"公开合作会议\",\n \"add-authentication\": \"添加认证\",\n \"create-training-course\": \"创建培训课程\",\n \"no-recent-files\": \"最近没有文件\",\n \"downloading-and-installing-udt\": \"下载和安装UDT\",\n \"labeling-images\": \"标签图片\",\n \"start-page-about-first-paragraph\": \"通用数据工具(UDT)是一个开源的网络或可下载的工具,用于标记数据,以便在机器学习或数据处理系统中使用。\",\n \"start-page-about-second-paragraph\": \"通用数据工具支持计算机视觉、自然语言处理(包括命名实体识别和音频转录)工作流程。\",\n \"the-udt-uses-an\": \"UDT使用的是\",\n \"start-page-about-third-paragraph\": \"可以很容易地被程序读取,作为机器学习算法的地真数据集。\",\n \"open-a-template\": \"打开一个模板\",\n \"to-see-how-the-udt-could-work-for-your-data\": \"看看UDT如何为您的数据工作。\",\n \"edit-json\": \"编辑JSON\",\n \"clear-labels\": \"Clear All Labels\",\n \"telemetry\": \"遥测\",\n \"custom-collaboration-server\": \"自定义协作服务器\",\n \"label-help\": \"标签帮助\",\n \"label-help-api-key\": \"标签帮助 API 密钥\",\n \"an-error-has-occurred\": \"发生了一个错误\",\n \"sample-brushes\": \"刷子样品\",\n \"complete\": \"完整\",\n \"review\": \"回顾\",\n \"collaborate\": \"协作\",\n \"join-a-session\": \"加入会议\",\n \"leave-session\": \"休会\",\n \"next\": \"下一个\",\n \"configure-3d-explanation-text-part-1\": \"嘿,这是不是目前可用,但如果你想这个功能,请让我们知道,留下大拇指上的\",\n \"github-issue\": \"github问题\",\n \"add-new-field\": \"添加新领域\",\n \"remove-field\": \"移除字段\",\n \"preview\": \"Preview\",\n \"add-input\": \"添加输入\",\n \"text-input\": \"文本输入\",\n \"exclusive-choice\": \"独家选择\",\n \"drop-down-autocomplete\": \"下拉式/自动完成\",\n \"multiple-item-dropdown-autocomplete\": \"多个项目下拉/自动完成\",\n \"download-urls-dialog\": \"这个转换会将所有的URL从你的样本下载到你的电脑,并将路径改为文件名。如果您正在与他人合作,这通常不是一个好主意,但如果您要建立一个模型,这非常有用。\",\n \"no-recent-items\": \"最近没有项目\",\n \"explore-more\": \"探索更多\",\n \"reopen-google-drive-picker\": \"重新打开Google Drive Picker\",\n \"import-from-google-drive-explanation-text\": \"确保你的Google Drive文件可以通过链接获得。\",\n \"import-from-google-drive-explanation-bold-text\": \"如果你不这样做,当你在标注时,文件将不会出现\",\n \"select-video-quality\": \"选择视频质量\",\n \"desktop-only\": \"仅限桌面\",\n \"auth-must-be-configured\": \"必须配置Auth\",\n \"must-be-signed-in\": \"必须签到\",\n \"paste-urls\": \"粘贴URL\",\n \"files-from-directory\": \"文件从目录\",\n \"import-text-snippets\": \"导入文本片段\",\n \"import-toy-dataset\": \"导入玩具数据集\",\n \"import-from\": \"进口自\",\n \"name\": \"名称\",\n \"type\": \"种类\",\n \"size\": \"尺寸\",\n \"actions\": \"行动\",\n \"import\": \"进口\",\n \"sign-in\": \"登录\",\n \"complete-sign-up\": \"完成注册\",\n \"complete-your-sign-up\": \"完成您的注册\",\n \"transform-local-files-to-web-urls-explanation\": \"此转换将把您的本地样本上传到云端 注意:这可能需要一点时间。\",\n \"convert-video-keyframes-to-samples\": \"将视频关键帧转换为样本\",\n \"transform-local-files-to-web-urls\": \"将本地文件转换为Web URL\",\n \"convert-video-frames-to-images\": \"将视频帧转换为图像\",\n \"transform-video-frames-to-images-dialog-explanation-text\": \"此转换将参考视频帧的样本转换为图像。这是创建模型之前的一个有用步骤。您只能转换下载到计算机上的视频。注意:这可能需要一点时间。\",\n \"transform-video-keyframes-dialog-explanation-text\": \"此操作将把视频上设置的关键帧转换为单个图像分割帧。你的接口类型将从 'video_segmentation '变为 'image_segmentation'。这在为计算机视觉模型准备视频数据时有时会有帮助。\",\n \"transform-video-keyframes-dialog-explanation-warning\": \"你需要给一些关键帧贴上标签才能使用。\",\n \"universal-data-viewer-interface-warning\": \"这个接口没有正确设置,请尝试在 '设置 '选项卡中选择一个接口。\",\n \"setup-project\": \"设置项目\"\n}\n","{\n \"starting-page-download-version\": \"Baixar Versão\",\n \"download\": \"Baixar\",\n \"download-json\": \"Baixar JSON\",\n \"download-csv\": \"Baixar CSV\",\n \"universaldatatool-description\": \"Rotulador de dados de código aberto\",\n \"new-file\": \"Novo arquivo\",\n \"start-from-template\": \"Iniciar apartir de um modelo\",\n \"open-file\": \"Abrir arquivo\",\n \"open-collaborative-session\": \"Abrir sessão colaborativa\",\n \"add-authentication\": \"Adicionar autenticação\",\n \"create-training-course\": \"Criar um curso de treinamento\",\n \"no-recent-files\": \"Sem arquivos recentes\",\n \"downloading-and-installing-udt\": \"Baixando e instalando o UDT\",\n \"labeling-images\": \"Rotulando imagens\",\n \"start-page-about-first-paragraph\": \"O Universal Data Tool (UDT) é uma ferramenta web ou baixável de código aberto para rotulação de dados para uso em aprendizado de máquina ou em processamento de sistemas.\",\n \"start-page-about-second-paragraph\": \"O Universal Data Tool tem suporte para visão computacional, fluxo de trabalho para processamento de linguagem natural (incluindo reconhecimento de entidade nomeada e transcrição de audio).\",\n \"the-udt-uses-an\": \"O UDT usa uma\",\n \"start-page-about-third-paragraph\": \"que pode ser facilmente lido por programas como um conjunto de dados verdadeiros para algoritmos de aprendizado de máquina.\",\n \"open-a-template\": \"Abrir um modelo\",\n \"to-see-how-the-udt-could-work-for-your-data\": \"para ver como o UDT pode trabalhar com seus dados.\",\n \"edit-json\": \"Editar JSON\",\n \"clear-labels\": \"Limpar todos os rótulos\",\n \"telemetry\": \"Telemetria\",\n \"custom-collaboration-server\": \"Servidor de colaboração personalizado\",\n \"label-help\": \"Ajuda com Rótulo\",\n \"label-help-api-key\": \"Ajudo com a chave da API do rótulo\",\n \"an-error-has-occurred\": \"Ocorreu um erro\",\n \"sample-brushes\": \"Pincéis de amostra\",\n \"complete\": \"Completo\",\n \"review\": \"Revisar\",\n \"collaborate\": \"Colaborar\",\n \"join-a-session\": \"Entrar em uma sessão\",\n \"leave-session\": \"Sair da sessão\",\n \"next\": \"Próximo\",\n \"configure-3d-explanation-text-part-1\": \"Ei, isso ainda não está disponível, mas se você gostaria dessa funcionalidade for favor deixe nos saber deixando um gostei\",\n \"github-issue\": \"Questão no GitHub\",\n \"add-new-field\": \"Adicionar novo campo\",\n \"remove-field\": \"Remover campo\",\n \"preview\": \"Pré-visualizar\",\n \"add-input\": \"Adicionar entrada\",\n \"text-input\": \"Texto de entrada\",\n \"exclusive-choice\": \"Escolha exclusiva\",\n \"drop-down-autocomplete\": \"Drop-down / Auto completar\",\n \"multiple-item-dropdown-autocomplete\": \"Drop-down vários itens / Auto completar\",\n \"download-urls-dialog\": \"Essa transformação irá baixar todas urls de sua amostra para seu computador e muda o caminho de arquivos para nome de arquivo. Geralmente essa não é uma boa ideia caso você queria trabalhar em colaboração com outras pessoas, mas isso será muito útil se você quiser construir um modelo.\",\n \"no-recent-items\": \"Sem itens recentes\",\n \"explore-more\": \"Explorar mais\",\n \"reopen-google-drive-picker\": \"Reabrir selecionador do Google drive\",\n \"import-from-google-drive-explanation-text\": \"Tenha certeza que seus arquivos do google drive estão válidos através do link\",\n \"import-from-google-drive-explanation-bold-text\": \"Se você achar melhor não, os arquivos não irão desaparecer quanto você fizer a rotulação\",\n \"select-video-quality\": \"Selecione a qualidade de video\",\n \"desktop-only\": \"Apenas para desktop\",\n \"auth-must-be-configured\": \"Autenticação precisa ser configurada\",\n \"must-be-signed-in\": \"Precisa estar logado\",\n \"paste-urls\": \"Colar URLs\",\n \"files-from-directory\": \"Arquivos de diretório\",\n \"import-text-snippets\": \"Importar trechos de texto\",\n \"import-toy-dataset\": \"Importar conjunto de dados de brinquedo\",\n \"import-from\": \"Importar de\",\n \"import-from-cognito-s3\": \"Importar do S3 (Cognito)\",\n \"import-from-s3\": \"Importar do S3 (IAM)\",\n \"upload-to-s3\": \"Enviar via S3\",\n \"name\": \"Nome\",\n \"type\": \"Tipo\",\n \"size\": \"Tamanho\",\n \"actions\": \"Ações\",\n \"import\": \"Importar\",\n \"sign-in\": \"Cadastrar\",\n \"complete-sign-up\": \"Completar cadastro\",\n \"complete-your-sign-up\": \"Complete seu cadastro\",\n \"transform-local-files-to-web-urls-explanation\": \"Essa transformação irá enviar suas amostras locais para a nuvem. Aviso: Isso pode demorar um pouco.\",\n \"convert-video-keyframes-to-samples\": \"Converter frames de video em amostras\",\n \"transform-local-files-to-web-urls\": \"Transformar arquivos locais em web URLs\",\n \"convert-video-frames-to-images\": \"Converter frames de video em imagens\",\n \"transform-video-frames-to-images-dialog-explanation-text\": \"Essa trnasformação irá converter suas amostras que referenciam um frame de video em uma imagem. Isso pode ser útil para alguns passos anteriores à criação de modelo. Você pode apenas converter videos que estão baixados em seu computador. Aviso: Isso pode demorar um pouco.\",\n \"transform-video-keyframes-dialog-explanation-text\": \"Essa operação irá converter os frames do video em uma imagem individual segmentada em frames. Seu tipo de interface irá mudar de 'video_segmentation' para 'image_segmentation'. As vezes isso é de grande ajuda para preparar seus dados de video para um modelo de visão computacional.\",\n \"transform-video-keyframes-dialog-explanation-warning\": \"Você precisa rotular alguns frames para usar isso.\",\n \"universal-data-viewer-interface-warning\": \"Essa interface não foi estabelecidade de forma apropriada, tente selecionar uma interface na aba de configuração.\",\n \"setup-project\": \"Projeto de confuguração\"\n}\n","{\n \"starting-page-download-version\": \"Download Versie\",\n \"download\": \"Download\",\n \"download-json\": \"Download JSON\",\n \"download-csv\": \"Download CSV\",\n \"universaldatatool-description\": \"Open-Source Data Labelen\",\n \"new-file\": \"Nieuw Bestand\",\n \"start-from-template\": \"Gebruik Template\",\n \"open-file\": \"Open Bestand\",\n \"open-collaborative-session\": \"Open Samenwerkingssessie\",\n \"add-authentication\": \"Authenticatie Toevoegen\",\n \"create-training-course\": \"Creëer een Cursus\",\n \"no-recent-files\": \"Geen Recente Bestanden\",\n \"downloading-and-installing-udt\": \"UDT Sownloaden en Installeren\",\n \"labeling-images\": \"Afbeeldingen Labelen\",\n \"start-page-about-first-paragraph\": \"De Universal Data Tool (UDT) is een open-source tool voor het labelen van gegevens voor gebruik in machine learning of gegevens verwerkingssystemen. De tool heeft zowel een dekstop als web app.\",\n \"start-page-about-second-paragraph\": \"De Universal Data Tool ondersteunt Computer Vision, Natural Language Processing (inclusief 'Named Entity Recognition' en 'Audio Transcription') workflows.\",\n \"the-udt-uses-an\": \"The UDT gebruikt een\",\n \"start-page-about-third-paragraph\": \"die gemakkelijk door programma's kan worden gelezen als een controle dataset voor machine learning algoritmes.\",\n \"open-a-template\": \"Open een Template\",\n \"to-see-how-the-udt-could-work-for-your-data\": \"om te zien hoe de UDT werkt voor uw gegevens.\",\n \"edit-json\": \"Bewerk JSON\",\n \"clear-labels\": \"Wis Alle Labels\",\n \"telemetry\": \"Telemetrie\",\n \"custom-collaboration-server\": \"Aangepaste Samenwerkings Server\",\n \"label-help\": \"Label Hulp\",\n \"label-help-api-key\": \"Label Hulp API code\",\n \"an-error-has-occurred\": \"Er is een fout opgetreden\",\n \"sample-brushes\": \"Sample Brushes\",\n \"complete\": \"Afronden\",\n \"review\": \"Beoordelen\",\n \"collaborate\": \"Samenwerken\",\n \"join-a-session\": \"Neem deel aan een sessie\",\n \"leave-session\": \"Verlaat Sessie\",\n \"next\": \"Volgende\",\n \"configure-3d-explanation-text-part-1\": \"Hé, dit is momenteel nog niet beschikbaar, maar als je deze functionaliteit wilt, laat het ons dan weten door op het duimpje omhoog te klikken\",\n \"github-issue\": \"github issue\",\n \"add-new-field\": \"Nieuw Veld Toevoegen\",\n \"remove-field\": \"Veld Verwijderen\",\n \"preview\": \"Voorbeeld\",\n \"add-input\": \"Invoer Toevoegen\",\n \"text-input\": \"Tekst Toevoegen\",\n \"exclusive-choice\": \"Exclusieve Keuze\",\n \"drop-down-autocomplete\": \"Dropdown Menu / Automatisch Aanvullen\",\n \"multiple-item-dropdown-autocomplete\": \"Meerdere items Dropdown Menu / Automatisch Aanvullen\",\n \"download-urls-dialog\": \"Deze transformatie downloadt alle URL's van uw samples naar uw computer en verandert de paden naar bestandsnamen. Dit is meestal geen goed idee als u met anderen samenwerkt, maar het is erg handig als u op het punt staat een model te bouwen.\",\n \"no-recent-items\": \"Geen Recente Items\",\n \"explore-more\": \"Meer Ontdekken\",\n \"reopen-google-drive-picker\": \"Open Google Drive menu opnieuw\",\n \"import-from-google-drive-explanation-text\": \"Zorg ervoor dat uw Google Drive-bestanden beschikbaar zijn via een link\",\n \"import-from-google-drive-explanation-bold-text\": \"Als u dat niet doet, worden de bestanden niet weergegeven tijdens het labelen\",\n \"select-video-quality\": \"Selecteer Videokwaliteit\",\n \"desktop-only\": \"Alleen Bureaublad\",\n \"auth-must-be-configured\": \"Authentificatie moet worden geconfigureerd\",\n \"must-be-signed-in\": \"U moet eerst inloggen\",\n \"paste-urls\": \"Plak URL's\",\n \"files-from-directory\": \"Bestanden uit Directory\",\n \"import-text-snippets\": \"Importeer Tekstfragmenten\",\n \"import-toy-dataset\": \"Importeer Voorbeeld Dataset\",\n \"import-from\": \"Importeren van\",\n \"import-from-cognito-s3\": \"Importeren vanuit S3 (Cognito)\",\n \"import-from-s3\": \"Importeren vanuit S3 (IAM)\",\n \"upload-to-s3\": \"Uploaden via S3\",\n \"name\": \"Naam\",\n \"type\": \"Type\",\n \"size\": \"Grootte\",\n \"actions\": \"Acties\",\n \"import\": \"Importeren\",\n \"sign-in\": \"Inloggen\",\n \"complete-sign-up\": \"Voltooi Registratie\",\n \"complete-your-sign-up\": \"Voltooi uw Registratie\",\n \"transform-local-files-to-web-urls-explanation\": \"Deze transformatie uploadt uw lokale samples naar de cloud. Opmerking: dit kan even duren.\",\n \"convert-video-keyframes-to-samples\": \"Converteer video keyframes naar voorbeelden\",\n \"transform-local-files-to-web-urls\": \"Transformeer lokale bestanden naar web-URL's\",\n \"convert-video-frames-to-images\": \"Converteer videoframes naar afbeeldingen\",\n \"transform-video-frames-to-images-dialog-explanation-text\": \"Deze transformatie converteert samples die naar een videoframe verwijzen naar een afbeelding. Dit is een handige stap voordat u een model maakt. U kunt alleen video's converteren die op uw computer zijn gedownload. Let op: dit kan even duren.\",\n \"transform-video-keyframes-dialog-explanation-text\": \"Met deze bewerking worden keyframes die op een video zijn ingesteld, geconverteerd naar afzonderlijke beeldsegmentatieframes. Uw interfacetype verandert van 'video_segmentation' in 'image_segmentation'. Dit is soms handig bij het voorbereiden van videogegevens voor een computervisiemodel.\",\n \"transform-video-keyframes-dialog-explanation-warning\": \"U moet een aantal keyframes labelen om dit te gebruiken.\",\n \"universal-data-viewer-interface-warning\": \"Deze interface is niet goed ingesteld, probeer een interface te selecteren op het tabblad 'Instellingen'.\",\n \"setup-project\": \"Project Opzetten\"\n}\n","import i18n from \"i18next\"\nimport { initReactI18next } from \"react-i18next\"\nimport enTranslation from \"./locales/en/translation.json\"\nimport frTranslation from \"./locales/fr/translations.json\"\nimport cnTranslation from \"./locales/cn/translations.json\"\nimport ptBrTranslation from \"./locales/pt-br/translation.json\"\nimport nlTranslation from \"./locales/nl/translation.json\"\n\nimport LanguageDetector from \"i18next-browser-languagedetector\"\n// not like to use this?\n// have a look at the Quick start guide\n// for passing in lng and translations on init\n\ni18n\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: \"en\",\n debug: false,\n\n interpolation: {\n escapeValue: false, // not needed for react as it escapes by default\n },\n\n resources: {\n fr: {\n translation: frTranslation,\n },\n en: {\n translation: enTranslation,\n },\n cn: {\n translation: cnTranslation,\n },\n pt: {\n translation: ptBrTranslation,\n },\n nl: {\n translation: nlTranslation,\n },\n },\n })\n\nexport default i18n\n","import React from \"react\"\nimport NLPAnnotator from \"react-nlp-annotate\"\n\nexport const TextClassification = ({\n sample,\n interface: iface,\n onExit,\n sampleIndex,\n onModifySample,\n disableHotkeys,\n}) => {\n const { annotation = null } = sample || {}\n\n const initialLabels = annotation\n ? typeof annotation === \"string\"\n ? [annotation]\n : annotation\n : undefined\n if (!iface.labels) {\n throw new Error(\"Labels not defined. Try defining some labels in Setup\")\n }\n let labels = iface.labels\n .map((l) =>\n typeof l === \"string\" ? { id: l, description: l, displayName: l } : l\n )\n .map((l) => (!l.displayName ? { ...l, displayName: l.id } : l))\n return (\n {\n onModifySample({ ...sample, annotation: result })\n onExit(\"go-to-previous\")\n }}\n onNext={(result) => {\n onModifySample({ ...sample, annotation: result })\n onExit(\"go-to-next\")\n }}\n onFinish={(result) => {\n onModifySample({ ...sample, annotation: result })\n onExit()\n }}\n />\n )\n}\n\nexport default TextClassification\n","export const simpleSequenceToEntitySequence = (simpleSeq) => {\n const entSeq = []\n let charsPassed = 0\n for (const seq of simpleSeq || []) {\n if (seq.label) {\n entSeq.push({\n text: seq.text,\n label: seq.label,\n start: charsPassed,\n end: charsPassed + seq.text.length,\n })\n }\n charsPassed += seq.text.length\n }\n return entSeq\n}\n\nexport const simpleSequenceAndRelationsToEntitySequence = ({\n sequence: simpleSeq,\n relationships,\n}) => {\n const textIdsInRelation = new Set(\n (relationships || []).flatMap((r) => [r.from, r.to])\n )\n\n const entSeq = []\n let charsPassed = 0\n for (const seq of simpleSeq || []) {\n if (seq.label || (seq.textId && textIdsInRelation.has(seq.textId))) {\n entSeq.push({\n text: seq.text,\n textId: seq.textId,\n label: seq.label,\n start: charsPassed,\n end: charsPassed + seq.text.length - 1,\n })\n }\n charsPassed += seq.text.length\n }\n return { entities: entSeq, relations: relationships }\n}\n\nexport const entitySequenceToSimpleSeq = (doc, entSeq) => {\n if (!entSeq) return undefined\n const simpleSeq = []\n entSeq = [...entSeq]\n entSeq.sort((a, b) => a.start - b.start)\n let nextEntity = 0\n for (let i = 0; i < doc.length; i++) {\n if ((entSeq[nextEntity] || {}).start === i) {\n simpleSeq.push({\n text: entSeq[nextEntity].text,\n label: entSeq[nextEntity].label,\n textId:\n entSeq[nextEntity].textId || Math.random().toString(36).slice(-6),\n })\n // i = entSeq[nextEntity].end\n i += entSeq[nextEntity].text.length - 1\n simpleSeq.push({ text: \"\" })\n nextEntity += 1\n } else {\n if (simpleSeq.length === 0 || simpleSeq[simpleSeq.length - 1].label) {\n simpleSeq.push({\n text: doc[i],\n textId: Math.random().toString(36).slice(-6),\n })\n } else {\n simpleSeq[simpleSeq.length - 1].text += doc[i]\n }\n }\n }\n if (simpleSeq.map((s) => s.text).join(\"\") !== doc) {\n throw new Error(\n \"Combining annotation entities with document didn't match document.\\n\\n\" +\n simpleSeq.map((s) => s.text).join(\"\") +\n \"\\n\\nvs\\n\\n\" +\n doc\n )\n }\n return simpleSeq.filter((item) => item.text.length > 0)\n}\n","import React from \"react\"\nimport NLPAnnotator from \"react-nlp-annotate\"\nimport Box from \"@material-ui/core/Box\"\nimport {\n simpleSequenceToEntitySequence,\n entitySequenceToSimpleSeq,\n} from \"./convert-react-nlp-annotate-types\"\n\nexport const TextEntityRecognition = ({\n sample,\n interface: iface,\n onModifySample,\n disableHotkeys,\n sampleIndex,\n onExit,\n}) => {\n const initialSequence = sample?.annotation\n ? entitySequenceToSimpleSeq(sample?.document, sample?.annotation.entities)\n : null\n\n if (!iface?.labels) {\n throw new Error(\"Labels not defined. Try adding some labels in setup.\")\n }\n\n return (\n Sample {sampleIndex}}\n type=\"label-sequence\"\n separatorRegex={iface?.wordSplitRegex}\n document={sample?.document}\n labels={iface?.labels}\n initialSequence={initialSequence}\n hotkeysEnabled={!disableHotkeys}\n onPrev={(result) => {\n const annotation = {\n entities: simpleSequenceToEntitySequence(result),\n }\n onModifySample({ ...sample, annotation })\n onExit(\"go-to-previous\")\n }}\n onNext={(result) => {\n const annotation = {\n entities: simpleSequenceToEntitySequence(result),\n }\n onModifySample({ ...sample, annotation })\n onExit(\"go-to-next\")\n }}\n onFinish={(result) => {\n const annotation = {\n entities: simpleSequenceToEntitySequence(result),\n }\n onModifySample({ ...sample, annotation })\n onExit()\n }}\n />\n )\n}\n\nexport default TextEntityRecognition\n","import React from \"react\"\nimport NLPAnnotator from \"react-nlp-annotate\"\nimport Box from \"@material-ui/core/Box\"\nimport {\n simpleSequenceAndRelationsToEntitySequence,\n entitySequenceToSimpleSeq,\n} from \"../TextEntityRecognition/convert-react-nlp-annotate-types\"\n\nexport const TextEntityRelations = ({\n sample,\n interface: iface,\n onExit,\n onModifySample,\n disableHotkeys,\n sampleIndex,\n}) => {\n const initialSequence = sample?.annotation\n ? entitySequenceToSimpleSeq(sample?.document, sample?.annotation?.entities)\n : undefined\n\n const initialRelations = sample?.annotation?.relations || []\n\n if (!iface?.relationLabels) {\n throw new Error(\n \"Relation labels not defined. Try adding some labels in setup.\"\n )\n }\n\n return (\n Sample {sampleIndex}}\n type=\"label-relationships\"\n separatorRegex={iface?.wordSplitRegex}\n document={sample?.document}\n entityLabels={iface?.entityLabels}\n relationshipLabels={iface?.relationLabels}\n initialSequence={initialSequence}\n initialRelationships={initialRelations}\n hotkeysEnabled={!disableHotkeys}\n onPrev={(result) => {\n onModifySample({\n ...sample,\n annotation: simpleSequenceAndRelationsToEntitySequence(result),\n })\n onExit(\"go-to-previous\")\n }}\n onNext={(result) => {\n onModifySample({\n ...sample,\n annotation: simpleSequenceAndRelationsToEntitySequence(result),\n })\n onExit(\"go-to-next\")\n }}\n onFinish={(result) => {\n onModifySample({\n ...sample,\n annotation: simpleSequenceAndRelationsToEntitySequence(result),\n })\n onExit()\n }}\n />\n )\n}\n\nexport default TextEntityRelations\n","// @flow\n\n// RIA = React Image Annotate\n\nexport function getRandomInt(min, max) {\n return Math.floor(Math.random() * (max - min + 1)) + min\n}\n\nexport function getRandomColor() {\n var h = getRandomInt(0, 360)\n var s = 100\n var l = 50\n return \"hsl(\"\n .concat(h.toString(), \",\")\n .concat(s.toString(), \"%,\")\n .concat(l.toString(), \"%)\")\n}\n\nexport const rid = () => Math.random().toString().split(\".\")[1]\n\nexport const convertToRIARegionFmt = (region) => {\n switch (region.regionType) {\n case \"bounding-box\": {\n return {\n id: region.id || rid(),\n cls: region.classification,\n tags: region.labels,\n color: region.color || getRandomColor(),\n type: \"box\",\n x: region.centerX - region.width / 2,\n y: region.centerY - region.height / 2,\n w: region.width,\n h: region.height,\n }\n }\n case \"point\": {\n return {\n id: region.id || rid(),\n type: \"point\",\n tags: region.labels,\n cls: region.classification,\n color: region.color || getRandomColor(),\n x: region.x,\n y: region.y,\n }\n }\n case \"polygon\": {\n return {\n id: region.id || rid(),\n type: \"polygon\",\n tags: region.labels,\n cls: region.classification,\n color: region.color || getRandomColor(),\n open: false,\n points: region.points.map((p) => [p.x, p.y]),\n }\n }\n case \"line\":\n case \"pixel-mask\": {\n throw new Error(`Unsupported region \"${JSON.stringify(region)}\"`)\n }\n case \"keypoints\": {\n return {\n id: region.id || rid(),\n type: \"keypoints\",\n keypointsDefinitionId: region.keypointsDefinitionId,\n points: region.points,\n }\n }\n default:\n return null\n }\n}\n\nexport const convertFromRIARegionFmt = (riaRegion) => {\n switch (riaRegion.type) {\n case \"point\": {\n return {\n regionType: \"point\",\n id: riaRegion.id,\n x: riaRegion.x,\n y: riaRegion.y,\n classification: riaRegion.cls,\n labels: riaRegion.tags,\n color: riaRegion.color,\n }\n }\n case \"box\": {\n return {\n regionType: \"bounding-box\",\n id: riaRegion.id,\n centerX: riaRegion.x + riaRegion.w / 2,\n centerY: riaRegion.y + riaRegion.h / 2,\n width: riaRegion.w,\n height: riaRegion.h,\n classification: riaRegion.cls,\n labels: riaRegion.tags,\n color: riaRegion.color,\n }\n }\n case \"polygon\": {\n return {\n regionType: \"polygon\",\n id: riaRegion.id,\n classification: riaRegion.cls,\n labels: riaRegion.tags,\n color: riaRegion.color,\n points: riaRegion.points.map(([x, y]) => ({ x, y })),\n }\n }\n case \"keypoints\": {\n return {\n id: riaRegion.id || rid(),\n keypointsDefinitionId: riaRegion.keypointsDefinitionId,\n regionType: \"keypoints\",\n points: riaRegion.points,\n }\n }\n default:\n throw new Error(`Unsupported riaRegion \"${JSON.stringify(riaRegion)}\"`)\n }\n}\n\nexport const convertToRIAImageFmt = ({\n title,\n taskDatum: td,\n index: i,\n output,\n}) => {\n td = td || {}\n const regions = !output\n ? undefined\n : Array.isArray(output)\n ? output.map(convertToRIARegionFmt)\n : [convertToRIARegionFmt(output)]\n\n if (td.imageUrl) {\n return {\n src: td.imageUrl,\n name: title || `Sample ${i}`,\n regions,\n }\n } else if (td.videoUrl && td.videoFrameAt !== undefined) {\n return {\n src: td.videoUrl,\n frameTime: td.videoFrameAt,\n name: title || `Sample ${i}`,\n regions,\n }\n }\n throw new Error(`Task Datum not supported \"${JSON.stringify(td)}\"`)\n}\n\nexport const convertToRIAKeyframes = (keyframes) => {\n const newKeyframes = {}\n for (const key in keyframes) {\n newKeyframes[key] = {\n regions: keyframes[key].regions.map(convertToRIARegionFmt),\n }\n }\n return newKeyframes\n}\n","// @flow\n\nimport React, { useState, useMemo } from \"react\"\nimport Annotator from \"react-image-annotate\"\nimport { styled } from \"@material-ui/core/styles\"\nimport useEventCallback from \"use-event-callback\"\nimport {\n convertFromRIARegionFmt,\n convertToRIAImageFmt,\n} from \"../../utils/ria-format.js\"\n\nconst regionTypeToTool = {\n \"bounding-box\": \"create-box\",\n polygon: [\"create-polygon\", \"create-expanding-line\"],\n point: \"create-point\",\n \"allowed-area\": \"modify-allowed-area\",\n}\n\nconst Container = styled(\"div\")({\n \"& .fullscreen\": { height: \"100%\" },\n})\n\nconst emptyObj = {}\n\nexport default ({\n sampleIndex,\n interface: iface,\n sample,\n containerProps = emptyObj,\n onModifySample,\n}) => {\n const [showTags, changeShowTags] = useState(true)\n const [selectedTool, changeSelectedTool] = useState(\"select\")\n\n const { regionTypesAllowed = [\"bounding-box\"] } = iface\n\n const isClassification = !Boolean(iface?.multipleRegionLabels)\n const isPixel = iface?.type === \"image_pixel_segmentation\"\n\n const saveCurrentIndexAnnotation = useEventCallback((output) => {\n const img = output.images[0]\n const annotation = multipleRegions\n ? (img.regions || []).map(convertFromRIARegionFmt)\n : convertToRIAImageFmt((img.regions || [])[0])\n const { x, y, w: width, h: height } = output.allowedArea || {}\n\n onModifySample({\n ...sample,\n annotation,\n ...(output.allowedArea\n ? {\n allowedArea: { x, y, width, height },\n }\n : {}),\n })\n })\n\n const labelProps = useMemo(\n () =>\n isPixel\n ? {\n regionClsList: [\"background\"]\n .concat(iface.labels || [])\n .map((l) => (typeof l === \"string\" ? l : l.id)),\n }\n : isClassification\n ? {\n regionClsList: (iface.labels || []).map((l) =>\n typeof l === \"string\" ? l : l.id\n ),\n }\n : {\n regionTagList: (iface.labels || []).map((l) =>\n typeof l === \"string\" ? l : l.id\n ),\n },\n [isClassification, iface.labels, isPixel]\n )\n\n const multipleRegions =\n iface.multipleRegions || iface.multipleRegions === undefined\n\n const onExit = useEventCallback((output, nextAction) => {\n saveCurrentIndexAnnotation(output)\n changeShowTags(output.showTags)\n changeSelectedTool(output.selectedTool)\n containerProps.onExit(nextAction)\n })\n\n const onNextImage = useEventCallback((output) => onExit(output, \"go-to-next\"))\n const onPrevImage = useEventCallback((output) =>\n onExit(output, \"go-to-previous\")\n )\n\n const singleImageList = useMemo(() => {\n return [\n convertToRIAImageFmt({\n title: containerProps.title || `Sample ${sampleIndex}`,\n taskDatum: sample,\n output: sample.annotation,\n selectedIndex: sampleIndex,\n }),\n ]\n // eslint-disable-next-line\n }, [sampleIndex, containerProps.title])\n\n const enabledTools =\n iface.type === \"image_pixel_segmentation\"\n ? undefined\n : useMemo(\n () =>\n [\"select\"].concat(\n regionTypesAllowed\n .flatMap((rt) => regionTypeToTool[rt])\n .filter(Boolean)\n ),\n [regionTypesAllowed]\n )\n\n const allowedArea = useMemo(() => {\n if (!iface.allowedArea && !sample?.allowedArea)\n return { x: 0, y: 0, w: 1, h: 1 }\n const { x, y, width: w, height: h } =\n sample?.allowedArea || iface?.allowedArea\n return { x, y, w, h }\n // eslint-disable-next-line\n }, [iface.allowedArea, sample?.allowedArea])\n\n return (\n \n \n \n )\n}\n","// @flow\n\nimport React, { useMemo } from \"react\"\nimport Box from \"@material-ui/core/Box\"\nimport Workspace from \"react-material-workspace-layout/Workspace\"\nimport { styled } from \"@material-ui/core/styles\"\nimport DeleteIcon from \"@material-ui/icons/Delete\"\n\nconst HeaderLeftSideContainer = styled(\"div\")({\n fontSize: 24,\n fontWeight: \"bold\",\n})\n\nexport default ({\n children,\n onNext,\n onPrev,\n onRemoveSample,\n currentSampleIndex = 0,\n numberOfSamples = 1,\n globalSampleIndex = 1,\n titleContent,\n onClickHeaderItem,\n}: any) => {\n const headerItems = useMemo(\n () =>\n [\n onRemoveSample && {\n name: \"Delete\",\n icon: ,\n onClick: () => onRemoveSample(globalSampleIndex),\n },\n (currentSampleIndex > 0 || onPrev) && {\n name: \"Prev\",\n onClick: onPrev,\n disabled: currentSampleIndex === 0,\n },\n {\n name: \"Next\",\n onClick: onNext,\n },\n { name: \"Save\" },\n ].filter(Boolean),\n [currentSampleIndex, globalSampleIndex, onNext, onPrev, onRemoveSample]\n )\n return (\n \n \n Sample{\" \"}\n {numberOfSamples > 1\n ? `${currentSampleIndex} / ${numberOfSamples}`\n : `${globalSampleIndex}`}\n \n \n ) : (\n titleContent\n )\n }\n onClickHeaderItem={onClickHeaderItem}\n headerItems={headerItems}\n iconSidebarItems={[]}\n rightSidebarItems={[]}\n >\n \n {children}\n \n \n )\n}\n","// @flow\n\nimport React, { useState, useEffect, useMemo } from \"react\"\nimport useEventCallback from \"use-event-callback\"\nimport { styled } from \"@material-ui/core/styles\"\nimport Button from \"@material-ui/core/Button\"\nimport * as colors from \"@material-ui/core/colors\"\nimport Checkbox from \"@material-ui/core/Checkbox\"\nimport without from \"lodash/without\"\nimport WorkspaceContainer from \"../WorkspaceContainer\"\n\nconst brightColors = [\n colors.blue[600],\n colors.green[600],\n colors.red[600],\n colors.deepOrange[600],\n colors.pink[600],\n colors.teal[600],\n colors.deepPurple[600],\n colors.indigo[600],\n colors.blue[600],\n colors.cyan[600],\n colors.purple[600],\n]\n\nconst letters = \"abcdefghijklmnopqrstuvwxyz1234567890\".split(\"\")\nconst getRandomColor = (label) => {\n const hashInt = label.id\n .split(\"\")\n .reduce((acc, v, i) => acc + (letters.indexOf(v) + 1), 0)\n return brightColors[hashInt % brightColors.length]\n}\n\nconst Container = styled(\"div\")({\n maxWidth: \"100vw\",\n display: \"flex\",\n flexDirection: \"column\",\n})\n\nconst ImageContainer = styled(\"div\")({\n position: \"relative\",\n display: \"flex\",\n flexGrow: 1,\n})\n\nconst Image = styled(\"img\")({\n display: \"inline-block\",\n position: \"absolute\",\n left: 0,\n top: 0,\n width: \"100%\",\n height: \"100%\",\n objectFit: \"contain\",\n})\n\nconst ButtonsContainer = styled(\"div\")({\n paddingLeft: 50,\n paddingRight: 50,\n marginTop: 8,\n textAlign: \"center\",\n flexShrink: 0,\n})\n\nconst CheckButton = styled(Button)({\n margin: 8,\n color: \"#fff\",\n fontSize: 18,\n paddingRight: 16,\n transition: \"transform 50ms ease\",\n})\n\nconst [emptyObj, emptyArr] = [{}, []]\n\nexport const ImageClassification = ({\n sampleIndex,\n interface: iface,\n sample,\n containerProps = emptyObj,\n onModifySample,\n}) => {\n const disableHotkeys = containerProps.disableHotkeys\n\n if (!iface.labels)\n throw new Error(\"No labels defined. Add some labels in Setup to continue.\")\n\n const [enlargedLabel, changeEnlargedLabel] = useState(null)\n const [currentOutput, changeCurrentOutput] = useState(emptyArr)\n const labels = useMemo(\n () =>\n iface.labels.map((l) =>\n typeof l === \"string\" ? { id: l, description: l } : l\n ),\n [iface.labels]\n )\n\n const onDone = useEventCallback((output) => {\n onModifySample({ ...sample, annotation: currentOutput })\n if (containerProps.onExit) containerProps.onExit()\n })\n const onNext = useEventCallback(() => {\n onModifySample({ ...sample, annotation: currentOutput })\n containerProps.onExit(\"go-to-next\")\n })\n const onPrev = useEventCallback(() => {\n onModifySample({ ...sample, annotation: currentOutput })\n containerProps.onExit(\"go-to-previous\")\n })\n\n useEffect(() => {\n const timeout = setTimeout(() => {\n changeEnlargedLabel(null)\n }, 100)\n return () => clearTimeout(timeout)\n }, [enlargedLabel])\n\n const onClickLabel = useEventCallback((label) => {\n changeEnlargedLabel(label)\n let newOutput\n if (\n typeof currentOutput !== \"string\" &&\n (currentOutput || []).includes(label.id)\n ) {\n newOutput = without(currentOutput, label.id)\n } else {\n if (iface.multiple) {\n newOutput = currentOutput.concat([label.id])\n } else {\n newOutput = label.id\n }\n }\n\n changeCurrentOutput(newOutput)\n if (!iface.multiple && newOutput.length > 0) {\n onModifySample({ ...sample, annotation: newOutput })\n containerProps.onExit(\"go-to-next\")\n }\n })\n\n useEffect(() => {\n let newOutput = sample?.annotation\n if (!newOutput) newOutput = []\n if (typeof newOutput === \"string\") newOutput = [newOutput]\n changeCurrentOutput(newOutput)\n }, [sampleIndex, sample])\n\n const [hotkeyMap, labelKeyMap] = useMemo(() => {\n if (disableHotkeys) return [{}, {}]\n const hotkeyMap = {\n \" \": onNext,\n backspace: onPrev,\n enter: onDone,\n rightarrow: onNext,\n leftarrow: onPrev,\n }\n const labelKeyMap = {}\n for (let label of labels) {\n const nextAvailableLetter = label.id\n .split(\"\")\n .filter((l) => letters.includes(l))\n .find((l) => !hotkeyMap[l.toLowerCase()])\n if (!nextAvailableLetter) continue\n hotkeyMap[nextAvailableLetter] = () => onClickLabel(label)\n labelKeyMap[label.id] = nextAvailableLetter\n }\n return [hotkeyMap, labelKeyMap]\n }, [labels, onClickLabel, onDone, onNext, onPrev, disableHotkeys])\n\n useEffect(() => {\n if (disableHotkeys) return\n const onKeyDown = (e) => {\n const key = e.key.toLowerCase()\n if (hotkeyMap[key]) {\n hotkeyMap[key]()\n }\n }\n window.addEventListener(\"keydown\", onKeyDown)\n return () => {\n window.removeEventListener(\"keydown\", onKeyDown)\n }\n }, [hotkeyMap, disableHotkeys])\n\n return (\n \n \n \n \n \n \n {labels.map((label) => (\n onClickLabel(label)}\n style={{\n backgroundColor: getRandomColor(label),\n transform:\n enlargedLabel === label ? \"scale(1.1,1.1)\" : undefined,\n }}\n >\n \n {label.id}\n {labelKeyMap[label.id] ? ` (${labelKeyMap[label.id]})` : \"\"}\n \n ))}\n \n \n \n )\n}\n\nexport default ImageClassification\n","// @flow\n\nimport React, { useMemo } from \"react\"\nimport Annotator from \"react-image-annotate\"\nimport useEventCallback from \"use-event-callback\"\nimport {\n convertFromRIARegionFmt,\n convertToRIAKeyframes,\n} from \"../../utils/ria-format.js\"\n\nconst regionTypeToTool = {\n \"bounding-box\": \"create-box\",\n polygon: \"create-polygon\",\n \"full-segmentation\": \"create-polygon\",\n point: \"create-point\",\n}\n\nconst emptyObj = {}\n\nexport default ({\n interface: iface,\n sampleIndex,\n sample,\n containerProps = emptyObj,\n onModifySample,\n}) => {\n const { regionTypesAllowed = [\"bounding-box\"] } = iface\n\n const isClassification = !Boolean(iface?.multipleRegionLabels)\n\n const labelProps = useMemo(\n () =>\n isClassification\n ? {\n regionClsList: (iface.labels || []).map((l) =>\n typeof l === \"string\" ? l : l.id\n ),\n }\n : {\n regionTagList: (iface.labels || []).map((l) =>\n typeof l === \"string\" ? l : l.id\n ),\n },\n [isClassification, iface.labels]\n )\n\n const getUDTKeyFrames = (riaOutput) => {\n const newKeyframes = {}\n for (const key in riaOutput.keyframes) {\n newKeyframes[key] = {\n regions: riaOutput.keyframes[key].regions.map(convertFromRIARegionFmt),\n }\n }\n return newKeyframes\n }\n\n const onExit = useEventCallback((output) => {\n const annotation = { keyframes: getUDTKeyFrames(output) }\n onModifySample({ ...sample, annotation })\n if (containerProps.onExit) containerProps.onExit()\n })\n\n const onNext = useEventCallback((output) => {\n const annotation = { keyframes: getUDTKeyFrames(output) }\n onModifySample({ ...sample, annotation })\n if (containerProps.onExit) {\n containerProps.onExit(\"go-to-next\")\n }\n })\n\n const onPrev = useEventCallback((output) => {\n const annotation = { keyframes: getUDTKeyFrames(output) }\n onModifySample({ ...sample, annotation })\n if (containerProps.onExit) {\n containerProps.onExit(\"go-to-previous\")\n }\n })\n\n const enabledTools = useMemo(\n () =>\n [\"select\"].concat(\n regionTypesAllowed.map((rt) => regionTypeToTool[rt]).filter(Boolean)\n ),\n [regionTypesAllowed]\n )\n\n if (!sample) throw new Error(\"No sample data provided selected\")\n if (!sample.videoUrl) throw new Error(\"Sample must have videoUrl\")\n\n const annotation = sample.annotation || {}\n\n return (\n