Comfy-Org / Comfy-Org/ComfyUI_frontend

feat: add expression toggle (fx) button to number input prompt dialog

Open
#9,096 0 comments 0 reactions 1 assignee Claimed by @dante01yoon View on GitHub
area:litegraph area:ui area:widgets enhancement
Dominant language
TypeScript
Stars
2k
Forks
699
Avg merge
1d 7h
Merged PRs (30d)
490

Description

## Context

PR #8985 changes the canvas prompt dialog input from `type="text"` to `type="number"` for numeric widgets, enabling native scroll wheel, arrow keys, and step increments (resolving #4768).

However, this prevents users from entering mathematical expressions (e.g. `1+2*3`) via `evaluateInput()`.

## Proposal

Add an `fx` toggle button to the prompt dialog that switches between number mode and expression mode.

**Number mode (default):**
```
┌──────────────────────────────────────┐
│ Value [ 42.000 ↕] [fx] [OK] │
└──────────────────────────────────────┘
```

**Expression mode (toggled):**
```
┌──────────────────────────────────────┐
│ Value [ 1+2*3 ] [fx] [OK] │
└──────────────────────────────────────┘
```

### Behavior

- Default: `type="number"` with native UX (scroll, arrows, step, min/max)
- Click `fx`: switches to `type="text"` for expression entry
- Click `fx` again: evaluates expression and switches back to number mode
- `=` key shortcut activates expression mode (spreadsheet convention)

### Why no node audit is needed

- The toggle lives in the prompt dialog UI, not in node definitions
- `evaluateInput` is only called from `NumberWidget`'s `canvas.prompt()` callback
- Vue node number input (`WidgetInputNumberInput.vue`) handles expressions independently

## Related

- Resolves expression concern raised in #8985
- Builds on #4768 (`type="number"` for native number UX)

┆Issue is synchronized with this [Notion page](https://www.notion.so/Issue-9096-feat-add-expression-toggle-fx-button-to-number-input-prompt-dialog-30f6d73d36508171b067f5731e021c94) by [Unito](https://www.unito.io)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.