diff --git a/demos/demo-escss/estilos.escss b/demos/demo-escss/estilos.escss
new file mode 100644
index 00000000..ccb36732
--- /dev/null
+++ b/demos/demo-escss/estilos.escss
@@ -0,0 +1,109 @@
+/* EsCSS Demo - CSS con sintaxis en Español */
+
+* {
+ caja-dimensionamiento: caja-borde;
+ margen: 0;
+ relleno: 0;
+}
+
+cuerpo {
+ fuente-familia: sistema-ui, sans-serif;
+ linea-alto: 1.6;
+ fondo-color: humo-blanco;
+ color: gris-tenue;
+}
+
+.contenedor {
+ maximo-ancho: 1200px;
+ margen: 0 auto;
+ relleno: 2rem;
+}
+
+.titulo {
+ fuente-tamaño: 2.5rem;
+ fuente-peso: negrita;
+ margen-abajo: 0.5rem;
+ color: azul-real;
+}
+
+.descripcion {
+ fuente-tamaño: 1.25rem;
+ color: gris;
+ margen-abajo: 2rem;
+}
+
+/* Tarjeta con Flexbox */
+.tarjeta {
+ mostrar: flex;
+ flex-direccion: columna;
+ fondo-color: blanco;
+ borde-radio: 0.5rem;
+ relleno: 1.5rem;
+ caja-sombra: 0 4px 6px rgba(0, 0, 0, 0.1);
+ margen-abajo: 2rem;
+}
+
+.tarjeta-titulo {
+ fuente-tamaño: 1.5rem;
+ margen-abajo: 0.5rem;
+}
+
+.tarjeta-contenido {
+ color: gris;
+ margen-abajo: 1rem;
+}
+
+.boton {
+ mostrar: flex;
+ alinear-items: centro;
+ justificar-contenido: centro;
+ relleno: 0.75rem 1.5rem;
+ fondo-color: azul-real;
+ color: blanco;
+ borde: ninguno;
+ borde-radio: 0.25rem;
+ cursor: puntero;
+ fuente-tamaño: 1rem;
+ transicion: fondo-color 0.2s facilidad;
+ texto-decoracion: ninguno;
+}
+
+.boton:encima {
+ fondo-color: azul-medianoche;
+}
+
+/* Cuadrícula (Grid) */
+.cuadricula {
+ mostrar: cuadricula;
+ cuadricula-plantilla-columnas: repetir(auto-ajuste, minimo-maximo(200px, 1fr));
+ espacio: 1rem;
+}
+
+.cuadricula-elemento {
+ fondo-color: blanco;
+ relleno: 1.5rem;
+ texto-alinear: centro;
+ caja-sombra: 0 2px 4px rgba(0, 0, 0, 0.05);
+ transicion: transformar 0.2s facilidad;
+}
+.cuadricula-elemento:primer-hijo {
+ borde-radio: 0.5rem 0.5rem 0 0;
+}
+.cuadricula-elemento:ultimo-hijo {
+ borde-radio: 0 0 0.5rem 0.5rem;
+}
+
+.cuadricula-elemento:encima {
+ fondo-color: humo-blanco;
+}
+
+/* Media queries */
+@medios (maximo-ancho: 768px) {
+ .titulo {
+ fuente-tamaño: 2rem;
+ }
+
+ .contenedor {
+ relleno: 1rem;
+ }
+}
diff --git a/demos/demo-escss/fuente/indice.esjs b/demos/demo-escss/fuente/indice.esjs
new file mode 100644
index 00000000..7a820216
--- /dev/null
+++ b/demos/demo-escss/fuente/indice.esjs
@@ -0,0 +1,24 @@
+// Ejemplo EsJS: fecha/hora actual y contador de clics en la cuadrícula
+
+const fechaActualElemento = document.getElementById('fecha-actual')
+
+funcion actualizarFecha() {
+ fechaActualElemento.textContent = crear Fecha().aCadenaLocalizada()
+}
+
+actualizarFecha()
+establecerIntervalo(actualizarFecha, 1000)
+
+// Contador de clics por elemento
+mut clics = { 'el-1': 0, 'el-2': 0, 'el-3': 0, 'el-4': 0 }
+
+const ids = ['el-1', 'el-2', 'el-3', 'el-4']
+ids.paraCada((id) => {
+ const elemento = document.getElementById(id)
+ const spanClicks = elemento.querySelector('.clicks')
+
+ elemento.addEventListener('click', () => {
+ clics[id]++
+ spanClicks.textContent = clics[id]
+ })
+})
diff --git a/demos/demo-escss/indice.eshtml b/demos/demo-escss/indice.eshtml
new file mode 100644
index 00000000..9ca58389
--- /dev/null
+++ b/demos/demo-escss/indice.eshtml
@@ -0,0 +1,45 @@
+
+
+
+
+
+ Demo EsCSS
+
+
+
+
+
+ EsCSS Demo
+
+ CSS con sintaxis en Español. Fecha y hora:
+ —
+
+
+
+ Tarjeta de Ejemplo
+
+ Este es un ejemplo de EsCSS, donde puedes escribir CSS usando
+ propiedades en español.
+
+
+ Más información
+
+
+
+
+
+ Elemento 1 · 0 clics
+
+
+ Elemento 2 · 0 clics
+
+
+ Elemento 3 · 0 clics
+
+
+ Elemento 4 · 0 clics
+
+
+
+
+
diff --git a/demos/demo-escss/package.json b/demos/demo-escss/package.json
new file mode 100644
index 00000000..2add4bc1
--- /dev/null
+++ b/demos/demo-escss/package.json
@@ -0,0 +1,32 @@
+{
+ "name": "@es-js/demo-escss",
+ "version": "0.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "vite --host",
+ "build": "vite build",
+ "preview": "vite preview",
+ "format": "prettier --write ."
+ },
+ "dependencies": {
+ "@es-js/vite-plugin-escss": "workspace:^",
+ "@es-js/vite-plugin-eshtml": "workspace:^"
+ },
+ "devDependencies": {
+ "@es-js/vite-plugin-esjs": "0.1.0-beta.1",
+ "prettier": "^3.3.3",
+ "prettier-plugin-escss": "workspace:^",
+ "prettier-plugin-eshtml": "0.0.1-alpha.0",
+ "prettier-plugin-esjs": "0.1.0-beta.1",
+ "vite": "^5.3.3"
+ },
+ "prettier": {
+ "plugins": [
+ "prettier-plugin-escss",
+ "prettier-plugin-eshtml",
+ "prettier-plugin-esjs"
+ ],
+ "singleQuote": true,
+ "semi": false
+ }
+}
diff --git a/demos/demo-escss/pnpm-lock.yaml b/demos/demo-escss/pnpm-lock.yaml
new file mode 100644
index 00000000..dd217031
--- /dev/null
+++ b/demos/demo-escss/pnpm-lock.yaml
@@ -0,0 +1,1161 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+ .:
+ dependencies:
+ '@es-js/vite-plugin-escss':
+ specifier: workspace:^
+ version: link:../../packages/vite-plugin-escss
+ '@es-js/vite-plugin-eshtml':
+ specifier: workspace:^
+ version: link:../../packages/vite-plugin-eshtml
+ devDependencies:
+ '@es-js/vite-plugin-esjs':
+ specifier: 0.1.0-beta.1
+ version: 0.1.0-beta.1
+ prettier:
+ specifier: ^3.3.3
+ version: 3.8.0
+ prettier-plugin-escss:
+ specifier: workspace:^
+ version: link:../../packages/prettier-plugin-escss
+ prettier-plugin-eshtml:
+ specifier: 0.0.1-alpha.0
+ version: 0.0.1-alpha.0(prettier@3.8.0)
+ prettier-plugin-esjs:
+ specifier: 0.1.0-beta.1
+ version: 0.1.0-beta.1(prettier@3.8.0)
+ vite:
+ specifier: ^5.3.3
+ version: 5.4.21
+
+packages:
+ '@es-js/vite-plugin-esjs@0.1.0-beta.1':
+ resolution:
+ {
+ integrity: sha512-msV/XVIcVU58FNKWZ8Q4OzXZHRTZg4WciCPYyalZwRTl2SZyKXUmQFYNHiBIaxFwPwx32cuqyL+3r/Zf9QqJqg==,
+ }
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.18.20':
+ resolution:
+ {
+ integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution:
+ {
+ integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.18.20':
+ resolution:
+ {
+ integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution:
+ {
+ integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.18.20':
+ resolution:
+ {
+ integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution:
+ {
+ integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.18.20':
+ resolution:
+ {
+ integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution:
+ {
+ integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==,
+ }
+ engines: { node: '>=12' }
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.18.20':
+ resolution:
+ {
+ integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution:
+ {
+ integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==,
+ }
+ engines: { node: '>=12' }
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==,
+ }
+ engines: { node: '>=12' }
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.18.20':
+ resolution:
+ {
+ integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution:
+ {
+ integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==,
+ }
+ engines: { node: '>=12' }
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.18.20':
+ resolution:
+ {
+ integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution:
+ {
+ integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==,
+ }
+ engines: { node: '>=12' }
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ resolution:
+ {
+ integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==,
+ }
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==,
+ }
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==,
+ }
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==,
+ }
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==,
+ }
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==,
+ }
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ resolution:
+ {
+ integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==,
+ }
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ resolution:
+ {
+ integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==,
+ }
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==,
+ }
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ resolution:
+ {
+ integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==,
+ }
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==,
+ }
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ resolution:
+ {
+ integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==,
+ }
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==,
+ }
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ resolution:
+ {
+ integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==,
+ }
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==,
+ }
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ resolution:
+ {
+ integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==,
+ }
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==,
+ }
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==,
+ }
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ resolution:
+ {
+ integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==,
+ }
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==,
+ }
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ resolution:
+ {
+ integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==,
+ }
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ resolution:
+ {
+ integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==,
+ }
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ resolution:
+ {
+ integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==,
+ }
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ resolution:
+ {
+ integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==,
+ }
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ resolution:
+ {
+ integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==,
+ }
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution:
+ {
+ integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==,
+ }
+
+ esbuild@0.18.20:
+ resolution:
+ {
+ integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==,
+ }
+ engines: { node: '>=12' }
+ hasBin: true
+
+ esbuild@0.21.5:
+ resolution:
+ {
+ integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==,
+ }
+ engines: { node: '>=12' }
+ hasBin: true
+
+ fsevents@2.3.3:
+ resolution:
+ {
+ integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==,
+ }
+ engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 }
+ os: [darwin]
+
+ nanoid@3.3.11:
+ resolution:
+ {
+ integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==,
+ }
+ engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 }
+ hasBin: true
+
+ picocolors@1.1.1:
+ resolution:
+ {
+ integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==,
+ }
+
+ postcss@8.5.6:
+ resolution:
+ {
+ integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==,
+ }
+ engines: { node: ^10 || ^12 || >=14 }
+
+ prettier-plugin-eshtml@0.0.1-alpha.0:
+ resolution:
+ {
+ integrity: sha512-bFZef1wqyswDyg8oaDZHhK9dCUjSiLB6RPvE5DxtI0nAIhszweOLOLmF1woUNWv5QO1qfvJDWOSu7tw0491K1g==,
+ }
+ peerDependencies:
+ prettier: ^3.0.0
+
+ prettier-plugin-esjs@0.1.0-beta.1:
+ resolution:
+ {
+ integrity: sha512-PpSDJykLanw/uMJNoNByYqJaWe3aEpgfOBdYxX/k3rt3dKZZeLnT02RM/rWSvnxPazADdJ7Rj2U8HiqYPOq3EA==,
+ }
+ peerDependencies:
+ prettier: ^3.0.0
+
+ prettier@3.8.0:
+ resolution:
+ {
+ integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==,
+ }
+ engines: { node: '>=14' }
+ hasBin: true
+
+ rollup@3.29.5:
+ resolution:
+ {
+ integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==,
+ }
+ engines: { node: '>=14.18.0', npm: '>=8.0.0' }
+ hasBin: true
+
+ rollup@4.55.1:
+ resolution:
+ {
+ integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==,
+ }
+ engines: { node: '>=18.0.0', npm: '>=8.0.0' }
+ hasBin: true
+
+ source-map-js@1.2.1:
+ resolution:
+ {
+ integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==,
+ }
+ engines: { node: '>=0.10.0' }
+
+ vite@4.5.14:
+ resolution:
+ {
+ integrity: sha512-+v57oAaoYNnO3hIu5Z/tJRZjq5aHM2zDve9YZ8HngVHbhk66RStobhb1sqPMIPEleV6cNKYK4eGrAbE9Ulbl2g==,
+ }
+ engines: { node: ^14.18.0 || >=16.0.0 }
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vite@5.4.21:
+ resolution:
+ {
+ integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==,
+ }
+ engines: { node: ^18.0.0 || >=20.0.0 }
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+snapshots:
+ '@es-js/vite-plugin-esjs@0.1.0-beta.1':
+ dependencies:
+ vite: 4.5.14
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - terser
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.18.20':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.18.20':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.18.20':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.18.20':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.18.20':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.18.20':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.18.20':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.18.20':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.18.20':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.18.20':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.18.20':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ esbuild@0.18.20:
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ fsevents@2.3.3:
+ optional: true
+
+ nanoid@3.3.11: {}
+
+ picocolors@1.1.1: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prettier-plugin-eshtml@0.0.1-alpha.0(prettier@3.8.0):
+ dependencies:
+ prettier: 3.8.0
+
+ prettier-plugin-esjs@0.1.0-beta.1(prettier@3.8.0):
+ dependencies:
+ prettier: 3.8.0
+
+ prettier@3.8.0: {}
+
+ rollup@3.29.5:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ rollup@4.55.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.55.1
+ '@rollup/rollup-android-arm64': 4.55.1
+ '@rollup/rollup-darwin-arm64': 4.55.1
+ '@rollup/rollup-darwin-x64': 4.55.1
+ '@rollup/rollup-freebsd-arm64': 4.55.1
+ '@rollup/rollup-freebsd-x64': 4.55.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.55.1
+ '@rollup/rollup-linux-arm64-gnu': 4.55.1
+ '@rollup/rollup-linux-arm64-musl': 4.55.1
+ '@rollup/rollup-linux-loong64-gnu': 4.55.1
+ '@rollup/rollup-linux-loong64-musl': 4.55.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.55.1
+ '@rollup/rollup-linux-ppc64-musl': 4.55.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.55.1
+ '@rollup/rollup-linux-riscv64-musl': 4.55.1
+ '@rollup/rollup-linux-s390x-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-musl': 4.55.1
+ '@rollup/rollup-openbsd-x64': 4.55.1
+ '@rollup/rollup-openharmony-arm64': 4.55.1
+ '@rollup/rollup-win32-arm64-msvc': 4.55.1
+ '@rollup/rollup-win32-ia32-msvc': 4.55.1
+ '@rollup/rollup-win32-x64-gnu': 4.55.1
+ '@rollup/rollup-win32-x64-msvc': 4.55.1
+ fsevents: 2.3.3
+
+ source-map-js@1.2.1: {}
+
+ vite@4.5.14:
+ dependencies:
+ esbuild: 0.18.20
+ postcss: 8.5.6
+ rollup: 3.29.5
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ vite@5.4.21:
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.55.1
+ optionalDependencies:
+ fsevents: 2.3.3
diff --git a/demos/demo-escss/vite.config.js b/demos/demo-escss/vite.config.js
new file mode 100644
index 00000000..0f4b72e6
--- /dev/null
+++ b/demos/demo-escss/vite.config.js
@@ -0,0 +1,19 @@
+import { defineConfig } from 'vite'
+import EsCSS from '@es-js/vite-plugin-escss'
+import EsHTML from '@es-js/vite-plugin-eshtml'
+import EsJS from '@es-js/vite-plugin-esjs'
+
+export default defineConfig({
+ plugins: [
+ EsJS(),
+ EsCSS(),
+ EsHTML({
+ paginas: {
+ indice: {
+ plantilla: 'indice.eshtml',
+ entrada: 'fuente/indice.esjs',
+ },
+ },
+ }),
+ ],
+})
diff --git a/packages/escss-generator/package.json b/packages/escss-generator/package.json
new file mode 100644
index 00000000..52f026d0
--- /dev/null
+++ b/packages/escss-generator/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "@es-js/escss-generator",
+ "version": "0.0.1",
+ "private": true,
+ "description": "Generator for EsCSS dictionaries",
+ "type": "module",
+ "scripts": {
+ "build": "tsx src/index.ts"
+ },
+ "devDependencies": {
+ "@types/node": "^20.14.9",
+ "tsx": "^4.16.2",
+ "typescript": "^5.5.2"
+ }
+}
diff --git a/packages/escss-generator/pnpm-lock.yaml b/packages/escss-generator/pnpm-lock.yaml
new file mode 100644
index 00000000..60ea03c0
--- /dev/null
+++ b/packages/escss-generator/pnpm-lock.yaml
@@ -0,0 +1,342 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@types/node':
+ specifier: ^20.14.9
+ version: 20.19.30
+ tsx:
+ specifier: ^4.16.2
+ version: 4.21.0
+ typescript:
+ specifier: ^5.5.2
+ version: 5.9.3
+
+packages:
+
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.2':
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.2':
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.2':
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.2':
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.2':
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.2':
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/node@20.19.30':
+ resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
+
+ esbuild@0.27.2:
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-tsconfig@4.13.0:
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+snapshots:
+
+ '@esbuild/aix-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm@0.27.2':
+ optional: true
+
+ '@esbuild/android-x64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.2':
+ optional: true
+
+ '@types/node@20.19.30':
+ dependencies:
+ undici-types: 6.21.0
+
+ esbuild@0.27.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.2
+ '@esbuild/android-arm': 0.27.2
+ '@esbuild/android-arm64': 0.27.2
+ '@esbuild/android-x64': 0.27.2
+ '@esbuild/darwin-arm64': 0.27.2
+ '@esbuild/darwin-x64': 0.27.2
+ '@esbuild/freebsd-arm64': 0.27.2
+ '@esbuild/freebsd-x64': 0.27.2
+ '@esbuild/linux-arm': 0.27.2
+ '@esbuild/linux-arm64': 0.27.2
+ '@esbuild/linux-ia32': 0.27.2
+ '@esbuild/linux-loong64': 0.27.2
+ '@esbuild/linux-mips64el': 0.27.2
+ '@esbuild/linux-ppc64': 0.27.2
+ '@esbuild/linux-riscv64': 0.27.2
+ '@esbuild/linux-s390x': 0.27.2
+ '@esbuild/linux-x64': 0.27.2
+ '@esbuild/netbsd-arm64': 0.27.2
+ '@esbuild/netbsd-x64': 0.27.2
+ '@esbuild/openbsd-arm64': 0.27.2
+ '@esbuild/openbsd-x64': 0.27.2
+ '@esbuild/openharmony-arm64': 0.27.2
+ '@esbuild/sunos-x64': 0.27.2
+ '@esbuild/win32-arm64': 0.27.2
+ '@esbuild/win32-ia32': 0.27.2
+ '@esbuild/win32-x64': 0.27.2
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-tsconfig@4.13.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ resolve-pkg-maps@1.0.0: {}
+
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.2
+ get-tsconfig: 4.13.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ typescript@5.9.3: {}
+
+ undici-types@6.21.0: {}
diff --git a/packages/escss-generator/src/generate-at-rules.ts b/packages/escss-generator/src/generate-at-rules.ts
new file mode 100644
index 00000000..bfb597f3
--- /dev/null
+++ b/packages/escss-generator/src/generate-at-rules.ts
@@ -0,0 +1,77 @@
+/**
+ * CSS at-rules with Spanish translations.
+ */
+export const cssAtRules = new Map([
+ ['media', 'medios'],
+ ['keyframes', 'fotogramas'],
+ ['import', 'importar'],
+ ['font-face', 'fuente-cara'],
+ ['supports', 'soporta'],
+ ['charset', 'conjunto-caracteres'],
+ ['namespace', 'espacio-nombres'],
+ ['page', 'pagina'],
+ ['layer', 'capa'],
+ ['container', 'contenedor'],
+ ['property', 'propiedad'],
+ ['scope', 'ambito'],
+ ['starting-style', 'estilo-inicial'],
+])
+
+import { validateNoDuplicateEscssValues } from './validateNoDuplicateEscss'
+
+/**
+ * Generate TypeScript code for the at-rules dictionary.
+ */
+export function generateAtRulesCode(): string {
+ validateNoDuplicateEscssValues(cssAtRules, 'at-rule')
+
+ const entries = Array.from(cssAtRules.entries())
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ return `import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS at-rules dictionary.
+ * Maps Spanish at-rule names to standard CSS at-rule names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+${entries}
+])
+
+/**
+ * Get the at-rules dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+
+/**
+ * List of all CSS at-rules.
+ */
+export const cssAtRulesList = [
+${Array.from(cssAtRules.keys())
+ .map((r) => ` '${r}',`)
+ .join('\n')}
+]
+
+/**
+ * List of all EsCSS at-rules.
+ */
+export const escssAtRulesList = [
+${Array.from(cssAtRules.values())
+ .map((r) => ` '${r}',`)
+ .join('\n')}
+]
+`
+}
diff --git a/packages/escss-generator/src/generate-properties.ts b/packages/escss-generator/src/generate-properties.ts
new file mode 100644
index 00000000..0dc5e0c0
--- /dev/null
+++ b/packages/escss-generator/src/generate-properties.ts
@@ -0,0 +1,381 @@
+import { validateNoDuplicateEscssValues } from './validateNoDuplicateEscss'
+import { translateProperty } from './word-dictionary'
+
+/**
+ * Complete list of CSS properties to translate.
+ * This is a curated list of the most commonly used CSS properties.
+ */
+export const cssProperties = [
+ // Display & Visibility
+ 'display',
+ 'visibility',
+ 'opacity',
+
+ // Positioning
+ 'position',
+ 'top',
+ 'right',
+ 'bottom',
+ 'left',
+ 'z-index',
+ 'inset',
+ 'inset-block',
+ 'inset-block-start',
+ 'inset-block-end',
+ 'inset-inline',
+ 'inset-inline-start',
+ 'inset-inline-end',
+
+ // Box Model
+ 'width',
+ 'height',
+ 'min-width',
+ 'min-height',
+ 'max-width',
+ 'max-height',
+ 'margin',
+ 'margin-top',
+ 'margin-right',
+ 'margin-bottom',
+ 'margin-left',
+ 'margin-block',
+ 'margin-block-start',
+ 'margin-block-end',
+ 'margin-inline',
+ 'margin-inline-start',
+ 'margin-inline-end',
+ 'padding',
+ 'padding-top',
+ 'padding-right',
+ 'padding-bottom',
+ 'padding-left',
+ 'padding-block',
+ 'padding-block-start',
+ 'padding-block-end',
+ 'padding-inline',
+ 'padding-inline-start',
+ 'padding-inline-end',
+ 'box-sizing',
+
+ // Border
+ 'border',
+ 'border-width',
+ 'border-style',
+ 'border-color',
+ 'border-top',
+ 'border-top-width',
+ 'border-top-style',
+ 'border-top-color',
+ 'border-right',
+ 'border-right-width',
+ 'border-right-style',
+ 'border-right-color',
+ 'border-bottom',
+ 'border-bottom-width',
+ 'border-bottom-style',
+ 'border-bottom-color',
+ 'border-left',
+ 'border-left-width',
+ 'border-left-style',
+ 'border-left-color',
+ 'border-radius',
+ 'border-top-left-radius',
+ 'border-top-right-radius',
+ 'border-bottom-right-radius',
+ 'border-bottom-left-radius',
+ 'border-image',
+ 'border-image-source',
+ 'border-image-slice',
+ 'border-image-width',
+ 'border-image-outset',
+ 'border-image-repeat',
+ 'border-collapse',
+ 'border-spacing',
+
+ // Outline
+ 'outline',
+ 'outline-width',
+ 'outline-style',
+ 'outline-color',
+ 'outline-offset',
+
+ // Background
+ 'background',
+ 'background-color',
+ 'background-image',
+ 'background-position',
+ 'background-size',
+ 'background-repeat',
+ 'background-attachment',
+ 'background-origin',
+ 'background-clip',
+ 'background-blend-mode',
+
+ // Color
+ 'color',
+ 'accent-color',
+ 'caret-color',
+
+ // Typography
+ 'font',
+ 'font-family',
+ 'font-size',
+ 'font-weight',
+ 'font-style',
+ 'font-variant',
+ 'font-stretch',
+ 'line-height',
+ 'letter-spacing',
+ 'word-spacing',
+ 'text-align',
+ 'text-decoration',
+ 'text-decoration-line',
+ 'text-decoration-color',
+ 'text-decoration-style',
+ 'text-decoration-thickness',
+ 'text-transform',
+ 'text-indent',
+ 'text-shadow',
+ 'text-overflow',
+ 'text-wrap',
+ 'white-space',
+ 'word-break',
+ 'word-wrap',
+ 'overflow-wrap',
+ 'hyphens',
+ 'tab-size',
+ 'vertical-align',
+ 'direction',
+ 'writing-mode',
+ 'unicode-bidi',
+
+ // Flexbox
+ 'flex',
+ 'flex-direction',
+ 'flex-wrap',
+ 'flex-flow',
+ 'flex-grow',
+ 'flex-shrink',
+ 'flex-basis',
+ 'justify-content',
+ 'align-items',
+ 'align-self',
+ 'align-content',
+ 'order',
+ 'gap',
+ 'row-gap',
+ 'column-gap',
+
+ // Grid
+ 'grid',
+ 'grid-template',
+ 'grid-template-columns',
+ 'grid-template-rows',
+ 'grid-template-areas',
+ 'grid-auto-columns',
+ 'grid-auto-rows',
+ 'grid-auto-flow',
+ 'grid-column',
+ 'grid-column-start',
+ 'grid-column-end',
+ 'grid-row',
+ 'grid-row-start',
+ 'grid-row-end',
+ 'grid-area',
+ 'place-content',
+ 'place-items',
+ 'place-self',
+
+ // Overflow
+ 'overflow',
+ 'overflow-x',
+ 'overflow-y',
+ 'scroll-behavior',
+ 'scroll-margin',
+ 'scroll-margin-top',
+ 'scroll-margin-right',
+ 'scroll-margin-bottom',
+ 'scroll-margin-left',
+ 'scroll-padding',
+ 'scroll-padding-top',
+ 'scroll-padding-right',
+ 'scroll-padding-bottom',
+ 'scroll-padding-left',
+ 'scroll-snap-type',
+ 'scroll-snap-align',
+
+ // Float & Clear
+ 'float',
+ 'clear',
+
+ // List
+ 'list-style',
+ 'list-style-type',
+ 'list-style-position',
+ 'list-style-image',
+ 'counter-reset',
+ 'counter-increment',
+
+ // Table
+ 'table-layout',
+ 'caption-side',
+ 'empty-cells',
+
+ // Transform
+ 'transform',
+ 'transform-origin',
+ 'transform-style',
+ 'rotate',
+ 'scale',
+ 'translate',
+ 'perspective',
+ 'perspective-origin',
+ 'backface-visibility',
+
+ // Transition
+ 'transition',
+ 'transition-property',
+ 'transition-duration',
+ 'transition-timing-function',
+ 'transition-delay',
+
+ // Animation
+ 'animation',
+ 'animation-name',
+ 'animation-duration',
+ 'animation-timing-function',
+ 'animation-delay',
+ 'animation-iteration-count',
+ 'animation-direction',
+ 'animation-fill-mode',
+ 'animation-play-state',
+
+ // Filters & Effects
+ 'filter',
+ 'backdrop-filter',
+ 'mix-blend-mode',
+ 'isolation',
+ 'box-shadow',
+
+ // Clipping & Masking
+ 'clip',
+ 'clip-path',
+ 'mask',
+ 'mask-image',
+ 'mask-mode',
+ 'mask-position',
+ 'mask-size',
+ 'mask-repeat',
+ 'mask-origin',
+ 'mask-clip',
+
+ // Object
+ 'object-fit',
+ 'object-position',
+ 'aspect-ratio',
+
+ // Interaction
+ 'cursor',
+ 'pointer-events',
+ 'user-select',
+ 'touch-action',
+ 'resize',
+ 'appearance',
+ 'will-change',
+
+ // Columns
+ 'columns',
+ 'column-count',
+ 'column-width',
+ 'column-rule',
+ 'column-rule-width',
+ 'column-rule-style',
+ 'column-rule-color',
+ 'column-span',
+ 'column-fill',
+
+ // Print
+ 'page-break-before',
+ 'page-break-after',
+ 'page-break-inside',
+ 'break-before',
+ 'break-after',
+ 'break-inside',
+ 'orphans',
+ 'widows',
+
+ // Contain
+ 'contain',
+ 'content-visibility',
+
+ // Other
+ 'content',
+ 'quotes',
+ 'all',
+]
+
+/**
+ * Generate the properties dictionary mapping.
+ * Returns tuples of [css-property, escss-property]
+ */
+export function generatePropertiesMapping(): [string, string][] {
+ const mappings = cssProperties.map((prop): [string, string] => [
+ prop,
+ translateProperty(prop),
+ ])
+ validateNoDuplicateEscssValues(new Map(mappings), 'property')
+ return mappings
+}
+
+/**
+ * Generate TypeScript code for the properties dictionary.
+ */
+export function generatePropertiesCode(): string {
+ const mappings = generatePropertiesMapping()
+
+ const entries = mappings
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ return `import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS property dictionary.
+ * Maps Spanish CSS property names to standard CSS property names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+${entries}
+])
+
+/**
+ * Get the properties dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+
+/**
+ * List of all CSS properties.
+ */
+export const cssProperties = [
+${cssProperties.map((p) => ` '${p}',`).join('\n')}
+]
+
+/**
+ * List of all EsCSS properties.
+ */
+export const escssProperties = [
+${mappings.map(([, escss]) => ` '${escss}',`).join('\n')}
+]
+`
+}
diff --git a/packages/escss-generator/src/generate-pseudo.ts b/packages/escss-generator/src/generate-pseudo.ts
new file mode 100644
index 00000000..f4346dcb
--- /dev/null
+++ b/packages/escss-generator/src/generate-pseudo.ts
@@ -0,0 +1,209 @@
+/**
+ * CSS pseudo-classes with Spanish translations.
+ */
+export const cssPseudoClasses = new Map([
+ // User action
+ ['hover', 'encima'],
+ ['active', 'activo'],
+ ['focus', 'enfoque'],
+ ['focus-within', 'enfoque-dentro'],
+ ['focus-visible', 'enfoque-visible'],
+ ['visited', 'visitado'],
+ ['target', 'objetivo'],
+
+ // Input
+ ['checked', 'marcado'],
+ ['disabled', 'deshabilitado'],
+ ['enabled', 'habilitado'],
+ ['indeterminate', 'indeterminado'],
+ ['invalid', 'invalido'],
+ ['valid', 'valido'],
+ ['required', 'requerido'],
+ ['optional', 'opcional'],
+ ['read-only', 'solo-lectura'],
+ ['read-write', 'lectura-escritura'],
+ ['placeholder-shown', 'marcador-visible'],
+ ['default', 'predeterminado'],
+ ['in-range', 'en-rango'],
+ ['out-of-range', 'fuera-rango'],
+ ['autofill', 'autocompletar'],
+
+ // Structural
+ ['first-child', 'primer-hijo'],
+ ['last-child', 'ultimo-hijo'],
+ ['only-child', 'hijo-unico'],
+ ['first-of-type', 'primero-de-tipo'],
+ ['last-of-type', 'ultimo-de-tipo'],
+ ['only-of-type', 'unico-de-tipo'],
+ ['nth-child', 'hijo-n'],
+ ['nth-last-child', 'ultimo-hijo-n'],
+ ['nth-of-type', 'tipo-n'],
+ ['nth-last-of-type', 'ultimo-tipo-n'],
+ ['empty', 'vacio'],
+ ['root', 'raiz'],
+
+ // Language
+ ['lang', 'idioma'],
+ ['dir', 'direccion'],
+
+ // Link
+ ['link', 'enlace'],
+ ['any-link', 'cualquier-enlace'],
+ ['local-link', 'enlace-local'],
+
+ // Misc
+ ['not', 'no'],
+ ['is', 'es'],
+ ['where', 'donde'],
+ ['has', 'tiene'],
+ ['scope', 'ambito'],
+ ['current', 'actual'],
+ ['past', 'pasado'],
+ ['future', 'futuro'],
+ ['playing', 'reproduciendo'],
+ ['paused', 'pausado'],
+ ['seeking', 'buscando'],
+ ['buffering', 'cargando'],
+ ['stalled', 'detenido'],
+ ['muted', 'silenciado'],
+ ['volume-locked', 'volumen-bloqueado'],
+ ['fullscreen', 'pantalla-completa'],
+ ['picture-in-picture', 'imagen-en-imagen'],
+ ['defined', 'definido'],
+ ['host', 'anfitrion'],
+ ['host-context', 'contexto-anfitrion'],
+ ['modal', 'modal'],
+ ['open', 'abierto'],
+ ['closed', 'cerrado'],
+ ['popover-open', 'emergente-abierto'],
+])
+
+/**
+ * CSS pseudo-elements with Spanish translations.
+ */
+export const cssPseudoElements = new Map([
+ ['before', 'antes'],
+ ['after', 'despues'],
+ ['first-line', 'primera-linea'],
+ ['first-letter', 'primera-letra'],
+ ['selection', 'seleccion'],
+ ['placeholder', 'marcador'],
+ ['marker', 'marcador-lista'],
+ ['backdrop', 'fondo-modal'],
+ ['cue', 'señal'],
+ ['cue-region', 'region-señal'],
+ ['slotted', 'ranura'],
+ ['part', 'parte'],
+ ['file-selector-button', 'boton-selector-archivo'],
+ ['highlight', 'resaltado'],
+ ['spelling-error', 'error-ortografico'],
+ ['grammar-error', 'error-gramatical'],
+ ['target-text', 'texto-objetivo'],
+])
+
+import { validateNoDuplicateEscssValues } from './validateNoDuplicateEscss'
+
+/**
+ * Generate TypeScript code for the pseudo selectors dictionary.
+ */
+export function generatePseudoCode(): string {
+ validateNoDuplicateEscssValues(cssPseudoClasses, 'pseudo-class')
+ validateNoDuplicateEscssValues(cssPseudoElements, 'pseudo-element')
+
+ const classEntries = Array.from(cssPseudoClasses.entries())
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ const elementEntries = Array.from(cssPseudoElements.entries())
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ return `import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS pseudo-classes dictionary.
+ * Maps Spanish pseudo-class names to standard CSS pseudo-class names.
+ * Auto-generated by escss-generator.
+ */
+const pseudoClassesDictionary: Map = new Map([
+${classEntries}
+])
+
+/**
+ * EsCSS to CSS pseudo-elements dictionary.
+ * Maps Spanish pseudo-element names to standard CSS pseudo-element names.
+ * Auto-generated by escss-generator.
+ */
+const pseudoElementsDictionary: Map = new Map([
+${elementEntries}
+])
+
+/**
+ * Get the pseudo-classes dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedPseudoClasses: Map | undefined
+
+export function getPseudoClassesDictionary(inverted = false): Map {
+ if (!inverted) {
+ return pseudoClassesDictionary
+ }
+ if (!invertedPseudoClasses) {
+ invertedPseudoClasses = invertMap(pseudoClassesDictionary)
+ }
+ return invertedPseudoClasses
+}
+
+/**
+ * Get the pseudo-elements dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedPseudoElements: Map | undefined
+
+export function getPseudoElementsDictionary(inverted = false): Map {
+ if (!inverted) {
+ return pseudoElementsDictionary
+ }
+ if (!invertedPseudoElements) {
+ invertedPseudoElements = invertMap(pseudoElementsDictionary)
+ }
+ return invertedPseudoElements
+}
+
+/**
+ * List of all CSS pseudo-classes.
+ */
+export const cssPseudoClassesList = [
+${Array.from(cssPseudoClasses.keys())
+ .map((p) => ` '${p}',`)
+ .join('\n')}
+]
+
+/**
+ * List of all EsCSS pseudo-classes.
+ */
+export const escssPseudoClassesList = [
+${Array.from(cssPseudoClasses.values())
+ .map((p) => ` '${p}',`)
+ .join('\n')}
+]
+
+/**
+ * List of all CSS pseudo-elements.
+ */
+export const cssPseudoElementsList = [
+${Array.from(cssPseudoElements.keys())
+ .map((p) => ` '${p}',`)
+ .join('\n')}
+]
+
+/**
+ * List of all EsCSS pseudo-elements.
+ */
+export const escssPseudoElementsList = [
+${Array.from(cssPseudoElements.values())
+ .map((p) => ` '${p}',`)
+ .join('\n')}
+]
+`
+}
diff --git a/packages/escss-generator/src/generate-selectors.ts b/packages/escss-generator/src/generate-selectors.ts
new file mode 100644
index 00000000..c3e28361
--- /dev/null
+++ b/packages/escss-generator/src/generate-selectors.ts
@@ -0,0 +1,137 @@
+/**
+ * HTML element selectors that should be translated to Spanish.
+ * Maps CSS element selectors to their Spanish equivalents.
+ */
+export const cssElementTranslations = new Map([
+ // Document structure
+ ['html', 'html'],
+ ['body', 'cuerpo'],
+ ['head', 'cabeza'],
+ ['header', 'encabezado'],
+ ['footer', 'pie'],
+ ['main', 'principal'],
+ ['section', 'seccion'],
+ ['article', 'articulo'],
+ ['aside', 'lateral'],
+ ['nav', 'nav'],
+
+ // Headings
+ ['h1', 'h1'],
+ ['h2', 'h2'],
+ ['h3', 'h3'],
+ ['h4', 'h4'],
+ ['h5', 'h5'],
+ ['h6', 'h6'],
+
+ // Text content
+ ['p', 'p'],
+ ['div', 'div'],
+ ['span', 'span'],
+ ['a', 'a'],
+ ['strong', 'fuerte'],
+ ['em', 'enfasis'],
+ ['br', 'br'],
+ ['hr', 'hr'],
+ ['blockquote', 'cita'],
+ ['pre', 'pre'],
+ ['code', 'codigo'],
+
+ // Lists
+ ['ul', 'ul'],
+ ['ol', 'ol'],
+ ['li', 'li'],
+ ['dl', 'dl'],
+ ['dt', 'dt'],
+ ['dd', 'dd'],
+
+ // Tables
+ ['table', 'tabla'],
+ ['thead', 'tabla-cabeza'],
+ ['tbody', 'tabla-cuerpo'],
+ ['tfoot', 'tabla-pie'],
+ ['tr', 'tr'],
+ ['th', 'th'],
+ ['td', 'td'],
+ ['caption', 'titulo'],
+
+ // Forms
+ ['form', 'formulario'],
+ ['input', 'entrada'],
+ ['button', 'boton'],
+ ['select', 'seleccionar'],
+ ['option', 'opcion'],
+ ['textarea', 'areadetexto'],
+ ['label', 'etiqueta'],
+ ['fieldset', 'conjuntocampos'],
+ ['legend', 'leyenda'],
+
+ // Media
+ ['img', 'img'],
+ ['video', 'video'],
+ ['audio', 'audio'],
+ ['canvas', 'lienzo'],
+ ['svg', 'svg'],
+ ['figure', 'figura'],
+ ['figcaption', 'leyendafigura'],
+ ['picture', 'imagen'],
+ ['source', 'fuente'],
+
+ // Interactive
+ ['details', 'detalles'],
+ ['summary', 'resumen'],
+ ['dialog', 'dialogo'],
+
+ // Embedded
+ ['iframe', 'marco'],
+ ['embed', 'incrustar'],
+ ['object', 'objeto'],
+
+ // Other
+ ['address', 'direccion'],
+ ['time', 'tiempo'],
+ ['mark', 'marca'],
+ ['progress', 'progreso'],
+ ['meter', 'medidor'],
+ ['output', 'salida'],
+])
+
+import { validateNoDuplicateEscssValues } from './validateNoDuplicateEscss'
+
+/**
+ * Generate TypeScript code for the selectors dictionary.
+ */
+export function generateSelectorsCode(): string {
+ validateNoDuplicateEscssValues(cssElementTranslations, 'selector')
+
+ const entries = Array.from(cssElementTranslations.entries())
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ return `import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS element selector dictionary.
+ * Maps Spanish element names to standard HTML element names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+${entries}
+])
+
+/**
+ * Get the selectors dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+`
+}
diff --git a/packages/escss-generator/src/generate-values.ts b/packages/escss-generator/src/generate-values.ts
new file mode 100644
index 00000000..14dd273f
--- /dev/null
+++ b/packages/escss-generator/src/generate-values.ts
@@ -0,0 +1,411 @@
+/**
+ * CSS values that should be translated to Spanish.
+ * Maps CSS values to their Spanish equivalents.
+ */
+export const cssValueTranslations = new Map([
+ // Display values
+ ['none', 'ninguno'],
+ ['block', 'bloque'],
+ ['inline', 'enlinea'],
+ ['inline-block', 'enlinea-bloque'],
+ ['flex', 'flex'],
+ ['inline-flex', 'enlinea-flex'],
+ ['grid', 'cuadricula'],
+ ['inline-grid', 'enlinea-cuadricula'],
+ ['table', 'tabla'],
+ ['table-row', 'tabla-fila'],
+ ['table-cell', 'tabla-celda'],
+ ['table-column', 'tabla-columna'],
+ ['table-row-group', 'tabla-grupo-filas'],
+ ['table-column-group', 'tabla-grupo-columnas'],
+ ['table-header-group', 'tabla-grupo-encabezado'],
+ ['table-footer-group', 'tabla-grupo-pie'],
+ ['list-item', 'elemento-lista'],
+ ['contents', 'contenidos'],
+ ['flow-root', 'flujo-raiz'],
+
+ // Position values
+ ['static', 'estatico'],
+ ['relative', 'relativo'],
+ ['absolute', 'absoluto'],
+ ['fixed', 'fijo'],
+ ['sticky', 'pegajoso'],
+
+ // Visibility values
+ ['visible', 'visible'],
+ ['hidden', 'oculto'],
+ ['collapse', 'colapsar'],
+ ['hide', 'ocultar'],
+ ['show', 'mostrar'],
+
+ // Overflow values
+ ['scroll', 'desplazar'],
+ ['auto', 'auto'],
+
+ // Flexbox values
+ ['row', 'fila'],
+ ['row-reverse', 'fila-inversa'],
+ ['column', 'columna'],
+ ['column-reverse', 'columna-inversa'],
+ ['wrap', 'envolver'],
+ ['nowrap', 'sinenvolver'],
+ ['wrap-reverse', 'envolver-inverso'],
+ ['flex-start', 'flex-inicio'],
+ ['flex-end', 'flex-fin'],
+ ['center', 'centro'],
+ ['space-between', 'espacio-entre'],
+ ['space-around', 'espacio-alrededor'],
+ ['space-evenly', 'espacio-uniforme'],
+ ['stretch', 'estirar'],
+ ['baseline', 'lineabase'],
+ ['start', 'inicio'],
+ ['end', 'fin'],
+ ['self-start', 'propio-inicio'],
+ ['self-end', 'propio-fin'],
+
+ // Text alignment values
+ ['left', 'izquierda'],
+ ['right', 'derecha'],
+ ['justify', 'justificar'],
+
+ // Vertical alignment values
+ ['top', 'arriba'],
+ ['bottom', 'abajo'],
+ ['middle', 'medio'],
+ ['text-top', 'texto-arriba'],
+ ['text-bottom', 'texto-abajo'],
+ ['sub', 'sub'],
+ ['super', 'super'],
+
+ // Font weight values
+ ['normal', 'normal'],
+ ['bold', 'negrita'],
+ ['bolder', 'mas-negrita'],
+ ['lighter', 'mas-ligera'],
+
+ // Font style values
+ ['italic', 'italica'],
+ ['oblique', 'oblicua'],
+
+ // Text transform values
+ ['capitalize', 'capitalizar'],
+ ['uppercase', 'mayusculas'],
+ ['lowercase', 'minusculas'],
+
+ // Text decoration values
+ ['underline', 'subrayado'],
+ ['overline', 'sobrelinea'],
+ ['line-through', 'tachado'],
+
+ // White space values
+ ['pre', 'pre'],
+ ['pre-wrap', 'pre-envolver'],
+ ['pre-line', 'pre-linea'],
+ ['break-spaces', 'romper-espacios'],
+
+ // Word break values
+ ['break-all', 'romper-todo'],
+ ['keep-all', 'mantener-todo'],
+ ['break-word', 'romper-palabra'],
+
+ // Border style values
+ ['solid', 'solido'],
+ ['dashed', 'discontinuo'],
+ ['dotted', 'punteado'],
+ ['double', 'doble'],
+ ['groove', 'ranura'],
+ ['ridge', 'cresta'],
+ ['inset', 'interno'],
+ ['outset', 'externo'],
+
+ // Background values
+ ['repeat', 'repetir'],
+ ['no-repeat', 'sin-repetir'],
+ ['repeat-x', 'repetir-x'],
+ ['repeat-y', 'repetir-y'],
+ ['cover', 'cubrir'],
+ ['contain', 'contener'],
+ ['local', 'local'],
+ ['padding-box', 'caja-relleno'],
+ ['border-box', 'caja-borde'],
+ ['content-box', 'caja-contenido'],
+
+ // Object fit values
+ ['fill', 'rellenar'],
+ ['scale-down', 'reducir'],
+
+ // Cursor values
+ ['pointer', 'puntero'],
+ ['default', 'predeterminado'],
+ ['crosshair', 'cruceta'],
+ ['move', 'mover'],
+ ['text', 'texto'],
+ ['wait', 'esperar'],
+ ['help', 'ayuda'],
+ ['not-allowed', 'no-permitido'],
+ ['grab', 'agarrar'],
+ ['grabbing', 'agarrando'],
+ ['zoom-in', 'acercar'],
+ ['zoom-out', 'alejar'],
+ ['col-resize', 'redimensionar-columna'],
+ ['row-resize', 'redimensionar-fila'],
+ ['n-resize', 'redimensionar-norte'],
+ ['s-resize', 'redimensionar-sur'],
+ ['e-resize', 'redimensionar-este'],
+ ['w-resize', 'redimensionar-oeste'],
+ ['ne-resize', 'redimensionar-noreste'],
+ ['nw-resize', 'redimensionar-noroeste'],
+ ['se-resize', 'redimensionar-sureste'],
+ ['sw-resize', 'redimensionar-suroeste'],
+ ['ew-resize', 'redimensionar-este-oeste'],
+ ['ns-resize', 'redimensionar-norte-sur'],
+ ['nesw-resize', 'redimensionar-noreste-suroeste'],
+ ['nwse-resize', 'redimensionar-noroeste-sureste'],
+
+ // List style type values
+ ['disc', 'disco'],
+ ['circle', 'circulo'],
+ ['square', 'cuadrado'],
+ ['decimal', 'decimal'],
+ ['decimal-leading-zero', 'decimal-cero-inicial'],
+ ['lower-roman', 'romano-minuscula'],
+ ['upper-roman', 'romano-mayuscula'],
+ ['lower-alpha', 'alfa-minuscula'],
+ ['upper-alpha', 'alfa-mayuscula'],
+ ['lower-latin', 'latin-minuscula'],
+ ['upper-latin', 'latin-mayuscula'],
+
+ // Animation values
+ ['infinite', 'infinito'],
+ ['alternate', 'alternar'],
+ ['alternate-reverse', 'alternar-inverso'],
+ ['forwards', 'adelante'],
+ ['backwards', 'atras'],
+ ['both', 'ambos'],
+ ['running', 'ejecutando'],
+ ['paused', 'pausado'],
+ ['ease', 'facilidad'],
+ ['ease-in', 'facilidad-entrada'],
+ ['ease-out', 'facilidad-salida'],
+ ['ease-in-out', 'facilidad-entrada-salida'],
+ ['linear', 'lineal'],
+ ['step-start', 'paso-inicio'],
+ ['step-end', 'paso-fin'],
+
+ // Scroll behavior
+ ['smooth', 'suave'],
+ ['instant', 'instantaneo'],
+
+ // Resize values
+ ['horizontal', 'horizontal'],
+ ['vertical', 'vertical'],
+
+ // User select values
+ ['all', 'todo'],
+
+ // Global values
+ ['inherit', 'heredar'],
+ ['initial', 'inicial'],
+ ['unset', 'desestablecer'],
+ ['revert', 'revertir'],
+
+ // Font family values
+ ['system-ui', 'sistema-ui'],
+ ['sans-serif', 'sans-serif'],
+ ['serif', 'serif'],
+ ['monospace', 'monoespaciado'],
+ ['cursive', 'cursiva'],
+ ['fantasy', 'fantasia'],
+
+ // CSS Named Colors - Basic
+ ['black', 'negro'],
+ ['white', 'blanco'],
+ ['red', 'rojo'],
+ ['green', 'verde'],
+ ['blue', 'azul'],
+ ['yellow', 'amarillo'],
+ ['orange', 'naranja'],
+ ['purple', 'purpura'],
+ ['pink', 'rosa'],
+ ['brown', 'marron'],
+ ['gray', 'gris'],
+
+ // CSS Named Colors - Extended
+ ['aqua', 'agua'],
+ ['cyan', 'cian'],
+ ['magenta', 'magenta'],
+ ['lime', 'lima'],
+ ['olive', 'oliva'],
+ ['navy', 'marino'],
+ ['teal', 'verde-azulado'],
+ ['maroon', 'granate'],
+ ['silver', 'plata'],
+ ['gold', 'oro'],
+ ['coral', 'coral'],
+ ['salmon', 'salmon'],
+ ['crimson', 'carmesi'],
+ ['violet', 'violeta'],
+ ['indigo', 'indigo'],
+ ['turquoise', 'turquesa'],
+ ['beige', 'beige'],
+ ['ivory', 'marfil'],
+ ['khaki', 'caqui'],
+ ['lavender', 'lavanda'],
+ ['plum', 'ciruela'],
+ ['orchid', 'orquidea'],
+ ['tan', 'bronceado'],
+ ['chocolate', 'chocolate'],
+ ['sienna', 'siena'],
+ ['peru', 'peru'],
+ ['wheat', 'trigo'],
+ ['linen', 'lino'],
+ ['snow', 'nieve'],
+ ['azure', 'celeste'],
+ ['mint', 'menta'],
+ ['honeydew', 'melon'],
+
+ // CSS Named Colors - Dark variants
+ ['darkblue', 'azul-oscuro'],
+ ['darkgreen', 'verde-oscuro'],
+ ['darkred', 'rojo-oscuro'],
+ ['darkcyan', 'cian-oscuro'],
+ ['darkmagenta', 'magenta-oscuro'],
+ ['darkorange', 'naranja-oscuro'],
+ ['darkviolet', 'violeta-oscuro'],
+ ['darkgray', 'gris-oscuro'],
+ ['darkkhaki', 'caqui-oscuro'],
+ ['darkolivegreen', 'verde-oliva-oscuro'],
+ ['darkorchid', 'orquidea-oscuro'],
+ ['darksalmon', 'salmon-oscuro'],
+ ['darkseagreen', 'verde-mar-oscuro'],
+ ['darkslateblue', 'azul-pizarra-oscuro'],
+ ['darkslategray', 'gris-pizarra-oscuro'],
+ ['darkturquoise', 'turquesa-oscuro'],
+ ['darkgoldenrod', 'oro-oscuro'],
+
+ // CSS Named Colors - Light variants
+ ['lightblue', 'azul-claro'],
+ ['lightgreen', 'verde-claro'],
+ ['lightcyan', 'cian-claro'],
+ ['lightpink', 'rosa-claro'],
+ ['lightyellow', 'amarillo-claro'],
+ ['lightgray', 'gris-claro'],
+ ['lightcoral', 'coral-claro'],
+ ['lightsalmon', 'salmon-claro'],
+ ['lightseagreen', 'verde-mar-claro'],
+ ['lightskyblue', 'azul-cielo-claro'],
+ ['lightslategray', 'gris-pizarra-claro'],
+ ['lightsteelblue', 'azul-acero-claro'],
+ ['lightgoldenrodyellow', 'amarillo-oro-claro'],
+
+ // CSS Named Colors - Other common
+ ['aliceblue', 'azul-alice'],
+ ['antiquewhite', 'blanco-antiguo'],
+ ['aquamarine', 'aguamarina'],
+ ['blanchedalmond', 'almendra-blanqueada'],
+ ['blueviolet', 'azul-violeta'],
+ ['burlywood', 'madera'],
+ ['cadetblue', 'azul-cadete'],
+ ['chartreuse', 'chartreuse'],
+ ['cornflowerblue', 'azul-aciano'],
+ ['cornsilk', 'seda-maiz'],
+ ['deeppink', 'rosa-profundo'],
+ ['deepskyblue', 'azul-cielo-profundo'],
+ ['dimgray', 'gris-tenue'],
+ ['dodgerblue', 'azul-dodger'],
+ ['firebrick', 'ladrillo'],
+ ['floralwhite', 'blanco-floral'],
+ ['forestgreen', 'verde-bosque'],
+ ['fuchsia', 'fucsia'],
+ ['gainsboro', 'gainsboro'],
+ ['ghostwhite', 'blanco-fantasma'],
+ ['greenyellow', 'verde-amarillo'],
+ ['hotpink', 'rosa-intenso'],
+ ['indianred', 'rojo-indio'],
+ ['lawngreen', 'verde-cesped'],
+ ['lemonchiffon', 'chiffon-limon'],
+ ['mediumaquamarine', 'aguamarina-medio'],
+ ['mediumblue', 'azul-medio'],
+ ['mediumorchid', 'orquidea-medio'],
+ ['mediumpurple', 'purpura-medio'],
+ ['mediumseagreen', 'verde-mar-medio'],
+ ['mediumslateblue', 'azul-pizarra-medio'],
+ ['mediumspringgreen', 'verde-primavera-medio'],
+ ['mediumturquoise', 'turquesa-medio'],
+ ['mediumvioletred', 'rojo-violeta-medio'],
+ ['midnightblue', 'azul-medianoche'],
+ ['mistyrose', 'rosa-brumoso'],
+ ['moccasin', 'mocasin'],
+ ['navajowhite', 'blanco-navajo'],
+ ['oldlace', 'encaje-antiguo'],
+ ['olivedrab', 'verde-oliva-militar'],
+ ['orangered', 'rojo-naranja'],
+ ['palegoldenrod', 'oro-palido'],
+ ['palegreen', 'verde-palido'],
+ ['paleturquoise', 'turquesa-palido'],
+ ['palevioletred', 'rojo-violeta-palido'],
+ ['papayawhip', 'papaya'],
+ ['peachpuff', 'melocoton'],
+ ['powderblue', 'azul-polvo'],
+ ['rebeccapurple', 'purpura-rebecca'],
+ ['rosybrown', 'marron-rosado'],
+ ['royalblue', 'azul-real'],
+ ['saddlebrown', 'marron-silla'],
+ ['sandybrown', 'marron-arena'],
+ ['seagreen', 'verde-mar'],
+ ['seashell', 'concha'],
+ ['skyblue', 'azul-cielo'],
+ ['slateblue', 'azul-pizarra'],
+ ['slategray', 'gris-pizarra'],
+ ['springgreen', 'verde-primavera'],
+ ['steelblue', 'azul-acero'],
+ ['thistle', 'cardo'],
+ ['tomato', 'tomate'],
+ ['whitesmoke', 'humo-blanco'],
+ ['yellowgreen', 'verde-amarillento'],
+
+ // Transparent
+ ['transparent', 'transparente'],
+ ['currentcolor', 'color-actual'],
+])
+
+import { validateNoDuplicateEscssValues } from './validateNoDuplicateEscss'
+
+/**
+ * Generate TypeScript code for the values dictionary.
+ */
+export function generateValuesCode(): string {
+ validateNoDuplicateEscssValues(cssValueTranslations, 'value')
+
+ const entries = Array.from(cssValueTranslations.entries())
+ .map(([css, escss]) => ` ['${escss}', '${css}'],`)
+ .join('\n')
+
+ return `import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS value dictionary.
+ * Maps Spanish CSS values to standard CSS values.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+${entries}
+])
+
+/**
+ * Get the values dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+`
+}
diff --git a/packages/escss-generator/src/index.ts b/packages/escss-generator/src/index.ts
new file mode 100644
index 00000000..8a197976
--- /dev/null
+++ b/packages/escss-generator/src/index.ts
@@ -0,0 +1,56 @@
+import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
+import { dirname, join } from 'node:path'
+import { fileURLToPath } from 'node:url'
+import { generatePropertiesCode } from './generate-properties'
+import { generateValuesCode } from './generate-values'
+import { generateAtRulesCode } from './generate-at-rules'
+import { generatePseudoCode } from './generate-pseudo'
+import { generateSelectorsCode } from './generate-selectors'
+
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = dirname(__filename)
+
+const outputDir = join(__dirname, '../../escss/src/generated')
+
+function ensureDir(dir: string): void {
+ if (!existsSync(dir)) {
+ mkdirSync(dir, { recursive: true })
+ }
+}
+
+export function generate(): void {
+ console.log('Generating EsCSS dictionaries...')
+
+ ensureDir(outputDir)
+
+ // Generate properties
+ const propertiesCode = generatePropertiesCode()
+ writeFileSync(join(outputDir, 'properties.ts'), propertiesCode)
+ console.log(' - Generated properties.ts')
+
+ // Generate values
+ const valuesCode = generateValuesCode()
+ writeFileSync(join(outputDir, 'values.ts'), valuesCode)
+ console.log(' - Generated values.ts')
+
+ // Generate at-rules
+ const atRulesCode = generateAtRulesCode()
+ writeFileSync(join(outputDir, 'at-rules.ts'), atRulesCode)
+ console.log(' - Generated at-rules.ts')
+
+ // Generate pseudo selectors
+ const pseudoCode = generatePseudoCode()
+ writeFileSync(join(outputDir, 'pseudo.ts'), pseudoCode)
+ console.log(' - Generated pseudo.ts')
+
+ // Generate element selectors
+ const selectorsCode = generateSelectorsCode()
+ writeFileSync(join(outputDir, 'selectors.ts'), selectorsCode)
+ console.log(' - Generated selectors.ts')
+
+ console.log('Done! Generated files in:', outputDir)
+}
+
+if (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {
+ generate()
+}
diff --git a/packages/escss-generator/src/validateNoDuplicateEscss.ts b/packages/escss-generator/src/validateNoDuplicateEscss.ts
new file mode 100644
index 00000000..33423379
--- /dev/null
+++ b/packages/escss-generator/src/validateNoDuplicateEscss.ts
@@ -0,0 +1,30 @@
+/**
+ * Validates that no two CSS keys map to the same EsCSS value in a translation map.
+ * When invertMap is used, duplicate values would cause lost entries.
+ * @param map - Map of CSS key -> EsCSS value
+ * @param label - Label for the error message (e.g. "at-rule", "selector", "value")
+ * @throws Error listing duplicated EsCSS names and their source CSS keys
+ */
+export function validateNoDuplicateEscssValues(
+ map: Map,
+ label: string,
+): void {
+ const seen = new Map()
+ for (const [css, escss] of map) {
+ const existing = seen.get(escss)
+ if (existing) {
+ existing.push(css)
+ } else {
+ seen.set(escss, [css])
+ }
+ }
+ const duplicates = Array.from(seen.entries()).filter(
+ ([, cssKeys]) => cssKeys.length > 1,
+ )
+ if (duplicates.length > 0) {
+ const details = duplicates
+ .map(([escss, cssKeys]) => ` '${escss}' <- [${cssKeys.join(', ')}]`)
+ .join('\n')
+ throw new Error(`Duplicate EsCSS ${label} names detected:\n${details}`)
+ }
+}
diff --git a/packages/escss-generator/src/word-dictionary.ts b/packages/escss-generator/src/word-dictionary.ts
new file mode 100644
index 00000000..729b4870
--- /dev/null
+++ b/packages/escss-generator/src/word-dictionary.ts
@@ -0,0 +1,249 @@
+/**
+ * Word-based translation dictionary for CSS property names.
+ * These are word fragments that appear in CSS property names.
+ */
+export const cssWordTranslations = new Map([
+ // Layout
+ ['display', 'mostrar'],
+ ['position', 'posicion'],
+ ['flex', 'flex'],
+ ['grid', 'cuadricula'],
+ ['float', 'flotar'],
+ ['clear', 'limpiar'],
+
+ // Dimensions
+ ['width', 'ancho'],
+ ['height', 'alto'],
+ ['min', 'minimo'],
+ ['max', 'maximo'],
+ ['size', 'tamaño'],
+
+ // Spacing
+ ['margin', 'margen'],
+ ['padding', 'relleno'],
+ ['gap', 'brecha'],
+
+ // Box Model
+ ['border', 'borde'],
+ ['outline', 'contorno'],
+ ['radius', 'radio'],
+ ['shadow', 'sombra'],
+ ['box', 'caja'],
+
+ // Colors & Backgrounds
+ ['color', 'color'],
+ ['background', 'fondo'],
+ ['opacity', 'opacidad'],
+ ['image', 'imagen'],
+
+ // Typography
+ ['font', 'fuente'],
+ ['family', 'familia'],
+ ['text', 'texto'],
+ ['line', 'linea'],
+ ['letter', 'letra'],
+ ['word', 'palabra'],
+ ['align', 'alinear'],
+ ['vertical', 'vertical'],
+ ['horizontal', 'horizontal'],
+ ['weight', 'peso'],
+ ['style', 'estilo'],
+ ['decoration', 'decoracion'],
+ ['transform', 'transformar'],
+ ['spacing', 'espaciado'],
+ ['indent', 'sangria'],
+ ['wrap', 'envolver'],
+ ['overflow', 'desbordamiento'],
+ ['white', 'blanco'],
+ ['space', 'espacio'],
+ ['variant', 'variante'],
+ ['thickness', 'grosor'],
+
+ // Flexbox/Grid
+ ['direction', 'direccion'],
+ ['justify', 'justificar'],
+ ['content', 'contenido'],
+ ['items', 'elementos'],
+ ['self', 'propio'],
+ ['grow', 'crecer'],
+ ['shrink', 'encoger'],
+ ['basis', 'base'],
+ ['order', 'orden'],
+ ['template', 'plantilla'],
+ ['columns', 'columnas'],
+ ['rows', 'filas'],
+ ['area', 'area'],
+ ['auto', 'auto'],
+ ['flow', 'flujo'],
+ ['row', 'fila'],
+
+ // Positioning
+ ['top', 'arriba'],
+ ['bottom', 'abajo'],
+ ['left', 'izquierda'],
+ ['right', 'derecha'],
+ ['inset', 'insercion'],
+ ['z', 'z'],
+ ['index', 'indice'],
+
+ // Animation & Transition
+ ['animation', 'animacion'],
+ ['transition', 'transicion'],
+ ['duration', 'duracion'],
+ ['delay', 'retraso'],
+ ['timing', 'tiempo'],
+ ['function', 'funcion'],
+ ['iteration', 'iteracion'],
+ ['count', 'conteo'],
+ ['fill', 'rellenar'],
+ ['mode', 'modo'],
+ ['play', 'reproducir'],
+ ['state', 'estado'],
+ ['name', 'nombre'],
+ ['keyframes', 'fotogramas'],
+
+ // Visual
+ ['backdrop', 'trasfondo'],
+ ['visibility', 'visibilidad'],
+ ['clip', 'recorte'],
+ ['path', 'ruta'],
+ ['filter', 'filtro'],
+ ['blend', 'mezcla'],
+ ['cursor', 'cursor'],
+ ['pointer', 'puntero'],
+ ['events', 'eventos'],
+ ['resize', 'redimensionar'],
+ ['user', 'usuario'],
+ ['select', 'seleccionar'],
+ ['scroll', 'desplazar'],
+ ['behavior', 'comportamiento'],
+ ['snap', 'ajustar'],
+
+ // Table
+ ['table', 'tabla'],
+ ['caption', 'titulo'],
+ ['cell', 'celda'],
+ ['cells', 'celdas'],
+ ['empty', 'vacio'],
+ ['collapse', 'colapsar'],
+ ['layout', 'disposicion'],
+ ['side', 'lado'],
+
+ // List
+ ['list', 'lista'],
+ ['marker', 'marcador'],
+ ['counter', 'contador'],
+ ['reset', 'reiniciar'],
+ ['increment', 'incrementar'],
+
+ // Other
+ ['type', 'tipo'],
+ ['source', 'procedencia'],
+ ['slice', 'segmento'],
+ ['outset', 'exterior'],
+ ['property', 'propiedad'],
+ ['span', 'extension'],
+ ['quotes', 'comillas'],
+ ['object', 'objeto'],
+ ['fit', 'ajuste'],
+ ['aspect', 'aspecto'],
+ ['ratio', 'proporcion'],
+ ['contain', 'contener'],
+ ['break', 'romper'],
+ ['page', 'pagina'],
+ ['inside', 'dentro'],
+ ['after', 'despues'],
+ ['before', 'antes'],
+ ['column', 'columna'],
+ ['rule', 'regla'],
+ ['orphans', 'huerfanos'],
+ ['widows', 'viudas'],
+ ['all', 'todo'],
+ ['initial', 'inicial'],
+ ['inherit', 'heredar'],
+ ['unset', 'desestablecer'],
+ ['revert', 'revertir'],
+ ['none', 'ninguno'],
+ ['block', 'bloque'],
+ ['inline', 'enlinea'],
+ ['hidden', 'oculto'],
+ ['visible', 'visible'],
+ ['solid', 'solido'],
+ ['dashed', 'discontinuo'],
+ ['dotted', 'punteado'],
+ ['double', 'doble'],
+ ['start', 'inicio'],
+ ['end', 'fin'],
+ ['center', 'centro'],
+ ['stretch', 'estirar'],
+ ['normal', 'normal'],
+ ['bold', 'negrita'],
+ ['italic', 'italica'],
+ ['underline', 'subrayado'],
+ ['overline', 'sobrelinea'],
+ ['through', 'atraves'],
+ ['capitalize', 'capitalizar'],
+ ['uppercase', 'mayusculas'],
+ ['lowercase', 'minusculas'],
+ ['nowrap', 'sinenvolver'],
+ ['pre', 'pre'],
+ ['baseline', 'lineabase'],
+ ['middle', 'medio'],
+ ['sub', 'sub'],
+ ['super', 'super'],
+ ['absolute', 'absoluto'],
+ ['relative', 'relativo'],
+ ['fixed', 'fijo'],
+ ['sticky', 'pegajoso'],
+ ['static', 'estatico'],
+ ['cover', 'cubrir'],
+ ['repeat', 'repetir'],
+ ['attachment', 'fijacion'],
+ ['origin', 'origen'],
+ ['sizing', 'dimensionamiento'],
+ ['accent', 'acento'],
+ ['caret', 'cursor-texto'],
+ ['appearance', 'apariencia'],
+ ['writing', 'escritura'],
+ ['rotate', 'rotar'],
+ ['scale', 'escala'],
+ ['translate', 'trasladar'],
+ ['skew', 'sesgar'],
+ ['perspective', 'perspectiva'],
+ ['backface', 'cara-trasera'],
+ ['mask', 'mascara'],
+ ['shape', 'forma'],
+ ['offset', 'desplazamiento'],
+ ['place', 'colocar'],
+ ['touch', 'tocar'],
+ ['action', 'accion'],
+ ['will', 'va'],
+ ['change', 'cambiar'],
+ ['mix', 'mezclar'],
+ ['isolation', 'aislamiento'],
+ ['hyphens', 'guiones'],
+ ['hanging', 'colgante'],
+ ['punctuation', 'puntuacion'],
+ ['tab', 'tabulacion'],
+ ['print', 'imprimir'],
+])
+
+/**
+ * Translate a CSS property name to Spanish using word-based translation.
+ */
+export function translateProperty(cssProperty: string): string {
+ const parts = cssProperty.split('-')
+ const translated = parts.map((part) => cssWordTranslations.get(part) || part)
+ return translated.join('-')
+}
+
+/**
+ * Create an inverted map (Spanish -> English)
+ */
+export function createInvertedWordDictionary(): Map {
+ const inverted = new Map()
+ for (const [key, value] of cssWordTranslations.entries()) {
+ inverted.set(value, key)
+ }
+ return inverted
+}
diff --git a/packages/escss-generator/tsconfig.json b/packages/escss-generator/tsconfig.json
new file mode 100644
index 00000000..6c989f56
--- /dev/null
+++ b/packages/escss-generator/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "resolveJsonModule": true,
+ "outDir": "./dist",
+ "rootDir": "./src",
+ "declaration": true
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/escss/build.config.ts b/packages/escss/build.config.ts
new file mode 100644
index 00000000..1246a780
--- /dev/null
+++ b/packages/escss/build.config.ts
@@ -0,0 +1,12 @@
+import { defineBuildConfig } from 'unbuild'
+
+export default defineBuildConfig({
+ entries: ['src/index', 'src/utils', 'src/dictionaries'],
+ clean: true,
+ declaration: true,
+ rollup: {
+ emitCJS: true,
+ inlineDependencies: true,
+ },
+ externals: ['@es-js/core'],
+})
diff --git a/packages/escss/package.json b/packages/escss/package.json
new file mode 100644
index 00000000..5d460fc6
--- /dev/null
+++ b/packages/escss/package.json
@@ -0,0 +1,67 @@
+{
+ "name": "@es-js/escss",
+ "version": "0.0.1",
+ "description": "EsCSS: CSS en Español",
+ "scripts": {
+ "build": "unbuild",
+ "test": "vitest",
+ "test:run": "vitest run",
+ "prepublishOnly": "npm run build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/es-js/esjs.git",
+ "directory": "packages/escss"
+ },
+ "author": "Enzo Notario ",
+ "license": "MIT",
+ "keywords": [
+ "esjs",
+ "escss",
+ "css",
+ "spanish"
+ ],
+ "devDependencies": {
+ "@es-js/core": "workspace:*",
+ "@types/node": "^20.14.9",
+ "postcss": "^8.4.38",
+ "typescript": "^5.5.2",
+ "unbuild": "^2.0.0",
+ "vite": "^5.3.2",
+ "vitest": "^2.1.5"
+ },
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ },
+ "./utils": {
+ "types": "./dist/utils.d.ts",
+ "import": "./dist/utils.mjs",
+ "require": "./dist/utils.cjs"
+ },
+ "./dictionaries": {
+ "types": "./dist/dictionaries.d.ts",
+ "import": "./dist/dictionaries.mjs",
+ "require": "./dist/dictionaries.cjs"
+ }
+ },
+ "typesVersions": {
+ "*": {
+ "*": [
+ "./dist/*",
+ "./dist/index.d.ts",
+ "./dist/utils.d.ts",
+ "./dist/dictionaries.d.ts"
+ ]
+ }
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ]
+}
diff --git a/packages/escss/pnpm-lock.yaml b/packages/escss/pnpm-lock.yaml
new file mode 100644
index 00000000..edcc7175
--- /dev/null
+++ b/packages/escss/pnpm-lock.yaml
@@ -0,0 +1,2996 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@es-js/core':
+ specifier: workspace:*
+ version: link:../core
+ '@types/node':
+ specifier: ^20.14.9
+ version: 20.19.30
+ postcss:
+ specifier: ^8.4.38
+ version: 8.5.6
+ typescript:
+ specifier: ^5.5.2
+ version: 5.9.3
+ unbuild:
+ specifier: ^2.0.0
+ version: 2.0.0(typescript@5.9.3)
+ vite:
+ specifier: ^5.3.2
+ version: 5.4.21(@types/node@20.19.30)
+ vitest:
+ specifier: ^2.1.5
+ version: 2.1.9(@types/node@20.19.30)
+
+packages:
+
+ '@babel/code-frame@7.28.6':
+ resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.6':
+ resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.6':
+ resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.6':
+ resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/standalone@7.28.6':
+ resolution: {integrity: sha512-l/vUUfIKWdKHbHLqISTekuOaMuxNrnk7qlxFmhAKCayRXhkbBMB6zaJW+9oo0eLFgZLQEpG43LH4sxcEuy1M5g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ engines: {node: '>=6.9.0'}
+
+ '@esbuild/aix-ppc64@0.19.12':
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.24.2':
+ resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.19.12':
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.24.2':
+ resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.19.12':
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.24.2':
+ resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.19.12':
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.24.2':
+ resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.19.12':
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.24.2':
+ resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.19.12':
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.24.2':
+ resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.24.2':
+ resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.19.12':
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.24.2':
+ resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.19.12':
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.24.2':
+ resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.19.12':
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.24.2':
+ resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.19.12':
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.24.2':
+ resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.19.12':
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.24.2':
+ resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.19.12':
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.24.2':
+ resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.19.12':
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.24.2':
+ resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.19.12':
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.24.2':
+ resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.19.12':
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.24.2':
+ resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.19.12':
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.24.2':
+ resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.19.12':
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.24.2':
+ resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.19.12':
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.24.2':
+ resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.19.12':
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.24.2':
+ resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.19.12':
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.24.2':
+ resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.19.12':
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.24.2':
+ resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.19.12':
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.24.2':
+ resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@rollup/plugin-alias@5.1.1':
+ resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-commonjs@25.0.8':
+ resolution: {integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-json@6.1.0':
+ resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-node-resolve@15.3.1':
+ resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-replace@5.0.7':
+ resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/node@20.19.30':
+ resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
+
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
+ '@vitest/expect@2.1.9':
+ resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
+
+ '@vitest/mocker@2.1.9':
+ resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@2.1.9':
+ resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
+
+ '@vitest/runner@2.1.9':
+ resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
+
+ '@vitest/snapshot@2.1.9':
+ resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
+
+ '@vitest/spy@2.1.9':
+ resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
+
+ '@vitest/utils@2.1.9':
+ resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ autoprefixer@10.4.23:
+ resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.9.15:
+ resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==}
+ hasBin: true
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ caniuse-api@3.0.0:
+ resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+
+ caniuse-lite@1.0.30001764:
+ resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==}
+
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ check-error@2.1.3:
+ resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
+ engines: {node: '>= 16'}
+
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ css-declaration-sorter@7.3.1:
+ resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss: ^8.0.9
+
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@3.1.0:
+ resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ cssnano-preset-default@7.0.10:
+ resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano-utils@5.0.1:
+ resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano@7.1.2:
+ resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.24.2:
+ resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globby@13.2.2:
+ resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ knitwork@1.3.0:
+ resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.12.2:
+ resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ mkdist@1.6.0:
+ resolution: {integrity: sha512-nD7J/mx33Lwm4Q4qoPgRBVA9JQNKgyE7fLo5vdPWVDdjz96pXglGERp/fRnGPCTB37Kykfxs5bDdXa9BWOT9nw==}
+ hasBin: true
+ peerDependencies:
+ sass: ^1.78.0
+ typescript: '>=5.5.4'
+ vue-tsc: ^1.8.27 || ^2.0.21
+ peerDependenciesMeta:
+ sass:
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ postcss-calc@10.1.1:
+ resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
+ engines: {node: ^18.12 || ^20.9 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.38
+
+ postcss-colormin@7.0.5:
+ resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-convert-values@7.0.8:
+ resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-comments@7.0.5:
+ resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-duplicates@7.0.2:
+ resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-empty@7.0.1:
+ resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-overridden@7.0.1:
+ resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-merge-longhand@7.0.5:
+ resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-merge-rules@7.0.7:
+ resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-font-values@7.0.1:
+ resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-gradients@7.0.1:
+ resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-params@7.0.5:
+ resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-selectors@7.0.5:
+ resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-normalize-charset@7.0.1:
+ resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-display-values@7.0.1:
+ resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-positions@7.0.1:
+ resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-repeat-style@7.0.1:
+ resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-string@7.0.1:
+ resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-timing-functions@7.0.1:
+ resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-unicode@7.0.5:
+ resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-url@7.0.1:
+ resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-whitespace@7.0.1:
+ resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-ordered-values@7.0.2:
+ resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-initial@7.0.5:
+ resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-transforms@7.0.1:
+ resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
+ postcss-svgo@7.1.0:
+ resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-unique-selectors@7.0.4:
+ resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ pretty-bytes@6.1.1:
+ resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup-plugin-dts@6.3.0:
+ resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ rollup: ^3.29.4 || ^4
+ typescript: ^4.5 || ^5.0
+
+ rollup@3.29.5:
+ resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rollup@4.55.1:
+ resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
+
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ slash@4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
+ stylehacks@7.0.7:
+ resolution: {integrity: sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svgo@4.0.0:
+ resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ unbuild@2.0.0:
+ resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.1.6
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ untyped@1.5.2:
+ resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==}
+ hasBin: true
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vite-node@2.1.9:
+ resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vitest@2.1.9:
+ resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.9
+ '@vitest/ui': 2.1.9
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+snapshots:
+
+ '@babel/code-frame@7.28.6':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.6': {}
+
+ '@babel/core@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.6':
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/standalone@7.28.6': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/traverse@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@esbuild/aix-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.24.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/android-arm@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.24.2':
+ optional: true
+
+ '@esbuild/android-x64@0.19.12':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.24.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.24.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.24.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.24.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.19.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.24.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.19.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.24.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.24.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.19.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.24.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.24.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.24.2':
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@rollup/plugin-alias@5.1.1(rollup@3.29.5)':
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-commonjs@25.0.8(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ glob: 8.1.0
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-json@6.1.0(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-node-resolve@15.3.1(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.11
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-replace@5.0.7(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/pluginutils@5.3.0(rollup@3.29.5)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/node@20.19.30':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/resolve@1.20.2': {}
+
+ '@vitest/expect@2.1.9':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.3.3
+ tinyrainbow: 1.2.0
+
+ '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@20.19.30))':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 5.4.21(@types/node@20.19.30)
+
+ '@vitest/pretty-format@2.1.9':
+ dependencies:
+ tinyrainbow: 1.2.0
+
+ '@vitest/runner@2.1.9':
+ dependencies:
+ '@vitest/utils': 2.1.9
+ pathe: 1.1.2
+
+ '@vitest/snapshot@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ magic-string: 0.30.21
+ pathe: 1.1.2
+
+ '@vitest/spy@2.1.9':
+ dependencies:
+ tinyspy: 3.0.2
+
+ '@vitest/utils@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ loupe: 3.2.1
+ tinyrainbow: 1.2.0
+
+ acorn@8.15.0: {}
+
+ assertion-error@2.0.1: {}
+
+ autoprefixer@10.4.23(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001764
+ fraction.js: 5.3.4
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.9.15: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.9.15
+ caniuse-lite: 1.0.30001764
+ electron-to-chromium: 1.5.267
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ cac@6.7.14: {}
+
+ caniuse-api@3.0.0:
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001764
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+
+ caniuse-lite@1.0.30001764: {}
+
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.3
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
+ chalk@5.6.2: {}
+
+ check-error@2.1.3: {}
+
+ citty@0.1.6:
+ dependencies:
+ consola: 3.4.2
+
+ colord@2.9.3: {}
+
+ commander@11.1.0: {}
+
+ commondir@1.0.1: {}
+
+ confbox@0.1.8: {}
+
+ consola@3.4.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ css-declaration-sorter@7.3.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@3.1.0:
+ dependencies:
+ mdn-data: 2.12.2
+ source-map-js: 1.2.1
+
+ css-what@6.2.2: {}
+
+ cssesc@3.0.0: {}
+
+ cssnano-preset-default@7.0.10(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ css-declaration-sorter: 7.3.1(postcss@8.5.6)
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-calc: 10.1.1(postcss@8.5.6)
+ postcss-colormin: 7.0.5(postcss@8.5.6)
+ postcss-convert-values: 7.0.8(postcss@8.5.6)
+ postcss-discard-comments: 7.0.5(postcss@8.5.6)
+ postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
+ postcss-discard-empty: 7.0.1(postcss@8.5.6)
+ postcss-discard-overridden: 7.0.1(postcss@8.5.6)
+ postcss-merge-longhand: 7.0.5(postcss@8.5.6)
+ postcss-merge-rules: 7.0.7(postcss@8.5.6)
+ postcss-minify-font-values: 7.0.1(postcss@8.5.6)
+ postcss-minify-gradients: 7.0.1(postcss@8.5.6)
+ postcss-minify-params: 7.0.5(postcss@8.5.6)
+ postcss-minify-selectors: 7.0.5(postcss@8.5.6)
+ postcss-normalize-charset: 7.0.1(postcss@8.5.6)
+ postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
+ postcss-normalize-positions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
+ postcss-normalize-string: 7.0.1(postcss@8.5.6)
+ postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-unicode: 7.0.5(postcss@8.5.6)
+ postcss-normalize-url: 7.0.1(postcss@8.5.6)
+ postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
+ postcss-ordered-values: 7.0.2(postcss@8.5.6)
+ postcss-reduce-initial: 7.0.5(postcss@8.5.6)
+ postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
+ postcss-svgo: 7.1.0(postcss@8.5.6)
+ postcss-unique-selectors: 7.0.4(postcss@8.5.6)
+
+ cssnano-utils@5.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ cssnano@7.1.2(postcss@8.5.6):
+ dependencies:
+ cssnano-preset-default: 7.0.10(postcss@8.5.6)
+ lilconfig: 3.1.3
+ postcss: 8.5.6
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-eql@5.0.2: {}
+
+ deepmerge@4.3.1: {}
+
+ defu@6.1.4: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ electron-to-chromium@1.5.267: {}
+
+ entities@4.5.0: {}
+
+ es-module-lexer@1.7.0: {}
+
+ esbuild@0.19.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ esbuild@0.24.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.24.2
+ '@esbuild/android-arm': 0.24.2
+ '@esbuild/android-arm64': 0.24.2
+ '@esbuild/android-x64': 0.24.2
+ '@esbuild/darwin-arm64': 0.24.2
+ '@esbuild/darwin-x64': 0.24.2
+ '@esbuild/freebsd-arm64': 0.24.2
+ '@esbuild/freebsd-x64': 0.24.2
+ '@esbuild/linux-arm': 0.24.2
+ '@esbuild/linux-arm64': 0.24.2
+ '@esbuild/linux-ia32': 0.24.2
+ '@esbuild/linux-loong64': 0.24.2
+ '@esbuild/linux-mips64el': 0.24.2
+ '@esbuild/linux-ppc64': 0.24.2
+ '@esbuild/linux-riscv64': 0.24.2
+ '@esbuild/linux-s390x': 0.24.2
+ '@esbuild/linux-x64': 0.24.2
+ '@esbuild/netbsd-arm64': 0.24.2
+ '@esbuild/netbsd-x64': 0.24.2
+ '@esbuild/openbsd-arm64': 0.24.2
+ '@esbuild/openbsd-x64': 0.24.2
+ '@esbuild/sunos-x64': 0.24.2
+ '@esbuild/win32-arm64': 0.24.2
+ '@esbuild/win32-ia32': 0.24.2
+ '@esbuild/win32-x64': 0.24.2
+
+ escalade@3.2.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ expect-type@1.3.0: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ fraction.js@5.3.4: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ globby@13.2.2:
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 4.0.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hookable@5.5.3: {}
+
+ ignore@5.3.2: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-module@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ jiti@1.21.7: {}
+
+ jiti@2.6.1: {}
+
+ js-tokens@4.0.0: {}
+
+ jsesc@3.1.0: {}
+
+ json5@2.2.3: {}
+
+ knitwork@1.3.0: {}
+
+ lilconfig@3.1.3: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ loupe@3.2.1: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.12.2: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ mkdist@1.6.0(typescript@5.9.3):
+ dependencies:
+ autoprefixer: 10.4.23(postcss@8.5.6)
+ citty: 0.1.6
+ cssnano: 7.1.2(postcss@8.5.6)
+ defu: 6.1.4
+ esbuild: 0.24.2
+ jiti: 1.21.7
+ mlly: 1.8.0
+ pathe: 1.1.2
+ pkg-types: 1.3.1
+ postcss: 8.5.6
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ typescript: 5.9.3
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ node-releases@2.0.27: {}
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ path-parse@1.0.7: {}
+
+ path-type@4.0.0: {}
+
+ pathe@1.1.2: {}
+
+ pathe@2.0.3: {}
+
+ pathval@2.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ postcss-calc@10.1.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+ postcss-value-parser: 4.2.0
+
+ postcss-colormin@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@7.0.8(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-discard-comments@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-discard-duplicates@7.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-empty@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-overridden@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-merge-longhand@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ stylehacks: 7.0.7(postcss@8.5.6)
+
+ postcss-merge-rules@7.0.7(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-minify-font-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@7.0.1(postcss@8.5.6):
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-selectors@7.0.5(postcss@8.5.6):
+ dependencies:
+ cssesc: 3.0.0
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-normalize-charset@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-normalize-display-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@7.0.2(postcss@8.5.6):
+ dependencies:
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-initial@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ postcss: 8.5.6
+
+ postcss-reduce-transforms@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-svgo@7.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ svgo: 4.0.0
+
+ postcss-unique-selectors@7.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ pretty-bytes@6.1.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ rollup-plugin-dts@6.3.0(rollup@3.29.5)(typescript@5.9.3):
+ dependencies:
+ magic-string: 0.30.21
+ rollup: 3.29.5
+ typescript: 5.9.3
+ optionalDependencies:
+ '@babel/code-frame': 7.28.6
+
+ rollup@3.29.5:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ rollup@4.55.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.55.1
+ '@rollup/rollup-android-arm64': 4.55.1
+ '@rollup/rollup-darwin-arm64': 4.55.1
+ '@rollup/rollup-darwin-x64': 4.55.1
+ '@rollup/rollup-freebsd-arm64': 4.55.1
+ '@rollup/rollup-freebsd-x64': 4.55.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.55.1
+ '@rollup/rollup-linux-arm64-gnu': 4.55.1
+ '@rollup/rollup-linux-arm64-musl': 4.55.1
+ '@rollup/rollup-linux-loong64-gnu': 4.55.1
+ '@rollup/rollup-linux-loong64-musl': 4.55.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.55.1
+ '@rollup/rollup-linux-ppc64-musl': 4.55.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.55.1
+ '@rollup/rollup-linux-riscv64-musl': 4.55.1
+ '@rollup/rollup-linux-s390x-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-musl': 4.55.1
+ '@rollup/rollup-openbsd-x64': 4.55.1
+ '@rollup/rollup-openharmony-arm64': 4.55.1
+ '@rollup/rollup-win32-arm64-msvc': 4.55.1
+ '@rollup/rollup-win32-ia32-msvc': 4.55.1
+ '@rollup/rollup-win32-x64-gnu': 4.55.1
+ '@rollup/rollup-win32-x64-msvc': 4.55.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ sax@1.4.4: {}
+
+ scule@1.3.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ siginfo@2.0.0: {}
+
+ slash@4.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
+ stylehacks@7.0.7(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svgo@4.0.0:
+ dependencies:
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.1.0
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ sax: 1.4.4
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ tinypool@1.1.1: {}
+
+ tinyrainbow@1.2.0: {}
+
+ tinyspy@3.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ typescript@5.9.3: {}
+
+ ufo@1.6.3: {}
+
+ unbuild@2.0.0(typescript@5.9.3):
+ dependencies:
+ '@rollup/plugin-alias': 5.1.1(rollup@3.29.5)
+ '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.5)
+ '@rollup/plugin-json': 6.1.0(rollup@3.29.5)
+ '@rollup/plugin-node-resolve': 15.3.1(rollup@3.29.5)
+ '@rollup/plugin-replace': 5.0.7(rollup@3.29.5)
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ chalk: 5.6.2
+ citty: 0.1.6
+ consola: 3.4.2
+ defu: 6.1.4
+ esbuild: 0.19.12
+ globby: 13.2.2
+ hookable: 5.5.3
+ jiti: 1.21.7
+ magic-string: 0.30.21
+ mkdist: 1.6.0(typescript@5.9.3)
+ mlly: 1.8.0
+ pathe: 1.1.2
+ pkg-types: 1.3.1
+ pretty-bytes: 6.1.1
+ rollup: 3.29.5
+ rollup-plugin-dts: 6.3.0(rollup@3.29.5)(typescript@5.9.3)
+ scule: 1.3.0
+ untyped: 1.5.2
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - sass
+ - supports-color
+ - vue-tsc
+
+ undici-types@6.21.0: {}
+
+ untyped@1.5.2:
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/standalone': 7.28.6
+ '@babel/types': 7.28.6
+ citty: 0.1.6
+ defu: 6.1.4
+ jiti: 2.6.1
+ knitwork: 1.3.0
+ scule: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ util-deprecate@1.0.2: {}
+
+ vite-node@2.1.9(@types/node@20.19.30):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 1.1.2
+ vite: 5.4.21(@types/node@20.19.30)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite@5.4.21(@types/node@20.19.30):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.55.1
+ optionalDependencies:
+ '@types/node': 20.19.30
+ fsevents: 2.3.3
+
+ vitest@2.1.9(@types/node@20.19.30):
+ dependencies:
+ '@vitest/expect': 2.1.9
+ '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@20.19.30))
+ '@vitest/pretty-format': 2.1.9
+ '@vitest/runner': 2.1.9
+ '@vitest/snapshot': 2.1.9
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 1.1.2
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinypool: 1.1.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.21(@types/node@20.19.30)
+ vite-node: 2.1.9(@types/node@20.19.30)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 20.19.30
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ wrappy@1.0.2: {}
+
+ yallist@3.1.1: {}
diff --git a/packages/escss/src/dictionaries.ts b/packages/escss/src/dictionaries.ts
new file mode 100644
index 00000000..75d9562a
--- /dev/null
+++ b/packages/escss/src/dictionaries.ts
@@ -0,0 +1,12 @@
+/**
+ * EsCSS dictionaries for direct access to translation maps.
+ */
+
+export { getDictionary as getPropertiesDictionary } from './generated/properties'
+export { getDictionary as getValuesDictionary } from './generated/values'
+export { getDictionary as getAtRulesDictionary } from './generated/at-rules'
+export { getDictionary as getSelectorsDictionary } from './generated/selectors'
+export {
+ getPseudoClassesDictionary,
+ getPseudoElementsDictionary,
+} from './generated/pseudo'
diff --git a/packages/escss/src/generated/at-rules.ts b/packages/escss/src/generated/at-rules.ts
new file mode 100644
index 00000000..826867e7
--- /dev/null
+++ b/packages/escss/src/generated/at-rules.ts
@@ -0,0 +1,76 @@
+import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS at-rules dictionary.
+ * Maps Spanish at-rule names to standard CSS at-rule names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+ ['medios', 'media'],
+ ['fotogramas', 'keyframes'],
+ ['importar', 'import'],
+ ['fuente-cara', 'font-face'],
+ ['soporta', 'supports'],
+ ['conjunto-caracteres', 'charset'],
+ ['espacio-nombres', 'namespace'],
+ ['pagina', 'page'],
+ ['capa', 'layer'],
+ ['contenedor', 'container'],
+ ['propiedad', 'property'],
+ ['ambito', 'scope'],
+ ['estilo-inicial', 'starting-style'],
+])
+
+/**
+ * Get the at-rules dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+
+/**
+ * List of all CSS at-rules.
+ */
+export const cssAtRulesList = [
+ 'media',
+ 'keyframes',
+ 'import',
+ 'font-face',
+ 'supports',
+ 'charset',
+ 'namespace',
+ 'page',
+ 'layer',
+ 'container',
+ 'property',
+ 'scope',
+ 'starting-style',
+]
+
+/**
+ * List of all EsCSS at-rules.
+ */
+export const escssAtRulesList = [
+ 'medios',
+ 'fotogramas',
+ 'importar',
+ 'fuente-cara',
+ 'soporta',
+ 'conjunto-caracteres',
+ 'espacio-nombres',
+ 'pagina',
+ 'capa',
+ 'contenedor',
+ 'propiedad',
+ 'ambito',
+ 'estilo-inicial',
+]
diff --git a/packages/escss/src/generated/properties.ts b/packages/escss/src/generated/properties.ts
new file mode 100644
index 00000000..e8eb3353
--- /dev/null
+++ b/packages/escss/src/generated/properties.ts
@@ -0,0 +1,808 @@
+import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS property dictionary.
+ * Maps Spanish CSS property names to standard CSS property names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+ ['mostrar', 'display'],
+ ['visibilidad', 'visibility'],
+ ['opacidad', 'opacity'],
+ ['posicion', 'position'],
+ ['arriba', 'top'],
+ ['derecha', 'right'],
+ ['abajo', 'bottom'],
+ ['izquierda', 'left'],
+ ['z-indice', 'z-index'],
+ ['insercion', 'inset'],
+ ['insercion-bloque', 'inset-block'],
+ ['insercion-bloque-inicio', 'inset-block-start'],
+ ['insercion-bloque-fin', 'inset-block-end'],
+ ['insercion-enlinea', 'inset-inline'],
+ ['insercion-enlinea-inicio', 'inset-inline-start'],
+ ['insercion-enlinea-fin', 'inset-inline-end'],
+ ['ancho', 'width'],
+ ['alto', 'height'],
+ ['minimo-ancho', 'min-width'],
+ ['minimo-alto', 'min-height'],
+ ['maximo-ancho', 'max-width'],
+ ['maximo-alto', 'max-height'],
+ ['margen', 'margin'],
+ ['margen-arriba', 'margin-top'],
+ ['margen-derecha', 'margin-right'],
+ ['margen-abajo', 'margin-bottom'],
+ ['margen-izquierda', 'margin-left'],
+ ['margen-bloque', 'margin-block'],
+ ['margen-bloque-inicio', 'margin-block-start'],
+ ['margen-bloque-fin', 'margin-block-end'],
+ ['margen-enlinea', 'margin-inline'],
+ ['margen-enlinea-inicio', 'margin-inline-start'],
+ ['margen-enlinea-fin', 'margin-inline-end'],
+ ['relleno', 'padding'],
+ ['relleno-arriba', 'padding-top'],
+ ['relleno-derecha', 'padding-right'],
+ ['relleno-abajo', 'padding-bottom'],
+ ['relleno-izquierda', 'padding-left'],
+ ['relleno-bloque', 'padding-block'],
+ ['relleno-bloque-inicio', 'padding-block-start'],
+ ['relleno-bloque-fin', 'padding-block-end'],
+ ['relleno-enlinea', 'padding-inline'],
+ ['relleno-enlinea-inicio', 'padding-inline-start'],
+ ['relleno-enlinea-fin', 'padding-inline-end'],
+ ['caja-dimensionamiento', 'box-sizing'],
+ ['borde', 'border'],
+ ['borde-ancho', 'border-width'],
+ ['borde-estilo', 'border-style'],
+ ['borde-color', 'border-color'],
+ ['borde-arriba', 'border-top'],
+ ['borde-arriba-ancho', 'border-top-width'],
+ ['borde-arriba-estilo', 'border-top-style'],
+ ['borde-arriba-color', 'border-top-color'],
+ ['borde-derecha', 'border-right'],
+ ['borde-derecha-ancho', 'border-right-width'],
+ ['borde-derecha-estilo', 'border-right-style'],
+ ['borde-derecha-color', 'border-right-color'],
+ ['borde-abajo', 'border-bottom'],
+ ['borde-abajo-ancho', 'border-bottom-width'],
+ ['borde-abajo-estilo', 'border-bottom-style'],
+ ['borde-abajo-color', 'border-bottom-color'],
+ ['borde-izquierda', 'border-left'],
+ ['borde-izquierda-ancho', 'border-left-width'],
+ ['borde-izquierda-estilo', 'border-left-style'],
+ ['borde-izquierda-color', 'border-left-color'],
+ ['borde-radio', 'border-radius'],
+ ['borde-arriba-izquierda-radio', 'border-top-left-radius'],
+ ['borde-arriba-derecha-radio', 'border-top-right-radius'],
+ ['borde-abajo-derecha-radio', 'border-bottom-right-radius'],
+ ['borde-abajo-izquierda-radio', 'border-bottom-left-radius'],
+ ['borde-imagen', 'border-image'],
+ ['borde-imagen-procedencia', 'border-image-source'],
+ ['borde-imagen-segmento', 'border-image-slice'],
+ ['borde-imagen-ancho', 'border-image-width'],
+ ['borde-imagen-exterior', 'border-image-outset'],
+ ['borde-imagen-repetir', 'border-image-repeat'],
+ ['borde-colapsar', 'border-collapse'],
+ ['borde-espaciado', 'border-spacing'],
+ ['contorno', 'outline'],
+ ['contorno-ancho', 'outline-width'],
+ ['contorno-estilo', 'outline-style'],
+ ['contorno-color', 'outline-color'],
+ ['contorno-desplazamiento', 'outline-offset'],
+ ['fondo', 'background'],
+ ['fondo-color', 'background-color'],
+ ['fondo-imagen', 'background-image'],
+ ['fondo-posicion', 'background-position'],
+ ['fondo-tamaño', 'background-size'],
+ ['fondo-repetir', 'background-repeat'],
+ ['fondo-fijacion', 'background-attachment'],
+ ['fondo-origen', 'background-origin'],
+ ['fondo-recorte', 'background-clip'],
+ ['fondo-mezcla-modo', 'background-blend-mode'],
+ ['color', 'color'],
+ ['acento-color', 'accent-color'],
+ ['cursor-texto-color', 'caret-color'],
+ ['fuente', 'font'],
+ ['fuente-familia', 'font-family'],
+ ['fuente-tamaño', 'font-size'],
+ ['fuente-peso', 'font-weight'],
+ ['fuente-estilo', 'font-style'],
+ ['fuente-variante', 'font-variant'],
+ ['fuente-estirar', 'font-stretch'],
+ ['linea-alto', 'line-height'],
+ ['letra-espaciado', 'letter-spacing'],
+ ['palabra-espaciado', 'word-spacing'],
+ ['texto-alinear', 'text-align'],
+ ['texto-decoracion', 'text-decoration'],
+ ['texto-decoracion-linea', 'text-decoration-line'],
+ ['texto-decoracion-color', 'text-decoration-color'],
+ ['texto-decoracion-estilo', 'text-decoration-style'],
+ ['texto-decoracion-grosor', 'text-decoration-thickness'],
+ ['texto-transformar', 'text-transform'],
+ ['texto-sangria', 'text-indent'],
+ ['texto-sombra', 'text-shadow'],
+ ['texto-desbordamiento', 'text-overflow'],
+ ['texto-envolver', 'text-wrap'],
+ ['blanco-espacio', 'white-space'],
+ ['palabra-romper', 'word-break'],
+ ['palabra-envolver', 'word-wrap'],
+ ['desbordamiento-envolver', 'overflow-wrap'],
+ ['guiones', 'hyphens'],
+ ['tabulacion-tamaño', 'tab-size'],
+ ['vertical-alinear', 'vertical-align'],
+ ['direccion', 'direction'],
+ ['escritura-modo', 'writing-mode'],
+ ['unicode-bidi', 'unicode-bidi'],
+ ['flex', 'flex'],
+ ['flex-direccion', 'flex-direction'],
+ ['flex-envolver', 'flex-wrap'],
+ ['flex-flujo', 'flex-flow'],
+ ['flex-crecer', 'flex-grow'],
+ ['flex-encoger', 'flex-shrink'],
+ ['flex-base', 'flex-basis'],
+ ['justificar-contenido', 'justify-content'],
+ ['alinear-elementos', 'align-items'],
+ ['alinear-propio', 'align-self'],
+ ['alinear-contenido', 'align-content'],
+ ['orden', 'order'],
+ ['brecha', 'gap'],
+ ['fila-brecha', 'row-gap'],
+ ['columna-brecha', 'column-gap'],
+ ['cuadricula', 'grid'],
+ ['cuadricula-plantilla', 'grid-template'],
+ ['cuadricula-plantilla-columnas', 'grid-template-columns'],
+ ['cuadricula-plantilla-filas', 'grid-template-rows'],
+ ['cuadricula-plantilla-areas', 'grid-template-areas'],
+ ['cuadricula-auto-columnas', 'grid-auto-columns'],
+ ['cuadricula-auto-filas', 'grid-auto-rows'],
+ ['cuadricula-auto-flujo', 'grid-auto-flow'],
+ ['cuadricula-columna', 'grid-column'],
+ ['cuadricula-columna-inicio', 'grid-column-start'],
+ ['cuadricula-columna-fin', 'grid-column-end'],
+ ['cuadricula-fila', 'grid-row'],
+ ['cuadricula-fila-inicio', 'grid-row-start'],
+ ['cuadricula-fila-fin', 'grid-row-end'],
+ ['cuadricula-area', 'grid-area'],
+ ['colocar-contenido', 'place-content'],
+ ['colocar-elementos', 'place-items'],
+ ['colocar-propio', 'place-self'],
+ ['desbordamiento', 'overflow'],
+ ['desbordamiento-x', 'overflow-x'],
+ ['desbordamiento-y', 'overflow-y'],
+ ['desplazar-comportamiento', 'scroll-behavior'],
+ ['desplazar-margen', 'scroll-margin'],
+ ['desplazar-margen-arriba', 'scroll-margin-top'],
+ ['desplazar-margen-derecha', 'scroll-margin-right'],
+ ['desplazar-margen-abajo', 'scroll-margin-bottom'],
+ ['desplazar-margen-izquierda', 'scroll-margin-left'],
+ ['desplazar-relleno', 'scroll-padding'],
+ ['desplazar-relleno-arriba', 'scroll-padding-top'],
+ ['desplazar-relleno-derecha', 'scroll-padding-right'],
+ ['desplazar-relleno-abajo', 'scroll-padding-bottom'],
+ ['desplazar-relleno-izquierda', 'scroll-padding-left'],
+ ['desplazar-ajustar-tipo', 'scroll-snap-type'],
+ ['desplazar-ajustar-alinear', 'scroll-snap-align'],
+ ['flotar', 'float'],
+ ['limpiar', 'clear'],
+ ['lista-estilo', 'list-style'],
+ ['lista-estilo-tipo', 'list-style-type'],
+ ['lista-estilo-posicion', 'list-style-position'],
+ ['lista-estilo-imagen', 'list-style-image'],
+ ['contador-reiniciar', 'counter-reset'],
+ ['contador-incrementar', 'counter-increment'],
+ ['tabla-disposicion', 'table-layout'],
+ ['titulo-lado', 'caption-side'],
+ ['vacio-celdas', 'empty-cells'],
+ ['transformar', 'transform'],
+ ['transformar-origen', 'transform-origin'],
+ ['transformar-estilo', 'transform-style'],
+ ['rotar', 'rotate'],
+ ['escala', 'scale'],
+ ['trasladar', 'translate'],
+ ['perspectiva', 'perspective'],
+ ['perspectiva-origen', 'perspective-origin'],
+ ['cara-trasera-visibilidad', 'backface-visibility'],
+ ['transicion', 'transition'],
+ ['transicion-propiedad', 'transition-property'],
+ ['transicion-duracion', 'transition-duration'],
+ ['transicion-tiempo-funcion', 'transition-timing-function'],
+ ['transicion-retraso', 'transition-delay'],
+ ['animacion', 'animation'],
+ ['animacion-nombre', 'animation-name'],
+ ['animacion-duracion', 'animation-duration'],
+ ['animacion-tiempo-funcion', 'animation-timing-function'],
+ ['animacion-retraso', 'animation-delay'],
+ ['animacion-iteracion-conteo', 'animation-iteration-count'],
+ ['animacion-direccion', 'animation-direction'],
+ ['animacion-rellenar-modo', 'animation-fill-mode'],
+ ['animacion-reproducir-estado', 'animation-play-state'],
+ ['filtro', 'filter'],
+ ['trasfondo-filtro', 'backdrop-filter'],
+ ['mezclar-mezcla-modo', 'mix-blend-mode'],
+ ['aislamiento', 'isolation'],
+ ['caja-sombra', 'box-shadow'],
+ ['recorte', 'clip'],
+ ['recorte-ruta', 'clip-path'],
+ ['mascara', 'mask'],
+ ['mascara-imagen', 'mask-image'],
+ ['mascara-modo', 'mask-mode'],
+ ['mascara-posicion', 'mask-position'],
+ ['mascara-tamaño', 'mask-size'],
+ ['mascara-repetir', 'mask-repeat'],
+ ['mascara-origen', 'mask-origin'],
+ ['mascara-recorte', 'mask-clip'],
+ ['objeto-ajuste', 'object-fit'],
+ ['objeto-posicion', 'object-position'],
+ ['aspecto-proporcion', 'aspect-ratio'],
+ ['cursor', 'cursor'],
+ ['puntero-eventos', 'pointer-events'],
+ ['usuario-seleccionar', 'user-select'],
+ ['tocar-accion', 'touch-action'],
+ ['redimensionar', 'resize'],
+ ['apariencia', 'appearance'],
+ ['va-cambiar', 'will-change'],
+ ['columnas', 'columns'],
+ ['columna-conteo', 'column-count'],
+ ['columna-ancho', 'column-width'],
+ ['columna-regla', 'column-rule'],
+ ['columna-regla-ancho', 'column-rule-width'],
+ ['columna-regla-estilo', 'column-rule-style'],
+ ['columna-regla-color', 'column-rule-color'],
+ ['columna-extension', 'column-span'],
+ ['columna-rellenar', 'column-fill'],
+ ['pagina-romper-antes', 'page-break-before'],
+ ['pagina-romper-despues', 'page-break-after'],
+ ['pagina-romper-dentro', 'page-break-inside'],
+ ['romper-antes', 'break-before'],
+ ['romper-despues', 'break-after'],
+ ['romper-dentro', 'break-inside'],
+ ['huerfanos', 'orphans'],
+ ['viudas', 'widows'],
+ ['contener', 'contain'],
+ ['contenido-visibilidad', 'content-visibility'],
+ ['contenido', 'content'],
+ ['comillas', 'quotes'],
+ ['todo', 'all'],
+])
+
+/**
+ * Get the properties dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
+
+/**
+ * List of all CSS properties.
+ */
+export const cssProperties = [
+ 'display',
+ 'visibility',
+ 'opacity',
+ 'position',
+ 'top',
+ 'right',
+ 'bottom',
+ 'left',
+ 'z-index',
+ 'inset',
+ 'inset-block',
+ 'inset-block-start',
+ 'inset-block-end',
+ 'inset-inline',
+ 'inset-inline-start',
+ 'inset-inline-end',
+ 'width',
+ 'height',
+ 'min-width',
+ 'min-height',
+ 'max-width',
+ 'max-height',
+ 'margin',
+ 'margin-top',
+ 'margin-right',
+ 'margin-bottom',
+ 'margin-left',
+ 'margin-block',
+ 'margin-block-start',
+ 'margin-block-end',
+ 'margin-inline',
+ 'margin-inline-start',
+ 'margin-inline-end',
+ 'padding',
+ 'padding-top',
+ 'padding-right',
+ 'padding-bottom',
+ 'padding-left',
+ 'padding-block',
+ 'padding-block-start',
+ 'padding-block-end',
+ 'padding-inline',
+ 'padding-inline-start',
+ 'padding-inline-end',
+ 'box-sizing',
+ 'border',
+ 'border-width',
+ 'border-style',
+ 'border-color',
+ 'border-top',
+ 'border-top-width',
+ 'border-top-style',
+ 'border-top-color',
+ 'border-right',
+ 'border-right-width',
+ 'border-right-style',
+ 'border-right-color',
+ 'border-bottom',
+ 'border-bottom-width',
+ 'border-bottom-style',
+ 'border-bottom-color',
+ 'border-left',
+ 'border-left-width',
+ 'border-left-style',
+ 'border-left-color',
+ 'border-radius',
+ 'border-top-left-radius',
+ 'border-top-right-radius',
+ 'border-bottom-right-radius',
+ 'border-bottom-left-radius',
+ 'border-image',
+ 'border-image-source',
+ 'border-image-slice',
+ 'border-image-width',
+ 'border-image-outset',
+ 'border-image-repeat',
+ 'border-collapse',
+ 'border-spacing',
+ 'outline',
+ 'outline-width',
+ 'outline-style',
+ 'outline-color',
+ 'outline-offset',
+ 'background',
+ 'background-color',
+ 'background-image',
+ 'background-position',
+ 'background-size',
+ 'background-repeat',
+ 'background-attachment',
+ 'background-origin',
+ 'background-clip',
+ 'background-blend-mode',
+ 'color',
+ 'accent-color',
+ 'caret-color',
+ 'font',
+ 'font-family',
+ 'font-size',
+ 'font-weight',
+ 'font-style',
+ 'font-variant',
+ 'font-stretch',
+ 'line-height',
+ 'letter-spacing',
+ 'word-spacing',
+ 'text-align',
+ 'text-decoration',
+ 'text-decoration-line',
+ 'text-decoration-color',
+ 'text-decoration-style',
+ 'text-decoration-thickness',
+ 'text-transform',
+ 'text-indent',
+ 'text-shadow',
+ 'text-overflow',
+ 'text-wrap',
+ 'white-space',
+ 'word-break',
+ 'word-wrap',
+ 'overflow-wrap',
+ 'hyphens',
+ 'tab-size',
+ 'vertical-align',
+ 'direction',
+ 'writing-mode',
+ 'unicode-bidi',
+ 'flex',
+ 'flex-direction',
+ 'flex-wrap',
+ 'flex-flow',
+ 'flex-grow',
+ 'flex-shrink',
+ 'flex-basis',
+ 'justify-content',
+ 'align-items',
+ 'align-self',
+ 'align-content',
+ 'order',
+ 'gap',
+ 'row-gap',
+ 'column-gap',
+ 'grid',
+ 'grid-template',
+ 'grid-template-columns',
+ 'grid-template-rows',
+ 'grid-template-areas',
+ 'grid-auto-columns',
+ 'grid-auto-rows',
+ 'grid-auto-flow',
+ 'grid-column',
+ 'grid-column-start',
+ 'grid-column-end',
+ 'grid-row',
+ 'grid-row-start',
+ 'grid-row-end',
+ 'grid-area',
+ 'place-content',
+ 'place-items',
+ 'place-self',
+ 'overflow',
+ 'overflow-x',
+ 'overflow-y',
+ 'scroll-behavior',
+ 'scroll-margin',
+ 'scroll-margin-top',
+ 'scroll-margin-right',
+ 'scroll-margin-bottom',
+ 'scroll-margin-left',
+ 'scroll-padding',
+ 'scroll-padding-top',
+ 'scroll-padding-right',
+ 'scroll-padding-bottom',
+ 'scroll-padding-left',
+ 'scroll-snap-type',
+ 'scroll-snap-align',
+ 'float',
+ 'clear',
+ 'list-style',
+ 'list-style-type',
+ 'list-style-position',
+ 'list-style-image',
+ 'counter-reset',
+ 'counter-increment',
+ 'table-layout',
+ 'caption-side',
+ 'empty-cells',
+ 'transform',
+ 'transform-origin',
+ 'transform-style',
+ 'rotate',
+ 'scale',
+ 'translate',
+ 'perspective',
+ 'perspective-origin',
+ 'backface-visibility',
+ 'transition',
+ 'transition-property',
+ 'transition-duration',
+ 'transition-timing-function',
+ 'transition-delay',
+ 'animation',
+ 'animation-name',
+ 'animation-duration',
+ 'animation-timing-function',
+ 'animation-delay',
+ 'animation-iteration-count',
+ 'animation-direction',
+ 'animation-fill-mode',
+ 'animation-play-state',
+ 'filter',
+ 'backdrop-filter',
+ 'mix-blend-mode',
+ 'isolation',
+ 'box-shadow',
+ 'clip',
+ 'clip-path',
+ 'mask',
+ 'mask-image',
+ 'mask-mode',
+ 'mask-position',
+ 'mask-size',
+ 'mask-repeat',
+ 'mask-origin',
+ 'mask-clip',
+ 'object-fit',
+ 'object-position',
+ 'aspect-ratio',
+ 'cursor',
+ 'pointer-events',
+ 'user-select',
+ 'touch-action',
+ 'resize',
+ 'appearance',
+ 'will-change',
+ 'columns',
+ 'column-count',
+ 'column-width',
+ 'column-rule',
+ 'column-rule-width',
+ 'column-rule-style',
+ 'column-rule-color',
+ 'column-span',
+ 'column-fill',
+ 'page-break-before',
+ 'page-break-after',
+ 'page-break-inside',
+ 'break-before',
+ 'break-after',
+ 'break-inside',
+ 'orphans',
+ 'widows',
+ 'contain',
+ 'content-visibility',
+ 'content',
+ 'quotes',
+ 'all',
+]
+
+/**
+ * List of all EsCSS properties.
+ */
+export const escssProperties = [
+ 'mostrar',
+ 'visibilidad',
+ 'opacidad',
+ 'posicion',
+ 'arriba',
+ 'derecha',
+ 'abajo',
+ 'izquierda',
+ 'z-indice',
+ 'insercion',
+ 'insercion-bloque',
+ 'insercion-bloque-inicio',
+ 'insercion-bloque-fin',
+ 'insercion-enlinea',
+ 'insercion-enlinea-inicio',
+ 'insercion-enlinea-fin',
+ 'ancho',
+ 'alto',
+ 'minimo-ancho',
+ 'minimo-alto',
+ 'maximo-ancho',
+ 'maximo-alto',
+ 'margen',
+ 'margen-arriba',
+ 'margen-derecha',
+ 'margen-abajo',
+ 'margen-izquierda',
+ 'margen-bloque',
+ 'margen-bloque-inicio',
+ 'margen-bloque-fin',
+ 'margen-enlinea',
+ 'margen-enlinea-inicio',
+ 'margen-enlinea-fin',
+ 'relleno',
+ 'relleno-arriba',
+ 'relleno-derecha',
+ 'relleno-abajo',
+ 'relleno-izquierda',
+ 'relleno-bloque',
+ 'relleno-bloque-inicio',
+ 'relleno-bloque-fin',
+ 'relleno-enlinea',
+ 'relleno-enlinea-inicio',
+ 'relleno-enlinea-fin',
+ 'caja-dimensionamiento',
+ 'borde',
+ 'borde-ancho',
+ 'borde-estilo',
+ 'borde-color',
+ 'borde-arriba',
+ 'borde-arriba-ancho',
+ 'borde-arriba-estilo',
+ 'borde-arriba-color',
+ 'borde-derecha',
+ 'borde-derecha-ancho',
+ 'borde-derecha-estilo',
+ 'borde-derecha-color',
+ 'borde-abajo',
+ 'borde-abajo-ancho',
+ 'borde-abajo-estilo',
+ 'borde-abajo-color',
+ 'borde-izquierda',
+ 'borde-izquierda-ancho',
+ 'borde-izquierda-estilo',
+ 'borde-izquierda-color',
+ 'borde-radio',
+ 'borde-arriba-izquierda-radio',
+ 'borde-arriba-derecha-radio',
+ 'borde-abajo-derecha-radio',
+ 'borde-abajo-izquierda-radio',
+ 'borde-imagen',
+ 'borde-imagen-procedencia',
+ 'borde-imagen-segmento',
+ 'borde-imagen-ancho',
+ 'borde-imagen-exterior',
+ 'borde-imagen-repetir',
+ 'borde-colapsar',
+ 'borde-espaciado',
+ 'contorno',
+ 'contorno-ancho',
+ 'contorno-estilo',
+ 'contorno-color',
+ 'contorno-desplazamiento',
+ 'fondo',
+ 'fondo-color',
+ 'fondo-imagen',
+ 'fondo-posicion',
+ 'fondo-tamaño',
+ 'fondo-repetir',
+ 'fondo-fijacion',
+ 'fondo-origen',
+ 'fondo-recorte',
+ 'fondo-mezcla-modo',
+ 'color',
+ 'acento-color',
+ 'cursor-texto-color',
+ 'fuente',
+ 'fuente-familia',
+ 'fuente-tamaño',
+ 'fuente-peso',
+ 'fuente-estilo',
+ 'fuente-variante',
+ 'fuente-estirar',
+ 'linea-alto',
+ 'letra-espaciado',
+ 'palabra-espaciado',
+ 'texto-alinear',
+ 'texto-decoracion',
+ 'texto-decoracion-linea',
+ 'texto-decoracion-color',
+ 'texto-decoracion-estilo',
+ 'texto-decoracion-grosor',
+ 'texto-transformar',
+ 'texto-sangria',
+ 'texto-sombra',
+ 'texto-desbordamiento',
+ 'texto-envolver',
+ 'blanco-espacio',
+ 'palabra-romper',
+ 'palabra-envolver',
+ 'desbordamiento-envolver',
+ 'guiones',
+ 'tabulacion-tamaño',
+ 'vertical-alinear',
+ 'direccion',
+ 'escritura-modo',
+ 'unicode-bidi',
+ 'flex',
+ 'flex-direccion',
+ 'flex-envolver',
+ 'flex-flujo',
+ 'flex-crecer',
+ 'flex-encoger',
+ 'flex-base',
+ 'justificar-contenido',
+ 'alinear-elementos',
+ 'alinear-propio',
+ 'alinear-contenido',
+ 'orden',
+ 'brecha',
+ 'fila-brecha',
+ 'columna-brecha',
+ 'cuadricula',
+ 'cuadricula-plantilla',
+ 'cuadricula-plantilla-columnas',
+ 'cuadricula-plantilla-filas',
+ 'cuadricula-plantilla-areas',
+ 'cuadricula-auto-columnas',
+ 'cuadricula-auto-filas',
+ 'cuadricula-auto-flujo',
+ 'cuadricula-columna',
+ 'cuadricula-columna-inicio',
+ 'cuadricula-columna-fin',
+ 'cuadricula-fila',
+ 'cuadricula-fila-inicio',
+ 'cuadricula-fila-fin',
+ 'cuadricula-area',
+ 'colocar-contenido',
+ 'colocar-elementos',
+ 'colocar-propio',
+ 'desbordamiento',
+ 'desbordamiento-x',
+ 'desbordamiento-y',
+ 'desplazar-comportamiento',
+ 'desplazar-margen',
+ 'desplazar-margen-arriba',
+ 'desplazar-margen-derecha',
+ 'desplazar-margen-abajo',
+ 'desplazar-margen-izquierda',
+ 'desplazar-relleno',
+ 'desplazar-relleno-arriba',
+ 'desplazar-relleno-derecha',
+ 'desplazar-relleno-abajo',
+ 'desplazar-relleno-izquierda',
+ 'desplazar-ajustar-tipo',
+ 'desplazar-ajustar-alinear',
+ 'flotar',
+ 'limpiar',
+ 'lista-estilo',
+ 'lista-estilo-tipo',
+ 'lista-estilo-posicion',
+ 'lista-estilo-imagen',
+ 'contador-reiniciar',
+ 'contador-incrementar',
+ 'tabla-disposicion',
+ 'titulo-lado',
+ 'vacio-celdas',
+ 'transformar',
+ 'transformar-origen',
+ 'transformar-estilo',
+ 'rotar',
+ 'escala',
+ 'trasladar',
+ 'perspectiva',
+ 'perspectiva-origen',
+ 'cara-trasera-visibilidad',
+ 'transicion',
+ 'transicion-propiedad',
+ 'transicion-duracion',
+ 'transicion-tiempo-funcion',
+ 'transicion-retraso',
+ 'animacion',
+ 'animacion-nombre',
+ 'animacion-duracion',
+ 'animacion-tiempo-funcion',
+ 'animacion-retraso',
+ 'animacion-iteracion-conteo',
+ 'animacion-direccion',
+ 'animacion-rellenar-modo',
+ 'animacion-reproducir-estado',
+ 'filtro',
+ 'trasfondo-filtro',
+ 'mezclar-mezcla-modo',
+ 'aislamiento',
+ 'caja-sombra',
+ 'recorte',
+ 'recorte-ruta',
+ 'mascara',
+ 'mascara-imagen',
+ 'mascara-modo',
+ 'mascara-posicion',
+ 'mascara-tamaño',
+ 'mascara-repetir',
+ 'mascara-origen',
+ 'mascara-recorte',
+ 'objeto-ajuste',
+ 'objeto-posicion',
+ 'aspecto-proporcion',
+ 'cursor',
+ 'puntero-eventos',
+ 'usuario-seleccionar',
+ 'tocar-accion',
+ 'redimensionar',
+ 'apariencia',
+ 'va-cambiar',
+ 'columnas',
+ 'columna-conteo',
+ 'columna-ancho',
+ 'columna-regla',
+ 'columna-regla-ancho',
+ 'columna-regla-estilo',
+ 'columna-regla-color',
+ 'columna-extension',
+ 'columna-rellenar',
+ 'pagina-romper-antes',
+ 'pagina-romper-despues',
+ 'pagina-romper-dentro',
+ 'romper-antes',
+ 'romper-despues',
+ 'romper-dentro',
+ 'huerfanos',
+ 'viudas',
+ 'contener',
+ 'contenido-visibilidad',
+ 'contenido',
+ 'comillas',
+ 'todo',
+]
diff --git a/packages/escss/src/generated/pseudo.ts b/packages/escss/src/generated/pseudo.ts
new file mode 100644
index 00000000..ce1f9de9
--- /dev/null
+++ b/packages/escss/src/generated/pseudo.ts
@@ -0,0 +1,317 @@
+import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS pseudo-classes dictionary.
+ * Maps Spanish pseudo-class names to standard CSS pseudo-class names.
+ * Auto-generated by escss-generator.
+ */
+const pseudoClassesDictionary: Map = new Map([
+ ['encima', 'hover'],
+ ['activo', 'active'],
+ ['enfoque', 'focus'],
+ ['enfoque-dentro', 'focus-within'],
+ ['enfoque-visible', 'focus-visible'],
+ ['visitado', 'visited'],
+ ['objetivo', 'target'],
+ ['marcado', 'checked'],
+ ['deshabilitado', 'disabled'],
+ ['habilitado', 'enabled'],
+ ['indeterminado', 'indeterminate'],
+ ['invalido', 'invalid'],
+ ['valido', 'valid'],
+ ['requerido', 'required'],
+ ['opcional', 'optional'],
+ ['solo-lectura', 'read-only'],
+ ['lectura-escritura', 'read-write'],
+ ['marcador-visible', 'placeholder-shown'],
+ ['predeterminado', 'default'],
+ ['en-rango', 'in-range'],
+ ['fuera-rango', 'out-of-range'],
+ ['autocompletar', 'autofill'],
+ ['primer-hijo', 'first-child'],
+ ['ultimo-hijo', 'last-child'],
+ ['hijo-unico', 'only-child'],
+ ['primero-de-tipo', 'first-of-type'],
+ ['ultimo-de-tipo', 'last-of-type'],
+ ['unico-de-tipo', 'only-of-type'],
+ ['hijo-n', 'nth-child'],
+ ['ultimo-hijo-n', 'nth-last-child'],
+ ['tipo-n', 'nth-of-type'],
+ ['ultimo-tipo-n', 'nth-last-of-type'],
+ ['vacio', 'empty'],
+ ['raiz', 'root'],
+ ['idioma', 'lang'],
+ ['direccion', 'dir'],
+ ['enlace', 'link'],
+ ['cualquier-enlace', 'any-link'],
+ ['enlace-local', 'local-link'],
+ ['no', 'not'],
+ ['es', 'is'],
+ ['donde', 'where'],
+ ['tiene', 'has'],
+ ['ambito', 'scope'],
+ ['actual', 'current'],
+ ['pasado', 'past'],
+ ['futuro', 'future'],
+ ['reproduciendo', 'playing'],
+ ['pausado', 'paused'],
+ ['buscando', 'seeking'],
+ ['cargando', 'buffering'],
+ ['detenido', 'stalled'],
+ ['silenciado', 'muted'],
+ ['volumen-bloqueado', 'volume-locked'],
+ ['pantalla-completa', 'fullscreen'],
+ ['imagen-en-imagen', 'picture-in-picture'],
+ ['definido', 'defined'],
+ ['anfitrion', 'host'],
+ ['contexto-anfitrion', 'host-context'],
+ ['modal', 'modal'],
+ ['abierto', 'open'],
+ ['cerrado', 'closed'],
+ ['emergente-abierto', 'popover-open'],
+])
+
+/**
+ * EsCSS to CSS pseudo-elements dictionary.
+ * Maps Spanish pseudo-element names to standard CSS pseudo-element names.
+ * Auto-generated by escss-generator.
+ */
+const pseudoElementsDictionary: Map = new Map([
+ ['antes', 'before'],
+ ['despues', 'after'],
+ ['primera-linea', 'first-line'],
+ ['primera-letra', 'first-letter'],
+ ['seleccion', 'selection'],
+ ['marcador', 'placeholder'],
+ ['marcador-lista', 'marker'],
+ ['fondo-modal', 'backdrop'],
+ ['señal', 'cue'],
+ ['region-señal', 'cue-region'],
+ ['ranura', 'slotted'],
+ ['parte', 'part'],
+ ['boton-selector-archivo', 'file-selector-button'],
+ ['resaltado', 'highlight'],
+ ['error-ortografico', 'spelling-error'],
+ ['error-gramatical', 'grammar-error'],
+ ['texto-objetivo', 'target-text'],
+])
+
+/**
+ * Get the pseudo-classes dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedPseudoClasses: Map | undefined
+
+export function getPseudoClassesDictionary(
+ inverted = false,
+): Map {
+ if (!inverted) {
+ return pseudoClassesDictionary
+ }
+ if (!invertedPseudoClasses) {
+ invertedPseudoClasses = invertMap(pseudoClassesDictionary)
+ }
+ return invertedPseudoClasses
+}
+
+/**
+ * Get the pseudo-elements dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedPseudoElements: Map | undefined
+
+export function getPseudoElementsDictionary(
+ inverted = false,
+): Map {
+ if (!inverted) {
+ return pseudoElementsDictionary
+ }
+ if (!invertedPseudoElements) {
+ invertedPseudoElements = invertMap(pseudoElementsDictionary)
+ }
+ return invertedPseudoElements
+}
+
+/**
+ * List of all CSS pseudo-classes.
+ */
+export const cssPseudoClassesList = [
+ 'hover',
+ 'active',
+ 'focus',
+ 'focus-within',
+ 'focus-visible',
+ 'visited',
+ 'target',
+ 'checked',
+ 'disabled',
+ 'enabled',
+ 'indeterminate',
+ 'invalid',
+ 'valid',
+ 'required',
+ 'optional',
+ 'read-only',
+ 'read-write',
+ 'placeholder-shown',
+ 'default',
+ 'in-range',
+ 'out-of-range',
+ 'autofill',
+ 'first-child',
+ 'last-child',
+ 'only-child',
+ 'first-of-type',
+ 'last-of-type',
+ 'only-of-type',
+ 'nth-child',
+ 'nth-last-child',
+ 'nth-of-type',
+ 'nth-last-of-type',
+ 'empty',
+ 'root',
+ 'lang',
+ 'dir',
+ 'link',
+ 'any-link',
+ 'local-link',
+ 'not',
+ 'is',
+ 'where',
+ 'has',
+ 'scope',
+ 'current',
+ 'past',
+ 'future',
+ 'playing',
+ 'paused',
+ 'seeking',
+ 'buffering',
+ 'stalled',
+ 'muted',
+ 'volume-locked',
+ 'fullscreen',
+ 'picture-in-picture',
+ 'defined',
+ 'host',
+ 'host-context',
+ 'modal',
+ 'open',
+ 'closed',
+ 'popover-open',
+]
+
+/**
+ * List of all EsCSS pseudo-classes.
+ */
+export const escssPseudoClassesList = [
+ 'encima',
+ 'activo',
+ 'enfoque',
+ 'enfoque-dentro',
+ 'enfoque-visible',
+ 'visitado',
+ 'objetivo',
+ 'marcado',
+ 'deshabilitado',
+ 'habilitado',
+ 'indeterminado',
+ 'invalido',
+ 'valido',
+ 'requerido',
+ 'opcional',
+ 'solo-lectura',
+ 'lectura-escritura',
+ 'marcador-visible',
+ 'predeterminado',
+ 'en-rango',
+ 'fuera-rango',
+ 'autocompletar',
+ 'primer-hijo',
+ 'ultimo-hijo',
+ 'hijo-unico',
+ 'primero-de-tipo',
+ 'ultimo-de-tipo',
+ 'unico-de-tipo',
+ 'hijo-n',
+ 'ultimo-hijo-n',
+ 'tipo-n',
+ 'ultimo-tipo-n',
+ 'vacio',
+ 'raiz',
+ 'idioma',
+ 'direccion',
+ 'enlace',
+ 'cualquier-enlace',
+ 'enlace-local',
+ 'no',
+ 'es',
+ 'donde',
+ 'tiene',
+ 'ambito',
+ 'actual',
+ 'pasado',
+ 'futuro',
+ 'reproduciendo',
+ 'pausado',
+ 'buscando',
+ 'cargando',
+ 'detenido',
+ 'silenciado',
+ 'volumen-bloqueado',
+ 'pantalla-completa',
+ 'imagen-en-imagen',
+ 'definido',
+ 'anfitrion',
+ 'contexto-anfitrion',
+ 'modal',
+ 'abierto',
+ 'cerrado',
+ 'emergente-abierto',
+]
+
+/**
+ * List of all CSS pseudo-elements.
+ */
+export const cssPseudoElementsList = [
+ 'before',
+ 'after',
+ 'first-line',
+ 'first-letter',
+ 'selection',
+ 'placeholder',
+ 'marker',
+ 'backdrop',
+ 'cue',
+ 'cue-region',
+ 'slotted',
+ 'part',
+ 'file-selector-button',
+ 'highlight',
+ 'spelling-error',
+ 'grammar-error',
+ 'target-text',
+]
+
+/**
+ * List of all EsCSS pseudo-elements.
+ */
+export const escssPseudoElementsList = [
+ 'antes',
+ 'despues',
+ 'primera-linea',
+ 'primera-letra',
+ 'seleccion',
+ 'marcador',
+ 'marcador-lista',
+ 'fondo-modal',
+ 'señal',
+ 'region-señal',
+ 'ranura',
+ 'parte',
+ 'boton-selector-archivo',
+ 'resaltado',
+ 'error-ortografico',
+ 'error-gramatical',
+ 'texto-objetivo',
+]
diff --git a/packages/escss/src/generated/selectors.ts b/packages/escss/src/generated/selectors.ts
new file mode 100644
index 00000000..e47e903d
--- /dev/null
+++ b/packages/escss/src/generated/selectors.ts
@@ -0,0 +1,96 @@
+import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS element selector dictionary.
+ * Maps Spanish element names to standard HTML element names.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+ ['html', 'html'],
+ ['cuerpo', 'body'],
+ ['cabeza', 'head'],
+ ['encabezado', 'header'],
+ ['pie', 'footer'],
+ ['principal', 'main'],
+ ['seccion', 'section'],
+ ['articulo', 'article'],
+ ['lateral', 'aside'],
+ ['nav', 'nav'],
+ ['h1', 'h1'],
+ ['h2', 'h2'],
+ ['h3', 'h3'],
+ ['h4', 'h4'],
+ ['h5', 'h5'],
+ ['h6', 'h6'],
+ ['p', 'p'],
+ ['div', 'div'],
+ ['span', 'span'],
+ ['a', 'a'],
+ ['fuerte', 'strong'],
+ ['enfasis', 'em'],
+ ['br', 'br'],
+ ['hr', 'hr'],
+ ['cita', 'blockquote'],
+ ['pre', 'pre'],
+ ['codigo', 'code'],
+ ['ul', 'ul'],
+ ['ol', 'ol'],
+ ['li', 'li'],
+ ['dl', 'dl'],
+ ['dt', 'dt'],
+ ['dd', 'dd'],
+ ['tabla', 'table'],
+ ['tabla-cabeza', 'thead'],
+ ['tabla-cuerpo', 'tbody'],
+ ['tabla-pie', 'tfoot'],
+ ['tr', 'tr'],
+ ['th', 'th'],
+ ['td', 'td'],
+ ['titulo', 'caption'],
+ ['formulario', 'form'],
+ ['entrada', 'input'],
+ ['boton', 'button'],
+ ['seleccionar', 'select'],
+ ['opcion', 'option'],
+ ['areadetexto', 'textarea'],
+ ['etiqueta', 'label'],
+ ['conjuntocampos', 'fieldset'],
+ ['leyenda', 'legend'],
+ ['img', 'img'],
+ ['video', 'video'],
+ ['audio', 'audio'],
+ ['lienzo', 'canvas'],
+ ['svg', 'svg'],
+ ['figura', 'figure'],
+ ['leyendafigura', 'figcaption'],
+ ['imagen', 'picture'],
+ ['fuente', 'source'],
+ ['detalles', 'details'],
+ ['resumen', 'summary'],
+ ['dialogo', 'dialog'],
+ ['marco', 'iframe'],
+ ['incrustar', 'embed'],
+ ['objeto', 'object'],
+ ['direccion', 'address'],
+ ['tiempo', 'time'],
+ ['marca', 'mark'],
+ ['progreso', 'progress'],
+ ['medidor', 'meter'],
+ ['salida', 'output'],
+])
+
+/**
+ * Get the selectors dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
diff --git a/packages/escss/src/generated/values.ts b/packages/escss/src/generated/values.ts
new file mode 100644
index 00000000..def02509
--- /dev/null
+++ b/packages/escss/src/generated/values.ts
@@ -0,0 +1,330 @@
+import { invertMap } from '@es-js/core/utils'
+
+/**
+ * EsCSS to CSS value dictionary.
+ * Maps Spanish CSS values to standard CSS values.
+ * Auto-generated by escss-generator.
+ */
+const dictionary: Map = new Map([
+ ['ninguno', 'none'],
+ ['bloque', 'block'],
+ ['enlinea', 'inline'],
+ ['enlinea-bloque', 'inline-block'],
+ ['flex', 'flex'],
+ ['enlinea-flex', 'inline-flex'],
+ ['cuadricula', 'grid'],
+ ['enlinea-cuadricula', 'inline-grid'],
+ ['tabla', 'table'],
+ ['tabla-fila', 'table-row'],
+ ['tabla-celda', 'table-cell'],
+ ['tabla-columna', 'table-column'],
+ ['tabla-grupo-filas', 'table-row-group'],
+ ['tabla-grupo-columnas', 'table-column-group'],
+ ['tabla-grupo-encabezado', 'table-header-group'],
+ ['tabla-grupo-pie', 'table-footer-group'],
+ ['elemento-lista', 'list-item'],
+ ['contenidos', 'contents'],
+ ['flujo-raiz', 'flow-root'],
+ ['estatico', 'static'],
+ ['relativo', 'relative'],
+ ['absoluto', 'absolute'],
+ ['fijo', 'fixed'],
+ ['pegajoso', 'sticky'],
+ ['visible', 'visible'],
+ ['oculto', 'hidden'],
+ ['colapsar', 'collapse'],
+ ['ocultar', 'hide'],
+ ['mostrar', 'show'],
+ ['desplazar', 'scroll'],
+ ['auto', 'auto'],
+ ['fila', 'row'],
+ ['fila-inversa', 'row-reverse'],
+ ['columna', 'column'],
+ ['columna-inversa', 'column-reverse'],
+ ['envolver', 'wrap'],
+ ['sinenvolver', 'nowrap'],
+ ['envolver-inverso', 'wrap-reverse'],
+ ['flex-inicio', 'flex-start'],
+ ['flex-fin', 'flex-end'],
+ ['centro', 'center'],
+ ['espacio-entre', 'space-between'],
+ ['espacio-alrededor', 'space-around'],
+ ['espacio-uniforme', 'space-evenly'],
+ ['estirar', 'stretch'],
+ ['lineabase', 'baseline'],
+ ['inicio', 'start'],
+ ['fin', 'end'],
+ ['propio-inicio', 'self-start'],
+ ['propio-fin', 'self-end'],
+ ['izquierda', 'left'],
+ ['derecha', 'right'],
+ ['justificar', 'justify'],
+ ['arriba', 'top'],
+ ['abajo', 'bottom'],
+ ['medio', 'middle'],
+ ['texto-arriba', 'text-top'],
+ ['texto-abajo', 'text-bottom'],
+ ['sub', 'sub'],
+ ['super', 'super'],
+ ['normal', 'normal'],
+ ['negrita', 'bold'],
+ ['mas-negrita', 'bolder'],
+ ['mas-ligera', 'lighter'],
+ ['italica', 'italic'],
+ ['oblicua', 'oblique'],
+ ['capitalizar', 'capitalize'],
+ ['mayusculas', 'uppercase'],
+ ['minusculas', 'lowercase'],
+ ['subrayado', 'underline'],
+ ['sobrelinea', 'overline'],
+ ['tachado', 'line-through'],
+ ['pre', 'pre'],
+ ['pre-envolver', 'pre-wrap'],
+ ['pre-linea', 'pre-line'],
+ ['romper-espacios', 'break-spaces'],
+ ['romper-todo', 'break-all'],
+ ['mantener-todo', 'keep-all'],
+ ['romper-palabra', 'break-word'],
+ ['solido', 'solid'],
+ ['discontinuo', 'dashed'],
+ ['punteado', 'dotted'],
+ ['doble', 'double'],
+ ['ranura', 'groove'],
+ ['cresta', 'ridge'],
+ ['interno', 'inset'],
+ ['externo', 'outset'],
+ ['repetir', 'repeat'],
+ ['sin-repetir', 'no-repeat'],
+ ['repetir-x', 'repeat-x'],
+ ['repetir-y', 'repeat-y'],
+ ['cubrir', 'cover'],
+ ['contener', 'contain'],
+ ['local', 'local'],
+ ['caja-relleno', 'padding-box'],
+ ['caja-borde', 'border-box'],
+ ['caja-contenido', 'content-box'],
+ ['rellenar', 'fill'],
+ ['reducir', 'scale-down'],
+ ['puntero', 'pointer'],
+ ['predeterminado', 'default'],
+ ['cruceta', 'crosshair'],
+ ['mover', 'move'],
+ ['texto', 'text'],
+ ['esperar', 'wait'],
+ ['ayuda', 'help'],
+ ['no-permitido', 'not-allowed'],
+ ['agarrar', 'grab'],
+ ['agarrando', 'grabbing'],
+ ['acercar', 'zoom-in'],
+ ['alejar', 'zoom-out'],
+ ['redimensionar-columna', 'col-resize'],
+ ['redimensionar-fila', 'row-resize'],
+ ['redimensionar-norte', 'n-resize'],
+ ['redimensionar-sur', 's-resize'],
+ ['redimensionar-este', 'e-resize'],
+ ['redimensionar-oeste', 'w-resize'],
+ ['redimensionar-noreste', 'ne-resize'],
+ ['redimensionar-noroeste', 'nw-resize'],
+ ['redimensionar-sureste', 'se-resize'],
+ ['redimensionar-suroeste', 'sw-resize'],
+ ['redimensionar-este-oeste', 'ew-resize'],
+ ['redimensionar-norte-sur', 'ns-resize'],
+ ['redimensionar-noreste-suroeste', 'nesw-resize'],
+ ['redimensionar-noroeste-sureste', 'nwse-resize'],
+ ['disco', 'disc'],
+ ['circulo', 'circle'],
+ ['cuadrado', 'square'],
+ ['decimal', 'decimal'],
+ ['decimal-cero-inicial', 'decimal-leading-zero'],
+ ['romano-minuscula', 'lower-roman'],
+ ['romano-mayuscula', 'upper-roman'],
+ ['alfa-minuscula', 'lower-alpha'],
+ ['alfa-mayuscula', 'upper-alpha'],
+ ['latin-minuscula', 'lower-latin'],
+ ['latin-mayuscula', 'upper-latin'],
+ ['infinito', 'infinite'],
+ ['alternar', 'alternate'],
+ ['alternar-inverso', 'alternate-reverse'],
+ ['adelante', 'forwards'],
+ ['atras', 'backwards'],
+ ['ambos', 'both'],
+ ['ejecutando', 'running'],
+ ['pausado', 'paused'],
+ ['facilidad', 'ease'],
+ ['facilidad-entrada', 'ease-in'],
+ ['facilidad-salida', 'ease-out'],
+ ['facilidad-entrada-salida', 'ease-in-out'],
+ ['lineal', 'linear'],
+ ['paso-inicio', 'step-start'],
+ ['paso-fin', 'step-end'],
+ ['suave', 'smooth'],
+ ['instantaneo', 'instant'],
+ ['horizontal', 'horizontal'],
+ ['vertical', 'vertical'],
+ ['todo', 'all'],
+ ['heredar', 'inherit'],
+ ['inicial', 'initial'],
+ ['desestablecer', 'unset'],
+ ['revertir', 'revert'],
+ ['sistema-ui', 'system-ui'],
+ ['sans-serif', 'sans-serif'],
+ ['serif', 'serif'],
+ ['monoespaciado', 'monospace'],
+ ['cursiva', 'cursive'],
+ ['fantasia', 'fantasy'],
+ ['negro', 'black'],
+ ['blanco', 'white'],
+ ['rojo', 'red'],
+ ['verde', 'green'],
+ ['azul', 'blue'],
+ ['amarillo', 'yellow'],
+ ['naranja', 'orange'],
+ ['purpura', 'purple'],
+ ['rosa', 'pink'],
+ ['marron', 'brown'],
+ ['gris', 'gray'],
+ ['agua', 'aqua'],
+ ['cian', 'cyan'],
+ ['magenta', 'magenta'],
+ ['lima', 'lime'],
+ ['oliva', 'olive'],
+ ['marino', 'navy'],
+ ['verde-azulado', 'teal'],
+ ['granate', 'maroon'],
+ ['plata', 'silver'],
+ ['oro', 'gold'],
+ ['coral', 'coral'],
+ ['salmon', 'salmon'],
+ ['carmesi', 'crimson'],
+ ['violeta', 'violet'],
+ ['indigo', 'indigo'],
+ ['turquesa', 'turquoise'],
+ ['beige', 'beige'],
+ ['marfil', 'ivory'],
+ ['caqui', 'khaki'],
+ ['lavanda', 'lavender'],
+ ['ciruela', 'plum'],
+ ['orquidea', 'orchid'],
+ ['bronceado', 'tan'],
+ ['chocolate', 'chocolate'],
+ ['siena', 'sienna'],
+ ['peru', 'peru'],
+ ['trigo', 'wheat'],
+ ['lino', 'linen'],
+ ['nieve', 'snow'],
+ ['celeste', 'azure'],
+ ['menta', 'mint'],
+ ['melon', 'honeydew'],
+ ['azul-oscuro', 'darkblue'],
+ ['verde-oscuro', 'darkgreen'],
+ ['rojo-oscuro', 'darkred'],
+ ['cian-oscuro', 'darkcyan'],
+ ['magenta-oscuro', 'darkmagenta'],
+ ['naranja-oscuro', 'darkorange'],
+ ['violeta-oscuro', 'darkviolet'],
+ ['gris-oscuro', 'darkgray'],
+ ['caqui-oscuro', 'darkkhaki'],
+ ['verde-oliva-oscuro', 'darkolivegreen'],
+ ['orquidea-oscuro', 'darkorchid'],
+ ['salmon-oscuro', 'darksalmon'],
+ ['verde-mar-oscuro', 'darkseagreen'],
+ ['azul-pizarra-oscuro', 'darkslateblue'],
+ ['gris-pizarra-oscuro', 'darkslategray'],
+ ['turquesa-oscuro', 'darkturquoise'],
+ ['oro-oscuro', 'darkgoldenrod'],
+ ['azul-claro', 'lightblue'],
+ ['verde-claro', 'lightgreen'],
+ ['cian-claro', 'lightcyan'],
+ ['rosa-claro', 'lightpink'],
+ ['amarillo-claro', 'lightyellow'],
+ ['gris-claro', 'lightgray'],
+ ['coral-claro', 'lightcoral'],
+ ['salmon-claro', 'lightsalmon'],
+ ['verde-mar-claro', 'lightseagreen'],
+ ['azul-cielo-claro', 'lightskyblue'],
+ ['gris-pizarra-claro', 'lightslategray'],
+ ['azul-acero-claro', 'lightsteelblue'],
+ ['amarillo-oro-claro', 'lightgoldenrodyellow'],
+ ['azul-alice', 'aliceblue'],
+ ['blanco-antiguo', 'antiquewhite'],
+ ['aguamarina', 'aquamarine'],
+ ['almendra-blanqueada', 'blanchedalmond'],
+ ['azul-violeta', 'blueviolet'],
+ ['madera', 'burlywood'],
+ ['azul-cadete', 'cadetblue'],
+ ['chartreuse', 'chartreuse'],
+ ['azul-aciano', 'cornflowerblue'],
+ ['seda-maiz', 'cornsilk'],
+ ['rosa-profundo', 'deeppink'],
+ ['azul-cielo-profundo', 'deepskyblue'],
+ ['gris-tenue', 'dimgray'],
+ ['azul-dodger', 'dodgerblue'],
+ ['ladrillo', 'firebrick'],
+ ['blanco-floral', 'floralwhite'],
+ ['verde-bosque', 'forestgreen'],
+ ['fucsia', 'fuchsia'],
+ ['gainsboro', 'gainsboro'],
+ ['blanco-fantasma', 'ghostwhite'],
+ ['verde-amarillo', 'greenyellow'],
+ ['rosa-intenso', 'hotpink'],
+ ['rojo-indio', 'indianred'],
+ ['verde-cesped', 'lawngreen'],
+ ['chiffon-limon', 'lemonchiffon'],
+ ['aguamarina-medio', 'mediumaquamarine'],
+ ['azul-medio', 'mediumblue'],
+ ['orquidea-medio', 'mediumorchid'],
+ ['purpura-medio', 'mediumpurple'],
+ ['verde-mar-medio', 'mediumseagreen'],
+ ['azul-pizarra-medio', 'mediumslateblue'],
+ ['verde-primavera-medio', 'mediumspringgreen'],
+ ['turquesa-medio', 'mediumturquoise'],
+ ['rojo-violeta-medio', 'mediumvioletred'],
+ ['azul-medianoche', 'midnightblue'],
+ ['rosa-brumoso', 'mistyrose'],
+ ['mocasin', 'moccasin'],
+ ['blanco-navajo', 'navajowhite'],
+ ['encaje-antiguo', 'oldlace'],
+ ['verde-oliva-militar', 'olivedrab'],
+ ['rojo-naranja', 'orangered'],
+ ['oro-palido', 'palegoldenrod'],
+ ['verde-palido', 'palegreen'],
+ ['turquesa-palido', 'paleturquoise'],
+ ['rojo-violeta-palido', 'palevioletred'],
+ ['papaya', 'papayawhip'],
+ ['melocoton', 'peachpuff'],
+ ['azul-polvo', 'powderblue'],
+ ['purpura-rebecca', 'rebeccapurple'],
+ ['marron-rosado', 'rosybrown'],
+ ['azul-real', 'royalblue'],
+ ['marron-silla', 'saddlebrown'],
+ ['marron-arena', 'sandybrown'],
+ ['verde-mar', 'seagreen'],
+ ['concha', 'seashell'],
+ ['azul-cielo', 'skyblue'],
+ ['azul-pizarra', 'slateblue'],
+ ['gris-pizarra', 'slategray'],
+ ['verde-primavera', 'springgreen'],
+ ['azul-acero', 'steelblue'],
+ ['cardo', 'thistle'],
+ ['tomate', 'tomato'],
+ ['humo-blanco', 'whitesmoke'],
+ ['verde-amarillento', 'yellowgreen'],
+ ['transparente', 'transparent'],
+ ['color-actual', 'currentcolor'],
+])
+
+/**
+ * Get the values dictionary.
+ * @param inverted - If true, returns CSS -> EsCSS mapping, otherwise EsCSS -> CSS
+ */
+let invertedDictionary: Map | undefined
+
+export function getDictionary(inverted = false): Map {
+ if (!inverted) {
+ return dictionary
+ }
+ if (!invertedDictionary) {
+ invertedDictionary = invertMap(dictionary)
+ }
+ return invertedDictionary
+}
diff --git a/packages/escss/src/index.ts b/packages/escss/src/index.ts
new file mode 100644
index 00000000..9e8358c2
--- /dev/null
+++ b/packages/escss/src/index.ts
@@ -0,0 +1,164 @@
+import postcss, { Root, Rule, Declaration, AtRule } from 'postcss'
+import { getDictionary as getPropertiesDictionary } from './generated/properties'
+import { getDictionary as getValuesDictionary } from './generated/values'
+import { getDictionary as getAtRulesDictionary } from './generated/at-rules'
+import { transformSelector } from './utils/transformSelector'
+import { transformValue } from './utils/transformValue'
+
+export interface CompileOptions {
+ from?: 'escss' | 'css'
+ to?: 'escss' | 'css'
+}
+
+/**
+ * Compile EsCSS to CSS or CSS to EsCSS.
+ *
+ * @param content - The CSS or EsCSS content to compile
+ * @param options - Compilation options
+ * @returns The compiled content
+ *
+ * @example
+ * ```typescript
+ * // EsCSS to CSS
+ * const css = compile(`
+ * .tarjeta {
+ * mostrar: flex;
+ * direccion-flex: columna;
+ * color-fondo: azul;
+ * }
+ * `, { from: 'escss', to: 'css' })
+ *
+ * // CSS to EsCSS
+ * const escss = compile(`
+ * .card {
+ * display: flex;
+ * flex-direction: column;
+ * background-color: blue;
+ * }
+ * `, { from: 'css', to: 'escss' })
+ * ```
+ */
+export function compile(
+ content: string,
+ options: CompileOptions = { from: 'escss', to: 'css' },
+): string {
+ const opts: Required = {
+ from: options.from ?? 'escss',
+ to: options.to ?? 'css',
+ }
+
+ // If from and to are the same, return the content as-is
+ if (opts.from === opts.to) {
+ return content
+ }
+
+ try {
+ const root = postcss.parse(content)
+ const toEsCSS = opts.to === 'escss'
+
+ // Get dictionaries with correct direction
+ // When toEsCSS is true: we need CSS -> EsCSS (inverted = true)
+ // When toEsCSS is false: we need EsCSS -> CSS (inverted = false)
+ const propDict = getPropertiesDictionary(toEsCSS)
+ const valueDict = getValuesDictionary(toEsCSS)
+ const atRuleDict = getAtRulesDictionary(toEsCSS)
+
+ // Transform declarations (properties and values)
+ root.walkDecls((decl: Declaration) => {
+ const newProp = propDict.get(decl.prop)
+ if (newProp) {
+ decl.prop = newProp
+ }
+ decl.value = transformValue(decl.value, valueDict)
+ })
+
+ // Transform at-rules (@media, @keyframes, etc.)
+ root.walkAtRules((atRule: AtRule) => {
+ const newName = atRuleDict.get(atRule.name)
+ if (newName) {
+ atRule.name = newName
+ }
+ // Transform params (e.g., min-width in @media)
+ atRule.params = transformMediaParams(atRule.params, propDict, valueDict)
+ })
+
+ // Transform selectors (pseudo-classes/elements)
+ root.walkRules((rule: Rule) => {
+ rule.selector = transformSelector(rule.selector, toEsCSS)
+ })
+
+ return root.toString()
+ } catch (error) {
+ console.error('EsCSS compilation error:', error)
+ return content
+ }
+}
+
+/**
+ * Transform media query parameters.
+ * Handles properties like min-width, max-height, etc.
+ * Parses (property: value) pairs with a depth counter so nested parens
+ * (e.g. calc(100px + max(10px, 20px))) are preserved.
+ */
+function transformMediaParams(
+ params: string,
+ propDict: Map,
+ valueDict: Map,
+): string {
+ const result: string[] = []
+ let i = 0
+
+ while (i < params.length) {
+ const openParen = params.indexOf('(', i)
+ if (openParen === -1) {
+ result.push(params.slice(i))
+ break
+ }
+
+ result.push(params.slice(i, openParen + 1))
+ i = openParen + 1
+
+ const propMatch = params.slice(i).match(/^([\p{L}-]+)\s*:\s*/iu)
+ if (!propMatch) {
+ result.push(params[i])
+ i++
+ continue
+ }
+
+ const property = propMatch[1]
+ i += propMatch[0].length
+ const valueStart = i
+
+ let depth = 1
+ while (i < params.length && depth > 0) {
+ const char = params[i]
+ if (char === '(') depth++
+ else if (char === ')') depth--
+ i++
+ }
+
+ if (depth !== 0) {
+ result.push(params.slice(openParen + 1, i))
+ break
+ }
+
+ const value = params.slice(valueStart, i - 1).trim()
+ const newProperty = propDict.get(property) || property
+ const newValue = transformValue(value, valueDict)
+ result.push(`${newProperty}: ${newValue})`)
+ }
+
+ return result.join('')
+}
+
+// Re-export utilities and dictionaries for advanced usage
+export { transformSelector } from './utils/transformSelector'
+export { transformValue } from './utils/transformValue'
+export { getDictionary as getPropertiesDictionary } from './generated/properties'
+export { getDictionary as getValuesDictionary } from './generated/values'
+export { getDictionary as getAtRulesDictionary } from './generated/at-rules'
+export { getDictionary as getSelectorsDictionary } from './generated/selectors'
+export {
+ getPseudoClassesDictionary,
+ getPseudoElementsDictionary,
+} from './generated/pseudo'
diff --git a/packages/escss/src/utils.ts b/packages/escss/src/utils.ts
new file mode 100644
index 00000000..a4e277ca
--- /dev/null
+++ b/packages/escss/src/utils.ts
@@ -0,0 +1,6 @@
+/**
+ * EsCSS utility functions for advanced transformations.
+ */
+
+export { transformSelector } from './utils/transformSelector'
+export { transformValue } from './utils/transformValue'
diff --git a/packages/escss/src/utils/transformSelector.ts b/packages/escss/src/utils/transformSelector.ts
new file mode 100644
index 00000000..531bacaf
--- /dev/null
+++ b/packages/escss/src/utils/transformSelector.ts
@@ -0,0 +1,54 @@
+import {
+ getPseudoClassesDictionary,
+ getPseudoElementsDictionary,
+} from '../generated/pseudo'
+import { getDictionary as getSelectorsDictionary } from '../generated/selectors'
+
+/**
+ * Transform CSS selectors by converting element names, pseudo-classes and pseudo-elements.
+ */
+export function transformSelector(selector: string, toEsCSS: boolean): string {
+ const pseudoClassDict = getPseudoClassesDictionary(toEsCSS)
+ const pseudoElementDict = getPseudoElementsDictionary(toEsCSS)
+ const selectorsDict = getSelectorsDictionary(toEsCSS)
+
+ let result = selector
+
+ // Transform element selectors (body, div, etc.)
+ // Match element names at the start, after space, comma, >, +, ~ or [
+ // Allow matches followed by : (pseudo-class) but not ( or [
+ result = result.replace(
+ /(?<=^|[\s,>+~]|\))(? {
+ const transformed = selectorsDict.get(element.toLowerCase())
+ return transformed || match
+ },
+ )
+
+ // Transform pseudo-elements (::before, ::after, etc.)
+ result = result.replace(
+ /::([a-zñ-]+)(?:\(([^)]*)\))?/gi,
+ (match, pseudoElement, params) => {
+ const transformed = pseudoElementDict.get(pseudoElement.toLowerCase())
+ if (transformed) {
+ return params ? `::${transformed}(${params})` : `::${transformed}`
+ }
+ return match
+ },
+ )
+
+ // Transform pseudo-classes (:hover, :focus, etc.)
+ // Handle both functional pseudo-classes like :nth-child(n) and simple ones like :hover
+ result = result.replace(
+ /(? {
+ const transformed = pseudoClassDict.get(pseudoClass.toLowerCase())
+ if (transformed) {
+ return params ? `:${transformed}(${params})` : `:${transformed}`
+ }
+ return match
+ },
+ )
+
+ return result
+}
diff --git a/packages/escss/src/utils/transformValue.ts b/packages/escss/src/utils/transformValue.ts
new file mode 100644
index 00000000..712ed49a
--- /dev/null
+++ b/packages/escss/src/utils/transformValue.ts
@@ -0,0 +1,94 @@
+/**
+ * Transform a CSS value, handling multiple values and preserving function syntax.
+ * @param value - The CSS value to transform
+ * @param dictionary - The dictionary to use for transformation
+ */
+export function transformValue(
+ value: string,
+ dictionary: Map,
+): string {
+ // Handle simple direct match first
+ const directMatch = dictionary.get(value)
+ if (directMatch) {
+ return directMatch
+ }
+
+ // Split by spaces but preserve function contents like calc(), var(), etc.
+ const parts = splitValuePreservingFunctions(value)
+
+ return parts
+ .map((part) => {
+ // Handle trailing commas (e.g., "sistema-ui," in font-family)
+ const hasTrailingComma = part.endsWith(',')
+ const cleanPart = hasTrailingComma ? part.slice(0, -1) : part
+
+ // Check for direct match
+ const match = dictionary.get(cleanPart)
+ if (match) {
+ return hasTrailingComma ? match + ',' : match
+ }
+ return part
+ })
+ .join(' ')
+}
+
+/**
+ * Split a CSS value by spaces while preserving function contents.
+ * For example: "flex 1px solid red" -> ["flex", "1px", "solid", "red"]
+ * But: "calc(100% - 20px)" stays as one unit
+ */
+function splitValuePreservingFunctions(value: string): string[] {
+ const parts: string[] = []
+ let current = ''
+ let depth = 0
+ let quote: string | null = null
+ let escaped = false
+
+ for (let i = 0; i < value.length; i++) {
+ const char = value[i]
+
+ if (escaped) {
+ current += char
+ escaped = false
+ continue
+ }
+
+ if (char === '\\') {
+ current += char
+ escaped = true
+ continue
+ }
+
+ if (quote) {
+ current += char
+ if (char === quote) {
+ quote = null
+ }
+ continue
+ }
+
+ if (char === '"' || char === "'") {
+ quote = char
+ current += char
+ } else if (char === '(') {
+ depth++
+ current += char
+ } else if (char === ')') {
+ depth--
+ current += char
+ } else if (char === ' ' && depth === 0) {
+ if (current) {
+ parts.push(current)
+ current = ''
+ }
+ } else {
+ current += char
+ }
+ }
+
+ if (current) {
+ parts.push(current)
+ }
+
+ return parts
+}
diff --git a/packages/escss/test/compile.test.ts b/packages/escss/test/compile.test.ts
new file mode 100644
index 00000000..e873bc7a
--- /dev/null
+++ b/packages/escss/test/compile.test.ts
@@ -0,0 +1,396 @@
+import { describe, it, expect } from 'vitest'
+import { compile } from '../src/index'
+
+describe('EsCSS Compiler', () => {
+ describe('EsCSS to CSS', () => {
+ it('should transform basic properties', () => {
+ const input = `.tarjeta {
+ mostrar: flex;
+ ancho: 100%;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('display: flex')
+ expect(output).toContain('width: 100%')
+ })
+
+ it('should transform flex properties', () => {
+ const input = `.contenedor {
+ mostrar: flex;
+ flex-direccion: columna;
+ justificar-contenido: centro;
+ alinear-elementos: centro;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('display: flex')
+ expect(output).toContain('flex-direction: column')
+ expect(output).toContain('justify-content: center')
+ expect(output).toContain('align-items: center')
+ })
+
+ it('should transform background properties', () => {
+ const input = `.elemento {
+ color-fondo: azul;
+ fondo-color: rojo;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('background-color')
+ })
+
+ it('should transform margin and padding', () => {
+ const input = `.caja {
+ margen: 1rem;
+ relleno: 2rem;
+ margen-arriba: 10px;
+ relleno-abajo: 20px;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('margin: 1rem')
+ expect(output).toContain('padding: 2rem')
+ expect(output).toContain('margin-top: 10px')
+ expect(output).toContain('padding-bottom: 20px')
+ })
+
+ it('should transform border properties', () => {
+ const input = `.elemento {
+ borde: 1px solido negro;
+ borde-radio: 5px;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('border: 1px solid black')
+ expect(output).toContain('border-radius: 5px')
+ })
+
+ it('should transform pseudo-classes', () => {
+ const input = `.boton:encima {
+ color-fondo: azul;
+}
+.enlace:activo {
+ color: rojo;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain(':hover')
+ expect(output).toContain(':active')
+ })
+
+ it('should transform pseudo-elements', () => {
+ const input = `.elemento::antes {
+ contenido: "";
+}
+.elemento::despues {
+ contenido: "";
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('::before')
+ expect(output).toContain('::after')
+ })
+
+ it('should transform @media queries', () => {
+ const input = `@medios (minimo-ancho: 768px) {
+ .contenedor {
+ ancho: 100%;
+ }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('@media')
+ expect(output).toContain('min-width')
+ expect(output).toContain('width: 100%')
+ })
+
+ it('should transform @media params with nested parentheses (e.g. calc())', () => {
+ const input = `@medios (minimo-ancho: calc(100px + 20px)) {
+ .caja { ancho: 100%; }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('@media')
+ expect(output).toContain('min-width')
+ expect(output).toContain('calc(100px + 20px)')
+ })
+
+ it('should preserve full value in @media when value has nested parens (e.g. clamp)', () => {
+ const input = `@medios (minimo-ancho: clamp(100px, 50%, 100vw)) {
+ .caja { ancho: 100%; }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('@media')
+ expect(output).toContain('min-width')
+ expect(output).toContain('clamp(100px, 50%, 100vw)')
+ })
+
+ it('should preserve @media value when function closes before end (e.g. max())', () => {
+ const input = `@medios (minimo-ancho: max(100px, 20rem)) {
+ .caja { ancho: 100%; }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('max(100px, 20rem)')
+ expect(output).not.toContain('max(100px)),')
+ })
+
+ it('should preserve @media value with doubly nested parens (e.g. calc + max)', () => {
+ const input = `@medios (minimo-ancho: calc(100px + max(10px, 20px))) {
+ .caja { ancho: 100%; }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('calc(100px + max(10px, 20px))')
+ expect(output).not.toContain('max(10px)),')
+ })
+
+ it('should transform @keyframes', () => {
+ const input = `@fotogramas deslizar {
+ from {
+ opacidad: 0;
+ }
+ to {
+ opacidad: 1;
+ }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('@keyframes')
+ expect(output).toContain('opacity: 0')
+ expect(output).toContain('opacity: 1')
+ })
+
+ it('should transform CSS values', () => {
+ const input = `.elemento {
+ mostrar: bloque;
+ posicion: relativo;
+ visibilidad: oculto;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('display: block')
+ expect(output).toContain('position: relative')
+ expect(output).toContain('visibility: hidden')
+ })
+
+ it('should transform properties with ñ (tamaño)', () => {
+ const input = `.elemento {
+ fuente-tamaño: 16px;
+ fondo-tamaño: cubrir;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('font-size: 16px')
+ expect(output).toContain('background-size: cover')
+ })
+
+ it('should transform newly translated properties', () => {
+ const input = `.elemento {
+ fuente-variante: normal;
+ texto-decoracion-grosor: 2px;
+ transicion-propiedad: todo;
+ lista-estilo-tipo: disco;
+ vacio-celdas: ocultar;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('font-variant: normal')
+ expect(output).toContain('text-decoration-thickness: 2px')
+ expect(output).toContain('transition-property: all')
+ expect(output).toContain('list-style-type: disc')
+ expect(output).toContain('empty-cells: hide')
+ })
+
+ it('should transform grid row properties', () => {
+ const input = `.elemento {
+ cuadricula-fila: 1;
+ fila-brecha: 10px;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('grid-row: 1')
+ expect(output).toContain('row-gap: 10px')
+ })
+
+ it('should transform color names', () => {
+ const input = `.elemento {
+ color: azul;
+ fondo-color: rojo;
+ borde-color: verde-oscuro;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('color: blue')
+ expect(output).toContain('background-color: red')
+ expect(output).toContain('border-color: darkgreen')
+ })
+ })
+
+ describe('CSS to EsCSS', () => {
+ it('should transform basic properties', () => {
+ const input = `.card {
+ display: flex;
+ width: 100%;
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('mostrar: flex')
+ expect(output).toContain('ancho: 100%')
+ })
+
+ it('should transform pseudo-classes', () => {
+ const input = `.button:hover {
+ background-color: blue;
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain(':encima')
+ })
+
+ it('should transform @media queries', () => {
+ const input = `@media (min-width: 768px) {
+ .container {
+ width: 100%;
+ }
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('@medios')
+ expect(output).toContain('minimo-ancho')
+ })
+
+ it('should transform @media params with nested parentheses (e.g. calc())', () => {
+ const input = `@media (min-width: calc(100px + 20px)) {
+ .box { width: 100%; }
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('@medios')
+ expect(output).toContain('minimo-ancho')
+ expect(output).toContain('calc(100px + 20px)')
+ })
+
+ it('should preserve full value in @media when value has nested parens (e.g. clamp)', () => {
+ const input = `@media (min-width: clamp(100px, 50%, 100vw)) {
+ .box { width: 100%; }
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('@medios')
+ expect(output).toContain('minimo-ancho')
+ expect(output).toContain('clamp(100px, 50%, 100vw)')
+ })
+
+ it('should preserve @media value when function closes before end (e.g. max())', () => {
+ const input = `@media (min-width: max(100px, 20rem)) {
+ .box { width: 100%; }
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('max(100px, 20rem)')
+ expect(output).not.toContain('max(100px)),')
+ })
+
+ it('should preserve @media value with doubly nested parens (e.g. calc + max)', () => {
+ const input = `@media (min-width: calc(100px + max(10px, 20px))) {
+ .box { width: 100%; }
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('calc(100px + max(10px, 20px))')
+ expect(output).not.toContain('max(10px)),')
+ })
+
+ it('should transform properties to ñ tokens', () => {
+ const input = `.element {
+ font-size: 16px;
+ background-size: cover;
+}`
+
+ const output = compile(input, { from: 'css', to: 'escss' })
+
+ expect(output).toContain('fuente-tamaño: 16px')
+ expect(output).toContain('fondo-tamaño: cubrir')
+ })
+ })
+
+ describe('Edge cases', () => {
+ it('should preserve unknown properties', () => {
+ const input = `.elemento {
+ --custom-property: value;
+ unknown-property: test;
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('--custom-property: value')
+ expect(output).toContain('unknown-property: test')
+ })
+
+ it('should preserve values with functions', () => {
+ const input = `.elemento {
+ ancho: calc(100% - 20px);
+ fondo-imagen: url("test.jpg");
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('width: calc(100% - 20px)')
+ expect(output).toContain('background-image: url("test.jpg")')
+ })
+
+ it('should return same content when from equals to', () => {
+ const input = `.elemento { display: flex; }`
+
+ const output = compile(input, { from: 'css', to: 'css' })
+
+ expect(output).toBe(input)
+ })
+
+ it('should handle ñ in media query properties', () => {
+ const input = `@medios (maximo-ancho: 768px) {
+ .elemento {
+ fuente-tamaño: 14px;
+ }
+}`
+
+ const output = compile(input, { from: 'escss', to: 'css' })
+
+ expect(output).toContain('@media')
+ expect(output).toContain('max-width: 768px')
+ expect(output).toContain('font-size: 14px')
+ })
+
+ it('should handle empty input', () => {
+ const output = compile('', { from: 'escss', to: 'css' })
+ expect(output).toBe('')
+ })
+ })
+})
diff --git a/packages/escss/test/transformSelector.test.ts b/packages/escss/test/transformSelector.test.ts
new file mode 100644
index 00000000..877d62a2
--- /dev/null
+++ b/packages/escss/test/transformSelector.test.ts
@@ -0,0 +1,64 @@
+import { describe, it, expect } from 'vitest'
+import { transformSelector } from '../src/utils/transformSelector'
+
+describe('transformSelector', () => {
+ describe('pseudo-classes (single colon) vs pseudo-elements (double colon)', () => {
+ it('transforms only single-colon pseudo-classes, not double-colon', () => {
+ // CSS → EsCSS: :hover → :encima, ::before → ::antes
+ expect(transformSelector('a:hover', true)).toBe('a:encima')
+ expect(transformSelector('a::before', true)).toBe('a::antes')
+ })
+
+ it('does not match after double-colon: selector with both :: and :', () => {
+ // The pseudo-class regex must not match the colon of ::before (negative lookbehind)
+ const result = transformSelector('a:hover::before', true)
+ expect(result).toBe('a:encima::antes')
+ })
+
+ it('transforms pseudo-element then pseudo-class without double-colon being treated as pseudo-class', () => {
+ // Order in string: ::before first, then :hover. After pseudo-element replace: a::antes:hover
+ // Pseudo-class regex must match :hover (single colon) but not the : in ::antes
+ const result = transformSelector('a::before:hover', true)
+ expect(result).toBe('a::antes:encima')
+ })
+
+ it('EsCSS → CSS: single-colon and double-colon remain distinct', () => {
+ expect(transformSelector('a:encima', false)).toBe('a:hover')
+ expect(transformSelector('a::antes', false)).toBe('a::before')
+ expect(transformSelector('a:encima::antes', false)).toBe(
+ 'a:hover::before',
+ )
+ expect(transformSelector('a::antes:encima', false)).toBe(
+ 'a::before:hover',
+ )
+ })
+ })
+
+ describe('functional pseudo-classes (with params)', () => {
+ it('transforms pseudo-class with params (CSS → EsCSS)', () => {
+ expect(transformSelector('span:nth-child(2n+1)', true)).toBe(
+ 'span:hijo-n(2n+1)',
+ )
+ expect(transformSelector('p:not(.foo)', true)).toBe('p:no(.foo)')
+ })
+
+ it('transforms pseudo-class with params (EsCSS → CSS)', () => {
+ expect(transformSelector('span:hijo-n(2n+1)', false)).toBe(
+ 'span:nth-child(2n+1)',
+ )
+ expect(transformSelector('p:no(.foo)', false)).toBe('p:not(.foo)')
+ })
+ })
+
+ describe('simple pseudo-classes', () => {
+ it('transforms simple pseudo-classes CSS → EsCSS', () => {
+ expect(transformSelector('.btn:focus', true)).toBe('.btn:enfoque')
+ expect(transformSelector('.link:active', true)).toBe('.link:activo')
+ })
+
+ it('transforms simple pseudo-classes EsCSS → CSS', () => {
+ expect(transformSelector('.btn:enfoque', false)).toBe('.btn:focus')
+ expect(transformSelector('.link:activo', false)).toBe('.link:active')
+ })
+ })
+})
diff --git a/packages/escss/tsconfig.json b/packages/escss/tsconfig.json
new file mode 100644
index 00000000..6421fd51
--- /dev/null
+++ b/packages/escss/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "declaration": true,
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist", "test"]
+}
diff --git a/packages/escss/vite.config.ts b/packages/escss/vite.config.ts
new file mode 100644
index 00000000..9ca7ec17
--- /dev/null
+++ b/packages/escss/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ globals: false,
+ },
+})
diff --git a/packages/esvue/build.config.ts b/packages/esvue/build.config.ts
index 8e722d07..3d15d302 100644
--- a/packages/esvue/build.config.ts
+++ b/packages/esvue/build.config.ts
@@ -8,5 +8,5 @@ export default defineBuildConfig({
emitCJS: true,
inlineDependencies: true,
},
- externals: ['@es-js/core'],
+ externals: ['@es-js/core', '@es-js/escss'],
})
diff --git a/packages/esvue/package.json b/packages/esvue/package.json
index 7b691aea..ac787e0d 100644
--- a/packages/esvue/package.json
+++ b/packages/esvue/package.json
@@ -19,6 +19,7 @@
],
"devDependencies": {
"@es-js/core": "workspace:*",
+ "@es-js/escss": "workspace:*",
"@es-js/eshtml": "workspace:*",
"@types/hast": "^3.0.4",
"@types/node": "^20.19.30",
diff --git a/packages/esvue/pnpm-lock.yaml b/packages/esvue/pnpm-lock.yaml
index 9120332f..f0428e69 100644
--- a/packages/esvue/pnpm-lock.yaml
+++ b/packages/esvue/pnpm-lock.yaml
@@ -11,6 +11,9 @@ importers:
'@es-js/core':
specifier: workspace:*
version: link:../core
+ '@es-js/escss':
+ specifier: workspace:*
+ version: link:../escss
'@es-js/eshtml':
specifier: workspace:*
version: link:../eshtml
diff --git a/packages/esvue/src/index.ts b/packages/esvue/src/index.ts
index dc317373..5a13309b 100644
--- a/packages/esvue/src/index.ts
+++ b/packages/esvue/src/index.ts
@@ -1,4 +1,5 @@
import { compile as EsJSCompile } from '@es-js/core'
+import { compile as EsCSSCompile } from '@es-js/escss'
import { compile as EsHTMLCompile } from '@es-js/eshtml'
import { parser } from '@es-js/eshtml/parser'
import { render } from '@es-js/eshtml/render'
@@ -28,13 +29,17 @@ export function compile(
const tree = parser(html)
+ // Compile script block
const script: any = tree.find((node: any) => node.tag === 'script')
-
- if (!script) {
- return html
+ if (script) {
+ compileScriptNode(script, options)
}
- compileScriptNode(script, options)
+ // Compile style block
+ const style: any = tree.find((node: any) => node.tag === 'style')
+ if (style) {
+ compileStyleNode(style, options)
+ }
const rendered = render(tree)
@@ -68,3 +73,17 @@ function compileScriptNode(node: any, options: CompileOptions): any {
return node
}
+
+function compileStyleNode(node: any, options: CompileOptions): any {
+ const content = node && node.content && node.content[0]
+
+ if (content && typeof content === 'string') {
+ // Compile CSS content
+ node.content[0] = EsCSSCompile(content, {
+ from: options.from === 'esvue' ? 'escss' : 'css',
+ to: options.to === 'esvue' ? 'escss' : 'css',
+ })
+ }
+
+ return node
+}
diff --git a/packages/language-tools/assets/css-language-configuration.json b/packages/language-tools/assets/css-language-configuration.json
new file mode 100644
index 00000000..4329ceba
--- /dev/null
+++ b/packages/language-tools/assets/css-language-configuration.json
@@ -0,0 +1,40 @@
+{
+ "comments": {
+ "blockComment": ["/*", "*/"]
+ },
+ "brackets": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"]
+ ],
+ "autoClosingPairs": [
+ { "open": "{", "close": "}", "notIn": ["string", "comment"] },
+ { "open": "[", "close": "]", "notIn": ["string", "comment"] },
+ { "open": "(", "close": ")", "notIn": ["string", "comment"] },
+ { "open": "\"", "close": "\"", "notIn": ["string", "comment"] },
+ { "open": "'", "close": "'", "notIn": ["string", "comment"] }
+ ],
+ "surroundingPairs": [
+ { "open": "{", "close": "}" },
+ { "open": "[", "close": "]" },
+ { "open": "(", "close": ")" },
+ { "open": "\"", "close": "\"" },
+ { "open": "'", "close": "'" }
+ ],
+ "folding": {
+ "markers": {
+ "start": "^\\s*/\\*\\s*#?region\\b.*\\*/",
+ "end": "^\\s*/\\*\\s*#?endregion\\b.*\\*/"
+ }
+ },
+ "indentationRules": {
+ "increaseIndentPattern": "^.*\\{[^}\"']*$",
+ "decreaseIndentPattern": "^\\s*\\}"
+ },
+ "wordPattern": "-?\\d*\\.\\d+([eE][\\-+]?\\d+)?|[^\\`\\~\\!\\@\\#\\$\\%\\^\\&\\*\\(\\)\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+",
+ "colorizedBracketPairs": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"]
+ ]
+}
diff --git a/packages/language-tools/package.json b/packages/language-tools/package.json
index 468d8dcb..5ea41d25 100644
--- a/packages/language-tools/package.json
+++ b/packages/language-tools/package.json
@@ -24,6 +24,7 @@
],
"devDependencies": {
"@es-js/core": "workspace:*",
+ "@es-js/escss": "workspace:*",
"markdown-table": "^3.0.4",
"vitest": "^2.1.9"
},
@@ -36,6 +37,10 @@
"import": "./dist/esvue.tmLanguage.json",
"require": "./dist/esvue.tmLanguage.json"
},
+ "./escss.tmLanguage.json": {
+ "import": "./dist/escss.tmLanguage.json",
+ "require": "./dist/escss.tmLanguage.json"
+ },
"./esjs-language-configuration.json": {
"import": "./dist/esjs-language-configuration.json",
"require": "./dist/esjs-language-configuration.json"
@@ -44,6 +49,10 @@
"import": "./dist/esvue-language-configuration.json",
"require": "./dist/esvue-language-configuration.json"
},
+ "./escss-language-configuration.json": {
+ "import": "./dist/escss-language-configuration.json",
+ "require": "./dist/escss-language-configuration.json"
+ },
"./esjs.code-snippets.json": {
"import": "./dist/esjs.code-snippets.json",
"require": "./dist/esjs.code-snippets.json"
diff --git a/packages/language-tools/pnpm-lock.yaml b/packages/language-tools/pnpm-lock.yaml
index 20f7fcfb..035c8936 100644
--- a/packages/language-tools/pnpm-lock.yaml
+++ b/packages/language-tools/pnpm-lock.yaml
@@ -11,6 +11,9 @@ importers:
'@es-js/core':
specifier: workspace:*
version: link:../core
+ '@es-js/escss':
+ specifier: workspace:*
+ version: link:../escss
markdown-table:
specifier: ^3.0.4
version: 3.0.4
diff --git a/packages/language-tools/src/generate-escss-language-configurations.js b/packages/language-tools/src/generate-escss-language-configurations.js
new file mode 100644
index 00000000..3945e7bf
--- /dev/null
+++ b/packages/language-tools/src/generate-escss-language-configurations.js
@@ -0,0 +1,13 @@
+import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'
+
+if (!existsSync('dist')) {
+ mkdirSync('dist')
+}
+
+const data = readFileSync('./assets/css-language-configuration.json')
+
+const jsonData = JSON.parse(data)
+
+const output = JSON.stringify(jsonData, null, '\t')
+
+writeFileSync('dist/escss-language-configuration.json', output)
diff --git a/packages/language-tools/src/generate-escss-syntax.js b/packages/language-tools/src/generate-escss-syntax.js
new file mode 100644
index 00000000..1aedeef7
--- /dev/null
+++ b/packages/language-tools/src/generate-escss-syntax.js
@@ -0,0 +1,141 @@
+import { existsSync, mkdirSync, writeFileSync } from 'node:fs'
+import {
+ getPropertiesDictionary,
+ getValuesDictionary,
+ getAtRulesDictionary,
+ getPseudoClassesDictionary,
+ getPseudoElementsDictionary,
+} from '@es-js/escss/dictionaries'
+
+/**
+ * Get EsCSS keywords from the generated dictionaries.
+ * When inverted=true, we get CSS -> EsCSS mapping, so we extract the EsCSS keys (values).
+ */
+function getEscssKeywords(dictionary) {
+ // The dictionary maps EsCSS -> CSS, so the keys are EsCSS keywords
+ return Array.from(dictionary.keys())
+}
+
+// Get keywords from dictionaries (EsCSS -> CSS direction gives us EsCSS keys)
+const escssProperties = getEscssKeywords(getPropertiesDictionary(false))
+const escssValues = getEscssKeywords(getValuesDictionary(false))
+const escssAtRules = getEscssKeywords(getAtRulesDictionary(false))
+const escssPseudoClasses = getEscssKeywords(getPseudoClassesDictionary(false))
+const escssPseudoElements = getEscssKeywords(getPseudoElementsDictionary(false))
+
+function includeKeywords(keywords) {
+ return `\\\\b(${keywords.join('|')})\\\\b`
+}
+
+if (!existsSync('dist')) {
+ mkdirSync('dist')
+}
+
+// Create a TextMate grammar for EsCSS
+const escssGrammar = {
+ $schema:
+ 'https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json',
+ name: 'EsCSS',
+ scopeName: 'source.escss',
+ patterns: [
+ { include: '#comment' },
+ { include: '#at-rule' },
+ { include: '#selector' },
+ { include: '#rule-list' },
+ ],
+ repository: {
+ comment: {
+ patterns: [
+ {
+ name: 'comment.block.escss',
+ begin: '/\\\\*',
+ end: '\\\\*/',
+ },
+ ],
+ },
+ 'at-rule': {
+ patterns: [
+ {
+ name: 'keyword.control.at-rule.escss',
+ match: `@(${escssAtRules.join('|')})\\\\b`,
+ },
+ {
+ name: 'keyword.control.at-rule.escss',
+ match: '@[a-zA-Z-]+',
+ },
+ ],
+ },
+ selector: {
+ patterns: [
+ {
+ name: 'entity.other.attribute-name.class.escss',
+ match: '\\\\.[a-zA-Z_][a-zA-Z0-9_-]*',
+ },
+ {
+ name: 'entity.other.attribute-name.id.escss',
+ match: '#[a-zA-Z_][a-zA-Z0-9_-]*',
+ },
+ {
+ name: 'entity.name.tag.escss',
+ match: '\\\\b[a-zA-Z][a-zA-Z0-9]*\\\\b',
+ },
+ {
+ name: 'entity.other.attribute-name.pseudo-class.escss',
+ match: `:(${escssPseudoClasses.join('|')})\\\\b`,
+ },
+ {
+ name: 'entity.other.attribute-name.pseudo-element.escss',
+ match: `::(${escssPseudoElements.join('|')})\\\\b`,
+ },
+ ],
+ },
+ 'rule-list': {
+ patterns: [
+ {
+ begin: '\\\\{',
+ end: '\\\\}',
+ patterns: [{ include: '#comment' }, { include: '#property' }],
+ },
+ ],
+ },
+ property: {
+ patterns: [
+ {
+ name: 'support.type.property-name.escss',
+ match: `(${escssProperties.join('|')})(?=\\\\s*:)`,
+ },
+ {
+ name: 'support.type.property-name.escss',
+ match: '[a-zA-Z-]+(?=\\\\s*:)',
+ },
+ {
+ name: 'support.constant.property-value.escss',
+ match: includeKeywords(escssValues),
+ },
+ {
+ name: 'constant.numeric.escss',
+ match:
+ '-?[0-9]+(\\\\.[0-9]+)?(em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|%)?',
+ },
+ {
+ name: 'support.constant.color.escss',
+ match: '#[0-9a-fA-F]{3,8}\\\\b',
+ },
+ {
+ name: 'string.quoted.double.escss',
+ begin: '"',
+ end: '"',
+ },
+ {
+ name: 'string.quoted.single.escss',
+ begin: "'",
+ end: "'",
+ },
+ ],
+ },
+ },
+}
+
+const output = JSON.stringify(escssGrammar, null, '\t')
+
+writeFileSync('dist/escss.tmLanguage.json', output)
diff --git a/packages/language-tools/src/index.js b/packages/language-tools/src/index.js
index 627b3cd5..28114f5d 100644
--- a/packages/language-tools/src/index.js
+++ b/packages/language-tools/src/index.js
@@ -1,6 +1,8 @@
import './generate-esjs-syntax.js'
import './generate-esvue-syntax.js'
+import './generate-escss-syntax.js'
import './generate-esjs-language-configurations.js'
import './generate-esvue-language-configurations.js'
+import './generate-escss-language-configurations.js'
import './generate-esjs-snippets.js'
import './generate-reserved-words-table.js'
diff --git a/packages/prettier-plugin-escss/package.json b/packages/prettier-plugin-escss/package.json
new file mode 100644
index 00000000..95856d62
--- /dev/null
+++ b/packages/prettier-plugin-escss/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "prettier-plugin-escss",
+ "version": "0.0.1",
+ "license": "MIT",
+ "type": "module",
+ "main": "./dist/index.cjs",
+ "types": "./dist/index.d.ts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "default": "./dist/index.cjs"
+ }
+ },
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "pkgroll",
+ "start": "tsx src/index.ts",
+ "test": "vitest",
+ "test:run": "vitest run",
+ "typecheck": "tsc --noEmit",
+ "watch": "pkgroll --watch",
+ "prepublishOnly": "pnpm run build"
+ },
+ "devDependencies": {
+ "@es-js/escss": "workspace:*",
+ "@types/node": "^20.14.12",
+ "pkgroll": "^2.4.1",
+ "prettier": "^3.3.3",
+ "tsx": "^4.16.2",
+ "typescript": "^5.5.4",
+ "vite": "^5.3.4",
+ "vitest": "^2.0.4"
+ },
+ "peerDependencies": {
+ "prettier": "^3.0.0"
+ }
+}
diff --git a/packages/prettier-plugin-escss/pnpm-lock.yaml b/packages/prettier-plugin-escss/pnpm-lock.yaml
new file mode 100644
index 00000000..61e023e7
--- /dev/null
+++ b/packages/prettier-plugin-escss/pnpm-lock.yaml
@@ -0,0 +1,1892 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@es-js/escss':
+ specifier: workspace:*
+ version: link:../escss
+ '@types/node':
+ specifier: ^20.14.12
+ version: 20.19.30
+ pkgroll:
+ specifier: ^2.4.1
+ version: 2.21.5(typescript@5.9.3)
+ prettier:
+ specifier: ^3.3.3
+ version: 3.8.0
+ tsx:
+ specifier: ^4.16.2
+ version: 4.21.0
+ typescript:
+ specifier: ^5.5.4
+ version: 5.9.3
+ vite:
+ specifier: ^5.3.4
+ version: 5.4.21(@types/node@20.19.30)
+ vitest:
+ specifier: ^2.0.4
+ version: 2.1.9(@types/node@20.19.30)
+
+packages:
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.26.0':
+ resolution: {integrity: sha512-hj0sKNCQOOo2fgyII3clmJXP28VhgDfU5iy3GNHlWO76KG6N7x4D9ezH5lJtQTG+1J6MFDAJXC1qsI+W+LvZoA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.27.2':
+ resolution: {integrity: sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.26.0':
+ resolution: {integrity: sha512-DDnoJ5eoa13L8zPh87PUlRd/IyFaIKOlRbxiwcSbeumcJ7UZKdtuMCHa1Q27LWQggug6W4m28i4/O2qiQQ5NZQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.27.2':
+ resolution: {integrity: sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.26.0':
+ resolution: {integrity: sha512-C0hkDsYNHZkBtPxxDx177JN90/1MiCpvBNjz1f5yWJo1+5+c5zr8apjastpEG+wtPjo9FFtGG7owSsAxyKiHxA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.2':
+ resolution: {integrity: sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.26.0':
+ resolution: {integrity: sha512-bKDkGXGZnj0T70cRpgmv549x38Vr2O3UWLbjT2qmIkdIWcmlg8yebcFWoT9Dku7b5OV3UqPEuNKRzlNhjwUJ9A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.2':
+ resolution: {integrity: sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.26.0':
+ resolution: {integrity: sha512-6Z3naJgOuAIB0RLlJkYc81An3rTlQ/IeRdrU3dOea8h/PvZSgitZV+thNuIccw0MuK1GmIAnAmd5TrMZad8FTQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.27.2':
+ resolution: {integrity: sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.26.0':
+ resolution: {integrity: sha512-OPnYj0zpYW0tHusMefyaMvNYQX5pNQuSsHFTHUBNp3vVXupwqpxofcjVsUx11CQhGVkGeXjC3WLjh91hgBG2xw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.2':
+ resolution: {integrity: sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.26.0':
+ resolution: {integrity: sha512-jix2fa6GQeZhO1sCKNaNMjfj5hbOvoL2F5t+w6gEPxALumkpOV/wq7oUBMHBn2hY2dOm+mEV/K+xfZy3mrsxNQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ resolution: {integrity: sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.26.0':
+ resolution: {integrity: sha512-tccJaH5xHJD/239LjbVvJwf6T4kSzbk6wPFerF0uwWlkw/u7HL+wnAzAH5GB2irGhYemDgiNTp8wJzhAHQ64oA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.2':
+ resolution: {integrity: sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.26.0':
+ resolution: {integrity: sha512-IMJYN7FSkLttYyTbsbme0Ra14cBO5z47kpamo16IwggzzATFY2lcZAwkbcNkWiAduKrTgFJP7fW5cBI7FzcuNQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.27.2':
+ resolution: {integrity: sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.26.0':
+ resolution: {integrity: sha512-JY8NyU31SyRmRpuc5W8PQarAx4TvuYbyxbPIpHAZdr/0g4iBr8KwQBS4kiiamGl2f42BBecHusYCsyxi7Kn8UQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.2':
+ resolution: {integrity: sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.26.0':
+ resolution: {integrity: sha512-XITaGqGVLgk8WOHw8We9Z1L0lbLFip8LyQzKYFKO4zFo1PFaaSKsbNjvkb7O8kEXytmSGRkYpE8LLVpPJpsSlw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.2':
+ resolution: {integrity: sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.26.0':
+ resolution: {integrity: sha512-MkggfbDIczStUJwq9wU7gQ7kO33d8j9lWuOCDifN9t47+PeI+9m2QVh51EI/zZQ1spZtFMC1nzBJ+qNGCjJnsg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.2':
+ resolution: {integrity: sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.26.0':
+ resolution: {integrity: sha512-fUYup12HZWAeccNLhQ5HwNBPr4zXCPgUWzEq2Rfw7UwqwfQrFZ0SR/JljaURR8xIh9t+o1lNUFTECUTmaP7yKA==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.2':
+ resolution: {integrity: sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.26.0':
+ resolution: {integrity: sha512-MzRKhM0Ip+//VYwC8tialCiwUQ4G65WfALtJEFyU0GKJzfTYoPBw5XNWf0SLbCUYQbxTKamlVwPmcw4DgZzFxg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.2':
+ resolution: {integrity: sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.26.0':
+ resolution: {integrity: sha512-QhCc32CwI1I4Jrg1enCv292sm3YJprW8WHHlyxJhae/dVs+KRWkbvz2Nynl5HmZDW/m9ZxrXayHzjzVNvQMGQA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.2':
+ resolution: {integrity: sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.26.0':
+ resolution: {integrity: sha512-1D6vi6lfI18aNT1aTf2HV+RIlm6fxtlAp8eOJ4mmnbYmZ4boz8zYDar86sIYNh0wmiLJEbW/EocaKAX6Yso2fw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.2':
+ resolution: {integrity: sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.26.0':
+ resolution: {integrity: sha512-rnDcepj7LjrKFvZkx+WrBv6wECeYACcFjdNPvVPojCPJD8nHpb3pv3AuR9CXgdnjH1O23btICj0rsp0L9wAnHA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.2':
+ resolution: {integrity: sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.26.0':
+ resolution: {integrity: sha512-FSWmgGp0mDNjEXXFcsf12BmVrb+sZBBBlyh3LwB/B9ac3Kkc8x5D2WimYW9N7SUkolui8JzVnVlWh7ZmjCpnxw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.26.0':
+ resolution: {integrity: sha512-0QfciUDFryD39QoSPUDshj4uNEjQhp73+3pbSAaxjV2qGOEDsM67P7KbJq7LzHoVl46oqhIhJ1S+skKGR7lMXA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.2':
+ resolution: {integrity: sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.26.0':
+ resolution: {integrity: sha512-vmAK+nHhIZWImwJ3RNw9hX3fU4UGN/OqbSE0imqljNbUQC3GvVJ1jpwYoTfD6mmXmQaxdJY6Hn4jQbLGJKg5Yw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ resolution: {integrity: sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.26.0':
+ resolution: {integrity: sha512-GPXF7RMkJ7o9bTyUsnyNtrFMqgM3X+uM/LWw4CeHIjqc32fm0Ir6jKDnWHpj8xHFstgWDUYseSABK9KCkHGnpg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.2':
+ resolution: {integrity: sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.26.0':
+ resolution: {integrity: sha512-nUHZ5jEYqbBthbiBksbmHTlbb5eElyVfs/s1iHQ8rLBq1eWsd5maOnDpCocw1OM8kFK747d1Xms8dXJHtduxSw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ resolution: {integrity: sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.26.0':
+ resolution: {integrity: sha512-TMg3KCTCYYaVO+R6P5mSORhcNDDlemUVnUbb8QkboUtOhb5JWKAzd5uMIMECJQOxHZ/R+N8HHtDF5ylzLfMiLw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.27.2':
+ resolution: {integrity: sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.26.0':
+ resolution: {integrity: sha512-apqYgoAUd6ZCb9Phcs8zN32q6l0ZQzQBdVXOofa6WvHDlSOhwCWgSfVQabGViThS40Y1NA4SCvQickgZMFZRlA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.27.2':
+ resolution: {integrity: sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.26.0':
+ resolution: {integrity: sha512-FGJAcImbJNZzLWu7U6WB0iKHl4RuY4TsXEwxJPl9UZLS47agIZuILZEX3Pagfw7I4J3ddflomt9f0apfaJSbaw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.2':
+ resolution: {integrity: sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.26.0':
+ resolution: {integrity: sha512-WAckBKaVnmFqbEhbymrPK7M086DQMpL1XoRbpmN0iW8k5JSXjDRQBhcZNa0VweItknLq9eAeCL34jK7/CDcw7A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.2':
+ resolution: {integrity: sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@rollup/plugin-alias@6.0.0':
+ resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ rollup: '>=4.0.0'
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-commonjs@29.0.0':
+ resolution: {integrity: sha512-U2YHaxR2cU/yAiwKJtJRhnyLk7cifnQw0zUpISsocBDoHDJn+HTV74ABqnwr5bEgWUwFZC9oFL6wLe21lHu5eQ==}
+ engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-dynamic-import-vars@2.1.5':
+ resolution: {integrity: sha512-Mymi24fd9hlRifdZV/jYIFj1dn99F34imiYu3KzlAcgBcRi3i9SucgW/VRo5SQ9K4NuQ7dCep6pFWgNyhRdFHQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-inject@5.0.5':
+ resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-json@6.1.0':
+ resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-node-resolve@16.0.3':
+ resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/node@20.19.30':
+ resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
+
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
+ '@vitest/expect@2.1.9':
+ resolution: {integrity: sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==}
+
+ '@vitest/mocker@2.1.9':
+ resolution: {integrity: sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^5.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@2.1.9':
+ resolution: {integrity: sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==}
+
+ '@vitest/runner@2.1.9':
+ resolution: {integrity: sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==}
+
+ '@vitest/snapshot@2.1.9':
+ resolution: {integrity: sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==}
+
+ '@vitest/spy@2.1.9':
+ resolution: {integrity: sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==}
+
+ '@vitest/utils@2.1.9':
+ resolution: {integrity: sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ astring@1.9.0:
+ resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+ hasBin: true
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ chai@5.3.3:
+ resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==}
+ engines: {node: '>=18'}
+
+ check-error@2.1.3:
+ resolution: {integrity: sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==}
+ engines: {node: '>= 16'}
+
+ cjs-module-lexer@2.2.0:
+ resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
+
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-eql@5.0.2:
+ resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+ engines: {node: '>=6'}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ es-module-lexer@1.7.0:
+ resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.26.0:
+ resolution: {integrity: sha512-3Hq7jri+tRrVWha+ZeIVhl4qJRha/XjRNSopvTsOaCvfPHrflTYTcUFcEjMKdxofsXXsdc4zjg5NOTnL4Gl57Q==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ esbuild@0.27.2:
+ resolution: {integrity: sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ estree-walker@0.6.1:
+ resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ get-tsconfig@4.13.0:
+ resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
+ loupe@3.2.1:
+ resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathval@2.0.1:
+ resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==}
+ engines: {node: '>= 14.16'}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pkgroll@2.21.5:
+ resolution: {integrity: sha512-TX+u8/l5sW3wiUXmM+bT1DHszSgUQacG70khzuDtKRTRTb2Ai1VWeGr1865DUhhhvJbztFupSgs/3hD3GHoCGg==}
+ engines: {node: '>=18'}
+ hasBin: true
+ peerDependencies:
+ typescript: ^4.1 || ^5.0
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prettier@3.8.0:
+ resolution: {integrity: sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup-pluginutils@2.8.2:
+ resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
+
+ rollup@4.55.1:
+ resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@0.3.2:
+ resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
+
+ tinypool@1.1.1:
+ resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+
+ tinyrainbow@1.2.0:
+ resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+ engines: {node: '>=14.0.0'}
+
+ tinyspy@3.0.2:
+ resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ vite-node@2.1.9:
+ resolution: {integrity: sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ vitest@2.1.9:
+ resolution: {integrity: sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@types/node': ^18.0.0 || >=20.0.0
+ '@vitest/browser': 2.1.9
+ '@vitest/ui': 2.1.9
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ yaml@2.8.2:
+ resolution: {integrity: sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+snapshots:
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.26.0':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.26.0':
+ optional: true
+
+ '@esbuild/android-arm@0.27.2':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.26.0':
+ optional: true
+
+ '@esbuild/android-x64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.26.0':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.26.0':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.26.0':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.26.0':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.26.0':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.26.0':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.26.0':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.26.0':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.26.0':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.26.0':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.26.0':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.26.0':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.2':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.26.0':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.26.0':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.26.0':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.26.0':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.2':
+ optional: true
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@rollup/plugin-alias@6.0.0(rollup@4.55.1)':
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/plugin-commonjs@29.0.0(rollup@4.55.1)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ fdir: 6.5.0(picomatch@4.0.3)
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/plugin-dynamic-import-vars@2.1.5(rollup@4.55.1)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ astring: 1.9.0
+ estree-walker: 2.0.2
+ fast-glob: 3.3.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/plugin-inject@5.0.5(rollup@4.55.1)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/plugin-json@6.1.0(rollup@4.55.1)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.55.1)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.11
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/pluginutils@5.3.0(rollup@4.55.1)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 4.55.1
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/node@20.19.30':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/resolve@1.20.2': {}
+
+ '@vitest/expect@2.1.9':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.3.3
+ tinyrainbow: 1.2.0
+
+ '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@20.19.30))':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 5.4.21(@types/node@20.19.30)
+
+ '@vitest/pretty-format@2.1.9':
+ dependencies:
+ tinyrainbow: 1.2.0
+
+ '@vitest/runner@2.1.9':
+ dependencies:
+ '@vitest/utils': 2.1.9
+ pathe: 1.1.2
+
+ '@vitest/snapshot@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ magic-string: 0.30.21
+ pathe: 1.1.2
+
+ '@vitest/spy@2.1.9':
+ dependencies:
+ tinyspy: 3.0.2
+
+ '@vitest/utils@2.1.9':
+ dependencies:
+ '@vitest/pretty-format': 2.1.9
+ loupe: 3.2.1
+ tinyrainbow: 1.2.0
+
+ assertion-error@2.0.1: {}
+
+ astring@1.9.0: {}
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ cac@6.7.14: {}
+
+ chai@5.3.3:
+ dependencies:
+ assertion-error: 2.0.1
+ check-error: 2.1.3
+ deep-eql: 5.0.2
+ loupe: 3.2.1
+ pathval: 2.0.1
+
+ check-error@2.1.3: {}
+
+ cjs-module-lexer@2.2.0: {}
+
+ commondir@1.0.1: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-eql@5.0.2: {}
+
+ deepmerge@4.3.1: {}
+
+ es-module-lexer@1.7.0: {}
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ esbuild@0.26.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.26.0
+ '@esbuild/android-arm': 0.26.0
+ '@esbuild/android-arm64': 0.26.0
+ '@esbuild/android-x64': 0.26.0
+ '@esbuild/darwin-arm64': 0.26.0
+ '@esbuild/darwin-x64': 0.26.0
+ '@esbuild/freebsd-arm64': 0.26.0
+ '@esbuild/freebsd-x64': 0.26.0
+ '@esbuild/linux-arm': 0.26.0
+ '@esbuild/linux-arm64': 0.26.0
+ '@esbuild/linux-ia32': 0.26.0
+ '@esbuild/linux-loong64': 0.26.0
+ '@esbuild/linux-mips64el': 0.26.0
+ '@esbuild/linux-ppc64': 0.26.0
+ '@esbuild/linux-riscv64': 0.26.0
+ '@esbuild/linux-s390x': 0.26.0
+ '@esbuild/linux-x64': 0.26.0
+ '@esbuild/netbsd-arm64': 0.26.0
+ '@esbuild/netbsd-x64': 0.26.0
+ '@esbuild/openbsd-arm64': 0.26.0
+ '@esbuild/openbsd-x64': 0.26.0
+ '@esbuild/openharmony-arm64': 0.26.0
+ '@esbuild/sunos-x64': 0.26.0
+ '@esbuild/win32-arm64': 0.26.0
+ '@esbuild/win32-ia32': 0.26.0
+ '@esbuild/win32-x64': 0.26.0
+
+ esbuild@0.27.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.2
+ '@esbuild/android-arm': 0.27.2
+ '@esbuild/android-arm64': 0.27.2
+ '@esbuild/android-x64': 0.27.2
+ '@esbuild/darwin-arm64': 0.27.2
+ '@esbuild/darwin-x64': 0.27.2
+ '@esbuild/freebsd-arm64': 0.27.2
+ '@esbuild/freebsd-x64': 0.27.2
+ '@esbuild/linux-arm': 0.27.2
+ '@esbuild/linux-arm64': 0.27.2
+ '@esbuild/linux-ia32': 0.27.2
+ '@esbuild/linux-loong64': 0.27.2
+ '@esbuild/linux-mips64el': 0.27.2
+ '@esbuild/linux-ppc64': 0.27.2
+ '@esbuild/linux-riscv64': 0.27.2
+ '@esbuild/linux-s390x': 0.27.2
+ '@esbuild/linux-x64': 0.27.2
+ '@esbuild/netbsd-arm64': 0.27.2
+ '@esbuild/netbsd-x64': 0.27.2
+ '@esbuild/openbsd-arm64': 0.27.2
+ '@esbuild/openbsd-x64': 0.27.2
+ '@esbuild/openharmony-arm64': 0.27.2
+ '@esbuild/sunos-x64': 0.27.2
+ '@esbuild/win32-arm64': 0.27.2
+ '@esbuild/win32-ia32': 0.27.2
+ '@esbuild/win32-x64': 0.27.2
+
+ estree-walker@0.6.1: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ expect-type@1.3.0: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ get-tsconfig@4.13.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-module@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ loupe@3.2.1: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ path-parse@1.0.7: {}
+
+ pathe@1.1.2: {}
+
+ pathval@2.0.1: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pkgroll@2.21.5(typescript@5.9.3):
+ dependencies:
+ '@rollup/plugin-alias': 6.0.0(rollup@4.55.1)
+ '@rollup/plugin-commonjs': 29.0.0(rollup@4.55.1)
+ '@rollup/plugin-dynamic-import-vars': 2.1.5(rollup@4.55.1)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.55.1)
+ '@rollup/plugin-json': 6.1.0(rollup@4.55.1)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.55.1)
+ '@rollup/pluginutils': 5.3.0(rollup@4.55.1)
+ cjs-module-lexer: 2.2.0
+ esbuild: 0.26.0
+ magic-string: 0.30.21
+ rollup: 4.55.1
+ rollup-pluginutils: 2.8.2
+ yaml: 2.8.2
+ optionalDependencies:
+ typescript: 5.9.3
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prettier@3.8.0: {}
+
+ queue-microtask@1.2.3: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ rollup-pluginutils@2.8.2:
+ dependencies:
+ estree-walker: 0.6.1
+
+ rollup@4.55.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.55.1
+ '@rollup/rollup-android-arm64': 4.55.1
+ '@rollup/rollup-darwin-arm64': 4.55.1
+ '@rollup/rollup-darwin-x64': 4.55.1
+ '@rollup/rollup-freebsd-arm64': 4.55.1
+ '@rollup/rollup-freebsd-x64': 4.55.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.55.1
+ '@rollup/rollup-linux-arm64-gnu': 4.55.1
+ '@rollup/rollup-linux-arm64-musl': 4.55.1
+ '@rollup/rollup-linux-loong64-gnu': 4.55.1
+ '@rollup/rollup-linux-loong64-musl': 4.55.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.55.1
+ '@rollup/rollup-linux-ppc64-musl': 4.55.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.55.1
+ '@rollup/rollup-linux-riscv64-musl': 4.55.1
+ '@rollup/rollup-linux-s390x-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-musl': 4.55.1
+ '@rollup/rollup-openbsd-x64': 4.55.1
+ '@rollup/rollup-openharmony-arm64': 4.55.1
+ '@rollup/rollup-win32-arm64-msvc': 4.55.1
+ '@rollup/rollup-win32-ia32-msvc': 4.55.1
+ '@rollup/rollup-win32-x64-gnu': 4.55.1
+ '@rollup/rollup-win32-x64-msvc': 4.55.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ siginfo@2.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ stackback@0.0.2: {}
+
+ std-env@3.10.0: {}
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@0.3.2: {}
+
+ tinypool@1.1.1: {}
+
+ tinyrainbow@1.2.0: {}
+
+ tinyspy@3.0.2: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.2
+ get-tsconfig: 4.13.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ typescript@5.9.3: {}
+
+ undici-types@6.21.0: {}
+
+ vite-node@2.1.9(@types/node@20.19.30):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3
+ es-module-lexer: 1.7.0
+ pathe: 1.1.2
+ vite: 5.4.21(@types/node@20.19.30)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ vite@5.4.21(@types/node@20.19.30):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.55.1
+ optionalDependencies:
+ '@types/node': 20.19.30
+ fsevents: 2.3.3
+
+ vitest@2.1.9(@types/node@20.19.30):
+ dependencies:
+ '@vitest/expect': 2.1.9
+ '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@20.19.30))
+ '@vitest/pretty-format': 2.1.9
+ '@vitest/runner': 2.1.9
+ '@vitest/snapshot': 2.1.9
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.3.3
+ debug: 4.4.3
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ pathe: 1.1.2
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinypool: 1.1.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.21(@types/node@20.19.30)
+ vite-node: 2.1.9(@types/node@20.19.30)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 20.19.30
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ yaml@2.8.2: {}
diff --git a/packages/prettier-plugin-escss/src/index.ts b/packages/prettier-plugin-escss/src/index.ts
new file mode 100644
index 00000000..87f2797b
--- /dev/null
+++ b/packages/prettier-plugin-escss/src/index.ts
@@ -0,0 +1,87 @@
+import { compile as EsCSSCompile } from '@es-js/escss'
+import type { AstPath, ParserOptions } from 'prettier'
+import { format } from 'prettier'
+import * as prettierCssParser from 'prettier/plugins/postcss'
+
+const cssParser = prettierCssParser.parsers.css
+
+function locStart(node: any) {
+ return node.start
+}
+
+function locEnd(node: any) {
+ return node.end
+}
+
+const EsCSSPlugin = {
+ languages: [
+ {
+ name: 'EsCSS',
+ parsers: ['escss'],
+ extensions: ['.escss'],
+ vscodeLanguageIds: ['escss'],
+ },
+ ],
+ parsers: {
+ escss: {
+ ...cssParser,
+ preprocess: (text: string, options: ParserOptions) => {
+ text = text.trim()
+
+ // Convert EsCSS to CSS for formatting
+ const css = EsCSSCompile(text, {
+ from: 'escss',
+ to: 'css',
+ })
+
+ // Preserve the original text for the printer
+ // Taken from https://github.com/sveltejs/prettier-plugin-svelte/blob/9060efde88d3a70560ba663b08217c79dc11d631/src/index.ts#L54
+ // Prettier sets the preprocessed text as the originalText in case
+ // the EsCSS formatter is called directly. In case it's called
+ // as an embedded parser (for example when there's an EsCSS code block
+ // inside markdown), the originalText is not updated after preprocessing.
+ // Therefore we do it ourselves here.
+ options.originalText = text
+
+ return css
+ },
+ locStart,
+ locEnd,
+ astFormat: 'escss',
+ },
+ },
+ printers: {
+ escss: {
+ print: async (
+ path: AstPath,
+ options: ParserOptions,
+ print: any,
+ ) => {
+ // Taken from: https://github.com/ony3000/prettier-plugin-classnames/blob/master/src/packages/v3-plugin/printers.ts
+ // @ts-ignore
+ const comments = options[Symbol.for('comments')]
+ if (comments && Array.isArray(comments)) {
+ for (const comment of comments) {
+ comment.printed = true
+ }
+ }
+
+ const css = options.originalText
+
+ // Format as CSS first
+ const formatted = await format(css, {
+ ...options,
+ parser: 'css',
+ })
+
+ // Convert back to EsCSS
+ return EsCSSCompile(formatted, {
+ from: 'css',
+ to: 'escss',
+ })
+ },
+ },
+ },
+}
+
+export default EsCSSPlugin
diff --git a/packages/prettier-plugin-escss/test/format.test.ts b/packages/prettier-plugin-escss/test/format.test.ts
new file mode 100644
index 00000000..187d2d7b
--- /dev/null
+++ b/packages/prettier-plugin-escss/test/format.test.ts
@@ -0,0 +1,47 @@
+import { describe, it, expect } from 'vitest'
+import { format } from 'prettier'
+import EsCSSPlugin from '../src/index'
+import { compile } from '@es-js/escss'
+
+const formatOptions = {
+ parser: 'escss',
+ plugins: [EsCSSPlugin],
+ printWidth: 80,
+}
+
+describe('prettier-plugin-escss', () => {
+ it('formats EsCSS and returns valid EsCSS (not raw CSS)', async () => {
+ const input = `.tarjeta{mostrar:flex;ancho:100%;color-fondo:azul;}`
+ const output = await format(input, formatOptions)
+
+ expect(output).toBeDefined()
+ expect(typeof output).toBe('string')
+ // Formatted output should be EsCSS (Spanish property names), not CSS
+ expect(output).toContain('mostrar')
+ expect(output).toContain('ancho')
+ expect(output).toContain('color-fondo')
+ expect(output).not.toContain('display:')
+ expect(output).not.toContain('width:')
+ expect(output).not.toContain('background-color:')
+ })
+
+ it('formats EsCSS and result compiles to expected CSS', async () => {
+ const input = `.caja { mostrar: flex; ancho: 100%; }`
+ const output = await format(input, formatOptions)
+
+ const compiled = compile(output, { from: 'escss', to: 'css' })
+ expect(compiled).toContain('display: flex')
+ expect(compiled).toContain('width: 100%')
+ })
+
+ it('applies Prettier formatting (indentation, newlines)', async () => {
+ const input = `.a{color:rojo;}.b{color:azul;}`
+ const output = await format(input, formatOptions)
+
+ // Should have newlines between rules
+ expect(output).toMatch(/\n/)
+ expect(output).toContain('color')
+ expect(output).toContain('rojo')
+ expect(output).toContain('azul')
+ })
+})
diff --git a/packages/prettier-plugin-escss/tsconfig.json b/packages/prettier-plugin-escss/tsconfig.json
new file mode 100644
index 00000000..ce024e61
--- /dev/null
+++ b/packages/prettier-plugin-escss/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "declaration": true,
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/prettier-plugin-escss/vite.config.ts b/packages/prettier-plugin-escss/vite.config.ts
new file mode 100644
index 00000000..47cdb031
--- /dev/null
+++ b/packages/prettier-plugin-escss/vite.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ globals: true,
+ },
+})
diff --git a/packages/sandbox/src/compiler/index.ts b/packages/sandbox/src/compiler/index.ts
index 8073a72b..d0f7e48e 100644
--- a/packages/sandbox/src/compiler/index.ts
+++ b/packages/sandbox/src/compiler/index.ts
@@ -178,7 +178,10 @@ function processFile(file: File, seen = new Set()) {
return
}
- if (isStaticProperty(parent as any) && (parent as ObjectProperty).shorthand) {
+ if (
+ isStaticProperty(parent as any) &&
+ (parent as ObjectProperty).shorthand
+ ) {
// let binding used in a property shorthand
// { foo } -> { foo: __import_x__.foo }
// skip for destructure patterns
diff --git a/packages/vite-plugin-escss/build.config.ts b/packages/vite-plugin-escss/build.config.ts
new file mode 100644
index 00000000..73c10e2c
--- /dev/null
+++ b/packages/vite-plugin-escss/build.config.ts
@@ -0,0 +1,12 @@
+import { defineBuildConfig } from 'unbuild'
+
+export default defineBuildConfig({
+ entries: ['src/index'],
+ clean: true,
+ declaration: true,
+ rollup: {
+ emitCJS: true,
+ inlineDependencies: true,
+ },
+ externals: ['@es-js/escss', 'vite'],
+})
diff --git a/packages/vite-plugin-escss/package.json b/packages/vite-plugin-escss/package.json
new file mode 100644
index 00000000..f6b07402
--- /dev/null
+++ b/packages/vite-plugin-escss/package.json
@@ -0,0 +1,45 @@
+{
+ "name": "@es-js/vite-plugin-escss",
+ "version": "0.0.1",
+ "description": "Vite Plugin para EsCSS",
+ "scripts": {
+ "build": "unbuild",
+ "prepublishOnly": "pnpm run build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/es-js/esjs.git",
+ "directory": "packages/vite-plugin-escss"
+ },
+ "author": "Enzo Notario ",
+ "license": "MIT",
+ "keywords": [
+ "esjs",
+ "escss",
+ "vite",
+ "plugin"
+ ],
+ "dependencies": {
+ "vite": "^5.0.0"
+ },
+ "devDependencies": {
+ "@es-js/escss": "workspace:*",
+ "@types/node": "^20.14.9",
+ "typescript": "^5.5.2",
+ "unbuild": "^2.0.0"
+ },
+ "type": "module",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ]
+}
diff --git a/packages/vite-plugin-escss/pnpm-lock.yaml b/packages/vite-plugin-escss/pnpm-lock.yaml
new file mode 100644
index 00000000..1c82caa7
--- /dev/null
+++ b/packages/vite-plugin-escss/pnpm-lock.yaml
@@ -0,0 +1,2721 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ dependencies:
+ vite:
+ specifier: ^5.0.0
+ version: 5.4.21(@types/node@20.19.30)
+ devDependencies:
+ '@es-js/escss':
+ specifier: workspace:*
+ version: link:../escss
+ '@types/node':
+ specifier: ^20.14.9
+ version: 20.19.30
+ typescript:
+ specifier: ^5.5.2
+ version: 5.9.3
+ unbuild:
+ specifier: ^2.0.0
+ version: 2.0.0(typescript@5.9.3)
+
+packages:
+
+ '@babel/code-frame@7.28.6':
+ resolution: {integrity: sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.28.6':
+ resolution: {integrity: sha512-2lfu57JtzctfIrcGMz992hyLlByuzgIk58+hhGCxjKZ3rWI82NnVLjXcaTqkI2NvlcvOskZaiZ5kjUALo3Lpxg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.28.6':
+ resolution: {integrity: sha512-H3mcG6ZDLTlYfaSNi0iOKkigqMFvkTKlGUYlD8GW7nNOYRrevuA46iTypPyv+06V3fEmvvazfntkBU34L0azAw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.28.6':
+ resolution: {integrity: sha512-lOoVRwADj8hjf7al89tvQ2a1lf53Z+7tiXMgpZJL3maQPDxh0DgLMN62B2MKUOFcoodBHLMbDM6WAbKgNy5Suw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.28.6':
+ resolution: {integrity: sha512-xOBvwq86HHdB7WUDTfKfT/Vuxh7gElQ+Sfti2Cy6yIWNW05P8iUslOVcZ4/sKbE+/jQaukQAdz/gf3724kYdqw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.28.6':
+ resolution: {integrity: sha512-TeR9zWR18BvbfPmGbLampPMW+uW1NZnJlRuuHso8i87QZNq2JRF9i6RgxRqtEq+wQGsS19NNTWr2duhnE49mfQ==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/standalone@7.28.6':
+ resolution: {integrity: sha512-l/vUUfIKWdKHbHLqISTekuOaMuxNrnk7qlxFmhAKCayRXhkbBMB6zaJW+9oo0eLFgZLQEpG43LH4sxcEuy1M5g==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.28.6':
+ resolution: {integrity: sha512-fgWX62k02qtjqdSNTAGxmKYY/7FSL9WAS1o2Hu5+I5m9T0yxZzr4cnrfXQ/MX0rIifthCSs6FKTlzYbJcPtMNg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.28.6':
+ resolution: {integrity: sha512-0ZrskXVEHSWIqZM/sQZ4EV3jZJXRkio/WCxaqKZP1g//CEWEPSfeZFcms4XeKBCHU0ZKnIkdJeU/kF+eRp5lBg==}
+ engines: {node: '>=6.9.0'}
+
+ '@esbuild/aix-ppc64@0.19.12':
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.21.5':
+ resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/aix-ppc64@0.24.2':
+ resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.19.12':
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.21.5':
+ resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm64@0.24.2':
+ resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.19.12':
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.21.5':
+ resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-arm@0.24.2':
+ resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.19.12':
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.21.5':
+ resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/android-x64@0.24.2':
+ resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.19.12':
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.21.5':
+ resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-arm64@0.24.2':
+ resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.19.12':
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.21.5':
+ resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.24.2':
+ resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-arm64@0.24.2':
+ resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.19.12':
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.21.5':
+ resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.24.2':
+ resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.19.12':
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.21.5':
+ resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm64@0.24.2':
+ resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.19.12':
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.21.5':
+ resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.24.2':
+ resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.19.12':
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.21.5':
+ resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.24.2':
+ resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.19.12':
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.21.5':
+ resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.24.2':
+ resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.19.12':
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.21.5':
+ resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.24.2':
+ resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.19.12':
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.21.5':
+ resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.24.2':
+ resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.19.12':
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.21.5':
+ resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.24.2':
+ resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.19.12':
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.21.5':
+ resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.24.2':
+ resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.19.12':
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.21.5':
+ resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.24.2':
+ resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.19.12':
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.21.5':
+ resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.24.2':
+ resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.19.12':
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.21.5':
+ resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.24.2':
+ resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/sunos-x64@0.19.12':
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.21.5':
+ resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/sunos-x64@0.24.2':
+ resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.19.12':
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.21.5':
+ resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-arm64@0.24.2':
+ resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.19.12':
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.21.5':
+ resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.24.2':
+ resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.19.12':
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.21.5':
+ resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.24.2':
+ resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@rollup/plugin-alias@5.1.1':
+ resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-commonjs@25.0.8':
+ resolution: {integrity: sha512-ZEZWTK5n6Qde0to4vS9Mr5x/0UZoqCxPVR9KRUjU4kA2sO7GEUn1fop0DAwpO6z0Nw/kJON9bDmSxdWxO/TT1A==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-json@6.1.0':
+ resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-node-resolve@15.3.1':
+ resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-replace@5.0.7':
+ resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ resolution: {integrity: sha512-9R0DM/ykwfGIlNu6+2U09ga0WXeZ9MRC2Ter8jnz8415VbuIykVuc6bhdrbORFZANDmTDvq26mJrEVTl8TdnDg==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ resolution: {integrity: sha512-eFZCb1YUqhTysgW3sj/55du5cG57S7UTNtdMjCW7LwVcj3dTTcowCsC8p7uBdzKsZYa8J7IDE8lhMI+HX1vQvg==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ resolution: {integrity: sha512-p3grE2PHcQm2e8PSGZdzIhCKbMCw/xi9XvMPErPhwO17vxtvCN5FEA2mSLgmKlCjHGMQTP6phuQTYWUnKewwGg==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ resolution: {integrity: sha512-rDUjG25C9qoTm+e02Esi+aqTKSBYwVTaoS1wxcN47/Luqef57Vgp96xNANwt5npq9GDxsH7kXxNkJVEsWEOEaQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ resolution: {integrity: sha512-+JiU7Jbp5cdxekIgdte0jfcu5oqw4GCKr6i3PJTlXTCU5H5Fvtkpbs4XJHRmWNXF+hKmn4v7ogI5OQPaupJgOg==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ resolution: {integrity: sha512-V5xC1tOVWtLLmr3YUk2f6EJK4qksksOYiz/TCsFHu/R+woubcLWdC9nZQmwjOAbmExBIVKsm1/wKmEy4z4u4Bw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ resolution: {integrity: sha512-Rn3n+FUk2J5VWx+ywrG/HGPTD9jXNbicRtTM11e/uorplArnXZYsVifnPPqNNP5BsO3roI4n8332ukpY/zN7rQ==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ resolution: {integrity: sha512-grPNWydeKtc1aEdrJDWk4opD7nFtQbMmV7769hiAaYyUKCT1faPRm2av8CX1YJsZ4TLAZcg9gTR1KvEzoLjXkg==}
+ cpu: [arm]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ resolution: {integrity: sha512-a59mwd1k6x8tXKcUxSyISiquLwB5pX+fJW9TkWU46lCqD/GRDe9uDN31jrMmVP3feI3mhAdvcCClhV8V5MhJFQ==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ resolution: {integrity: sha512-puS1MEgWX5GsHSoiAsF0TYrpomdvkaXm0CofIMG5uVkP6IBV+ZO9xhC5YEN49nsgYo1DuuMquF9+7EDBVYu4uA==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ resolution: {integrity: sha512-r3Wv40in+lTsULSb6nnoudVbARdOwb2u5fpeoOAZjFLznp6tDU8kd+GTHmJoqZ9lt6/Sys33KdIHUaQihFcu7g==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ resolution: {integrity: sha512-MR8c0+UxAlB22Fq4R+aQSPBayvYa3+9DrwG/i1TKQXFYEaoW3B5b/rkSRIypcZDdWjWnpcvxbNaAJDcSbJU3Lw==}
+ cpu: [loong64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ resolution: {integrity: sha512-3KhoECe1BRlSYpMTeVrD4sh2Pw2xgt4jzNSZIIPLFEsnQn9gAnZagW9+VqDqAHgm1Xc77LzJOo2LdigS5qZ+gw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ resolution: {integrity: sha512-ziR1OuZx0vdYZZ30vueNZTg73alF59DicYrPViG0NEgDVN8/Jl87zkAPu4u6VjZST2llgEUjaiNl9JM6HH1Vdw==}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ resolution: {integrity: sha512-uW0Y12ih2XJRERZ4jAfKamTyIHVMPQnTZcQjme2HMVDAHY4amf5u414OqNYC+x+LzRdRcnIG1YodLrrtA8xsxw==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ resolution: {integrity: sha512-u9yZ0jUkOED1BFrqu3BwMQoixvGHGZ+JhJNkNKY/hyoEgOwlqKb62qu+7UjbPSHYjiVy8kKJHvXKv5coH4wDeg==}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ resolution: {integrity: sha512-/0PenBCmqM4ZUd0190j7J0UsQ/1nsi735iPRakO8iPciE7BQ495Y6msPzaOmvx0/pn+eJVVlZrNrSh4WSYLxNg==}
+ cpu: [s390x]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-a8G4wiQxQG2BAvo+gU6XrReRRqj+pLS2NGXKm8io19goR+K8lw269eTrPkSdDTALwMmJp4th2Uh0D8J9bEV1vg==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ resolution: {integrity: sha512-bD+zjpFrMpP/hqkfEcnjXWHMw5BIghGisOKPj+2NaNDuVT+8Ds4mPf3XcPHuat1tz89WRL+1wbcxKY3WSbiT7w==}
+ cpu: [x64]
+ os: [linux]
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ resolution: {integrity: sha512-eLXw0dOiqE4QmvikfQ6yjgkg/xDM+MdU9YJuP4ySTibXU0oAvnEWXt7UDJmD4UkYialMfOGFPJnIHSe/kdzPxg==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ resolution: {integrity: sha512-xzm44KgEP11te3S2HCSyYf5zIzWmx3n8HDCc7EE59+lTcswEWNpvMLfd9uJvVX8LCg9QWG67Xt75AuHn4vgsXw==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ resolution: {integrity: sha512-yR6Bl3tMC/gBok5cz/Qi0xYnVbIxGx5Fcf/ca0eB6/6JwOY+SRUcJfI0OpeTpPls7f194as62thCt/2BjxYN8g==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ resolution: {integrity: sha512-3fZBidchE0eY0oFZBnekYCfg+5wAB0mbpCBuofh5mZuzIU/4jIVkbESmd2dOsFNS78b53CYv3OAtwqkZZmU5nA==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ resolution: {integrity: sha512-xGGY5pXj69IxKb4yv/POoocPy/qmEGhimy/FoTpTSVju3FYXUQQMFCaZZXJVidsmGxRioZAwpThl/4zX41gRKg==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ resolution: {integrity: sha512-SPEpaL6DX4rmcXtnhdrQYgzQ5W2uW3SCJch88lB2zImhJRhIIK44fkUrgIV/Q8yUNfw5oyZ5vkeQsZLhCb06lw==}
+ cpu: [x64]
+ os: [win32]
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/node@20.19.30':
+ resolution: {integrity: sha512-WJtwWJu7UdlvzEAUm484QNg5eAoq5QR08KDNx7g45Usrs2NtOPiX8ugDqmKdXkyL03rBqU5dYNYVQetEpBHq2g==}
+
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
+ acorn@8.15.0:
+ resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ autoprefixer@10.4.23:
+ resolution: {integrity: sha512-YYTXSFulfwytnjAPlw8QHncHJmlvFKtczb8InXaAx9Q0LbfDnfEYDE55omerIJKihhmU61Ft+cAOSzQVaBUmeA==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ baseline-browser-mapping@2.9.15:
+ resolution: {integrity: sha512-kX8h7K2srmDyYnXRIppo4AH/wYgzWVCs+eKr3RusRSQ5PvRYoEFmR/I0PbdTjKFAoKqp5+kbxnNTFO9jOfSVJg==}
+ hasBin: true
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ brace-expansion@2.0.2:
+ resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ caniuse-api@3.0.0:
+ resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+
+ caniuse-lite@1.0.30001764:
+ resolution: {integrity: sha512-9JGuzl2M+vPL+pz70gtMF9sHdMFbY9FJaQBi186cHKH3pSzDvzoUJUPV6fqiKIMyXbud9ZLg4F3Yza1vJ1+93g==}
+
+ chalk@5.6.2:
+ resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
+ colord@2.9.3:
+ resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ css-declaration-sorter@7.3.1:
+ resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss: ^8.0.9
+
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@3.1.0:
+ resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ cssnano-preset-default@7.0.10:
+ resolution: {integrity: sha512-6ZBjW0Lf1K1Z+0OKUAUpEN62tSXmYChXWi2NAA0afxEVsj9a+MbcB1l5qel6BHJHmULai2fCGRthCeKSFbScpA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano-utils@5.0.1:
+ resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ cssnano@7.1.2:
+ resolution: {integrity: sha512-HYOPBsNvoiFeR1eghKD5C3ASm64v9YVyJB4Ivnl2gqKoQYvjjN/G0rztvKQq8OxocUtC6sjqY8jwYngIB4AByA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ defu@6.1.4:
+ resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
+
+ dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ electron-to-chromium@1.5.267:
+ resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.21.5:
+ resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+ engines: {node: '>=12'}
+ hasBin: true
+
+ esbuild@0.24.2:
+ resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+
+ fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ deprecated: Glob versions prior to v9 are no longer supported
+
+ globby@13.2.2:
+ resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ hasown@2.0.2:
+ resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+ engines: {node: '>= 0.4'}
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
+ jiti@1.21.7:
+ resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
+ hasBin: true
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ knitwork@1.3.0:
+ resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.12.2:
+ resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+
+ mkdist@1.6.0:
+ resolution: {integrity: sha512-nD7J/mx33Lwm4Q4qoPgRBVA9JQNKgyE7fLo5vdPWVDdjz96pXglGERp/fRnGPCTB37Kykfxs5bDdXa9BWOT9nw==}
+ hasBin: true
+ peerDependencies:
+ sass: ^1.78.0
+ typescript: '>=5.5.4'
+ vue-tsc: ^1.8.27 || ^2.0.21
+ peerDependenciesMeta:
+ sass:
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ mlly@1.8.0:
+ resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ node-releases@2.0.27:
+ resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.3:
+ resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
+ engines: {node: '>=12'}
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ postcss-calc@10.1.1:
+ resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
+ engines: {node: ^18.12 || ^20.9 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.38
+
+ postcss-colormin@7.0.5:
+ resolution: {integrity: sha512-ekIBP/nwzRWhEMmIxHHbXHcMdzd1HIUzBECaj5KEdLz9DVP2HzT065sEhvOx1dkLjYW7jyD0CngThx6bpFi2fA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-convert-values@7.0.8:
+ resolution: {integrity: sha512-+XNKuPfkHTCEo499VzLMYn94TiL3r9YqRE3Ty+jP7UX4qjewUONey1t7CG21lrlTLN07GtGM8MqFVp86D4uKJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-comments@7.0.5:
+ resolution: {integrity: sha512-IR2Eja8WfYgN5n32vEGSctVQ1+JARfu4UH8M7bgGh1bC+xI/obsPJXaBpQF7MAByvgwZinhpHpdrmXtvVVlKcQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-duplicates@7.0.2:
+ resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-empty@7.0.1:
+ resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-discard-overridden@7.0.1:
+ resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-merge-longhand@7.0.5:
+ resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-merge-rules@7.0.7:
+ resolution: {integrity: sha512-njWJrd/Ms6XViwowaaCc+/vqhPG3SmXn725AGrnl+BgTuRPEacjiLEaGq16J6XirMJbtKkTwnt67SS+e2WGoew==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-font-values@7.0.1:
+ resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-gradients@7.0.1:
+ resolution: {integrity: sha512-X9JjaysZJwlqNkJbUDgOclyG3jZEpAMOfof6PUZjPnPrePnPG62pS17CjdM32uT1Uq1jFvNSff9l7kNbmMSL2A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-params@7.0.5:
+ resolution: {integrity: sha512-FGK9ky02h6Ighn3UihsyeAH5XmLEE2MSGH5Tc4tXMFtEDx7B+zTG6hD/+/cT+fbF7PbYojsmmWjyTwFwW1JKQQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-minify-selectors@7.0.5:
+ resolution: {integrity: sha512-x2/IvofHcdIrAm9Q+p06ZD1h6FPcQ32WtCRVodJLDR+WMn8EVHI1kvLxZuGKz/9EY5nAmI6lIQIrpo4tBy5+ug==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-nested@6.2.0:
+ resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==}
+ engines: {node: '>=12.0'}
+ peerDependencies:
+ postcss: ^8.2.14
+
+ postcss-normalize-charset@7.0.1:
+ resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-display-values@7.0.1:
+ resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-positions@7.0.1:
+ resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-repeat-style@7.0.1:
+ resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-string@7.0.1:
+ resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-timing-functions@7.0.1:
+ resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-unicode@7.0.5:
+ resolution: {integrity: sha512-X6BBwiRxVaFHrb2WyBMddIeB5HBjJcAaUHyhLrM2FsxSq5TFqcHSsK7Zu1otag+o0ZphQGJewGH1tAyrD0zX1Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-url@7.0.1:
+ resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-normalize-whitespace@7.0.1:
+ resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-ordered-values@7.0.2:
+ resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-initial@7.0.5:
+ resolution: {integrity: sha512-RHagHLidG8hTZcnr4FpyMB2jtgd/OcyAazjMhoy5qmWJOx1uxKh4ntk0Pb46ajKM0rkf32lRH4C8c9qQiPR6IA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-reduce-transforms@7.0.1:
+ resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-selector-parser@6.1.2:
+ resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+ engines: {node: '>=4'}
+
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
+ postcss-svgo@7.1.0:
+ resolution: {integrity: sha512-KnAlfmhtoLz6IuU3Sij2ycusNs4jPW+QoFE5kuuUOK8awR6tMxZQrs5Ey3BUz7nFCzT3eqyFgqkyrHiaU2xx3w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-unique-selectors@7.0.4:
+ resolution: {integrity: sha512-pmlZjsmEAG7cHd7uK3ZiNSW6otSZ13RHuZ/4cDN/bVglS5EpF2r2oxY99SuOHa8m7AWoBCelTS3JPpzsIs8skQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.6:
+ resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ pretty-bytes@6.1.1:
+ resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
+ engines: {node: ^14.13.1 || >=16.0.0}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ resolve@1.22.11:
+ resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rollup-plugin-dts@6.3.0:
+ resolution: {integrity: sha512-d0UrqxYd8KyZ6i3M2Nx7WOMy708qsV/7fTHMHxCMCBOAe3V/U7OMPu5GkX8hC+cmkHhzGnfeYongl1IgiooddA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ rollup: ^3.29.4 || ^4
+ typescript: ^4.5 || ^5.0
+
+ rollup@3.29.5:
+ resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rollup@4.55.1:
+ resolution: {integrity: sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ sax@1.4.4:
+ resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
+ engines: {node: '>=11.0.0'}
+
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.3:
+ resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ slash@4.0.0:
+ resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==}
+ engines: {node: '>=12'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stylehacks@7.0.7:
+ resolution: {integrity: sha512-bJkD0JkEtbRrMFtwgpJyBbFIwfDDONQ1Ov3sDLZQP8HuJ73kBOyx66H4bOcAbVWmnfLdvQ0AJwXxOMkpujcO6g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.32
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svgo@4.0.0:
+ resolution: {integrity: sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ tinyglobby@0.2.15:
+ resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
+ engines: {node: '>=12.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ typescript@5.9.3:
+ resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ unbuild@2.0.0:
+ resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==}
+ hasBin: true
+ peerDependencies:
+ typescript: ^5.1.6
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
+ untyped@1.5.2:
+ resolution: {integrity: sha512-eL/8PlhLcMmlMDtNPKhyyz9kEBDS3Uk4yMu/ewlkT2WFbtzScjHWPJLdQLmaGPUKjXzwe9MumOtOgc4Fro96Kg==}
+ hasBin: true
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vite@5.4.21:
+ resolution: {integrity: sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ sass-embedded: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+
+ wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+snapshots:
+
+ '@babel/code-frame@7.28.6':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.28.6': {}
+
+ '@babel/core@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.28.6)
+ '@babel/helpers': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.28.6':
+ dependencies:
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.28.6
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.1
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.28.6
+ '@babel/types': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.28.6)':
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.28.6
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.28.6':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/parser@7.28.6':
+ dependencies:
+ '@babel/types': 7.28.6
+
+ '@babel/standalone@7.28.6': {}
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/parser': 7.28.6
+ '@babel/types': 7.28.6
+
+ '@babel/traverse@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.28.6
+ '@babel/generator': 7.28.6
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.28.6
+ '@babel/template': 7.28.6
+ '@babel/types': 7.28.6
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.28.6':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@esbuild/aix-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/aix-ppc64@0.24.2':
+ optional: true
+
+ '@esbuild/android-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/android-arm@0.19.12':
+ optional: true
+
+ '@esbuild/android-arm@0.21.5':
+ optional: true
+
+ '@esbuild/android-arm@0.24.2':
+ optional: true
+
+ '@esbuild/android-x64@0.19.12':
+ optional: true
+
+ '@esbuild/android-x64@0.21.5':
+ optional: true
+
+ '@esbuild/android-x64@0.24.2':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/darwin-x64@0.19.12':
+ optional: true
+
+ '@esbuild/darwin-x64@0.21.5':
+ optional: true
+
+ '@esbuild/darwin-x64@0.24.2':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-arm@0.19.12':
+ optional: true
+
+ '@esbuild/linux-arm@0.21.5':
+ optional: true
+
+ '@esbuild/linux-arm@0.24.2':
+ optional: true
+
+ '@esbuild/linux-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ia32@0.24.2':
+ optional: true
+
+ '@esbuild/linux-loong64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-loong64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-loong64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.19.12':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.21.5':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.24.2':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.24.2':
+ optional: true
+
+ '@esbuild/linux-s390x@0.19.12':
+ optional: true
+
+ '@esbuild/linux-s390x@0.21.5':
+ optional: true
+
+ '@esbuild/linux-s390x@0.24.2':
+ optional: true
+
+ '@esbuild/linux-x64@0.19.12':
+ optional: true
+
+ '@esbuild/linux-x64@0.21.5':
+ optional: true
+
+ '@esbuild/linux-x64@0.24.2':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.19.12':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.21.5':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.24.2':
+ optional: true
+
+ '@esbuild/sunos-x64@0.19.12':
+ optional: true
+
+ '@esbuild/sunos-x64@0.21.5':
+ optional: true
+
+ '@esbuild/sunos-x64@0.24.2':
+ optional: true
+
+ '@esbuild/win32-arm64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-arm64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-arm64@0.24.2':
+ optional: true
+
+ '@esbuild/win32-ia32@0.19.12':
+ optional: true
+
+ '@esbuild/win32-ia32@0.21.5':
+ optional: true
+
+ '@esbuild/win32-ia32@0.24.2':
+ optional: true
+
+ '@esbuild/win32-x64@0.19.12':
+ optional: true
+
+ '@esbuild/win32-x64@0.21.5':
+ optional: true
+
+ '@esbuild/win32-x64@0.24.2':
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@rollup/plugin-alias@5.1.1(rollup@3.29.5)':
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-commonjs@25.0.8(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ glob: 8.1.0
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-json@6.1.0(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-node-resolve@15.3.1(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.11
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/plugin-replace@5.0.7(rollup@3.29.5)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/pluginutils@5.3.0(rollup@3.29.5)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.3
+ optionalDependencies:
+ rollup: 3.29.5
+
+ '@rollup/rollup-android-arm-eabi@4.55.1':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.55.1':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.55.1':
+ optional: true
+
+ '@types/estree@1.0.8': {}
+
+ '@types/node@20.19.30':
+ dependencies:
+ undici-types: 6.21.0
+
+ '@types/resolve@1.20.2': {}
+
+ acorn@8.15.0: {}
+
+ autoprefixer@10.4.23(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001764
+ fraction.js: 5.3.4
+ picocolors: 1.1.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ balanced-match@1.0.2: {}
+
+ baseline-browser-mapping@2.9.15: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@2.0.2:
+ dependencies:
+ balanced-match: 1.0.2
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.1:
+ dependencies:
+ baseline-browser-mapping: 2.9.15
+ caniuse-lite: 1.0.30001764
+ electron-to-chromium: 1.5.267
+ node-releases: 2.0.27
+ update-browserslist-db: 1.2.3(browserslist@4.28.1)
+
+ caniuse-api@3.0.0:
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001764
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+
+ caniuse-lite@1.0.30001764: {}
+
+ chalk@5.6.2: {}
+
+ citty@0.1.6:
+ dependencies:
+ consola: 3.4.2
+
+ colord@2.9.3: {}
+
+ commander@11.1.0: {}
+
+ commondir@1.0.1: {}
+
+ confbox@0.1.8: {}
+
+ consola@3.4.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ css-declaration-sorter@7.3.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@3.1.0:
+ dependencies:
+ mdn-data: 2.12.2
+ source-map-js: 1.2.1
+
+ css-what@6.2.2: {}
+
+ cssesc@3.0.0: {}
+
+ cssnano-preset-default@7.0.10(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ css-declaration-sorter: 7.3.1(postcss@8.5.6)
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-calc: 10.1.1(postcss@8.5.6)
+ postcss-colormin: 7.0.5(postcss@8.5.6)
+ postcss-convert-values: 7.0.8(postcss@8.5.6)
+ postcss-discard-comments: 7.0.5(postcss@8.5.6)
+ postcss-discard-duplicates: 7.0.2(postcss@8.5.6)
+ postcss-discard-empty: 7.0.1(postcss@8.5.6)
+ postcss-discard-overridden: 7.0.1(postcss@8.5.6)
+ postcss-merge-longhand: 7.0.5(postcss@8.5.6)
+ postcss-merge-rules: 7.0.7(postcss@8.5.6)
+ postcss-minify-font-values: 7.0.1(postcss@8.5.6)
+ postcss-minify-gradients: 7.0.1(postcss@8.5.6)
+ postcss-minify-params: 7.0.5(postcss@8.5.6)
+ postcss-minify-selectors: 7.0.5(postcss@8.5.6)
+ postcss-normalize-charset: 7.0.1(postcss@8.5.6)
+ postcss-normalize-display-values: 7.0.1(postcss@8.5.6)
+ postcss-normalize-positions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-repeat-style: 7.0.1(postcss@8.5.6)
+ postcss-normalize-string: 7.0.1(postcss@8.5.6)
+ postcss-normalize-timing-functions: 7.0.1(postcss@8.5.6)
+ postcss-normalize-unicode: 7.0.5(postcss@8.5.6)
+ postcss-normalize-url: 7.0.1(postcss@8.5.6)
+ postcss-normalize-whitespace: 7.0.1(postcss@8.5.6)
+ postcss-ordered-values: 7.0.2(postcss@8.5.6)
+ postcss-reduce-initial: 7.0.5(postcss@8.5.6)
+ postcss-reduce-transforms: 7.0.1(postcss@8.5.6)
+ postcss-svgo: 7.1.0(postcss@8.5.6)
+ postcss-unique-selectors: 7.0.4(postcss@8.5.6)
+
+ cssnano-utils@5.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ cssnano@7.1.2(postcss@8.5.6):
+ dependencies:
+ cssnano-preset-default: 7.0.10(postcss@8.5.6)
+ lilconfig: 3.1.3
+ postcss: 8.5.6
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deepmerge@4.3.1: {}
+
+ defu@6.1.4: {}
+
+ dir-glob@3.0.1:
+ dependencies:
+ path-type: 4.0.0
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ electron-to-chromium@1.5.267: {}
+
+ entities@4.5.0: {}
+
+ esbuild@0.19.12:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
+
+ esbuild@0.21.5:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.21.5
+ '@esbuild/android-arm': 0.21.5
+ '@esbuild/android-arm64': 0.21.5
+ '@esbuild/android-x64': 0.21.5
+ '@esbuild/darwin-arm64': 0.21.5
+ '@esbuild/darwin-x64': 0.21.5
+ '@esbuild/freebsd-arm64': 0.21.5
+ '@esbuild/freebsd-x64': 0.21.5
+ '@esbuild/linux-arm': 0.21.5
+ '@esbuild/linux-arm64': 0.21.5
+ '@esbuild/linux-ia32': 0.21.5
+ '@esbuild/linux-loong64': 0.21.5
+ '@esbuild/linux-mips64el': 0.21.5
+ '@esbuild/linux-ppc64': 0.21.5
+ '@esbuild/linux-riscv64': 0.21.5
+ '@esbuild/linux-s390x': 0.21.5
+ '@esbuild/linux-x64': 0.21.5
+ '@esbuild/netbsd-x64': 0.21.5
+ '@esbuild/openbsd-x64': 0.21.5
+ '@esbuild/sunos-x64': 0.21.5
+ '@esbuild/win32-arm64': 0.21.5
+ '@esbuild/win32-ia32': 0.21.5
+ '@esbuild/win32-x64': 0.21.5
+
+ esbuild@0.24.2:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.24.2
+ '@esbuild/android-arm': 0.24.2
+ '@esbuild/android-arm64': 0.24.2
+ '@esbuild/android-x64': 0.24.2
+ '@esbuild/darwin-arm64': 0.24.2
+ '@esbuild/darwin-x64': 0.24.2
+ '@esbuild/freebsd-arm64': 0.24.2
+ '@esbuild/freebsd-x64': 0.24.2
+ '@esbuild/linux-arm': 0.24.2
+ '@esbuild/linux-arm64': 0.24.2
+ '@esbuild/linux-ia32': 0.24.2
+ '@esbuild/linux-loong64': 0.24.2
+ '@esbuild/linux-mips64el': 0.24.2
+ '@esbuild/linux-ppc64': 0.24.2
+ '@esbuild/linux-riscv64': 0.24.2
+ '@esbuild/linux-s390x': 0.24.2
+ '@esbuild/linux-x64': 0.24.2
+ '@esbuild/netbsd-arm64': 0.24.2
+ '@esbuild/netbsd-x64': 0.24.2
+ '@esbuild/openbsd-arm64': 0.24.2
+ '@esbuild/openbsd-x64': 0.24.2
+ '@esbuild/sunos-x64': 0.24.2
+ '@esbuild/win32-arm64': 0.24.2
+ '@esbuild/win32-ia32': 0.24.2
+ '@esbuild/win32-x64': 0.24.2
+
+ escalade@3.2.0: {}
+
+ estree-walker@2.0.2: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.3):
+ optionalDependencies:
+ picomatch: 4.0.3
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ fraction.js@5.3.4: {}
+
+ fs.realpath@1.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@8.1.0:
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+
+ globby@13.2.2:
+ dependencies:
+ dir-glob: 3.0.1
+ fast-glob: 3.3.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 4.0.0
+
+ hasown@2.0.2:
+ dependencies:
+ function-bind: 1.1.2
+
+ hookable@5.5.3: {}
+
+ ignore@5.3.2: {}
+
+ inflight@1.0.6:
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ inherits@2.0.4: {}
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.2
+
+ is-extglob@2.1.1: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-module@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ jiti@1.21.7: {}
+
+ jiti@2.6.1: {}
+
+ js-tokens@4.0.0: {}
+
+ jsesc@3.1.0: {}
+
+ json5@2.2.3: {}
+
+ knitwork@1.3.0: {}
+
+ lilconfig@3.1.3: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.12.2: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ minimatch@5.1.6:
+ dependencies:
+ brace-expansion: 2.0.2
+
+ mkdist@1.6.0(typescript@5.9.3):
+ dependencies:
+ autoprefixer: 10.4.23(postcss@8.5.6)
+ citty: 0.1.6
+ cssnano: 7.1.2(postcss@8.5.6)
+ defu: 6.1.4
+ esbuild: 0.24.2
+ jiti: 1.21.7
+ mlly: 1.8.0
+ pathe: 1.1.2
+ pkg-types: 1.3.1
+ postcss: 8.5.6
+ postcss-nested: 6.2.0(postcss@8.5.6)
+ semver: 7.7.3
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ typescript: 5.9.3
+
+ mlly@1.8.0:
+ dependencies:
+ acorn: 8.15.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
+ ms@2.1.3: {}
+
+ nanoid@3.3.11: {}
+
+ node-releases@2.0.27: {}
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ once@1.4.0:
+ dependencies:
+ wrappy: 1.0.2
+
+ path-parse@1.0.7: {}
+
+ path-type@4.0.0: {}
+
+ pathe@1.1.2: {}
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.1: {}
+
+ picomatch@4.0.3: {}
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.0
+ pathe: 2.0.3
+
+ postcss-calc@10.1.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+ postcss-value-parser: 4.2.0
+
+ postcss-colormin@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ colord: 2.9.3
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@7.0.8(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-discard-comments@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-discard-duplicates@7.0.2(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-empty@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-discard-overridden@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-merge-longhand@7.0.5(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ stylehacks: 7.0.7(postcss@8.5.6)
+
+ postcss-merge-rules@7.0.7(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-minify-font-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@7.0.1(postcss@8.5.6):
+ dependencies:
+ colord: 2.9.3
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-selectors@7.0.5(postcss@8.5.6):
+ dependencies:
+ cssesc: 3.0.0
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-nested@6.2.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 6.1.2
+
+ postcss-normalize-charset@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+
+ postcss-normalize-display-values@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@7.0.2(postcss@8.5.6):
+ dependencies:
+ cssnano-utils: 5.0.1(postcss@8.5.6)
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-initial@7.0.5(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ caniuse-api: 3.0.0
+ postcss: 8.5.6
+
+ postcss-reduce-transforms@7.0.1(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+
+ postcss-selector-parser@6.1.2:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-svgo@7.1.0(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-value-parser: 4.2.0
+ svgo: 4.0.0
+
+ postcss-unique-selectors@7.0.4(postcss@8.5.6):
+ dependencies:
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.6:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ pretty-bytes@6.1.1: {}
+
+ queue-microtask@1.2.3: {}
+
+ resolve@1.22.11:
+ dependencies:
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ rollup-plugin-dts@6.3.0(rollup@3.29.5)(typescript@5.9.3):
+ dependencies:
+ magic-string: 0.30.21
+ rollup: 3.29.5
+ typescript: 5.9.3
+ optionalDependencies:
+ '@babel/code-frame': 7.28.6
+
+ rollup@3.29.5:
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ rollup@4.55.1:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.55.1
+ '@rollup/rollup-android-arm64': 4.55.1
+ '@rollup/rollup-darwin-arm64': 4.55.1
+ '@rollup/rollup-darwin-x64': 4.55.1
+ '@rollup/rollup-freebsd-arm64': 4.55.1
+ '@rollup/rollup-freebsd-x64': 4.55.1
+ '@rollup/rollup-linux-arm-gnueabihf': 4.55.1
+ '@rollup/rollup-linux-arm-musleabihf': 4.55.1
+ '@rollup/rollup-linux-arm64-gnu': 4.55.1
+ '@rollup/rollup-linux-arm64-musl': 4.55.1
+ '@rollup/rollup-linux-loong64-gnu': 4.55.1
+ '@rollup/rollup-linux-loong64-musl': 4.55.1
+ '@rollup/rollup-linux-ppc64-gnu': 4.55.1
+ '@rollup/rollup-linux-ppc64-musl': 4.55.1
+ '@rollup/rollup-linux-riscv64-gnu': 4.55.1
+ '@rollup/rollup-linux-riscv64-musl': 4.55.1
+ '@rollup/rollup-linux-s390x-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-gnu': 4.55.1
+ '@rollup/rollup-linux-x64-musl': 4.55.1
+ '@rollup/rollup-openbsd-x64': 4.55.1
+ '@rollup/rollup-openharmony-arm64': 4.55.1
+ '@rollup/rollup-win32-arm64-msvc': 4.55.1
+ '@rollup/rollup-win32-ia32-msvc': 4.55.1
+ '@rollup/rollup-win32-x64-gnu': 4.55.1
+ '@rollup/rollup-win32-x64-msvc': 4.55.1
+ fsevents: 2.3.3
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ sax@1.4.4: {}
+
+ scule@1.3.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.3: {}
+
+ slash@4.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ stylehacks@7.0.7(postcss@8.5.6):
+ dependencies:
+ browserslist: 4.28.1
+ postcss: 8.5.6
+ postcss-selector-parser: 7.1.1
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svgo@4.0.0:
+ dependencies:
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.1.0
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ sax: 1.4.4
+
+ tinyglobby@0.2.15:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ typescript@5.9.3: {}
+
+ ufo@1.6.3: {}
+
+ unbuild@2.0.0(typescript@5.9.3):
+ dependencies:
+ '@rollup/plugin-alias': 5.1.1(rollup@3.29.5)
+ '@rollup/plugin-commonjs': 25.0.8(rollup@3.29.5)
+ '@rollup/plugin-json': 6.1.0(rollup@3.29.5)
+ '@rollup/plugin-node-resolve': 15.3.1(rollup@3.29.5)
+ '@rollup/plugin-replace': 5.0.7(rollup@3.29.5)
+ '@rollup/pluginutils': 5.3.0(rollup@3.29.5)
+ chalk: 5.6.2
+ citty: 0.1.6
+ consola: 3.4.2
+ defu: 6.1.4
+ esbuild: 0.19.12
+ globby: 13.2.2
+ hookable: 5.5.3
+ jiti: 1.21.7
+ magic-string: 0.30.21
+ mkdist: 1.6.0(typescript@5.9.3)
+ mlly: 1.8.0
+ pathe: 1.1.2
+ pkg-types: 1.3.1
+ pretty-bytes: 6.1.1
+ rollup: 3.29.5
+ rollup-plugin-dts: 6.3.0(rollup@3.29.5)(typescript@5.9.3)
+ scule: 1.3.0
+ untyped: 1.5.2
+ optionalDependencies:
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - sass
+ - supports-color
+ - vue-tsc
+
+ undici-types@6.21.0: {}
+
+ untyped@1.5.2:
+ dependencies:
+ '@babel/core': 7.28.6
+ '@babel/standalone': 7.28.6
+ '@babel/types': 7.28.6
+ citty: 0.1.6
+ defu: 6.1.4
+ jiti: 2.6.1
+ knitwork: 1.3.0
+ scule: 1.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ update-browserslist-db@1.2.3(browserslist@4.28.1):
+ dependencies:
+ browserslist: 4.28.1
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ util-deprecate@1.0.2: {}
+
+ vite@5.4.21(@types/node@20.19.30):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.55.1
+ optionalDependencies:
+ '@types/node': 20.19.30
+ fsevents: 2.3.3
+
+ wrappy@1.0.2: {}
+
+ yallist@3.1.1: {}
diff --git a/packages/vite-plugin-escss/src/index.ts b/packages/vite-plugin-escss/src/index.ts
new file mode 100644
index 00000000..89c6f7b8
--- /dev/null
+++ b/packages/vite-plugin-escss/src/index.ts
@@ -0,0 +1,87 @@
+import { compile } from '@es-js/escss'
+import type { Plugin, ViteDevServer } from 'vite'
+import { readFileSync, existsSync } from 'fs'
+import { resolve } from 'path'
+
+export interface EsCSSOptions {
+ /**
+ * Enable or disable the plugin.
+ * @default true
+ */
+ enabled?: boolean
+}
+
+/**
+ * Vite plugin for EsCSS - CSS with Spanish syntax.
+ *
+ * This plugin transforms `.escss` files into standard CSS.
+ *
+ * @example
+ * ```ts
+ * // vite.config.ts
+ * import EsCSS from '@es-js/vite-plugin-escss'
+ *
+ * export default {
+ * plugins: [EsCSS()]
+ * }
+ * ```
+ *
+ * @example
+ * ```css
+ * // styles.escss
+ * .tarjeta {
+ * mostrar: flex;
+ * flex-direccion: columna;
+ * relleno: 1rem;
+ * }
+ * ```
+ */
+export default function EsCSS(options: EsCSSOptions = {}): Plugin {
+ const { enabled = true } = options
+ let root = process.cwd()
+
+ return {
+ name: 'vite-plugin-escss',
+ enforce: 'pre',
+
+ configResolved(config) {
+ root = config.root
+ },
+
+ // Handle direct .escss file requests (e.g., tags)
+ configureServer(server: ViteDevServer) {
+ if (!enabled) return
+
+ server.middlewares.use((req, res, next) => {
+ const url = req.url || ''
+ if (!url.endsWith('.escss')) return next()
+
+ const cleanUrl = url.split('?')[0]
+ const filePath = resolve(root, cleanUrl.slice(1))
+
+ if (!existsSync(filePath)) return next()
+
+ try {
+ const raw = readFileSync(filePath, 'utf-8')
+ const compiled = compile(raw, { from: 'escss', to: 'css' })
+ res.setHeader('Content-Type', 'text/css')
+ res.end(compiled)
+ } catch (e) {
+ console.error(`Failed to compile EsCSS: ${filePath}`, e)
+ next()
+ }
+ })
+ },
+
+ // Handle .escss imports in JS/TS
+ transform(raw: string, id: string) {
+ if (!enabled || !/\.escss$/.test(id)) return
+
+ const compiled = compile(raw, { from: 'escss', to: 'css' })
+ return { code: compiled, map: null }
+ },
+ }
+}
+
+// Named export for convenience
+export { EsCSS }
diff --git a/packages/vite-plugin-escss/tsconfig.json b/packages/vite-plugin-escss/tsconfig.json
new file mode 100644
index 00000000..ce024e61
--- /dev/null
+++ b/packages/vite-plugin-escss/tsconfig.json
@@ -0,0 +1,15 @@
+{
+ "compilerOptions": {
+ "target": "ESNext",
+ "module": "ESNext",
+ "moduleResolution": "bundler",
+ "strict": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "declaration": true,
+ "outDir": "./dist",
+ "rootDir": "./src"
+ },
+ "include": ["src/**/*"],
+ "exclude": ["node_modules", "dist"]
+}
diff --git a/packages/vscode-esjs/package.json b/packages/vscode-esjs/package.json
index 3c0b048b..afcb5734 100644
--- a/packages/vscode-esjs/package.json
+++ b/packages/vscode-esjs/package.json
@@ -63,7 +63,8 @@
"activationEvents": [
"onStartupFinished",
"onLanguage:esvue",
- "onLanguage:esjs"
+ "onLanguage:esjs",
+ "onLanguage:escss"
],
"contributes": {
"languages": [
@@ -88,6 +89,21 @@
"dark": "./res/icon.png",
"light": "./res/icon.png"
}
+ },
+ {
+ "id": "escss",
+ "aliases": [
+ "EsCSS",
+ "escss"
+ ],
+ "extensions": [
+ ".escss"
+ ],
+ "configuration": "./languages/escss-language-configuration.json",
+ "icon": {
+ "dark": "./res/icon.png",
+ "light": "./res/icon.png"
+ }
}
],
"grammars": [
@@ -126,6 +142,11 @@
"language": "esjs",
"scopeName": "source.esjs",
"path": "./syntaxes/esjs.tmLanguage.json"
+ },
+ {
+ "language": "escss",
+ "scopeName": "source.escss",
+ "path": "./syntaxes/escss.tmLanguage.json"
}
],
"semanticTokenScopes": [
diff --git a/packages/vscode-esjs/scripts/generate-grammars-configurations.ts b/packages/vscode-esjs/scripts/generate-grammars-configurations.ts
index 5cafaba6..54bc5f5a 100644
--- a/packages/vscode-esjs/scripts/generate-grammars-configurations.ts
+++ b/packages/vscode-esjs/scripts/generate-grammars-configurations.ts
@@ -3,11 +3,16 @@ const axios = require('axios')
const BASE_URL = 'https://unpkg.com/@es-js/language-tools@latest/dist/'
-const grammars = ['esjs.tmLanguage.json', 'esvue.tmLanguage.json']
+const grammars = [
+ 'esjs.tmLanguage.json',
+ 'esvue.tmLanguage.json',
+ 'escss.tmLanguage.json',
+]
const configurations = [
'esjs-language-configuration.json',
'esvue-language-configuration.json',
+ 'escss-language-configuration.json',
]
const snippets = ['esjs.code-snippets.json']
@@ -30,7 +35,6 @@ async function downloadFile(url: string, destination: string) {
const data = response.data
writeFileSync(destination, JSON.stringify(data))
} catch (error) {
- console.error(`Cant download ${url} to ${destination}`)
- throw error
+ console.error(`Error downloading ${url}:`, error)
}
}