From cdb24b77758f0151da801c2011dff2620d91bdd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Aug 2026 10:45:05 +0000 Subject: [PATCH 1/5] chore(deps): bump the minor-and-patch group across 1 directory with 8 updates Bumps the minor-and-patch group with 8 updates in the / directory: | Package | From | To | | --- | --- | --- | | [@tanstack/cli](https://github.com/TanStack/cli/tree/HEAD/packages/cli) | `0.69.6` | `0.70.2` | | [incur](https://github.com/wevm/incur) | `0.4.26` | `0.5.1` | | [@electric-sql/pglite](https://github.com/electric-sql/pglite/tree/HEAD/packages/pglite) | `0.5.3` | `0.5.5` | | [@electric-sql/pglite-pgvector](https://github.com/electric-sql/pglite/tree/HEAD/packages/pglite-pgvector) | `0.0.4` | `0.0.6` | | [@tanstack/solid-query](https://github.com/TanStack/query/tree/HEAD/packages/solid-query) | `5.99.2` | `5.101.4` | | [@tanstack/devtools-vite](https://github.com/TanStack/devtools/tree/HEAD/packages/devtools-vite) | `0.7.2` | `0.8.3` | | [@tanstack/db](https://github.com/TanStack/db/tree/HEAD/packages/db) | `0.6.17` | `0.7.2` | | [@types/chrome](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/chrome) | `0.1.43` | `0.2.6` | Updates `@tanstack/cli` from 0.69.6 to 0.70.2 - [Release notes](https://github.com/TanStack/cli/releases) - [Changelog](https://github.com/TanStack/cli/blob/main/packages/cli/CHANGELOG.md) - [Commits](https://github.com/TanStack/cli/commits/@tanstack/cli@0.70.2/packages/cli) Updates `incur` from 0.4.26 to 0.5.1 - [Release notes](https://github.com/wevm/incur/releases) - [Changelog](https://github.com/wevm/incur/blob/main/CHANGELOG.md) - [Commits](https://github.com/wevm/incur/compare/incur@0.4.26...incur@0.5.1) Updates `@electric-sql/pglite` from 0.5.3 to 0.5.5 - [Release notes](https://github.com/electric-sql/pglite/releases) - [Changelog](https://github.com/electric-sql/pglite/blob/main/packages/pglite/CHANGELOG.md) - [Commits](https://github.com/electric-sql/pglite/commits/@electric-sql/pglite@0.5.5/packages/pglite) Updates `@electric-sql/pglite-pgvector` from 0.0.4 to 0.0.6 - [Release notes](https://github.com/electric-sql/pglite/releases) - [Changelog](https://github.com/electric-sql/pglite/blob/main/packages/pglite-pgvector/CHANGELOG.md) - [Commits](https://github.com/electric-sql/pglite/commits/@electric-sql/pglite-pgvector@0.0.6/packages/pglite-pgvector) Updates `@tanstack/solid-query` from 5.99.2 to 5.101.4 - [Release notes](https://github.com/TanStack/query/releases) - [Changelog](https://github.com/TanStack/query/blob/main/packages/solid-query/CHANGELOG.md) - [Commits](https://github.com/TanStack/query/commits/@tanstack/solid-query@5.101.4/packages/solid-query) Updates `@tanstack/devtools-vite` from 0.7.2 to 0.8.3 - [Release notes](https://github.com/TanStack/devtools/releases) - [Changelog](https://github.com/TanStack/devtools/blob/main/packages/devtools-vite/CHANGELOG.md) - [Commits](https://github.com/TanStack/devtools/commits/@tanstack/devtools-vite@0.8.3/packages/devtools-vite) Updates `@tanstack/db` from 0.6.17 to 0.7.2 - [Release notes](https://github.com/TanStack/db/releases) - [Changelog](https://github.com/TanStack/db/blob/main/packages/db/CHANGELOG.md) - [Commits](https://github.com/TanStack/db/commits/@tanstack/db@0.7.2/packages/db) Updates `@types/chrome` from 0.1.43 to 0.2.6 - [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases) - [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/chrome) --- updated-dependencies: - dependency-name: "@tanstack/cli" dependency-version: 0.70.2 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: incur dependency-version: 0.5.1 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: "@electric-sql/pglite" dependency-version: 0.5.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@electric-sql/pglite-pgvector" dependency-version: 0.0.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: minor-and-patch - dependency-name: "@tanstack/solid-query" dependency-version: 5.101.4 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: "@tanstack/devtools-vite" dependency-version: 0.8.3 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: "@tanstack/db" dependency-version: 0.7.2 dependency-type: direct:production update-type: version-update:semver-minor dependency-group: minor-and-patch - dependency-name: "@types/chrome" dependency-version: 0.2.6 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: minor-and-patch ... Signed-off-by: dependabot[bot] --- apps/cli/package.json | 2 +- apps/server/package.json | 8 ++++---- apps/tauri/package.json | 4 ++-- apps/xtracter/package.json | 2 +- package.json | 2 +- packages/ui/package.json | 2 +- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/cli/package.json b/apps/cli/package.json index 31818015..1dd90deb 100644 --- a/apps/cli/package.json +++ b/apps/cli/package.json @@ -17,7 +17,7 @@ "@orpc/client": "^1.14.4", "@solid-imager/client": "workspace:*", "@solid-imager/core": "workspace:*", - "incur": "^0.4.8", + "incur": "^0.5.1", "zod": "^4.4.3" }, "devDependencies": { diff --git a/apps/server/package.json b/apps/server/package.json index 396d9727..cec03a67 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -33,8 +33,8 @@ "docs:generate": "typedoc" }, "dependencies": { - "@electric-sql/pglite": "0.5.3", - "@electric-sql/pglite-pgvector": "0.0.4", + "@electric-sql/pglite": "0.5.5", + "@electric-sql/pglite-pgvector": "0.0.6", "@orpc/client": "^1.14.4", "@orpc/contract": "^1.14.4", "@orpc/experimental-pino": "^1.14.4", @@ -49,7 +49,7 @@ "@solid-imager/ui": "workspace:*", "@tanstack/router-plugin": "^1.168.14", "@tanstack/solid-form": "^1.33.0", - "@tanstack/solid-query": "5.99.2", + "@tanstack/solid-query": "5.101.4", "@tanstack/solid-router": "1.170.16", "@tanstack/solid-router-devtools": "^1.167.0", "@tanstack/solid-router-ssr-query": "^1.167.1", @@ -77,7 +77,7 @@ "@orpc/openapi": "^1.14.4", "@playwright/test": "^1.60.0", "@tailwindcss/vite": "^4.3.0", - "@tanstack/devtools-vite": "^0.7.0", + "@tanstack/devtools-vite": "^0.8.3", "@types/archiver": "^8.0.0", "@types/ffmpeg-static": "^5.1.0", "@types/fluent-ffmpeg": "^2.1.28", diff --git a/apps/tauri/package.json b/apps/tauri/package.json index de41cf7e..f55a20d5 100644 --- a/apps/tauri/package.json +++ b/apps/tauri/package.json @@ -22,10 +22,10 @@ "@solid-imager/client": "workspace:*", "@solid-imager/core": "workspace:*", "@solid-imager/ui": "workspace:*", - "@tanstack/db": "^0.6.8", + "@tanstack/db": "^0.7.2", "@tanstack/query-db-collection": "^1.0.40", "@tanstack/solid-db": "^0.2.22", - "@tanstack/solid-query": "5.99.2", + "@tanstack/solid-query": "5.101.4", "@tanstack/solid-router": "latest", "@tanstack/tauri-db-sqlite-persistence": "^0.2.0", "@tauri-apps/api": "^2.11.0", diff --git a/apps/xtracter/package.json b/apps/xtracter/package.json index 54961593..72614d89 100644 --- a/apps/xtracter/package.json +++ b/apps/xtracter/package.json @@ -19,7 +19,7 @@ "zod": "^4.4.3" }, "devDependencies": { - "@types/chrome": "^0.1.43", + "@types/chrome": "^0.2.6", "@types/node": "^26.0.0", "solid-js": "^1.9.13", "typescript": "rc", diff --git a/package.json b/package.json index dad5a065..de745bd3 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "devDependencies": { "@biomejs/biome": "^2.5.0", "@google/design.md": "^0.4.0", - "@tanstack/cli": "^0.69.4", + "@tanstack/cli": "^0.70.2", "husky": "^9.1.7", "lint-staged": "^16.2.7", "nitro": "npm:nitro-nightly@3.0.1-20260601-173724-a2597363", diff --git a/packages/ui/package.json b/packages/ui/package.json index 29672cd2..aa45615f 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -18,7 +18,7 @@ "@solid-imager/core": "workspace:*", "@solidjs/router": "^0.16.1", "@tanstack/solid-form": "^1.33.0", - "@tanstack/solid-query": "5.99.2", + "@tanstack/solid-query": "5.101.4", "@tanstack/solid-router": "1.170.16", "@tanstack/solid-virtual": "^3.13.26", "class-variance-authority": "^0.7.1", From 4bb23aa0025df7413cae4d38aa8040a1772de5ba Mon Sep 17 00:00:00 2001 From: hmjn Date: Mon, 24 Aug 2026 22:35:55 +0900 Subject: [PATCH 2/5] feat(v2): improve Eagle-style collection interactions --- .../media/legacy-media-grid-item.tsx | 2 + .../src/components/media/v2-media-actions.tsx | 95 ++- .../components/media/v2-media-grid-item.tsx | 70 +- .../server/src/components/v2/v2-app-shell.tsx | 83 ++- .../src/components/v2/v2-command-center.tsx | 302 +++++++++ .../src/components/v2/v2-mobile-header.tsx | 18 +- .../src/components/v2/v2-navigation.tsx | 23 +- apps/server/src/components/v2/v2-sidebar.tsx | 44 +- apps/server/src/routes/__root.tsx | 35 +- .../components/source-media-page.tsx | 40 +- .../components/v2-source-media-page.tsx | 17 +- .../v2/components/v2-search-content.tsx | 41 +- ...-interface-interactions.responsive.spec.ts | 227 +++++++ apps/tauri/src/routes/__root.tsx | 5 +- bun.lock | 5 + packages/ui/package.json | 1 + packages/ui/src/command.tsx | 28 +- .../use-media-collection-selection.test.ts | 143 ++++ .../hooks/use-media-collection-selection.ts | 350 ++++++++++ .../ui/src/hooks/use-source-media-page.ts | 17 +- .../ui/src/screens/search-screen.types.ts | 5 + .../src/screens/source-media-screen.types.ts | 4 + packages/ui/src/screens/v2-config-screen.tsx | 15 + packages/ui/src/screens/v2-search-screen.tsx | 131 +++- .../ui/src/screens/v2-source-media-screen.tsx | 81 ++- .../ui/src/shortcuts/create-app-shortcut.ts | 62 ++ packages/ui/src/shortcuts/definitions.ts | 145 +++++ packages/ui/src/shortcuts/index.ts | 6 + .../ui/src/shortcuts/preferences-provider.tsx | 222 +++++++ .../src/shortcuts/preferences-storage.test.ts | 117 ++++ .../ui/src/shortcuts/preferences-storage.ts | 224 +++++++ packages/ui/src/shortcuts/shortcut-kbd.tsx | 61 ++ .../src/shortcuts/shortcut-settings-panel.tsx | 374 +++++++++++ packages/ui/src/skeleton.tsx | 2 +- packages/ui/src/source-media-grid.tsx | 612 ++++++++++++++---- packages/ui/src/source-media-page.tsx | 16 +- packages/ui/src/styles/theme.css | 55 -- packages/ui/src/v2-import-review-modal.tsx | 44 +- packages/ui/src/v2-media-grid-item.tsx | 6 +- packages/ui/src/v2-media-viewer.tsx | 234 ++++++- packages/ui/src/v2/collection-inspector.tsx | 185 ++++-- .../ui/src/v2/collection-navigation.test.ts | 85 +++ packages/ui/src/v2/collection-navigation.ts | 103 +++ packages/ui/src/v2/icons.tsx | 24 + packages/ui/src/v2/search-composer.tsx | 8 +- packages/ui/src/v2/search-toolbar.tsx | 42 +- 46 files changed, 4032 insertions(+), 377 deletions(-) create mode 100644 apps/server/src/components/v2/v2-command-center.tsx create mode 100644 apps/server/src/tests/e2e/v2-interface-interactions.responsive.spec.ts create mode 100644 packages/ui/src/hooks/use-media-collection-selection.test.ts create mode 100644 packages/ui/src/hooks/use-media-collection-selection.ts create mode 100644 packages/ui/src/shortcuts/create-app-shortcut.ts create mode 100644 packages/ui/src/shortcuts/definitions.ts create mode 100644 packages/ui/src/shortcuts/index.ts create mode 100644 packages/ui/src/shortcuts/preferences-provider.tsx create mode 100644 packages/ui/src/shortcuts/preferences-storage.test.ts create mode 100644 packages/ui/src/shortcuts/preferences-storage.ts create mode 100644 packages/ui/src/shortcuts/shortcut-kbd.tsx create mode 100644 packages/ui/src/shortcuts/shortcut-settings-panel.tsx create mode 100644 packages/ui/src/v2/collection-navigation.test.ts create mode 100644 packages/ui/src/v2/collection-navigation.ts diff --git a/apps/server/src/components/media/legacy-media-grid-item.tsx b/apps/server/src/components/media/legacy-media-grid-item.tsx index 7d0c357a..807190c6 100644 --- a/apps/server/src/components/media/legacy-media-grid-item.tsx +++ b/apps/server/src/components/media/legacy-media-grid-item.tsx @@ -16,10 +16,12 @@ export type ServerMediaGridItemProps = { priority?: boolean; sourceRootPath?: string; isBulkSelectMode?: boolean; + isPreviewSelected?: boolean; isSelected?: boolean; onToggleSelect?: () => void; onPrepareMediaDetail?: () => void; onPreviewSelect?: () => void; + onSelectGesture?: (event: MouseEvent | KeyboardEvent) => void; }; export function LegacyMediaGridItem(props: ServerMediaGridItemProps) { diff --git a/apps/server/src/components/media/v2-media-actions.tsx b/apps/server/src/components/media/v2-media-actions.tsx index 1ec14510..92d87b57 100644 --- a/apps/server/src/components/media/v2-media-actions.tsx +++ b/apps/server/src/components/media/v2-media-actions.tsx @@ -1,5 +1,15 @@ import type { MediaDetails } from "@solid-imager/core/domain/media/schemas"; import { getErrorMessage } from "@solid-imager/core/utils"; +import { + AlertDialog, + AlertDialogAction, + AlertDialogCancel, + AlertDialogContent, + AlertDialogDescription, + AlertDialogFooter, + AlertDialogHeader, + AlertDialogTitle, +} from "@solid-imager/ui/alert-dialog"; import { Button } from "@solid-imager/ui/button"; import { Popover, @@ -11,9 +21,11 @@ import { toast } from "@solid-imager/ui/toast"; import { Binary, ChevronDown, + Download, Scan, ScanSearch, Sparkles, + Trash2, } from "@solid-imager/ui/v2/icons"; import { useNavigate } from "@tanstack/solid-router"; import { createEffect, createSignal, on, onCleanup } from "solid-js"; @@ -25,6 +37,7 @@ import { getCcipVectorStatus, startCcipExtraction, } from "~/infrastructure/api-clients/ai-api"; +import { deleteMedia } from "~/infrastructure/api-clients/media-api"; type MediaActionsProps = { media: MediaDetails; @@ -41,6 +54,7 @@ export function V2MediaActions(props: MediaActionsProps) { createSignal(false); const [isCharacterCropModalOpen, setIsCharacterCropModalOpen] = createSignal(false); + const [moreActionsOpen, setMoreActionsOpen] = createSignal(false); const [ccipStatus, setCcipStatus] = createSignal< "missing" | "processing" | "ready" | "stale" | "failed" >("missing"); @@ -49,6 +63,8 @@ export function V2MediaActions(props: MediaActionsProps) { ); const [isCcipJobPending, setIsCcipJobPending] = createSignal(false); const [isExtractingCcip, setIsExtractingCcip] = createSignal(false); + const [isDeleteDialogOpen, setIsDeleteDialogOpen] = createSignal(false); + const [isDeleting, setIsDeleting] = createSignal(false); const [ccipMissingStatusCount, setCcipMissingStatusCount] = createSignal(0); let ccipStatusRequestId = 0; @@ -101,6 +117,7 @@ export function V2MediaActions(props: MediaActionsProps) { ); const handleCcipExtraction = async () => { + setMoreActionsOpen(false); setIsExtractingCcip(true); const currentMediaId = props.media.id; const currentMediaSourceId = props.media.mediaSourceId; @@ -168,6 +185,31 @@ export function V2MediaActions(props: MediaActionsProps) { activateVectorSearch(props.media.id, { surface: "v2" }); void navigate({ to: "/v2/search" }); }; + const handleDownload = () => { + setMoreActionsOpen(false); + const anchor = document.createElement("a"); + anchor.href = `/api/sources/${encodeURIComponent(props.media.mediaSourceId)}/${encodeURIComponent(props.media.id)}`; + anchor.download = props.media.fileName; + anchor.click(); + }; + const handleDelete = async () => { + if (isDeleting()) return; + setIsDeleting(true); + try { + await deleteMedia(props.media.mediaSourceId, props.media.id); + setIsDeleteDialogOpen(false); + toast.success("Media deleted"); + await navigate({ + params: { mediaSourceId: props.media.mediaSourceId }, + replace: true, + to: "/v2/sources/$mediaSourceId", + }); + } catch (error) { + toast.error(`Failed to delete media: ${getErrorMessage(error)}`); + } finally { + setIsDeleting(false); + } + }; const ccipActionLabel = () => { if (ccipStatus() === "ready" || ccipStatus() === "stale") { return "Re-extract CCIP vector"; @@ -202,7 +244,11 @@ export function V2MediaActions(props: MediaActionsProps) {