@dxos/keyboard 0.8.4-main.fbb7a13 → 0.8.4-main.fcc0d83b33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -9,7 +9,7 @@ Utility for managing contextual keyboard bindings.
9
9
  - Tip: Use https://tableconvert.com/markdown-to-markdown to edit the table.
10
10
 
11
11
  | | macos | windows | chrome (macos) | chrome (windows) |
12
- |-------------------|------------------------------------------|----------------------------------------------------------------------------------------------------------------|----------------|-----------------------------------------------------------------------------------|
12
+ | ----------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -------------- | --------------------------------------------------------------------------------- |
13
13
  | | https://support.apple.com/en-us/HT201236 | https://support.microsoft.com/en-us/windows/keyboard-shortcuts-in-windows-dcc61a57-8ff0-cffe-9796-cb9706c75eec | | https://support.google.com/chrome/answer/157179?hl=en&co=GENIE.Platform%3DDesktop |
14
14
  | Alt-Tab | | x | | |
15
15
  | Alt-F4 | | x | | |
@@ -12,15 +12,7 @@ var modifiers = [
12
12
  var parseShortcut = (shortcut, delimiter = /[+-]/) => {
13
13
  const parts = shortcut.toLowerCase().split(delimiter);
14
14
  const mods = modifiers.filter((key) => parts.includes(key));
15
- invariant(mods.length === 0 || mods.length === parts.length - 1, void 0, {
16
- F: __dxlog_file,
17
- L: 32,
18
- S: void 0,
19
- A: [
20
- "mods.length === 0 || mods.length === parts.length - 1",
21
- ""
22
- ]
23
- });
15
+ invariant(mods.length === 0 || mods.length === parts.length - 1, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 17, S: void 0, A: ["mods.length === 0 || mods.length === parts.length - 1", ""] });
24
16
  return mods.length ? [
25
17
  ...mods,
26
18
  parts[parts.length - 1]
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/keyboard.ts", "../../../src/util.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type MaybePromise } from '@dxos/util';\n\n// TODO(burdon): Replace with hotkeys-js, react-hotkeys, and react-hotkeys-hook.\n\nexport type KeyHandler = (props: {\n context: string;\n shortcut: string;\n data?: any;\n event: KeyboardEvent;\n}) => MaybePromise<boolean | void>;\n\nexport type KeyBinding = {\n shortcut: string;\n handler: KeyHandler;\n disableInput?: boolean;\n data?: any;\n};\n\n// Keybinding is normalized to this order.\n// https://support.apple.com/en-us/HT201236\nconst modifiers = ['ctrl', 'shift', 'alt', 'meta'];\n\n// Normalize order and case of modifiers.\nexport const parseShortcut = (shortcut: string, delimiter = /[+-]/): string => {\n const parts = shortcut.toLowerCase().split(delimiter);\n const mods = modifiers.filter((key) => parts.includes(key));\n invariant(mods.length === 0 || mods.length === parts.length - 1);\n // Assume single natural key.\n return mods.length ? [...mods, parts[parts.length - 1]].join('+') : shortcut;\n};\n\nclass KeyboardContext {\n readonly _keyMap = new Map<string, KeyBinding>();\n\n get bindings() {\n return Array.from(this._keyMap.values());\n }\n\n get(binding: string): KeyBinding | undefined {\n return this._keyMap.get(binding);\n }\n\n bind(config: KeyBinding): void {\n config.shortcut = parseShortcut(config.shortcut);\n this._keyMap.set(config.shortcut, config);\n }\n\n unbind(binding: string): void {\n this._keyMap.delete(binding);\n }\n}\n\nconst ROOT = '';\n\n/**\n * Manages context-aware key bindings.\n */\nexport class Keyboard {\n static singleton = new Keyboard();\n\n private readonly _root = new KeyboardContext();\n private readonly _keyMap = new Map<string, KeyboardContext>([[ROOT, this._root]]);\n private readonly _contexts: string[] = [ROOT];\n private readonly _keyHandler = this.handleKeyDown.bind(this);\n private _path = ROOT;\n\n initialize(): void {\n document.addEventListener('keydown', this._keyHandler);\n }\n\n destroy(): void {\n document.removeEventListener('keydown', this._keyHandler);\n }\n\n bind = this._root.bind.bind(this._root);\n unbind = this._root.unbind.bind(this._root);\n\n setCurrentContext(path = ROOT): void {\n this._path = path;\n }\n\n getCurrentContext(): string {\n return this._path;\n }\n\n getContext(path = ROOT): KeyboardContext {\n let context = this._keyMap.get(path);\n if (!context) {\n context = new KeyboardContext();\n this._keyMap.set(path, context);\n this._contexts.push(path);\n this._contexts.sort();\n }\n\n return context;\n }\n\n getBindings(): KeyBinding[] {\n const bindings = new Map<string, KeyBinding>();\n for (let i = 0; i < this._contexts.length; ++i) {\n const path = this._contexts[i];\n if (this._path.startsWith(path)) {\n this.getContext(path).bindings.forEach((binding) => {\n bindings.set(binding.shortcut, binding);\n });\n }\n }\n\n return Array.from(bindings.values());\n }\n\n async handleKeyDown(event: KeyboardEvent): Promise<void> {\n const { altKey, ctrlKey, metaKey, shiftKey, key } = event;\n\n if (key !== 'Alt' && key !== 'Control' && key !== 'Meta' && key !== 'Shift') {\n // Binding option to check for input or contenteditable.\n const tagName = (event.target as any)?.tagName;\n const isInput =\n tagName === 'INPUT' || tagName === 'TEXTAREA' || (event.target as any)?.getAttribute('contenteditable');\n\n // Normalized key binding (order matters, see note above).\n const str = [ctrlKey && 'ctrl', shiftKey && 'shift', altKey && 'alt', metaKey && 'meta', key]\n .filter(Boolean)\n .join('+');\n\n // Scan matching contexts.\n for (let i = this._contexts.length - 1; i >= 0; --i) {\n const path = this._contexts[i];\n if (this._path.startsWith(path)) {\n const { data, handler, disableInput } = this.getContext(path).get(str) ?? {};\n if (handler && (!isInput || !disableInput)) {\n const result = await handler({ context: path, shortcut: str, data, event });\n if (result !== false) {\n // TODO(burdon): This doesn't prevent actions in markdown editor.\n // Reference: https://codemirror.net/docs/ref/#view.KeyBinding\n event.preventDefault();\n event.stopPropagation();\n }\n\n return;\n }\n }\n }\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { getHostPlatform } from '@dxos/util';\n\n// Resources.\n// https://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents\n// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n// https://developer.apple.com/design/human-interface-guidelines/designing-for-macos\n// https://support.apple.com/en-us/HT201236\n// https://support.apple.com/guide/mac-help/what-are-those-symbols-shown-in-menus-cpmh0011/mac\n\nconst ctrl: Record<string, string> = {\n macos: '⌃',\n ios: '⌃',\n windows: 'Ctrl',\n linux: 'Ctrl',\n unknown: 'Ctrl',\n};\n\nconst alt: Record<string, string> = {\n macos: '⌥',\n ios: '⌥',\n windows: 'Alt',\n linux: 'Alt',\n unknown: 'Alt',\n};\n\nconst meta: Record<string, string> = {\n macos: '⌘',\n ios: '⌘',\n windows: '⊞',\n // TODO(wittjosiah): Use ⌘ or ⊞ instead? Wait for user feedback.\n // From https://en.wikipedia.org/wiki/Super_key_(keyboard_button).\n linux: '❖',\n unknown: '❖',\n};\n\nconst getSymbol = (part: string) => {\n const platform = getHostPlatform();\n switch (part.toLowerCase()) {\n // Mods.\n case 'alt':\n return alt[platform];\n case 'ctrl':\n return ctrl[platform];\n case 'meta':\n return meta[platform];\n case 'shift':\n return '⇧';\n // Special keys.\n case 'backspace':\n return '⌫';\n case 'enter':\n return '⏎';\n case 'escape':\n return '⎋';\n case 'space':\n return '␣';\n case 'tab':\n return '⇥';\n default:\n return part.toUpperCase();\n }\n};\n\nexport const keySymbols = (keyBinding: string): string[] => {\n const parts = keyBinding.split('+');\n return parts.map(getSymbol);\n};\n"],
5
- "mappings": "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",
6
- "names": ["invariant", "modifiers", "parseShortcut", "shortcut", "delimiter", "parts", "toLowerCase", "split", "mods", "filter", "key", "includes", "length", "join", "KeyboardContext", "_keyMap", "Map", "bindings", "Array", "from", "values", "get", "binding", "bind", "config", "set", "unbind", "delete", "ROOT", "Keyboard", "singleton", "_root", "_contexts", "_keyHandler", "handleKeyDown", "_path", "initialize", "document", "addEventListener", "destroy", "removeEventListener", "setCurrentContext", "path", "getCurrentContext", "getContext", "context", "push", "sort", "getBindings", "i", "startsWith", "forEach", "event", "altKey", "ctrlKey", "metaKey", "shiftKey", "tagName", "target", "isInput", "getAttribute", "str", "Boolean", "data", "handler", "disableInput", "result", "preventDefault", "stopPropagation", "getHostPlatform", "ctrl", "macos", "ios", "windows", "linux", "unknown", "alt", "meta", "getSymbol", "part", "platform", "getHostPlatform", "toLowerCase", "toUpperCase", "keySymbols", "keyBinding", "parts", "split", "map"]
5
+ "mappings": "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",
6
+ "names": ["invariant", "mods", "filter", "key", "includes", "length", "parts", "join", "KeyboardContext", "Array", "from", "binding", "bind", "_keyMap", "unbind", "_root", "ROOT", "_contexts", "_keyHandler", "_path", "initialize", "document", "destroy", "setCurrentContext", "path", "getCurrentContext", "getContext", "context", "sort", "getBindings", "i", "startsWith", "bindings", "shortcut", "handleKeyDown", "event", "tagName", "target", "str", "shiftKey", "altKey", "metaKey", "Boolean", "data", "handler", "disableInput", "isInput", "result", "getHostPlatform", "ctrl", "macos", "ios", "windows", "linux", "unknown", "alt", "meta", "getSymbol", "part", "platform", "toLowerCase", "toUpperCase", "keySymbols", "keyBinding", "parts", "split", "map"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/keyboard.ts":{"bytes":16049,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/util.ts":{"bytes":5655,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":531,"imports":[{"path":"src/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10737},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["Keyboard","keySymbols","parseShortcut"],"entryPoint":"src/index.ts","inputs":{"src/keyboard.ts":{"bytesInOutput":3507},"src/index.ts":{"bytesInOutput":0},"src/util.ts":{"bytesInOutput":1184}},"bytes":4849}}}
1
+ {"inputs":{"src/keyboard.ts":{"bytes":15976,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/util.ts":{"bytes":5581,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":456,"imports":[{"path":"src/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10173},"dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["Keyboard","keySymbols","parseShortcut"],"entryPoint":"src/index.ts","inputs":{"src/keyboard.ts":{"bytesInOutput":3495},"src/index.ts":{"bytesInOutput":0},"src/util.ts":{"bytesInOutput":1184}},"bytes":4837}}}
@@ -12,15 +12,7 @@ var modifiers = [
12
12
  var parseShortcut = (shortcut, delimiter = /[+-]/) => {
13
13
  const parts = shortcut.toLowerCase().split(delimiter);
14
14
  const mods = modifiers.filter((key) => parts.includes(key));
15
- invariant(mods.length === 0 || mods.length === parts.length - 1, void 0, {
16
- F: __dxlog_file,
17
- L: 32,
18
- S: void 0,
19
- A: [
20
- "mods.length === 0 || mods.length === parts.length - 1",
21
- ""
22
- ]
23
- });
15
+ invariant(mods.length === 0 || mods.length === parts.length - 1, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 17, S: void 0, A: ["mods.length === 0 || mods.length === parts.length - 1", ""] });
24
16
  return mods.length ? [
25
17
  ...mods,
26
18
  parts[parts.length - 1]
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/keyboard.ts", "../../../src/util.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type MaybePromise } from '@dxos/util';\n\n// TODO(burdon): Replace with hotkeys-js, react-hotkeys, and react-hotkeys-hook.\n\nexport type KeyHandler = (props: {\n context: string;\n shortcut: string;\n data?: any;\n event: KeyboardEvent;\n}) => MaybePromise<boolean | void>;\n\nexport type KeyBinding = {\n shortcut: string;\n handler: KeyHandler;\n disableInput?: boolean;\n data?: any;\n};\n\n// Keybinding is normalized to this order.\n// https://support.apple.com/en-us/HT201236\nconst modifiers = ['ctrl', 'shift', 'alt', 'meta'];\n\n// Normalize order and case of modifiers.\nexport const parseShortcut = (shortcut: string, delimiter = /[+-]/): string => {\n const parts = shortcut.toLowerCase().split(delimiter);\n const mods = modifiers.filter((key) => parts.includes(key));\n invariant(mods.length === 0 || mods.length === parts.length - 1);\n // Assume single natural key.\n return mods.length ? [...mods, parts[parts.length - 1]].join('+') : shortcut;\n};\n\nclass KeyboardContext {\n readonly _keyMap = new Map<string, KeyBinding>();\n\n get bindings() {\n return Array.from(this._keyMap.values());\n }\n\n get(binding: string): KeyBinding | undefined {\n return this._keyMap.get(binding);\n }\n\n bind(config: KeyBinding): void {\n config.shortcut = parseShortcut(config.shortcut);\n this._keyMap.set(config.shortcut, config);\n }\n\n unbind(binding: string): void {\n this._keyMap.delete(binding);\n }\n}\n\nconst ROOT = '';\n\n/**\n * Manages context-aware key bindings.\n */\nexport class Keyboard {\n static singleton = new Keyboard();\n\n private readonly _root = new KeyboardContext();\n private readonly _keyMap = new Map<string, KeyboardContext>([[ROOT, this._root]]);\n private readonly _contexts: string[] = [ROOT];\n private readonly _keyHandler = this.handleKeyDown.bind(this);\n private _path = ROOT;\n\n initialize(): void {\n document.addEventListener('keydown', this._keyHandler);\n }\n\n destroy(): void {\n document.removeEventListener('keydown', this._keyHandler);\n }\n\n bind = this._root.bind.bind(this._root);\n unbind = this._root.unbind.bind(this._root);\n\n setCurrentContext(path = ROOT): void {\n this._path = path;\n }\n\n getCurrentContext(): string {\n return this._path;\n }\n\n getContext(path = ROOT): KeyboardContext {\n let context = this._keyMap.get(path);\n if (!context) {\n context = new KeyboardContext();\n this._keyMap.set(path, context);\n this._contexts.push(path);\n this._contexts.sort();\n }\n\n return context;\n }\n\n getBindings(): KeyBinding[] {\n const bindings = new Map<string, KeyBinding>();\n for (let i = 0; i < this._contexts.length; ++i) {\n const path = this._contexts[i];\n if (this._path.startsWith(path)) {\n this.getContext(path).bindings.forEach((binding) => {\n bindings.set(binding.shortcut, binding);\n });\n }\n }\n\n return Array.from(bindings.values());\n }\n\n async handleKeyDown(event: KeyboardEvent): Promise<void> {\n const { altKey, ctrlKey, metaKey, shiftKey, key } = event;\n\n if (key !== 'Alt' && key !== 'Control' && key !== 'Meta' && key !== 'Shift') {\n // Binding option to check for input or contenteditable.\n const tagName = (event.target as any)?.tagName;\n const isInput =\n tagName === 'INPUT' || tagName === 'TEXTAREA' || (event.target as any)?.getAttribute('contenteditable');\n\n // Normalized key binding (order matters, see note above).\n const str = [ctrlKey && 'ctrl', shiftKey && 'shift', altKey && 'alt', metaKey && 'meta', key]\n .filter(Boolean)\n .join('+');\n\n // Scan matching contexts.\n for (let i = this._contexts.length - 1; i >= 0; --i) {\n const path = this._contexts[i];\n if (this._path.startsWith(path)) {\n const { data, handler, disableInput } = this.getContext(path).get(str) ?? {};\n if (handler && (!isInput || !disableInput)) {\n const result = await handler({ context: path, shortcut: str, data, event });\n if (result !== false) {\n // TODO(burdon): This doesn't prevent actions in markdown editor.\n // Reference: https://codemirror.net/docs/ref/#view.KeyBinding\n event.preventDefault();\n event.stopPropagation();\n }\n\n return;\n }\n }\n }\n }\n }\n}\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { getHostPlatform } from '@dxos/util';\n\n// Resources.\n// https://www.w3.org/TR/DOM-Level-3-Events/#events-keyboardevents\n// https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key\n// https://developer.apple.com/design/human-interface-guidelines/designing-for-macos\n// https://support.apple.com/en-us/HT201236\n// https://support.apple.com/guide/mac-help/what-are-those-symbols-shown-in-menus-cpmh0011/mac\n\nconst ctrl: Record<string, string> = {\n macos: '⌃',\n ios: '⌃',\n windows: 'Ctrl',\n linux: 'Ctrl',\n unknown: 'Ctrl',\n};\n\nconst alt: Record<string, string> = {\n macos: '⌥',\n ios: '⌥',\n windows: 'Alt',\n linux: 'Alt',\n unknown: 'Alt',\n};\n\nconst meta: Record<string, string> = {\n macos: '⌘',\n ios: '⌘',\n windows: '⊞',\n // TODO(wittjosiah): Use ⌘ or ⊞ instead? Wait for user feedback.\n // From https://en.wikipedia.org/wiki/Super_key_(keyboard_button).\n linux: '❖',\n unknown: '❖',\n};\n\nconst getSymbol = (part: string) => {\n const platform = getHostPlatform();\n switch (part.toLowerCase()) {\n // Mods.\n case 'alt':\n return alt[platform];\n case 'ctrl':\n return ctrl[platform];\n case 'meta':\n return meta[platform];\n case 'shift':\n return '⇧';\n // Special keys.\n case 'backspace':\n return '⌫';\n case 'enter':\n return '⏎';\n case 'escape':\n return '⎋';\n case 'space':\n return '␣';\n case 'tab':\n return '⇥';\n default:\n return part.toUpperCase();\n }\n};\n\nexport const keySymbols = (keyBinding: string): string[] => {\n const parts = keyBinding.split('+');\n return parts.map(getSymbol);\n};\n"],
5
- "mappings": "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",
6
- "names": ["invariant", "modifiers", "parseShortcut", "shortcut", "delimiter", "parts", "toLowerCase", "split", "mods", "filter", "key", "includes", "length", "join", "KeyboardContext", "_keyMap", "Map", "bindings", "Array", "from", "values", "get", "binding", "bind", "config", "set", "unbind", "delete", "ROOT", "Keyboard", "singleton", "_root", "_contexts", "_keyHandler", "handleKeyDown", "_path", "initialize", "document", "addEventListener", "destroy", "removeEventListener", "setCurrentContext", "path", "getCurrentContext", "getContext", "context", "push", "sort", "getBindings", "i", "startsWith", "forEach", "event", "altKey", "ctrlKey", "metaKey", "shiftKey", "tagName", "target", "isInput", "getAttribute", "str", "Boolean", "data", "handler", "disableInput", "result", "preventDefault", "stopPropagation", "getHostPlatform", "ctrl", "macos", "ios", "windows", "linux", "unknown", "alt", "meta", "getSymbol", "part", "platform", "getHostPlatform", "toLowerCase", "toUpperCase", "keySymbols", "keyBinding", "parts", "split", "map"]
5
+ "mappings": ";;;AAIA,SAASA,iBAAiB;AAmB1B,IAAA,eAAA;IAE2B,YAAA;EAAS;EAAO;EAAO;EAElD;AACA;AAEE,IAAMC,gBAAiBC,CAAAA,UAAQC,YAAcC,WAASD;AACtDH,QAAAA,QAAUC,SAAW,YAAUA,EAAKI,MAAM,SAAKC;AAC/C,QAAA,OAAA,UAAA,OAA6B,CAAA,QAAA,MAAA,SAAA,GAAA,CAAA;AAC7B,YAAOL,KAAKI,WAAS,KAAA,KAAA,WAAA,MAAA,SAAA,GAAA,QAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,yDAAA,EAAA,EAAA,CAAA;SAAUC,KAAMA,SAAMD;IAAaE,GAAK;IAC7D,MAAA,MAAA,SAAA,CAAA;EAEF,EAAMC,KAAAA,GAAAA,IAAAA;;IAGJ,wBAAe;YACb,oBAAOC,IAAMC;EACf,IAAA,WAAA;AAEIC,WAAe,MAA0B,KAAA,KAAA,QAAA,OAAA,CAAA;;EAE7C,IAAA,SAAA;AAEAC,WAAuB,KAAQ,QAAA,IAAA,OAAA;;OAE7B,QAAKC;AACP,WAAA,WAAA,cAAA,OAAA,QAAA;AAEAC,SAAOH,QAAuB,IAAA,OAAA,UAAA,MAAA;;EAE9B,OAAA,SAAA;AACF,SAAA,QAAA,OAAA,OAAA;EAEA;AAEA;;AAMmBI,IAAYP,WAAZO,MAAYP,UAAAA;EACZK,OAAAA,YAA2C,IAAA,UAAA;UAAC,IAAA,gBAAA;YAACG,oBAAAA,IAAAA;;MAAiB;MAAG,KAAA;IACjEC;;cAA6B;IAC7BC;EACTC;EAERC,cAAmB,KAAA,cAAA,KAAA,IAAA;UACjBC;EACF,aAAA;AAEAC,aAAgB,iBAAA,WAAA,KAAA,WAAA;;EAEhB,UAAA;AAEAV,aAAYG,oBAAqBA,WAAO,KAAA,WAAA;EACxCD;EAEAS,OAAAA,KAAAA,MAAkBC,KAAAA,KAAOR,KAAY,KAAA;WAC9BG,KAAK,MAAGK,OAAAA,KAAAA,KAAAA,KAAAA;EACf,kBAAA,OAAA,MAAA;AAEAC,SAAAA,QAAAA;;EAEA,oBAAA;AAEAC,WAAWF,KAAAA;;aAEJG,OAAS,MAAA;QACZA,UAAU,KAAInB,QAAAA,IAAAA,IAAAA;QACd,CAAA,SAAKK;AACL,gBAAKI,IAAS,gBAAMO;AACpB,WAAKP,QAAAA,IAAUW,MAAI,OAAA;AACrB,WAAA,UAAA,KAAA,IAAA;AAEA,WAAOD,UAAAA,KAAAA;IACT;AAEAE,WAAAA;;gBAEWC;UACP,WAAa,oBAAI,IAACb;aACd,IAAI,GAACE,IAAMY,KAAAA,UAAWP,QAAO,EAAA,GAAA;YAC/B,OAAKE,KAAAA,UAAiBM,CAAAA;eACpBA,MAAAA,WAAarB,IAAQsB,GAAAA;AACvB,aAAA,WAAA,IAAA,EAAA,SAAA,QAAA,CAAA,YAAA;AACF,mBAAA,IAAA,QAAA,UAAA,OAAA;QACF,CAAA;MAEA;IACF;AAEA,WAAMC,MAAAA,KAAcC,SAAqC,OAAA,CAAA;;QAGvD,cAAY,OAAShC;UACnB,EAAA,QAAA,SAAA,SAAA,UAAA,IAAA,IAAA;QACA,QAAMiC,SAAWD,QAAME,aAAgBD,QAAAA,UAAAA,QAAAA,SAAAA;AAIvC,YAAA,UAAA,MAAA,QAAA;AACA,YAAME,UAAM,YAAA,WAAA,YAAA,cAAA,MAAA,QAAA,aAAA,iBAAA;YAAoBC,MAAAA;QAAqBC,WAAU;QAAOC,YAAW;QAAQtC,UAAAA;QACtFD,WAAOwC;QAGV;MACA,EAAA,OAASZ,OAAQ,EAACb,KAAAA,GAAS;eAErB,IAAI,KAACE,UAAMY,SAAWP,GAAO,KAAA,GAAA,EAAA,GAAA;cAC/B,OAAQmB,KAAMC,UAASC,CAAAA;YACvB,KAAID,MAAAA,WAAaE,IAAAA,GAAYD;gBAC3B,EAAA,MAAME,SAAS,aAAc,IAAA,KAAA,WAAA,IAAA,EAAA,IAAA,GAAA,KAAA,CAAA;0BAAEpB,CAASH,WAAAA,CAAAA,eAAAA;kBAAMS,SAAUK,MAAAA,QAAAA;cAAKK,SAAAA;cAAMR,UAAAA;cAAM;cACrEY;;gBAEF,WAAA,OAAA;AAGF,oBAAA,eAAA;AAEA,oBAAA,gBAAA;YACF;AACF;UACF;QACF;MACF;IACF;;;;;AClJA,SAASC,uBAAuB;AAShC,IAAMC,OAA+B;EACnCC,OAAO;EACPC,KAAK;EACLC,SAAS;EACTC,OAAO;EACPC,SAAS;AACX;AAEA,IAAMC,MAA8B;EAClCL,OAAO;EACPC,KAAK;EACLC,SAAS;EACTC,OAAO;EACPC,SAAS;AACX;AAEA,IAAME,OAA+B;EACnCN,OAAO;EACPC,KAAK;EACLC,SAAS;;;EAGTC,OAAO;EACPC,SAAS;AACX;AAEA,IAAMG,YAAY,CAACC,SAAAA;AACjB,QAAMC,WAAWX,gBAAAA;AACjB,UAAQU,KAAKE,YAAW,GAAA;;IAEtB,KAAK;AACH,aAAOL,IAAII,QAAAA;IACb,KAAK;AACH,aAAOV,KAAKU,QAAAA;IACd,KAAK;AACH,aAAOH,KAAKG,QAAAA;IACd,KAAK;AACH,aAAO;;IAET,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT,KAAK;AACH,aAAO;IACT;AACE,aAAOD,KAAKG,YAAW;EAC3B;AACF;AAEO,IAAMC,aAAa,CAACC,eAAAA;AACzB,QAAMC,QAAQD,WAAWE,MAAM,GAAA;AAC/B,SAAOD,MAAME,IAAIT,SAAAA;AACnB;",
6
+ "names": ["invariant", "mods", "filter", "key", "includes", "length", "parts", "join", "KeyboardContext", "Array", "from", "binding", "bind", "_keyMap", "unbind", "_root", "ROOT", "_contexts", "_keyHandler", "_path", "initialize", "document", "destroy", "setCurrentContext", "path", "getCurrentContext", "getContext", "context", "sort", "getBindings", "i", "startsWith", "bindings", "shortcut", "handleKeyDown", "event", "tagName", "target", "str", "shiftKey", "altKey", "metaKey", "Boolean", "data", "handler", "disableInput", "isInput", "result", "getHostPlatform", "ctrl", "macos", "ios", "windows", "linux", "unknown", "alt", "meta", "getSymbol", "part", "platform", "toLowerCase", "toUpperCase", "keySymbols", "keyBinding", "parts", "split", "map"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/keyboard.ts":{"bytes":16049,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/util.ts":{"bytes":5655,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":531,"imports":[{"path":"src/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10737},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["Keyboard","keySymbols","parseShortcut"],"entryPoint":"src/index.ts","inputs":{"src/keyboard.ts":{"bytesInOutput":3507},"src/index.ts":{"bytesInOutput":0},"src/util.ts":{"bytesInOutput":1184}},"bytes":4908}}}
1
+ {"inputs":{"src/keyboard.ts":{"bytes":15976,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true}],"format":"esm"},"src/util.ts":{"bytes":5581,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":456,"imports":[{"path":"src/keyboard.ts","kind":"import-statement","original":"./keyboard"},{"path":"src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":10173},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"exports":["Keyboard","keySymbols","parseShortcut"],"entryPoint":"src/index.ts","inputs":{"src/keyboard.ts":{"bytesInOutput":3495},"src/index.ts":{"bytesInOutput":0},"src/util.ts":{"bytesInOutput":1184}},"bytes":4896}}}
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../../src/keyboard.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;CACtB,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAEnC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAOF,eAAO,MAAM,aAAa,GAAI,UAAU,MAAM,EAAE,kBAAkB,KAAG,MAMpE,CAAC;AAEF,cAAM,eAAe;IACnB,QAAQ,CAAC,OAAO,0BAAiC;IAEjD,IAAI,QAAQ,iBAEX;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI5C,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAK9B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;CAG9B;AAID;;GAEG;AACH,qBAAa,QAAQ;IACnB,MAAM,CAAC,SAAS,WAAkB;IAElC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,KAAK,CAAQ;IAErB,UAAU,IAAI,IAAI;IAIlB,OAAO,IAAI,IAAI;IAIf,IAAI,WAhCS,UAAU,KAAG,IAAI,CAgCU;IACxC,MAAM,YA5BU,MAAM,KAAG,IAAI,CA4Be;IAE5C,iBAAiB,CAAC,IAAI,SAAO,GAAG,IAAI;IAIpC,iBAAiB,IAAI,MAAM;IAI3B,UAAU,CAAC,IAAI,SAAO,GAAG,eAAe;IAYxC,WAAW,IAAI,UAAU,EAAE;IAcrB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAkCzD"}
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../../src/keyboard.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,MAAM,MAAM,UAAU,GAAG,CAAC,KAAK,EAAE;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,KAAK,EAAE,aAAa,CAAC;CACtB,KAAK,YAAY,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAEnC,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,GAAG,CAAC;CACZ,CAAC;AAOF,eAAO,MAAM,aAAa,aAAc,MAAM,yBAAuB,MAMpE,CAAC;AAEF,cAAM,eAAe;IACnB,QAAQ,CAAC,OAAO,0BAAiC;IAEjD,IAAI,QAAQ,iBAEX;IAED,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAE3C;IAED,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAG7B;IAED,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE5B;CACF;AAID;;GAEG;AACH,qBAAa,QAAQ;IACnB,MAAM,CAAC,SAAS,WAAkB;IAElC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAyB;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0D;IAClF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiC;IAC7D,OAAO,CAAC,KAAK,CAAQ;IAErB,UAAU,IAAI,IAAI,CAEjB;IAED,OAAO,IAAI,IAAI,CAEd;IAED,IAAI,WAhCS,UAAU,KAAG,IAAI,CAgCU;IACxC,MAAM,YA5BU,MAAM,KAAG,IAAI,CA4Be;IAE5C,iBAAiB,CAAC,IAAI,SAAO,GAAG,IAAI,CAEnC;IAED,iBAAiB,IAAI,MAAM,CAE1B;IAED,UAAU,CAAC,IAAI,SAAO,GAAG,eAAe,CAUvC;IAED,WAAW,IAAI,UAAU,EAAE,CAY1B;IAEK,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiCvD;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"keyboard.stories.d.ts","sourceRoot":"","sources":["../../../src/keyboard.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAA8B,MAAM,OAAO,CAAC;AA+DnD,QAAA,MAAM,IAAI;;;;CAIoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
1
+ {"version":3,"file":"keyboard.stories.d.ts","sourceRoot":"","sources":["../../../src/keyboard.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAA8B,MAAM,OAAO,CAAC;AA+DnD,QAAA,MAAM,IAAI;;;;CAIoB,CAAC;eAEhB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAmEA,eAAO,MAAM,UAAU,GAAI,YAAY,MAAM,KAAG,MAAM,EAGrD,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAmEA,eAAO,MAAM,UAAU,eAAgB,MAAM,KAAG,MAAM,EAGrD,CAAC"}