1
0
Fork 0
textual-autocomplete/examples/basic_two_column_heavy_styles.py
Daniel Baumann 0832c185c0
Adding upstream version 4.0.4.
Signed-off-by: Daniel Baumann <daniel@debian.org>
2025-05-04 22:09:41 +02:00

55 lines
1.8 KiB
Python

"""A two-column autocomplete example with heavy styling."""
from textual.app import App, ComposeResult
from textual.content import Content
from textual.widgets import Input, Label
from textual_autocomplete import AutoComplete, DropdownItem
from examples._headers import headers
# Define a mapping of sections to colors
SECTION_COLORS: dict[str, str] = {
"Authentication": "$text-success",
"Caching": "$text-primary",
"Conditionals": "$text-warning",
"Connection management": "$text-error",
"Content negotiation": "$text-success",
"Controls": "$text-accent",
"Cookies": "$text-warning",
"CORS": "$text-error",
# Add fallback color for any other sections
"default": "$foreground",
}
# Create dropdown items with two columns: rank and language name
CANDIDATES = [
DropdownItem(
Content.styled(
str(header["name"]),
style=SECTION_COLORS.get(
str(header.get("section", "default")), SECTION_COLORS["default"]
),
), # Main text to be completed with color based on section
prefix=Content.from_markup(
"[$text-primary on $primary-muted] $number", number=f"{i:<3}"
), # Prefix showing rank, styled with Textual markup!
)
for i, header in enumerate(headers)
]
class TwoColumnAutoCompleteExample(App[None]):
def compose(self) -> ComposeResult:
yield Label("Start typing an HTTP header name:")
text_input = Input(placeholder="Type here...")
yield text_input
yield AutoComplete(
target=text_input, # The widget to attach autocomplete to
candidates=CANDIDATES, # The list of completion candidates
)
if __name__ == "__main__":
app = TwoColumnAutoCompleteExample()
app.run()