134 lines
7.9 KiB
Markdown
134 lines
7.9 KiB
Markdown
|
|
# Iconos PNG de recursos
|
|||
|
|
|
|||
|
|
El campo global de serie `field:icon`, «Icono», es de tipo `image`. Aplicación,
|
|||
|
|
Sistema operativo y Licencia de software lo incluyen como característica opcional.
|
|||
|
|
Se añade una sola vez a las plantillas existentes, conservando sus UUID, campos,
|
|||
|
|
orden, secciones y personalizaciones. Los reinicios no reponen un binding retirado.
|
|||
|
|
El icono de producto es independiente del icono vectorial de la plantilla.
|
|||
|
|
|
|||
|
|
## Selección y validación
|
|||
|
|
|
|||
|
|
El selector compartido admite PNG estáticos de hasta 512 × 512 píxeles y 2 MiB.
|
|||
|
|
Mantiene las proporciones y permite previsualizar, sustituir y quitar la imagen.
|
|||
|
|
Una selección inválida conserva el valor anterior y bloquea el envío hasta
|
|||
|
|
corregirla o retirarla. La lectura pendiente también bloquea el envío. La ayuda,
|
|||
|
|
el estado y los errores están disponibles en español e inglés.
|
|||
|
|
|
|||
|
|
El contrato compartido valida firma PNG, dimensiones, integridad CRC de los chunks,
|
|||
|
|
datos de imagen, final del contenedor y ausencia de animación. El servidor decodifica
|
|||
|
|
además los píxeles con Sharp, con límite de dimensiones. No basta la extensión del
|
|||
|
|
archivo ni el MIME declarado. Las rutas JSON de recursos admiten hasta 3 MiB;
|
|||
|
|
las demás conservan su límite de 64 KiB.
|
|||
|
|
|
|||
|
|
Las fichas, revisiones y columnas de características muestran la imagen, sin
|
|||
|
|
imprimir base64. Los listados de aplicaciones y SO muestran el icono junto al nombre.
|
|||
|
|
La ausencia se representa con «—». El soporte blanco del icono mantiene visibles
|
|||
|
|
los logotipos oscuros también con el tema oscuro.
|
|||
|
|
|
|||
|
|
## Persistencia e historial
|
|||
|
|
|
|||
|
|
La imagen viaja como una URI `data:image/png;base64,...`, validada, dentro de la
|
|||
|
|
característica. Se conserva como valor escalar `valueType=image` en las tablas
|
|||
|
|
relacionales `resource_characteristics` y `resource_revision_characteristics`.
|
|||
|
|
No se almacena JSON ni se crean URLs remotas dependientes de terceros.
|
|||
|
|
|
|||
|
|
`migrateResourceImages` amplía explícitamente sus columnas `textValue` a MEDIUMTEXT
|
|||
|
|
de forma idempotente. Las especificaciones y revisiones admiten el nuevo tipo.
|
|||
|
|
Las escrituras normales conservan UUID e historial; repetir un guardado idéntico
|
|||
|
|
no añade revisiones.
|
|||
|
|
|
|||
|
|
## Carga inicial de los catálogos locales
|
|||
|
|
|
|||
|
|
Las imágenes y su procedencia se conservan en
|
|||
|
|
[`apps/server/data/resource-icons/manifest.json`](../apps/server/data/resource-icons/manifest.json).
|
|||
|
|
Cada entrada identifica producto o familia, archivo PNG, URL de origen y SHA-256.
|
|||
|
|
Se incluyen 40 aplicaciones y las familias Windows 7, Windows 8.1/10/Server,
|
|||
|
|
Windows 11 y macOS. Las versiones y ediciones de una misma familia comparten logo.
|
|||
|
|
Los iconos de menor tamaño mantienen su resolución original; ninguno supera 512 px
|
|||
|
|
por dimensión.
|
|||
|
|
|
|||
|
|
Fuentes: [Dashboard Icons](https://github.com/homarr-labs/dashboard-icons), fijado al
|
|||
|
|
commit `83f32e08257b66fbd971ac8d7645f5b38d52e85d`,
|
|||
|
|
[Simple Icons 13.21.0](https://github.com/simple-icons/simple-icons/tree/13.21.0),
|
|||
|
|
[PowerToys](https://github.com/microsoft/PowerToys) y las páginas oficiales de
|
|||
|
|
Chaos/Enscape, voidtools, WinSCP, WinRAR, Nitro y TeamViewer. Se conservan las marcas
|
|||
|
|
de sus titulares para identificar los productos. Dashboard Icons utiliza Apache-2.0
|
|||
|
|
y Simple Icons CC0; sus licencias no sustituyen los derechos sobre las marcas.
|
|||
|
|
|
|||
|
|
Desde la raíz, previsualizar sin escribir:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
pnpm --filter @metis/server exec node --env-file=../../.env --import tsx src/import-resource-icons.ts
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Para aplicar la carga solicitada, añadir `--apply` al comando. Este comando comprueba
|
|||
|
|
archivos, huellas y PNG antes de escribir. Requiere un administrador inicial activo,
|
|||
|
|
registra sus revisiones, prepara las plantillas y amplía las especificaciones antiguas
|
|||
|
|
solo con el campo Icono, preservando sus valores anteriores. Conserva iconos existentes
|
|||
|
|
y es reejecutable. No cambia flags de administración o asociación del servidor.
|
|||
|
|
|
|||
|
|
Las pruebas con persistencia y la auditoría Playwright utilizan exclusivamente una
|
|||
|
|
instalación desechable de `metis_desk_test`; la carga de los catálogos locales es la
|
|||
|
|
operación de datos solicitada, independiente de esas pruebas.
|
|||
|
|
|
|||
|
|
## Verificación de esta entrega
|
|||
|
|
|
|||
|
|
- Catálogo local: 40/40 aplicaciones y 38/38 SO con PNG; Icono opcional en las
|
|||
|
|
tres plantillas. Segunda ejecución: 0 guardados y 78 iconos conservados.
|
|||
|
|
- Resources: 126 pruebas correctas. PNG/HTTP: 3 pruebas correctas, incluyendo
|
|||
|
|
límites, corrupción, animación y rechazo de píxeles no decodificables.
|
|||
|
|
- Integración SO/HTTP/MariaDB: 12 pruebas correctas sobre base desechable; incluye
|
|||
|
|
guardado y lectura de un PNG de 512 px, historial e idempotencia.
|
|||
|
|
- Playwright MCP: recorridos de SO y aplicaciones correctos, con carga y retirada
|
|||
|
|
por teclado, archivos inválidos, conservación del valor anterior, fichas,
|
|||
|
|
búsqueda, paginación y tamaños estrechos/amplios. Cada recorrido utiliza 15
|
|||
|
|
compañías y una principal con al menos 50 personas, activos, recursos, perfiles
|
|||
|
|
y puestos; cada catálogo global dispone de 51 productos sintéticos.
|
|||
|
|
- Compilación y typecheck dirigido de Resources, Server y Web correctos. Los
|
|||
|
|
archivos modificados de esta implementación pasan Biome y las reglas de espaciado.
|
|||
|
|
- `pnpm typecheck` general se detiene en `packages/shadcn-ui/src/components/calendar.tsx`
|
|||
|
|
por el tipo opcional de `locale`. `pnpm lint` y `pnpm check` generales detectan
|
|||
|
|
incidencias ajenas al cambio. `pnpm test`, ejecutado con MariaDB desechable,
|
|||
|
|
se detiene en dos aserciones de `companies-page.test.tsx`: «Personas (1)» y
|
|||
|
|
«Esta persona no tiene acceso a Metis Desk». No se han modificado esas áreas.
|
|||
|
|
|
|||
|
|
Skills consultadas: `rdx-solid`, `ux-inputs-and-forms`, `shadcn` y
|
|||
|
|
`vercel-react-best-practices`. Han orientado el uso de contratos y persistencia
|
|||
|
|
existentes, la conservación del valor ante errores, las etiquetas y ayuda
|
|||
|
|
accesibles y la lectura de archivos desde el evento de selección. Los auditores
|
|||
|
|
especializados mencionados por la skill de formularios no están instalados;
|
|||
|
|
se han realizado las comprobaciones disponibles directamente con Playwright MCP.
|
|||
|
|
|
|||
|
|
## Ampliación a todos los listados — 27 de octubre de 2026
|
|||
|
|
|
|||
|
|
El icono se representa junto al nombre en catálogos globales y de compañía,
|
|||
|
|
inventario local de SO y aplicaciones, selectores, instalaciones, SO actuales,
|
|||
|
|
configuraciones e historiales de aplicaciones, entornos y resúmenes de puestos,
|
|||
|
|
mapa de software y sugerencias de coincidencias. El nombre permanece como etiqueta
|
|||
|
|
accesible y el adorno no interfiere con el clic de fila, el foco ni la selección.
|
|||
|
|
Las referencias públicas incorporan el PNG para los dos ámbitos; no se infiere una
|
|||
|
|
imagen por coincidencia de nombre y no se modifican los datos de las compañías.
|
|||
|
|
|
|||
|
|
Verificación de esta ampliación:
|
|||
|
|
|
|||
|
|
- 128 pruebas de Resources y 84 de rdx-ui correctas.
|
|||
|
|
- 14 pruebas de integración HTTP/MariaDB correctas, incluyendo PNG global/local,
|
|||
|
|
resolución de SO local y exclusión de referencias de otra compañía.
|
|||
|
|
- Playwright MCP: PNG decodificado en el catálogo global de aplicaciones y SO,
|
|||
|
|
catálogo combinado de compañía, SO local, selector mixto, instalaciones y resumen
|
|||
|
|
del puesto. Se mantienen recorridos de búsqueda, paginación, teclado, selección,
|
|||
|
|
responsive y gates cerrados, con 15 compañías y los volúmenes sintéticos del
|
|||
|
|
procedimiento. Evidencias locales sin sesión en
|
|||
|
|
`.artifacts/playwright/authenticated-9qcb5enx`, `authenticated-cpta18j4` y
|
|||
|
|
`authenticated-y722zwbl`.
|
|||
|
|
- Compilación y comprobaciones dirigidas de tipos y formato correctas.
|
|||
|
|
- `pnpm test` mantiene dos fallos de `companies-page.test.tsx`; las otras 311
|
|||
|
|
pruebas de Companies pasan. `pnpm typecheck` general mantiene el error de vendor
|
|||
|
|
descrito anteriormente. `pnpm lint` y `pnpm check` siguen señalando incidencias
|
|||
|
|
fuera de los archivos de esta ampliación.
|
|||
|
|
|
|||
|
|
Skills: `ux-tables` como principal, complementada por `shadcn`,
|
|||
|
|
`vercel-react-best-practices` y `rdx-solid`: imagen compacta junto a la identidad,
|
|||
|
|
composición compartida, etiquetas de texto conservadas y datos procedentes de las
|
|||
|
|
consultas existentes. No se han instalado los auditores especializados ausentes.
|