hspylib-clitt 0.9.126__py3-none-any.whl → 0.9.128__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 (84) hide show
  1. clitt/.version +1 -1
  2. clitt/__classpath__.py +1 -1
  3. clitt/__init__.py +2 -2
  4. clitt/__main__.py +1 -1
  5. clitt/addons/__init__.py +2 -2
  6. clitt/addons/appman/__init__.py +2 -2
  7. clitt/addons/appman/appman.py +1 -1
  8. clitt/addons/appman/appman_enums.py +1 -1
  9. clitt/addons/appman/templates/__init__.py +2 -2
  10. clitt/addons/widman/__init__.py +2 -2
  11. clitt/addons/widman/widget.py +1 -1
  12. clitt/addons/widman/widget_entry.py +1 -1
  13. clitt/addons/widman/widgets/__init__.py +2 -2
  14. clitt/addons/widman/widgets/widget_free.py +1 -1
  15. clitt/addons/widman/widgets/widget_punch.py +1 -1
  16. clitt/addons/widman/widgets/widget_send_msg.py +1 -1
  17. clitt/addons/widman/widgets/widget_time_calc.py +1 -1
  18. clitt/addons/widman/widman.py +1 -1
  19. clitt/core/__init__.py +2 -2
  20. clitt/core/exception/__init__.py +2 -2
  21. clitt/core/exception/exceptions.py +1 -1
  22. clitt/core/icons/__init__.py +2 -2
  23. clitt/core/icons/emojis/__init__.py +2 -2
  24. clitt/core/icons/emojis/emojis.py +1 -1
  25. clitt/core/icons/emojis/face_smiling.py +1 -1
  26. clitt/core/icons/font_awesome/__init__.py +2 -2
  27. clitt/core/icons/font_awesome/app_icons.py +1 -1
  28. clitt/core/icons/font_awesome/awesome.py +1 -1
  29. clitt/core/icons/font_awesome/dashboard_icons.py +1 -1
  30. clitt/core/icons/font_awesome/form_icons.py +1 -1
  31. clitt/core/icons/font_awesome/game_icons.py +1 -1
  32. clitt/core/icons/font_awesome/nav_icons.py +1 -1
  33. clitt/core/icons/font_awesome/trickplay_icons.py +1 -1
  34. clitt/core/icons/font_awesome/widget_icons.py +1 -1
  35. clitt/core/preferences.py +1 -1
  36. clitt/core/term/__init__.py +2 -2
  37. clitt/core/term/commons.py +1 -1
  38. clitt/core/term/cursor.py +18 -8
  39. clitt/core/term/screen.py +1 -1
  40. clitt/core/term/terminal.py +8 -4
  41. clitt/core/tui/__init__.py +2 -2
  42. clitt/core/tui/line_input/__init__.py +2 -2
  43. clitt/core/tui/line_input/keyboard_input.py +122 -86
  44. clitt/core/tui/line_input/line_input.py +1 -1
  45. clitt/core/tui/mchoose/__init__.py +2 -2
  46. clitt/core/tui/mchoose/mchoose.py +1 -1
  47. clitt/core/tui/mchoose/menu_choose.py +1 -1
  48. clitt/core/tui/mdashboard/__init__.py +2 -2
  49. clitt/core/tui/mdashboard/dashboard_builder.py +1 -1
  50. clitt/core/tui/mdashboard/dashboard_item.py +1 -1
  51. clitt/core/tui/mdashboard/mdashboard.py +1 -1
  52. clitt/core/tui/mdashboard/menu_dashboard.py +1 -1
  53. clitt/core/tui/menu/__init__.py +2 -2
  54. clitt/core/tui/menu/tui_menu.py +1 -1
  55. clitt/core/tui/menu/tui_menu_action.py +1 -1
  56. clitt/core/tui/menu/tui_menu_factory.py +1 -1
  57. clitt/core/tui/menu/tui_menu_item.py +1 -1
  58. clitt/core/tui/menu/tui_menu_ui.py +1 -1
  59. clitt/core/tui/menu/tui_menu_view.py +1 -1
  60. clitt/core/tui/minput/__init__.py +2 -2
  61. clitt/core/tui/minput/access_type.py +1 -1
  62. clitt/core/tui/minput/field_builder.py +1 -1
  63. clitt/core/tui/minput/form_builder.py +1 -1
  64. clitt/core/tui/minput/form_field.py +1 -1
  65. clitt/core/tui/minput/input_type.py +1 -1
  66. clitt/core/tui/minput/input_validator.py +1 -1
  67. clitt/core/tui/minput/menu_input.py +1 -1
  68. clitt/core/tui/minput/minput.py +1 -1
  69. clitt/core/tui/minput/minput_utils.py +1 -1
  70. clitt/core/tui/mselect/__init__.py +2 -2
  71. clitt/core/tui/mselect/menu_select.py +1 -1
  72. clitt/core/tui/mselect/mselect.py +1 -1
  73. clitt/core/tui/table/__init__.py +2 -2
  74. clitt/core/tui/table/table_enums.py +1 -1
  75. clitt/core/tui/table/table_renderer.py +1 -1
  76. clitt/core/tui/tui_application.py +3 -3
  77. clitt/core/tui/tui_component.py +29 -19
  78. clitt/core/tui/tui_preferences.py +1 -1
  79. clitt/utils/__init__.py +2 -2
  80. {hspylib_clitt-0.9.126.dist-info → hspylib_clitt-0.9.128.dist-info}/METADATA +2 -2
  81. hspylib_clitt-0.9.128.dist-info/RECORD +97 -0
  82. {hspylib_clitt-0.9.126.dist-info → hspylib_clitt-0.9.128.dist-info}/WHEEL +1 -1
  83. hspylib_clitt-0.9.126.dist-info/RECORD +0 -97
  84. {hspylib_clitt-0.9.126.dist-info → hspylib_clitt-0.9.128.dist-info}/top_level.txt +0 -0
@@ -6,26 +6,32 @@
6
6
  @package: main.clitt.core.tui.line_input
7
7
  @file: keyboard_input.py
8
8
  @created: Wed, 17 Jan 2024
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
13
13
  Copyright·(c)·2024,·HSPyLib
14
14
  """
15
+ import os
16
+ from collections import defaultdict
17
+ from typing import Optional, Callable, TypeAlias
15
18
 
16
- from typing import Optional
17
-
18
- from clitt.core.term.commons import Direction
19
+ from clitt.core.term.commons import Direction, Position
19
20
  from clitt.core.term.terminal import Terminal
20
21
  from clitt.core.tui.tui_component import TUIComponent
21
22
  from hspylib.core.tools.dict_tools import get_or_default
22
23
  from hspylib.modules.cli.keyboard import Keyboard
23
24
  from hspylib.modules.cli.vt100.vt_color import VtColor
24
25
 
26
+ KeyBinding: TypeAlias = dict[Keyboard, Callable[[], None]]
27
+
25
28
 
26
29
  class KeyboardInput(TUIComponent):
27
30
  """Provides a keyboard input for terminal UIs with undo and history."""
28
31
 
32
+ # minimum length to be considered as history store.
33
+ _MIN_HIST_STORE_LEN: int = 3
34
+
29
35
  # Current history index.
30
36
  _HIST_INDEX: int = 0
31
37
 
@@ -64,6 +70,8 @@ class KeyboardInput(TUIComponent):
64
70
  """Add the following input to the history set.
65
71
  :param input_text: The input text to add to the history.
66
72
  """
73
+ if not len(input_text) > cls._MIN_HIST_STORE_LEN:
74
+ return
67
75
  if cls._HISTORY[-1] != '':
68
76
  cls._HISTORY.append('')
69
77
  if input_text:
@@ -96,136 +104,164 @@ class KeyboardInput(TUIComponent):
96
104
  text_color: VtColor = VtColor.NC,
97
105
  navbar_enable: bool = False,
98
106
  ):
107
+ self._HISTORY[-1] = ""
108
+ self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
99
109
  super().__init__(prompt)
100
110
  self._placeholder: str = placeholder
101
111
  self._prompt_color: VtColor = prompt_color
102
112
  self._text_color: VtColor = text_color
103
113
  self._navbar_enable: bool = navbar_enable
114
+ self._offset: Position = 0, 0
104
115
  self._input_index: int = 0
105
116
  self._input_text: str = ""
106
117
  self._suggestion: str = ""
107
- self._HISTORY[-1] = ""
108
- self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
118
+ self._bindings: KeyBinding = defaultdict()
119
+ self._bind_keys()
120
+
121
+ @property
122
+ def prompt(self) -> str:
123
+ return f"{self.prompt_color}{self.title}{self.text_color}"
124
+
125
+ @property
126
+ def text(self) -> str:
127
+ return self._input_text
128
+
129
+ @text.setter
130
+ def text(self, value: str) -> None:
131
+ self._input_text = value
109
132
 
110
133
  @property
111
134
  def length(self) -> int:
112
- return len(self._input_text) if self._input_text else 0
135
+ return len(self.text) if self.text else 0
113
136
 
114
- def _prepare_render(self, auto_wrap: bool = True, show_cursor: bool = True) -> None:
115
- self.screen.add_watcher(self.invalidate)
116
- Terminal.set_auto_wrap(auto_wrap)
117
- Terminal.set_show_cursor(show_cursor)
118
- self.cursor.save()
137
+ @property
138
+ def prompt_color(self) -> str:
139
+ return self._prompt_color.placeholder
119
140
 
120
- def execute(self) -> Optional[str | Keyboard]:
121
- self._prepare_render()
122
- keypress = self._loop() or Keyboard.VK_ESC
141
+ @property
142
+ def text_color(self) -> str:
143
+ return self._text_color.placeholder
123
144
 
145
+ @property
146
+ def placeholder(self) -> str:
147
+ return self._placeholder
148
+
149
+ @property
150
+ def bindings(self) -> KeyBinding:
151
+ return self._bindings
152
+
153
+ def execute(self) -> Optional[str | Keyboard]:
154
+ keypress = self._loop(cleanup=False) or Keyboard.VK_ESC
124
155
  if keypress.isEnter():
125
- self._add_history(self._input_text)
156
+ self._add_history(self.text)
126
157
  self._UNDO_HISTORY.clear()
127
158
  self._REDO_HISTORY.clear()
128
- Terminal.set_show_cursor(False)
129
- self.cursor.restore()
130
- self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
131
- self.write(self._input_text)
132
- self._terminal.cursor.erase(Direction.DOWN)
133
- Terminal.set_show_cursor(True)
159
+ self.cursor.erase(Direction.DOWN)
134
160
  elif keypress == Keyboard.VK_ESC:
135
- self._input_text = None
161
+ self.text = None
136
162
  self.writeln("%NC%")
137
163
 
138
- return self._input_text
164
+ return self.text
139
165
 
140
166
  def reset(self) -> None:
141
167
  """Reset the contents of the input."""
142
168
  self._input_index = 0
143
169
  self._update_input("")
144
170
 
145
- def _loop(self, break_keys: list[Keyboard] = None) -> Keyboard:
146
- break_keys = break_keys or Keyboard.break_keys()
147
- keypress = Keyboard.VK_NONE
171
+ def home(self) -> None:
172
+ """Place the cursor at the start of the input text."""
173
+ self._input_index = 0
148
174
 
149
- # Wait for user interaction
150
- while not self._done and keypress and keypress not in break_keys:
151
- # Menu Renderization
152
- if self._re_render:
153
- self.render()
154
- # Navigation input
155
- keypress = self.handle_keypress()
175
+ def end(self) -> None:
176
+ """Place the cursor at the end of the input text."""
177
+ self._input_index = self.length
156
178
 
157
- return keypress
179
+ def complete(self) -> None:
180
+ """Complete the input text with the suggested text."""
181
+ text: str = self.text + self._suggestion
182
+ self._update_input(text)
183
+ self._input_index = len(text)
158
184
 
159
185
  def render(self) -> None:
160
186
  Terminal.set_show_cursor(False)
161
- self.cursor.restore()
162
- self._terminal.cursor.erase(Direction.DOWN)
163
- self.write(f"{self._prompt_color.placeholder}{self.title}{self._text_color.placeholder}")
164
- if self._input_text:
165
- self.write(self._input_text)
166
- self._write_suggestion()
187
+ self.cursor.move(self._offset[0], Direction.UP)
188
+ self.cursor.move(self._offset[1], Direction.LEFT)
189
+ self.cursor.erase(Direction.DOWN)
190
+ self.write(self.prompt)
191
+ if self.text:
192
+ self.write(self.text)
193
+ self._render_suggestions()
167
194
  else:
168
- self.write(f"%GRAY%{self._placeholder}%NC%")
169
- self._terminal.cursor.erase(Direction.DOWN)
170
- self.cursor.move(len(self._placeholder), Direction.LEFT)
195
+ self.write(f"%GRAY%{self.placeholder}%NC%")
196
+ self.cursor.erase(Direction.DOWN)
197
+ self.cursor.move(len(self.placeholder), Direction.LEFT)
171
198
  self._re_render = False
172
199
  self._set_cursor_pos()
200
+ self._offset = self.prompt.count(os.linesep), self.cursor.position[1]
173
201
  Terminal.set_show_cursor()
174
202
 
175
203
  def navbar(self, **kwargs) -> str:
176
- pass
204
+ ...
177
205
 
178
206
  def handle_keypress(self) -> Keyboard:
179
207
  if keypress := Keyboard.wait_keystroke():
180
208
  match keypress:
209
+ # Default key bindings.
181
210
  case Keyboard.VK_BACKSPACE:
182
211
  if self._input_index > 0:
183
212
  self._input_index = max(0, self._input_index - 1)
184
213
  self._update_input(
185
- self._input_text[: self._input_index] + self._input_text[1 + self._input_index:]
214
+ self.text[: self._input_index] + self.text[1 + self._input_index:]
186
215
  )
187
216
  case Keyboard.VK_DELETE:
188
217
  self._update_input(
189
- self._input_text[: self._input_index] + self._input_text[1 + self._input_index:]
218
+ self.text[: self._input_index] + self.text[1 + self._input_index:]
190
219
  )
191
- case Keyboard.VK_CTRL_R:
192
- self.reset()
193
- case Keyboard.VK_CTRL_F:
194
- self.forget_history()
195
220
  case Keyboard.VK_LEFT:
196
221
  self._input_index = max(0, self._input_index - 1)
197
222
  case Keyboard.VK_RIGHT:
198
223
  self._input_index = min(self.length, self._input_index + 1)
199
224
  case Keyboard.VK_UP:
200
- self._input_text = self._prev_in_history()
225
+ self.text = self._prev_in_history()
201
226
  self._input_index = self.length
202
227
  case Keyboard.VK_DOWN:
203
- self._input_text = self._next_in_history()
204
- self._input_index = self.length
205
- case Keyboard.VK_HOME:
206
- self._input_index = 0
207
- case Keyboard.VK_END:
208
- self._input_index = self.length
209
- case Keyboard.VK_TAB:
210
- self._update_input(self._input_text + self._suggestion)
228
+ self.text = self._next_in_history()
211
229
  self._input_index = self.length
230
+ # Customizable key bindings.
231
+ case _ as key if key in self.bindings:
232
+ if (fn := self.bindings[key]) and callable(fn):
233
+ fn()
234
+ # Printable characters
212
235
  case _ as key if key.val.isprintable():
213
236
  text: str = key.val
214
237
  while (key := Keyboard.wait_keystroke(False)) != Keyboard.VK_NONE:
215
238
  if key.val and key.val.isprintable():
216
239
  text += key.val
217
240
  self._update_input(
218
- self._input_text[: self._input_index] + text + self._input_text[self._input_index:])
241
+ self.text[: self._input_index] + text + self.text[self._input_index:])
219
242
  self._input_index += len(text)
243
+ # Loop breaking characters
220
244
  case _ as key if key in Keyboard.break_keys():
221
245
  self._done = True
222
246
  case _:
223
- self._input_text = keypress
247
+ self.text = keypress
224
248
  self._done = True
225
249
  self._re_render = True
226
250
 
227
251
  return keypress
228
252
 
253
+ def _bind_keys(self) -> None:
254
+ """Configure the default key bindings."""
255
+ self._bindings.update({
256
+ Keyboard.VK_CTRL_A: self.home,
257
+ Keyboard.VK_CTRL_E: self.end,
258
+ Keyboard.VK_CTRL_R: self.reset,
259
+ Keyboard.VK_CTRL_F: self.forget_history,
260
+ Keyboard.VK_HOME: self.home,
261
+ Keyboard.VK_END: self.end,
262
+ Keyboard.VK_TAB: self.complete
263
+ })
264
+
229
265
  def _set_cursor_pos(self):
230
266
  """Set the cursor position on the input."""
231
267
  index_offset = max(0, self.length - self._input_index)
@@ -235,12 +271,33 @@ class KeyboardInput(TUIComponent):
235
271
  """Update the value of the input.
236
272
  :param text: The text to be set.
237
273
  """
238
- self._UNDO_HISTORY.append(self._input_text)
239
- self._HISTORY[-1] = text if text not in self._HISTORY else self._input_text
240
- self._input_text = text
274
+ self._UNDO_HISTORY.append(self.text)
275
+ self._HISTORY[-1] = text if text not in self._HISTORY else self.text
276
+ self.text = text
241
277
  self._HIST_INDEX = max(0, len(self._HISTORY) - 1)
242
278
  return text
243
279
 
280
+ def _render_suggestions(self) -> None:
281
+ """Render the input suggestions."""
282
+ edt_text: str = self.text
283
+ filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
284
+ hint: str = ''
285
+
286
+ if edt_text and edt_text in filtered:
287
+ edt_idx = filtered.index(edt_text) - 1
288
+ index = max(0, min(edt_idx, self._HIST_INDEX))
289
+ hint: str = get_or_default(filtered, index, '') or filtered[-1]
290
+ if hint and (hint := hint[len(edt_text):]):
291
+ self.write(f"%GRAY%{hint}%NC%")
292
+ self._terminal.cursor.erase(Direction.DOWN)
293
+ self.cursor.move(len(hint), Direction.LEFT)
294
+ else:
295
+ self._terminal.cursor.erase(Direction.DOWN)
296
+ else:
297
+ self._terminal.cursor.erase(Direction.DOWN)
298
+
299
+ self._suggestion = hint
300
+
244
301
  def _next_in_history(self) -> str:
245
302
  """Return the next input in history."""
246
303
  edt_text: str = self._HISTORY[-1]
@@ -264,24 +321,3 @@ class KeyboardInput(TUIComponent):
264
321
  self._HIST_INDEX = filtered.index(text)
265
322
  return text
266
323
  return edt_text
267
-
268
- def _write_suggestion(self) -> None:
269
- """TODO """
270
- edt_text: str = self._input_text
271
- filtered: list[str] = list(filter(lambda h: h.startswith(edt_text), self._HISTORY))
272
- hint: str = ''
273
-
274
- if edt_text and edt_text in filtered:
275
- edt_idx = filtered.index(edt_text) - 1
276
- index = max(0, min(edt_idx, self._HIST_INDEX))
277
- hint: str = get_or_default(filtered, index, '') or filtered[-1]
278
- if hint and (hint := hint[len(edt_text):]):
279
- self.write(f"%GRAY%{hint}%NC%")
280
- self._terminal.cursor.erase(Direction.DOWN)
281
- self.cursor.move(len(hint), Direction.LEFT)
282
- else:
283
- self._terminal.cursor.erase(Direction.DOWN)
284
- else:
285
- self._terminal.cursor.erase(Direction.DOWN)
286
-
287
- self._suggestion = hint
@@ -6,7 +6,7 @@
6
6
  @package: main.clitt.core.tui.line_input
7
7
  @file: line_input.py
8
8
  @created: Wed, 17 Jan 2024
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.126
3
+ # hspylib-clitt v0.9.128
4
4
  #
5
5
  # Package: main.clitt.core.tui.mchoose
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'mchoose',
10
10
  'menu_choose'
11
11
  ]
12
- __version__ = '0.9.126'
12
+ __version__ = '0.9.128'
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mchoose
7
7
  @file: mchoose.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mchoose
7
7
  @file: menu_choose.py
8
8
  @created: Wed, 17 May 2023
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.126
3
+ # hspylib-clitt v0.9.128
4
4
  #
5
5
  # Package: main.clitt.core.tui.mdashboard
6
6
  """Package initialization."""
@@ -11,4 +11,4 @@ __all__ = [
11
11
  'mdashboard',
12
12
  'menu_dashboard'
13
13
  ]
14
- __version__ = '0.9.126'
14
+ __version__ = '0.9.128'
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mdashboard
7
7
  @file: dashboard_builder.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mdashboard
7
7
  @file: dashboard_item.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mdashboard
7
7
  @file: mdashboard.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mdashboard
7
7
  @file: menu_dashboard.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.126
3
+ # hspylib-clitt v0.9.128
4
4
  #
5
5
  # Package: main.clitt.core.tui.menu
6
6
  """Package initialization."""
@@ -13,4 +13,4 @@ __all__ = [
13
13
  'tui_menu_ui',
14
14
  'tui_menu_view'
15
15
  ]
16
- __version__ = '0.9.126'
16
+ __version__ = '0.9.128'
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu_action.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu_factory.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu_item.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu_ui.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.menu
7
7
  @file: tui_menu_view.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.126
3
+ # hspylib-clitt v0.9.128
4
4
  #
5
5
  # Package: main.clitt.core.tui.minput
6
6
  """Package initialization."""
@@ -16,4 +16,4 @@ __all__ = [
16
16
  'minput',
17
17
  'minput_utils'
18
18
  ]
19
- __version__ = '0.9.126'
19
+ __version__ = '0.9.128'
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: access_type.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: field_builder.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: form_builder.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: form_field.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: input_type.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: input_validator.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: menu_input.py
8
8
  @created: Wed, 17 May 2023
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: minput.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.minput
7
7
  @file: minput_utils.py
8
8
  @created: Thu, 20 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -1,6 +1,6 @@
1
1
  # _*_ coding: utf-8 _*_
2
2
  #
3
- # hspylib-clitt v0.9.126
3
+ # hspylib-clitt v0.9.128
4
4
  #
5
5
  # Package: main.clitt.core.tui.mselect
6
6
  """Package initialization."""
@@ -9,4 +9,4 @@ __all__ = [
9
9
  'menu_select',
10
10
  'mselect'
11
11
  ]
12
- __version__ = '0.9.126'
12
+ __version__ = '0.9.128'
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mselect
7
7
  @file: menu_select.py
8
8
  @created: Wed, 17 May 2023
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12
 
@@ -6,7 +6,7 @@
6
6
  @package: clitt.core.tui.mselect
7
7
  @file: mselect.py
8
8
  @created: Tue, 4 May 2021
9
- @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior"
9
+ @author: <B>H</B>ugo <B>S</B>aporetti <B>J</B>unior
10
10
  @site: https://github.com/yorevs/hspylib
11
11
  @license: MIT - Please refer to <https://opensource.org/licenses/MIT>
12
12