diff --git a/src/api/menuLayout.ts b/src/api/menuLayout.ts index 40320d1..148367f 100644 --- a/src/api/menuLayout.ts +++ b/src/api/menuLayout.ts @@ -1,5 +1,7 @@ import apiClient from './client'; +export type OpenIn = 'external' | 'webapp'; + export interface MenuButtonConfig { id: string; type: 'builtin' | 'custom'; @@ -8,6 +10,7 @@ export interface MenuButtonConfig { enabled: boolean; labels: Record; url: string | null; + open_in: OpenIn; } export interface MenuRowConfig { @@ -51,6 +54,7 @@ const DEFAULT_BUTTON: Omit = { enabled: true, labels: {}, url: null, + open_in: 'external', }; function normalizeConfig(data: MenuConfig): MenuConfig { diff --git a/src/components/admin/MenuEditorTab.tsx b/src/components/admin/MenuEditorTab.tsx index d157d3a..0daa1dc 100644 --- a/src/components/admin/MenuEditorTab.tsx +++ b/src/components/admin/MenuEditorTab.tsx @@ -288,18 +288,40 @@ function ButtonChip({ /> - {/* URL input (custom buttons only) */} + {/* URL input + open mode (custom buttons only) */} {!isBuiltin && ( -
- - onUpdate({ url: e.target.value || null })} - placeholder="https://..." - className="w-full rounded-lg border border-dark-600 bg-dark-700/50 px-3 py-2 text-sm text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none" - /> -
+ <> +
+ + onUpdate({ url: e.target.value || null })} + placeholder="https://..." + className="w-full rounded-lg border border-dark-600 bg-dark-700/50 px-3 py-2 text-sm text-dark-100 placeholder-dark-500 transition-colors focus:border-accent-500 focus:outline-none" + /> +
+
+ +
+ {(['external', 'webapp'] as const).map((mode) => ( + + ))} +
+
+ )} {/* Localized labels */} @@ -665,6 +687,7 @@ export function MenuEditorTab() { enabled: true, labels: {}, url: null, + open_in: 'external', }; setDraftConfig((prev) => ({ ...prev, @@ -683,6 +706,7 @@ export function MenuEditorTab() { enabled: true, labels: {}, url: '', + open_in: 'external', }; setDraftConfig((prev) => ({ ...prev, diff --git a/src/locales/en.json b/src/locales/en.json index d89c9a0..247732c 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1781,6 +1781,11 @@ "customLabelsHint": "Empty = default label", "moveUp": "Move up", "moveDown": "Move down", + "openIn": "Open in", + "openMode": { + "external": "External browser", + "webapp": "Telegram miniapp" + }, "invalidUrl": "Please provide a valid URL (http:// or https://) for all custom buttons" }, "apps": { diff --git a/src/locales/fa.json b/src/locales/fa.json index 43c3f91..de94769 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -1443,6 +1443,11 @@ "customLabelsHint": "متن دکمه برای هر زبان ربات", "moveUp": "انتقال به بالا", "moveDown": "انتقال به پایین", + "openIn": "باز کردن در", + "openMode": { + "external": "مرورگر خارجی", + "webapp": "مینی‌اپ تلگرام" + }, "invalidUrl": "لطفاً برای تمام دکمه‌های سفارشی یک URL معتبر وارد کنید (http:// یا https://)" }, "apps": { diff --git a/src/locales/ru.json b/src/locales/ru.json index 39b1611..213ad6c 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -2292,6 +2292,11 @@ "customLabelsHint": "Пустое поле = название по умолчанию", "moveUp": "Переместить вверх", "moveDown": "Переместить вниз", + "openIn": "Открывать в", + "openMode": { + "external": "Внешний браузер", + "webapp": "Telegram miniapp" + }, "invalidUrl": "Укажите корректный URL (http:// или https://) для всех пользовательских кнопок" }, "apps": { diff --git a/src/locales/zh.json b/src/locales/zh.json index 1edb919..c0b7307 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -1481,6 +1481,11 @@ "customLabelsHint": "每种语言的按钮文本", "moveUp": "上移", "moveDown": "下移", + "openIn": "打开方式", + "openMode": { + "external": "外部浏览器", + "webapp": "Telegram 小程序" + }, "invalidUrl": "请为所有自定义按钮提供有效的URL(http:// 或 https://)" }, "apps": {