@edv4h/usketch-plugin-tool-vim 0.1.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/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/__tests__/test-helpers.d.ts +15 -0
- package/dist/__tests__/test-helpers.d.ts.map +1 -0
- package/dist/__tests__/test-helpers.js +96 -0
- package/dist/__tests__/test-helpers.js.map +1 -0
- package/dist/candidates.d.ts +13 -0
- package/dist/candidates.d.ts.map +1 -0
- package/dist/candidates.js +47 -0
- package/dist/candidates.js.map +1 -0
- package/dist/commands.d.ts +18 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +58 -0
- package/dist/commands.js.map +1 -0
- package/dist/config/default-config.d.ts +14 -0
- package/dist/config/default-config.d.ts.map +1 -0
- package/dist/config/default-config.js +35 -0
- package/dist/config/default-config.js.map +1 -0
- package/dist/config/schema.d.ts +51 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +65 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/constants.d.ts +6 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +6 -0
- package/dist/constants.js.map +1 -0
- package/dist/cursor.d.ts +18 -0
- package/dist/cursor.d.ts.map +1 -0
- package/dist/cursor.js +97 -0
- package/dist/cursor.js.map +1 -0
- package/dist/extensions.d.ts +44 -0
- package/dist/extensions.d.ts.map +1 -0
- package/dist/extensions.js +2 -0
- package/dist/extensions.js.map +1 -0
- package/dist/hop.d.ts +13 -0
- package/dist/hop.d.ts.map +1 -0
- package/dist/hop.js +53 -0
- package/dist/hop.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/keymap.d.ts +17 -0
- package/dist/keymap.d.ts.map +1 -0
- package/dist/keymap.js +223 -0
- package/dist/keymap.js.map +1 -0
- package/dist/machine/actions.d.ts +23 -0
- package/dist/machine/actions.d.ts.map +1 -0
- package/dist/machine/actions.js +97 -0
- package/dist/machine/actions.js.map +1 -0
- package/dist/machine/types.d.ts +159 -0
- package/dist/machine/types.d.ts.map +1 -0
- package/dist/machine/types.js +2 -0
- package/dist/machine/types.js.map +1 -0
- package/dist/machine/vim-machine.d.ts +200 -0
- package/dist/machine/vim-machine.d.ts.map +1 -0
- package/dist/machine/vim-machine.js +425 -0
- package/dist/machine/vim-machine.js.map +1 -0
- package/dist/plugin.d.ts +5 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +180 -0
- package/dist/plugin.js.map +1 -0
- package/dist/ui/help-overlay.d.ts +6 -0
- package/dist/ui/help-overlay.d.ts.map +1 -0
- package/dist/ui/help-overlay.js +104 -0
- package/dist/ui/help-overlay.js.map +1 -0
- package/dist/ui/overlay.d.ts +14 -0
- package/dist/ui/overlay.d.ts.map +1 -0
- package/dist/ui/overlay.js +97 -0
- package/dist/ui/overlay.js.map +1 -0
- package/dist/ui/status-line.d.ts +6 -0
- package/dist/ui/status-line.d.ts.map +1 -0
- package/dist/ui/status-line.js +44 -0
- package/dist/ui/status-line.js.map +1 -0
- package/dist/ui/vim-ui-store.d.ts +46 -0
- package/dist/ui/vim-ui-store.d.ts.map +1 -0
- package/dist/ui/vim-ui-store.js +36 -0
- package/dist/ui/vim-ui-store.js.map +1 -0
- package/dist/ui/which-key.d.ts +6 -0
- package/dist/ui/which-key.d.ts.map +1 -0
- package/dist/ui/which-key.js +71 -0
- package/dist/ui/which-key.js.map +1 -0
- package/dist/viewport-utils.d.ts +11 -0
- package/dist/viewport-utils.d.ts.map +1 -0
- package/dist/viewport-utils.js +26 -0
- package/dist/viewport-utils.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { DEFAULT_STYLE, generateId } from "@edv4h/usketch-shared";
|
|
2
|
+
import { createAddShapeCommand, createDeleteShapeCommand } from "@edv4h/usketch-store";
|
|
3
|
+
/** count を実効値に(未入力なら 1)。 */
|
|
4
|
+
export function effectiveCount(ctx) {
|
|
5
|
+
return ctx.count ?? 1;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 削除/yank の対象 ID。選択があれば選択、無ければカーソル最近傍 1 つ。
|
|
9
|
+
* (`findNearestShape` は cursor.ts にあるが循環を避けるため呼び出し側で渡す)
|
|
10
|
+
*/
|
|
11
|
+
export function resolveTargets(ctx, nearestId) {
|
|
12
|
+
const sel = [...ctx.deps.store.getSelection()];
|
|
13
|
+
if (sel.length > 0)
|
|
14
|
+
return sel;
|
|
15
|
+
return nearestId ? [nearestId] : [];
|
|
16
|
+
}
|
|
17
|
+
/** 候補から実際の ShapeData を生成(createDefault + spec 上書き)。 */
|
|
18
|
+
export function buildShapeFromCandidate(deps, candidate, at) {
|
|
19
|
+
const def = deps.shapes.get(candidate.spec.type);
|
|
20
|
+
if (!def)
|
|
21
|
+
return null;
|
|
22
|
+
const id = generateId();
|
|
23
|
+
const base = def.createDefault({ id, x: at.x, y: at.y });
|
|
24
|
+
const spec = candidate.spec;
|
|
25
|
+
const next = {
|
|
26
|
+
...base,
|
|
27
|
+
width: spec.width ?? base.width,
|
|
28
|
+
height: spec.height ?? base.height,
|
|
29
|
+
style: { ...DEFAULT_STYLE, ...base.style, ...(spec.style ?? {}) },
|
|
30
|
+
};
|
|
31
|
+
if (spec.meta) {
|
|
32
|
+
next.meta = { ...(base.meta ?? {}), ...spec.meta };
|
|
33
|
+
}
|
|
34
|
+
return next;
|
|
35
|
+
}
|
|
36
|
+
/** insert: 選択中の候補をカーソル位置に確定する。 */
|
|
37
|
+
export function commitCandidate(ctx) {
|
|
38
|
+
const candidate = ctx.candidates[ctx.candidateIndex];
|
|
39
|
+
if (!candidate)
|
|
40
|
+
return;
|
|
41
|
+
const shape = buildShapeFromCandidate(ctx.deps, candidate, ctx.cursor);
|
|
42
|
+
if (!shape)
|
|
43
|
+
return;
|
|
44
|
+
ctx.deps.commands.execute(createAddShapeCommand(ctx.deps.store, shape));
|
|
45
|
+
}
|
|
46
|
+
/** 対象 shape を削除(undo 可能)。 */
|
|
47
|
+
export function deleteShapes(deps, ids) {
|
|
48
|
+
for (const id of ids) {
|
|
49
|
+
deps.commands.execute(createDeleteShapeCommand(deps.store, id));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/** 対象 shape のスナップショットを返す(yank 用、ディープコピー)。 */
|
|
53
|
+
export function snapshotShapes(deps, ids) {
|
|
54
|
+
const out = [];
|
|
55
|
+
for (const id of ids) {
|
|
56
|
+
const s = deps.store.getShape(id);
|
|
57
|
+
if (s)
|
|
58
|
+
out.push(structuredClone(s));
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/** register の shape をカーソル付近に貼り付け、新 ID を採番する。 */
|
|
63
|
+
export function pasteShapes(ctx) {
|
|
64
|
+
const { register, deps, cursor } = ctx;
|
|
65
|
+
if (register.length === 0)
|
|
66
|
+
return [];
|
|
67
|
+
// register の重心を基準にカーソルへ移動。
|
|
68
|
+
let cx = 0;
|
|
69
|
+
let cy = 0;
|
|
70
|
+
for (const s of register) {
|
|
71
|
+
cx += s.x + s.width / 2;
|
|
72
|
+
cy += s.y + s.height / 2;
|
|
73
|
+
}
|
|
74
|
+
cx /= register.length;
|
|
75
|
+
cy /= register.length;
|
|
76
|
+
const dx = cursor.x - cx;
|
|
77
|
+
const dy = cursor.y - cy;
|
|
78
|
+
const newIds = [];
|
|
79
|
+
for (const s of register) {
|
|
80
|
+
const id = generateId();
|
|
81
|
+
// 新 ID を採番し、store が再付与する createdAt/updatedAt/zIndex と親子関係はリセット。
|
|
82
|
+
const shape = {
|
|
83
|
+
...s,
|
|
84
|
+
id,
|
|
85
|
+
x: s.x + dx,
|
|
86
|
+
y: s.y + dy,
|
|
87
|
+
createdAt: undefined,
|
|
88
|
+
updatedAt: undefined,
|
|
89
|
+
zIndex: undefined,
|
|
90
|
+
parentId: undefined,
|
|
91
|
+
};
|
|
92
|
+
deps.commands.execute(createAddShapeCommand(deps.store, shape));
|
|
93
|
+
newIds.push(id);
|
|
94
|
+
}
|
|
95
|
+
return newIds;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/machine/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Point, ShapeData, ToolContext } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { ShapeSpec, VimConfig } from "../config/schema.js";
|
|
3
|
+
import type { VimExtensions } from "../extensions.js";
|
|
4
|
+
/** Vim の主要モード(machine の state 値と対応)。 */
|
|
5
|
+
export type VimMode = "normal" | "insert" | "visual" | "command" | "hop";
|
|
6
|
+
/** hop(ラベルジャンプ)の1ターゲット。 */
|
|
7
|
+
export interface HopTarget {
|
|
8
|
+
id: string;
|
|
9
|
+
label: string;
|
|
10
|
+
/** shape 中心の world 座標。 */
|
|
11
|
+
cx: number;
|
|
12
|
+
cy: number;
|
|
13
|
+
}
|
|
14
|
+
/** hjkl の方向。 */
|
|
15
|
+
export type Direction = "left" | "down" | "up" | "right";
|
|
16
|
+
/** operator-pending で保持する演算子。 */
|
|
17
|
+
export type VimOperator = "delete" | "yank";
|
|
18
|
+
/** insert モードの shape 候補(入力バッファにマッチしたもの)。 */
|
|
19
|
+
export interface ShapeCandidate {
|
|
20
|
+
/** マッチした別名 or 型名。 */
|
|
21
|
+
alias: string;
|
|
22
|
+
/** 生成に使う shape 指定。 */
|
|
23
|
+
spec: ShapeSpec;
|
|
24
|
+
/** 表示ラベル。 */
|
|
25
|
+
label: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* machine が store などを操作するための依存。`ToolContext`(store/shapes/commands/events)
|
|
29
|
+
* をそのまま使う。シリアライズ不要なので context に保持する。
|
|
30
|
+
*/
|
|
31
|
+
export type VimDeps = ToolContext;
|
|
32
|
+
export interface VimContext {
|
|
33
|
+
/** 論理カーソル(world 座標)。 */
|
|
34
|
+
cursor: Point;
|
|
35
|
+
/** 数値プレフィックス(`5j` の 5)。未入力なら null。 */
|
|
36
|
+
count: number | null;
|
|
37
|
+
/** insert モードの入力バッファ。 */
|
|
38
|
+
inputBuffer: string;
|
|
39
|
+
/** command モードの入力バッファ(先頭の `:` は含めない)。 */
|
|
40
|
+
commandBuffer: string;
|
|
41
|
+
/** insert 候補一覧。 */
|
|
42
|
+
candidates: ShapeCandidate[];
|
|
43
|
+
/** 選択中の候補インデックス。 */
|
|
44
|
+
candidateIndex: number;
|
|
45
|
+
/** yank レジスタ(コピーした shape のスナップショット)。 */
|
|
46
|
+
register: ShapeData[];
|
|
47
|
+
/** マーク(`ma` で保存した world 座標)。 */
|
|
48
|
+
marks: Record<string, Point>;
|
|
49
|
+
/** which-key オーバーレイの表示状態。 */
|
|
50
|
+
whichKeyVisible: boolean;
|
|
51
|
+
/** `:help` 全画面ヘルプの表示状態。 */
|
|
52
|
+
helpVisible: boolean;
|
|
53
|
+
/** hop モードのラベル一覧(hop 中のみ非空)。 */
|
|
54
|
+
hopLabels: HopTarget[];
|
|
55
|
+
/** hop モードで入力済みのラベル文字。 */
|
|
56
|
+
hopBuffer: string;
|
|
57
|
+
/** 直近に実行した ex コマンドの結果メッセージ(ステータスライン表示用)。 */
|
|
58
|
+
lastMessage: string | null;
|
|
59
|
+
/** 設定。 */
|
|
60
|
+
config: VimConfig;
|
|
61
|
+
/** 実行時依存。 */
|
|
62
|
+
deps: VimDeps;
|
|
63
|
+
/** 開発者拡張(独自コマンド / キーバインド)。 */
|
|
64
|
+
extensions: VimExtensions;
|
|
65
|
+
}
|
|
66
|
+
export type VimEvent = {
|
|
67
|
+
type: "MOTION";
|
|
68
|
+
dir: Direction;
|
|
69
|
+
shift: boolean;
|
|
70
|
+
} | {
|
|
71
|
+
type: "DIGIT";
|
|
72
|
+
n: number;
|
|
73
|
+
} | {
|
|
74
|
+
type: "MODE_INSERT";
|
|
75
|
+
} | {
|
|
76
|
+
type: "MODE_VISUAL";
|
|
77
|
+
multi: boolean;
|
|
78
|
+
} | {
|
|
79
|
+
type: "MODE_COMMAND";
|
|
80
|
+
} | {
|
|
81
|
+
type: "ESCAPE";
|
|
82
|
+
} | {
|
|
83
|
+
type: "COMMIT";
|
|
84
|
+
} | {
|
|
85
|
+
type: "TEXT";
|
|
86
|
+
char: string;
|
|
87
|
+
} | {
|
|
88
|
+
type: "BACKSPACE";
|
|
89
|
+
} | {
|
|
90
|
+
type: "TAB";
|
|
91
|
+
shift: boolean;
|
|
92
|
+
} | {
|
|
93
|
+
type: "OPERATOR";
|
|
94
|
+
op: VimOperator;
|
|
95
|
+
} | {
|
|
96
|
+
type: "PASTE";
|
|
97
|
+
} | {
|
|
98
|
+
type: "UNDO";
|
|
99
|
+
} | {
|
|
100
|
+
type: "REDO";
|
|
101
|
+
} | {
|
|
102
|
+
type: "ZOOM";
|
|
103
|
+
dir: "in" | "out";
|
|
104
|
+
}
|
|
105
|
+
/** ビューポートをカーソル位置へ寄せる(zz)。 */
|
|
106
|
+
| {
|
|
107
|
+
type: "CENTER";
|
|
108
|
+
}
|
|
109
|
+
/** カーソルを画面中央(現在の可視領域の中心)へ移動する(M)。 */
|
|
110
|
+
| {
|
|
111
|
+
type: "CURSOR_CENTER";
|
|
112
|
+
} | {
|
|
113
|
+
type: "JUMP";
|
|
114
|
+
to: "first" | "last";
|
|
115
|
+
} | {
|
|
116
|
+
type: "COMMAND_CHAR";
|
|
117
|
+
char: string;
|
|
118
|
+
} | {
|
|
119
|
+
type: "COMMAND_BACKSPACE";
|
|
120
|
+
} | {
|
|
121
|
+
type: "RUN_COMMAND";
|
|
122
|
+
} | {
|
|
123
|
+
type: "TOGGLE_WHICH_KEY";
|
|
124
|
+
} | {
|
|
125
|
+
type: "SET_MARK";
|
|
126
|
+
key: string;
|
|
127
|
+
} | {
|
|
128
|
+
type: "JUMP_MARK";
|
|
129
|
+
key: string;
|
|
130
|
+
}
|
|
131
|
+
/** hop(ラベルジャンプ)開始。 */
|
|
132
|
+
| {
|
|
133
|
+
type: "HOP_START";
|
|
134
|
+
}
|
|
135
|
+
/** hop 中のラベル文字入力。 */
|
|
136
|
+
| {
|
|
137
|
+
type: "HOP_KEY";
|
|
138
|
+
char: string;
|
|
139
|
+
}
|
|
140
|
+
/** 開発者が登録した独自キーバインドの実行(mode+key で extensions を引く)。 */
|
|
141
|
+
| {
|
|
142
|
+
type: "CUSTOM_BINDING";
|
|
143
|
+
mode: VimMode;
|
|
144
|
+
key: string;
|
|
145
|
+
}
|
|
146
|
+
/** ツール起動時にカーソルを初期化し normal へ戻す(register/marks は保持)。 */
|
|
147
|
+
| {
|
|
148
|
+
type: "RESET";
|
|
149
|
+
cursor: Point;
|
|
150
|
+
};
|
|
151
|
+
/** machine の input(createActor 時に渡す)。 */
|
|
152
|
+
export interface VimInput {
|
|
153
|
+
config: VimConfig;
|
|
154
|
+
deps: VimDeps;
|
|
155
|
+
extensions: VimExtensions;
|
|
156
|
+
/** 初期カーソル位置(world 座標)。 */
|
|
157
|
+
initialCursor: Point;
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/machine/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/machine/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { Point } from "@edv4h/usketch-shared";
|
|
2
|
+
import type { Direction, VimContext, VimInput, VimMode } from "./types.js";
|
|
3
|
+
export declare const vimMachine: import("xstate").StateMachine<VimContext, {
|
|
4
|
+
type: "MOTION";
|
|
5
|
+
dir: Direction;
|
|
6
|
+
shift: boolean;
|
|
7
|
+
} | {
|
|
8
|
+
type: "DIGIT";
|
|
9
|
+
n: number;
|
|
10
|
+
} | {
|
|
11
|
+
type: "MODE_INSERT";
|
|
12
|
+
} | {
|
|
13
|
+
type: "MODE_VISUAL";
|
|
14
|
+
multi: boolean;
|
|
15
|
+
} | {
|
|
16
|
+
type: "MODE_COMMAND";
|
|
17
|
+
} | {
|
|
18
|
+
type: "ESCAPE";
|
|
19
|
+
} | {
|
|
20
|
+
type: "COMMIT";
|
|
21
|
+
} | {
|
|
22
|
+
type: "TEXT";
|
|
23
|
+
char: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: "BACKSPACE";
|
|
26
|
+
} | {
|
|
27
|
+
type: "TAB";
|
|
28
|
+
shift: boolean;
|
|
29
|
+
} | {
|
|
30
|
+
type: "OPERATOR";
|
|
31
|
+
op: import("./types.js").VimOperator;
|
|
32
|
+
} | {
|
|
33
|
+
type: "PASTE";
|
|
34
|
+
} | {
|
|
35
|
+
type: "UNDO";
|
|
36
|
+
} | {
|
|
37
|
+
type: "REDO";
|
|
38
|
+
} | {
|
|
39
|
+
type: "ZOOM";
|
|
40
|
+
dir: "in" | "out";
|
|
41
|
+
} | {
|
|
42
|
+
type: "CENTER";
|
|
43
|
+
} | {
|
|
44
|
+
type: "CURSOR_CENTER";
|
|
45
|
+
} | {
|
|
46
|
+
type: "JUMP";
|
|
47
|
+
to: "first" | "last";
|
|
48
|
+
} | {
|
|
49
|
+
type: "COMMAND_CHAR";
|
|
50
|
+
char: string;
|
|
51
|
+
} | {
|
|
52
|
+
type: "COMMAND_BACKSPACE";
|
|
53
|
+
} | {
|
|
54
|
+
type: "RUN_COMMAND";
|
|
55
|
+
} | {
|
|
56
|
+
type: "TOGGLE_WHICH_KEY";
|
|
57
|
+
} | {
|
|
58
|
+
type: "SET_MARK";
|
|
59
|
+
key: string;
|
|
60
|
+
} | {
|
|
61
|
+
type: "JUMP_MARK";
|
|
62
|
+
key: string;
|
|
63
|
+
} | {
|
|
64
|
+
type: "HOP_START";
|
|
65
|
+
} | {
|
|
66
|
+
type: "HOP_KEY";
|
|
67
|
+
char: string;
|
|
68
|
+
} | {
|
|
69
|
+
type: "CUSTOM_BINDING";
|
|
70
|
+
mode: VimMode;
|
|
71
|
+
key: string;
|
|
72
|
+
} | {
|
|
73
|
+
type: "RESET";
|
|
74
|
+
cursor: Point;
|
|
75
|
+
}, {}, never, {
|
|
76
|
+
type: "zoom";
|
|
77
|
+
params: unknown;
|
|
78
|
+
} | {
|
|
79
|
+
type: "center";
|
|
80
|
+
params: unknown;
|
|
81
|
+
} | {
|
|
82
|
+
type: "jump";
|
|
83
|
+
params: import("xstate").NonReducibleUnknown;
|
|
84
|
+
} | {
|
|
85
|
+
type: "commit";
|
|
86
|
+
params: import("xstate").NonReducibleUnknown;
|
|
87
|
+
} | {
|
|
88
|
+
type: "paste";
|
|
89
|
+
params: unknown;
|
|
90
|
+
} | {
|
|
91
|
+
type: "undo";
|
|
92
|
+
params: unknown;
|
|
93
|
+
} | {
|
|
94
|
+
type: "redo";
|
|
95
|
+
params: unknown;
|
|
96
|
+
} | {
|
|
97
|
+
type: "incCount";
|
|
98
|
+
params: import("xstate").NonReducibleUnknown;
|
|
99
|
+
} | {
|
|
100
|
+
type: "resetCount";
|
|
101
|
+
params: import("xstate").NonReducibleUnknown;
|
|
102
|
+
} | {
|
|
103
|
+
type: "normalMotion";
|
|
104
|
+
params: import("xstate").NonReducibleUnknown;
|
|
105
|
+
} | {
|
|
106
|
+
type: "selectNearest";
|
|
107
|
+
params: import("xstate").NonReducibleUnknown;
|
|
108
|
+
} | {
|
|
109
|
+
type: "visualSingleMotion";
|
|
110
|
+
params: import("xstate").NonReducibleUnknown;
|
|
111
|
+
} | {
|
|
112
|
+
type: "visualMultiMotion";
|
|
113
|
+
params: import("xstate").NonReducibleUnknown;
|
|
114
|
+
} | {
|
|
115
|
+
type: "clearSelection";
|
|
116
|
+
params: unknown;
|
|
117
|
+
} | {
|
|
118
|
+
type: "deleteTargets";
|
|
119
|
+
params: unknown;
|
|
120
|
+
} | {
|
|
121
|
+
type: "yankTargets";
|
|
122
|
+
params: import("xstate").NonReducibleUnknown;
|
|
123
|
+
} | {
|
|
124
|
+
type: "appendInput";
|
|
125
|
+
params: import("xstate").NonReducibleUnknown;
|
|
126
|
+
} | {
|
|
127
|
+
type: "backspaceInput";
|
|
128
|
+
params: import("xstate").NonReducibleUnknown;
|
|
129
|
+
} | {
|
|
130
|
+
type: "cycleCandidate";
|
|
131
|
+
params: import("xstate").NonReducibleUnknown;
|
|
132
|
+
} | {
|
|
133
|
+
type: "resetInsert";
|
|
134
|
+
params: import("xstate").NonReducibleUnknown;
|
|
135
|
+
} | {
|
|
136
|
+
type: "appendCommand";
|
|
137
|
+
params: import("xstate").NonReducibleUnknown;
|
|
138
|
+
} | {
|
|
139
|
+
type: "backspaceCommand";
|
|
140
|
+
params: import("xstate").NonReducibleUnknown;
|
|
141
|
+
} | {
|
|
142
|
+
type: "runCommand";
|
|
143
|
+
params: import("xstate").NonReducibleUnknown;
|
|
144
|
+
} | {
|
|
145
|
+
type: "runCustomBinding";
|
|
146
|
+
params: import("xstate").NonReducibleUnknown;
|
|
147
|
+
} | {
|
|
148
|
+
type: "resetCommand";
|
|
149
|
+
params: import("xstate").NonReducibleUnknown;
|
|
150
|
+
} | {
|
|
151
|
+
type: "cursorCenter";
|
|
152
|
+
params: import("xstate").NonReducibleUnknown;
|
|
153
|
+
} | {
|
|
154
|
+
type: "hopStart";
|
|
155
|
+
params: import("xstate").NonReducibleUnknown;
|
|
156
|
+
} | {
|
|
157
|
+
type: "hopKey";
|
|
158
|
+
params: import("xstate").NonReducibleUnknown;
|
|
159
|
+
} | {
|
|
160
|
+
type: "clearHop";
|
|
161
|
+
params: import("xstate").NonReducibleUnknown;
|
|
162
|
+
} | {
|
|
163
|
+
type: "setMark";
|
|
164
|
+
params: import("xstate").NonReducibleUnknown;
|
|
165
|
+
} | {
|
|
166
|
+
type: "jumpMark";
|
|
167
|
+
params: import("xstate").NonReducibleUnknown;
|
|
168
|
+
} | {
|
|
169
|
+
type: "toggleWhichKey";
|
|
170
|
+
params: import("xstate").NonReducibleUnknown;
|
|
171
|
+
} | {
|
|
172
|
+
type: "closeHelp";
|
|
173
|
+
params: import("xstate").NonReducibleUnknown;
|
|
174
|
+
}, {
|
|
175
|
+
type: "isShiftMotion";
|
|
176
|
+
params: unknown;
|
|
177
|
+
} | {
|
|
178
|
+
type: "isMultiVisual";
|
|
179
|
+
params: unknown;
|
|
180
|
+
} | {
|
|
181
|
+
type: "hasCandidates";
|
|
182
|
+
params: unknown;
|
|
183
|
+
}, never, "normal" | "insert" | "command" | "hop" | {
|
|
184
|
+
visual: "multi" | "single";
|
|
185
|
+
}, string, VimInput, import("xstate").NonReducibleUnknown, import("xstate").EventObject, import("xstate").MetaObject, {
|
|
186
|
+
id: "vim";
|
|
187
|
+
states: {
|
|
188
|
+
readonly normal: {};
|
|
189
|
+
readonly insert: {};
|
|
190
|
+
readonly visual: {
|
|
191
|
+
states: {
|
|
192
|
+
readonly single: {};
|
|
193
|
+
readonly multi: {};
|
|
194
|
+
};
|
|
195
|
+
};
|
|
196
|
+
readonly command: {};
|
|
197
|
+
readonly hop: {};
|
|
198
|
+
};
|
|
199
|
+
}>;
|
|
200
|
+
//# sourceMappingURL=vim-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vim-machine.d.ts","sourceRoot":"","sources":["../../src/machine/vim-machine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAuBnD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAY,QAAQ,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAwErF,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuWrB,CAAC"}
|