Tu sección, tus categorías y tus colores (apiVersion 6)¶
Tres ampliaciones opcionales, todas desde "apiVersion": 6 (Kino 0.9.50). Ninguna necesita una
capacidad propia. Un ejemplo completo de las tres es plugins/sdk/test/section-demo en el repositorio
de Kino (su highlight falla a propósito para que veas el color de respaldo).
Una sección propia¶
Declara "section": { "label": "Demo" } (de 1 a 20 caracteres) y exporta section({ tab }):
export async function section({ tab }) { // tab es null la primera vez
const tabs = [{ id: "pelis", label: "Películas" }, { id: "series", label: "Series" }];
const chosen = tabs.some((t) => t.id === tab) ? tab : "pelis";
return {
tabs, // opcional, máximo 8, etiquetas de máximo 24 caracteres
tab: chosen, // la pestaña de esta respuesta
hero: { title: "Destacado", text: "…" }, // opcional; también image (http o https); text de máximo 300 caracteres
rows: [{ id: `${chosen}-a`, title: "Destacadas", ref: `${chosen}-a`, items: [/* KinoItem */] }],
};
}
rowsson exactamente las filas dehome(misma forma, mismas revisiones y topes); una fila conreftiene "Ver más", que llamabrowse(ref, null). Devuelverows: []para una pestaña vacía: Kino dice que no hay nada ahí.- Escoger una pestaña vuelve a llamar
section({ tab })con elidde esa pestaña. 20 s por llamada. - Dónde aparece: en el TV, una entrada en la barra lateral después de "Categorías" (máximo 3 plugins tienen una); en el celular, un chip en la franja de arriba de Inicio (desplazable, máximo 8). Solo aparecen los plugins encendidos, utilizables y que no necesitan configuración: uno apagado, o que todavía pide un ajuste obligatorio, no tiene entrada. Las entradas se ordenan por etiqueta y luego por id del plugin. Una llamada que falla muestra un error dentro de la sección y nunca toca el resto de la app.
- Un manifiesto que declara
sectiontiene que exportarla: si no, la instalación falla, como con cualquier otro export obligatorio. - Las entradas
adult: truesiguen el candado +18, y unuserMessagedenot_found,unavailableorate_limitedse muestra en la sección (tu propia frase).
Tus propias categorías¶
Exporta categories() (necesita la capacidad browse; no hay campo en el manifiesto, Kino ve el
export):
export async function categories() {
return [{ id: "accion", title: "Acción", ref: "accion", art: "https://image.tmdb.org/t/p/w500/x.jpg" }];
}
- Máximo 24 mosaicos, en tu orden;
titlede máximo 40 caracteres,refde máximo 4.096,artuna URL de imagen (la regla de Imágenes del contrato:httpohttps, no se revisa contrahosts). - Aparecen en Categorías como un grupo con el nombre de tu plugin, y cada mosaico abre
browse(ref, null), paginado como cualquierbrowse. - Si
categories()falla o se pasa del tiempo, simplemente no aportas grupo. 20 s por llamada. - Un mosaico con
adult: truesolo se muestra mientras el código +18 de la persona está desbloqueado en ese aparato, como cualquier entrada +18; un grupo que queda solo con mosaicos así no se muestra. - La página "Ver más" de un mosaico tiene búsqueda; con
scopedSearchla respondes tú.
Tus colores (theme)¶
"theme" recibe hasta cinco colores, cada uno #RRGGBB, cada uno opcional:
"theme": { "accent": "#3D5AFE", "onAccent": "#FFFFFF", "background": "#101820", "surface": "#1A2733", "highlight": "#F7C948" }
| Token | Qué pinta |
|---|---|
accent |
en tu sección y tu pestaña de Ajustes: el chip y la pestaña seleccionados, los botones, el foco, la flecha de "Ver más"; en el reproductor: la barra de progreso, el deslizador, los estados activos y el borde de foco del TV |
onAccent |
el texto y los íconos dibujados encima de accent |
background |
la pantalla detrás de tu sección y tu pestaña de Ajustes |
surface |
en tu sección: las tarjetas, la tarjeta "Ver más" y las pestañas no seleccionadas |
highlight |
el texto destacado ahí; en Categorías, el título de tu grupo |
Alcance: tu sección, tu pestaña de Ajustes, el título de tu grupo en Categorías (solo ese título, en
highlight; sus mosaicos y su fondo siguen siendo los de Kino) y, mientras se reproduce tu contenido,
solo el accent y el onAccent del reproductor (el reproductor conserva el fondo y las superficies de
Kino). Nada más cambia en Kino, y los errores siempre se muestran en el rojo de Kino, diga lo que diga
tu tema.
Kino protege la lectura, así que cada color se revisa cuando se usa:
backgroundtiene que ser oscuro (luminancia relativa de máximo 0,05).surfacetiene que ser oscuro (máximo 0,12) y estar al menos 1,05:1 separado del fondo.accenttiene que llegar a 3:1 contra el fondo.onAccenttiene que llegar a 4,5:1 contraaccent.highlighttiene que llegar a 4,5:1 contra el fondo.- Ningún color puede parecerse al rojo de Kino
#E50914(distancia CIE76 menor de 25).
Los colores propios de Kino (los de respaldo) son accent #E50914, onAccent #FFFFFF,
background #0E0E0E, surface #181818 y highlight #F5F5F5. Un color que falla vuelve al de Kino solo para ese token (accent y onAccent se juzgan y vuelven
en pareja); la instalación igual funciona y los demás colores se quedan. Un color que no es un
#RRGGBB válido se rechaza al instalar. Míralo, con los contrastes y los avisos que imprimiría Kino,
antes de publicar:
node sdk/run.mjs . theme
node sdk/run.mjs . section [tab]
node sdk/run.mjs . categories
sdk/validate.mjs muestra los mismos avisos.