diff --git a/stash-web/src/App.css b/stash-web/src/App.css index d897780..6a7d9a9 100644 --- a/stash-web/src/App.css +++ b/stash-web/src/App.css @@ -1053,6 +1053,46 @@ cursor: default; } +/* 分组图标选择:搜索 + 图标网格 */ +.icon-picker { + display: flex; + flex-direction: column; + gap: var(--su-space-3); + margin-top: var(--su-space-3); + padding: var(--su-space-3); + border: 1px solid var(--su-border); + border-radius: var(--su-radius-md); + background-color: var(--su-bg-subtle); +} + +.icon-picker-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(40px, 1fr)); + gap: var(--su-space-2); + max-height: 220px; + overflow-y: auto; +} + +.icon-picker-item { + display: grid; + place-items: center; + height: 36px; + border: 1px solid transparent; + border-radius: var(--su-radius-sm); + background-color: var(--su-bg-card); + color: var(--su-text-sub); + font-size: var(--su-font-size-lg); + cursor: pointer; + transition: + border-color var(--su-duration-fast) var(--su-ease-in-out), + color var(--su-duration-fast) var(--su-ease-in-out); +} + +.icon-picker-item:hover { + border-color: var(--su-color-primary); + color: var(--su-color-primary); +} + .group-mark { display: inline-flex; flex: none; diff --git a/stash-web/src/AppNext.tsx b/stash-web/src/AppNext.tsx index 629b2e4..0d11853 100644 --- a/stash-web/src/AppNext.tsx +++ b/stash-web/src/AppNext.tsx @@ -18,6 +18,7 @@ import { ItemEditor } from './components/content/ItemEditor' import { PosterGrid } from './components/content/PosterGrid' import { SectionCard } from './components/content/SectionCard' import { SiteHeader } from './components/header/SiteHeader' +import { GroupMark } from './components/common/GroupMark' import { LoginDialog } from './components/auth/LoginDialog' import { ProfileCard } from './components/sidebar/ProfileCard' import { ServicePanel } from './components/sidebar/ServicePanel' @@ -486,7 +487,7 @@ export default function AppNext() {

{group.title}

[{groupEntryCount(group)}] diff --git a/stash-web/src/components/admin/AdminNext.tsx b/stash-web/src/components/admin/AdminNext.tsx index 6b43aa4..be85e2f 100644 --- a/stash-web/src/components/admin/AdminNext.tsx +++ b/stash-web/src/components/admin/AdminNext.tsx @@ -25,6 +25,7 @@ import { import { useEffect, useMemo, useState } from 'react' import { changePassword, fetchSession, logout, type SessionState } from '../../auth' import { LoginDialog } from '../auth/LoginDialog' +import { GroupMark as GroupGlyph } from '../common/GroupMark' import { fetchSettings, saveSettings, @@ -430,19 +431,18 @@ const FORMAT_LABEL: Record = { } function GroupMark({ icon }: { icon: string }) { - if (icon.trim() === '') { - return