@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.
Files changed (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +101 -0
  3. package/dist/__tests__/test-helpers.d.ts +15 -0
  4. package/dist/__tests__/test-helpers.d.ts.map +1 -0
  5. package/dist/__tests__/test-helpers.js +96 -0
  6. package/dist/__tests__/test-helpers.js.map +1 -0
  7. package/dist/candidates.d.ts +13 -0
  8. package/dist/candidates.d.ts.map +1 -0
  9. package/dist/candidates.js +47 -0
  10. package/dist/candidates.js.map +1 -0
  11. package/dist/commands.d.ts +18 -0
  12. package/dist/commands.d.ts.map +1 -0
  13. package/dist/commands.js +58 -0
  14. package/dist/commands.js.map +1 -0
  15. package/dist/config/default-config.d.ts +14 -0
  16. package/dist/config/default-config.d.ts.map +1 -0
  17. package/dist/config/default-config.js +35 -0
  18. package/dist/config/default-config.js.map +1 -0
  19. package/dist/config/schema.d.ts +51 -0
  20. package/dist/config/schema.d.ts.map +1 -0
  21. package/dist/config/schema.js +65 -0
  22. package/dist/config/schema.js.map +1 -0
  23. package/dist/constants.d.ts +6 -0
  24. package/dist/constants.d.ts.map +1 -0
  25. package/dist/constants.js +6 -0
  26. package/dist/constants.js.map +1 -0
  27. package/dist/cursor.d.ts +18 -0
  28. package/dist/cursor.d.ts.map +1 -0
  29. package/dist/cursor.js +97 -0
  30. package/dist/cursor.js.map +1 -0
  31. package/dist/extensions.d.ts +44 -0
  32. package/dist/extensions.d.ts.map +1 -0
  33. package/dist/extensions.js +2 -0
  34. package/dist/extensions.js.map +1 -0
  35. package/dist/hop.d.ts +13 -0
  36. package/dist/hop.d.ts.map +1 -0
  37. package/dist/hop.js +53 -0
  38. package/dist/hop.js.map +1 -0
  39. package/dist/index.d.ts +6 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +4 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/keymap.d.ts +17 -0
  44. package/dist/keymap.d.ts.map +1 -0
  45. package/dist/keymap.js +223 -0
  46. package/dist/keymap.js.map +1 -0
  47. package/dist/machine/actions.d.ts +23 -0
  48. package/dist/machine/actions.d.ts.map +1 -0
  49. package/dist/machine/actions.js +97 -0
  50. package/dist/machine/actions.js.map +1 -0
  51. package/dist/machine/types.d.ts +159 -0
  52. package/dist/machine/types.d.ts.map +1 -0
  53. package/dist/machine/types.js +2 -0
  54. package/dist/machine/types.js.map +1 -0
  55. package/dist/machine/vim-machine.d.ts +200 -0
  56. package/dist/machine/vim-machine.d.ts.map +1 -0
  57. package/dist/machine/vim-machine.js +425 -0
  58. package/dist/machine/vim-machine.js.map +1 -0
  59. package/dist/plugin.d.ts +5 -0
  60. package/dist/plugin.d.ts.map +1 -0
  61. package/dist/plugin.js +180 -0
  62. package/dist/plugin.js.map +1 -0
  63. package/dist/ui/help-overlay.d.ts +6 -0
  64. package/dist/ui/help-overlay.d.ts.map +1 -0
  65. package/dist/ui/help-overlay.js +104 -0
  66. package/dist/ui/help-overlay.js.map +1 -0
  67. package/dist/ui/overlay.d.ts +14 -0
  68. package/dist/ui/overlay.d.ts.map +1 -0
  69. package/dist/ui/overlay.js +97 -0
  70. package/dist/ui/overlay.js.map +1 -0
  71. package/dist/ui/status-line.d.ts +6 -0
  72. package/dist/ui/status-line.d.ts.map +1 -0
  73. package/dist/ui/status-line.js +44 -0
  74. package/dist/ui/status-line.js.map +1 -0
  75. package/dist/ui/vim-ui-store.d.ts +46 -0
  76. package/dist/ui/vim-ui-store.d.ts.map +1 -0
  77. package/dist/ui/vim-ui-store.js +36 -0
  78. package/dist/ui/vim-ui-store.js.map +1 -0
  79. package/dist/ui/which-key.d.ts +6 -0
  80. package/dist/ui/which-key.d.ts.map +1 -0
  81. package/dist/ui/which-key.js +71 -0
  82. package/dist/ui/which-key.js.map +1 -0
  83. package/dist/viewport-utils.d.ts +11 -0
  84. package/dist/viewport-utils.d.ts.map +1 -0
  85. package/dist/viewport-utils.js +26 -0
  86. package/dist/viewport-utils.js.map +1 -0
  87. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -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"}