diff --git a/apps/onelauncher/frontend/src/components/content/PackageItem.tsx b/apps/onelauncher/frontend/src/components/content/PackageItem.tsx index 69fa3a53..d668c161 100644 --- a/apps/onelauncher/frontend/src/components/content/PackageItem.tsx +++ b/apps/onelauncher/frontend/src/components/content/PackageItem.tsx @@ -1,8 +1,10 @@ import type { Provider, SearchResult } from '@/bindings.gen'; -import { abbreviateNumber, LOADERS } from '@/utils'; -import { Show } from '@onelauncher/common/components'; -import { useNavigate } from '@tanstack/react-router'; +import { abbreviateNumber, LOADERS, upperFirst } from '@/utils'; +import { Show, Tooltip } from '@onelauncher/common/components'; +import { Link, useNavigate } from '@tanstack/react-router'; import { Download01Icon } from '@untitled-theme/icons-react'; +import { useMemo } from 'react'; +import { Focusable } from 'react-aria-components'; import LoaderIcon from '../launcher/LoaderIcon'; function includes(list: { includes: (arg0: TArray) => boolean }, element: T): element is TArray { @@ -20,16 +22,14 @@ export function PackageGrid({ items, provider }: { items: Array; p } export function PackageItem({ provider, ...item }: SearchResult & { provider: Provider }) { - const navigate = useNavigate(); - function redirect() { - navigate({ to: '/app/browser/package/$provider/$slug', params: { provider, slug: item.slug } }); - } + const loaders = useMemo(() => item.categories.filter(cat => includes(LOADERS, cat)), []); return ( -
-
- {item.categories.filter(cat => includes(LOADERS, cat)).map(loader => )} -
+ + +
+ {loaders.toSpliced(loaders.length > 3 ? 2 : 3).map(loader => )} + {loaders.length > 3 && ( +
+ + + + {loaders.length - 2} + +
+ )} +
+
+
@@ -78,6 +90,6 @@ export function PackageItem({ provider, ...item }: SearchResult & { provider: Pr
-
+ ); }