Panel Actions

Actions are buttons that appear in the dashboard control panel. When pressed, they trigger callbacks in your widget code.

Registering Actions

SBCanvas.panel.register({
  actions: [
    { name: 'reset', label: 'Reset Counter', confirm: true },
    { name: 'test', label: 'Send Test Alert' },
    { name: 'clear', label: 'Clear Queue', confirm: true }
  ]
});

Handling Action Presses

SBCanvas.panel.onAction('reset', () => {
  SBCanvas.vars.set('counter', 0);
  SBCanvas.store.set('counter', 0);
});

SBCanvas.panel.onAction('test', () => {
  SBCanvas.preview.injectTestEvent('activity:tip', {
    username: 'TestUser',
    amount: 10,
    currency: 'USD',
    provider: 'kick'
  });
});

SBCanvas.panel.onAction('clear', () => {
  SBCanvas.queue.clear();
});

Removing Handlers

function handleReset() {
  SBCanvas.vars.set('counter', 0);
}

SBCanvas.panel.onAction('reset', handleReset);
SBCanvas.panel.offAction('reset', handleReset);

// Remove all handlers for an action
SBCanvas.panel.offAction('reset');

Confirmation Dialogs

When confirm: true, the dashboard shows a confirmation dialog before firing the action. Use this for destructive operations:
SBCanvas.panel.register({
  actions: [
    { name: 'delete-all', label: 'Delete All Data', confirm: true }
  ]
});

SBCanvas.panel.onAction('delete-all', async () => {
  await SBCanvas.store.delete('leaderboard');
  await SBCanvas.store.delete('counters');
  SBCanvas.vars.clear();
});

Combining Fields and Actions

SBCanvas.panel.register({
  fields: [
    { key: 'goal', type: 'number', label: 'Sub Goal', min: 1, max: 1000, default: 100 },
    { key: 'message', type: 'text', label: 'Goal Message', placeholder: 'We did it!' }
  ],
  actions: [
    { name: 'reset-progress', label: 'Reset Progress', confirm: true },
    { name: 'celebrate', label: 'Trigger Celebration' }
  ]
});

SBCanvas.panel.onAction('reset-progress', () => {
  SBCanvas.vars.set('progress', 0);
  SBCanvas.store.set('progress', 0);
});

SBCanvas.panel.onAction('celebrate', () => {
  SBCanvas.confetti({ count: 200, spread: 90 });
  SBCanvas.sound('/sounds/celebrate.mp3', 0.8);
});

API Reference

MethodDescription
panel.register({fields?, actions?})Register panel schema
panel.onAction(name, fn)Handle an action button press
panel.offAction(name, fn?)Remove action handler(s)