const { Card, Button, Icon, IconButton, SearchField, EmptyState, Badge, Tag } = window.ACRFlowDesignSystem_ba1e9c; /** Chave que o dashboard usa para pedir que um procedimento abra direto. */ const CHAVE_ABRIR = "flowtix.procAbrir"; /** Preferência do usuário: esconder a árvore de pastas para ler o documento em tela cheia. */ const CHAVE_PASTAS_OCULTAS = "flowtix.procPastasOcultas"; /** A home da wiki (path "home") é a página de apresentação do módulo. */ const paginaInicial = (lista) => lista.find((p) => p.path === "home") || null; /** Monta a árvore de pastas a partir dos caminhos da wiki ("Contabilidade/fechamento"). */ function montarArvore(paginas) { const raiz = { nome: "", caminho: "", filhos: {}, pagina: null }; for (const p of paginas) { const partes = p.path.split("/").filter(Boolean); let no = raiz; partes.forEach((parte, i) => { const caminho = partes.slice(0, i + 1).join("/"); no.filhos[parte] = no.filhos[parte] || { nome: parte, caminho, filhos: {}, pagina: null }; no = no.filhos[parte]; }); no.pagina = p; } return raiz; } const ordenar = (nos) => Object.values(nos).sort((a, b) => { const pa = Object.keys(a.filhos).length > 0, pb = Object.keys(b.filhos).length > 0; if (pa !== pb) return pa ? -1 : 1; // pastas primeiro return (a.pagina ? a.pagina.title : a.nome).localeCompare(b.pagina ? b.pagina.title : b.nome, "pt-BR"); }); function ItemArvore({ no, nivel, atual, abertas, onAlternar, onAbrir }) { const filhos = ordenar(no.filhos); const pasta = filhos.length > 0; const aberta = abertas.has(no.caminho); const ativo = no.pagina && no.pagina.id === atual; return ( <> {pasta && aberta ? filhos.map((f) => ( )) : null} ); } /** Estilo do conteúdo dentro do iframe, sobre os tokens do FlowTix. */ const CSS_CONTEUDO = ` html,body{margin:0;background:var(--surface-card);color:var(--text-body);font:var(--type-body);line-height:1.65} body{padding:2px 2px 8px;overflow:hidden;word-wrap:break-word} h1,h2,h3,h4,h5,h6{color:var(--text-strong);font-family:var(--font-display);line-height:1.3;margin:1.4em 0 .5em} h1{font-size:24px}h2{font-size:20px;padding-bottom:6px;border-bottom:1px solid var(--border-subtle)}h3{font-size:17px}h4{font-size:15px} body>:first-child{margin-top:0} a{color:var(--text-brand)} a.toc-anchor{display:none} img{max-width:100%;height:auto;border-radius:var(--radius-md)} img[data-wiki-src]:not([src]){min-height:40px;min-width:80px;background:var(--surface-muted)} code{font-family:var(--font-mono,monospace);font-size:.9em;background:var(--surface-muted);padding:1px 5px;border-radius:4px} pre{background:var(--surface-muted);padding:12px 14px;border-radius:var(--radius-md);overflow:auto} pre code{background:none;padding:0} table{border-collapse:collapse;width:100%;margin:12px 0;display:block;overflow-x:auto} th,td{border:1px solid var(--border-subtle);padding:7px 10px;text-align:left;vertical-align:top} th{background:var(--surface-muted);color:var(--text-strong)} blockquote{margin:12px 0;padding:10px 14px;border-left:3px solid var(--border-strong,var(--border-subtle));background:var(--surface-muted);border-radius:0 var(--radius-md) var(--radius-md) 0} blockquote.is-info{border-left-color:#3b82f6}blockquote.is-success{border-left-color:#16a34a} blockquote.is-warning{border-left-color:#f59e0b}blockquote.is-danger{border-left-color:#dc2626} blockquote p{margin:4px 0} hr{border:none;border-top:1px solid var(--border-subtle);margin:20px 0} ul,ol{padding-left:24px} video{display:block;width:100%;max-width:100%;height:auto;margin:12px 0;border-radius:var(--radius-md);background:#000} audio{display:block;width:100%;margin:12px 0} .wiki-abas{margin:20px 0} [role=tablist]{display:flex;flex-wrap:wrap;gap:2px;border-bottom:1px solid var(--border-subtle)} [role=tab]{background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:9px 14px;cursor:pointer;color:var(--text-muted);font:var(--type-body-strong)} [role=tab]:hover{color:var(--text-body)} [role=tab][aria-selected=true]{color:var(--text-brand);border-bottom-color:var(--text-brand)} [role=tab]:focus-visible{outline:2px solid var(--text-brand);outline-offset:-2px} .wiki-aba{padding-top:14px} .wiki-aba>:first-child{margin-top:0} `; /** Caminho do arquivo dentro da wiki, ou null se ele estiver em outro site. */ function caminhoWiki(src, wikiBase) { const rel = src.startsWith(wikiBase) ? src.slice(wikiBase.length) : src; return rel.startsWith("/") && !rel.startsWith("//") ? rel : null; } /** Troca o da wiki (componente Vue, que só funciona lá) por abas comuns. * Precisa vir antes da limpeza: o conteúdo de um