/* ===== NAI Studio - App Entry Point ===== */ (function () { 'use strict'; function init() { // Theme document.documentElement.setAttribute('data-theme', NAIState.theme); // WebSocket NAIWS.connect(); // Navigation $$('.nav-item').forEach(item => { item.addEventListener('click', () => { const page = item.dataset.page; NAIState.currentPage = page; $$('.nav-item').forEach(n => n.classList.toggle('active', n.dataset.page === page)); $$('.page-content').forEach(p => p.classList.toggle('active', p.id === `page-${page}`)); const titles = { generate: '🎨 图片生成', inpaint: '✏️ 定向修图', pnginfo: '📄 图片信息读取', tagger: '🏷️ Tagger反推', history: '📜 历史生成记录', cloud: '☁️ 云端图片浏览', settings: '⚙️ 设置', }; $('#page-title').textContent = titles[page] || ''; $('.sidebar').classList.remove('open'); $('.sidebar-overlay').classList.remove('active'); }); }); // Mobile menu $('#mobile-menu-btn')?.addEventListener('click', () => { $('.sidebar').classList.toggle('open'); $('.sidebar-overlay').classList.toggle('active'); }); $('.sidebar-overlay')?.addEventListener('click', () => { $('.sidebar').classList.remove('open'); $('.sidebar-overlay').classList.remove('active'); }); // Textareas $$('.form-textarea').forEach(t => NAIUtils.setupAutoResize(t)); // Sliders NAIUtils.bindSlider('cfg-slider', 'cfg-value', v => v.toFixed(1)); NAIUtils.bindSlider('steps-slider', 'steps-value'); NAIUtils.bindSlider('width-slider', 'width-value'); NAIUtils.bindSlider('height-slider', 'height-value'); // Preset $('#preset-select').addEventListener('change', function () { const [w, h] = this.value.split('x').map(Number); $('#width-slider').value = w; $('#height-slider').value = h; $('#width-slider').dispatchEvent(new Event('input')); $('#height-slider').dispatchEvent(new Event('input')); }); const syncPreset = () => { const key = `${$('#width-slider').value}x${$('#height-slider').value}`; const sel = $('#preset-select'); if ([...sel.options].some(o => o.value === key)) sel.value = key; }; $('#width-slider').addEventListener('input', syncPreset); $('#height-slider').addEventListener('input', syncPreset); // Seed $('#btn-random-seed').addEventListener('click', () => { $('#seed-input').value = -1; }); $('#btn-reuse-seed').addEventListener('click', () => { if (NAIState.lastSeed !== -1) $('#seed-input').value = NAIState.lastSeed; else NAIWS.send({ action: 'get_last_seed' }); }); $('#seed-input').addEventListener('input', function () { let v = parseInt(this.value); if (isNaN(v)) this.value = -1; else if (v < -1) this.value = -1; else if (v > 4294967295) this.value = 4294967295; }); // Generate $('#btn-generate').addEventListener('click', () => NAIGenerate.startGeneration()); document.addEventListener('keydown', e => { if ((e.ctrlKey || e.metaKey) && e.key === 'Enter' && NAIState.currentPage === 'generate') { NAIGenerate.startGeneration(); } }); $('#sampler-select').addEventListener('change', function () { let s = this.value; const schedule = $('#adv-scheduler'); if (s === 'ddim_v3') {schedule.value = 'native'; schedule.disabled = true;} else if (s === 'k_dpmpp_2m') {schedule.value = 'exponential'; schedule.disabled = false;} else {schedule.disabled = false;} }); // Init sub-modules NAIVibe.init(); NAIExtraInput.init(); NAICharacter.init(); NAIReference.init(); NAIAdvanced.init(); NAITimer.init(); NAIResizer.init(); NAIPaste.init(); NAICost.init(); NAIDirectorTools.init(); NAIPngInfo.init(); NAITagger.init(); NAIHistory.init(); NAICloud.init(); NAITagComplete.init(); NAISettings.init(); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();