Corrección de una nota que escribí mal hace un commit. Dije que `audio-player` no tenía demo porque `/uix/components/audio-player` da 404. El autor lo corrigió: **la demo es la de `media-player`**, y el chip `media` conmuta a audio — ahí entra `<AudioPlayer variant>` sobre las mismas partes. El 404 es correcto; lo que estaba mal era mi lectura de él. Que la sonda encontrara 0 nodos no significaba «sin demo»: significaba que cargaba en modo VÍDEO. Y una comparación de 0 valores pasa siempre, así que ese «0 diffs» no valía nada — la clase de guard que este eje ya tiene anotada. `scripts/__probe-audio-skin.ts` pulsa el chip y recorre las cuatro variantes (card · row · bar · inline). Medido contra el commit anterior, revirtiendo los cuatro ficheros a HEAD~1 y restaurándolos: **1.008 valores, 0 diffs, 0 nodos ausentes**. El skin lee los públicos nuevos y pinta exactamente igual. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>alpha-0.1-background
parent
b7a4cef08f
commit
00cc9d76cf
@ -0,0 +1,49 @@
|
||||
/**
|
||||
* Sonda del SKIN de audio. La demo de media-player conmuta con el chip
|
||||
* `audio` (prop `media`), y ahí entra `audio-player.css` sobre las MISMAS
|
||||
* partes — por eso una sonda que sólo carga la página mide el modo vídeo y
|
||||
* deja el skin sin medir. Recorre además las cuatro variantes.
|
||||
*/
|
||||
import { writeFileSync } from 'node:fs';
|
||||
import { chromium } from 'playwright';
|
||||
|
||||
const [out, url = 'http://localhost:5180/uix/components/media-player'] = process.argv.slice(2);
|
||||
const PROPS = ['backgroundColor', 'backgroundImage', 'color', 'paddingTop', 'paddingLeft', 'rowGap', 'columnGap', 'fontSize', 'lineHeight', 'blockSize', 'inlineSize', 'borderTopColor', 'borderTopWidth', 'borderTopLeftRadius'];
|
||||
|
||||
const browser = await chromium.launch();
|
||||
const page = await browser.newPage({ viewport: { width: 1440, height: 1000 } });
|
||||
await page.goto(url, { waitUntil: 'networkidle' });
|
||||
await page.waitForTimeout(500);
|
||||
await page.getByText('audio', { exact: true }).first().click();
|
||||
await page.waitForTimeout(300);
|
||||
|
||||
const snapshot = async (label: string) =>
|
||||
page.evaluate(
|
||||
([keys, tag]) => {
|
||||
const root = document.querySelector('[data-uix-stage]') ?? document.body;
|
||||
const nodes = [...root.querySelectorAll<HTMLElement>('*')].filter((n) =>
|
||||
[...n.attributes].some((a) => a.name.startsWith('data-media-player'))
|
||||
);
|
||||
const rows: Record<string, Record<string, string>> = {};
|
||||
nodes.forEach((n, i) => {
|
||||
const cs = getComputedStyle(n);
|
||||
const key = `${tag}:${i}:${[...n.attributes].map((a) => a.name).join('|')}`;
|
||||
rows[key] = Object.fromEntries((keys as string[]).map((k) => [k, cs[k as never] as string]));
|
||||
});
|
||||
return rows;
|
||||
},
|
||||
[PROPS, label] as const
|
||||
);
|
||||
|
||||
const all: Record<string, unknown> = {};
|
||||
for (const variant of ['card', 'row', 'bar', 'inline']) {
|
||||
const chip = page.getByText(variant, { exact: true }).first();
|
||||
if (await chip.count()) {
|
||||
await chip.click();
|
||||
await page.waitForTimeout(200);
|
||||
}
|
||||
all[variant] = await snapshot(variant);
|
||||
console.log(` ${variant}: ${Object.keys(all[variant] as object).length} nodos`);
|
||||
}
|
||||
writeFileSync(out, JSON.stringify(all, null, '\t'));
|
||||
await browser.close();
|
||||
Loading…
Reference in new issue