hspylib-clitt 0.9.41__py3-none-any.whl → 0.9.51__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.

Potentially problematic release.


This version of hspylib-clitt might be problematic. Click here for more details.

Files changed (60) hide show
  1. clitt/.version +1 -1
  2. clitt/__classpath__.py +1 -1
  3. clitt/__init__.py +4 -3
  4. clitt/__main__.py +8 -41
  5. clitt/addons/__init__.py +2 -3
  6. clitt/addons/appman/__init__.py +2 -2
  7. clitt/addons/appman/appman.py +1 -1
  8. clitt/addons/appman/templates/__init__.py +2 -2
  9. clitt/addons/widman/__init__.py +2 -2
  10. clitt/addons/widman/widgets/__init__.py +2 -2
  11. clitt/addons/widman/widgets/widget_free.py +2 -1
  12. clitt/addons/widman/widgets/widget_punch.py +3 -2
  13. clitt/core/__init__.py +3 -3
  14. clitt/core/icons/__init__.py +2 -2
  15. clitt/core/icons/emojis/__init__.py +2 -2
  16. clitt/core/icons/font_awesome/__init__.py +2 -2
  17. clitt/core/term/__init__.py +14 -0
  18. clitt/core/term/commons.py +63 -0
  19. clitt/core/term/cursor.py +124 -0
  20. clitt/core/term/screen.py +96 -0
  21. clitt/core/term/terminal.py +173 -0
  22. clitt/core/tui/__init__.py +3 -4
  23. clitt/core/tui/mchoose/__init__.py +2 -2
  24. clitt/core/tui/mchoose/menu_choose.py +6 -5
  25. clitt/core/tui/mdashboard/__init__.py +2 -2
  26. clitt/core/tui/mdashboard/menu_dashboard.py +9 -9
  27. clitt/core/tui/menu/__init__.py +2 -2
  28. clitt/core/tui/menu/tui_menu_action.py +1 -3
  29. clitt/core/tui/menu/tui_menu_item.py +6 -5
  30. clitt/core/tui/menu/tui_menu_ui.py +5 -7
  31. clitt/core/tui/menu/tui_menu_view.py +2 -3
  32. clitt/core/tui/minput/__init__.py +2 -2
  33. clitt/core/tui/minput/menu_input.py +22 -18
  34. clitt/core/tui/minput/minput_utils.py +4 -3
  35. clitt/core/tui/mselect/__init__.py +2 -2
  36. clitt/core/tui/mselect/menu_select.py +6 -5
  37. clitt/core/tui/table/__init__.py +2 -2
  38. clitt/core/tui/table/table_renderer.py +13 -15
  39. clitt/core/tui/tui_application.py +27 -13
  40. clitt/core/tui/tui_component.py +28 -21
  41. clitt/core/tui/tui_preferences.py +3 -0
  42. clitt/utils/__init__.py +11 -0
  43. clitt/utils/git_utils.py +67 -0
  44. clitt/welcome.txt +6 -6
  45. {hspylib_clitt-0.9.41.dist-info → hspylib_clitt-0.9.51.dist-info}/METADATA +4 -4
  46. hspylib_clitt-0.9.51.dist-info/RECORD +90 -0
  47. clitt/addons/setman/__init__.py +0 -13
  48. clitt/addons/setman/setman.py +0 -148
  49. clitt/addons/setman/setman_config.py +0 -26
  50. clitt/addons/setman/setman_enums.py +0 -54
  51. clitt/core/settings/__init__.py +0 -15
  52. clitt/core/settings/settings.py +0 -182
  53. clitt/core/settings/settings_config.py +0 -47
  54. clitt/core/settings/settings_entry.py +0 -108
  55. clitt/core/settings/settings_repository.py +0 -103
  56. clitt/core/settings/settings_service.py +0 -50
  57. clitt/core/tui/tui_screen.py +0 -222
  58. hspylib_clitt-0.9.41.dist-info/RECORD +0 -94
  59. {hspylib_clitt-0.9.41.dist-info → hspylib_clitt-0.9.51.dist-info}/WHEEL +0 -0
  60. {hspylib_clitt-0.9.41.dist-info → hspylib_clitt-0.9.51.dist-info}/top_level.txt +0 -0
@@ -1,222 +0,0 @@
1
- #!/usr/bin/env python3
2
- # -*- coding: utf-8 -*-
3
-
4
- """
5
- @project: HsPyLib-Clitt
6
- @package: clitt.core.tui
7
- @file: tui_screen.py
8
- @created: Thu, 22 Jun 2023
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
10
- @site: https://github.com/yorevs/hspylib
11
- @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
-
13
- Copyright 2023, HsPyLib team
14
- """
15
- from clitt.core.tui.tui_preferences import TUIPreferences
16
- from hspylib.core.enums.enumeration import Enumeration
17
- from hspylib.core.metaclass.singleton import Singleton
18
- from hspylib.core.tools.commons import sysout
19
- from hspylib.core.tools.text_tools import last_index_of
20
- from hspylib.modules.cli.vt100.vt_code import VtCode
21
- from hspylib.modules.cli.vt100.vt_color import VtColor
22
- from hspylib.modules.cli.vt100.vt_utils import (clear_screen, get_cursor_position, restore_cursor, restore_terminal,
23
- save_cursor, screen_size)
24
- from threading import Timer
25
- from typing import Any, Callable, List, Optional, Tuple, TypeVar, Union
26
-
27
- import atexit
28
- import os
29
- import threading
30
-
31
- DIMENSION = TypeVar("DIMENSION", bound=Tuple[int, ...])
32
-
33
- POSITION = TypeVar("POSITION", bound=Tuple[int, int])
34
-
35
- CB_RESIZE = TypeVar("CB_RESIZE", bound=Callable[[None], None])
36
-
37
- MOVE_DIRECTION = TypeVar("MOVE_DIRECTION", bound="TUIScreen.CursorDirection")
38
-
39
- ERASE_DIRECTION = TypeVar("ERASE_DIRECTION", bound=Union["TUIScreen.CursorDirection", "TUIScreen.ScreenPortion"])
40
-
41
-
42
- class TUIScreen(metaclass=Singleton):
43
- """Provide a base class for terminal UI components."""
44
-
45
- INSTANCE = None
46
-
47
- RESIZE_WATCH_INTERVAL = 0.5
48
-
49
- class CursorDirection(Enumeration):
50
- """Provide a base class for the cursor direction."""
51
-
52
- # fmt: off
53
- UP = '%ED1%', '%CUU({n})%' # Cursor up (line)
54
- RIGHT = '%EL0%', '%CUF({n})%' # Cursor right (forward)
55
- DOWN = '%ED0%', '%CUD({n})%' # Cursor down (line)
56
- LEFT = '%EL1%', '%CUB({n})%' # Cursor left (backward)
57
- # fmt: on
58
-
59
- class ScreenPortion(Enumeration):
60
- """Provide a base class for the portions of the screen."""
61
-
62
- # fmt: off
63
- SCREEN = '%ED2%', '' # Entire screen (screen)
64
- LINE = '%EL2%', '' # Entire line (line)
65
- # fmt: on
66
-
67
- class Cursor(metaclass=Singleton):
68
- """Provide a base class for the screen cursor."""
69
-
70
- CURSOR_HOME = 1, 1
71
-
72
- def __init__(self):
73
- self._position: POSITION = get_cursor_position() or self.CURSOR_HOME
74
- self._bottom: POSITION = self.CURSOR_HOME
75
- self._saved_attrs = self._position, self._bottom
76
-
77
- def __str__(self):
78
- return f"({', '.join(list(map(str, self._position)))})"
79
-
80
- def __repr__(self):
81
- return str(self)
82
-
83
- @property
84
- def position(self) -> POSITION:
85
- return self._position
86
-
87
- @position.setter
88
- def position(self, new_position: POSITION) -> None:
89
- self._bottom = (new_position[0], new_position[1]) if new_position >= self._bottom else self._bottom
90
- self._position = new_position
91
-
92
- @property
93
- def bottom(self) -> POSITION:
94
- return self._bottom
95
-
96
- def home(self) -> None:
97
- """Move the cursor to home position."""
98
- self.move_to(self.CURSOR_HOME[0], self.CURSOR_HOME[1])
99
-
100
- def end(self) -> None:
101
- """Move the cursor to the bottom most position on the screen."""
102
- self.move_to(self.bottom[0], self.bottom[1])
103
-
104
- def move_to(self, row: int = None, column: int = None) -> POSITION:
105
- """Move the cursor to the specified position."""
106
- row_pos = max(self.CURSOR_HOME[0], row if row is not None else self.position[0])
107
- col_pos = max(self.CURSOR_HOME[1], column if column is not None else self.position[1])
108
- sysout(f"%CUP({row_pos};{col_pos})%", end="")
109
- self.position = row_pos, col_pos
110
- return self.position
111
-
112
- def move(self, amount: int, direction: MOVE_DIRECTION) -> POSITION:
113
- """Move the cursor towards the specified direction."""
114
- sysout(direction.value[1].format(n=amount), end="")
115
- row_pos, col_pos = self.position
116
- match direction:
117
- case TUIScreen.CursorDirection.UP:
118
- row_pos -= max(0, amount)
119
- case TUIScreen.CursorDirection.DOWN:
120
- row_pos += max(0, amount)
121
- case TUIScreen.CursorDirection.LEFT:
122
- col_pos -= max(0, amount)
123
- case TUIScreen.CursorDirection.RIGHT:
124
- col_pos += max(0, amount)
125
- self.position = row_pos, col_pos
126
- return self.position
127
-
128
- def erase(self, direction: ERASE_DIRECTION) -> POSITION:
129
- """Erase the screen following the specified direction.
130
- Note: It does not move the cursor along the way."""
131
- sysout(direction.value[0], end="")
132
- return self.position
133
-
134
- def track(self) -> POSITION:
135
- """Track the cursor position."""
136
- self.position = get_cursor_position() or self.position
137
- return self.position
138
-
139
- def write(self, obj: Any, end: str = "") -> POSITION:
140
- """Write the string representation of the object to the screen."""
141
- sysout(obj, end=end)
142
- text = (str(obj) + end).replace("%EOL%", os.linesep)
143
- text = VtColor.strip_colors(VtCode.strip_codes(text))
144
- text_offset = len(text[max(0, last_index_of(text, os.linesep)) :])
145
- self.position = self.position[0] + text.count(os.linesep), text_offset + (
146
- self.position[1] if text.count(os.linesep) == 0 else 0
147
- )
148
- return self.position
149
-
150
- def writeln(self, obj: Any) -> POSITION:
151
- """Write the string representation of the object to the screen, appending a new line."""
152
- return self.write(obj, end=os.linesep)
153
-
154
- def save(self) -> POSITION:
155
- """Save the current cursor position and attributes."""
156
- save_cursor()
157
- self._saved_attrs = self._position, self._bottom
158
- return self.position
159
-
160
- def restore(self) -> POSITION:
161
- """Save the current cursor position and attributes."""
162
- restore_cursor()
163
- self._position = self._saved_attrs[0]
164
- self._bottom = self._saved_attrs[1]
165
- return self.position
166
-
167
- def __init__(self):
168
- self._preferences: TUIPreferences = TUIPreferences.INSTANCE or TUIPreferences()
169
- self._dimension: DIMENSION = screen_size()
170
- self._cursor: TUIScreen.Cursor = self.Cursor()
171
- self._resize_timer: Optional[Timer] = None
172
- self._cb_watchers: List[CB_RESIZE] = []
173
-
174
- atexit.register(restore_terminal)
175
- self._resize_watcher()
176
-
177
- def __str__(self):
178
- return f"TUIScreen(rows={self.rows}, columns={self.columns}, cursor={self.cursor})"
179
-
180
- def __repr__(self):
181
- return str(self)
182
-
183
- @property
184
- def preferences(self) -> TUIPreferences:
185
- return self._preferences
186
-
187
- @property
188
- def dimension(self) -> DIMENSION:
189
- return self._dimension
190
-
191
- @property
192
- def rows(self) -> int:
193
- return self._dimension[0]
194
-
195
- @property
196
- def columns(self) -> int:
197
- return self._dimension[1]
198
-
199
- @property
200
- def cursor(self) -> Cursor:
201
- return self._cursor
202
-
203
- def clear(self) -> None:
204
- """Clear the entire screen and move the cursor home."""
205
- clear_screen()
206
- self._cursor.home()
207
-
208
- def add_watcher(self, watcher: CB_RESIZE) -> None:
209
- """Add a resize watcher."""
210
- self._cb_watchers.append(watcher)
211
- if not self._resize_timer:
212
- self._resize_watcher()
213
-
214
- def _resize_watcher(self) -> None:
215
- """Add a watcher for screen resizes. If a resize is detected, the callback is called with the new dimension."""
216
- if self._cb_watchers and threading.main_thread().is_alive():
217
- dimension: DIMENSION = screen_size()
218
- self._resize_timer = Timer(self.RESIZE_WATCH_INTERVAL, self._resize_watcher)
219
- if dimension != self._dimension:
220
- list(map(lambda cb_w: cb_w(), self._cb_watchers))
221
- self._dimension = dimension
222
- self._resize_timer.start()
@@ -1,94 +0,0 @@
1
- clitt/.version,sha256=bMVFlT_4Puym0BzsglaZmuYxW-b7mDddvOpIPNcZ9v8,7
2
- clitt/__classpath__.py,sha256=j7k_kckSu-7r0RB630enzF3JH_1z2J7RByxp2ZZNdmg,717
3
- clitt/__init__.py,sha256=amd0_NegCohwezpaD1PhgIwYLAQCU-gByFz7bZB99BY,164
4
- clitt/__main__.py,sha256=oRU7vQuKIWyArdoXrseaVlUGkkK0n8Z0iFOwXDYOA48,6968
5
- clitt/welcome.txt,sha256=x4oQU6m_9g75x4d7tLriPkFR6I_4MLhlHRzqwBIC-lA,452
6
- clitt/addons/__init__.py,sha256=44MYVnSnVH3Ft-dCTumsfAOLBI9V4nYCd4PYv61Z9yM,186
7
- clitt/addons/appman/__init__.py,sha256=yUgDmYQbLwEZ51o5KOXdYYDpFpf4HmRYRppWQct4Mb8,202
8
- clitt/addons/appman/appman.py,sha256=-fwijYySTWoyoAwzWFycIdScBkStH7VLFr-4bFuGXw8,13150
9
- clitt/addons/appman/appman_enums.py,sha256=vBCmCSGYfVY1VwyEAw9UzbcvNkZSGvHtlUhBBMgcDz0,872
10
- clitt/addons/appman/templates/__init__.py,sha256=7vaTOVdeIu9mg0tADgD7vOpakZOT2XlSAXt9Lvgf2q0,169
11
- clitt/addons/appman/templates/build.gradle.tpl,sha256=VQKs4r41xPr7P14PtQPt3alYCmNuXaGraaXbKB_FKkM,1817
12
- clitt/addons/appman/templates/classpath.py.tpl,sha256=R60uLvVxeJ7nJCXCvav_9LAnDe5VOfJqWO-T1QAlwAc,397
13
- clitt/addons/appman/templates/dependencies.hspd.tpl,sha256=bbVNU6XBm5QT28lvH7Bp_4nlXvoD-LwX5kGQ-CPhOEA,764
14
- clitt/addons/appman/templates/gitignore.tpl,sha256=OLb8eoac2nnG1lvZL2l7J_3mc94i6xTuIfCV-J8aFSM,903
15
- clitt/addons/appman/templates/main.py.tpl,sha256=bHvc8yrqn-8Ksm0vaBxufGaWwvsEd27DX8YPYULLDro,1506
16
- clitt/addons/appman/templates/main_qt.py.tpl,sha256=1nlBCVjZZmIackSpBQwgWm6ygYQGpjodI9oHuLucw58,1043
17
- clitt/addons/appman/templates/main_qt_view.py.tpl,sha256=mGGsuXY88MPugt9fvZdCK_yiAxedTeikrcSIWeHh8Jc,626
18
- clitt/addons/appman/templates/main_qt_view.ui.tpl,sha256=JbEz9xU_50_Fd8FCKC33WPCz4De0egg1eW2xvP8wzJI,2780
19
- clitt/addons/appman/templates/run.sh.tpl,sha256=2xpuHjZP9-7j14dAA2CqPm4G2xtnuenf-RBe3LdC2rI,150
20
- clitt/addons/appman/templates/test_main.py.tpl,sha256=x_xuKy2O2b1bs6tuzOUqF5shnx-2-EfFRc7sBV4Fndc,1239
21
- clitt/addons/appman/templates/usage.txt.tpl,sha256=R0e48HCeD7PDbWnX6HGIjz6gr_hBdp-zK6V42U1Aexw,217
22
- clitt/addons/appman/templates/widget.py.tpl,sha256=JmlO5rh2ETCF5ldiB9MStfjB4oB4JLI8UUnNP5SAAcM,1668
23
- clitt/addons/setman/__init__.py,sha256=0g55Z7qdRcSRLDx-5_wKBHcCS8IT5Xc0a2me_A97udE,206
24
- clitt/addons/setman/setman.py,sha256=ASkaSPCUnV6D_l9Uwmuc_A_ueMZnXKv1rpEpV3Gb60o,5606
25
- clitt/addons/setman/setman_config.py,sha256=jTREC8x4cYleA9B3GbkeyuQkGNfYk6gncH4qJ3VgJck,827
26
- clitt/addons/setman/setman_enums.py,sha256=2RIZRyLbfUmbuaJR_x7gKC9nuofBbTP18sxFMRaJwLw,1280
27
- clitt/addons/widman/__init__.py,sha256=WPQ89aL4WmVP0-Jbp2xCg4O1lJjjGgKWz11RS3pq6g0,213
28
- clitt/addons/widman/widget.py,sha256=mIEB3Fs4ypaUMhh85meg2vMhKJVjW8Tyxkp_XqHIHtA,1920
29
- clitt/addons/widman/widget_entry.py,sha256=8Shj4_esh6KN69usTrCcUsfGVas81Xz0QabsY_zV9o0,1350
30
- clitt/addons/widman/widman.py,sha256=kfv3CcDSjUZglurPXa4Bv1jYELtEkbixOjpVL8yRf3M,5260
31
- clitt/addons/widman/widgets/__init__.py,sha256=EqWldlczNf3OZctZon2YO4jBlTigQ3nhzgNg0lswWfA,244
32
- clitt/addons/widman/widgets/widget_free.py,sha256=5imXWD4F984KqwcWuI-ZuBaF1gtNha0TAmmaiIZ-MVg,3997
33
- clitt/addons/widman/widgets/widget_punch.py,sha256=YQ27qC15gyt1jn-R4oNumVLVbMzbs3s7I0yLPqpR8xY,10535
34
- clitt/addons/widman/widgets/widget_send_msg.py,sha256=MMBOGTBc6c3jgLgZBzbQIiQsSs5jl-8ohqy7evMSNQU,11056
35
- clitt/addons/widman/widgets/widget_time_calc.py,sha256=JQOHRf5OFDL73Y-GJEWtdN5_s2vKR-9mX0yoisxNQRg,5100
36
- clitt/core/__init__.py,sha256=V5kSvNXhj66NE8XPh9kJ8_NdwBvEk6ljPKE08caW4C0,182
37
- clitt/core/icons/__init__.py,sha256=9x0_25QYPUDTi3tZgrGntBiAo_OUukBCB9fTIg4uyLs,183
38
- clitt/core/icons/emojis/__init__.py,sha256=V8lfW4y7PaMlyLzAP_eesjQfyij-c6dRjBiMYoy0sdU,190
39
- clitt/core/icons/emojis/emojis.py,sha256=LbwpjJonRlNVPa6eMEDTreQz1fmFfFK4dOk6X-4XHrI,1109
40
- clitt/core/icons/emojis/face_smiling.py,sha256=qho6t7W3za6-H9bW51_0RoYKah_f0_DCJ0EiCiwvQwI,1269
41
- clitt/core/icons/font_awesome/__init__.py,sha256=MPUx1veXCxxU52RZVqzw7c8gA400IDm-ZswYfkPADYg,288
42
- clitt/core/icons/font_awesome/app_icons.py,sha256=cMPlXVWOn5YnLmlk20nwhFgA16Ug2jFiHZPYlwwH724,1662
43
- clitt/core/icons/font_awesome/awesome.py,sha256=oEOi0DWj0yvJbmg18fXE5hgSrMmCckTYC0cbgw1cyQQ,1831
44
- clitt/core/icons/font_awesome/control_icons.py,sha256=OuAnvXRIusxDRVnPHxltTn4V6tF_uc2gfoqoQWB7Bks,1075
45
- clitt/core/icons/font_awesome/dashboard_icons.py,sha256=MGXLJ-I_xXalOaLeWHkaZe5ZIqdycNLg4S-L7abBHEU,3085
46
- clitt/core/icons/font_awesome/form_icons.py,sha256=mDF_0nFJ9VYO2ZoXWSTETm7qEd03dcIgeCUpFnH0sLI,2314
47
- clitt/core/icons/font_awesome/nav_icons.py,sha256=A3GqJuwD-RKybY67THimI1oqcNlDSEaA_Hdy8LSzfqo,1105
48
- clitt/core/icons/font_awesome/widget_icons.py,sha256=Oho4jPezyMSw-tKWSjpdK3dv-FK2GC_62liNeThhhAs,1024
49
- clitt/core/settings/__init__.py,sha256=cAmkcHWr9sYLwt4qBqT_8eln04Lkv7EICTveJFw0VkQ,261
50
- clitt/core/settings/settings.py,sha256=StADql3wxNnjjJ4be-i1UlRjmMVidvbHSuyTO4Zi7xg,6940
51
- clitt/core/settings/settings_config.py,sha256=iSNvXrlZLV9a3rveese1dnJJ3G2D3XqLFPjUqasblaE,1404
52
- clitt/core/settings/settings_entry.py,sha256=zrN34_Q5eDMfsP_zor04CWlrmFpPsyS97ODKSAckxd4,3453
53
- clitt/core/settings/settings_repository.py,sha256=hWAxIbJe_5Bldmm0OtlSDS1i-H4AbNW1Vzq3nhXG_k4,3598
54
- clitt/core/settings/settings_service.py,sha256=JvRCtxM9iYV495bkFk3GUt0O2nLbEsSauC-OGK7H8wE,1759
55
- clitt/core/tui/__init__.py,sha256=8HPdzPJ7HQ6H36QZDdn5RHbiPBMU6zmtpBwlUkUNYpM,311
56
- clitt/core/tui/tui_application.py,sha256=kBYc_IUrVrZ6v7MZ6A8QJ9hONDpXwqO9TqJa_XBsM8E,1611
57
- clitt/core/tui/tui_component.py,sha256=TXHmSQYowmeuUcj_V4y-W94BlTNfsZaA_RsYr_mlA_w,4670
58
- clitt/core/tui/tui_preferences.py,sha256=Qh9TKtGT_XFSyoW3dUoKKoPrzwG7im6k_lFbRZRKojo,4712
59
- clitt/core/tui/tui_screen.py,sha256=oLT-3YRbZR24yd0tzboB4gLr45mECUsyxtlEocbn4hs,8372
60
- clitt/core/tui/mchoose/__init__.py,sha256=2g0N07krOljHfM9rKJtqKK4emfiKMqPTmplqCntzoTc,189
61
- clitt/core/tui/mchoose/mchoose.py,sha256=ZW7mr7WCP2Lc545PBy2-QRaUt6BNYP5cAwczooU86eU,1180
62
- clitt/core/tui/mchoose/menu_choose.py,sha256=ghPyNzkBz8YPtQGp91kFrLwHgyW0-nf0YFEmeDO2b6E,7012
63
- clitt/core/tui/mdashboard/__init__.py,sha256=YzEIT5TMjw3FdJDW62vjqu1yauQSzj0GxI5ChAdsXkE,243
64
- clitt/core/tui/mdashboard/dashboard_builder.py,sha256=wWcT1UyQnOrvalV920XtmBUg5lRVbhA8hMrmxRcLrtY,1658
65
- clitt/core/tui/mdashboard/dashboard_item.py,sha256=4MK6bxROWo1ZK9FlMoSm38z0qe5HoxqH0W5tt3iUT5M,886
66
- clitt/core/tui/mdashboard/mdashboard.py,sha256=juNPFzmoKQRJa2CZFxVZAFr2QXFna3cvsoYlFNaQjis,890
67
- clitt/core/tui/mdashboard/menu_dashboard.py,sha256=PwZ4YwcF_CODvWlGH6ekDgRUuSV6pHEnj3ehwv2mIVY,5524
68
- clitt/core/tui/menu/__init__.py,sha256=Xx_uSJCLYxm9pZfm2tPgrIvw7mkrau0buUXUNLNcEJE,272
69
- clitt/core/tui/menu/tui_menu.py,sha256=nAux3qJ6_kyvV6Z2IbIG6dS62zFfTo5qA4rB8cXAIYk,3593
70
- clitt/core/tui/menu/tui_menu_action.py,sha256=KqhG_YkEMWF37uoI7Q_bCr3jHLIeTbDr_-uROuhAvB0,1590
71
- clitt/core/tui/menu/tui_menu_factory.py,sha256=rL33KX5yD2ppvVRAEFIAme5ka7GrBQecVr63aUf2hf0,4459
72
- clitt/core/tui/menu/tui_menu_item.py,sha256=ZZA4maFlzVERlHkKygIuCuOS5ljOIg2wpL_e2M6MMpo,7480
73
- clitt/core/tui/menu/tui_menu_ui.py,sha256=mwXvTDHKctMVUOPMZiN0fFxgx0ASHOTYuk-R7UVoxYg,3424
74
- clitt/core/tui/menu/tui_menu_view.py,sha256=WWcMqWsPgFX7XoyU9Z5q_zCP_wboc69SPWM0bnQWKFQ,1942
75
- clitt/core/tui/minput/__init__.py,sha256=PVqosPDOpKBujVlYGqb8mZluWB3S6pXBOsVr_UwCbns,318
76
- clitt/core/tui/minput/access_type.py,sha256=Dss6okfXHCoUI3_OOu2nKsgpy2NeStIwhdDvTR2z-2w,636
77
- clitt/core/tui/minput/field_builder.py,sha256=5te6nDYHCa9VmzGK0b1lXRCc7n4GbMIVIR2InLdLzXg,4414
78
- clitt/core/tui/minput/form_builder.py,sha256=CwUpswLD9rTCs3PXaOpu0bFKavHsbUkgs4OnQgbS-RQ,2865
79
- clitt/core/tui/minput/form_field.py,sha256=5p-IT_2RgzkU4RfyXihrNdD9_yV4X5FqNgIckDE9zEQ,5766
80
- clitt/core/tui/minput/input_type.py,sha256=O6-jk_QSjjRGeHsGVzIDZSCLg739f2xtnVV_ElcHYpA,722
81
- clitt/core/tui/minput/input_validator.py,sha256=XjK9O435OIvuyAHAY7XJt_ELvJ-sJsWIO-jv6hVt2-c,3360
82
- clitt/core/tui/minput/menu_input.py,sha256=rL_lgcCC0Q6FbDECmUGlfHwKOHjYjBpUhpiFFzGZCM8,12749
83
- clitt/core/tui/minput/minput.py,sha256=20Vz-SRVaNuqYJrG6kdkdE4bVy_YNjXEcYaFEnRCqNQ,1532
84
- clitt/core/tui/minput/minput_utils.py,sha256=KAWUBPORhbv-s2ycHAHoSLeLWoRRgzUST7lm2FPskXQ,5277
85
- clitt/core/tui/mselect/__init__.py,sha256=mSwPMcSbU2hBGofaC2y1ZGcf6tw0ZKe02ZyVN13F2DA,189
86
- clitt/core/tui/mselect/menu_select.py,sha256=k6Gpqkrbrkstp84KKhvxrmrpwNYp99jmR_EOl4SP5Ow,6174
87
- clitt/core/tui/mselect/mselect.py,sha256=3Q4X2XMqhXCicO5XhDXsldn9m-1bWOQ9ez1MLMj8fps,1040
88
- clitt/core/tui/table/__init__.py,sha256=nKtKp_w_a3mwuvrwAsYHS7_Vt8CsKWbAS3uBT0o_rC0,194
89
- clitt/core/tui/table/table_enums.py,sha256=gbA2e7kgpjLjL8oxbIGalcX-cyaXPfdXy01wzivqpWc,1183
90
- clitt/core/tui/table/table_renderer.py,sha256=2vn0-3OuSA5tMdsfQJMtgSVXMFMuy-EAmrUIH2AiH2g,9646
91
- hspylib_clitt-0.9.41.dist-info/METADATA,sha256=Tvztfk_3VYqGz4l5jrPA0AhJokvThPEaxOfpS3bU1Zs,1728
92
- hspylib_clitt-0.9.41.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
93
- hspylib_clitt-0.9.41.dist-info/top_level.txt,sha256=vrnpkFU7dZ-vH7x5xdcY1vJSuboTqPBUcc3jD6SJkAo,6
94
- hspylib_clitt-0.9.41.dist-info/RECORD,,