From cd046c86c5fe04ae6eaa19eda3a7a96dcde87ca8 Mon Sep 17 00:00:00 2001 From: DaxServer Date: Fri, 17 Oct 2025 19:39:45 +0200 Subject: [PATCH 1/2] feat: migrate to shadcn Button --- .biomeignore | 12 - biome.json | 1 + bun.lock | 48 ++ frontend/.biomelintrc-auto-import.json | 426 ++++++++++++++++++ frontend/.eslintrc-auto-import.json | 420 ----------------- frontend/auto-imports.d.ts | 279 +++++++++--- frontend/components.d.ts | 2 +- frontend/components.json | 21 + frontend/interface-extensions.d.ts | 2 - frontend/package.json | 7 + frontend/src/assets/base.css | 122 +++++ frontend/src/components/ui/button/Button.vue | 30 ++ frontend/src/components/ui/button/index.ts | 36 ++ .../components/ColumnHeaderMenu.vue | 12 +- .../components/ReplaceDialog.vue | 19 +- .../project-management/pages/OpenProject.vue | 43 +- .../components/ClaimEditor.vue | 19 +- .../wikibase-schema/components/DropZone.vue | 12 +- .../components/PropertyValueItem.vue | 22 +- .../components/PropertyValueList.vue | 14 +- .../components/QualifiersEditor.vue | 23 +- .../components/ReferenceContainer.vue | 22 +- .../components/ReferencesEditor.vue | 45 +- .../components/SchemaSelector.vue | 21 +- .../components/StatementEditor.vue | 63 ++- .../components/StatementManager.vue | 12 +- .../components/TermSection.vue | 13 +- .../components/ValidationDisplay.vue | 48 +- .../components/ValueMappingEditor.vue | 11 +- .../components/WikibaseSchemaEditor.vue | 95 ++-- .../composables/useValueMapping.ts | 7 +- frontend/src/lib/utils.ts | 7 + frontend/src/shared/components/Header.vue | 12 +- frontend/tsconfig.json | 4 +- frontend/vite.config.ts | 2 +- 35 files changed, 1213 insertions(+), 719 deletions(-) delete mode 100644 .biomeignore create mode 100644 frontend/.biomelintrc-auto-import.json delete mode 100644 frontend/.eslintrc-auto-import.json create mode 100644 frontend/components.json create mode 100644 frontend/src/components/ui/button/Button.vue create mode 100644 frontend/src/components/ui/button/index.ts create mode 100644 frontend/src/lib/utils.ts diff --git a/.biomeignore b/.biomeignore deleted file mode 100644 index 3f08b37..0000000 --- a/.biomeignore +++ /dev/null @@ -1,12 +0,0 @@ -.git* -.vercel/ -.trae/ -dist/ -node_modules/ -temp/ - -bun.lock - -*.db -*.wal -**/*.d.ts diff --git a/biome.json b/biome.json index 2bda8c2..0af1521 100644 --- a/biome.json +++ b/biome.json @@ -70,6 +70,7 @@ "useNamingConvention": "off" }, "correctness": { + "noUnusedImports": "off", "noUnusedVariables": "off" } } diff --git a/bun.lock b/bun.lock index ec76a60..2d9e64b 100644 --- a/bun.lock +++ b/bun.lock @@ -41,12 +41,18 @@ "@unhead/vue": "^2.0.19", "@vueuse/core": "^13.9.0", "@vueuse/router": "^13.9.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "escape-html": "^1.0.3", "linkify-it": "^5.0.0", + "lucide-vue-next": "^0.546.0", "pinia": "^3.0.3", "primeicons": "^7.0.0", "primevue": "4.4.1", + "reka-ui": "^2.5.1", + "tailwind-merge": "^3.3.1", "tailwindcss-primeui": "^0.6.1", + "tw-animate-css": "^1.4.0", "vue": "^3.5.22", "vue-router": "^4.6.3", }, @@ -249,6 +255,14 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.25.10", "", { "os": "win32", "cpu": "x64" }, "sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw=="], + "@floating-ui/core": ["@floating-ui/core@1.7.3", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w=="], + + "@floating-ui/dom": ["@floating-ui/dom@1.7.4", "", { "dependencies": { "@floating-ui/core": "^1.7.3", "@floating-ui/utils": "^0.2.10" } }, "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA=="], + + "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="], + + "@floating-ui/vue": ["@floating-ui/vue@1.1.9", "", { "dependencies": { "@floating-ui/dom": "^1.7.4", "@floating-ui/utils": "^0.2.10", "vue-demi": ">=0.13.0" } }, "sha512-BfNqNW6KA83Nexspgb9DZuz578R7HT8MZw1CfK9I6Ah4QReNWEJsXWHN+SdmOVLNGmTPDi+fDT535Df5PzMLbQ=="], + "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA=="], @@ -295,6 +309,10 @@ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.4", "", { "os": "win32", "cpu": "x64" }, "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig=="], + "@internationalized/date": ["@internationalized/date@3.10.0", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-oxDR/NTEJ1k+UFVQElaNIk65E/Z83HK1z1WI3lQyhTtnNg4R5oVXaPzK3jcpKG8UHKDVuDQHzn+wsxSz8RP3aw=="], + + "@internationalized/number": ["@internationalized/number@3.6.5", "", { "dependencies": { "@swc/helpers": "^0.5.0" } }, "sha512-6hY4Kl4HPBvtfS62asS/R22JzNNy8vi/Ssev7x6EobfCp+9QIB2hKvI2EtbdJ0VSQacxVNtqhE/NmF/NZ0gm6g=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], @@ -379,6 +397,8 @@ "@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="], + "@swc/helpers": ["@swc/helpers@0.5.17", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A=="], + "@tailwindcss/forms": ["@tailwindcss/forms@0.5.10", "", { "dependencies": { "mini-svg-data-uri": "^1.2.3" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" } }, "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw=="], "@tailwindcss/node": ["@tailwindcss/node@4.1.14", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.0", "lightningcss": "1.30.1", "magic-string": "^0.30.19", "source-map-js": "^1.2.1", "tailwindcss": "4.1.14" } }, "sha512-hpz+8vFk3Ic2xssIA3e01R6jkmsAhvkQdXlEbRTk6S10xDAtiQiM3FyvZVGsucefq764euO/b8WUW9ysLdThHw=="], @@ -413,6 +433,10 @@ "@tailwindcss/vite": ["@tailwindcss/vite@4.1.14", "", { "dependencies": { "@tailwindcss/node": "4.1.14", "@tailwindcss/oxide": "4.1.14", "tailwindcss": "4.1.14" }, "peerDependencies": { "vite": "^5.2.0 || ^6 || ^7" } }, "sha512-BoFUoU0XqgCUS1UXWhmDJroKKhNXeDzD7/XwabjkDIAbMnc4ULn5e2FuEuBbhZ6ENZoSYzKlzvZ44Yr6EUDUSA=="], + "@tanstack/virtual-core": ["@tanstack/virtual-core@3.13.12", "", {}, "sha512-1YBOJfRHV4sXUmWsFSf5rQor4Ss82G8dQWLRbnk3GA4jeP8hQt1hxXh0tmflpC0dz3VgEv/1+qwPyLeWkQuPFA=="], + + "@tanstack/vue-virtual": ["@tanstack/vue-virtual@3.13.12", "", { "dependencies": { "@tanstack/virtual-core": "3.13.12" }, "peerDependencies": { "vue": "^2.7.0 || ^3.0.0" } }, "sha512-vhF7kEU9EXWXh+HdAwKJ2m3xaOnTTmgcdXcF2pim8g4GvI7eRrk2YRuV5nUlZnd/NbCIX4/Ja2OZu5EjJL06Ww=="], + "@tokenizer/inflate": ["@tokenizer/inflate@0.2.7", "", { "dependencies": { "debug": "^4.4.0", "fflate": "^0.8.2", "token-types": "^6.0.0" } }, "sha512-MADQgmZT1eKjp06jpI2yozxaU9uVs4GzzgSL+uEq7bVcJ9V1ZXQkeGNql1fsSI0gMy1vhvNTNbUqrx+pZfJVmg=="], "@tokenizer/token": ["@tokenizer/token@0.3.0", "", {}, "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A=="], @@ -503,6 +527,8 @@ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="], + "aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="], + "atomic-sleep": ["atomic-sleep@1.0.0", "", {}, "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="], "autoprefixer": ["autoprefixer@10.4.21", "", { "dependencies": { "browserslist": "^4.24.4", "caniuse-lite": "^1.0.30001702", "fraction.js": "^4.3.7", "normalize-range": "^0.1.2", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ=="], @@ -531,8 +557,12 @@ "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="], + "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="], + "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], @@ -561,6 +591,8 @@ "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], + "defu": ["defu@6.1.4", "", {}, "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg=="], + "detect-libc": ["detect-libc@2.1.1", "", {}, "sha512-ecqj/sy1jcK1uWrwpR67UhYrIFQ+5WlGxth34WquCbamhFA6hkkwiu37o6J5xCHdo1oixJRfVRw+ywV+Hq/0Aw=="], "electron-to-chromium": ["electron-to-chromium@1.5.224", "", {}, "sha512-kWAoUu/bwzvnhpdZSIc6KUyvkI1rbRXMT0Eq8pKReyOyaPZcctMli+EgvcN1PAvwVc7Tdo4Fxi2PsLNDU05mdg=="], @@ -695,6 +727,8 @@ "lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="], + "lucide-vue-next": ["lucide-vue-next@0.546.0", "", { "peerDependencies": { "vue": ">=3.0.1" } }, "sha512-Ra4lNbm0m9uSb82ZBMCUg3c2xQ4qaU9b87fAFvFPoLC0/u7JxG5FJjhUFqfNfofk1xdZiDpF6EnCbaxTHXzLcw=="], + "magic-string": ["magic-string@0.30.19", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw=="], "mini-svg-data-uri": ["mini-svg-data-uri@1.4.4", "", { "bin": { "mini-svg-data-uri": "cli.js" } }, "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg=="], @@ -779,6 +813,8 @@ "real-require": ["real-require@0.2.0", "", {}, "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg=="], + "reka-ui": ["reka-ui@2.5.1", "", { "dependencies": { "@floating-ui/dom": "^1.6.13", "@floating-ui/vue": "^1.1.6", "@internationalized/date": "^3.5.0", "@internationalized/number": "^3.5.0", "@tanstack/vue-virtual": "^3.12.0", "@vueuse/core": "^12.5.0", "@vueuse/shared": "^12.5.0", "aria-hidden": "^1.2.4", "defu": "^6.1.4", "ohash": "^2.0.11" }, "peerDependencies": { "vue": ">= 3.2.0" } }, "sha512-QJGB3q21wQ1Kw28HhhNDpjfFe8qpePX1gK4FTBRd68XTh9aEnhR5bTJnlV0jxi8FBPh0xivZBeNFUc3jiGx7mQ=="], + "require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="], "rfdc": ["rfdc@1.4.1", "", {}, "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA=="], @@ -829,6 +865,8 @@ "supports-color": ["supports-color@8.1.1", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q=="], + "tailwind-merge": ["tailwind-merge@3.3.1", "", {}, "sha512-gBXpgUm/3rp1lMZZrM/w7D8GKqshif0zAymAhbCyIt8KMe+0v9DQ7cdYLR4FHH/cKpdTXb+A/tKKU3eolfsI+g=="], + "tailwindcss": ["tailwindcss@4.1.14", "", {}, "sha512-b7pCxjGO98LnxVkKjaZSDeNuljC4ueKUddjENJOADtubtdo8llTaJy7HwBMeLNSSo2N5QIAgklslK1+Ir8r6CA=="], "tailwindcss-primeui": ["tailwindcss-primeui@0.6.1", "", { "peerDependencies": { "tailwindcss": ">=3.1.0" } }, "sha512-T69Rylcrmnt8zy9ik+qZvsLuRIrS9/k6rYJSIgZ1trnbEzGDDQSCIdmfyZknevqiHwpSJHSmQ9XT2C+S/hJY4A=="], @@ -853,6 +891,8 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "tw-animate-css": ["tw-animate-css@1.4.0", "", {}, "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], @@ -899,6 +939,8 @@ "vue": ["vue@3.5.22", "", { "dependencies": { "@vue/compiler-dom": "3.5.22", "@vue/compiler-sfc": "3.5.22", "@vue/runtime-dom": "3.5.22", "@vue/server-renderer": "3.5.22", "@vue/shared": "3.5.22" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ=="], + "vue-demi": ["vue-demi@0.14.10", "", { "peerDependencies": { "@vue/composition-api": "^1.0.0-rc.1", "vue": "^3.0.0-0 || ^2.6.0" }, "optionalPeers": ["@vue/composition-api"], "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", "vue-demi-switch": "bin/vue-demi-switch.js" } }, "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg=="], + "vue-router": ["vue-router@4.6.3", "", { "dependencies": { "@vue/devtools-api": "^6.6.4" }, "peerDependencies": { "vue": "^3.5.0" } }, "sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg=="], "vue-tsc": ["vue-tsc@3.1.1", "", { "dependencies": { "@volar/typescript": "2.4.23", "@vue/language-core": "3.1.1" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A=="], @@ -967,6 +1009,10 @@ "readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "reka-ui/@vueuse/core": ["@vueuse/core@12.8.2", "", { "dependencies": { "@types/web-bluetooth": "^0.0.21", "@vueuse/metadata": "12.8.2", "@vueuse/shared": "12.8.2", "vue": "^3.5.13" } }, "sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ=="], + + "reka-ui/@vueuse/shared": ["@vueuse/shared@12.8.2", "", { "dependencies": { "vue": "^3.5.13" } }, "sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w=="], + "vue-router/@vue/devtools-api": ["@vue/devtools-api@6.6.4", "", {}, "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g=="], "@types/oauth/@types/node/undici-types": ["undici-types@7.12.0", "", {}, "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ=="], @@ -976,5 +1022,7 @@ "@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], "mlly/pkg-types/confbox": ["confbox@0.1.8", "", {}, "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="], + + "reka-ui/@vueuse/core/@vueuse/metadata": ["@vueuse/metadata@12.8.2", "", {}, "sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A=="], } } diff --git a/frontend/.biomelintrc-auto-import.json b/frontend/.biomelintrc-auto-import.json new file mode 100644 index 0000000..848bccc --- /dev/null +++ b/frontend/.biomelintrc-auto-import.json @@ -0,0 +1,426 @@ +{ + "javascript": { + "globals": [ + "Alias", + "ApiClient", + "ApiKey", + "ApiPlugin", + "Button", + "ButtonVariants", + "ColumnInfo", + "ColumnMapping", + "Component", + "ComponentPublicInstance", + "ComputedRef", + "DirectiveBinding", + "DragDropConfig", + "DragDropContext", + "DragEventData", + "DragState", + "DragVisualState", + "DropEventData", + "DropFeedback", + "DropTarget", + "DropTargetType", + "DropValidation", + "DropZoneConfig", + "EffectScope", + "ExtendedError", + "ExtendedErrorCode", + "ExtractDefaultPropTypes", + "ExtractPropTypes", + "ExtractPublicPropTypes", + "FileRemoveEvent", + "FileSelectEvent", + "FileUploadUploaderEvent", + "FrontendErrorCode", + "InjectionKey", + "ItemSchema", + "Label", + "MaybeRef", + "MaybeRefOrGetter", + "MenuItem", + "PageState", + "ProjectColumn", + "ProjectFile", + "PropType", + "PropertyReference", + "PropertyValueEditorActions", + "PropertyValueEditorState", + "PropertyValueMap", + "Ref", + "ReferenceSchemaMapping", + "RequiredFieldHighlight", + "SchemaCompletenessResult", + "SchemaDragDropContext", + "SchemaRequest", + "ShallowRef", + "Slot", + "Slots", + "StatementRank", + "StatementSchema", + "StatementSchema1", + "StatementSchemaMapping", + "TermsSchemaMapping", + "TieredMenu", + "TransformationFunction", + "TransformationParameter", + "TransformationRule", + "UUID", + "VNode", + "ValidationContext", + "ValidationError", + "ValidationErrorCode", + "ValidationErrorType", + "ValidationMessages", + "ValidationResult", + "ValidationRuleConfig", + "ValueMapping", + "WikibaseDataType", + "WikibaseSchemaMapping", + "WikibaseSchemaResponse", + "WritableComputedRef", + "acceptHMRUpdate", + "api", + "asyncComputed", + "autoResetRef", + "buttonVariants", + "cn", + "computed", + "computedAsync", + "computedEager", + "computedInject", + "computedWithControl", + "controlledComputed", + "controlledRef", + "createApp", + "createEventHook", + "createFrontendError", + "createGlobalState", + "createInjectionState", + "createPinia", + "createReactiveFn", + "createRef", + "createReusableTemplate", + "createSharedComposable", + "createTemplatePromise", + "createUnrefFn", + "customRef", + "debouncedRef", + "debouncedWatch", + "defineAsyncComponent", + "defineComponent", + "defineStore", + "eagerComputed", + "effectScope", + "extendRef", + "getActivePinia", + "getCurrentInstance", + "getCurrentScope", + "getCurrentWatcher", + "h", + "ignorableWatch", + "inject", + "injectLocal", + "isDefined", + "isProxy", + "isReactive", + "isReadonly", + "isRef", + "isShallow", + "makeDestructurable", + "mapActions", + "mapGetters", + "mapState", + "mapStores", + "mapWritableState", + "markRaw", + "nextTick", + "onActivated", + "onBeforeMount", + "onBeforeRouteLeave", + "onBeforeRouteUpdate", + "onBeforeUnmount", + "onBeforeUpdate", + "onClickOutside", + "onDeactivated", + "onElementRemoval", + "onErrorCaptured", + "onKeyStroke", + "onLongPress", + "onMounted", + "onRenderTracked", + "onRenderTriggered", + "onScopeDispose", + "onServerPrefetch", + "onStartTyping", + "onUnmounted", + "onUpdated", + "onWatcherCleanup", + "pausableWatch", + "provide", + "provideLocal", + "reactify", + "reactifyObject", + "reactive", + "reactiveComputed", + "reactiveOmit", + "reactivePick", + "readonly", + "ref", + "refAutoReset", + "refDebounced", + "refDefault", + "refThrottled", + "refWithControl", + "resolveComponent", + "resolveRef", + "resolveUnref", + "router", + "setActivePinia", + "setMapStoreSuffix", + "shallowReactive", + "shallowReadonly", + "shallowRef", + "storeToRefs", + "syncRef", + "syncRefs", + "templateRef", + "throttledRef", + "throttledWatch", + "toRaw", + "toReactive", + "toRef", + "toRefs", + "toValue", + "triggerRef", + "tryOnBeforeMount", + "tryOnBeforeUnmount", + "tryOnMounted", + "tryOnScopeDispose", + "tryOnUnmounted", + "unref", + "unrefElement", + "until", + "useActiveElement", + "useAnimate", + "useApi", + "useArrayDifference", + "useArrayEvery", + "useArrayFilter", + "useArrayFind", + "useArrayFindIndex", + "useArrayFindLast", + "useArrayIncludes", + "useArrayJoin", + "useArrayMap", + "useArrayReduce", + "useArraySome", + "useArrayUnique", + "useAsyncQueue", + "useAsyncState", + "useAttrs", + "useBase64", + "useBattery", + "useBluetooth", + "useBreakpoints", + "useBroadcastChannel", + "useBrowserLocation", + "useCached", + "useClipboard", + "useClipboardItems", + "useCloned", + "useColorMode", + "useColumnDataTypeIndicators", + "useColumnGeneration", + "useConfirm", + "useConfirmDialog", + "useCountdown", + "useCounter", + "useCreateProjectStore", + "useCssModule", + "useCssVar", + "useCssVars", + "useCurrentElement", + "useCycleList", + "useDark", + "useDataTypeCompatibility", + "useDateFormat", + "useDebounce", + "useDebounceFn", + "useDebouncedRefHistory", + "useDeviceMotion", + "useDeviceOrientation", + "useDevicePixelRatio", + "useDevicesList", + "useDisplayMedia", + "useDocumentVisibility", + "useDragDropStore", + "useDraggable", + "useDropZone", + "useElementBounding", + "useElementByPoint", + "useElementHover", + "useElementSize", + "useElementVisibility", + "useErrorHandling", + "useEventBus", + "useEventListener", + "useEventSource", + "useEyeDropper", + "useFavicon", + "useFetch", + "useFileDialog", + "useFileSystemAccess", + "useFocus", + "useFocusWithin", + "useFps", + "useFullscreen", + "useGamepad", + "useGeolocation", + "useHtml", + "useId", + "useIdle", + "useImage", + "useInfiniteScroll", + "useIntersectionObserver", + "useInterval", + "useIntervalFn", + "useKeyModifier", + "useLastChanged", + "useLink", + "useLocalStorage", + "useMagicKeys", + "useManualRefHistory", + "useMediaControls", + "useMediaQuery", + "useMemoize", + "useMemory", + "useModel", + "useMounted", + "useMouse", + "useMouseInElement", + "useMousePressed", + "useMutationObserver", + "useNavigatorLanguage", + "useNetwork", + "useNow", + "useObjectUrl", + "useOffsetPagination", + "useOnline", + "usePageLeave", + "useParallax", + "useParentElement", + "usePerformanceObserver", + "usePermission", + "usePointer", + "usePointerLock", + "usePointerSwipe", + "usePreferredColorScheme", + "usePreferredContrast", + "usePreferredDark", + "usePreferredLanguages", + "usePreferredReducedMotion", + "usePreferredReducedTransparency", + "usePrevious", + "useProjectCreationComposable", + "useProjectListComposable", + "useProjectListStore", + "useProjectStore", + "usePropertySelection", + "usePropertyValueDisplay", + "usePropertyValueEditor", + "useRafFn", + "useRefHistory", + "useReferenceValueMapping", + "useResizeObserver", + "useRoute", + "useRouteParams", + "useRouter", + "useSSRWidth", + "useSchemaApi", + "useSchemaBuilder", + "useSchemaCompletenessValidation", + "useSchemaSelection", + "useSchemaStore", + "useSchemaValidationUI", + "useScreenOrientation", + "useScreenSafeArea", + "useScriptTag", + "useScroll", + "useScrollLock", + "useSessionStorage", + "useShare", + "useSlots", + "useSorted", + "useSpeechRecognition", + "useSpeechSynthesis", + "useStatementConfig", + "useStatementDataTypeValidation", + "useStatementEditor", + "useStatementValidationDisplay", + "useStepper", + "useStorage", + "useStorageAsync", + "useStyleTag", + "useSupported", + "useSwipe", + "useTemplateRef", + "useTemplateRefsList", + "useTermsEditor", + "useTextDirection", + "useTextSelection", + "useTextareaAutosize", + "useThrottle", + "useThrottleFn", + "useThrottledRefHistory", + "useTimeAgo", + "useTimeAgoIntl", + "useTimeout", + "useTimeoutFn", + "useTimeoutPoll", + "useTimestamp", + "useTitle", + "useToNumber", + "useToString", + "useToast", + "useToggle", + "useTransition", + "useUrlSearchParams", + "useUserMedia", + "useVModel", + "useVModels", + "useValidation", + "useValidationCore", + "useValidationErrors", + "useValidationStore", + "useValueMapping", + "useVibrate", + "useVirtualList", + "useWakeLock", + "useWebNotification", + "useWebSocket", + "useWebWorker", + "useWebWorkerFn", + "useWindowFocus", + "useWindowScroll", + "useWindowSize", + "watch", + "watchArray", + "watchAtMost", + "watchDebounced", + "watchDeep", + "watchEffect", + "watchIgnorable", + "watchImmediate", + "watchOnce", + "watchPausable", + "watchPostEffect", + "watchSyncEffect", + "watchThrottled", + "watchTriggerable", + "watchWithFilter", + "whenever" + ] + } +} \ No newline at end of file diff --git a/frontend/.eslintrc-auto-import.json b/frontend/.eslintrc-auto-import.json deleted file mode 100644 index 74f0c0c..0000000 --- a/frontend/.eslintrc-auto-import.json +++ /dev/null @@ -1,420 +0,0 @@ -{ - "globals": { - "Alias": true, - "ApiClient": true, - "ApiKey": true, - "ApiPlugin": true, - "ColumnInfo": true, - "ColumnMapping": true, - "Component": true, - "ComponentPublicInstance": true, - "ComputedRef": true, - "DirectiveBinding": true, - "DragDropConfig": true, - "DragDropContext": true, - "DragEventData": true, - "DragState": true, - "DragVisualState": true, - "DropEventData": true, - "DropFeedback": true, - "DropTarget": true, - "DropTargetType": true, - "DropValidation": true, - "DropZoneConfig": true, - "EffectScope": true, - "ExtendedError": true, - "ExtendedErrorCode": true, - "ExtractDefaultPropTypes": true, - "ExtractPropTypes": true, - "ExtractPublicPropTypes": true, - "FileRemoveEvent": true, - "FileSelectEvent": true, - "FileUploadUploaderEvent": true, - "FrontendErrorCode": true, - "InjectionKey": true, - "ItemSchema": true, - "Label": true, - "MaybeRef": true, - "MaybeRefOrGetter": true, - "MenuItem": true, - "PageState": true, - "ProjectColumn": true, - "ProjectFile": true, - "PropType": true, - "PropertyReference": true, - "PropertyValueEditorActions": true, - "PropertyValueEditorState": true, - "PropertyValueMap": true, - "Ref": true, - "ReferenceSchemaMapping": true, - "RequiredFieldHighlight": true, - "SchemaCompletenessResult": true, - "SchemaDragDropContext": true, - "SchemaRequest": true, - "ShallowRef": true, - "Slot": true, - "Slots": true, - "StatementRank": true, - "StatementSchema": true, - "StatementSchema1": true, - "StatementSchemaMapping": true, - "TermsSchemaMapping": true, - "TieredMenu": true, - "TransformationFunction": true, - "TransformationParameter": true, - "TransformationRule": true, - "UUID": true, - "VNode": true, - "ValidationContext": true, - "ValidationError": true, - "ValidationErrorCode": true, - "ValidationErrorType": true, - "ValidationMessages": true, - "ValidationResult": true, - "ValidationRuleConfig": true, - "ValueMapping": true, - "WikibaseDataType": true, - "WikibaseSchemaMapping": true, - "WikibaseSchemaResponse": true, - "WritableComputedRef": true, - "acceptHMRUpdate": true, - "api": true, - "asyncComputed": true, - "autoResetRef": true, - "computed": true, - "computedAsync": true, - "computedEager": true, - "computedInject": true, - "computedWithControl": true, - "controlledComputed": true, - "controlledRef": true, - "createApp": true, - "createEventHook": true, - "createFrontendError": true, - "createGlobalState": true, - "createInjectionState": true, - "createPinia": true, - "createReactiveFn": true, - "createRef": true, - "createReusableTemplate": true, - "createSharedComposable": true, - "createTemplatePromise": true, - "createUnrefFn": true, - "customRef": true, - "debouncedRef": true, - "debouncedWatch": true, - "defineAsyncComponent": true, - "defineComponent": true, - "defineStore": true, - "eagerComputed": true, - "effectScope": true, - "extendRef": true, - "getActivePinia": true, - "getCurrentInstance": true, - "getCurrentScope": true, - "getCurrentWatcher": true, - "h": true, - "ignorableWatch": true, - "inject": true, - "injectLocal": true, - "isDefined": true, - "isProxy": true, - "isReactive": true, - "isReadonly": true, - "isRef": true, - "isShallow": true, - "makeDestructurable": true, - "mapActions": true, - "mapGetters": true, - "mapState": true, - "mapStores": true, - "mapWritableState": true, - "markRaw": true, - "nextTick": true, - "onActivated": true, - "onBeforeMount": true, - "onBeforeRouteLeave": true, - "onBeforeRouteUpdate": true, - "onBeforeUnmount": true, - "onBeforeUpdate": true, - "onClickOutside": true, - "onDeactivated": true, - "onElementRemoval": true, - "onErrorCaptured": true, - "onKeyStroke": true, - "onLongPress": true, - "onMounted": true, - "onRenderTracked": true, - "onRenderTriggered": true, - "onScopeDispose": true, - "onServerPrefetch": true, - "onStartTyping": true, - "onUnmounted": true, - "onUpdated": true, - "onWatcherCleanup": true, - "pausableWatch": true, - "provide": true, - "provideLocal": true, - "reactify": true, - "reactifyObject": true, - "reactive": true, - "reactiveComputed": true, - "reactiveOmit": true, - "reactivePick": true, - "readonly": true, - "ref": true, - "refAutoReset": true, - "refDebounced": true, - "refDefault": true, - "refThrottled": true, - "refWithControl": true, - "resolveComponent": true, - "resolveRef": true, - "resolveUnref": true, - "router": true, - "setActivePinia": true, - "setMapStoreSuffix": true, - "shallowReactive": true, - "shallowReadonly": true, - "shallowRef": true, - "storeToRefs": true, - "syncRef": true, - "syncRefs": true, - "templateRef": true, - "throttledRef": true, - "throttledWatch": true, - "toRaw": true, - "toReactive": true, - "toRef": true, - "toRefs": true, - "toValue": true, - "triggerRef": true, - "tryOnBeforeMount": true, - "tryOnBeforeUnmount": true, - "tryOnMounted": true, - "tryOnScopeDispose": true, - "tryOnUnmounted": true, - "unref": true, - "unrefElement": true, - "until": true, - "useActiveElement": true, - "useAnimate": true, - "useApi": true, - "useArrayDifference": true, - "useArrayEvery": true, - "useArrayFilter": true, - "useArrayFind": true, - "useArrayFindIndex": true, - "useArrayFindLast": true, - "useArrayIncludes": true, - "useArrayJoin": true, - "useArrayMap": true, - "useArrayReduce": true, - "useArraySome": true, - "useArrayUnique": true, - "useAsyncQueue": true, - "useAsyncState": true, - "useAttrs": true, - "useBase64": true, - "useBattery": true, - "useBluetooth": true, - "useBreakpoints": true, - "useBroadcastChannel": true, - "useBrowserLocation": true, - "useCached": true, - "useClipboard": true, - "useClipboardItems": true, - "useCloned": true, - "useColorMode": true, - "useColumnDataTypeIndicators": true, - "useColumnGeneration": true, - "useConfirm": true, - "useConfirmDialog": true, - "useCountdown": true, - "useCounter": true, - "useCreateProjectStore": true, - "useCssModule": true, - "useCssVar": true, - "useCssVars": true, - "useCurrentElement": true, - "useCycleList": true, - "useDark": true, - "useDataTypeCompatibility": true, - "useDateFormat": true, - "useDebounce": true, - "useDebounceFn": true, - "useDebouncedRefHistory": true, - "useDeviceMotion": true, - "useDeviceOrientation": true, - "useDevicePixelRatio": true, - "useDevicesList": true, - "useDisplayMedia": true, - "useDocumentVisibility": true, - "useDragDropStore": true, - "useDraggable": true, - "useDropZone": true, - "useElementBounding": true, - "useElementByPoint": true, - "useElementHover": true, - "useElementSize": true, - "useElementVisibility": true, - "useErrorHandling": true, - "useEventBus": true, - "useEventListener": true, - "useEventSource": true, - "useEyeDropper": true, - "useFavicon": true, - "useFetch": true, - "useFileDialog": true, - "useFileSystemAccess": true, - "useFocus": true, - "useFocusWithin": true, - "useFps": true, - "useFullscreen": true, - "useGamepad": true, - "useGeolocation": true, - "useHtml": true, - "useId": true, - "useIdle": true, - "useImage": true, - "useInfiniteScroll": true, - "useIntersectionObserver": true, - "useInterval": true, - "useIntervalFn": true, - "useKeyModifier": true, - "useLastChanged": true, - "useLink": true, - "useLocalStorage": true, - "useMagicKeys": true, - "useManualRefHistory": true, - "useMediaControls": true, - "useMediaQuery": true, - "useMemoize": true, - "useMemory": true, - "useModel": true, - "useMounted": true, - "useMouse": true, - "useMouseInElement": true, - "useMousePressed": true, - "useMutationObserver": true, - "useNavigatorLanguage": true, - "useNetwork": true, - "useNow": true, - "useObjectUrl": true, - "useOffsetPagination": true, - "useOnline": true, - "usePageLeave": true, - "useParallax": true, - "useParentElement": true, - "usePerformanceObserver": true, - "usePermission": true, - "usePointer": true, - "usePointerLock": true, - "usePointerSwipe": true, - "usePreferredColorScheme": true, - "usePreferredContrast": true, - "usePreferredDark": true, - "usePreferredLanguages": true, - "usePreferredReducedMotion": true, - "usePreferredReducedTransparency": true, - "usePrevious": true, - "useProjectCreationComposable": true, - "useProjectListComposable": true, - "useProjectListStore": true, - "useProjectStore": true, - "usePropertySelection": true, - "usePropertyValueDisplay": true, - "usePropertyValueEditor": true, - "useRafFn": true, - "useRefHistory": true, - "useReferenceValueMapping": true, - "useResizeObserver": true, - "useRoute": true, - "useRouteParams": true, - "useRouter": true, - "useSSRWidth": true, - "useSchemaApi": true, - "useSchemaBuilder": true, - "useSchemaCompletenessValidation": true, - "useSchemaSelection": true, - "useSchemaStore": true, - "useSchemaValidationUI": true, - "useScreenOrientation": true, - "useScreenSafeArea": true, - "useScriptTag": true, - "useScroll": true, - "useScrollLock": true, - "useSessionStorage": true, - "useShare": true, - "useSlots": true, - "useSorted": true, - "useSpeechRecognition": true, - "useSpeechSynthesis": true, - "useStatementConfig": true, - "useStatementDataTypeValidation": true, - "useStatementEditor": true, - "useStatementValidationDisplay": true, - "useStepper": true, - "useStorage": true, - "useStorageAsync": true, - "useStyleTag": true, - "useSupported": true, - "useSwipe": true, - "useTemplateRef": true, - "useTemplateRefsList": true, - "useTermsEditor": true, - "useTextDirection": true, - "useTextSelection": true, - "useTextareaAutosize": true, - "useThrottle": true, - "useThrottleFn": true, - "useThrottledRefHistory": true, - "useTimeAgo": true, - "useTimeAgoIntl": true, - "useTimeout": true, - "useTimeoutFn": true, - "useTimeoutPoll": true, - "useTimestamp": true, - "useTitle": true, - "useToNumber": true, - "useToString": true, - "useToast": true, - "useToggle": true, - "useTransition": true, - "useUrlSearchParams": true, - "useUserMedia": true, - "useVModel": true, - "useVModels": true, - "useValidation": true, - "useValidationCore": true, - "useValidationErrors": true, - "useValidationStore": true, - "useValueMapping": true, - "useVibrate": true, - "useVirtualList": true, - "useWakeLock": true, - "useWebNotification": true, - "useWebSocket": true, - "useWebWorker": true, - "useWebWorkerFn": true, - "useWindowFocus": true, - "useWindowScroll": true, - "useWindowSize": true, - "watch": true, - "watchArray": true, - "watchAtMost": true, - "watchDebounced": true, - "watchDeep": true, - "watchEffect": true, - "watchIgnorable": true, - "watchImmediate": true, - "watchOnce": true, - "watchPausable": true, - "watchPostEffect": true, - "watchSyncEffect": true, - "watchThrottled": true, - "watchTriggerable": true, - "watchWithFilter": true, - "whenever": true - } -} diff --git a/frontend/auto-imports.d.ts b/frontend/auto-imports.d.ts index e3a495b..5484359 100644 --- a/frontend/auto-imports.d.ts +++ b/frontend/auto-imports.d.ts @@ -8,13 +8,17 @@ export {} declare global { const ApiKey: typeof import('./src/core/plugins/api')['ApiKey'] const ApiPlugin: typeof import('./src/core/plugins/api')['ApiPlugin'] + const Button: typeof import('./src/components/ui/button/index')['Button'] const EffectScope: typeof import('vue')['EffectScope'] const MenuItem: typeof import('primevue/menuitem')['MenuItem'] + const RefreshCcw: typeof import('lucide-vue-next')['RefreshCcw'] const ValidationMessages: typeof import('./src/shared/types/wikibase-schema')['ValidationMessages'] const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate'] const api: typeof import('./src/core/plugins/api')['api'] const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const buttonVariants: typeof import('./src/components/ui/button/index')['buttonVariants'] + const cn: typeof import('./src/lib/utils')['cn'] const computed: typeof import('vue')['computed'] const computedAsync: typeof import('@vueuse/core')['computedAsync'] const computedEager: typeof import('@vueuse/core')['computedEager'] @@ -354,7 +358,25 @@ declare global { // for type re-export declare global { // @ts-ignore - export type { Component, Slot, Slots, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, ShallowRef, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + export type { + Component, + Slot, + Slots, + ComponentPublicInstance, + ComputedRef, + DirectiveBinding, + ExtractDefaultPropTypes, + ExtractPropTypes, + ExtractPublicPropTypes, + InjectionKey, + PropType, + Ref, + ShallowRef, + MaybeRef, + MaybeRefOrGetter, + VNode, + WritableComputedRef, + } from 'vue' import('vue') // @ts-ignore export type { FileUploadUploaderEvent } from 'primevue/fileupload' @@ -372,34 +394,92 @@ declare global { export type { UUID } from 'crypto' import('crypto') // @ts-ignore - export type { TransformationRule, ColumnMapping, PropertyReference, WikibaseDataType, ValueMapping, PropertyValueMap, ReferenceSchemaMapping, StatementRank, StatementSchemaMapping, Label, Alias, TermsSchemaMapping, ItemSchema, WikibaseSchemaResponse } from '@backend/api/project/project.wikibase' + export type { + TransformationRule, + ColumnMapping, + PropertyReference, + WikibaseDataType, + ValueMapping, + PropertyValueMap, + ReferenceSchemaMapping, + StatementRank, + StatementSchemaMapping, + Label, + Alias, + TermsSchemaMapping, + ItemSchema, + WikibaseSchemaResponse, + } from '@backend/api/project/project.wikibase' import('@backend/api/project/project.wikibase') // @ts-ignore + export type { ButtonVariants } from './src/components/ui/button/index' + import('./src/components/ui/button/index') + // @ts-ignore export type { ProjectColumn } from './src/features/data-processing/composables/useColumnGeneration' import('./src/features/data-processing/composables/useColumnGeneration') // @ts-ignore - export type { PropertyValueEditorState, PropertyValueEditorActions } from './src/features/wikibase-schema/composables/usePropertyValueEditor' + export type { + PropertyValueEditorState, + PropertyValueEditorActions, + } from './src/features/wikibase-schema/composables/usePropertyValueEditor' import('./src/features/wikibase-schema/composables/usePropertyValueEditor') // @ts-ignore export type { SchemaRequest } from './src/features/wikibase-schema/composables/useSchemaApi' import('./src/features/wikibase-schema/composables/useSchemaApi') // @ts-ignore - export type { SchemaCompletenessResult, RequiredFieldHighlight } from './src/features/wikibase-schema/composables/useSchemaCompletenessValidation' + export type { + SchemaCompletenessResult, + RequiredFieldHighlight, + } from './src/features/wikibase-schema/composables/useSchemaCompletenessValidation' import('./src/features/wikibase-schema/composables/useSchemaCompletenessValidation') // @ts-ignore export type { ValidationRuleConfig } from './src/features/wikibase-schema/stores/validation.store' import('./src/features/wikibase-schema/stores/validation.store') // @ts-ignore - export type { FrontendErrorCode, ExtendedErrorCode, ExtendedError } from './src/shared/types/client-errors' + export type { + FrontendErrorCode, + ExtendedErrorCode, + ExtendedError, + } from './src/shared/types/client-errors' import('./src/shared/types/client-errors') // @ts-ignore - export type { SchemaDragDropContext, DropZoneConfig, DropFeedback, DragDropContext, DropTarget, DropTargetType, DragState, DropValidation, DragEventData, DropEventData, DragVisualState, DragDropConfig } from './src/shared/types/drag-drop' + export type { + SchemaDragDropContext, + DropZoneConfig, + DropFeedback, + DragDropContext, + DropTarget, + DropTargetType, + DragState, + DropValidation, + DragEventData, + DropEventData, + DragVisualState, + DragDropConfig, + } from './src/shared/types/drag-drop' import('./src/shared/types/drag-drop') // @ts-ignore - export type { ProjectFile, FileSelectEvent, FileRemoveEvent, ApiClient } from './src/shared/types/index' + export type { + ProjectFile, + FileSelectEvent, + FileRemoveEvent, + ApiClient, + } from './src/shared/types/index' import('./src/shared/types/index') // @ts-ignore - export type { ValidationErrorType, ValidationErrorCode, ValidationError, ValidationResult, ValidationContext, WikibaseSchemaMapping, TransformationFunction, TransformationParameter, StatementSchema, StatementSchema1, ColumnInfo } from './src/shared/types/wikibase-schema' + export type { + ValidationErrorType, + ValidationErrorCode, + ValidationError, + ValidationResult, + ValidationContext, + WikibaseSchemaMapping, + TransformationFunction, + TransformationParameter, + StatementSchema, + StatementSchema1, + ColumnInfo, + } from './src/shared/types/wikibase-schema' import('./src/shared/types/wikibase-schema') } @@ -410,12 +490,19 @@ declare module 'vue' { interface ComponentCustomProperties { readonly ApiKey: UnwrapRef readonly ApiPlugin: UnwrapRef + readonly Button: UnwrapRef readonly EffectScope: UnwrapRef - readonly ValidationMessages: UnwrapRef + readonly ValidationMessages: UnwrapRef< + typeof import('./src/shared/types/wikibase-schema')['ValidationMessages'] + > readonly acceptHMRUpdate: UnwrapRef readonly api: UnwrapRef readonly asyncComputed: UnwrapRef readonly autoResetRef: UnwrapRef + readonly buttonVariants: UnwrapRef< + typeof import('./src/components/ui/button/index')['buttonVariants'] + > + readonly cn: UnwrapRef readonly computed: UnwrapRef readonly computedAsync: UnwrapRef readonly computedEager: UnwrapRef @@ -425,15 +512,23 @@ declare module 'vue' { readonly controlledRef: UnwrapRef readonly createApp: UnwrapRef readonly createEventHook: UnwrapRef - readonly createFrontendError: UnwrapRef + readonly createFrontendError: UnwrapRef< + typeof import('./src/shared/types/client-errors')['createFrontendError'] + > readonly createGlobalState: UnwrapRef readonly createInjectionState: UnwrapRef readonly createPinia: UnwrapRef readonly createReactiveFn: UnwrapRef readonly createRef: UnwrapRef - readonly createReusableTemplate: UnwrapRef - readonly createSharedComposable: UnwrapRef - readonly createTemplatePromise: UnwrapRef + readonly createReusableTemplate: UnwrapRef< + typeof import('@vueuse/core')['createReusableTemplate'] + > + readonly createSharedComposable: UnwrapRef< + typeof import('@vueuse/core')['createSharedComposable'] + > + readonly createTemplatePromise: UnwrapRef< + typeof import('@vueuse/core')['createTemplatePromise'] + > readonly createUnrefFn: UnwrapRef readonly customRef: UnwrapRef readonly debouncedRef: UnwrapRef @@ -561,31 +656,45 @@ declare module 'vue' { readonly useClipboardItems: UnwrapRef readonly useCloned: UnwrapRef readonly useColorMode: UnwrapRef - readonly useColumnDataTypeIndicators: UnwrapRef - readonly useColumnGeneration: UnwrapRef + readonly useColumnDataTypeIndicators: UnwrapRef< + typeof import('./src/features/data-processing/composables/useColumnDataTypeIndicators')['useColumnDataTypeIndicators'] + > + readonly useColumnGeneration: UnwrapRef< + typeof import('./src/features/data-processing/composables/useColumnGeneration')['useColumnGeneration'] + > readonly useConfirm: UnwrapRef readonly useConfirmDialog: UnwrapRef readonly useCountdown: UnwrapRef readonly useCounter: UnwrapRef - readonly useCreateProjectStore: UnwrapRef + readonly useCreateProjectStore: UnwrapRef< + typeof import('./src/features/project-management/stores/create-project.store')['useCreateProjectStore'] + > readonly useCssModule: UnwrapRef readonly useCssVar: UnwrapRef readonly useCssVars: UnwrapRef readonly useCurrentElement: UnwrapRef readonly useCycleList: UnwrapRef readonly useDark: UnwrapRef - readonly useDataTypeCompatibility: UnwrapRef + readonly useDataTypeCompatibility: UnwrapRef< + typeof import('./src/features/data-processing/composables/useDataTypeCompatibility')['useDataTypeCompatibility'] + > readonly useDateFormat: UnwrapRef readonly useDebounce: UnwrapRef readonly useDebounceFn: UnwrapRef - readonly useDebouncedRefHistory: UnwrapRef + readonly useDebouncedRefHistory: UnwrapRef< + typeof import('@vueuse/core')['useDebouncedRefHistory'] + > readonly useDeviceMotion: UnwrapRef readonly useDeviceOrientation: UnwrapRef readonly useDevicePixelRatio: UnwrapRef readonly useDevicesList: UnwrapRef readonly useDisplayMedia: UnwrapRef - readonly useDocumentVisibility: UnwrapRef - readonly useDragDropStore: UnwrapRef + readonly useDocumentVisibility: UnwrapRef< + typeof import('@vueuse/core')['useDocumentVisibility'] + > + readonly useDragDropStore: UnwrapRef< + typeof import('./src/features/data-processing/stores/drag-drop.store')['useDragDropStore'] + > readonly useDraggable: UnwrapRef readonly useDropZone: UnwrapRef readonly useElementBounding: UnwrapRef @@ -593,7 +702,9 @@ declare module 'vue' { readonly useElementHover: UnwrapRef readonly useElementSize: UnwrapRef readonly useElementVisibility: UnwrapRef - readonly useErrorHandling: UnwrapRef + readonly useErrorHandling: UnwrapRef< + typeof import('./src/shared/composables/useErrorHandling')['useErrorHandling'] + > readonly useEventBus: UnwrapRef readonly useEventListener: UnwrapRef readonly useEventSource: UnwrapRef @@ -613,7 +724,9 @@ declare module 'vue' { readonly useIdle: UnwrapRef readonly useImage: UnwrapRef readonly useInfiniteScroll: UnwrapRef - readonly useIntersectionObserver: UnwrapRef + readonly useIntersectionObserver: UnwrapRef< + typeof import('@vueuse/core')['useIntersectionObserver'] + > readonly useInterval: UnwrapRef readonly useIntervalFn: UnwrapRef readonly useKeyModifier: UnwrapRef @@ -641,39 +754,77 @@ declare module 'vue' { readonly usePageLeave: UnwrapRef readonly useParallax: UnwrapRef readonly useParentElement: UnwrapRef - readonly usePerformanceObserver: UnwrapRef + readonly usePerformanceObserver: UnwrapRef< + typeof import('@vueuse/core')['usePerformanceObserver'] + > readonly usePermission: UnwrapRef readonly usePointer: UnwrapRef readonly usePointerLock: UnwrapRef readonly usePointerSwipe: UnwrapRef - readonly usePreferredColorScheme: UnwrapRef + readonly usePreferredColorScheme: UnwrapRef< + typeof import('@vueuse/core')['usePreferredColorScheme'] + > readonly usePreferredContrast: UnwrapRef readonly usePreferredDark: UnwrapRef - readonly usePreferredLanguages: UnwrapRef - readonly usePreferredReducedMotion: UnwrapRef - readonly usePreferredReducedTransparency: UnwrapRef + readonly usePreferredLanguages: UnwrapRef< + typeof import('@vueuse/core')['usePreferredLanguages'] + > + readonly usePreferredReducedMotion: UnwrapRef< + typeof import('@vueuse/core')['usePreferredReducedMotion'] + > + readonly usePreferredReducedTransparency: UnwrapRef< + typeof import('@vueuse/core')['usePreferredReducedTransparency'] + > readonly usePrevious: UnwrapRef - readonly useProjectCreationComposable: UnwrapRef - readonly useProjectListComposable: UnwrapRef - readonly useProjectListStore: UnwrapRef - readonly useProjectStore: UnwrapRef - readonly usePropertySelection: UnwrapRef - readonly usePropertyValueDisplay: UnwrapRef - readonly usePropertyValueEditor: UnwrapRef + readonly useProjectCreationComposable: UnwrapRef< + typeof import('./src/features/project-management/composables/useProjectCreationComposable')['useProjectCreationComposable'] + > + readonly useProjectListComposable: UnwrapRef< + typeof import('./src/features/project-management/composables/useProjectListComposable')['useProjectListComposable'] + > + readonly useProjectListStore: UnwrapRef< + typeof import('./src/features/project-management/stores/project-list.store')['useProjectListStore'] + > + readonly useProjectStore: UnwrapRef< + typeof import('./src/features/project-management/stores/project.store')['useProjectStore'] + > + readonly usePropertySelection: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/usePropertySelection')['usePropertySelection'] + > + readonly usePropertyValueDisplay: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/usePropertyValueDisplay')['usePropertyValueDisplay'] + > + readonly usePropertyValueEditor: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/usePropertyValueEditor')['usePropertyValueEditor'] + > readonly useRafFn: UnwrapRef readonly useRefHistory: UnwrapRef - readonly useReferenceValueMapping: UnwrapRef + readonly useReferenceValueMapping: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useReferenceValueMapping')['useReferenceValueMapping'] + > readonly useResizeObserver: UnwrapRef readonly useRoute: UnwrapRef readonly useRouteParams: UnwrapRef readonly useRouter: UnwrapRef readonly useSSRWidth: UnwrapRef - readonly useSchemaApi: UnwrapRef - readonly useSchemaBuilder: UnwrapRef - readonly useSchemaCompletenessValidation: UnwrapRef - readonly useSchemaSelection: UnwrapRef - readonly useSchemaStore: UnwrapRef - readonly useSchemaValidationUI: UnwrapRef + readonly useSchemaApi: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useSchemaApi')['useSchemaApi'] + > + readonly useSchemaBuilder: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useSchemaBuilder')['useSchemaBuilder'] + > + readonly useSchemaCompletenessValidation: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useSchemaCompletenessValidation')['useSchemaCompletenessValidation'] + > + readonly useSchemaSelection: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useSchemaSelection')['useSchemaSelection'] + > + readonly useSchemaStore: UnwrapRef< + typeof import('./src/features/wikibase-schema/stores/schema.store')['useSchemaStore'] + > + readonly useSchemaValidationUI: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useSchemaValidationUI')['useSchemaValidationUI'] + > readonly useScreenOrientation: UnwrapRef readonly useScreenSafeArea: UnwrapRef readonly useScriptTag: UnwrapRef @@ -685,10 +836,18 @@ declare module 'vue' { readonly useSorted: UnwrapRef readonly useSpeechRecognition: UnwrapRef readonly useSpeechSynthesis: UnwrapRef - readonly useStatementConfig: UnwrapRef - readonly useStatementDataTypeValidation: UnwrapRef - readonly useStatementEditor: UnwrapRef - readonly useStatementValidationDisplay: UnwrapRef + readonly useStatementConfig: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useStatementConfig')['useStatementConfig'] + > + readonly useStatementDataTypeValidation: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useStatementDataTypeValidation')['useStatementDataTypeValidation'] + > + readonly useStatementEditor: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useStatementEditor')['useStatementEditor'] + > + readonly useStatementValidationDisplay: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useStatementValidationDisplay')['useStatementValidationDisplay'] + > readonly useStepper: UnwrapRef readonly useStorage: UnwrapRef readonly useStorageAsync: UnwrapRef @@ -697,13 +856,17 @@ declare module 'vue' { readonly useSwipe: UnwrapRef readonly useTemplateRef: UnwrapRef readonly useTemplateRefsList: UnwrapRef - readonly useTermsEditor: UnwrapRef + readonly useTermsEditor: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useTermsEditor')['useTermsEditor'] + > readonly useTextDirection: UnwrapRef readonly useTextSelection: UnwrapRef readonly useTextareaAutosize: UnwrapRef readonly useThrottle: UnwrapRef readonly useThrottleFn: UnwrapRef - readonly useThrottledRefHistory: UnwrapRef + readonly useThrottledRefHistory: UnwrapRef< + typeof import('@vueuse/core')['useThrottledRefHistory'] + > readonly useTimeAgo: UnwrapRef readonly useTimeAgoIntl: UnwrapRef readonly useTimeout: UnwrapRef @@ -720,11 +883,21 @@ declare module 'vue' { readonly useUserMedia: UnwrapRef readonly useVModel: UnwrapRef readonly useVModels: UnwrapRef - readonly useValidation: UnwrapRef - readonly useValidationCore: UnwrapRef - readonly useValidationErrors: UnwrapRef - readonly useValidationStore: UnwrapRef - readonly useValueMapping: UnwrapRef + readonly useValidation: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useValidation')['useValidation'] + > + readonly useValidationCore: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useValidationCore')['useValidationCore'] + > + readonly useValidationErrors: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useValidationErrors')['useValidationErrors'] + > + readonly useValidationStore: UnwrapRef< + typeof import('./src/features/wikibase-schema/stores/validation.store')['useValidationStore'] + > + readonly useValueMapping: UnwrapRef< + typeof import('./src/features/wikibase-schema/composables/useValueMapping')['useValueMapping'] + > readonly useVibrate: UnwrapRef readonly useVirtualList: UnwrapRef readonly useWakeLock: UnwrapRef @@ -752,4 +925,4 @@ declare module 'vue' { readonly watchWithFilter: UnwrapRef readonly whenever: UnwrapRef } -} \ No newline at end of file +} diff --git a/frontend/components.d.ts b/frontend/components.d.ts index c4a08a4..a572a57 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -10,7 +10,7 @@ declare module 'vue' { export interface GlobalComponents { AutoComplete: typeof import('primevue/autocomplete')['default'] BasePropertyValueEditor: typeof import('./src/features/wikibase-schema/components/BasePropertyValueEditor.vue')['default'] - Button: typeof import('primevue/button')['default'] + Button: typeof import('./src/components/ui/button/Button.vue')['default'] Card: typeof import('primevue/card')['default'] Checkbox: typeof import('primevue/checkbox')['default'] Chip: typeof import('primevue/chip')['default'] diff --git a/frontend/components.json b/frontend/components.json new file mode 100644 index 0000000..d3b77fe --- /dev/null +++ b/frontend/components.json @@ -0,0 +1,21 @@ +{ + "$schema": "https://shadcn-vue.com/schema.json", + "style": "new-york", + "typescript": true, + "tailwind": { + "config": "", + "css": "src/assets/base.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "iconLibrary": "lucide", + "aliases": { + "components": "@frontend/components", + "utils": "@frontend/lib/utils", + "ui": "@frontend/components/ui", + "lib": "@frontend/lib", + "composables": "@frontend/composables" + }, + "registries": {} +} diff --git a/frontend/interface-extensions.d.ts b/frontend/interface-extensions.d.ts index 2f5163f..e0d3e0d 100644 --- a/frontend/interface-extensions.d.ts +++ b/frontend/interface-extensions.d.ts @@ -2,8 +2,6 @@ import type { Router } from 'vue-router' import 'vue-router' import 'pinia' -export {} - declare module 'vue-router' { interface RouteMeta { title?: string diff --git a/frontend/package.json b/frontend/package.json index f22cfb3..eda7411 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -6,6 +6,7 @@ "type": "module", "scripts": { "dev": "vite", + "gen": "bunx --bun shadcn-vue@latest add", "typecheck": "vue-tsc" }, "dependencies": { @@ -14,12 +15,18 @@ "@unhead/vue": "^2.0.19", "@vueuse/core": "^13.9.0", "@vueuse/router": "^13.9.0", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", "escape-html": "^1.0.3", "linkify-it": "^5.0.0", + "lucide-vue-next": "^0.546.0", "pinia": "^3.0.3", "primeicons": "^7.0.0", "primevue": "4.4.1", + "reka-ui": "^2.5.1", + "tailwind-merge": "^3.3.1", "tailwindcss-primeui": "^0.6.1", + "tw-animate-css": "^1.4.0", "vue": "^3.5.22", "vue-router": "^4.6.3" }, diff --git a/frontend/src/assets/base.css b/frontend/src/assets/base.css index f460758..1a61c4f 100644 --- a/frontend/src/assets/base.css +++ b/frontend/src/assets/base.css @@ -1,7 +1,129 @@ @import 'tailwindcss'; @import 'tailwindcss-primeui'; +@import "tw-animate-css"; + +@custom-variant dark (&:is(.dark *)); /* This ensures the application always uses the light theme, overriding the device's dark mode settings */ html { color-scheme: light; } + +@theme inline { + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); +} + +:root { + --radius: 0.625rem; + --background: oklch(1 0 0); + --foreground: oklch(0.145 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.145 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.145 0 0); + --primary: oklch(0.205 0 0); + --primary-foreground: oklch(0.985 0 0); + --secondary: oklch(0.97 0 0); + --secondary-foreground: oklch(0.205 0 0); + --muted: oklch(0.97 0 0); + --muted-foreground: oklch(0.556 0 0); + --accent: oklch(0.97 0 0); + --accent-foreground: oklch(0.205 0 0); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.577 0.245 27.325); + --border: oklch(0.922 0 0); + --input: oklch(0.922 0 0); + --ring: oklch(0.708 0 0); + --chart-1: oklch(0.646 0.222 41.116); + --chart-2: oklch(0.6 0.118 184.704); + --chart-3: oklch(0.398 0.07 227.392); + --chart-4: oklch(0.828 0.189 84.429); + --chart-5: oklch(0.769 0.188 70.08); + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.145 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.269 0 0); + --input: oklch(0.269 0 0); + --ring: oklch(0.439 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); +} + +@layer base { + * { + @apply border-border outline-ring/50; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/frontend/src/components/ui/button/Button.vue b/frontend/src/components/ui/button/Button.vue new file mode 100644 index 0000000..54e37ed --- /dev/null +++ b/frontend/src/components/ui/button/Button.vue @@ -0,0 +1,30 @@ + + + diff --git a/frontend/src/components/ui/button/index.ts b/frontend/src/components/ui/button/index.ts new file mode 100644 index 0000000..f4982ea --- /dev/null +++ b/frontend/src/components/ui/button/index.ts @@ -0,0 +1,36 @@ +import type { VariantProps } from 'class-variance-authority' +import { cva } from 'class-variance-authority' + +export { default as Button } from './Button.vue' + +export const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", + { + variants: { + variant: { + default: 'bg-primary text-primary-foreground shadow-xs hover:bg-primary/90', + destructive: + 'bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', + outline: + 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + secondary: 'bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80', + ghost: 'hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50', + link: 'text-primary underline-offset-4 hover:underline', + }, + size: { + default: 'h-9 px-4 py-2 has-[>svg]:px-3', + sm: 'h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5', + lg: 'h-10 rounded-md px-6 has-[>svg]:px-4', + icon: 'size-9', + 'icon-sm': 'size-8', + 'icon-lg': 'size-10', + }, + }, + defaultVariants: { + variant: 'default', + size: 'default', + }, + }, +) + +export type ButtonVariants = VariantProps diff --git a/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue b/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue index 720237c..171a7a7 100644 --- a/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue +++ b/frontend/src/features/data-processing/components/ColumnHeaderMenu.vue @@ -1,4 +1,6 @@