Hoy la fundacion se emite DOS veces en quien arranca eidos por runtime: index.css importa generated/base.css (495.701 bytes) y apply() escribe el mismo bloque como <style> (431.431 bytes) — ~463 KB duplicados y ~9.500 reglas parseadas dos veces. Los 39 consumidores de index.css viven todos bajo web/routes/** (congelado): no se migra ninguno. ADITIVO: index.css no cambia ni un byte (verificado normalizando CRLF contra HEAD); los dos custodios que lo leen —recipe-css-contract.test.ts y scripts/component-audit.ts— siguen verdes sin editarlos. El hermano es index.css sin `@import './generated/base.css'`, mismo orden; el guard index-runtime-css.test.ts compara las listas de @import de ambos y asierta que index.css contiene la fundacion (no pasa sobre vacio). El XOR de recipe-css-contract.test.ts:251 solo mira index.css: con dos entradas queda compensado por este guard, no cubierto. Costura conocida, sin cerrar: color-scheme vive hoy solo en la via estatica (base.css); apply() no lo emite, asi que quien adopte este fichero no lo recibe. Cerrarlo exige que apply() decida la apariencia desde themeContext.mode — decision de contrato, va a firma del autor. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>alpha-0.1-background
parent
cc586612ae
commit
598ea460e8
@ -0,0 +1,21 @@
|
||||
import { readFileSync } from 'node:fs';
|
||||
import { describe, expect, it } from 'vitest';
|
||||
|
||||
const FOUNDATION_IMPORT = "@import './generated/base.css';";
|
||||
|
||||
function imports(path: string): string[] {
|
||||
return readFileSync(path, 'utf8')
|
||||
.split(/\r?\n/)
|
||||
.map((line) => line.trim())
|
||||
.filter((line) => line.startsWith('@import '));
|
||||
}
|
||||
|
||||
describe('index-runtime.css', () => {
|
||||
it('is index.css minus the generated foundation, same imports in the same order', () => {
|
||||
const index = imports('src/uix/eidos/index.css');
|
||||
expect(index).toContain(FOUNDATION_IMPORT);
|
||||
expect(imports('src/uix/eidos/index-runtime.css')).toEqual(
|
||||
index.filter((line) => line !== FOUNDATION_IMPORT)
|
||||
);
|
||||
});
|
||||
});
|
||||
@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Eidos — runtime-foundation entrypoint.
|
||||
*
|
||||
* Sibling of `index.css` for apps that boot eidos at runtime (`ActiveEidos`
|
||||
* with `applyDom` on): `apply()` already writes the generated foundation as a
|
||||
* `<style>`, so importing `index.css` would ship and parse it twice. This file
|
||||
* is `index.css` WITHOUT `@import './generated/base.css'` — everything else is
|
||||
* identical, in the same order.
|
||||
*
|
||||
* Do NOT use it under SSR/static rendering with `applyDom: false`: nothing
|
||||
* would write the foundation. Those consumers keep `index.css`.
|
||||
*
|
||||
* Keep in sync with `index.css` (guarded by `index-runtime-css.test.ts`).
|
||||
*/
|
||||
|
||||
@import './archetypes.css';
|
||||
@import './events.css';
|
||||
|
||||
@import './components/box/box.css';
|
||||
@import './components/flex/flex.css';
|
||||
@import './components/grid/grid.css';
|
||||
@import './components/stack/stack.css';
|
||||
@import './components/group/group.css';
|
||||
@import './components/wrap/wrap.css';
|
||||
@import './components/container/container.css';
|
||||
@import './components/section/section.css';
|
||||
@import './components/aspect-ratio/aspect-ratio.css';
|
||||
@import './components/auto-grid/auto-grid.css';
|
||||
@import './components/spin-field/spin-field.css';
|
||||
Loading…
Reference in new issue