Primeros Pasos

Migración

Guía para migrar de Spartan 2.x (TailwindCSS 3) a Spartan 3.x (TailwindCSS 4).

Esta guía cubre la migración de Spartan 2.x (TailwindCSS 3) a Spartan 3.x (TailwindCSS 4). La migración implica pasar del sistema de plugins en JavaScript a una configuración íntegramente basada en CSS.

Prerequisitos

  • Node.js 20.19 o superior
  • NPM ^10
  • Un proyecto existente que use Spartan 2.x

Pasos de migración

Remover el plugin de Spartan

En tu tailwind.config.js, elimina la ruta de contenido de Spartan y su plugin:

tailwind.config.js
module.exports = {
  content: [
    './src/**/*.{vue,js,ts,jsx,tsx}',
-   'node_modules/@placetopay/spartan-vue/dist/**/*.js',
  ],
  plugins: [
-   require('@placetopay/spartan-vue/plugin'),
  ],
}

Ejecutar la herramienta de actualización de TailwindCSS

Usa la herramienta oficial de migración de TailwindCSS para actualizar tu proyecto automáticamente:

npx @tailwindcss/upgrade

Esta herramienta se encarga automáticamente de:

  • Migrar tu tailwind.config.js a configuración basada en CSS
  • Actualizar las clases de utilidades que cambiaron
  • Identificar incompatibilidades
Revisa la guía oficial de migración de TailwindCSS v4 para información detallada sobre los breaking changes.

Remover la configuración de PostCSS (si la usas)

Si estabas usando PostCSS con TailwindCSS 3, elimina el archivo de configuración y las dependencias:

Terminal
rm postcss.config.js
package.json
{
  "devDependencies": {
-   "@tailwindcss/postcss": "^4.1.18",
-   "postcss": "^8.4.33",
  }
}

Instalar el plugin de Vite de TailwindCSS (si usas Vite)

Si tu proyecto usa Vite, instala el plugin oficial de TailwindCSS para Vite:

npm install -D @tailwindcss/vite

Y agrégalo a tu configuración de Vite:

vite.config.js
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite'

export default defineConfig({
  plugins: [
    vue(),
    tailwindcss(),
  ],
})

Actualizar Spartan a 3.x

Instala la última versión de Spartan:

npm install @placetopay/spartan-vue@latest

Actualizar los imports de estilos

Hay dos cambios en cómo se importan los estilos. Primero, remove el import de CSS que tenías en tu entry point:

main.ts
- import '@placetopay/spartan-vue/style.css'
  import { createApp } from 'vue'
  import App from './App.vue'

Luego, agrega el import de Spartan en tu archivo de estilos CSS principal:

styles.css
@import "@placetopay/spartan-vue/styles.css";

@source '../src/**/*.{vue,js,ts,jsx,tsx}';

E importa ese archivo de estilos desde tu entry point:

main.ts
import './styles.css'

import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

Actualizar imports de colores de Tailwind (si los usas)

TailwindCSS 4 cambió la forma de exportar colores. Si importabas colores de Tailwind en archivos JS/TS:

- // Tailwind 3 (ya no funciona)
- import { red, blue } from 'tailwindcss/colors'

+ // Tailwind 4
+ import colors from 'tailwindcss/colors'
+
+ const red = colors.red
+ const blue = colors.blue

Verificar y testear

Realiza un build y levanta el servidor de desarrollo para validar que todo funciona:

Terminal
npm run build
npm run dev

Revisa visualmente tu aplicación para asegurarte de que todos los estilos se aplican correctamente.

Breaking changes

TailwindCSS 4

  • Configuración: Ahora se hace desde CSS con @theme, @plugin, entre otros, en lugar de tailwind.config.js
  • Dark mode: Se configura mediante @custom-variant en CSS
  • Fuentes de contenido: Se usa la directiva @source en CSS en lugar del array content en el archivo de configuración
  • Utilidad ring: ring-3 ya no es válido, usar ring con ancho personalizado si es necesario

Spartan 3.x

  • Sin plugin de JavaScript: Toda la configuración se hace desde CSS
  • Imports simplificados: Un solo @import de styles.css incluye todo
  • Peer dependencies actualizados: Requiere TailwindCSS 4.x

SButton

Motivación

La API anterior de SButton usaba un enum plano de variant (primary | secondary | danger | outline | link) que mezclaba la intención de color con modificadores de presentación. Esto hacía imposible crear combinaciones como un botón danger outline o un botón secondary link — cada combinación requería su propio valor de variante, generando una API rígida que no podía representar todos los estados definidos en el sistema de diseño de Figma.

Ventajas

  • Modificadores composables: variant define la paleta de color (primary, secondary, danger), mientras que outline, link y circular son modificadores booleanos independientes que se pueden combinar libremente
  • 9+ combinaciones nuevas: variant="danger" outline, variant="secondary" link, variant="danger" link y más — todas previamente imposibles
  • Alineación con Figma: El nuevo modelo coincide directamente con la estructura del sistema de diseño, eliminando la brecha entre diseño e implementación
  • Nuevo modo circular: Botones de solo icono con forma perfectamente redonda, ideales para barras de herramientas y UIs compactas

Migración

outline y link ya no son valores de la prop variant. Ahora son props booleanas independientes:

- <SButton variant="outline">Guardar</SButton>
+ <SButton outline>Guardar</SButton>

- <SButton variant="link">Cancelar</SButton>
+ <SButton link>Cancelar</SButton>

Ambos modificadores usan por defecto la variante primary, preservando el comportamiento visual anterior sin cambios adicionales.

Nuevas combinaciones disponibles:

<!-- Danger outline (antes imposible) -->
<SButton variant="danger" outline>Eliminar</SButton>

<!-- Secondary link / transparente (antes imposible) -->
<SButton variant="secondary" link>Cancelar</SButton>

<!-- Botón circular con icono (nuevo) -->
<SButton circular :icon="AddIcon" />

Color primario personalizado

Si en Spartan 2.x personalizabas el color primario mediante el plugin, necesitas migrar esa configuración a variables CSS:

- // tailwind.config.js (Spartan 2.x)
- plugins: [
-   require('@placetopay/spartan-vue/plugin')({
-     primary: {
-       50: '228 242 253',
-       500: '33 150 243',
-       // ...
-     }
-   })
- ]

+ /* styles.css (Spartan 3.x) */
+ @import "@placetopay/spartan-vue/styles.css";
+
+ @source '../src/**/*.{vue,js,ts,jsx,tsx}';
+
+ @theme {
+   --color-spartan-primary-50:  rgb(228 242 253);
+   --color-spartan-primary-100: rgb(187 222 251);
+   --color-spartan-primary-200: rgb(144 202 249);
+   --color-spartan-primary-300: rgb(100 181 246);
+   --color-spartan-primary-400: rgb(66 165 245);
+   --color-spartan-primary-500: rgb(33 150 243);
+   --color-spartan-primary-600: rgb(30 132 229);
+   --color-spartan-primary-700: rgb(25 103 196);
+   --color-spartan-primary-800: rgb(21 78 148);
+   --color-spartan-primary-900: rgb(13 42 84);
+ }
Copyright © 2026