diff --git a/next-ui/package-lock.json b/next-ui/package-lock.json
index 82f509ef..54bf00be 100644
--- a/next-ui/package-lock.json
+++ b/next-ui/package-lock.json
@@ -25,7 +25,7 @@
"vue": "^3.5.30",
"vue-intl": "^7.1.3",
"vuedraggable": "^4.1.0",
- "vuetify": "^3.11.7"
+ "vuetify": "^4.0.2"
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.1",
@@ -12131,9 +12131,9 @@
}
},
"node_modules/vuetify": {
- "version": "3.11.7",
- "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.11.7.tgz",
- "integrity": "sha512-3nK1mKTXQRbU4QXukV4WIbs5YZgMK19flHpFq3pU+6Fpa5YLB8RyyK1BLWAW8JmhSVcaqVUcB/EJ3oJ8g3XNCw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-4.0.2.tgz",
+ "integrity": "sha512-klgSGmfXoLajdTuuxreilzDQjp0ojzL2U5v6Z3ZbMYtpihPPXT9rkd/FxWL3dIGevnWdgaP2Kpwoz6aS/MISDA==",
"license": "MIT",
"funding": {
"type": "github",
diff --git a/next-ui/package.json b/next-ui/package.json
index 9d45d856..19b6f8d7 100644
--- a/next-ui/package.json
+++ b/next-ui/package.json
@@ -46,7 +46,7 @@
"vue": "^3.5.30",
"vue-intl": "^7.1.3",
"vuedraggable": "^4.1.0",
- "vuetify": "^3.11.7"
+ "vuetify": "^4.0.2"
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.1",
diff --git a/next-ui/src/components/AppFooter.vue b/next-ui/src/components/AppFooter.vue
index ecc44d36..f8909669 100644
--- a/next-ui/src/components/AppFooter.vue
+++ b/next-ui/src/components/AppFooter.vue
@@ -21,7 +21,7 @@
variant="text"
color="grey"
size="small"
- class="text-caption"
+ class="text-body-small"
href="https://komga.org"
target="_blank"
:text="
diff --git a/next-ui/src/components/BuildCommit.vue b/next-ui/src/components/BuildCommit.vue
index 0fbcd94b..8ec21022 100644
--- a/next-ui/src/components/BuildCommit.vue
+++ b/next-ui/src/components/BuildCommit.vue
@@ -5,7 +5,7 @@
variant="text"
color="grey"
size="small"
- class="text-caption"
+ class="text-body-small"
:href="'https://github.com/gotson/komga/commits/' + commitId"
target="_blank"
>
diff --git a/next-ui/src/components/BuildVersion.vue b/next-ui/src/components/BuildVersion.vue
index b6d87398..149b14a2 100644
--- a/next-ui/src/components/BuildVersion.vue
+++ b/next-ui/src/components/BuildVersion.vue
@@ -10,7 +10,7 @@
variant="text"
color="grey"
size="small"
- class="text-caption"
+ class="text-body-small"
to="/server/updates"
>
{{ buildVersion || $formatMessage(commonMessages.error) }}
diff --git a/next-ui/src/components/HelloWorld.vue b/next-ui/src/components/HelloWorld.vue
index 85d9f4a9..908ae3c4 100644
--- a/next-ui/src/components/HelloWorld.vue
+++ b/next-ui/src/components/HelloWorld.vue
@@ -12,6 +12,45 @@
+
+
+
+
+
+
+
+
+
+
{{ item.title }}
@@ -14,10 +14,7 @@
-
+
@@ -48,17 +45,3 @@ const emit = defineEmits<{
markRead: [id: string]
}>()
-
-
diff --git a/next-ui/src/components/apikey/GenerateDialog.stories.ts b/next-ui/src/components/apikey/GenerateDialog.stories.ts
index 8a986c79..9d6fdf95 100644
--- a/next-ui/src/components/apikey/GenerateDialog.stories.ts
+++ b/next-ui/src/components/apikey/GenerateDialog.stories.ts
@@ -35,15 +35,19 @@ export const Default: Story = {
export const Created: Story = {
play: async ({ userEvent }) => {
+ const user = userEvent.setup({
+ pointerEventsCheck: 0,
+ })
+
const canvas = within(screen.getByRole('dialog'))
await waitFor(() => expect(canvas.getByText(/kobo sync protocol/i)).toBeVisible())
const comment = canvas.getByLabelText(/comment/i, {
selector: 'input',
})
- await userEvent.type(comment, 'new key')
+ await user.type(comment, 'new key')
- await userEvent.click(canvas.getByRole('button', { name: /generate/i }))
+ await user.click(canvas.getByRole('button', { name: /generate/i }))
},
}
@@ -54,15 +58,19 @@ export const Loading: Story = {
},
},
play: async ({ userEvent }) => {
+ const user = userEvent.setup({
+ pointerEventsCheck: 0,
+ })
+
const canvas = within(screen.getByRole('dialog'))
await waitFor(() => expect(canvas.getByText(/kobo sync protocol/i)).toBeVisible())
const comment = canvas.getByLabelText(/comment/i, {
selector: 'input',
})
- await userEvent.type(comment, 'long loading')
+ await user.type(comment, 'long loading')
- await userEvent.click(canvas.getByRole('button', { name: /generate/i }))
+ await user.click(canvas.getByRole('button', { name: /generate/i }))
},
}
@@ -77,14 +85,18 @@ export const DuplicateError: Story = {
},
},
play: async ({ userEvent }) => {
+ const user = userEvent.setup({
+ pointerEventsCheck: 0,
+ })
+
const canvas = within(screen.getByRole('dialog'))
await waitFor(() => expect(canvas.getByText(/kobo sync protocol/i)).toBeVisible())
const comment = canvas.getByLabelText(/comment/i, {
selector: 'input',
})
- await userEvent.type(comment, 'duplicate')
+ await user.type(comment, 'duplicate')
- await userEvent.click(canvas.getByRole('button', { name: /generate/i }))
+ await user.click(canvas.getByRole('button', { name: /generate/i }))
},
}
diff --git a/next-ui/src/components/dialog/FileNamePicker.vue b/next-ui/src/components/dialog/FileNamePicker.vue
index e6bbafdc..71ed5b25 100644
--- a/next-ui/src/components/dialog/FileNamePicker.vue
+++ b/next-ui/src/components/dialog/FileNamePicker.vue
@@ -22,7 +22,7 @@
-
+
{{
$formatMessage({
description: 'File name picker dialog: source file name field label',
@@ -37,7 +37,7 @@
-
+
-
+
-
+
+
(isPreSelect || selected ? emit('selection', !selected, event) : {})
@@ -55,7 +55,7 @@
{{ title }}
{{ text }}
diff --git a/next-ui/src/components/item/card/ItemCard.vue b/next-ui/src/components/item/card/ItemCard.vue
index c14aff2a..34c47f60 100644
--- a/next-ui/src/components/item/card/ItemCard.vue
+++ b/next-ui/src/components/item/card/ItemCard.vue
@@ -38,7 +38,7 @@
{{ title.text }}
diff --git a/next-ui/src/components/layout/app/Bar.vue b/next-ui/src/components/layout/app/Bar.vue
index 4d5c9544..2d454e00 100644
--- a/next-ui/src/components/layout/app/Bar.vue
+++ b/next-ui/src/components/layout/app/Bar.vue
@@ -1,5 +1,5 @@
-
+
diff --git a/next-ui/src/components/layout/app/drawer/Footer.vue b/next-ui/src/components/layout/app/drawer/Footer.vue
index d0ab70e9..f39a410a 100644
--- a/next-ui/src/components/layout/app/drawer/Footer.vue
+++ b/next-ui/src/components/layout/app/drawer/Footer.vue
@@ -1,13 +1,13 @@
-
+
diff --git a/next-ui/src/components/library/form/StepGeneral.vue b/next-ui/src/components/library/form/StepGeneral.vue
index f141d2f4..0464fa8f 100644
--- a/next-ui/src/components/library/form/StepGeneral.vue
+++ b/next-ui/src/components/library/form/StepGeneral.vue
@@ -17,7 +17,7 @@
-
+
-
+
{{
$formatMessage({
@@ -111,7 +111,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Metadata - section header for epub',
@@ -150,7 +150,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Metadata - section header for mylar series.json',
@@ -178,7 +178,7 @@
-
+
{{
$formatMessage({
description:
@@ -207,7 +207,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Metadata - section header for ISBN barcode',
diff --git a/next-ui/src/components/library/form/StepOptions.vue b/next-ui/src/components/library/form/StepOptions.vue
index 6be055b4..ddf354e3 100644
--- a/next-ui/src/components/library/form/StepOptions.vue
+++ b/next-ui/src/components/library/form/StepOptions.vue
@@ -2,7 +2,7 @@
-
+
{{
$formatMessage({
@@ -128,7 +128,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Options - section header for file management',
@@ -167,7 +167,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Options - section header for series cover',
diff --git a/next-ui/src/components/library/form/StepScanner.vue b/next-ui/src/components/library/form/StepScanner.vue
index 9915d5e5..d3154a39 100644
--- a/next-ui/src/components/library/form/StepScanner.vue
+++ b/next-ui/src/components/library/form/StepScanner.vue
@@ -63,7 +63,7 @@
-
+
{{
$formatMessage({
description: 'Form add/edit library: Scanner - file types selection header',
diff --git a/next-ui/src/components/release/Card.vue b/next-ui/src/components/release/Card.vue
index 287ed52a..d1b1fca9 100644
--- a/next-ui/src/components/release/Card.vue
+++ b/next-ui/src/components/release/Card.vue
@@ -5,7 +5,7 @@
{{ release.version }}
-
+
@@ -68,17 +65,3 @@ const {
current?: boolean
}>()
-
-
diff --git a/next-ui/src/components/selection/Bar.vue b/next-ui/src/components/selection/Bar.vue
index 19f10ff5..362425ec 100644
--- a/next-ui/src/components/selection/Bar.vue
+++ b/next-ui/src/components/selection/Bar.vue
@@ -1,6 +1,6 @@
diff --git a/next-ui/src/components/server/Settings.vue b/next-ui/src/components/server/Settings.vue
index 240f9421..de2df6d4 100644
--- a/next-ui/src/components/server/Settings.vue
+++ b/next-ui/src/components/server/Settings.vue
@@ -11,7 +11,7 @@
>
-
+
{{
$formatMessage({
description: 'Server settings: section header for posters',
@@ -42,7 +42,7 @@
-
+
{{
$formatMessage({
description: 'Server settings: section header for scan behaviour',
@@ -80,7 +80,7 @@
-
+
{{
$formatMessage({
description: 'Server settings: section header for tasks',
@@ -112,7 +112,7 @@
-
+
{{
$formatMessage({
description: 'Server settings: section header for remember me',
@@ -121,7 +121,7 @@
})
}}
-
{{ messageRequiresRestart }}
+
{{ messageRequiresRestart }}
@@ -156,7 +156,7 @@
-
+
{{
$formatMessage({
description: 'Server settings: section header for HTTP server',
@@ -165,7 +165,7 @@
})
}}
-
{{ messageRequiresRestart }}
+
{{ messageRequiresRestart }}
@@ -243,7 +243,7 @@
-
+
{{
$formatMessage({
description: 'Server settings: section header for Kobo Sync',
diff --git a/next-ui/src/components/user/Details.vue b/next-ui/src/components/user/Details.vue
index 122c96eb..82aeb601 100644
--- a/next-ui/src/components/user/Details.vue
+++ b/next-ui/src/components/user/Details.vue
@@ -4,7 +4,9 @@
{{ user.email.charAt(0) }}{{
+ user.email.charAt(0)
+ }}
diff --git a/next-ui/src/components/user/form/CreateEdit.vue b/next-ui/src/components/user/form/CreateEdit.vue
index 515bfcaa..86550332 100644
--- a/next-ui/src/components/user/form/CreateEdit.vue
+++ b/next-ui/src/components/user/form/CreateEdit.vue
@@ -44,7 +44,7 @@
v-if="!user.id"
class="mb-4"
/>
-
Permissions
+
Permissions
@@ -103,12 +103,12 @@
/>
-
+
@@ -148,7 +148,7 @@
- Age restriction
+ Age restriction
@@ -192,7 +192,7 @@
- Label restrictions
+ Label restrictions
diff --git a/next-ui/src/pages/claim.vue b/next-ui/src/pages/claim.vue
index 1d291cbb..c8aeed4d 100644
--- a/next-ui/src/pages/claim.vue
+++ b/next-ui/src/pages/claim.vue
@@ -5,7 +5,7 @@
@submit.prevent="submitForm()"
>
-
+
-
+
diff --git a/next-ui/src/pages/login.vue b/next-ui/src/pages/login.vue
index 5ac44125..e869e278 100644
--- a/next-ui/src/pages/login.vue
+++ b/next-ui/src/pages/login.vue
@@ -5,7 +5,7 @@
@submit.prevent="submitForm()"
>
-
+
-
+
{{
$formatMessage({
@@ -112,7 +112,7 @@
-
+
diff --git a/next-ui/src/pages/startup.vue b/next-ui/src/pages/startup.vue
index ec36eca7..3506c3d2 100644
--- a/next-ui/src/pages/startup.vue
+++ b/next-ui/src/pages/startup.vue
@@ -1,6 +1,6 @@
-
+
, key) => {
- obj[key] = `i-mdi:${aliases[key]!.toString().substring(4)}`
- return obj
- }, {}),
+ defaultSet: 'mdi',
+ aliases,
+ sets: {
+ mdi,
+ },
},
theme: {
defaultTheme: 'light',
diff --git a/next-ui/src/stores/messages.ts b/next-ui/src/stores/messages.ts
index e1b2d859..5e18f066 100644
--- a/next-ui/src/stores/messages.ts
+++ b/next-ui/src/stores/messages.ts
@@ -5,7 +5,7 @@ type Message =
| {
text: string
color?: string
- timer?: string | boolean
+ timer?: boolean | 'top' | 'bottom'
timeout?: string | number
}
| string
diff --git a/next-ui/uno.config.ts b/next-ui/uno.config.ts
index 3b2d16fb..9fc448cc 100644
--- a/next-ui/uno.config.ts
+++ b/next-ui/uno.config.ts
@@ -1,12 +1,12 @@
import { defineConfig, presetIcons } from 'unocss'
-import { aliases } from 'vuetify/iconsets/mdi'
-
-// build the safelist from the vuetify icon aliases
-const vuetifyIcons = Object.keys(aliases).map(
- (key) => `i-mdi:${aliases[key]!.toString().substring(4)}`,
-)
export default defineConfig({
- presets: [presetIcons()],
- safelist: vuetifyIcons,
+ presets: [
+ presetIcons({
+ // ensures proper CSS layers for icon colors
+ processor(props) {
+ delete props.color
+ },
+ }),
+ ],
})