@agent-infra/browser 0.1.5 → 0.2.0-alpha.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +35 -52
  3. package/README.zh-CN.md +57 -0
  4. package/dist/actions/index.d.ts +3 -0
  5. package/dist/actions/index.d.ts.map +1 -0
  6. package/dist/actions/index.js +46 -0
  7. package/dist/actions/index.js.map +1 -0
  8. package/dist/actions/index.mjs +7 -0
  9. package/dist/actions/key-map.d.ts +28 -0
  10. package/dist/actions/key-map.d.ts.map +1 -0
  11. package/dist/actions/key-map.js +409 -0
  12. package/dist/actions/key-map.js.map +1 -0
  13. package/dist/actions/key-map.mjs +369 -0
  14. package/dist/actions/key-map.mjs.map +1 -0
  15. package/dist/actions/keyboard.d.ts +21 -0
  16. package/dist/actions/keyboard.d.ts.map +1 -0
  17. package/dist/actions/keyboard.js +196 -0
  18. package/dist/actions/keyboard.js.map +1 -0
  19. package/dist/actions/keyboard.mjs +152 -0
  20. package/dist/actions/keyboard.mjs.map +1 -0
  21. package/dist/actions/keyboard.test.d.ts +2 -0
  22. package/dist/actions/keyboard.test.d.ts.map +1 -0
  23. package/dist/actions/mouse.d.ts +19 -0
  24. package/dist/actions/mouse.d.ts.map +1 -0
  25. package/dist/actions/mouse.js +173 -0
  26. package/dist/actions/mouse.js.map +1 -0
  27. package/dist/actions/mouse.mjs +136 -0
  28. package/dist/actions/mouse.mjs.map +1 -0
  29. package/dist/browser/base.d.ts +47 -0
  30. package/dist/browser/base.d.ts.map +1 -0
  31. package/dist/browser/base.js +156 -0
  32. package/dist/browser/base.js.map +1 -0
  33. package/dist/browser/base.mjs +122 -0
  34. package/dist/browser/base.mjs.map +1 -0
  35. package/dist/browser/browser.d.ts +23 -0
  36. package/dist/browser/browser.d.ts.map +1 -0
  37. package/dist/browser/browser.js +183 -0
  38. package/dist/browser/browser.js.map +1 -0
  39. package/dist/browser/browser.mjs +149 -0
  40. package/dist/browser/browser.mjs.map +1 -0
  41. package/dist/env.d.ts +4 -0
  42. package/dist/env.d.ts.map +1 -0
  43. package/dist/env.js +96 -0
  44. package/dist/env.js.map +1 -0
  45. package/dist/env.mjs +62 -0
  46. package/dist/env.mjs.map +1 -0
  47. package/dist/index.node.d.ts +7 -0
  48. package/dist/index.node.d.ts.map +1 -0
  49. package/dist/index.node.js +106 -0
  50. package/dist/index.node.js.map +1 -0
  51. package/dist/index.node.mjs +10 -0
  52. package/dist/index.web.d.ts +7 -0
  53. package/dist/index.web.d.ts.map +1 -0
  54. package/dist/{index.js → index.web.js} +33 -20
  55. package/dist/index.web.js.map +1 -0
  56. package/dist/index.web.mjs +10 -0
  57. package/dist/injected-script/index.d.ts +3 -0
  58. package/dist/injected-script/index.d.ts.map +1 -0
  59. package/dist/injected-script/index.js +46 -0
  60. package/dist/injected-script/index.js.map +1 -0
  61. package/dist/injected-script/index.mjs +7 -0
  62. package/dist/injected-script/visibility.d.ts +2 -0
  63. package/dist/injected-script/visibility.d.ts.map +1 -0
  64. package/dist/injected-script/visibility.js +66 -0
  65. package/dist/injected-script/visibility.js.map +1 -0
  66. package/dist/injected-script/visibility.mjs +32 -0
  67. package/dist/injected-script/visibility.mjs.map +1 -0
  68. package/dist/injected-script/webdriver.d.ts +2 -0
  69. package/dist/injected-script/webdriver.d.ts.map +1 -0
  70. package/dist/injected-script/webdriver.js +71 -0
  71. package/dist/injected-script/webdriver.js.map +1 -0
  72. package/dist/injected-script/webdriver.mjs +37 -0
  73. package/dist/injected-script/webdriver.mjs.map +1 -0
  74. package/dist/polyfills/index.d.ts +2 -0
  75. package/dist/polyfills/index.d.ts.map +1 -0
  76. package/dist/polyfills/index.js +66 -0
  77. package/dist/polyfills/index.js.map +1 -0
  78. package/dist/polyfills/index.mjs +5 -0
  79. package/dist/polyfills/withResolvers.d.ts +2 -0
  80. package/dist/polyfills/withResolvers.d.ts.map +1 -0
  81. package/dist/polyfills/withResolvers.js +37 -0
  82. package/dist/polyfills/withResolvers.js.map +1 -0
  83. package/dist/polyfills/withResolvers.mjs +19 -0
  84. package/dist/polyfills/withResolvers.mjs.map +1 -0
  85. package/dist/tabs/dialog.d.ts +14 -0
  86. package/dist/tabs/dialog.d.ts.map +1 -0
  87. package/dist/tabs/dialog.js +175 -0
  88. package/dist/tabs/dialog.js.map +1 -0
  89. package/dist/tabs/dialog.mjs +141 -0
  90. package/dist/tabs/dialog.mjs.map +1 -0
  91. package/dist/tabs/index.d.ts +3 -0
  92. package/dist/tabs/index.d.ts.map +1 -0
  93. package/dist/tabs/index.js +46 -0
  94. package/dist/tabs/index.js.map +1 -0
  95. package/dist/tabs/index.mjs +7 -0
  96. package/dist/tabs/tab.d.ts +50 -0
  97. package/dist/tabs/tab.d.ts.map +1 -0
  98. package/dist/tabs/tab.js +579 -0
  99. package/dist/tabs/tab.js.map +1 -0
  100. package/dist/tabs/tab.mjs +545 -0
  101. package/dist/tabs/tab.mjs.map +1 -0
  102. package/dist/tabs/tabs.d.ts +21 -0
  103. package/dist/tabs/tabs.d.ts.map +1 -0
  104. package/dist/tabs/tabs.js +458 -0
  105. package/dist/tabs/tabs.js.map +1 -0
  106. package/dist/tabs/tabs.mjs +424 -0
  107. package/dist/tabs/tabs.mjs.map +1 -0
  108. package/dist/types/actions.d.ts +26 -0
  109. package/dist/types/actions.d.ts.map +1 -0
  110. package/dist/types/actions.js +24 -0
  111. package/dist/types/actions.js.map +1 -0
  112. package/dist/types/browser.d.ts +7 -0
  113. package/dist/types/browser.d.ts.map +1 -0
  114. package/dist/types/browser.js +24 -0
  115. package/dist/types/browser.js.map +1 -0
  116. package/dist/types/browser.mjs +4 -0
  117. package/dist/types/dialog.d.ts +7 -0
  118. package/dist/types/dialog.d.ts.map +1 -0
  119. package/dist/types/dialog.js +24 -0
  120. package/dist/types/dialog.js.map +1 -0
  121. package/dist/types/dialog.mjs +4 -0
  122. package/dist/types/env.d.ts +8 -0
  123. package/dist/types/env.d.ts.map +1 -0
  124. package/dist/{types.js → types/env.js} +1 -1
  125. package/dist/types/env.js.map +1 -0
  126. package/dist/types/env.mjs +4 -0
  127. package/dist/types/index.d.ts +6 -0
  128. package/dist/types/index.d.ts.map +1 -0
  129. package/dist/types/index.js +102 -0
  130. package/dist/types/index.js.map +1 -0
  131. package/dist/types/index.mjs +9 -0
  132. package/dist/types/tabs.d.ts +98 -0
  133. package/dist/types/tabs.d.ts.map +1 -0
  134. package/dist/types/tabs.js +48 -0
  135. package/dist/types/tabs.js.map +1 -0
  136. package/dist/types/tabs.mjs +14 -0
  137. package/dist/types/tabs.mjs.map +1 -0
  138. package/dist/utils/iife.d.ts +2 -0
  139. package/dist/utils/iife.d.ts.map +1 -0
  140. package/dist/utils/iife.js +48 -0
  141. package/dist/utils/iife.js.map +1 -0
  142. package/dist/utils/iife.mjs +14 -0
  143. package/dist/utils/iife.mjs.map +1 -0
  144. package/dist/utils/index.d.ts +4 -0
  145. package/dist/utils/index.d.ts.map +1 -0
  146. package/dist/utils/index.js +50 -0
  147. package/dist/utils/index.js.map +1 -0
  148. package/dist/utils/index.mjs +8 -0
  149. package/dist/utils/mutex.d.ts +21 -0
  150. package/dist/utils/mutex.d.ts.map +1 -0
  151. package/dist/utils/mutex.js +133 -0
  152. package/dist/utils/mutex.js.map +1 -0
  153. package/dist/utils/mutex.mjs +99 -0
  154. package/dist/utils/mutex.mjs.map +1 -0
  155. package/dist/utils/url.d.ts +7 -0
  156. package/dist/utils/url.d.ts.map +1 -0
  157. package/dist/utils/url.js +76 -0
  158. package/dist/utils/url.js.map +1 -0
  159. package/dist/utils/url.mjs +42 -0
  160. package/dist/utils/url.mjs.map +1 -0
  161. package/package.json +21 -13
  162. package/dist/base-browser.d.ts +0 -94
  163. package/dist/base-browser.d.ts.map +0 -1
  164. package/dist/base-browser.js +0 -189
  165. package/dist/base-browser.js.map +0 -1
  166. package/dist/base-browser.mjs +0 -155
  167. package/dist/base-browser.mjs.map +0 -1
  168. package/dist/index.d.ts +0 -15
  169. package/dist/index.d.ts.map +0 -1
  170. package/dist/index.js.map +0 -1
  171. package/dist/index.mjs +0 -8
  172. package/dist/local-browser.d.ts +0 -19
  173. package/dist/local-browser.d.ts.map +0 -1
  174. package/dist/local-browser.js +0 -134
  175. package/dist/local-browser.js.map +0 -1
  176. package/dist/local-browser.mjs +0 -100
  177. package/dist/local-browser.mjs.map +0 -1
  178. package/dist/remote-browser.d.ts +0 -49
  179. package/dist/remote-browser.d.ts.map +0 -1
  180. package/dist/remote-browser.js +0 -89
  181. package/dist/remote-browser.js.map +0 -1
  182. package/dist/remote-browser.mjs +0 -55
  183. package/dist/remote-browser.mjs.map +0 -1
  184. package/dist/types.d.ts +0 -158
  185. package/dist/types.d.ts.map +0 -1
  186. package/dist/types.js.map +0 -1
  187. /package/dist/{types.mjs → types/actions.mjs} +0 -0
@@ -0,0 +1,369 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ const MAC_SYSTEM_HOTKEY_MAP = new Map([
6
+ [
7
+ 'CorM+A',
8
+ {
9
+ key: 'KeyA',
10
+ commands: 'SelectAll'
11
+ }
12
+ ],
13
+ [
14
+ 'CorM+KeyA',
15
+ {
16
+ key: 'KeyA',
17
+ commands: 'SelectAll'
18
+ }
19
+ ],
20
+ [
21
+ 'CorM+X',
22
+ {
23
+ key: 'KeyX',
24
+ commands: 'Cut'
25
+ }
26
+ ],
27
+ [
28
+ 'CorM+KeyX',
29
+ {
30
+ key: 'KeyX',
31
+ commands: 'Cut'
32
+ }
33
+ ],
34
+ [
35
+ 'CorM+C',
36
+ {
37
+ key: 'KeyC',
38
+ commands: 'Copy'
39
+ }
40
+ ],
41
+ [
42
+ 'CorM+KeyC',
43
+ {
44
+ key: 'KeyC',
45
+ commands: 'Copy'
46
+ }
47
+ ],
48
+ [
49
+ 'CorM+V',
50
+ {
51
+ key: 'KeyV',
52
+ commands: 'Paste'
53
+ }
54
+ ],
55
+ [
56
+ 'CorM+KeyV',
57
+ {
58
+ key: 'KeyV',
59
+ commands: 'Paste'
60
+ }
61
+ ],
62
+ [
63
+ 'CorM+Z',
64
+ {
65
+ key: 'KeyZ',
66
+ commands: 'Undo'
67
+ }
68
+ ],
69
+ [
70
+ 'CorM+KeyZ',
71
+ {
72
+ key: 'KeyZ',
73
+ commands: 'Undo'
74
+ }
75
+ ],
76
+ [
77
+ 'CorM+Y',
78
+ {
79
+ key: 'KeyY',
80
+ commands: 'Redo'
81
+ }
82
+ ],
83
+ [
84
+ 'CorM+KeyY',
85
+ {
86
+ key: 'KeyY',
87
+ commands: 'Redo'
88
+ }
89
+ ],
90
+ [
91
+ 'CorM+Shift+Z',
92
+ {
93
+ key: 'KeyZ',
94
+ commands: 'Redo'
95
+ }
96
+ ],
97
+ [
98
+ 'CorM+Shift+KeyZ',
99
+ {
100
+ key: 'KeyZ',
101
+ commands: 'Redo'
102
+ }
103
+ ],
104
+ [
105
+ 'Shift+CorM+Z',
106
+ {
107
+ key: 'KeyZ',
108
+ commands: 'Redo'
109
+ }
110
+ ],
111
+ [
112
+ 'Shift+CorM+KeyZ',
113
+ {
114
+ key: 'KeyZ',
115
+ commands: 'Redo'
116
+ }
117
+ ]
118
+ ]);
119
+ const KEY_ABBR_TO_STANDARD_MAP = {
120
+ ctrl: 'Control',
121
+ cmd: 'Meta',
122
+ command: 'Meta',
123
+ opt: 'Alt',
124
+ option: 'Alt',
125
+ up: 'ArrowUp',
126
+ down: 'ArrowDown',
127
+ left: 'ArrowLeft',
128
+ right: 'ArrowRight',
129
+ esc: 'Escape',
130
+ del: 'Delete',
131
+ ins: 'Insert',
132
+ pgup: 'PageUp',
133
+ pgdown: 'PageDown',
134
+ return: 'Enter'
135
+ };
136
+ const KEY_LOW_TO_STANDARD_MAP = {
137
+ 0: '0',
138
+ 1: '1',
139
+ 2: '2',
140
+ 3: '3',
141
+ 4: '4',
142
+ 5: '5',
143
+ 6: '6',
144
+ 7: '7',
145
+ 8: '8',
146
+ 9: '9',
147
+ power: 'Power',
148
+ eject: 'Eject',
149
+ abort: 'Abort',
150
+ help: 'Help',
151
+ backspace: 'Backspace',
152
+ tab: 'Tab',
153
+ numpad5: 'Numpad5',
154
+ numpadenter: 'NumpadEnter',
155
+ enter: 'Enter',
156
+ '\r': '\r',
157
+ '\n': '\n',
158
+ shiftleft: 'ShiftLeft',
159
+ shiftright: 'ShiftRight',
160
+ controlleft: 'ControlLeft',
161
+ controlright: 'ControlRight',
162
+ altleft: 'AltLeft',
163
+ altright: 'AltRight',
164
+ pause: 'Pause',
165
+ capslock: 'CapsLock',
166
+ escape: 'Escape',
167
+ convert: 'Convert',
168
+ nonconvert: 'NonConvert',
169
+ space: 'Space',
170
+ numpad9: 'Numpad9',
171
+ pageup: 'PageUp',
172
+ numpad3: 'Numpad3',
173
+ pagedown: 'PageDown',
174
+ end: 'End',
175
+ numpad1: 'Numpad1',
176
+ home: 'Home',
177
+ numpad7: 'Numpad7',
178
+ arrowleft: 'ArrowLeft',
179
+ numpad4: 'Numpad4',
180
+ numpad8: 'Numpad8',
181
+ arrowup: 'ArrowUp',
182
+ arrowright: 'ArrowRight',
183
+ numpad6: 'Numpad6',
184
+ numpad2: 'Numpad2',
185
+ arrowdown: 'ArrowDown',
186
+ select: 'Select',
187
+ open: 'Open',
188
+ printscreen: 'PrintScreen',
189
+ insert: 'Insert',
190
+ numpad0: 'Numpad0',
191
+ delete: 'Delete',
192
+ numpaddecimal: 'NumpadDecimal',
193
+ digit0: 'Digit0',
194
+ digit1: 'Digit1',
195
+ digit2: 'Digit2',
196
+ digit3: 'Digit3',
197
+ digit4: 'Digit4',
198
+ digit5: 'Digit5',
199
+ digit6: 'Digit6',
200
+ digit7: 'Digit7',
201
+ digit8: 'Digit8',
202
+ digit9: 'Digit9',
203
+ keya: 'KeyA',
204
+ keyb: 'KeyB',
205
+ keyc: 'KeyC',
206
+ keyd: 'KeyD',
207
+ keye: 'KeyE',
208
+ keyf: 'KeyF',
209
+ keyg: 'KeyG',
210
+ keyh: 'KeyH',
211
+ keyi: 'KeyI',
212
+ keyj: 'KeyJ',
213
+ keyk: 'KeyK',
214
+ keyl: 'KeyL',
215
+ keym: 'KeyM',
216
+ keyn: 'KeyN',
217
+ keyo: 'KeyO',
218
+ keyp: 'KeyP',
219
+ keyq: 'KeyQ',
220
+ keyr: 'KeyR',
221
+ keys: 'KeyS',
222
+ keyt: 'KeyT',
223
+ keyu: 'KeyU',
224
+ keyv: 'KeyV',
225
+ keyw: 'KeyW',
226
+ keyx: 'KeyX',
227
+ keyy: 'KeyY',
228
+ keyz: 'KeyZ',
229
+ metaleft: 'MetaLeft',
230
+ metaright: 'MetaRight',
231
+ contextmenu: 'ContextMenu',
232
+ numpadmultiply: 'NumpadMultiply',
233
+ numpadadd: 'NumpadAdd',
234
+ numpadsubtract: 'NumpadSubtract',
235
+ numpaddivide: 'NumpadDivide',
236
+ f1: 'F1',
237
+ f2: 'F2',
238
+ f3: 'F3',
239
+ f4: 'F4',
240
+ f5: 'F5',
241
+ f6: 'F6',
242
+ f7: 'F7',
243
+ f8: 'F8',
244
+ f9: 'F9',
245
+ f10: 'F10',
246
+ f11: 'F11',
247
+ f12: 'F12',
248
+ f13: 'F13',
249
+ f14: 'F14',
250
+ f15: 'F15',
251
+ f16: 'F16',
252
+ f17: 'F17',
253
+ f18: 'F18',
254
+ f19: 'F19',
255
+ f20: 'F20',
256
+ f21: 'F21',
257
+ f22: 'F22',
258
+ f23: 'F23',
259
+ f24: 'F24',
260
+ numlock: 'NumLock',
261
+ scrolllock: 'ScrollLock',
262
+ audiovolumemute: 'AudioVolumeMute',
263
+ audiovolumedown: 'AudioVolumeDown',
264
+ audiovolumeup: 'AudioVolumeUp',
265
+ mediatracknext: 'MediaTrackNext',
266
+ mediatrackprevious: 'MediaTrackPrevious',
267
+ mediastop: 'MediaStop',
268
+ mediaplaypause: 'MediaPlayPause',
269
+ semicolon: 'Semicolon',
270
+ equal: 'Equal',
271
+ numpadequal: 'NumpadEqual',
272
+ comma: 'Comma',
273
+ minus: 'Minus',
274
+ period: 'Period',
275
+ slash: 'Slash',
276
+ backquote: 'Backquote',
277
+ bracketleft: 'BracketLeft',
278
+ backslash: 'Backslash',
279
+ bracketright: 'BracketRight',
280
+ quote: 'Quote',
281
+ altgraph: 'AltGraph',
282
+ props: 'Props',
283
+ cancel: 'Cancel',
284
+ clear: 'Clear',
285
+ shift: 'Shift',
286
+ control: 'Control',
287
+ alt: 'Alt',
288
+ accept: 'Accept',
289
+ modechange: 'ModeChange',
290
+ ' ': ' ',
291
+ print: 'Print',
292
+ execute: 'Execute',
293
+ '\u0000': '\u0000',
294
+ a: 'A',
295
+ b: 'B',
296
+ c: 'C',
297
+ d: 'D',
298
+ e: 'E',
299
+ f: 'F',
300
+ g: 'G',
301
+ h: 'H',
302
+ i: 'I',
303
+ j: 'J',
304
+ k: 'K',
305
+ l: 'L',
306
+ m: 'M',
307
+ n: 'N',
308
+ o: 'O',
309
+ p: 'P',
310
+ q: 'Q',
311
+ r: 'R',
312
+ s: 'S',
313
+ t: 'T',
314
+ u: 'U',
315
+ v: 'V',
316
+ w: 'W',
317
+ x: 'X',
318
+ y: 'Y',
319
+ z: 'Z',
320
+ meta: 'Meta',
321
+ '*': '*',
322
+ '+': '+',
323
+ '-': '-',
324
+ '/': '/',
325
+ ';': ';',
326
+ '=': '=',
327
+ ',': ',',
328
+ '.': '.',
329
+ '`': '`',
330
+ '[': '[',
331
+ '\\': '\\',
332
+ ']': ']',
333
+ "'": "'",
334
+ attn: 'Attn',
335
+ crsel: 'CrSel',
336
+ exsel: 'ExSel',
337
+ eraseeof: 'EraseEof',
338
+ play: 'Play',
339
+ zoomout: 'ZoomOut',
340
+ ')': ')',
341
+ '!': '!',
342
+ '@': '@',
343
+ '#': '#',
344
+ $: '$',
345
+ '%': '%',
346
+ '^': '^',
347
+ '&': '&',
348
+ '(': '(',
349
+ ':': ':',
350
+ '<': '<',
351
+ _: '_',
352
+ '>': '>',
353
+ '?': '?',
354
+ '~': '~',
355
+ '{': '{',
356
+ '|': '|',
357
+ '}': '}',
358
+ '"': '"',
359
+ softleft: 'SoftLeft',
360
+ softright: 'SoftRight',
361
+ camera: 'Camera',
362
+ call: 'Call',
363
+ endcall: 'EndCall',
364
+ volumedown: 'VolumeDown',
365
+ volumeup: 'VolumeUp'
366
+ };
367
+ export { KEY_ABBR_TO_STANDARD_MAP, KEY_LOW_TO_STANDARD_MAP, MAC_SYSTEM_HOTKEY_MAP };
368
+
369
+ //# sourceMappingURL=key-map.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions/key-map.mjs","sources":["webpack://@agent-infra/browser/./src/actions/key-map.ts"],"sourcesContent":["/**\n * The following code is modified based on\n * https://github.com/puppeteer/puppeteer/blob/main/packages/puppeteer-core/src/common/USKeyboardLayout.ts\n *\n * Copyright 2017 Google Inc.\n * SPDX-License-Identifier: Apache-2.0\n * https://github.com/puppeteer/puppeteer/blob/main/LICENSE\n */\nimport type { KeyInput } from 'puppeteer-core';\n\n/**\n * Only adapt for common macOS system hotkeys\n *\n * See issues:\n * - https://github.com/bytedance/UI-TARS-desktop/pull/560\n *\n * References:\n * - Mac shortcuts list: https://support.apple.com/zh-cn/102650\n * - Chrome: https://support.google.com/chrome/answer/157179\n * - CDP: https://chromedevtools.github.io/devtools-protocol/tot/Input/#method-dispatchKeyEvent\n * - Commands: https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/editing/commands/editor_command_names.h\n */\nexport const MAC_SYSTEM_HOTKEY_MAP = new Map<\n string,\n { key: KeyInput; commands: string }\n>([\n ['CorM+A', { key: 'KeyA', commands: 'SelectAll' }],\n ['CorM+KeyA', { key: 'KeyA', commands: 'SelectAll' }],\n\n ['CorM+X', { key: 'KeyX', commands: 'Cut' }],\n ['CorM+KeyX', { key: 'KeyX', commands: 'Cut' }],\n\n ['CorM+C', { key: 'KeyC', commands: 'Copy' }],\n ['CorM+KeyC', { key: 'KeyC', commands: 'Copy' }],\n\n ['CorM+V', { key: 'KeyV', commands: 'Paste' }],\n ['CorM+KeyV', { key: 'KeyV', commands: 'Paste' }],\n\n ['CorM+Z', { key: 'KeyZ', commands: 'Undo' }],\n ['CorM+KeyZ', { key: 'KeyZ', commands: 'Undo' }],\n\n ['CorM+Y', { key: 'KeyY', commands: 'Redo' }],\n ['CorM+KeyY', { key: 'KeyY', commands: 'Redo' }],\n ['CorM+Shift+Z', { key: 'KeyZ', commands: 'Redo' }],\n ['CorM+Shift+KeyZ', { key: 'KeyZ', commands: 'Redo' }],\n ['Shift+CorM+Z', { key: 'KeyZ', commands: 'Redo' }],\n ['Shift+CorM+KeyZ', { key: 'KeyZ', commands: 'Redo' }],\n]);\n\nexport const KEY_ABBR_TO_STANDARD_MAP: Readonly<Record<string, KeyInput>> = {\n // modifier keys\n ctrl: 'Control',\n cmd: 'Meta', // macOS only\n command: 'Meta', // macOS only\n opt: 'Alt', // macOS only\n option: 'Alt', // macOS only\n // arraw keys\n up: 'ArrowUp',\n down: 'ArrowDown',\n left: 'ArrowLeft',\n right: 'ArrowRight',\n // others\n esc: 'Escape',\n del: 'Delete',\n ins: 'Insert',\n pgup: 'PageUp',\n pgdown: 'PageDown',\n return: 'Enter',\n};\n\n// Auto-generated form puppeteer-core/src/common/USKeyboardLayout.ts _keyDefinitions\nexport const KEY_LOW_TO_STANDARD_MAP: Readonly<Record<string, KeyInput>> = {\n '0': '0',\n '1': '1',\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n power: 'Power',\n eject: 'Eject',\n abort: 'Abort',\n help: 'Help',\n backspace: 'Backspace',\n tab: 'Tab',\n numpad5: 'Numpad5',\n numpadenter: 'NumpadEnter',\n enter: 'Enter',\n '\\r': '\\r',\n '\\n': '\\n',\n shiftleft: 'ShiftLeft',\n shiftright: 'ShiftRight',\n controlleft: 'ControlLeft',\n controlright: 'ControlRight',\n altleft: 'AltLeft',\n altright: 'AltRight',\n pause: 'Pause',\n capslock: 'CapsLock',\n escape: 'Escape',\n convert: 'Convert',\n nonconvert: 'NonConvert',\n space: 'Space',\n numpad9: 'Numpad9',\n pageup: 'PageUp',\n numpad3: 'Numpad3',\n pagedown: 'PageDown',\n end: 'End',\n numpad1: 'Numpad1',\n home: 'Home',\n numpad7: 'Numpad7',\n arrowleft: 'ArrowLeft',\n numpad4: 'Numpad4',\n numpad8: 'Numpad8',\n arrowup: 'ArrowUp',\n arrowright: 'ArrowRight',\n numpad6: 'Numpad6',\n numpad2: 'Numpad2',\n arrowdown: 'ArrowDown',\n select: 'Select',\n open: 'Open',\n printscreen: 'PrintScreen',\n insert: 'Insert',\n numpad0: 'Numpad0',\n delete: 'Delete',\n numpaddecimal: 'NumpadDecimal',\n digit0: 'Digit0',\n digit1: 'Digit1',\n digit2: 'Digit2',\n digit3: 'Digit3',\n digit4: 'Digit4',\n digit5: 'Digit5',\n digit6: 'Digit6',\n digit7: 'Digit7',\n digit8: 'Digit8',\n digit9: 'Digit9',\n keya: 'KeyA',\n keyb: 'KeyB',\n keyc: 'KeyC',\n keyd: 'KeyD',\n keye: 'KeyE',\n keyf: 'KeyF',\n keyg: 'KeyG',\n keyh: 'KeyH',\n keyi: 'KeyI',\n keyj: 'KeyJ',\n keyk: 'KeyK',\n keyl: 'KeyL',\n keym: 'KeyM',\n keyn: 'KeyN',\n keyo: 'KeyO',\n keyp: 'KeyP',\n keyq: 'KeyQ',\n keyr: 'KeyR',\n keys: 'KeyS',\n keyt: 'KeyT',\n keyu: 'KeyU',\n keyv: 'KeyV',\n keyw: 'KeyW',\n keyx: 'KeyX',\n keyy: 'KeyY',\n keyz: 'KeyZ',\n metaleft: 'MetaLeft',\n metaright: 'MetaRight',\n contextmenu: 'ContextMenu',\n numpadmultiply: 'NumpadMultiply',\n numpadadd: 'NumpadAdd',\n numpadsubtract: 'NumpadSubtract',\n numpaddivide: 'NumpadDivide',\n f1: 'F1',\n f2: 'F2',\n f3: 'F3',\n f4: 'F4',\n f5: 'F5',\n f6: 'F6',\n f7: 'F7',\n f8: 'F8',\n f9: 'F9',\n f10: 'F10',\n f11: 'F11',\n f12: 'F12',\n f13: 'F13',\n f14: 'F14',\n f15: 'F15',\n f16: 'F16',\n f17: 'F17',\n f18: 'F18',\n f19: 'F19',\n f20: 'F20',\n f21: 'F21',\n f22: 'F22',\n f23: 'F23',\n f24: 'F24',\n numlock: 'NumLock',\n scrolllock: 'ScrollLock',\n audiovolumemute: 'AudioVolumeMute',\n audiovolumedown: 'AudioVolumeDown',\n audiovolumeup: 'AudioVolumeUp',\n mediatracknext: 'MediaTrackNext',\n mediatrackprevious: 'MediaTrackPrevious',\n mediastop: 'MediaStop',\n mediaplaypause: 'MediaPlayPause',\n semicolon: 'Semicolon',\n equal: 'Equal',\n numpadequal: 'NumpadEqual',\n comma: 'Comma',\n minus: 'Minus',\n period: 'Period',\n slash: 'Slash',\n backquote: 'Backquote',\n bracketleft: 'BracketLeft',\n backslash: 'Backslash',\n bracketright: 'BracketRight',\n quote: 'Quote',\n altgraph: 'AltGraph',\n props: 'Props',\n cancel: 'Cancel',\n clear: 'Clear',\n shift: 'Shift',\n control: 'Control',\n alt: 'Alt',\n accept: 'Accept',\n modechange: 'ModeChange',\n ' ': ' ',\n print: 'Print',\n execute: 'Execute',\n '\\u0000': '\\u0000',\n a: 'A',\n b: 'B',\n c: 'C',\n d: 'D',\n e: 'E',\n f: 'F',\n g: 'G',\n h: 'H',\n i: 'I',\n j: 'J',\n k: 'K',\n l: 'L',\n m: 'M',\n n: 'N',\n o: 'O',\n p: 'P',\n q: 'Q',\n r: 'R',\n s: 'S',\n t: 'T',\n u: 'U',\n v: 'V',\n w: 'W',\n x: 'X',\n y: 'Y',\n z: 'Z',\n meta: 'Meta',\n '*': '*',\n '+': '+',\n '-': '-',\n '/': '/',\n ';': ';',\n '=': '=',\n ',': ',',\n '.': '.',\n '`': '`',\n '[': '[',\n '\\\\': '\\\\',\n ']': ']',\n \"'\": \"'\",\n attn: 'Attn',\n crsel: 'CrSel',\n exsel: 'ExSel',\n eraseeof: 'EraseEof',\n play: 'Play',\n zoomout: 'ZoomOut',\n ')': ')',\n '!': '!',\n '@': '@',\n '#': '#',\n $: '$',\n '%': '%',\n '^': '^',\n '&': '&',\n '(': '(',\n ':': ':',\n '<': '<',\n _: '_',\n '>': '>',\n '?': '?',\n '~': '~',\n '{': '{',\n '|': '|',\n '}': '}',\n '\"': '\"',\n softleft: 'SoftLeft',\n softright: 'SoftRight',\n camera: 'Camera',\n call: 'Call',\n endcall: 'EndCall',\n volumedown: 'VolumeDown',\n volumeup: 'VolumeUp',\n};\n"],"names":["MAC_SYSTEM_HOTKEY_MAP","Map","KEY_ABBR_TO_STANDARD_MAP","KEY_LOW_TO_STANDARD_MAP"],"mappings":"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AAa;IACb,WAAW;IACX,cAAc;IACd,OAAO;IACP,UAAU;IACV,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,SAAS;IACT,KAAK;IACL,QAAQ;IACR,YAAY;IACZ,KAAK;IACL,OAAO;IACP,SAAS;IACT,UAAU;IACV,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,MAAM;IACN,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,OAAO;IACP,OAAO;IACP,UAAU;IACV,MAAM;IACN,SAAS;IACT,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,GAAG;IACH,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,GAAG;IACH,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,UAAU;IACV,WAAW;IACX,QAAQ;IACR,MAAM;IACN,SAAS;IACT,YAAY;IACZ,UAAU;AACZ"}
@@ -0,0 +1,21 @@
1
+ import type { Page } from 'puppeteer-core';
2
+ import type { EnvInfo, KeyboardOptions, KeyOrHotKeyInput, ActionResult } from '../types';
3
+ import type { TabDialog } from '../tabs/dialog';
4
+ export declare class Keyboard {
5
+ #private;
6
+ constructor(page: Page, dialog: TabDialog, env: EnvInfo);
7
+ /**
8
+ * Enhance puppeteer's [keyboard.press()](https://pptr.dev/api/puppeteer.keyboard.press) to support combination hotkeys.
9
+ */
10
+ press(key: KeyOrHotKeyInput, options?: KeyboardOptions): Promise<ActionResult>;
11
+ /**
12
+ * Enhance puppeteer's [keyboard.down()](https://pptr.dev/api/puppeteer.keyboard.down) to support combination hotkeys.
13
+ */
14
+ down(key: KeyOrHotKeyInput, options?: KeyboardOptions): Promise<ActionResult>;
15
+ /**
16
+ * Enhance puppeteer's [keyboard.up()](https://pptr.dev/api/puppeteer.keyboard.up) to support combination hotkeys.
17
+ */
18
+ up(key: KeyOrHotKeyInput): Promise<ActionResult>;
19
+ type(text: string, options?: KeyboardOptions): Promise<ActionResult>;
20
+ }
21
+ //# sourceMappingURL=keyboard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/actions/keyboard.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAY,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EACf,gBAAgB,EAChB,YAAY,EACb,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,QAAQ;;gBAKP,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO;IAMvD;;OAEG;IACG,KAAK,CACT,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC;IA0BxB;;OAEG;IACG,IAAI,CACR,GAAG,EAAE,gBAAgB,EACrB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC;IAqBxB;;OAEG;IACG,EAAE,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,CAAC;IAchD,IAAI,CACR,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC;CAoFzB"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * Copyright (c) 2025 Bytedance, Inc. and its affiliates.
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+ "use strict";
6
+ var __webpack_require__ = {};
7
+ (()=>{
8
+ __webpack_require__.n = (module)=>{
9
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
10
+ __webpack_require__.d(getter, {
11
+ a: getter
12
+ });
13
+ return getter;
14
+ };
15
+ })();
16
+ (()=>{
17
+ __webpack_require__.d = (exports1, definition)=>{
18
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
19
+ enumerable: true,
20
+ get: definition[key]
21
+ });
22
+ };
23
+ })();
24
+ (()=>{
25
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
26
+ })();
27
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ Keyboard: ()=>Keyboard
41
+ });
42
+ const external_delay_namespaceObject = require("delay");
43
+ var external_delay_default = /*#__PURE__*/ __webpack_require__.n(external_delay_namespaceObject);
44
+ const external_key_map_js_namespaceObject = require("./key-map.js");
45
+ function _check_private_redeclaration(obj, privateCollection) {
46
+ if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
47
+ }
48
+ function _class_apply_descriptor_get(receiver, descriptor) {
49
+ if (descriptor.get) return descriptor.get.call(receiver);
50
+ return descriptor.value;
51
+ }
52
+ function _class_apply_descriptor_set(receiver, descriptor, value) {
53
+ if (descriptor.set) descriptor.set.call(receiver, value);
54
+ else {
55
+ if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
56
+ descriptor.value = value;
57
+ }
58
+ }
59
+ function _class_extract_field_descriptor(receiver, privateMap, action) {
60
+ if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
61
+ return privateMap.get(receiver);
62
+ }
63
+ function _class_private_field_get(receiver, privateMap) {
64
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
65
+ return _class_apply_descriptor_get(receiver, descriptor);
66
+ }
67
+ function _class_private_field_init(obj, privateMap, value) {
68
+ _check_private_redeclaration(obj, privateMap);
69
+ privateMap.set(obj, value);
70
+ }
71
+ function _class_private_field_set(receiver, privateMap, value) {
72
+ var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
73
+ _class_apply_descriptor_set(receiver, descriptor, value);
74
+ return value;
75
+ }
76
+ function _class_private_method_get(receiver, privateSet, fn) {
77
+ if (!privateSet.has(receiver)) throw new TypeError("attempted to get private field on non-instance");
78
+ return fn;
79
+ }
80
+ function _class_private_method_init(obj, privateSet) {
81
+ _check_private_redeclaration(obj, privateSet);
82
+ privateSet.add(obj);
83
+ }
84
+ var _page = /*#__PURE__*/ new WeakMap(), _env = /*#__PURE__*/ new WeakMap(), _dialog = /*#__PURE__*/ new WeakMap(), _formatHotkey = /*#__PURE__*/ new WeakSet(), _macOSCDPHotKey = /*#__PURE__*/ new WeakSet(), _buildDialogResponse = /*#__PURE__*/ new WeakSet();
85
+ class Keyboard {
86
+ async press(key, options = {}) {
87
+ if (_class_private_field_get(this, _dialog).isOpen) return _class_private_method_get(this, _buildDialogResponse, buildDialogResponse).call(this, 'press');
88
+ const formattedHotkey = _class_private_method_get(this, _formatHotkey, formatHotkey).call(this, key);
89
+ if ('macOS' === _class_private_field_get(this, _env).osName && 'Chrome' === _class_private_field_get(this, _env).browserName) {
90
+ const success = await _class_private_method_get(this, _macOSCDPHotKey, macOSCDPHotKey).call(this, formattedHotkey, options);
91
+ if (success) return {
92
+ success: true
93
+ };
94
+ }
95
+ for (const key of formattedHotkey)await _class_private_field_get(this, _page).keyboard.down(key);
96
+ await external_delay_default()(options.delay ?? 0);
97
+ for (const key of formattedHotkey.reverse())await _class_private_field_get(this, _page).keyboard.up(key);
98
+ return {
99
+ success: true
100
+ };
101
+ }
102
+ async down(key, options = {}) {
103
+ if (_class_private_field_get(this, _dialog).isOpen) return _class_private_method_get(this, _buildDialogResponse, buildDialogResponse).call(this, 'down');
104
+ const formattedHotkey = _class_private_method_get(this, _formatHotkey, formatHotkey).call(this, key);
105
+ if ('macOS' === _class_private_field_get(this, _env).osName && 'Chrome' === _class_private_field_get(this, _env).browserName) {
106
+ const success = await _class_private_method_get(this, _macOSCDPHotKey, macOSCDPHotKey).call(this, formattedHotkey, options);
107
+ if (success) return {
108
+ success: true
109
+ };
110
+ }
111
+ for (const key of formattedHotkey)await _class_private_field_get(this, _page).keyboard.down(key);
112
+ return {
113
+ success: true
114
+ };
115
+ }
116
+ async up(key) {
117
+ if (_class_private_field_get(this, _dialog).isOpen) return _class_private_method_get(this, _buildDialogResponse, buildDialogResponse).call(this, 'up');
118
+ const formattedHotkey = _class_private_method_get(this, _formatHotkey, formatHotkey).call(this, key);
119
+ for (const key of formattedHotkey.reverse())await _class_private_field_get(this, _page).keyboard.up(key);
120
+ return {
121
+ success: true
122
+ };
123
+ }
124
+ async type(text, options = {}) {
125
+ if (_class_private_field_get(this, _dialog).isOpen) return _class_private_method_get(this, _buildDialogResponse, buildDialogResponse).call(this, 'type');
126
+ if (text.length < 15 && options.delay) await _class_private_field_get(this, _page).keyboard.type(text, options);
127
+ else await _class_private_field_get(this, _page).keyboard.sendCharacter(text);
128
+ return {
129
+ success: true
130
+ };
131
+ }
132
+ constructor(page, dialog, env){
133
+ _class_private_method_init(this, _formatHotkey);
134
+ _class_private_method_init(this, _macOSCDPHotKey);
135
+ _class_private_method_init(this, _buildDialogResponse);
136
+ _class_private_field_init(this, _page, {
137
+ writable: true,
138
+ value: void 0
139
+ });
140
+ _class_private_field_init(this, _env, {
141
+ writable: true,
142
+ value: void 0
143
+ });
144
+ _class_private_field_init(this, _dialog, {
145
+ writable: true,
146
+ value: void 0
147
+ });
148
+ _class_private_field_set(this, _page, page);
149
+ _class_private_field_set(this, _dialog, dialog);
150
+ _class_private_field_set(this, _env, env);
151
+ }
152
+ }
153
+ function formatHotkey(hotkey) {
154
+ const lowerCaseHotkey = hotkey.toLowerCase();
155
+ const keys = lowerCaseHotkey.split(/[\s+]+/);
156
+ const formattedKeys = keys.map((key)=>{
157
+ if (external_key_map_js_namespaceObject.KEY_ABBR_TO_STANDARD_MAP[key]) return external_key_map_js_namespaceObject.KEY_ABBR_TO_STANDARD_MAP[key];
158
+ if (external_key_map_js_namespaceObject.KEY_LOW_TO_STANDARD_MAP[key]) return external_key_map_js_namespaceObject.KEY_LOW_TO_STANDARD_MAP[key];
159
+ throw new Error('Unsupported key: ' + key);
160
+ });
161
+ return formattedKeys;
162
+ }
163
+ async function macOSCDPHotKey(keys, options) {
164
+ const hotkey = keys.map((key)=>{
165
+ if ('Control' === key || 'Meta' === key) return 'CorM';
166
+ return key;
167
+ }).join('+');
168
+ const command = external_key_map_js_namespaceObject.MAC_SYSTEM_HOTKEY_MAP.get(hotkey);
169
+ if (command) {
170
+ await _class_private_field_get(this, _page).keyboard.down(command.key, {
171
+ commands: [
172
+ command.commands
173
+ ]
174
+ });
175
+ await external_delay_default()(options.delay ?? 0);
176
+ await _class_private_field_get(this, _page).keyboard.up(command.key);
177
+ return true;
178
+ }
179
+ return false;
180
+ }
181
+ function buildDialogResponse(type) {
182
+ return {
183
+ success: false,
184
+ message: `Cannot perform keyboard.${type}() operation because there is a dialog on the current page.`,
185
+ detail: _class_private_field_get(this, _dialog).meta
186
+ };
187
+ }
188
+ exports.Keyboard = __webpack_exports__.Keyboard;
189
+ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
190
+ "Keyboard"
191
+ ].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
192
+ Object.defineProperty(exports, '__esModule', {
193
+ value: true
194
+ });
195
+
196
+ //# sourceMappingURL=keyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions/keyboard.js","sources":["webpack://@agent-infra/browser/webpack/runtime/compat_get_default_export","webpack://@agent-infra/browser/webpack/runtime/define_property_getters","webpack://@agent-infra/browser/webpack/runtime/has_own_property","webpack://@agent-infra/browser/webpack/runtime/make_namespace_object","webpack://@agent-infra/browser/./src/actions/keyboard.ts"],"sourcesContent":["// getDefaultExport function for compatibility with non-ESM modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};\n","__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n }\n }\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/*\n * Copyright (c) 2025 Bytedance, Inc. and its affiliates.\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport delay from 'delay';\n\nimport {\n MAC_SYSTEM_HOTKEY_MAP,\n KEY_ABBR_TO_STANDARD_MAP,\n KEY_LOW_TO_STANDARD_MAP,\n} from './key-map';\n\nimport type { KeyInput, Page } from 'puppeteer-core';\nimport type {\n EnvInfo,\n DialogMetaInfo,\n KeyboardOptions,\n KeyOrHotKeyInput,\n ActionResult,\n} from '../types';\nimport type { TabDialog } from '../tabs/dialog';\n\nexport class Keyboard {\n #page: Page;\n #env: EnvInfo;\n #dialog: TabDialog;\n\n constructor(page: Page, dialog: TabDialog, env: EnvInfo) {\n this.#page = page;\n this.#dialog = dialog;\n this.#env = env;\n }\n\n /**\n * Enhance puppeteer's [keyboard.press()](https://pptr.dev/api/puppeteer.keyboard.press) to support combination hotkeys.\n */\n async press(\n key: KeyOrHotKeyInput,\n options: KeyboardOptions = {},\n ): Promise<ActionResult> {\n if (this.#dialog.isOpen) {\n return this.#buildDialogResponse('press');\n }\n\n const formattedHotkey = this.#formatHotkey(key);\n\n if (this.#env.osName === 'macOS' && this.#env.browserName === 'Chrome') {\n const success = await this.#macOSCDPHotKey(formattedHotkey, options);\n if (success) {\n return { success: true };\n }\n }\n\n // default behavior: press keys one by one\n for (const key of formattedHotkey) {\n await this.#page.keyboard.down(key);\n }\n await delay(options.delay ?? 0);\n for (const key of formattedHotkey.reverse()) {\n await this.#page.keyboard.up(key);\n }\n\n return { success: true };\n }\n\n /**\n * Enhance puppeteer's [keyboard.down()](https://pptr.dev/api/puppeteer.keyboard.down) to support combination hotkeys.\n */\n async down(\n key: KeyOrHotKeyInput,\n options: KeyboardOptions = {},\n ): Promise<ActionResult> {\n if (this.#dialog.isOpen) {\n return this.#buildDialogResponse('down');\n }\n\n const formattedHotkey = this.#formatHotkey(key);\n\n if (this.#env.osName === 'macOS' && this.#env.browserName === 'Chrome') {\n const success = await this.#macOSCDPHotKey(formattedHotkey, options);\n if (success) {\n return { success: true };\n }\n }\n\n for (const key of formattedHotkey) {\n await this.#page.keyboard.down(key);\n }\n\n return { success: true };\n }\n\n /**\n * Enhance puppeteer's [keyboard.up()](https://pptr.dev/api/puppeteer.keyboard.up) to support combination hotkeys.\n */\n async up(key: KeyOrHotKeyInput): Promise<ActionResult> {\n if (this.#dialog.isOpen) {\n return this.#buildDialogResponse('up');\n }\n\n const formattedHotkey = this.#formatHotkey(key);\n\n for (const key of formattedHotkey.reverse()) {\n await this.#page.keyboard.up(key);\n }\n\n return { success: true };\n }\n\n async type(\n text: string,\n options: KeyboardOptions = {},\n ): Promise<ActionResult> {\n if (this.#dialog.isOpen) {\n return this.#buildDialogResponse('type');\n }\n\n if (text.length < 15 && options.delay) {\n await this.#page.keyboard.type(text, options);\n } else {\n await this.#page.keyboard.sendCharacter(text);\n }\n\n return { success: true };\n }\n\n /**\n * Format the hotkey string into an array of KeyInput.\n *\n * - example1: 'ctrl+c' -> ['Control', 'C']\n * - example2: 'control+c' -> ['Control', 'C']\n * - example3: 'Control+C' -> ['Control', 'C']\n */\n #formatHotkey(hotkey: string): KeyInput[] {\n const lowerCaseHotkey = hotkey.toLowerCase();\n const keys = lowerCaseHotkey.split(/[\\s+]+/);\n\n const formattedKeys = keys.map((key) => {\n if (KEY_ABBR_TO_STANDARD_MAP[key]) {\n return KEY_ABBR_TO_STANDARD_MAP[key];\n }\n // Lowercase key to standard key\n else if (KEY_LOW_TO_STANDARD_MAP[key]) {\n return KEY_LOW_TO_STANDARD_MAP[key];\n }\n // Unsupported key\n else {\n throw new Error('Unsupported key: ' + key);\n }\n });\n\n return formattedKeys;\n }\n\n /**\n * adapt for common macOS system and chrome hotkeys\n *\n * see issues: https://github.com/bytedance/UI-TARS-desktop/pull/560\n *\n * example: 'Ctrl+C' -> CDP: { key: 'KeyC', commands: 'Copy' }\n */\n async #macOSCDPHotKey(\n keys: KeyInput[],\n options: Readonly<KeyboardOptions>,\n ): Promise<boolean> {\n const hotkey = keys\n .map((key) => {\n if (key === 'Control' || key === 'Meta') {\n return 'CorM';\n }\n return key;\n })\n .join('+');\n\n const command = MAC_SYSTEM_HOTKEY_MAP.get(hotkey);\n\n if (command) {\n await this.#page.keyboard.down(command.key, {\n commands: [command.commands],\n });\n await delay(options.delay ?? 0);\n await this.#page.keyboard.up(command.key);\n\n return true;\n }\n\n return false;\n }\n\n #buildDialogResponse(type: string): ActionResult {\n return {\n success: false,\n message: `Cannot perform keyboard.${type}() operation because there is a dialog on the current page.`,\n detail: this.#dialog.meta as DialogMetaInfo,\n };\n }\n}\n"],"names":["__webpack_require__","module","getter","definition","key","Object","obj","prop","Symbol","_page","_env","_dialog","formatHotkey","_macOSCDPHotKey","buildDialogResponse","Keyboard","options","formattedHotkey","success","macOSCDPHotKey","delay","text","page","dialog","env","hotkey","lowerCaseHotkey","keys","formattedKeys","KEY_ABBR_TO_STANDARD_MAP","KEY_LOW_TO_STANDARD_MAP","Error","command","MAC_SYSTEM_HOTKEY_MAP","type"],"mappings":"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"}