diff --git a/.gitignore b/.gitignore index 4bd692c4..00259403 100644 --- a/.gitignore +++ b/.gitignore @@ -7,13 +7,9 @@ *.pyd *.pyc **/__pycache__/ -**/node_modules/ -/refl1d/webview/client/dist/ *.swp *.so *.bak -refl1d-webview-client*.tgz -bumps-webview-client*.tgz /build/ /dist/ /refl1d.egg-info/ @@ -61,8 +57,6 @@ venv.bak/ *.swp *.bak -test-files/ - # Unused lock files bun.lock uv.lock diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 9585c194..a27bd46b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,9 +1,9 @@ repos: - repo: local hooks: - - id: eslint - name: eslint - entry: bash -c "cd refl1d/webview/client && npm run lint" + - id: frontend-lint + name: frontend-lint + entry: bash -c "cd refl1d/webview/client && npm run lint || bun run lint || exit 1" language: system - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 @@ -24,4 +24,5 @@ repos: ci: autoupdate_schedule: monthly - skip: [eslint] + skip: [frontend-lint] + diff --git a/refl1d/webview/client/.gitignore b/refl1d/webview/client/.gitignore new file mode 100644 index 00000000..1fed572a --- /dev/null +++ b/refl1d/webview/client/.gitignore @@ -0,0 +1,5 @@ +bumps-webview-client*.tgz +refl1d-webview-client*.tgz +bun.lock +dist/ +node_modules/ diff --git a/refl1d/webview/client/biome.json b/refl1d/webview/client/biome.json new file mode 100644 index 00000000..c0c4bfe0 --- /dev/null +++ b/refl1d/webview/client/biome.json @@ -0,0 +1,39 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "vcs": { + "enabled": true, + "clientKind": "git", + "useIgnoreFile": true + }, + "files": { + "ignoreUnknown": false, + "includes": ["**", "!**/*.css", "!**/*.scss"] + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "space", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 120, + "attributePosition": "auto", + "bracketSameLine": false, + "bracketSpacing": true, + "expand": "auto", + "useEditorconfig": true + }, + "linter": { + "enabled": true, + "domains": { + "vue": "recommended" + }, + "rules": { + "recommended": true + } + }, + "html": { "formatter": { "selfCloseVoidElements": "always" } }, + "assist": { + "enabled": true, + "actions": { "source": { "organizeImports": "on" } } + } +} diff --git a/refl1d/webview/client/eslint.config.js b/refl1d/webview/client/eslint.config.js index 5e5d8e79..d06434d8 100644 --- a/refl1d/webview/client/eslint.config.js +++ b/refl1d/webview/client/eslint.config.js @@ -1,10 +1,8 @@ -import url from "url"; -import eslintPluginPrettierRecommended from "eslint-plugin-prettier/recommended"; -import pluginVue from "eslint-plugin-vue"; +import url from "node:url"; import { FlatCompat } from "@eslint/eslintrc"; import js from "@eslint/js"; -import prettierConfig from "@vue/eslint-config-prettier"; import vueTsEslintConfig from "@vue/eslint-config-typescript"; +import pluginVue from "eslint-plugin-vue"; const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); const compat = new FlatCompat({ @@ -15,11 +13,9 @@ const compat = new FlatCompat({ export default [ /** Extend recommended configs */ - ...compat.extends("plugin:vue/vue3-recommended", "plugin:vuejs-accessibility/recommended", "prettier"), + ...compat.extends("plugin:vue/recommended", "plugin:vuejs-accessibility/recommended"), ...pluginVue.configs["flat/recommended"], ...vueTsEslintConfig(), - eslintPluginPrettierRecommended, - prettierConfig, /** Configuration */ { languageOptions: { @@ -39,13 +35,6 @@ export default [ "error", { allowShortCircuit: true, allowTernary: true }, // Temporary fix for indirect dependency @typescript-eslint <= 8.15.0 ], - "prettier/prettier": [ - "warn", - {}, - { - usePrettierrc: true, - }, - ], "vuejs-accessibility/label-has-for": [ "error", { diff --git a/refl1d/webview/client/package.json b/refl1d/webview/client/package.json index 4c34c141..925fb499 100644 --- a/refl1d/webview/client/package.json +++ b/refl1d/webview/client/package.json @@ -1,6 +1,6 @@ { "name": "refl1d-webview-client", - "version": "0.1.26", + "version": "0.1.27", "type": "module", "repository": { "type": "git", @@ -12,44 +12,37 @@ "build": "vite build --emptyOutDir -m development", "build_prod": "vite build --emptyOutDir -m production", "preview": "vite preview --port 4173", - "format": "prettier --write src", + "format": "biome format --write", "lint": "eslint src --fix", "test:lint": "eslint src", "test:types": "vue-tsc --noEmit --skipLibCheck -p tsconfig.json --composite false" }, "dependencies": { "@msgpack/msgpack": "^3.1.2", - "bootstrap": "^5.3.7", + "bootstrap": "^5.3.8", "date-fns": "^4.1.0", "json-difference": "^1.16.1", - "mpld3": "^0.5.10", - "plotly.js": "^3.0.1", + "mpld3": "^0.5.12", + "plotly.js": "^3.3.0", "socket.io-client": "^4.8.1", - "uuid": "^11.1.0", - "vue": "^3.5.17", - "vue-json-pretty": "^2.5.0" + "uuid": "^13.0.0", + "vue": "^3.5.25", + "vue-json-pretty": "^2.6.0" }, "devDependencies": { - "@ianvs/prettier-plugin-sort-imports": "^4.4.1", - "@tsconfig/node-lts": "^22.0.2", - "@types/node": "^24.5.2", - "@types/plotly.js": "^2.35.1", - "@types/uuid": "^10.0.0", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/eslint-config-prettier": "10.1.0", - "@vue/eslint-config-typescript": "^14.2.0", - "@vue/tsconfig": "^0.7.0", - "eslint": "^9.18.0", - "eslint-config-prettier": "^10.0.1", - "eslint-plugin-prettier": "^5.2.1", - "eslint-plugin-vue": "^9.32.0", + "@tsconfig/node-lts": "^24.0.0", + "@types/node": "^24.10.1", + "@types/plotly.js": "^3.0.8", + "@vitejs/plugin-vue": "^6.0.2", + "@vue/eslint-config-typescript": "^14.6.0", + "@vue/tsconfig": "^0.8.1", + "@biomejs/biome": "^2.3.8", + "eslint": "^9.39.1", + "eslint-plugin-vue": "^10.6.2", "eslint-plugin-vuejs-accessibility": "^2.4.1", - "prettier": "^3.4.2", - "prettier-plugin-css-order": "^2.1.2", - "prettier-plugin-jsdoc": "^1.3.2", - "typescript": "^5.7.3", - "vite": "^6.0.7", + "typescript": "^5.9.3", + "vite": "^7.2.6", "vite-svg-loader": "5.1.0", - "vue-tsc": "^2.2.0" + "vue-tsc": "^3.1.5" } } diff --git a/refl1d/webview/client/prettier.config.js b/refl1d/webview/client/prettier.config.js deleted file mode 100644 index f7200637..00000000 --- a/refl1d/webview/client/prettier.config.js +++ /dev/null @@ -1,48 +0,0 @@ -/** - * @type {import("prettier").Config} - * @see https://prettier.io/docs/en/configuration.html - */ - -const config = { - plugins: [ - "@ianvs/prettier-plugin-sort-imports", - // "./node_modules/prettier-plugin-jsdoc/dist/index.js", - "prettier-plugin-css-order", - ], - importOrder: ["^vue", "^[a-zA-Z]", "^@[a-zA-Z]", "^@/", "^./", "^../"], - cssDeclarationSorterOrder: "smacss", - // jsdocCapitalizeDescription: false, - overrides: [ - { - files: "*.svg", - options: { - parser: "html", - }, - }, - ], - experimentalTernaries: true, - printWidth: 120, - // tabWidth: 4, - // useTabs: false, - // semi: true, - // singleQuote: false, - // jsxSingleQuote: false, - // quoteProps: "as-needed", - trailingComma: "es5", - // bracketSpacing: true, - // bracketSameLine: false, - // arrowParens: "always", - // rangeStart: 0, - // rangeEnd: Infinity, - // parser: "babel", - // requirePragma: false, - // insertPragma: false, - // proseWrap: "preserve", - // htmlWhitespaceSensitivity: "css", - // vueIndentScriptAndStyle: false, - // endOfLine: "lf", - // embeddedLanguageFormatting: "auto", - // singleAttributePerLine: true, -}; - -export default config; diff --git a/refl1d/webview/client/src/components/DataView.vue b/refl1d/webview/client/src/components/DataPanel.vue similarity index 84% rename from refl1d/webview/client/src/components/DataView.vue rename to refl1d/webview/client/src/components/DataPanel.vue index f9c637eb..838a9679 100644 --- a/refl1d/webview/client/src/components/DataView.vue +++ b/refl1d/webview/client/src/components/DataPanel.vue @@ -1,10 +1,10 @@ @@ -494,11 +497,23 @@ function interp(x: number[], xp: number[], fp: number[]): number[] {
- +
- + @@ -512,16 +527,37 @@ function interp(x: number[], xp: number[], fp: number[]): number[] { class="form-check-input" type="checkbox" @change="draw_plot" - /> - + > +
- - + +
- - + +
- + > +
+ > + >Rcorr
- +
+ >
-
+
diff --git a/refl1d/webview/client/src/components/ModelView.vue b/refl1d/webview/client/src/components/ModelPanel.vue similarity index 77% rename from refl1d/webview/client/src/components/ModelView.vue rename to refl1d/webview/client/src/components/ModelPanel.vue index 6c7bbcc2..03ec8890 100644 --- a/refl1d/webview/client/src/components/ModelView.vue +++ b/refl1d/webview/client/src/components/ModelPanel.vue @@ -1,10 +1,9 @@