From 96d5397cb5fe7037cb6eef449fab2a87deafbab1 Mon Sep 17 00:00:00 2001 From: static Date: Tue, 13 Jan 2026 00:37:29 +0900 Subject: [PATCH 01/15] =?UTF-8?q?docker.yaml=20=ED=8C=8C=EC=9D=BC=EC=9D=98?= =?UTF-8?q?=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/docker.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index 6f0627d..9e085c8 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -31,7 +31,7 @@ jobs: with: images: ghcr.io/${{ github.repository }} tags: | - type=semver,value={{version}} + type=semver,pattern={{version}} type=raw,value=latest type=sha From 37bd6a9315b705b98fc9dd61b579591e920724f5 Mon Sep 17 00:00:00 2001 From: static Date: Thu, 15 Jan 2026 15:11:03 +0900 Subject: [PATCH 02/15] =?UTF-8?q?=EA=B2=80=EC=83=89=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lib/components/atoms/Chip.svelte | 53 +++++ .../components/atoms/RowVirtualizer.svelte | 16 +- .../atoms/buttons/ActionEntryButton.svelte | 2 +- src/lib/components/atoms/index.ts | 1 + .../components/atoms/inputs/TextInput.svelte | 2 +- .../components/molecules/SubCategories.svelte | 6 +- src/lib/components/molecules/TopBar.svelte | 19 +- src/lib/modules/file/upload.svelte.ts | 2 + src/lib/modules/filesystem/types.ts | 8 +- src/lib/server/db/file.ts | 132 ++++++++++++ .../(fullscreen)/file/[id]/+page.svelte | 4 +- .../(fullscreen)/file/uploads/+page.svelte | 2 +- src/routes/(fullscreen)/gallery/+page.svelte | 2 +- src/routes/(fullscreen)/search/+page.svelte | 193 ++++++++++++++++++ src/routes/(fullscreen)/search/+page.ts | 18 ++ .../(fullscreen)/search/Directory.svelte | 16 ++ src/routes/(fullscreen)/search/File.svelte | 25 +++ .../(fullscreen)/search/SearchBar.svelte | 27 +++ .../search/SelectCategoryBottomSheet.svelte | 54 +++++ src/routes/(fullscreen)/search/service.ts | 95 +++++++++ .../(main)/category/[[id]]/+page.svelte | 12 +- .../(main)/directory/[[id]]/+page.svelte | 35 +++- .../DirectoryEntries/DirectoryEntries.svelte | 11 +- src/trpc/router.server.ts | 2 + src/trpc/routers/index.ts | 1 + src/trpc/routers/search.ts | 54 +++++ 26 files changed, 757 insertions(+), 35 deletions(-) create mode 100644 src/lib/components/atoms/Chip.svelte create mode 100644 src/routes/(fullscreen)/search/+page.svelte create mode 100644 src/routes/(fullscreen)/search/+page.ts create mode 100644 src/routes/(fullscreen)/search/Directory.svelte create mode 100644 src/routes/(fullscreen)/search/File.svelte create mode 100644 src/routes/(fullscreen)/search/SearchBar.svelte create mode 100644 src/routes/(fullscreen)/search/SelectCategoryBottomSheet.svelte create mode 100644 src/routes/(fullscreen)/search/service.ts create mode 100644 src/trpc/routers/search.ts diff --git a/src/lib/components/atoms/Chip.svelte b/src/lib/components/atoms/Chip.svelte new file mode 100644 index 0000000..034defc --- /dev/null +++ b/src/lib/components/atoms/Chip.svelte @@ -0,0 +1,53 @@ + + + + +
setTimeout(onclick, 100))} + class={[ + "inline-flex cursor-pointer items-center gap-x-1 rounded-lg px-3 py-1.5 text-sm font-medium transition active:scale-95", + selected + ? "bg-primary-500 text-white active:bg-primary-400" + : "bg-gray-100 text-gray-700 active:bg-gray-200", + className, + ]} +> + + {@render children()} + + {#if selected && removable} + + {/if} +
diff --git a/src/lib/components/atoms/RowVirtualizer.svelte b/src/lib/components/atoms/RowVirtualizer.svelte index 67a684d..2641806 100644 --- a/src/lib/components/atoms/RowVirtualizer.svelte +++ b/src/lib/components/atoms/RowVirtualizer.svelte @@ -6,13 +6,22 @@ interface Props { class?: ClassValue; count: number; + estimateItemHeight: (index: number) => number; + getItemKey?: (index: number) => string | number; item: Snippet<[index: number]>; - itemHeight: (index: number) => number; itemGap?: number; placeholder?: Snippet; } - let { class: className, count, item, itemHeight, itemGap, placeholder }: Props = $props(); + let { + class: className, + count, + estimateItemHeight, + getItemKey, + item, + itemGap, + placeholder, + }: Props = $props(); let element: HTMLElement | undefined = $state(); let scrollMargin = $state(0); @@ -20,8 +29,9 @@ let virtualizer = $derived( createWindowVirtualizer({ count, - estimateSize: itemHeight, + estimateSize: estimateItemHeight, gap: itemGap, + getItemKey: getItemKey, scrollMargin, }), ); diff --git a/src/lib/components/atoms/buttons/ActionEntryButton.svelte b/src/lib/components/atoms/buttons/ActionEntryButton.svelte index c29fd7f..b257241 100644 --- a/src/lib/components/atoms/buttons/ActionEntryButton.svelte +++ b/src/lib/components/atoms/buttons/ActionEntryButton.svelte @@ -49,7 +49,7 @@ -