Update script.js
Browse files
script.js
CHANGED
@@ -636,14 +636,87 @@ function showSingleLargePreviewUI(htmlContent, titleText, fullPromptText) {
|
|
636 |
}
|
637 |
|
638 |
function showInitialPreviewStateUI() {
|
639 |
-
previewGridWrapperEl.innerHTML = '
|
640 |
-
|
641 |
-
|
642 |
-
|
643 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
644 |
if (selectedCodeTitleH3El) selectedCodeTitleH3El.textContent = "Selected Code:";
|
645 |
selectedVariationGridIndex = -1;
|
646 |
-
// Reset subtitle state when going back to initial view
|
647 |
if (mainContentSubtitleH2El) {
|
648 |
mainContentSubtitleH2El.classList.remove('prompt-truncated');
|
649 |
delete mainContentSubtitleH2El.dataset.fullPrompt;
|
|
|
636 |
}
|
637 |
|
638 |
function showInitialPreviewStateUI() {
|
639 |
+
previewGridWrapperEl.innerHTML = ''; // Clear existing content
|
640 |
+
|
641 |
+
const initialViewContainer = document.createElement('div');
|
642 |
+
initialViewContainer.id = 'initial-view-content';
|
643 |
+
// Added 'initial-view-animate' for entry animation
|
644 |
+
initialViewContainer.className = 'flex flex-col items-center justify-center text-slate-300 text-lg p-8 space-y-6 h-full initial-view-animate';
|
645 |
+
|
646 |
+
// API Key Input Section
|
647 |
+
const apiKeySection = document.createElement('div');
|
648 |
+
apiKeySection.className = 'w-full max-w-md text-center'; // Centered text for this section
|
649 |
+
|
650 |
+
const apiKeyInput = document.createElement('input');
|
651 |
+
apiKeyInput.type = 'password';
|
652 |
+
apiKeyInput.id = 'initial-api-key-input';
|
653 |
+
apiKeyInput.className = 'futuristic-input w-full text-center'; // Added text-center
|
654 |
+
apiKeyInput.placeholder = 'Paste Novita.AI API Key here'; // Changed placeholder
|
655 |
+
if (apiKeyEl && apiKeyEl.value) {
|
656 |
+
apiKeyInput.value = apiKeyEl.value;
|
657 |
+
}
|
658 |
+
apiKeyInput.addEventListener('input', (e) => {
|
659 |
+
if (apiKeyEl) {
|
660 |
+
apiKeyEl.value = e.target.value;
|
661 |
+
}
|
662 |
+
});
|
663 |
+
apiKeySection.appendChild(apiKeyInput);
|
664 |
+
|
665 |
+
const apiKeyLink = document.createElement('p');
|
666 |
+
apiKeyLink.className = 'text-xs text-slate-400 mt-2'; // Adjusted margin
|
667 |
+
apiKeyLink.innerHTML = 'Get your API Key from <a href="https://novita.ai/" target="_blank" class="text-cyan-400 hover:text-cyan-300 underline">Novita.AI</a>.';
|
668 |
+
apiKeySection.appendChild(apiKeyLink);
|
669 |
+
initialViewContainer.appendChild(apiKeySection);
|
670 |
+
|
671 |
+
// Example Prompts Section
|
672 |
+
const examplePromptsSection = document.createElement('div');
|
673 |
+
examplePromptsSection.className = 'w-full max-w-lg text-center pt-4'; // Centered text for this section, added padding top
|
674 |
+
|
675 |
+
const examplePromptsContainer = document.createElement('div');
|
676 |
+
examplePromptsContainer.id = 'example-prompts-container';
|
677 |
+
examplePromptsContainer.className = 'flex flex-wrap justify-center gap-3';
|
678 |
+
|
679 |
+
const examplePrompts = [
|
680 |
+
"A modern landing page for a new meditation app",
|
681 |
+
"A portfolio website for a photographer",
|
682 |
+
"A simple to-do list application",
|
683 |
+
"An e-commerce product card for a smartwatch"
|
684 |
+
];
|
685 |
+
|
686 |
+
examplePrompts.forEach(promptText => {
|
687 |
+
const button = document.createElement('button');
|
688 |
+
button.className = 'example-prompt-button';
|
689 |
+
button.textContent = promptText;
|
690 |
+
button.addEventListener('click', () => {
|
691 |
+
if (modalUserPromptEl) {
|
692 |
+
modalUserPromptEl.value = promptText;
|
693 |
+
}
|
694 |
+
// Ensure API key from initial input is also considered if config one is empty
|
695 |
+
if (apiKeyEl && !apiKeyEl.value && apiKeyInput.value) {
|
696 |
+
apiKeyEl.value = apiKeyInput.value;
|
697 |
+
}
|
698 |
+
showPromptModal();
|
699 |
+
});
|
700 |
+
examplePromptsContainer.appendChild(button);
|
701 |
+
});
|
702 |
+
examplePromptsSection.appendChild(examplePromptsContainer);
|
703 |
+
initialViewContainer.appendChild(examplePromptsSection);
|
704 |
+
|
705 |
+
// Final instruction
|
706 |
+
const instructionText = document.createElement('p');
|
707 |
+
instructionText.className = 'text-sm text-slate-400 mt-6'; // Adjusted margin
|
708 |
+
instructionText.innerHTML = 'Once you have an API key and a prompt (either typed or from an example),<br>click the <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-pencil inline-block align-middle -mt-1"><path d="M17 3a2.85 2.83 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5Z"/><path d="m15 5 4 4"/></svg> icon or press Alt+P to open the prompt window and generate.';
|
709 |
+
initialViewContainer.appendChild(instructionText);
|
710 |
+
|
711 |
+
previewGridWrapperEl.appendChild(initialViewContainer);
|
712 |
+
|
713 |
+
previewGridWrapperEl.className = 'grid-mode initial-view-active'; // Keep grid-mode, add a new class for styling
|
714 |
+
if(perspectiveViewportEl) perspectiveViewportEl.style.perspective = 'none'; // No perspective for initial flat view
|
715 |
+
|
716 |
+
updateMainContentTitles("Welcome!", "Setup your API Key and enter a prompt to begin.");
|
717 |
+
if (codeOutputEl) codeOutputEl.innerHTML = '<code class="language-html">// Code for the selected evolution will appear here.</code>';
|
718 |
if (selectedCodeTitleH3El) selectedCodeTitleH3El.textContent = "Selected Code:";
|
719 |
selectedVariationGridIndex = -1;
|
|
|
720 |
if (mainContentSubtitleH2El) {
|
721 |
mainContentSubtitleH2El.classList.remove('prompt-truncated');
|
722 |
delete mainContentSubtitleH2El.dataset.fullPrompt;
|