✨ Primal Neomorph Q&A Studio

Genera preguntas y respuestas con imágenes

Escribe un tema, elige idioma y cantidad, y pulsa Generar. Obtendrás preguntas claras con respuestas concisas e imágenes relacionadas. Haz clic en la pregunta para ver la respuesta, y viceversa.

Resultados

📭
Aún no hay Q&A
Ingresa un tema y pulsa Generar para crear tu primer set.
\n\n`;\n\n const blob = new Blob([html], { type: \"text/html;charset=utf-8\" });\n const url = URL.createObjectURL(blob);\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = \"qa-export.html\";\n document.body.appendChild(a);\n a.click();\n a.remove();\n URL.revokeObjectURL(url);\n } catch (e) {\n setError(T.errExport);\n }\n };\n\n return (\n \n \n\n
\n
\n\n
\n
\n
\n

\n {T.title}\n

\n
\n \n {T.demo}\n \n \n {T.clear}\n \n \n {T.download}\n \n
\n
\n
\n
\n\n
\n
\n

\n {T.heading}\n

\n

{T.desc}

\n\n
\n
\n \n mergeForm({ topic: e.target.value })}\n placeholder=\"e.g., Photosynthesis / Computación cuántica\"\n className=\"w-full rounded-2xl px-5 py-4 text-gray-900 bg-white focus:ring-4 focus:ring-purple-300 outline-none transition-all\"\n />\n
\n
\n \n mergeForm({ language: e.target.value })}\n className=\"w-full rounded-2xl px-4 py-3 bg-white text-gray-900 font-medium focus:ring-4 focus:ring-purple-300 outline-none transition-all\"\n >\n \n \n \n \n \n
\n
\n \n mergeForm({ count: clampCount(e.target.value) })}\n className=\"w-full rounded-2xl px-4 py-3 bg-white text-gray-900 font-medium focus:ring-4 focus:ring-purple-300 outline-none transition-all\"\n />\n
\n
\n \n {isGenerating ? \"...\" : T.generateBtn(form.count || 15)}\n \n
\n
\n\n
\n
\n \n setSearch(e.target.value)}\n placeholder=\"Filter / Filtrar ...\"\n className=\"w-full rounded-2xl px-5 py-3 text-gray-900 bg-white focus:ring-4 focus:ring-purple-300 outline-none transition-all\"\n />\n
\n
\n setShowImageHistory((s) => !s)}\n className=\"w-full rounded-2xl px-6 py-3 font-semibold text-gray-900 bg-white shadow-lg hover:shadow-2xl hover:scale-105 transition-all duration-300\"\n >\n {showImageHistory ? T.hideHistory : T.showHistory}\n \n
\n
\n\n {error && (\n
\n ❗ {error}\n
\n )}\n\n {isGenerating && (\n
\n
\n
\n
{T.generating}
\n
\n
{T.livePreview}
\n
\n                {streamPreview || \"...\"}\n              
\n
\n {[...Array(6)].map((_, i) => (\n
\n
\n
\n
\n
\n ))}\n
\n
\n )}\n
\n\n
\n
\n

\n {T.results} {filteredQAs.length > 0 ? `(${filteredQAs.length})` : \"\"}\n

\n {qaDocs.length > 0 && {T.clickHint}}\n
\n\n {filteredQAs.length === 0 && !isGenerating ? (\n
\n
📭
\n
{T.emptyTitle}
\n
{T.emptyDesc}
\n
\n ) : (\n
\n {filteredQAs.map((doc, idx) => {\n const promptForDoc =\n doc.imagePrompt ||\n (imageDocs.find((x) => x._id === doc.imageId)?.prompt || `${doc.topic || \"\"} — ${doc.question || \"\"}`);\n const seedForDoc =\n typeof doc.imageSeed === \"number\"\n ? doc.imageSeed\n : (imageDocs.find((x) => x._id === doc.imageId)?.imageSeed ?? undefined);\n const isOpen = !!expanded[doc._id];\n\n return (\n toggleExpand(doc._id)}\n aria-label={`Q&A card ${idx + 1}`}\n >\n
\n \n
\n #{(idx + 1).toString().padStart(2, \"0\")}\n
\n
\n\n
\n
\n \n {doc.topic || (lang === \"en\" ? \"Topic\" : \"Tema\")}\n \n \n {new Date(doc.createdAt || Date.now()).toLocaleString()}\n \n
\n\n
e.stopPropagation()}>\n {!isOpen ? (\n
toggleExpand(doc._id)}>\n

{doc.question || \"…\"}

\n
{T.showAnswer}
\n
\n ) : (\n
toggleExpand(doc._id)}>\n
{T.answerLabel}
\n
\n

{doc.answer || \"…\"}

\n
\n
{T.hideAnswer}
\n
\n )}\n
\n\n
\n {\n e.stopPropagation();\n toggleExpand(doc._id);\n }}\n className=\"px-4 py-2 rounded-xl text-white font-semibold shadow-xl hover:shadow-2xl hover:scale-105 transition-all duration-300 bg-gradient-to-r from-purple-500 via-pink-500 to-orange-500\"\n >\n {isOpen ? T.hideAnswer : T.showAnswer}\n \n
{T.imageNote}
\n
\n
\n
\n );\n })}\n \n )}\n
\n\n {showImageHistory && (\n
\n

{T.historyTitle}

\n {imageDocs.length === 0 ? (\n
\n
🖼️
\n
{T.historyEmpty}
\n
{T.historyEmptyDesc}
\n
\n ) : (\n
    \n {imageDocs.slice(0, 12).map((img) => {\n const p = img.prompt || \"\";\n const seedForImg = typeof img.imageSeed === \"number\" ? img.imageSeed : undefined;\n return (\n
  • \n \n
    \n
    {img._id}
    \n
    {p}
    \n
    \n
  • \n );\n })}\n
\n )}\n
\n )}\n
\n\n \n \n );\n}"}) .then(() => mountVibe([V0], {"usrEnv":{},"viewerEnv":{"viewer":null,"access":"none","capabilities":{"read":true,"write":false,"delete":false},"pending":true}}));