Rebuild organize imports: move furniture between categories, 500-item cap
CI / check (push) Failing after 5m12s
CI / preflight (push) Skipped
CI / deploy (push) Skipped
CI / publish-container (push) Skipped

This commit is contained in:
openhands committed 2026-09-14 18:24:48 +02:00
1 parent 67430e7e9d
commit 644d53ca16
28 files changed
+528 -174

No files matched your search

+1 -1
View File
@@ -349,7 +349,7 @@ export async function createAutoCategory(input: {
} }
const MAX_ORGANIZE_GROUPS = 50; const MAX_ORGANIZE_GROUPS = 50;
const MAX_ORGANIZE_ITEMS = 1000; const MAX_ORGANIZE_ITEMS = 500;
export interface OrganizeImportGroup { export interface OrganizeImportGroup {
caption: string; caption: string;
+8 -7
View File
@@ -210,6 +210,7 @@ export const GET = withAdmin(
// then we can use the extra fields in the returned groups. // then we can use the extra fields in the returned groups.
const sugItems = items.map((it) => ({ const sugItems = items.map((it) => ({
id: it.itemId, id: it.itemId,
itemId: it.itemId,
itemName: it.itemName, itemName: it.itemName,
publicName: it.publicName, publicName: it.publicName,
type: it.type, type: it.type,
@@ -217,6 +218,7 @@ export const GET = withAdmin(
interactionType: it.interactionType, interactionType: it.interactionType,
alreadyPlaced: it.alreadyPlaced, alreadyPlaced: it.alreadyPlaced,
catalogItemId: it.catalogItemId, catalogItemId: it.catalogItemId,
sourcePageCaption: it.sourcePageCaption,
})) as SugFurniEntryExtra[]; })) as SugFurniEntryExtra[];
const groups = groupSuggestedCategories(sugItems).map((g) => { const groups = groupSuggestedCategories(sugItems).map((g) => {
const moved = g.items.filter((i) => i.alreadyPlaced).length; const moved = g.items.filter((i) => i.alreadyPlaced).length;
@@ -227,17 +229,16 @@ export const GET = withAdmin(
total: g.items.length, total: g.items.length,
moved, moved,
added: g.items.length - moved, added: g.items.length - moved,
thumbs: g.items.slice(0, 12).map((i) => ({
itemName: i.itemName,
publicName: i.publicName,
spriteId: i.spriteId,
alreadyPlaced: i.alreadyPlaced,
sourcePageCaption: i.sourcePageCaption,
})),
items: g.items.map((i) => ({ items: g.items.map((i) => ({
itemId: i.itemId, itemId: i.itemId,
catalogItemId: i.catalogItemId, catalogItemId: i.catalogItemId,
alreadyPlaced: i.alreadyPlaced, alreadyPlaced: i.alreadyPlaced,
itemName: i.itemName,
publicName: i.publicName,
spriteId: i.spriteId,
type: i.type,
interactionType: i.interactionType,
sourcePageCaption: i.sourcePageCaption ?? null,
})), })),
}; };
}); });
@@ -10,6 +10,7 @@ import {
Plus, Plus,
RefreshCw, RefreshCw,
Search, Search,
Trash2,
Wand2, Wand2,
X, X,
} from "lucide-react"; } from "lucide-react";
@@ -42,10 +43,13 @@ import {
isValidCatalogLayout, isValidCatalogLayout,
LAYOUT_DESCRIPTIONS, LAYOUT_DESCRIPTIONS,
} from "@/lib/catalog-layouts"; } from "@/lib/catalog-layouts";
// import { CATALOG_LAYOUTS } from "@/lib/catalog-layouts";
import { getLocalIconUrl } from "@/lib/furni/classname"; import { getLocalIconUrl } from "@/lib/furni/classname";
import { cn } from "@/lib/utils"; import { cn } from "@/lib/utils";
const MAX_ITEMS_PER_RUN = 500;
const ITEMS_VISIBLE = 40;
const QUICK_PICKS = 40;
interface OrganizeGroupOverride { interface OrganizeGroupOverride {
caption?: string; caption?: string;
icon?: number; icon?: number;
@@ -57,6 +61,18 @@ interface RootPage {
caption: string; caption: string;
} }
interface OrganizeImportItem {
itemId: number;
catalogItemId: number | null;
alreadyPlaced: boolean;
itemName: string;
publicName: string;
spriteId: number;
type: string;
interactionType: string;
sourcePageCaption: string | null;
}
interface OrganizeImportGroup { interface OrganizeImportGroup {
name: string; name: string;
icon: number; icon: number;
@@ -64,18 +80,7 @@ interface OrganizeImportGroup {
total: number; total: number;
moved: number; moved: number;
added: number; added: number;
thumbs: { items: OrganizeImportItem[];
itemName: string;
publicName: string;
spriteId: number;
alreadyPlaced: boolean;
sourcePageCaption: string | null;
}[];
items: {
itemId: number;
catalogItemId: number | null;
alreadyPlaced: boolean;
}[];
} }
interface OrganizeImportsDialogProps { interface OrganizeImportsDialogProps {
@@ -129,6 +134,9 @@ export function OrganizeImportsDialog({
const [batchLayout, setBatchLayout] = useState<CatalogLayout>("default_3x3"); const [batchLayout, setBatchLayout] = useState<CatalogLayout>("default_3x3");
const [batchPrefix, setBatchPrefix] = useState(""); const [batchPrefix, setBatchPrefix] = useState("");
const [expanded, setExpanded] = useState<Record<string, boolean>>({});
const [selection, setSelection] = useState<Set<number>>(new Set());
const load = useCallback(async () => { const load = useCallback(async () => {
setLoading(true); setLoading(true);
setLoadError(false); setLoadError(false);
@@ -168,6 +176,8 @@ export function OrganizeImportsDialog({
setGroups([]); setGroups([]);
setApproved({}); setApproved({});
setOverrides({}); setOverrides({});
setExpanded({});
setSelection(new Set());
setParentId(-1); setParentId(-1);
setMoveMode(false); setMoveMode(false);
setDestinationPageId(null); setDestinationPageId(null);
@@ -220,11 +230,11 @@ export function OrganizeImportsDialog({
}, [moveMode, destDebounced]); }, [moveMode, destDebounced]);
const allApproved = const allApproved =
groups.length > 0 && groups.every((g) => approved[g.name]); groups.length > 0 && groups.every((g) => approved[g.name] !== false);
const totalSelected = useMemo( const totalSelected = useMemo(
() => () =>
groups.reduce( groups.reduce(
(sum, g) => sum + (approved[g.name] ? g.items.length : 0), (sum, g) => sum + (approved[g.name] !== false ? g.items.length : 0),
0, 0,
), ),
[groups, approved], [groups, approved],
@@ -233,7 +243,7 @@ export function OrganizeImportsDialog({
// One approved group becomes exactly one page, so the "Create … pages" // One approved group becomes exactly one page, so the "Create … pages"
// label must count groups, not the furni items inside them. // label must count groups, not the furni items inside them.
const selectedGroupsCount = useMemo( const selectedGroupsCount = useMemo(
() => groups.filter((g) => approved[g.name]).length, () => groups.filter((g) => approved[g.name] !== false).length,
[groups, approved], [groups, approved],
); );
@@ -294,27 +304,77 @@ export function OrganizeImportsDialog({
const filteredGroups = useMemo(() => { const filteredGroups = useMemo(() => {
const q = groupSearchQuery.trim().toLowerCase(); const q = groupSearchQuery.trim().toLowerCase();
return groups.filter((g) => { return groups.filter((g) => {
if (onlyUnplaced && g.added === 0 && g.moved === 0) return false; const movedCount = g.items.filter((i) => i.alreadyPlaced).length;
const addedCount = g.items.length - movedCount;
if (onlyUnplaced && addedCount === 0 && movedCount === 0) return false;
if (!q) return true; if (!q) return true;
if (g.name.toLowerCase().includes(q)) return true; if (g.name.toLowerCase().includes(q)) return true;
const caption = overrides[g.name]?.caption?.toLowerCase(); const caption = overrides[g.name]?.caption?.toLowerCase();
if (caption?.includes(q)) return true; if (caption?.includes(q)) return true;
return g.thumbs.some((t) => t.itemName.toLowerCase().includes(q)); return g.items.some((i) => i.itemName.toLowerCase().includes(q));
}); });
}, [groups, groupSearchQuery, onlyUnplaced, overrides]); }, [groups, groupSearchQuery, onlyUnplaced, overrides]);
const moveItemToGroup = (
item: OrganizeImportItem,
fromName: string,
toName: string,
) => {
if (!toName || toName === fromName) return;
setGroups((prev) =>
prev.map((g) => {
if (g.name === fromName) {
const items = g.items.filter((i) => i.itemId !== item.itemId);
return { ...g, items };
}
if (g.name === toName) {
const exists = g.items.some((i) => i.itemId === item.itemId);
return exists ? g : { ...g, items: [...g.items, item] };
}
return g;
}),
);
};
const moveSelectedToGroup = (toName: string) => {
if (selection.size === 0 || !toName) return;
setGroups((prev) => {
const moved: OrganizeImportItem[] = [];
const next = prev.map((g) => {
if (g.name === toName) return g;
const taken = g.items.filter((i) => selection.has(i.itemId));
const kept = g.items.filter((i) => !selection.has(i.itemId));
moved.push(...taken);
return taken.length === 0 ? g : { ...g, items: kept };
});
if (moved.length === 0) return prev;
return next.map((g) =>
g.name === toName ? { ...g, items: [...g.items, ...moved] } : g,
);
});
setSelection(new Set());
};
const moveItemOptions = (fromName: string) =>
groups.filter((g) => g.name !== fromName);
const handleCreate = async () => { const handleCreate = async () => {
if (isCreating) return; if (isCreating) return;
if (totalSelected > 1000) { if (totalSelected === 0) {
toast.error(t("errorMaxItems")); toast.error(t("errorNoName"));
return; return;
} }
if (totalSelected > MAX_ITEMS_PER_RUN) {
toast.error(t("errorMaxItems", { count: MAX_ITEMS_PER_RUN }));
return;
}
if (groups.length === 0) return;
if (moveMode && destinationPageId == null) { if (moveMode && destinationPageId == null) {
toast.error(t("chooseDestination")); toast.error(t("chooseDestination"));
return; return;
} }
const payload = groups const payload = groups
.filter((g) => approved[g.name]) .filter((g) => approved[g.name] !== false)
.map((g) => { .map((g) => {
const o = overrides[g.name] ?? {}; const o = overrides[g.name] ?? {};
return { return {
@@ -342,7 +402,7 @@ export function OrganizeImportsDialog({
return; return;
} }
if (payload.length === 0 || payload.some((g) => !g.caption)) { if (payload.some((g) => !g.caption)) {
toast.error(t("errorNoName")); toast.error(t("errorNoName"));
return; return;
} }
@@ -351,9 +411,9 @@ export function OrganizeImportsDialog({
const result = await organizeImportFurni({ parentId, groups: payload }); const result = await organizeImportFurni({ parentId, groups: payload });
if (!result.ok) throw new Error(result.error ?? "Failed"); if (!result.ok) throw new Error(result.error ?? "Failed");
const created = result.data?.created ?? []; const created = result.data?.created ?? [];
if (moveMode) {
const moved = created.reduce((sum, c) => sum + c.moved, 0); const moved = created.reduce((sum, c) => sum + c.moved, 0);
const added = created.reduce((sum, c) => sum + c.added, 0); const added = created.reduce((sum, c) => sum + c.added, 0);
if (moveMode) {
toast.success( toast.success(
t("successMove", { t("successMove", {
moved, moved,
@@ -362,8 +422,6 @@ export function OrganizeImportsDialog({
}), }),
); );
} else { } else {
const moved = created.reduce((sum, c) => sum + c.moved, 0);
const added = created.reduce((sum, c) => sum + c.added, 0);
toast.success( toast.success(
t("successCreate", { t("successCreate", {
count: created.length, count: created.length,
@@ -382,10 +440,12 @@ export function OrganizeImportsDialog({
} }
}; };
const quickPicks = rootPages.slice(0, QUICK_PICKS);
return ( return (
<> <>
<Dialog open={open} onOpenChange={onOpenChange}> <Dialog open={open} onOpenChange={onOpenChange}>
<DialogContent className="flex h-[90vh] max-h-[90vh] w-[800px] max-w-[95vw] flex-col overflow-hidden p-0"> <DialogContent className="flex h-[90vh] max-h-[90vh] w-[860px] max-w-[95vw] flex-col overflow-hidden p-0">
<DialogHeader className="flex-none border-b px-4 py-3"> <DialogHeader className="flex-none border-b px-4 py-3">
<DialogTitle className="flex items-center gap-2 text-sm font-semibold"> <DialogTitle className="flex items-center gap-2 text-sm font-semibold">
<FolderTree className="h-4 w-4" /> <FolderTree className="h-4 w-4" />
@@ -543,6 +603,7 @@ export function OrganizeImportsDialog({
</button> </button>
</div> </div>
) : ( ) : (
<>
<div className="relative"> <div className="relative">
<Search className="absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" /> <Search className="absolute left-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 text-muted-foreground" />
<Input <Input
@@ -555,8 +616,28 @@ export function OrganizeImportsDialog({
<Loader2 className="absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-muted-foreground" /> <Loader2 className="absolute right-2.5 top-1/2 h-3.5 w-3.5 -translate-y-1/2 animate-spin text-muted-foreground" />
)} )}
</div> </div>
{/* Quick pick: click a root page without typing */}
{destQuery.length < 2 && quickPicks.length > 0 && (
<div className="flex max-h-[140px] flex-wrap gap-1 overflow-y-auto rounded border bg-[var(--admin-canvas)] p-1.5">
{quickPicks.map((p) => (
<button
type="button"
key={p.id}
onClick={() => {
setDestinationPageId(p.id);
setDestinationCaption(p.caption);
}}
className="flex max-w-full items-center gap-1 rounded border border-[var(--admin-border)] bg-[var(--admin-surface)] px-2 py-1 text-[10px] text-[var(--admin-text)] hover:border-current"
>
<Folder className="h-3 w-3 shrink-0" />
<span className="min-w-0 truncate">
{p.caption}
</span>
</button>
))}
</div>
)} )}
{destinationPageId == null && destDebounced.length >= 2 && ( {destQuery.length >= 2 && (
<div className="max-h-[160px] divide-y overflow-y-auto rounded border"> <div className="max-h-[160px] divide-y overflow-y-auto rounded border">
{destResults.length === 0 && !destSearchLoading ? ( {destResults.length === 0 && !destSearchLoading ? (
<p className="py-3 text-center text-[10px] text-muted-foreground"> <p className="py-3 text-center text-[10px] text-muted-foreground">
@@ -585,6 +666,8 @@ export function OrganizeImportsDialog({
)} )}
</div> </div>
)} )}
</>
)}
<p className="text-[10px] text-muted-foreground"> <p className="text-[10px] text-muted-foreground">
{t("destinationHint")} {t("destinationHint")}
</p> </p>
@@ -748,6 +831,52 @@ export function OrganizeImportsDialog({
)} )}
</div> </div>
</div> </div>
{/* Move selected to another category */}
{selection.size > 0 && (
<div className="flex flex-wrap items-center gap-2 rounded-md border border-[var(--admin-accent)]/40 bg-[var(--admin-accent-subtle)] px-2.5 py-2">
<span className="text-[10px] font-semibold text-[var(--admin-accent)]">
{t("selectedCount", { count: selection.size })}
</span>
<span className="text-[10px] text-muted-foreground">
{t("batchMoveTo")}
</span>
<Select
value=""
onValueChange={(v) => {
if (v) {
moveSelectedToGroup(v);
setExpanded((prev) => ({ ...prev, [v]: true }));
}
}}
>
<SelectTrigger className="h-7 w-[180px] text-[10px]">
<SelectValue placeholder={t("batchMoveTo")} />
</SelectTrigger>
<SelectContent>
{groups.map((g) => (
<SelectItem
key={g.name}
value={g.name}
className="text-xs"
>
{g.name}
</SelectItem>
))}
</SelectContent>
</Select>
<Button
type="button"
variant="ghost"
size="sm"
className="h-7 px-2 text-[10px] text-muted-foreground hover:text-foreground"
onClick={() => setSelection(new Set())}
>
<Trash2 className="mr-1 h-3 w-3" />
{t("clearSelection")}
</Button>
</div>
)}
</div> </div>
{filteredGroups.map((group) => { {filteredGroups.map((group) => {
@@ -756,16 +885,23 @@ export function OrganizeImportsDialog({
const icon = o.icon ?? group.icon; const icon = o.icon ?? group.icon;
const layout = o.layout ?? group.layout ?? "default_3x3"; const layout = o.layout ?? group.layout ?? "default_3x3";
const isApproved = approved[group.name] !== false; const isApproved = approved[group.name] !== false;
const moved = group.moved; const movedCount = group.items.filter(
const added = group.added; (i) => i.alreadyPlaced,
).length;
const addedCount = group.items.length - movedCount;
const isExpanded = expanded[group.name] ?? false;
const visibleItems = isExpanded
? group.items
: group.items.slice(0, ITEMS_VISIBLE);
const moveTargets = moveItemOptions(group.name);
return ( return (
<label <div
key={group.name} key={group.name}
className={cn( className={cn(
"block rounded-md border bg-[var(--admin-surface)] p-3 transition-colors", "block rounded-md border bg-[var(--admin-surface)] p-3 transition-colors",
isApproved isApproved
? "border-[var(--admin-accent)]/40" ? "border-[var(--admin-accent)]/40"
: "opacity-60", : "opacity-70",
)} )}
> >
<div className="flex items-center gap-2"> <div className="flex items-center gap-2">
@@ -788,32 +924,28 @@ export function OrganizeImportsDialog({
variant="ghost" variant="ghost"
size="sm" size="sm"
className="h-5 gap-1 px-1.5 text-[10px]" className="h-5 gap-1 px-1.5 text-[10px]"
onClick={(e) => { onClick={() => setPreviewGroup(group)}
e.preventDefault();
e.stopPropagation();
setPreviewGroup(group);
}}
> >
<Eye className="h-3 w-3" /> <Eye className="h-3 w-3" />
{t("visualPreview")} {t("visualPreview")}
</Button> </Button>
<Badge variant="secondary" className="h-4 text-[9px]"> <Badge variant="secondary" className="h-4 text-[9px]">
{group.total} {group.items.length}
</Badge> </Badge>
{moved > 0 && ( {movedCount > 0 && (
<Badge <Badge
variant="outline" variant="outline"
className="h-4 gap-1 text-[9px] text-muted-foreground" className="h-4 gap-1 text-[9px] text-muted-foreground"
> >
{t("movedLabel", { count: moved })} {t("movedLabel", { count: movedCount })}
</Badge> </Badge>
)} )}
{added > 0 && ( {addedCount > 0 && (
<Badge <Badge
variant="outline" variant="outline"
className="h-4 gap-1 text-[9px] text-muted-foreground" className="h-4 gap-1 text-[9px] text-muted-foreground"
> >
{t("newLabel", { count: added })} {t("newLabel", { count: addedCount })}
</Badge> </Badge>
)} )}
</div> </div>
@@ -827,7 +959,6 @@ export function OrganizeImportsDialog({
<Input <Input
className="h-7 text-xs" className="h-7 text-xs"
value={caption} value={caption}
onClick={(e) => e.stopPropagation()}
onChange={(e) => onChange={(e) =>
updateGroup(group.name, { updateGroup(group.name, {
caption: e.target.value, caption: e.target.value,
@@ -840,13 +971,11 @@ export function OrganizeImportsDialog({
variant="outline" variant="outline"
size="sm" size="sm"
className="h-7 shrink-0 px-2 text-[10px]" className="h-7 shrink-0 px-2 text-[10px]"
onClick={(e) => { onClick={() =>
e.preventDefault();
e.stopPropagation();
updateGroup(group.name, { updateGroup(group.name, {
caption: group.name, caption: group.name,
}); })
}} }
> >
<Wand2 className="mr-0.5 h-2.5 w-2.5" /> <Wand2 className="mr-0.5 h-2.5 w-2.5" />
{t("resetSuggestion")} {t("resetSuggestion")}
@@ -869,7 +998,6 @@ export function OrganizeImportsDialog({
variant="outline" variant="outline"
size="sm" size="sm"
className="h-7 gap-1.5 px-2" className="h-7 gap-1.5 px-2"
onClick={(e) => e.stopPropagation()}
> >
<CatalogIcon iconImage={icon} size={16} /> <CatalogIcon iconImage={icon} size={16} />
<span className="font-mono text-[10px] text-muted-foreground"> <span className="font-mono text-[10px] text-muted-foreground">
@@ -883,11 +1011,9 @@ export function OrganizeImportsDialog({
variant="outline" variant="outline"
size="sm" size="sm"
className="h-7 px-2 text-[10px]" className="h-7 px-2 text-[10px]"
onClick={(e) => { onClick={() =>
e.preventDefault(); updateGroup(group.name, { icon: group.icon })
e.stopPropagation(); }
updateGroup(group.name, { icon: group.icon });
}}
> >
<Wand2 className="mr-0.5 h-2.5 w-2.5" /> <Wand2 className="mr-0.5 h-2.5 w-2.5" />
{group.icon} {group.icon}
@@ -906,13 +1032,11 @@ export function OrganizeImportsDialog({
"bg-muted text-muted-foreground"; "bg-muted text-muted-foreground";
return ( return (
<button <button
key={l}
type="button" type="button"
onClick={(e) => { key={l}
e.preventDefault(); onClick={() =>
e.stopPropagation(); updateGroup(group.name, { layout: l })
updateGroup(group.name, { layout: l }); }
}}
className={cn( className={cn(
"rounded border px-1.5 py-0.5 font-mono text-[10px] transition-colors", "rounded border px-1.5 py-0.5 font-mono text-[10px] transition-colors",
layout === l layout === l
@@ -936,9 +1060,7 @@ export function OrganizeImportsDialog({
variant="ghost" variant="ghost"
size="sm" size="sm"
className="h-6 w-fit border border-[var(--admin-warning-border)] bg-[var(--admin-warning-subtle)] px-2 text-[10px] text-[var(--admin-warning)]" className="h-6 w-fit border border-[var(--admin-warning-border)] bg-[var(--admin-warning-subtle)] px-2 text-[10px] text-[var(--admin-warning)]"
onClick={(e) => { onClick={() =>
e.preventDefault();
e.stopPropagation();
updateGroup(group.name, { updateGroup(group.name, {
layout: layout:
group.layout === null group.layout === null
@@ -946,8 +1068,8 @@ export function OrganizeImportsDialog({
: isValidCatalogLayout(group.layout) : isValidCatalogLayout(group.layout)
? group.layout ? group.layout
: undefined, : undefined,
}); })
}} }
> >
<Wand2 className="mr-0.5 h-2.5 w-2.5" /> <Wand2 className="mr-0.5 h-2.5 w-2.5" />
{t("suggestedLayout", { {t("suggestedLayout", {
@@ -959,41 +1081,113 @@ export function OrganizeImportsDialog({
</div> </div>
)} )}
<div className="mt-2 flex flex-wrap gap-1.5 border-t pt-2"> {/* Item rows: every furniture item in this category */}
{group.thumbs.slice(0, 12).map((thumb) => ( <div className="mt-2 border-t pt-2">
{visibleItems.map((item) => {
const checked = selection.has(item.itemId);
return (
<div <div
key={thumb.itemName} key={item.itemId}
className="group flex flex-col items-center gap-0.5" className="flex items-center gap-2 rounded border border-[var(--admin-border)] bg-[var(--admin-canvas)] px-2 py-1"
> >
<div <input
className="relative" type="checkbox"
title={thumb.publicName || thumb.itemName} checked={checked}
> onChange={(e) =>
<FurniThumb item={{ itemName: thumb.itemName }} /> setSelection((prev) => {
const next = new Set(prev);
if (e.target.checked) next.add(item.itemId);
else next.delete(item.itemId);
return next;
})
}
/>
<FurniThumb
item={{ itemName: item.itemName }}
size={28}
/>
<div className="min-w-0 flex-1">
<p className="truncate text-xs font-medium text-[var(--admin-text)]">
{item.publicName || item.itemName}
</p>
<p className="truncate font-mono text-[9px] text-muted-foreground">
{item.itemName}
</p>
</div> </div>
{thumb.alreadyPlaced ? ( {item.alreadyPlaced ? (
<span className="max-w-14 truncate text-[8px] text-muted-foreground"> <span className="shrink-0 rounded bg-[var(--admin-success-subtle)] px-1.5 py-0.5 text-[9px] text-[var(--admin-text)]">
{thumb.sourcePageCaption {item.sourcePageCaption
? thumb.sourcePageCaption.replace( ? item.sourcePageCaption.replace(
new RegExp(`^${t("impPrefix")}`), new RegExp(`^${t("impPrefix")}`),
"", "",
) )
: t("isMoved")} : t("isMoved")}
</span> </span>
) : ( ) : (
<span className="max-w-14 truncate text-[8px] text-muted-foreground"> <span className="shrink-0 rounded bg-[var(--admin-info-subtle)] px-1.5 py-0.5 text-[9px] text-[var(--admin-text)]">
{t("isNew")} {t("isNew")}
</span> </span>
)} )}
</div> {moveTargets.length > 0 && (
<select
title={t("moveItemTo")}
value=""
onChange={(e) => {
moveItemToGroup(
item,
group.name,
e.target.value,
);
e.target.value = "";
}}
className="h-6 shrink-0 rounded border border-[var(--admin-border)] bg-[var(--admin-surface)] px-1 text-[9px] text-[var(--admin-text)]"
>
<option value="" disabled>
{t("moveItemTo")}
</option>
{moveTargets.map((g) => (
<option key={g.name} value={g.name}>
{g.name}
</option>
))} ))}
{group.total > 12 && ( </select>
<p className="self-center text-[10px] text-muted-foreground">
+{group.total - 12}
</p>
)} )}
</div> </div>
</label> );
})}
{group.items.length > ITEMS_VISIBLE &&
(isExpanded ? (
<button
type="button"
onClick={() =>
setExpanded((prev) => ({
...prev,
[group.name]: false,
}))
}
className="mt-1 w-full rounded border border-[var(--admin-border)] py-1 text-[10px] text-muted-foreground hover:text-foreground"
>
{t("showLess")}
</button>
) : (
<button
type="button"
onClick={() =>
setExpanded((prev) => ({
...prev,
[group.name]: true,
}))
}
className="mt-1 w-full rounded border border-[var(--admin-border)] py-1 text-[10px] text-muted-foreground hover:text-foreground"
>
{t("showAll", {
count: group.items.length,
})}
</button>
))}
</div>
</div>
); );
})} })}
</> </>
@@ -1017,6 +1211,7 @@ export function OrganizeImportsDialog({
loading || loading ||
isCreating || isCreating ||
totalSelected === 0 || totalSelected === 0 ||
totalSelected > MAX_ITEMS_PER_RUN ||
(moveMode && destinationPageId == null) (moveMode && destinationPageId == null)
} }
onClick={() => void handleCreate()} onClick={() => void handleCreate()}
@@ -1039,7 +1234,7 @@ export function OrganizeImportsDialog({
open={previewGroup != null} open={previewGroup != null}
onOpenChange={(open) => !open && setPreviewGroup(null)} onOpenChange={(open) => !open && setPreviewGroup(null)}
> >
<DialogContent className="max-w-md"> <DialogContent className="max-w-lg">
<DialogHeader> <DialogHeader>
<DialogTitle className="flex items-center gap-2 text-base"> <DialogTitle className="flex items-center gap-2 text-base">
<CatalogIcon iconImage={previewGroup?.icon ?? 1} size={24} /> <CatalogIcon iconImage={previewGroup?.icon ?? 1} size={24} />
@@ -1056,7 +1251,7 @@ export function OrganizeImportsDialog({
</span> </span>
</div> </div>
<Badge variant="outline" className="text-[10px]"> <Badge variant="outline" className="text-[10px]">
{previewGroup.total} items {previewGroup.items.length} items
</Badge> </Badge>
</div> </div>
{previewGroup.layout && {previewGroup.layout &&
@@ -1065,20 +1260,28 @@ export function OrganizeImportsDialog({
{LAYOUT_DESCRIPTIONS[previewGroup.layout]} {LAYOUT_DESCRIPTIONS[previewGroup.layout]}
</p> </p>
)} )}
<div className="max-h-[220px] overflow-y-auto rounded border p-2"> <div className="max-h-[260px] overflow-y-auto rounded border p-2">
<div className="grid grid-cols-4 gap-1.5"> <div className="grid grid-cols-4 gap-1.5">
{previewGroup.thumbs.map((thumb) => ( {previewGroup.items.slice(0, 40).map((item) => (
<div <div
key={thumb.itemName} key={item.itemId}
className="flex flex-col items-center gap-1 rounded border bg-background p-1.5" className="flex flex-col items-center gap-1 rounded border bg-background p-1.5"
> >
<FurniThumb item={thumb} size={32} /> <FurniThumb
item={{ itemName: item.itemName }}
size={32}
/>
<span className="w-full truncate text-center text-[9px] text-muted-foreground"> <span className="w-full truncate text-center text-[9px] text-muted-foreground">
{thumb.itemName} {item.itemName}
</span> </span>
</div> </div>
))} ))}
</div> </div>
{previewGroup.items.length > 40 && (
<p className="py-2 text-center text-[10px] text-muted-foreground">
{t("showAll", { count: previewGroup.items.length })}
</p>
)}
</div> </div>
</div> </div>
)} )}
+9 -3
View File
@@ -907,12 +907,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -920,7 +920,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2004,12 +2004,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2017,7 +2017,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Alle anzeigen ({count})",
"showLess": "Weniger anzeigen",
"moveItemTo": "Verschieben zu…",
"batchMoveTo": "Auswahl verschieben zu…",
"selectedCount": "{count} ausgewählt",
"clearSelection": "Auswahl aufheben"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2260,12 +2260,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2273,7 +2273,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"bulk": { "bulk": {
+9 -3
View File
@@ -2004,12 +2004,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2017,7 +2017,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Mostrar todo ({count})",
"showLess": "Mostrar menos",
"moveItemTo": "Mover a…",
"batchMoveTo": "Mover seleccionados a…",
"selectedCount": "{count} seleccionados",
"clearSelection": "Limpiar selección"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -907,12 +907,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -920,7 +920,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2004,12 +2004,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2017,7 +2017,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Tout afficher ({count})",
"showLess": "Afficher moins",
"moveItemTo": "Déplacer vers…",
"batchMoveTo": "Déplacer la sélection vers…",
"selectedCount": "{count} sélectionné(s)",
"clearSelection": "Effacer la sélection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2179,12 +2179,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2192,7 +2192,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Mostra tutto ({count})",
"showLess": "Mostra meno",
"moveItemTo": "Sposta verso…",
"batchMoveTo": "Sposta la selezione verso…",
"selectedCount": "{count} selezionati",
"clearSelection": "Azzera selezione"
} }
}, },
"bulk": { "bulk": {
+9 -3
View File
@@ -907,12 +907,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -920,7 +920,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2124,12 +2124,12 @@
"visualPreview": "Voorbeeld", "visualPreview": "Voorbeeld",
"resetAll": "Wijzigingen herstellen", "resetAll": "Wijzigingen herstellen",
"onlyUnplaced": "Toon alleen ongeplaatste items", "onlyUnplaced": "Toon alleen ongeplaatste items",
"errorMaxItems": "Maximaal 1000 items per run. Verlaag de selectie.", "errorMaxItems": "Maximaal 500 items per run. Verlaag de selectie.",
"errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.", "errorMaxGroups": "Maximaal {count} groepen per run. Verlaag de selectie.",
"errorNoName": "Elke goedgekeurde pagina heeft een naam nodig", "errorNoName": "Elke goedgekeurde pagina heeft een naam nodig",
"tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.", "tipMove": "Tip: Kies de doelpagina in het vak hieronder om meubels te verplaatsen.",
"tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.", "tipCreate": "Tip: Kies deze modus om nieuwe pagina's aan te maken.",
"limitHint": "Maximaal 1000 items en 50 groepen per run.", "limitHint": "Maximaal 500 items en 50 groepen per run.",
"errorFailed": "Kon imports niet organiseren", "errorFailed": "Kon imports niet organiseren",
"successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"", "successMove": "{moved} item{moved, plural, one { verplaatst} other {s verplaatst}}{added, plural, =0 {} other {, {added} nieuw toegevoegd}} naar \"{destination}\"",
"successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels", "successCreate": "{count, plural, one {1 pagina} other {# pagina's}} aangemaakt met {moved} verplaatste en {added} toegevoegde meubels",
@@ -2137,7 +2137,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "verplaatst" "isMoved": "verplaatst",
"showAll": "Alles tonen ({count})",
"showLess": "Minder tonen",
"moveItemTo": "Verplaatsen naar…",
"batchMoveTo": "Geselecteerde verplaatsen naar…",
"selectedCount": "{count} geselecteerd",
"clearSelection": "Selectie wissen"
} }
}, },
"bulk": { "bulk": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Mostrar tudo ({count})",
"showLess": "Mostrar menos",
"moveItemTo": "Mover para…",
"batchMoveTo": "Mover seleção para…",
"selectedCount": "{count} selecionados",
"clearSelection": "Limpar seleção"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2032,12 +2032,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2045,7 +2045,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Tümünü göster ({count})",
"showLess": "Daha az göster",
"moveItemTo": "Taşı…",
"batchMoveTo": "Seçimi taşı…",
"selectedCount": "{count} seçildi",
"clearSelection": "Seçimi temizle"
} }
}, },
"discovery": { "discovery": {
+9 -3
View File
@@ -2034,12 +2034,12 @@
"visualPreview": "Preview", "visualPreview": "Preview",
"resetAll": "Reset overrides", "resetAll": "Reset overrides",
"onlyUnplaced": "Only show unplaced items", "onlyUnplaced": "Only show unplaced items",
"errorMaxItems": "Max 1000 items per run. Reduce selection.", "errorMaxItems": "Max 500 items per run. Reduce selection.",
"errorMaxGroups": "Max {count} groups per run. Reduce selection.", "errorMaxGroups": "Max {count} groups per run. Reduce selection.",
"errorNoName": "Every approved page needs a name", "errorNoName": "Every approved page needs a name",
"tipMove": "Tip: Pick a destination page below to move furniture.", "tipMove": "Tip: Pick a destination page below to move furniture.",
"tipCreate": "Tip: Pick this mode to create new pages.", "tipCreate": "Tip: Pick this mode to create new pages.",
"limitHint": "Max 1000 items and 50 groups per run.", "limitHint": "Max 500 items and 50 groups per run.",
"errorFailed": "Failed to organize imports", "errorFailed": "Failed to organize imports",
"successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"", "successMove": "Moved {moved} offer{moved, plural, one {} other {s}}{added, plural, =0 {} other {, added {added} new}} to \"{destination}\"",
"successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture", "successCreate": "Created {count, plural, one {1 page} other {# pages}} with {moved} moved and {added} added furniture",
@@ -2047,7 +2047,13 @@
"layoutFallbackDefault3x3": "3x3", "layoutFallbackDefault3x3": "3x3",
"itemsUnit": "items", "itemsUnit": "items",
"impPrefix": "Imp ", "impPrefix": "Imp ",
"isMoved": "moved" "isMoved": "moved",
"showAll": "Show all ({count})",
"showLess": "Show less",
"moveItemTo": "Move to…",
"batchMoveTo": "Move selected to…",
"selectedCount": "{count} selected",
"clearSelection": "Clear selection"
} }
}, },
"discovery": { "discovery": {