@opentui/keymap 0.2.3 → 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/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "main": "src/index.js",
5
5
  "types": "src/index.d.ts",
6
6
  "type": "module",
7
- "version": "0.2.3",
7
+ "version": "0.2.4",
8
8
  "description": "Standalone keymap package for OpenTUI",
9
9
  "license": "MIT",
10
10
  "repository": {
@@ -70,7 +70,7 @@
70
70
  }
71
71
  },
72
72
  "dependencies": {
73
- "@opentui/core": "0.2.3"
73
+ "@opentui/core": "0.2.4"
74
74
  },
75
75
  "devDependencies": {
76
76
  "@opentui/react": "workspace:*",
@@ -83,8 +83,8 @@
83
83
  "typescript": "^5"
84
84
  },
85
85
  "peerDependencies": {
86
- "@opentui/react": "0.2.3",
87
- "@opentui/solid": "0.2.3",
86
+ "@opentui/react": "0.2.4",
87
+ "@opentui/solid": "0.2.4",
88
88
  "react": ">=19.2.0",
89
89
  "solid-js": "1.9.12"
90
90
  },
@@ -4,15 +4,24 @@ export type BindingValue<TTarget extends object = object, TEvent extends KeymapE
4
4
  export type BindingSectionConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<Record<string, BindingValue<TTarget, TEvent>>>;
5
5
  export type BindingSectionsConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<Record<string, BindingSectionConfig<TTarget, TEvent>>>;
6
6
  type LiteralStringKeys<T> = string extends Extract<keyof T, string> ? never : Extract<keyof T, string>;
7
+ export interface BindingDefaultsContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
8
+ section: string;
9
+ command: string;
10
+ binding: Readonly<Binding<TTarget, TEvent>>;
11
+ }
12
+ export type BindingDefaults<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = (ctx: BindingDefaultsContext<TTarget, TEvent>) => Readonly<Record<string, unknown>> | void;
7
13
  export interface ResolvedBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent, TSection extends string = string> {
8
14
  sections: Record<TSection, Binding<TTarget, TEvent>[]>;
9
15
  get(section: string, cmd: string): readonly Binding<TTarget, TEvent>[] | undefined;
16
+ pick(section: string, commands: readonly string[]): Binding<TTarget, TEvent>[];
17
+ omit(section: string, commands: readonly string[]): Binding<TTarget, TEvent>[];
10
18
  }
11
- export interface ResolveBindingSectionsOptions<TSection extends string = string> {
19
+ export interface ResolveBindingSectionsOptions<TSection extends string = string, TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {
12
20
  sections?: readonly TSection[];
21
+ bindingDefaults?: BindingDefaults<TTarget, TEvent>;
13
22
  }
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> & {
23
+ 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, TTarget, TEvent> & {
15
24
  sections: readonly TSection[];
16
25
  }): 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>;
26
+ export declare function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(config: BindingSectionsConfig<TTarget, TEvent>, options?: ResolveBindingSectionsOptions<string, TTarget, TEvent>): ResolvedBindingSections<TTarget, TEvent>;
18
27
  export {};
@@ -37,7 +37,7 @@ function resolveBindingItem(section, command, item, index) {
37
37
  cmd: command
38
38
  };
39
39
  }
40
- function resolveBindingValue(section, command, value) {
40
+ function resolveBindingValue(section, command, value, bindingDefaults) {
41
41
  if (value === false || value === "none") {
42
42
  return;
43
43
  }
@@ -48,15 +48,24 @@ function resolveBindingValue(section, command, value) {
48
48
  const items = value;
49
49
  const bindings = new Array(items.length);
50
50
  for (let index = 0;index < items.length; index += 1) {
51
- bindings[index] = resolveBindingItem(section, command, items[index], index);
51
+ const binding2 = resolveBindingItem(section, command, items[index], index);
52
+ bindings[index] = bindingDefaults ? withBindingDefaults(section, command, binding2, bindingDefaults) : binding2;
52
53
  }
53
54
  return bindings;
54
55
  }
55
- return [resolveBindingItem(section, command, value)];
56
+ const binding = resolveBindingItem(section, command, value);
57
+ return [bindingDefaults ? withBindingDefaults(section, command, binding, bindingDefaults) : binding];
58
+ }
59
+ function withBindingDefaults(section, command, binding, bindingDefaults) {
60
+ const defaults = bindingDefaults?.({ section, command, binding });
61
+ if (!defaults)
62
+ return binding;
63
+ return { ...defaults, ...binding };
56
64
  }
57
65
  function resolveBindingSections(config, options) {
58
66
  const sections = {};
59
67
  const lookups = new Map;
68
+ const bindingDefaults = options?.bindingDefaults;
60
69
  for (const section of options?.sections ?? []) {
61
70
  sections[section] = [];
62
71
  lookups.set(section, new Map);
@@ -75,7 +84,7 @@ function resolveBindingSections(config, options) {
75
84
  continue;
76
85
  }
77
86
  const command = rawCommand.trim();
78
- const bindings = resolveBindingValue(section, command, sectionConfig[rawCommand]);
87
+ const bindings = resolveBindingValue(section, command, sectionConfig[rawCommand], bindingDefaults);
79
88
  if (!bindings) {
80
89
  sectionLookup.delete(command);
81
90
  continue;
@@ -101,6 +110,37 @@ function resolveBindingSections(config, options) {
101
110
  sections,
102
111
  get(section, cmd) {
103
112
  return lookups.get(section)?.get(cmd.trim());
113
+ },
114
+ pick(section, commands) {
115
+ const lookup = lookups.get(section);
116
+ if (!lookup)
117
+ return [];
118
+ const result = [];
119
+ for (const command of commands) {
120
+ const bindings = lookup.get(command);
121
+ if (!bindings)
122
+ continue;
123
+ for (let index = 0;index < bindings.length; index += 1) {
124
+ result.push(bindings[index]);
125
+ }
126
+ }
127
+ return result;
128
+ },
129
+ omit(section, commands) {
130
+ const sectionBindings = sections[section];
131
+ if (!sectionBindings)
132
+ return [];
133
+ if (commands.length === 0)
134
+ return sectionBindings.slice();
135
+ const omitted = new Set(commands);
136
+ const result = [];
137
+ for (let index = 0;index < sectionBindings.length; index += 1) {
138
+ const binding = sectionBindings[index];
139
+ if (typeof binding.cmd === "string" && omitted.has(binding.cmd))
140
+ continue;
141
+ result.push(binding);
142
+ }
143
+ return result;
104
144
  }
105
145
  };
106
146
  }
@@ -235,5 +275,5 @@ export {
235
275
  commandBindings
236
276
  };
237
277
 
238
- //# debugId=7BE7E370039A4BC264756E2164756E21
278
+ //# debugId=12505B3C78ECCBFB64756E2164756E21
239
279
  //# sourceMappingURL=index.js.map
@@ -2,11 +2,11 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/extras/binding-sections.ts", "../src/extras/command-bindings.ts", "../src/extras/formatting.ts"],
4
4
  "sourcesContent": [
5
- "// Opinionated config-to-keymap transformation helper. Treat this as one\n// practical shape you can copy and adjust for application-specific needs.\nimport type { Binding, KeyLike, KeymapEvent } from \"../types.js\"\n\nexport type BindingSectionItem<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> =\n | KeyLike\n | Binding<TTarget, TEvent>\n\nexport type BindingValue<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> =\n | false\n | \"none\"\n | BindingSectionItem<TTarget, TEvent>\n | readonly BindingSectionItem<TTarget, TEvent>[]\n\nexport type BindingSectionConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<\n Record<string, BindingValue<TTarget, TEvent>>\n>\n\nexport type BindingSectionsConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<\n Record<string, BindingSectionConfig<TTarget, TEvent>>\n>\n\ntype LiteralStringKeys<T> = string extends Extract<keyof T, string> ? never : Extract<keyof T, string>\n\nconst hasOwn = Object.prototype.hasOwnProperty\n\nexport interface ResolvedBindingSections<\n TTarget extends object = object,\n TEvent extends KeymapEvent = KeymapEvent,\n TSection extends string = string,\n> {\n sections: Record<TSection, Binding<TTarget, TEvent>[]>\n get(section: string, cmd: string): readonly Binding<TTarget, TEvent>[] | undefined\n}\n\nexport interface ResolveBindingSectionsOptions<TSection extends string = string> {\n sections?: readonly TSection[]\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction isKeyLike(value: unknown): value is KeyLike {\n return typeof value === \"string\" || isObject(value)\n}\n\nfunction cloneKeyLike(key: KeyLike): KeyLike {\n if (typeof key === \"string\") {\n return key\n }\n\n return { ...key }\n}\n\nfunction invalidBindingValue(section: string, command: string, index?: number): Error {\n const location = index === undefined ? `\"${section}.${command}\"` : `\"${section}.${command}\" at index ${index}`\n return new Error(\n `Invalid binding value for ${location}: expected false, a key, a binding object, or an array of keys/binding objects`,\n )\n}\n\nfunction resolveBindingItem<TTarget extends object, TEvent extends KeymapEvent>(\n section: string,\n command: string,\n item: BindingSectionItem<TTarget, TEvent>,\n index?: number,\n): Binding<TTarget, TEvent> {\n if (!isKeyLike(item)) {\n throw invalidBindingValue(section, command, index)\n }\n\n if (typeof item === \"string\" || !(\"key\" in item)) {\n return {\n key: cloneKeyLike(item),\n cmd: command,\n }\n }\n\n const key = item.key\n if (!isKeyLike(key)) {\n throw invalidBindingValue(section, command, index)\n }\n\n return {\n ...item,\n key: cloneKeyLike(key),\n cmd: command,\n }\n}\n\nfunction resolveBindingValue<TTarget extends object, TEvent extends KeymapEvent>(\n section: string,\n command: string,\n value: BindingValue<TTarget, TEvent>,\n): Binding<TTarget, TEvent>[] | undefined {\n if (value === false || value === \"none\") {\n return undefined\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return undefined\n }\n\n const items = value as readonly BindingSectionItem<TTarget, TEvent>[]\n const bindings = new Array<Binding<TTarget, TEvent>>(items.length)\n for (let index = 0; index < items.length; index += 1) {\n bindings[index] = resolveBindingItem(section, command, items[index]!, index)\n }\n\n return bindings\n }\n\n return [resolveBindingItem(section, command, value as BindingSectionItem<TTarget, TEvent>)]\n}\n\nexport function resolveBindingSections<\n TTarget extends object = object,\n TEvent extends KeymapEvent = KeymapEvent,\n const TConfig extends BindingSectionsConfig<TTarget, TEvent> = BindingSectionsConfig<TTarget, TEvent>,\n const TSection extends string = string,\n>(\n config: TConfig,\n options: ResolveBindingSectionsOptions<TSection> & { sections: readonly TSection[] },\n): ResolvedBindingSections<TTarget, TEvent, TSection | LiteralStringKeys<TConfig>>\nexport function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(\n config: BindingSectionsConfig<TTarget, TEvent>,\n options?: ResolveBindingSectionsOptions,\n): ResolvedBindingSections<TTarget, TEvent>\nexport function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(\n config: BindingSectionsConfig<TTarget, TEvent>,\n options?: ResolveBindingSectionsOptions,\n): ResolvedBindingSections<TTarget, TEvent> {\n const sections: Record<string, Binding<TTarget, TEvent>[]> = {}\n const lookups = new Map<string, Map<string, Binding<TTarget, TEvent>[]>>()\n\n for (const section of options?.sections ?? []) {\n sections[section] = []\n lookups.set(section, new Map())\n }\n\n // Own-property loops avoid Object.entries allocations while still ignoring inherited config.\n for (const section in config) {\n if (!hasOwn.call(config, section)) {\n continue\n }\n\n const sectionConfig = config[section]\n if (!isObject(sectionConfig)) {\n throw new Error(`Invalid binding section \"${section}\": expected an object`)\n }\n\n const sectionLookup = new Map<string, Binding<TTarget, TEvent>[]>()\n\n for (const rawCommand in sectionConfig) {\n if (!hasOwn.call(sectionConfig, rawCommand)) {\n continue\n }\n\n const command = rawCommand.trim()\n const bindings = resolveBindingValue(section, command, sectionConfig[rawCommand]!)\n\n if (!bindings) {\n sectionLookup.delete(command)\n continue\n }\n\n sectionLookup.set(command, bindings)\n }\n\n // Manual flattening avoids Array.flat allocations on large generated configs.\n let sectionBindingCount = 0\n for (const bindings of sectionLookup.values()) {\n sectionBindingCount += bindings.length\n }\n\n const sectionBindings = new Array<Binding<TTarget, TEvent>>(sectionBindingCount)\n let bindingIndex = 0\n for (const bindings of sectionLookup.values()) {\n for (let index = 0; index < bindings.length; index += 1) {\n sectionBindings[bindingIndex] = bindings[index]!\n bindingIndex += 1\n }\n }\n\n sections[section] = sectionBindings\n lookups.set(section, sectionLookup)\n }\n\n return {\n sections,\n get(section, cmd) {\n return lookups.get(section)?.get(cmd.trim())\n },\n }\n}\n",
5
+ "// Opinionated config-to-keymap transformation helper. Treat this as one\n// practical shape you can copy and adjust for application-specific needs.\nimport type { Binding, KeyLike, KeymapEvent } from \"../types.js\"\n\nexport type BindingSectionItem<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> =\n | KeyLike\n | Binding<TTarget, TEvent>\n\nexport type BindingValue<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> =\n | false\n | \"none\"\n | BindingSectionItem<TTarget, TEvent>\n | readonly BindingSectionItem<TTarget, TEvent>[]\n\nexport type BindingSectionConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<\n Record<string, BindingValue<TTarget, TEvent>>\n>\n\nexport type BindingSectionsConfig<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = Readonly<\n Record<string, BindingSectionConfig<TTarget, TEvent>>\n>\n\ntype LiteralStringKeys<T> = string extends Extract<keyof T, string> ? never : Extract<keyof T, string>\n\nconst hasOwn = Object.prototype.hasOwnProperty\n\nexport interface BindingDefaultsContext<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> {\n section: string\n command: string\n binding: Readonly<Binding<TTarget, TEvent>>\n}\n\nexport type BindingDefaults<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent> = (\n ctx: BindingDefaultsContext<TTarget, TEvent>,\n) => Readonly<Record<string, unknown>> | void\n\nexport interface ResolvedBindingSections<\n TTarget extends object = object,\n TEvent extends KeymapEvent = KeymapEvent,\n TSection extends string = string,\n> {\n sections: Record<TSection, Binding<TTarget, TEvent>[]>\n get(section: string, cmd: string): readonly Binding<TTarget, TEvent>[] | undefined\n pick(section: string, commands: readonly string[]): Binding<TTarget, TEvent>[]\n omit(section: string, commands: readonly string[]): Binding<TTarget, TEvent>[]\n}\n\nexport interface ResolveBindingSectionsOptions<\n TSection extends string = string,\n TTarget extends object = object,\n TEvent extends KeymapEvent = KeymapEvent,\n> {\n sections?: readonly TSection[]\n bindingDefaults?: BindingDefaults<TTarget, TEvent>\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value)\n}\n\nfunction isKeyLike(value: unknown): value is KeyLike {\n return typeof value === \"string\" || isObject(value)\n}\n\nfunction cloneKeyLike(key: KeyLike): KeyLike {\n if (typeof key === \"string\") {\n return key\n }\n\n return { ...key }\n}\n\nfunction invalidBindingValue(section: string, command: string, index?: number): Error {\n const location = index === undefined ? `\"${section}.${command}\"` : `\"${section}.${command}\" at index ${index}`\n return new Error(\n `Invalid binding value for ${location}: expected false, a key, a binding object, or an array of keys/binding objects`,\n )\n}\n\nfunction resolveBindingItem<TTarget extends object, TEvent extends KeymapEvent>(\n section: string,\n command: string,\n item: BindingSectionItem<TTarget, TEvent>,\n index?: number,\n): Binding<TTarget, TEvent> {\n if (!isKeyLike(item)) {\n throw invalidBindingValue(section, command, index)\n }\n\n if (typeof item === \"string\" || !(\"key\" in item)) {\n return {\n key: cloneKeyLike(item),\n cmd: command,\n }\n }\n\n const key = item.key\n if (!isKeyLike(key)) {\n throw invalidBindingValue(section, command, index)\n }\n\n return {\n ...item,\n key: cloneKeyLike(key),\n cmd: command,\n }\n}\n\nfunction resolveBindingValue<TTarget extends object, TEvent extends KeymapEvent>(\n section: string,\n command: string,\n value: BindingValue<TTarget, TEvent>,\n bindingDefaults: BindingDefaults<TTarget, TEvent> | undefined,\n): Binding<TTarget, TEvent>[] | undefined {\n if (value === false || value === \"none\") {\n return undefined\n }\n\n if (Array.isArray(value)) {\n if (value.length === 0) {\n return undefined\n }\n\n const items = value as readonly BindingSectionItem<TTarget, TEvent>[]\n const bindings = new Array<Binding<TTarget, TEvent>>(items.length)\n for (let index = 0; index < items.length; index += 1) {\n const binding = resolveBindingItem(section, command, items[index]!, index)\n bindings[index] = bindingDefaults ? withBindingDefaults(section, command, binding, bindingDefaults) : binding\n }\n\n return bindings\n }\n\n const binding = resolveBindingItem(section, command, value as BindingSectionItem<TTarget, TEvent>)\n return [bindingDefaults ? withBindingDefaults(section, command, binding, bindingDefaults) : binding]\n}\n\nfunction withBindingDefaults<TTarget extends object, TEvent extends KeymapEvent>(\n section: string,\n command: string,\n binding: Binding<TTarget, TEvent>,\n bindingDefaults: BindingDefaults<TTarget, TEvent> | undefined,\n): Binding<TTarget, TEvent> {\n const defaults = bindingDefaults?.({ section, command, binding })\n if (!defaults) return binding\n return { ...defaults, ...binding }\n}\n\nexport function resolveBindingSections<\n TTarget extends object = object,\n TEvent extends KeymapEvent = KeymapEvent,\n const TConfig extends BindingSectionsConfig<TTarget, TEvent> = BindingSectionsConfig<TTarget, TEvent>,\n const TSection extends string = string,\n>(\n config: TConfig,\n options: ResolveBindingSectionsOptions<TSection, TTarget, TEvent> & { sections: readonly TSection[] },\n): ResolvedBindingSections<TTarget, TEvent, TSection | LiteralStringKeys<TConfig>>\nexport function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(\n config: BindingSectionsConfig<TTarget, TEvent>,\n options?: ResolveBindingSectionsOptions<string, TTarget, TEvent>,\n): ResolvedBindingSections<TTarget, TEvent>\nexport function resolveBindingSections<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(\n config: BindingSectionsConfig<TTarget, TEvent>,\n options?: ResolveBindingSectionsOptions<string, TTarget, TEvent>,\n): ResolvedBindingSections<TTarget, TEvent> {\n const sections: Record<string, Binding<TTarget, TEvent>[]> = {}\n const lookups = new Map<string, Map<string, Binding<TTarget, TEvent>[]>>()\n const bindingDefaults = options?.bindingDefaults\n\n for (const section of options?.sections ?? []) {\n sections[section] = []\n lookups.set(section, new Map())\n }\n\n // Own-property loops avoid Object.entries allocations while still ignoring inherited config.\n for (const section in config) {\n if (!hasOwn.call(config, section)) {\n continue\n }\n\n const sectionConfig = config[section]\n if (!isObject(sectionConfig)) {\n throw new Error(`Invalid binding section \"${section}\": expected an object`)\n }\n\n const sectionLookup = new Map<string, Binding<TTarget, TEvent>[]>()\n\n for (const rawCommand in sectionConfig) {\n if (!hasOwn.call(sectionConfig, rawCommand)) {\n continue\n }\n\n const command = rawCommand.trim()\n const bindings = resolveBindingValue(section, command, sectionConfig[rawCommand]!, bindingDefaults)\n\n if (!bindings) {\n sectionLookup.delete(command)\n continue\n }\n\n sectionLookup.set(command, bindings)\n }\n\n // Manual flattening avoids Array.flat allocations on large generated configs.\n let sectionBindingCount = 0\n for (const bindings of sectionLookup.values()) {\n sectionBindingCount += bindings.length\n }\n\n const sectionBindings = new Array<Binding<TTarget, TEvent>>(sectionBindingCount)\n let bindingIndex = 0\n for (const bindings of sectionLookup.values()) {\n for (let index = 0; index < bindings.length; index += 1) {\n sectionBindings[bindingIndex] = bindings[index]!\n bindingIndex += 1\n }\n }\n\n sections[section] = sectionBindings\n lookups.set(section, sectionLookup)\n }\n\n return {\n sections,\n get(section, cmd) {\n return lookups.get(section)?.get(cmd.trim())\n },\n pick(section, commands) {\n const lookup = lookups.get(section)\n if (!lookup) return []\n\n const result: Binding<TTarget, TEvent>[] = []\n for (const command of commands) {\n const bindings = lookup.get(command)\n if (!bindings) continue\n for (let index = 0; index < bindings.length; index += 1) {\n result.push(bindings[index]!)\n }\n }\n\n return result\n },\n omit(section, commands) {\n const sectionBindings = sections[section]\n if (!sectionBindings) return []\n if (commands.length === 0) return sectionBindings.slice()\n\n const omitted = new Set(commands)\n const result: Binding<TTarget, TEvent>[] = []\n for (let index = 0; index < sectionBindings.length; index += 1) {\n const binding = sectionBindings[index]!\n if (typeof binding.cmd === \"string\" && omitted.has(binding.cmd)) continue\n result.push(binding)\n }\n\n return result\n },\n }\n}\n",
6
6
  "import type { Binding, KeyLike, KeymapEvent } from \"../types.js\"\n\nexport type CommandBindingMap = Record<string, KeyLike>\n\nexport interface CommandBindingsOverrideWarning {\n code: \"command-binding-override\"\n command: string\n previousKey: KeyLike\n nextKey: KeyLike\n}\n\nexport interface CommandBindingsError {\n code: \"invalid-command-binding\"\n command: string\n value: unknown\n reason: Error\n}\n\nexport interface CommandBindingsOptions {\n onWarning?: (warning: CommandBindingsOverrideWarning) => void\n onError?: (error: CommandBindingsError) => void\n}\n\nfunction isCommandBindingKey(value: unknown): value is KeyLike {\n return typeof value === \"string\" || (!!value && typeof value === \"object\" && !Array.isArray(value))\n}\n\nexport function commandBindings<TTarget extends object = object, TEvent extends KeymapEvent = KeymapEvent>(\n bindings: Readonly<CommandBindingMap>,\n options?: CommandBindingsOptions,\n): Binding<TTarget, TEvent>[] {\n const normalized: Binding<TTarget, TEvent>[] = []\n const indexesByCommand = new Map<string, number>()\n\n for (const [command, key] of Object.entries(bindings)) {\n if (!isCommandBindingKey(key)) {\n const error = new Error(\n `Invalid command binding for \"${command}\": command bindings must map command strings to key strings or keystroke objects`,\n )\n\n options?.onError?.({\n code: \"invalid-command-binding\",\n command,\n value: key,\n reason: error,\n })\n continue\n }\n\n const normalizedCommand = command.trim()\n\n const nextBinding = {\n key: typeof key === \"string\" ? key : { ...key },\n cmd: normalizedCommand,\n } satisfies Binding<TTarget, TEvent>\n\n const existingIndex = indexesByCommand.get(normalizedCommand)\n if (existingIndex !== undefined) {\n const previousBinding = normalized[existingIndex]!\n options?.onWarning?.({\n code: \"command-binding-override\",\n command: normalizedCommand,\n previousKey: previousBinding.key,\n nextKey: nextBinding.key,\n })\n normalized[existingIndex] = nextBinding\n continue\n }\n\n indexesByCommand.set(normalizedCommand, normalized.length)\n normalized.push(nextBinding)\n }\n\n return normalized\n}\n",
7
7
  "import type { KeySequencePart } from \"../types.js\"\n\nexport type KeyModifierName = \"ctrl\" | \"shift\" | \"meta\" | \"super\" | \"hyper\"\n\nexport interface KeySequenceFormatPart {\n stroke: KeySequencePart[\"stroke\"]\n display: string\n match?: KeySequencePart[\"match\"]\n tokenName?: string\n patternName?: string\n}\n\nexport type TokenDisplayResolver =\n | Readonly<Record<string, string>>\n | ((tokenName: string, part: KeySequenceFormatPart) => string | undefined)\n\nexport type PatternDisplayResolver =\n | Readonly<Record<string, string>>\n | ((patternName: string, part: KeySequenceFormatPart) => string | undefined)\n\nexport interface FormatKeySequenceOptions {\n tokenDisplay?: TokenDisplayResolver\n patternDisplay?: PatternDisplayResolver\n keyNameAliases?: Readonly<Record<string, string>>\n modifierAliases?: Partial<Record<KeyModifierName, string>>\n separator?: string\n}\n\nexport interface FormatCommandBindingsOptions extends FormatKeySequenceOptions {\n bindingSeparator?: string\n dedupe?: boolean\n}\n\nexport interface SequenceBindingLike {\n sequence: readonly KeySequenceFormatPart[]\n}\n\nfunction formatStroke(part: KeySequenceFormatPart, options: FormatKeySequenceOptions): string {\n if (part.tokenName) {\n const tokenDisplay = options.tokenDisplay\n if (!tokenDisplay) return part.display\n if (typeof tokenDisplay === \"function\") return tokenDisplay(part.tokenName, part) ?? part.display\n return tokenDisplay[part.tokenName] ?? part.display\n }\n\n if (part.patternName) {\n const patternDisplay = options.patternDisplay\n if (!patternDisplay) return part.display\n if (typeof patternDisplay === \"function\") return patternDisplay(part.patternName, part) ?? part.display\n return patternDisplay[part.patternName] ?? part.display\n }\n\n if (!options.keyNameAliases && !options.modifierAliases) return part.display\n\n // This is on the command-palette hot path; build directly to avoid per-stroke arrays.\n const stroke = part.stroke\n const modifierAliases = options.modifierAliases\n let formatted = \"\"\n let pieceCount = 0\n\n if (stroke.ctrl) {\n formatted = modifierAliases?.ctrl ?? \"ctrl\"\n pieceCount = 1\n }\n\n if (stroke.shift) {\n const alias = modifierAliases?.shift ?? \"shift\"\n formatted = pieceCount === 0 ? alias : `${formatted}+${alias}`\n pieceCount += 1\n }\n\n if (stroke.meta) {\n const alias = modifierAliases?.meta ?? \"meta\"\n formatted = pieceCount === 0 ? alias : `${formatted}+${alias}`\n pieceCount += 1\n }\n\n if (stroke.super) {\n const alias = modifierAliases?.super ?? \"super\"\n formatted = pieceCount === 0 ? alias : `${formatted}+${alias}`\n pieceCount += 1\n }\n\n if (stroke.hyper) {\n const alias = modifierAliases?.hyper ?? \"hyper\"\n formatted = pieceCount === 0 ? alias : `${formatted}+${alias}`\n pieceCount += 1\n }\n\n const name = stroke.name === \"return\" ? \"enter\" : stroke.name\n const keyName = options.keyNameAliases?.[name] ?? name\n return pieceCount === 0 ? keyName : `${formatted}+${keyName}`\n}\n\nexport function formatKeySequence(\n parts: readonly KeySequenceFormatPart[] | undefined,\n options: FormatKeySequenceOptions = {},\n): string {\n if (!parts || parts.length === 0) return \"\"\n\n // Avoid map/join allocation here; binding-list formatting calls this repeatedly.\n const separator = options.separator ?? \" \"\n let formatted = formatStroke(parts[0]!, options)\n for (let index = 1; index < parts.length; index += 1) {\n formatted += separator + formatStroke(parts[index]!, options)\n }\n\n return formatted\n}\n\nexport function formatCommandBindings(\n bindings: readonly SequenceBindingLike[] | undefined,\n options: FormatCommandBindingsOptions = {},\n): string | undefined {\n if (!bindings?.length) return\n\n const bindingSeparator = options.bindingSeparator ?? \", \"\n const dedupe = options.dedupe !== false\n const seen = dedupe ? new Set<string>() : undefined\n let formatted = \"\"\n let itemCount = 0\n\n // One pass keeps dedupe, filtering, and joining allocation-light for large binding lists.\n for (const binding of bindings) {\n const item = formatKeySequence(binding.sequence, options)\n if (!item) continue\n\n if (seen) {\n if (seen.has(item)) continue\n seen.add(item)\n }\n\n formatted = itemCount === 0 ? item : `${formatted}${bindingSeparator}${item}`\n itemCount += 1\n }\n\n return formatted\n}\n"
8
8
  ],
9
- "mappings": "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",
10
- "debugId": "7BE7E370039A4BC264756E2164756E21",
9
+ "mappings": "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",
10
+ "debugId": "12505B3C78ECCBFB64756E2164756E21",
11
11
  "names": []
12
12
  }