grmenu 0.1.4 → 0.1.6

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.
Files changed (7) hide show
  1. checksums.yaml +4 -4
  2. data/GRmenu.rb +581 -104
  3. data/README.md +223 -125
  4. data/data/borders.json +85 -0
  5. data/data/colors.json +16 -0
  6. data/data/fonts.json +3005 -0
  7. metadata +9 -6
data/README.md CHANGED
@@ -1,18 +1,14 @@
1
1
  <div align="center">
2
2
 
3
- # GRmenu
3
+ # GRmenu (Ruby)
4
4
 
5
- **Menús de navegación por teclado para terminal, en modo TTY crudo**
5
+ **Menús interactivos por teclado para terminal en modo TTY crudo, con soporte para Banners ASCII 3D, estilos y colores personalizados**
6
6
 
7
7
  Flechas arriba/abajo para moverte · `Enter` para elegir · `q` para salir
8
8
 
9
9
  [![Gem Version](https://badge.fury.io/rb/grmenu.svg)](https://badge.fury.io/rb/grmenu)
10
- [![PyPI version](https://img.shields.io/pypi/v/grmenu?color=blue&label=PyPI)](https://pypi.org/project/grmenu/)
11
- [![Ruby](https://img.shields.io/badge/ruby-%3E%3D%202.6-red.svg)](https://www.ruby-lang.org)
12
- [![Python versions](https://img.shields.io/pypi/pyversions/grmenu)](https://pypi.org/project/grmenu/)
13
10
  [![License: MIT](https://img.shields.io/github/license/JoseEduardoGR/GRmenu)](LICENSE)
14
- [![GitHub last commit](https://img.shields.io/github/last-commit/JoseEduardoGR/GRmenu)](https://github.com/JoseEduardoGR/GRmenu/commits/main)
15
- [![GitHub stars](https://img.shields.io/github/stars/JoseEduardoGR/GRmenu?style=social)](https://github.com/JoseEduardoGR/GRmenu/stargazers)
11
+ [![Platform](https://img.shields.io/badge/platform-Linux%20%7C%20macOS%20%7C%20Windows-blue)](https://github.com/JoseEduardoGR/GRmenu)
16
12
 
17
13
  </div>
18
14
 
@@ -20,84 +16,189 @@ Flechas arriba/abajo para moverte · `Enter` para elegir · `q` para salir
20
16
 
21
17
  ## ✨ Características
22
18
 
23
- - 🎮 **Navegación con flechas** — arriba/abajo para moverte, `Enter` para ejecutar, `q` para salir
24
- - 🎨 **20 estilos de borde** — desde ASCII clásico hasta caracteres Unicode y bloques
25
- - 🌈 **Colores personalizables** borde, opciones y foco por separado, con 8 colores en 2 tonos cada uno
26
- - 📦 **Cero dependencias externas** — solo la librería estándar (`io/console` en Ruby, `termios`/`tty` en Python)
27
- - 💎 **Ruby & Python** — implementaciones disponibles tanto en RubyGems (`grmenu`) como en PyPI (`grmenu`)
28
- - 🐧 **Linux / macOS** — funciona en cualquier terminal POSIX
29
-
30
- > ⚠️ Requiere una terminal real (TTY) en Linux o macOS. En Ruby utiliza `io/console` en modo crudo (`raw`) y en Python `termios`/`tty` para capturar pulsaciones de teclas en tiempo real.
19
+ - 🎮 **Navegación con flechas** — arriba/abajo para moverte, `Enter` para ejecutar, `q` para salir.
20
+ - 🔤 **10 Fuentes ASCII 3D para Banners** — fuentes tridimensionales (ANSI Shadow, Slant, Doom, Graffiti, Modular, Wire, Block, Stars, etc.).
21
+ - 🎨 **20 estilos de borde** desde ASCII clásico hasta caracteres Unicode dobles, curvas redondeadas y bloques.
22
+ - 🌈 **Paleta de colores completa** — personalización individual de marco, título, banner, subtítulo, divisores, opciones y foco activo con 2 niveles de brillo.
23
+ - 📐 **Centrado simétrico automático** — alinea y centra automáticamente subtítulos y menús de opciones respecto al ancho de banners grandes.
24
+ - 🛠️ **Helpers nativos en modo crudo** — `clear_screen`, `continue`, `banner`, `div` y `help` sin subprocesos lentos del sistema.
25
+ - 💻 **100% Multiplataforma** — compatible con Linux, macOS y Windows (PowerShell, CMD, Windows Terminal, VS Code).
26
+ - 📦 **Cero dependencias externas** utiliza únicamente la librería estándar `io/console`.
31
27
 
32
28
  ---
33
29
 
34
30
  ## 📦 Instalación
35
31
 
36
- ### Ruby (RubyGems)
37
-
38
32
  ```bash
39
33
  gem install grmenu
40
34
  ```
41
35
 
42
- O en tu `Gemfile`:
36
+ O si trabajás con el archivo directamente en tu proyecto:
43
37
 
44
38
  ```ruby
45
- gem 'grmenu'
39
+ require_relative "GRmenu"
46
40
  ```
47
41
 
48
- ### Python (PyPI)
42
+ <sub>Requiere Ruby ≥ 2.6.</sub>
49
43
 
50
- ```bash
51
- pip install grmenu
44
+ ---
45
+
46
+ ## 💡 Cómo se pasan las opciones y todos los parámetros
47
+
48
+ `GRmenu` permite pasar métodos directos, símbolos, arreglos con nombres personalizados, bloques lambda/procs y helpers. Además, acepta todos los parámetros de configuración visual en la instanciación:
49
+
50
+ ```ruby
51
+ menu = GRmenu.new(
52
+ [
53
+ method(:iniciar_servidor), # 1. Method (auto-capitaliza: "Iniciar Servidor")
54
+ :crear_respaldo, # 2. Symbol (auto-capitaliza: "Crear Respaldo")
55
+ ["Métricas del Sistema", method(:ver_metricas)], # 3. Array ["Nombre Personalizado", acción]
56
+ ["Ejecutar Lambda", -> { puts Color.pink("Lambda!"); GRmenu.continue }], # 4. Lambda/Proc
57
+ ["Probar Banner Helper", method(:prueba_banner_rapido)], # 5. Helper GRmenu.banner
58
+ ["Ver Ayuda y Referencia", method(:ver_ayuda_completa)], # 6. Helper GRmenu.help
59
+ method(:salir) # 7. Salir
60
+ ],
61
+ banner: "DEV OPS", # Texto gigante en arte ASCII 3D
62
+ title: "Panel de Control", # Título en el marco de opciones
63
+ subtitle: "Consola de Administración\nUsa las flechas y Enter", # Subtítulo (soporta saltos de línea \n)
64
+ font: 1, # Fuente del banner (1 al 10, por defecto 1: ANSI Shadow 3D)
65
+ style: 7, # Estilo de marco de opciones (1 al 20, ej: 7=redondeado, 3=doble)
66
+ banner_style: 3, # Estilo de marco del banner (1 al 20, ej: 3=doble línea)
67
+ divider: true, # Líneas divisorias a la par del banner (true, false o número)
68
+ center: true # Centrado automático del menú y subtítulo respecto al banner
69
+ )
52
70
  ```
53
71
 
54
72
  ---
55
73
 
56
- ## 🚀 Uso rápido (Ruby)
74
+ ## 🌟 Ejemplo Completo de Uso (`e.rb`)
75
+
76
+ A continuación se muestra el archivo de ejemplo completo [`e.rb`](e.rb) con acciones, helpers, configuración de estilos, fuentes y colores:
57
77
 
58
78
  ```ruby
59
- require 'GRmenu'
79
+ # frozen_string_literal: true
80
+
81
+ require_relative "GRmenu"
82
+
83
+ # 1. Definición de acciones/métodos
84
+ def iniciar_servidor
85
+ GRmenu.clear_screen
86
+ puts Color.bright_green("-> Servidor iniciado correctamente en el puerto 3000.")
87
+ GRmenu.continue
88
+ end
60
89
 
61
- def opcion_uno
62
- puts "elegiste uno"
90
+ def crear_respaldo
91
+ GRmenu.clear_screen
92
+ puts Color.bright_cyan("-> Creando respaldo de la base de datos...")
93
+ GRmenu.continue
63
94
  end
64
95
 
65
- def opcion_dos
66
- puts "elegiste dos"
96
+ def ver_metricas
97
+ GRmenu.clear_screen
98
+ puts Color.bright_magenta("-> CPU: 12% | RAM: 4.2 GB | Estado: Operativo")
99
+ GRmenu.continue
67
100
  end
68
101
 
102
+ def prueba_banner_rapido
103
+ GRmenu.clear_screen
104
+ # Helper para mostrar un banner estático o animado en cualquier momento
105
+ GRmenu.banner("OK", 0, color: "green", level: 2, style: 3, font: 1)
106
+ GRmenu.div(40, "green", 1, "═")
107
+ puts Color.green(" Prueba completada con éxito.")
108
+ GRmenu.div(40, "green", 1, "═")
109
+ GRmenu.continue
110
+ end
111
+
112
+ def ver_ayuda_completa
113
+ GRmenu.clear_screen
114
+ # Helper interactivo que imprime toda la guía y referencia de GRmenu
115
+ GRmenu.help
116
+ GRmenu.continue
117
+ end
118
+
119
+ def salir
120
+ GRmenu.clear_screen
121
+ puts Color.bright_yellow("¡Sesión finalizada con éxito!")
122
+ exit(0)
123
+ end
124
+
125
+ # 2. Instanciación del menú con TODOS los parámetros disponibles
69
126
  menu = GRmenu.new(
70
- [method(:opcion_uno), method(:opcion_dos)],
71
- title: "Mi menu",
72
- style: 19
127
+ [
128
+ method(:iniciar_servidor), # 1. Method (auto-capitaliza: "Iniciar Servidor")
129
+ :crear_respaldo, # 2. Symbol (auto-capitaliza: "Crear Respaldo")
130
+ ["Métricas del Sistema", method(:ver_metricas)], # 3. Array ["Nombre Personalizado", acción]
131
+ ["Ejecutar Lambda", -> { puts Color.pink("Lambda!"); GRmenu.continue }], # 4. Lambda/Proc
132
+ ["Probar Banner Helper", method(:prueba_banner_rapido)], # 5. Helper GRmenu.banner
133
+ ["Ver Ayuda y Referencia", method(:ver_ayuda_completa)], # 6. Helper GRmenu.help
134
+ method(:salir) # 7. Salir
135
+ ],
136
+ banner: "DEV OPS", # Texto gigante en arte ASCII 3D
137
+ title: "Panel de Control", # Título en el marco de opciones
138
+ subtitle: "Consola de Administración\nUsa las flechas y Enter", # Subtítulo (soporta saltos de línea \n)
139
+ font: 1, # Fuente del banner (1 al 10, por defecto 1: ANSI Shadow 3D)
140
+ style: 7, # Estilo de marco de opciones (1 al 20, ej: 7=redondeado, 3=doble)
141
+ banner_style: 3, # Estilo de marco del banner (1 al 20, ej: 3=doble línea)
142
+ divider: true, # Líneas divisorias a la par del banner (true, false o número)
143
+ center: true # Centrado automático del menú y subtítulo respecto al banner
73
144
  )
74
145
 
75
- menu.set_style.border("yellow")
76
- menu.set_style.options("green")
77
- menu.draw
146
+ # 3. Configuración completa de colores y estilos (set_style / style_config)
147
+ # Colores disponibles: "black", "gray", "red", "green", "yellow", "blue",
148
+ # "magenta", "purple", "pink", "cyan", "aqua", "orange", "white"
149
+ # Niveles de brillo: 1 = normal, 2 = brillante
150
+
151
+ menu.set_style.font(1) # 1 = ANSI Shadow 3D, 2 = Slant 3D, 3 = Doom, etc.
152
+ menu.set_style.banner("cyan", 2) # Color del banner ASCII
153
+ menu.set_style.title("yellow", 2) # Color del título del recuadro
154
+ menu.set_style.subtitle("white", 1)# Color del subtítulo/descripción
155
+ menu.set_style.divider("blue", 1) # Color de las líneas divisorias
156
+ menu.set_style.border("yellow", 1) # Color del borde del marco de opciones
157
+ menu.set_style.options("white", 1) # Color de opciones no seleccionadas
158
+ menu.set_style.focus("green", 2) # Color y brillo de la opción resaltada
159
+
160
+ # 4. Dibujar y lanzar el menú interactivo
161
+ # size_max / min_width define el ancho mínimo sugerido para el marco de opciones
162
+ menu.draw(size_max: 38)
78
163
  ```
79
164
 
80
- Cada elemento de la lista puede ser un `Method` (`method(:mi_metodo)`), un `Proc` / `lambda` (`-> { ... }`), un arreglo `["Nombre", callable]` o un `Symbol` (`:mi_metodo`). El nombre se toma automáticamente de la opción y al presionar `Enter` sobre ella, esa acción se ejecuta.
165
+ ---
81
166
 
82
- <details>
83
- <summary>🐍 <b>Ver ejemplo en Python</b></summary>
167
+ ## 📖 Guía y Referencia Rápida en Consola (`GRmenu.help`)
84
168
 
85
- ```python
86
- from GRmenu import GRmenu
169
+ Para consultar en cualquier momento la lista de helpers, colores, fuentes, marcos y sintaxis directamente desde la terminal, podés ejecutar:
87
170
 
88
- def opcion_uno():
89
- print("elegiste uno")
171
+ ```ruby
172
+ GRmenu.help
173
+ ```
90
174
 
91
- def opcion_dos():
92
- print("elegiste dos")
175
+ O desde una instancia:
93
176
 
94
- menu = GRmenu([opcion_uno, opcion_dos], title="Mi menu", style=19)
95
- menu.SetStyle.Border("yellow")
96
- menu.SetStyle.Options("green")
97
- menu.draw()
177
+ ```ruby
178
+ menu.help
98
179
  ```
99
180
 
100
- </details>
181
+ Salida limpia y estructurada en consola:
182
+
183
+ ```text
184
+ ╔══════════════════════════════════════════════════════════════╗
185
+ ║ GRmenu - Guia y Referencia Rapida ║
186
+ ║ Navegacion interactiva en terminal TTY ║
187
+ ╚══════════════════════════════════════════════════════════════╝
188
+
189
+ [1] HELPERS NATIVOS EN MODO CRUDO
190
+ ────────────────────────────────────────────────────────────────
191
+ GRmenu.clear_screen (o GRmenu.clr)
192
+ * Limpia la terminal al instante con secuencias ANSI.
193
+ GRmenu.continue(mensaje)
194
+ * Pausa interactiva: espera una sola tecla en modo TTY crudo.
195
+ GRmenu.banner(texto, delay, color:, level:, style:, font:)
196
+ * Renderiza banner ASCII 3D con marco y animacion opcional.
197
+ GRmenu.div(longitud, color, level, char)
198
+ * Dibuja linea divisoria horizontal adaptable a la consola.
199
+ GRmenu.help
200
+ * Imprime esta guia visual interactiva en consola.
201
+ ```
101
202
 
102
203
  ---
103
204
 
@@ -112,111 +213,110 @@ menu.draw()
112
213
 
113
214
  ---
114
215
 
115
- ## 🎨 Personalización
116
-
117
- ### Colores (`set_style` / `SetStyle`)
118
-
119
- Cada zona del menú se personaliza por separado. `level: 1` es el tono normal y `level: 2` el brillante.
120
-
121
- ```ruby
122
- # En Ruby:
123
- menu.set_style.border("cyan") # color del borde
124
- menu.set_style.options("white") # color de las opciones no seleccionadas
125
- menu.set_style.focus("green", 2) # color de la opción resaltada (brillante)
126
- ```
216
+ ## 🔤 Fuentes ASCII 3D para Banners (`font: 1` al `10`)
217
+
218
+ | ID | Estilo | Muestra (`RUBY`) |
219
+ |:--:|--------------------------|------------------|
220
+ | **`1`** | **ANSI Shadow 3D (Default)** | `██████╗ ██╗ ██╗ ██████╗ ██╗ ██╗` |
221
+ | **`2`** | **Slant 3D (FIGlet)** | ` ____ __ __ ____ __ __` |
222
+ | **`3`** | **Doom / Standard 3D** | ` ____ _ _ ____ __ __` |
223
+ | **`4`** | **Graffiti Shadow 3D** | ` ,---. ,--. ,--. ,---. ,--. ,--.` |
224
+ | **`5`** | **Small Slant / Mini 3D**| ` ___ _ _ ___ _ _` |
225
+ | **`6`** | **Modular Pipe 3D** | ` _____ _____ _____ _____` |
226
+ | **`7`** | **Bubble / Round Gothic**| ` ____ _ _ ____ _ _` |
227
+ | **`8`** | **Double-Line Wire 3D** | ` ╔═════╗ ║ ║ ╔════╗ ║ ║` |
228
+ | **`9`** | **Solid Fat 3D Block** | ` ██████▄ ██ ██ ██████▄ ██ ██` |
229
+ | **`10`**| **Arcade Stars Matrix** | ` ★★★★ ★ ★ ★★★★ ★ ★` |
127
230
 
128
- Colores disponibles: `black`, `red`, `green`, `yellow`, `blue`, `magenta`, `cyan`, `white`.
129
-
130
- ### Estilos de borde (`style`)
231
+ ---
131
232
 
132
- El parámetro `style` acepta un número (1 al 20) que define cómo se dibuja el marco del menú:
233
+ ## 🖼️ Estilos de Marco (`style` / `banner_style: 1` al `20`)
133
234
 
134
235
  | `style` | Vista previa | `style` | Vista previa |
135
236
  |:---:|:---|:---:|:---|
136
237
  | 1 | `#===#` | 11 | `░░░░░` |
137
- | 2 | `┌───┐` | 12 | `█████` |
138
- | 3 | `╔═══╗` | 13 | `*****` |
139
- | 4 | `┏━━━┓` | 14 | `+++++` |
238
+ | 2 | `┌───┐` *(Línea simple)* | 12 | `█████` |
239
+ | 3 | `╔═══╗` *(Doble línea - Default banner)* | 13 | `*****` |
240
+ | 4 | `┏━━━┓` *(Línea gruesa)* | 14 | `+++++` |
140
241
  | 5 | `╒═══╕` | 15 | `=====` |
141
242
  | 6 | `╓───╖` | 16 | `~~~~~` |
142
- | 7 | `╭───╮` | 17 | `-----` |
143
- | 8 | `▛▀▀▀▜` | 18 | `◆◆◆◆◆` |
144
- | 9 | `▓▓▓▓▓` | 19 | `●●●●●` *(default)* |
145
- | 10 | `▒▒▒▒▒` | 20 | `★★★★★` |
243
+ | 7 | `╭───╮` *(Curvas redondeadas)* | 17 | `-----` |
244
+ | 8 | `▛▀▀▀▜` *(Bloques outline)* | 18 | `◆◆◆◆◆` |
245
+ | 9 | `▓▓▓▓▓` | 19 | `●○○○●` *(Círculos - Default opciones)* |
246
+ | 10 | `▒▒▒▒▒` | 20 | `★☆☆☆★` *(Estrellas)* |
146
247
 
147
- ```ruby
148
- menu = GRmenu.new([method(:opcion_uno), method(:opcion_dos)], title: "Mi menu", style: 7) # bordes redondeados
149
- ```
150
-
151
- ### Ancho del menú
248
+ ---
152
249
 
153
- `draw()` acepta `size_max` (o `min_width`), el ancho mínimo en caracteres del cuadro (se expande automáticamente si el título o las opciones son más largos):
250
+ ## 🎨 Paleta de Colores y Módulo `Color`
154
251
 
155
252
  ```ruby
156
- menu.draw(size_max: 30)
253
+ puts Color.green("Texto en verde")
254
+ puts Color.bright_cyan("Cian brillante")
255
+ puts Color.yellow("Texto en amarillo")
256
+ puts Color.bright_magenta("Magenta brillante")
257
+ puts Color.purple("Texto en morado")
258
+ puts Color.orange("Texto en naranja")
259
+ puts Color.pink("Texto en rosa")
260
+ puts Color.gray("Texto en gris")
157
261
  ```
158
262
 
159
- ---
160
-
161
- ## 📖 Referencia de la API (Ruby)
263
+ Colores soportados: `black`, `gray`, `red`, `green`, `yellow`, `blue`, `magenta`, `purple`, `pink`, `cyan`, `aqua`, `orange`, `white`.
162
264
 
163
- ### `GRmenu.new(functions, title: "", style: 19)`
265
+ ---
164
266
 
165
- | Parámetro | Tipo | Descripción |
166
- |-------------|---------------------------------------|---------------------------------------------------|
167
- | `functions` | `Array<Method, Proc, Symbol, Array>` | Métodos, procs o lambdas a mostrar como opciones. |
168
- | `title` | `String` (opcional) | Título mostrado en la cabecera del menú. |
169
- | `style` | `Integer` (opcional) | Número de estilo de borde (ver tabla arriba). |
267
+ ## 🛠️ Helpers Nativos en Modo Crudo
170
268
 
171
- ### `menu.draw(size_max: 20)`
269
+ ```ruby
270
+ # 1. Limpia la pantalla al instante con secuencias ANSI
271
+ GRmenu.clear_screen # o GRmenu.clr
172
272
 
173
- Dibuja el menú y bloquea el hilo hasta que el usuario elige una opción (`Enter`) o sale (`q`).
273
+ # 2. Imprime un banner o logo gigante responsivo
274
+ GRmenu.banner("SECURE", 0, color: "magenta", style: 3, font: 1)
174
275
 
175
- ### `menu.set_style`
276
+ # 3. Línea divisoria horizontal adaptable
277
+ GRmenu.div(60, "blue")
176
278
 
177
- | Método | Descripción |
178
- |-------------------------------------|-------------------------------------------|
179
- | `set_style.border(color, level=1)` | Color del marco del menú. |
180
- | `set_style.options(color, level=1)` | Color de las opciones sin seleccionar. |
181
- | `set_style.focus(color, level=2)` | Color de la opción resaltada. |
279
+ # 4. Pausa de consola que espera una sola tecla en modo TTY crudo
280
+ GRmenu.continue("Presiona cualquier tecla para continuar...")
182
281
 
183
- *(Nota: también se soportan los métodos con alias `menu.SetStyle.Border(...)`, `menu.SetStyle.Options(...)`, `menu.SetStyle.Focus(...)` para compatibilidad de interfaz con la versión de Python).*
282
+ # 5. Guía interactiva en consola
283
+ GRmenu.help
284
+ ```
184
285
 
185
286
  ---
186
287
 
187
- ## 🧩 Ejemplo completo (Ruby)
288
+ ## 📖 Referencia de la API
188
289
 
189
- ```ruby
190
- require 'GRmenu'
290
+ ### `GRmenu.new(functions, ...)`
191
291
 
192
- def saludar
193
- puts "¡Hola desde Ruby!"
194
- end
292
+ | Parámetro | Tipo | Descripción |
293
+ |------------------|------------|-------------|
294
+ | `functions` | `Array` | Opciones a mostrar (`Method`, `Symbol`, `Array ["Nombre", acción]`, `Proc`/`lambda`). |
295
+ | `banner:` | `String` | Texto gigante a renderizar en arte ASCII 3D arriba del menú. |
296
+ | `title:` | `String` | Título en la cabecera del marco de opciones. |
297
+ | `subtitle:` | `String` | Subtítulo o descripción (soporta múltiples líneas con `\n`). |
298
+ | `font:` | `Integer` | Fuente ASCII 3D del banner (1 al 10, default 1). |
299
+ | `style:` | `Integer` | Estilo de marco para las opciones (1 al 20, default 19). |
300
+ | `banner_style:` | `Integer` | Estilo de marco para el banner (1 al 20, default 3). |
301
+ | `divider:` | `Boolean` | Dibuja líneas divisorias a la par del ancho del banner. |
302
+ | `center:` | `Boolean` | Centra simétricamente el subtítulo y menú de opciones (default `true`). |
195
303
 
196
- def salir_app
197
- puts "Hasta luego 👋"
198
- end
304
+ ### `menu.set_style`
199
305
 
200
- def acerca_de
201
- puts "GRmenu v0.1.4 — menú TTY para terminal"
202
- end
306
+ | Método | Descripción |
307
+ |-------------------------------------|-------------------------------------------|
308
+ | `set_style.font(id)` | Cambia el tipo de fuente ASCII 3D (1..10). |
309
+ | `set_style.banner(color, level=2)` | Color y brillo del banner ASCII 3D. |
310
+ | `set_style.title(color, level=2)` | Color y brillo del título del marco. |
311
+ | `set_style.subtitle(color, level=1)`| Color y brillo del subtítulo. |
312
+ | `set_style.divider(color, level=1)` | Color y brillo de las líneas divisorias. |
313
+ | `set_style.border(color, level=1)` | Color y brillo del marco de opciones. |
314
+ | `set_style.options(color, level=1)` | Color y brillo de opciones no activas. |
315
+ | `set_style.focus(color, level=2)` | Color y brillo de la opción resaltada. |
203
316
 
204
- menu = GRmenu.new(
205
- [
206
- method(:saludar),
207
- method(:acerca_de),
208
- ["Personalizado", -> { puts "Opción con bloque lambda" }],
209
- method(:salir_app)
210
- ],
211
- title: "GRmenu Demo",
212
- style: 7
213
- )
317
+ ### `menu.draw(size_max: 20)`
214
318
 
215
- menu.set_style.border("magenta")
216
- menu.set_style.options("white")
217
- menu.set_style.focus("cyan", 2)
218
- menu.draw(size_max: 28)
219
- ```
319
+ Inicia el menú interactivo con navegación por teclado y bloquea el hilo hasta que el usuario elige una opción (`Enter`) o sale (`q`).
220
320
 
221
321
  ---
222
322
 
@@ -230,8 +330,6 @@ Las contribuciones son bienvenidas. Podés abrir un [issue](https://github.com/J
230
330
 
231
331
  Distribuido bajo licencia [MIT](LICENSE).
232
332
 
233
- ---
234
-
235
333
  <div align="center">
236
334
 
237
335
  Hecho por [grcode](https://github.com/JoseEduardoGR)
data/data/borders.json ADDED
@@ -0,0 +1,85 @@
1
+ {
2
+ "1": {
3
+ "h": "=-",
4
+ "v": "|",
5
+ "tl": "#",
6
+ "tr": "#",
7
+ "bl": "#",
8
+ "br": "#"
9
+ },
10
+ "2": {
11
+ "h": "\u2500",
12
+ "v": "\u2502",
13
+ "tl": "\u250c",
14
+ "tr": "\u2510",
15
+ "bl": "\u2514",
16
+ "br": "\u2518"
17
+ },
18
+ "3": {
19
+ "h": "\u2550",
20
+ "v": "\u2551",
21
+ "tl": "\u2554",
22
+ "tr": "\u2557",
23
+ "bl": "\u255a",
24
+ "br": "\u255d"
25
+ },
26
+ "4": {
27
+ "h": "\u2501",
28
+ "v": "\u2503",
29
+ "tl": "\u250f",
30
+ "tr": "\u2513",
31
+ "bl": "\u2517",
32
+ "br": "\u251b"
33
+ },
34
+ "5": {
35
+ "h": "\u2550",
36
+ "v": "\u2502",
37
+ "tl": "\u2552",
38
+ "tr": "\u2555",
39
+ "bl": "\u2558",
40
+ "br": "\u255b"
41
+ },
42
+ "6": {
43
+ "h": "\u2500",
44
+ "v": "\u2551",
45
+ "tl": "\u2553",
46
+ "tr": "\u2556",
47
+ "bl": "\u2559",
48
+ "br": "\u255c"
49
+ },
50
+ "7": {
51
+ "h": "\u2500",
52
+ "v": "\u2502",
53
+ "tl": "\u256d",
54
+ "tr": "\u256e",
55
+ "bl": "\u2570",
56
+ "br": "\u256f"
57
+ },
58
+ "8": {
59
+ "h": "\u2580",
60
+ "hb": "\u2584",
61
+ "v": "\u258c",
62
+ "vl": "\u258c",
63
+ "vr": "\u2590",
64
+ "tl": "\u259b",
65
+ "tr": "\u259c",
66
+ "bl": "\u2599",
67
+ "br": "\u259f"
68
+ },
69
+ "19": {
70
+ "h": "\u25cf\u25cb",
71
+ "v": "\u25cf",
72
+ "tl": "\u25cf",
73
+ "tr": "\u25cf",
74
+ "bl": "\u25cf",
75
+ "br": "\u25cf"
76
+ },
77
+ "20": {
78
+ "h": "\u2605\u2606",
79
+ "v": "\u2605",
80
+ "tl": "\u2605",
81
+ "tr": "\u2605",
82
+ "bl": "\u2605",
83
+ "br": "\u2605"
84
+ }
85
+ }
data/data/colors.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "black": {"1": "30m", "2": "90m"},
3
+ "red": {"1": "31m", "2": "91m"},
4
+ "green": {"1": "32m", "2": "92m"},
5
+ "yellow": {"1": "33m", "2": "93m"},
6
+ "blue": {"1": "34m", "2": "94m"},
7
+ "magenta":{"1": "35m", "2": "95m"},
8
+ "cyan": {"1": "36m", "2": "96m"},
9
+ "white": {"1": "37m", "2": "97m"},
10
+ "gray": {"1": "90m", "2": "38;5;245m"},
11
+ "purple": {"1": "38;5;129m", "2": "38;5;141m"},
12
+ "pink": {"1": "38;5;205m", "2": "38;5;218m"},
13
+ "aqua": {"1": "38;5;45m", "2": "38;5;51m"},
14
+ "orange": {"1": "38;5;208m", "2": "38;5;214m"},
15
+ "reset": "0m"
16
+ }