diff --git a/.eslintrc.json b/.eslintrc.json
index 7a824ff6..25e83d5a 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -50,7 +50,8 @@
"@next/next/no-img-element": "off",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-explicit-any": "off",
- "@typescript-eslint/no-var-requires": "off"
+ "@typescript-eslint/no-var-requires": "off",
+ "@typescript-eslint/no-empty-interface": "off"
},
"globals": {
"React": "writable"
diff --git a/.github/workflows/stale-issues.yml b/.github/workflows/stale-issues.yml
index bf2505b1..24711fba 100644
--- a/.github/workflows/stale-issues.yml
+++ b/.github/workflows/stale-issues.yml
@@ -19,4 +19,6 @@ jobs:
close-issue-message: 'This issue was closed because it has been inactive for 7 days since being marked as stale.'
days-before-pr-stale: -1
days-before-pr-close: -1
+ operations-per-run: 200
+ ascending: true
repo-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/assets/magnet.svg b/assets/magnet.svg
new file mode 100644
index 00000000..3c64c3ee
--- /dev/null
+++ b/assets/magnet.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/components/common/Pager.js b/components/common/Pager.js
new file mode 100644
index 00000000..aaeffbae
--- /dev/null
+++ b/components/common/Pager.js
@@ -0,0 +1,45 @@
+import styles from './Pager.module.css';
+import { Button, Flexbox, Icon, Icons } from 'react-basics';
+import useMessages from 'hooks/useMessages';
+
+export function Pager({ page, pageSize, count, onPageChange }) {
+ const { formatMessage, labels } = useMessages();
+ const maxPage = Math.ceil(count / pageSize);
+ const lastPage = page === maxPage;
+ const firstPage = page === 1;
+
+ if (count === 0) {
+ return null;
+ }
+
+ const handlePageChange = value => {
+ const nextPage = page + value;
+ if (nextPage > 0 && nextPage <= maxPage) {
+ onPageChange(nextPage);
+ }
+ };
+
+ if (maxPage === 1) {
+ return null;
+ }
+
+ return (
+