functualize-inline
Status: Published — Independently installable from PyPI.
Textual-based inline interactivity provider for the functualize framework. This plugin renders rich terminal widgets (confirmations, selections, text inputs, progress bars) inline within the terminal using Textual's inline mode — without taking over the full screen. When Textual is unavailable (non-TTY, CI environments), it gracefully falls back to plain CLI input() prompts.
Installation
pip install functualize-inline
Quick Start
from functualize.plugin import PromptIntent, PromptRequest
from functualize_inline import InlinePlugin
plugin = InlinePlugin()
request = PromptRequest(
intent=PromptIntent.CONFIRM_NEUTRAL,
question="Deploy to staging?",
default=True,
)
response = plugin.collect(request)
print(f"User answered: {response.value} (source: {response.source})")
Features
- Rich inline widgets — Confirmation dialogs, single/multi-select lists, text inputs, secret inputs, and acknowledgment prompts rendered with Textual styling
- Automatic CLI fallback — Detects non-TTY environments and falls back to plain
input()prompts so jobs run unattended in CI - Structured output rendering — Implements
OutputRendererprotocol withrender_log,render_phase, andrender_progressfor formatted terminal output with icons and progress bars - Timeout support — Prompts can auto-dismiss after a configurable timeout, returning the default value
- Entry-point auto-discovery — Install the package and it registers itself as an interactivity provider via the
functualize.interactivity_providersentry point
API Reference
Public classes and functions exported by this plugin:
functualize_inline (top-level)
InlinePlugin— Main plugin class implementingInputProviderandOutputRendererprotocols. Entry point for prompt collection and terminal output rendering.
functualize_inline.apps
InlinePromptApp— A short-lived TextualApp(inline mode) that mounts a prompt widget and returns the user's response as a(value, source)tuple.
functualize_inline.widgets
PromptResult— TextualMessageposted by widgets when the user provides a response. Carries.valueand.sourceattributes.ConfirmDestructiveWidget— Red-bordered widget requiring the user to type "yes" to confirm dangerous actions.ConfirmNeutralWidget— Standard Y/n confirmation widget with keyboard shortcuts.SelectWidget— Single-selectOptionListwidget (max 12 visible items).MultiSelectWidget— Checkbox-style multi-select widget with toggle and submit.TextInputWidget— Free-text input with optional placeholder and default value.SecretInputWidget— Masked password input widget.AcknowledgeWidget— Press-any-key dismiss widget for informational prompts.
Development
Run plugin tests:
uv run pytest plugins/functualize-inline/tests/ -v
Run linting and formatting:
uv run ruff check plugins/functualize-inline/
uv run ruff format plugins/functualize-inline/
Release files for functualize-inline 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| functualize_inline-0.1.0.tar.gz | 11.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| functualize_inline-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.3 kB
Release files / functualize_inline-0.1.0.tar.gz
| Download URL | functualize_inline-0.1.0.tar.gz |
|---|---|
| Size | 11.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f68ff9aab98094ff5b11853ea111e99b02a43d4baf7a8822cb941e2aed708c79
|
|
BLAKE2b-256 checksum How to use checksums |
a163ea29c30e5fa8c3985d0f53e9b6d01b2ca55460079fd39f0bc3d3e507b538
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / functualize_inline-0.1.0-py3-none-any.whl
| Download URL | functualize_inline-0.1.0-py3-none-any.whl |
|---|---|
| Size | 9.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f6224e60cb74761c68e000dfee7ee1a8a265d6dae423163ca18bc6cda92d60fd
|
|
BLAKE2b-256 checksum How to use checksums |
e1c3ff0a4a285cb7f838531b9c8d2f49b83e4bbf6c95475501ebc7ab1d73dd20
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|