i messed up the merge a bit but it should be okay

This commit is contained in:
Pauline 2024-03-17 07:41:04 +01:00
parent f9ac49223d
commit 86a185a460
No known key found for this signature in database
GPG key ID: 722BB181973296AE
5 changed files with 28 additions and 84 deletions

View file

@ -21,12 +21,12 @@
"@untitled-theme/icons-solid": "^0.6.0", "@untitled-theme/icons-solid": "^0.6.0",
"solid-js": "^1.8.15", "solid-js": "^1.8.15",
"solid-transition-group": "^0.2.3", "solid-transition-group": "^0.2.3",
"uuid": "^9.0.1" "uuid": "^9.0.1"
}, },
"devDependencies": { "devDependencies": {
"@flowr/eslint-config": "^2.2.1", "@flowr/eslint-config": "^2.2.1",
"@tauri-apps/cli": "2.0.0-beta.9", "@tauri-apps/cli": "2.0.0-beta.9",
"@types/uuid": "^9.0.8", "@types/uuid": "^9.0.8",
"autoprefixer": "^10.4.18", "autoprefixer": "^10.4.18",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-plugin-solid": "^0.13.1", "eslint-plugin-solid": "^0.13.1",

31
pnpm-lock.yaml generated
View file

@ -37,9 +37,9 @@ devDependencies:
'@tauri-apps/cli': '@tauri-apps/cli':
specifier: 2.0.0-beta.9 specifier: 2.0.0-beta.9
version: 2.0.0-beta.9 version: 2.0.0-beta.9
'@typescript-eslint/parser': '@types/uuid':
specifier: ^7.2.0 specifier: ^9.0.8
version: 7.2.0(eslint@8.57.0)(typescript@5.4.2) version: 9.0.8
autoprefixer: autoprefixer:
specifier: ^10.4.18 specifier: ^10.4.18
version: 10.4.18(postcss@8.4.35) version: 10.4.18(postcss@8.4.35)
@ -1165,6 +1165,14 @@ packages:
resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
dev: true dev: true
/@types/unist@2.0.10:
resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==}
dev: true
/@types/uuid@9.0.8:
resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==}
dev: true
/@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2): /@typescript-eslint/eslint-plugin@7.2.0(@typescript-eslint/parser@7.2.0)(eslint@8.57.0)(typescript@5.4.2):
resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==} resolution: {integrity: sha512-mdekAHOqS9UjlmyF/LSs6AIEvfceV749GFxoBAjwAv0nkevfKHWQFDMcBZWUiIC5ft6ePWivXoS36aKQ0Cy3sw==}
engines: {node: ^16.0.0 || >=18.0.0} engines: {node: ^16.0.0 || >=18.0.0}
@ -2042,7 +2050,7 @@ packages:
safe-array-concat: 1.1.2 safe-array-concat: 1.1.2
safe-regex-test: 1.0.3 safe-regex-test: 1.0.3
string.prototype.trim: 1.2.8 string.prototype.trim: 1.2.8
string.prototype.trimend: 1.0.7 string.prototype.trimend: 1.0.8
string.prototype.trimstart: 1.0.7 string.prototype.trimstart: 1.0.7
typed-array-buffer: 1.0.2 typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1 typed-array-byte-length: 1.0.1
@ -2093,7 +2101,7 @@ packages:
safe-array-concat: 1.1.2 safe-array-concat: 1.1.2
safe-regex-test: 1.0.3 safe-regex-test: 1.0.3
string.prototype.trim: 1.2.8 string.prototype.trim: 1.2.8
string.prototype.trimend: 1.0.7 string.prototype.trimend: 1.0.8
string.prototype.trimstart: 1.0.7 string.prototype.trimstart: 1.0.7
typed-array-buffer: 1.0.2 typed-array-buffer: 1.0.2
typed-array-byte-length: 1.0.1 typed-array-byte-length: 1.0.1
@ -2135,6 +2143,13 @@ packages:
safe-array-concat: 1.1.2 safe-array-concat: 1.1.2
dev: true dev: true
/es-object-atoms@1.0.0:
resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
engines: {node: '>= 0.4'}
dependencies:
es-errors: 1.3.0
dev: true
/es-set-tostringtag@2.0.3: /es-set-tostringtag@2.0.3:
resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
engines: {node: '>= 0.4'} engines: {node: '>= 0.4'}
@ -4455,12 +4470,12 @@ packages:
es-abstract: 1.22.5 es-abstract: 1.22.5
dev: true dev: true
/string.prototype.trimend@1.0.7: /string.prototype.trimend@1.0.8:
resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
dependencies: dependencies:
call-bind: 1.0.7 call-bind: 1.0.7
define-properties: 1.2.1 define-properties: 1.2.1
es-abstract: 1.22.5 es-object-atoms: 1.0.0
dev: true dev: true
/string.prototype.trimstart@1.0.7: /string.prototype.trimstart@1.0.7:

2
src/types/game.d.ts vendored
View file

@ -1,3 +1,3 @@
declare namespace game { declare namespace game {
export type Client = 'fabric' | 'forge' | 'quilt' | 'vanilla' | 'other'; export type Client = 'fabric' | 'forge' | 'quilt' | 'vanilla' | 'other';
} }

View file

@ -2,7 +2,6 @@ import {
CheckIcon, CheckIcon,
DotsVerticalIcon, DotsVerticalIcon,
Download01Icon, Download01Icon,
HeartRoundedIcon,
PlayIcon, PlayIcon,
PlusIcon, PlusIcon,
SearchMdIcon, SearchMdIcon,
@ -128,76 +127,6 @@ function InstanceGroup(props: InstanceGroupProps) {
); );
} }
interface InstanceCardProps {
name: string;
version: string;
client: game.Client;
mods?: number;
cover?: string;
lastPlayed?: number;
}
function InstanceCard(props: InstanceCardProps) {
return (
<div class="h-[152px] group flex flex-col rounded-xl bg-component-bg hover:bg-component-bg-hover active:bg-component-bg-pressed border border-gray-.5 overflow-hidden">
<div class="flex-1 relative overflow-hidden">
<div class="absolute h-full w-full group-hover:scale-110 transition-transform">
<img
class={`object-cover h-full w-full ${props.cover ? '' : ' filter grayscale'}`}
src={props.cover || defaultCover}
/>
</div>
</div>
<div class="z-10 p-3 flex flex-row items-center justify-between">
<div class="flex flex-col gap-1.5">
<p class="h-4 font-semibold">{props.name}</p>
<p class="h-4 text-xs">
{upperFirst(props.client)}
{' '}
{props.version}
{' '}
{props.mods && `• ${props.mods} mods`}
</p>
</div>
<Button styleType="icon" class="w-8 h-8">
<DotsVerticalIcon />
</Button>
</div>
</div>
);
}
interface InstanceGroupProps {
title: string;
instances: InstanceCardProps[];
}
function InstanceGroup(props: InstanceGroupProps) {
const [sorted, setSorted] = createSignal<InstanceCardProps[]>([]);
createEffect(() => {
setSorted(props.instances.sort((a, b) => {
if (a.lastPlayed && b.lastPlayed)
return b.lastPlayed - a.lastPlayed;
return 0;
}));
});
return (
<div class="flex flex-col gap-y-4">
<h4>{props.title}</h4>
<div class="grid grid-cols-4 gap-4">
<For each={sorted()}>
{instance => (
<InstanceCard {...instance} />
)}
</For>
</div>
</div>
);
}
function HomePage() { function HomePage() {
const myInstances: InstanceCardProps[] = [ const myInstances: InstanceCardProps[] = [
{ {

View file

@ -1,7 +1,7 @@
export function upperFirst(str: string): string { export function upperFirst(str: string): string {
return str.charAt(0).toUpperCase() + str.slice(1); return str.charAt(0).toUpperCase() + str.slice(1);
} }
export default { export default {
upperFirst, upperFirst,
}; };