codewhale-the-dev-dashboard / components /code-explanation.js
Abmacode12's picture
Écran de gestion de projets (Première colonne) :
e9fb731 verified
class CustomCodeExplanation extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
this.render();
}
static get observedAttributes() {
return ['explanation', 'generated-code'];
}
attributeChangedCallback(name, oldValue, newValue) {
if (oldValue !== newValue) {
this.render();
}
}
render() {
const explanation = this.getAttribute('explanation') || 'Select a tool to generate code and see explanations';
const generatedCode = this.getAttribute('generated-code') || '// No code generated yet';
this.shadowRoot.innerHTML = `
<style>
:host {
display: block;
}
.header {
display: flex;
align-items: center;
margin-bottom: 1.5rem;
}
.header i {
margin-right: 0.75rem;
color: #3b82f6;
}
.header h2 {
font-size: 1.25rem;
font-weight: 600;
color: #1e293b;
}
.explanation-box {
background-color: #f8fafc;
border-radius: 0.5rem;
padding: 1.5rem;
margin-bottom: 1.5rem;
border: 1px solid #e2e8f0;
}
.code-box {
background-color: #1e293b;
color: #f8fafc;
border-radius: 0.5rem;
padding: 1.5rem;
font-family: monospace;
white-space: pre-wrap;
position: relative;
overflow: hidden;
}
.code-box::before {
content: 'CODE';
position: absolute;
top: 0;
right: 0;
background-color: #3b82f6;
color: white;
font-size: 0.75rem;
padding: 0.25rem 0.5rem;
border-bottom-left-radius: 0.5rem;
}
.code-tabs {
display: flex;
margin-bottom: -1px;
}
.code-tab {
padding: 0.5rem 1rem;
background-color: #e2e8f0;
border: 1px solid #cbd5e1;
border-bottom: none;
border-radius: 0.375rem 0.375rem 0 0;
margin-right: 0.25rem;
cursor: pointer;
}
.code-tab.active {
background-color: #1e293b;
color: white;
border-color: #1e293b;
}
</style>
<div class="header">
<i data-feather="book-open"></i>
<h2>Explication du Code</h2>
</div>
<div class="explanation-box">
${explanation}
</div>
<div class="code-tabs">
<div class="code-tab active">CSS</div>
<div class="code-tab">HTML</div>
<div class="code-tab">JS</div>
</div>
<div class="code-box">
${generatedCode}
</div>
`;
feather.replace();
}
}
customElements.define('custom-code-explanation', CustomCodeExplanation);