diff --git a/extralit-frontend/package-lock.json b/extralit-frontend/package-lock.json
index 0e5cf9e30..bd174076b 100644
--- a/extralit-frontend/package-lock.json
+++ b/extralit-frontend/package-lock.json
@@ -47,6 +47,7 @@
"nuxt-compress": "^5.0.0",
"nuxt-highlightjs": "^1.0.3",
"nuxt-mq": "^2.0.2",
+ "papaparse": "^5.5.3",
"pinia": "^2.1.7",
"sass": "~1.77.4",
"stringz": "^2.1.0",
@@ -80,6 +81,7 @@
"@nuxtjs/eslint-config-typescript": "^12.1.0",
"@playwright/test": "^1.44.1",
"@types/jest": "^27.5.2",
+ "@types/papaparse": "^5.3.16",
"@types/tabulator-tables": "^6.2.0",
"@typescript-eslint/eslint-plugin": "^5.62.0",
"@typescript-eslint/parser": "^5.62.0",
@@ -7802,6 +7804,15 @@
"@types/webpack": "^4"
}
},
+ "node_modules/@types/papaparse": {
+ "version": "5.3.16",
+ "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.16.tgz",
+ "integrity": "sha512-T3VuKMC2H0lgsjI9buTB3uuKj3EMD2eap1MOuEQuBQ44EnDx/IkGhU6EwiTf9zG3za4SKlmwKAImdDKdNnCsXg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/parse-json": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz",
@@ -23380,6 +23391,11 @@
"resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
"integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="
},
+ "node_modules/papaparse": {
+ "version": "5.5.3",
+ "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.3.tgz",
+ "integrity": "sha512-5QvjGxYVjxO59MGU2lHVYpRWBBtKHnlIAcSe1uNFCkkptUh63NFRj0FJQm7nR67puEruUci/ZkjmEFrjCAyP4A=="
+ },
"node_modules/parallel-transform": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz",
diff --git a/extralit-frontend/package.json b/extralit-frontend/package.json
index 0f9abc4a3..8946f710f 100644
--- a/extralit-frontend/package.json
+++ b/extralit-frontend/package.json
@@ -1,126 +1,130 @@
{
- "name": "extralit",
- "version": "0.6.0",
- "private": true,
- "scripts": {
- "dev": "nuxt",
- "yarn-dev:extralit": "cross-env API_URL_CUSTOM=$base_router nuxt",
- "npm-dev:extralit": "cross-env API_URL_CUSTOM=$npm_config_base_router nuxt",
- "build": "rimraf dist && nuxt build",
- "start": "nuxt start",
- "generate": "nuxt generate",
- "postgenerate": "npm run e2e:silent",
- "generate-icons": "vsvg -s ./static/icons -t ./assets/icons --tpl ./assets/icon-template.js.tmp",
- "lint": "eslint --ext .ts,.js,.vue --ignore-path .eslintignore . --quiet",
- "lint:fix": "npm run lint -- --fix",
- "precommit": "npm run lint:fix",
- "e2e": "npx playwright test --ui",
- "e2e:report": "npx playwright show-report",
- "e2e:silent": "npx playwright test",
- "test": "jest --colors --maxWorkers=50%",
- "test:coverage": "jest --colors --coverage --maxWorkers=50%",
- "test:watch": "jest --colors --watchAll --maxWorkers=50%"
- },
- "dependencies": {
- "@codescouts/events": "^1.0.2",
- "@jonnytran/vue-pdf-viewer": "^0.2.5",
- "@nuxtjs/auth-next": "5.0.0-1613647907.37b1156",
- "@nuxtjs/axios": "^5.13.6",
- "@nuxtjs/composition-api": "^0.34.0",
- "@nuxtjs/i18n": "^7.3.1",
- "@nuxtjs/style-resources": "^1.2.2",
- "@orcid/bibtex-parse-js": "^0.0.25",
- "@pinia/nuxt": "^0.2.1",
- "@sereneinserenade/tiptap-search-and-replace": "^0.1.1",
- "@tiptap/extension-document": "^2.4.0",
- "@tiptap/extension-gapcursor": "^2.4.0",
- "@tiptap/extension-hard-break": "^2.4.0",
- "@tiptap/extension-history": "^2.4.0",
- "@tiptap/extension-paragraph": "^2.4.0",
- "@tiptap/extension-table": "^2.4.0",
- "@tiptap/extension-table-cell": "^2.4.0",
- "@tiptap/extension-table-header": "^2.4.0",
- "@tiptap/extension-table-row": "^2.4.0",
- "@tiptap/extension-text": "^2.4.0",
- "@tiptap/pm": "^2.4.0",
- "@tiptap/vue-2": "^2.4.0",
- "@vuex-orm/core": "^0.36.4",
- "@vuex-orm/plugin-axios": "^0.9.4",
- "axios": "^1.7.2",
- "core-js": "^3.37.1",
- "dompurify": "^3.1.5",
- "fit-curve": "^0.2.0",
- "frontmatter-markdown-loader": "^3.7.0",
- "interactjs": "^1.10.27",
- "js-base64": "^3.7.7",
- "luxon": "^3.4.4",
- "marked": "^5.1.2",
- "marked-highlight": "^2.1.1",
- "marked-katex-extension": "^5.0.2",
- "nuxt": "^2.18.1",
- "nuxt-compress": "^5.0.0",
- "nuxt-highlightjs": "^1.0.3",
- "nuxt-mq": "^2.0.2",
- "pinia": "^2.1.7",
- "sass": "~1.77.4",
- "stringz": "^2.1.0",
- "tabulator-tables": "^6.3.1",
- "ts-injecty": "^0.0.22",
- "v-click-outside": "^3.2.0",
- "vue": "^2.7.16",
- "vue-demi": "^0.14.8",
- "vue-svgicon": "^3.3.2",
- "vue-template-compiler": "^2.7.16",
- "vue-vega": "^1.0.0-alpha.13",
- "vue-virtual-scroller": "~1.0.10",
- "vuedraggable": "^2.24.3",
- "vuex": "^3.6.2"
- },
- "devDependencies": {
- "@babel/core": "^7.24.7",
- "@babel/eslint-parser": "^7.24.7",
- "@babel/plugin-transform-class-properties": "^7.27.1",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
- "@babel/plugin-transform-optional-chaining": "^7.24.7",
- "@babel/plugin-transform-private-methods": "^7.27.1",
- "@babel/plugin-transform-runtime": "^7.25.9",
- "@babel/preset-env": "^7.24.7",
- "@babel/preset-typescript": "^7.24.7",
- "@babel/runtime": "^7.26.0",
- "@codescouts/test": "^1.0.7",
- "@intlify/eslint-plugin-vue-i18n": "^2.0.0",
- "@nuxt/types": "^2.17.3",
- "@nuxt/typescript-build": "^2.1.0",
- "@nuxtjs/eslint-config-typescript": "^12.1.0",
- "@playwright/test": "^1.44.1",
- "@types/jest": "^27.5.2",
- "@types/tabulator-tables": "^6.2.0",
- "@typescript-eslint/eslint-plugin": "^5.62.0",
- "@typescript-eslint/parser": "^5.62.0",
- "@vue/test-utils": "~1.3.0",
- "@vue/vue2-jest": "^29.2.6",
- "babel-core": "^7.0.0-bridge.0",
- "babel-jest": "^29.7.0",
- "cross-env": "^7.0.3",
- "eslint": "^8.57.0",
- "eslint-config-prettier": "^7.2.0",
- "eslint-plugin-nuxt": "^3.2.0",
- "eslint-plugin-prettier": "^3.4.1",
- "eslint-plugin-vue": "^8.7.1",
- "jest": "^29.0.0",
- "jest-environment-jsdom": "^29.7.0",
- "jest-serializer-vue": "^2.0.2",
- "jest-transform-stub": "^2.0.0",
- "postcss": "^8.4.49",
- "postcss-import": "^14.1.0",
- "postcss-loader": "^4.3.0",
- "prettier": "^2.8.8",
- "rimraf": "^5.0.7",
- "sass-loader": "^10.5.2",
- "typescript": "^5.4.5",
- "vue-jest": "^3.0.7"
- },
- "engines": {
- "node": ">=18.16.1"
- }
-}
+ "name": "extralit",
+ "version": "0.6.0",
+ "private": true,
+ "scripts": {
+ "dev": "nuxt",
+ "yarn-dev:extralit": "cross-env API_URL_CUSTOM=$base_router nuxt",
+ "npm-dev:extralit": "cross-env API_URL_CUSTOM=$npm_config_base_router nuxt",
+ "build": "rimraf dist && nuxt build",
+ "start": "nuxt start",
+ "generate": "nuxt generate",
+ "postgenerate": "npm run e2e:silent",
+ "generate-icons": "vsvg -s ./static/icons -t ./assets/icons --tpl ./assets/icon-template.js.tmp",
+ "lint": "eslint --ext .ts,.js,.vue --ignore-path .eslintignore . --quiet",
+ "lint:fix": "npm run lint -- --fix",
+ "format": "prettier --write \"**/*.{ts,vue}\"",
+ "format:check": "prettier --check \"**/*.{ts,vue}\"",
+ "precommit": "npm run lint:fix",
+ "e2e": "npx playwright test --ui",
+ "e2e:report": "npx playwright show-report",
+ "e2e:silent": "npx playwright test",
+ "test": "jest --colors --maxWorkers=50% --silent=false --verbose=false --testLocationInResults --noStackTrace --testPathIgnorePatterns=node_modules",
+ "test:coverage": "jest --colors --coverage --maxWorkers=50%",
+ "test:watch": "jest --colors --watchAll --maxWorkers=50%"
+ },
+ "dependencies": {
+ "@codescouts/events": "^1.0.2",
+ "@jonnytran/vue-pdf-viewer": "^0.2.5",
+ "@nuxtjs/auth-next": "5.0.0-1613647907.37b1156",
+ "@nuxtjs/axios": "^5.13.6",
+ "@nuxtjs/composition-api": "^0.34.0",
+ "@nuxtjs/i18n": "^7.3.1",
+ "@nuxtjs/style-resources": "^1.2.2",
+ "@orcid/bibtex-parse-js": "^0.0.25",
+ "@pinia/nuxt": "^0.2.1",
+ "@sereneinserenade/tiptap-search-and-replace": "^0.1.1",
+ "@tiptap/extension-document": "^2.4.0",
+ "@tiptap/extension-gapcursor": "^2.4.0",
+ "@tiptap/extension-hard-break": "^2.4.0",
+ "@tiptap/extension-history": "^2.4.0",
+ "@tiptap/extension-paragraph": "^2.4.0",
+ "@tiptap/extension-table": "^2.4.0",
+ "@tiptap/extension-table-cell": "^2.4.0",
+ "@tiptap/extension-table-header": "^2.4.0",
+ "@tiptap/extension-table-row": "^2.4.0",
+ "@tiptap/extension-text": "^2.4.0",
+ "@tiptap/pm": "^2.4.0",
+ "@tiptap/vue-2": "^2.4.0",
+ "@vuex-orm/core": "^0.36.4",
+ "@vuex-orm/plugin-axios": "^0.9.4",
+ "axios": "^1.7.2",
+ "core-js": "^3.37.1",
+ "dompurify": "^3.1.5",
+ "fit-curve": "^0.2.0",
+ "frontmatter-markdown-loader": "^3.7.0",
+ "interactjs": "^1.10.27",
+ "js-base64": "^3.7.7",
+ "luxon": "^3.4.4",
+ "marked": "^5.1.2",
+ "marked-highlight": "^2.1.1",
+ "marked-katex-extension": "^5.0.2",
+ "nuxt": "^2.18.1",
+ "nuxt-compress": "^5.0.0",
+ "nuxt-highlightjs": "^1.0.3",
+ "nuxt-mq": "^2.0.2",
+ "papaparse": "^5.5.3",
+ "pinia": "^2.1.7",
+ "sass": "~1.77.4",
+ "stringz": "^2.1.0",
+ "tabulator-tables": "^6.3.1",
+ "ts-injecty": "^0.0.22",
+ "v-click-outside": "^3.2.0",
+ "vue": "^2.7.16",
+ "vue-demi": "^0.14.8",
+ "vue-svgicon": "^3.3.2",
+ "vue-template-compiler": "^2.7.16",
+ "vue-vega": "^1.0.0-alpha.13",
+ "vue-virtual-scroller": "~1.0.10",
+ "vuedraggable": "^2.24.3",
+ "vuex": "^3.6.2"
+ },
+ "devDependencies": {
+ "@babel/core": "^7.24.7",
+ "@babel/eslint-parser": "^7.24.7",
+ "@babel/plugin-transform-class-properties": "^7.27.1",
+ "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7",
+ "@babel/plugin-transform-optional-chaining": "^7.24.7",
+ "@babel/plugin-transform-private-methods": "^7.27.1",
+ "@babel/plugin-transform-runtime": "^7.25.9",
+ "@babel/preset-env": "^7.24.7",
+ "@babel/preset-typescript": "^7.24.7",
+ "@babel/runtime": "^7.26.0",
+ "@codescouts/test": "^1.0.7",
+ "@intlify/eslint-plugin-vue-i18n": "^2.0.0",
+ "@nuxt/types": "^2.17.3",
+ "@nuxt/typescript-build": "^2.1.0",
+ "@nuxtjs/eslint-config-typescript": "^12.1.0",
+ "@playwright/test": "^1.44.1",
+ "@types/jest": "^27.5.2",
+ "@types/papaparse": "^5.3.16",
+ "@types/tabulator-tables": "^6.2.0",
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
+ "@typescript-eslint/parser": "^5.62.0",
+ "@vue/test-utils": "~1.3.0",
+ "@vue/vue2-jest": "^29.2.6",
+ "babel-core": "^7.0.0-bridge.0",
+ "babel-jest": "^29.7.0",
+ "cross-env": "^7.0.3",
+ "eslint": "^8.57.0",
+ "eslint-config-prettier": "^7.2.0",
+ "eslint-plugin-nuxt": "^3.2.0",
+ "eslint-plugin-prettier": "^3.4.1",
+ "eslint-plugin-vue": "^8.7.1",
+ "jest": "^29.0.0",
+ "jest-environment-jsdom": "^29.7.0",
+ "jest-serializer-vue": "^2.0.2",
+ "jest-transform-stub": "^2.0.0",
+ "postcss": "^8.4.49",
+ "postcss-import": "^14.1.0",
+ "postcss-loader": "^4.3.0",
+ "prettier": "^2.8.8",
+ "rimraf": "^5.0.7",
+ "sass-loader": "^10.5.2",
+ "typescript": "^5.4.5",
+ "vue-jest": "^3.0.7"
+ },
+ "engines": {
+ "node": ">=18.16.1"
+ }
+}
\ No newline at end of file
diff --git a/extralit-frontend/pages/index.vue b/extralit-frontend/pages/index.vue
index ea55e042f..28835a127 100644
--- a/extralit-frontend/pages/index.vue
+++ b/extralit-frontend/pages/index.vue
@@ -1,19 +1,4 @@
-
+
@@ -57,7 +42,7 @@