diff --git a/deno.json b/deno.json
index 85db2d7..5f6bca6 100644
--- a/deno.json
+++ b/deno.json
@@ -1,5 +1,6 @@
{
"tasks": {
+ "dev": "deno run fe:dev & deno run be:dev",
"fe:dev": "deno run -A --node-modules-dir npm:vite",
"fe:build": "deno run -A --node-modules-dir npm:vite build",
"fe:preview": "deno run -A --node-modules-dir npm:vite preview",
diff --git a/src/lib/assets/star.svg b/src/lib/assets/star.svg
new file mode 100644
index 0000000..9038ea0
--- /dev/null
+++ b/src/lib/assets/star.svg
@@ -0,0 +1,8 @@
+
+
\ No newline at end of file
diff --git a/src/lib/components/marquee/index.ts b/src/lib/components/marquee/index.ts
new file mode 100644
index 0000000..ca2105d
--- /dev/null
+++ b/src/lib/components/marquee/index.ts
@@ -0,0 +1,4 @@
+import Root from './marquee.svelte';
+import MarqueeCard from './marquee-card.svelte';
+
+export { Root, Root as Marquee, MarqueeCard };
diff --git a/src/lib/components/marquee/marquee-card.svelte b/src/lib/components/marquee/marquee-card.svelte
new file mode 100644
index 0000000..1b20f64
--- /dev/null
+++ b/src/lib/components/marquee/marquee-card.svelte
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+ {name}
+
+
{author}
+
+
+
+
+
{stars}
+
+
+ {description}
+
diff --git a/src/lib/components/marquee/marquee.svelte b/src/lib/components/marquee/marquee.svelte
new file mode 100644
index 0000000..657c9b4
--- /dev/null
+++ b/src/lib/components/marquee/marquee.svelte
@@ -0,0 +1,34 @@
+
+
+
+
{#if isFetching && !isMounted}
@@ -132,21 +133,25 @@
{:else}
-
- Open source projects in Nigeria
-
+
+
+
+
+ All Projects
+
+
+ {#key gettingFreshData}
+
+ {/key}
- {#key gettingFreshData}
-
- {/key}
{/if}
diff --git a/src/lib/pages/home/table.svelte b/src/lib/pages/home/table.svelte
index 2632cae..7520997 100644
--- a/src/lib/pages/home/table.svelte
+++ b/src/lib/pages/home/table.svelte
@@ -3,6 +3,7 @@
import {
Render,
Subscribe,
+ createRender,
// createRender,
createTable,
} from 'svelte-headless-table';
@@ -24,6 +25,7 @@
import * as Table from '$lib/components/table';
import { Button } from '$lib/components/button';
import { BorderBeam } from '$lib/components/border-beam';
+ import AuthorDisplay from './author-display.svelte';
export let data: Repository[] = [];
export let apiMetadata: ApiMetadata;
@@ -62,15 +64,14 @@
header: 'Name',
accessor: 'link',
}),
- table.column({
- header: '',
- accessor: 'author_avatar',
- cell: ({ value }) => value.toLowerCase(),
- }),
table.column({
header: 'Author',
- accessor: 'author',
- cell: ({ value }) => value.toLowerCase(),
+ accessor: (data) => data,
+ cell: ({ value }) => {
+ return createRender(AuthorDisplay, {
+ data: value,
+ });
+ },
}),
table.column({
header: 'Stars',
@@ -109,8 +110,6 @@
const ids = flatColumns.map((c) => c.id);
let hideForId = Object.fromEntries(ids.map((id) => [id, true]));
- const { filterValue } = pluginStates.filter;
-
function goToPage(page: number) {
const url = new URL(window.location.href);
url.searchParams.set('page', page.toString());
diff --git a/tailwind.config.js b/tailwind.config.js
index ee8a036..19cd85b 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -10,8 +10,8 @@ const config = {
center: true,
padding: '2rem',
screens: {
- '2xl': '1400px',
- },
+ '2xl': '1400px'
+ }
},
extend: {
colors: {
@@ -22,54 +22,64 @@ const config = {
foreground: 'hsl(var(--foreground) /
)',
primary: {
DEFAULT: 'hsl(var(--primary) / )',
- foreground: 'hsl(var(--primary-foreground) / )',
+ foreground: 'hsl(var(--primary-foreground) / )'
},
secondary: {
DEFAULT: 'hsl(var(--secondary) / )',
- foreground: 'hsl(var(--secondary-foreground) / )',
+ foreground: 'hsl(var(--secondary-foreground) / )'
},
destructive: {
DEFAULT: 'hsl(var(--destructive) / )',
- foreground: 'hsl(var(--destructive-foreground) / )',
+ foreground: 'hsl(var(--destructive-foreground) / )'
},
muted: {
DEFAULT: 'hsl(var(--muted) / )',
- foreground: 'hsl(var(--muted-foreground) / )',
+ foreground: 'hsl(var(--muted-foreground) / )'
},
accent: {
DEFAULT: 'hsl(var(--accent) / )',
- foreground: 'hsl(var(--accent-foreground) / )',
+ foreground: 'hsl(var(--accent-foreground) / )'
},
popover: {
DEFAULT: 'hsl(var(--popover) / )',
- foreground: 'hsl(var(--popover-foreground) / )',
+ foreground: 'hsl(var(--popover-foreground) / )'
},
card: {
DEFAULT: 'hsl(var(--card) / )',
- foreground: 'hsl(var(--card-foreground) / )',
- },
+ foreground: 'hsl(var(--card-foreground) / )'
+ }
},
borderRadius: {
lg: 'var(--radius)',
md: 'calc(var(--radius) - 2px)',
- sm: 'calc(var(--radius) - 4px)',
+ sm: 'calc(var(--radius) - 4px)'
},
fontFamily: {
- sans: ['Inter', ...fontFamily.sans],
+ sans: ['Inter', ...fontFamily.sans]
},
animation: {
'border-beam': 'border-beam calc(var(--duration)*1s) infinite linear',
+ marquee: 'marquee var(--duration) linear infinite',
+ 'marquee-vertical': 'marquee-vertical var(--duration) linear infinite'
},
keyframes: {
'border-beam': {
'100%': {
- 'offset-distance': '100%',
- },
+ 'offset-distance': '100%'
+ }
},
- },
- },
- },
+ marquee: {
+ from: { transform: 'translateX(0)' },
+ to: { transform: 'translateX(calc(-100% - var(--gap)))' }
+ },
+ 'marquee-vertical': {
+ from: { transform: 'translateY(0)' },
+ to: { transform: 'translateY(calc(-100% - var(--gap)))' }
+ }
+ }
+ }
+ }
};
export default config;