aleman 1.16.2 → 1.16.4

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 (140) hide show
  1. package/ChangeLog +17 -1
  2. package/menu/addons/click/click.js +4 -4
  3. package/menu/addons/item-click/item-click.js +4 -1
  4. package/menu/addons/j/j.js +1 -0
  5. package/menu/rules/build-menu/fixture/build-menu-fix.js +2 -2
  6. package/menu/rules/build-menu/fixture/icon-fix.js +2 -2
  7. package/menu/rules/build-menu/fixture/nested-fix.js +2 -2
  8. package/menu/rules/build-menu/index.js +2 -1
  9. package/nemo/README.md +28 -0
  10. package/nemo/addons/click/click.js +37 -0
  11. package/nemo/addons/click/fixture/click-fix.js +8 -0
  12. package/nemo/addons/click/fixture/click.js +8 -0
  13. package/nemo/addons/click/fixture/not-fn.js +8 -0
  14. package/nemo/addons/context-menu.js +50 -0
  15. package/nemo/addons/down/down.js +44 -0
  16. package/nemo/addons/down/fixture/down-fix.js +16 -0
  17. package/nemo/addons/down/fixture/down.js +16 -0
  18. package/nemo/addons/down/fixture/infinite-scroll-fix.js +16 -0
  19. package/nemo/addons/down/fixture/infinite-scroll.js +16 -0
  20. package/nemo/addons/enter/enter.js +30 -0
  21. package/nemo/addons/enter/fixture/enter-fix.js +8 -0
  22. package/nemo/addons/enter/fixture/enter.js +8 -0
  23. package/nemo/addons/escape/escape.js +11 -0
  24. package/nemo/addons/escape/fixture/escape-fix.js +8 -0
  25. package/nemo/addons/escape/fixture/escape.js +8 -0
  26. package/nemo/addons/gg/fixture/gg-fix.js +8 -0
  27. package/nemo/addons/gg/fixture/gg.js +8 -0
  28. package/nemo/addons/gg/fixture/hide.js +8 -0
  29. package/nemo/addons/gg/fixture/submenu-fix.js +17 -0
  30. package/nemo/addons/gg/fixture/submenu.js +18 -0
  31. package/nemo/addons/gg/gg.js +26 -0
  32. package/nemo/addons/index.js +25 -0
  33. package/nemo/addons/item-click/fixture/item-click-fix.js +8 -0
  34. package/nemo/addons/item-click/fixture/item-click.js +8 -0
  35. package/nemo/addons/item-click/fixture/no-click.js +8 -0
  36. package/nemo/addons/item-click/fixture/not-fn.js +8 -0
  37. package/nemo/addons/item-click/fixture/run-fix.js +8 -0
  38. package/nemo/addons/item-click/fixture/run.js +8 -0
  39. package/nemo/addons/item-click/item-click.js +43 -0
  40. package/nemo/addons/j/fixture/infinite-scroll-fix.js +8 -0
  41. package/nemo/addons/j/fixture/infinite-scroll.js +8 -0
  42. package/nemo/addons/j/fixture/j-fix.js +8 -0
  43. package/nemo/addons/j/fixture/j.js +8 -0
  44. package/nemo/addons/j/fixture/m.js +8 -0
  45. package/nemo/addons/j/fixture/submenu-fix.js +8 -0
  46. package/nemo/addons/j/fixture/submenu-infinite-scroll-fix.js +16 -0
  47. package/nemo/addons/j/fixture/submenu-infinite-scroll.js +16 -0
  48. package/nemo/addons/j/fixture/submenu.js +8 -0
  49. package/nemo/addons/j/j.js +10 -0
  50. package/nemo/addons/k/fixture/infinite-scroll-fix.js +8 -0
  51. package/nemo/addons/k/fixture/infinite-scroll.js +8 -0
  52. package/nemo/addons/k/fixture/k-fix.js +8 -0
  53. package/nemo/addons/k/fixture/k.js +8 -0
  54. package/nemo/addons/k/fixture/m.js +8 -0
  55. package/nemo/addons/k/fixture/submenu-fix.js +8 -0
  56. package/nemo/addons/k/fixture/submenu.js +8 -0
  57. package/nemo/addons/k/k.js +34 -0
  58. package/nemo/addons/left.js +11 -0
  59. package/nemo/addons/menu/get-menu-path.js +12 -0
  60. package/nemo/addons/mouse-leave/fixture/mouse-enter-fix.js +8 -0
  61. package/nemo/addons/mouse-leave/fixture/mouse-enter.js +8 -0
  62. package/nemo/addons/mouse-leave/fixture/unselect-all.js +8 -0
  63. package/nemo/addons/mouse-leave/index.js +10 -0
  64. package/nemo/addons/right.js +23 -0
  65. package/nemo/addons/run/index.js +17 -0
  66. package/nemo/addons/set-position/calculate.js +28 -0
  67. package/nemo/addons/set-position/set-position.js +35 -0
  68. package/nemo/addons/shift-g/fixture/hide.js +8 -0
  69. package/nemo/addons/shift-g/fixture/shift-g-fix.js +8 -0
  70. package/nemo/addons/shift-g/fixture/shift-g.js +8 -0
  71. package/nemo/addons/shift-g/shift-g.js +41 -0
  72. package/nemo/addons/submenu/index.js +12 -0
  73. package/nemo/addons/up.js +42 -0
  74. package/nemo/hydrate-menu.js +47 -0
  75. package/nemo/importmap.js +8 -0
  76. package/nemo/menu.css +65 -0
  77. package/nemo/nemo.js +117 -0
  78. package/nemo/rules/build-menu/fixture/build-menu-fix.js +16 -0
  79. package/nemo/rules/build-menu/fixture/build-menu.js +3 -0
  80. package/nemo/rules/build-menu/index.js +101 -0
  81. package/nemo/rules/hide-submenu/fixture/hide-submenu-fix.js +17 -0
  82. package/nemo/rules/hide-submenu/fixture/hide-submenu.js +18 -0
  83. package/nemo/rules/hide-submenu/fixture/no-menu.js +16 -0
  84. package/nemo/rules/hide-submenu/fixture/show-submenu.js +18 -0
  85. package/nemo/rules/hide-submenu/index.js +35 -0
  86. package/nemo/rules/index.js +21 -0
  87. package/nemo/rules/menu/fixture/hide-menu-fix.js +3 -0
  88. package/nemo/rules/menu/fixture/hide-menu.js +3 -0
  89. package/nemo/rules/menu/fixture/no-menu.js +3 -0
  90. package/nemo/rules/menu/fixture/show-menu-fix.js +1 -0
  91. package/nemo/rules/menu/fixture/show-menu.js +1 -0
  92. package/nemo/rules/menu/index.js +40 -0
  93. package/nemo/rules/select/fixture/no-current.js +8 -0
  94. package/nemo/rules/select/fixture/no-data-name.js +4 -0
  95. package/nemo/rules/select/fixture/no-index.js +8 -0
  96. package/nemo/rules/select/fixture/no-next.js +5 -0
  97. package/nemo/rules/select/fixture/no-parent.js +2 -0
  98. package/nemo/rules/select/fixture/select-fix.js +8 -0
  99. package/nemo/rules/select/fixture/select.js +8 -0
  100. package/nemo/rules/select/fixture/submenu-fix.js +17 -0
  101. package/nemo/rules/select/fixture/submenu.js +18 -0
  102. package/nemo/rules/select/fixture/wrong-data-name.js +4 -0
  103. package/nemo/rules/select/index.js +94 -0
  104. package/nemo/rules/set-position/fixture/no-style-fix.js +2 -0
  105. package/nemo/rules/set-position/fixture/no-style.js +2 -0
  106. package/nemo/rules/set-position/fixture/not-menu.js +2 -0
  107. package/nemo/rules/set-position/fixture/same-position.js +2 -0
  108. package/nemo/rules/set-position/fixture/set-position-fix.js +2 -0
  109. package/nemo/rules/set-position/fixture/set-position.js +2 -0
  110. package/nemo/rules/set-position/index.js +76 -0
  111. package/nemo/rules/submenu/fixture/last-selected-fix.js +53 -0
  112. package/nemo/rules/submenu/fixture/last-selected.js +54 -0
  113. package/nemo/rules/submenu/fixture/li.js +3 -0
  114. package/nemo/rules/submenu/fixture/no-submenu-selected.js +17 -0
  115. package/nemo/rules/submenu/fixture/no-submenu.js +54 -0
  116. package/nemo/rules/submenu/fixture/not-menu.js +17 -0
  117. package/nemo/rules/submenu/fixture/submenu-fix.js +53 -0
  118. package/nemo/rules/submenu/fixture/submenu.js +54 -0
  119. package/nemo/rules/submenu/index.js +76 -0
  120. package/nemo/rules/unselect-all/fixture/hide.js +8 -0
  121. package/nemo/rules/unselect-all/fixture/nested-fix.js +17 -0
  122. package/nemo/rules/unselect-all/fixture/nested.js +18 -0
  123. package/nemo/rules/unselect-all/fixture/no-data-name.js +4 -0
  124. package/nemo/rules/unselect-all/fixture/no-parent.js +2 -0
  125. package/nemo/rules/unselect-all/fixture/unselect-all-fix.js +8 -0
  126. package/nemo/rules/unselect-all/fixture/unselect-all.js +8 -0
  127. package/nemo/rules/unselect-all/index.js +51 -0
  128. package/nemo/rules/unselect-all-submenu-items/fixture/show-submenu-fix.js +33 -0
  129. package/nemo/rules/unselect-all-submenu-items/fixture/show-submenu.js +34 -0
  130. package/nemo/rules/unselect-all-submenu-items/fixture/unselect-all-submenu-items-fix.js +33 -0
  131. package/nemo/rules/unselect-all-submenu-items/fixture/unselect-all-submenu-items.js +33 -0
  132. package/nemo/rules/unselect-all-submenu-items/index.js +30 -0
  133. package/nemo/rules/unselect-wrongly-selected/fixture/hide.js +17 -0
  134. package/nemo/rules/unselect-wrongly-selected/fixture/unselect-wrongly-selected-fix.js +17 -0
  135. package/nemo/rules/unselect-wrongly-selected/fixture/unselect-wrongly-selected.js +17 -0
  136. package/nemo/rules/unselect-wrongly-selected/index.js +39 -0
  137. package/nemo/state/parse-state.js +91 -0
  138. package/nemo/state/print-state.js +14 -0
  139. package/nemo/state/state.js +123 -0
  140. package/package.json +4 -2
package/ChangeLog CHANGED
@@ -1,3 +1,19 @@
1
+ 2025.11.27, v1.16.4
2
+
3
+ fix:
4
+ - eb62430 aleman: click (coderaiser/cloudcmd#449)
5
+
6
+ feature:
7
+ - a79d551 nemo: state: infiniteScroll
8
+ - 2fd1806 nemo: j: updateState
9
+ - 9c2e36a nemo: build-menu: update
10
+ - 4d0e263 nemo: add
11
+
12
+ 2025.09.26, v1.16.3
13
+
14
+ fix:
15
+ - b1b6854 aleman: menu: item-click: run listener (coderaiser/cloudcmd#446)
16
+
1
17
  2025.09.25, v1.16.2
2
18
 
3
19
  fix:
@@ -193,7 +209,7 @@ feature:
193
209
 
194
210
  feature:
195
211
  - f745059 aleman: menu: build-menu: simplify
196
- - 88f4f81 aleman: menu: rules: hide-submenu: siplify
212
+ - 88f4f81 aleman: menu: rules: hide-submenu: simplify
197
213
  - ffe78e2 aleman: menu: jsx-operator: containsClass
198
214
  - 779f1e6 aleman: menu: rules: menu: simplify
199
215
  - fe341ff menu: set-position: simplify
@@ -12,6 +12,9 @@ export const filter = ({event, state, options}) => {
12
12
  getMenuPath = _getMenuPath,
13
13
  } = options;
14
14
 
15
+ if (state.command === 'hide')
16
+ return false;
17
+
15
18
  const menuPath = getMenuPath(event);
16
19
 
17
20
  if (!menuPath)
@@ -19,10 +22,7 @@ export const filter = ({event, state, options}) => {
19
22
 
20
23
  const fn = jessy(menuPath, menu);
21
24
 
22
- if (!isFn(fn))
23
- return false;
24
-
25
- return state.command === 'show';
25
+ return isFn(fn);
26
26
  };
27
27
 
28
28
  export const listener = ({options, state}) => {
@@ -10,7 +10,10 @@ export const createItemClick = (name) => ({
10
10
  filter,
11
11
  });
12
12
 
13
- const filter = ({event, options}) => {
13
+ const filter = ({event, state, options}) => {
14
+ if (state.command !== 'show')
15
+ return;
16
+
14
17
  const {
15
18
  getMenuPath = _getMenuPath,
16
19
  menu,
@@ -13,6 +13,7 @@ export function listener({count, state, options}) {
13
13
  } = state;
14
14
 
15
15
  const menuCount = Object.keys(menu).length;
16
+
16
17
  const submenuCount = Object.keys(getSubmenu({
17
18
  index,
18
19
  options,
@@ -1,8 +1,8 @@
1
1
  <ul data-name="menu" class="menu menu-hidden">
2
2
  <li data-name="menu-item" data-menu-index="0" className="menu-item" data-menu-path="hello">
3
- <label data-menu-path="">hello</label>
3
+ <label data-menu-path="hello">hello</label>
4
4
  </li>
5
5
  <li data-name="menu-item" data-menu-index="1" className="menu-item" data-menu-path="world">
6
- <label data-menu-path="">world</label>
6
+ <label data-menu-path="world">world</label>
7
7
  </li>
8
8
  </ul>;
@@ -1,8 +1,8 @@
1
1
  <ul data-name="menu" class="menu menu-hidden">
2
2
  <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-hello" data-menu-path="hello">
3
- <label data-menu-path="">hello</label>
3
+ <label data-menu-path="hello">hello</label>
4
4
  </li>
5
5
  <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-world" data-menu-path="world">
6
- <label data-menu-path="">world</label>
6
+ <label data-menu-path="world">world</label>
7
7
  </li>
8
8
  </ul>;
@@ -1,9 +1,9 @@
1
1
  <ul data-name="menu" class="menu menu-hidden">
2
2
  <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-hello menu-submenu" data-menu-path="hello">
3
- <label data-menu-path="">hello</label>
3
+ <label data-menu-path="hello">hello</label>
4
4
  <ul data-name="menu" className="menu menu-hidden">
5
5
  <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-world" data-menu-path="hello.world">
6
- <label data-menu-path="">world</label>
6
+ <label data-menu-path="hello.world">world</label>
7
7
  </li>
8
8
  </ul></li>
9
9
  </ul>;
@@ -49,7 +49,8 @@ export const fix = ({path, menu, icon, name = ''}) => {
49
49
 
50
50
  setDataMenuIndex(i++, menuItem);
51
51
  setDataMenuPath(key, name, menuItem);
52
- // setDataMenuPath(key, name, menuItem.children[3]);
52
+
53
+ setDataMenuPath(key, name, menuItem.children[1]);
53
54
  children.push(INDENT, menuItem);
54
55
 
55
56
  if (isObject(value)) {
package/nemo/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # Nemo
2
+
3
+ ## Rules
4
+
5
+ - ✅[`show-menu`](https://putout.cloudcmd.io/#/gist/884fd40c07b94951de1a9ce99afab015/21d4881b44955b1426f80e87c76b7ad86eeea464);
6
+ - ✅[`select`](https://putout.cloudcmd.io/#/gist/10891aa58ff2ecfa1728ed19aeb2e3f2/ce536fb0b414faefbae5d0c8a094517beb1c606e);
7
+ - ✅[`unselect-all`](https://putout.cloudcmd.io/#/gist/ca24f199f508cccb34b11baf726eba83/96f08fa91331ac6265d9f5ff48692c9d4ad1b98b);
8
+ - ✅[`unselect-wrongly-selected`](https://putout.cloudcmd.io/#/gist/bea80410db3824764800d912b2c574df/090445e44dcf211795e408a57a4991c9d4b12693);
9
+ - ✅[`build-menu`](https://putout.cloudcmd.io/#/gist/6b009c71c21b8c098cd99b1fb6fa20ee/e70331819a307e233e522abf392f79312df14017);
10
+ - ✅[`set-position`](https://putout.cloudcmd.io/#/gist/215bb4654a27f15235f3e380a3035138/7f4af88aaa4863be4f1b8a90b9f0f4b1cf4744a0);
11
+ - ✅[`submenu`](https://putout.cloudcmd.io/#/gist/b0a3b64d14f3497869a345e7e438d66e/feb671c4a59a555ff408af92fab602bae3a94e2f);
12
+ - ✅[`hide-submenu`](https://putout.cloudcmd.io/#/gist/fdf6cf60a7fdfa2bae64279eda2ab023/ce0d5e24dc5e0b3436b7e87585c62e8a5132a9ab);
13
+ - ✅[`unsele-all-submenu-items`](https://putout.cloudcmd.io/#/gist/ad9d9c2d6b4f0daded8cdce7fc2e95d8/38c95ec76778bdf9e93bd1d15eef392874fc7c19);
14
+
15
+ ## Hot Keys
16
+
17
+ | Key | Operation |
18
+ |:-------------|:------------------------|
19
+ | `Up`, `j` | move cursor up |
20
+ | `Down`, `k` | move cursor down |
21
+ | `Left`, `h` | close submenu |
22
+ | `Right`, `l` | open submenu |
23
+ | `G` or `$` | navigate to bottom file |
24
+ | `gg` or `^` | navigate to top file |
25
+
26
+ ## License
27
+
28
+ MIT
@@ -0,0 +1,37 @@
1
+ import jessy from 'jessy';
2
+ import {getMenuPath as _getMenuPath} from '../menu/get-menu-path.js';
3
+
4
+ const isFn = (a) => typeof a === 'function';
5
+
6
+ export const events = ['click'];
7
+ export const preventDefault = true;
8
+
9
+ export const filter = ({event, state, options}) => {
10
+ const {
11
+ menu,
12
+ getMenuPath = _getMenuPath,
13
+ } = options;
14
+
15
+ const menuPath = getMenuPath(event);
16
+
17
+ if (!menuPath)
18
+ return true;
19
+
20
+ const fn = jessy(menuPath, menu);
21
+
22
+ if (!isFn(fn))
23
+ return false;
24
+
25
+ return state.command === 'show';
26
+ };
27
+
28
+ export const listener = ({options, state}) => {
29
+ options.beforeHide?.(state);
30
+
31
+ return {
32
+ command: 'hide',
33
+ index: -1,
34
+ showSubmenu: false,
35
+ insideSubmenu: false,
36
+ };
37
+ };
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view menu-item-selected">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view menu-item-selected">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view menu-item-selected">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,50 @@
1
+ import {setPosition} from './set-position/set-position.js';
2
+
3
+ export const createContextMenu = (name) => ({
4
+ name,
5
+ events,
6
+ preventDefault,
7
+ after,
8
+ afterIf,
9
+ listener,
10
+ });
11
+
12
+ const events = [
13
+ 'contextmenu',
14
+ ];
15
+
16
+ const preventDefault = true;
17
+
18
+ const listener = ({event, state, options}) => {
19
+ const {beforeShow} = options;
20
+ const {x, y} = {
21
+ x: event.clientX,
22
+ y: event.clientY,
23
+ };
24
+
25
+ const is = !beforeShow || beforeShow?.({
26
+ ...state,
27
+ position: {
28
+ x,
29
+ y,
30
+ },
31
+ });
32
+
33
+ const command = is ? 'show' : 'hide';
34
+
35
+ return {
36
+ command,
37
+ showSubmenu: false,
38
+ position: {
39
+ x,
40
+ y: y - 14,
41
+ },
42
+ };
43
+ };
44
+
45
+ const after = ({event, options}) => {
46
+ const {name} = options;
47
+ return setPosition(name, event);
48
+ };
49
+
50
+ const afterIf = ({state}) => state.command === 'show';
@@ -0,0 +1,44 @@
1
+ import {getSubmenu} from '../submenu/index.js';
2
+
3
+ export const keys = ['ArrowDown'];
4
+ export const preventDefault = true;
5
+
6
+ export const filter = ({state}) => state.command === 'show';
7
+
8
+ export const listener = ({state, options}) => {
9
+ let {
10
+ index,
11
+ insideSubmenu,
12
+ submenuIndex,
13
+ } = state;
14
+
15
+ const {menu, infiniteScroll} = options;
16
+ const n = Object.keys(menu).length - 1;
17
+
18
+ if (!insideSubmenu && (infiniteScroll && index === n || index < n))
19
+ ++index;
20
+
21
+ if (!insideSubmenu && infiniteScroll && index > n)
22
+ index -= n + 1;
23
+
24
+ const submenu = getSubmenu({
25
+ index,
26
+ options,
27
+ });
28
+
29
+ const submenuCount = Object.keys(submenu).length - 1;
30
+
31
+ if (insideSubmenu)
32
+ if (submenuIndex < submenuCount)
33
+ ++submenuIndex;
34
+ else if (infiniteScroll && submenuIndex === submenuCount)
35
+ submenuIndex = 0;
36
+
37
+ const showSubmenu = submenuCount > -1;
38
+
39
+ return {
40
+ index,
41
+ submenuIndex,
42
+ showSubmenu,
43
+ };
44
+ };
@@ -0,0 +1,16 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
3
+ <label data-menu-path="Upload">Upload</label>
4
+ </li>
5
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-submenu-show">
6
+ <label data-menu-path="New">New</label>
7
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
8
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
9
+ <label data-menu-path="New.File">File</label>
10
+ </li>
11
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
12
+ <label data-menu-path="New.Directory">Directory</label>
13
+ </li>
14
+ </ul>
15
+ </li>
16
+ </ul>;
@@ -0,0 +1,16 @@
1
+ <ul data-name="menu" className="menu">
2
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
3
+ <label data-menu-path="Upload">Upload</label>
4
+ </li>
5
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-submenu-show">
6
+ <label data-menu-path="New">New</label>
7
+ <ul data-name="menu" className="menu">
8
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view menu-item-selected">
9
+ <label data-menu-path="New.File">File</label>
10
+ </li>
11
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit">
12
+ <label data-menu-path="New.Directory">Directory</label>
13
+ </li>
14
+ </ul>
15
+ </li>
16
+ </ul>;
@@ -0,0 +1,16 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
3
+ <label data-menu-path="Upload">Upload</label>
4
+ </li>
5
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-submenu-show">
6
+ <label data-menu-path="New">New</label>
7
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
8
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
9
+ <label data-menu-path="New.File">File</label>
10
+ </li>
11
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
12
+ <label data-menu-path="New.Directory">Directory</label>
13
+ </li>
14
+ </ul>
15
+ </li>
16
+ </ul>;
@@ -0,0 +1,16 @@
1
+ <ul data-name="menu" className="menu">
2
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
3
+ <label data-menu-path="Upload">Upload</label>
4
+ </li>
5
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-submenu-show">
6
+ <label data-menu-path="New">New</label>
7
+ <ul data-name="menu" className="menu">
8
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
9
+ <label data-menu-path="New.File">File</label>
10
+ </li>
11
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected">
12
+ <label data-menu-path="New.Directory">Directory</label>
13
+ </li>
14
+ </ul>
15
+ </li>
16
+ </ul>;
@@ -0,0 +1,30 @@
1
+ import {run} from '../run/index.js';
2
+ import * as right from '../right.js';
3
+
4
+ export const keys = ['Enter'];
5
+
6
+ export const filter = ({state}) => state.command === 'show';
7
+
8
+ export const stopPropagation = true;
9
+ export const preventDefault = true;
10
+
11
+ export const listener = ({options, state}) => {
12
+ const [result] = run({
13
+ options,
14
+ state,
15
+ });
16
+
17
+ if (!result)
18
+ return right.listener({
19
+ options,
20
+ state,
21
+ });
22
+
23
+ options.beforeHide?.(state);
24
+
25
+ return {
26
+ command: 'hide',
27
+ index: -1,
28
+ insideSubmenu: false,
29
+ };
30
+ };
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,11 @@
1
+ export const keys = ['Escape'];
2
+
3
+ export const listener = ({state, options}) => {
4
+ options.beforeHide?.(state);
5
+
6
+ return {
7
+ command: 'hide',
8
+ showSubmenu: false,
9
+ index: -1,
10
+ };
11
+ };
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view menu-item-selected">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,17 @@
1
+ // second selected
2
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
3
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
4
+ <label data-menu-path="Upload">Upload</label>
5
+ </li>
6
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-submenu menu-submenu-show">
7
+ <label data-menu-path="New">New</label>
8
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
9
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
10
+ <label data-menu-path="New.File">File</label>
11
+ </li>
12
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item-selected menu-item icon icon-edit">
13
+ <label data-menu-path="New.Directory">Directory</label>
14
+ </li>
15
+ </ul>
16
+ </li>
17
+ </ul>;
@@ -0,0 +1,18 @@
1
+ // second selected
2
+ <ul data-name="menu" className="menu">
3
+ <li data-menu-path="Upload" data-name="menu-item" className="menu-item icon icon-view">
4
+ <label data-menu-path="Upload">Upload</label>
5
+ </li>
6
+ <li data-menu-path="New" data-name="menu-item" className="menu-item icon icon-edit menu-item-selected menu-submenu menu-submenu-show">
7
+ <label data-menu-path="New">New</label>
8
+ <ul data-name="menu" className="menu">
9
+ <li data-menu-path="New.File" data-name="menu-item" className="menu-item icon icon-view">
10
+ <label data-menu-path="New.File">File</label>
11
+ </li>
12
+ <li data-menu-path="New.Directory" data-name="menu-item" className="menu-item-selected menu-item icon icon-edit">
13
+ <label data-menu-path="New.Directory">Directory</label>
14
+ </li>
15
+ </ul>
16
+ </li>
17
+ </ul>;
18
+
@@ -0,0 +1,26 @@
1
+ import * as up from '../up.js';
2
+
3
+ export const {filter} = up;
4
+ export const commands = [
5
+ 'gg',
6
+ '^',
7
+ ];
8
+
9
+ export function listener({state, options}) {
10
+ const {
11
+ insideSubmenu,
12
+ index,
13
+ submenuIndex,
14
+ } = state;
15
+
16
+ const newState = {
17
+ ...state,
18
+ index: insideSubmenu ? index : 1,
19
+ submenuIndex: insideSubmenu ? 1 : submenuIndex,
20
+ };
21
+
22
+ return up.listener({
23
+ state: newState,
24
+ options,
25
+ });
26
+ }
@@ -0,0 +1,25 @@
1
+ import * as click from './click/click.js';
2
+ import * as escape from './escape/escape.js';
3
+ import * as down from './down/down.js';
4
+ import * as up from './up.js';
5
+ import * as enter from './enter/enter.js';
6
+ import * as left from './left.js';
7
+ import * as right from './right.js';
8
+ import * as shiftG from './shift-g/shift-g.js';
9
+ import * as gg from './gg/gg.js';
10
+ import * as j from './j/j.js';
11
+ import * as k from './k/k.js';
12
+
13
+ export const addons = [
14
+ click,
15
+ escape,
16
+ down,
17
+ up,
18
+ enter,
19
+ left,
20
+ right,
21
+ shiftG,
22
+ gg,
23
+ j,
24
+ k,
25
+ ];
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;
@@ -0,0 +1,8 @@
1
+ <ul data-name="menu" className="menu menu-hidden" style="left: 0px; top: 20px;">
2
+ <li data-name="menu-item" data-menu-index="0" className="menu-item icon icon-view">
3
+ <label data-menu-path="View">View</label>
4
+ </li>
5
+ <li data-name="menu-item" data-menu-index="1" className="menu-item icon icon-edit menu-item-selected">
6
+ <label data-menu-path="Edit">Edit</label>
7
+ </li>
8
+ </ul>;