/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/ketchup-gherkin@1.0.11/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
const fs=require("fs"),path=require("path"),express=require("express"),glob=require("glob");let customConfig={};const customConfigPath=path.join(process.cwd(),"ketchup.json");fs.existsSync(customConfigPath)&&(customConfig=JSON.parse(fs.readFileSync(customConfigPath,"utf8")));const port=customConfig.port||3002,app=express(),featuresPath="././Features/**/*.feature",buttonText=customConfig.buttonText,resultsTile=customConfig.resultsTitle,inputPlaceHolder=customConfig.inputPlaceHolder,projectName=customConfig.projectName;function readFeatures(n){const e=glob.sync(n);return e.length?e.map((n=>{const e=fs.readFileSync(n,"utf8");return{name:path.basename(n),content:e}})):(console.log("Feature not found in",n),[])}function generateNavigation(n,e=""){const o=path.basename(path.dirname(__dirname));let a=`<div class="navigation">\n        <h1><a href="/">${projectName||o}</a></h1>\n        <form action="/search" method="get">\n            <input type="text" name="q" placeholder="${inputPlaceHolder}" value="${e}" />\n            <button type="submit">${buttonText}</button>\n        </form>\n        <ul>`;return n.forEach((n=>{const e=n.name.replace(".feature","");a+=`<li><a href="/feature/${e}">${e}</a></li>`})),a+="</ul></div>",a}function generateFeatureHTML(n,e){n.name.replace(".feature","");const o=generateNavigation(e),a=n.content.replace(/Feature:(.*)/g,"<h1>Feature: $1</h1>").replace(/Funcionalidade:(.*)/g,"<h1>Funcionalidade: $1</h1>").replace(/Scenario:(.*)/g,"<h2>Scenario: $1</h2>").replace(/Cenário:(.*)/g,"<h2>Cenário: $1</h2>").replace(/\b(Dado|Quando|E|Mas|Então)\b/g,"<b>$1</b>").replace(/\b(Given|When|And|But|Then)\b/g,"<b>$1</b>").replace(/\n/g,"<br>");return`<html><head><style>${cssStyles()}</style></head><body>${o}<div class="content">${a}</div></body></html>`}function generateIndexHTML(n){const e=generateNavigation(n);return`<html><head><style>${cssStyles()}</style></head><body>${e}</body></html>`}function generateSearchResultsHTML(n,e,o){const a=generateNavigation(e);let t=`<div class="content"><h2>${resultsTile}</h2>`;return n.length?(t+="<ul>",n.forEach((n=>{const e=n.name.replace(".feature","");t+=`<li><a href="/feature/${e}" style="display: block; text-decoration: none;">`,t+=`<strong>${e}</strong>`;let a=n.content;const r=new RegExp(`(${o})`,"gi");a=a.replace(r,"<mark>$1</mark>"),a=a.replace(/(\bFeature: |\bFuncionalidade: |\bScenario: |\bCenário: |\bGiven |\bDado |\bWhen |\bQuando |\bAnd |\bE |\bBut|\bMas |\bThen |\bEntão )(.+?)(?=\n|$)/gi,(n=>`<b>${n}</b><br><br>`)),t+=`<p>${a.substring(0,200)}...</p>`,t+="</a></li>"})),t+="</ul>"):t+="<p>Feature not found.</p>",t+="</div>",`<html><head><style>${cssStyles()}</style></head><body>${a}${t}</body></html>`}function cssStyles(){return`\n        /* Reset básico para remover margens e padding */\n        body, h1, h2, ul, li, form, input, button {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        /* Estilos globais do corpo */\n        body {\n            font-family: 'Roboto', sans-serif; /* Fonte mais moderna e limpa */\n            background-color: #F7F7F7; /* Cor de fundo suave */\n            color: ${customConfig["font-p-color"]||"#484848"}; /* Cor de texto inspirada no Airbnb */\n        }\n\n        /* Navegação lateral */\n        .navigation {\n            float: left;\n            width: 17%;\n            height: 100vh;\n            background: #FFFFFF; /* Fundo branco para a barra de navegação */\n            padding: 20px;\n            box-shadow: 0 2px 4px rgba(0,0,0,0.1); /* Sombra sutil para profundidade */\n            overflow: auto;\n        }\n\n        /* Estilo para o título na navegação */\n        .navigation h1 a {\n            color: #FF5A5F; /* Cor vibrante do Airbnb */\n            text-decoration: none;\n            font-size: 24px; /* Tamanho maior para o título */\n            display: block; /* Torna o título um bloco para facilitar o clique */\n            margin-bottom: 20px; /* Espaço abaixo do título */\n        }\n\n        /* Formulário de pesquisa na navegação */\n        form {\n            margin-bottom: 20px;\n        }\n\n        input[type="text"] {\n            width: 100%; /* Largura completa menos o padding */\n            padding: 10px;\n            margin-top: 8px;\n            border: 1px solid #ccc;\n            border-radius: 4px;\n        }\n\n        button {\n            padding: 10px 20px;\n            background-color: ${customConfig["button-color"]||"#FF5A5F"};\n            color: white;\n            border: none;\n            border-radius: 4px;\n            cursor: pointer;\n            display: block; /* Garante que o botão não fique ao lado do input */\n            width: 100%;\n            margin-top: 10px;\n        }\n\n        button:hover {\n            background-color: ${customConfig["button-hover"]||"#E0483E"};\n        }\n\n        /* Lista de features na navegação */\n        .navigation ul {\n            list-style-type: none; /* Remove marcadores de lista */\n        }\n\n        /* Links de navegação */\n        .navigation li a {\n            display: block;\n            padding: 10px;\n            color: #333333; /* Texto mais escuro para melhor legibilidade */\n            text-decoration: none;\n            transition: background-color 0.3s, color 0.3s; /* Transição suave para hover */\n        }\n\n        /* Efeito hover nos links */\n        .navigation li a:hover {\n            background-color: #FF5A5F; /* Fundo do link ao passar o mouse */\n            color: white; /* Texto branco ao passar o mouse */\n        }\n\n        /* Área de conteúdo principal */\n        .content {\n            margin-left: 20%; /* Espaço para a barra lateral de navegação */\n            padding: 20px; /* Padding dentro do conteúdo */\n            background-color: #F7F7F7; /* Fundo claro para o conteúdo */\n            min-height: 100vh; /* Altura mínima */\n        }\n\n        /* Cabeçalhos dentro do conteúdo */\n        h1, h2 {\n            color: ${customConfig["font-title-color"]||"#333"}; /* Cor escura para os títulos */\n            margin-top: 10px; /* Espaço no topo dos cabeçalhos */\n        }\n\n        /* Palavras-chave Gherkin destacadas */\n        b {\n            color: ${customConfig["font-key-color"]||"#007A87"}; /* Cor para palavras-chave, exemplo com um tom teal */\n            font-weight: bold; /* Negrito para destacar */\n        }\n\n        /* Realce para termos pesquisados */\n        mark {\n            background-color: ${customConfig["mark-color"]||"#FF5A5F80"}; /* Fundo vermelho claro para destacar texto */\n            color: ${customConfig["font-mark-color"]||"#333"}; /* Texto escuro para contraste */\n        }\n\n        /* Estilos para lista de resultados */\n        .content ul {\n            margin-top: 20px;\n            list-style-type: none; /* Remove marcadores de lista */\n            padding-left: 0; /* Remove padding padrão */\n        }\n\n        .content li {\n            margin-bottom: 15px; /* Espaço entre itens da lista */\n        }\n\n        .content li a {\n            font-size: 18px; /* Tamanho maior para os links de feature */\n            // color: #FF5A5F; /* Cor vibrante do Airbnb */\n            text-decoration: none; /* Sem sublinhado */\n        }\n\n        .content li a:hover {\n            text-decoration: underline; /* Sublinhado ao passar o mouse */\n        }\n\n        .content p {\n            margin-top: 10px; /* Espaçamento após o título da feature */\n            font-weight: bold; /* Negrito para destacar */\n        }\n\n        strong {\n            color: #484848;\n        }\n    `}app.get("/search",((n,e)=>{const o=n.query.q,a=readFeatures(featuresPath),t=generateSearchResultsHTML(a.filter((n=>n.name.includes(o)||n.content.toLowerCase().includes(o.toLowerCase()))),a,o);e.send(t)})),app.get("/",((n,e)=>{const o=generateIndexHTML(readFeatures(featuresPath));e.send(o)})),app.get("/feature/:name",((n,e)=>{const o=readFeatures(featuresPath),a=o.find((e=>e.name.replace(".feature","")===n.params.name));if(a){const n=generateFeatureHTML(a,o);e.send(n)}else e.status(404).send("Feature not found")})),app.listen(port,(()=>{console.log(`Running in http://localhost:${port}`)}));
//# sourceMappingURL=/sm/b8a7338f52746e8af77eb26d68c7005525e27a7511ddeec18f70e8d34090c1af.map