@opentui/keymap 0.2.2 → 0.2.4
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 +56 -32
- package/chunks/index-frk6sdcd.js +409 -0
- package/chunks/index-frk6sdcd.js.map +14 -0
- package/package.json +17 -7
- package/src/addons/index.js +511 -4870
- package/src/addons/index.js.map +25 -0
- package/src/addons/opentui/edit-buffer-bindings.d.ts +6 -2
- package/src/addons/opentui/index.d.ts +2 -2
- package/src/addons/opentui/index.js +101 -5515
- package/src/addons/opentui/index.js.map +12 -0
- package/src/addons/universal/dead-bindings.d.ts +1 -1
- package/src/addons/universal/default-parser.d.ts +2 -2
- package/src/addons/universal/ex-commands.d.ts +11 -8
- package/src/addons/universal/index.d.ts +2 -1
- package/src/addons/universal/leader.d.ts +1 -1
- package/src/addons/universal/metadata.d.ts +2 -2
- package/src/addons/universal/mod-bindings.d.ts +6 -0
- package/src/addons/universal/unresolved-commands.d.ts +1 -1
- package/src/extras/binding-sections.d.ts +16 -7
- package/src/extras/command-bindings.d.ts +2 -2
- package/src/extras/formatting.d.ts +3 -0
- package/src/extras/graph.d.ts +9 -0
- package/src/extras/graph.js +373 -0
- package/src/extras/graph.js.map +11 -0
- package/src/extras/index.js +57 -4
- package/src/extras/index.js.map +12 -0
- package/src/extras/lib/graph-snapshot.d.ts +14 -0
- package/src/extras/lib/graph-types.d.ts +83 -0
- package/src/html.d.ts +3 -3
- package/src/html.js +47 -4992
- package/src/html.js.map +10 -0
- package/src/index.d.ts +3 -1
- package/src/index.js +2688 -2807
- package/src/index.js.map +34 -0
- package/src/keymap.d.ts +17 -33
- package/src/lib/emitter.d.ts +1 -2
- package/src/lib/registry.d.ts +2 -2
- package/src/lib/runtime-utils.d.ts +34 -0
- package/src/opentui.d.ts +1 -3
- package/src/opentui.js +40 -4994
- package/src/opentui.js.map +10 -0
- package/src/react/index.d.ts +5 -19
- package/src/react/index.js +3 -0
- package/src/react/index.js.map +10 -0
- package/src/runtime-modules.d.ts +2 -0
- package/src/runtime-modules.js +5 -0
- package/src/runtime-modules.js.map +10 -0
- package/src/services/activation.d.ts +7 -33
- package/src/services/active-key-cache.d.ts +29 -0
- package/src/services/command-catalog.d.ts +27 -52
- package/src/services/command-executor.d.ts +6 -12
- package/src/services/compiler.d.ts +4 -12
- package/src/services/conditions.d.ts +4 -16
- package/src/services/dispatch-decisions.d.ts +21 -0
- package/src/services/dispatch-patterns.d.ts +5 -0
- package/src/services/dispatch.d.ts +6 -42
- package/src/services/environment.d.ts +6 -24
- package/src/services/extension-context.d.ts +16 -0
- package/src/services/layer-diagnostics.d.ts +10 -0
- package/src/services/layers.d.ts +15 -24
- package/src/services/notify.d.ts +6 -8
- package/src/services/pending-sequence.d.ts +4 -0
- package/src/services/primitives/active-layers.d.ts +2 -3
- package/src/services/primitives/bindings.d.ts +4 -0
- package/src/services/primitives/field-invariants.d.ts +16 -1
- package/src/services/primitives/pending-captures.d.ts +5 -0
- package/src/services/runtime-view.d.ts +5 -0
- package/src/services/runtime.d.ts +2 -7
- package/src/services/sequence-index.d.ts +24 -0
- package/src/services/state.d.ts +46 -92
- package/src/solid/index.d.ts +5 -19
- package/src/solid/index.js +3 -0
- package/src/solid/index.js.map +10 -0
- package/src/testing/index.d.ts +90 -0
- package/src/testing/index.js +276 -0
- package/src/testing/index.js.map +10 -0
- package/src/types.d.ts +180 -128
- package/src/services/primitives/binding-inputs.d.ts +0 -4
package/src/services/layers.d.ts
CHANGED
|
@@ -2,41 +2,32 @@ import type { CompilerService } from "./compiler.js";
|
|
|
2
2
|
import type { CommandCatalogService } from "./command-catalog.js";
|
|
3
3
|
import type { ConditionService } from "./conditions.js";
|
|
4
4
|
import type { ActivationService } from "./activation.js";
|
|
5
|
-
import type { KeymapEvent, KeymapHost, Layer,
|
|
5
|
+
import type { Binding, BindingState, KeymapEvent, KeymapHost, Layer, ResolvedKeyToken, CommandState } from "../types.js";
|
|
6
6
|
import type { State } from "./state.js";
|
|
7
7
|
import type { NotificationService } from "./notify.js";
|
|
8
8
|
interface LayersOptions<TTarget extends object, TEvent extends KeymapEvent> {
|
|
9
9
|
compiler: CompilerService<TTarget, TEvent>;
|
|
10
10
|
commands: CommandCatalogService<TTarget, TEvent>;
|
|
11
11
|
host: KeymapHost<TTarget, TEvent>;
|
|
12
|
+
diagnostics?: LayerDiagnostics<TTarget, TEvent>;
|
|
12
13
|
warnUnknownField: (kind: "binding" | "layer", fieldName: string) => void;
|
|
13
14
|
}
|
|
14
|
-
export
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
export interface AnalyzeLayerOptions<TTarget extends object, TEvent extends KeymapEvent> {
|
|
16
|
+
target?: TTarget;
|
|
17
|
+
order: number;
|
|
18
|
+
commands: readonly CommandState<TTarget, TEvent>[];
|
|
19
|
+
sourceBindings: readonly Binding<TTarget, TEvent>[];
|
|
20
|
+
bindings: readonly BindingState<TTarget, TEvent>[];
|
|
21
|
+
hasTokenBindings: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface LayerDiagnostics<TTarget extends object, TEvent extends KeymapEvent> {
|
|
24
|
+
analyzeLayer(options: AnalyzeLayerOptions<TTarget, TEvent>): void;
|
|
25
|
+
}
|
|
26
|
+
export interface LayerService<TTarget extends object, TEvent extends KeymapEvent> {
|
|
21
27
|
registerLayer(layer: Layer<TTarget, TEvent>): () => void;
|
|
22
28
|
applyTokenState(nextTokens: Map<string, ResolvedKeyToken>): void;
|
|
23
29
|
recompileBindings(): void;
|
|
24
|
-
prependLayerAnalyzer(analyzer: LayerAnalyzer<TTarget, TEvent>): () => void;
|
|
25
|
-
appendLayerAnalyzer(analyzer: LayerAnalyzer<TTarget, TEvent>): () => void;
|
|
26
|
-
clearLayerAnalyzers(): void;
|
|
27
30
|
cleanup(): void;
|
|
28
|
-
private normalizeTargetMode;
|
|
29
|
-
private applyLayerBindingsTransformers;
|
|
30
|
-
private runLayerAnalyzers;
|
|
31
|
-
private compileLayerRuntimeState;
|
|
32
|
-
private compileLayerBindings;
|
|
33
|
-
private applyCompiledBindings;
|
|
34
|
-
private indexLayer;
|
|
35
|
-
private removeLayerFromIndex;
|
|
36
|
-
private unregisterLayer;
|
|
37
|
-
private connectRuntimeMatchable;
|
|
38
|
-
private disconnectRuntimeMatchable;
|
|
39
|
-
private attachReactiveMatchers;
|
|
40
|
-
private detachReactiveMatchers;
|
|
41
31
|
}
|
|
32
|
+
export declare function createLayerService<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>, notify: NotificationService<TTarget, TEvent>, conditions: ConditionService<TTarget, TEvent>, activation: ActivationService<TTarget, TEvent>, options: LayersOptions<TTarget, TEvent>): LayerService<TTarget, TEvent>;
|
|
42
33
|
export {};
|
package/src/services/notify.d.ts
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import type { Events, HookName, Hooks, KeymapEvent } from "../types.js";
|
|
2
|
+
import type { RuntimeEmitter } from "../lib/runtime-utils.js";
|
|
2
3
|
import type { State } from "./state.js";
|
|
3
|
-
import { Emitter } from "../lib/emitter.js";
|
|
4
4
|
type DiagnosticEvents<TTarget extends object, TEvent extends KeymapEvent> = Pick<Events<TTarget, TEvent>, "warning" | "error">;
|
|
5
5
|
export declare const MAX_STATE_CHANGE_FLUSH_ITERATIONS = 1000;
|
|
6
|
-
export
|
|
7
|
-
private readonly state;
|
|
8
|
-
private readonly events;
|
|
9
|
-
private readonly hooks;
|
|
10
|
-
constructor(state: State<TTarget, TEvent>, events: Emitter<DiagnosticEvents<TTarget, TEvent>>, hooks: Emitter<Hooks<TTarget, TEvent>>);
|
|
6
|
+
export interface NotificationService<TTarget extends object, TEvent extends KeymapEvent> {
|
|
11
7
|
runWithStateChangeBatch<T>(fn: () => T): T;
|
|
12
|
-
queueStateChange(
|
|
8
|
+
queueStateChange(options?: {
|
|
9
|
+
invalidateCaches?: boolean;
|
|
10
|
+
}): void;
|
|
13
11
|
emitWarning(code: string, warning: unknown, message: string): void;
|
|
14
12
|
emitError(code: string, error: unknown, message: string): void;
|
|
15
13
|
reportListenerError(name: HookName, error: unknown): void;
|
|
16
14
|
warnOnce(key: string, code: string, warning: unknown, message: string): void;
|
|
17
|
-
private flushStateChange;
|
|
18
15
|
}
|
|
16
|
+
export declare function createNotificationService<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>, events: RuntimeEmitter<DiagnosticEvents<TTarget, TEvent>>, hooks: RuntimeEmitter<Hooks<TTarget, TEvent>>): NotificationService<TTarget, TEvent>;
|
|
19
17
|
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { KeymapEvent, KeySequencePart, PendingSequenceCapture, PendingSequenceState } from "../types.js";
|
|
2
|
+
export declare function isSamePendingSequence<TTarget extends object, TEvent extends KeymapEvent>(current: PendingSequenceState<TTarget, TEvent> | null, next: PendingSequenceState<TTarget, TEvent> | null): boolean;
|
|
3
|
+
export declare function popCapture<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>): PendingSequenceCapture<TTarget, TEvent> | undefined;
|
|
4
|
+
export declare function collectSequencePartsFromPending<TTarget extends object, TEvent extends KeymapEvent>(pending: PendingSequenceState<TTarget, TEvent>): KeySequencePart[];
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { KeymapEvent, KeymapHost, RegisteredLayer } from "../../types.js";
|
|
2
|
-
import type { LayersState } from "../state.js";
|
|
3
2
|
export declare function getFocusedTargetIfAvailable<TTarget extends object, TEvent extends KeymapEvent>(host: KeymapHost<TTarget, TEvent>): TTarget | null;
|
|
4
3
|
export declare function forEachActivationTarget<TTarget extends object, TEvent extends KeymapEvent>(host: KeymapHost<TTarget, TEvent>, focused: TTarget | null, visit: (target: TTarget, isFocusedTarget: boolean) => boolean | void): void;
|
|
5
4
|
export declare function getActivationPath<TTarget extends object, TEvent extends KeymapEvent>(host: KeymapHost<TTarget, TEvent>, focused: TTarget | null): Set<TTarget>;
|
|
6
|
-
export declare function getActiveLayersForFocused<TTarget extends object, TEvent extends KeymapEvent>(
|
|
7
|
-
export declare function
|
|
5
|
+
export declare function getActiveLayersForFocused<TTarget extends object, TEvent extends KeymapEvent>(layers: readonly RegisteredLayer<TTarget, TEvent>[] | ReadonlySet<RegisteredLayer<TTarget, TEvent>>, host: KeymapHost<TTarget, TEvent>, focused: TTarget | null): readonly RegisteredLayer<TTarget, TEvent>[];
|
|
6
|
+
export declare function getSortedLayers<TTarget extends object, TEvent extends KeymapEvent>(layers: ReadonlySet<RegisteredLayer<TTarget, TEvent>>): RegisteredLayer<TTarget, TEvent>[];
|
|
8
7
|
export declare function isLayerActiveForFocused<TTarget extends object, TEvent extends KeymapEvent>(host: KeymapHost<TTarget, TEvent>, layer: RegisteredLayer<TTarget, TEvent>, focused: TTarget | null, activationPath?: ReadonlySet<TTarget>): boolean;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Binding, BindingsValidationResult, Bindings, KeymapEvent, ParsedBinding } from "../../types.js";
|
|
2
|
+
export declare function validateBindings(bindings: unknown): BindingsValidationResult;
|
|
3
|
+
export declare function snapshotBindings<TTarget extends object, TEvent extends KeymapEvent>(bindings: Bindings<TTarget, TEvent>): Binding<TTarget, TEvent>[];
|
|
4
|
+
export declare function snapshotParsedBinding<TTarget extends object, TEvent extends KeymapEvent>(binding: ParsedBinding<TTarget, TEvent>): ParsedBinding<TTarget, TEvent>;
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
-
import type { Attributes, EventData } from "../../types.js";
|
|
1
|
+
import type { Attributes, BindingFieldContext, CommandFieldContext, EventData, KeymapEvent, LayerFieldContext, RuntimeMatcher } from "../../types.js";
|
|
2
|
+
import type { ConditionService } from "../conditions.js";
|
|
2
3
|
export declare function mergeRequirement(target: EventData, name: string, value: unknown, source: string): void;
|
|
3
4
|
export declare function mergeAttribute(target: Attributes, name: string, value: unknown, source: string): void;
|
|
5
|
+
interface FieldCompilerContextOptions<TTarget extends object, TEvent extends KeymapEvent> {
|
|
6
|
+
fieldName: string;
|
|
7
|
+
conditions: ConditionService<TTarget, TEvent>;
|
|
8
|
+
requirements: EventData;
|
|
9
|
+
matchers: RuntimeMatcher[];
|
|
10
|
+
attrs?: Attributes;
|
|
11
|
+
}
|
|
12
|
+
export declare function createFieldCompilerContext<TTarget extends object, TEvent extends KeymapEvent>(options: FieldCompilerContextOptions<TTarget, TEvent> & {
|
|
13
|
+
attrs: Attributes;
|
|
14
|
+
}): BindingFieldContext & CommandFieldContext & LayerFieldContext;
|
|
15
|
+
export declare function createFieldCompilerContext<TTarget extends object, TEvent extends KeymapEvent>(options: FieldCompilerContextOptions<TTarget, TEvent> & {
|
|
16
|
+
attrs?: undefined;
|
|
17
|
+
}): LayerFieldContext;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { KeymapEvent, PendingSequenceCapture, ResolvedSequencePattern } from "../../types.js";
|
|
2
|
+
export declare function patternCaptureCount<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>): number;
|
|
3
|
+
export declare function captureHasMinimum<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>, patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>, missingPatternResult?: boolean): boolean;
|
|
4
|
+
export declare function captureHasContinuations<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>, patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>, missingPatternMinimum?: boolean): boolean;
|
|
5
|
+
export declare function captureIsExact<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>, patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>): boolean;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ConditionService } from "./conditions.js";
|
|
2
|
+
import type { ActiveCommandView, CommandView, State } from "./state.js";
|
|
3
|
+
import type { KeymapEvent, KeymapHost } from "../types.js";
|
|
4
|
+
export declare function getRegisteredCommandView<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>): CommandView<TTarget, TEvent>;
|
|
5
|
+
export declare function getActiveCommandView<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>, host: KeymapHost<TTarget, TEvent>, conditions: ConditionService<TTarget, TEvent>, focused: TTarget | null): ActiveCommandView<TTarget, TEvent>;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import type { EventData, KeymapEvent } from "../types.js";
|
|
2
2
|
import type { ActivationService } from "./activation.js";
|
|
3
|
-
import type { ConditionService } from "./conditions.js";
|
|
4
3
|
import type { NotificationService } from "./notify.js";
|
|
5
4
|
import type { State } from "./state.js";
|
|
6
|
-
export
|
|
7
|
-
private readonly state;
|
|
8
|
-
private readonly notify;
|
|
9
|
-
private readonly conditions;
|
|
10
|
-
private readonly activation;
|
|
11
|
-
constructor(state: State<TTarget, TEvent>, notify: NotificationService<TTarget, TEvent>, conditions: ConditionService<TTarget, TEvent>, activation: ActivationService<TTarget, TEvent>);
|
|
5
|
+
export interface RuntimeService<TTarget extends object, TEvent extends KeymapEvent> {
|
|
12
6
|
getData(name: string): unknown;
|
|
13
7
|
setData(name: string, value: unknown): void;
|
|
14
8
|
getReadonlyData(): Readonly<EventData>;
|
|
15
9
|
}
|
|
10
|
+
export declare function createRuntimeService<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>, notify: NotificationService<TTarget, TEvent>, activation: ActivationService<TTarget, TEvent>): RuntimeService<TTarget, TEvent>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { BindingState, KeymapEvent, KeySequencePart, KeyMatch, PendingSequenceCapture, PendingSequencePatternCapture, RegisteredLayer, ResolvedSequencePattern, SequenceNode, SequencePatternMatch } from "../types.js";
|
|
2
|
+
export interface SequenceActiveOption<TTarget extends object, TEvent extends KeymapEvent> {
|
|
3
|
+
part: KeySequencePart;
|
|
4
|
+
binding: BindingState<TTarget, TEvent>;
|
|
5
|
+
index: number;
|
|
6
|
+
exact: boolean;
|
|
7
|
+
continues: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare function createSequenceNode<TTarget extends object, TEvent extends KeymapEvent>(parent: SequenceNode<TTarget, TEvent> | null, stroke: KeySequencePart["stroke"] | null, match: KeySequencePart["match"] | null, pattern?: ResolvedSequencePattern<TEvent>): SequenceNode<TTarget, TEvent>;
|
|
10
|
+
export declare function buildSequenceTree<TTarget extends object, TEvent extends KeymapEvent>(bindings: readonly BindingState<TTarget, TEvent>[], patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>): SequenceNode<TTarget, TEvent>;
|
|
11
|
+
export declare function getCaptureNode<TTarget extends object, TEvent extends KeymapEvent>(root: SequenceNode<TTarget, TEvent>, capture: import("../types.js").PendingSequenceCapture<TTarget, TEvent>): SequenceNode<TTarget, TEvent> | undefined;
|
|
12
|
+
export declare function getNodeSequence<TTarget extends object, TEvent extends KeymapEvent>(node: SequenceNode<TTarget, TEvent>): KeySequencePart[];
|
|
13
|
+
export declare function getNodePresentation<TTarget extends object, TEvent extends KeymapEvent>(node: SequenceNode<TTarget, TEvent>): {
|
|
14
|
+
display: string;
|
|
15
|
+
tokenName?: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function firstNodeForMatch<TTarget extends object, TEvent extends KeymapEvent>(root: SequenceNode<TTarget, TEvent>, match: KeyMatch): SequenceNode<TTarget, TEvent> | undefined;
|
|
18
|
+
export declare function childNodes<TTarget extends object, TEvent extends KeymapEvent>(node: SequenceNode<TTarget, TEvent>): SequenceNode<TTarget, TEvent>[];
|
|
19
|
+
export declare function activeOptionsForBindings<TTarget extends object, TEvent extends KeymapEvent>(bindings: readonly BindingState<TTarget, TEvent>[]): SequenceActiveOption<TTarget, TEvent>[];
|
|
20
|
+
export declare function activeOptionsForCaptures<TTarget extends object, TEvent extends KeymapEvent>(captures: readonly PendingSequenceCapture<TTarget, TEvent>[], patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>): SequenceActiveOption<TTarget, TEvent>[];
|
|
21
|
+
export declare function capturePriority<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>, matchKeys: readonly KeyMatch[]): number;
|
|
22
|
+
export declare function advanceSequenceBinding<TTarget extends object, TEvent extends KeymapEvent>(layer: RegisteredLayer<TTarget, TEvent>, binding: BindingState<TTarget, TEvent>, index: number, parts: readonly KeySequencePart[], patterns: readonly PendingSequencePatternCapture[] | undefined, matchKeys: readonly KeyMatch[], event: TEvent, matchPattern: (patternName: string, event: TEvent) => SequencePatternMatch | undefined, createPatternPart: (event: TEvent, patternName: string, match: SequencePatternMatch) => KeySequencePart): PendingSequenceCapture<TTarget, TEvent> | undefined;
|
|
23
|
+
export declare function advanceSequenceCapture<TTarget extends object, TEvent extends KeymapEvent>(capture: PendingSequenceCapture<TTarget, TEvent>, matchKeys: readonly KeyMatch[], event: TEvent, patterns: ReadonlyMap<string, ResolvedSequencePattern<TEvent>>, matchPattern: (patternName: string, event: TEvent) => SequencePatternMatch | undefined, createPatternPart: (event: TEvent, patternName: string, match: SequencePatternMatch) => KeySequencePart): PendingSequenceCapture<TTarget, TEvent> | undefined;
|
|
24
|
+
export declare function collectRootSequenceCaptures<TTarget extends object, TEvent extends KeymapEvent>(layer: RegisteredLayer<TTarget, TEvent>, matchKeys: readonly KeyMatch[], event: TEvent, matchPattern: (patternName: string, event: TEvent) => SequencePatternMatch | undefined, createPatternPart: (event: TEvent, patternName: string, match: SequencePatternMatch) => KeySequencePart): PendingSequenceCapture<TTarget, TEvent>[];
|
package/src/services/state.d.ts
CHANGED
|
@@ -1,116 +1,70 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
3
|
-
export interface CoreState {
|
|
4
|
-
order: number;
|
|
5
|
-
}
|
|
6
|
-
export interface EnvironmentState<TTarget extends object, TEvent extends KeymapEvent> {
|
|
7
|
-
tokens: Map<string, import("../types.js").ResolvedKeyToken>;
|
|
8
|
-
layerFields: Map<string, LayerFieldCompiler>;
|
|
9
|
-
layerBindingsTransformers: OrderedRegistry<LayerBindingsTransformer<TTarget, TEvent>>;
|
|
10
|
-
bindingExpanders: OrderedRegistry<BindingExpander>;
|
|
11
|
-
bindingParsers: OrderedRegistry<BindingParser>;
|
|
12
|
-
bindingTransformers: OrderedRegistry<BindingTransformer<TTarget, TEvent>>;
|
|
13
|
-
bindingFields: Map<string, BindingFieldCompiler>;
|
|
14
|
-
commandFields: Map<string, CommandFieldCompiler>;
|
|
15
|
-
}
|
|
16
|
-
export interface DispatchState<TTarget extends object, TEvent extends KeymapEvent> {
|
|
17
|
-
eventMatchResolvers: OrderedRegistry<EventMatchResolver<TEvent>>;
|
|
18
|
-
disambiguationResolvers: OrderedRegistry<KeyDisambiguationResolver<TTarget, TEvent>>;
|
|
19
|
-
keyHooks: PriorityRegistry<(ctx: KeyInputContext<TEvent>) => void, {
|
|
20
|
-
priority: number;
|
|
21
|
-
release: boolean;
|
|
22
|
-
}>;
|
|
23
|
-
rawHooks: PriorityRegistry<(ctx: RawInputContext) => void, {
|
|
24
|
-
priority: number;
|
|
25
|
-
}>;
|
|
26
|
-
}
|
|
27
|
-
export interface LayersState<TTarget extends object, TEvent extends KeymapEvent> {
|
|
28
|
-
layers: Set<RegisteredLayer<TTarget, TEvent>>;
|
|
29
|
-
sortedLayers: RegisteredLayer<TTarget, TEvent>[];
|
|
30
|
-
activeLayersVersion: number;
|
|
31
|
-
activeLayersCacheVersion: number;
|
|
32
|
-
activeLayersCacheFocused: TTarget | null | undefined;
|
|
33
|
-
activeLayersCache: readonly RegisteredLayer<TTarget, TEvent>[];
|
|
34
|
-
layersWithConditions: number;
|
|
35
|
-
layersWithCommands: number;
|
|
36
|
-
layerAnalyzers: OrderedRegistry<LayerAnalyzer<TTarget, TEvent>>;
|
|
37
|
-
}
|
|
1
|
+
import type { Attributes, BindingExpander, BindingFieldCompiler, LayerBindingsTransformer, BindingParser, BindingTransformer, Command, CommandFieldCompiler, CommandTransformer, CommandResolver, EventData, KeyDisambiguationResolver, EventMatchResolver, KeyAfterInputContext, KeyInputContext, KeymapEvent, LayerFieldCompiler, PendingSequenceState, RawInputContext, ResolvedSequencePattern, CommandState, RegisteredLayer } from "../types.js";
|
|
2
|
+
import { type RuntimeOrderedRegistry, type RuntimePriorityRegistry } from "../lib/runtime-utils.js";
|
|
38
3
|
export interface LayerCommandEntry<TTarget extends object, TEvent extends KeymapEvent> {
|
|
39
4
|
layer: RegisteredLayer<TTarget, TEvent>;
|
|
40
|
-
|
|
5
|
+
commandState: CommandState<TTarget, TEvent>;
|
|
41
6
|
}
|
|
42
7
|
export interface ResolvedCommandEntry<TTarget extends object, TEvent extends KeymapEvent> {
|
|
43
8
|
target?: TTarget;
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
resolvedWithRecordChains: Map<string, readonly ResolvedCommandEntry<TTarget, TEvent>[]>;
|
|
49
|
-
fallbackWithoutRecord: Map<string, ResolvedBindingCommand<TTarget, TEvent> | null>;
|
|
50
|
-
fallbackWithRecord: Map<string, ResolvedBindingCommand<TTarget, TEvent> | null>;
|
|
51
|
-
fallbackWithoutRecordErrors: Set<string>;
|
|
52
|
-
fallbackWithRecordErrors: Set<string>;
|
|
9
|
+
command: Command<TTarget, TEvent>;
|
|
10
|
+
attrs?: Readonly<Attributes>;
|
|
11
|
+
input?: string;
|
|
12
|
+
payload?: unknown;
|
|
53
13
|
}
|
|
54
|
-
export interface ActiveCommandView<TTarget extends object, TEvent extends KeymapEvent>
|
|
55
|
-
|
|
14
|
+
export interface ActiveCommandView<TTarget extends object, TEvent extends KeymapEvent> {
|
|
15
|
+
layers: readonly RegisteredLayer<TTarget, TEvent>[];
|
|
56
16
|
entries: readonly LayerCommandEntry<TTarget, TEvent>[];
|
|
57
17
|
reachable: readonly LayerCommandEntry<TTarget, TEvent>[];
|
|
58
18
|
reachableByName: ReadonlyMap<string, LayerCommandEntry<TTarget, TEvent>>;
|
|
59
19
|
chainsByName: ReadonlyMap<string, readonly LayerCommandEntry<TTarget, TEvent>[]>;
|
|
60
20
|
}
|
|
61
|
-
export interface
|
|
21
|
+
export interface CommandView<TTarget extends object, TEvent extends KeymapEvent> {
|
|
62
22
|
entries: readonly LayerCommandEntry<TTarget, TEvent>[];
|
|
63
23
|
chainsByName: ReadonlyMap<string, readonly LayerCommandEntry<TTarget, TEvent>[]>;
|
|
64
24
|
}
|
|
65
|
-
export interface
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
25
|
+
export interface State<TTarget extends object, TEvent extends KeymapEvent> {
|
|
26
|
+
order: number;
|
|
27
|
+
tokens: Map<string, import("../types.js").ResolvedKeyToken>;
|
|
28
|
+
patterns: Map<string, ResolvedSequencePattern<TEvent>>;
|
|
29
|
+
layerFields: Map<string, LayerFieldCompiler>;
|
|
30
|
+
layerBindingsTransformers: RuntimeOrderedRegistry<LayerBindingsTransformer<TTarget, TEvent>>;
|
|
31
|
+
bindingExpanders: RuntimeOrderedRegistry<BindingExpander>;
|
|
32
|
+
bindingParsers: RuntimeOrderedRegistry<BindingParser>;
|
|
33
|
+
bindingTransformers: RuntimeOrderedRegistry<BindingTransformer<TTarget, TEvent>>;
|
|
34
|
+
bindingFields: Map<string, BindingFieldCompiler>;
|
|
35
|
+
commandTransformers: RuntimeOrderedRegistry<CommandTransformer<TTarget, TEvent>>;
|
|
36
|
+
commandFields: Map<string, CommandFieldCompiler>;
|
|
37
|
+
eventMatchResolvers: RuntimeOrderedRegistry<EventMatchResolver<TEvent>>;
|
|
38
|
+
disambiguationResolvers: RuntimeOrderedRegistry<KeyDisambiguationResolver<TTarget, TEvent>>;
|
|
39
|
+
keyHooks: RuntimePriorityRegistry<(ctx: KeyInputContext<TEvent>) => void, {
|
|
40
|
+
priority: number;
|
|
41
|
+
release: boolean;
|
|
42
|
+
}>;
|
|
43
|
+
keyAfterHooks: RuntimePriorityRegistry<(ctx: KeyAfterInputContext<TTarget, TEvent>) => void, {
|
|
44
|
+
priority: number;
|
|
45
|
+
release: boolean;
|
|
46
|
+
}>;
|
|
47
|
+
rawHooks: RuntimePriorityRegistry<(ctx: RawInputContext) => void, {
|
|
48
|
+
priority: number;
|
|
49
|
+
}>;
|
|
50
|
+
layers: Set<RegisteredLayer<TTarget, TEvent>>;
|
|
51
|
+
sortedLayers: RegisteredLayer<TTarget, TEvent>[];
|
|
52
|
+
activeLayersCacheVersion: number;
|
|
53
|
+
activeLayersCacheFocused: TTarget | null | undefined;
|
|
54
|
+
activeLayersCache: RegisteredLayer<TTarget, TEvent>[];
|
|
55
|
+
activeKeyCacheBlockers: number;
|
|
56
|
+
activeCommandViewCacheBlockers: number;
|
|
57
|
+
commandResolvers: RuntimeOrderedRegistry<CommandResolver<TTarget, TEvent>>;
|
|
58
|
+
pending: PendingSequenceState<TTarget, TEvent> | null;
|
|
93
59
|
data: EventData;
|
|
94
60
|
dataVersion: number;
|
|
95
61
|
readonlyDataVersion: number;
|
|
96
62
|
readonlyData: Readonly<EventData>;
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
derivedStateVersion: number;
|
|
63
|
+
cacheVersion: number;
|
|
64
|
+
derivedVersion: number;
|
|
100
65
|
stateChangeDepth: number;
|
|
101
66
|
stateChangePending: boolean;
|
|
102
67
|
flushingStateChange: boolean;
|
|
103
68
|
usedWarningKeys: Set<string>;
|
|
104
69
|
}
|
|
105
|
-
export interface State<TTarget extends object, TEvent extends KeymapEvent> {
|
|
106
|
-
core: CoreState;
|
|
107
|
-
environment: EnvironmentState<TTarget, TEvent>;
|
|
108
|
-
dispatch: DispatchState<TTarget, TEvent>;
|
|
109
|
-
layers: LayersState<TTarget, TEvent>;
|
|
110
|
-
commands: CommandsState<TTarget, TEvent>;
|
|
111
|
-
projection: ProjectionState<TTarget, TEvent>;
|
|
112
|
-
conditions: ConditionsState;
|
|
113
|
-
runtime: RuntimeState;
|
|
114
|
-
notify: NotifyState;
|
|
115
|
-
}
|
|
116
70
|
export declare function createKeymapState<TTarget extends object, TEvent extends KeymapEvent>(): State<TTarget, TEvent>;
|
package/src/solid/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { KeyEvent, Renderable } from "@opentui/core";
|
|
2
|
-
import { type Keymap, type
|
|
2
|
+
import { type Keymap, type Layer, type ReactiveMatcher, type TargetMode } from "../index.js";
|
|
3
3
|
import { type Accessor, type JSX } from "solid-js";
|
|
4
4
|
type OpenTuiKeymap = Keymap<Renderable, KeyEvent>;
|
|
5
5
|
export interface KeymapProviderProps {
|
|
@@ -8,31 +8,17 @@ export interface KeymapProviderProps {
|
|
|
8
8
|
}
|
|
9
9
|
export declare function KeymapProvider(props: KeymapProviderProps): JSX.Element;
|
|
10
10
|
export type UseBindingsTarget<TRenderable extends Renderable = Renderable> = () => TRenderable | null | undefined;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
export interface UseBindingsLayer<TRenderable extends Renderable = Renderable> extends Omit<Layer<Renderable, KeyEvent>, "target" | "targetMode"> {
|
|
12
|
+
target?: UseBindingsTarget<TRenderable>;
|
|
13
|
+
targetMode?: TargetMode;
|
|
14
14
|
}
|
|
15
|
-
export interface UseFocusBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
|
|
16
|
-
targetMode: "focus";
|
|
17
|
-
target: UseBindingsTarget<TRenderable>;
|
|
18
|
-
}
|
|
19
|
-
export interface UseFocusWithinBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
|
|
20
|
-
targetMode?: "focus-within";
|
|
21
|
-
target: UseBindingsTarget<TRenderable>;
|
|
22
|
-
}
|
|
23
|
-
export interface UseInferredFocusWithinBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
|
|
24
|
-
target: UseBindingsTarget<TRenderable>;
|
|
25
|
-
}
|
|
26
|
-
export type UseTargetBindingsLayer<TRenderable extends Renderable = Renderable> = UseFocusBindingsLayer<TRenderable> | UseFocusWithinBindingsLayer<TRenderable> | UseInferredFocusWithinBindingsLayer<TRenderable>;
|
|
27
|
-
export type UseBindingsLayer<TRenderable extends Renderable = Renderable> = UseGlobalBindingsLayer | UseTargetBindingsLayer<TRenderable>;
|
|
28
15
|
export declare const useKeymap: () => OpenTuiKeymap;
|
|
29
16
|
/**
|
|
30
17
|
* Reactively derives any view from the current keymap by re-running `selector`
|
|
31
18
|
* on each batched keymap state change.
|
|
32
19
|
*/
|
|
33
20
|
export declare const useKeymapSelector: <T>(selector: (keymap: OpenTuiKeymap) => T) => Accessor<T>;
|
|
34
|
-
export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () =>
|
|
35
|
-
export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () => UseTargetBindingsLayer<TRenderable>): void;
|
|
21
|
+
export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () => UseBindingsLayer<TRenderable>): void;
|
|
36
22
|
/**
|
|
37
23
|
* Adapts a Solid accessor to `ReactiveMatcher`. The subscription
|
|
38
24
|
* lives in a disposable reactive root so unregistering the layer tears it
|
package/src/solid/index.js
CHANGED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/solid/index.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { KeyEvent, Renderable } from \"@opentui/core\"\nimport { type Keymap, type Layer, type ReactiveMatcher, type TargetMode } from \"../index.js\"\nimport {\n createComponent,\n createContext,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n on,\n onCleanup,\n onMount,\n useContext,\n type Accessor,\n type JSX,\n} from \"solid-js\"\n\ntype OpenTuiKeymap = Keymap<Renderable, KeyEvent>\n\nconst KeymapContext = createContext<OpenTuiKeymap>()\n\nexport interface KeymapProviderProps {\n keymap: OpenTuiKeymap\n children: JSX.Element\n}\n\nexport function KeymapProvider(props: KeymapProviderProps): JSX.Element {\n return createComponent(KeymapContext.Provider, {\n get value() {\n return props.keymap\n },\n get children() {\n return props.children\n },\n })\n}\n\nexport type UseBindingsTarget<TRenderable extends Renderable = Renderable> = () => TRenderable | null | undefined\n\nexport interface UseBindingsLayer<TRenderable extends Renderable = Renderable> extends Omit<\n Layer<Renderable, KeyEvent>,\n \"target\" | \"targetMode\"\n> {\n target?: UseBindingsTarget<TRenderable>\n targetMode?: TargetMode\n}\n\nfunction resolveBindingsTarget(target: UseBindingsTarget | undefined): Renderable | undefined {\n return target?.() ?? undefined\n}\n\nexport const useKeymap = (): OpenTuiKeymap => {\n const keymap = useContext(KeymapContext)\n\n if (!keymap) {\n throw new Error(\"Keymap not found. Wrap the tree in <KeymapProvider>.\")\n }\n\n return keymap\n}\n\nfunction useKeymapStateVersion(keymap: OpenTuiKeymap): Accessor<number> {\n const [version, setVersion] = createSignal(0)\n let dispose: (() => void) | undefined\n\n onMount(() => {\n dispose = keymap.on(\"state\", () => {\n setVersion((value) => value + 1)\n })\n\n setVersion((value) => value + 1)\n })\n\n onCleanup(() => {\n dispose?.()\n })\n\n return version\n}\n\n/**\n * Reactively derives any view from the current keymap by re-running `selector`\n * on each batched keymap state change.\n */\nexport const useKeymapSelector = <T>(selector: (keymap: OpenTuiKeymap) => T): Accessor<T> => {\n const keymap = useKeymap()\n const version = useKeymapStateVersion(keymap)\n\n return createMemo((previous) => {\n version()\n try {\n return selector(keymap)\n } catch (error) {\n if (\n previous !== undefined &&\n error instanceof Error &&\n error.message === \"Cannot use a keymap after its host was destroyed\"\n ) {\n return previous\n }\n\n throw error\n }\n })\n}\n\nexport function useBindings<TRenderable extends Renderable = Renderable>(\n createLayer: () => UseBindingsLayer<TRenderable>,\n): void {\n const keymap = useKeymap()\n\n createEffect(() => {\n const layer = createLayer()\n const hasExplicitTarget = layer.target !== undefined\n const explicitTarget = resolveBindingsTarget(layer.target)\n const nextTargetMode: TargetMode | undefined = layer.targetMode ?? (hasExplicitTarget ? \"focus-within\" : undefined)\n\n const { target: _target, targetMode: _targetMode, ...baseLayer } = layer\n if (!nextTargetMode) {\n const dispose = keymap.registerLayer({\n ...baseLayer,\n })\n\n onCleanup(() => {\n dispose()\n })\n\n return\n }\n\n if (!hasExplicitTarget) {\n throw new Error(\"useBindings local bindings need a target accessor\")\n }\n\n if (!explicitTarget) {\n return\n }\n\n const dispose = keymap.registerLayer({\n ...baseLayer,\n target: explicitTarget,\n targetMode: nextTargetMode,\n })\n\n onCleanup(() => {\n dispose()\n })\n })\n}\n\n/**\n * Adapts a Solid accessor to `ReactiveMatcher`. The subscription\n * lives in a disposable reactive root so unregistering the layer tears it\n * down. Pass `predicate` when the accessor value is not already boolean.\n */\nexport function reactiveMatcherFromSignal<T>(\n accessor: Accessor<T>,\n predicate?: (value: T) => boolean,\n): ReactiveMatcher {\n return {\n get() {\n return predicate ? predicate(accessor()) : Boolean(accessor())\n },\n subscribe(onChange) {\n return createRoot((dispose) => {\n createEffect(on(accessor, () => onChange(), { defer: true }))\n return dispose\n })\n },\n }\n}\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "A624A2E448C2557164756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { Keymap } from "@opentui/keymap";
|
|
2
|
+
import type { ErrorEvent, HostMetadata, KeymapEvent, KeymapHost, WarningEvent } from "@opentui/keymap";
|
|
3
|
+
export type TestKeyModifierOptions = Partial<Pick<KeymapEvent, "ctrl" | "shift" | "meta" | "super" | "hyper">>;
|
|
4
|
+
export type TestHostMetadataOptions = Partial<Omit<HostMetadata, "modifiers">> & {
|
|
5
|
+
modifiers?: Partial<HostMetadata["modifiers"]>;
|
|
6
|
+
};
|
|
7
|
+
export interface CreateTestKeymapHostOptions {
|
|
8
|
+
metadata?: HostMetadata | TestHostMetadataOptions;
|
|
9
|
+
}
|
|
10
|
+
export interface CreateTestKeymapOptions extends CreateTestKeymapHostOptions {
|
|
11
|
+
defaultKeys?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export interface TestDiagnosticCapture {
|
|
14
|
+
readonly warnings: readonly string[];
|
|
15
|
+
readonly errors: readonly string[];
|
|
16
|
+
readonly warningEvents: readonly WarningEvent[];
|
|
17
|
+
readonly errorEvents: readonly ErrorEvent[];
|
|
18
|
+
takeWarnings(): {
|
|
19
|
+
warnings: string[];
|
|
20
|
+
warningEvents: WarningEvent[];
|
|
21
|
+
};
|
|
22
|
+
takeErrors(): {
|
|
23
|
+
errors: string[];
|
|
24
|
+
errorEvents: ErrorEvent[];
|
|
25
|
+
};
|
|
26
|
+
clear(): void;
|
|
27
|
+
dispose(): void;
|
|
28
|
+
}
|
|
29
|
+
export interface TestKeymapHarness {
|
|
30
|
+
keymap: Keymap<TestKeymapTarget, TestKeymapEvent>;
|
|
31
|
+
host: TestKeymapHost;
|
|
32
|
+
root: TestKeymapTarget;
|
|
33
|
+
diagnostics: TestDiagnosticCapture;
|
|
34
|
+
cleanup(): void;
|
|
35
|
+
}
|
|
36
|
+
export declare const DEFAULT_TEST_HOST_METADATA: HostMetadata;
|
|
37
|
+
export declare class TestKeymapTarget {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
parent: TestKeymapTarget | null;
|
|
40
|
+
isDestroyed: boolean;
|
|
41
|
+
constructor(id: string);
|
|
42
|
+
append(child: TestKeymapTarget): TestKeymapTarget;
|
|
43
|
+
}
|
|
44
|
+
export declare class TestKeymapEvent implements KeymapEvent {
|
|
45
|
+
readonly name: string;
|
|
46
|
+
readonly ctrl: boolean;
|
|
47
|
+
readonly shift: boolean;
|
|
48
|
+
readonly meta: boolean;
|
|
49
|
+
readonly super: boolean;
|
|
50
|
+
readonly hyper?: boolean;
|
|
51
|
+
propagationStopped: boolean;
|
|
52
|
+
defaultPrevented: boolean;
|
|
53
|
+
constructor(name: string, modifiers?: TestKeyModifierOptions);
|
|
54
|
+
preventDefault(): void;
|
|
55
|
+
stopPropagation(): void;
|
|
56
|
+
}
|
|
57
|
+
export declare class TestKeymapHost implements KeymapHost<TestKeymapTarget, TestKeymapEvent> {
|
|
58
|
+
readonly metadata: HostMetadata;
|
|
59
|
+
readonly rootTarget: TestKeymapTarget;
|
|
60
|
+
isDestroyed: boolean;
|
|
61
|
+
private focusedTarget;
|
|
62
|
+
private readonly keyPressListeners;
|
|
63
|
+
private readonly keyReleaseListeners;
|
|
64
|
+
private readonly focusListeners;
|
|
65
|
+
private readonly destroyListeners;
|
|
66
|
+
private readonly rawListeners;
|
|
67
|
+
private readonly targetDestroyListeners;
|
|
68
|
+
constructor(options?: CreateTestKeymapHostOptions);
|
|
69
|
+
createTarget(id: string): TestKeymapTarget;
|
|
70
|
+
getFocusedTarget(): TestKeymapTarget | null;
|
|
71
|
+
getParentTarget(target: TestKeymapTarget): TestKeymapTarget | null;
|
|
72
|
+
isTargetDestroyed(target: TestKeymapTarget): boolean;
|
|
73
|
+
onKeyPress(listener: (event: TestKeymapEvent) => void): () => void;
|
|
74
|
+
onKeyRelease(listener: (event: TestKeymapEvent) => void): () => void;
|
|
75
|
+
onFocusChange(listener: (target: TestKeymapTarget | null) => void): () => void;
|
|
76
|
+
onDestroy(listener: () => void): () => void;
|
|
77
|
+
onTargetDestroy(target: TestKeymapTarget, listener: () => void): () => void;
|
|
78
|
+
onRawInput(listener: (sequence: string) => boolean): () => void;
|
|
79
|
+
createCommandEvent(): TestKeymapEvent;
|
|
80
|
+
focus(target: TestKeymapTarget | null): void;
|
|
81
|
+
press(name: string, modifiers?: TestKeyModifierOptions): TestKeymapEvent;
|
|
82
|
+
release(name: string, modifiers?: TestKeyModifierOptions): TestKeymapEvent;
|
|
83
|
+
raw(sequence: string): boolean;
|
|
84
|
+
destroyTarget(target: TestKeymapTarget): void;
|
|
85
|
+
destroy(): void;
|
|
86
|
+
}
|
|
87
|
+
export declare function createTestHostMetadata(options?: HostMetadata | TestHostMetadataOptions): HostMetadata;
|
|
88
|
+
export declare function createTestKeymapHost(options?: CreateTestKeymapHostOptions): TestKeymapHost;
|
|
89
|
+
export declare function createTestKeymap(options?: CreateTestKeymapOptions): TestKeymapHarness;
|
|
90
|
+
export declare function captureKeymapDiagnostics(keymap: Keymap<any, any>): TestDiagnosticCapture;
|