@pyscript/core 0.6.38 → 0.6.40

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 (53) hide show
  1. package/dist/{codemirror-7hplgyVJ.js → codemirror-Uuz49kj7.js} +2 -2
  2. package/dist/{codemirror-7hplgyVJ.js.map → codemirror-Uuz49kj7.js.map} +1 -1
  3. package/dist/codemirror_commands-CmeJ70sL.js +2 -0
  4. package/dist/codemirror_commands-CmeJ70sL.js.map +1 -0
  5. package/dist/{codemirror_lang-python-CiZHxs6U.js → codemirror_lang-python-CdfPcWbg.js} +2 -2
  6. package/dist/{codemirror_lang-python-CiZHxs6U.js.map → codemirror_lang-python-CdfPcWbg.js.map} +1 -1
  7. package/dist/{codemirror_language-CCfjGGWm.js → codemirror_language-DbhkgEi1.js} +2 -2
  8. package/dist/{codemirror_language-CCfjGGWm.js.map → codemirror_language-DbhkgEi1.js.map} +1 -1
  9. package/dist/codemirror_view-BwC4I3hj.js +2 -0
  10. package/dist/codemirror_view-BwC4I3hj.js.map +1 -0
  11. package/dist/core-CnkTGfB2.js +4 -0
  12. package/dist/core-CnkTGfB2.js.map +1 -0
  13. package/dist/core.js +1 -1
  14. package/dist/{deprecations-manager-Bc0vdkmD.js → deprecations-manager-Bs6V0c-Z.js} +2 -2
  15. package/dist/{deprecations-manager-Bc0vdkmD.js.map → deprecations-manager-Bs6V0c-Z.js.map} +1 -1
  16. package/dist/{donkey-BDkoIwqI.js → donkey-By9dtOtj.js} +2 -2
  17. package/dist/{donkey-BDkoIwqI.js.map → donkey-By9dtOtj.js.map} +1 -1
  18. package/dist/{error-D7PKntV7.js → error-DAZ5Tla5.js} +2 -2
  19. package/dist/{error-D7PKntV7.js.map → error-DAZ5Tla5.js.map} +1 -1
  20. package/dist/{index-DNWf5Jlg.js → index-B25jxAgK.js} +2 -2
  21. package/dist/{index-DNWf5Jlg.js.map → index-B25jxAgK.js.map} +1 -1
  22. package/dist/{mpy-BuOSPGDV.js → mpy-CouBnAE6.js} +2 -2
  23. package/dist/{mpy-BuOSPGDV.js.map → mpy-CouBnAE6.js.map} +1 -1
  24. package/dist/{py-zIJ4EPwG.js → py-DlmiY_mw.js} +2 -2
  25. package/dist/{py-zIJ4EPwG.js.map → py-DlmiY_mw.js.map} +1 -1
  26. package/dist/{py-editor-DPeSlkrP.js → py-editor-c1PVV_IG.js} +2 -2
  27. package/dist/{py-editor-DPeSlkrP.js.map → py-editor-c1PVV_IG.js.map} +1 -1
  28. package/dist/py-game-s32VgD6F.js +2 -0
  29. package/dist/py-game-s32VgD6F.js.map +1 -0
  30. package/dist/{py-terminal-DMwP49hN.js → py-terminal-BrwaBrHg.js} +2 -2
  31. package/dist/{py-terminal-DMwP49hN.js.map → py-terminal-BrwaBrHg.js.map} +1 -1
  32. package/dist/xterm-readline-e8QPhSrm.js.map +1 -1
  33. package/dist/xterm_addon-fit--gyF3PcZ.js.map +1 -1
  34. package/dist/xterm_addon-web-links-Cnej-nJ6.js.map +1 -1
  35. package/dist/zip-DxlTOqbw.js +2 -0
  36. package/dist/zip-DxlTOqbw.js.map +1 -0
  37. package/package.json +12 -12
  38. package/src/3rd-party/xterm-readline.js +1 -1
  39. package/src/3rd-party/xterm_addon-fit.js +1 -1
  40. package/src/3rd-party/xterm_addon-web-links.js +1 -1
  41. package/src/plugins/py-game.js +12 -0
  42. package/src/stdlib/pyscript/media.py +9 -12
  43. package/src/stdlib/pyscript.js +1 -1
  44. package/dist/codemirror_commands-D39x9C5q.js +0 -2
  45. package/dist/codemirror_commands-D39x9C5q.js.map +0 -1
  46. package/dist/codemirror_view-Bw06hiJi.js +0 -2
  47. package/dist/codemirror_view-Bw06hiJi.js.map +0 -1
  48. package/dist/core-CV6yifra.js +0 -4
  49. package/dist/core-CV6yifra.js.map +0 -1
  50. package/dist/py-game-wfYxRIql.js +0 -2
  51. package/dist/py-game-wfYxRIql.js.map +0 -1
  52. package/dist/zip-DPXsOtR5.js +0 -2
  53. package/dist/zip-DPXsOtR5.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pyscript/core",
3
- "version": "0.6.38",
3
+ "version": "0.6.40",
4
4
  "type": "module",
5
5
  "description": "PyScript",
6
6
  "module": "./index.js",
@@ -66,38 +66,38 @@
66
66
  "@webreflection/idb-map": "^0.3.2",
67
67
  "add-promise-listener": "^0.1.3",
68
68
  "basic-devtools": "^0.1.6",
69
- "polyscript": "^0.16.21",
70
- "sabayon": "^0.6.6",
69
+ "polyscript": "^0.17.1",
70
+ "sabayon": "^0.7.2",
71
71
  "sticky-module": "^0.1.1",
72
72
  "to-json-callback": "^0.1.1",
73
73
  "type-checked-collections": "^0.1.7"
74
74
  },
75
75
  "devDependencies": {
76
- "@codemirror/commands": "^6.8.0",
76
+ "@codemirror/commands": "^6.8.1",
77
77
  "@codemirror/lang-python": "^6.1.7",
78
- "@codemirror/language": "^6.10.8",
78
+ "@codemirror/language": "^6.11.0",
79
79
  "@codemirror/state": "^6.5.2",
80
- "@codemirror/view": "^6.36.4",
81
- "@playwright/test": "^1.51.0",
80
+ "@codemirror/view": "^6.36.5",
81
+ "@playwright/test": "^1.51.1",
82
82
  "@rollup/plugin-commonjs": "^28.0.3",
83
- "@rollup/plugin-node-resolve": "^16.0.0",
83
+ "@rollup/plugin-node-resolve": "^16.0.1",
84
84
  "@rollup/plugin-terser": "^0.4.4",
85
85
  "@webreflection/toml-j0.4": "^1.1.3",
86
86
  "@xterm/addon-fit": "^0.10.0",
87
87
  "@xterm/addon-web-links": "^0.11.0",
88
88
  "@xterm/xterm": "^5.5.0",
89
- "bun": "^1.2.4",
89
+ "bun": "^1.2.8",
90
90
  "chokidar": "^4.0.3",
91
91
  "codedent": "^0.1.2",
92
92
  "codemirror": "^6.0.1",
93
- "eslint": "^9.22.0",
93
+ "eslint": "^9.24.0",
94
94
  "flatted": "^3.3.3",
95
- "rollup": "^4.35.0",
95
+ "rollup": "^4.39.0",
96
96
  "rollup-plugin-postcss": "^4.0.2",
97
97
  "rollup-plugin-string": "^3.0.0",
98
98
  "static-handler": "^0.5.3",
99
99
  "string-width": "^7.2.0",
100
- "typescript": "^5.8.2",
100
+ "typescript": "^5.8.3",
101
101
  "xterm-readline": "^1.1.2"
102
102
  },
103
103
  "repository": {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2.
2
+ * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.
3
3
  * Original file: /npm/xterm-readline@1.1.2/lib/readline.js
4
4
  *
5
5
  * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2.
2
+ * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.
3
3
  * Original file: /npm/@xterm/addon-fit@0.10.0/lib/addon-fit.js
4
4
  *
5
5
  * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Bundled by jsDelivr using Rollup v2.79.1 and Terser v5.19.2.
2
+ * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.
3
3
  * Original file: /npm/@xterm/addon-web-links@0.11.0/lib/addon-web-links.js
4
4
  *
5
5
  * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
@@ -11,6 +11,17 @@ import { getText } from "../fetch.js";
11
11
 
12
12
  const progress = createProgress("py-game");
13
13
 
14
+ const inputPatch = `
15
+ import builtins
16
+ def input(prompt=""):
17
+ import js
18
+ return js.prompt(prompt)
19
+
20
+ builtins.input = input
21
+ del builtins
22
+ del input
23
+ `;
24
+
14
25
  let toBeWarned = true;
15
26
 
16
27
  const hooks = {
@@ -63,6 +74,7 @@ const hooks = {
63
74
  });
64
75
 
65
76
  await wrap.interpreter.runPythonAsync(stdlib);
77
+ wrap.interpreter.runPython(inputPatch);
66
78
 
67
79
  let code = dedent(script.textContent);
68
80
  if (script.src) code = await fetch(script.src).then(getText);
@@ -31,25 +31,22 @@ class Device:
31
31
 
32
32
  @classmethod
33
33
  async def load(cls, audio=False, video=True):
34
- """Load the device stream."""
35
- options = window.Object.new()
36
- options.audio = audio
34
+ """
35
+ Load the device stream.
36
+ """
37
+ options = {}
38
+ options["audio"] = audio
37
39
  if isinstance(video, bool):
38
- options.video = video
40
+ options["video"] = video
39
41
  else:
40
- # TODO: Think this can be simplified but need to check it on the pyodide side
41
-
42
- # TODO: this is pyodide specific. shouldn't be!
43
- options.video = window.Object.new()
42
+ options["video"] = {}
44
43
  for k in video:
45
- setattr(options.video, k, to_js(video[k]))
46
-
47
- return await window.navigator.mediaDevices.getUserMedia(options)
44
+ options["video"][k] = video[k]
45
+ return await window.navigator.mediaDevices.getUserMedia(to_js(options))
48
46
 
49
47
  async def get_stream(self):
50
48
  key = self.kind.replace("input", "").replace("output", "")
51
49
  options = {key: {"deviceId": {"exact": self.id}}}
52
-
53
50
  return await self.load(**options)
54
51
 
55
52
 
@@ -9,7 +9,7 @@ export default {
9
9
  "flatted.py": "import json as _json\nclass _Known:\n\tdef __init__(A):A.key=[];A.value=[]\nclass _String:\n\tdef __init__(A,value):A.value=value\ndef _array_keys(value):\n\tA=[];B=0\n\tfor C in value:A.append(B);B+=1\n\treturn A\ndef _object_keys(value):\n\tA=[]\n\tfor B in value:A.append(B)\n\treturn A\ndef _is_array(value):return isinstance(value,(list,tuple))\ndef _is_object(value):return isinstance(value,dict)\ndef _is_string(value):return isinstance(value,str)\ndef _index(known,input,value):B=value;A=known;input.append(B);C=str(len(input)-1);A.key.append(B);A.value.append(C);return C\ndef _loop(keys,input,known,output):\n\tA=output\n\tfor B in keys:\n\t\tC=A[B]\n\t\tif isinstance(C,_String):_ref(B,input[int(C.value)],input,known,A)\n\treturn A\ndef _ref(key,value,input,known,output):\n\tB=known;A=value\n\tif _is_array(A)and A not in B:B.append(A);A=_loop(_array_keys(A),input,B,A)\n\telif _is_object(A)and A not in B:B.append(A);A=_loop(_object_keys(A),input,B,A)\n\toutput[key]=A\ndef _relate(known,input,value):\n\tB=known;A=value\n\tif _is_string(A)or _is_array(A)or _is_object(A):\n\t\ttry:return B.value[B.key.index(A)]\n\t\texcept:return _index(B,input,A)\n\treturn A\ndef _transform(known,input,value):\n\tB=known;A=value\n\tif _is_array(A):\n\t\tC=[]\n\t\tfor F in A:C.append(_relate(B,input,F))\n\t\treturn C\n\tif _is_object(A):\n\t\tD={}\n\t\tfor E in A:D[E]=_relate(B,input,A[E])\n\t\treturn D\n\treturn A\ndef _wrap(value):\n\tA=value\n\tif _is_string(A):return _String(A)\n\tif _is_array(A):\n\t\tB=0\n\t\tfor D in A:A[B]=_wrap(D);B+=1\n\telif _is_object(A):\n\t\tfor C in A:A[C]=_wrap(A[C])\n\treturn A\ndef parse(value,*C,**D):\n\tA=value;E=_json.loads(A,*C,**D);B=[]\n\tfor A in E:B.append(_wrap(A))\n\tinput=[]\n\tfor A in B:\n\t\tif isinstance(A,_String):input.append(A.value)\n\t\telse:input.append(A)\n\tA=input[0]\n\tif _is_array(A):return _loop(_array_keys(A),input,[A],A)\n\tif _is_object(A):return _loop(_object_keys(A),input,[A],A)\n\treturn A\ndef stringify(value,*D,**E):\n\tB=_Known();input=[];C=[];A=int(_index(B,input,value))\n\twhile A<len(input):C.append(_transform(B,input,input[A]));A+=1\n\treturn _json.dumps(C,*D,**E)",
10
10
  "fs.py": "mounted={}\nasync def mount(path,mode='readwrite',root='',id='pyscript'):\n\tE=path;import js;from _pyscript import fs as A,interpreter as I;from pyscript.ffi import to_js as H;from pyscript.magic_js import RUNNING_IN_WORKER as J,sync;js.console.warn('experimental pyscript.fs ⚠️');B=None;C=f\"{E}@{id}\";F={'id':id,'mode':mode}\n\tif root!='':F['startIn']=root\n\tif J:\n\t\tG=sync.storeFSHandler(C,H(F))\n\t\tif isinstance(G,bool):D=G\n\t\telse:D=await G\n\t\tif D:from polyscript import IDBMap as K;L=K.new(A.NAMESPACE);B=await L.get(C)\n\t\telse:raise RuntimeError(A.ERROR)\n\telse:\n\t\tD=await A.idb.has(C)\n\t\tif D:B=await A.idb.get(C)\n\t\telse:B=await A.getFileSystemDirectoryHandle(H(F));await A.idb.set(C,B)\n\tmounted[E]=await I.mountNativeFS(E,B)\nasync def sync(path):await mounted[path].syncfs()\nasync def unmount(path):from _pyscript import interpreter as A;await sync(path);A._module.FS.unmount(path)",
11
11
  "magic_js.py": "import json,sys,js as globalThis\nfrom polyscript import config as _config,js_modules\nfrom pyscript.util import NotSupported\nRUNNING_IN_WORKER=not hasattr(globalThis,'document')\nconfig=json.loads(globalThis.JSON.stringify(_config))\nif'MicroPython'in sys.version:config['type']='mpy'\nelse:config['type']='py'\nclass JSModule:\n\tdef __init__(A,name):A.name=name\n\tdef __getattr__(B,field):\n\t\tA=field\n\t\tif not A.startswith('_'):return getattr(getattr(js_modules,B.name),A)\nfor name in globalThis.Reflect.ownKeys(js_modules):sys.modules[f\"pyscript.js_modules.{name}\"]=JSModule(name)\nsys.modules['pyscript.js_modules']=js_modules\nif RUNNING_IN_WORKER:\n\timport polyscript;PyWorker=NotSupported('pyscript.PyWorker','pyscript.PyWorker works only when running in the main thread')\n\ttry:import js;window=polyscript.xworker.window;document=window.document;js.document=document;js_import=window.Function('return (...urls) => Promise.all(urls.map((url) => import(url)))')()\n\texcept:message='Unable to use `window` or `document` -> https://docs.pyscript.net/latest/faq/#sharedarraybuffer';globalThis.console.warn(message);window=NotSupported('pyscript.window',message);document=NotSupported('pyscript.document',message);js_import=None\n\tsync=polyscript.xworker.sync\n\tdef current_target():return polyscript.target\nelse:\n\timport _pyscript;from _pyscript import PyWorker,js_import;window=globalThis;document=globalThis.document;sync=NotSupported('pyscript.sync','pyscript.sync works only when running in a worker')\n\tdef current_target():return _pyscript.target",
12
- "media.py": "from pyscript import window\nfrom pyscript.ffi import to_js\nclass Device:\n\tdef __init__(A,device):A._dom_element=device\n\t@property\n\tdef id(self):return self._dom_element.deviceId\n\t@property\n\tdef group(self):return self._dom_element.groupId\n\t@property\n\tdef kind(self):return self._dom_element.kind\n\t@property\n\tdef label(self):return self._dom_element.label\n\tdef __getitem__(A,key):return getattr(A,key)\n\t@classmethod\n\tasync def load(D,audio=False,video=True):\n\t\tB=video;A=window.Object.new();A.audio=audio\n\t\tif isinstance(B,bool):A.video=B\n\t\telse:\n\t\t\tA.video=window.Object.new()\n\t\t\tfor C in B:setattr(A.video,C,to_js(B[C]))\n\t\treturn await window.navigator.mediaDevices.getUserMedia(A)\n\tasync def get_stream(A):B=A.kind.replace('input','').replace('output','');C={B:{'deviceId':{'exact':A.id}}};return await A.load(**C)\nasync def list_devices():return[Device(A)for A in await window.navigator.mediaDevices.enumerateDevices()]",
12
+ "media.py": "from pyscript import window\nfrom pyscript.ffi import to_js\nclass Device:\n\tdef __init__(A,device):A._dom_element=device\n\t@property\n\tdef id(self):return self._dom_element.deviceId\n\t@property\n\tdef group(self):return self._dom_element.groupId\n\t@property\n\tdef kind(self):return self._dom_element.kind\n\t@property\n\tdef label(self):return self._dom_element.label\n\tdef __getitem__(A,key):return getattr(A,key)\n\t@classmethod\n\tasync def load(E,audio=False,video=True):\n\t\tC='video';B=video;A={};A['audio']=audio\n\t\tif isinstance(B,bool):A[C]=B\n\t\telse:\n\t\t\tA[C]={}\n\t\t\tfor D in B:A[C][D]=B[D]\n\t\treturn await window.navigator.mediaDevices.getUserMedia(to_js(A))\n\tasync def get_stream(A):B=A.kind.replace('input','').replace('output','');C={B:{'deviceId':{'exact':A.id}}};return await A.load(**C)\nasync def list_devices():return[Device(A)for A in await window.navigator.mediaDevices.enumerateDevices()]",
13
13
  "storage.py": "_C='memoryview'\n_B='bytearray'\n_A='generic'\nfrom polyscript import storage as _storage\nfrom pyscript.flatted import parse as _parse\nfrom pyscript.flatted import stringify as _stringify\ndef _to_idb(value):\n\tA=value\n\tif A is None:return _stringify(['null',0])\n\tif isinstance(A,(bool,float,int,str,list,dict,tuple)):return _stringify([_A,A])\n\tif isinstance(A,bytearray):return _stringify([_B,list(A)])\n\tif isinstance(A,memoryview):return _stringify([_C,list(A)])\n\tB=f\"Unexpected value: {A}\";raise TypeError(B)\ndef _from_idb(value):\n\tC=value;A,B=_parse(C)\n\tif A=='null':return\n\tif A==_A:return B\n\tif A==_B:return bytearray(B)\n\tif A==_C:return memoryview(bytearray(B))\n\treturn C\nclass Storage(dict):\n\tdef __init__(B,store):A=store;super().__init__({A:_from_idb(B)for(A,B)in A.entries()});B.__store__=A\n\tdef __delitem__(A,attr):A.__store__.delete(attr);super().__delitem__(attr)\n\tdef __setitem__(B,attr,value):A=value;B.__store__.set(attr,_to_idb(A));super().__setitem__(attr,A)\n\tdef clear(A):A.__store__.clear();super().clear()\n\tasync def sync(A):await A.__store__.sync()\nasync def storage(name='',storage_class=Storage):\n\tif not name:A='The storage name must be defined';raise ValueError(A)\n\treturn storage_class(await _storage(f\"@pyscript/{name}\"))",
14
14
  "util.py": "import js,sys,inspect\ndef as_bytearray(buffer):\n\tA=js.Uint8Array.new(buffer);B=A.length;C=bytearray(B)\n\tfor D in range(B):C[D]=A[D]\n\treturn C\nclass NotSupported:\n\tdef __init__(A,name,error):object.__setattr__(A,'name',name);object.__setattr__(A,'error',error)\n\tdef __repr__(A):return f\"<NotSupported {A.name} [{A.error}]>\"\n\tdef __getattr__(A,attr):raise AttributeError(A.error)\n\tdef __setattr__(A,attr,value):raise AttributeError(A.error)\n\tdef __call__(A,*B):raise TypeError(A.error)\ndef is_awaitable(obj):\n\tA=obj;from pyscript import config as B\n\tif B['type']=='mpy':\n\t\tif'<closure <generator>'in repr(A):return True\n\t\treturn inspect.isgeneratorfunction(A)\n\treturn inspect.iscoroutinefunction(A)",
15
15
  "web.py": "_B='on_'\n_A=None\nfrom pyscript import document,when,Event\nfrom pyscript.ffi import create_proxy\ndef wrap_dom_element(dom_element):return Element.wrap_dom_element(dom_element)\nclass Element:\n\telement_classes_by_tag_name={}\n\t@classmethod\n\tdef get_tag_name(A):return A.__name__.replace('_','')\n\t@classmethod\n\tdef register_element_classes(B,element_classes):\n\t\tfor A in element_classes:C=A.get_tag_name();B.element_classes_by_tag_name[C]=A\n\t@classmethod\n\tdef unregister_element_classes(A,element_classes):\n\t\tfor B in element_classes:C=B.get_tag_name();A.element_classes_by_tag_name.pop(C,_A)\n\t@classmethod\n\tdef wrap_dom_element(A,dom_element):B=dom_element;C=A.element_classes_by_tag_name.get(B.tagName.lower(),A);return C(dom_element=B)\n\tdef __init__(A,dom_element=_A,classes=_A,style=_A,**E):\n\t\tA._dom_element=dom_element or document.createElement(type(A).get_tag_name());A._on_events={};C={}\n\t\tfor(B,D)in E.items():\n\t\t\tif B.startswith(_B):F=A.get_event(B);F.add_listener(D)\n\t\t\telse:C[B]=D\n\t\tA._classes=Classes(A);A._style=Style(A);A.update(classes=classes,style=style,**C)\n\tdef __eq__(A,obj):return isinstance(obj,Element)and obj._dom_element==A._dom_element\n\tdef __getitem__(B,key):\n\t\tA=key\n\t\tif isinstance(A,(int,slice)):return B.children[A]\n\t\treturn B.find(A)\n\tdef __getattr__(B,name):\n\t\tA=name\n\t\tif A.startswith(_B):return B.get_event(A)\n\t\tif A.endswith('_'):A=A[:-1]\n\t\treturn getattr(B._dom_element,A)\n\tdef __setattr__(C,name,value):\n\t\tB=value;A=name\n\t\tif A.startswith('_'):super().__setattr__(A,B)\n\t\telse:\n\t\t\tif A.endswith('_'):A=A[:-1]\n\t\t\tif A.startswith(_B):C._on_events[A]=B\n\t\t\tsetattr(C._dom_element,A,B)\n\tdef get_event(A,name):\n\t\tB=name\n\t\tif not B.startswith(_B):C=\"Event names must start with 'on_'.\";raise ValueError(C)\n\t\tD=B[3:]\n\t\tif not hasattr(A._dom_element,D):C=f\"Element has no '{D}' event.\";raise ValueError(C)\n\t\tif B in A._on_events:return A._on_events[B]\n\t\tE=Event();A._on_events[B]=E;A._dom_element.addEventListener(D,create_proxy(E.trigger));return E\n\t@property\n\tdef children(self):return ElementCollection.wrap_dom_elements(self._dom_element.children)\n\t@property\n\tdef classes(self):return self._classes\n\t@property\n\tdef parent(self):\n\t\tif self._dom_element.parentElement is _A:return\n\t\treturn Element.wrap_dom_element(self._dom_element.parentElement)\n\t@property\n\tdef style(self):return self._style\n\tdef append(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,Element):B._dom_element.appendChild(A._dom_element)\n\t\t\telif isinstance(A,ElementCollection):\n\t\t\t\tfor D in A:B._dom_element.appendChild(D._dom_element)\n\t\t\telif isinstance(A,(list,tuple)):\n\t\t\t\tfor E in A:B.append(E)\n\t\t\telse:\n\t\t\t\ttry:A.tagName;B._dom_element.appendChild(A)\n\t\t\t\texcept AttributeError:\n\t\t\t\t\ttry:\n\t\t\t\t\t\tA.length\n\t\t\t\t\t\tfor F in A:B._dom_element.appendChild(F)\n\t\t\t\t\texcept AttributeError:G=f'Element \"{A}\" is a proxy object, \"but not a valid element or a NodeList.';raise TypeError(G)\n\tdef clone(B,clone_id=_A):A=Element.wrap_dom_element(B._dom_element.cloneNode(True));A.id=clone_id;return A\n\tdef find(A,selector):return ElementCollection.wrap_dom_elements(A._dom_element.querySelectorAll(selector))\n\tdef show_me(A):A._dom_element.scrollIntoView()\n\tdef update(A,classes=_A,style=_A,**D):\n\t\tC=style;B=classes\n\t\tif B:A.classes.add(B)\n\t\tif C:A.style.set(**C)\n\t\tfor(E,F)in D.items():setattr(A,E,F)\nclass Classes:\n\tdef __init__(A,element):A._element=element;A._class_list=A._element._dom_element.classList\n\tdef __contains__(A,item):return item in A._class_list\n\tdef __eq__(C,other):\n\t\tA=other\n\t\tif isinstance(A,Classes):B=list(A._class_list)\n\t\telse:\n\t\t\ttry:B=iter(A)\n\t\t\texcept TypeError:return False\n\t\treturn set(C._class_list)==set(B)\n\tdef __iter__(A):return iter(A._class_list)\n\tdef __len__(A):return A._class_list.length\n\tdef __repr__(A):return f\"Classes({\", \".join(A._class_list)})\"\n\tdef __str__(A):return' '.join(A._class_list)\n\tdef add(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,list):\n\t\t\t\tfor D in A:B.add(D)\n\t\t\telse:B._class_list.add(A)\n\tdef contains(A,class_name):return class_name in A\n\tdef remove(B,*C):\n\t\tfor A in C:\n\t\t\tif isinstance(A,list):\n\t\t\t\tfor D in A:B.remove(D)\n\t\t\telse:B._class_list.remove(A)\n\tdef replace(A,old_class,new_class):A.remove(old_class);A.add(new_class)\n\tdef toggle(A,*C):\n\t\tfor B in C:\n\t\t\tif B in A:A.remove(B)\n\t\t\telse:A.add(B)\nclass HasOptions:\n\t@property\n\tdef options(self):\n\t\tA=self\n\t\tif not hasattr(A,'_options'):A._options=Options(A)\n\t\treturn A._options\nclass Options:\n\tdef __init__(A,element):A._element=element\n\tdef __getitem__(A,key):return A.options[key]\n\tdef __iter__(A):yield from A.options\n\tdef __len__(A):return len(A.options)\n\tdef __repr__(A):return f\"{A.__class__.__name__} (length: {len(A)}) {A.options}\"\n\t@property\n\tdef options(self):return[Element.wrap_dom_element(A)for A in self._element._dom_element.options]\n\t@property\n\tdef selected(self):return self.options[self._element._dom_element.selectedIndex]\n\tdef add(D,value=_A,html=_A,text=_A,before=_A,**B):\n\t\tC=value;A=before\n\t\tif C is not _A:B['value']=C\n\t\tif html is not _A:B['innerHTML']=html\n\t\tif text is not _A:B['text']=text\n\t\tE=option(**B)\n\t\tif A and isinstance(A,Element):A=A._dom_element\n\t\tD._element._dom_element.add(E._dom_element,A)\n\tdef clear(A):\n\t\twhile len(A)>0:A.remove(0)\n\tdef remove(A,index):A._element._dom_element.remove(index)\nclass Style:\n\tdef __init__(A,element):A._element=element;A._style=A._element._dom_element.style\n\tdef __getitem__(A,key):return A._style.getPropertyValue(key)\n\tdef __setitem__(A,key,value):A._style.setProperty(key,value)\n\tdef remove(A,key):A._style.removeProperty(key)\n\tdef set(A,**B):\n\t\tfor(C,D)in B.items():A._element._dom_element.style.setProperty(C,D)\n\t@property\n\tdef visible(self):return self._element._dom_element.style.visibility\n\t@visible.setter\n\tdef visible(self,value):self._element._dom_element.style.visibility=value\nclass ContainerElement(Element):\n\tdef __init__(B,*C,children=_A,dom_element=_A,style=_A,classes=_A,**D):\n\t\tsuper().__init__(dom_element=dom_element,style=style,classes=classes,**D)\n\t\tfor A in list(C)+(children or[]):\n\t\t\tif isinstance(A,(Element,ElementCollection)):B.append(A)\n\t\t\telse:B._dom_element.insertAdjacentHTML('beforeend',A)\n\tdef __iter__(A):yield from A.children\nclass ClassesCollection:\n\tdef __init__(A,collection):A._collection=collection\n\tdef __contains__(A,class_name):\n\t\tfor B in A._collection:\n\t\t\tif class_name in B.classes:return True\n\t\treturn False\n\tdef __eq__(B,other):A=other;return isinstance(A,ClassesCollection)and B._collection==A._collection\n\tdef __iter__(A):yield from A._all_class_names()\n\tdef __len__(A):return len(A._all_class_names())\n\tdef __repr__(A):return f\"ClassesCollection({A._collection!r})\"\n\tdef __str__(A):return' '.join(A._all_class_names())\n\tdef add(A,*B):\n\t\tfor C in A._collection:C.classes.add(*B)\n\tdef contains(A,class_name):return class_name in A\n\tdef remove(A,*B):\n\t\tfor C in A._collection:C.classes.remove(*B)\n\tdef replace(A,old_class,new_class):\n\t\tfor B in A._collection:B.classes.replace(old_class,new_class)\n\tdef toggle(A,*B):\n\t\tfor C in A._collection:C.classes.toggle(*B)\n\tdef _all_class_names(B):\n\t\tA=set()\n\t\tfor C in B._collection:\n\t\t\tfor D in C.classes:A.add(D)\n\t\treturn A\nclass StyleCollection:\n\tdef __init__(A,collection):A._collection=collection\n\tdef __getitem__(A,key):return[A.style[key]for A in A._collection._elements]\n\tdef __setitem__(A,key,value):\n\t\tfor B in A._collection._elements:B.style[key]=value\n\tdef __repr__(A):return f\"StyleCollection({A._collection!r})\"\n\tdef remove(A,key):\n\t\tfor B in A._collection._elements:B.style.remove(key)\nclass ElementCollection:\n\t@classmethod\n\tdef wrap_dom_elements(A,dom_elements):return A([Element.wrap_dom_element(A)for A in dom_elements])\n\tdef __init__(A,elements):A._elements=elements;A._classes=ClassesCollection(A);A._style=StyleCollection(A)\n\tdef __eq__(A,obj):return isinstance(obj,ElementCollection)and obj._elements==A._elements\n\tdef __getitem__(B,key):\n\t\tA=key\n\t\tif isinstance(A,int):return B._elements[A]\n\t\tif isinstance(A,slice):return ElementCollection(B._elements[A])\n\t\treturn B.find(A)\n\tdef __iter__(A):yield from A._elements\n\tdef __len__(A):return len(A._elements)\n\tdef __repr__(A):return f\"{A.__class__.__name__} (length: {len(A._elements)}) {A._elements}\"\n\tdef __getattr__(A,name):return[getattr(A,name)for A in A._elements]\n\tdef __setattr__(C,name,value):\n\t\tB=value;A=name\n\t\tif A.startswith('_'):super().__setattr__(A,B)\n\t\telse:\n\t\t\tfor D in C._elements:setattr(D,A,B)\n\t@property\n\tdef classes(self):return self._classes\n\t@property\n\tdef elements(self):return self._elements\n\t@property\n\tdef style(self):return self._style\n\tdef find(B,selector):\n\t\tA=[]\n\t\tfor C in B._elements:A.extend(C.find(selector))\n\t\treturn ElementCollection(A)\nclass a(ContainerElement):0\nclass abbr(ContainerElement):0\nclass address(ContainerElement):0\nclass area(Element):0\nclass article(ContainerElement):0\nclass aside(ContainerElement):0\nclass audio(ContainerElement):0\nclass b(ContainerElement):0\nclass base(Element):0\nclass blockquote(ContainerElement):0\nclass body(ContainerElement):0\nclass br(Element):0\nclass button(ContainerElement):0\nclass canvas(ContainerElement):\n\tdef download(A,filename='snapped.png'):B=a(download=filename,href=A._dom_element.toDataURL());A.append(B);B._dom_element.click()\n\tdef draw(E,what,width=_A,height=_A):\n\t\tC=height;B=width;A=what\n\t\tif isinstance(A,Element):A=A._dom_element\n\t\tD=E._dom_element.getContext('2d')\n\t\tif B or C:D.drawImage(A,0,0,B,C)\n\t\telse:D.drawImage(A,0,0)\nclass caption(ContainerElement):0\nclass cite(ContainerElement):0\nclass code(ContainerElement):0\nclass col(Element):0\nclass colgroup(ContainerElement):0\nclass data(ContainerElement):0\nclass datalist(ContainerElement,HasOptions):0\nclass dd(ContainerElement):0\nclass del_(ContainerElement):0\nclass details(ContainerElement):0\nclass dialog(ContainerElement):0\nclass div(ContainerElement):0\nclass dl(ContainerElement):0\nclass dt(ContainerElement):0\nclass em(ContainerElement):0\nclass embed(Element):0\nclass fieldset(ContainerElement):0\nclass figcaption(ContainerElement):0\nclass figure(ContainerElement):0\nclass footer(ContainerElement):0\nclass form(ContainerElement):0\nclass h1(ContainerElement):0\nclass h2(ContainerElement):0\nclass h3(ContainerElement):0\nclass h4(ContainerElement):0\nclass h5(ContainerElement):0\nclass h6(ContainerElement):0\nclass head(ContainerElement):0\nclass header(ContainerElement):0\nclass hgroup(ContainerElement):0\nclass hr(Element):0\nclass html(ContainerElement):0\nclass i(ContainerElement):0\nclass iframe(ContainerElement):0\nclass img(Element):0\nclass input_(Element):0\nclass ins(ContainerElement):0\nclass kbd(ContainerElement):0\nclass label(ContainerElement):0\nclass legend(ContainerElement):0\nclass li(ContainerElement):0\nclass link(Element):0\nclass main(ContainerElement):0\nclass map_(ContainerElement):0\nclass mark(ContainerElement):0\nclass menu(ContainerElement):0\nclass meta(ContainerElement):0\nclass meter(ContainerElement):0\nclass nav(ContainerElement):0\nclass object_(ContainerElement):0\nclass ol(ContainerElement):0\nclass optgroup(ContainerElement,HasOptions):0\nclass option(ContainerElement):0\nclass output(ContainerElement):0\nclass p(ContainerElement):0\nclass param(ContainerElement):0\nclass picture(ContainerElement):0\nclass pre(ContainerElement):0\nclass progress(ContainerElement):0\nclass q(ContainerElement):0\nclass s(ContainerElement):0\nclass script(ContainerElement):0\nclass section(ContainerElement):0\nclass select(ContainerElement,HasOptions):0\nclass small(ContainerElement):0\nclass source(Element):0\nclass span(ContainerElement):0\nclass strong(ContainerElement):0\nclass style(ContainerElement):0\nclass sub(ContainerElement):0\nclass summary(ContainerElement):0\nclass sup(ContainerElement):0\nclass table(ContainerElement):0\nclass tbody(ContainerElement):0\nclass td(ContainerElement):0\nclass template(ContainerElement):0\nclass textarea(ContainerElement):0\nclass tfoot(ContainerElement):0\nclass th(ContainerElement):0\nclass thead(ContainerElement):0\nclass time(ContainerElement):0\nclass title(ContainerElement):0\nclass tr(ContainerElement):0\nclass track(Element):0\nclass u(ContainerElement):0\nclass ul(ContainerElement):0\nclass var(ContainerElement):0\nclass video(ContainerElement):\n\tdef snap(E,to=_A,width=_A,height=_A):\n\t\tH='CANVAS';G='Element to snap to must be a canvas.';C=height;B=width;A=to;B=B if B is not _A else E.videoWidth;C=C if C is not _A else E.videoHeight\n\t\tif A is _A:A=canvas(width=B,height=C)\n\t\telif isinstance(A,Element):\n\t\t\tif A.tag!='canvas':D=G;raise TypeError(D)\n\t\telif getattr(A,'tagName','')==H:A=canvas(dom_element=A)\n\t\telif isinstance(A,str):\n\t\t\tF=document.querySelectorAll(A)\n\t\t\tif F.length==0:D='No element with selector {to} to snap to.';raise TypeError(D)\n\t\t\tif F[0].tagName!=H:D=G;raise TypeError(D)\n\t\t\tA=canvas(dom_element=F[0])\n\t\tA.draw(E,B,C);return A\nclass wbr(Element):0\nELEMENT_CLASSES=[a,abbr,address,area,article,aside,audio,b,base,blockquote,body,br,button,canvas,caption,cite,code,col,colgroup,data,datalist,dd,del_,details,dialog,div,dl,dt,em,embed,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,img,input_,ins,kbd,label,legend,li,link,main,map_,mark,menu,meta,meter,nav,object_,ol,optgroup,option,output,p,param,picture,pre,progress,q,s,script,section,select,small,source,span,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,u,ul,var,video,wbr]\nElement.register_element_classes(ELEMENT_CLASSES)\nclass Page:\n\tdef __init__(A):A.html=Element.wrap_dom_element(document.documentElement);A.body=Element.wrap_dom_element(document.body);A.head=Element.wrap_dom_element(document.head)\n\tdef __getitem__(A,selector):return A.find(selector)\n\t@property\n\tdef title(self):return document.title\n\t@title.setter\n\tdef title(self,value):document.title=value\n\tdef append(A,*B):A.body.append(*B)\n\tdef find(A,selector):return ElementCollection.wrap_dom_elements(document.querySelectorAll(selector))\npage=Page()",
@@ -1,2 +0,0 @@
1
- import{StateField as e,Facet as t,Annotation as n,EditorSelection as r,countColumn as o,Text as l,findClusterBreak as s,Transaction as a,combineConfig as i,StateEffect as c,ChangeSet as f,ChangeDesc as u,CharCategory as h}from"./codemirror_state-1UkzIAPK.js";import{E as m,D as d}from"./codemirror_view-Bw06hiJi.js";import{q as p,r as g,u as y,s as v,b as A,v as k,w,i as S}from"./codemirror_language-CCfjGGWm.js";const D=e=>{let{state:t}=e,n=t.doc.lineAt(t.selection.main.from),r=I(e.state,n.from);return r.line?M(e):!!r.block&&T(e)};function x(e,t){return({state:n,dispatch:r})=>{if(n.readOnly)return!1;let o=e(t,n);return!!o&&(r(n.update(o)),!0)}}const M=x(L,0),B=x(L,1),C=x(L,2),E=x(R,0),O=x(R,1),b=x(R,2),T=x(((e,t)=>R(e,t,function(e){let t=[];for(let n of e.selection.ranges){let r=e.doc.lineAt(n.from),o=n.to<=r.to?r:e.doc.lineAt(n.to);o.from>r.from&&o.from==n.to&&(o=n.to==r.to+1?r:e.doc.lineAt(n.to-1));let l=t.length-1;l>=0&&t[l].to>r.from?t[l].to=o.to:t.push({from:r.from+/^\s*/.exec(r.text)[0].length,to:o.to})}return t}(t))),0);function I(e,t){let n=e.languageDataAt("commentTokens",t);return n.length?n[0]:{}}const V=50;function R(e,t,n=t.selection.ranges){let r=n.map((e=>I(t,e.from).block));if(!r.every((e=>e)))return null;let o=n.map(((e,n)=>function(e,{open:t,close:n},r,o){let l,s,a=e.sliceDoc(r-V,r),i=e.sliceDoc(o,o+V),c=/\s*$/.exec(a)[0].length,f=/^\s*/.exec(i)[0].length,u=a.length-c;if(a.slice(u-t.length,u)==t&&i.slice(f,f+n.length)==n)return{open:{pos:r-c,margin:c&&1},close:{pos:o+f,margin:f&&1}};o-r<=2*V?l=s=e.sliceDoc(r,o):(l=e.sliceDoc(r,r+V),s=e.sliceDoc(o-V,o));let h=/^\s*/.exec(l)[0].length,m=/\s*$/.exec(s)[0].length,d=s.length-m-n.length;return l.slice(h,h+t.length)==t&&s.slice(d,d+n.length)==n?{open:{pos:r+h+t.length,margin:/\s/.test(l.charAt(h+t.length))?1:0},close:{pos:o-m-n.length,margin:/\s/.test(s.charAt(d-1))?1:0}}:null}(t,r[n],e.from,e.to)));if(2!=e&&!o.every((e=>e)))return{changes:t.changes(n.map(((e,t)=>o[t]?[]:[{from:e.from,insert:r[t].open+" "},{from:e.to,insert:" "+r[t].close}])))};if(1!=e&&o.some((e=>e))){let e=[];for(let t,n=0;n<o.length;n++)if(t=o[n]){let o=r[n],{open:l,close:s}=t;e.push({from:l.pos-o.open.length,to:l.pos+l.margin},{from:s.pos-s.margin,to:s.pos+o.close.length})}return{changes:e}}return null}function L(e,t,n=t.selection.ranges){let r=[],o=-1;for(let{from:e,to:l}of n){let n=r.length,s=1e9,a=I(t,e).line;if(a){for(let n=e;n<=l;){let i=t.doc.lineAt(n);if(i.from>o&&(e==l||l>i.from)){o=i.from;let e=/^\s*/.exec(i.text)[0].length,t=e==i.length,n=i.text.slice(e,e+a.length)==a?e:-1;e<i.text.length&&e<s&&(s=e),r.push({line:i,comment:n,token:a,indent:e,empty:t,single:!1})}n=i.to+1}if(s<1e9)for(let e=n;e<r.length;e++)r[e].indent<r[e].line.text.length&&(r[e].indent=s);r.length==n+1&&(r[n].single=!0)}}if(2!=e&&r.some((e=>e.comment<0&&(!e.empty||e.single)))){let e=[];for(let{line:t,token:n,indent:o,empty:l,single:s}of r)!s&&l||e.push({from:t.from+o,insert:n+" "});let n=t.changes(e);return{changes:n,selection:t.selection.map(n,1)}}if(1!=e&&r.some((e=>e.comment>=0))){let e=[];for(let{line:t,comment:n,token:o}of r)if(n>=0){let r=t.from+n,l=r+o.length;" "==t.text[l-t.from]&&l++,e.push({from:r,to:l})}return{changes:e}}return null}const J=n.define(),N=n.define(),H=t.define(),U=t.define({combine:e=>i(e,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}),z=e.define({create:()=>ae.empty,update(e,t){let n=t.state.facet(U),r=t.annotation(J);if(r){let o=X.fromTransaction(t,r.selection),l=r.side,s=0==l?e.undone:e.done;return s=o?Y(s,s.length,n.minDepth,o):ne(s,t.startState.selection),new ae(0==l?r.rest:s,0==l?s:r.rest)}let o=t.annotation(N);if("full"!=o&&"before"!=o||(e=e.isolate()),!1===t.annotation(a.addToHistory))return t.changes.empty?e:e.addMapping(t.changes.desc);let l=X.fromTransaction(t),s=t.annotation(a.time),i=t.annotation(a.userEvent);return l?e=e.addChanges(l,s,i,n,t):t.selection&&(e=e.addSelection(t.startState.selection,s,i,n.newGroupDelay)),"full"!=o&&"after"!=o||(e=e.isolate()),e},toJSON:e=>({done:e.done.map((e=>e.toJSON())),undone:e.undone.map((e=>e.toJSON()))}),fromJSON:e=>new ae(e.done.map(X.fromJSON),e.undone.map(X.fromJSON))});function j(e={}){return[z,U.of(e),m.domEventHandlers({beforeinput(e,t){let n="historyUndo"==e.inputType?P:"historyRedo"==e.inputType?W:null;return!!n&&(e.preventDefault(),n(t))}})]}const q=z;function G(e,t){return function({state:n,dispatch:r}){if(!t&&n.readOnly)return!1;let o=n.field(z,!1);if(!o)return!1;let l=o.pop(e,n,t);return!!l&&(r(l),!0)}}const P=G(0,!1),W=G(1,!1),$=G(0,!0),_=G(1,!0);function F(e){return function(t){let n=t.field(z,!1);if(!n)return 0;let r=0==e?n.done:n.undone;return r.length-(r.length&&!r[0].changes?1:0)}}const K=F(0),Q=F(1);class X{constructor(e,t,n,r,o){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=o}setSelAfter(e){return new X(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,n;return{changes:null===(e=this.changes)||void 0===e?void 0:e.toJSON(),mapped:null===(t=this.mapped)||void 0===t?void 0:t.toJSON(),startSelection:null===(n=this.startSelection)||void 0===n?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map((e=>e.toJSON()))}}static fromJSON(e){return new X(e.changes&&f.fromJSON(e.changes),[],e.mapped&&u.fromJSON(e.mapped),e.startSelection&&r.fromJSON(e.startSelection),e.selectionsAfter.map(r.fromJSON))}static fromTransaction(e,t){let n=ee;for(let t of e.startState.facet(H)){let r=t(e);r.length&&(n=n.concat(r))}return!n.length&&e.changes.empty?null:new X(e.changes.invert(e.startState.doc),n,void 0,t||e.startState.selection,ee)}static selection(e){return new X(void 0,ee,void 0,void 0,e)}}function Y(e,t,n,r){let o=t+1>n+20?t-n-1:0,l=e.slice(o,t);return l.push(r),l}function Z(e,t){return e.length?t.length?e.concat(t):e:t}const ee=[],te=200;function ne(e,t){if(e.length){let n=e[e.length-1],r=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-te));return r.length&&r[r.length-1].eq(t)?e:(r.push(t),Y(e,e.length-1,1e9,n.setSelAfter(r)))}return[X.selection([t])]}function re(e){let t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function oe(e,t){if(!e.length)return e;let n=e.length,r=ee;for(;n;){let o=le(e[n-1],t,r);if(o.changes&&!o.changes.empty||o.effects.length){let t=e.slice(0,n);return t[n-1]=o,t}t=o.mapped,n--,r=o.selectionsAfter}return r.length?[X.selection(r)]:ee}function le(e,t,n){let r=Z(e.selectionsAfter.length?e.selectionsAfter.map((e=>e.map(t))):ee,n);if(!e.changes)return X.selection(r);let o=e.changes.map(t),l=t.mapDesc(e.changes,!0),s=e.mapped?e.mapped.composeDesc(l):l;return new X(o,c.mapEffects(e.effects,t),s,e.startSelection.map(l),r)}const se=/^(input\.type|delete)($|\.)/;class ae{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new ae(this.done,this.undone):this}addChanges(e,t,n,r,o){let l=this.done,s=l[l.length-1];return l=s&&s.changes&&!s.changes.empty&&e.changes&&(!n||se.test(n))&&(!s.selectionsAfter.length&&t-this.prevTime<r.newGroupDelay&&r.joinToEvent(o,function(e,t){let n=[],r=!1;return e.iterChangedRanges(((e,t)=>n.push(e,t))),t.iterChangedRanges(((e,t,o,l)=>{for(let e=0;e<n.length;){let t=n[e++],s=n[e++];l>=t&&o<=s&&(r=!0)}})),r}(s.changes,e.changes))||"input.type.compose"==n)?Y(l,l.length-1,r.minDepth,new X(e.changes.compose(s.changes),Z(c.mapEffects(e.effects,s.changes),s.effects),s.mapped,s.startSelection,ee)):Y(l,l.length,r.minDepth,e),new ae(l,ee,t,n)}addSelection(e,t,n,r){let o=this.done.length?this.done[this.done.length-1].selectionsAfter:ee;return o.length>0&&t-this.prevTime<r&&n==this.prevUserEvent&&n&&/^select($|\.)/.test(n)&&(l=o[o.length-1],s=e,l.ranges.length==s.ranges.length&&0===l.ranges.filter(((e,t)=>e.empty!=s.ranges[t].empty)).length)?this:new ae(ne(this.done,e),this.undone,t,n);var l,s}addMapping(e){return new ae(oe(this.done,e),oe(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,n){let r=0==e?this.done:this.undone;if(0==r.length)return null;let o=r[r.length-1],l=o.selectionsAfter[0]||t.selection;if(n&&o.selectionsAfter.length)return t.update({selection:o.selectionsAfter[o.selectionsAfter.length-1],annotations:J.of({side:e,rest:re(r),selection:l}),userEvent:0==e?"select.undo":"select.redo",scrollIntoView:!0});if(o.changes){let n=1==r.length?ee:r.slice(0,r.length-1);return o.mapped&&(n=oe(n,o.mapped)),t.update({changes:o.changes,selection:o.startSelection,effects:o.effects,annotations:J.of({side:e,rest:n,selection:l}),filter:!1,userEvent:0==e?"undo":"redo",scrollIntoView:!0})}return null}}ae.empty=new ae(ee,ee);const ie=[{key:"Mod-z",run:P,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:W,preventDefault:!0},{linux:"Ctrl-Shift-z",run:W,preventDefault:!0},{key:"Mod-u",run:$,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:_,preventDefault:!0}];function ce(e,t){return r.create(e.ranges.map(t),e.mainIndex)}function fe(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:"select"})}function ue({state:e,dispatch:t},n){let r=ce(e.selection,n);return!r.eq(e.selection,!0)&&(t(fe(e,r)),!0)}function he(e,t){return r.cursor(t?e.to:e.from)}function me(e,t){return ue(e,(n=>n.empty?e.moveByChar(n,t):he(n,t)))}function de(e){return e.textDirectionAt(e.state.selection.main.head)==d.LTR}const pe=e=>me(e,!de(e)),ge=e=>me(e,de(e)),ye=e=>me(e,!0),ve=e=>me(e,!1);function Ae(e,t,n){let o=t.head,l=e.doc.lineAt(o);return o=o==(n?l.to:l.from)?n?Math.min(e.doc.length,l.to+1):Math.max(0,l.from-1):l.from+s(l.text,o-l.from,n),r.cursor(o,n?-1:1)}function ke(e,t){return ue(e,(n=>n.empty?Ae(e.state,n,t):he(n,t)))}const we=e=>ke(e,!0),Se=e=>ke(e,!1);function De(e,t){return ue(e,(n=>n.empty?e.moveByGroup(n,t):he(n,t)))}const xe=e=>De(e,!de(e)),Me=e=>De(e,de(e)),Be=e=>De(e,!0),Ce=e=>De(e,!1);function Ee(e,t,n){let r=e.state.charCategorizer(t),o=r(n),l=o!=h.Space;return e=>{let t=r(e);return t!=h.Space?l&&t==o:(l=!1,!0)}}const Oe=e=>ue(e,(t=>t.empty?e.moveByChar(t,!0,(n=>Ee(e,t.head,n))):he(t,!0))),be="undefined"!=typeof Intl&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Te(e,t,n){let o=e.state.charCategorizer(t.from),l=h.Space,s=t.from,a=0,i=!1,c=!1,f=!1,u=t=>{if(i)return!1;s+=n?t.length:-t.length;let r,u=o(t);if(u==h.Word&&t.charCodeAt(0)<128&&/[\W_]/.test(t)&&(u=-1),l==h.Space&&(l=u),l!=u)return!1;if(l==h.Word)if(t.toLowerCase()==t){if(!n&&c)return!1;f=!0}else if(f){if(n)return!1;i=!0}else{if(c&&n&&o(r=e.state.sliceDoc(s,s+1))==h.Word&&r.toLowerCase()==r)return!1;c=!0}return a++,!0},m=e.moveByChar(t,n,(e=>(u(e),u)));if(be&&l==h.Word&&m.from==t.from+a*(n?1:-1)){let o=Math.min(t.head,m.head),l=Math.max(t.head,m.head),s=e.state.sliceDoc(o,l);if(s.length>1&&/[\u4E00-\uffff]/.test(s)){let e=Array.from(be.segment(s));if(e.length>1)return n?r.cursor(t.head+e[1].index,-1):r.cursor(m.head+e[e.length-1].index,1)}}return m}function Ie(e,t){return ue(e,(n=>n.empty?Te(e,n,t):he(n,t)))}const Ve=e=>Ie(e,!0),Re=e=>Ie(e,!1);function Le(e,t,n){if(t.type.prop(n))return!0;let r=t.to-t.from;return r&&(r>2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function Je(e,t,n){let o,l,s=v(e).resolveInner(t.head),a=n?A.closedBy:A.openedBy;for(let r=t.head;;){let t=n?s.childAfter(r):s.childBefore(r);if(!t)break;Le(e,t,a)?s=t:r=n?t.to:t.from}return l=s.type.prop(a)&&(o=n?k(e,s.from,1):k(e,s.to,-1))&&o.matched?n?o.end.to:o.end.from:n?s.to:s.from,r.cursor(l,n?-1:1)}const Ne=e=>ue(e,(t=>Je(e.state,t,!de(e)))),He=e=>ue(e,(t=>Je(e.state,t,de(e))));function Ue(e,t){return ue(e,(n=>{if(!n.empty)return he(n,t);let r=e.moveVertically(n,t);return r.head!=n.head?r:e.moveToLineBoundary(n,t)}))}const ze=e=>Ue(e,!1),je=e=>Ue(e,!0);function qe(e){let t,n=e.scrollDOM.clientHeight<e.scrollDOM.scrollHeight-2,r=0,o=0;if(n){for(let t of e.state.facet(m.scrollMargins)){let n=t(e);(null==n?void 0:n.top)&&(r=Math.max(null==n?void 0:n.top,r)),(null==n?void 0:n.bottom)&&(o=Math.max(null==n?void 0:n.bottom,o))}t=e.scrollDOM.clientHeight-r-o}else t=(e.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:r,marginBottom:o,selfScroll:n,height:Math.max(e.defaultLineHeight,t-5)}}function Ge(e,t){let n,r=qe(e),{state:o}=e,l=ce(o.selection,(n=>n.empty?e.moveVertically(n,t,r.height):he(n,t)));if(l.eq(o.selection))return!1;if(r.selfScroll){let t=e.coordsAtPos(o.selection.main.head),s=e.scrollDOM.getBoundingClientRect(),a=s.top+r.marginTop,i=s.bottom-r.marginBottom;t&&t.top>a&&t.bottom<i&&(n=m.scrollIntoView(l.main.head,{y:"start",yMargin:t.top-a}))}return e.dispatch(fe(o,l),{effects:n}),!0}const Pe=e=>Ge(e,!1),We=e=>Ge(e,!0);function $e(e,t,n){let o=e.lineBlockAt(t.head),l=e.moveToLineBoundary(t,n);if(l.head==t.head&&l.head!=(n?o.to:o.from)&&(l=e.moveToLineBoundary(t,n,!1)),!n&&l.head==o.from&&o.length){let n=/^\s*/.exec(e.state.sliceDoc(o.from,Math.min(o.from+100,o.to)))[0].length;n&&t.head!=o.from+n&&(l=r.cursor(o.from+n))}return l}const _e=e=>ue(e,(t=>$e(e,t,!0))),Fe=e=>ue(e,(t=>$e(e,t,!1))),Ke=e=>ue(e,(t=>$e(e,t,!de(e)))),Qe=e=>ue(e,(t=>$e(e,t,de(e)))),Xe=e=>ue(e,(t=>r.cursor(e.lineBlockAt(t.head).from,1))),Ye=e=>ue(e,(t=>r.cursor(e.lineBlockAt(t.head).to,-1)));function Ze(e,t,n){let o=!1,l=ce(e.selection,(t=>{let l=k(e,t.head,-1)||k(e,t.head,1)||t.head>0&&k(e,t.head-1,1)||t.head<e.doc.length&&k(e,t.head+1,-1);if(!l||!l.end)return t;o=!0;let s=l.start.from==t.head?l.end.to:l.end.from;return n?r.range(t.anchor,s):r.cursor(s)}));return!!o&&(t(fe(e,l)),!0)}const et=({state:e,dispatch:t})=>Ze(e,t,!1),tt=({state:e,dispatch:t})=>Ze(e,t,!0);function nt(e,t){let n=ce(e.state.selection,(e=>{let n=t(e);return r.range(e.anchor,n.head,n.goalColumn,n.bidiLevel||void 0)}));return!n.eq(e.state.selection)&&(e.dispatch(fe(e.state,n)),!0)}function rt(e,t){return nt(e,(n=>e.moveByChar(n,t)))}const ot=e=>rt(e,!de(e)),lt=e=>rt(e,de(e)),st=e=>rt(e,!0),at=e=>rt(e,!1),it=e=>nt(e,(t=>Ae(e.state,t,!0))),ct=e=>nt(e,(t=>Ae(e.state,t,!1)));function ft(e,t){return nt(e,(n=>e.moveByGroup(n,t)))}const ut=e=>ft(e,!de(e)),ht=e=>ft(e,de(e)),mt=e=>ft(e,!0),dt=e=>ft(e,!1),pt=e=>nt(e,(t=>e.moveByChar(t,!0,(n=>Ee(e,t.head,n)))));function gt(e,t){return nt(e,(n=>Te(e,n,t)))}const yt=e=>gt(e,!0),vt=e=>gt(e,!1),At=e=>nt(e,(t=>Je(e.state,t,!de(e)))),kt=e=>nt(e,(t=>Je(e.state,t,de(e))));function wt(e,t){return nt(e,(n=>e.moveVertically(n,t)))}const St=e=>wt(e,!1),Dt=e=>wt(e,!0);function xt(e,t){return nt(e,(n=>e.moveVertically(n,t,qe(e).height)))}const Mt=e=>xt(e,!1),Bt=e=>xt(e,!0),Ct=e=>nt(e,(t=>$e(e,t,!0))),Et=e=>nt(e,(t=>$e(e,t,!1))),Ot=e=>nt(e,(t=>$e(e,t,!de(e)))),bt=e=>nt(e,(t=>$e(e,t,de(e)))),Tt=e=>nt(e,(t=>r.cursor(e.lineBlockAt(t.head).from))),It=e=>nt(e,(t=>r.cursor(e.lineBlockAt(t.head).to))),Vt=({state:e,dispatch:t})=>(t(fe(e,{anchor:0})),!0),Rt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.doc.length})),!0),Lt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:0})),!0),Jt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0),Nt=({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:"select"})),!0),Ht=({state:e,dispatch:t})=>{let n=rn(e).map((({from:t,to:n})=>r.range(t,Math.min(n+1,e.doc.length))));return t(e.update({selection:r.create(n),userEvent:"select"})),!0},Ut=({state:e,dispatch:t})=>{let n=ce(e.selection,(t=>{let n=v(e),o=n.resolveStack(t.from,1);if(t.empty){let e=n.resolveStack(t.from,-1);e.node.from>=o.node.from&&e.node.to<=o.node.to&&(o=e)}for(let e=o;e;e=e.next){let{node:n}=e;if((n.from<t.from&&n.to>=t.to||n.to>t.to&&n.from<=t.from)&&e.next)return r.range(n.to,n.from)}return t}));return!n.eq(e.selection)&&(t(fe(e,n)),!0)},zt=({state:e,dispatch:t})=>{let n=e.selection,o=null;return n.ranges.length>1?o=r.create([n.main]):n.main.empty||(o=r.create([r.cursor(n.main.head)])),!!o&&(t(fe(e,o)),!0)};function jt(e,t){if(e.state.readOnly)return!1;let n="delete.selection",{state:o}=e,l=o.changeByRange((o=>{let{from:l,to:s}=o;if(l==s){let r=t(o);r<l?(n="delete.backward",r=qt(e,r,!1)):r>l&&(n="delete.forward",r=qt(e,r,!0)),l=Math.min(l,r),s=Math.max(s,r)}else l=qt(e,l,!1),s=qt(e,s,!0);return l==s?{range:o}:{changes:{from:l,to:s},range:r.cursor(l,l<o.head?-1:1)}}));return!l.changes.empty&&(e.dispatch(o.update(l,{scrollIntoView:!0,userEvent:n,effects:"delete.selection"==n?m.announce.of(o.phrase("Selection deleted")):void 0})),!0)}function qt(e,t,n){if(e instanceof m)for(let r of e.state.facet(m.atomicRanges).map((t=>t(e))))r.between(t,t,((e,r)=>{e<t&&r>t&&(t=n?r:e)}));return t}const Gt=(e,t,n)=>jt(e,(r=>{let l,a,i=r.from,{state:c}=e,f=c.doc.lineAt(i);if(n&&!t&&i>f.from&&i<f.from+200&&!/[^ \t]/.test(l=f.text.slice(0,i-f.from))){if("\t"==l[l.length-1])return i-1;let e=o(l,c.tabSize)%w(c)||w(c);for(let t=0;t<e&&" "==l[l.length-1-t];t++)i--;a=i}else a=s(f.text,i-f.from,t,t)+f.from,a==i&&f.number!=(t?c.doc.lines:1)?a+=t?1:-1:!t&&/[\ufe00-\ufe0f]/.test(f.text.slice(a-f.from,i-f.from))&&(a=s(f.text,a-f.from,!1,!1)+f.from);return a})),Pt=e=>Gt(e,!1,!0),Wt=e=>Gt(e,!1,!1),$t=e=>Gt(e,!0,!1),_t=(e,t)=>jt(e,(n=>{let r=n.head,{state:o}=e,l=o.doc.lineAt(r),a=o.charCategorizer(r);for(let e=null;;){if(r==(t?l.to:l.from)){r==n.head&&l.number!=(t?o.doc.lines:1)&&(r+=t?1:-1);break}let i=s(l.text,r-l.from,t)+l.from,c=l.text.slice(Math.min(r,i)-l.from,Math.max(r,i)-l.from),f=a(c);if(null!=e&&f!=e)break;" "==c&&r==n.head||(e=f),r=i}return r})),Ft=e=>_t(e,!1),Kt=e=>_t(e,!0),Qt=e=>jt(e,(t=>{let n=e.lineBlockAt(t.head).to;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)})),Xt=e=>jt(e,(t=>{let n=e.lineBlockAt(t.head).from;return t.head>n?n:Math.max(0,t.head-1)})),Yt=e=>jt(e,(t=>{let n=e.moveToLineBoundary(t,!1).head;return t.head>n?n:Math.max(0,t.head-1)})),Zt=e=>jt(e,(t=>{let n=e.moveToLineBoundary(t,!0).head;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)})),en=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=[];for(let t=0,r="",o=e.doc.iter();;){if(o.next(),o.lineBreak||o.done){let e=r.search(/\s+$/);if(e>-1&&n.push({from:t-(r.length-e),to:t}),o.done)break;r=""}else r=o.value;t+=o.value.length}return!!n.length&&(t(e.update({changes:n,userEvent:"delete"})),!0)},tn=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange((e=>({changes:{from:e.from,to:e.to,insert:l.of(["",""])},range:r.cursor(e.from)})));return t(e.update(n,{scrollIntoView:!0,userEvent:"input"})),!0},nn=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=e.changeByRange((t=>{if(!t.empty||0==t.from||t.from==e.doc.length)return{range:t};let n=t.from,o=e.doc.lineAt(n),l=n==o.from?n-1:s(o.text,n-o.from,!1)+o.from,a=n==o.to?n+1:s(o.text,n-o.from,!0)+o.from;return{changes:{from:l,to:a,insert:e.doc.slice(n,a).append(e.doc.slice(l,n))},range:r.cursor(a)}}));return!n.changes.empty&&(t(e.update(n,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function rn(e){let t=[],n=-1;for(let r of e.selection.ranges){let o=e.doc.lineAt(r.from),l=e.doc.lineAt(r.to);if(r.empty||r.to!=l.from||(l=e.doc.lineAt(r.to-1)),n>=o.number){let e=t[t.length-1];e.to=l.to,e.ranges.push(r)}else t.push({from:o.from,to:l.to,ranges:[r]});n=l.number+1}return t}function on(e,t,n){if(e.readOnly)return!1;let o=[],l=[];for(let t of rn(e)){if(n?t.to==e.doc.length:0==t.from)continue;let s=e.doc.lineAt(n?t.to+1:t.from-1),a=s.length+1;if(n){o.push({from:t.to,to:s.to},{from:t.from,insert:s.text+e.lineBreak});for(let n of t.ranges)l.push(r.range(Math.min(e.doc.length,n.anchor+a),Math.min(e.doc.length,n.head+a)))}else{o.push({from:s.from,to:t.from},{from:t.to,insert:e.lineBreak+s.text});for(let e of t.ranges)l.push(r.range(e.anchor-a,e.head-a))}}return!!o.length&&(t(e.update({changes:o,scrollIntoView:!0,selection:r.create(l,e.selection.mainIndex),userEvent:"move.line"})),!0)}const ln=({state:e,dispatch:t})=>on(e,t,!1),sn=({state:e,dispatch:t})=>on(e,t,!0);function an(e,t,n){if(e.readOnly)return!1;let r=[];for(let t of rn(e))n?r.push({from:t.from,insert:e.doc.slice(t.from,t.to)+e.lineBreak}):r.push({from:t.to,insert:e.lineBreak+e.doc.slice(t.from,t.to)});return t(e.update({changes:r,scrollIntoView:!0,userEvent:"input.copyline"})),!0}const cn=({state:e,dispatch:t})=>an(e,t,!1),fn=({state:e,dispatch:t})=>an(e,t,!0),un=e=>{if(e.state.readOnly)return!1;let{state:t}=e,n=t.changes(rn(t).map((({from:e,to:n})=>(e>0?e--:n<t.doc.length&&n++,{from:e,to:n})))),r=ce(t.selection,(t=>{let n;if(e.lineWrapping){let r=e.lineBlockAt(t.head),o=e.coordsAtPos(t.head,t.assoc||1);o&&(n=r.bottom+e.documentTop-o.bottom+e.defaultLineHeight/2)}return e.moveVertically(t,!0,n)})).map(n);return e.dispatch({changes:n,selection:r,scrollIntoView:!0,userEvent:"delete.line"}),!0},hn=({state:e,dispatch:t})=>(t(e.update(e.replaceSelection(e.lineBreak),{scrollIntoView:!0,userEvent:"input"})),!0),mn=({state:e,dispatch:t})=>(t(e.update(e.changeByRange((t=>{let n=/^\s*/.exec(e.doc.lineAt(t.from).text)[0];return{changes:{from:t.from,to:t.to,insert:e.lineBreak+n},range:r.cursor(t.from+n.length+1)}})),{scrollIntoView:!0,userEvent:"input"})),!0);const dn=gn(!1),pn=gn(!0);function gn(e){return({state:t,dispatch:n})=>{if(t.readOnly)return!1;let s=t.changeByRange((n=>{let{from:s,to:a}=n,i=t.doc.lineAt(s),c=!e&&s==a&&function(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};let n,r=v(e).resolveInner(t),o=r.childBefore(t),l=r.childAfter(t);return o&&l&&o.to<=t&&l.from>=t&&(n=o.type.prop(A.closedBy))&&n.indexOf(l.name)>-1&&e.doc.lineAt(o.to).from==e.doc.lineAt(l.from).from&&!/\S/.test(e.sliceDoc(o.to,l.from))?{from:o.to,to:l.from}:null}(t,s);e&&(s=a=(a<=i.to?i:t.doc.lineAt(a)).to);let f=new p(t,{simulateBreak:s,simulateDoubleBreak:!!c}),u=g(f,s);for(null==u&&(u=o(/^\s*/.exec(t.doc.lineAt(s).text)[0],t.tabSize));a<i.to&&/\s/.test(i.text[a-i.from]);)a++;c?({from:s,to:a}=c):s>i.from&&s<i.from+100&&!/\S/.test(i.text.slice(0,s))&&(s=i.from);let h=["",y(t,u)];return c&&h.push(y(t,f.lineIndent(i.from,-1))),{changes:{from:s,to:a,insert:l.of(h)},range:r.cursor(s+1+h[1].length)}}));return n(t.update(s,{scrollIntoView:!0,userEvent:"input"})),!0}}function yn(e,t){let n=-1;return e.changeByRange((o=>{let l=[];for(let r=o.from;r<=o.to;){let s=e.doc.lineAt(r);s.number>n&&(o.empty||o.to>s.from)&&(t(s,l,o),n=s.number),r=s.to+1}let s=e.changes(l);return{changes:l,range:r.range(s.mapPos(o.anchor,1),s.mapPos(o.head,1))}}))}const vn=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=Object.create(null),r=new p(e,{overrideIndentation:e=>{let t=n[e];return null==t?-1:t}}),o=yn(e,((t,o,l)=>{let s=g(r,t.from);if(null==s)return;/\S/.test(t.text)||(s=0);let a=/^\s*/.exec(t.text)[0],i=y(e,s);(a!=i||l.from<t.from+a.length)&&(n[t.from]=s,o.push({from:t.from,to:t.from+a.length,insert:i}))}));return o.changes.empty||t(e.update(o,{userEvent:"indent"})),!0},An=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(yn(e,((t,n)=>{n.push({from:t.from,insert:e.facet(S)})})),{userEvent:"input.indent"})),!0),kn=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(yn(e,((t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let l=o(r,e.tabSize),s=0,a=y(e,Math.max(0,l-w(e)));for(;s<r.length&&s<a.length&&r.charCodeAt(s)==a.charCodeAt(s);)s++;n.push({from:t.from+s,to:t.from+r.length,insert:a.slice(s)})})),{userEvent:"delete.dedent"})),!0),wn=e=>(e.setTabFocusMode(),!0),Sn=e=>(e.setTabFocusMode(2e3),!0),Dn=({state:e,dispatch:t})=>e.selection.ranges.some((e=>!e.empty))?An({state:e,dispatch:t}):(t(e.update(e.replaceSelection("\t"),{scrollIntoView:!0,userEvent:"input"})),!0),xn=[{key:"Ctrl-b",run:pe,shift:ot,preventDefault:!0},{key:"Ctrl-f",run:ge,shift:lt},{key:"Ctrl-p",run:ze,shift:St},{key:"Ctrl-n",run:je,shift:Dt},{key:"Ctrl-a",run:Xe,shift:Tt},{key:"Ctrl-e",run:Ye,shift:It},{key:"Ctrl-d",run:$t},{key:"Ctrl-h",run:Pt},{key:"Ctrl-k",run:Qt},{key:"Ctrl-Alt-h",run:Ft},{key:"Ctrl-o",run:tn},{key:"Ctrl-t",run:nn},{key:"Ctrl-v",run:We}],Mn=[{key:"ArrowLeft",run:pe,shift:ot,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:xe,shift:ut,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Ke,shift:Ot,preventDefault:!0},{key:"ArrowRight",run:ge,shift:lt,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Me,shift:ht,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Qe,shift:bt,preventDefault:!0},{key:"ArrowUp",run:ze,shift:St,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Vt,shift:Lt},{mac:"Ctrl-ArrowUp",run:Pe,shift:Mt},{key:"ArrowDown",run:je,shift:Dt,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Rt,shift:Jt},{mac:"Ctrl-ArrowDown",run:We,shift:Bt},{key:"PageUp",run:Pe,shift:Mt},{key:"PageDown",run:We,shift:Bt},{key:"Home",run:Fe,shift:Et,preventDefault:!0},{key:"Mod-Home",run:Vt,shift:Lt},{key:"End",run:_e,shift:Ct,preventDefault:!0},{key:"Mod-End",run:Rt,shift:Jt},{key:"Enter",run:dn,shift:dn},{key:"Mod-a",run:Nt},{key:"Backspace",run:Pt,shift:Pt},{key:"Delete",run:$t},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Ft},{key:"Mod-Delete",mac:"Alt-Delete",run:Kt},{mac:"Mod-Backspace",run:Yt},{mac:"Mod-Delete",run:Zt}].concat(xn.map((e=>({mac:e.key,run:e.run,shift:e.shift})))),Bn=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Ne,shift:At},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:He,shift:kt},{key:"Alt-ArrowUp",run:ln},{key:"Shift-Alt-ArrowUp",run:cn},{key:"Alt-ArrowDown",run:sn},{key:"Shift-Alt-ArrowDown",run:fn},{key:"Escape",run:zt},{key:"Mod-Enter",run:pn},{key:"Alt-l",mac:"Ctrl-l",run:Ht},{key:"Mod-i",run:Ut,preventDefault:!0},{key:"Mod-[",run:kn},{key:"Mod-]",run:An},{key:"Mod-Alt-\\",run:vn},{key:"Shift-Mod-k",run:un},{key:"Shift-Mod-\\",run:et},{key:"Mod-/",run:D},{key:"Alt-A",run:E},{key:"Ctrl-m",mac:"Shift-Alt-m",run:wn}].concat(Mn),Cn={key:"Tab",run:An,shift:kn};export{O as blockComment,b as blockUncomment,fn as copyLineDown,cn as copyLineUp,ve as cursorCharBackward,Se as cursorCharBackwardLogical,ye as cursorCharForward,we as cursorCharForwardLogical,pe as cursorCharLeft,ge as cursorCharRight,Rt as cursorDocEnd,Vt as cursorDocStart,Ce as cursorGroupBackward,Be as cursorGroupForward,Oe as cursorGroupForwardWin,xe as cursorGroupLeft,Me as cursorGroupRight,Fe as cursorLineBoundaryBackward,_e as cursorLineBoundaryForward,Ke as cursorLineBoundaryLeft,Qe as cursorLineBoundaryRight,je as cursorLineDown,Ye as cursorLineEnd,Xe as cursorLineStart,ze as cursorLineUp,et as cursorMatchingBracket,We as cursorPageDown,Pe as cursorPageUp,Re as cursorSubwordBackward,Ve as cursorSubwordForward,Ne as cursorSyntaxLeft,He as cursorSyntaxRight,Bn as defaultKeymap,Pt as deleteCharBackward,Wt as deleteCharBackwardStrict,$t as deleteCharForward,Ft as deleteGroupBackward,Kt as deleteGroupForward,un as deleteLine,Yt as deleteLineBoundaryBackward,Zt as deleteLineBoundaryForward,Qt as deleteToLineEnd,Xt as deleteToLineStart,en as deleteTrailingWhitespace,xn as emacsStyleKeymap,j as history,q as historyField,ie as historyKeymap,kn as indentLess,An as indentMore,vn as indentSelection,Cn as indentWithTab,pn as insertBlankLine,hn as insertNewline,dn as insertNewlineAndIndent,mn as insertNewlineKeepIndent,Dn as insertTab,H as invertedEffects,N as isolateHistory,B as lineComment,C as lineUncomment,sn as moveLineDown,ln as moveLineUp,W as redo,Q as redoDepth,_ as redoSelection,Nt as selectAll,at as selectCharBackward,ct as selectCharBackwardLogical,st as selectCharForward,it as selectCharForwardLogical,ot as selectCharLeft,lt as selectCharRight,Jt as selectDocEnd,Lt as selectDocStart,dt as selectGroupBackward,mt as selectGroupForward,pt as selectGroupForwardWin,ut as selectGroupLeft,ht as selectGroupRight,Ht as selectLine,Et as selectLineBoundaryBackward,Ct as selectLineBoundaryForward,Ot as selectLineBoundaryLeft,bt as selectLineBoundaryRight,Dt as selectLineDown,It as selectLineEnd,Tt as selectLineStart,St as selectLineUp,tt as selectMatchingBracket,Bt as selectPageDown,Mt as selectPageUp,Ut as selectParentSyntax,vt as selectSubwordBackward,yt as selectSubwordForward,At as selectSyntaxLeft,kt as selectSyntaxRight,zt as simplifySelection,tn as splitLine,Mn as standardKeymap,Sn as temporarilySetTabFocusMode,E as toggleBlockComment,T as toggleBlockCommentByLine,D as toggleComment,M as toggleLineComment,wn as toggleTabFocusMode,nn as transposeChars,P as undo,K as undoDepth,$ as undoSelection};
2
- //# sourceMappingURL=codemirror_commands-D39x9C5q.js.map