Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
9a5770d
Update packages, basic configuration
chvp Dec 26, 2025
d702728
Fix all lint errors
chvp Dec 26, 2025
629bd94
Fix compilation
chvp Dec 26, 2025
d9d5043
Use Promise.withResolvers()
chvp Dec 26, 2025
9572dfb
Fix errors always rendering
chvp Dec 26, 2025
1db3428
Add back catch-all path
chvp Dec 26, 2025
fa263d4
Replace all activator on usages with props
chvp Dec 26, 2025
b01ae51
Use item.raw in default template for data iterator
chvp Dec 26, 2025
ef670d5
Make tables render something
chvp Dec 26, 2025
3d85285
Update vuedraggable and fix usages
chvp Dec 30, 2025
d345b41
Bring back pagination on the homepage
chvp Dec 30, 2025
30ae482
Bring back title updates using unhead
chvp Dec 30, 2025
ba0ebd1
Fix layout of navigation drawer
chvp Dec 30, 2025
8b929f2
Fix image picker
chvp Dec 30, 2025
cbeb321
Fix artist card not cropping images
chvp Dec 30, 2025
a7a1345
Follow system theme
chvp Dec 30, 2025
3ebdb72
Re-introduce vuetify scss settings
chvp Dec 30, 2025
5feb46a
Use primary color for all links by default
chvp Dec 30, 2025
d0a8f26
Stop using non-existent colors
chvp Dec 30, 2025
5ff8b1e
Make sure on this day albums are sorted newest first
chvp Dec 31, 2025
559a4f3
Fix usages of display-breakpoints
chvp Dec 31, 2025
65ed89d
Make sure footer background isn't white in dark mode
chvp Dec 31, 2025
cc20f54
Fix layout and behaviour of sliders in player
chvp Dec 31, 2025
a3de53e
Remove some unused styling
chvp Dec 31, 2025
4847681
Fix intersection calculation in stats
chvp Dec 31, 2025
c22fb2c
Fix period picker in stats
chvp Dec 31, 2025
7cd4b3d
Fix layout of range picker card
chvp Dec 31, 2025
40f3d68
Set minimum width of period picker
chvp Dec 31, 2025
bdd7a2a
Fix playlist form
chvp Dec 31, 2025
8932e02
Use camelcase style component for VTable
chvp Dec 31, 2025
7be469c
Fix styling of some icon buttons
chvp Jan 1, 2026
ba9e750
Fix id append of album selector in track form
chvp Jan 1, 2026
9a4e58d
Fix lint
chvp Jan 1, 2026
b69470b
Use translations from vuetify to fix a lot of missing translation war…
chvp Jan 2, 2026
9cd3a38
Fix some styling on the homepage
chvp Jan 2, 2026
6e9325a
Fix pagination on artists page
chvp Jan 2, 2026
e428168
Fix amount of items in rows on the home page
chvp Jan 2, 2026
a5a568a
Enlarge icons in the action buttons
chvp Jan 2, 2026
31d0546
Fix lint
chvp Jan 2, 2026
e94a066
Fix the size of some more action icons
chvp Jan 2, 2026
0500b1d
Fix the size of some more action icons
chvp Jan 2, 2026
d164b51
Add pagination to albums page
chvp Jan 2, 2026
ac5d0d2
Fix multi-delete in auth tokens table
chvp Jan 2, 2026
1479ee0
Fix removeItem when some ids are strings
chvp Jan 2, 2026
63a4bde
Fix some more icon sizes in actions
chvp Jan 2, 2026
40179d8
Fix icon sizes on users index
chvp Jan 2, 2026
279e870
Fix pagination on genres, labels and playlists
chvp Jan 2, 2026
759f599
Fix look and functionality of user settings
chvp Jan 2, 2026
9d5d26e
Fix artist form
chvp Jan 2, 2026
a9050c2
Fix album form
chvp Jan 2, 2026
13b897e
Fix merge dialogs
chvp Jan 2, 2026
3dfaefb
Fix tracks table look and interactions
chvp Jan 2, 2026
d9bf7de
Add custom footer to auth tokens table
chvp Jan 2, 2026
3385369
Make pagination compact
chvp Jan 2, 2026
7523868
Add pagination to label and playlist show
chvp Jan 2, 2026
8e9865b
Fix layout of merge track view
chvp Jan 2, 2026
f8ea1f1
Fix loading of some pages
chvp Jan 2, 2026
bca8f47
Fix track form
chvp Jan 2, 2026
a74ab60
Fix styling of mass edit
chvp Jan 2, 2026
cb70c0c
More styling fixes
chvp Jan 2, 2026
c839472
Even more styling fixes
chvp Jan 2, 2026
01b3606
Fix selectability of current auth token
chvp Jan 2, 2026
7f78a0b
Fix text color in stats
chvp Jan 2, 2026
84492bb
Fix percentage played text color in stats
chvp Jan 2, 2026
f7f3217
Fix height of average switch in stats
chvp Jan 2, 2026
955e715
Fix some usages of `:value`
chvp Jan 2, 2026
2a3f787
Remove explicit dependency on sfc compiler
chvp Jan 2, 2026
1694f18
Configure vue-eslint-parser, lint
chvp Jan 2, 2026
0aa930e
Lint tool config files as well
chvp Jan 3, 2026
ad732ff
Restore accidently removed rules
chvp Jan 3, 2026
e64e295
Convert app to typescript and composition API
chvp Jan 11, 2026
ee49319
Remove some more non-composition API usages
chvp Jan 11, 2026
b954648
Remove type cast for vuetify vue-i18n integration
chvp Jan 11, 2026
8acb011
Fix new plays not having a time
chvp Jan 11, 2026
5ed2b19
Fix review comments not being cleared
chvp Jan 11, 2026
383c96c
Fix tracks disappearing after artist merge
chvp Jan 18, 2026
c03f746
Fix track numbers to be number fields
chvp Jan 18, 2026
6adb33c
Fix album selection in mass edit dialog
chvp Jan 18, 2026
8f654d3
Introduce helper type for models enhanced with loaded timestamp
chvp Jan 18, 2026
b77fc35
Rename date modal models in album form
chvp Jan 18, 2026
9eb8196
Fix sorting of dates in range select
chvp Jan 18, 2026
cf26833
Fix sorting of artists in top albums list
chvp Jan 19, 2026
1c529bb
Make sure tracks table actually uses save pagination prop
chvp Jan 19, 2026
43c97f4
Don't allow exception for higher order functions in eslint
chvp Jan 21, 2026
00122a1
Require promises to be handled
chvp Jan 21, 2026
f19ea0a
Move comparators to util
chvp Jan 21, 2026
abd5e84
Don't make previous and next items small
chvp Jan 21, 2026
038474b
Align pagination to the right
chvp Jan 21, 2026
f67376c
Set list icon item opacity to 1
chvp Jan 21, 2026
41e88e0
Remove arrow key handling in track form artists
chvp Jan 21, 2026
063832d
Bump api-client-js dependency
chvp Jan 25, 2026
31e9125
Update yarn.nix
chvp Jan 25, 2026
330c382
Fix type in Login.vue
chvp Jan 25, 2026
eb17f02
Don't typecheck eslint config
chvp Jan 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 0 additions & 18 deletions .eslintrc.js

This file was deleted.

18 changes: 16 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '22.x'
cache: 'yarn'
- name: Install dependencies
run: yarn install
Expand All @@ -43,9 +43,23 @@ jobs:
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: '20.x'
node-version: '22.x'
cache: 'yarn'
- name: Install dependencies
run: yarn install
- name: Lint
run: yarn run lint --no-fix --max-warnings 0 --format stylish
type-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: '22.x'
cache: 'yarn'
- name: Install dependencies
run: yarn install
- name: Check types
run: yarn run type-check

2 changes: 2 additions & 0 deletions env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// This is defined by vite at build time
declare let __APPLICATION_VERSION__: string;
56 changes: 56 additions & 0 deletions eslint.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { globalIgnores } from "eslint/config";
import eslint from "@eslint/js";
Comment thread
chvp marked this conversation as resolved.
import tseslint from "typescript-eslint";
import globals from "globals";
import prettier from "@vue/eslint-config-prettier";
import vue from "eslint-plugin-vue";
import vueParser from "vue-eslint-parser";
import vuetify from "eslint-plugin-vuetify";
import {
defineConfigWithVueTs,
vueTsConfigs,
} from "@vue/eslint-config-typescript";

export default defineConfigWithVueTs(
{
name: "app/files-to-lint",
files: ["**/*.{vue,ts}"],
},
globalIgnores(["**/dist/**", "eslint.config.ts"]),
eslint.configs.recommended,
{
files: ["**/*.vue"],
languageOptions: {
parser: vueParser,
},
},
tseslint.configs.strict,
tseslint.configs.stylistic,
...vue.configs["flat/recommended"],
...vuetify.configs["flat/recommended"],
vueTsConfigs.recommended,
prettier,
{
rules: {
curly: "error",
"no-console": "error",
"no-debugger": "error",
"no-invalid-this": "error",
"require-await": "error",
"vue/multi-word-component-names": "off",
"@typescript-eslint/explicit-function-return-type": [
"error",
{ allowHigherOrderFunctions: false },
],
"@typescript-eslint/explicit-module-boundary-types": "error",
"@typescript-eslint/no-floating-promises": "error",
"@typescript-eslint/no-non-null-assertion": "off",
},
languageOptions: {
sourceType: "module",
globals: {
...globals.browser,
},
},
},
);
4 changes: 2 additions & 2 deletions flake.nix
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
inherit pname version;
src = pkgs.lib.cleanSourceWith { filter = name: type: !(builtins.elem name [ ".github" "flake.lock" "flake.nix" ]); src = ./.; name = "${pname}-${version}-source"; };

nativeBuildInputs = [ (pkgs.yarn.override { nodejs = pkgs.nodejs_20; }) ];
nativeBuildInputs = [ (pkgs.yarn.override { nodejs = pkgs.nodejs_22; }) ];

configurePhase = ''
cp -r ${deps}/node_modules/ .
Expand All @@ -60,7 +60,7 @@
packages = with pkgs; [
nixpkgs-fmt
yarn2nix
(yarn.override { nodejs = nodejs_20; })
(yarn.override { nodejs = nodejs_22; })
];
};
};
Expand Down
2 changes: 1 addition & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,6 @@
<strong>We're sorry but Accentor doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<div id="main"></div>
<script type="module" src="src/main.js"></script>
<script type="module" src="src/main.ts"></script>
</body>
</html>
51 changes: 32 additions & 19 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,43 +2,56 @@
"name": "accentor",
"version": "0.34.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint --ext .js,.vue src",
"preview": "vite preview"
"lint": "eslint .",
"preview": "vite preview",
"type-check": "vue-tsc --build --force"
},
"dependencies": {
"@accentor/api-client-js": "^0.23.5",
"@accentor/api-client-js": "^0.23.6",
"@mdi/font": "^7.4.47",
"@mdi/svg": "^7.4.47",
"@vueuse/core": "^11.3.0",
"@unhead/vue": "^2.1.1",
"@vueuse/core": "^14.1.0",
"fetch-retry": "^6.0.0",
"gsap": "^3.14.2",
"localforage": "^1.10.0",
"pinia": "2.3.1",
"pinia": "^3.0.4",
"roboto-fontface": "^0.10.0",
"vue": "^2.7.16",
"vue-global-events": "^1.2.1",
"vue-i18n": "^8.28.2",
"vue-meta": "^2.4.0",
"vue-router": "^3.6.5",
"vuedraggable": "^2.24.3",
"vuetify": "^2.7.2"
"vue": "^3.5.26",
"vue-global-events": "^3.0.1",
"vue-i18n": "^11.0.1",
"vue-router": "^4.6.4",
"vuedraggable": "^4.1.0",
"vuetify": "^3.11.5"
},
"devDependencies": {
"@vitejs/plugin-vue2": "^2.3.4",
"@vue/eslint-config-prettier": "^9.0.0",
"@eslint/js": "^9.39.2",
"@tsconfig/node22": "^22.0.5",
"@types/node": "^22.13.14",
"@vitejs/plugin-vue": "^6.0.3",
"@vue/eslint-config-prettier": "^10.2.0",
"@vue/eslint-config-typescript": "^14.6.0",
"@vue/tsconfig": "^0.8.1",
"autoprefixer": "^10.4.23",
"eslint": "^8.57.1",
"eslint": "^9.39.2",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-prettier": "^5.5.5",
"eslint-plugin-vue": "^9.32.0",
"eslint-plugin-vuetify": "^1.1.0",
"eslint-plugin-vue": "^10.6.2",
"eslint-plugin-vuetify": "^2.5.3",
"globals": "^16.5.0",
"jiti": "^2.6.1",
"prettier": "^3.8.1",
"sass": "^1.97.3",
"unplugin-vue-components": "^30.0.0",
"typescript": "^5.9.3",
"typescript-eslint": "^8.51.0",
"vite": "7.3.1",
"vue-template-compiler": "^2.7.16"
"vite-plugin-vue-devtools": "^8.0.5",
"vite-plugin-vuetify": "^2.1.2",
"vue-eslint-parser": "^10.2.0",
"vue-tsc": "^3.2.1"
}
}
5 changes: 0 additions & 5 deletions postcss.config.js

This file was deleted.

4 changes: 4 additions & 0 deletions scss/settings.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
@use "vuetify/settings" with (
$button-text-letter-spacing: 0,
$list-item-icon-opacity: 1,
);
65 changes: 15 additions & 50 deletions src/Root.vue
Original file line number Diff line number Diff line change
@@ -1,72 +1,37 @@
<template>
<VApp>
<router-view />
<Suspense>
<RouterView />
<template #fallback>
<VIcon>mdi-refresh mdi-spin</VIcon>
</template>
</Suspense>
</VApp>
</template>

<script>
export default {
name: "Root",
metaInfo: {
title: "Main",
titleTemplate: "%s | Accentor",
},
};
<script setup lang="ts">
import { useHead } from "@unhead/vue";

useHead({ title: "Main" });
</script>

<style lang="scss">
@import "vuetify/src/styles/styles.sass";

// Additional resets
a {
text-decoration: none;
}

// Component styles with global scope
.actions {
.actions__button {
margin: 4px 8px 4px 0;
}
}
.actions--wide {
.actions__button {
margin: 8px 16px 8px 0;
}
}

@media (min-width: map-get($grid-breakpoints, "sm")) {
.actions--sm-wide {
.actions__button {
margin: 8px 16px 8px 0;
}
}
}

.button-group {
border-radius: 4px;
overflow: hidden;
box-shadow:
0px 2px 4px -1px rgba(0, 0, 0, 0.2),
0px 4px 5px 0px rgba(0, 0, 0, 0.14),
0px 1px 10px 0px rgba(0, 0, 0, 0.12);

&__button {
margin: 0;
border-radius: 0;
}
color: rgb(var(--v-theme-primary));
}

// Additional utility classes
.break-word {
word-break: break-word;
}

.white-space-nowrap {
white-space: nowrap;
.no-break-word {
word-break: keep-all;
}

// Temporary fix until https://github.com/vuetifyjs/vuetify/issues/13678 is resolved
.v-data-footer {
justify-content: flex-end;
.white-space-nowrap {
white-space: nowrap;
}
</style>
2 changes: 1 addition & 1 deletion src/api.js → src/api.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { createApiClient } from "@accentor/api-client-js";

let url;
let url: string;
if (import.meta.env.VITE_API_URL !== undefined) {
url = import.meta.env.VITE_API_URL;
} else if (import.meta.env.PROD) {
Expand Down
Loading