@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.
Files changed (86) hide show
  1. package/README.md +64 -30
  2. package/chunks/index-frk6sdcd.js +409 -0
  3. package/chunks/index-frk6sdcd.js.map +14 -0
  4. package/package.json +43 -23
  5. package/src/addons/index.js +1130 -0
  6. package/src/addons/index.js.map +25 -0
  7. package/src/addons/opentui/edit-buffer-bindings.d.ts +6 -2
  8. package/src/addons/opentui/index.d.ts +2 -2
  9. package/src/addons/opentui/index.js +467 -0
  10. package/src/addons/opentui/index.js.map +12 -0
  11. package/src/addons/universal/binding-overrides.d.ts +6 -0
  12. package/src/addons/universal/dead-bindings.d.ts +1 -1
  13. package/src/addons/universal/default-parser.d.ts +2 -2
  14. package/src/addons/universal/ex-commands.d.ts +11 -8
  15. package/src/addons/universal/index.d.ts +3 -1
  16. package/src/addons/universal/leader.d.ts +1 -1
  17. package/src/addons/universal/metadata.d.ts +2 -2
  18. package/src/addons/universal/mod-bindings.d.ts +6 -0
  19. package/src/addons/universal/unresolved-commands.d.ts +1 -1
  20. package/src/extras/binding-sections.d.ts +18 -0
  21. package/src/extras/command-bindings.d.ts +19 -0
  22. package/src/extras/formatting.d.ts +27 -0
  23. package/src/extras/graph.d.ts +9 -0
  24. package/src/extras/graph.js +373 -0
  25. package/src/extras/graph.js.map +11 -0
  26. package/src/extras/index.d.ts +6 -0
  27. package/src/extras/index.js +239 -0
  28. package/src/extras/index.js.map +12 -0
  29. package/src/extras/lib/graph-snapshot.d.ts +14 -0
  30. package/src/extras/lib/graph-types.d.ts +83 -0
  31. package/src/html.d.ts +3 -3
  32. package/src/html.js +297 -0
  33. package/src/html.js.map +10 -0
  34. package/src/index.d.ts +3 -1
  35. package/src/index.js +4492 -0
  36. package/src/index.js.map +34 -0
  37. package/src/keymap.d.ts +23 -35
  38. package/src/lib/emitter.d.ts +1 -2
  39. package/src/lib/registry.d.ts +2 -2
  40. package/src/lib/runtime-utils.d.ts +34 -0
  41. package/src/opentui.d.ts +1 -3
  42. package/src/opentui.js +133 -0
  43. package/src/opentui.js.map +10 -0
  44. package/src/react/index.d.ts +5 -19
  45. package/{react → src/react}/index.js +3 -0
  46. package/src/react/index.js.map +10 -0
  47. package/src/runtime-modules.d.ts +20 -0
  48. package/src/runtime-modules.js +28 -0
  49. package/src/runtime-modules.js.map +10 -0
  50. package/src/services/activation.d.ts +7 -33
  51. package/src/services/active-key-cache.d.ts +29 -0
  52. package/src/services/command-catalog.d.ts +28 -45
  53. package/src/services/command-executor.d.ts +7 -13
  54. package/src/services/compiler.d.ts +6 -12
  55. package/src/services/conditions.d.ts +4 -16
  56. package/src/services/dispatch-decisions.d.ts +21 -0
  57. package/src/services/dispatch-patterns.d.ts +5 -0
  58. package/src/services/dispatch.d.ts +6 -42
  59. package/src/services/environment.d.ts +6 -21
  60. package/src/services/extension-context.d.ts +16 -0
  61. package/src/services/layer-diagnostics.d.ts +10 -0
  62. package/src/services/layers.d.ts +15 -23
  63. package/src/services/notify.d.ts +6 -8
  64. package/src/services/pending-sequence.d.ts +4 -0
  65. package/src/services/primitives/active-layers.d.ts +2 -3
  66. package/src/services/primitives/bindings.d.ts +4 -0
  67. package/src/services/primitives/command-normalization.d.ts +3 -0
  68. package/src/services/primitives/field-invariants.d.ts +16 -1
  69. package/src/services/primitives/pending-captures.d.ts +5 -0
  70. package/src/services/runtime-view.d.ts +5 -0
  71. package/src/services/runtime.d.ts +2 -7
  72. package/src/services/sequence-index.d.ts +24 -0
  73. package/src/services/state.d.ts +46 -91
  74. package/src/solid/index.d.ts +5 -19
  75. package/{solid → src/solid}/index.js +3 -0
  76. package/src/solid/index.js.map +10 -0
  77. package/src/testing/index.d.ts +90 -0
  78. package/src/testing/index.js +276 -0
  79. package/src/testing/index.js.map +10 -0
  80. package/src/types.d.ts +194 -126
  81. package/addons/index.js +0 -5240
  82. package/addons/opentui/index.js +0 -5632
  83. package/html.js +0 -5042
  84. package/index.js +0 -4411
  85. package/opentui.js +0 -4887
  86. package/src/services/primitives/binding-inputs.d.ts +0 -4
package/src/keymap.d.ts CHANGED
@@ -1,58 +1,50 @@
1
- import type { ActiveKey, ActiveKeyOptions, BindingInput, BindingExpander, BindingParser, BindingFieldCompiler, Bindings, BindingTransformer, Events, CommandFieldCompiler, CommandEntry, CommandQuery, CommandRecord, KeymapEvent, KeymapHost, LayerAnalyzer, Listener, RunCommandOptions, RunCommandResult, CommandResolver, KeyInterceptOptions, KeyInputContext, Layer, LayerFieldCompiler, KeyDisambiguationResolver, RawInterceptOptions, RawInputContext, EventMatchResolver, KeyStringifyInput, KeyToken, KeyLike, KeySequencePart } from "./types.js";
1
+ import type { ActiveBinding, ActiveKey, ActiveKeyOptions, BindingExpander, BindingParser, BindingFieldCompiler, LayerBindingsTransformer, BindingTransformer, Events, CommandFieldCompiler, CommandTransformer, CommandBindingsQuery, CommandEntry, CommandQuery, Command, KeymapEvent, KeymapHost, HostMetadata, LayerAnalyzer, Listener, RunCommandOptions, RunCommandResult, CommandResolver, KeyAfterInputContext, KeyInterceptOptions, KeyInputContext, Layer, LayerFieldCompiler, KeyDisambiguationResolver, RawInterceptOptions, RawInputContext, EventMatchResolver, KeyStringifyInput, KeyToken, SequencePattern, KeyLike, KeySequencePart, StringifyOptions } from "./types.js";
2
+ import { KEYMAP_EXTENSION_CONTEXT, type KeymapExtensionContext } from "./services/extension-context.js";
2
3
  export declare class Keymap<TTarget extends object, TEvent extends KeymapEvent = KeymapEvent> {
3
- private readonly host;
4
- private readonly state;
5
- private cleanedUp;
6
- private readonly resources;
7
- private readonly cleanupListeners;
8
- private events;
9
- private hooks;
10
- private readonly notify;
11
- private readonly activation;
12
- private readonly runtime;
13
- private readonly conditions;
14
- private readonly catalog;
15
- private readonly executor;
16
- private readonly compiler;
17
- private readonly dispatch;
18
- private readonly layers;
19
- private readonly environment;
20
- private readonly keypressListener;
21
- private readonly keyreleaseListener;
22
- private readonly rawListener;
23
- private readonly focusedTargetListener;
4
+ #private;
5
+ getPendingSequence: () => readonly KeySequencePart[];
6
+ getActiveKeys: (options?: ActiveKeyOptions) => readonly ActiveKey<TTarget, TEvent>[];
24
7
  constructor(host: KeymapHost<TTarget, TEvent>);
25
- private cleanup;
8
+ [KEYMAP_EXTENSION_CONTEXT](): KeymapExtensionContext<TTarget, TEvent>;
26
9
  setData(name: string, value: unknown): void;
27
10
  getData(name: string): unknown;
11
+ getHostMetadata(): Readonly<HostMetadata>;
28
12
  hasPendingSequence(): boolean;
29
- getPendingSequence(): readonly KeySequencePart[];
30
13
  createKeyMatcher(key: KeyLike): (input: KeyStringifyInput | null | undefined) => boolean;
14
+ parseKeySequence(key: KeyLike): readonly KeySequencePart[];
15
+ formatKey(key: KeyLike, options?: StringifyOptions): string;
31
16
  clearPendingSequence(): void;
32
17
  popPendingSequence(): boolean;
33
- getActiveKeys(options?: ActiveKeyOptions): readonly ActiveKey<TTarget, TEvent>[];
34
- getCommands(query?: CommandQuery<TTarget>): readonly CommandRecord[];
35
- getCommandEntries(query?: CommandQuery<TTarget>): readonly CommandEntry<TTarget, TEvent>[];
36
- normalizeCommandName(name: string): string;
37
- normalizeBindings(bindings: Bindings<TTarget, TEvent>): BindingInput<TTarget, TEvent>[];
18
+ getCommands(query?: CommandQuery<TTarget, TEvent>): readonly Command<TTarget, TEvent>[];
19
+ getCommandEntries(query?: CommandQuery<TTarget, TEvent>): readonly CommandEntry<TTarget, TEvent>[];
20
+ getCommandBindings(query: CommandBindingsQuery<TTarget>): ReadonlyMap<string, readonly ActiveBinding<TTarget, TEvent>[]>;
38
21
  acquireResource(key: symbol, setup: () => () => void): () => void;
39
- runCommand(cmd: string, options?: RunCommandOptions<TTarget, TEvent>): RunCommandResult;
40
- dispatchCommand(cmd: string, options?: RunCommandOptions<TTarget, TEvent>): RunCommandResult;
22
+ runCommand(cmd: string, options?: RunCommandOptions<TTarget, TEvent>): RunCommandResult<TTarget, TEvent>;
23
+ dispatchCommand(cmd: string, options?: RunCommandOptions<TTarget, TEvent>): RunCommandResult<TTarget, TEvent>;
41
24
  on(name: "state", fn: Listener<Events<TTarget, TEvent>["state"]>): () => void;
42
25
  on(name: "pendingSequence", fn: Listener<Events<TTarget, TEvent>["pendingSequence"]>): () => void;
26
+ on(name: "dispatch", fn: Listener<Events<TTarget, TEvent>["dispatch"]>): () => void;
43
27
  on(name: "warning", fn: Listener<Events<TTarget, TEvent>["warning"]>): () => void;
44
28
  on(name: "error", fn: Listener<Events<TTarget, TEvent>["error"]>): () => void;
45
29
  intercept(name: "key", fn: (ctx: KeyInputContext<TEvent>) => void, options?: KeyInterceptOptions): () => void;
30
+ intercept(name: "key:after", fn: (ctx: KeyAfterInputContext<TTarget, TEvent>) => void, options?: KeyInterceptOptions): () => void;
46
31
  intercept(name: "raw", fn: (ctx: RawInputContext) => void, options?: RawInterceptOptions): () => void;
47
32
  registerLayer(layer: Layer<TTarget, TEvent>): () => void;
48
33
  registerLayerFields(fields: Record<string, LayerFieldCompiler>): () => void;
34
+ prependLayerBindingsTransformer(transformer: LayerBindingsTransformer<TTarget, TEvent>): () => void;
35
+ appendLayerBindingsTransformer(transformer: LayerBindingsTransformer<TTarget, TEvent>): () => void;
36
+ clearLayerBindingsTransformers(): void;
49
37
  prependBindingTransformer(transformer: BindingTransformer<TTarget, TEvent>): () => void;
50
38
  appendBindingTransformer(transformer: BindingTransformer<TTarget, TEvent>): () => void;
51
39
  clearBindingTransformers(): void;
40
+ prependCommandTransformer(transformer: CommandTransformer<TTarget, TEvent>): () => void;
41
+ appendCommandTransformer(transformer: CommandTransformer<TTarget, TEvent>): () => void;
42
+ clearCommandTransformers(): void;
52
43
  prependBindingParser(parser: BindingParser): () => void;
53
44
  appendBindingParser(parser: BindingParser): () => void;
54
45
  clearBindingParsers(): void;
55
46
  registerToken(token: KeyToken): () => void;
47
+ registerSequencePattern(pattern: SequencePattern<TEvent>): () => void;
56
48
  prependBindingExpander(expander: BindingExpander): () => void;
57
49
  appendBindingExpander(expander: BindingExpander): () => void;
58
50
  clearBindingExpanders(): void;
@@ -70,8 +62,4 @@ export declare class Keymap<TTarget extends object, TEvent extends KeymapEvent =
70
62
  prependDisambiguationResolver(resolver: KeyDisambiguationResolver<TTarget, TEvent>): () => void;
71
63
  appendDisambiguationResolver(resolver: KeyDisambiguationResolver<TTarget, TEvent>): () => void;
72
64
  clearDisambiguationResolvers(): void;
73
- private handleFocusedTargetChange;
74
- private warnUnknownField;
75
- private warnUnknownToken;
76
- private releaseResource;
77
65
  }
@@ -1,8 +1,7 @@
1
1
  export type EmitterListener<TValue> = [TValue] extends [void] ? () => void : (value: TValue) => void;
2
2
  type EmitterArgs<TValue> = [TValue] extends [void] ? [] : [TValue];
3
3
  export declare class Emitter<TEvents extends Record<string, unknown>> {
4
- private readonly onError;
5
- private listeners;
4
+ #private;
6
5
  constructor(onError: (name: keyof TEvents, error: unknown) => void);
7
6
  hook<TName extends keyof TEvents>(name: TName, listener: EmitterListener<TEvents[TName]>): () => void;
8
7
  has<TName extends keyof TEvents>(name: TName): boolean;
@@ -5,7 +5,7 @@ export type PriorityRegistration<TListener, TOptions extends {
5
5
  order: number;
6
6
  }>;
7
7
  declare abstract class CopyOnWriteRegistry<TValue> {
8
- private items;
8
+ #private;
9
9
  protected getItems(): readonly TValue[];
10
10
  protected setItems(items: readonly TValue[]): void;
11
11
  protected removeItem(value: TValue): boolean;
@@ -21,7 +21,7 @@ export declare class OrderedRegistry<TValue> extends CopyOnWriteRegistry<TValue>
21
21
  export declare class PriorityRegistry<TListener, TOptions extends {
22
22
  priority: number;
23
23
  }> extends CopyOnWriteRegistry<PriorityRegistration<TListener, TOptions>> {
24
- private order;
24
+ #private;
25
25
  register(listener: TListener, options: TOptions): () => void;
26
26
  entries(): readonly PriorityRegistration<TListener, TOptions>[];
27
27
  }
@@ -0,0 +1,34 @@
1
+ export type RuntimeEmitterListener<TValue> = [TValue] extends [void] ? () => void : (value: TValue) => void;
2
+ type RuntimeEmitterArgs<TValue> = [TValue] extends [void] ? [] : [TValue];
3
+ export interface RuntimeEmitter<TEvents extends Record<string, unknown>> {
4
+ hook<TName extends keyof TEvents>(name: TName, listener: RuntimeEmitterListener<TEvents[TName]>): () => void;
5
+ has<TName extends keyof TEvents>(name: TName): boolean;
6
+ emit<TName extends keyof TEvents>(name: TName, ...args: RuntimeEmitterArgs<TEvents[TName]>): void;
7
+ }
8
+ export declare function createRuntimeEmitter<TEvents extends Record<string, unknown>>(onError: (name: keyof TEvents, error: unknown) => void): RuntimeEmitter<TEvents>;
9
+ export type RuntimePriorityRegistration<TListener, TOptions extends {
10
+ priority: number;
11
+ }> = Readonly<TOptions & {
12
+ listener: TListener;
13
+ order: number;
14
+ }>;
15
+ export interface RuntimeOrderedRegistry<TValue> {
16
+ append(value: TValue): () => void;
17
+ prepend(value: TValue): () => void;
18
+ values(): readonly TValue[];
19
+ has(): boolean;
20
+ clear(): void;
21
+ }
22
+ export interface RuntimePriorityRegistry<TListener, TOptions extends {
23
+ priority: number;
24
+ }> {
25
+ register(listener: TListener, options: TOptions): () => void;
26
+ entries(): readonly RuntimePriorityRegistration<TListener, TOptions>[];
27
+ has(): boolean;
28
+ clear(): void;
29
+ }
30
+ export declare function createRuntimeOrderedRegistry<TValue>(): RuntimeOrderedRegistry<TValue>;
31
+ export declare function createRuntimePriorityRegistry<TListener, TOptions extends {
32
+ priority: number;
33
+ }>(): RuntimePriorityRegistry<TListener, TOptions>;
34
+ export {};
package/src/opentui.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import { KeyEvent, type CliRenderer, type Renderable } from "@opentui/core";
2
- import { Keymap } from "./keymap.js";
3
- import type { KeymapHost } from "./types.js";
4
- export * from "./index.js";
2
+ import { Keymap, type KeymapHost } from "@opentui/keymap";
5
3
  export declare function createOpenTuiKeymapHost(renderer: CliRenderer): KeymapHost<Renderable, KeyEvent>;
6
4
  export declare function createOpenTuiKeymap(renderer: CliRenderer): Keymap<Renderable, KeyEvent>;
7
5
  export declare function createDefaultOpenTuiKeymap(renderer: CliRenderer): Keymap<Renderable, KeyEvent>;
package/src/opentui.js ADDED
@@ -0,0 +1,133 @@
1
+ // @bun
2
+ // src/opentui.ts
3
+ import { CliRenderEvents, KeyEvent, RenderableEvents } from "@opentui/core";
4
+ import { Keymap } from "@opentui/keymap";
5
+ import { registerDefaultKeys, registerEnabledFields, registerMetadataFields } from "@opentui/keymap/addons";
6
+ function createSyntheticCommandEvent() {
7
+ return new KeyEvent({
8
+ name: "command",
9
+ ctrl: false,
10
+ meta: false,
11
+ shift: false,
12
+ option: false,
13
+ sequence: "",
14
+ number: false,
15
+ raw: "",
16
+ eventType: "press",
17
+ source: "raw"
18
+ });
19
+ }
20
+ function normalizeRuntimePlatform(platform) {
21
+ if (platform === "darwin") {
22
+ return "macos";
23
+ }
24
+ if (platform === "win32") {
25
+ return "windows";
26
+ }
27
+ if (platform === "linux") {
28
+ return "linux";
29
+ }
30
+ return "unknown";
31
+ }
32
+ function createOpenTuiHostMetadata(renderer) {
33
+ const platform = normalizeRuntimePlatform(process.platform);
34
+ const hasKittyKeyboard = renderer.capabilities?.kitty_keyboard === true;
35
+ return {
36
+ platform,
37
+ primaryModifier: platform === "macos" ? "super" : platform === "unknown" ? "unknown" : "ctrl",
38
+ modifiers: {
39
+ ctrl: "supported",
40
+ shift: "supported",
41
+ meta: "supported",
42
+ super: hasKittyKeyboard ? "supported" : "unknown",
43
+ hyper: hasKittyKeyboard ? "supported" : "unknown"
44
+ }
45
+ };
46
+ }
47
+ function createOpenTuiKeymapHost(renderer) {
48
+ return {
49
+ get metadata() {
50
+ return createOpenTuiHostMetadata(renderer);
51
+ },
52
+ rootTarget: renderer.root,
53
+ get isDestroyed() {
54
+ return renderer.isDestroyed;
55
+ },
56
+ getFocusedTarget() {
57
+ const focused = renderer.currentFocusedRenderable;
58
+ if (!focused || focused.isDestroyed || !focused.focused) {
59
+ return null;
60
+ }
61
+ return focused;
62
+ },
63
+ getParentTarget(target) {
64
+ return target.parent;
65
+ },
66
+ isTargetDestroyed(target) {
67
+ return target.isDestroyed;
68
+ },
69
+ onKeyPress(listener) {
70
+ renderer.keyInput.prependListener("keypress", listener);
71
+ return () => {
72
+ renderer.keyInput.off("keypress", listener);
73
+ };
74
+ },
75
+ onKeyRelease(listener) {
76
+ renderer.keyInput.prependListener("keyrelease", listener);
77
+ return () => {
78
+ renderer.keyInput.off("keyrelease", listener);
79
+ };
80
+ },
81
+ onFocusChange(listener) {
82
+ renderer.on(CliRenderEvents.FOCUSED_RENDERABLE, listener);
83
+ return () => {
84
+ renderer.off(CliRenderEvents.FOCUSED_RENDERABLE, listener);
85
+ };
86
+ },
87
+ onDestroy(listener) {
88
+ renderer.once(CliRenderEvents.DESTROY, listener);
89
+ return () => {
90
+ renderer.off(CliRenderEvents.DESTROY, listener);
91
+ };
92
+ },
93
+ onTargetDestroy(target, listener) {
94
+ target.once(RenderableEvents.DESTROYED, listener);
95
+ return () => {
96
+ target.off(RenderableEvents.DESTROYED, listener);
97
+ };
98
+ },
99
+ onRawInput(listener) {
100
+ renderer.prependInputHandler(listener);
101
+ return () => {
102
+ renderer.removeInputHandler(listener);
103
+ };
104
+ },
105
+ createCommandEvent() {
106
+ return createSyntheticCommandEvent();
107
+ }
108
+ };
109
+ }
110
+ function createOpenTuiKeymap(renderer) {
111
+ if (renderer.isDestroyed) {
112
+ throw new Error("Cannot create a keymap for a destroyed renderer");
113
+ }
114
+ return new Keymap(createOpenTuiKeymapHost(renderer));
115
+ }
116
+ function createDefaultOpenTuiKeymap(renderer) {
117
+ if (renderer.isDestroyed) {
118
+ throw new Error("Cannot create a keymap for a destroyed renderer");
119
+ }
120
+ const keymap = new Keymap(createOpenTuiKeymapHost(renderer));
121
+ registerDefaultKeys(keymap);
122
+ registerEnabledFields(keymap);
123
+ registerMetadataFields(keymap);
124
+ return keymap;
125
+ }
126
+ export {
127
+ createOpenTuiKeymapHost,
128
+ createOpenTuiKeymap,
129
+ createDefaultOpenTuiKeymap
130
+ };
131
+
132
+ //# debugId=7616A56E1652597164756E2164756E21
133
+ //# sourceMappingURL=opentui.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/opentui.ts"],
4
+ "sourcesContent": [
5
+ "import { CliRenderEvents, KeyEvent, RenderableEvents, type CliRenderer, type Renderable } from \"@opentui/core\"\nimport { Keymap, type HostMetadata, type HostPlatform, type KeymapHost } from \"@opentui/keymap\"\nimport { registerDefaultKeys, registerEnabledFields, registerMetadataFields } from \"@opentui/keymap/addons\"\n\nfunction createSyntheticCommandEvent(): KeyEvent {\n return new KeyEvent({\n name: \"command\",\n ctrl: false,\n meta: false,\n shift: false,\n option: false,\n sequence: \"\",\n number: false,\n raw: \"\",\n eventType: \"press\",\n source: \"raw\",\n })\n}\n\nfunction normalizeRuntimePlatform(platform: NodeJS.Platform | string | undefined): HostPlatform {\n if (platform === \"darwin\") {\n return \"macos\"\n }\n\n if (platform === \"win32\") {\n return \"windows\"\n }\n\n if (platform === \"linux\") {\n return \"linux\"\n }\n\n return \"unknown\"\n}\n\nfunction createOpenTuiHostMetadata(renderer: CliRenderer): HostMetadata {\n const platform = normalizeRuntimePlatform(process.platform)\n const hasKittyKeyboard = renderer.capabilities?.kitty_keyboard === true\n\n return {\n platform,\n primaryModifier: platform === \"macos\" ? \"super\" : platform === \"unknown\" ? \"unknown\" : \"ctrl\",\n modifiers: {\n ctrl: \"supported\",\n shift: \"supported\",\n meta: \"supported\",\n super: hasKittyKeyboard ? \"supported\" : \"unknown\",\n hyper: hasKittyKeyboard ? \"supported\" : \"unknown\",\n },\n }\n}\n\nexport function createOpenTuiKeymapHost(renderer: CliRenderer): KeymapHost<Renderable, KeyEvent> {\n return {\n get metadata() {\n return createOpenTuiHostMetadata(renderer)\n },\n rootTarget: renderer.root,\n get isDestroyed() {\n return renderer.isDestroyed\n },\n getFocusedTarget() {\n const focused = renderer.currentFocusedRenderable\n if (!focused || focused.isDestroyed || !focused.focused) {\n return null\n }\n\n return focused\n },\n getParentTarget(target) {\n return target.parent\n },\n isTargetDestroyed(target) {\n return target.isDestroyed\n },\n onKeyPress(listener) {\n renderer.keyInput.prependListener(\"keypress\", listener)\n return () => {\n renderer.keyInput.off(\"keypress\", listener)\n }\n },\n onKeyRelease(listener) {\n renderer.keyInput.prependListener(\"keyrelease\", listener)\n return () => {\n renderer.keyInput.off(\"keyrelease\", listener)\n }\n },\n onFocusChange(listener) {\n renderer.on(CliRenderEvents.FOCUSED_RENDERABLE, listener)\n return () => {\n renderer.off(CliRenderEvents.FOCUSED_RENDERABLE, listener)\n }\n },\n onDestroy(listener) {\n renderer.once(CliRenderEvents.DESTROY, listener)\n return () => {\n renderer.off(CliRenderEvents.DESTROY, listener)\n }\n },\n onTargetDestroy(target, listener) {\n target.once(RenderableEvents.DESTROYED, listener)\n return () => {\n target.off(RenderableEvents.DESTROYED, listener)\n }\n },\n onRawInput(listener) {\n renderer.prependInputHandler(listener)\n return () => {\n renderer.removeInputHandler(listener)\n }\n },\n createCommandEvent() {\n return createSyntheticCommandEvent()\n },\n }\n}\n\nexport function createOpenTuiKeymap(renderer: CliRenderer): Keymap<Renderable, KeyEvent> {\n if (renderer.isDestroyed) {\n throw new Error(\"Cannot create a keymap for a destroyed renderer\")\n }\n\n return new Keymap(createOpenTuiKeymapHost(renderer))\n}\n\nexport function createDefaultOpenTuiKeymap(renderer: CliRenderer): Keymap<Renderable, KeyEvent> {\n if (renderer.isDestroyed) {\n throw new Error(\"Cannot create a keymap for a destroyed renderer\")\n }\n\n const keymap = new Keymap(createOpenTuiKeymapHost(renderer))\n registerDefaultKeys(keymap)\n registerEnabledFields(keymap)\n registerMetadataFields(keymap)\n return keymap\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "7616A56E1652597164756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,5 +1,5 @@
1
1
  import type { KeyEvent, Renderable } from "@opentui/core";
2
- import { type ActiveKey, type ActiveKeyOptions, type LayerFields, type Keymap, type ReactiveMatcher, type KeySequencePart } from "../index.js";
2
+ import { type ActiveKey, type ActiveKeyOptions, type Layer, type Keymap, type ReactiveMatcher, type KeySequencePart, type TargetMode } from "../index.js";
3
3
  import { type DependencyList, type ReactNode } from "react";
4
4
  type OpenTuiKeymap = Keymap<Renderable, KeyEvent>;
5
5
  export interface KeymapProviderProps {
@@ -10,28 +10,14 @@ export declare function KeymapProvider({ keymap, children }: KeymapProviderProps
10
10
  export interface UseBindingsTargetRef<TRenderable extends Renderable = Renderable> {
11
11
  current: TRenderable | null;
12
12
  }
13
- type UseBindingsLayerBase = LayerFields<Renderable, KeyEvent>;
14
- export interface UseGlobalBindingsLayer extends UseBindingsLayerBase {
15
- targetRef?: undefined;
13
+ export interface UseBindingsLayer<TRenderable extends Renderable = Renderable> extends Omit<Layer<Renderable, KeyEvent>, "target" | "targetMode"> {
14
+ targetRef?: UseBindingsTargetRef<TRenderable>;
15
+ targetMode?: TargetMode;
16
16
  }
17
- export interface UseFocusBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
18
- targetMode: "focus";
19
- targetRef: UseBindingsTargetRef<TRenderable>;
20
- }
21
- export interface UseFocusWithinBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
22
- targetMode?: "focus-within";
23
- targetRef: UseBindingsTargetRef<TRenderable>;
24
- }
25
- export interface UseInferredFocusWithinBindingsLayer<TRenderable extends Renderable = Renderable> extends UseBindingsLayerBase {
26
- targetRef: UseBindingsTargetRef<TRenderable>;
27
- }
28
- export type UseTargetBindingsLayer<TRenderable extends Renderable = Renderable> = UseFocusBindingsLayer<TRenderable> | UseFocusWithinBindingsLayer<TRenderable> | UseInferredFocusWithinBindingsLayer<TRenderable>;
29
- export type UseBindingsLayer<TRenderable extends Renderable = Renderable> = UseGlobalBindingsLayer | UseTargetBindingsLayer<TRenderable>;
30
17
  export declare const useKeymap: () => OpenTuiKeymap;
31
18
  export declare const useActiveKeys: (options?: ActiveKeyOptions) => readonly ActiveKey[];
32
19
  export declare const usePendingSequence: () => readonly KeySequencePart[];
33
- export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () => UseGlobalBindingsLayer, deps?: DependencyList): void;
34
- export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () => UseTargetBindingsLayer<TRenderable>, deps?: DependencyList): void;
20
+ export declare function useBindings<TRenderable extends Renderable = Renderable>(createLayer: () => UseBindingsLayer<TRenderable>, deps?: DependencyList): void;
35
21
  /**
36
22
  * Adapts any `subscribe` + `getSnapshot` store to
37
23
  * `ReactiveMatcher`. Pass `predicate` when the snapshot value is not
@@ -122,3 +122,6 @@ export {
122
122
  reactiveMatcherFromStore,
123
123
  KeymapProvider
124
124
  };
125
+
126
+ //# debugId=88193D455507349A64756E2164756E21
127
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/react/index.ts"],
4
+ "sourcesContent": [
5
+ "import type { KeyEvent, Renderable } from \"@opentui/core\"\nimport {\n type ActiveKey,\n type ActiveKeyOptions,\n type Layer,\n type Keymap,\n type ReactiveMatcher,\n type KeySequencePart,\n type TargetMode,\n} from \"../index.js\"\nimport {\n createElement,\n createContext,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useMemo,\n useReducer,\n useRef,\n type DependencyList,\n type ReactNode,\n} from \"react\"\n\ntype OpenTuiKeymap = Keymap<Renderable, KeyEvent>\n\nconst KeymapContext = createContext<OpenTuiKeymap | null>(null)\n\nexport interface KeymapProviderProps {\n keymap: OpenTuiKeymap\n children?: ReactNode\n}\n\nexport function KeymapProvider({ keymap, children }: KeymapProviderProps) {\n return createElement(KeymapContext.Provider, { value: keymap }, children)\n}\n\nexport interface UseBindingsTargetRef<TRenderable extends Renderable = Renderable> {\n current: TRenderable | null\n}\n\nexport interface UseBindingsLayer<TRenderable extends Renderable = Renderable> extends Omit<\n Layer<Renderable, KeyEvent>,\n \"target\" | \"targetMode\"\n> {\n targetRef?: UseBindingsTargetRef<TRenderable>\n targetMode?: TargetMode\n}\n\nfunction resolveBindingsTarget(targetRef: UseBindingsTargetRef | undefined): Renderable | undefined {\n return targetRef?.current ?? 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\n// Use the batched `state` event for derived reads. Pending-sequence changes\n// already flow through `state`, so subscribing to both would duplicate work.\nfunction useKeymapStateVersion(keymap: OpenTuiKeymap): number {\n const [version, bumpVersion] = useReducer((value: number) => value + 1, 0)\n\n useLayoutEffect(() => {\n const dispose = keymap.on(\"state\", () => {\n bumpVersion()\n })\n\n return () => {\n dispose()\n }\n }, [keymap])\n\n return version\n}\n\nexport const useActiveKeys = (options?: ActiveKeyOptions): readonly ActiveKey[] => {\n const keymap = useKeymap()\n const version = useKeymapStateVersion(keymap)\n\n return useMemo(() => {\n void version\n return keymap.getActiveKeys(options)\n }, [keymap, options, version])\n}\n\nexport const usePendingSequence = (): readonly KeySequencePart[] => {\n const keymap = useKeymap()\n const version = useKeymapStateVersion(keymap)\n\n return useMemo(() => {\n void version\n return keymap.getPendingSequence()\n }, [keymap, version])\n}\n\nexport function useBindings<TRenderable extends Renderable = Renderable>(\n createLayer: () => UseBindingsLayer<TRenderable>,\n deps: DependencyList = [],\n): void {\n const keymap = useKeymap()\n const layer = useMemo(createLayer, deps)\n const layerRef = useRef(layer)\n const disposeRef = useRef<(() => void) | undefined>(undefined)\n const registeredLayerRef = useRef<UseBindingsLayer<TRenderable> | undefined>(undefined)\n const registeredTargetModeRef = useRef<TargetMode | undefined>(undefined)\n const registeredTargetRef = useRef<Renderable | undefined>(undefined)\n\n layerRef.current = layer\n\n const unregister = useCallback(() => {\n disposeRef.current?.()\n disposeRef.current = undefined\n registeredLayerRef.current = undefined\n registeredTargetModeRef.current = undefined\n registeredTargetRef.current = undefined\n }, [])\n\n useEffect(() => {\n const currentLayer = layerRef.current\n const hasExplicitTarget = currentLayer.targetRef !== undefined\n const explicitTarget = resolveBindingsTarget(currentLayer.targetRef)\n const nextTargetMode = currentLayer.targetMode ?? (hasExplicitTarget ? \"focus-within\" : undefined)\n const nextTarget = nextTargetMode ? explicitTarget : undefined\n\n if (!hasExplicitTarget && nextTargetMode) {\n throw new Error(\"useBindings local bindings need a targetRef\")\n }\n\n if (\n registeredLayerRef.current === currentLayer &&\n registeredTargetModeRef.current === nextTargetMode &&\n registeredTargetRef.current === nextTarget\n ) {\n return\n }\n\n unregister()\n\n if (!nextTarget && nextTargetMode) {\n registeredLayerRef.current = currentLayer\n registeredTargetModeRef.current = nextTargetMode\n registeredTargetRef.current = undefined\n return\n }\n\n const { targetRef: _targetRef, targetMode: _targetMode, ...baseLayer } = currentLayer\n disposeRef.current = keymap.registerLayer(\n !nextTargetMode\n ? {\n ...baseLayer,\n }\n : {\n ...baseLayer,\n target: nextTarget!,\n targetMode: nextTargetMode,\n },\n )\n registeredLayerRef.current = currentLayer\n registeredTargetModeRef.current = nextTargetMode\n registeredTargetRef.current = nextTarget\n })\n\n useEffect(() => {\n return () => {\n unregister()\n }\n }, [unregister])\n}\n\n/**\n * Adapts any `subscribe` + `getSnapshot` store to\n * `ReactiveMatcher`. Pass `predicate` when the snapshot value is not\n * already boolean.\n */\nexport function reactiveMatcherFromStore<T>(\n subscribe: (onStoreChange: () => void) => () => void,\n getSnapshot: () => T,\n predicate?: (value: T) => boolean,\n): ReactiveMatcher {\n return {\n get() {\n return predicate ? predicate(getSnapshot()) : Boolean(getSnapshot())\n },\n subscribe(onChange) {\n return subscribe(onChange)\n },\n }\n}\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "88193D455507349A64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,20 @@
1
+ import * as keymap from "@opentui/keymap";
2
+ import * as keymapExtras from "@opentui/keymap/extras";
3
+ import * as keymapGraphExtra from "@opentui/keymap/extras/graph";
4
+ import * as keymapAddons from "@opentui/keymap/addons";
5
+ import * as keymapOpenTuiAddons from "@opentui/keymap/addons/opentui";
6
+ import * as keymapHtml from "@opentui/keymap/html";
7
+ import * as keymapOpenTui from "@opentui/keymap/opentui";
8
+ import * as keymapReact from "@opentui/keymap/react";
9
+ import * as keymapSolid from "@opentui/keymap/solid";
10
+ export declare const runtimeModules: {
11
+ "@opentui/keymap": typeof keymap;
12
+ "@opentui/keymap/extras": typeof keymapExtras;
13
+ "@opentui/keymap/extras/graph": typeof keymapGraphExtra;
14
+ "@opentui/keymap/addons": typeof keymapAddons;
15
+ "@opentui/keymap/addons/opentui": typeof keymapOpenTuiAddons;
16
+ "@opentui/keymap/html": typeof keymapHtml;
17
+ "@opentui/keymap/opentui": typeof keymapOpenTui;
18
+ "@opentui/keymap/react": typeof keymapReact;
19
+ "@opentui/keymap/solid": typeof keymapSolid;
20
+ };
@@ -0,0 +1,28 @@
1
+ // @bun
2
+ // src/runtime-modules.ts
3
+ import * as keymap from "@opentui/keymap";
4
+ import * as keymapExtras from "@opentui/keymap/extras";
5
+ import * as keymapGraphExtra from "@opentui/keymap/extras/graph";
6
+ import * as keymapAddons from "@opentui/keymap/addons";
7
+ import * as keymapOpenTuiAddons from "@opentui/keymap/addons/opentui";
8
+ import * as keymapHtml from "@opentui/keymap/html";
9
+ import * as keymapOpenTui from "@opentui/keymap/opentui";
10
+ import * as keymapReact from "@opentui/keymap/react";
11
+ import * as keymapSolid from "@opentui/keymap/solid";
12
+ var runtimeModules = {
13
+ "@opentui/keymap": keymap,
14
+ "@opentui/keymap/extras": keymapExtras,
15
+ "@opentui/keymap/extras/graph": keymapGraphExtra,
16
+ "@opentui/keymap/addons": keymapAddons,
17
+ "@opentui/keymap/addons/opentui": keymapOpenTuiAddons,
18
+ "@opentui/keymap/html": keymapHtml,
19
+ "@opentui/keymap/opentui": keymapOpenTui,
20
+ "@opentui/keymap/react": keymapReact,
21
+ "@opentui/keymap/solid": keymapSolid
22
+ };
23
+ export {
24
+ runtimeModules
25
+ };
26
+
27
+ //# debugId=0BF94D448A4CF4C764756E2164756E21
28
+ //# sourceMappingURL=runtime-modules.js.map
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/runtime-modules.ts"],
4
+ "sourcesContent": [
5
+ "import type { RuntimeModuleEntry } from \"@opentui/core/runtime-plugin\"\nimport * as keymap from \"@opentui/keymap\"\nimport * as keymapExtras from \"@opentui/keymap/extras\"\nimport * as keymapGraphExtra from \"@opentui/keymap/extras/graph\"\nimport * as keymapAddons from \"@opentui/keymap/addons\"\nimport * as keymapOpenTuiAddons from \"@opentui/keymap/addons/opentui\"\nimport * as keymapHtml from \"@opentui/keymap/html\"\nimport * as keymapOpenTui from \"@opentui/keymap/opentui\"\nimport * as keymapReact from \"@opentui/keymap/react\"\nimport * as keymapSolid from \"@opentui/keymap/solid\"\n\nexport const runtimeModules = {\n \"@opentui/keymap\": keymap,\n \"@opentui/keymap/extras\": keymapExtras,\n \"@opentui/keymap/extras/graph\": keymapGraphExtra,\n \"@opentui/keymap/addons\": keymapAddons,\n \"@opentui/keymap/addons/opentui\": keymapOpenTuiAddons,\n \"@opentui/keymap/html\": keymapHtml,\n \"@opentui/keymap/opentui\": keymapOpenTui,\n \"@opentui/keymap/react\": keymapReact,\n \"@opentui/keymap/solid\": keymapSolid,\n} satisfies Record<string, RuntimeModuleEntry>\n"
6
+ ],
7
+ "mappings": ";;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,IAAM,iBAAiB;AAAA,EAC5B,mBAAmB;AAAA,EACnB,0BAA0B;AAAA,EAC1B,gCAAgC;AAAA,EAChC,0BAA0B;AAAA,EAC1B,kCAAkC;AAAA,EAClC,wBAAwB;AAAA,EACxB,2BAA2B;AAAA,EAC3B,yBAAyB;AAAA,EACzB,yBAAyB;AAC3B;",
8
+ "debugId": "0BF94D448A4CF4C764756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,5 +1,5 @@
1
- import type { Emitter } from "../lib/emitter.js";
2
- import type { ActiveBinding, ActiveKey, ActiveKeyOptions, CompiledBinding, Hooks, KeymapEvent, KeymapHost, PendingSequenceCapture, KeySequencePart, PendingSequenceState, RegisteredLayer, SequenceNode } from "../types.js";
1
+ import type { RuntimeEmitter } from "../lib/runtime-utils.js";
2
+ import type { ActiveBinding, ActiveKey, ActiveKeyOptions, BindingState, Hooks, KeymapEvent, KeymapHost, PendingSequenceCapture, KeySequencePart, PendingSequenceState, RegisteredLayer } from "../types.js";
3
3
  import type { CommandCatalogService } from "./command-catalog.js";
4
4
  import type { ConditionService } from "./conditions.js";
5
5
  import type { NotificationService } from "./notify.js";
@@ -7,15 +7,7 @@ import type { ActiveCommandView, State } from "./state.js";
7
7
  interface ActivationOptions<TTarget extends object, TEvent extends KeymapEvent> {
8
8
  onPendingSequenceChanged?: (previous: PendingSequenceState<TTarget, TEvent> | null, next: PendingSequenceState<TTarget, TEvent> | null) => void;
9
9
  }
10
- export declare class ActivationService<TTarget extends object, TEvent extends KeymapEvent> {
11
- private readonly state;
12
- private readonly host;
13
- private readonly hooks;
14
- private readonly notify;
15
- private readonly conditions;
16
- private readonly catalog;
17
- private readonly options;
18
- constructor(state: State<TTarget, TEvent>, host: KeymapHost<TTarget, TEvent>, hooks: Emitter<Hooks<TTarget, TEvent>>, notify: NotificationService<TTarget, TEvent>, conditions: ConditionService<TTarget, TEvent>, catalog: CommandCatalogService<TTarget, TEvent>, options?: ActivationOptions<TTarget, TEvent>);
10
+ export interface ActivationService<TTarget extends object, TEvent extends KeymapEvent> {
19
11
  getFocusedTarget(): TTarget | null;
20
12
  getFocusedTargetIfAvailable(): TTarget | null;
21
13
  setPendingSequence(next: PendingSequenceState<TTarget, TEvent> | null): void;
@@ -26,30 +18,12 @@ export declare class ActivationService<TTarget extends object, TEvent extends Ke
26
18
  popPendingSequence(): boolean;
27
19
  getActiveKeys(options?: ActiveKeyOptions): readonly ActiveKey<TTarget, TEvent>[];
28
20
  getActiveKeysForCaptures(captures: readonly PendingSequenceCapture<TTarget, TEvent>[], options?: ActiveKeyOptions): readonly ActiveKey<TTarget, TEvent>[];
29
- nodeHasReachableBindings(node: SequenceNode<TTarget, TEvent>, focused: TTarget | null): boolean;
21
+ getActiveKeysForFocused(focused: TTarget | null, options?: ActiveKeyOptions): readonly ActiveKey<TTarget, TEvent>[];
30
22
  getActiveLayers(focused: TTarget | null): RegisteredLayer<TTarget, TEvent>[];
31
- refreshActiveLayers(focused?: TTarget | null): void;
32
- invalidateActiveLayers(): void;
33
23
  isLayerActiveForFocused(layer: RegisteredLayer<TTarget, TEvent>, focused: TTarget | null): boolean;
34
- layerCanCacheActiveKeys(layer: RegisteredLayer<TTarget, TEvent>): boolean;
35
- activeLayersCanCacheActiveKeys(activeLayers: readonly RegisteredLayer<TTarget, TEvent>[]): boolean;
36
- private collectNodesFromNode;
37
24
  collectSequencePartsFromPending(pending: PendingSequenceState<TTarget, TEvent>): KeySequencePart[];
38
- collectMatchingBindings(bindings: readonly CompiledBinding<TTarget, TEvent>[], focused: TTarget | null, activeView: ActiveCommandView<TTarget, TEvent>): CompiledBinding<TTarget, TEvent>[];
39
- private hasMatchingBindings;
40
- private getNodePresentation;
41
- private toActiveBinding;
42
- collectActiveBindings(bindings: readonly CompiledBinding<TTarget, TEvent>[], focused: TTarget | null, activeView: ActiveCommandView<TTarget, TEvent>): ActiveBinding<TTarget, TEvent>[];
43
- private collectActiveKeysAtRoot;
44
- private collectActiveKeysFromPending;
45
- private selectActiveKey;
46
- private selectPrefixActiveKey;
47
- private selectExactActiveKey;
48
- private selectActiveBindings;
49
- private createActiveKeyState;
50
- private updateActiveKeyState;
51
- private materializeActiveKey;
52
- private invalidateCaches;
53
- private notifyPendingSequenceChange;
25
+ collectMatchingBindings(bindings: readonly BindingState<TTarget, TEvent>[], focused: TTarget | null, activeView: ActiveCommandView<TTarget, TEvent>): BindingState<TTarget, TEvent>[];
26
+ collectActiveBindings(bindings: readonly BindingState<TTarget, TEvent>[], focused: TTarget | null, activeView: ActiveCommandView<TTarget, TEvent>): ActiveBinding<TTarget, TEvent>[];
54
27
  }
28
+ export declare function createActivationService<TTarget extends object, TEvent extends KeymapEvent>(state: State<TTarget, TEvent>, host: KeymapHost<TTarget, TEvent>, hooks: RuntimeEmitter<Hooks<TTarget, TEvent>>, notify: NotificationService<TTarget, TEvent>, conditions: ConditionService<TTarget, TEvent>, catalog: CommandCatalogService<TTarget, TEvent>, options?: ActivationOptions<TTarget, TEvent>): ActivationService<TTarget, TEvent>;
55
29
  export {};
@@ -0,0 +1,29 @@
1
+ import type { ActiveKey, ActiveKeyOptions, KeymapEvent } from "../types.js";
2
+ export interface ActiveKeysCache<TTarget extends object, TEvent extends KeymapEvent> {
3
+ version: number;
4
+ notifyVersion: number;
5
+ focused: TTarget | null | undefined;
6
+ value: readonly ActiveKey<TTarget, TEvent>[];
7
+ targets: WeakMap<TTarget, {
8
+ version: number;
9
+ value: readonly ActiveKey<TTarget, TEvent>[];
10
+ }>;
11
+ nullTarget?: {
12
+ version: number;
13
+ value: readonly ActiveKey<TTarget, TEvent>[];
14
+ };
15
+ }
16
+ export interface ActiveKeysCaches<TTarget extends object, TEvent extends KeymapEvent> {
17
+ plain: ActiveKeysCache<TTarget, TEvent>;
18
+ bindings: ActiveKeysCache<TTarget, TEvent>;
19
+ metadata: ActiveKeysCache<TTarget, TEvent>;
20
+ bindingsAndMetadata: ActiveKeysCache<TTarget, TEvent>;
21
+ }
22
+ export declare function createActiveKeysCache<TTarget extends object, TEvent extends KeymapEvent>(): ActiveKeysCache<TTarget, TEvent>;
23
+ export declare function createActiveKeysCaches<TTarget extends object, TEvent extends KeymapEvent>(): ActiveKeysCaches<TTarget, TEvent>;
24
+ export declare function getActiveKeysCache<TTarget extends object, TEvent extends KeymapEvent>(caches: ActiveKeysCaches<TTarget, TEvent>, options?: ActiveKeyOptions): ActiveKeysCache<TTarget, TEvent>;
25
+ export declare function getFocusedActiveKeysCache<TTarget extends object, TEvent extends KeymapEvent>(cache: ActiveKeysCache<TTarget, TEvent>, cacheVersion: number, focused: TTarget | null): {
26
+ version: number;
27
+ value: readonly ActiveKey<TTarget, TEvent>[];
28
+ } | undefined;
29
+ export declare function setFocusedActiveKeysCache<TTarget extends object, TEvent extends KeymapEvent>(cache: ActiveKeysCache<TTarget, TEvent>, cacheVersion: number, focused: TTarget | null, value: readonly ActiveKey<TTarget, TEvent>[]): void;