From 5d864eb53a8e24184dde79930e6b1eea3462a639 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Tue, 14 Jan 2025 20:25:13 +0100 Subject: [PATCH 1/4] feat(Inventory): add search functionality and refactor tab handling --- src/lib/sections/Sections.svelte | 2 +- src/lib/sections/stats/Inventory.svelte | 148 +++++++++++++++++------- 2 files changed, 104 insertions(+), 46 deletions(-) diff --git a/src/lib/sections/Sections.svelte b/src/lib/sections/Sections.svelte index 0894cf959..66a9b4d39 100644 --- a/src/lib/sections/Sections.svelte +++ b/src/lib/sections/Sections.svelte @@ -1,6 +1,7 @@ - {#if tabs.length > 0} - + {#if allItems.length > 0} + {#each tabs as tab} - {@const isActive = $openTab === tab.id} + {@const isActive = openTab === tab.id} @@ -134,42 +166,38 @@ {#each tabs as tab} - {#if $openTab === tab.id} + {#if openTab === tab.id} {#if tab.id === "storage" || tab.id === "museum"}
- + {#each tab.items as item, index} - -
- {#if item.texture_path} -
- -
- {:else} -
- {/if} -
+ + {#if item.display_name} +
+ {@render itemSnippet(item, index)} +
+ {:else} + {@render emptyItem(index)} + {/if}
{/each}
- {#if tab.items[Number($openStorageTab)]?.containsItems} - {@const containedItems = (tab.items[Number($openStorageTab)].containsItems as ProcessedSkyBlockItem[]) || []} + {#if tab.items[Number(openStorageTab)]?.containsItems} + {@const containedItems = (tab.items[Number(openStorageTab)].containsItems as ProcessedSkyBlockItem[]) || []}
{#each containedItems as containedItem, index} {#if index > 0} {#if index % 54 === 0} -
+ {@render hr()} {/if} {/if} - - {#key $openStorageTab} - {#if containedItem.texture_path} -
- -
+ + {#key openStorageTab} + {#if containedItem.display_name} + {@render itemSnippet(containedItem, index)} {:else} -
+ {@render emptyItem(index)} {/if} {/key}
@@ -178,24 +206,42 @@ {/if}
+ {:else if tab.id === "search"} + + {#if searchValue !== "" && searchedItems.length === 0} +

No items found.

+ {:else} +
+ {#each searchedItems as item, index} + {#if index > 0} + {#if index % 54 === 0} + {@render hr()} + {/if} + {/if} + {#if item.item} + {@render itemSnippet(item.item, index, item.sourceTab)} + {:else} + {@render emptyItem(index)} + {/if} + {/each} +
+ {/if} {:else}
{#each tab.items as item, index} {#if index > 0} {#if index % tab.gap === 0} -
+ {@render hr()} {/if} {/if} - {#if item.texture_path} -
- {#if tab.id === "inv"} - - {:else} - - {/if} -
+ {#if item.display_name} + {#if tab.id === "inv"} + {@render itemSnippet({ ...item, rarity: item.rarity ?? "uncommon" } as ProcessedSkyBlockItem, index)} + {:else} + {@render itemSnippet(item, index)} + {/if} {:else} -
+ {@render emptyItem(index)} {/if} {/each}
@@ -208,3 +254,15 @@

{profile.username} doesn't have any items.

{/if} + +{#snippet itemSnippet(item: ProcessedSkyBlockItem, index: number, tab?: { name: string; icon: string })} + +{/snippet} + +{#snippet emptyItem(index: number)} +
+{/snippet} + +{#snippet hr()} +
+{/snippet} From afad7968b69d532e57530ced1ce01ede9d5a35ec Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Tue, 14 Jan 2025 20:25:23 +0100 Subject: [PATCH 2/4] feat(Item): add tab support and transition effects to item display --- src/lib/components/Item.svelte | 34 +++++++++++++-------- src/lib/components/item/item-content.svelte | 30 +++++++++++++----- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/lib/components/Item.svelte b/src/lib/components/Item.svelte index dd75f862a..82b524222 100644 --- a/src/lib/components/Item.svelte +++ b/src/lib/components/Item.svelte @@ -8,6 +8,7 @@ import { Avatar, Tooltip } from "bits-ui"; import Image from "lucide-svelte/icons/image"; import { getContext } from "svelte"; + import { fade, type FadeParams } from "svelte/transition"; import Content from "./item/item-content.svelte"; type Props = { @@ -15,9 +16,13 @@ isInventory?: boolean; showCount?: boolean; showRecombobulated?: boolean; + tab?: { + name: string; + icon: string; + }; + inTransitionConfig?: FadeParams; }; - - let { piece, isInventory, showCount, showRecombobulated }: Props = $props(); + let { piece, isInventory, showCount, showRecombobulated, tab, inTransitionConfig }: Props = $props(); const skyblockItem = $derived(piece as ProcessedSkyBlockItem); const bgColor = $derived(getRarityClass(piece.rarity ?? ("common".toLowerCase() as string), "bg")); @@ -30,15 +35,18 @@ - { - if (skyblockItem.containsItems) return; - itemContent.set(piece); - showItem.set(true); - }}> -
- + +
{/if} -
+ {#if isHover.current} - + {/if} diff --git a/src/lib/components/item/item-content.svelte b/src/lib/components/item/item-content.svelte index 06234b539..a7ebc4b11 100644 --- a/src/lib/components/item/item-content.svelte +++ b/src/lib/components/item/item-content.svelte @@ -9,13 +9,13 @@ type Props = { piece: ProcessedSkyBlockItem | ProcessedSkyblockPet; - isInventory?: boolean; - showCount?: boolean; - showRecombobulated?: boolean; isDrawer?: boolean; + tab?: { + name: string; + icon: string; + }; }; - - let { piece, isDrawer }: Props = $props(); + let { piece, isDrawer, tab }: Props = $props(); const skyblockItem = $derived(piece as ProcessedSkyBlockItem); const itemName = $derived(skyblockItem.display_name ?? "???"); @@ -33,7 +33,6 @@
-

{@html isMulticolor ? itemNameHtml : removeFormatting(itemNameHtml)}

@@ -60,8 +59,25 @@ {/if} + {#if typeof tab === "object" && tab.icon} +
+
+
+ + + + {tab.name.slice(0, 2)} + + + +
+
+
+ {/if} {#if packData} -
+
From d9ad4a99948d14c1d8da96e921aacba84f448b1d Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sun, 2 Feb 2025 17:59:51 +0100 Subject: [PATCH 3/4] fix: shine animation --- src/app.css | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/app.css b/src/app.css index 9548f017a..7af781256 100644 --- a/src/app.css +++ b/src/app.css @@ -214,11 +214,7 @@ } @utility shine { - @apply overflow-hidden; - - &::before { - @apply animate-shine absolute inset-0 z-8 -translate-y-full transform bg-linear-to-t from-[oklch(1_0_0_/_0)] via-[oklch(1_0_0_/_0.50)] to-[oklch(0.77_0.09_243.21_/_0)] content-['']; - } + @apply before:animate-shine overflow-hidden before:absolute before:inset-0 before:z-8 before:bg-linear-to-t before:from-[oklch(1_0_0_/_0)] before:via-[oklch(1_0_0_/_0.50)] before:to-[oklch(0.77_0.09_243.21_/_0)]; } @utility enchanted { From e7e51a82ab759cff732d4fb169965e05ffa1f2e0 Mon Sep 17 00:00:00 2001 From: DarthGigi <47110839+DarthGigi@users.noreply.github.com> Date: Sun, 2 Feb 2025 18:15:24 +0100 Subject: [PATCH 4/4] feat: add search functionality to inventory section --- src/lib/sections/stats/Inventory.svelte | 165 +++++++++++++++--------- 1 file changed, 102 insertions(+), 63 deletions(-) diff --git a/src/lib/sections/stats/Inventory.svelte b/src/lib/sections/stats/Inventory.svelte index 62e59e98d..f95c77195 100644 --- a/src/lib/sections/stats/Inventory.svelte +++ b/src/lib/sections/stats/Inventory.svelte @@ -17,6 +17,7 @@ let { order }: { order: number } = $props(); let openTab = $state("inv"); + let searchValue = $state(""); const ctx = getProfileCtx(); const profile = $derived(ctx.profile); @@ -33,7 +34,7 @@ const quiver = $derived(profile.items.quiver); const museum = $derived(profile.items.museum); - const tabs = $derived( + const tabs = $derived( [ { id: "inv", @@ -100,6 +101,12 @@ icon: "/api/head/a6cc486c2be1cb9dfcb2e53dd9a3e9a883bfadb27cb956f1896d602b4067", items: rift_enderchest, gap: 45 + }, + { + id: "search", + icon: "/api/item/EYE_OF_ENDER", + items: [], + gap: 45 } ].filter((tab) => tab.id === "search" || tab.items.length > 0) ); @@ -164,69 +171,11 @@ {#each tabs as tab} {#if tab.id === "storage" || tab.id === "museum"} - - - {#each tab.items as item, index} - -
- {#if item.texture_path} -
- -
- {:else} - {@render emptyItem()} - {/if} -
-
- {/each} -
- - {#each tab.items as item, index} - -
- {#if item?.containsItems} - {#each item.containsItems as containedItem, index2} - {#if index2 > 0} - {#if index2 % 54 === 0} - {@render gap()} - {/if} - {/if} - - {#if containedItem.texture_path} -
- -
- {:else} - {@render emptyItem()} - {/if} -
- {/each} - {/if} -
-
- {/each} -
+ {@render multipleInventorySection(tab)} + {:else if tab.id == "search"} + {@render searchSection()} {:else} -
- {#each tab.items as item, index} - {#if index > 0} - {#if index % tab.gap === 0} - {@render gap()} - {/if} - {/if} - {#if item.texture_path} -
- {#if tab.id === "inv"} - - {:else} - - {/if} -
- {:else} - {@render emptyItem()} - {/if} - {/each} -
+ {@render inventorySection(tab)} {/if}
{/each} @@ -236,6 +185,10 @@ {/if} +{#snippet itemSnippet(item: ProcessedSkyBlockItem, index: number, tab?: { name: string; icon: string })} + +{/snippet} + {#snippet emptyItem()}
{/snippet} @@ -243,3 +196,89 @@ {#snippet gap()}
{/snippet} + +{#snippet searchSection()} + + {#if searchValue !== "" && searchedItems.length === 0} +

No items found.

+ {:else if searchValue !== ""} +
+ {#each searchedItems as item, index} + {#if item.item} +
+ {@render itemSnippet(item.item, index, item.sourceTab)} +
+ {:else} + {@render emptyItem()} + {/if} + {/each} +
+ {/if} +{/snippet} + +{#snippet multipleInventorySection(tab: Tabs)} + + + {#each tab.items as item, index} + +
+ {#if item.texture_path} +
+ {@render itemSnippet(item, index)} +
+ {:else} + {@render emptyItem()} + {/if} +
+
+ {/each} +
+ {#each tab.items as item, index} + +
+ {#if item?.containsItems} + {#each item.containsItems as containedItem, index2} + {#if index2 > 0} + {#if index2 % 54 === 0} + {@render gap()} + {/if} + {/if} + + {#if containedItem.texture_path} +
+ {@render itemSnippet(containedItem, index2)} +
+ {:else} + {@render emptyItem()} + {/if} +
+ {/each} + {/if} +
+
+ {/each} +
+{/snippet} + +{#snippet inventorySection(tab: Tabs)} +
+ {#each tab.items as item, index} + {#if index > 0} + {#if index % tab.gap === 0} + {@render gap()} + {/if} + {/if} + {#if item.texture_path} +
+ {#if tab.id === "inv"} + {@render itemSnippet({ ...item, rarity: item.rarity ?? "uncommon" } as ProcessedSkyBlockItem, index)} + {:else} + {@render itemSnippet(item, index)} + {/if} +
+ {:else} + {@render emptyItem()} + {/if} + {/each} +
+{/snippet}