aleman 1.16.3 → 1.16.5

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 (135) 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 +1 -0
  4. package/nemo/README.md +28 -0
  5. package/nemo/addons/click/click.js +37 -0
  6. package/nemo/addons/click/fixture/click-fix.js +8 -0
  7. package/nemo/addons/click/fixture/click.js +8 -0
  8. package/nemo/addons/click/fixture/not-fn.js +8 -0
  9. package/nemo/addons/context-menu.js +50 -0
  10. package/nemo/addons/down/down.js +44 -0
  11. package/nemo/addons/down/fixture/down-fix.js +16 -0
  12. package/nemo/addons/down/fixture/down.js +16 -0
  13. package/nemo/addons/down/fixture/infinite-scroll-fix.js +16 -0
  14. package/nemo/addons/down/fixture/infinite-scroll.js +16 -0
  15. package/nemo/addons/enter/enter.js +30 -0
  16. package/nemo/addons/enter/fixture/enter-fix.js +8 -0
  17. package/nemo/addons/enter/fixture/enter.js +8 -0
  18. package/nemo/addons/escape/escape.js +11 -0
  19. package/nemo/addons/escape/fixture/escape-fix.js +8 -0
  20. package/nemo/addons/escape/fixture/escape.js +8 -0
  21. package/nemo/addons/gg/fixture/gg-fix.js +8 -0
  22. package/nemo/addons/gg/fixture/gg.js +8 -0
  23. package/nemo/addons/gg/fixture/hide.js +8 -0
  24. package/nemo/addons/gg/fixture/submenu-fix.js +17 -0
  25. package/nemo/addons/gg/fixture/submenu.js +18 -0
  26. package/nemo/addons/gg/gg.js +26 -0
  27. package/nemo/addons/index.js +25 -0
  28. package/nemo/addons/item-click/fixture/item-click-fix.js +8 -0
  29. package/nemo/addons/item-click/fixture/item-click.js +8 -0
  30. package/nemo/addons/item-click/fixture/no-click.js +8 -0
  31. package/nemo/addons/item-click/fixture/not-fn.js +8 -0
  32. package/nemo/addons/item-click/fixture/run-fix.js +8 -0
  33. package/nemo/addons/item-click/fixture/run.js +8 -0
  34. package/nemo/addons/item-click/item-click.js +43 -0
  35. package/nemo/addons/j/fixture/infinite-scroll-fix.js +8 -0
  36. package/nemo/addons/j/fixture/infinite-scroll.js +8 -0
  37. package/nemo/addons/j/fixture/j-fix.js +8 -0
  38. package/nemo/addons/j/fixture/j.js +8 -0
  39. package/nemo/addons/j/fixture/m.js +8 -0
  40. package/nemo/addons/j/fixture/submenu-fix.js +8 -0
  41. package/nemo/addons/j/fixture/submenu-infinite-scroll-fix.js +16 -0
  42. package/nemo/addons/j/fixture/submenu-infinite-scroll.js +16 -0
  43. package/nemo/addons/j/fixture/submenu.js +8 -0
  44. package/nemo/addons/j/j.js +10 -0
  45. package/nemo/addons/k/fixture/infinite-scroll-fix.js +8 -0
  46. package/nemo/addons/k/fixture/infinite-scroll.js +8 -0
  47. package/nemo/addons/k/fixture/k-fix.js +8 -0
  48. package/nemo/addons/k/fixture/k.js +8 -0
  49. package/nemo/addons/k/fixture/m.js +8 -0
  50. package/nemo/addons/k/fixture/submenu-fix.js +8 -0
  51. package/nemo/addons/k/fixture/submenu.js +8 -0
  52. package/nemo/addons/k/k.js +34 -0
  53. package/nemo/addons/left.js +11 -0
  54. package/nemo/addons/menu/get-menu-path.js +12 -0
  55. package/nemo/addons/mouse-leave/fixture/mouse-enter-fix.js +8 -0
  56. package/nemo/addons/mouse-leave/fixture/mouse-enter.js +8 -0
  57. package/nemo/addons/mouse-leave/fixture/unselect-all.js +8 -0
  58. package/nemo/addons/mouse-leave/index.js +10 -0
  59. package/nemo/addons/right.js +23 -0
  60. package/nemo/addons/run/index.js +17 -0
  61. package/nemo/addons/set-position/calculate.js +28 -0
  62. package/nemo/addons/set-position/set-position.js +35 -0
  63. package/nemo/addons/shift-g/fixture/hide.js +8 -0
  64. package/nemo/addons/shift-g/fixture/shift-g-fix.js +8 -0
  65. package/nemo/addons/shift-g/fixture/shift-g.js +8 -0
  66. package/nemo/addons/shift-g/shift-g.js +41 -0
  67. package/nemo/addons/submenu/index.js +12 -0
  68. package/nemo/addons/up.js +42 -0
  69. package/nemo/hydrate-menu.js +47 -0
  70. package/nemo/importmap.js +8 -0
  71. package/nemo/menu.css +65 -0
  72. package/nemo/nemo.js +117 -0
  73. package/nemo/rules/build-menu/fixture/build-menu-fix.js +16 -0
  74. package/nemo/rules/build-menu/fixture/build-menu.js +3 -0
  75. package/nemo/rules/build-menu/index.js +101 -0
  76. package/nemo/rules/hide-submenu/fixture/hide-submenu-fix.js +17 -0
  77. package/nemo/rules/hide-submenu/fixture/hide-submenu.js +18 -0
  78. package/nemo/rules/hide-submenu/fixture/no-menu.js +16 -0
  79. package/nemo/rules/hide-submenu/fixture/show-submenu.js +18 -0
  80. package/nemo/rules/hide-submenu/index.js +35 -0
  81. package/nemo/rules/index.js +21 -0
  82. package/nemo/rules/menu/fixture/hide-menu-fix.js +3 -0
  83. package/nemo/rules/menu/fixture/hide-menu.js +3 -0
  84. package/nemo/rules/menu/fixture/no-menu.js +3 -0
  85. package/nemo/rules/menu/fixture/show-menu-fix.js +1 -0
  86. package/nemo/rules/menu/fixture/show-menu.js +1 -0
  87. package/nemo/rules/menu/index.js +40 -0
  88. package/nemo/rules/select/fixture/no-current.js +8 -0
  89. package/nemo/rules/select/fixture/no-data-name.js +4 -0
  90. package/nemo/rules/select/fixture/no-index.js +8 -0
  91. package/nemo/rules/select/fixture/no-next.js +5 -0
  92. package/nemo/rules/select/fixture/no-parent.js +2 -0
  93. package/nemo/rules/select/fixture/select-fix.js +8 -0
  94. package/nemo/rules/select/fixture/select.js +8 -0
  95. package/nemo/rules/select/fixture/submenu-fix.js +17 -0
  96. package/nemo/rules/select/fixture/submenu.js +18 -0
  97. package/nemo/rules/select/fixture/wrong-data-name.js +4 -0
  98. package/nemo/rules/select/index.js +94 -0
  99. package/nemo/rules/set-position/fixture/no-style-fix.js +2 -0
  100. package/nemo/rules/set-position/fixture/no-style.js +2 -0
  101. package/nemo/rules/set-position/fixture/not-menu.js +2 -0
  102. package/nemo/rules/set-position/fixture/same-position.js +2 -0
  103. package/nemo/rules/set-position/fixture/set-position-fix.js +2 -0
  104. package/nemo/rules/set-position/fixture/set-position.js +2 -0
  105. package/nemo/rules/set-position/index.js +76 -0
  106. package/nemo/rules/submenu/fixture/last-selected-fix.js +53 -0
  107. package/nemo/rules/submenu/fixture/last-selected.js +54 -0
  108. package/nemo/rules/submenu/fixture/li.js +3 -0
  109. package/nemo/rules/submenu/fixture/no-submenu-selected.js +17 -0
  110. package/nemo/rules/submenu/fixture/no-submenu.js +54 -0
  111. package/nemo/rules/submenu/fixture/not-menu.js +17 -0
  112. package/nemo/rules/submenu/fixture/submenu-fix.js +53 -0
  113. package/nemo/rules/submenu/fixture/submenu.js +54 -0
  114. package/nemo/rules/submenu/index.js +76 -0
  115. package/nemo/rules/unselect-all/fixture/hide.js +8 -0
  116. package/nemo/rules/unselect-all/fixture/nested-fix.js +17 -0
  117. package/nemo/rules/unselect-all/fixture/nested.js +18 -0
  118. package/nemo/rules/unselect-all/fixture/no-data-name.js +4 -0
  119. package/nemo/rules/unselect-all/fixture/no-parent.js +2 -0
  120. package/nemo/rules/unselect-all/fixture/unselect-all-fix.js +8 -0
  121. package/nemo/rules/unselect-all/fixture/unselect-all.js +8 -0
  122. package/nemo/rules/unselect-all/index.js +51 -0
  123. package/nemo/rules/unselect-all-submenu-items/fixture/show-submenu-fix.js +33 -0
  124. package/nemo/rules/unselect-all-submenu-items/fixture/show-submenu.js +34 -0
  125. package/nemo/rules/unselect-all-submenu-items/fixture/unselect-all-submenu-items-fix.js +33 -0
  126. package/nemo/rules/unselect-all-submenu-items/fixture/unselect-all-submenu-items.js +33 -0
  127. package/nemo/rules/unselect-all-submenu-items/index.js +30 -0
  128. package/nemo/rules/unselect-wrongly-selected/fixture/hide.js +17 -0
  129. package/nemo/rules/unselect-wrongly-selected/fixture/unselect-wrongly-selected-fix.js +17 -0
  130. package/nemo/rules/unselect-wrongly-selected/fixture/unselect-wrongly-selected.js +17 -0
  131. package/nemo/rules/unselect-wrongly-selected/index.js +39 -0
  132. package/nemo/state/parse-state.js +91 -0
  133. package/nemo/state/print-state.js +14 -0
  134. package/nemo/state/state.js +123 -0
  135. package/package.json +4 -2
package/ChangeLog CHANGED
@@ -1,3 +1,19 @@
1
+ 2025.11.28, v1.16.5
2
+
3
+ feature:
4
+ - 2b344d2 menu: item-click: stopPropagation (coderaiser/cloudcmd#448)
5
+
6
+ 2025.11.27, v1.16.4
7
+
8
+ fix:
9
+ - eb62430 aleman: click (coderaiser/cloudcmd#449)
10
+
11
+ feature:
12
+ - a79d551 nemo: state: infiniteScroll
13
+ - 2fd1806 nemo: j: updateState
14
+ - 9c2e36a nemo: build-menu: update
15
+ - 4d0e263 nemo: add
16
+
1
17
  2025.09.26, v1.16.3
2
18
 
3
19
  fix:
@@ -198,7 +214,7 @@ feature:
198
214
 
199
215
  feature:
200
216
  - f745059 aleman: menu: build-menu: simplify
201
- - 88f4f81 aleman: menu: rules: hide-submenu: siplify
217
+ - 88f4f81 aleman: menu: rules: hide-submenu: simplify
202
218
  - ffe78e2 aleman: menu: jsx-operator: containsClass
203
219
  - 779f1e6 aleman: menu: rules: menu: simplify
204
220
  - 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}) => {
@@ -8,6 +8,7 @@ export const createItemClick = (name) => ({
8
8
  events: ['click'],
9
9
  listener,
10
10
  filter,
11
+ stopPropagation: true,
11
12
  });
12
13
 
13
14
  const filter = ({event, state, options}) => {
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>;
@@ -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,43 @@
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 createItemClick = (name) => ({
7
+ name,
8
+ events: ['click'],
9
+ listener,
10
+ filter,
11
+ });
12
+
13
+ const filter = ({event, options}) => {
14
+ const {
15
+ getMenuPath = _getMenuPath,
16
+ menu,
17
+ } = options;
18
+
19
+ const menuPath = getMenuPath(event);
20
+ const fn = jessy(menuPath, menu);
21
+
22
+ return isFn(fn);
23
+ };
24
+
25
+ const listener = ({event, state, options}) => {
26
+ const {
27
+ menu,
28
+ getMenuPath = _getMenuPath,
29
+ } = options;
30
+
31
+ const menuPath = getMenuPath(event);
32
+ const fn = jessy(menuPath, menu);
33
+
34
+ setTimeout(fn);
35
+
36
+ options.beforeHide?.(state);
37
+
38
+ return {
39
+ index: -1,
40
+ command: 'hide',
41
+ showSubmenu: false,
42
+ };
43
+ };
@@ -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>;