diff --git a/client/src/locales/data-de.json b/client/src/locales/data-de.json index 5f9096d..99672db 100644 --- a/client/src/locales/data-de.json +++ b/client/src/locales/data-de.json @@ -230,6 +230,7 @@ "addPresetTitle": "Neue Voreinstellung", "addPresetNameEmpty": "Name darf nicht leer sein", "addPresetNameExists": "Dieser Name existiert bereits. Wählen Sie einen anderen.", + "addPresetNameTooLong": "Name darf maximal 80 Zeichen lang sein", "overwritePresetTitle": "Voreinstellung existiert bereits", "overwritePresetDesc": "Eine Voreinstellung mit dem Namen \"{{name}}\" existiert bereits. Überschreiben?", "overwritePresetConfirm": "Überschreiben", diff --git a/client/src/locales/data-en.json b/client/src/locales/data-en.json index e7b01c6..ac8c2ae 100644 --- a/client/src/locales/data-en.json +++ b/client/src/locales/data-en.json @@ -230,6 +230,7 @@ "addPresetTitle": "New preset", "addPresetNameEmpty": "Name cannot be empty", "addPresetNameExists": "That name already exists. Choose another.", + "addPresetNameTooLong": "Name cannot exceed 80 characters", "overwritePresetTitle": "Preset name already exists", "overwritePresetDesc": "A preset named \"{{name}}\" already exists. Overwrite it?", "overwritePresetConfirm": "Overwrite", diff --git a/client/src/locales/data-es.json b/client/src/locales/data-es.json index 2bdeaff..70d96bb 100644 --- a/client/src/locales/data-es.json +++ b/client/src/locales/data-es.json @@ -230,6 +230,7 @@ "addPresetTitle": "Nuevo preset", "addPresetNameEmpty": "El nombre no puede estar vacío", "addPresetNameExists": "Ese nombre ya existe. Elija otro.", + "addPresetNameTooLong": "El nombre no puede superar los 80 caracteres", "overwritePresetTitle": "El nombre del preset ya existe", "overwritePresetDesc": "Un preset llamado \"{{name}}\" ya existe. ¿Sobrescribirlo?", "overwritePresetConfirm": "Sobrescribir", diff --git a/client/src/locales/data-fr.json b/client/src/locales/data-fr.json index 93beae4..97eebed 100644 --- a/client/src/locales/data-fr.json +++ b/client/src/locales/data-fr.json @@ -230,6 +230,7 @@ "addPresetTitle": "Nouveau préréglage", "addPresetNameEmpty": "Le nom ne peut pas être vide", "addPresetNameExists": "Ce nom existe déjà. Choisissez-en un autre.", + "addPresetNameTooLong": "Le nom ne peut pas dépasser 80 caractères", "overwritePresetTitle": "Le nom du préréglage existe déjà", "overwritePresetDesc": "Un préréglage nommé \"{{name}}\" existe déjà. L'écraser ?", "overwritePresetConfirm": "Écraser", diff --git a/client/src/locales/data-zh-HK.json b/client/src/locales/data-zh-HK.json index 1cfe857..43a23fb 100644 --- a/client/src/locales/data-zh-HK.json +++ b/client/src/locales/data-zh-HK.json @@ -223,6 +223,7 @@ "addPresetTitle": "新增預設", "addPresetNameEmpty": "名稱不能為空", "addPresetNameExists": "名稱已存在,請修改後再儲存", + "addPresetNameTooLong": "名稱不能超過 80 個字元", "overwritePresetTitle": "預設名稱已存在", "overwritePresetDesc": "預設「{{name}}」已存在,確認覆蓋原有資料嗎?", "overwritePresetConfirm": "覆蓋", diff --git a/client/src/locales/data-zh.json b/client/src/locales/data-zh.json index 637ac8d..b1da996 100644 --- a/client/src/locales/data-zh.json +++ b/client/src/locales/data-zh.json @@ -223,6 +223,7 @@ "addPresetTitle": "新增预设", "addPresetNameEmpty": "名称不能为空", "addPresetNameExists": "名称已存在,请修改后再保存", + "addPresetNameTooLong": "名称不能超过 80 个字符", "overwritePresetTitle": "预设名称已存在", "overwritePresetDesc": "预设「{{name}}」已存在,确认覆盖原有数据吗?", "overwritePresetConfirm": "覆盖", diff --git a/client/src/pages/EQPage.tsx b/client/src/pages/EQPage.tsx index ca32872..552aa22 100644 --- a/client/src/pages/EQPage.tsx +++ b/client/src/pages/EQPage.tsx @@ -84,6 +84,7 @@ import { BrandDrawer } from "./eq/components/BrandDrawer"; import { PeqOverwriteConfirmDialog } from "./eq/components/PeqOverwriteConfirmDialog"; import { PeqPresetManageDialog } from "./eq/components/PeqPresetManageDialog"; import { useRawCurve } from "./eq/hooks/useRawCurve"; +import { isPeqPresetNameTooLong } from "./eq/peqPresetName"; /* ── Default bands imported from eq/constants ── */ @@ -606,6 +607,10 @@ export default function EQPage() { toast.error(eqUi.addPresetNameEmpty); return; } + if (isPeqPresetNameTooLong(nextName)) { + toast.error(eqUi.addPresetNameTooLong); + return; + } if (headphoneModels.includes(nextName)) { toast.error(eqUi.addPresetNameExists); return; @@ -701,6 +706,10 @@ export default function EQPage() { toast.error(eqUi.addPresetNameEmpty); return; } + if (isPeqPresetNameTooLong(nextName)) { + toast.error(eqUi.addPresetNameTooLong); + return; + } if (headphoneModels.includes(nextName)) { toast.error(eqUi.addPresetNameExists); return; @@ -779,6 +788,10 @@ export default function EQPage() { toast.error(eqUi.addPresetNameEmpty); return; } + if (isPeqPresetNameTooLong(nextName)) { + toast.error(eqUi.addPresetNameTooLong); + return; + } if (!shareCode.trim()) { toast.error(eqUi.importCodeNotFound); return; diff --git a/client/src/pages/eq/components/AddPresetDialog.tsx b/client/src/pages/eq/components/AddPresetDialog.tsx index cf12390..2ebb296 100644 --- a/client/src/pages/eq/components/AddPresetDialog.tsx +++ b/client/src/pages/eq/components/AddPresetDialog.tsx @@ -1,6 +1,9 @@ import { X } from "lucide-react"; import { cn } from "@/lib/utils"; import type { PeqEqUi } from "../constants"; +import { PEQ_PRESET_NAME_MAX_LENGTH } from "../constants"; +import { clampPeqPresetName } from "../peqPresetName"; +import { PeqPresetNameLengthHint } from "./PeqPresetNameLengthHint"; export function AddPresetDialog({ open, @@ -63,12 +66,16 @@ export function AddPresetDialog({ onChange={() => onModeChange("copy")} className="h-4 w-4 shrink-0 accent-[#00FFF6]" /> - onCopyNameChange(e.target.value)} - onClick={(e) => e.stopPropagation()} - className="h-10 min-w-0 flex-1 rounded-[10px] border border-white/12 bg-[#15171b] px-3 text-[15px] text-white/90 outline-none ring-0 ring-offset-0 placeholder:text-white/30 focus:border-white/15 focus:ring-0 focus-visible:ring-0" - /> +