Skip to content
Back to skills

Interactive Buttons

ASecurity

> **STOP. READ THIS ENTIRE FILE BEFORE CREATING ANY WIDGET.**

  • 93 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 26, 2026
developmentpython

Works with

  • cli

Security analysis

A100/100

Scanned May 27, 2026

npx -y skills add deeleeramone/PyWry --skill interactive_buttons --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Interactive Buttons?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Interactive Buttons
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/deeleeramone-interactive-buttons/badge)](https://www.skillsdirectory.com/skills/deeleeramone-interactive-buttons)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# Interactive Buttons - MANDATORY PATTERN

> **STOP. READ THIS ENTIRE FILE BEFORE CREATING ANY WIDGET.**

## The ONLY Correct Way to Create Buttons

Copy this EXACTLY. Do not deviate.

```json
{
  "html": "<div id=\"counter\" style=\"font-size:48px;text-align:center;padding:50px\">0</div>",
  "title": "Counter",
  "height": 400,
  "toolbars": [{
    "position": "top",
    "items": [
      {"type": "button", "label": "+1", "event": "counter:increment", "variant": "primary"},
      {"type": "button", "label": "-1", "event": "counter:decrement", "variant": "neutral"},
      {"type": "button", "label": "Reset", "event": "counter:reset", "variant": "danger"}
    ]
  }]
}
```

**THAT'S IT.** No callbacks needed. Buttons work automatically.

## How It Works

The event name `counter:increment` is parsed as:
- `counter` → the HTML element id to update
- `increment` → the action to perform

When you click "+1", PyWry:
1. Finds the element with `id="counter"`
2. Parses its current text as a number
3. Adds 1 to it
4. Updates the display

## Supported Actions

| Event Pattern | What It Does |
|--------------|--------------|
| `myId:increment` | Adds 1 to element's text |
| `myId:decrement` | Subtracts 1 from element's text |
| `myId:reset` | Sets element's text to 0 |
| `myId:toggle` | Toggles between true/false |

## More Examples

### Status Toggle

```python
create_widget(
    html='<div id="status" style="font-size:24px;text-align:center">false</div>',
    toolbars=[{
        "position": "top",
        "items": [
            {"type": "button", "label": "Toggle Status", "event": "status:toggle"}
        ]
    }]
)
```

### Score Tracker

```python
create_widget(
    html='''
        <div style="display:flex;justify-content:space-around;padding:20px">
            <div>Home: <span id="home" style="font-size:48px">0</span></div>
            <div>Away: <span id="away" style="font-size:48px">0</span></div>
        </div>
    ''',
    toolbars=[{
        "position": "top",
        "items": [
            {"type": "button", "label": "Home +1", "event": "home:increment"},
            {"type": "button", "label": "Away +1", "event": "away:increment"},
            {"type": "button", "label": "Reset All", "event": "home:reset"},
        ]
    }]
)
```

## Rules

1. **Element id must exist** - The HTML must have an element with the matching id
2. **Event format is `id:action`** - Colon separates the target from the action
3. **Actions are lowercase** - `increment`, `decrement`, `reset`, `toggle`
4. **Initial value matters** - For increment/decrement, start with a number like "0"

## Common Mistakes

❌ Wrong: `event: "increment"` (no target id)
❌ Wrong: `event: "counter-increment"` (hyphen instead of colon)
❌ Wrong: HTML has `id="Counter"` but event is `counter:increment` (case mismatch)

✅ Correct: `event: "counter:increment"` with `id="counter"` in HTML

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.