keyed the dock, header and shell chrome (555 -> 487)
Layout reaches zero. The dock, header, user menu, theme switcher, spotlight, shortcuts modal, screen-error fallback, rescan and bug report. Three things worth knowing: CORE_DOCK_ITEMS now carries labelKey instead of label, and one useDockItems() hook resolves the composed list. DashboardLayout, Spotlight and DockSettings each spread the same two sources before, so each would have had to resolve labels itself. Plugin tiles keep the name from their own manifest — a plugin's strings are not ours. Spotlight resolves labels INSIDE the hook, so rank() still matches what the reader can see rather than a dot-path. Its to: '/settings/...' literals are untouched, which is what docs:check parses — verified still 20 offered, 0 missing. The rescan toast said 'N skill(s)'. That is English giving up on a plural, so it is now a real plural entry per noun and reads correctly at 0, 1 and 2 in both locales. ThemeSwitcher used t as its theme loop variable; renamed to entry.
This commit is contained in:
@@ -3,6 +3,7 @@ import { useNavigate } from 'react-router';
|
||||
import { Search } from 'lucide-react';
|
||||
import { rank } from './match';
|
||||
import { useSpotlightItems, type SpotlightItem } from './useSpotlightItems';
|
||||
import { useTranslation } from '@/lib/i18n';
|
||||
|
||||
// Spotlight: type a few letters, go somewhere.
|
||||
//
|
||||
@@ -181,6 +182,7 @@ export const Spotlight = () => {
|
||||
const inputRef = useRef<HTMLInputElement | null>(null);
|
||||
const navigate = useNavigate();
|
||||
const items = useSpotlightItems();
|
||||
const { t } = useTranslation();
|
||||
|
||||
const results = useMemo(() => rank(items, query), [items, query]);
|
||||
|
||||
@@ -287,14 +289,14 @@ export const Spotlight = () => {
|
||||
ref={inputRef}
|
||||
value={query}
|
||||
onChange={(ev) => setQuery(ev.target.value)}
|
||||
placeholder="Go to…"
|
||||
placeholder={t('spotlight.placeholder')}
|
||||
className="w-full bg-transparent py-4 text-base text-foreground outline-none placeholder:text-muted-foreground"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="max-h-[60vh] overflow-y-auto p-2">
|
||||
{results.length === 0 ? (
|
||||
<p className="px-3 py-6 text-center text-sm text-muted-foreground">Nothing matches “{query}”.</p>
|
||||
<p className="px-3 py-6 text-center text-sm text-muted-foreground">{t('spotlight.noResults', { query })}</p>
|
||||
) : (
|
||||
results.map((result, i) => (
|
||||
<Row
|
||||
|
||||
Reference in New Issue
Block a user