From ea30346c4234a825e8171f16dfe4755d97c09e26 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Fri, 10 Apr 2026 09:15:30 -0400 Subject: [PATCH 1/5] Update Vite build config for v8 --- client/package.json | 2 +- client/vite.config.js | 50 ------------------------------------- client/vite.config.ts | 57 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 51 deletions(-) delete mode 100644 client/vite.config.js create mode 100644 client/vite.config.ts diff --git a/client/package.json b/client/package.json index 5378adec..48ec0cd5 100644 --- a/client/package.json +++ b/client/package.json @@ -5,8 +5,8 @@ "type": "module", "scripts": { "dev": "vite", - "build": "vite build", "preview": "vite preview", + "build": "vite build", "format": "eslint --fix src", "lint:eslint": "eslint src", "lint": "eslint src && vue-tsc --noEmit", diff --git a/client/vite.config.js b/client/vite.config.js deleted file mode 100644 index c5698a05..00000000 --- a/client/vite.config.js +++ /dev/null @@ -1,50 +0,0 @@ -import { sentryVitePlugin } from "@sentry/vite-plugin"; -import path from 'path'; -import { defineConfig } from 'vite'; -import Vue from '@vitejs/plugin-vue'; -import Vuetify from 'vite-plugin-vuetify'; -import process from 'node:process'; - -const subpath = process.env.VITE_APP_SUBPATH || '/'; - -// https://vitejs.dev/config/ -export default defineConfig({ - base: subpath.endsWith('/') ? subpath : `${subpath}/`, - envPrefix: 'VITE_APP_', - plugins: [ - Vue(), - Vuetify({ - autoImport: true - }), - sentryVitePlugin({ - org: "kitware-data", - project: "bats-ai-client", - authToken: process.env.SENTRY_AUTH_TOKEN, - release: { - // Defined by: https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables - name: process.env.CF_PAGES_COMMIT_SHA, - } - }), - ], - server: { - port: 8080, - proxy: { - "/api": { - target: `http://localhost:8000`, - xfwd: true, - }, - }, - strictPort: true, - }, - build: { - sourcemap: true - }, - resolve: { - alias: { - '@': path.resolve(__dirname, './src'), - '@api': path.resolve(__dirname, './src/api'), - '@components': path.resolve(__dirname, './src/components'), - '@use': path.resolve(__dirname, './src/use'), - }, - }, -}); diff --git a/client/vite.config.ts b/client/vite.config.ts new file mode 100644 index 00000000..93fd03fb --- /dev/null +++ b/client/vite.config.ts @@ -0,0 +1,57 @@ +import process from "node:process"; +import { fileURLToPath, URL } from "node:url"; +import { sentryVitePlugin } from "@sentry/vite-plugin"; +import Vue from "@vitejs/plugin-vue"; +import { defineConfig } from "vite"; +import Vuetify, { transformAssetUrls } from "vite-plugin-vuetify"; + +const subpath = process.env.VITE_APP_SUBPATH || "/"; + +export default defineConfig({ + base: subpath.endsWith("/") ? subpath : `${subpath}/`, + envPrefix: "VITE_APP_", + plugins: [ + Vue({ + template: { transformAssetUrls }, + }), + Vuetify({ + autoImport: true, + }), + sentryVitePlugin({ + org: "kitware-data", + project: "bats-ai-client", + authToken: process.env.SENTRY_AUTH_TOKEN, + release: { + // Defined by: https://developers.cloudflare.com/pages/configuration/build-configuration/#environment-variables + name: process.env.CF_PAGES_COMMIT_SHA, + } + }), + ], + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + "@api": fileURLToPath(new URL("./src/api", import.meta.url)), + "@components": fileURLToPath( + new URL("./src/components", import.meta.url), + ), + "@use": fileURLToPath(new URL("./src/use", import.meta.url)), + }, + }, + server: { + port: 8080, + proxy: { + "/api": { + target: `http://localhost:8000`, + xfwd: true, + }, + }, + strictPort: true, + }, + preview: { + port: 8080, + strictPort: true, + }, + build: { + sourcemap: true, + }, +}); From e60d48b572c9575c2320accdd4f2846bbfaeb334 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Fri, 10 Apr 2026 09:15:30 -0400 Subject: [PATCH 2/5] Update TypeScript config for modern Vite --- .github/workflows/ci.yaml | 16 +-- client/{src/vite-env.d.ts => env.d.ts} | 0 client/package-lock.json | 171 ++++++++++++++++++++++++- client/package.json | 10 +- client/tsconfig.app.json | 16 +++ client/tsconfig.json | 32 +---- client/tsconfig.node.json | 19 +++ 7 files changed, 219 insertions(+), 45 deletions(-) rename client/{src/vite-env.d.ts => env.d.ts} (100%) create mode 100644 client/tsconfig.app.json create mode 100644 client/tsconfig.node.json diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f6978f74..8d8e40ee 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,34 +1,28 @@ name: CI on: pull_request: - # types: [opened, synchronize] - # TODO: why is this here? push: branches: - "main" permissions: contents: read jobs: - lint-node: - strategy: - fail-fast: false - matrix: - linter: [eslint, typescript] - name: Lint [${{ matrix.linter }}] + lint-client: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v6 - - name: Setup Node environment + - name: Install npm uses: actions/setup-node@v6 with: + node-version: 24.14.0 cache: npm cache-dependency-path: client/package-lock.json - name: Install packages run: npm ci working-directory: client - - name: Run ${{ matrix.linter }} - run: npm run lint:${{ matrix.linter }} + - name: Run client tests + run: npm run test working-directory: client test-python: name: Test Python diff --git a/client/src/vite-env.d.ts b/client/env.d.ts similarity index 100% rename from client/src/vite-env.d.ts rename to client/env.d.ts diff --git a/client/package-lock.json b/client/package-lock.json index b3cc7e20..c2187b55 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -26,12 +26,16 @@ }, "devDependencies": { "@sentry/vite-plugin": "5.1.1", + "@tsconfig/node24": "^24.0.4", "@types/geojson": "7946.0.16", "@types/lodash": "4.17.24", + "@types/node": "^25.5.0", "@vitejs/plugin-vue": "6.0.5", "@vue/eslint-config-typescript": "14.7.0", + "@vue/tsconfig": "^0.9.0", "eslint": "10.1.0", "eslint-plugin-vue": "10.8.0", + "npm-run-all2": "^8.0.4", "sass-embedded": "1.98.0", "typescript": "5.9.3", "vite": "8.0.3", @@ -3400,6 +3404,13 @@ } } }, + "node_modules/@tsconfig/node24": { + "version": "24.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node24/-/node24-24.0.4.tgz", + "integrity": "sha512-2A933l5P5oCbv6qSxHs7ckKwobs8BDAe9SJ/Xr2Hy+nDlwmLE1GhFh/g/vXGRZWgxBg9nX/5piDtHR9Dkw/XuA==", + "dev": true, + "license": "MIT" + }, "node_modules/@tybys/wasm-util": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", @@ -3723,8 +3734,8 @@ "version": "25.5.0", "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "devOptional": true, "license": "MIT", - "optional": true, "dependencies": { "undici-types": "~7.18.0" } @@ -4258,6 +4269,25 @@ "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==", "license": "MIT" }, + "node_modules/@vue/tsconfig": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.9.1.tgz", + "integrity": "sha512-buvjm+9NzLCJL29KY1j1991YYJ5e6275OiK+G4jtmfIb+z4POywbdm0wXusT9adVWqe0xqg70TbI7+mRx4uU9w==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "typescript": ">= 5.8", + "vue": "^3.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, "node_modules/@vuetify/loader-shared": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/@vuetify/loader-shared/-/loader-shared-2.1.2.tgz", @@ -4331,6 +4361,19 @@ "dev": true, "license": "MIT" }, + "node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -6418,6 +6461,16 @@ "dev": true, "license": "MIT" }, + "node_modules/json-parse-even-better-errors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6869,6 +6922,15 @@ "node": ">= 0.4" } }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -7129,6 +7191,69 @@ "devOptional": true, "license": "MIT" }, + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm-run-all2": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-8.0.4.tgz", + "integrity": "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.2.1", + "cross-spawn": "^7.0.6", + "memorystream": "^0.3.1", + "picomatch": "^4.0.2", + "pidtree": "^0.6.0", + "read-package-json-fast": "^4.0.0", + "shell-quote": "^1.7.3", + "which": "^5.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "npm-run-all2": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": "^20.5.0 || >=22.0.0", + "npm": ">= 10" + } + }, + "node_modules/npm-run-all2/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm-run-all2/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -7340,6 +7465,19 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "license": "MIT", + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/pkg-types": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", @@ -7567,6 +7705,20 @@ "node": ">=0.10.0" } }, + "node_modules/read-package-json-fast": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-4.0.0.tgz", + "integrity": "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -8267,6 +8419,19 @@ "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", @@ -8638,8 +8803,8 @@ "version": "7.18.2", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", - "license": "MIT", - "optional": true + "devOptional": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", diff --git a/client/package.json b/client/package.json index 48ec0cd5..1ddf0a64 100644 --- a/client/package.json +++ b/client/package.json @@ -8,9 +8,9 @@ "preview": "vite preview", "build": "vite build", "format": "eslint --fix src", - "lint:eslint": "eslint src", - "lint": "eslint src && vue-tsc --noEmit", - "lint:typescript": "vue-tsc --noEmit" + "test:lint": "eslint --no-fix src", + "test:type": "vue-tsc --build", + "test": "npm-run-all test:lint test:type" }, "dependencies": { "@jamescoyle/vue-icon": "0.1.2", @@ -31,12 +31,16 @@ }, "devDependencies": { "@sentry/vite-plugin": "5.1.1", + "@tsconfig/node24": "^24.0.4", "@types/geojson": "7946.0.16", "@types/lodash": "4.17.24", + "@types/node": "^25.5.0", "@vitejs/plugin-vue": "6.0.5", "@vue/eslint-config-typescript": "14.7.0", + "@vue/tsconfig": "^0.9.0", "eslint": "10.1.0", "eslint-plugin-vue": "10.8.0", + "npm-run-all2": "^8.0.4", "sass-embedded": "1.98.0", "typescript": "5.9.3", "vite": "8.0.3", diff --git a/client/tsconfig.app.json b/client/tsconfig.app.json new file mode 100644 index 00000000..b6722468 --- /dev/null +++ b/client/tsconfig.app.json @@ -0,0 +1,16 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "compilerOptions": { + // Replace upstream `ES2022` with `ESNext` to allow newer language features. + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "paths": { + "@/*": ["./src/*"], + "@api/*": ["./src/api/*"], + "@components/*": ["./src/components/*"], + "@use/*": ["./src/use/*"] + }, + // `vue-tsc --build` produces a .tsbuildinfo file for incremental type-checking. + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo" + } +} diff --git a/client/tsconfig.json b/client/tsconfig.json index 6c5c793f..1ffef600 100644 --- a/client/tsconfig.json +++ b/client/tsconfig.json @@ -1,31 +1,7 @@ { - "compilerOptions": { - "skipLibCheck": true, - "baseUrl": ".", - "paths": { - "@api/*": ["src/api/*"], - "@use/*": ["src/use/*"], - "@/*": ["src/*"], - "@components/*": ["src/components/*"] - }, - "target": "esnext", - "useDefineForClassFields": true, - "module": "esnext", - "moduleResolution": "node", - "strict": true, - "jsx": "preserve", - "sourceMap": true, - "resolveJsonModule": true, - "esModuleInterop": true, - "lib": [ - "esnext", - "dom", - ], - "types": [ - "vite/client" - ] - }, - "exclude": [ - "node_modules" + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } ] } diff --git a/client/tsconfig.node.json b/client/tsconfig.node.json new file mode 100644 index 00000000..4ef35094 --- /dev/null +++ b/client/tsconfig.node.json @@ -0,0 +1,19 @@ +{ + "extends": "@tsconfig/node24/tsconfig.json", + "include": ["vite.config.*", "eslint.config.*"], + "compilerOptions": { + // Most tools use transpilation instead of Node.js's native type-stripping. + // Bundler mode provides a smoother developer experience. + "module": "preserve", + "moduleResolution": "bundler", + + // Include Node.js types and avoid accidentally including other `@types/*` packages. + "types": ["node"], + + // Disable emitting output during `vue-tsc --build`, which is used for type-checking only. + "noEmit": true, + + // `vue-tsc --build` produces a .tsbuildinfo file for incremental type-checking. + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo" + } +} From f3a05274f0636221ef027b158a11d8b3c5452c88 Mon Sep 17 00:00:00 2001 From: Brian Helba Date: Fri, 10 Apr 2026 09:15:31 -0400 Subject: [PATCH 3/5] Fix `verbatimModuleSyntax` TypeScript errors --- client/src/api/NABatApi.ts | 2 +- client/src/api/api.ts | 2 +- client/src/components/AnnotationEditor.vue | 6 +++--- client/src/components/AnnotationList.vue | 6 +++--- client/src/components/BatchRecordingElement.vue | 2 +- client/src/components/BatchUploadRecording.vue | 6 +++--- client/src/components/ColorSchemeDialog.vue | 2 +- client/src/components/MapLocation.vue | 4 ++-- client/src/components/NABat/NABatAdminBrowser.vue | 4 ++-- .../src/components/OtherUserAnnotationsDialog.vue | 4 ++-- client/src/components/PulseMetadataTooltip.vue | 2 +- .../src/components/RecordingAnnotationDetails.vue | 4 ++-- .../src/components/RecordingAnnotationEditor.vue | 10 +++++----- .../src/components/RecordingAnnotationSummary.vue | 4 ++-- client/src/components/RecordingAnnotations.vue | 4 ++-- client/src/components/RecordingInfoDialog.vue | 4 ++-- client/src/components/RecordingInfoDisplay.vue | 4 ++-- client/src/components/RecordingList.vue | 6 +++--- client/src/components/SequenceList.vue | 6 +++--- client/src/components/SingleSpecieEditor.vue | 6 +++--- client/src/components/SingleSpecieInfo.vue | 4 ++-- client/src/components/SpeciesEditor.vue | 4 ++-- client/src/components/SpeciesInfo.vue | 4 ++-- client/src/components/SpeciesNABatSave.vue | 4 ++-- client/src/components/SpectrogramViewer.vue | 10 +++++----- client/src/components/ThumbnailViewer.vue | 8 ++++---- client/src/components/UploadRecording.vue | 6 +++--- client/src/components/geoJS/LayerManager.vue | 6 +++--- client/src/components/geoJS/geoJSUtils.ts | 4 ++-- client/src/components/geoJS/layers/axesLayer.ts | 4 ++-- .../src/components/geoJS/layers/baseTextLayer.ts | 4 ++-- .../components/geoJS/layers/boundingBoxLayer.ts | 6 +++--- .../geoJS/layers/compressedOverlayLayer.ts | 4 ++-- client/src/components/geoJS/layers/contourLayer.ts | 4 ++-- .../components/geoJS/layers/editAnnotationLayer.ts | 10 +++++----- client/src/components/geoJS/layers/freqLayer.ts | 6 +++--- client/src/components/geoJS/layers/legendLayer.ts | 4 ++-- .../components/geoJS/layers/measureToolLayer.ts | 6 +++--- .../components/geoJS/layers/pulseMetadataLayer.ts | 10 +++++----- .../src/components/geoJS/layers/rectangleLayer.ts | 8 ++++---- .../src/components/geoJS/layers/sequenceLayer.ts | 8 ++++---- client/src/components/geoJS/layers/speciesLayer.ts | 6 +++--- .../geoJS/layers/speciesSequenceLayer.ts | 6 +++--- client/src/components/geoJS/layers/timeLayer.ts | 6 +++--- client/src/constants.ts | 2 ++ client/src/router/index.ts | 2 +- client/src/use/prompt-service/Prompt.vue | 2 +- client/src/use/prompt-service/index.ts | 2 +- client/src/use/usePulseMetadata.ts | 4 ++-- client/src/use/useState.ts | 14 +++++++------- client/src/views/Admin.vue | 2 +- client/src/views/NABat/NABatAdmin.vue | 2 +- client/src/views/NABat/NABatRecording.vue | 4 ++-- client/src/views/NABat/NABatSpectrogram.vue | 6 +++--- client/src/views/Recordings.vue | 6 +++--- client/src/views/Spectrogram.vue | 8 ++++---- 56 files changed, 143 insertions(+), 141 deletions(-) diff --git a/client/src/api/NABatApi.ts b/client/src/api/NABatApi.ts index 3469d5fd..ef85423b 100644 --- a/client/src/api/NABatApi.ts +++ b/client/src/api/NABatApi.ts @@ -1,4 +1,4 @@ -import { axiosInstance, FileAnnotation, FileAnnotationDetails, ProcessingTask, Spectrogram, UpdateFileAnnotation } from "./api"; +import { axiosInstance, type FileAnnotation, type FileAnnotationDetails, type ProcessingTask, type Spectrogram, type UpdateFileAnnotation } from "./api"; export interface NABatRecordingCompleteResponse { error?: string; diff --git a/client/src/api/api.ts b/client/src/api/api.ts index 2c65fd4f..100da053 100644 --- a/client/src/api/api.ts +++ b/client/src/api/api.ts @@ -1,6 +1,6 @@ import axios from "axios"; import { AxiosError } from "axios"; -import { SpectroInfo } from "@components/geoJS/geoJSUtils"; +import type { SpectroInfo } from "@components/geoJS/geoJSUtils"; import type { FeatureCollection, Point } from "geojson"; export interface Recording { diff --git a/client/src/components/AnnotationEditor.vue b/client/src/components/AnnotationEditor.vue index 44c39dfe..2daa22f4 100644 --- a/client/src/components/AnnotationEditor.vue +++ b/client/src/components/AnnotationEditor.vue @@ -1,7 +1,7 @@