Saltar al contenido

Crear paneles

Extras

Dale a un panel una fila en el popover Extras: una línea de estado, un anillo de progreso, una cuenta regresiva que Deska mantiene, un control redondo y una página compacta propia.

Qué es la fila

Extras es el popover del lienzo donde están Enfoque y Música. Un panel que declara contributes.extras tiene una fila ahí, dibujada por Deska igual que las incluidas: el ícono del paquete, su título, una línea de estado y un control redondo. El panel los llena y Deska los dibuja, así que la fila se ve nativa y se lee bien envíe lo que envíe el panel.

La fila es un vistazo y un control remoto. Muestra qué está haciendo el panel mientras está fuera de la pantalla o en otro proyecto, y reproduce, pausa, inicia o detiene sin que la persona tenga que ir hasta él. El botón de Extras cerrado nunca muestra el estado de un paquete, y la persona puede ocultar la fila de cualquier paquete con Ocultar de Extras en su tarjeta de Instalados.

Declararla

panel.jsonjson
"contributes": {
  "panel": { "entry": "index.html", "scope": "global" },
  "extras": { "title": "Net Radio", "view": "extras.html" }
}
  • title nombra la fila, hasta 40 caracteres, y no puede leerse como algo de Deska.
  • view es opcional: una página que se abre dentro del popover al abrir la fila. Sin ella, el popover muestra la página de entrada del panel.
  • Declarar Extras no necesita permiso. La página del panel les dice a las personas que aparece en Extras antes de que lo instalen.

Qué muestra la fila

Llena la fila con deska.extras.set. Los campos que omites conservan su valor, null borra uno, y cualquier otra cosa rechaza toda la llamada con invalid_args.

CampoValorMuestra
statetexto de hasta 60 caracteres, o nullLa línea de estado bajo el título, como texto no confiable.
progressde 0 a 1, o nullUn anillo alrededor del ícono.
untilmilisegundos desde 1970, o nullEl tiempo que falta, contado por Deska.
controlplay, pause, start, stop o nullEl botón redondo, con ese ícono.

Lo que pones se queda después de que se cierra cada marco del paquete, así que la fila sigue diciendo lo último que supo el panel. Borra lo que ya no es cierto.

Una cuenta regresiva que corre sin el panel

Envía la hora objetivo, no un texto con minutos. Deska dibuja el tiempo que falta a partir de until y sigue contando sin ningún marco vivo del paquete, así que el panel nunca tiene que quedarse abierto ni actualizar cada segundo para que la fila esté bien.

countdowns.jsjs
deska.extras.set({
  state: 'Public beta',
  until: Date.parse('2026-10-09T17:00:00'),
  progress: elapsed / total,
  control: null,
})

Ship Countdown envía así la cuenta regresiva más cercana, con el tiempo transcurrido como anillo, y Noise Machine usa until para su temporizador de apagado.

El control

Pulsar el botón redondo envía extras.control con el nombre del control a cada marco abierto del paquete. Si no hay ninguno abierto, Deska abre el panel y entrega la pulsación cuando está listo. Tu código decide qué significa la pulsación, y luego pone el siguiente control.

app.jsjs
let sent = ''

function syncExtras(station, playing) {
  const fields = {
    state: playing ? station.title.slice(0, 60) : 'Stopped',
    control: playing ? 'pause' : 'play',
  }
  const key = JSON.stringify(fields)
  if (key === sent) return          // nada cambió, ninguna llamada
  sent = key
  deska.extras.set(fields).catch((err) => console.warn('extras.set:', err.code))
}

deska.on('extras.control', ({ control }) => {
  if (control === 'play') play()
  if (control === 'pause') stop()
})
  • Envía solo lo que cambió. Una página que se actualiza cada segundo debería llamar a extras.set solo cuando la fila cambiaría; las llamadas cuentan para las 20 por segundo del marco.
  • Cada marco recibe la pulsación. Si la acción debe pasar una sola vez (sonido desde un solo lugar, una sola escritura), acuerden por el almacenamiento qué marco actúa, como hace Noise Machine con un turno corto.
  • En el escritorio de otra computadora, donde no corren los paneles de la comunidad, una pulsación espera al próximo marco del paquete en esta computadora.

La página de Extras

Abrir la fila muestra view (o la página de entrada) dentro del popover, a su tamaño. Es una página del mismo paquete: el mismo SDK, el mismo almacenamiento, los mismos permisos. Sabe dónde está gracias a init.place y deska.place:

app.jsjs
const init = await deska.ready()
document.body.dataset.place = init.place   // 'panel' o 'extras'
  • Mantenla compacta: el popover es angosto. Oculta los campos de búsqueda y las descripciones, como hace Net Radio con una sola página y un atributo data-place.
  • El marco del popover se cierra con el popover. Lo que tenga que seguir (sonido, un temporizador) le corresponde al panel del escritorio o a until.
  • Dos páginas de un paquete no pueden enviarse mensajes. Comparten el almacenamiento: lee, cambia y escribe en un solo paso, y vuelve a leer en cada actualización (Ship Countdown).
ConsejoEn la herramienta de vista previa, cambia Place a Extras para ver la página compacta, y pulsa el botón de la fila para enviar un control.

Ejemplos con fila

  • Ship Countdown: una página propia, until, el anillo, stop y start.
  • Net Radio: reproducir y pausar desde la fila, un diseño compacto para place: 'extras'.
  • Noise Machine: un temporizador de apagado, y un solo lugar que suena entre muchos marcos.
  • Service Status: un resumen de una línea en state.
  • SDK Playground: cada campo a mano, y el control respondido desde cada marco.