aleman 1.6.2 → 1.7.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.
package/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ 2025.09.13, v1.7.0
2
+
3
+ feature:
4
+ - 176eb02 aleman: menu: Number + j, Number + k
5
+
1
6
  2025.09.12, v1.6.2
2
7
 
3
8
  fix:
@@ -1,9 +1,6 @@
1
1
  import {getSubmenu} from './submenu/index.js';
2
2
 
3
- export const keys = [
4
- 'ArrowDown',
5
- 'j',
6
- ];
3
+ export const keys = ['ArrowDown'];
7
4
  export const preventDefault = true;
8
5
 
9
6
  export const filter = ({state}) => state.command === 'show';
package/menu/addons/up.js CHANGED
@@ -1,9 +1,6 @@
1
1
  import {getSubmenu} from './submenu/index.js';
2
2
 
3
- export const keys = [
4
- 'ArrowUp',
5
- 'k',
6
- ];
3
+ export const keys = ['ArrowUp'];
7
4
 
8
5
  export const preventDefault = true;
9
6
 
@@ -1,4 +1,8 @@
1
1
  import * as up from './up.js';
2
+ import * as down from './down.js';
3
+ import {getSubmenu} from './submenu/index.js';
4
+
5
+ const isNumber = (a) => !Number.isNaN(a) && typeof a === 'number';
2
6
 
3
7
  export const createVim = () => {
4
8
  const buffer = [];
@@ -16,13 +20,87 @@ const filter = ({state}) => state.command === 'show';
16
20
 
17
21
  const createListener = (buffer) => ({event, state, options}) => {
18
22
  const {key} = event;
23
+ const {index} = state;
24
+
25
+ const menuCount = Object.keys(options.menu).length;
26
+ const submenuCount = Object.keys(getSubmenu({
27
+ index,
28
+ options,
29
+ })).length;
19
30
 
20
31
  if (!buffer.length && key === 'g') {
21
32
  buffer.push('g');
22
33
  return null;
23
34
  }
24
35
 
25
- if (buffer[0] === 'g' && key === 'g') {
36
+ if (!buffer.length && /\d/.test(key)) {
37
+ buffer.push(Number(key));
38
+ return null;
39
+ }
40
+
41
+ if (!buffer.length && key === 'j')
42
+ buffer.push(1);
43
+
44
+ if (!buffer.length && key === 'k')
45
+ buffer.push(1);
46
+
47
+ const [first] = buffer;
48
+
49
+ if (isNumber(first) && key === 'j') {
50
+ buffer = [];
51
+ const {insideSubmenu, submenuIndex} = state;
52
+
53
+ let newIndex = insideSubmenu ? index : index + first - 1;
54
+ let newSubmenuIndex = insideSubmenu ? submenuIndex + first : submenuIndex;
55
+
56
+ if (newIndex > menuCount - 1)
57
+ newIndex = menuCount - 1;
58
+
59
+ if (newSubmenuIndex > submenuCount - 1)
60
+ newSubmenuIndex = submenuCount - 1;
61
+
62
+ const newState = {
63
+ ...state,
64
+ index: newIndex,
65
+ submenuIndex: newSubmenuIndex,
66
+ };
67
+
68
+ return down.listener({
69
+ state: newState,
70
+ options,
71
+ });
72
+ }
73
+
74
+ if (isNumber(first) && key === 'k') {
75
+ buffer = [];
76
+ const {
77
+ insideSubmenu,
78
+ index,
79
+ submenuIndex,
80
+ } = state;
81
+
82
+ let newIndex = insideSubmenu ? index : index - first - 1;
83
+ let newSubmenuIndex = insideSubmenu ? submenuIndex - first - 1 : submenuIndex;
84
+
85
+ if (newIndex < -1)
86
+ newIndex = -1;
87
+
88
+ if (newSubmenuIndex < -1)
89
+ newSubmenuIndex = -1;
90
+
91
+ const newState = {
92
+ ...state,
93
+ index: newIndex,
94
+ submenuIndex: newSubmenuIndex,
95
+ };
96
+
97
+ return down.listener({
98
+ state: newState,
99
+ options,
100
+ });
101
+ }
102
+
103
+ if (first === 'g' && key === 'g') {
26
104
  buffer = [];
27
105
  const {
28
106
  insideSubmenu,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aleman",
3
- "version": "1.6.2",
3
+ "version": "1.7.0",
4
4
  "type": "module",
5
5
  "author": "coderaiser <mnemonic.enemy@gmail.com> (https://github.com/coderaiser)",
6
6
  "description": "🐊Putout-based framework for web",