-
+
+ {@render children?.()}
diff --git a/frontend/src/lib/components/ui/sheet/sheet-overlay.svelte b/frontend/src/lib/components/ui/sheet/sheet-overlay.svelte
index f474626..65b258d 100644
--- a/frontend/src/lib/components/ui/sheet/sheet-overlay.svelte
+++ b/frontend/src/lib/components/ui/sheet/sheet-overlay.svelte
@@ -1,21 +1,19 @@
diff --git a/frontend/src/lib/components/ui/sheet/sheet-title.svelte b/frontend/src/lib/components/ui/sheet/sheet-title.svelte
index fff1b70..25f42fc 100644
--- a/frontend/src/lib/components/ui/sheet/sheet-title.svelte
+++ b/frontend/src/lib/components/ui/sheet/sheet-title.svelte
@@ -2,15 +2,15 @@
import { Dialog as SheetPrimitive } from "bits-ui";
import { cn } from "$lib/utils.js";
- type $$Props = SheetPrimitive.TitleProps;
-
- let className: $$Props["class"] = undefined;
- export { className as class };
+ let {
+ ref = $bindable(null),
+ class: className,
+ ...restProps
+ }: SheetPrimitive.TitleProps = $props();
-
-
+ {...restProps}
+/>
diff --git a/frontend/src/lib/components/ui/sonner/sonner.svelte b/frontend/src/lib/components/ui/sonner/sonner.svelte
index 7d5b2f1..8050e04 100644
--- a/frontend/src/lib/components/ui/sonner/sonner.svelte
+++ b/frontend/src/lib/components/ui/sonner/sonner.svelte
@@ -2,7 +2,7 @@
import { Toaster as Sonner, type ToasterProps as SonnerProps } from "svelte-sonner";
import { mode } from "mode-watcher";
- type $$Props = SonnerProps;
+ let restProps: SonnerProps = $props();
diff --git a/frontend/src/lib/components/ui/tabs/tabs-content.svelte b/frontend/src/lib/components/ui/tabs/tabs-content.svelte
index b611559..1758c7f 100644
--- a/frontend/src/lib/components/ui/tabs/tabs-content.svelte
+++ b/frontend/src/lib/components/ui/tabs/tabs-content.svelte
@@ -2,20 +2,20 @@
import { Tabs as TabsPrimitive } from "bits-ui";
import { cn } from "$lib/utils.js";
- type $$Props = TabsPrimitive.ContentProps;
-
- let className: $$Props["class"] = undefined;
- export let value: $$Props["value"];
- export { className as class };
+ let {
+ ref = $bindable(null),
+ class: className,
+ value,
+ ...restProps
+ }: TabsPrimitive.ContentProps = $props();
-
-
+ {...restProps}
+/>
diff --git a/frontend/src/lib/components/ui/tabs/tabs-list.svelte b/frontend/src/lib/components/ui/tabs/tabs-list.svelte
index 773c754..1585d01 100644
--- a/frontend/src/lib/components/ui/tabs/tabs-list.svelte
+++ b/frontend/src/lib/components/ui/tabs/tabs-list.svelte
@@ -2,18 +2,18 @@
import { Tabs as TabsPrimitive } from "bits-ui";
import { cn } from "$lib/utils.js";
- type $$Props = TabsPrimitive.ListProps;
-
- let className: $$Props["class"] = undefined;
- export { className as class };
+ let {
+ ref = $bindable(null),
+ class: className,
+ ...restProps
+ }: TabsPrimitive.ListProps = $props();
-
-
+ {...restProps}
+/>
diff --git a/frontend/src/lib/components/ui/tabs/tabs-trigger.svelte b/frontend/src/lib/components/ui/tabs/tabs-trigger.svelte
index b99358d..ef2e218 100644
--- a/frontend/src/lib/components/ui/tabs/tabs-trigger.svelte
+++ b/frontend/src/lib/components/ui/tabs/tabs-trigger.svelte
@@ -2,22 +2,20 @@
import { Tabs as TabsPrimitive } from "bits-ui";
import { cn } from "$lib/utils.js";
- type $$Props = TabsPrimitive.TriggerProps;
- type $$Events = TabsPrimitive.TriggerEvents;
-
- let className: $$Props["class"] = undefined;
- export let value: $$Props["value"];
- export { className as class };
+ let {
+ ref = $bindable(null),
+ class: className,
+ value,
+ ...restProps
+ }: TabsPrimitive.TriggerProps = $props();
-
-
+ {...restProps}
+/>
diff --git a/frontend/src/lib/components/ui/tooltip/index.ts b/frontend/src/lib/components/ui/tooltip/index.ts
index 7d0444d..e9e1fd7 100644
--- a/frontend/src/lib/components/ui/tooltip/index.ts
+++ b/frontend/src/lib/components/ui/tooltip/index.ts
@@ -3,13 +3,16 @@ import Content from "./tooltip-content.svelte";
const Root = TooltipPrimitive.Root;
const Trigger = TooltipPrimitive.Trigger;
+const Provider = TooltipPrimitive.Provider;
export {
Root,
Trigger,
Content,
+ Provider,
//
Root as Tooltip,
Content as TooltipContent,
Trigger as TooltipTrigger,
+ Provider as TooltipProvider,
};
diff --git a/frontend/src/lib/components/ui/tooltip/tooltip-content.svelte b/frontend/src/lib/components/ui/tooltip/tooltip-content.svelte
index af9d1ff..dc7251c 100644
--- a/frontend/src/lib/components/ui/tooltip/tooltip-content.svelte
+++ b/frontend/src/lib/components/ui/tooltip/tooltip-content.svelte
@@ -1,28 +1,21 @@
-
-
+ {...restProps}
+/>
diff --git a/frontend/src/lib/utils.ts b/frontend/src/lib/utils.ts
index 8871245..0813a75 100644
--- a/frontend/src/lib/utils.ts
+++ b/frontend/src/lib/utils.ts
@@ -1,62 +1,21 @@
-import { type ClassValue, clsx } from "clsx";
-import { twMerge } from "tailwind-merge";
-import { cubicOut } from "svelte/easing";
-import type { TransitionConfig } from "svelte/transition";
+import { type ClassValue, clsx } from 'clsx';
+import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}
-type FlyAndScaleParams = {
- y?: number;
- x?: number;
- start?: number;
- duration?: number;
-};
+export function debounce(func: Function, wait: number): EventListener {
+ let timeout: ReturnType
;
-export const flyAndScale = (
- node: Element,
- params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }
-): TransitionConfig => {
- const style = getComputedStyle(node);
- const transform = style.transform === "none" ? "" : style.transform;
+ return function (this: HTMLElement, event: Event) {
+ const context = this;
- const scaleConversion = (
- valueA: number,
- scaleA: [number, number],
- scaleB: [number, number]
- ) => {
- const [minA, maxA] = scaleA;
- const [minB, maxB] = scaleB;
+ const later = () => {
+ func.apply(context, [event]);
+ };
- const percentage = (valueA - minA) / (maxA - minA);
- const valueB = percentage * (maxB - minB) + minB;
-
- return valueB;
- };
-
- const styleToString = (
- style: Record
- ): string => {
- return Object.keys(style).reduce((str, key) => {
- if (style[key] === undefined) return str;
- return str + `${key}:${style[key]};`;
- }, "");
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
};
-
- return {
- duration: params.duration ?? 200,
- delay: 0,
- css: (t) => {
- const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
- const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
- const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
-
- return styleToString({
- transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`,
- opacity: t
- });
- },
- easing: cubicOut
- };
-};
\ No newline at end of file
+}
diff --git a/frontend/src/routes/(authed)/+layout.svelte b/frontend/src/routes/(authed)/+layout.svelte
index 1f1a95d..f6ec422 100644
--- a/frontend/src/routes/(authed)/+layout.svelte
+++ b/frontend/src/routes/(authed)/+layout.svelte
@@ -1,8 +1,13 @@
-
+ {@render children?.()}
diff --git a/frontend/src/routes/(authed)/+page.svelte b/frontend/src/routes/(authed)/+page.svelte
index 521b2c1..6064576 100644
--- a/frontend/src/routes/(authed)/+page.svelte
+++ b/frontend/src/routes/(authed)/+page.svelte
@@ -3,7 +3,11 @@
import PageHead from '$lib/components/PageHead.svelte';
import type { PageData } from './$types';
- export let data: PageData;
+ interface Props {
+ data: PageData;
+ }
+
+ let { data }: Props = $props();
diff --git a/frontend/src/routes/(authed)/all/+page.svelte b/frontend/src/routes/(authed)/all/+page.svelte
index f4106f4..c82c664 100644
--- a/frontend/src/routes/(authed)/all/+page.svelte
+++ b/frontend/src/routes/(authed)/all/+page.svelte
@@ -3,7 +3,11 @@
import PageHead from '$lib/components/PageHead.svelte';
import type { PageData } from './$types';
- export let data: PageData;
+ interface Props {
+ data: PageData;
+ }
+
+ let { data }: Props = $props();
diff --git a/frontend/src/routes/(authed)/bookmarks/+page.svelte b/frontend/src/routes/(authed)/bookmarks/+page.svelte
index 9459184..aee9cf3 100644
--- a/frontend/src/routes/(authed)/bookmarks/+page.svelte
+++ b/frontend/src/routes/(authed)/bookmarks/+page.svelte
@@ -3,7 +3,11 @@
import PageHead from '$lib/components/PageHead.svelte';
import type { PageData } from './$types';
- export let data: PageData;
+ interface Props {
+ data: PageData;
+ }
+
+ let { data }: Props = $props();
diff --git a/frontend/src/routes/(authed)/feeds/+page.svelte b/frontend/src/routes/(authed)/feeds/+page.svelte
index eb8d5f2..fbf05b7 100644
--- a/frontend/src/routes/(authed)/feeds/+page.svelte
+++ b/frontend/src/routes/(authed)/feeds/+page.svelte
@@ -1,24 +1,29 @@
@@ -107,16 +117,17 @@
Export
-
-
+
diff --git a/frontend/src/routes/(authed)/feeds/ActionRefreshAll.svelte b/frontend/src/routes/(authed)/feeds/ActionRefreshAll.svelte
deleted file mode 100644
index 1f0b129..0000000
--- a/frontend/src/routes/(authed)/feeds/ActionRefreshAll.svelte
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- Are you absolutely sure?
-
- This action will refresh ALL(except suspended) feeds. It may take some time.
-
-
-
- (open = false)}>Cancel
- Continue
-
-
-
diff --git a/frontend/src/routes/(authed)/feeds/Actions.svelte b/frontend/src/routes/(authed)/feeds/Actions.svelte
index bfce63a..a97b0ba 100644
--- a/frontend/src/routes/(authed)/feeds/Actions.svelte
+++ b/frontend/src/routes/(authed)/feeds/Actions.svelte
@@ -1,33 +1,44 @@
diff --git a/frontend/src/routes/+error.svelte b/frontend/src/routes/+error.svelte
index 480123e..a496ca2 100644
--- a/frontend/src/routes/+error.svelte
+++ b/frontend/src/routes/+error.svelte
@@ -1,8 +1,8 @@
Error
- {$page.error?.message}
+ {page.error?.message}
diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte
index 76f95bc..acf80b1 100644
--- a/frontend/src/routes/+layout.svelte
+++ b/frontend/src/routes/+layout.svelte
@@ -1,13 +1,15 @@
- {$page.data.title ?? 'Fusion'}
+ {page.data.title ?? 'Fusion'}
@@ -17,7 +19,7 @@
https://stackoverflow.com/a/76120728/12812480 -->
-
+ {@render children?.()}
diff --git a/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte
index bbb8a8a..a8731f9 100644
--- a/frontend/src/routes/login/+page.svelte
+++ b/frontend/src/routes/login/+page.svelte
@@ -6,7 +6,7 @@
import { Label } from '$lib/components/ui/label';
import { toast } from 'svelte-sonner';
- let password = '';
+ let password = $state('');
async function handleSubmit() {
try {
@@ -22,7 +22,7 @@
Login
-