grmenu 3.0.0 → 4.0.0
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.
- checksums.yaml +4 -4
- data/GRmenu.rb +1167 -57
- data/README.md +345 -250
- data/data/borders.json +77 -57
- data/data/colors.json +356 -13
- data/data/help.txt +284 -197
- data/data/themes/cyberpunk.gr +60 -0
- data/data/themes/dracula.gr +60 -0
- data/data/themes/matrix.gr +60 -0
- data/data/themes/monokai.gr +60 -0
- data/data/themes/neon_red.gr +51 -0
- data/data/themes/nord.gr +60 -0
- data/data/themes/sunset.gr +60 -0
- data/e.rb +394 -0
- data/grmenu.rb +3 -0
- metadata +10 -2
- data/LICENSE +0 -21
data/data/help.txt
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
{bright_cyan}╚═══════════════════════════════════════════════════════════════════════════════════╝{reset}
|
|
9
9
|
|
|
10
10
|
{bright_cyan}╔═══════════════════════════════════════════════════════════════════════════════════╗{reset}
|
|
11
|
-
{bright_cyan}║{bright_yellow} DOCUMENTACION Y GUIA COMPLETA DE PARAMETROS (
|
|
12
|
-
{bright_cyan}║{gray} Referencia exhaustiva de clases, metodos publicos, colores y configuracion
|
|
11
|
+
{bright_cyan}║{bright_yellow} DOCUMENTACION Y GUIA COMPLETA DE PARAMETROS (v4.0) {bright_cyan}║{reset}
|
|
12
|
+
{bright_cyan}║{gray} Referencia exhaustiva de clases, metodos publicos, colores y configuracion {bright_cyan}║{reset}
|
|
13
13
|
{bright_cyan}╚═══════════════════════════════════════════════════════════════════════════════════╝{reset}
|
|
14
14
|
|
|
15
15
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
@@ -18,29 +18,40 @@
|
|
|
18
18
|
Crea una nueva instancia de menu interactivo para la terminal.
|
|
19
19
|
|
|
20
20
|
{cyan}PARAMETROS DEL CONSTRUCTOR:{reset}
|
|
21
|
-
{bright_green}* functions:{reset} {white}[Array]{reset}
|
|
22
|
-
{bright_green}* title:{reset} {white}[String]{reset}
|
|
23
|
-
{bright_green}* banner:{reset} {white}[String]{reset}
|
|
24
|
-
{bright_green}* subtitle:{reset} {white}[String]{reset}
|
|
25
|
-
{bright_green}* search:{reset} {white}[Boolean]{reset}
|
|
26
|
-
{bright_green}* columns:{reset} {white}[Integer]{reset}
|
|
27
|
-
{bright_green}* page_size:{reset} {white}[Integer]{reset}
|
|
28
|
-
{bright_green}* style:{reset} {white}[Integer]{reset} -> Estilo de marco de opciones
|
|
29
|
-
{bright_green}* banner_style:{reset} {white}[Integer]{reset} -> Estilo de marco para banner
|
|
30
|
-
{bright_green}* font:{reset} {white}[Integer]{reset} -> Fuente ASCII del banner
|
|
31
|
-
{bright_green}* image:{reset} {white}[String]{reset}
|
|
32
|
-
{bright_green}* image_width:{reset} {white}[Integer]{reset}
|
|
33
|
-
{bright_green}* divider:{reset} {white}[Boolean/Int]{reset}
|
|
34
|
-
{bright_green}* center:{reset} {white}[Boolean]{reset}
|
|
21
|
+
{bright_green}* functions:{reset} {white}[Array]{reset} -> Lista de opciones a ejecutar (ver seccion [2]).
|
|
22
|
+
{bright_green}* title:{reset} {white}[String]{reset} -> Titulo centrado en el marco del menu.
|
|
23
|
+
{bright_green}* banner:{reset} {white}[String]{reset} -> Texto convertido a arte ASCII 3D superior.
|
|
24
|
+
{bright_green}* subtitle:{reset} {white}[String]{reset} -> Descripcion o subtitulo (admite saltos de linea \n).
|
|
25
|
+
{bright_green}* search:{reset} {white}[Boolean]{reset} -> Buscador en vivo con filtro reactivo (default: false).
|
|
26
|
+
{bright_green}* columns:{reset} {white}[Integer]{reset} -> Cantidad de columnas para grid 2D (default: 1).
|
|
27
|
+
{bright_green}* page_size:{reset} {white}[Integer]{reset} -> Cantidad de filas visibles antes de scroll (default: auto).
|
|
28
|
+
{bright_green}* style:{reset} {white}[Integer 1..20]{reset} -> Estilo de marco de opciones (default: 19).
|
|
29
|
+
{bright_green}* banner_style:{reset} {white}[Integer 1..20]{reset} -> Estilo de marco para el banner (default: 3).
|
|
30
|
+
{bright_green}* font:{reset} {white}[Integer 1..10]{reset} -> Fuente tipografica ASCII 3D del banner (default: 1).
|
|
31
|
+
{bright_green}* image:{reset} {white}[String]{reset} -> Ruta a imagen (PNG/JPG/WEBP/GIF/BMP) de cabecera.
|
|
32
|
+
{bright_green}* image_width:{reset} {white}[Integer]{reset} -> Ancho en columnas para renderizar la imagen (default: 40).
|
|
33
|
+
{bright_green}* divider:{reset} {white}[Boolean/Int]{reset} -> Lineas divisorias horizontales o ancho especifico.
|
|
34
|
+
{bright_green}* center:{reset} {white}[Boolean]{reset} -> Centrado horizontal automatico en consola (default: true).
|
|
35
|
+
{bright_green}* animate:{reset} {white}[String/Bool]{reset} -> Animacion de entrada ("diagonal", "linear", "fade", "rgb", false).
|
|
36
|
+
{bright_green}* desc_prefix:{reset} {white}[String]{reset} -> Prefijo del pie de tooltip/descripcion (default: "[i]").
|
|
35
37
|
|
|
36
38
|
{cyan}METODOS DE INSTANCIA:{reset}
|
|
37
39
|
{bright_white}* menu.draw(size_max: 40, min_width: nil){reset}
|
|
38
|
-
Inicia el bucle interactivo. Bloquea hasta que el usuario
|
|
40
|
+
Inicia el bucle interactivo de terminal. Bloquea hasta que el usuario elija.
|
|
39
41
|
- {cyan}size_max:{reset} Ancho minimo visual garantizado en columnas.
|
|
40
|
-
-
|
|
42
|
+
- {cyan}Deteccion CLI:{reset} Si se ejecuta el script con {yellow}-theme{reset} o {yellow}-ex{reset}, exporta
|
|
43
|
+
automaticamente el tema configurado a un archivo .gr y termina la ejecucion.
|
|
44
|
+
- Retorna el valor devuelto por la accion seleccionada.
|
|
45
|
+
|
|
46
|
+
{bright_white}* menu.style(bloque_gr){reset}
|
|
47
|
+
Aplica configuracion CSS al menu usando un bloque de texto (ej: <<-GR ... GR).
|
|
48
|
+
Permite definir bordes, animaciones, prefijos y colores inline sin archivos externos.
|
|
49
|
+
|
|
50
|
+
{bright_white}* menu.export_theme(ruta = nil){reset} (Alias: {bright_white}menu.export_config{reset})
|
|
51
|
+
Guarda la configuracion actual de este menu en un archivo de tema .gr.
|
|
41
52
|
|
|
42
53
|
{bright_white}* menu.set_style{reset}
|
|
43
|
-
|
|
54
|
+
Acceso al objeto de personalizacion fluido por metodos (ver seccion [3]).
|
|
44
55
|
|
|
45
56
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
46
57
|
{bright_yellow}[2] FORMATOS DE OPCIONES EN EL ARRAY functions{reset}
|
|
@@ -61,63 +72,79 @@
|
|
|
61
72
|
|
|
62
73
|
{cyan}4. Arreglo con Tooltip Dinamico [Nombre, Accion, Descripcion]:{reset}
|
|
63
74
|
{bright_white}["Crear Respaldo", :respaldo, "Copia de seguridad en S3"]{reset}
|
|
64
|
-
-> Muestra la descripcion
|
|
75
|
+
-> Muestra la descripcion en el pie del menu cuando la opcion tiene foco.
|
|
65
76
|
|
|
66
77
|
{cyan}5. Lambda o Proc:{reset}
|
|
67
78
|
{bright_white}["Limpiar Cache", -> { puts "Cache limpia!"; GRmenu.continue }]{reset}
|
|
68
79
|
{bright_white}["Test", -> { puts "OK" }, "Descripcion tooltip opcional"]{reset}
|
|
69
80
|
|
|
70
81
|
{cyan}6. Hash explicito:{reset}
|
|
71
|
-
{bright_white}{ name: "Configurar", action: method(:config), desc: "Ajustes" }{reset}
|
|
82
|
+
{bright_white}{ name: "Configurar", action: method(:config), desc: "Ajustes del sistema" }{reset}
|
|
72
83
|
|
|
73
84
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
74
|
-
{bright_yellow}[3] PERSONALIZACION DE COLORES Y MODO RGB
|
|
85
|
+
{bright_yellow}[3] PERSONALIZACION DE COLORES Y MODO RGB: menu.set_style{reset}
|
|
75
86
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
{bright_green}* menu.set_style.
|
|
81
|
-
|
|
82
|
-
{bright_green}* menu.set_style.
|
|
83
|
-
|
|
84
|
-
{bright_green}* menu.set_style.
|
|
85
|
-
|
|
86
|
-
{bright_green}* menu.set_style.
|
|
87
|
-
|
|
88
|
-
{bright_green}* menu.set_style.divider(color, level = 1){reset}
|
|
89
|
-
- Color de las lineas divisorias horizontales (soporta "rgb").
|
|
90
|
-
{bright_green}* menu.set_style.border(color, level = 1){reset}
|
|
91
|
-
- Color del marco y esquinas de la caja de opciones (soporta "rgb").
|
|
92
|
-
{bright_green}* menu.set_style.options(color, level = 1){reset}
|
|
93
|
-
- Color de las opciones inactivas / no seleccionadas (soporta "rgb").
|
|
94
|
-
{bright_green}* menu.set_style.focus(color, level = 2){reset}
|
|
95
|
-
- Color de la opcion seleccionada (> Opcion) (soporta "rgb").
|
|
96
|
-
|
|
97
|
-
{cyan}Efecto RGB Animado en tiempo real:{reset}
|
|
98
|
-
{bright_white}menu.set_style.banner("rgb"){reset} # Flujo continuo de colores a 30 FPS
|
|
99
|
-
{bright_white}menu.set_style.border("rgb"){reset} # Marco multicolor animado sin lag
|
|
87
|
+
Acepta: {cyan}(nombre_color, nivel_brillo){reset}, {cyan}Hash { color:, level: }{reset},
|
|
88
|
+
o el modo dinamico {bright_yellow}"rgb"{reset} / {bright_yellow}"rainbow"{reset} para animacion multicolor fluida a 30 FPS.
|
|
89
|
+
|
|
90
|
+
{bright_green}* menu.set_style.font(id){reset} -> [Integer 1..10] Fuente 3D del banner.
|
|
91
|
+
{bright_green}* menu.set_style.banner(color, lvl = 2){reset} -> Letras 3D del banner (soporta "rgb").
|
|
92
|
+
{bright_green}* menu.set_style.title(color, lvl = 2){reset} -> Titulo de cabecera del menu.
|
|
93
|
+
{bright_green}* menu.set_style.subtitle(color, lvl = 2){reset}-> Texto del subtitulo / descripcion.
|
|
94
|
+
{bright_green}* menu.set_style.divider(color, lvl = 1){reset} -> Lineas divisorias horizontales.
|
|
95
|
+
{bright_green}* menu.set_style.border(color, lvl = 1){reset} -> Marco y esquinas de la caja de opciones.
|
|
96
|
+
{bright_green}* menu.set_style.options(color, lvl = 1){reset} -> Opciones inactivas / sin foco.
|
|
97
|
+
{bright_green}* menu.set_style.focus(color, lvl = 2){reset} -> Opcion activa / seleccionada (> Opcion).
|
|
98
|
+
{bright_green}* menu.set_style.desc_prefix(texto){reset} -> Prefijo de descripciones (ej: "[i]", "*", "->").
|
|
100
99
|
|
|
101
100
|
{cyan}Configuracion Global por defecto:{reset}
|
|
102
101
|
{bright_white}GRmenu::SetStyle.border("cyan", 1){reset}
|
|
103
102
|
{bright_white}GRmenu::SetStyle.focus("green", 2){reset}
|
|
104
103
|
{bright_white}GRmenu::SetStyle.title("yellow", 2){reset}
|
|
104
|
+
{bright_white}GRmenu::SetStyle.desc_prefix("[i]"){reset}
|
|
105
|
+
|
|
106
|
+
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
107
|
+
{bright_yellow}[4] TABLAS, TARJETAS Y ALERTAS EJECUTIVAS{reset}
|
|
108
|
+
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
109
|
+
|
|
110
|
+
{bright_green}* GRmenu.table(headers: [...], rows: [...], title: nil, search: false, sort: false, page_size: 8){reset}
|
|
111
|
+
Renderiza una tabla interactiva con bordes blindados y auto-ajuste de columnas.
|
|
112
|
+
- {cyan}headers:{reset} [Array] Nombres de columnas (ej: ["ID", "SERVICIO", "ESTADO"]).
|
|
113
|
+
- {cyan}rows:{reset} [Array] Matriz de filas o lista de hashes.
|
|
114
|
+
- {cyan}search:{reset} [Boolean] Activa buscador en vivo reactivo pulsando cualquier letra.
|
|
115
|
+
- {cyan}sort:{reset} [Boolean] Permite ordenar columnas en orden asc/desc pulsando 's'.
|
|
116
|
+
- {cyan}page_size:{reset} [Integer] Limite de filas visibles con auto-scroll.
|
|
117
|
+
- {cyan}Teclas:{reset} {yellow}↑ / ↓{reset} (navegar), {yellow}s{reset} (ordenar), {yellow}Enter{reset} (elegir fila), {yellow}Esc / q{reset} (salir).
|
|
118
|
+
- {cyan}Retorna:{reset} La fila seleccionada por el usuario (o nil si cancela).
|
|
119
|
+
|
|
120
|
+
{bright_green}* GRmenu.card(title: nil, content: "", style: 7, border_color: "cyan", title_color: "yellow", content_color: "white", pause: true){reset}
|
|
121
|
+
Recuadro estilizado para reportes y mensajes. Incluye word-wrapping automatico
|
|
122
|
+
para parrafos largos sin deformar bordes ni desbordar la consola.
|
|
123
|
+
- {cyan}title:{reset} [String] Titulo superior centrado.
|
|
124
|
+
- {cyan}content:{reset} [String] Mensaje o reporte (admite parrafos continuos o \n).
|
|
125
|
+
- {cyan}border_color:{reset} [String] Color del marco (soporta hex, neon y "rgb").
|
|
126
|
+
- {cyan}title_color:{reset} [String] Color del texto del titulo.
|
|
127
|
+
- {cyan}content_color:{reset} [String] Color del contenido.
|
|
128
|
+
- {cyan}style:{reset} [Integer 1..20] Estilo de marco (default: 7).
|
|
129
|
+
|
|
130
|
+
{bright_green}* GRmenu.alert(tipo, mensaje, title: nil, style: 3, border_color: nil, title_color: nil, pause: true){reset}
|
|
131
|
+
Emite una notificacion modal con tag visual y paleta correspondiente:
|
|
132
|
+
- {cyan}:success{reset} -> Verde [✔ EXITO]
|
|
133
|
+
- {cyan}:error{reset} -> Rojo [✖ ERROR]
|
|
134
|
+
- {cyan}:warning{reset} -> Ambar [⚠ AVISO]
|
|
135
|
+
- {cyan}:info{reset} -> Cian [ℹ INFO]
|
|
136
|
+
- Soporta colores personalizados con {cyan}border_color:{reset} y {cyan}title_color:{reset}.
|
|
105
137
|
|
|
106
138
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
107
|
-
{bright_yellow}[
|
|
139
|
+
{bright_yellow}[5] MODALES, CHECKBOXES Y CONTROLES INTERACTIVOS{reset}
|
|
108
140
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
109
141
|
|
|
110
|
-
{bright_green}* GRmenu.checkbox(items, title: "...", color: "cyan", style: 3){reset}
|
|
142
|
+
{bright_green}* GRmenu.checkbox(items, title: "...", color: "cyan", style: 3, page_size: 8){reset}
|
|
111
143
|
(Alias: {bright_white}GRmenu.select_multi{reset}, {bright_white}GRmenu.multiselect{reset})
|
|
112
144
|
Lista interactiva con casillas de verificacion [X] / [ ].
|
|
113
|
-
- {cyan}items:{reset} [Array]
|
|
114
|
-
- {cyan}
|
|
115
|
-
- {cyan}
|
|
116
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de marco (default: 3).
|
|
117
|
-
- {cyan}page_size:{reset} [Integer] Limite de filas visibles con auto-scroll.
|
|
118
|
-
- {cyan}preselected:{reset} [Array] Indices o nombres marcados por defecto.
|
|
119
|
-
- {cyan}Teclas:{reset} {yellow}Espacio{reset} (marcar), {yellow}a{reset} (todos), {yellow}n{reset} (ninguno), {yellow}i{reset} (invertir), {yellow}Enter{reset}.
|
|
120
|
-
- {cyan}Retorna:{reset} {bright_yellow}Array{reset} con los elementos seleccionados por el usuario.
|
|
145
|
+
- {cyan}items:{reset} [Array] Strings o arreglos [Nombre, checked, desc].
|
|
146
|
+
- {cyan}Teclas:{reset} {yellow}Espacio{reset} (marcar), {yellow}a{reset} (todos), {yellow}n{reset} (ninguno), {yellow}i{reset} (invertir), {yellow}Enter{reset} (confirmar).
|
|
147
|
+
- {cyan}Retorna:{reset} {bright_yellow}Array{reset} con los elementos seleccionados.
|
|
121
148
|
|
|
122
149
|
{bright_green}* GRmenu.slider(prompt, min: 0, max: 100, step: 1, default: 50, unit: ""){reset}
|
|
123
150
|
(Alias: {bright_white}GRmenu.range{reset})
|
|
@@ -125,180 +152,240 @@
|
|
|
125
152
|
- {cyan}prompt:{reset} [String] Mensaje descriptivo.
|
|
126
153
|
- {cyan}min/max:{reset} [Numeric] Limites inferior y superior.
|
|
127
154
|
- {cyan}step:{reset} [Numeric] Incremento por paso (default: 1).
|
|
128
|
-
- {cyan}unit:{reset} [String] Unidad de medida (ej: "
|
|
129
|
-
- {cyan}color:{reset} [String] Color del marco y barra (soporta "rgb").
|
|
130
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de marco (default: 3).
|
|
155
|
+
- {cyan}unit:{reset} [String] Unidad de medida (ej: "%", "GB", "px").
|
|
131
156
|
- {cyan}Teclas:{reset} {yellow}← / →{reset} (paso), {yellow}↑ / ↓{reset} (paso x5), {yellow}Enter{reset} (guardar).
|
|
132
|
-
- {cyan}Retorna:{reset} {bright_yellow}Numeric{reset} con el valor
|
|
157
|
+
- {cyan}Retorna:{reset} {bright_yellow}Numeric{reset} con el valor seleccionado.
|
|
133
158
|
|
|
134
159
|
{bright_green}* GRmenu.confirm(pregunta, default: true, color: "cyan", style: 3){reset}
|
|
135
|
-
Modal interactivo con botones [
|
|
136
|
-
- {cyan}
|
|
137
|
-
- {cyan}
|
|
138
|
-
- {cyan}color:{reset} [String] Color del recuadro (default: "cyan", soporta "rgb").
|
|
139
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de borde (default: 3).
|
|
140
|
-
- {cyan}Teclas:{reset} {yellow}← / → / Tab{reset}, {yellow}s / y{reset} (Si), {yellow}n{reset} (No), {yellow}Enter{reset}.
|
|
141
|
-
- {cyan}Retorna:{reset} {bright_yellow}true{reset} si confirma Si, {bright_yellow}false{reset} si elige No o cancela.
|
|
160
|
+
Modal interactivo con botones [ Sí ] y [ No ].
|
|
161
|
+
- {cyan}Teclas:{reset} {yellow}← / → / Tab{reset}, {yellow}s / y{reset} (Si), {yellow}n{reset} (No), {yellow}Enter{reset}.
|
|
162
|
+
- {cyan}Retorna:{reset} {bright_yellow}true{reset} si confirma Si, {bright_yellow}false{reset} si elige No o cancela.
|
|
142
163
|
|
|
143
164
|
{bright_green}* GRmenu.input(prompt, default: "", password: false, color: "cyan", style: 3){reset}
|
|
144
|
-
Cuadro de entrada de texto interactivo con cursor en vivo.
|
|
145
|
-
- {cyan}
|
|
146
|
-
- {cyan}
|
|
147
|
-
- {cyan}password:{reset} [Boolean] Ocultar texto con asteriscos (****).
|
|
148
|
-
- {cyan}color:{reset} [String] Color del recuadro (soporta "rgb").
|
|
149
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de borde (default: 3).
|
|
150
|
-
- {cyan}Teclas:{reset} Escribir texto, {yellow}Backspace{reset}, {yellow}Ctrl+U{reset}, {yellow}Enter{reset}.
|
|
165
|
+
Cuadro de entrada de texto interactivo con cursor en vivo y scroll horizontal.
|
|
166
|
+
- {cyan}password:{reset} [Boolean] Enmascara caracteres con asteriscos (****).
|
|
167
|
+
- {cyan}Teclas:{reset} Escribir texto, {yellow}Backspace{reset}, {yellow}Ctrl+U{reset} (limpiar), {yellow}Enter{reset}.
|
|
151
168
|
- {cyan}Retorna:{reset} {bright_yellow}String{reset} ingresado por el usuario.
|
|
152
169
|
|
|
153
170
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
154
|
-
{bright_yellow}[
|
|
171
|
+
{bright_yellow}[6] BARRA DE PROGRESO, SPINNER E IMAGENES ANSI TRUECOLOR{reset}
|
|
155
172
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
156
173
|
|
|
157
174
|
{bright_green}* GRmenu.progress(total = 100, title: nil, color: "cyan", style: 3, &bloque){reset}
|
|
158
|
-
Barra de progreso fluida
|
|
159
|
-
- {cyan}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
- {cyan}width:{reset} [Integer, opcional] Ancho exacto en columnas.
|
|
165
|
-
- {cyan}Metodos del objeto bar en el bloque:{reset}
|
|
166
|
-
* {bright_white}bar.advance(n = 1, status: "Texto"){reset} -> Avanza n unidades.
|
|
167
|
-
* {bright_white}bar.set(valor, status: "Texto"){reset} -> Fija el progreso exacto.
|
|
168
|
-
* {bright_white}bar.finish(status: "Listo!"){reset} -> Lleva al 100% y cierra.
|
|
169
|
-
* {bright_white}bar.current{reset} -> Progreso actual.
|
|
170
|
-
* {bright_white}bar.total{reset} -> Total maximo.
|
|
175
|
+
Barra de progreso fluida con soporte para status dinámico protegido contra desbordes.
|
|
176
|
+
- {cyan}Uso con bloque:{reset}
|
|
177
|
+
{bright_white}GRmenu.progress(100, title: "Instalando", color: "rgb") do |bar|{reset}
|
|
178
|
+
{bright_white} bar.advance(25, status: "Descargando paquetes..."){reset}
|
|
179
|
+
{bright_white} bar.set(100, status: "Completado con exito"){reset}
|
|
180
|
+
{bright_white}end{reset}
|
|
171
181
|
|
|
172
182
|
{bright_green}* GRmenu.spinner(mensaje = "Cargando...", color: "cyan", delay: 0.08, &bloque){reset}
|
|
173
|
-
Indicador giratorio animado
|
|
174
|
-
- {cyan}
|
|
175
|
-
- {cyan}color:{reset} [String] Color del spinner (soporta "rgb").
|
|
176
|
-
- {cyan}level:{reset} [Integer 1 o 2] Brillo.
|
|
177
|
-
- {cyan}delay:{reset} [Float] Segundos por fotograma (default: 0.08).
|
|
178
|
-
- {cyan}Retorna:{reset} El valor retornado por el bloque { &bloque }.
|
|
179
|
-
- {cyan}Manejo de errores:{reset} Muestra [OK] en verde o [ERROR] en rojo.
|
|
183
|
+
Indicador giratorio animado en hilo de ejecucion secundario mientras el bloque corre.
|
|
184
|
+
- {cyan}Uso:{reset} {bright_white}GRmenu.spinner("Conectando a base de datos...") { sleep 2 }{reset}
|
|
180
185
|
|
|
181
186
|
{bright_green}* GRmenu.image(filepath, width: 40, height: nil, style: 3, color: "cyan"){reset}
|
|
182
187
|
Decodifica y renderiza imagenes (PNG, JPEG, WEBP, GIF, BMP) con micro-pixeles
|
|
183
188
|
ANSI TrueColor de 24 bits y escala proporcional exacta con cache instantanea.
|
|
184
|
-
- {cyan}filepath:{reset} [String] Ruta al archivo de imagen.
|
|
185
|
-
- {cyan}width:{reset} [Integer] Ancho en columnas de la terminal (default: 40).
|
|
186
|
-
- {cyan}height:{reset} [Integer, opcional] Alto en filas (nil = auto proporciones).
|
|
187
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de marco exterior (nil/0 = sin marco).
|
|
188
|
-
- {cyan}color:{reset} [String] Color del marco exterior (soporta "rgb").
|
|
189
|
-
- {cyan}center:{reset} [Boolean] Centrado horizontal (default: true).
|
|
190
189
|
|
|
191
190
|
{bright_green}* GRmenu.banner(texto, delay = 0, color: "magenta", level: 2, style: 3, font: 1){reset}
|
|
192
|
-
|
|
193
|
-
- {cyan}texto:{reset} [String] Frase a convertir en arte ASCII 3D.
|
|
194
|
-
- {cyan}delay:{reset} [Float] Pausa entre lineas para animacion (0 = instantaneo).
|
|
195
|
-
- {cyan}color:{reset} [String] Color del banner (soporta "rgb").
|
|
196
|
-
- {cyan}level:{reset} [Integer 1 o 2] Brillo.
|
|
197
|
-
- {cyan}style:{reset} [Integer 1..20] Estilo de marco.
|
|
198
|
-
- {cyan}font:{reset} [Integer 1..10] Fuente tipografica.
|
|
199
|
-
|
|
200
|
-
{bright_green}* GRmenu.div(long = nil, color = "blue", level = 1, char = "─"){reset}
|
|
201
|
-
- {cyan}long:{reset} [Integer, opcional] Longitud de la linea (nil = terminal).
|
|
202
|
-
- {cyan}color:{reset} [String] Color de la linea divisoria (soporta "rgb").
|
|
203
|
-
- {cyan}level:{reset} [Integer 1 o 2] Brillo.
|
|
204
|
-
- {cyan}char:{reset} [String] Caracter repetido ("─", "═", "-", "*", "~", etc.).
|
|
205
|
-
|
|
206
|
-
{bright_green}* GRmenu.clear_screen{reset} (alias: {bright_green}GRmenu.clr{reset})
|
|
207
|
-
Limpia la pantalla y scrollback con secuencias ANSI de alta velocidad.
|
|
208
|
-
|
|
209
|
-
{bright_green}* GRmenu.continue(texto = "Presiona cualquier tecla para continuar..."){reset}
|
|
210
|
-
Pausa la ejecucion y espera una sola pulsacion en modo TTY crudo.
|
|
191
|
+
Convierte cadenas en arte ASCII 3D con bordes y fuentes personalizables.
|
|
211
192
|
|
|
212
193
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
213
|
-
{bright_yellow}[
|
|
194
|
+
{bright_yellow}[7] SISTEMA DE TEMAS .gr (CSS PARA TUI) Y EXPORTACION{reset}
|
|
214
195
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
{cyan}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
196
|
+
|
|
197
|
+
{cyan}1. Temas Predefinidos Disponibles:{reset}
|
|
198
|
+
{bright_white}GRmenu.theme(:neon_red){reset} # Rojo neon vibrante con bordes dobles
|
|
199
|
+
{bright_white}GRmenu.theme(:cyberpunk){reset} # Neones cian, amarillo y Chroma RGB animado
|
|
200
|
+
{bright_white}GRmenu.theme(:matrix){reset} # Verdes fosforescentes estilo Hacker
|
|
201
|
+
{bright_white}GRmenu.theme(:dracula){reset} # Morados oscuros, rosas y cian
|
|
202
|
+
{bright_white}GRmenu.theme(:nord){reset} # Azules articos y tonos frios escandinavos
|
|
203
|
+
{bright_white}GRmenu.theme(:monokai){reset} # Paleta calida amarilla, magenta y naranja
|
|
204
|
+
{bright_white}GRmenu.theme(:sunset){reset} # Degradados rojo fuego, naranja y dorado
|
|
205
|
+
|
|
206
|
+
{cyan}2. Carga de Archivos .gr Externos:{reset}
|
|
207
|
+
{bright_white}GRmenu.import_config("ruta/mi_tema.gr"){reset}
|
|
208
|
+
|
|
209
|
+
{cyan}3. Exportar Tema Activo a Archivo .gr desde Ruby:{reset}
|
|
210
|
+
{bright_white}menu.export_theme("mi_tema.gr"){reset}
|
|
211
|
+
{bright_white}GRmenu.export_config("mi_tema.gr"){reset}
|
|
212
|
+
|
|
213
|
+
{cyan}4. Extraer Tema desde un Script de Ruby (sin bucles interactivos):{reset}
|
|
214
|
+
{bright_white}GRmenu.export_from_file("mi_app.rb", "tema_extraido.gr"){reset}
|
|
215
|
+
|
|
216
|
+
{cyan}5. Exportar Tema desde Consola / CLI (Banderas automaticas):{reset}
|
|
217
|
+
# Al pasar -theme a tu script, exporta a .gr y sale inmediatamente:
|
|
218
|
+
{bright_white}$ ruby mi_script.rb -theme{reset}
|
|
219
|
+
{bright_white}$ ruby mi_script.rb -theme -o tema_personalizado.gr{reset}
|
|
220
|
+
|
|
221
|
+
# Exportar mediante one-liner sin modificar tu script:
|
|
222
|
+
{bright_white}$ ruby -r./GRmenu -e 'GRmenu.export_from_file("mi_script.rb", "tema.gr")'{reset}
|
|
223
|
+
|
|
224
|
+
{cyan}6. CSS Inline en el mismo Codigo Ruby (Estilo <style> con <<-GR):{reset}
|
|
225
|
+
# Puedes inyectar bloques CSS directamente en tu script sin archivos .gr externos:
|
|
226
|
+
{bright_white}menu.style(<<-GR){reset}
|
|
227
|
+
{white}<<menu{reset}
|
|
228
|
+
{white}style:: 3{reset}
|
|
229
|
+
{white}animate:: fade{reset}
|
|
230
|
+
{white}desc_prefix:: ->{reset}
|
|
231
|
+
{white}border:: red:2{reset}
|
|
232
|
+
{white}focus:: yellow:2{reset}
|
|
233
|
+
{white}title:: red:2{reset}
|
|
234
|
+
{white}banner:: red:2{reset}
|
|
235
|
+
{white}subtitle:: cyan:1{reset}
|
|
236
|
+
{white}>>{reset}
|
|
237
|
+
{bright_white}GR{reset}
|
|
238
|
+
|
|
239
|
+
{cyan}7. Especificacion Completa de Bloques en un Archivo .gr:{reset}
|
|
240
|
+
{gray}GRmenu::config<-1->{reset}
|
|
241
|
+
{white}@theme:: "NombreDelTema"{reset}
|
|
242
|
+
{white}@author:: "TuNombre"{reset}
|
|
243
|
+
{white}@version:: "1.0"{reset}
|
|
244
|
+
|
|
245
|
+
{cyan}<<menu{reset}
|
|
246
|
+
{white}style:: 3{reset} # Estilo de marco 1..20
|
|
247
|
+
{white}banner_style:: 3{reset} # Estilo de marco del banner 1..20
|
|
248
|
+
{white}font:: 1{reset} # Fuente tipografica 3D 1..10
|
|
249
|
+
{white}animate:: diagonal{reset} # diagonal, linear, fade, rgb o false
|
|
250
|
+
{white}center:: true{reset} # Centrado en consola (true / false)
|
|
251
|
+
{white}desc_prefix:: [i]{reset} # Prefijo de tooltip ("[i]", "*", "->")
|
|
252
|
+
{white}border:: red:2{reset} # color:brillo (soporta "rgb:2")
|
|
253
|
+
{white}title:: red:2{reset}
|
|
254
|
+
{white}focus:: yellow:2{reset}
|
|
255
|
+
{white}options:: white:1{reset}
|
|
256
|
+
{white}banner:: red:2{reset}
|
|
257
|
+
{white}subtitle:: cyan:1{reset}
|
|
258
|
+
{white}divider:: red:1{reset}
|
|
259
|
+
{cyan}>>{reset}
|
|
260
|
+
|
|
261
|
+
{cyan}<<table{reset}
|
|
262
|
+
{white}style:: 3{reset} # Estilo de marco 1..20
|
|
263
|
+
{white}border_color:: red:2{reset} # Color del borde exterior y separadores
|
|
264
|
+
{white}header_color:: yellow:2{reset} # Color de los titulos de columna
|
|
265
|
+
{white}selected_row:: green:2{reset} # Color de la fila con foco activo
|
|
266
|
+
{white}row_color:: white:1{reset} # Color de filas regulares
|
|
267
|
+
{white}zebra_striping:: true{reset} # Alternar brillo tenue en filas pares
|
|
268
|
+
{white}page_size:: 8{reset} # Filas visibles antes de scroll
|
|
269
|
+
{cyan}>>{reset}
|
|
270
|
+
|
|
271
|
+
{cyan}<<card{reset}
|
|
272
|
+
{white}style:: 7{reset} # Estilo de marco 1..20 (curvas)
|
|
273
|
+
{white}border_color:: cyan:2{reset}
|
|
274
|
+
{white}title_color:: yellow:2{reset}
|
|
275
|
+
{white}content_color:: white:1{reset}
|
|
276
|
+
{cyan}>>{reset}
|
|
277
|
+
|
|
278
|
+
{cyan}<<slider{reset}
|
|
279
|
+
{white}style:: 3{reset}
|
|
280
|
+
{white}color:: rgb:2{reset}
|
|
281
|
+
{white}fill_char:: █{reset}
|
|
282
|
+
{white}empty_char:: ░{reset}
|
|
283
|
+
{cyan}>>{reset}
|
|
284
|
+
|
|
285
|
+
{cyan}<<checkbox{reset}
|
|
286
|
+
{white}style:: 3{reset}
|
|
287
|
+
{white}color:: rgb:2{reset}
|
|
288
|
+
{white}checked_mark:: [X]{reset}
|
|
289
|
+
{white}unchecked_mark:: [ ]{reset}
|
|
290
|
+
{cyan}>>{reset}
|
|
242
291
|
|
|
243
292
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
244
|
-
{bright_yellow}[
|
|
293
|
+
{bright_yellow}[8] MODULO DE COLORES: Color / C Y PERSONALIZACION HEXADECIMAL{reset}
|
|
245
294
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
246
|
-
{
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
295
|
+
{cyan}1. Como Usar Colores Personalizados (Hexadecimal y Neon):{reset}
|
|
296
|
+
El motor soporta de forma 100% nativa TrueColor (24 bits) en tres vias:
|
|
297
|
+
|
|
298
|
+
{white}A) En Codigo Normal con menu.set_style (Encadenamiento Fluido / Chaining):{reset}
|
|
299
|
+
{bright_white}menu.set_style.border("#FF0055").title("#00F5FF").focus("gold"){reset}
|
|
300
|
+
{bright_white}menu.set_style.banner("neon_emerald").subtitle("#A6E3A1"){reset}
|
|
301
|
+
|
|
302
|
+
{white}B) En CSS Inline tipo <style> (menu.style <<-GR ... GR):{reset}
|
|
303
|
+
{bright_white}menu.style(<<-GR){reset}
|
|
304
|
+
{white}border:: #FF0055:1{reset}
|
|
305
|
+
{white}title:: #00F5FF:2{reset}
|
|
306
|
+
{white}focus:: gold:2{reset}
|
|
307
|
+
{white}banner:: neon_cyan:2{reset}
|
|
308
|
+
{bright_white}GR{reset}
|
|
309
|
+
|
|
310
|
+
{white}C) En Archivos de Tema .gr (ej. mis_colores.gr):{reset}
|
|
311
|
+
{white}border:: #FF0055{reset} # Codigo hex 6 digitos
|
|
312
|
+
{white}title:: #0FF{reset} # Codigo hex 3 digitos shorthand
|
|
313
|
+
{white}focus:: neon_gold:2{reset} # Nombre neon con nivel de brillo
|
|
314
|
+
{white}options:: silver:1{reset} # Nombre normal con nivel de brillo
|
|
315
|
+
|
|
316
|
+
{white}D) Directamente con el modulo Color / C:{reset}
|
|
317
|
+
{bright_white}puts Color.hex("#FF0055", "Texto Carmesi Hex"){reset}
|
|
318
|
+
{bright_white}puts Color.gold("Texto Dorado Directo"){reset}
|
|
319
|
+
{bright_white}puts Color.neon_emerald("Texto Esmeralda Neon"){reset}
|
|
320
|
+
|
|
321
|
+
{cyan}2. Catalogo de 90+ Colores (Cada uno con version Normal y version Neon):{reset}
|
|
322
|
+
{bright_yellow}Metales y Joyas:{reset}
|
|
323
|
+
- gold / neon_gold | silver / neon_silver | platinum / neon_platinum
|
|
324
|
+
- bronze / neon_bronze | copper / neon_copper | ruby / neon_ruby
|
|
325
|
+
- emerald / neon_emerald | sapphire / neon_sapphire
|
|
326
|
+
|
|
327
|
+
{bright_yellow}Fuego, Atardecer y Calidos:{reset}
|
|
328
|
+
- crimson / neon_crimson | scarlet / neon_scarlet | coral / neon_coral
|
|
329
|
+
- amber / neon_amber | peach / neon_peach | orange / neon_orange
|
|
330
|
+
- red / neon_red | yellow / neon_yellow
|
|
331
|
+
|
|
332
|
+
{bright_yellow}Naturaleza, Menta y Verdes:{reset}
|
|
333
|
+
- lime / neon_lime | mint / neon_mint | jade / neon_jade
|
|
334
|
+
- forest / neon_forest | teal / neon_teal | green / neon_green
|
|
335
|
+
|
|
336
|
+
{bright_yellow}Agua, Cielo y Tonos Frios:{reset}
|
|
337
|
+
- turquoise / neon_turquoise | sky / neon_sky | azure / neon_azure
|
|
338
|
+
- cobalt / neon_cobalt | ice / neon_ice | cyan / neon_cyan
|
|
339
|
+
- aqua / neon_aqua | blue / neon_blue
|
|
340
|
+
|
|
341
|
+
{bright_yellow}Pasteles, Morados y Rosas:{reset}
|
|
342
|
+
- lavender / neon_lavender | mauve / neon_mauve | violet / neon_violet
|
|
343
|
+
- indigo / neon_indigo | fuchsia / neon_fuchsia | rose / neon_rose
|
|
344
|
+
- hot_pink / neon_hot_pink | pink / neon_pink | purple / neon_purple
|
|
345
|
+
- magenta / neon_magenta
|
|
346
|
+
|
|
347
|
+
{bright_yellow}Terminal, Hacker y Monitores:{reset}
|
|
348
|
+
- matrix / neon_matrix | charcoal / neon_charcoal | white / neon_white
|
|
349
|
+
- gray | black
|
|
350
|
+
|
|
351
|
+
{cyan}3. Modo Dinamico Arcoiris (Chroma Loop):{reset}
|
|
352
|
+
- {bright_yellow}rgb{reset} / {bright_yellow}rainbow{reset} / {bright_yellow}chroma{reset} -> Espectro animado continuo a 30 FPS en vivo.
|
|
256
353
|
|
|
257
354
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
258
|
-
{bright_yellow}[
|
|
355
|
+
{bright_yellow}[9] FUENTES ASCII 3D PARA BANNERS (font: 1 al 10){reset}
|
|
259
356
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
260
|
-
{yellow} 1{reset} ->
|
|
261
|
-
{yellow} 2{reset} ->
|
|
262
|
-
{yellow} 3{reset} ->
|
|
263
|
-
{yellow} 4{reset} ->
|
|
264
|
-
{yellow} 5{reset} ->
|
|
265
|
-
{yellow} 6{reset} -> {cyan}╓───╖{reset} (Simple horiz. doble vert.) {yellow}16{reset} -> {cyan}~~~~~{reset} (Ondulado)
|
|
266
|
-
{yellow} 7{reset} -> {cyan}╭───╮{reset} (Curvas redondeadas) {yellow}17{reset} -> {cyan}-----{reset} (Guiones)
|
|
267
|
-
{yellow} 8{reset} -> {cyan}▛▀▀▀▜{reset} (Bloques outline) {yellow}18{reset} -> {cyan}◆◆◆◆◆{reset} (Rombos / Diamantes)
|
|
268
|
-
{yellow} 9{reset} -> {cyan}▓▓▓▓▓{reset} (Sombreado oscuro) {yellow}19{reset} -> {cyan}●○○○●{reset} (Circulos - Default Op.)
|
|
269
|
-
{yellow}10{reset} -> {cyan}▒▒▒▒▒{reset} (Sombreado medio) {yellow}20{reset} -> {cyan}★☆☆☆★{reset} (Estrellas decoradas)
|
|
357
|
+
{yellow} 1{reset} -> ANSI Shadow 3D (Default) {yellow} 6{reset} -> Modular Pipe 3D
|
|
358
|
+
{yellow} 2{reset} -> Slant 3D (FIGlet) {yellow} 7{reset} -> Bubble / Round Gothic
|
|
359
|
+
{yellow} 3{reset} -> Doom / Standard 3D {yellow} 8{reset} -> Double-Line Wire 3D
|
|
360
|
+
{yellow} 4{reset} -> Graffiti Shadow 3D {yellow} 9{reset} -> Solid Fat 3D Block
|
|
361
|
+
{yellow} 5{reset} -> Small Slant / Mini 3D {yellow}10{reset} -> Arcade Stars Matrix
|
|
270
362
|
|
|
271
363
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
272
|
-
{bright_yellow}[
|
|
364
|
+
{bright_yellow}[10] ESTILOS DE MARCO Y BORDES (style: 1 al 20){reset}
|
|
273
365
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
366
|
+
{yellow} 1{reset} -> ##### (Hash) {yellow}11{reset} -> ░░░░░ (Sombreado suave)
|
|
367
|
+
{yellow} 2{reset} -> ┌───┐ (Linea simple) {yellow}12{reset} -> █████ (Bloque solido)
|
|
368
|
+
{yellow} 3{reset} -> ╔═══╗ (Doble linea) {yellow}13{reset} -> ***** (Asteriscos)
|
|
369
|
+
{yellow} 4{reset} -> ┏━━━┓ (Linea gruesa) {yellow}14{reset} -> +++++ (Cruces)
|
|
370
|
+
{yellow} 5{reset} -> ╒═══╕ (Doble horiz.) {yellow}15{reset} -> ===== (Iguales)
|
|
371
|
+
{yellow} 6{reset} -> ╓───╖ (Simple horiz.) {yellow}16{reset} -> ~~~~~ (Ondulado)
|
|
372
|
+
{yellow} 7{reset} -> ╭───╮ (Curvas) {yellow}17{reset} -> ----- (Guiones)
|
|
373
|
+
{yellow} 8{reset} -> ▛▀▀▀▜ (Bloques) {yellow}18{reset} -> ◆◆◆◆◆ (Diamantes)
|
|
374
|
+
{yellow} 9{reset} -> ▓▓▓▓▓ (Sombreado oscuro) {yellow}19{reset} -> ●○○○● (Circulos)
|
|
375
|
+
{yellow}10{reset} -> ▒▒▒▒▒ (Sombreado medio) {yellow}20{reset} -> ★☆☆☆★ (Estrellas)
|
|
282
376
|
|
|
283
377
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
284
|
-
{bright_yellow}[
|
|
378
|
+
{bright_yellow}[11] NAVEGACION POR TECLADO Y ATAJOS{reset}
|
|
285
379
|
{bright_magenta}═════════════════════════════════════════════════════════════════════════════════════{reset}
|
|
380
|
+
* {bright_yellow}↑ (Arriba):{reset} Mover foco arriba. En el tope salta al fondo (Snake loop).
|
|
381
|
+
* {bright_yellow}↓ (Abajo):{reset} Mover foco abajo. En el fondo salta al tope (Snake loop).
|
|
382
|
+
* {bright_yellow}← / →:{reset} En grids 2D cambia de columna; en sliders ajusta valor.
|
|
383
|
+
* {bright_yellow}Enter:{reset} Ejecuta la opcion seleccionada o confirma modal/tabla.
|
|
384
|
+
* {bright_yellow}s:{reset} En tablas interactivas, ordena por la columna activa.
|
|
385
|
+
* {bright_yellow}Espacio:{reset} En casillas de verificacion (checkbox), marca/desmarca.
|
|
386
|
+
* {bright_yellow}a / n / i:{reset} En checkbox: (a) marcar todos, (n) ninguno, (i) invertir.
|
|
387
|
+
* {bright_yellow}q / Esc:{reset} Sale del menu, cancela modal o limpia buscador.
|
|
388
|
+
* {bright_yellow}Backspace:{reset} En buscadores e inputs, borra la ultima letra.
|
|
389
|
+
* {bright_yellow}Ctrl+U:{reset} En buscadores e inputs, limpia toda la linea escrita.
|
|
286
390
|
|
|
287
|
-
{cyan}1. Menu con Buscador en Vivo y Modo RGB:{reset}
|
|
288
|
-
{bright_white}menu = GRmenu.new([:opcion1, :opcion2], banner: "APP", search: true){reset}
|
|
289
|
-
{bright_white}menu.set_style.banner("rgb"){reset}
|
|
290
|
-
{bright_white}menu.set_style.border("rgb"){reset}
|
|
291
|
-
{bright_white}menu.draw{reset}
|
|
292
|
-
|
|
293
|
-
{cyan}2. Seleccion Multiple de Paquetes:{reset}
|
|
294
|
-
{bright_white}items = ["PostgreSQL 16", "Redis 7.2", "Nginx"]{reset}
|
|
295
|
-
{bright_white}elegidos = GRmenu.checkbox(items, title: "Instalador", color: "rgb"){reset}
|
|
296
|
-
|
|
297
|
-
{cyan}3. Control Deslizante de Memoria:{reset}
|
|
298
|
-
{bright_white}ram = GRmenu.slider("Memoria RAM", min: 1, max: 64, default: 16, unit: "GB"){reset}
|
|
299
|
-
|
|
300
|
-
{cyan}4. Barra de Progreso con Status en Vivo:{reset}
|
|
301
|
-
{bright_white}GRmenu.progress(100, title: "Descargando", color: "rgb") do |bar|{reset}
|
|
302
|
-
{bright_white} 10.times { bar.advance(10, status: "Descargando bloques...") }{reset}
|
|
303
|
-
{bright_white}end{reset}
|
|
304
391
|
{bright_blue}─────────────────────────────────────────────────────────────────────────────────────{reset}
|