@vielzeug/keymap 1.1.3 → 2.1.0

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.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,IAAI,CAAC;IACxD,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,YAAY,IAAI,SAAS,YAAY,EAAE,CAAC;IACxC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAErD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,IAAI,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,IAAI,CAAC,EAAE,IAAI,CAAC;CACb,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,SAAS,YAAY,EAAE,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,GACzG;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,SAAS,GAAG,OAAO,CAAA;CAAE,CAAC;AAE3E,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAEzB;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAClD,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,IAAI,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;IACrC,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,YAAY,IAAI,SAAS,YAAY,EAAE,CAAC;IACxC,KAAK,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,IAAI,CAAC;IACvC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;CAC1B"}
package/package.json CHANGED
@@ -1,8 +1,16 @@
1
1
  {
2
2
  "name": "@vielzeug/keymap",
3
- "version": "1.1.3",
3
+ "version": "2.1.0",
4
4
  "description": "Headless keyboard shortcut manager with chord sequences, context guards, and disposable bindings",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/helmuthdu/vielzeug",
8
+ "directory": "packages/keymap"
9
+ },
5
10
  "type": "module",
11
+ "engines": {
12
+ "node": ">=22"
13
+ },
6
14
  "files": [
7
15
  "dist"
8
16
  ],
@@ -11,31 +19,28 @@
11
19
  "types": "dist/index.d.ts",
12
20
  "exports": {
13
21
  ".": {
14
- "types": "./dist/index.d.ts",
15
22
  "import": "./dist/index.js",
16
- "require": "./dist/index.cjs"
23
+ "require": "./dist/index.cjs",
24
+ "types": "./dist/index.d.ts"
17
25
  }
18
26
  },
27
+ "publishConfig": {
28
+ "access": "public",
29
+ "registry": "https://registry.npmjs.org/"
30
+ },
19
31
  "scripts": {
20
32
  "build": "vite build && pnpm run build:bundle && pnpm run build:types",
21
33
  "build:bundle": "vite build --config vite.bundle.config.ts",
22
34
  "build:types": "tsc -p tsconfig.declarations.json",
23
- "fix": "eslint --fix src",
24
- "lint": "eslint src",
35
+ "fix": "biome check --write src",
36
+ "lint": "biome ci src",
25
37
  "prepublishOnly": "pnpm run build",
26
38
  "test": "vitest"
27
39
  },
28
- "publishConfig": {
29
- "access": "public",
30
- "registry": "https://registry.npmjs.org/"
31
- },
32
- "engines": {
33
- "node": ">=22"
34
- },
35
40
  "devDependencies": {
36
- "@types/node": "^26.1.2",
41
+ "@types/node": "^26.2.0",
37
42
  "typescript": "^6.0.3",
38
- "vite": "^8.2.0",
43
+ "vite": "^8.2.1",
39
44
  "vitest": "^4.1.10"
40
45
  }
41
46
  }
package/dist/layer.cjs DELETED
@@ -1,2 +0,0 @@
1
- const e=require("./keymap.cjs");function t(t,n={},r={}){let i=!0,a=e.createKeymap(n,{...r,when:()=>i&&(r.when?.()??!0)});return{activate(){i=!0},get active(){return i},bind(e,t){return a.bind(e,t)},deactivate(){i=!1},get disposalSignal(){return a.disposalSignal},dispose(){a.dispose()},get disposed(){return a.disposed},listBindings(){return a.listBindings()},mount(e){return a.mount(e)},get parent(){return t},[Symbol.dispose](){this.dispose()},unbind(e){a.unbind(e)}}}exports.createKeymapLayer=t;
2
- //# sourceMappingURL=layer.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.cjs","names":[],"sources":["../src/layer.ts"],"sourcesContent":["import type { BindingValue, Keymap, KeymapOptions } from './types';\n\nimport { createKeymap } from './keymap';\n\n/**\n * Creates a scoped keymap layer that sits on top of a parent keymap.\n *\n * The **caller** is responsible for mounting and disposing the parent independently.\n * `layer.mount(target)` only attaches the layer's own shortcuts — it does not touch\n * the parent. `layer.dispose()` only tears down the layer — it does not dispose the parent.\n *\n * While the layer is active, matching shortcuts are handled by the layer. Call\n * `layer.deactivate()` to suspend the layer and `layer.activate()` to re-enable it.\n *\n * @example\n * const base = createKeymap({ 'ctrl+z': undo });\n * const modal = createKeymapLayer(base, {\n * esc: { handler: closeModal, when: () => isModalOpen() },\n * });\n * // Mount both independently — the layer does NOT auto-mount the parent.\n * const unmountBase = base.mount(document);\n * const unmountModal = modal.mount(document);\n *\n * modal.deactivate(); // base handles everything; layer is suspended\n * modal.activate(); // layer is active again\n */\nexport interface KeymapLayer extends Keymap {\n activate(): void;\n deactivate(): void;\n readonly active: boolean;\n readonly parent: Keymap;\n}\n\nexport function createKeymapLayer(\n parent: Keymap,\n initialBindings: Record<string, BindingValue> = {},\n options: KeymapOptions = {},\n): KeymapLayer {\n let isActive = true;\n\n const layer = createKeymap(initialBindings, {\n ...options,\n when: () => isActive && (options.when?.() ?? true),\n });\n\n return {\n activate(): void {\n isActive = true;\n },\n\n get active() {\n return isActive;\n },\n\n bind(shortcut: string, value: BindingValue): () => void {\n return layer.bind(shortcut, value);\n },\n\n deactivate(): void {\n isActive = false;\n },\n\n get disposalSignal(): AbortSignal {\n return layer.disposalSignal;\n },\n\n dispose(): void {\n layer.dispose();\n },\n\n get disposed(): boolean {\n return layer.disposed;\n },\n\n listBindings() {\n return layer.listBindings();\n },\n\n mount(target: EventTarget): () => void {\n return layer.mount(target);\n },\n\n get parent() {\n return parent;\n },\n\n [Symbol.dispose](): void {\n this.dispose();\n },\n\n unbind(shortcut: string): void {\n layer.unbind(shortcut);\n },\n };\n}\n"],"mappings":"gCAiCA,SAAgB,EACd,EACA,EAAgD,CAAC,EACjD,EAAyB,CAAC,EACb,CACb,IAAI,EAAW,GAET,EAAQ,EAAA,aAAa,EAAiB,CAC1C,GAAG,EACH,SAAY,IAAa,EAAQ,OAAO,GAAK,GAC/C,CAAC,EAED,MAAO,CACL,UAAiB,CACf,EAAW,EACb,EAEA,IAAI,QAAS,CACX,OAAO,CACT,EAEA,KAAK,EAAkB,EAAiC,CACtD,OAAO,EAAM,KAAK,EAAU,CAAK,CACnC,EAEA,YAAmB,CACjB,EAAW,EACb,EAEA,IAAI,gBAA8B,CAChC,OAAO,EAAM,cACf,EAEA,SAAgB,CACd,EAAM,QAAQ,CAChB,EAEA,IAAI,UAAoB,CACtB,OAAO,EAAM,QACf,EAEA,cAAe,CACb,OAAO,EAAM,aAAa,CAC5B,EAEA,MAAM,EAAiC,CACrC,OAAO,EAAM,MAAM,CAAM,CAC3B,EAEA,IAAI,QAAS,CACX,OAAO,CACT,EAEA,CAAC,OAAO,UAAiB,CACvB,KAAK,QAAQ,CACf,EAEA,OAAO,EAAwB,CAC7B,EAAM,OAAO,CAAQ,CACvB,CACF,CACF"}
package/dist/layer.d.ts DELETED
@@ -1,31 +0,0 @@
1
- import type { BindingValue, Keymap, KeymapOptions } from './types';
2
- /**
3
- * Creates a scoped keymap layer that sits on top of a parent keymap.
4
- *
5
- * The **caller** is responsible for mounting and disposing the parent independently.
6
- * `layer.mount(target)` only attaches the layer's own shortcuts — it does not touch
7
- * the parent. `layer.dispose()` only tears down the layer — it does not dispose the parent.
8
- *
9
- * While the layer is active, matching shortcuts are handled by the layer. Call
10
- * `layer.deactivate()` to suspend the layer and `layer.activate()` to re-enable it.
11
- *
12
- * @example
13
- * const base = createKeymap({ 'ctrl+z': undo });
14
- * const modal = createKeymapLayer(base, {
15
- * esc: { handler: closeModal, when: () => isModalOpen() },
16
- * });
17
- * // Mount both independently — the layer does NOT auto-mount the parent.
18
- * const unmountBase = base.mount(document);
19
- * const unmountModal = modal.mount(document);
20
- *
21
- * modal.deactivate(); // base handles everything; layer is suspended
22
- * modal.activate(); // layer is active again
23
- */
24
- export interface KeymapLayer extends Keymap {
25
- activate(): void;
26
- deactivate(): void;
27
- readonly active: boolean;
28
- readonly parent: Keymap;
29
- }
30
- export declare function createKeymapLayer(parent: Keymap, initialBindings?: Record<string, BindingValue>, options?: KeymapOptions): KeymapLayer;
31
- //# sourceMappingURL=layer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.d.ts","sourceRoot":"","sources":["../src/layer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAInE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,WAAW,WAAY,SAAQ,MAAM;IACzC,QAAQ,IAAI,IAAI,CAAC;IACjB,UAAU,IAAI,IAAI,CAAC;IACnB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAM,EAClD,OAAO,GAAE,aAAkB,GAC1B,WAAW,CAyDb"}
package/dist/layer.js DELETED
@@ -1,50 +0,0 @@
1
- import { createKeymap as e } from "./keymap.js";
2
- //#region src/layer.ts
3
- function t(t, n = {}, r = {}) {
4
- let i = !0, a = e(n, {
5
- ...r,
6
- when: () => i && (r.when?.() ?? !0)
7
- });
8
- return {
9
- activate() {
10
- i = !0;
11
- },
12
- get active() {
13
- return i;
14
- },
15
- bind(e, t) {
16
- return a.bind(e, t);
17
- },
18
- deactivate() {
19
- i = !1;
20
- },
21
- get disposalSignal() {
22
- return a.disposalSignal;
23
- },
24
- dispose() {
25
- a.dispose();
26
- },
27
- get disposed() {
28
- return a.disposed;
29
- },
30
- listBindings() {
31
- return a.listBindings();
32
- },
33
- mount(e) {
34
- return a.mount(e);
35
- },
36
- get parent() {
37
- return t;
38
- },
39
- [Symbol.dispose]() {
40
- this.dispose();
41
- },
42
- unbind(e) {
43
- a.unbind(e);
44
- }
45
- };
46
- }
47
- //#endregion
48
- export { t as createKeymapLayer };
49
-
50
- //# sourceMappingURL=layer.js.map
package/dist/layer.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer.js","names":[],"sources":["../src/layer.ts"],"sourcesContent":["import type { BindingValue, Keymap, KeymapOptions } from './types';\n\nimport { createKeymap } from './keymap';\n\n/**\n * Creates a scoped keymap layer that sits on top of a parent keymap.\n *\n * The **caller** is responsible for mounting and disposing the parent independently.\n * `layer.mount(target)` only attaches the layer's own shortcuts — it does not touch\n * the parent. `layer.dispose()` only tears down the layer — it does not dispose the parent.\n *\n * While the layer is active, matching shortcuts are handled by the layer. Call\n * `layer.deactivate()` to suspend the layer and `layer.activate()` to re-enable it.\n *\n * @example\n * const base = createKeymap({ 'ctrl+z': undo });\n * const modal = createKeymapLayer(base, {\n * esc: { handler: closeModal, when: () => isModalOpen() },\n * });\n * // Mount both independently — the layer does NOT auto-mount the parent.\n * const unmountBase = base.mount(document);\n * const unmountModal = modal.mount(document);\n *\n * modal.deactivate(); // base handles everything; layer is suspended\n * modal.activate(); // layer is active again\n */\nexport interface KeymapLayer extends Keymap {\n activate(): void;\n deactivate(): void;\n readonly active: boolean;\n readonly parent: Keymap;\n}\n\nexport function createKeymapLayer(\n parent: Keymap,\n initialBindings: Record<string, BindingValue> = {},\n options: KeymapOptions = {},\n): KeymapLayer {\n let isActive = true;\n\n const layer = createKeymap(initialBindings, {\n ...options,\n when: () => isActive && (options.when?.() ?? true),\n });\n\n return {\n activate(): void {\n isActive = true;\n },\n\n get active() {\n return isActive;\n },\n\n bind(shortcut: string, value: BindingValue): () => void {\n return layer.bind(shortcut, value);\n },\n\n deactivate(): void {\n isActive = false;\n },\n\n get disposalSignal(): AbortSignal {\n return layer.disposalSignal;\n },\n\n dispose(): void {\n layer.dispose();\n },\n\n get disposed(): boolean {\n return layer.disposed;\n },\n\n listBindings() {\n return layer.listBindings();\n },\n\n mount(target: EventTarget): () => void {\n return layer.mount(target);\n },\n\n get parent() {\n return parent;\n },\n\n [Symbol.dispose](): void {\n this.dispose();\n },\n\n unbind(shortcut: string): void {\n layer.unbind(shortcut);\n },\n };\n}\n"],"mappings":";;AAiCA,SAAgB,EACd,GACA,IAAgD,CAAC,GACjD,IAAyB,CAAC,GACb;CACb,IAAI,IAAW,IAET,IAAQ,EAAa,GAAiB;EAC1C,GAAG;EACH,YAAY,MAAa,EAAQ,OAAO,KAAK;CAC/C,CAAC;CAED,OAAO;EACL,WAAiB;GACf,IAAW;EACb;EAEA,IAAI,SAAS;GACX,OAAO;EACT;EAEA,KAAK,GAAkB,GAAiC;GACtD,OAAO,EAAM,KAAK,GAAU,CAAK;EACnC;EAEA,aAAmB;GACjB,IAAW;EACb;EAEA,IAAI,iBAA8B;GAChC,OAAO,EAAM;EACf;EAEA,UAAgB;GACd,EAAM,QAAQ;EAChB;EAEA,IAAI,WAAoB;GACtB,OAAO,EAAM;EACf;EAEA,eAAe;GACb,OAAO,EAAM,aAAa;EAC5B;EAEA,MAAM,GAAiC;GACrC,OAAO,EAAM,MAAM,CAAM;EAC3B;EAEA,IAAI,SAAS;GACX,OAAO;EACT;EAEA,CAAC,OAAO,WAAiB;GACvB,KAAK,QAAQ;EACf;EAEA,OAAO,GAAwB;GAC7B,EAAM,OAAO,CAAQ;EACvB;CACF;AACF"}