sagadeck 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +305 -0
- package/SKILL.md +148 -0
- package/bin/sagadeck.js +511 -0
- package/docs/ANDAMENTO.md +1255 -0
- package/docs/EXPERIENCIAS.md +39 -0
- package/docs/PLANO-EXPERIENCIAS.md +39 -0
- package/docs/PLANO-TESTE-AULAS-TECNICAS.md +44 -0
- package/docs/PLANO-TESTE-DESINFORMACAO.md +38 -0
- package/docs/REFERENCIA.md +1131 -0
- package/package.json +59 -0
- package/src/adaptive-layouts.js +18 -0
- package/src/ai/art-direction.js +8 -0
- package/src/ai/commands.js +130 -0
- package/src/ai/context.js +245 -0
- package/src/ai/deck-ai.js +1135 -0
- package/src/ai/directions.js +74 -0
- package/src/ai/document-materials.js +49 -0
- package/src/ai/document-visuals.js +215 -0
- package/src/ai/evaluation.js +31 -0
- package/src/ai/ground.js +55 -0
- package/src/ai/llm.js +292 -0
- package/src/ai/quality.js +51 -0
- package/src/ai/relay.js +45 -0
- package/src/ai/staged-generation.js +24 -0
- package/src/ai/transform.js +858 -0
- package/src/ai/usage.js +17 -0
- package/src/ai/variety.js +80 -0
- package/src/ai/video-frames.js +24 -0
- package/src/ai/video-generation.js +126 -0
- package/src/ai/web-operation.js +31 -0
- package/src/algo-catalog.js +153 -0
- package/src/algo-trace.js +139 -0
- package/src/api-client.js +514 -0
- package/src/api-collections.js +14 -0
- package/src/api-demo.js +222 -0
- package/src/aspect.js +40 -0
- package/src/build.js +323 -0
- package/src/carousel.js +56 -0
- package/src/chrome.js +65 -0
- package/src/code-highlight.js +68 -0
- package/src/code-lab-browser.js +22 -0
- package/src/code-lab.js +3 -0
- package/src/code-language.js +52 -0
- package/src/csv.js +74 -0
- package/src/decision-lab.js +20 -0
- package/src/deck-file.js +119 -0
- package/src/diagram/napkin-examples.js +13 -0
- package/src/diagram/napkin.js +539 -0
- package/src/docx.js +128 -0
- package/src/dynamics/git-sim.js +200 -0
- package/src/dynamics/layouts.js +112 -0
- package/src/elements.js +554 -0
- package/src/experiences.js +124 -0
- package/src/exploration.js +31 -0
- package/src/export/browser.js +53 -0
- package/src/export/estudo.js +67 -0
- package/src/export/pptx.js +475 -0
- package/src/export/roteiro.js +40 -0
- package/src/export/shots.js +182 -0
- package/src/figures/charts.js +383 -0
- package/src/figures/diagrams.js +117 -0
- package/src/figures/icons.js +166 -0
- package/src/figures/material-pictos.js +20 -0
- package/src/figures/pictos.js +255 -0
- package/src/figures/points.js +106 -0
- package/src/figures/qr.js +29 -0
- package/src/figures/ufmap.js +48 -0
- package/src/fiscal/autofix.js +377 -0
- package/src/fiscal/normalize.js +115 -0
- package/src/graph-lab.js +24 -0
- package/src/hologram.js +30 -0
- package/src/identity.js +86 -0
- package/src/import/crop.js +59 -0
- package/src/import/index.js +132 -0
- package/src/import/legacy-word.js +42 -0
- package/src/import/merge.js +45 -0
- package/src/import/office.js +123 -0
- package/src/import/omml.js +69 -0
- package/src/import/pdf-render.js +56 -0
- package/src/import/pptx.js +701 -0
- package/src/import/xml.js +42 -0
- package/src/infographic.js +401 -0
- package/src/layouts.js +723 -0
- package/src/lessons.js +171 -0
- package/src/library.js +399 -0
- package/src/markup.js +116 -0
- package/src/master.js +214 -0
- package/src/mcp/server.js +371 -0
- package/src/meeting.js +42 -0
- package/src/motion.js +56 -0
- package/src/package.js +116 -0
- package/src/playground.js +19 -0
- package/src/portal-scene.js +20 -0
- package/src/preferences.js +61 -0
- package/src/protect.js +51 -0
- package/src/purpose.js +24 -0
- package/src/pytrace.js +1092 -0
- package/src/research/duckduckgo.js +73 -0
- package/src/research/research.js +202 -0
- package/src/research/svg-image.js +17 -0
- package/src/research/visuals.js +52 -0
- package/src/runtime/api-collection-ui.js +5 -0
- package/src/runtime/api-collections.js +28 -0
- package/src/runtime/api-core.js +530 -0
- package/src/runtime/api-ui.js +966 -0
- package/src/runtime/base.css +1774 -0
- package/src/runtime/calc.js +139 -0
- package/src/runtime/code-lab.js +371 -0
- package/src/runtime/decision-lab.js +49 -0
- package/src/runtime/diagram.js +341 -0
- package/src/runtime/fit.js +268 -0
- package/src/runtime/fonts/caveat.css +2 -0
- package/src/runtime/fonts/comic-neue.css +3 -0
- package/src/runtime/fonts/fredoka.css +2 -0
- package/src/runtime/fonts/index.json +10 -0
- package/src/runtime/fonts/inter.css +2 -0
- package/src/runtime/fonts/patrick-hand.css +2 -0
- package/src/runtime/fonts/plus-jakarta-sans.css +2 -0
- package/src/runtime/fonts/press-start-2p.css +2 -0
- package/src/runtime/fonts/vt323.css +2 -0
- package/src/runtime/formula.js +148 -0
- package/src/runtime/graph-lab.js +72 -0
- package/src/runtime/meeting.css +7 -0
- package/src/runtime/meeting.js +10 -0
- package/src/runtime/motion.js +15 -0
- package/src/runtime/playground.js +11 -0
- package/src/runtime/points.js +19 -0
- package/src/runtime/portal-scene.css +6 -0
- package/src/runtime/portal-scene.js +22 -0
- package/src/runtime/runtime.js +827 -0
- package/src/runtime/science.js +89 -0
- package/src/runtime/skins/aluminio.css +31 -0
- package/src/runtime/skins/arcade.css +25 -0
- package/src/runtime/skins/aurora.css +17 -0
- package/src/runtime/skins/bauhaus.css +19 -0
- package/src/runtime/skins/editorial.css +19 -0
- package/src/runtime/skins/jornal.css +17 -0
- package/src/runtime/skins/manual-noite.css +14 -0
- package/src/runtime/skins/manual.css +14 -0
- package/src/runtime/skins/noite.css +21 -0
- package/src/runtime/skins/oceano.css +17 -0
- package/src/runtime/skins/pop.css +23 -0
- package/src/runtime/skins/prata.css +18 -0
- package/src/runtime/skins/prisma.css +28 -0
- package/src/runtime/skins/rabisco.css +18 -0
- package/src/runtime/skins/relevo.css +33 -0
- package/src/runtime/skins/sinal.css +16 -0
- package/src/runtime/skins/terminal.css +23 -0
- package/src/runtime/vendor/KATEX-LICENSE.txt +21 -0
- package/src/runtime/vendor/MERMAID-LICENSE.txt +21 -0
- package/src/runtime/vendor/PLOTLY-LICENSE.txt +21 -0
- package/src/runtime/vendor/katex.css +1 -0
- package/src/runtime/vendor/mermaid.min.js +3636 -0
- package/src/runtime/vendor/plotly.min.js +3620 -0
- package/src/runtime/video-player.js +35 -0
- package/src/science.js +162 -0
- package/src/studio/ai-response.js +36 -0
- package/src/studio/api-routes.js +152 -0
- package/src/studio/assets/contexto/leia-me.md +12 -0
- package/src/studio/assets/contexto/vendas.csv +7 -0
- package/src/studio/assets/imagens/colecao-arquitetura.png +0 -0
- package/src/studio/assets/imagens/colecao-cor.png +0 -0
- package/src/studio/assets/imagens/colecao-equipe.png +0 -0
- package/src/studio/assets/imagens/lavanda-cover.jpg +0 -0
- package/src/studio/code-routes.js +32 -0
- package/src/studio/command-approval.js +48 -0
- package/src/studio/demo-decks.js +98 -0
- package/src/studio/direction-routes.js +29 -0
- package/src/studio/errors.js +65 -0
- package/src/studio/exploration-demo.js +17 -0
- package/src/studio/exporting.js +105 -0
- package/src/studio/generation-report.js +10 -0
- package/src/studio/instance.js +48 -0
- package/src/studio/layout-samples.js +152 -0
- package/src/studio/project.js +371 -0
- package/src/studio/public/api-collections.js +28 -0
- package/src/studio/public/app.js +5265 -0
- package/src/studio/public/art-preview.js +10 -0
- package/src/studio/public/calc-fields.js +11 -0
- package/src/studio/public/chat-progress.js +47 -0
- package/src/studio/public/developer-fields.js +22 -0
- package/src/studio/public/explorer.js +443 -0
- package/src/studio/public/history.js +58 -0
- package/src/studio/public/index.html +867 -0
- package/src/studio/public/inspector.js +270 -0
- package/src/studio/public/lab-fields.js +5 -0
- package/src/studio/public/library.css +275 -0
- package/src/studio/public/library.html +55 -0
- package/src/studio/public/library.js +471 -0
- package/src/studio/public/merge-decks.js +155 -0
- package/src/studio/public/review-ui.js +100 -0
- package/src/studio/public/screenshot-editor.js +140 -0
- package/src/studio/public/share-ui.js +72 -0
- package/src/studio/public/slide-clipboard.js +23 -0
- package/src/studio/public/slide-form.js +1263 -0
- package/src/studio/public/studio-awareness.js +154 -0
- package/src/studio/public/studio-next.css +303 -0
- package/src/studio/public/style.css +1262 -0
- package/src/studio/public/ui-icons.js +2 -0
- package/src/studio/public/viewers.js +372 -0
- package/src/studio/public/visual-editor.js +326 -0
- package/src/studio/public/workspace.js +18 -0
- package/src/studio/public-files.js +1 -0
- package/src/studio/request-helpers.js +41 -0
- package/src/studio/server.js +1583 -0
- package/src/studio/share-routes.js +146 -0
- package/src/studio/slide-copy-routes.js +26 -0
- package/src/studio/slide-copy.js +30 -0
- package/src/studio/snapshot.js +160 -0
- package/src/studio/style-routes.js +103 -0
- package/src/studio/template-collections.js +97 -0
- package/src/studio/versions.js +95 -0
- package/src/studio/video-download.js +29 -0
- package/src/studio/visual-keys.js +52 -0
- package/src/studio/workspaces.js +39 -0
- package/src/table.js +93 -0
- package/src/templates/scaffold.js +372 -0
- package/src/themes.js +604 -0
- package/src/trace-view.js +450 -0
- package/src/uid.js +19 -0
- package/src/video-player.js +40 -0
- package/src/visual-edits.js +99 -0
- package/src/ws.js +134 -0
- package/templates/cenario/Texto no cen/303/241rio.yaml" +171 -0
- package/templates/cenario/imagens/cidade.svg +30 -0
- package/templates/cenario/imagens/pessoa.svg +15 -0
- package/templates/cenario-e-ciencia.yaml +47 -0
- package/templates/ensaio-api.yaml +160 -0
- package/templates/exemplo-alegre.yaml +75 -0
- package/templates/exemplo-keynote.yaml +90 -0
- package/templates/exemplo-napkin.yaml +139 -0
- package/templates/exemplo.yaml +228 -0
|
@@ -0,0 +1,867 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="pt-BR">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>SagaDeck Studio</title>
|
|
7
|
+
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 32 32%22%3E%3Crect width=%2232%22 height=%2232%22 rx=%227%22 fill=%22%23c43e1c%22/%3E%3Cpath d=%22M12 9l12 7-12 7z%22 fill=%22white%22/%3E%3C/svg%3E">
|
|
8
|
+
<link rel="stylesheet" href="fonts.css">
|
|
9
|
+
<link rel="stylesheet" href="style.css">
|
|
10
|
+
<link rel="stylesheet" href="studio-next.css">
|
|
11
|
+
<script>
|
|
12
|
+
// Tema da interface antes do primeiro desenho (sem piscar branco no escuro).
|
|
13
|
+
// Preferência: "system" (padrão), "light" ou "dark" — trocada em Exibir › Preferências.
|
|
14
|
+
(function () {
|
|
15
|
+
var pref = "system";
|
|
16
|
+
try { pref = JSON.parse(localStorage.getItem("sagadeck.appTheme")) || "system"; } catch (e) {}
|
|
17
|
+
var dark = pref === "dark" || (pref === "system" && window.matchMedia("(prefers-color-scheme: dark)").matches);
|
|
18
|
+
document.documentElement.dataset.theme = dark ? "dark" : "light";
|
|
19
|
+
})();
|
|
20
|
+
</script>
|
|
21
|
+
<link rel="stylesheet" href="katex.css">
|
|
22
|
+
</head>
|
|
23
|
+
<body class="studio-next">
|
|
24
|
+
<!-- ======================================================================
|
|
25
|
+
BARRA DE TÍTULO: documento, estado do salvamento, busca, Apresentar
|
|
26
|
+
====================================================================== -->
|
|
27
|
+
<header id="titlebar" class="titlebar">
|
|
28
|
+
<a href="biblioteca" class="app-mark app-mark-link" id="btn-library" title="Biblioteca de apresentações" aria-label="SagaDeck · Voltar à biblioteca"><svg class="saga-mark" viewBox="0 0 32 32" aria-hidden="true"><rect x="3.5" y="4.5" width="19" height="14" rx="3" fill="none" stroke="currentColor" stroke-width="2.2" opacity=".55"/><path fill="currentColor" fill-rule="evenodd" d="M12 11h13a3 3 0 0 1 3 3v8a3 3 0 0 1-3 3H12a3 3 0 0 1-3-3v-8a3 3 0 0 1 3-3zM16.5 14.8v6.4l5.3-3.2z"/></svg></a>
|
|
29
|
+
<input type="text" id="deck-title-input" class="doc-title" value="" placeholder="Apresentação sem título" aria-label="Título da apresentação">
|
|
30
|
+
<span id="save-status" class="save-status" title=""></span>
|
|
31
|
+
<span class="undo-redo">
|
|
32
|
+
<button id="btn-undo" type="button" class="icon-btn" disabled aria-label="Desfazer" title="Nada para desfazer"><i class="ic" data-ic="undo-2"></i></button>
|
|
33
|
+
<button id="btn-redo" type="button" class="icon-btn" disabled aria-label="Refazer" title="Nada para refazer"><i class="ic" data-ic="redo-2"></i></button>
|
|
34
|
+
<button id="btn-versions" type="button" class="icon-btn" aria-label="Versões" title="Versões: comparar lado a lado e restaurar"><i class="ic" data-ic="git-compare"></i></button>
|
|
35
|
+
</span>
|
|
36
|
+
|
|
37
|
+
<button id="btn-spotlight" class="search-box" title="Buscar comandos (Ctrl+K)">
|
|
38
|
+
<i class="ic" data-ic="search"></i>
|
|
39
|
+
<span>Buscar comandos</span>
|
|
40
|
+
<kbd>Ctrl K</kbd>
|
|
41
|
+
</button>
|
|
42
|
+
|
|
43
|
+
<div class="split-button" id="present-split">
|
|
44
|
+
<button id="btn-present" class="btn btn-primary" title="Apresentar a partir deste slide (F5)">
|
|
45
|
+
<i class="ic" data-ic="play"></i><span class="lbl">Apresentar</span>
|
|
46
|
+
</button>
|
|
47
|
+
<button id="btn-present-menu" class="btn btn-primary btn-caret" aria-label="Mais opções de apresentação"><i class="ic" data-ic="chevron-down"></i></button>
|
|
48
|
+
<div id="present-menu" class="menu" role="menu">
|
|
49
|
+
<button class="menu-item" id="present-from-start"><i class="ic" data-ic="play"></i>Do início</button>
|
|
50
|
+
<button class="menu-item" id="present-from-current"><i class="ic" data-ic="play"></i>Deste slide</button>
|
|
51
|
+
<a class="menu-item" href="preview" target="_blank" rel="noopener"><i class="ic" data-ic="external-link"></i>Em uma nova aba</a>
|
|
52
|
+
<div class="menu-sep" role="separator"></div>
|
|
53
|
+
<div class="menu-head">Animações da apresentação</div>
|
|
54
|
+
<button class="menu-item motion-opt" role="menuitemradio" data-motion="none" aria-checked="false"><i class="ic" data-ic="check"></i><span><b>Sem animação</b><small>Cada clique mostra o próximo item na hora</small></span></button>
|
|
55
|
+
<button class="menu-item motion-opt" role="menuitemradio" data-motion="subtle" aria-checked="true"><i class="ic" data-ic="check"></i><span><b>Suaves</b><small>Entradas e transições discretas (padrão)</small></span></button>
|
|
56
|
+
<button class="menu-item motion-opt" role="menuitemradio" data-motion="expressive" aria-checked="false"><i class="ic" data-ic="check"></i><span><b>Expressivas</b><small>Movimento de palco, para abrir e fechar com impacto</small></span></button>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
<button id="btn-prefs" class="icon-btn theme-toggle" type="button" title="Preferências (tamanhos mínimos, editor, IA…)" aria-label="Preferências"><i class="ic" data-ic="settings"></i></button>
|
|
60
|
+
<!-- mesmo lugar da biblioteca: canto direito do topo -->
|
|
61
|
+
<button id="btn-app-theme" class="icon-btn theme-toggle" type="button" title="Alternar tema claro e escuro" aria-label="Alternar tema claro e escuro"><i class="ic" data-ic="sun-moon"></i></button>
|
|
62
|
+
</header>
|
|
63
|
+
|
|
64
|
+
<!-- ======================================================================
|
|
65
|
+
FAIXA DE OPÇÕES (RIBBON): abas por tarefa, comandos agrupados
|
|
66
|
+
====================================================================== -->
|
|
67
|
+
<nav id="ribbon-tabs" class="ribbon-tabs" role="tablist" aria-label="Faixa de opções">
|
|
68
|
+
<div class="file-menu-wrap">
|
|
69
|
+
<button id="btn-export-menu" class="ribbon-tab file-tab" aria-haspopup="menu">Arquivo</button>
|
|
70
|
+
<div id="export-dropdown" class="menu" role="menu">
|
|
71
|
+
<button class="menu-item" id="menu-open-local"><i class="ic" data-ic="folder-open"></i>Abrir do computador…</button>
|
|
72
|
+
<button class="menu-item" id="menu-open-server"><i class="ic" data-ic="folder-input"></i>Abrir por caminho…</button>
|
|
73
|
+
<div class="menu-sep"></div>
|
|
74
|
+
<button class="menu-item" id="action-save-yaml"><i class="ic" data-ic="save"></i>Salvar</button>
|
|
75
|
+
<button class="menu-item" id="export-sagadeck" title="A apresentação inteira num arquivo: YAML + imagens, CSS e widgets"><i class="ic" data-ic="download"></i>Baixar apresentação (.sagadeck)</button>
|
|
76
|
+
<button class="menu-item" id="export-all" data-export="tudo" title="Um .zip com o PowerPoint (com as notas), o PDF e o roteiro do apresentador: tudo o que se leva para apresentar"><i class="ic" data-ic="download"></i>Baixar tudo (PowerPoint, PDF e roteiro)</button>
|
|
77
|
+
<button class="menu-item" id="export-pptx" data-export="pptx" title="PowerPoint editável: textos nativos, animações dos cliques e notas do apresentador"><i class="ic" data-ic="file-text"></i>Baixar PowerPoint (.pptx)</button>
|
|
78
|
+
<button class="menu-item" id="export-pptx-clean" data-export="pptx" data-notas="0" title="Para mandar a alguém: o mesmo PowerPoint, sem as notas do apresentador"><i class="ic" data-ic="file-text"></i>Baixar PowerPoint sem as notas</button>
|
|
79
|
+
<button class="menu-item" id="export-pdf" data-export="pdf" title="Um slide por página, como a plateia vê (tudo revelado)"><i class="ic" data-ic="file-text"></i>Baixar PDF</button>
|
|
80
|
+
<button class="menu-item" id="export-estudo" data-export="estudo" title="Para o aluno: cada slide inteiro e o texto de consulta, sem as notas do apresentador"><i class="ic" data-ic="graduation-cap"></i>Baixar material de estudo (PDF)</button>
|
|
81
|
+
<button class="menu-item" id="export-estudo-html" data-export="estudo-html" title="O material de estudo num arquivo HTML só (abre em qualquer navegador, também no celular)"><i class="ic" data-ic="graduation-cap"></i>Baixar material de estudo (HTML)</button>
|
|
82
|
+
<button class="menu-item" id="export-roteiro" data-export="roteiro" title="Para o apresentador: miniatura de cada slide com as notas e o tempo planejado"><i class="ic" data-ic="sticky-note"></i>Baixar roteiro (PDF)</button>
|
|
83
|
+
<button class="menu-item" id="export-html" title="Um arquivo só, com tudo embutido, para apresentar em qualquer navegador (não serve para editar)"><i class="ic" data-ic="file-code"></i>Baixar para apresentar (HTML)</button>
|
|
84
|
+
<div class="menu-sep"></div>
|
|
85
|
+
<button class="menu-item" id="menu-share" title="Um link para alguém ver esta apresentação, sem editar e sem ver a sua biblioteca"><i class="ic" data-ic="share-2"></i>Compartilhar link (só leitura)…</button>
|
|
86
|
+
</div>
|
|
87
|
+
</div>
|
|
88
|
+
<button class="ribbon-tab active" role="tab" data-tab="inicio" aria-selected="true">Início</button>
|
|
89
|
+
<button class="ribbon-tab" role="tab" data-tab="inserir">Inserir</button>
|
|
90
|
+
<button class="ribbon-tab" role="tab" data-tab="design">Design</button>
|
|
91
|
+
<button class="ribbon-tab" role="tab" data-tab="ia">IA</button>
|
|
92
|
+
<button class="ribbon-tab" role="tab" data-tab="revisar">Revisar</button>
|
|
93
|
+
<button class="ribbon-tab" role="tab" data-tab="exibir">Exibir</button>
|
|
94
|
+
<button class="ribbon-tab" role="tab" data-tab="avancado">Avançado</button>
|
|
95
|
+
</nav>
|
|
96
|
+
|
|
97
|
+
<div id="ribbon" class="ribbon">
|
|
98
|
+
<!-- INÍCIO -->
|
|
99
|
+
<div class="ribbon-panel active" data-panel="inicio">
|
|
100
|
+
<div class="rgroup">
|
|
101
|
+
<div class="rgroup-body">
|
|
102
|
+
<div class="rsplit" role="group" aria-label="Novo slide">
|
|
103
|
+
<button id="btn-add-slide" class="rsplit-main" title="Novo slide em branco depois deste" aria-label="Novo slide em branco"><i class="ic" data-ic="plus"></i></button>
|
|
104
|
+
<button id="btn-scenes" class="rsplit-more" aria-haspopup="dialog" title="Escolher o tipo do novo slide: código, gráfico, diagrama, status semanal, quiz…"><span>Novo slide</span><i class="ic caret" data-ic="chevron-down"></i></button>
|
|
105
|
+
</div>
|
|
106
|
+
<div class="rstack">
|
|
107
|
+
<button id="btn-copy-slide" class="rbtn" title="Copiar slide para outra apresentação (Ctrl+C na lista)"><i class="ic" data-ic="copy"></i><span>Copiar</span></button>
|
|
108
|
+
<button id="btn-paste-slide" class="rbtn" title="Colar slide copiado (Ctrl+V na lista)"><i class="ic" data-ic="clipboard-paste"></i><span>Colar</span></button>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="rstack">
|
|
111
|
+
<button id="btn-dup-slide" class="rbtn" title="Duplicar este slide"><i class="ic" data-ic="copy"></i><span>Duplicar</span></button>
|
|
112
|
+
<button id="btn-del-slide" class="rbtn" title="Excluir este slide"><i class="ic" data-ic="trash-2"></i><span>Excluir</span></button>
|
|
113
|
+
</div>
|
|
114
|
+
</div>
|
|
115
|
+
<div class="rgroup-label">Slides</div>
|
|
116
|
+
</div>
|
|
117
|
+
<div class="rgroup">
|
|
118
|
+
<div class="rgroup-body">
|
|
119
|
+
<div class="popover-wrap">
|
|
120
|
+
<button id="btn-layout-gallery" class="rbtn rbtn-lg" aria-haspopup="true" title="Trocar o formato deste slide (o conteúdo vai junto). Para um slide novo, use Escolher tipo"><i class="ic" data-ic="layout-template"></i><span>Layout <i class="ic caret" data-ic="chevron-down"></i></span></button>
|
|
121
|
+
<div id="layout-popover" class="popover layout-popover">
|
|
122
|
+
<div class="popover-title">Alterar o slide atual</div><p class="layout-help">Miniaturas ilustram o formato. Seu conteúdo é reaproveitado.</p>
|
|
123
|
+
<div id="layout-picker-grid" class="layout-grid"></div>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
<div class="rgroup-label">Layout</div>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="rgroup" data-adv>
|
|
130
|
+
<div class="rgroup-body rgroup-fields">
|
|
131
|
+
<div class="rfield"><span>Tom</span>
|
|
132
|
+
<button id="btn-tone" class="vpick-btn" type="button" aria-haspopup="true" title="Cores deste slide (com prévia)"><span class="vpick-sw"></span><span class="vpick-name">Claro</span><i class="ic caret" data-ic="chevron-down"></i></button>
|
|
133
|
+
<select id="tone-select" class="rselect hidden" aria-hidden="true" tabindex="-1">
|
|
134
|
+
<option value="light">Claro</option>
|
|
135
|
+
<option value="dark">Escuro</option>
|
|
136
|
+
<option value="accent">Destaque</option>
|
|
137
|
+
<option value="alert">Alerta</option>
|
|
138
|
+
</select>
|
|
139
|
+
</div>
|
|
140
|
+
<div class="rfield"><span>Fundo</span>
|
|
141
|
+
<button id="btn-deco" class="vpick-btn" type="button" aria-haspopup="true" title="Textura de fundo deste slide (com prévia)"><span class="vpick-sw"></span><span class="vpick-name">Liso</span><i class="ic caret" data-ic="chevron-down"></i></button>
|
|
142
|
+
<select id="deco-select" class="rselect hidden" aria-hidden="true" tabindex="-1">
|
|
143
|
+
<option value="none">Liso</option>
|
|
144
|
+
<option value="grid">Grade</option>
|
|
145
|
+
<option value="grain">Granulado</option>
|
|
146
|
+
<option value="dots">Pontilhado</option>
|
|
147
|
+
<option value="sketch">Caderno</option>
|
|
148
|
+
<option value="glow">Brilho</option>
|
|
149
|
+
<option value="aurora">Aurora</option>
|
|
150
|
+
<option value="silver">Prata</option>
|
|
151
|
+
</select>
|
|
152
|
+
</div>
|
|
153
|
+
<div id="variant-popover" class="popover variant-popover">
|
|
154
|
+
<div class="popover-title"></div>
|
|
155
|
+
<div class="variant-grid"></div>
|
|
156
|
+
</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="rgroup-label">Aparência</div>
|
|
159
|
+
</div>
|
|
160
|
+
<div class="rgroup" data-adv>
|
|
161
|
+
<div class="rgroup-body">
|
|
162
|
+
<button id="btn-open-yaml" class="rbtn rbtn-lg" title="Abrir um arquivo .yaml do computador"><i class="ic" data-ic="folder-open"></i><span>Abrir</span></button>
|
|
163
|
+
</div>
|
|
164
|
+
<div class="rgroup-label">Arquivo</div>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
|
|
168
|
+
<!-- INSERIR -->
|
|
169
|
+
<div class="ribbon-panel" data-panel="inserir">
|
|
170
|
+
<!-- Inserir = o que entra no slide atual. Slide novo (de qualquer tipo) sai de Início › Novo slide. -->
|
|
171
|
+
<div class="rgroup">
|
|
172
|
+
<div class="rgroup-body">
|
|
173
|
+
<div id="visual-tools" class="rgroup-body visual-tools" aria-label="Inserir e ajustar objetos"></div>
|
|
174
|
+
<button id="btn-insert-icon" class="rbtn rbtn-lg" title="Biblioteca com 2.100+ ícones"><i class="ic" data-ic="shapes"></i><span>Ícone</span></button>
|
|
175
|
+
</div>
|
|
176
|
+
<div class="rgroup-label">Neste slide</div>
|
|
177
|
+
</div>
|
|
178
|
+
<div class="rgroup">
|
|
179
|
+
<div class="rgroup-body">
|
|
180
|
+
<button id="btn-napkin" class="rbtn rbtn-lg" title="Cole um texto e vire um slide visual (etapas, números, comparação…)"><i class="ic" data-ic="workflow"></i><span>Diagrama de texto</span></button>
|
|
181
|
+
</div>
|
|
182
|
+
<div class="rgroup-label">A partir de texto</div>
|
|
183
|
+
</div>
|
|
184
|
+
<div class="rgroup" data-adv>
|
|
185
|
+
<div class="rgroup-body">
|
|
186
|
+
<button id="btn-api-slide" class="rbtn rbtn-lg" title="Slide que executa uma requisição de verdade (tipo Postman), com o código curl e Python ao lado. Exemplos prontos: biblioteca, Nova, Exemplo: aula de APIs"><i class="ic" data-ic="plug-zap"></i><span>Slide de API</span></button>
|
|
187
|
+
<button id="btn-api-envs" class="rbtn rbtn-lg" title="Endereços, tokens e segredos dos slides de API (ficam na sua máquina, nunca no deck)"><i class="ic" data-ic="server-cog"></i><span>Ambientes</span></button>
|
|
188
|
+
<button id="btn-api-vars-studio" class="rbtn rbtn-lg" title="Abrir o painel de variáveis do deck"><i class="ic" data-ic="braces"></i><span>Variáveis</span></button>
|
|
189
|
+
</div>
|
|
190
|
+
<div class="rgroup-label">API ao vivo</div>
|
|
191
|
+
</div>
|
|
192
|
+
</div>
|
|
193
|
+
|
|
194
|
+
<!-- AVANÇADO -->
|
|
195
|
+
<div class="ribbon-panel" data-panel="avancado">
|
|
196
|
+
<div class="rgroup">
|
|
197
|
+
<div class="rgroup-body advanced-density">
|
|
198
|
+
<label class="rfield"><span>Densidade</span>
|
|
199
|
+
<select id="advanced-density-select" class="rselect" aria-label="Densidade deste slide" title="Compacta o conteúdo sem apagar texto">
|
|
200
|
+
<option value="">Padrão</option>
|
|
201
|
+
<option value="compact">Compacta</option>
|
|
202
|
+
<option value="dense">Mais conteúdo</option>
|
|
203
|
+
</select>
|
|
204
|
+
</label>
|
|
205
|
+
</div>
|
|
206
|
+
<div class="rgroup-label">Texto denso</div>
|
|
207
|
+
</div>
|
|
208
|
+
<div class="rgroup">
|
|
209
|
+
<div class="rgroup-body rgroup-fields advanced-guide">
|
|
210
|
+
<span>Para apresentar: prefira poucos pontos.</span>
|
|
211
|
+
<span>Para consultar: Novo slide › Página de consulta.</span>
|
|
212
|
+
<a class="rbtn" href="biblioteca?galeria=demo" target="_blank" rel="noopener" title="Abre a vitrine de modelos: os demos abrem em prévia, sem criar arquivo">Abrir demos completos</a>
|
|
213
|
+
</div>
|
|
214
|
+
<div class="rgroup-label">Quando usar</div>
|
|
215
|
+
</div>
|
|
216
|
+
</div>
|
|
217
|
+
|
|
218
|
+
<!-- DESIGN -->
|
|
219
|
+
<div class="ribbon-panel" data-panel="design">
|
|
220
|
+
<div class="rgroup">
|
|
221
|
+
<div class="rgroup-body rgroup-fields">
|
|
222
|
+
<label class="rfield"><span>Destaque</span>
|
|
223
|
+
<select id="mark-style-select" class="rselect" title="Como o ==destaque== aparece em toda a apresentação">
|
|
224
|
+
<option value="marca-texto">Marca-texto</option>
|
|
225
|
+
<option value="sublinhado">Sublinhado</option>
|
|
226
|
+
<option value="cor">Só cor</option>
|
|
227
|
+
<option value="negrito">Negrito colorido</option>
|
|
228
|
+
<option value="nenhum">Sem destaque</option>
|
|
229
|
+
</select>
|
|
230
|
+
</label>
|
|
231
|
+
</div>
|
|
232
|
+
<div class="rgroup-label">Texto</div>
|
|
233
|
+
</div>
|
|
234
|
+
<div class="rgroup">
|
|
235
|
+
<div class="rgroup-body rgroup-fields">
|
|
236
|
+
<div class="rrow">
|
|
237
|
+
<label class="rfield"><span>Fontes</span>
|
|
238
|
+
<select id="identity-select" class="rselect" title="Fontes (e paleta) da sua empresa, configuradas só neste computador">
|
|
239
|
+
<option value="">Do tema</option>
|
|
240
|
+
</select>
|
|
241
|
+
</label>
|
|
242
|
+
<button id="btn-identity-setup" class="rbtn rbtn-icon" title="Configurar as fontes da empresa (arquivo identidades.yaml, só neste computador)" aria-label="Configurar as fontes da empresa"><i class="ic" data-ic="sliders-horizontal"></i></button>
|
|
243
|
+
<button id="btn-direction-save" class="rbtn rbtn-icon" title="Salvar a capa atual como direção aprovada (a IA usa ao ouvir o nome)" aria-label="Salvar a capa atual como direção"><i class="ic" data-ic="bookmark-plus"></i></button>
|
|
244
|
+
</div>
|
|
245
|
+
<span id="identity-note" class="rnote" hidden></span>
|
|
246
|
+
<span id="direction-note" class="rnote" hidden></span>
|
|
247
|
+
<label class="rfield"><span>Direção aprovada</span>
|
|
248
|
+
<select id="direction-select" class="rselect" title="Capas que você aprovou, salvas como receita para a IA usar">
|
|
249
|
+
<option value="">Nenhuma</option>
|
|
250
|
+
</select>
|
|
251
|
+
</label>
|
|
252
|
+
</div>
|
|
253
|
+
<div class="rgroup-label">Identidade</div>
|
|
254
|
+
</div>
|
|
255
|
+
<div class="rgroup">
|
|
256
|
+
<div class="rgroup-body">
|
|
257
|
+
<button id="btn-header-footer" class="rbtn rbtn-lg" title="Autor, evento, data, número da página… em todos os slides"><i class="ic" data-ic="panel-bottom"></i><span>Cabeçalho e rodapé</span></button>
|
|
258
|
+
<button id="btn-theme-pair" class="rbtn rbtn-lg" hidden title="Troca para a versão clara ou escura do mesmo tema (mesmo arranjo)"><i class="ic" data-ic="sun-moon"></i><span>Versão escura</span></button>
|
|
259
|
+
</div>
|
|
260
|
+
<div class="rgroup-label">Páginas</div>
|
|
261
|
+
</div>
|
|
262
|
+
<div class="rgroup">
|
|
263
|
+
<div class="rgroup-body">
|
|
264
|
+
<button id="btn-styles" class="rbtn rbtn-lg" title="O visual de uma apresentação (moldura com logos, cores, fontes, título) para usar em outras: aplicar um estilo seu ou salvar o desta"><i class="ic" data-ic="swatch-book"></i><span>Estilo</span></button>
|
|
265
|
+
</div>
|
|
266
|
+
<div class="rgroup-label">Organização</div>
|
|
267
|
+
</div>
|
|
268
|
+
<div class="rgroup rgroup-gallery">
|
|
269
|
+
<div class="rgroup-body">
|
|
270
|
+
<div class="look-strip">
|
|
271
|
+
<div id="theme-gallery" class="theme-gallery" role="listbox" aria-label="Temas"></div>
|
|
272
|
+
<div class="look-ctrl">
|
|
273
|
+
<button type="button" class="look-nav" data-dir="-1" aria-label="Temas anteriores" title="Temas anteriores"><i class="ic" data-ic="chevron-left"></i></button>
|
|
274
|
+
<button type="button" class="look-nav" data-dir="1" aria-label="Mais temas" title="Mais temas"><i class="ic" data-ic="chevron-right"></i></button>
|
|
275
|
+
<button type="button" class="look-all" aria-expanded="false" aria-label="Ver todos os temas" title="Ver todos os temas"><i class="ic" data-ic="layout-grid"></i></button>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
<select id="theme-select" class="visually-hidden" tabindex="-1" aria-hidden="true"></select>
|
|
279
|
+
</div>
|
|
280
|
+
<div class="rgroup-label">Temas</div>
|
|
281
|
+
</div>
|
|
282
|
+
<div class="rgroup rgroup-gallery">
|
|
283
|
+
<div class="rgroup-body">
|
|
284
|
+
<div class="look-strip">
|
|
285
|
+
<div id="palette-gallery" class="theme-gallery palette-gallery" role="listbox" aria-label="Paletas"></div>
|
|
286
|
+
<div class="look-ctrl">
|
|
287
|
+
<button type="button" class="look-nav" data-dir="-1" aria-label="Paletas anteriores" title="Paletas anteriores"><i class="ic" data-ic="chevron-left"></i></button>
|
|
288
|
+
<button type="button" class="look-nav" data-dir="1" aria-label="Mais paletas" title="Mais paletas"><i class="ic" data-ic="chevron-right"></i></button>
|
|
289
|
+
<button type="button" class="look-all" aria-expanded="false" aria-label="Ver todas as paletas" title="Ver todas as paletas"><i class="ic" data-ic="layout-grid"></i></button>
|
|
290
|
+
</div>
|
|
291
|
+
</div>
|
|
292
|
+
</div>
|
|
293
|
+
<div class="rgroup-label">Paletas</div>
|
|
294
|
+
</div>
|
|
295
|
+
</div>
|
|
296
|
+
<!-- botão direito num tema ou paleta: onde aplicar -->
|
|
297
|
+
<div id="look-menu" class="look-menu hidden" role="menu">
|
|
298
|
+
<button type="button" role="menuitem" data-scope="all"><i class="ic" data-ic="layers"></i><span>Aplicar a todos os slides</span></button>
|
|
299
|
+
<button type="button" role="menuitem" data-scope="slide"><i class="ic" data-ic="square"></i><span>Só neste slide</span></button>
|
|
300
|
+
<button type="button" role="menuitem" data-scope="reset"><i class="ic" data-ic="rotate-ccw"></i><span>Este slide volta ao da apresentação</span></button>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<!-- IA -->
|
|
304
|
+
<div class="ribbon-panel" data-panel="ia">
|
|
305
|
+
<div class="rgroup">
|
|
306
|
+
<div class="rgroup-body">
|
|
307
|
+
<button id="btn-ai-deck" class="rbtn rbtn-lg" title="Gerar uma apresentação inteira a partir de um briefing"><i class="ic" data-ic="wand-sparkles"></i><span>Deck com IA</span></button>
|
|
308
|
+
<button id="btn-toggle-chat" class="rbtn rbtn-lg" title="Abrir o assistente para pedir mudanças"><i class="ic" data-ic="bot"></i><span>Assistente</span></button>
|
|
309
|
+
<button id="btn-ai-reference" class="rbtn rbtn-lg" title="A IA reescreve este deck como material de consulta: explicação no slide, código completo, sem enchimento de palestra. Usa tokens."><i class="ic" data-ic="file-text"></i><span>Material de consulta</span></button>
|
|
310
|
+
</div>
|
|
311
|
+
<div class="rgroup-label">Criar e editar</div>
|
|
312
|
+
</div>
|
|
313
|
+
</div>
|
|
314
|
+
|
|
315
|
+
<!-- REVISAR -->
|
|
316
|
+
<div class="ribbon-panel" data-panel="revisar">
|
|
317
|
+
<div class="rgroup">
|
|
318
|
+
<div class="rgroup-body">
|
|
319
|
+
<button id="btn-autofix" class="rbtn rbtn-lg" title="Arruma este slide: sobreposições, margens, título comprido e texto que não coube (dá para desfazer)">
|
|
320
|
+
<i class="ic" data-ic="wand"></i><span>Arrumar layout</span><b id="fiscal-badge" class="fiscal-badge clean">0</b>
|
|
321
|
+
</button>
|
|
322
|
+
<button id="btn-review-changes" class="rbtn rbtn-lg" title="O que mudou em relação ao original: aceitar ou desfazer slide a slide"><i class="ic" data-ic="git-compare"></i><span>Mudanças</span><b id="review-badge" class="fiscal-badge clean">0</b></button>
|
|
323
|
+
<button id="btn-ai-review" class="rbtn rbtn-lg" title="A IA recebe uma imagem do slide, avalia a composição e aplica melhorias. Usa tokens."><i class="ic" data-ic="scan-eye"></i><span>Revisar com IA</span></button>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="rgroup-label">Layout</div>
|
|
326
|
+
</div>
|
|
327
|
+
<div class="rgroup" data-adv>
|
|
328
|
+
<div class="rgroup-body">
|
|
329
|
+
<button id="btn-squint" class="rbtn rbtn-lg" title="Desfoca o slide para testar se dá para ler do fundo da sala"><i class="ic" data-ic="scan-eye"></i><span>Última fileira</span></button>
|
|
330
|
+
<button id="btn-heatmap" class="rbtn rbtn-lg" title="Onde o olho bate primeiro"><i class="ic" data-ic="flame"></i><span>Mapa de atenção</span></button>
|
|
331
|
+
</div>
|
|
332
|
+
<div class="rgroup-label">Legibilidade</div>
|
|
333
|
+
</div>
|
|
334
|
+
<div class="rgroup" data-adv>
|
|
335
|
+
<div class="rgroup-body">
|
|
336
|
+
<div class="popover-wrap">
|
|
337
|
+
<button id="btn-story-arc" class="rbtn rbtn-lg" aria-haspopup="true" title="Ritmo da apresentação"><i class="ic" data-ic="activity"></i><span>Ritmo <i class="ic caret" data-ic="chevron-down"></i></span></button>
|
|
338
|
+
<div id="story-arc-popover" class="popover arc-popover">
|
|
339
|
+
<div id="story-arc-widget" class="story-arc-widget">
|
|
340
|
+
<div class="story-arc-header">
|
|
341
|
+
<span class="popover-title">Ritmo narrativo</span>
|
|
342
|
+
<span id="arc-status-badge" class="arc-badge ok">Dinâmico</span>
|
|
343
|
+
</div>
|
|
344
|
+
<svg id="story-arc-svg" class="story-arc-svg" viewBox="0 0 200 36" preserveAspectRatio="none">
|
|
345
|
+
<path id="story-arc-path" d="" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"></path>
|
|
346
|
+
<circle id="story-arc-dot" cx="0" cy="18" r="4.5"></circle>
|
|
347
|
+
</svg>
|
|
348
|
+
<div id="arc-recommendation" class="arc-recommendation"></div>
|
|
349
|
+
<ul id="arc-problems" class="arc-problems"></ul>
|
|
350
|
+
<button id="btn-vary-deck" class="btn btn-secondary btn-sm hidden" type="button" title="Pede ao assistente para variar layouts, ritmo e tom sem perder conteúdo">Deixar menos repetitivo</button>
|
|
351
|
+
</div>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
</div>
|
|
355
|
+
<div class="rgroup-label">Narrativa</div>
|
|
356
|
+
</div>
|
|
357
|
+
</div>
|
|
358
|
+
|
|
359
|
+
<!-- EXIBIR -->
|
|
360
|
+
<div class="ribbon-panel" data-panel="exibir">
|
|
361
|
+
<div class="rgroup" data-adv>
|
|
362
|
+
<div class="rgroup-body rgroup-fields">
|
|
363
|
+
<label class="rcheck"><input type="checkbox" id="chk-guides" checked> Margens seguras</label>
|
|
364
|
+
<label class="rcheck"><input type="checkbox" id="chk-inspect-overlay" checked> Destacar problemas</label>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="rgroup-label">Guias</div>
|
|
367
|
+
</div>
|
|
368
|
+
<div class="rgroup">
|
|
369
|
+
<div class="rgroup-body">
|
|
370
|
+
<button id="btn-notes-toggle" class="rbtn rbtn-lg" title="Mostrar ou ocultar as anotações do apresentador"><i class="ic" data-ic="sticky-note"></i><span>Anotações</span></button>
|
|
371
|
+
<button id="btn-pane-props" class="rbtn rbtn-lg" title="Painel com os campos do slide"><i class="ic" data-ic="sliders-horizontal"></i><span>Formatar</span></button>
|
|
372
|
+
<button id="btn-yaml-drawer" data-adv class="rbtn rbtn-lg" title="Editar o YAML da apresentação"><i class="ic" data-ic="code-xml"></i><span>YAML</span></button>
|
|
373
|
+
</div>
|
|
374
|
+
<div class="rgroup-label">Painéis</div>
|
|
375
|
+
</div>
|
|
376
|
+
<div class="rgroup" data-adv>
|
|
377
|
+
<div class="rgroup-body">
|
|
378
|
+
<button id="btn-audio-toggle" class="rbtn rbtn-lg" title="Sons de feedback ao alinhar"><i class="ic" data-ic="volume-2"></i><span>Sons</span></button>
|
|
379
|
+
</div>
|
|
380
|
+
<div class="rgroup-label">Preferências</div>
|
|
381
|
+
</div>
|
|
382
|
+
</div>
|
|
383
|
+
</div>
|
|
384
|
+
|
|
385
|
+
<!-- ======================================================================
|
|
386
|
+
ÁREA DE TRABALHO: slides | slide atual + anotações | painel
|
|
387
|
+
====================================================================== -->
|
|
388
|
+
<main id="app-workspace" class="workspace">
|
|
389
|
+
<aside id="slides-nav" class="slide-rail" aria-label="Slides">
|
|
390
|
+
<div class="rail-header">
|
|
391
|
+
<div class="rail-tabs" role="tablist">
|
|
392
|
+
<button id="rail-tab-slides" class="rail-tab active" type="button" role="tab" title="Slides"><i class="ic" data-ic="layers"></i><span>Slides</span><span id="slide-count" class="muted">0</span></button>
|
|
393
|
+
<button id="rail-tab-files" class="rail-tab" type="button" role="tab" title="Arquivos do projeto (a pasta da apresentação)"><i class="ic" data-ic="folder-tree"></i><span>Arquivos</span></button>
|
|
394
|
+
</div>
|
|
395
|
+
<button id="btn-add-slide-mini" class="icon-btn" title="Novo slide"><i class="ic" data-ic="plus"></i></button>
|
|
396
|
+
</div>
|
|
397
|
+
<div id="thumbnails-list" class="thumb-list"></div>
|
|
398
|
+
<div id="project-explorer" class="explorer hidden">
|
|
399
|
+
<div class="ex-tools">
|
|
400
|
+
<button id="ex-new-file" class="icon-btn icon-btn-sm" type="button" title="Novo arquivo (.md)"><i class="ic" data-ic="file-plus"></i></button>
|
|
401
|
+
<button id="ex-new-folder" class="icon-btn icon-btn-sm" type="button" title="Nova pasta"><i class="ic" data-ic="folder-plus"></i></button>
|
|
402
|
+
<button id="ex-upload" class="icon-btn icon-btn-sm" type="button" title="Enviar arquivos (vão para contexto/)"><i class="ic" data-ic="upload"></i></button>
|
|
403
|
+
<button id="ex-refresh" class="icon-btn icon-btn-sm" type="button" title="Atualizar"><i class="ic" data-ic="refresh-cw"></i></button>
|
|
404
|
+
<input id="ex-upload-input" type="file" multiple hidden>
|
|
405
|
+
</div>
|
|
406
|
+
<div id="project-tree" class="ex-tree" tabindex="0"></div>
|
|
407
|
+
</div>
|
|
408
|
+
</aside>
|
|
409
|
+
|
|
410
|
+
<section id="canvas-stage-wrapper" class="editor">
|
|
411
|
+
<!-- abas como no VS Code: a apresentação sempre; cada arquivo do projeto aberto numa aba -->
|
|
412
|
+
<div id="doc-tabs" class="doc-tabs" role="tablist"></div>
|
|
413
|
+
<div id="doc-view" class="doc-view hidden"></div>
|
|
414
|
+
<!-- modelo de fábrica em prévia: nada é salvo até mudar algo (aí nasce uma cópia na biblioteca) -->
|
|
415
|
+
<div id="preview-banner" class="preview-banner hidden" role="status">
|
|
416
|
+
<i class="ic" data-ic="eye"></i>
|
|
417
|
+
<span id="preview-banner-text"></span>
|
|
418
|
+
<button id="btn-model-use" class="btn btn-primary btn-sm" type="button">Usar como base</button>
|
|
419
|
+
</div>
|
|
420
|
+
<!-- revisão: o que a IA (ou a pessoa) mudou neste slide, para validar -->
|
|
421
|
+
<div id="review-bar" class="review-bar hidden" role="status"></div>
|
|
422
|
+
<div id="canvas-viewport" class="canvas-viewport">
|
|
423
|
+
<div id="slide-stage" class="stage-16-9">
|
|
424
|
+
<div id="review-original" class="review-original hidden" aria-hidden="true"><img alt=""><span class="ro-tag">Original</span></div>
|
|
425
|
+
<div id="safe-margin-guides" class="safe-guides-layer"><div class="safe-box"></div></div>
|
|
426
|
+
<div id="inspector-overlay" class="inspector-layer"></div>
|
|
427
|
+
<div id="heatmap-overlay" class="heatmap-layer hidden"></div>
|
|
428
|
+
<div id="rendered-slide-container"></div>
|
|
429
|
+
<div id="look-preview-badge" class="look-preview-badge hidden" role="status"></div>
|
|
430
|
+
</div>
|
|
431
|
+
</div>
|
|
432
|
+
<!-- fiscal: o problema do slide e as correções, à mão -->
|
|
433
|
+
<div id="fix-panel" class="fix-panel hidden" role="region" aria-label="Problemas de layout neste slide"></div>
|
|
434
|
+
|
|
435
|
+
<div id="yaml-drawer" class="yaml-drawer hidden">
|
|
436
|
+
<div class="drawer-header">
|
|
437
|
+
<span><i class="ic" data-ic="code-xml"></i> YAML</span>
|
|
438
|
+
<div class="segmented segmented-sm" role="tablist">
|
|
439
|
+
<button id="yaml-mode-slide" class="seg active" type="button">Slide atual</button>
|
|
440
|
+
<button id="yaml-mode-deck" class="seg" type="button">Apresentação inteira</button>
|
|
441
|
+
</div>
|
|
442
|
+
<span id="yaml-status" class="yaml-status"></span>
|
|
443
|
+
<button id="btn-close-yaml-drawer" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
444
|
+
</div>
|
|
445
|
+
<div class="yaml-code">
|
|
446
|
+
<pre id="yaml-hl" class="yaml-hl" aria-hidden="true"></pre>
|
|
447
|
+
<textarea id="yaml-live-editor" class="yaml-editor" spellcheck="false" wrap="off"></textarea>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
|
|
451
|
+
<div id="notes-bar" class="notes-bar">
|
|
452
|
+
<textarea id="slide-notes-input" class="notes-input" placeholder="Clique para adicionar anotações do apresentador"></textarea>
|
|
453
|
+
<textarea id="slide-consulta-input" class="notes-input notes-consulta" placeholder="Texto de consulta: só no material de estudo (o aluno lê depois)" title="Vai no material de estudo, logo depois deste slide; não aparece na apresentação"></textarea>
|
|
454
|
+
</div>
|
|
455
|
+
</section>
|
|
456
|
+
|
|
457
|
+
<aside id="inspector-sidebar" class="task-pane" aria-label="Painel lateral">
|
|
458
|
+
<div class="pane-header">
|
|
459
|
+
<div class="segmented" role="tablist">
|
|
460
|
+
<!-- como no VS Code: a aba aberta mostra o nome; as outras, só o ícone (o nome fica na dica) -->
|
|
461
|
+
<button id="tab-btn-props" class="seg active" role="tab" title="Formatar: o conteúdo do slide"><i class="ic" data-ic="pencil"></i><span class="seg-label">Formatar</span></button>
|
|
462
|
+
<button id="tab-btn-inspect" class="seg" role="tab" title="Propriedades do objeto selecionado, do slide e da apresentação"><i class="ic" data-ic="sliders-horizontal"></i><span class="seg-label">Propriedades</span></button>
|
|
463
|
+
<button id="tab-btn-chat" class="seg" role="tab" title="Assistente de IA"><i class="ic" data-ic="sparkles"></i><span class="seg-label">Assistente</span><span id="chat-badge" class="chat-badge-dot"></span></button>
|
|
464
|
+
<button id="tab-btn-vars" class="seg" role="tab" title="Variáveis do ambiente"><i class="ic" data-ic="braces"></i><span class="seg-label">Variáveis</span></button>
|
|
465
|
+
</div>
|
|
466
|
+
<button id="btn-close-pane" class="icon-btn" title="Fechar painel"><i class="ic" data-ic="x"></i></button>
|
|
467
|
+
</div>
|
|
468
|
+
|
|
469
|
+
<div id="tab-panel-inspect" class="tab-panel inspector-panel" role="tabpanel" aria-labelledby="tab-btn-inspect"><div id="inspector-body" class="ip-body"></div></div>
|
|
470
|
+
<div id="tab-panel-props" class="tab-panel active">
|
|
471
|
+
<div id="auto-banner" class="auto-banner" hidden></div>
|
|
472
|
+
<div id="slide-fields-form" class="fields-form"></div>
|
|
473
|
+
<div class="pane-section">
|
|
474
|
+
<label class="field-label" for="slide-time-input">Tempo planejado</label>
|
|
475
|
+
<div class="inline-field"><input type="number" id="slide-time-input" class="form-control" min="0" step="0.5" value="1"> <span class="muted">min</span></div>
|
|
476
|
+
</div>
|
|
477
|
+
</div>
|
|
478
|
+
|
|
479
|
+
<div id="tab-panel-chat" class="tab-panel">
|
|
480
|
+
<div class="chat-options">
|
|
481
|
+
<button id="btn-brainstorm-apply" class="btn btn-primary btn-sm hidden" type="button" title="Autoriza a IA a aplicar o que vocês combinaram na conversa">Pode fazer</button>
|
|
482
|
+
</div>
|
|
483
|
+
|
|
484
|
+
<div id="chat-messages" class="chat-history">
|
|
485
|
+
<div id="chat-empty" class="chat-empty">
|
|
486
|
+
<i class="ic" data-ic="bot"></i>
|
|
487
|
+
<p>Sua próxima ideia começa aqui.<br>Crie uma apresentação ou peça um ajuste direto.</p>
|
|
488
|
+
<p class="chat-start-guide">Do zero: informe assunto, público e duração. Para conteúdo técnico, peça uma versão de consulta que preserve detalhes e código. O tema pode ser trocado depois em Design.</p>
|
|
489
|
+
<div class="chat-suggestions">
|
|
490
|
+
<button class="chip-prompt" id="chat-start-deck" type="button">Criar apresentação</button>
|
|
491
|
+
<button class="chip-prompt" data-prompt="Reduzir o texto deste slide e deixá-lo mais visual">Menos texto</button>
|
|
492
|
+
<button class="chip-prompt" data-prompt="Prepare este slide técnico para consulta posterior. Preserve detalhes, termos e código; organize a leitura com títulos, destaques e avisos sem transformar tudo em tópicos genéricos.">Preparar para consulta</button>
|
|
493
|
+
<button class="chip-prompt" data-prompt="Converter este slide em etapas de um processo">Converter em etapas</button>
|
|
494
|
+
<button class="chip-prompt" data-prompt="Revise a legibilidade deste slide: hierarquia, tamanho dos textos, contraste, espaçamento e leitura à distância. Preserve o significado e não remova conteúdo técnico importante.">Revisar leitura</button>
|
|
495
|
+
</div>
|
|
496
|
+
</div>
|
|
497
|
+
</div>
|
|
498
|
+
|
|
499
|
+
<form id="chat-form" class="chat-input-bar">
|
|
500
|
+
<div id="chat-attachments" class="chat-attachments" hidden></div>
|
|
501
|
+
<div class="chat-compose">
|
|
502
|
+
<textarea id="chat-input" class="chat-field" rows="1" placeholder="Pergunte, peça uma mudança, anexe um arquivo ou cole um link…" autocomplete="off"></textarea>
|
|
503
|
+
<button type="button" id="chat-attach" class="icon-btn" title="Anexar imagem ou documento (pdf, docx, xlsx, pptx, txt)"><i class="ic" data-ic="image-plus"></i></button>
|
|
504
|
+
<button type="submit" id="chat-send" class="icon-btn icon-btn-primary" title="Enviar (Enter)"><i class="ic" data-ic="send"></i></button>
|
|
505
|
+
</div>
|
|
506
|
+
<input type="file" id="chat-attach-input" accept="image/*,.pdf,.docx,.xlsx,.pptx,.txt,.md,.csv" multiple hidden>
|
|
507
|
+
</form>
|
|
508
|
+
</div>
|
|
509
|
+
|
|
510
|
+
<div id="tab-panel-vars" class="tab-panel studio-vars-panel" role="tabpanel" aria-labelledby="tab-btn-vars">
|
|
511
|
+
<!-- grade de variáveis (Object Inspector): arraste o nome para um campo do slide para escrever {{nome}} -->
|
|
512
|
+
<div id="studio-env-vars" class="studio-env-grid" title="Clique numa célula para editar (Enter ou sair grava, Esc desfaz). Arraste o nome para um campo do slide: vira {{nome}}."></div>
|
|
513
|
+
<div id="studio-vars-status" class="sf-hint studio-vars-status" role="status"></div>
|
|
514
|
+
<details class="studio-var-section studio-saved" open>
|
|
515
|
+
<summary>Guardadas pelos slides de API (save:)</summary>
|
|
516
|
+
<div id="studio-saved-vars"></div>
|
|
517
|
+
</details>
|
|
518
|
+
</div>
|
|
519
|
+
</aside>
|
|
520
|
+
</main>
|
|
521
|
+
|
|
522
|
+
<!-- ======================================================================
|
|
523
|
+
BARRA DE STATUS
|
|
524
|
+
====================================================================== -->
|
|
525
|
+
<footer id="statusbar" class="statusbar">
|
|
526
|
+
<span id="current-slide-label">Slide 1 de 1</span>
|
|
527
|
+
<span id="current-layout-badge" class="status-item"></span>
|
|
528
|
+
<span id="anti-sleep-indicator" class="status-item anti-sleep-ok" title="Palavras visíveis no slide (limite recomendado: 40)"><b id="word-count-num">0</b> palavras</span>
|
|
529
|
+
<button id="status-issues" class="status-item status-btn" title="Problemas de layout neste slide"></button>
|
|
530
|
+
<div id="step-control" class="step-control" hidden></div>
|
|
531
|
+
<span id="status-fit" class="status-item" title=""></span>
|
|
532
|
+
<span class="spacer"></span>
|
|
533
|
+
<button id="ai-status" class="status-item status-btn" title=""></button>
|
|
534
|
+
<span id="build-stamp" class="status-item" title="Versão do motor rodando neste Studio"></span>
|
|
535
|
+
<button id="btn-notes-toggle-status" class="status-item status-btn" title="Anotações"><i class="ic" data-ic="sticky-note"></i> Anotações</button>
|
|
536
|
+
<div class="zoom-ctrl">
|
|
537
|
+
<button id="zoom-out" class="icon-btn icon-btn-sm" title="Reduzir"><i class="ic" data-ic="zoom-out"></i></button>
|
|
538
|
+
<span id="zoom-level">60%</span>
|
|
539
|
+
<button id="zoom-in" class="icon-btn icon-btn-sm" title="Ampliar"><i class="ic" data-ic="zoom-in"></i></button>
|
|
540
|
+
<button id="zoom-fit" class="icon-btn icon-btn-sm" title="Ajustar à janela"><i class="ic" data-ic="maximize"></i></button>
|
|
541
|
+
</div>
|
|
542
|
+
</footer>
|
|
543
|
+
|
|
544
|
+
<!-- VERSÕES: comparar e restaurar -->
|
|
545
|
+
<div id="versions-modal" class="modal-dialog-overlay hidden">
|
|
546
|
+
<div class="modal-dialog-box versions-dialog" role="dialog" aria-modal="true" aria-labelledby="versions-title">
|
|
547
|
+
<div class="modal-dialog-header"><div><span class="scene-eyebrow">VERSÕES</span><h3 id="versions-title">Comparar e restaurar</h3></div><button id="versions-close" class="btn-close-modal" title="Fechar (Esc)" aria-label="Fechar"><i class="ic" data-ic="x"></i></button></div>
|
|
548
|
+
<div class="modal-dialog-body versions-body">
|
|
549
|
+
<div class="versions-list" role="listbox" aria-label="Versões salvas"></div>
|
|
550
|
+
<div class="versions-compare" aria-live="polite"><p class="versions-hint">Escolha uma versão à esquerda para ver o que mudou.</p></div>
|
|
551
|
+
</div>
|
|
552
|
+
<div class="modal-dialog-footer"><span class="versions-count"></span><button id="versions-restore" class="btn" disabled>Restaurar versão</button></div>
|
|
553
|
+
</div>
|
|
554
|
+
</div>
|
|
555
|
+
|
|
556
|
+
<!-- NAVEGAÇÃO MOBILE -->
|
|
557
|
+
<nav id="mobile-nav-bar" class="mobile-nav-bar">
|
|
558
|
+
<button id="mobile-btn-slides" class="mobile-nav-btn"><i class="ic" data-ic="layout-template"></i><span>Slides</span></button>
|
|
559
|
+
<button id="mobile-btn-napkin" class="mobile-nav-btn"><i class="ic" data-ic="workflow"></i><span>Diagrama</span></button>
|
|
560
|
+
<button id="mobile-btn-present" class="mobile-nav-btn mobile-nav-primary"><i class="ic" data-ic="play"></i><span>Apresentar</span></button>
|
|
561
|
+
<button id="mobile-btn-editor" class="mobile-nav-btn"><i class="ic" data-ic="sliders-horizontal"></i><span>Formatar</span></button>
|
|
562
|
+
<button id="mobile-btn-chat" class="mobile-nav-btn"><i class="ic" data-ic="bot"></i><span>Assistente</span></button>
|
|
563
|
+
</nav>
|
|
564
|
+
|
|
565
|
+
<!-- BARRA DE FORMATAÇÃO (aparece ao editar um texto no slide) -->
|
|
566
|
+
<div id="format-bar" class="format-bar hidden" role="toolbar" aria-label="Formatação">
|
|
567
|
+
<button data-fmt="bold" title="Negrito (Ctrl+B)"><b>N</b></button>
|
|
568
|
+
<button data-fmt="italic" title="Itálico (Ctrl+I)"><i>I</i></button>
|
|
569
|
+
<button data-fmt="strike" title="Riscado"><s>S</s></button>
|
|
570
|
+
<span class="fb-sep"></span>
|
|
571
|
+
<button data-fmt="mark" title="Destaque (==texto==) — o estilo do destaque é escolhido em Design"><span class="fb-mark">Destaque</span></button>
|
|
572
|
+
<button data-fmt="em" title="Cor de ênfase (^^texto^^)"><span class="fb-em">Cor</span></button>
|
|
573
|
+
<button data-fmt="clear" title="Limpar formatação da seleção">Limpar</button>
|
|
574
|
+
<span class="fb-sep"></span>
|
|
575
|
+
<div id="alchemy-pill" class="alchemy-pill hidden">
|
|
576
|
+
<span id="alchemy-title" class="alchemy-label">Converter:</span>
|
|
577
|
+
<div id="alchemy-actions" class="alchemy-btn-group"></div>
|
|
578
|
+
</div>
|
|
579
|
+
</div>
|
|
580
|
+
|
|
581
|
+
<input type="file" id="file-input-yaml" accept=".sagadeck,.zip,.yaml,.yml,text/yaml,text/x-yaml,application/x-yaml,.txt" hidden>
|
|
582
|
+
|
|
583
|
+
<!-- MODO APRESENTAÇÃO: a apresentação real (runtime completo) por cima do Studio -->
|
|
584
|
+
<div id="presentation-modal" class="modal-fullscreen hidden">
|
|
585
|
+
<iframe id="pres-frame" class="pres-frame" title="Apresentação" allow="fullscreen; screen-wake-lock; microphone"></iframe>
|
|
586
|
+
<button id="modal-close-present" class="btn-close-modal" title="Voltar ao editor (Esc)"><i class="ic" data-ic="x"></i></button>
|
|
587
|
+
</div>
|
|
588
|
+
|
|
589
|
+
<!-- BUSCA DE COMANDOS -->
|
|
590
|
+
<div id="scene-modal" class="modal-dialog-overlay hidden">
|
|
591
|
+
<div class="modal-dialog-box scene-dialog" role="dialog" aria-modal="true" aria-labelledby="scene-title">
|
|
592
|
+
<div class="modal-dialog-header"><div><span class="scene-eyebrow">NOVO SLIDE</span><h3 id="scene-title">Escolha o tipo do novo slide</h3></div><button id="scene-close" class="icon-btn" aria-label="Fechar galeria de slides"><i class="ic" data-ic="x"></i></button></div>
|
|
593
|
+
<div class="scene-tools"><input id="scene-search" class="form-control scene-search" type="search" placeholder="Buscar: status, código, gráfico, quiz…" aria-label="Buscar tipo de slide"><div class="scene-filters" role="group" aria-label="Filtrar por categoria"></div></div>
|
|
594
|
+
<div id="scene-grid" class="scene-grid"></div>
|
|
595
|
+
<div class="scene-footer"><i class="ic" data-ic="plus"></i> Adiciona um novo slide depois do atual, com um exemplo para você trocar. Para mudar o formato do slide atual, use Layout.</div>
|
|
596
|
+
</div>
|
|
597
|
+
</div>
|
|
598
|
+
<div id="command-palette-modal" class="palette-overlay hidden">
|
|
599
|
+
<div class="palette-box">
|
|
600
|
+
<div class="palette-input-wrap">
|
|
601
|
+
<i class="ic" data-ic="search"></i>
|
|
602
|
+
<input type="text" id="palette-search-input" class="palette-input" placeholder="O que você quer fazer?" autocomplete="off">
|
|
603
|
+
<kbd>Esc</kbd>
|
|
604
|
+
</div>
|
|
605
|
+
<div id="palette-results-list" class="palette-results"></div>
|
|
606
|
+
</div>
|
|
607
|
+
</div>
|
|
608
|
+
|
|
609
|
+
<!-- BIBLIOTECA DE ÍCONES -->
|
|
610
|
+
<div id="modal-icon-picker" class="modal-dialog-overlay hidden">
|
|
611
|
+
<div class="modal-dialog-box icon-picker-dialog" role="dialog" aria-labelledby="icon-picker-title">
|
|
612
|
+
<div class="modal-dialog-header">
|
|
613
|
+
<h3 id="icon-picker-title">Inserir ícone</h3>
|
|
614
|
+
<button id="btn-close-icon-picker" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
615
|
+
</div>
|
|
616
|
+
<div class="modal-dialog-body icon-picker-body">
|
|
617
|
+
<div class="search-field">
|
|
618
|
+
<i class="ic" data-ic="search"></i>
|
|
619
|
+
<input type="text" id="icon-search-input" placeholder="Buscar em inglês ou português (ex.: foguete, chart, equipe)" autocomplete="off">
|
|
620
|
+
<span id="icon-search-count" class="muted"></span>
|
|
621
|
+
</div>
|
|
622
|
+
<div class="icon-category-chips">
|
|
623
|
+
<button class="chip-cat active" data-cat="">Todos</button>
|
|
624
|
+
<button class="chip-cat" data-cat="chart">Dados</button>
|
|
625
|
+
<button class="chip-cat" data-cat="user">Pessoas</button>
|
|
626
|
+
<button class="chip-cat" data-cat="arrow">Setas</button>
|
|
627
|
+
<button class="chip-cat" data-cat="check">Status</button>
|
|
628
|
+
<button class="chip-cat" data-cat="message">Comunicação</button>
|
|
629
|
+
<button class="chip-cat" data-cat="star">Destaque</button>
|
|
630
|
+
<button class="chip-cat" data-cat="zap">Energia</button>
|
|
631
|
+
</div>
|
|
632
|
+
<div id="icons-grid-container" class="icons-grid"></div>
|
|
633
|
+
<div id="icon-preview-footer" class="icon-preview-footer hidden">
|
|
634
|
+
<div class="icon-preview-left">
|
|
635
|
+
<div id="icon-preview-svg" class="icon-preview-svg-box"></div>
|
|
636
|
+
<b id="icon-preview-name"></b>
|
|
637
|
+
</div>
|
|
638
|
+
<div class="icon-preview-actions">
|
|
639
|
+
<button id="btn-insert-icon-card" class="btn btn-secondary" title="Adicionar um cartão com este ícone">Como cartão</button>
|
|
640
|
+
<button id="btn-insert-icon-canvas" class="btn btn-secondary" title="Colocar no layout livre">No layout livre</button>
|
|
641
|
+
<button id="btn-insert-icon-figure" class="btn btn-primary" title="Usar como figura principal do slide">Usar como figura</button>
|
|
642
|
+
</div>
|
|
643
|
+
</div>
|
|
644
|
+
</div>
|
|
645
|
+
</div>
|
|
646
|
+
</div>
|
|
647
|
+
|
|
648
|
+
<!-- ABRIR POR CAMINHO -->
|
|
649
|
+
<div id="modal-open-server" class="modal-dialog-overlay hidden">
|
|
650
|
+
<div class="modal-dialog-box" role="dialog" aria-labelledby="open-server-title">
|
|
651
|
+
<div class="modal-dialog-header">
|
|
652
|
+
<h3 id="open-server-title">Abrir por caminho</h3>
|
|
653
|
+
<button id="btn-close-open-modal" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
654
|
+
</div>
|
|
655
|
+
<div class="modal-dialog-body">
|
|
656
|
+
<label class="field-label" for="input-server-path">Caminho do arquivo .yaml (as alterações são salvas nele)</label>
|
|
657
|
+
<input type="text" id="input-server-path" class="form-control" placeholder="ex.: C:\palestras\minha-palestra.yaml" value="">
|
|
658
|
+
</div>
|
|
659
|
+
<div class="modal-dialog-footer">
|
|
660
|
+
<button id="btn-cancel-open-server" class="btn btn-secondary">Cancelar</button>
|
|
661
|
+
<button id="btn-confirm-open-server" class="btn btn-primary">Abrir</button>
|
|
662
|
+
</div>
|
|
663
|
+
</div>
|
|
664
|
+
</div>
|
|
665
|
+
|
|
666
|
+
<div id="modal-share" class="modal-dialog-overlay hidden">
|
|
667
|
+
<div class="modal-dialog-box share-dialog" role="dialog" aria-modal="true" aria-labelledby="share-title">
|
|
668
|
+
<div class="modal-dialog-header">
|
|
669
|
+
<h3 id="share-title">Compartilhar link (só leitura)</h3>
|
|
670
|
+
<button id="share-close" class="icon-btn" title="Fechar" aria-label="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
671
|
+
</div>
|
|
672
|
+
<div class="modal-dialog-body">
|
|
673
|
+
<div class="share-new">
|
|
674
|
+
<div id="share-who" class="share-who" role="radiogroup" aria-label="Quem pode ver">
|
|
675
|
+
<label title="A pessoa entra com o login dela no portal; o link sozinho não basta"><input type="radio" name="share-who" value="portal" checked><i class="ic" data-ic="lock"></i>Só quem entra no portal</label>
|
|
676
|
+
<label title="Qualquer pessoa com o link vê, sem login (como no Google Docs); revogue quando não precisar mais"><input type="radio" name="share-who" value="publico"><i class="ic" data-ic="globe"></i>Qualquer pessoa com o link</label>
|
|
677
|
+
</div>
|
|
678
|
+
<label class="share-notes" title="Sem marcar, quem abre não vê as notas do apresentador"><input type="checkbox" id="share-notas">Com as notas do apresentador</label>
|
|
679
|
+
<button id="share-create" class="btn btn-primary" data-hint="Quem abre vê a apresentação e pode baixar (PDF, PowerPoint, HTML, material de estudo, .sagadeck); sem editar a sua"><i class="ic" data-ic="link"></i>Criar link</button>
|
|
680
|
+
</div>
|
|
681
|
+
<ul id="share-list" class="share-list"></ul>
|
|
682
|
+
</div>
|
|
683
|
+
</div>
|
|
684
|
+
</div>
|
|
685
|
+
|
|
686
|
+
<div id="drop-overlay" class="drop-overlay hidden">
|
|
687
|
+
<div class="drop-box"><i class="ic" data-ic="folder-open"></i><div>Solte o arquivo .yaml para abrir</div></div>
|
|
688
|
+
</div>
|
|
689
|
+
|
|
690
|
+
<!-- CABEÇALHO E RODAPÉ -->
|
|
691
|
+
<div id="modal-hf" class="modal-dialog-overlay hidden">
|
|
692
|
+
<div class="modal-dialog-box modal-xl" role="dialog" aria-labelledby="hf-title">
|
|
693
|
+
<div class="modal-dialog-header">
|
|
694
|
+
<h3 id="hf-title">Cabeçalho e rodapé</h3>
|
|
695
|
+
<button id="btn-close-hf" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
696
|
+
</div>
|
|
697
|
+
<div class="modal-dialog-body hf-body">
|
|
698
|
+
<div class="hf-left">
|
|
699
|
+
<div class="napkin-label">Modelos</div>
|
|
700
|
+
<div class="hf-presets"></div>
|
|
701
|
+
<div class="napkin-label">Dados da apresentação</div>
|
|
702
|
+
<div class="hf-deck">
|
|
703
|
+
<label>Autor<input class="form-control" data-deck="author" placeholder="Seu nome"></label>
|
|
704
|
+
<label>Evento<input class="form-control" data-deck="event" placeholder="Ex.: Summit de Dados 2026"></label>
|
|
705
|
+
<label>Departamento<input class="form-control" data-deck="department" placeholder="Ex.: Engenharia de Dados"></label>
|
|
706
|
+
<label>Data<input class="form-control" data-deck="date" type="date" title="Vazio = data do dia em que o deck é aberto"></label>
|
|
707
|
+
</div>
|
|
708
|
+
<div class="napkin-label">Personalizar <span class="muted">— clique num campo e depois numa variável</span></div>
|
|
709
|
+
<div class="hf-tokens"></div>
|
|
710
|
+
<div class="hf-grid">
|
|
711
|
+
<span class="hf-row">Cabeçalho</span>
|
|
712
|
+
<input class="form-control" data-slot="header.left" placeholder="esquerda"><input class="form-control" data-slot="header.center" placeholder="centro"><input class="form-control" data-slot="header.right" placeholder="direita">
|
|
713
|
+
<span class="hf-row">Rodapé</span>
|
|
714
|
+
<input class="form-control" data-slot="footer.left" placeholder="esquerda"><input class="form-control" data-slot="footer.center" placeholder="centro"><input class="form-control" data-slot="footer.right" placeholder="direita">
|
|
715
|
+
</div>
|
|
716
|
+
<p class="muted hf-note">Capa, seções, encerramento e slides de página inteira ficam sem cabeçalho e rodapé.</p>
|
|
717
|
+
</div>
|
|
718
|
+
<div class="hf-right">
|
|
719
|
+
<div class="napkin-label">Prévia</div>
|
|
720
|
+
<div class="hf-stage napkin-stage"></div>
|
|
721
|
+
</div>
|
|
722
|
+
</div>
|
|
723
|
+
<div class="modal-dialog-footer">
|
|
724
|
+
<span class="spacer"></span>
|
|
725
|
+
<button id="btn-hf-cancel" class="btn btn-secondary">Cancelar</button>
|
|
726
|
+
<button id="btn-hf-apply" class="btn btn-primary">Aplicar em todos os slides</button>
|
|
727
|
+
</div>
|
|
728
|
+
</div>
|
|
729
|
+
</div>
|
|
730
|
+
|
|
731
|
+
<!-- AMBIENTES DOS SLIDES DE API (~/.sagadeck/ambientes.yaml) -->
|
|
732
|
+
<!-- Preferências: como as Configurações do VS Code (busca, seções, grava sozinho) -->
|
|
733
|
+
<div id="modal-prefs" class="modal-dialog-overlay hidden">
|
|
734
|
+
<div class="modal-dialog-box prefs-dialog" role="dialog" aria-modal="true" aria-labelledby="prefs-title">
|
|
735
|
+
<div class="modal-dialog-header"><h3 id="prefs-title">Preferências</h3><button id="btn-close-prefs" class="icon-btn" title="Fechar" aria-label="Fechar"><i class="ic" data-ic="x"></i></button></div>
|
|
736
|
+
<div class="prefs-top"><input id="prefs-search" type="search" class="form-control" placeholder="Buscar preferência…" aria-label="Buscar preferência"><span id="prefs-status" class="prefs-status" role="status"></span></div>
|
|
737
|
+
<div class="prefs-body"><nav id="prefs-nav" class="prefs-nav" aria-label="Seções"></nav><div id="prefs-list" class="prefs-list"></div></div>
|
|
738
|
+
<div class="prefs-foot">Grava sozinho. Arquivo desta máquina: <code id="prefs-file"></code></div>
|
|
739
|
+
</div>
|
|
740
|
+
</div>
|
|
741
|
+
<div id="modal-api-envs" class="modal-dialog-overlay hidden">
|
|
742
|
+
<div class="modal-dialog-box api-envs-dialog" role="dialog" aria-labelledby="api-envs-title">
|
|
743
|
+
<div class="modal-dialog-header">
|
|
744
|
+
<h3 id="api-envs-title">Ambientes dos slides de API</h3>
|
|
745
|
+
<button id="btn-close-api-envs" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
746
|
+
</div>
|
|
747
|
+
<div class="modal-dialog-body api-envs-body">
|
|
748
|
+
<p class="muted api-envs-intro">Endereços, tokens e segredos ficam na sua máquina, nunca no deck (o deck pode ir para o GitHub).
|
|
749
|
+
Nos slides, <code>{{base}}</code> vira o <code>vars.base</code> do ambiente em uso; segredos entram como <code>{{secret.nome}}</code>.</p>
|
|
750
|
+
<p class="muted api-envs-safety">O YAML é validado antes de salvar. Uma cópia da versão anterior fica ao lado do arquivo como <code>.bak</code>.</p>
|
|
751
|
+
<div class="napkin-label">Ambiente em uso <span class="muted">— o selo no slide também troca</span></div>
|
|
752
|
+
<div id="api-envs-list" class="api-envs-list"></div>
|
|
753
|
+
<div class="napkin-label">Arquivo <code id="api-envs-file" class="muted"></code></div>
|
|
754
|
+
<textarea id="api-envs-text" class="form-control mono" rows="20" spellcheck="false" aria-label="Conteúdo do ambientes.yaml"></textarea>
|
|
755
|
+
<div id="api-envs-status" class="sf-hint api-envs-status"></div>
|
|
756
|
+
</div>
|
|
757
|
+
<div class="modal-dialog-footer">
|
|
758
|
+
<span class="spacer"></span>
|
|
759
|
+
<button id="btn-api-envs-cancel" class="btn btn-secondary">Fechar</button>
|
|
760
|
+
<button id="btn-api-envs-save" class="btn btn-primary">Salvar</button>
|
|
761
|
+
</div>
|
|
762
|
+
</div>
|
|
763
|
+
</div>
|
|
764
|
+
|
|
765
|
+
<!-- DIAGRAMA A PARTIR DE TEXTO (NAPKIN) -->
|
|
766
|
+
<div id="modal-napkin" class="modal-dialog-overlay hidden">
|
|
767
|
+
<div class="modal-dialog-box modal-xl" role="dialog" aria-labelledby="napkin-title">
|
|
768
|
+
<div class="modal-dialog-header">
|
|
769
|
+
<h3 id="napkin-title">Diagrama a partir de texto</h3>
|
|
770
|
+
<button id="btn-close-napkin" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
771
|
+
</div>
|
|
772
|
+
<div class="modal-dialog-body napkin-body">
|
|
773
|
+
<div class="napkin-left">
|
|
774
|
+
<label class="napkin-label" for="napkin-input-text">Seu texto</label>
|
|
775
|
+
<textarea id="napkin-input-text" class="form-control napkin-input" placeholder="Cole um texto, uma lista ou um processo. Ex.: 1) cliente abre chamado 2) triagem 3) resposta"></textarea>
|
|
776
|
+
<div class="napkin-label">Formato <span class="muted">— deixe em Automático para a IA escolher</span></div>
|
|
777
|
+
<div id="napkin-types" class="napkin-types"></div>
|
|
778
|
+
<div class="napkin-label">Exemplos <span class="muted">— clique para experimentar</span></div>
|
|
779
|
+
<div id="napkin-examples" class="napkin-examples"></div>
|
|
780
|
+
</div>
|
|
781
|
+
<div class="napkin-right">
|
|
782
|
+
<div class="napkin-label">Resultado</div>
|
|
783
|
+
<div id="napkin-stage" class="napkin-stage"><div class="napkin-empty">Escreva à esquerda e clique em <b>Gerar</b>.</div></div>
|
|
784
|
+
<div id="napkin-preview-box" class="napkin-preview hidden">
|
|
785
|
+
<div class="napkin-preview-head">
|
|
786
|
+
<span id="napkin-detected-badge" class="tag"></span>
|
|
787
|
+
<span id="napkin-rationale" class="muted"></span>
|
|
788
|
+
</div>
|
|
789
|
+
<details><summary>Ver YAML</summary><pre id="napkin-yaml-preview"></pre></details>
|
|
790
|
+
</div>
|
|
791
|
+
</div>
|
|
792
|
+
</div>
|
|
793
|
+
<div class="modal-dialog-footer">
|
|
794
|
+
<button id="btn-run-napkin" class="btn btn-primary">Gerar</button>
|
|
795
|
+
<span class="spacer"></span>
|
|
796
|
+
<button id="btn-napkin-replace" class="btn btn-secondary hidden">Substituir este slide</button>
|
|
797
|
+
<button id="btn-napkin-insert" class="btn btn-primary hidden">Inserir como novo slide</button>
|
|
798
|
+
</div>
|
|
799
|
+
</div>
|
|
800
|
+
</div>
|
|
801
|
+
|
|
802
|
+
<!-- DECK COM IA -->
|
|
803
|
+
<div id="modal-ai-deck" class="modal-dialog-overlay hidden">
|
|
804
|
+
<div class="modal-dialog-box modal-md" role="dialog" aria-labelledby="ai-deck-title">
|
|
805
|
+
<div class="modal-dialog-header">
|
|
806
|
+
<h3 id="ai-deck-title">Nova apresentação com IA</h3>
|
|
807
|
+
<button id="btn-close-ai-deck" class="icon-btn" title="Fechar"><i class="ic" data-ic="x"></i></button>
|
|
808
|
+
</div>
|
|
809
|
+
<div class="modal-dialog-body">
|
|
810
|
+
<label class="field-label" for="ai-deck-briefing">Sobre o que é, para quem e com que objetivo?</label>
|
|
811
|
+
<textarea id="ai-deck-briefing" class="form-control" rows="5" placeholder="ex.: Palestra de 20 minutos para gerentes de agência sobre usar IA com segurança no atendimento. Comece com um caso real, mostre 3 cuidados e feche com um checklist. (imagens: peça no texto — 'com fotos', 'você decide onde ilustrar'… sem pedir, não gera)"></textarea>
|
|
812
|
+
<div class="form-row">
|
|
813
|
+
<label class="field-label">Minutos <input id="ai-deck-minutes" type="number" min="3" max="120" value="15" class="form-control" title="A quantidade de slides sai daqui (~1 a cada 1,5 min)"></label>
|
|
814
|
+
<label class="field-label">Slides <input id="ai-deck-slides" type="number" min="3" max="40" value="10" class="form-control" title="Ajuste fino: mexer aqui vale até trocar os minutos"></label>
|
|
815
|
+
</div>
|
|
816
|
+
<div class="form-row">
|
|
817
|
+
<label class="field-label">Estilo <select id="ai-deck-style" class="form-control"><option value="">A IA escolhe</option><option value="perspectiva">Perspectiva — corporativo fotográfico</option><option value="essencial">Essencial — minimalismo</option><option value="revista">Revista — editorial</option><option value="cromatico">Cromático — cor e fotografia</option><option value="tracos">Traços — geometria criativa</option><option value="manual">Documentação técnica — clara</option><option value="manual-noite">Documentação técnica — escura</option></select></label>
|
|
818
|
+
<label class="field-label">Tema <select id="ai-deck-theme" class="form-control"><option value="">A IA escolhe</option></select></label>
|
|
819
|
+
</div>
|
|
820
|
+
<div class="form-row">
|
|
821
|
+
<label class="field-label">Arquivos <input id="ai-deck-files" type="file" multiple accept=".pdf,.docx,.xlsx,.pptx,.txt,.md,.csv" class="form-control" title="pdf, docx, xlsx, pptx, txt, md, csv: a IA lê o conteúdo"></label>
|
|
822
|
+
<label class="field-label">Link <span class="form-inline"><input id="ai-deck-link" type="url" placeholder="https://…" class="form-control"><button type="button" id="ai-deck-add-link" class="btn btn-secondary">Anexar</button></span></label>
|
|
823
|
+
</div>
|
|
824
|
+
<div id="ai-deck-materials" class="chat-attachments" hidden></div>
|
|
825
|
+
<div id="ai-deck-status" class="status-line"></div>
|
|
826
|
+
</div>
|
|
827
|
+
<div class="modal-dialog-footer">
|
|
828
|
+
<button id="btn-cancel-ai-deck" class="btn btn-secondary">Cancelar</button>
|
|
829
|
+
<button id="btn-run-ai-deck" class="btn btn-primary">Gerar apresentação</button>
|
|
830
|
+
</div>
|
|
831
|
+
</div>
|
|
832
|
+
</div>
|
|
833
|
+
|
|
834
|
+
<div id="toast-notification" class="toast hidden" role="status"></div>
|
|
835
|
+
<!-- atalho para o chat quando a aba dele não está à vista -->
|
|
836
|
+
<button id="chat-fab" class="chat-fab hidden" type="button" title="Voltar para o chat" aria-label="Voltar para o chat"><i class="ic" data-ic="sparkles"></i><span class="chat-fab-dot" aria-hidden="true"></span></button>
|
|
837
|
+
|
|
838
|
+
<script src="fit.js"></script>
|
|
839
|
+
<script src="ui-icons.js"></script>
|
|
840
|
+
<script src="calc-fields.js"></script>
|
|
841
|
+
<script src="art-preview.js"></script>
|
|
842
|
+
<script src="api-collections.js"></script>
|
|
843
|
+
<script src="developer-fields.js"></script>
|
|
844
|
+
<script src="lab-fields.js"></script>
|
|
845
|
+
<script src="slide-form.js"></script>
|
|
846
|
+
<script src="screenshot-editor.js"></script>
|
|
847
|
+
<script src="formula.js"></script>
|
|
848
|
+
<script src="calc.js"></script>
|
|
849
|
+
<script src="science.js"></script>
|
|
850
|
+
<script src="diagram.js"></script>
|
|
851
|
+
<script src="decision-lab.js"></script>
|
|
852
|
+
<script src="visual-editor.js"></script>
|
|
853
|
+
<script src="inspector.js"></script>
|
|
854
|
+
<script type="module" src="csv.js"></script>
|
|
855
|
+
<script src="viewers.js"></script>
|
|
856
|
+
<script src="explorer.js"></script>
|
|
857
|
+
<script src="merge-decks.js"></script>
|
|
858
|
+
<script src="history.js"></script>
|
|
859
|
+
<script src="review-ui.js"></script>
|
|
860
|
+
<script src="share-ui.js"></script>
|
|
861
|
+
<script src="slide-clipboard.js"></script>
|
|
862
|
+
<script src="chat-progress.js"></script>
|
|
863
|
+
<script src="workspace.js"></script>
|
|
864
|
+
<script src="studio-awareness.js"></script>
|
|
865
|
+
<script src="app.js"></script>
|
|
866
|
+
</body>
|
|
867
|
+
</html>
|