diff --git a/next-ui/src/components.d.ts b/next-ui/src/components.d.ts
index 24194d34..39ff74c2 100644
--- a/next-ui/src/components.d.ts
+++ b/next-ui/src/components.d.ts
@@ -94,6 +94,8 @@ declare module 'vue' {
PageHashMatchTable: typeof import('./components/pageHash/MatchTable.vue')['default']
PageHashUnknownTable: typeof import('./components/pageHash/UnknownTable.vue')['default']
PageSizeSelector: typeof import('./components/PageSizeSelector.vue')['default']
+ PagingSelector: typeof import('./components/PagingSelector.vue')['default']
+ PosterSizeSlider: typeof import('./components/PosterSizeSlider.vue')['default']
PresentationSelector: typeof import('./components/PresentationSelector.vue')['default']
ReleaseCard: typeof import('./components/release/Card.vue')['default']
RemoteFileList: typeof import('./components/RemoteFileList.vue')['default']
diff --git a/next-ui/src/components/PagingSelector.stories.ts b/next-ui/src/components/PagingSelector.stories.ts
new file mode 100644
index 00000000..e64e8b44
--- /dev/null
+++ b/next-ui/src/components/PagingSelector.stories.ts
@@ -0,0 +1,40 @@
+import type { Meta, StoryObj } from '@storybook/vue3-vite'
+
+import PagingSelector from './PagingSelector.vue'
+import { fn } from 'storybook/test'
+
+const meta = {
+ component: PagingSelector,
+ render: (args: object) => ({
+ components: { PagingSelector },
+ setup() {
+ return { args }
+ },
+ template: '',
+ }),
+ parameters: {
+ // More on how to position stories at: https://storybook.js.org/docs/configure/story-layout
+ docs: {
+ description: {
+ component: '',
+ },
+ },
+ },
+ args: {
+ modelValue: 'scroll',
+ 'onUpdate:modelValue': fn(),
+ },
+} satisfies Meta
+
+export default meta
+type Story = StoryObj
+
+export const Scroll: Story = {
+ args: {},
+}
+
+export const Paged: Story = {
+ args: {
+ modelValue: 'paged',
+ },
+}
diff --git a/next-ui/src/components/PagingSelector.vue b/next-ui/src/components/PagingSelector.vue
new file mode 100644
index 00000000..f2505c63
--- /dev/null
+++ b/next-ui/src/components/PagingSelector.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/next-ui/src/components/PosterSizeSlider.vue b/next-ui/src/components/PosterSizeSlider.vue
new file mode 100644
index 00000000..1c8a3b78
--- /dev/null
+++ b/next-ui/src/components/PosterSizeSlider.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
diff --git a/next-ui/src/components/filter/by/Author.vue b/next-ui/src/components/filter/by/Author.vue
index 165dcf0d..d2380615 100644
--- a/next-ui/src/components/filter/by/Author.vue
+++ b/next-ui/src/components/filter/by/Author.vue
@@ -70,8 +70,7 @@ const { data: infiniteData, loadNextPage } = useInfiniteQuery({
})
// unwrap the openapi-fetch structure on success
.then((res) => res.data),
- getNextPageParam: (lastPage) =>
- !lastPage?.last ? new PageRequest((lastPage?.number ?? 0) + 1, lastPage?.size) : null,
+ getNextPageParam: (lastPage, _, lastPageParam) => (!lastPage?.last ? lastPageParam.next() : null),
})
const infiniteItems = computed(() => {
const itemTypes = (infiniteData.value?.pages.flatMap((it) => it?.content ?? []) ?? []).map((it) =>
diff --git a/next-ui/src/components/filter/by/Genre.vue b/next-ui/src/components/filter/by/Genre.vue
index 359c8f1b..bf074513 100644
--- a/next-ui/src/components/filter/by/Genre.vue
+++ b/next-ui/src/components/filter/by/Genre.vue
@@ -65,8 +65,7 @@ const { data: infiniteData, loadNextPage } = useInfiniteQuery({
})
// unwrap the openapi-fetch structure on success
.then((res) => res.data),
- getNextPageParam: (lastPage) =>
- !lastPage?.last ? new PageRequest((lastPage?.number ?? 0) + 1, lastPage?.size) : null,
+ getNextPageParam: (lastPage, _, lastPageParam) => (!lastPage?.last ? lastPageParam.next() : null),
})
const infiniteItems = computed(() => {
const itemTypes = (infiniteData.value?.pages.flatMap((it) => it?.content ?? []) ?? []).map((it) =>
diff --git a/next-ui/src/components/filter/by/Publisher.vue b/next-ui/src/components/filter/by/Publisher.vue
index ccd506ae..20274a78 100644
--- a/next-ui/src/components/filter/by/Publisher.vue
+++ b/next-ui/src/components/filter/by/Publisher.vue
@@ -65,8 +65,7 @@ const { data: infiniteData, loadNextPage } = useInfiniteQuery({
})
// unwrap the openapi-fetch structure on success
.then((res) => res.data),
- getNextPageParam: (lastPage) =>
- !lastPage?.last ? new PageRequest((lastPage?.number ?? 0) + 1, lastPage?.size) : null,
+ getNextPageParam: (lastPage, _, lastPageParam) => (!lastPage?.last ? lastPageParam.next() : null),
})
const infiniteItems = computed(() => {
const itemTypes = (infiniteData.value?.pages.flatMap((it) => it?.content ?? []) ?? []).map((it) =>
diff --git a/next-ui/src/components/filter/by/SharingLabel.vue b/next-ui/src/components/filter/by/SharingLabel.vue
index ae9ec32d..e3ccd68b 100644
--- a/next-ui/src/components/filter/by/SharingLabel.vue
+++ b/next-ui/src/components/filter/by/SharingLabel.vue
@@ -65,8 +65,7 @@ const { data: infiniteData, loadNextPage } = useInfiniteQuery({
})
// unwrap the openapi-fetch structure on success
.then((res) => res.data),
- getNextPageParam: (lastPage) =>
- !lastPage?.last ? new PageRequest((lastPage?.number ?? 0) + 1, lastPage?.size) : null,
+ getNextPageParam: (lastPage, _, lastPageParam) => (!lastPage?.last ? lastPageParam.next() : null),
})
const infiniteItems = computed(() => {
const itemTypes = (infiniteData.value?.pages.flatMap((it) => it?.content ?? []) ?? []).map((it) =>
diff --git a/next-ui/src/components/filter/by/Tag.vue b/next-ui/src/components/filter/by/Tag.vue
index e1b3c295..123aa6e7 100644
--- a/next-ui/src/components/filter/by/Tag.vue
+++ b/next-ui/src/components/filter/by/Tag.vue
@@ -70,8 +70,7 @@ const { data: infiniteData, loadNextPage } = useInfiniteQuery({
})
// unwrap the openapi-fetch structure on success
.then((res) => res.data),
- getNextPageParam: (lastPage) =>
- !lastPage?.last ? new PageRequest((lastPage?.number ?? 0) + 1, lastPage?.size) : null,
+ getNextPageParam: (lastPage, _, lastPageParam) => (!lastPage?.last ? lastPageParam.next() : null),
})
const infiniteItems = computed(() => {
const itemTypes = (infiniteData.value?.pages.flatMap((it) => it?.content ?? []) ?? []).map((it) =>
diff --git a/next-ui/src/pages/libraries/[id]/series.vue b/next-ui/src/pages/libraries/[id]/series.vue
index a554b47c..596591a5 100644
--- a/next-ui/src/pages/libraries/[id]/series.vue
+++ b/next-ui/src/pages/libraries/[id]/series.vue
@@ -2,16 +2,7 @@
-
+
+
+
+
-
-
-
-
-
-
- toggleSelect(item, idx, event as MouseEvent)"
- />
-
-
-
-
-
-
+
+
+
+
-
- toggleSelect(item, idx, event as MouseEvent)"
- />
-
-
-
-
-
+ toggleSelect(item, idx, event as MouseEvent)"
+ />
+
+
+
-
-
+
+
+
+ toggleSelect(item, idx, event as MouseEvent)"
+ />
+
+
+
+
+
+
+
+
+