inquirer-textual 0.1.0__py3-none-any.whl → 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- inquirer_textual/InquirerApp.py +108 -13
- inquirer_textual/common/ChoiceCheckboxLabel.py +2 -0
- inquirer_textual/common/ChoiceLabel.py +2 -0
- inquirer_textual/common/InquirerHeader.py +31 -0
- inquirer_textual/common/Result.py +4 -2
- inquirer_textual/common/Shortcut.py +3 -1
- inquirer_textual/prompts.py +34 -19
- inquirer_textual/version.py +1 -1
- inquirer_textual/widgets/InquirerCheckbox.py +2 -1
- inquirer_textual/widgets/InquirerNumber.py +3 -1
- inquirer_textual/widgets/InquirerSecret.py +2 -1
- inquirer_textual/widgets/InquirerSelect.py +11 -6
- inquirer_textual/widgets/InquirerText.py +5 -2
- inquirer_textual/widgets/InquirerWidget.py +3 -1
- {inquirer_textual-0.1.0.dist-info → inquirer_textual-0.2.0.dist-info}/METADATA +16 -3
- inquirer_textual-0.2.0.dist-info/RECORD +25 -0
- {inquirer_textual-0.1.0.dist-info → inquirer_textual-0.2.0.dist-info}/WHEEL +1 -1
- inquirer_textual-0.1.0.dist-info/RECORD +0 -24
- {inquirer_textual-0.1.0.dist-info → inquirer_textual-0.2.0.dist-info}/licenses/LICENSE +0 -0
inquirer_textual/InquirerApp.py
CHANGED
|
@@ -1,9 +1,15 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from
|
|
3
|
+
from asyncio import AbstractEventLoop
|
|
4
|
+
from threading import Event
|
|
5
|
+
from typing import TypeVar, Callable, Any
|
|
6
|
+
|
|
7
|
+
from textual.app import App, AutopilotCallbackType
|
|
4
8
|
from textual.app import ComposeResult
|
|
9
|
+
from textual.binding import Binding, BindingsMap
|
|
5
10
|
from textual.widgets import Footer
|
|
6
11
|
|
|
12
|
+
from inquirer_textual.common.InquirerHeader import InquirerHeader
|
|
7
13
|
from inquirer_textual.common.Result import Result
|
|
8
14
|
from inquirer_textual.common.Shortcut import Shortcut
|
|
9
15
|
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
@@ -25,33 +31,122 @@ class InquirerApp(App[Result[T]], inherit_bindings=False): # type: ignore[call-
|
|
|
25
31
|
"""
|
|
26
32
|
ENABLE_COMMAND_PALETTE = False
|
|
27
33
|
INLINE_PADDING = 0
|
|
34
|
+
BINDINGS = [
|
|
35
|
+
Binding("ctrl+d", "quit", "Quit", show=False, priority=True)
|
|
36
|
+
]
|
|
28
37
|
|
|
29
|
-
def __init__(self
|
|
38
|
+
def __init__(self) -> None:
|
|
39
|
+
self.widget: InquirerWidget | None = None
|
|
40
|
+
self.shortcuts: list[Shortcut] | None = None
|
|
41
|
+
self.header: str | list[str] | None = None
|
|
42
|
+
self.show_footer: bool = False
|
|
43
|
+
self.result: Result[T] | None = None
|
|
44
|
+
self.result_ready: Event | None = None
|
|
45
|
+
self.inquiry_func: Callable[[InquirerApp[T]], None] | None = None
|
|
46
|
+
self.inquiry_func_stop: bool = False
|
|
30
47
|
super().__init__()
|
|
31
|
-
self.widget = widget
|
|
32
|
-
self.shortcuts = shortcuts
|
|
33
|
-
self.show_footer = show_footer
|
|
34
48
|
|
|
35
49
|
def on_mount(self) -> None:
|
|
50
|
+
self._update_bindings()
|
|
51
|
+
if self.inquiry_func:
|
|
52
|
+
self.run_worker(self.inquiry_func_worker, thread=True)
|
|
53
|
+
|
|
54
|
+
def _update_bindings(self) -> None:
|
|
55
|
+
self._bindings = BindingsMap()
|
|
36
56
|
if self.shortcuts:
|
|
37
57
|
for shortcut in self.shortcuts:
|
|
38
58
|
self._bindings.bind(shortcut.key, f'shortcut("{shortcut.command}")',
|
|
39
59
|
description=shortcut.description,
|
|
40
60
|
show=shortcut.show)
|
|
41
61
|
|
|
62
|
+
def inquiry_func_worker(self):
|
|
63
|
+
if self.inquiry_func:
|
|
64
|
+
self.inquiry_func(self)
|
|
65
|
+
|
|
42
66
|
def action_shortcut(self, command: str):
|
|
43
|
-
self.
|
|
67
|
+
value = self.widget.current_value() if self.widget else None
|
|
68
|
+
self._handle_result(command, value)
|
|
69
|
+
|
|
70
|
+
async def action_quit(self):
|
|
71
|
+
self._handle_result('quit', None)
|
|
44
72
|
|
|
45
73
|
def on_inquirer_widget_submit(self, event: InquirerWidget.Submit) -> None:
|
|
46
|
-
self.
|
|
74
|
+
self._handle_result(event.command, event.value)
|
|
75
|
+
|
|
76
|
+
def _handle_result(self, command: str | None, value: Any | None):
|
|
77
|
+
if self.result_ready is not None:
|
|
78
|
+
self.result = Result(command, value) # type: ignore[arg-type]
|
|
79
|
+
self.result_ready.set()
|
|
80
|
+
else:
|
|
81
|
+
self.call_after_refresh(lambda: self._terminate(command, value))
|
|
47
82
|
|
|
48
|
-
def
|
|
49
|
-
self.
|
|
83
|
+
def _terminate(self, command: str | None = None, value: Any | None = None):
|
|
84
|
+
self.inquiry_func_stop = True
|
|
85
|
+
if self.result_ready:
|
|
86
|
+
self.result_ready.set()
|
|
87
|
+
if command is not None:
|
|
88
|
+
self.app.exit(Result(command, value))
|
|
89
|
+
else:
|
|
90
|
+
self.exit(value)
|
|
50
91
|
|
|
51
92
|
def compose(self) -> ComposeResult:
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
93
|
+
if self.header is not None:
|
|
94
|
+
yield InquirerHeader(self.header)
|
|
95
|
+
if self.widget:
|
|
96
|
+
yield self.widget
|
|
97
|
+
self.widget.focus()
|
|
98
|
+
if self.show_footer:
|
|
99
|
+
yield Footer()
|
|
100
|
+
|
|
101
|
+
def focus_widget(self):
|
|
102
|
+
if self.widget:
|
|
103
|
+
self.call_after_refresh(self.widget.focus)
|
|
104
|
+
|
|
105
|
+
def prompt(self, widget: InquirerWidget, shortcuts: list[Shortcut] | None = None) -> Result[T]:
|
|
106
|
+
if shortcuts:
|
|
107
|
+
self.shortcuts = shortcuts
|
|
108
|
+
self.show_footer = True
|
|
109
|
+
self._update_bindings()
|
|
110
|
+
self.widget = widget
|
|
111
|
+
if not self.result_ready:
|
|
112
|
+
self.result_ready = Event()
|
|
113
|
+
self.call_from_thread(self.refresh, recompose=True)
|
|
114
|
+
self.call_from_thread(self.focus_widget)
|
|
115
|
+
self.result_ready.wait()
|
|
116
|
+
self.result_ready.clear()
|
|
117
|
+
if self.inquiry_func_stop:
|
|
118
|
+
raise RuntimeError("InquirerApp has been stopped.")
|
|
119
|
+
return self.result # type: ignore[return-value]
|
|
120
|
+
|
|
121
|
+
def stop(self, value: Any = None):
|
|
122
|
+
if value:
|
|
123
|
+
self.call_after_refresh(lambda: self._terminate(value=value))
|
|
124
|
+
else:
|
|
125
|
+
self.call_from_thread(self.exit)
|
|
126
|
+
|
|
127
|
+
def run(
|
|
128
|
+
self,
|
|
129
|
+
*,
|
|
130
|
+
headless: bool = False,
|
|
131
|
+
inline: bool = False,
|
|
132
|
+
inline_no_clear: bool = False,
|
|
133
|
+
mouse: bool = True,
|
|
134
|
+
size: tuple[int, int] | None = None,
|
|
135
|
+
auto_pilot: AutopilotCallbackType | None = None,
|
|
136
|
+
loop: AbstractEventLoop | None = None,
|
|
137
|
+
inquiry_func: Callable[[InquirerApp[T]], None] | None = None,
|
|
138
|
+
) -> Result[T]:
|
|
139
|
+
if not self.inquiry_func:
|
|
140
|
+
self.inquiry_func = inquiry_func
|
|
141
|
+
return super().run(
|
|
142
|
+
headless=headless,
|
|
143
|
+
inline=inline,
|
|
144
|
+
inline_no_clear=inline_no_clear,
|
|
145
|
+
mouse=mouse,
|
|
146
|
+
size=size,
|
|
147
|
+
auto_pilot=auto_pilot,
|
|
148
|
+
loop=loop,
|
|
149
|
+
)
|
|
55
150
|
|
|
56
151
|
def get_theme_variable_defaults(self) -> dict[str, str]:
|
|
57
152
|
return {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from textual.app import ComposeResult
|
|
4
|
+
from textual.containers import Vertical
|
|
5
|
+
from textual.widget import Widget
|
|
6
|
+
from textual.widgets import Static
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class InquirerHeader(Widget):
|
|
10
|
+
DEFAULT_CSS = """
|
|
11
|
+
InquirerHeader {
|
|
12
|
+
margin-bottom: 1;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
#inquirer-header-static {
|
|
16
|
+
width: 1fr;
|
|
17
|
+
text-align: center;
|
|
18
|
+
}
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
def __init__(self, text: str | list[str]) -> None:
|
|
22
|
+
super().__init__()
|
|
23
|
+
self._text = text if isinstance(text, list) else [text]
|
|
24
|
+
|
|
25
|
+
def on_mount(self):
|
|
26
|
+
self.styles.height = len(self._text)
|
|
27
|
+
|
|
28
|
+
def compose(self) -> ComposeResult:
|
|
29
|
+
with Vertical():
|
|
30
|
+
for line in self._text:
|
|
31
|
+
yield Static(line, id="inquirer-header-static")
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from dataclasses import dataclass
|
|
2
|
-
from typing import TypeVar
|
|
4
|
+
from typing import TypeVar, Generic
|
|
3
5
|
|
|
4
6
|
T = TypeVar('T')
|
|
5
7
|
|
|
6
8
|
|
|
7
9
|
@dataclass
|
|
8
|
-
class Result[T]:
|
|
10
|
+
class Result(Generic[T]):
|
|
9
11
|
command: str | None
|
|
10
12
|
value: T
|
|
11
13
|
|
inquirer_textual/prompts.py
CHANGED
|
@@ -1,61 +1,76 @@
|
|
|
1
1
|
from typing import Any, Iterable
|
|
2
2
|
|
|
3
|
+
from textual.validation import Validator
|
|
4
|
+
|
|
3
5
|
from inquirer_textual.InquirerApp import InquirerApp
|
|
4
6
|
from inquirer_textual.common.Choice import Choice
|
|
7
|
+
from inquirer_textual.common.Result import Result
|
|
8
|
+
from inquirer_textual.common.Shortcut import Shortcut
|
|
9
|
+
from inquirer_textual.widgets.InquirerCheckbox import InquirerCheckbox
|
|
5
10
|
from inquirer_textual.widgets.InquirerConfirm import InquirerConfirm
|
|
6
11
|
from inquirer_textual.widgets.InquirerMulti import InquirerMulti
|
|
7
12
|
from inquirer_textual.widgets.InquirerNumber import InquirerNumber
|
|
8
13
|
from inquirer_textual.widgets.InquirerSecret import InquirerSecret
|
|
14
|
+
from inquirer_textual.widgets.InquirerSelect import InquirerSelect
|
|
9
15
|
from inquirer_textual.widgets.InquirerText import InquirerText
|
|
10
16
|
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
11
|
-
from inquirer_textual.common.Result import Result
|
|
12
|
-
from inquirer_textual.common.Shortcut import Shortcut
|
|
13
|
-
from inquirer_textual.widgets.InquirerCheckbox import InquirerCheckbox
|
|
14
|
-
from inquirer_textual.widgets.InquirerSelect import InquirerSelect
|
|
15
|
-
from textual.validation import Validator
|
|
16
17
|
|
|
17
18
|
|
|
18
19
|
def text(message: str, shortcuts: list[Shortcut] | None = None,
|
|
19
20
|
validators: Validator | Iterable[Validator] | None = None) -> Result[str]:
|
|
20
|
-
|
|
21
|
-
app
|
|
21
|
+
app: InquirerApp[str] = InquirerApp()
|
|
22
|
+
app.widget = InquirerText(message, validators=validators)
|
|
23
|
+
app.shortcuts = shortcuts
|
|
24
|
+
app.show_footer = bool(shortcuts)
|
|
22
25
|
return app.run(inline=True)
|
|
23
26
|
|
|
24
27
|
|
|
25
28
|
def secret(message: str, shortcuts: list[Shortcut] | None = None) -> Result[str]:
|
|
26
|
-
|
|
27
|
-
app
|
|
29
|
+
app: InquirerApp[str] = InquirerApp()
|
|
30
|
+
app.widget = InquirerSecret(message)
|
|
31
|
+
app.shortcuts = shortcuts
|
|
32
|
+
app.show_footer = bool(shortcuts)
|
|
28
33
|
return app.run(inline=True)
|
|
29
34
|
|
|
30
35
|
|
|
31
36
|
def number(message: str, shortcuts: list[Shortcut] | None = None) -> Result[int]:
|
|
32
|
-
|
|
33
|
-
app
|
|
37
|
+
app: InquirerApp[int] = InquirerApp()
|
|
38
|
+
app.widget = InquirerNumber(message)
|
|
39
|
+
app.shortcuts = shortcuts
|
|
40
|
+
app.show_footer = bool(shortcuts)
|
|
34
41
|
return app.run(inline=True)
|
|
35
42
|
|
|
36
43
|
|
|
37
44
|
def confirm(message: str, shortcuts: list[Shortcut] | None = None, default: bool = False, mandatory: bool = True) -> \
|
|
38
45
|
Result[bool]:
|
|
39
|
-
|
|
40
|
-
app
|
|
46
|
+
app: InquirerApp[bool] = InquirerApp()
|
|
47
|
+
app.widget = InquirerConfirm(message, default=default, mandatory=mandatory)
|
|
48
|
+
app.shortcuts = shortcuts
|
|
49
|
+
app.show_footer = bool(shortcuts)
|
|
41
50
|
return app.run(inline=True)
|
|
42
51
|
|
|
43
52
|
|
|
44
53
|
def select(message: str, choices: list[str | Choice], shortcuts: list[Shortcut] | None = None,
|
|
45
54
|
default: str | Choice | None = None, mandatory: bool = True) -> Result[str | Choice]:
|
|
46
|
-
|
|
47
|
-
app
|
|
55
|
+
app: InquirerApp[str | Choice] = InquirerApp()
|
|
56
|
+
app.widget = InquirerSelect(message, choices, default, mandatory)
|
|
57
|
+
app.shortcuts = shortcuts
|
|
58
|
+
app.show_footer = bool(shortcuts)
|
|
48
59
|
return app.run(inline=True)
|
|
49
60
|
|
|
50
61
|
|
|
51
62
|
def checkbox(message: str, choices: list[str | Choice], shortcuts: list[Shortcut] | None = None,
|
|
52
63
|
enabled: list[str | Choice] | None = None) -> Result[list[str | Choice]]:
|
|
53
|
-
|
|
54
|
-
app
|
|
64
|
+
app: InquirerApp[list[str | Choice]] = InquirerApp()
|
|
65
|
+
app.widget = InquirerCheckbox(message, choices, enabled)
|
|
66
|
+
app.shortcuts = shortcuts
|
|
67
|
+
app.show_footer = bool(shortcuts)
|
|
55
68
|
return app.run(inline=True)
|
|
56
69
|
|
|
57
70
|
|
|
58
71
|
def multi(widgets: list[InquirerWidget], shortcuts: list[Shortcut] | None = None) -> Result[list[Any]]:
|
|
59
|
-
|
|
60
|
-
app
|
|
72
|
+
app: InquirerApp[list[Any]] = InquirerApp()
|
|
73
|
+
app.widget = InquirerMulti(widgets)
|
|
74
|
+
app.shortcuts = shortcuts
|
|
75
|
+
app.show_footer = bool(shortcuts)
|
|
61
76
|
return app.run(inline=True)
|
inquirer_textual/version.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
version = "0.
|
|
1
|
+
version = "0.2.0"
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from textual.app import ComposeResult
|
|
4
4
|
from textual.containers import VerticalGroup
|
|
5
5
|
from textual.widgets import ListItem, ListView
|
|
6
|
+
from typing_extensions import Self
|
|
6
7
|
|
|
7
8
|
from inquirer_textual.common.Choice import Choice
|
|
8
9
|
from inquirer_textual.common.ChoiceCheckboxLabel import ChoiceCheckboxLabel
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
from textual.app import ComposeResult
|
|
4
4
|
from textual.containers import HorizontalGroup
|
|
5
5
|
from textual.widgets import Input
|
|
6
|
+
from typing_extensions import Self
|
|
6
7
|
|
|
7
8
|
from inquirer_textual.common.PromptMessage import PromptMessage
|
|
8
9
|
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
2
|
|
|
3
|
-
from inquirer_textual.common.Choice import Choice
|
|
4
|
-
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
5
|
-
from inquirer_textual.common.PromptMessage import PromptMessage
|
|
6
|
-
from inquirer_textual.common.ChoiceLabel import ChoiceLabel
|
|
7
3
|
from textual.app import ComposeResult
|
|
8
4
|
from textual.containers import VerticalGroup
|
|
9
5
|
from textual.widgets import ListView, ListItem
|
|
6
|
+
from typing_extensions import Self
|
|
7
|
+
|
|
8
|
+
from inquirer_textual.common.Choice import Choice
|
|
9
|
+
from inquirer_textual.common.ChoiceLabel import ChoiceLabel
|
|
10
|
+
from inquirer_textual.common.PromptMessage import PromptMessage
|
|
11
|
+
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
10
12
|
|
|
11
13
|
|
|
12
14
|
class InquirerSelect(InquirerWidget):
|
|
@@ -41,7 +43,10 @@ class InquirerSelect(InquirerWidget):
|
|
|
41
43
|
|
|
42
44
|
def on_mount(self):
|
|
43
45
|
super().on_mount()
|
|
44
|
-
self.
|
|
46
|
+
if self.app.is_inline:
|
|
47
|
+
self.styles.height = min(10, len(self.choices) + 1)
|
|
48
|
+
else:
|
|
49
|
+
self.styles.height = '1fr'
|
|
45
50
|
|
|
46
51
|
def on_list_view_highlighted(self, event: ListView.Highlighted) -> None:
|
|
47
52
|
if self.selected_label:
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
from
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Iterable
|
|
2
4
|
|
|
3
5
|
from textual.app import ComposeResult
|
|
4
6
|
from textual.containers import HorizontalGroup
|
|
5
7
|
from textual.validation import Validator
|
|
6
8
|
from textual.widgets import Input
|
|
9
|
+
from typing_extensions import Self
|
|
7
10
|
|
|
8
|
-
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
9
11
|
from inquirer_textual.common.PromptMessage import PromptMessage
|
|
12
|
+
from inquirer_textual.widgets.InquirerWidget import InquirerWidget
|
|
10
13
|
|
|
11
14
|
|
|
12
15
|
class InquirerText(InquirerWidget):
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
from typing import Any
|
|
2
4
|
|
|
3
5
|
from textual.message import Message
|
|
@@ -20,7 +22,7 @@ class InquirerWidget(Widget):
|
|
|
20
22
|
self._bindings.bind('ctrl+c', 'exit_now', show=False)
|
|
21
23
|
|
|
22
24
|
def action_exit_now(self):
|
|
23
|
-
self.post_message(InquirerWidget.Submit(None,
|
|
25
|
+
self.post_message(InquirerWidget.Submit(None, 'ctrl+c'))
|
|
24
26
|
|
|
25
27
|
def current_value(self):
|
|
26
28
|
raise NotImplementedError("Subclasses must implement current_value method")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: inquirer-textual
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Inquirer based on Textual
|
|
5
5
|
Project-URL: Changelog, https://github.com/robvanderleek/inquirer-textual/blob/master/CHANGELOG.md
|
|
6
6
|
Project-URL: Documentation, https://robvanderleek.github.io/inquirer-textual/
|
|
@@ -8,8 +8,8 @@ Project-URL: Source, https://github.com/robvanderleek/inquirer-textual
|
|
|
8
8
|
Author-email: Rob van der Leek <robvanderleek@gmail.com>
|
|
9
9
|
License-Expression: GPL-3.0-or-later
|
|
10
10
|
License-File: LICENSE
|
|
11
|
-
Requires-Python:
|
|
12
|
-
Requires-Dist: textual>=6.
|
|
11
|
+
Requires-Python: <3.15,>=3.9
|
|
12
|
+
Requires-Dist: textual>=6.7.1
|
|
13
13
|
Description-Content-Type: text/markdown
|
|
14
14
|
|
|
15
15
|
# Inquirer-Textual
|
|
@@ -20,6 +20,12 @@ Description-Content-Type: text/markdown
|
|
|
20
20
|
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
|
+
<div align="center">
|
|
24
|
+
|
|
25
|
+
*Versatile library for user input in Python 🎙️*
|
|
26
|
+
|
|
27
|
+
</div>
|
|
28
|
+
|
|
23
29
|
<div align="center">
|
|
24
30
|
|
|
25
31
|
[](https://github.com/robvanderleek/inquirer-textual/actions/workflows/main.yml)
|
|
@@ -28,6 +34,13 @@ Description-Content-Type: text/markdown
|
|
|
28
34
|
|
|
29
35
|
</div>
|
|
30
36
|
|
|
37
|
+
All terminal programs start small. Some stay small, and some become incredibly
|
|
38
|
+
big. The goal of this Python library is to make user input simple for small
|
|
39
|
+
programs, but also support a smooth transition to a comprehensive UI library as
|
|
40
|
+
your program grows.
|
|
41
|
+
|
|
42
|
+
Read the [documentation here](https://robvanderleek.github.io/inquirer-textual/)
|
|
43
|
+
|
|
31
44
|
## Development
|
|
32
45
|
|
|
33
46
|
Add this library as an editable local dependency to another project using `uv`:
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
inquirer_textual/InquirerApp.py,sha256=2lDgzimH0EXeRnPDlre97q24TPsgIE9mI-cJfhQ8hIk,5377
|
|
2
|
+
inquirer_textual/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
+
inquirer_textual/prompts.py,sha256=NvaU1hgLe962iSHH3EtmLkbB0K5Vlav38mcHSiYXrOg,3186
|
|
4
|
+
inquirer_textual/version.py,sha256=XQVhijSHeIVMVzY2S4fY9BKxV2XHSTr9VVHsYltGPvQ,18
|
|
5
|
+
inquirer_textual/common/Choice.py,sha256=ZRggsayRKcNMDLRh12Zblol_pusE2keVEXlHkaw5RsE,147
|
|
6
|
+
inquirer_textual/common/ChoiceCheckboxLabel.py,sha256=BZg5vLe6_qc0ipYUaonNfygSOnHyJuEVrB8mmM6tOjw,675
|
|
7
|
+
inquirer_textual/common/ChoiceLabel.py,sha256=Wxt5IZUSHJsVEza1Uj19HZP7oD1uNvclY1UDbaNiOOM,504
|
|
8
|
+
inquirer_textual/common/InquirerHeader.py,sha256=txl-TRe3DKsOPcmDKy1fhfTa-YAURsjTYePDDHzcPH8,802
|
|
9
|
+
inquirer_textual/common/PromptMessage.py,sha256=MCXdsE9j0XlqVKjWUhXB-9qZ24Lk7dA5QWRgUWTdF8o,831
|
|
10
|
+
inquirer_textual/common/Result.py,sha256=mC79hFPITwyXFrrxlHxiumdywKhqGpBM32KhxzJvm-E,255
|
|
11
|
+
inquirer_textual/common/Shortcut.py,sha256=9mzLVnphImnehNo1HHU_gPMv-vFi5nXsb1G2CAbpuEY,297
|
|
12
|
+
inquirer_textual/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
inquirer_textual/widgets/InquirerCheckbox.py,sha256=ytWNqRbJ46iItJxbKfFTHGVapFnJjF9DwG3XtKfRW0E,3008
|
|
14
|
+
inquirer_textual/widgets/InquirerConfirm.py,sha256=RFxSnxj1NS_kqirWWu_VLm0C2Bf4h-3zewDJ_IAtgYs,2293
|
|
15
|
+
inquirer_textual/widgets/InquirerMulti.py,sha256=WhjhEq2j9IL4PIT2kgvClXorazeii4Lxv1TdUDyC60c,1637
|
|
16
|
+
inquirer_textual/widgets/InquirerNumber.py,sha256=05ZEXHVeZ-jzvn7Ts0sJkpkP6oTlgBAWcZGEyrDG0H8,1550
|
|
17
|
+
inquirer_textual/widgets/InquirerSecret.py,sha256=XnMP77O8XWeHvqmttb7xj94a3pgX95a9pEgLvIehmBg,1586
|
|
18
|
+
inquirer_textual/widgets/InquirerSelect.py,sha256=P0_7B3945I-O2HXzXpGO5HDIqD7poR6aa0yOX6a9CGM,3259
|
|
19
|
+
inquirer_textual/widgets/InquirerText.py,sha256=6sQxS87pAooCOdZBcZbxWfUXxqQZA5VYv1ebLv7-3J8,2154
|
|
20
|
+
inquirer_textual/widgets/InquirerWidget.py,sha256=56rcnnK5vqD66WKfmv8V_kZ4YG63Vkxz3pYUq18OJKo,802
|
|
21
|
+
inquirer_textual/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
inquirer_textual-0.2.0.dist-info/METADATA,sha256=etLlsW92h4EEQbgExg2JUV0ZNBPEsyBKpdgl4A4o8sE,1768
|
|
23
|
+
inquirer_textual-0.2.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
24
|
+
inquirer_textual-0.2.0.dist-info/licenses/LICENSE,sha256=fJuRou64yfkof3ZFdeHcgk7K8pqxis6SBr-vtUEgBuA,1073
|
|
25
|
+
inquirer_textual-0.2.0.dist-info/RECORD,,
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
inquirer_textual/InquirerApp.py,sha256=jKni2W65cfthR9mVU-jljJjtYr9Zhk2yLUgjcmZegOg,2016
|
|
2
|
-
inquirer_textual/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
3
|
-
inquirer_textual/prompts.py,sha256=Rb4pwVje09wcIVXUCep_Qm_pCb5adQZ3iv2yGGiBsPc,3003
|
|
4
|
-
inquirer_textual/version.py,sha256=aOHawL1zuHMfBWKXqwUkXcW96oXLNCY-CXdHDqkz4g4,18
|
|
5
|
-
inquirer_textual/common/Choice.py,sha256=ZRggsayRKcNMDLRh12Zblol_pusE2keVEXlHkaw5RsE,147
|
|
6
|
-
inquirer_textual/common/ChoiceCheckboxLabel.py,sha256=lUIiR9STUxRsI6psH6y7-MFgK1shDG6W7oPhkdl_3e8,639
|
|
7
|
-
inquirer_textual/common/ChoiceLabel.py,sha256=SMsXjMzGngFrwxkSxtthnX2XdSvBShZVnDxJEttIusY,468
|
|
8
|
-
inquirer_textual/common/PromptMessage.py,sha256=MCXdsE9j0XlqVKjWUhXB-9qZ24Lk7dA5QWRgUWTdF8o,831
|
|
9
|
-
inquirer_textual/common/Result.py,sha256=HE-LkUQwRSy_bdnR1aT9b50Ym0oFs0T-qIMmuwokG44,201
|
|
10
|
-
inquirer_textual/common/Shortcut.py,sha256=Mvd0pbSC1GKphhLqjVZ-i54Nd_bEjoEYmR_Xjb6WyCo,260
|
|
11
|
-
inquirer_textual/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
inquirer_textual/widgets/InquirerCheckbox.py,sha256=CuJYe6gVM6ahxel2rsX9tYJD1LhUbc3tmX5B9LINSJ0,2962
|
|
13
|
-
inquirer_textual/widgets/InquirerConfirm.py,sha256=RFxSnxj1NS_kqirWWu_VLm0C2Bf4h-3zewDJ_IAtgYs,2293
|
|
14
|
-
inquirer_textual/widgets/InquirerMulti.py,sha256=WhjhEq2j9IL4PIT2kgvClXorazeii4Lxv1TdUDyC60c,1637
|
|
15
|
-
inquirer_textual/widgets/InquirerNumber.py,sha256=dFAP2GqqT7Dh0Lb1aZLfjyjbLbSBXqEbMghZXpeplq8,1503
|
|
16
|
-
inquirer_textual/widgets/InquirerSecret.py,sha256=CjPb_u32cOxK5So2GRVhxPqx2-3pjT4Ic-7NmhgwxSo,1540
|
|
17
|
-
inquirer_textual/widgets/InquirerSelect.py,sha256=__T_2qUSPFK7qR82UkRaKeNBjb6-hOaJ3oVQE7_9PBE,3124
|
|
18
|
-
inquirer_textual/widgets/InquirerText.py,sha256=IMev5EmYLs90M0TrX0tuhXkMyp8wBHIuyaHqwJzhqiY,2089
|
|
19
|
-
inquirer_textual/widgets/InquirerWidget.py,sha256=yxQ2qcqp1dsBXZUBqiqKzcSt3aTUjEPi2I0MbQ7E7Z0,762
|
|
20
|
-
inquirer_textual/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
21
|
-
inquirer_textual-0.1.0.dist-info/METADATA,sha256=fBixuYNdQCuU-nA09XmImFHeakveZwb5M_r8lvR_Pho,1339
|
|
22
|
-
inquirer_textual-0.1.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
23
|
-
inquirer_textual-0.1.0.dist-info/licenses/LICENSE,sha256=fJuRou64yfkof3ZFdeHcgk7K8pqxis6SBr-vtUEgBuA,1073
|
|
24
|
-
inquirer_textual-0.1.0.dist-info/RECORD,,
|
|
File without changes
|