dirvi-lib 0.8.1 → 0.9.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/dist/app/app-api.d.ts +74 -0
- package/dist/app/app-api.d.ts.map +1 -0
- package/dist/app/app-api.js +11 -0
- package/dist/app/effect-to-action.d.ts +6 -0
- package/dist/app/effect-to-action.d.ts.map +1 -0
- package/dist/app/effect-to-action.js +120 -0
- package/dist/app/index.d.ts +6 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +5 -0
- package/dist/app/reducer-action.d.ts +40 -0
- package/dist/app/reducer-action.d.ts.map +1 -0
- package/dist/app/reducer.d.ts +5 -0
- package/dist/app/reducer.d.ts.map +1 -0
- package/dist/app/reducer.js +115 -0
- package/dist/app/view-api.d.ts +11 -0
- package/dist/app/view-api.d.ts.map +1 -0
- package/dist/feedback/feedback.impl.d.ts +9 -0
- package/dist/feedback/feedback.impl.d.ts.map +1 -0
- package/dist/feedback/feedback.impl.js +34 -0
- package/dist/feedback/feedback.types.d.ts +24 -0
- package/dist/feedback/feedback.types.d.ts.map +1 -0
- package/dist/feedback/index.d.ts +3 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +1 -0
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -7
- package/dist/input/application/index.d.ts.map +1 -0
- package/dist/input/application/intent-to-effect-no-state.test.d.ts.map +1 -0
- package/dist/input/application/intent-to-effect.d.ts +14 -0
- package/dist/input/application/intent-to-effect.d.ts.map +1 -0
- package/dist/{tree-surfer-ui → input}/application/intent-to-effect.js +66 -42
- package/dist/input/application/parse-command.d.ts +14 -0
- package/dist/input/application/parse-command.d.ts.map +1 -0
- package/dist/input/application/parse-command.js +92 -0
- package/dist/input/application/parse-normal-command.d.ts +12 -0
- package/dist/input/application/parse-normal-command.d.ts.map +1 -0
- package/dist/input/application/parse-normal-command.js +89 -0
- package/dist/input/application/tokenize-normal-command.d.ts +24 -0
- package/dist/input/application/tokenize-normal-command.d.ts.map +1 -0
- package/dist/input/application/tokenize-normal-command.js +110 -0
- package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.d.ts +4 -2
- package/dist/input/application/user-input-to-intent.d.ts.map +1 -0
- package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.js +9 -6
- package/dist/input/application/user-input-to-intent.test.d.ts.map +1 -0
- package/dist/input/domain/effect.d.ts +84 -0
- package/dist/input/domain/effect.d.ts.map +1 -0
- package/dist/input/domain/index.d.ts.map +1 -0
- package/dist/input/domain/input-mode-state.d.ts.map +1 -0
- package/dist/input/domain/intent.d.ts.map +1 -0
- package/dist/input/domain/user-input.d.ts.map +1 -0
- package/dist/trees/cursor.d.ts.map +1 -0
- package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts +10 -0
- package/dist/trees/fold-node/deprecated/fold-node.impl.d.ts.map +1 -0
- package/dist/trees/fold-node/deprecated/fold-node.impl.js +248 -0
- package/dist/trees/fold-node/deprecated/fold-node.test.d.ts +2 -0
- package/dist/trees/fold-node/deprecated/fold-node.test.d.ts.map +1 -0
- package/dist/trees/fold-node/deprecated/fold-node.test.js +130 -0
- package/dist/{tree-surfer/fold-node → trees/fold-node/deprecated}/fold-node.types.d.ts +15 -76
- package/dist/trees/fold-node/deprecated/fold-node.types.d.ts.map +1 -0
- package/dist/trees/fold-node/fold-node.impl.d.ts +16 -0
- package/dist/trees/fold-node/fold-node.impl.d.ts.map +1 -0
- package/dist/trees/fold-node/fold-node.impl.js +472 -0
- package/dist/trees/fold-node/fold-node.model.d.ts +120 -0
- package/dist/trees/fold-node/fold-node.model.d.ts.map +1 -0
- package/dist/trees/fold-node/fold-node.model.js +80 -0
- package/dist/trees/fold-node/fold-node.types.d.ts +214 -0
- package/dist/trees/fold-node/fold-node.types.d.ts.map +1 -0
- package/dist/trees/fold-node/index.d.ts +4 -0
- package/dist/trees/fold-node/index.d.ts.map +1 -0
- package/dist/trees/fold-node/index.js +3 -0
- package/dist/trees/index.d.ts +9 -0
- package/dist/trees/index.d.ts.map +1 -0
- package/dist/trees/index.js +8 -0
- package/dist/trees/nav-node/nav-node.impl.d.ts +29 -0
- package/dist/trees/nav-node/nav-node.impl.d.ts.map +1 -0
- package/dist/{tree-surfer → trees}/nav-node/nav-node.impl.js +89 -42
- package/dist/trees/nav-node/nav-node.types.d.ts +103 -0
- package/dist/trees/nav-node/nav-node.types.d.ts.map +1 -0
- package/dist/trees/nav-node/nav-node.types.js +1 -0
- package/dist/trees/state/state.impl.d.ts +8 -0
- package/dist/trees/state/state.impl.d.ts.map +1 -0
- package/dist/trees/state/state.impl.js +128 -0
- package/dist/trees/state/state.schemas.d.ts +25 -0
- package/dist/trees/state/state.schemas.d.ts.map +1 -0
- package/dist/trees/state/state.schemas.js +17 -0
- package/dist/trees/state/state.types.d.ts +36 -0
- package/dist/trees/state/state.types.d.ts.map +1 -0
- package/dist/trees/state/state.types.js +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.arb.d.ts.map +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.arb.debug.test.d.ts.map +1 -0
- package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.debug.test.js +1 -1
- package/dist/trees/tree-node/deprecated/tree-node.impl.d.ts.map +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.schemas.d.ts.map +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.test.d.ts.map +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.types.d.ts.map +1 -0
- package/dist/trees/tree-node/deprecated/tree-node.types.js +1 -0
- package/dist/trees/tree-node/index.d.ts +5 -0
- package/dist/trees/tree-node/index.d.ts.map +1 -0
- package/dist/trees/tree-node/index.js +2 -0
- package/dist/trees/tree-node/tree-node.arb.d.ts +104 -0
- package/dist/trees/tree-node/tree-node.arb.d.ts.map +1 -0
- package/dist/trees/tree-node/tree-node.arb.js +191 -0
- package/dist/trees/tree-node/tree-node.impl.d.ts +15 -0
- package/dist/trees/tree-node/tree-node.impl.d.ts.map +1 -0
- package/dist/trees/tree-node/tree-node.impl.js +286 -0
- package/dist/trees/tree-node/tree-node.model.d.ts +78 -0
- package/dist/trees/tree-node/tree-node.model.d.ts.map +1 -0
- package/dist/trees/tree-node/tree-node.model.js +37 -0
- package/dist/trees/tree-node/tree-node.types.d.ts +419 -0
- package/dist/trees/tree-node/tree-node.types.d.ts.map +1 -0
- package/dist/trees/tree-node/tree-node.types.js +1 -0
- package/package.json +1 -1
- package/dist/tree-surfer/cursor.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/fold-node.arb.d.ts +0 -2
- package/dist/tree-surfer/fold-node/fold-node.arb.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/fold-node.impl.d.ts +0 -4
- package/dist/tree-surfer/fold-node/fold-node.impl.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/fold-node.impl.js +0 -149
- package/dist/tree-surfer/fold-node/fold-node.schema.d.ts +0 -5
- package/dist/tree-surfer/fold-node/fold-node.schema.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/fold-node.schema.js +0 -9
- package/dist/tree-surfer/fold-node/fold-node.types.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/tree-node.test.d.ts.map +0 -1
- package/dist/tree-surfer/fold-node/tree-node.test.js +0 -90
- package/dist/tree-surfer/index.d.ts +0 -13
- package/dist/tree-surfer/index.d.ts.map +0 -1
- package/dist/tree-surfer/index.js +0 -12
- package/dist/tree-surfer/nav-node/nav-node.impl.d.ts +0 -6
- package/dist/tree-surfer/nav-node/nav-node.impl.d.ts.map +0 -1
- package/dist/tree-surfer/nav-node/nav-node.types.d.ts +0 -70
- package/dist/tree-surfer/nav-node/nav-node.types.d.ts.map +0 -1
- package/dist/tree-surfer/state/state.impl.d.ts +0 -7
- package/dist/tree-surfer/state/state.impl.d.ts.map +0 -1
- package/dist/tree-surfer/state/state.impl.js +0 -89
- package/dist/tree-surfer/state/state.schemas.d.ts +0 -9
- package/dist/tree-surfer/state/state.schemas.d.ts.map +0 -1
- package/dist/tree-surfer/state/state.schemas.js +0 -8
- package/dist/tree-surfer/state/state.types.d.ts +0 -21
- package/dist/tree-surfer/state/state.types.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.arb.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.arb.debug.test.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.impl.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.schemas.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.test.d.ts +0 -2
- package/dist/tree-surfer/tree-node/tree-node.test.d.ts.map +0 -1
- package/dist/tree-surfer/tree-node/tree-node.types.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/index.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/intent-to-effect-no-state.test.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/intent-to-effect.d.ts +0 -10
- package/dist/tree-surfer-ui/application/intent-to-effect.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/parse-command.d.ts +0 -4
- package/dist/tree-surfer-ui/application/parse-command.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/parse-command.js +0 -48
- package/dist/tree-surfer-ui/application/user-input-to-intent.d.ts.map +0 -1
- package/dist/tree-surfer-ui/application/user-input-to-intent.test.d.ts.map +0 -1
- package/dist/tree-surfer-ui/domain/effect.d.ts +0 -43
- package/dist/tree-surfer-ui/domain/effect.d.ts.map +0 -1
- package/dist/tree-surfer-ui/domain/index.d.ts.map +0 -1
- package/dist/tree-surfer-ui/domain/input-mode-state.d.ts.map +0 -1
- package/dist/tree-surfer-ui/domain/intent.d.ts.map +0 -1
- package/dist/tree-surfer-ui/domain/user-input.d.ts.map +0 -1
- /package/dist/{tree-surfer-ui/domain/effect.js → app/reducer-action.js} +0 -0
- /package/dist/{tree-surfer-ui/domain/input-mode-state.js → app/view-api.js} +0 -0
- /package/dist/{tree-surfer-ui/domain/intent.js → feedback/feedback.types.js} +0 -0
- /package/dist/{tree-surfer-ui → input}/application/index.d.ts +0 -0
- /package/dist/{tree-surfer-ui → input}/application/index.js +0 -0
- /package/dist/{tree-surfer-ui → input}/application/intent-to-effect-no-state.test.d.ts +0 -0
- /package/dist/{tree-surfer-ui → input}/application/intent-to-effect-no-state.test.js +0 -0
- /package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.test.d.ts +0 -0
- /package/dist/{tree-surfer-ui → input}/application/user-input-to-intent.test.js +0 -0
- /package/dist/{tree-surfer-ui/domain/user-input.js → input/domain/effect.js} +0 -0
- /package/dist/{tree-surfer-ui → input}/domain/index.d.ts +0 -0
- /package/dist/{tree-surfer-ui → input}/domain/index.js +0 -0
- /package/dist/{tree-surfer-ui → input}/domain/input-mode-state.d.ts +0 -0
- /package/dist/{tree-surfer/fold-node/fold-node.arb.js → input/domain/input-mode-state.js} +0 -0
- /package/dist/{tree-surfer-ui → input}/domain/intent.d.ts +0 -0
- /package/dist/{tree-surfer/fold-node/fold-node.types.js → input/domain/intent.js} +0 -0
- /package/dist/{tree-surfer-ui → input}/domain/user-input.d.ts +0 -0
- /package/dist/{tree-surfer/nav-node/nav-node.types.js → input/domain/user-input.js} +0 -0
- /package/dist/{tree-surfer → trees}/cursor.d.ts +0 -0
- /package/dist/{tree-surfer → trees}/cursor.js +0 -0
- /package/dist/{tree-surfer/state/state.types.js → trees/fold-node/deprecated/fold-node.types.js} +0 -0
- /package/dist/{tree-surfer/tree-node/tree-node.types.js → trees/fold-node/fold-node.types.js} +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.d.ts +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.debug.test.d.ts +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.arb.js +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.impl.d.ts +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.impl.js +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.schemas.d.ts +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.schemas.js +0 -0
- /package/dist/{tree-surfer/fold-node → trees/tree-node/deprecated}/tree-node.test.d.ts +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.test.js +0 -0
- /package/dist/{tree-surfer/tree-node → trees/tree-node/deprecated}/tree-node.types.d.ts +0 -0
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { parseCommand } from './parse-command.js';
|
|
2
|
+
import { parseNormalCommand } from './parse-normal-command.js';
|
|
2
3
|
export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
|
|
3
4
|
return (intent, state) => {
|
|
4
5
|
switch (intent.intentType) {
|
|
@@ -7,7 +8,7 @@ export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
|
|
|
7
8
|
case 'normalRight':
|
|
8
9
|
return normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi);
|
|
9
10
|
case 'normalLeft':
|
|
10
|
-
return normalInteractLeftToEffect(state);
|
|
11
|
+
return normalInteractLeftToEffect(state, cursorApi);
|
|
11
12
|
case 'normalDown':
|
|
12
13
|
return dispatchAction({
|
|
13
14
|
effectActionType: 'nextEntry',
|
|
@@ -51,45 +52,60 @@ export function createIntentToEffect(stateApi, cursorApi, treeNodeApi) {
|
|
|
51
52
|
}
|
|
52
53
|
};
|
|
53
54
|
}
|
|
55
|
+
// =============================================================================
|
|
56
|
+
// Normal mode
|
|
57
|
+
// =============================================================================
|
|
58
|
+
function keepNormalBuffer(normalBuffer) {
|
|
59
|
+
return {
|
|
60
|
+
effectType: 'setInputState',
|
|
61
|
+
inputState: {
|
|
62
|
+
inputMode: 'normal',
|
|
63
|
+
normalBuffer,
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
}
|
|
54
67
|
function dispatchAction(action) {
|
|
55
68
|
return {
|
|
56
69
|
effectType: 'dispatchEffectAction',
|
|
57
70
|
action,
|
|
58
71
|
};
|
|
59
72
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
73
|
+
function clearBuffer() {
|
|
74
|
+
return {
|
|
75
|
+
effectType: 'setInputState',
|
|
76
|
+
inputState: {
|
|
77
|
+
inputMode: 'normal',
|
|
78
|
+
normalBuffer: '',
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Sets the normal-mode command buffer.
|
|
84
|
+
*
|
|
85
|
+
* Three possibilities:
|
|
86
|
+
*
|
|
87
|
+
* - The buffer is a recognized motion: dispatch its effect action.
|
|
88
|
+
* - The buffer is a prefix of a possible motion: retain it.
|
|
89
|
+
* - The buffer is not a valid prefix: clear it.
|
|
90
|
+
*/
|
|
65
91
|
function normalBufferToEffectResult(updatedNormalBuffer) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
};
|
|
75
|
-
case 'zc':
|
|
76
|
-
return dispatchAction({
|
|
77
|
-
effectActionType: 'fold',
|
|
78
|
-
});
|
|
79
|
-
case 'zo':
|
|
80
|
-
return dispatchAction({
|
|
81
|
-
effectActionType: 'unfold',
|
|
82
|
-
});
|
|
83
|
-
default:
|
|
84
|
-
return {
|
|
85
|
-
effectType: 'setInputState',
|
|
86
|
-
inputState: {
|
|
87
|
-
inputMode: 'normal',
|
|
88
|
-
normalBuffer: '',
|
|
89
|
-
},
|
|
90
|
-
};
|
|
92
|
+
const commandResult = parseNormalCommand(updatedNormalBuffer);
|
|
93
|
+
switch (commandResult.kind) {
|
|
94
|
+
case 'incomplete':
|
|
95
|
+
return keepNormalBuffer(updatedNormalBuffer);
|
|
96
|
+
case 'complete':
|
|
97
|
+
return dispatchAction(commandResult.action);
|
|
98
|
+
case 'invalid':
|
|
99
|
+
return clearBuffer();
|
|
91
100
|
}
|
|
92
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Handles normal-mode right interaction.
|
|
104
|
+
*
|
|
105
|
+
* - A closed branch requests loading its children.
|
|
106
|
+
* - An open branch dispatches an action that closes/unloads its children.
|
|
107
|
+
* - A leaf has no right-interaction effect.
|
|
108
|
+
*/
|
|
93
109
|
function normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi) {
|
|
94
110
|
const currentEntry = stateApi.getNodeAtCursor(state);
|
|
95
111
|
if (currentEntry === undefined) {
|
|
@@ -99,23 +115,31 @@ function normalInteractRightToEffect(state, stateApi, cursorApi, treeNodeApi) {
|
|
|
99
115
|
if (path === undefined) {
|
|
100
116
|
return undefined;
|
|
101
117
|
}
|
|
102
|
-
|
|
103
|
-
|
|
118
|
+
switch (treeNodeApi.kind(currentEntry)) {
|
|
119
|
+
case 'unloaded-branch':
|
|
104
120
|
return {
|
|
105
121
|
effectType: 'loadBranchEntries',
|
|
106
122
|
path,
|
|
107
123
|
};
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
124
|
+
case 'loaded-branch':
|
|
125
|
+
return dispatchAction({
|
|
126
|
+
effectActionType: 'setBranchEntries',
|
|
127
|
+
path,
|
|
128
|
+
entries: null,
|
|
129
|
+
});
|
|
130
|
+
case 'leaf':
|
|
131
|
+
return undefined;
|
|
114
132
|
}
|
|
115
|
-
return;
|
|
116
133
|
}
|
|
117
|
-
|
|
118
|
-
|
|
134
|
+
/**
|
|
135
|
+
* Handles normal-mode left interaction.
|
|
136
|
+
*
|
|
137
|
+
* Left from the root has no effect. Otherwise dispatch navigation to the
|
|
138
|
+
* parent entry.
|
|
139
|
+
*/
|
|
140
|
+
function normalInteractLeftToEffect(state, cursorApi) {
|
|
141
|
+
const path = cursorApi.getPath(state.cursor);
|
|
142
|
+
if (path === undefined || path.length === 0) {
|
|
119
143
|
return undefined;
|
|
120
144
|
}
|
|
121
145
|
return dispatchAction({
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SerializableKey } from '../../trees/index.js';
|
|
2
|
+
import type { Effect } from '../domain/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Parses a command-line command into an application effect.
|
|
5
|
+
*
|
|
6
|
+
* Command parsing is independent of the concrete tree-node value type, but the
|
|
7
|
+
* generic parameters allow its result to compose with the application's
|
|
8
|
+
* Effect<Id, Value> pipeline.
|
|
9
|
+
*
|
|
10
|
+
* @typeParam Id - The sibling-unique tree-node ID type.
|
|
11
|
+
* @typeParam Value - Application-owned data stored in each tree node.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseCommand<Id extends SerializableKey, Value>(commandLine: string): Effect<Id, Value> | undefined;
|
|
14
|
+
//# sourceMappingURL=parse-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/parse-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AA0CjD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAC5D,WAAW,EAAE,MAAM,GAClB,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,GAAG,SAAS,CAyD/B"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const DEFAULT_VIEW_NAME = 'default';
|
|
2
|
+
function parseFoldCommand(commandArgs) {
|
|
3
|
+
const [subcommand, name] = commandArgs;
|
|
4
|
+
switch (subcommand) {
|
|
5
|
+
case 'list':
|
|
6
|
+
return commandArgs.length === 1
|
|
7
|
+
? {
|
|
8
|
+
effectType: 'listFolds',
|
|
9
|
+
}
|
|
10
|
+
: {
|
|
11
|
+
effectType: 'unrecognizedCommand',
|
|
12
|
+
commandLine: `fold ${commandArgs.join(' ')}`,
|
|
13
|
+
};
|
|
14
|
+
case 'create':
|
|
15
|
+
return name === undefined || commandArgs.length !== 2
|
|
16
|
+
? {
|
|
17
|
+
effectType: 'unrecognizedCommand',
|
|
18
|
+
commandLine: `fold ${commandArgs.join(' ')}`,
|
|
19
|
+
}
|
|
20
|
+
: {
|
|
21
|
+
effectType: 'dispatchEffectAction',
|
|
22
|
+
action: {
|
|
23
|
+
effectActionType: 'createFoldTree',
|
|
24
|
+
name,
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
default:
|
|
28
|
+
return {
|
|
29
|
+
effectType: 'unrecognizedCommand',
|
|
30
|
+
commandLine: `fold ${commandArgs.join(' ')}`,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Parses a command-line command into an application effect.
|
|
36
|
+
*
|
|
37
|
+
* Command parsing is independent of the concrete tree-node value type, but the
|
|
38
|
+
* generic parameters allow its result to compose with the application's
|
|
39
|
+
* Effect<Id, Value> pipeline.
|
|
40
|
+
*
|
|
41
|
+
* @typeParam Id - The sibling-unique tree-node ID type.
|
|
42
|
+
* @typeParam Value - Application-owned data stored in each tree node.
|
|
43
|
+
*/
|
|
44
|
+
export function parseCommand(commandLine) {
|
|
45
|
+
const command = commandLine.trim().replace(/^:/, '');
|
|
46
|
+
if (command === "") {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const [commandName, ...commandArgs] = command.split(/\s+/);
|
|
50
|
+
switch (commandName) {
|
|
51
|
+
case 'q':
|
|
52
|
+
return {
|
|
53
|
+
effectType: 'quit',
|
|
54
|
+
exitMessage: '',
|
|
55
|
+
};
|
|
56
|
+
case 'fold':
|
|
57
|
+
return parseFoldCommand(commandArgs);
|
|
58
|
+
case 'evlp':
|
|
59
|
+
return {
|
|
60
|
+
effectType: 'emitVisibleLeavesPaths',
|
|
61
|
+
};
|
|
62
|
+
case 'mkview!':
|
|
63
|
+
return {
|
|
64
|
+
effectType: 'saveView',
|
|
65
|
+
name: commandArgs[0] || DEFAULT_VIEW_NAME,
|
|
66
|
+
overwrite: true,
|
|
67
|
+
};
|
|
68
|
+
case 'loadview':
|
|
69
|
+
return {
|
|
70
|
+
effectType: 'loadView',
|
|
71
|
+
name: commandArgs[0] || DEFAULT_VIEW_NAME,
|
|
72
|
+
};
|
|
73
|
+
default:
|
|
74
|
+
return {
|
|
75
|
+
effectType: 'unrecognizedCommand',
|
|
76
|
+
commandLine,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/*
|
|
80
|
+
* Vim-style view commands:
|
|
81
|
+
*
|
|
82
|
+
* :mkview!
|
|
83
|
+
* :mkview! project
|
|
84
|
+
* :loadview
|
|
85
|
+
* :loadview project
|
|
86
|
+
*
|
|
87
|
+
* The name may contain spaces, so capture the remainder of the command
|
|
88
|
+
* instead of splitting on whitespace.
|
|
89
|
+
*
|
|
90
|
+
* TODO Later: mkview that checks if a same-named view already exists.
|
|
91
|
+
*/
|
|
92
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { SerializableKey } from '../../trees/index.js';
|
|
2
|
+
import type { EffectAction } from '../domain/index.js';
|
|
3
|
+
export type ParseNormalCommandResult<Id extends SerializableKey, Value> = {
|
|
4
|
+
kind: 'incomplete';
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'complete';
|
|
7
|
+
action: EffectAction<Id, Value>;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'invalid';
|
|
10
|
+
};
|
|
11
|
+
export declare function parseNormalCommand<Id extends SerializableKey, Value>(normalBuffer: string): ParseNormalCommandResult<Id, Value>;
|
|
12
|
+
//# sourceMappingURL=parse-normal-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-normal-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/parse-normal-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOvD,MAAM,MAAM,wBAAwB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAClE;IACE,IAAI,EAAE,YAAY,CAAC;CACpB,GACD;IACE,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CACjC,GACD;IACE,IAAI,EAAE,SAAS,CAAC;CACjB,CAAC;AAEN,wBAAgB,kBAAkB,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,EAClE,YAAY,EAAE,MAAM,GACnB,wBAAwB,CAAC,EAAE,EAAE,KAAK,CAAC,CAwCrC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { tokenizeNormalCommand, } from './tokenize-normal-command.js';
|
|
2
|
+
export function parseNormalCommand(normalBuffer) {
|
|
3
|
+
const tokens = tokenizeNormalCommand(normalBuffer);
|
|
4
|
+
if (tokens.some(isInvalidToken)) {
|
|
5
|
+
return {
|
|
6
|
+
kind: 'invalid',
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
const [firstToken, secondToken] = tokens;
|
|
10
|
+
if (firstToken === undefined) {
|
|
11
|
+
return {
|
|
12
|
+
kind: 'invalid',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
if (firstToken.tokenType === 'validInteger') {
|
|
16
|
+
if (secondToken === undefined) {
|
|
17
|
+
return {
|
|
18
|
+
kind: 'incomplete',
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
if (tokens.length !== 2) {
|
|
22
|
+
return {
|
|
23
|
+
kind: 'invalid',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
return tokenToResult(secondToken, firstToken.value);
|
|
27
|
+
}
|
|
28
|
+
if (tokens.length !== 1) {
|
|
29
|
+
return {
|
|
30
|
+
kind: 'invalid',
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
return tokenToResult(firstToken, 0);
|
|
34
|
+
}
|
|
35
|
+
function isInvalidToken(token) {
|
|
36
|
+
return (token.tokenType === 'invalidInteger' || token.tokenType === 'invalidCommand');
|
|
37
|
+
}
|
|
38
|
+
function tokenToResult(token, index) {
|
|
39
|
+
switch (token.tokenType) {
|
|
40
|
+
case 'partialCommand':
|
|
41
|
+
return {
|
|
42
|
+
kind: 'incomplete',
|
|
43
|
+
};
|
|
44
|
+
case 'foldCommand':
|
|
45
|
+
return {
|
|
46
|
+
kind: 'complete',
|
|
47
|
+
action: foldCommandToAction(token, index),
|
|
48
|
+
};
|
|
49
|
+
case 'validInteger':
|
|
50
|
+
case 'invalidInteger':
|
|
51
|
+
case 'invalidCommand':
|
|
52
|
+
return {
|
|
53
|
+
kind: 'invalid',
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function foldCommandToAction(foldCommand, index) {
|
|
58
|
+
const foldTree = {
|
|
59
|
+
foldTreeReferenceType: 'index',
|
|
60
|
+
index,
|
|
61
|
+
};
|
|
62
|
+
switch (foldCommand.foldCommandType) {
|
|
63
|
+
case 'addToFoldTree':
|
|
64
|
+
return {
|
|
65
|
+
effectActionType: 'addToFoldTree',
|
|
66
|
+
foldTree,
|
|
67
|
+
};
|
|
68
|
+
case 'removeFromFoldTree':
|
|
69
|
+
return {
|
|
70
|
+
effectActionType: 'removeFromFoldTree',
|
|
71
|
+
foldTree,
|
|
72
|
+
};
|
|
73
|
+
case 'fold':
|
|
74
|
+
return {
|
|
75
|
+
effectActionType: 'fold',
|
|
76
|
+
foldTree,
|
|
77
|
+
};
|
|
78
|
+
case 'unfold':
|
|
79
|
+
return {
|
|
80
|
+
effectActionType: 'unfold',
|
|
81
|
+
foldTree,
|
|
82
|
+
};
|
|
83
|
+
case 'toggleFold':
|
|
84
|
+
return {
|
|
85
|
+
effectActionType: 'toggleFold',
|
|
86
|
+
foldTree,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type ValidInteger = {
|
|
2
|
+
tokenType: 'validInteger';
|
|
3
|
+
value: number;
|
|
4
|
+
};
|
|
5
|
+
export type InvalidInteger = {
|
|
6
|
+
tokenType: 'invalidInteger';
|
|
7
|
+
value: string;
|
|
8
|
+
};
|
|
9
|
+
export type PartialCommand = {
|
|
10
|
+
tokenType: 'partialCommand';
|
|
11
|
+
commandType: 'fold';
|
|
12
|
+
};
|
|
13
|
+
export type FoldCommand = {
|
|
14
|
+
tokenType: 'foldCommand';
|
|
15
|
+
foldCommandType: 'addToFoldTree' | 'removeFromFoldTree' | 'fold' | 'unfold' | 'toggleFold';
|
|
16
|
+
};
|
|
17
|
+
export type InvalidCommand = {
|
|
18
|
+
tokenType: 'invalidCommand';
|
|
19
|
+
value: string;
|
|
20
|
+
};
|
|
21
|
+
export type Token = ValidInteger | InvalidInteger | PartialCommand | FoldCommand | InvalidCommand;
|
|
22
|
+
export type Tokens = readonly Token[];
|
|
23
|
+
export declare function tokenizeNormalCommand(normalBuffer: string): Tokens;
|
|
24
|
+
//# sourceMappingURL=tokenize-normal-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenize-normal-command.d.ts","sourceRoot":"","sources":["../../../src/input/application/tokenize-normal-command.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,SAAS,EAAE,aAAa,CAAC;IACzB,eAAe,EACX,eAAe,GACf,oBAAoB,GACpB,MAAM,GACN,QAAQ,GACR,YAAY,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,KAAK,GACb,YAAY,GACZ,cAAc,GACd,cAAc,GACd,WAAW,GACX,cAAc,CAAC;AAEnB,MAAM,MAAM,MAAM,GAAG,SAAS,KAAK,EAAE,CAAC;AAUtC,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAalE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
function createNormalBufferReader(normalBuffer) {
|
|
2
|
+
return {
|
|
3
|
+
normalBuffer,
|
|
4
|
+
position: 0,
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
function peek(reader) {
|
|
8
|
+
return reader.normalBuffer.at(reader.position);
|
|
9
|
+
}
|
|
10
|
+
function consume(reader) {
|
|
11
|
+
const character = peek(reader);
|
|
12
|
+
if (character !== undefined) {
|
|
13
|
+
reader.position += 1;
|
|
14
|
+
}
|
|
15
|
+
return character;
|
|
16
|
+
}
|
|
17
|
+
function isDecimalDigit(character) {
|
|
18
|
+
if (character === undefined) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return character >= '0' && character <= '9';
|
|
22
|
+
}
|
|
23
|
+
export function tokenizeNormalCommand(normalBuffer) {
|
|
24
|
+
const reader = createNormalBufferReader(normalBuffer);
|
|
25
|
+
const tokens = [];
|
|
26
|
+
while (peek(reader) !== undefined) {
|
|
27
|
+
if (isDecimalDigit(peek(reader))) {
|
|
28
|
+
tokens.push(tokenizeInteger(reader));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
tokens.push(tokenizeCommand(reader));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return tokens;
|
|
35
|
+
}
|
|
36
|
+
function tokenizeInteger(reader) {
|
|
37
|
+
let value = '';
|
|
38
|
+
while (true) {
|
|
39
|
+
const character = peek(reader);
|
|
40
|
+
if (!isDecimalDigit(character)) {
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
consume(reader);
|
|
44
|
+
value += character;
|
|
45
|
+
}
|
|
46
|
+
const parsedValue = Number(value);
|
|
47
|
+
if (!Number.isSafeInteger(parsedValue)) {
|
|
48
|
+
return {
|
|
49
|
+
tokenType: 'invalidInteger',
|
|
50
|
+
value,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
tokenType: 'validInteger',
|
|
55
|
+
value: parsedValue,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function tokenizeCommand(reader) {
|
|
59
|
+
const character = consume(reader);
|
|
60
|
+
switch (character) {
|
|
61
|
+
case 'z':
|
|
62
|
+
return tokenizeFoldCommand(reader);
|
|
63
|
+
default:
|
|
64
|
+
return {
|
|
65
|
+
tokenType: 'invalidCommand',
|
|
66
|
+
value: character ?? '',
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function tokenizeFoldCommand(reader) {
|
|
71
|
+
const character = consume(reader);
|
|
72
|
+
if (character === undefined) {
|
|
73
|
+
return {
|
|
74
|
+
tokenType: 'partialCommand',
|
|
75
|
+
commandType: 'fold',
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
switch (character) {
|
|
79
|
+
case 'f':
|
|
80
|
+
return {
|
|
81
|
+
tokenType: 'foldCommand',
|
|
82
|
+
foldCommandType: 'addToFoldTree',
|
|
83
|
+
};
|
|
84
|
+
case 'd':
|
|
85
|
+
return {
|
|
86
|
+
tokenType: 'foldCommand',
|
|
87
|
+
foldCommandType: 'removeFromFoldTree',
|
|
88
|
+
};
|
|
89
|
+
case 'c':
|
|
90
|
+
return {
|
|
91
|
+
tokenType: 'foldCommand',
|
|
92
|
+
foldCommandType: 'fold',
|
|
93
|
+
};
|
|
94
|
+
case 'o':
|
|
95
|
+
return {
|
|
96
|
+
tokenType: 'foldCommand',
|
|
97
|
+
foldCommandType: 'unfold',
|
|
98
|
+
};
|
|
99
|
+
case 'a':
|
|
100
|
+
return {
|
|
101
|
+
tokenType: 'foldCommand',
|
|
102
|
+
foldCommandType: 'toggleFold',
|
|
103
|
+
};
|
|
104
|
+
default:
|
|
105
|
+
return {
|
|
106
|
+
tokenType: 'invalidCommand',
|
|
107
|
+
value: `z${character}`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { UserInput, InputModeState, Intent } from '../domain/index.js';
|
|
2
2
|
/**
|
|
3
|
+
* Converts a user input, mode and mode's buffer into an intent.
|
|
4
|
+
*
|
|
3
5
|
* By design "intent = input + mode + modeState", so it interprets the key
|
|
4
|
-
* inputs depending on the mode and
|
|
6
|
+
* inputs depending on the mode and mode's buffer. No other context.
|
|
5
7
|
*
|
|
6
|
-
* @param userInput - the
|
|
8
|
+
* @param userInput - the user input pressed now.
|
|
7
9
|
* @param inputModeState - the current mode and the user inputs so far.
|
|
8
10
|
* @returns The user's intent.
|
|
9
11
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-input-to-intent.d.ts","sourceRoot":"","sources":["../../../src/input/application/user-input-to-intent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,GAC7B,MAAM,GAAG,SAAS,CAQpB"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
+
* Converts a user input, mode and mode's buffer into an intent.
|
|
3
|
+
*
|
|
2
4
|
* By design "intent = input + mode + modeState", so it interprets the key
|
|
3
|
-
* inputs depending on the mode and
|
|
5
|
+
* inputs depending on the mode and mode's buffer. No other context.
|
|
4
6
|
*
|
|
5
|
-
* @param userInput - the
|
|
7
|
+
* @param userInput - the user input pressed now.
|
|
6
8
|
* @param inputModeState - the current mode and the user inputs so far.
|
|
7
9
|
* @returns The user's intent.
|
|
8
10
|
*/
|
|
@@ -15,6 +17,7 @@ export function userInputToIntent(userInput, inputModeState) {
|
|
|
15
17
|
}
|
|
16
18
|
}
|
|
17
19
|
function normalUserInputToIntent(userInput, normalBuffer) {
|
|
20
|
+
// Esc cancels of current key sequence
|
|
18
21
|
if (userInput.userInputType === 'esc') {
|
|
19
22
|
return {
|
|
20
23
|
intentType: 'setNormalBuffer',
|
|
@@ -46,10 +49,6 @@ function normalUserInputToIntent(userInput, normalBuffer) {
|
|
|
46
49
|
function normalCharacterToIntent(character, normalBuffer) {
|
|
47
50
|
if (normalBuffer === '') {
|
|
48
51
|
switch (character) {
|
|
49
|
-
case 'l':
|
|
50
|
-
return {
|
|
51
|
-
intentType: 'normalRight',
|
|
52
|
-
};
|
|
53
52
|
case 'h':
|
|
54
53
|
return {
|
|
55
54
|
intentType: 'normalLeft',
|
|
@@ -62,6 +61,10 @@ function normalCharacterToIntent(character, normalBuffer) {
|
|
|
62
61
|
return {
|
|
63
62
|
intentType: 'normalUp',
|
|
64
63
|
};
|
|
64
|
+
case 'l':
|
|
65
|
+
return {
|
|
66
|
+
intentType: 'normalRight',
|
|
67
|
+
};
|
|
65
68
|
case ':':
|
|
66
69
|
return {
|
|
67
70
|
intentType: 'enterCommandLineMode',
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-input-to-intent.test.d.ts","sourceRoot":"","sources":["../../../src/input/application/user-input-to-intent.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { InputModeState } from './input-mode-state.js';
|
|
2
|
+
import type { SerializableKey, TreeNode } from '../../trees/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* An effect produced by interpreting an intent against the current state.
|
|
5
|
+
*
|
|
6
|
+
* @typeParam Id - The sibling-unique tree-node ID type.
|
|
7
|
+
* @typeParam Value - Application-owned data stored in each tree node.
|
|
8
|
+
*/
|
|
9
|
+
export type Effect<Id extends SerializableKey, Value> = Readonly<{
|
|
10
|
+
effectType: 'dispatchEffectAction';
|
|
11
|
+
action: EffectAction<Id, Value>;
|
|
12
|
+
}> | Readonly<{
|
|
13
|
+
effectType: 'loadBranchEntries';
|
|
14
|
+
path: readonly Id[];
|
|
15
|
+
}> | Readonly<{
|
|
16
|
+
effectType: 'saveView';
|
|
17
|
+
name: string;
|
|
18
|
+
overwrite: boolean;
|
|
19
|
+
}> | Readonly<{
|
|
20
|
+
effectType: 'loadView';
|
|
21
|
+
name: string;
|
|
22
|
+
}> | Readonly<{
|
|
23
|
+
effectType: 'emitVisibleLeavesPaths';
|
|
24
|
+
}> | Readonly<{
|
|
25
|
+
effectType: 'listFolds';
|
|
26
|
+
}> | Readonly<{
|
|
27
|
+
effectType: 'quit';
|
|
28
|
+
exitMessage: string;
|
|
29
|
+
}> | Readonly<{
|
|
30
|
+
effectType: 'setInputState';
|
|
31
|
+
inputState: InputModeState;
|
|
32
|
+
}> | Readonly<{
|
|
33
|
+
effectType: 'unrecognizedCommand';
|
|
34
|
+
commandLine: string;
|
|
35
|
+
}>;
|
|
36
|
+
/**
|
|
37
|
+
* A user-facing reference to a fold tree.
|
|
38
|
+
*
|
|
39
|
+
* Indexes are local to a view and may be reused after deletion. Names are
|
|
40
|
+
* durable references intended for command-line use.
|
|
41
|
+
*/
|
|
42
|
+
export type FoldTreeReference = Readonly<{
|
|
43
|
+
foldTreeReferenceType: 'index';
|
|
44
|
+
index: number;
|
|
45
|
+
}> | Readonly<{
|
|
46
|
+
foldTreeReferenceType: 'name';
|
|
47
|
+
name: string;
|
|
48
|
+
}>;
|
|
49
|
+
/**
|
|
50
|
+
* An action interpreted by the state reducer.
|
|
51
|
+
*
|
|
52
|
+
* @typeParam Id - The sibling-unique tree-node ID type.
|
|
53
|
+
* @typeParam Value - Application-owned data stored in each tree node.
|
|
54
|
+
*/
|
|
55
|
+
export type EffectAction<Id extends SerializableKey, Value> = Readonly<{
|
|
56
|
+
effectActionType: 'nextEntry';
|
|
57
|
+
}> | Readonly<{
|
|
58
|
+
effectActionType: 'prevEntry';
|
|
59
|
+
}> | Readonly<{
|
|
60
|
+
effectActionType: 'setBranchEntries';
|
|
61
|
+
path: readonly Id[];
|
|
62
|
+
entries: readonly TreeNode<Id, Value>[] | null;
|
|
63
|
+
}> | Readonly<{
|
|
64
|
+
effectActionType: 'navigateToParent';
|
|
65
|
+
}> | Readonly<{
|
|
66
|
+
effectActionType: 'addToFoldTree';
|
|
67
|
+
foldTree: FoldTreeReference;
|
|
68
|
+
}> | Readonly<{
|
|
69
|
+
effectActionType: 'removeFromFoldTree';
|
|
70
|
+
foldTree: FoldTreeReference;
|
|
71
|
+
}> | Readonly<{
|
|
72
|
+
effectActionType: 'fold';
|
|
73
|
+
foldTree: FoldTreeReference;
|
|
74
|
+
}> | Readonly<{
|
|
75
|
+
effectActionType: 'unfold';
|
|
76
|
+
foldTree: FoldTreeReference;
|
|
77
|
+
}> | Readonly<{
|
|
78
|
+
effectActionType: 'toggleFold';
|
|
79
|
+
foldTree: FoldTreeReference;
|
|
80
|
+
}> | Readonly<{
|
|
81
|
+
effectActionType: 'createFoldTree';
|
|
82
|
+
name: string;
|
|
83
|
+
}>;
|
|
84
|
+
//# sourceMappingURL=effect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"effect.d.ts","sourceRoot":"","sources":["../../../src/input/domain/effect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEtE;;;;;GAKG;AACH,MAAM,MAAM,MAAM,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IAChD,QAAQ,CAAC;IACP,UAAU,EAAE,sBAAsB,CAAC;IACnC,MAAM,EAAE,YAAY,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;CACjC,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,mBAAmB,CAAC;IAChC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;CACrB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,wBAAwB,CAAC;CACtC,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,WAAW,CAAC;CACzB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,eAAe,CAAC;IAC5B,UAAU,EAAE,cAAc,CAAC;CAC5B,CAAC,GACF,QAAQ,CAAC;IACP,UAAU,EAAE,qBAAqB,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,QAAQ,CAAC;IACP,qBAAqB,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;CACf,CAAC,GACF,QAAQ,CAAC;IACP,qBAAqB,EAAE,MAAM,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC;AAEP;;;;;GAKG;AACH,MAAM,MAAM,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,KAAK,IACtD,QAAQ,CAAC;IACP,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,WAAW,CAAC;CAC/B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,IAAI,EAAE,SAAS,EAAE,EAAE,CAAC;IACpB,OAAO,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;CAChD,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,kBAAkB,CAAC;CACtC,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,eAAe,CAAC;IAClC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,oBAAoB,CAAC;IACvC,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,QAAQ,CAAC;IAC3B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,YAAY,CAAC;IAC/B,QAAQ,EAAE,iBAAiB,CAAC;CAC7B,CAAC,GACF,QAAQ,CAAC;IACP,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/input/domain/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-mode-state.d.ts","sourceRoot":"","sources":["../../../src/input/domain/input-mode-state.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB;IACE,SAAS,EAAE,QAAQ,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB,GACD;IACE,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../../src/input/domain/intent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,MAAM,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;AAE1D,MAAM,MAAM,gBAAgB,GACxB;IACE,UAAU,EAAE,aAAa,CAAC;CAC3B,GACD;IACE,UAAU,EAAE,YAAY,CAAC;CAC1B,GACD;IACE,UAAU,EAAE,YAAY,CAAC;CAC1B,GACD;IACE,UAAU,EAAE,UAAU,CAAC;CACxB,GACD;IACE,UAAU,EAAE,iBAAiB,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEN,MAAM,MAAM,iBAAiB,GACzB;IACE,UAAU,EAAE,sBAAsB,CAAC;CACpC,GACD;IACE,UAAU,EAAE,gBAAgB,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,UAAU,EAAE,oBAAoB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,UAAU,EAAE,qBAAqB,CAAC;CACnC,CAAC"}
|