'use client'; import type { WebApp, WebAppUser, WebAppInitData, Platforms, HapticFeedback } from '@twa-dev/types'; // Демо данные для тестирования без Telegram const demoUser: WebAppUser = { id: 12345, first_name: 'Demo', username: 'demo_user', language_code: 'ru', is_premium: false, last_name: '', photo_url: '' }; const demoInitData: WebAppInitData = { query_id: 'demo_query', user: demoUser, auth_date: Date.now(), hash: 'demo_hash', start_param: '' }; export const isDemoMode = () => { return typeof window !== 'undefined' && new URLSearchParams(window.location.search).has('demo'); }; // Создаем заглушки для методов WebApp const createNoopFunction = () => () => {}; // Создаем заглушку для HapticFeedback const demoHapticFeedback: HapticFeedback = { impactOccurred: (_style: "light" | "medium" | "heavy" | "rigid" | "soft") => demoHapticFeedback, notificationOccurred: (_type: "error" | "success" | "warning") => demoHapticFeedback, selectionChanged: () => demoHapticFeedback }; export const getDemoWebApp = (): WebApp => ({ initData: JSON.stringify(demoInitData), initDataUnsafe: demoInitData, platform: 'WEBVIEW' as Platforms, colorScheme: 'light', themeParams: { bg_color: '#ffffff', text_color: '#000000', hint_color: '#999999', link_color: '#2481cc', button_color: '#2481cc', button_text_color: '#ffffff', secondary_bg_color: '#f0f0f0' }, isExpanded: true, viewportHeight: typeof window !== 'undefined' ? window.innerHeight : 800, viewportStableHeight: typeof window !== 'undefined' ? window.innerHeight : 800, headerColor: '#ffffff', backgroundColor: '#ffffff', isClosingConfirmationEnabled: true, BackButton: { isVisible: false, onClick: createNoopFunction(), offClick: createNoopFunction(), show: createNoopFunction(), hide: createNoopFunction() }, MainButton: { text: '', color: '#2481cc', textColor: '#ffffff', isVisible: false, isProgressVisible: false, isActive: true, setText: createNoopFunction(), onClick: createNoopFunction(), offClick: createNoopFunction(), show: createNoopFunction(), hide: createNoopFunction(), enable: createNoopFunction(), disable: createNoopFunction(), showProgress: createNoopFunction(), hideProgress: createNoopFunction(), setParams: createNoopFunction() }, HapticFeedback: demoHapticFeedback, CloudStorage: { setItem: createNoopFunction(), getItem: createNoopFunction(), getItems: createNoopFunction(), removeItem: createNoopFunction(), removeItems: createNoopFunction(), getKeys: createNoopFunction() }, version: '7.0', isVersionAtLeast: (version: string) => true, setHeaderColor: createNoopFunction(), setBackgroundColor: createNoopFunction(), enableClosingConfirmation: createNoopFunction(), disableClosingConfirmation: createNoopFunction(), onEvent: createNoopFunction(), offEvent: createNoopFunction(), sendData: createNoopFunction(), switchInlineQuery: createNoopFunction(), openLink: createNoopFunction(), openTelegramLink: createNoopFunction(), openInvoice: createNoopFunction(), showPopup: createNoopFunction(), showAlert: createNoopFunction(), showConfirm: createNoopFunction(), showScanQrPopup: createNoopFunction(), closeScanQrPopup: createNoopFunction(), readTextFromClipboard: createNoopFunction(), requestWriteAccess: createNoopFunction(), requestContact: createNoopFunction(), ready: createNoopFunction(), expand: createNoopFunction(), close: createNoopFunction(), });