@opentui/keymap 0.3.4 → 0.4.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.
- package/chunks/index-p35cyhc4.js +7 -0
- package/chunks/index-p35cyhc4.js.map +9 -0
- package/package.json +4 -4
- package/src/addons/index.js +3 -1
- package/src/addons/index.js.map +2 -2
- package/src/addons/opentui/index.js +3 -1
- package/src/addons/opentui/index.js.map +2 -2
- package/src/extras/graph.js +2 -1
- package/src/extras/graph.js.map +2 -2
- package/src/extras/index.js +3 -1
- package/src/extras/index.js.map +2 -2
- package/src/html.js +3 -1
- package/src/html.js.map +2 -2
- package/src/index.js +2 -1
- package/src/index.js.map +2 -2
- package/src/opentui.js +3 -1
- package/src/opentui.js.map +2 -2
- package/src/react/index.js +3 -1
- package/src/react/index.js.map +2 -2
- package/src/runtime-modules.d.ts +3 -4
- package/src/runtime-modules.js +13 -5
- package/src/runtime-modules.js.map +3 -3
- package/src/solid/index.js +3 -1
- package/src/solid/index.js.map +2 -2
- package/src/testing/index.js +3 -1
- package/src/testing/index.js.map +2 -2
package/src/opentui.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;AAAA;AACA;AACA;AAEA,SAAS,2BAA2B,GAAa;AAAA,EAC/C,OAAO,IAAI,SAAS;AAAA,IAClB,MAAM;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,WAAW;AAAA,IACX,QAAQ;AAAA,EACV,CAAC;AAAA;AAGH,SAAS,wBAAwB,CAAC,UAA8D;AAAA,EAC9F,IAAI,aAAa,UAAU;AAAA,IACzB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,aAAa,SAAS;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,IAAI,aAAa,SAAS;AAAA,IACxB,OAAO;AAAA,EACT;AAAA,EAEA,OAAO;AAAA;AAGT,SAAS,yBAAyB,CAAC,UAAqC;AAAA,EACtE,MAAM,WAAW,yBAAyB,QAAQ,QAAQ;AAAA,EAC1D,MAAM,mBAAmB,SAAS,cAAc,mBAAmB;AAAA,EAEnE,OAAO;AAAA,IACL;AAAA,IACA,iBAAiB,aAAa,UAAU,UAAU,aAAa,YAAY,YAAY;AAAA,IACvF,WAAW;AAAA,MACT,MAAM;AAAA,MACN,OAAO;AAAA,MACP,MAAM;AAAA,MACN,OAAO,mBAAmB,cAAc;AAAA,MACxC,OAAO,mBAAmB,cAAc;AAAA,IAC1C;AAAA,EACF;AAAA;AAGK,SAAS,uBAAuB,CAAC,UAAyD;AAAA,EAC/F,OAAO;AAAA,QACD,QAAQ,GAAG;AAAA,MACb,OAAO,0BAA0B,QAAQ;AAAA;AAAA,IAE3C,YAAY,SAAS;AAAA,QACjB,WAAW,GAAG;AAAA,MAChB,OAAO,SAAS;AAAA;AAAA,IAElB,gBAAgB,GAAG;AAAA,MACjB,MAAM,UAAU,SAAS;AAAA,MACzB,IAAI,CAAC,WAAW,QAAQ,eAAe,CAAC,QAAQ,SAAS;AAAA,QACvD,OAAO;AAAA,MACT;AAAA,MAEA,OAAO;AAAA;AAAA,IAET,eAAe,CAAC,QAAQ;AAAA,MACtB,OAAO,OAAO;AAAA;AAAA,IAEhB,iBAAiB,CAAC,QAAQ;AAAA,MACxB,OAAO,OAAO;AAAA;AAAA,IAEhB,UAAU,CAAC,UAAU;AAAA,MACnB,SAAS,SAAS,gBAAgB,YAAY,QAAQ;AAAA,MACtD,OAAO,MAAM;AAAA,QACX,SAAS,SAAS,IAAI,YAAY,QAAQ;AAAA;AAAA;AAAA,IAG9C,YAAY,CAAC,UAAU;AAAA,MACrB,SAAS,SAAS,gBAAgB,cAAc,QAAQ;AAAA,MACxD,OAAO,MAAM;AAAA,QACX,SAAS,SAAS,IAAI,cAAc,QAAQ;AAAA;AAAA;AAAA,IAGhD,aAAa,CAAC,UAAU;AAAA,MACtB,SAAS,GAAG,gBAAgB,oBAAoB,QAAQ;AAAA,MACxD,OAAO,MAAM;AAAA,QACX,SAAS,IAAI,gBAAgB,oBAAoB,QAAQ;AAAA;AAAA;AAAA,IAG7D,SAAS,CAAC,UAAU;AAAA,MAClB,SAAS,KAAK,gBAAgB,SAAS,QAAQ;AAAA,MAC/C,OAAO,MAAM;AAAA,QACX,SAAS,IAAI,gBAAgB,SAAS,QAAQ;AAAA;AAAA;AAAA,IAGlD,eAAe,CAAC,QAAQ,UAAU;AAAA,MAChC,OAAO,KAAK,iBAAiB,WAAW,QAAQ;AAAA,MAChD,OAAO,MAAM;AAAA,QACX,OAAO,IAAI,iBAAiB,WAAW,QAAQ;AAAA;AAAA;AAAA,IAGnD,UAAU,CAAC,UAAU;AAAA,MACnB,SAAS,oBAAoB,QAAQ;AAAA,MACrC,OAAO,MAAM;AAAA,QACX,SAAS,mBAAmB,QAAQ;AAAA;AAAA;AAAA,IAGxC,kBAAkB,GAAG;AAAA,MACnB,OAAO,4BAA4B;AAAA;AAAA,EAEvC;AAAA;AAGK,SAAS,mBAAmB,CAAC,UAAqD;AAAA,EACvF,IAAI,SAAS,aAAa;AAAA,IACxB,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,OAAO,IAAI,OAAO,wBAAwB,QAAQ,CAAC;AAAA;AAG9C,SAAS,0BAA0B,CAAC,UAAqD;AAAA,EAC9F,IAAI,SAAS,aAAa;AAAA,IACxB,MAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,MAAM,SAAS,IAAI,OAAO,wBAAwB,QAAQ,CAAC;AAAA,EAC3D,oBAAoB,MAAM;AAAA,EAC1B,sBAAsB,MAAM;AAAA,EAC5B,uBAAuB,MAAM;AAAA,EAC7B,OAAO;AAAA;",
|
|
8
|
+
"debugId": "3536CBBE2B01723A64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/src/react/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import"../../chunks/index-p35cyhc4.js";
|
|
3
|
+
|
|
2
4
|
// src/react/index.ts
|
|
3
5
|
import {
|
|
4
6
|
createElement,
|
|
@@ -123,5 +125,5 @@ export {
|
|
|
123
125
|
KeymapProvider
|
|
124
126
|
};
|
|
125
127
|
|
|
126
|
-
//# debugId=
|
|
128
|
+
//# debugId=CA1BE97FEBFCD58864756E2164756E21
|
|
127
129
|
//# sourceMappingURL=index.js.map
|
package/src/react/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
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
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "CA1BE97FEBFCD58864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/src/runtime-modules.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { RuntimeModuleExports } from "@opentui/core/runtime-plugin";
|
|
1
2
|
import * as keymap from "@opentui/keymap";
|
|
2
3
|
import * as keymapExtras from "@opentui/keymap/extras";
|
|
3
4
|
import * as keymapGraphExtra from "@opentui/keymap/extras/graph";
|
|
@@ -5,8 +6,6 @@ import * as keymapAddons from "@opentui/keymap/addons";
|
|
|
5
6
|
import * as keymapOpenTuiAddons from "@opentui/keymap/addons/opentui";
|
|
6
7
|
import * as keymapHtml from "@opentui/keymap/html";
|
|
7
8
|
import * as keymapOpenTui from "@opentui/keymap/opentui";
|
|
8
|
-
import * as keymapReact from "@opentui/keymap/react";
|
|
9
|
-
import * as keymapSolid from "@opentui/keymap/solid";
|
|
10
9
|
export declare const runtimeModules: {
|
|
11
10
|
"@opentui/keymap": typeof keymap;
|
|
12
11
|
"@opentui/keymap/extras": typeof keymapExtras;
|
|
@@ -15,6 +14,6 @@ export declare const runtimeModules: {
|
|
|
15
14
|
"@opentui/keymap/addons/opentui": typeof keymapOpenTuiAddons;
|
|
16
15
|
"@opentui/keymap/html": typeof keymapHtml;
|
|
17
16
|
"@opentui/keymap/opentui": typeof keymapOpenTui;
|
|
18
|
-
"@opentui/keymap/react":
|
|
19
|
-
"@opentui/keymap/solid":
|
|
17
|
+
"@opentui/keymap/react": () => Promise<RuntimeModuleExports>;
|
|
18
|
+
"@opentui/keymap/solid": () => Promise<RuntimeModuleExports>;
|
|
20
19
|
};
|
package/src/runtime-modules.js
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import {
|
|
3
|
+
__require
|
|
4
|
+
} from "../chunks/index-p35cyhc4.js";
|
|
5
|
+
|
|
2
6
|
// src/runtime-modules.ts
|
|
3
7
|
import * as keymap from "@opentui/keymap";
|
|
4
8
|
import * as keymapExtras from "@opentui/keymap/extras";
|
|
@@ -7,8 +11,12 @@ import * as keymapAddons from "@opentui/keymap/addons";
|
|
|
7
11
|
import * as keymapOpenTuiAddons from "@opentui/keymap/addons/opentui";
|
|
8
12
|
import * as keymapHtml from "@opentui/keymap/html";
|
|
9
13
|
import * as keymapOpenTui from "@opentui/keymap/opentui";
|
|
10
|
-
|
|
11
|
-
|
|
14
|
+
var loadKeymapReact = async () => {
|
|
15
|
+
return await import("@opentui/keymap/react");
|
|
16
|
+
};
|
|
17
|
+
var loadKeymapSolid = async () => {
|
|
18
|
+
return await import("@opentui/keymap/solid");
|
|
19
|
+
};
|
|
12
20
|
var runtimeModules = {
|
|
13
21
|
"@opentui/keymap": keymap,
|
|
14
22
|
"@opentui/keymap/extras": keymapExtras,
|
|
@@ -17,12 +25,12 @@ var runtimeModules = {
|
|
|
17
25
|
"@opentui/keymap/addons/opentui": keymapOpenTuiAddons,
|
|
18
26
|
"@opentui/keymap/html": keymapHtml,
|
|
19
27
|
"@opentui/keymap/opentui": keymapOpenTui,
|
|
20
|
-
"@opentui/keymap/react":
|
|
21
|
-
"@opentui/keymap/solid":
|
|
28
|
+
"@opentui/keymap/react": loadKeymapReact,
|
|
29
|
+
"@opentui/keymap/solid": loadKeymapSolid
|
|
22
30
|
};
|
|
23
31
|
export {
|
|
24
32
|
runtimeModules
|
|
25
33
|
};
|
|
26
34
|
|
|
27
|
-
//# debugId=
|
|
35
|
+
//# debugId=CC20AFEBEC8A0E6D64756E2164756E21
|
|
28
36
|
//# sourceMappingURL=runtime-modules.js.map
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/runtime-modules.ts"],
|
|
4
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\"\
|
|
5
|
+
"import type { RuntimeModuleEntry, RuntimeModuleExports } 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\"\n\nconst loadKeymapReact = async (): Promise<RuntimeModuleExports> => {\n return (await import(\"@opentui/keymap/react\")) as RuntimeModuleExports\n}\n\nconst loadKeymapSolid = async (): Promise<RuntimeModuleExports> => {\n return (await import(\"@opentui/keymap/solid\")) as RuntimeModuleExports\n}\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\": loadKeymapReact,\n \"@opentui/keymap/solid\": loadKeymapSolid,\n} satisfies Record<string, RuntimeModuleEntry>\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": ";;;;;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,IAAM,kBAAkB,YAA2C;AAAA,EACjE,OAAQ,MAAa;AAAA;AAGvB,IAAM,kBAAkB,YAA2C;AAAA,EACjE,OAAQ,MAAa;AAAA;AAGhB,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": "CC20AFEBEC8A0E6D64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/src/solid/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import"../../chunks/index-p35cyhc4.js";
|
|
3
|
+
|
|
2
4
|
// src/solid/index.ts
|
|
3
5
|
import {
|
|
4
6
|
createComponent,
|
|
@@ -116,5 +118,5 @@ export {
|
|
|
116
118
|
KeymapProvider
|
|
117
119
|
};
|
|
118
120
|
|
|
119
|
-
//# debugId=
|
|
121
|
+
//# debugId=F7B96CA019AA7AAF64756E2164756E21
|
|
120
122
|
//# sourceMappingURL=index.js.map
|
package/src/solid/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type { KeyEvent, Renderable } from \"@opentui/core\"\nimport { type Keymap, type Layer, type ReactiveMatcher, type TargetMode } from \"../index.js\"\nimport {\n createComponent,\n createContext,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n on,\n onCleanup,\n onMount,\n useContext,\n type Accessor,\n type JSX,\n} from \"solid-js\"\n\ntype OpenTuiKeymap = Keymap<Renderable, KeyEvent>\n\nconst KeymapContext = createContext<OpenTuiKeymap>()\n\nexport interface KeymapProviderProps {\n keymap: OpenTuiKeymap\n children: JSX.Element\n}\n\nexport function KeymapProvider(props: KeymapProviderProps): JSX.Element {\n return createComponent(KeymapContext.Provider, {\n get value() {\n return props.keymap\n },\n get children() {\n return props.children\n },\n })\n}\n\nexport type UseBindingsTarget<TRenderable extends Renderable = Renderable> = () => TRenderable | null | undefined\n\nexport interface UseBindingsLayer<TRenderable extends Renderable = Renderable> extends Omit<\n Layer<Renderable, KeyEvent>,\n \"target\" | \"targetMode\"\n> {\n target?: UseBindingsTarget<TRenderable>\n targetMode?: TargetMode\n}\n\nfunction resolveBindingsTarget(target: UseBindingsTarget | undefined): Renderable | undefined {\n return target?.() ?? undefined\n}\n\nexport const useKeymap = (): OpenTuiKeymap => {\n const keymap = useContext(KeymapContext)\n\n if (!keymap) {\n throw new Error(\"Keymap not found. Wrap the tree in <KeymapProvider>.\")\n }\n\n return keymap\n}\n\nfunction useKeymapStateVersion(keymap: OpenTuiKeymap): Accessor<number> {\n const [version, setVersion] = createSignal(0)\n let dispose: (() => void) | undefined\n\n onMount(() => {\n dispose = keymap.on(\"state\", () => {\n setVersion((value) => value + 1)\n })\n\n setVersion((value) => value + 1)\n })\n\n onCleanup(() => {\n dispose?.()\n })\n\n return version\n}\n\n/**\n * Reactively derives any view from the current keymap by re-running `selector`\n * on each batched keymap state change.\n */\nexport const useKeymapSelector = <T>(selector: (keymap: OpenTuiKeymap) => T): Accessor<T> => {\n const keymap = useKeymap()\n const version = useKeymapStateVersion(keymap)\n\n return createMemo((previous) => {\n version()\n try {\n return selector(keymap)\n } catch (error) {\n if (\n previous !== undefined &&\n error instanceof Error &&\n error.message === \"Cannot use a keymap after its host was destroyed\"\n ) {\n return previous\n }\n\n throw error\n }\n })\n}\n\nexport function useBindings<TRenderable extends Renderable = Renderable>(\n createLayer: () => UseBindingsLayer<TRenderable>,\n): void {\n const keymap = useKeymap()\n\n createEffect(() => {\n const layer = createLayer()\n const hasExplicitTarget = layer.target !== undefined\n const explicitTarget = resolveBindingsTarget(layer.target)\n const nextTargetMode: TargetMode | undefined = layer.targetMode ?? (hasExplicitTarget ? \"focus-within\" : undefined)\n\n const { target: _target, targetMode: _targetMode, ...baseLayer } = layer\n if (!nextTargetMode) {\n const dispose = keymap.registerLayer({\n ...baseLayer,\n })\n\n onCleanup(() => {\n dispose()\n })\n\n return\n }\n\n if (!hasExplicitTarget) {\n throw new Error(\"useBindings local bindings need a target accessor\")\n }\n\n if (!explicitTarget) {\n return\n }\n\n const dispose = keymap.registerLayer({\n ...baseLayer,\n target: explicitTarget,\n targetMode: nextTargetMode,\n })\n\n onCleanup(() => {\n dispose()\n })\n })\n}\n\n/**\n * Adapts a Solid accessor to `ReactiveMatcher`. The subscription\n * lives in a disposable reactive root so unregistering the layer tears it\n * down. Pass `predicate` when the accessor value is not already boolean.\n */\nexport function reactiveMatcherFromSignal<T>(\n accessor: Accessor<T>,\n predicate?: (value: T) => boolean,\n): ReactiveMatcher {\n return {\n get() {\n return predicate ? predicate(accessor()) : Boolean(accessor())\n },\n subscribe(onChange) {\n return createRoot((dispose) => {\n createEffect(on(accessor, () => onChange(), { defer: true }))\n return dispose\n })\n },\n }\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "F7B96CA019AA7AAF64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/src/testing/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
+
import"../../chunks/index-p35cyhc4.js";
|
|
3
|
+
|
|
2
4
|
// src/testing/index.ts
|
|
3
5
|
import { Keymap } from "@opentui/keymap";
|
|
4
6
|
import { registerDefaultKeys } from "@opentui/keymap/addons";
|
|
@@ -272,5 +274,5 @@ export {
|
|
|
272
274
|
DEFAULT_TEST_HOST_METADATA
|
|
273
275
|
};
|
|
274
276
|
|
|
275
|
-
//# debugId=
|
|
277
|
+
//# debugId=DC01206E50E31AF664756E2164756E21
|
|
276
278
|
//# sourceMappingURL=index.js.map
|
package/src/testing/index.js.map
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import { Keymap } from \"@opentui/keymap\"\nimport { registerDefaultKeys } from \"@opentui/keymap/addons\"\nimport type { ErrorEvent, HostMetadata, KeymapEvent, KeymapHost, WarningEvent } from \"@opentui/keymap\"\n\nexport type TestKeyModifierOptions = Partial<Pick<KeymapEvent, \"ctrl\" | \"shift\" | \"meta\" | \"super\" | \"hyper\">>\n\nexport type TestHostMetadataOptions = Partial<Omit<HostMetadata, \"modifiers\">> & {\n modifiers?: Partial<HostMetadata[\"modifiers\"]>\n}\n\nexport interface CreateTestKeymapHostOptions {\n metadata?: HostMetadata | TestHostMetadataOptions\n}\n\nexport interface CreateTestKeymapOptions extends CreateTestKeymapHostOptions {\n defaultKeys?: boolean\n}\n\nexport interface TestDiagnosticCapture {\n readonly warnings: readonly string[]\n readonly errors: readonly string[]\n readonly warningEvents: readonly WarningEvent[]\n readonly errorEvents: readonly ErrorEvent[]\n takeWarnings(): { warnings: string[]; warningEvents: WarningEvent[] }\n takeErrors(): { errors: string[]; errorEvents: ErrorEvent[] }\n clear(): void\n dispose(): void\n}\n\nexport interface TestKeymapHarness {\n keymap: Keymap<TestKeymapTarget, TestKeymapEvent>\n host: TestKeymapHost\n root: TestKeymapTarget\n diagnostics: TestDiagnosticCapture\n cleanup(): void\n}\n\nexport const DEFAULT_TEST_HOST_METADATA: HostMetadata = Object.freeze({\n platform: \"unknown\",\n primaryModifier: \"unknown\",\n modifiers: Object.freeze({\n ctrl: \"unknown\",\n shift: \"unknown\",\n meta: \"unknown\",\n super: \"unknown\",\n hyper: \"unknown\",\n }),\n})\n\nexport class TestKeymapTarget {\n public parent: TestKeymapTarget | null = null\n public isDestroyed = false\n\n constructor(public readonly id: string) {}\n\n public append(child: TestKeymapTarget): TestKeymapTarget {\n child.parent = this\n return child\n }\n}\n\nexport class TestKeymapEvent implements KeymapEvent {\n public readonly ctrl: boolean\n public readonly shift: boolean\n public readonly meta: boolean\n public readonly super: boolean\n public readonly hyper?: boolean\n public propagationStopped = false\n public defaultPrevented = false\n\n constructor(\n public readonly name: string,\n modifiers?: TestKeyModifierOptions,\n ) {\n this.ctrl = modifiers?.ctrl ?? false\n this.shift = modifiers?.shift ?? false\n this.meta = modifiers?.meta ?? false\n this.super = modifiers?.super ?? false\n this.hyper = modifiers?.hyper || undefined\n }\n\n public preventDefault(): void {\n this.defaultPrevented = true\n }\n\n public stopPropagation(): void {\n this.propagationStopped = true\n }\n}\n\nexport class TestKeymapHost implements KeymapHost<TestKeymapTarget, TestKeymapEvent> {\n public readonly metadata: HostMetadata\n public readonly rootTarget: TestKeymapTarget\n public isDestroyed = false\n\n private focusedTarget: TestKeymapTarget | null = null\n private readonly keyPressListeners = new Set<(event: TestKeymapEvent) => void>()\n private readonly keyReleaseListeners = new Set<(event: TestKeymapEvent) => void>()\n private readonly focusListeners = new Set<(target: TestKeymapTarget | null) => void>()\n private readonly destroyListeners = new Set<() => void>()\n private readonly rawListeners = new Set<(sequence: string) => boolean>()\n private readonly targetDestroyListeners = new WeakMap<TestKeymapTarget, Set<() => void>>()\n\n constructor(options?: CreateTestKeymapHostOptions) {\n this.metadata = normalizeTestHostMetadata(options?.metadata)\n this.rootTarget = new TestKeymapTarget(\"root\")\n }\n\n public createTarget(id: string): TestKeymapTarget {\n return new TestKeymapTarget(id)\n }\n\n public getFocusedTarget(): TestKeymapTarget | null {\n return this.focusedTarget && !this.focusedTarget.isDestroyed ? this.focusedTarget : null\n }\n\n public getParentTarget(target: TestKeymapTarget): TestKeymapTarget | null {\n return target.parent\n }\n\n public isTargetDestroyed(target: TestKeymapTarget): boolean {\n return target.isDestroyed\n }\n\n public onKeyPress(listener: (event: TestKeymapEvent) => void): () => void {\n this.keyPressListeners.add(listener)\n return () => {\n this.keyPressListeners.delete(listener)\n }\n }\n\n public onKeyRelease(listener: (event: TestKeymapEvent) => void): () => void {\n this.keyReleaseListeners.add(listener)\n return () => {\n this.keyReleaseListeners.delete(listener)\n }\n }\n\n public onFocusChange(listener: (target: TestKeymapTarget | null) => void): () => void {\n this.focusListeners.add(listener)\n return () => {\n this.focusListeners.delete(listener)\n }\n }\n\n public onDestroy(listener: () => void): () => void {\n this.destroyListeners.add(listener)\n return () => {\n this.destroyListeners.delete(listener)\n }\n }\n\n public onTargetDestroy(target: TestKeymapTarget, listener: () => void): () => void {\n let listeners = this.targetDestroyListeners.get(target)\n if (!listeners) {\n listeners = new Set()\n this.targetDestroyListeners.set(target, listeners)\n }\n\n listeners.add(listener)\n return () => {\n listeners?.delete(listener)\n if (listeners && listeners.size === 0) {\n this.targetDestroyListeners.delete(target)\n }\n }\n }\n\n public onRawInput(listener: (sequence: string) => boolean): () => void {\n this.rawListeners.add(listener)\n return () => {\n this.rawListeners.delete(listener)\n }\n }\n\n public createCommandEvent(): TestKeymapEvent {\n return new TestKeymapEvent(\"synthetic\")\n }\n\n public focus(target: TestKeymapTarget | null): void {\n this.focusedTarget = target\n for (const listener of this.focusListeners) {\n listener(target)\n }\n }\n\n public press(name: string, modifiers?: TestKeyModifierOptions): TestKeymapEvent {\n const event = new TestKeymapEvent(name, modifiers)\n for (const listener of this.keyPressListeners) {\n listener(event)\n }\n\n return event\n }\n\n public release(name: string, modifiers?: TestKeyModifierOptions): TestKeymapEvent {\n const event = new TestKeymapEvent(name, modifiers)\n for (const listener of this.keyReleaseListeners) {\n listener(event)\n }\n\n return event\n }\n\n public raw(sequence: string): boolean {\n let handled = false\n for (const listener of this.rawListeners) {\n handled = listener(sequence) || handled\n }\n\n return handled\n }\n\n public destroyTarget(target: TestKeymapTarget): void {\n target.isDestroyed = true\n const listeners = this.targetDestroyListeners.get(target)\n if (!listeners) {\n return\n }\n\n for (const listener of [...listeners]) {\n listener()\n }\n }\n\n public destroy(): void {\n if (this.isDestroyed) {\n return\n }\n\n this.isDestroyed = true\n for (const listener of [...this.destroyListeners]) {\n listener()\n }\n }\n}\n\nexport function createTestHostMetadata(options?: HostMetadata | TestHostMetadataOptions): HostMetadata {\n return normalizeTestHostMetadata(options)\n}\n\nexport function createTestKeymapHost(options?: CreateTestKeymapHostOptions): TestKeymapHost {\n return new TestKeymapHost(options)\n}\n\nexport function createTestKeymap(options?: CreateTestKeymapOptions): TestKeymapHarness {\n const host = createTestKeymapHost(options)\n const keymap = new Keymap(host)\n const diagnostics = captureKeymapDiagnostics(keymap)\n\n if (options?.defaultKeys === true) {\n registerDefaultKeys(keymap)\n }\n\n return {\n keymap,\n host,\n root: host.rootTarget,\n diagnostics,\n cleanup() {\n host.destroy()\n diagnostics.dispose()\n },\n }\n}\n\nexport function captureKeymapDiagnostics(keymap: Keymap<any, any>): TestDiagnosticCapture {\n const warnings: string[] = []\n const errors: string[] = []\n const warningEvents: WarningEvent[] = []\n const errorEvents: ErrorEvent[] = []\n\n const offWarning = keymap.on(\"warning\", (event) => {\n warnings.push(event.message)\n warningEvents.push(event)\n })\n const offError = keymap.on(\"error\", (event) => {\n errors.push(event.message)\n errorEvents.push(event)\n })\n\n return {\n warnings,\n errors,\n warningEvents,\n errorEvents,\n takeWarnings() {\n const snapshot = {\n warnings: [...warnings],\n warningEvents: [...warningEvents],\n }\n warnings.length = 0\n warningEvents.length = 0\n return snapshot\n },\n takeErrors() {\n const snapshot = {\n errors: [...errors],\n errorEvents: [...errorEvents],\n }\n errors.length = 0\n errorEvents.length = 0\n return snapshot\n },\n clear() {\n warnings.length = 0\n errors.length = 0\n warningEvents.length = 0\n errorEvents.length = 0\n },\n dispose() {\n offWarning()\n offError()\n },\n }\n}\n\nfunction normalizeTestHostMetadata(metadata?: HostMetadata | TestHostMetadataOptions): HostMetadata {\n if (isHostMetadata(metadata)) {\n return metadata\n }\n\n return {\n platform: metadata?.platform ?? DEFAULT_TEST_HOST_METADATA.platform,\n primaryModifier: metadata?.primaryModifier ?? DEFAULT_TEST_HOST_METADATA.primaryModifier,\n modifiers: {\n ...DEFAULT_TEST_HOST_METADATA.modifiers,\n ...metadata?.modifiers,\n },\n }\n}\n\nfunction isHostMetadata(value: HostMetadata | TestHostMetadataOptions | undefined): value is HostMetadata {\n return !!value && !!value.modifiers && \"ctrl\" in value.modifiers && \"shift\" in value.modifiers\n}\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "DC01206E50E31AF664756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|