Fase 2: 04_sanitize.py - scrubbing de secretos de skills/agentes/plans (10 secretos unicos, gate en verde)
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# Plan: Migrar bordes de inline styles a SCSS
|
||||
|
||||
## Contexto
|
||||
|
||||
El CI falla porque el componente `Button` usa inline styles (`style={{ borderWidth, borderStyle, borderColor }}`) para los bordes. Los tests (Jest y Cypress) esperan clases CSS como `border-gold` y `border-black` que ya no se generan. El usuario quiere que los estilos se escriban con SCSS en lugar de inline styles.
|
||||
|
||||
## Cambios necesarios
|
||||
|
||||
### 1. Crear `src/components/Button/Button.scss`
|
||||
|
||||
Crear archivo SCSS con clases por variante para bordes. Cada variante que tenga borde (todos excepto `primary`) recibe:
|
||||
- `border-width: 3px`
|
||||
- `border-style: solid`
|
||||
- `border-color` con el color correspondiente
|
||||
|
||||
```scss
|
||||
$border-width: 3px;
|
||||
$gold: #EABF2D;
|
||||
$amber: #D4880F;
|
||||
$black: #1A1A2E;
|
||||
$white: #FFFFFF;
|
||||
$danger: #DE3626;
|
||||
|
||||
.btn {
|
||||
// variantes con borde
|
||||
&.w-btnOutlineGold,
|
||||
&.w-btnOutline,
|
||||
&.w-btnOutlineLight,
|
||||
&.w-btnCircle,
|
||||
&.w-btnIcon,
|
||||
&.file-upload {
|
||||
border-width: $border-width;
|
||||
border-style: solid;
|
||||
}
|
||||
|
||||
&.w-btnOutlineGold {
|
||||
border-color: $gold;
|
||||
}
|
||||
|
||||
&.w-btnOutline {
|
||||
border-color: $black;
|
||||
}
|
||||
|
||||
&.w-btnOutlineLight {
|
||||
border-color: $white;
|
||||
}
|
||||
|
||||
&.w-btnCircle {
|
||||
border-color: $black;
|
||||
}
|
||||
|
||||
&.w-btnIcon {
|
||||
// icon-edit usa gold, icon-delete usa danger — se maneja con clases adicionales
|
||||
}
|
||||
|
||||
&.file-upload {
|
||||
border-color: $gold;
|
||||
}
|
||||
|
||||
// icon-edit específico
|
||||
&.w-btnIcon--edit {
|
||||
border-color: $gold;
|
||||
}
|
||||
|
||||
// icon-delete específico
|
||||
&.w-btnIcon--delete {
|
||||
border-color: $danger;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Reflexión:** El componente actual no tiene clases separadas para icon-edit vs icon-delete en el border-color. Ambas comparten `w-btnIcon` pero tienen bordes distintos (gold vs danger). Necesito revisar si se puede resolver con clases adicionales o con un approach diferente.
|
||||
|
||||
Mirando el código actual:
|
||||
- `icon-edit` → `border-color: var(--color-gold, #EABF2D)` (inline style)
|
||||
- `icon-delete` → `border-color: var(--color-danger, #DE3626)` (inline style)
|
||||
|
||||
Opción A: Agregar clases `border-gold` y `border-danger` al button y manejar el color con CSS custom properties o clases específicas.
|
||||
Opción B: Usar `data-variant` attribute y selector `[data-variant="icon-edit"]`.
|
||||
Opción C: Agregar clases específicas `btn--icon-edit` y `btn--icon-delete`.
|
||||
|
||||
La opción C es la más limpia y consistente con el patr Tailwind del proyecto.
|
||||
|
||||
### 2. Actualizar `src/components/Button/index.tsx`
|
||||
|
||||
- **Eliminar** `BORDER_WIDTH`, `variantBorders`, `variantBorderColors`, `getButtonStyle()`
|
||||
- **Eliminar** `style={getButtonStyle(variant)}` de los elementos renderizados
|
||||
- **Agregar** clases CSS específicas para bordes:
|
||||
- `outline-gold` → `border-gold`
|
||||
- `outline-dark` → `border-black`
|
||||
- `outline-light` → `border-white`
|
||||
- `ghost` → `border-black`
|
||||
- `circular` → `border-black`
|
||||
- `icon-edit` → `border-gold`
|
||||
- `icon-delete` → `border-danger`
|
||||
- `file-upload` → `border-gold`
|
||||
- **Importar** el SCSS al inicio del archivo: `import './Button.scss';`
|
||||
|
||||
### 3. Actualizar tests
|
||||
|
||||
**`Button.test.tsx`** (Jest):
|
||||
- Línea 58: `expect(outlineGoldBtn).toHaveClass('border-gold')` → ya funciona con la nueva clase
|
||||
- Línea 62: `expect(outlineDarkBtn).toHaveClass('border-black')` → ya funciona con la nueva clase
|
||||
|
||||
**`Button.test.cy.tsx`** (Cypress):
|
||||
- Línea 13: `cy.get('button').should('have.class', 'border-gold')` → ya funciona
|
||||
- Línea 19: `cy.get('button').should('have.class', 'border-black')` → ya funciona
|
||||
|
||||
Los tests de Cypress también verifican `border-top-width` con `have.css` — eso seguirá funcionando porque el border-width se define en SCSS.
|
||||
|
||||
### 4. Actualizar Storybook
|
||||
|
||||
- `Button.stories.tsx`: Agregar `border-gold` y `border-black` como opciones de control si aplica
|
||||
|
||||
## Archivos a modificar
|
||||
|
||||
| Archivo | Acción |
|
||||
|---------|--------|
|
||||
| `src/components/Button/Button.scss` | **Crear** — clases SCSS para bordes |
|
||||
| `src/components/Button/index.tsx` | **Editar** — eliminar inline styles, agregar clases CSS, importar SCSS |
|
||||
| `src/components/Button/Button.stories.tsx` | **Editar** — actualizar si es necesario |
|
||||
|
||||
## Verificación
|
||||
|
||||
1. `npm test` — todos los tests deben pasar (incluyendo las assertions de `border-gold` y `border-black`)
|
||||
2. `npm run build-storybook` — Storybook debe compilar sin errores
|
||||
3. `npm run build` — el bundle debe generar correctamente
|
||||
4. CI: Push a la rama y verificar que Gitea Actions pase en ambos jobs
|
||||
Reference in New Issue
Block a user