@opentui/keymap 0.2.1 → 0.2.3
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 +64 -30
- package/chunks/index-frk6sdcd.js +409 -0
- package/chunks/index-frk6sdcd.js.map +14 -0
- package/package.json +43 -23
- package/src/addons/index.js +1130 -0
- 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 +467 -0
- package/src/addons/opentui/index.js.map +12 -0
- package/src/addons/universal/binding-overrides.d.ts +6 -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 +3 -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 +18 -0
- package/src/extras/command-bindings.d.ts +19 -0
- package/src/extras/formatting.d.ts +27 -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.d.ts +6 -0
- package/src/extras/index.js +239 -0
- 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 +297 -0
- package/src/html.js.map +10 -0
- package/src/index.d.ts +3 -1
- package/src/index.js +4492 -0
- package/src/index.js.map +34 -0
- package/src/keymap.d.ts +23 -35
- 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 +133 -0
- package/src/opentui.js.map +10 -0
- package/src/react/index.d.ts +5 -19
- package/{react → src/react}/index.js +3 -0
- package/src/react/index.js.map +10 -0
- package/src/runtime-modules.d.ts +20 -0
- package/src/runtime-modules.js +28 -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 +28 -45
- package/src/services/command-executor.d.ts +7 -13
- package/src/services/compiler.d.ts +6 -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 -21
- 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 -23
- 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/command-normalization.d.ts +3 -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 -91
- package/src/solid/index.d.ts +5 -19
- package/{solid → 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 +194 -126
- package/addons/index.js +0 -5240
- package/addons/opentui/index.js +0 -5632
- package/html.js +0 -5042
- package/index.js +0 -4411
- package/opentui.js +0 -4887
- package/src/services/primitives/binding-inputs.d.ts +0 -4
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Binding, KeyLike, KeymapEvent } from "../types.js";
|
|
2
|
+
export type BindingSectionItem<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = KeyLike | Binding<TTarget, TEvent>;
|
|
3
|
+
export type BindingValue<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = false | "none" | BindingSectionItem<TTarget, TEvent> | readonly BindingSectionItem<TTarget, TEvent>[];
|
|
4
|
+
export type BindingSectionConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<Record<string, BindingValue<TTarget, TEvent>>>;
|
|
5
|
+
export type BindingSectionsConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<Record<string, BindingSectionConfig<TTarget, TEvent>>>;
|
|
6
|
+
type LiteralStringKeys<T> = string extends Extract<keyof T, string> ? never : Extract<keyof T, string>;
|
|
7
|
+
export interface ResolvedBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent, TSection extends string = string> {
|
|
8
|
+
sections: Record<TSection, Binding<TTarget, TEvent>[]>;
|
|
9
|
+
get(section: string, cmd: string): readonly Binding<TTarget, TEvent>[] | undefined;
|
|
10
|
+
}
|
|
11
|
+
export interface ResolveBindingSectionsOptions<TSection extends string = string> {
|
|
12
|
+
sections?: readonly TSection[];
|
|
13
|
+
}
|
|
14
|
+
export declare function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent, const TConfig extends BindingSectionsConfig<TTarget, TEvent> = BindingSectionsConfig<TTarget, TEvent>, const TSection extends string = string>(config: TConfig, options: ResolveBindingSectionsOptions<TSection> & {
|
|
15
|
+
sections: readonly TSection[];
|
|
16
|
+
}): ResolvedBindingSections<TTarget, TEvent, TSection | LiteralStringKeys<TConfig>>;
|
|
17
|
+
export declare function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(config: BindingSectionsConfig<TTarget, TEvent>, options?: ResolveBindingSectionsOptions): ResolvedBindingSections<TTarget, TEvent>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Binding, KeyLike, KeymapEvent } from "../types.js";
|
|
2
|
+
export type CommandBindingMap = Record<string, KeyLike>;
|
|
3
|
+
export interface CommandBindingsOverrideWarning {
|
|
4
|
+
code: "command-binding-override";
|
|
5
|
+
command: string;
|
|
6
|
+
previousKey: KeyLike;
|
|
7
|
+
nextKey: KeyLike;
|
|
8
|
+
}
|
|
9
|
+
export interface CommandBindingsError {
|
|
10
|
+
code: "invalid-command-binding";
|
|
11
|
+
command: string;
|
|
12
|
+
value: unknown;
|
|
13
|
+
reason: Error;
|
|
14
|
+
}
|
|
15
|
+
export interface CommandBindingsOptions {
|
|
16
|
+
onWarning?: (warning: CommandBindingsOverrideWarning) => void;
|
|
17
|
+
onError?: (error: CommandBindingsError) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function commandBindings<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(bindings: Readonly<CommandBindingMap>, options?: CommandBindingsOptions): Binding<TTarget, TEvent>[];
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { KeySequencePart } from "../types.js";
|
|
2
|
+
export type KeyModifierName = "ctrl" | "shift" | "meta" | "super" | "hyper";
|
|
3
|
+
export interface KeySequenceFormatPart {
|
|
4
|
+
stroke: KeySequencePart["stroke"];
|
|
5
|
+
display: string;
|
|
6
|
+
match?: KeySequencePart["match"];
|
|
7
|
+
tokenName?: string;
|
|
8
|
+
patternName?: string;
|
|
9
|
+
}
|
|
10
|
+
export type TokenDisplayResolver = Readonly<Record<string, string>> | ((tokenName: string, part: KeySequenceFormatPart) => string | undefined);
|
|
11
|
+
export type PatternDisplayResolver = Readonly<Record<string, string>> | ((patternName: string, part: KeySequenceFormatPart) => string | undefined);
|
|
12
|
+
export interface FormatKeySequenceOptions {
|
|
13
|
+
tokenDisplay?: TokenDisplayResolver;
|
|
14
|
+
patternDisplay?: PatternDisplayResolver;
|
|
15
|
+
keyNameAliases?: Readonly<Record<string, string>>;
|
|
16
|
+
modifierAliases?: Partial<Record<KeyModifierName, string>>;
|
|
17
|
+
separator?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface FormatCommandBindingsOptions extends FormatKeySequenceOptions {
|
|
20
|
+
bindingSeparator?: string;
|
|
21
|
+
dedupe?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export interface SequenceBindingLike {
|
|
24
|
+
sequence: readonly KeySequenceFormatPart[];
|
|
25
|
+
}
|
|
26
|
+
export declare function formatKeySequence(parts: readonly KeySequenceFormatPart[] | undefined, options?: FormatKeySequenceOptions): string;
|
|
27
|
+
export declare function formatCommandBindings(bindings: readonly SequenceBindingLike[] | undefined, options?: FormatCommandBindingsOptions): string | undefined;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type KeymapExtensionProvider } from "../services/extension-context.js";
|
|
2
|
+
import type { KeymapEvent } from "../types.js";
|
|
3
|
+
import type { GraphSnapshot, GraphSnapshotOptions } from "./lib/graph-types.js";
|
|
4
|
+
export type { GraphBinding, GraphCommand, GraphInactiveReason, GraphLayer, GraphSequenceNode, GraphSnapshot, GraphSnapshotOptions, } from "./lib/graph-types.js";
|
|
5
|
+
export interface KeymapGraphExtra<TTarget extends object, TEvent extends KeymapEvent> {
|
|
6
|
+
getGraphSnapshot(options?: GraphSnapshotOptions<TTarget>): GraphSnapshot<TTarget, TEvent>;
|
|
7
|
+
}
|
|
8
|
+
export declare function getGraphSnapshot<TTarget extends object, TEvent extends KeymapEvent>(keymap: KeymapExtensionProvider<TTarget, TEvent>, options?: GraphSnapshotOptions<TTarget>): GraphSnapshot<TTarget, TEvent>;
|
|
9
|
+
export declare function createGraphExtra<TTarget extends object, TEvent extends KeymapEvent>(keymap: KeymapExtensionProvider<TTarget, TEvent>): KeymapGraphExtra<TTarget, TEvent>;
|
|
@@ -0,0 +1,373 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
KEYMAP_EXTENSION_CONTEXT,
|
|
4
|
+
childNodes,
|
|
5
|
+
cloneKeySequence,
|
|
6
|
+
cloneKeyStroke,
|
|
7
|
+
getActivationPath,
|
|
8
|
+
getCaptureNode,
|
|
9
|
+
getFocusedTargetIfAvailable,
|
|
10
|
+
getNodePresentation,
|
|
11
|
+
getNodeSequence,
|
|
12
|
+
getSortedLayers,
|
|
13
|
+
isLayerActiveForFocused
|
|
14
|
+
} from "../../chunks/index-frk6sdcd.js";
|
|
15
|
+
|
|
16
|
+
// src/extras/lib/graph-snapshot.ts
|
|
17
|
+
function hasOwnFocused(options) {
|
|
18
|
+
return !!options && Object.prototype.hasOwnProperty.call(options, "focused");
|
|
19
|
+
}
|
|
20
|
+
function layerId(layer) {
|
|
21
|
+
return `layer:${layer.order}`;
|
|
22
|
+
}
|
|
23
|
+
function bindingId(layer, index) {
|
|
24
|
+
return `binding:${layer.order}:${index}`;
|
|
25
|
+
}
|
|
26
|
+
function commandId(layer, index) {
|
|
27
|
+
return `command:${layer.order}:${index}`;
|
|
28
|
+
}
|
|
29
|
+
function nodeId(layer, index) {
|
|
30
|
+
return `node:${layer.order}:${index}`;
|
|
31
|
+
}
|
|
32
|
+
function getSequenceMatches(sequence) {
|
|
33
|
+
return sequence.map((part) => part.match);
|
|
34
|
+
}
|
|
35
|
+
function isPrefix(left, right) {
|
|
36
|
+
if (left.length > right.length) {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
for (let index = 0;index < left.length; index += 1) {
|
|
40
|
+
if (left[index] !== right[index]) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
function collectPendingNodes(pending, layerIds, nodeIds, roots) {
|
|
47
|
+
const pendingIds = new Set;
|
|
48
|
+
const pendingPathIds = new Set;
|
|
49
|
+
if (!pending) {
|
|
50
|
+
return { pending: pendingIds, pendingPath: pendingPathIds };
|
|
51
|
+
}
|
|
52
|
+
for (const capture of pending.captures) {
|
|
53
|
+
const layerGraphId = layerIds.get(capture.layer);
|
|
54
|
+
if (!layerGraphId) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
const root = roots.get(capture.layer);
|
|
58
|
+
if (!root) {
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
let current = getCaptureNode(root, capture) ?? null;
|
|
62
|
+
const capturedNodeId = current ? nodeIds.get(current) : undefined;
|
|
63
|
+
if (capturedNodeId) {
|
|
64
|
+
pendingIds.add(capturedNodeId);
|
|
65
|
+
}
|
|
66
|
+
while (current) {
|
|
67
|
+
const currentNodeId = nodeIds.get(current);
|
|
68
|
+
if (currentNodeId) {
|
|
69
|
+
pendingPathIds.add(currentNodeId);
|
|
70
|
+
}
|
|
71
|
+
current = current.parent;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return { pending: pendingIds, pendingPath: pendingPathIds };
|
|
75
|
+
}
|
|
76
|
+
function createGraphSnapshot(options) {
|
|
77
|
+
const { state, host, conditions, catalog, activation, snapshotOptions } = options;
|
|
78
|
+
const includeTargets = snapshotOptions?.includeTargets !== false;
|
|
79
|
+
const currentFocused = getFocusedTargetIfAvailable(host);
|
|
80
|
+
const focused = hasOwnFocused(snapshotOptions) ? snapshotOptions.focused ?? null : currentFocused;
|
|
81
|
+
const activeView = catalog.getActiveCommandView(focused);
|
|
82
|
+
const activeCommandStates = new Set(activeView.entries.map((entry) => entry.commandState));
|
|
83
|
+
const reachableCommandStates = new Set(activeView.reachable.map((entry) => entry.commandState));
|
|
84
|
+
const activationPath = getActivationPath(host, focused);
|
|
85
|
+
const sortedLayers = getSortedLayers(state.layers);
|
|
86
|
+
const layerStates = new Map;
|
|
87
|
+
const commandStates = new Map;
|
|
88
|
+
const bindingStates = new Map;
|
|
89
|
+
const commandIdsByCommand = new Map;
|
|
90
|
+
const commandIdsByName = new Map;
|
|
91
|
+
const nodeIds = new Map;
|
|
92
|
+
const layerIds = new Map;
|
|
93
|
+
const layerRoots = new Map;
|
|
94
|
+
const bindingNodeIds = new Map;
|
|
95
|
+
const sequenceNodes = [];
|
|
96
|
+
for (const layer of sortedLayers) {
|
|
97
|
+
layerRoots.set(layer, layer.root);
|
|
98
|
+
}
|
|
99
|
+
for (const layer of sortedLayers) {
|
|
100
|
+
const currentLayerId = layerId(layer);
|
|
101
|
+
const targetDestroyed = layer.target ? host.isTargetDestroyed(layer.target) : false;
|
|
102
|
+
const focusActive = isLayerActiveForFocused(host, layer, focused, activationPath);
|
|
103
|
+
const enabled = conditions.matchesConditions(layer);
|
|
104
|
+
const inactiveReasons = [];
|
|
105
|
+
if (targetDestroyed)
|
|
106
|
+
inactiveReasons.push("target-destroyed");
|
|
107
|
+
if (!focusActive)
|
|
108
|
+
inactiveReasons.push("focus");
|
|
109
|
+
if (!enabled)
|
|
110
|
+
inactiveReasons.push("layer-disabled");
|
|
111
|
+
layerIds.set(layer, currentLayerId);
|
|
112
|
+
layerStates.set(layer, {
|
|
113
|
+
layer,
|
|
114
|
+
id: currentLayerId,
|
|
115
|
+
focusActive,
|
|
116
|
+
enabled,
|
|
117
|
+
active: !targetDestroyed && focusActive && enabled,
|
|
118
|
+
inactiveReasons
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
for (const layer of sortedLayers) {
|
|
122
|
+
const currentLayerId = layerIds.get(layer);
|
|
123
|
+
for (const [index, command] of layer.commands.entries()) {
|
|
124
|
+
const currentCommandId = commandId(layer, index);
|
|
125
|
+
const idsByCommand = commandIdsByCommand.get(command.command);
|
|
126
|
+
if (idsByCommand) {
|
|
127
|
+
idsByCommand.push(currentCommandId);
|
|
128
|
+
} else {
|
|
129
|
+
commandIdsByCommand.set(command.command, [currentCommandId]);
|
|
130
|
+
}
|
|
131
|
+
const idsByName = commandIdsByName.get(command.command.name);
|
|
132
|
+
if (idsByName) {
|
|
133
|
+
idsByName.push(currentCommandId);
|
|
134
|
+
} else {
|
|
135
|
+
commandIdsByName.set(command.command.name, [currentCommandId]);
|
|
136
|
+
}
|
|
137
|
+
const layerState = layerStates.get(layer);
|
|
138
|
+
const enabled = conditions.matchesConditions(command);
|
|
139
|
+
const active = activeCommandStates.has(command);
|
|
140
|
+
const reachable = reachableCommandStates.has(command);
|
|
141
|
+
const inactiveReasons = [...layerState.inactiveReasons];
|
|
142
|
+
if (!enabled) {
|
|
143
|
+
inactiveReasons.push("command-disabled");
|
|
144
|
+
}
|
|
145
|
+
if (active && !reachable) {
|
|
146
|
+
inactiveReasons.push("shadowed");
|
|
147
|
+
}
|
|
148
|
+
commandStates.set(command, {
|
|
149
|
+
command,
|
|
150
|
+
id: currentCommandId,
|
|
151
|
+
layerState,
|
|
152
|
+
active,
|
|
153
|
+
reachable,
|
|
154
|
+
enabled,
|
|
155
|
+
inactiveReasons
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
let nextNodeIndex = 0;
|
|
159
|
+
const visitNode = (node, parentId) => {
|
|
160
|
+
const currentNodeId = nodeId(layer, nextNodeIndex);
|
|
161
|
+
nextNodeIndex += 1;
|
|
162
|
+
nodeIds.set(node, currentNodeId);
|
|
163
|
+
for (const binding of node.bindings) {
|
|
164
|
+
bindingNodeIds.set(binding, currentNodeId);
|
|
165
|
+
}
|
|
166
|
+
for (const child of childNodes(node)) {
|
|
167
|
+
visitNode(child, currentNodeId);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
const root = layerRoots.get(layer);
|
|
171
|
+
visitNode(root, null);
|
|
172
|
+
if (!nodeIds.has(root)) {
|
|
173
|
+
nodeIds.set(root, `${currentLayerId}:root`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const stoppedSequences = [];
|
|
177
|
+
for (const layer of sortedLayers) {
|
|
178
|
+
const layerState = layerStates.get(layer);
|
|
179
|
+
for (const [index, binding] of layer.bindings.entries()) {
|
|
180
|
+
const enabled = conditions.matchesConditions(binding);
|
|
181
|
+
const commandResolved = catalog.isBindingVisible(binding, focused, activeView);
|
|
182
|
+
const active = layerState.active && enabled && commandResolved;
|
|
183
|
+
const matches = getSequenceMatches(binding.sequence);
|
|
184
|
+
const shadowed = active && stoppedSequences.some((stop) => stop.event === binding.event && isPrefix(stop.matches, matches));
|
|
185
|
+
const inactiveReasons = [...layerState.inactiveReasons];
|
|
186
|
+
if (!enabled) {
|
|
187
|
+
inactiveReasons.push("binding-disabled");
|
|
188
|
+
}
|
|
189
|
+
if (!commandResolved) {
|
|
190
|
+
const unavailable = typeof binding.command === "string" ? catalog.getDispatchUnavailableCommandState(binding.command, focused, false) : undefined;
|
|
191
|
+
if (unavailable?.reason === "disabled") {
|
|
192
|
+
inactiveReasons.push("command-disabled");
|
|
193
|
+
} else if (unavailable?.reason === "inactive") {
|
|
194
|
+
inactiveReasons.push("command-inactive");
|
|
195
|
+
} else {
|
|
196
|
+
inactiveReasons.push("command-unresolved");
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
if (shadowed) {
|
|
200
|
+
inactiveReasons.push("shadowed");
|
|
201
|
+
}
|
|
202
|
+
const currentBindingState = {
|
|
203
|
+
binding,
|
|
204
|
+
id: bindingId(layer, index),
|
|
205
|
+
layerState,
|
|
206
|
+
commandIds: [],
|
|
207
|
+
enabled,
|
|
208
|
+
commandResolved,
|
|
209
|
+
active,
|
|
210
|
+
reachable: active && !shadowed,
|
|
211
|
+
shadowed,
|
|
212
|
+
inactiveReasons
|
|
213
|
+
};
|
|
214
|
+
bindingStates.set(binding, currentBindingState);
|
|
215
|
+
if (active && binding.command !== undefined && !binding.fallthrough) {
|
|
216
|
+
stoppedSequences.push({ event: binding.event, matches });
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
for (const state2 of bindingStates.values()) {
|
|
221
|
+
if (typeof state2.binding.command !== "string") {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
const ids = new Set(commandIdsByName.get(state2.binding.command) ?? []);
|
|
225
|
+
const chain = catalog.getResolvedCommandChain(state2.binding.command, focused).entries;
|
|
226
|
+
for (const entry of chain ?? []) {
|
|
227
|
+
for (const id of commandIdsByCommand.get(entry.command) ?? []) {
|
|
228
|
+
ids.add(id);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
state2.commandIds = [...ids];
|
|
232
|
+
}
|
|
233
|
+
const pending = focused === currentFocused ? activation.ensureValidPendingSequence() : undefined;
|
|
234
|
+
const pendingNodes = collectPendingNodes(pending ?? null, layerIds, nodeIds, layerRoots);
|
|
235
|
+
for (const layer of sortedLayers) {
|
|
236
|
+
const currentLayerId = layerIds.get(layer);
|
|
237
|
+
const visitNode = (node, parentId) => {
|
|
238
|
+
const currentNodeId = nodeIds.get(node);
|
|
239
|
+
const childIds = childNodes(node).map((child) => nodeIds.get(child)).filter(Boolean);
|
|
240
|
+
const bindingIds = node.bindings.map((binding) => bindingStates.get(binding)?.id).filter((id) => !!id);
|
|
241
|
+
const reachableBindingIds = node.reachableBindings.map((binding) => bindingStates.get(binding)?.id).filter((id) => !!id);
|
|
242
|
+
const sequence = getNodeSequence(node);
|
|
243
|
+
const presentation = getNodePresentation(node);
|
|
244
|
+
const active = node.reachableBindings.some((binding) => bindingStates.get(binding)?.active === true);
|
|
245
|
+
const reachable = node.reachableBindings.some((binding) => bindingStates.get(binding)?.reachable === true);
|
|
246
|
+
for (let index = 0;index < sequence.length; index += 1) {
|
|
247
|
+
const sourcePart = node.reachableBindings[0]?.sequence[index];
|
|
248
|
+
if (sourcePart) {
|
|
249
|
+
sequence[index] = { ...sourcePart, stroke: cloneKeyStroke(sourcePart.stroke) };
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
sequenceNodes.push({
|
|
253
|
+
id: currentNodeId,
|
|
254
|
+
layerId: currentLayerId,
|
|
255
|
+
parentId,
|
|
256
|
+
childIds,
|
|
257
|
+
bindingIds,
|
|
258
|
+
reachableBindingIds,
|
|
259
|
+
depth: node.depth,
|
|
260
|
+
sequence,
|
|
261
|
+
stroke: node.stroke ? cloneKeyStroke(node.stroke) : null,
|
|
262
|
+
match: node.match,
|
|
263
|
+
display: presentation.display,
|
|
264
|
+
tokenName: presentation.tokenName,
|
|
265
|
+
active,
|
|
266
|
+
reachable,
|
|
267
|
+
pending: pendingNodes.pending.has(currentNodeId),
|
|
268
|
+
pendingPath: pendingNodes.pendingPath.has(currentNodeId)
|
|
269
|
+
});
|
|
270
|
+
for (const child of childNodes(node)) {
|
|
271
|
+
visitNode(child, currentNodeId);
|
|
272
|
+
}
|
|
273
|
+
};
|
|
274
|
+
visitNode(layerRoots.get(layer), null);
|
|
275
|
+
}
|
|
276
|
+
const layers = sortedLayers.map((layer) => {
|
|
277
|
+
const state2 = layerStates.get(layer);
|
|
278
|
+
return {
|
|
279
|
+
id: state2.id,
|
|
280
|
+
order: layer.order,
|
|
281
|
+
priority: layer.priority,
|
|
282
|
+
target: includeTargets ? layer.target : undefined,
|
|
283
|
+
targetMode: layer.targetMode,
|
|
284
|
+
fields: layer.fields ?? {},
|
|
285
|
+
attrs: layer.attrs,
|
|
286
|
+
active: state2.active,
|
|
287
|
+
focusActive: state2.focusActive,
|
|
288
|
+
enabled: state2.enabled,
|
|
289
|
+
inactiveReasons: state2.inactiveReasons,
|
|
290
|
+
rootNodeId: nodeIds.get(layerRoots.get(layer)),
|
|
291
|
+
bindingIds: layer.bindings.map((binding) => bindingStates.get(binding).id),
|
|
292
|
+
commandIds: layer.commands.map((command) => commandStates.get(command).id)
|
|
293
|
+
};
|
|
294
|
+
});
|
|
295
|
+
const commands = [];
|
|
296
|
+
for (const state2 of commandStates.values()) {
|
|
297
|
+
commands.push({
|
|
298
|
+
id: state2.id,
|
|
299
|
+
layerId: state2.layerState.id,
|
|
300
|
+
name: state2.command.command.name,
|
|
301
|
+
command: state2.command.command,
|
|
302
|
+
fields: state2.command.fields,
|
|
303
|
+
attrs: state2.command.attrs,
|
|
304
|
+
target: includeTargets ? state2.layerState.layer.target : undefined,
|
|
305
|
+
active: state2.active,
|
|
306
|
+
reachable: state2.reachable,
|
|
307
|
+
enabled: state2.enabled,
|
|
308
|
+
inactiveReasons: state2.inactiveReasons
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
const bindings = [];
|
|
312
|
+
for (const state2 of bindingStates.values()) {
|
|
313
|
+
const binding = state2.binding;
|
|
314
|
+
bindings.push({
|
|
315
|
+
id: state2.id,
|
|
316
|
+
layerId: state2.layerState.id,
|
|
317
|
+
sourceLayerOrder: binding.sourceLayerOrder,
|
|
318
|
+
bindingIndex: binding.bindingIndex,
|
|
319
|
+
nodeId: bindingNodeIds.get(binding),
|
|
320
|
+
commandIds: state2.commandIds,
|
|
321
|
+
sequence: cloneKeySequence(binding.sequence),
|
|
322
|
+
command: binding.command,
|
|
323
|
+
commandAttrs: catalog.getBindingCommandAttrs(binding, focused, activeView),
|
|
324
|
+
attrs: binding.attrs,
|
|
325
|
+
event: binding.event,
|
|
326
|
+
preventDefault: binding.preventDefault,
|
|
327
|
+
fallthrough: binding.fallthrough,
|
|
328
|
+
active: state2.active,
|
|
329
|
+
reachable: state2.reachable,
|
|
330
|
+
enabled: state2.enabled,
|
|
331
|
+
commandResolved: state2.commandResolved,
|
|
332
|
+
shadowed: state2.shadowed,
|
|
333
|
+
inactiveReasons: state2.inactiveReasons
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
const activeKeys = activation.getActiveKeysForFocused(focused, { includeBindings: true, includeMetadata: true });
|
|
337
|
+
return {
|
|
338
|
+
focused: includeTargets ? focused : undefined,
|
|
339
|
+
pendingSequence: focused === currentFocused ? activation.getPendingSequence() : [],
|
|
340
|
+
activeKeys,
|
|
341
|
+
layers,
|
|
342
|
+
commands,
|
|
343
|
+
bindings,
|
|
344
|
+
sequenceNodes
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
// src/extras/graph.ts
|
|
349
|
+
function getGraphSnapshot(keymap, options) {
|
|
350
|
+
const context = keymap[KEYMAP_EXTENSION_CONTEXT]();
|
|
351
|
+
return createGraphSnapshot({
|
|
352
|
+
state: context.state,
|
|
353
|
+
host: context.host,
|
|
354
|
+
conditions: context.conditions,
|
|
355
|
+
catalog: context.catalog,
|
|
356
|
+
activation: context.activation,
|
|
357
|
+
snapshotOptions: options
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
function createGraphExtra(keymap) {
|
|
361
|
+
return {
|
|
362
|
+
getGraphSnapshot(options) {
|
|
363
|
+
return getGraphSnapshot(keymap, options);
|
|
364
|
+
}
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
export {
|
|
368
|
+
getGraphSnapshot,
|
|
369
|
+
createGraphExtra
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
//# debugId=68A22ECA1358D66B64756E2164756E21
|
|
373
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/extras/lib/graph-snapshot.ts", "../src/extras/graph.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type { ActivationService } from \"../../services/activation.js\"\nimport type { CommandCatalogService } from \"../../services/command-catalog.js\"\nimport type { ConditionService } from \"../../services/conditions.js\"\nimport type { State } from \"../../services/state.js\"\nimport type {\n BindingState,\n CommandState,\n KeymapEvent,\n KeymapHost,\n KeySequencePart,\n RegisteredLayer,\n SequenceNode,\n} from \"../../types.js\"\nimport type {\n GraphBinding,\n GraphCommand,\n GraphInactiveReason,\n GraphLayer,\n GraphSequenceNode,\n GraphSnapshot,\n GraphSnapshotOptions,\n} from \"./graph-types.js\"\nimport { cloneKeySequence, cloneKeyStroke } from \"../../services/keys.js\"\nimport {\n getActivationPath,\n getFocusedTargetIfAvailable,\n getSortedLayers,\n isLayerActiveForFocused,\n} from \"../../services/primitives/active-layers.js\"\nimport { childNodes, getCaptureNode, getNodePresentation, getNodeSequence } from \"../../services/sequence-index.js\"\n\ninterface LayerGraphState<TTarget extends object, TEvent extends KeymapEvent> {\n layer: RegisteredLayer<TTarget, TEvent>\n id: string\n focusActive: boolean\n enabled: boolean\n active: boolean\n inactiveReasons: GraphInactiveReason[]\n}\n\ninterface BindingGraphState<TTarget extends object, TEvent extends KeymapEvent> {\n binding: BindingState<TTarget, TEvent>\n id: string\n layerState: LayerGraphState<TTarget, TEvent>\n commandIds: string[]\n enabled: boolean\n commandResolved: boolean\n active: boolean\n reachable: boolean\n shadowed: boolean\n inactiveReasons: GraphInactiveReason[]\n}\n\ninterface CommandGraphState<TTarget extends object, TEvent extends KeymapEvent> {\n command: CommandState<TTarget, TEvent>\n id: string\n layerState: LayerGraphState<TTarget, TEvent>\n active: boolean\n reachable: boolean\n enabled: boolean\n inactiveReasons: GraphInactiveReason[]\n}\n\ninterface SequenceStop {\n event: string\n matches: readonly string[]\n}\n\nfunction hasOwnFocused<TTarget extends object>(\n options: GraphSnapshotOptions<TTarget> | undefined,\n): options is GraphSnapshotOptions<TTarget> & { focused: TTarget | null | undefined } {\n return !!options && Object.prototype.hasOwnProperty.call(options, \"focused\")\n}\n\nfunction layerId<TTarget extends object, TEvent extends KeymapEvent>(layer: RegisteredLayer<TTarget, TEvent>): string {\n return `layer:${layer.order}`\n}\n\nfunction bindingId<TTarget extends object, TEvent extends KeymapEvent>(\n layer: RegisteredLayer<TTarget, TEvent>,\n index: number,\n): string {\n return `binding:${layer.order}:${index}`\n}\n\nfunction commandId<TTarget extends object, TEvent extends KeymapEvent>(\n layer: RegisteredLayer<TTarget, TEvent>,\n index: number,\n): string {\n return `command:${layer.order}:${index}`\n}\n\nfunction nodeId<TTarget extends object, TEvent extends KeymapEvent>(\n layer: RegisteredLayer<TTarget, TEvent>,\n index: number,\n): string {\n return `node:${layer.order}:${index}`\n}\n\nfunction getSequenceMatches(sequence: readonly KeySequencePart[]): string[] {\n return sequence.map((part) => part.match)\n}\n\nfunction isPrefix(left: readonly string[], right: readonly string[]): boolean {\n if (left.length > right.length) {\n return false\n }\n\n for (let index = 0; index < left.length; index += 1) {\n if (left[index] !== right[index]) {\n return false\n }\n }\n\n return true\n}\n\nfunction collectPendingNodes<TTarget extends object, TEvent extends KeymapEvent>(\n pending: State<TTarget, TEvent>[\"pending\"],\n layerIds: ReadonlyMap<RegisteredLayer<TTarget, TEvent>, string>,\n nodeIds: ReadonlyMap<SequenceNode<TTarget, TEvent>, string>,\n roots: ReadonlyMap<RegisteredLayer<TTarget, TEvent>, SequenceNode<TTarget, TEvent>>,\n): { pending: Set<string>; pendingPath: Set<string> } {\n const pendingIds = new Set<string>()\n const pendingPathIds = new Set<string>()\n\n if (!pending) {\n return { pending: pendingIds, pendingPath: pendingPathIds }\n }\n\n for (const capture of pending.captures) {\n const layerGraphId = layerIds.get(capture.layer)\n if (!layerGraphId) {\n continue\n }\n\n const root = roots.get(capture.layer)\n if (!root) {\n continue\n }\n\n let current: SequenceNode<TTarget, TEvent> | null = getCaptureNode(root, capture) ?? null\n const capturedNodeId = current ? nodeIds.get(current) : undefined\n if (capturedNodeId) {\n pendingIds.add(capturedNodeId)\n }\n\n while (current) {\n const currentNodeId = nodeIds.get(current)\n if (currentNodeId) {\n pendingPathIds.add(currentNodeId)\n }\n current = current.parent\n }\n }\n\n return { pending: pendingIds, pendingPath: pendingPathIds }\n}\n\nexport function createGraphSnapshot<TTarget extends object, TEvent extends KeymapEvent>(options: {\n state: State<TTarget, TEvent>\n host: KeymapHost<TTarget, TEvent>\n conditions: ConditionService<TTarget, TEvent>\n catalog: CommandCatalogService<TTarget, TEvent>\n activation: ActivationService<TTarget, TEvent>\n snapshotOptions?: GraphSnapshotOptions<TTarget>\n}): GraphSnapshot<TTarget, TEvent> {\n const { state, host, conditions, catalog, activation, snapshotOptions } = options\n const includeTargets = snapshotOptions?.includeTargets !== false\n const currentFocused = getFocusedTargetIfAvailable(host)\n const focused = hasOwnFocused(snapshotOptions) ? (snapshotOptions.focused ?? null) : currentFocused\n const activeView = catalog.getActiveCommandView(focused)\n const activeCommandStates = new Set(activeView.entries.map((entry) => entry.commandState))\n const reachableCommandStates = new Set(activeView.reachable.map((entry) => entry.commandState))\n const activationPath = getActivationPath(host, focused)\n const sortedLayers = getSortedLayers(state.layers)\n const layerStates = new Map<RegisteredLayer<TTarget, TEvent>, LayerGraphState<TTarget, TEvent>>()\n const commandStates = new Map<CommandState<TTarget, TEvent>, CommandGraphState<TTarget, TEvent>>()\n const bindingStates = new Map<BindingState<TTarget, TEvent>, BindingGraphState<TTarget, TEvent>>()\n const commandIdsByCommand = new Map<CommandState<TTarget, TEvent>[\"command\"], string[]>()\n const commandIdsByName = new Map<string, string[]>()\n const nodeIds = new Map<SequenceNode<TTarget, TEvent>, string>()\n const layerIds = new Map<RegisteredLayer<TTarget, TEvent>, string>()\n const layerRoots = new Map<RegisteredLayer<TTarget, TEvent>, SequenceNode<TTarget, TEvent>>()\n const bindingNodeIds = new Map<BindingState<TTarget, TEvent>, string>()\n const sequenceNodes: GraphSequenceNode[] = []\n\n for (const layer of sortedLayers) {\n layerRoots.set(layer, layer.root)\n }\n\n for (const layer of sortedLayers) {\n const currentLayerId = layerId(layer)\n const targetDestroyed = layer.target ? host.isTargetDestroyed(layer.target) : false\n const focusActive = isLayerActiveForFocused(host, layer, focused, activationPath)\n const enabled = conditions.matchesConditions(layer)\n const inactiveReasons: GraphInactiveReason[] = []\n if (targetDestroyed) inactiveReasons.push(\"target-destroyed\")\n if (!focusActive) inactiveReasons.push(\"focus\")\n if (!enabled) inactiveReasons.push(\"layer-disabled\")\n\n layerIds.set(layer, currentLayerId)\n layerStates.set(layer, {\n layer,\n id: currentLayerId,\n focusActive,\n enabled,\n active: !targetDestroyed && focusActive && enabled,\n inactiveReasons,\n })\n }\n\n for (const layer of sortedLayers) {\n const currentLayerId = layerIds.get(layer)!\n for (const [index, command] of layer.commands.entries()) {\n const currentCommandId = commandId(layer, index)\n const idsByCommand = commandIdsByCommand.get(command.command)\n if (idsByCommand) {\n idsByCommand.push(currentCommandId)\n } else {\n commandIdsByCommand.set(command.command, [currentCommandId])\n }\n\n const idsByName = commandIdsByName.get(command.command.name)\n if (idsByName) {\n idsByName.push(currentCommandId)\n } else {\n commandIdsByName.set(command.command.name, [currentCommandId])\n }\n\n const layerState = layerStates.get(layer)!\n const enabled = conditions.matchesConditions(command)\n const active = activeCommandStates.has(command)\n const reachable = reachableCommandStates.has(command)\n const inactiveReasons = [...layerState.inactiveReasons]\n if (!enabled) {\n inactiveReasons.push(\"command-disabled\")\n }\n if (active && !reachable) {\n inactiveReasons.push(\"shadowed\")\n }\n commandStates.set(command, {\n command,\n id: currentCommandId,\n layerState,\n active,\n reachable,\n enabled,\n inactiveReasons,\n })\n }\n\n let nextNodeIndex = 0\n const visitNode = (node: SequenceNode<TTarget, TEvent>, parentId: string | null): void => {\n const currentNodeId = nodeId(layer, nextNodeIndex)\n nextNodeIndex += 1\n nodeIds.set(node, currentNodeId)\n\n for (const binding of node.bindings) {\n bindingNodeIds.set(binding, currentNodeId)\n }\n\n for (const child of childNodes(node)) {\n visitNode(child, currentNodeId)\n }\n }\n\n const root = layerRoots.get(layer)!\n visitNode(root, null)\n if (!nodeIds.has(root)) {\n nodeIds.set(root, `${currentLayerId}:root`)\n }\n }\n\n const stoppedSequences: SequenceStop[] = []\n for (const layer of sortedLayers) {\n const layerState = layerStates.get(layer)!\n for (const [index, binding] of layer.bindings.entries()) {\n const enabled = conditions.matchesConditions(binding)\n const commandResolved = catalog.isBindingVisible(binding, focused, activeView)\n const active = layerState.active && enabled && commandResolved\n const matches = getSequenceMatches(binding.sequence)\n const shadowed =\n active && stoppedSequences.some((stop) => stop.event === binding.event && isPrefix(stop.matches, matches))\n const inactiveReasons = [...layerState.inactiveReasons]\n if (!enabled) {\n inactiveReasons.push(\"binding-disabled\")\n }\n if (!commandResolved) {\n const unavailable =\n typeof binding.command === \"string\"\n ? catalog.getDispatchUnavailableCommandState(binding.command, focused, false)\n : undefined\n if (unavailable?.reason === \"disabled\") {\n inactiveReasons.push(\"command-disabled\")\n } else if (unavailable?.reason === \"inactive\") {\n inactiveReasons.push(\"command-inactive\")\n } else {\n inactiveReasons.push(\"command-unresolved\")\n }\n }\n if (shadowed) {\n inactiveReasons.push(\"shadowed\")\n }\n\n const currentBindingState: BindingGraphState<TTarget, TEvent> = {\n binding,\n id: bindingId(layer, index),\n layerState,\n commandIds: [],\n enabled,\n commandResolved,\n active,\n reachable: active && !shadowed,\n shadowed,\n inactiveReasons,\n }\n bindingStates.set(binding, currentBindingState)\n\n if (active && binding.command !== undefined && !binding.fallthrough) {\n stoppedSequences.push({ event: binding.event, matches })\n }\n }\n }\n\n for (const state of bindingStates.values()) {\n if (typeof state.binding.command !== \"string\") {\n continue\n }\n\n const ids = new Set(commandIdsByName.get(state.binding.command) ?? [])\n const chain = catalog.getResolvedCommandChain(state.binding.command, focused).entries\n for (const entry of chain ?? []) {\n for (const id of commandIdsByCommand.get(entry.command) ?? []) {\n ids.add(id)\n }\n }\n state.commandIds = [...ids]\n }\n\n const pending = focused === currentFocused ? activation.ensureValidPendingSequence() : undefined\n const pendingNodes = collectPendingNodes(pending ?? null, layerIds, nodeIds, layerRoots)\n\n for (const layer of sortedLayers) {\n const currentLayerId = layerIds.get(layer)!\n const visitNode = (node: SequenceNode<TTarget, TEvent>, parentId: string | null): void => {\n const currentNodeId = nodeIds.get(node)!\n const childIds = childNodes(node)\n .map((child) => nodeIds.get(child)!)\n .filter(Boolean)\n const bindingIds = node.bindings\n .map((binding) => bindingStates.get(binding)?.id)\n .filter((id): id is string => !!id)\n const reachableBindingIds = node.reachableBindings\n .map((binding) => bindingStates.get(binding)?.id)\n .filter((id): id is string => !!id)\n const sequence = getNodeSequence(node)\n const presentation = getNodePresentation(node)\n const active = node.reachableBindings.some((binding) => bindingStates.get(binding)?.active === true)\n const reachable = node.reachableBindings.some((binding) => bindingStates.get(binding)?.reachable === true)\n\n for (let index = 0; index < sequence.length; index += 1) {\n const sourcePart = node.reachableBindings[0]?.sequence[index]\n if (sourcePart) {\n sequence[index] = { ...sourcePart, stroke: cloneKeyStroke(sourcePart.stroke) }\n }\n }\n\n sequenceNodes.push({\n id: currentNodeId,\n layerId: currentLayerId,\n parentId,\n childIds,\n bindingIds,\n reachableBindingIds,\n depth: node.depth,\n sequence,\n stroke: node.stroke ? cloneKeyStroke(node.stroke) : null,\n match: node.match,\n display: presentation.display,\n tokenName: presentation.tokenName,\n active,\n reachable,\n pending: pendingNodes.pending.has(currentNodeId),\n pendingPath: pendingNodes.pendingPath.has(currentNodeId),\n })\n\n for (const child of childNodes(node)) {\n visitNode(child, currentNodeId)\n }\n }\n\n visitNode(layerRoots.get(layer)!, null)\n }\n\n const layers: GraphLayer<TTarget>[] = sortedLayers.map((layer) => {\n const state = layerStates.get(layer)!\n return {\n id: state.id,\n order: layer.order,\n priority: layer.priority,\n target: includeTargets ? layer.target : undefined,\n targetMode: layer.targetMode,\n fields: layer.fields ?? {},\n attrs: layer.attrs,\n active: state.active,\n focusActive: state.focusActive,\n enabled: state.enabled,\n inactiveReasons: state.inactiveReasons,\n rootNodeId: nodeIds.get(layerRoots.get(layer)!)!,\n bindingIds: layer.bindings.map((binding) => bindingStates.get(binding)!.id),\n commandIds: layer.commands.map((command) => commandStates.get(command)!.id),\n }\n })\n\n const commands: GraphCommand<TTarget, TEvent>[] = []\n for (const state of commandStates.values()) {\n commands.push({\n id: state.id,\n layerId: state.layerState.id,\n name: state.command.command.name,\n command: state.command.command,\n fields: state.command.fields,\n attrs: state.command.attrs,\n target: includeTargets ? state.layerState.layer.target : undefined,\n active: state.active,\n reachable: state.reachable,\n enabled: state.enabled,\n inactiveReasons: state.inactiveReasons,\n })\n }\n\n const bindings: GraphBinding<TTarget, TEvent>[] = []\n for (const state of bindingStates.values()) {\n const binding = state.binding\n bindings.push({\n id: state.id,\n layerId: state.layerState.id,\n sourceLayerOrder: binding.sourceLayerOrder,\n bindingIndex: binding.bindingIndex,\n nodeId: bindingNodeIds.get(binding),\n commandIds: state.commandIds,\n sequence: cloneKeySequence(binding.sequence),\n command: binding.command,\n commandAttrs: catalog.getBindingCommandAttrs(binding, focused, activeView),\n attrs: binding.attrs,\n event: binding.event,\n preventDefault: binding.preventDefault,\n fallthrough: binding.fallthrough,\n active: state.active,\n reachable: state.reachable,\n enabled: state.enabled,\n commandResolved: state.commandResolved,\n shadowed: state.shadowed,\n inactiveReasons: state.inactiveReasons,\n })\n }\n\n const activeKeys = activation.getActiveKeysForFocused(focused, { includeBindings: true, includeMetadata: true })\n\n return {\n focused: includeTargets ? focused : undefined,\n pendingSequence: focused === currentFocused ? activation.getPendingSequence() : [],\n activeKeys,\n layers,\n commands,\n bindings,\n sequenceNodes,\n }\n}\n",
|
|
6
|
+
"import { KEYMAP_EXTENSION_CONTEXT, type KeymapExtensionProvider } from \"../services/extension-context.js\"\nimport { createGraphSnapshot } from \"./lib/graph-snapshot.js\"\nimport type { KeymapEvent } from \"../types.js\"\nimport type { GraphSnapshot, GraphSnapshotOptions } from \"./lib/graph-types.js\"\n\nexport type {\n GraphBinding,\n GraphCommand,\n GraphInactiveReason,\n GraphLayer,\n GraphSequenceNode,\n GraphSnapshot,\n GraphSnapshotOptions,\n} from \"./lib/graph-types.js\"\n\nexport interface KeymapGraphExtra<TTarget extends object, TEvent extends KeymapEvent> {\n getGraphSnapshot(options?: GraphSnapshotOptions<TTarget>): GraphSnapshot<TTarget, TEvent>\n}\n\nexport function getGraphSnapshot<TTarget extends object, TEvent extends KeymapEvent>(\n keymap: KeymapExtensionProvider<TTarget, TEvent>,\n options?: GraphSnapshotOptions<TTarget>,\n): GraphSnapshot<TTarget, TEvent> {\n const context = keymap[KEYMAP_EXTENSION_CONTEXT]()\n return createGraphSnapshot({\n state: context.state,\n host: context.host,\n conditions: context.conditions,\n catalog: context.catalog,\n activation: context.activation,\n snapshotOptions: options,\n })\n}\n\nexport function createGraphExtra<TTarget extends object, TEvent extends KeymapEvent>(\n keymap: KeymapExtensionProvider<TTarget, TEvent>,\n): KeymapGraphExtra<TTarget, TEvent> {\n return {\n getGraphSnapshot(options) {\n return getGraphSnapshot(keymap, options)\n },\n }\n}\n"
|
|
7
|
+
],
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "68A22ECA1358D66B64756E2164756E21",
|
|
10
|
+
"names": []
|
|
11
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { resolveBindingSections } from "./binding-sections.js";
|
|
2
|
+
export { commandBindings } from "./command-bindings.js";
|
|
3
|
+
export { formatCommandBindings, formatKeySequence } from "./formatting.js";
|
|
4
|
+
export type { BindingSectionConfig, BindingSectionItem, BindingSectionsConfig, BindingValue, ResolveBindingSectionsOptions, ResolvedBindingSections, } from "./binding-sections.js";
|
|
5
|
+
export type { FormatCommandBindingsOptions, FormatKeySequenceOptions, KeySequenceFormatPart, KeyModifierName, SequenceBindingLike, TokenDisplayResolver, } from "./formatting.js";
|
|
6
|
+
export type { CommandBindingMap, CommandBindingsOptions, CommandBindingsOverrideWarning, CommandBindingsError, } from "./command-bindings.js";
|