@opentui/keymap 0.0.0-20260423-618ea9b1 → 0.1.106
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/README.md +19 -2
- package/addons/index.js +925 -280
- package/addons/opentui/index.js +926 -282
- package/html.js +960 -257
- package/index.js +906 -257
- package/opentui.js +960 -257
- package/package.json +4 -4
- package/react/index.js +14 -15
- package/solid/index.js +6 -7
- package/src/addons/opentui/edit-buffer-bindings.d.ts +4 -2
- package/src/addons/universal/enabled.d.ts +3 -8
- package/src/addons/universal/index.d.ts +3 -2
- package/src/addons/universal/metadata.d.ts +3 -0
- package/src/addons/universal/neovim-disambiguation.d.ts +10 -0
- package/src/index.d.ts +1 -1
- package/src/keymap.d.ts +5 -1
- package/src/react/index.d.ts +2 -4
- package/src/services/activation.d.ts +16 -6
- package/src/services/command-catalog.d.ts +13 -1
- package/src/services/command-executor.d.ts +1 -0
- package/src/services/compiler.d.ts +2 -2
- package/src/services/conditions.d.ts +2 -2
- package/src/services/dispatch.d.ts +29 -2
- package/src/services/layers.d.ts +9 -2
- package/src/services/notify.d.ts +1 -0
- package/src/services/primitives/active-layers.d.ts +6 -3
- package/src/services/state.d.ts +23 -10
- package/src/solid/index.d.ts +2 -4
- package/src/types.d.ts +52 -22
- package/src/keymap-benchmark.d.ts +0 -1
package/src/types.d.ts
CHANGED
|
@@ -41,11 +41,44 @@ export interface NormalizedKeyStroke extends KeyStrokeInput {
|
|
|
41
41
|
meta: boolean;
|
|
42
42
|
super: boolean;
|
|
43
43
|
}
|
|
44
|
-
export type KeyMatch =
|
|
44
|
+
export type KeyMatch = string;
|
|
45
45
|
export interface EventMatchResolverContext {
|
|
46
46
|
resolveKey(key: KeyLike): KeyMatch;
|
|
47
47
|
}
|
|
48
48
|
export type EventMatchResolver<TEvent extends KeymapEvent = KeymapEvent> = (event: TEvent, ctx: EventMatchResolverContext) => readonly KeyMatch[] | undefined;
|
|
49
|
+
export declare const KEY_DISAMBIGUATION_DECISION: unique symbol;
|
|
50
|
+
export declare const KEY_DEFERRED_DISAMBIGUATION_DECISION: unique symbol;
|
|
51
|
+
export interface KeyDisambiguationDecision {
|
|
52
|
+
readonly [KEY_DISAMBIGUATION_DECISION]: true;
|
|
53
|
+
}
|
|
54
|
+
export interface KeyDeferredDisambiguationDecision {
|
|
55
|
+
readonly [KEY_DEFERRED_DISAMBIGUATION_DECISION]: true;
|
|
56
|
+
}
|
|
57
|
+
export interface KeyDisambiguationContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
58
|
+
readonly event: Readonly<Omit<TEvent, "preventDefault" | "stopPropagation">>;
|
|
59
|
+
readonly focused: TTarget | null;
|
|
60
|
+
readonly sequence: readonly KeySequencePart[];
|
|
61
|
+
readonly stroke: KeySequencePart;
|
|
62
|
+
readonly exact: readonly ActiveBinding<TTarget, TEvent>[];
|
|
63
|
+
readonly continuations: readonly ActiveKey<TTarget, TEvent>[];
|
|
64
|
+
getData(name: string): unknown;
|
|
65
|
+
setData(name: string, value: unknown): void;
|
|
66
|
+
runExact(): KeyDisambiguationDecision;
|
|
67
|
+
continueSequence(): KeyDisambiguationDecision;
|
|
68
|
+
clear(): KeyDisambiguationDecision;
|
|
69
|
+
defer(run: KeyDeferredDisambiguationHandler<TTarget, TEvent>): KeyDisambiguationDecision;
|
|
70
|
+
}
|
|
71
|
+
export interface KeyDeferredDisambiguationContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
72
|
+
readonly signal: AbortSignal;
|
|
73
|
+
readonly sequence: readonly KeySequencePart[];
|
|
74
|
+
readonly focused: TTarget | null;
|
|
75
|
+
sleep(ms: number): Promise<boolean>;
|
|
76
|
+
runExact(): KeyDeferredDisambiguationDecision;
|
|
77
|
+
continueSequence(): KeyDeferredDisambiguationDecision;
|
|
78
|
+
clear(): KeyDeferredDisambiguationDecision;
|
|
79
|
+
}
|
|
80
|
+
export type KeyDeferredDisambiguationHandler<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = (ctx: KeyDeferredDisambiguationContext<TTarget, TEvent>) => KeyDeferredDisambiguationDecision | void | Promise<KeyDeferredDisambiguationDecision | void>;
|
|
81
|
+
export type KeyDisambiguationResolver<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = (ctx: KeyDisambiguationContext<TTarget, TEvent>) => KeyDisambiguationDecision | undefined;
|
|
49
82
|
export interface ResolvedKeyToken {
|
|
50
83
|
stroke: NormalizedKeyStroke;
|
|
51
84
|
match: KeyMatch;
|
|
@@ -97,7 +130,7 @@ export type RunCommandResult = {
|
|
|
97
130
|
reason: "not-found";
|
|
98
131
|
} | {
|
|
99
132
|
ok: false;
|
|
100
|
-
reason: "invalid-args" | "rejected" | "error";
|
|
133
|
+
reason: "inactive" | "disabled" | "invalid-args" | "rejected" | "error";
|
|
101
134
|
command?: CommandRecord;
|
|
102
135
|
};
|
|
103
136
|
export interface CommandContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
@@ -136,27 +169,34 @@ export interface BindingInput<TTarget extends object = object, TEvent extends Ke
|
|
|
136
169
|
}
|
|
137
170
|
export type BindingShorthand<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Record<string, BindingCommand<TTarget, TEvent>>;
|
|
138
171
|
export type Bindings<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = BindingInput<TTarget, TEvent>[] | BindingShorthand<TTarget, TEvent>;
|
|
139
|
-
export type
|
|
172
|
+
export type TargetMode = "focus" | "focus-within";
|
|
140
173
|
export interface LayerFields<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
141
174
|
priority?: number;
|
|
142
175
|
bindings?: Bindings<TTarget, TEvent>;
|
|
143
176
|
commands?: readonly CommandDefinition<TTarget, TEvent>[];
|
|
177
|
+
targetMode?: TargetMode;
|
|
178
|
+
/**
|
|
179
|
+
* Extra layer fields feed layer-field compilers and binding compilation via
|
|
180
|
+
* `BindingParserContext.layer` / `BindingTransformerContext.layer`. Unlike
|
|
181
|
+
* binding and command fields, layer fields do not compile into public attrs.
|
|
182
|
+
*/
|
|
144
183
|
[key: string]: unknown;
|
|
145
184
|
}
|
|
185
|
+
export interface Layer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> extends LayerFields<TTarget, TEvent> {
|
|
186
|
+
target?: TTarget;
|
|
187
|
+
}
|
|
146
188
|
export interface GlobalLayer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> extends LayerFields<TTarget, TEvent> {
|
|
147
189
|
target?: undefined;
|
|
148
|
-
scope?: "global";
|
|
149
190
|
}
|
|
150
191
|
export interface FocusWithinLayer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> extends LayerFields<TTarget, TEvent> {
|
|
151
192
|
target: TTarget;
|
|
152
|
-
|
|
193
|
+
targetMode?: TargetMode;
|
|
153
194
|
}
|
|
154
195
|
export interface FocusLayer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> extends LayerFields<TTarget, TEvent> {
|
|
155
196
|
target: TTarget;
|
|
156
|
-
|
|
197
|
+
targetMode?: TargetMode;
|
|
157
198
|
}
|
|
158
199
|
export type TargetLayer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = FocusWithinLayer<TTarget, TEvent> | FocusLayer<TTarget, TEvent>;
|
|
159
|
-
export type Layer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = GlobalLayer<TTarget, TEvent> | TargetLayer<TTarget, TEvent>;
|
|
160
200
|
export interface ParsedCommand {
|
|
161
201
|
input: string;
|
|
162
202
|
name: string;
|
|
@@ -245,6 +285,10 @@ export type BindingFieldCompiler = (value: unknown, ctx: BindingFieldContext) =>
|
|
|
245
285
|
export interface LayerFieldContext {
|
|
246
286
|
require(name: string, value: unknown): void;
|
|
247
287
|
/**
|
|
288
|
+
* Layer fields only influence activation and binding compilation. They do
|
|
289
|
+
* not expose `attr(...)` because the current model has no layer-level attrs
|
|
290
|
+
* surface on `ActiveKey`, `ActiveBinding`, or `CommandRecord`.
|
|
291
|
+
*
|
|
248
292
|
* Registers a runtime matcher. Raw callbacks re-run on every read;
|
|
249
293
|
* reactive matchers stay cached until they notify.
|
|
250
294
|
*/
|
|
@@ -252,7 +296,6 @@ export interface LayerFieldContext {
|
|
|
252
296
|
}
|
|
253
297
|
export type LayerFieldCompiler = (value: unknown, ctx: LayerFieldContext) => void;
|
|
254
298
|
export interface LayerAnalysisContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
255
|
-
scope: Scope;
|
|
256
299
|
target?: TTarget;
|
|
257
300
|
order: number;
|
|
258
301
|
bindingInputs: readonly BindingInput<TTarget, TEvent>[];
|
|
@@ -271,7 +314,6 @@ export interface LayerBindingAnalysis<TTarget extends object = object, TEvent ex
|
|
|
271
314
|
preventDefault: boolean;
|
|
272
315
|
fallthrough: boolean;
|
|
273
316
|
sourceBinding: ParsedBindingInput<TTarget, TEvent>;
|
|
274
|
-
sourceScope: Scope;
|
|
275
317
|
sourceTarget?: TTarget;
|
|
276
318
|
sourceLayerOrder: number;
|
|
277
319
|
sourceBindingIndex: number;
|
|
@@ -386,11 +428,6 @@ export interface RawInterceptOptions {
|
|
|
386
428
|
priority?: number;
|
|
387
429
|
}
|
|
388
430
|
export type { Keymap };
|
|
389
|
-
export type KeymapActiveKey<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = ActiveKey<TTarget, TEvent>;
|
|
390
|
-
export type KeymapBindingInput<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = BindingInput<TTarget, TEvent>;
|
|
391
|
-
export type KeymapCommandDefinition<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = CommandDefinition<TTarget, TEvent>;
|
|
392
|
-
export type KeymapCommandRecord = CommandRecord;
|
|
393
|
-
export type KeymapCommandEntry<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = CommandEntry<TTarget, TEvent>;
|
|
394
431
|
export interface RuntimeMatcher {
|
|
395
432
|
source: string;
|
|
396
433
|
match: () => boolean;
|
|
@@ -419,7 +456,6 @@ export interface RuntimeMatchable {
|
|
|
419
456
|
export interface CompiledBinding<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> extends ActiveBinding<TTarget, TEvent>, RuntimeMatchable {
|
|
420
457
|
run?: CommandHandler<TTarget, TEvent>;
|
|
421
458
|
sourceBinding: ParsedBindingInput<TTarget, TEvent>;
|
|
422
|
-
sourceScope: Scope;
|
|
423
459
|
sourceTarget?: TTarget;
|
|
424
460
|
sourceLayerOrder: number;
|
|
425
461
|
sourceBindingIndex: number;
|
|
@@ -466,8 +502,7 @@ export interface SequenceNode<TTarget extends object = object, TEvent extends Ke
|
|
|
466
502
|
export interface RegisteredLayer<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
467
503
|
order: number;
|
|
468
504
|
target?: TTarget;
|
|
469
|
-
|
|
470
|
-
scope: Scope;
|
|
505
|
+
targetMode?: TargetMode;
|
|
471
506
|
priority: number;
|
|
472
507
|
requires: readonly [name: string, value: unknown][];
|
|
473
508
|
matchers: readonly RuntimeMatcher[];
|
|
@@ -485,11 +520,6 @@ export interface RegisteredLayer<TTarget extends object = object, TEvent extends
|
|
|
485
520
|
hasTokenBindings: boolean;
|
|
486
521
|
root: SequenceNode<TTarget, TEvent>;
|
|
487
522
|
offTargetDestroy?: () => void;
|
|
488
|
-
bucket?: RegisteredLayerBucket<TTarget, TEvent>;
|
|
489
|
-
}
|
|
490
|
-
export interface RegisteredLayerBucket<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
491
|
-
focusLayers: RegisteredLayer<TTarget, TEvent>[];
|
|
492
|
-
focusWithinLayers: RegisteredLayer<TTarget, TEvent>[];
|
|
493
523
|
}
|
|
494
524
|
export interface PendingSequenceCapture<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
|
|
495
525
|
layer: RegisteredLayer<TTarget, TEvent>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|