Files
qwen3-6-lora/data/raw/sanitized/plans/hay-errores-en-el-lively-wadler.md

4.3 KiB

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
$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-editborder-color: var(--color-gold, #EABF2D) (inline style)
  • icon-deleteborder-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-goldborder-gold
    • outline-darkborder-black
    • outline-lightborder-white
    • ghostborder-black
    • circularborder-black
    • icon-editborder-gold
    • icon-deleteborder-danger
    • file-uploadborder-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