instaui 0.1.2__py3-none-any.whl → 0.1.4__py3-none-any.whl

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 (62) hide show
  1. instaui/components/content.py +4 -4
  2. instaui/components/element.py +56 -12
  3. instaui/components/highlight_code/code.js +63 -0
  4. instaui/components/highlight_code/code.py +117 -0
  5. instaui/components/highlight_code/static/core.min.js +307 -0
  6. instaui/components/highlight_code/static/languages/css.min.js +31 -0
  7. instaui/components/highlight_code/static/languages/javascript.min.js +81 -0
  8. instaui/components/highlight_code/static/languages/json.min.js +8 -0
  9. instaui/components/highlight_code/static/languages/python-repl.min.js +5 -0
  10. instaui/components/highlight_code/static/languages/python.min.js +42 -0
  11. instaui/components/highlight_code/static/languages/shell.min.js +5 -0
  12. instaui/components/highlight_code/static/styles/default.min.css +9 -0
  13. instaui/components/highlight_code/static/styles/github-dark-dimmed.min.css +9 -0
  14. instaui/components/highlight_code/static/styles/github-dark.min.css +10 -0
  15. instaui/components/highlight_code/static/styles/github.min.css +10 -0
  16. instaui/components/html/__init__.py +2 -0
  17. instaui/components/html/select.py +7 -8
  18. instaui/components/html/textarea.py +28 -0
  19. instaui/components/markdown/markdown.js +33 -0
  20. instaui/components/markdown/markdown.py +41 -0
  21. instaui/components/markdown/static/github-markdown.css +12 -0
  22. instaui/components/markdown/static/marked.esm.js +2580 -0
  23. instaui/components/vfor.py +1 -1
  24. instaui/consts.py +4 -0
  25. instaui/daisyui/__init__.py +20 -0
  26. instaui/daisyui/_index.py +15 -0
  27. instaui/daisyui/button.py +38 -0
  28. instaui/daisyui/checkbox.py +17 -0
  29. instaui/daisyui/static/daisyui.css +1 -0
  30. instaui/daisyui/static/themes.css +1 -0
  31. instaui/dependencies/component_dependency.py +11 -5
  32. instaui/fastapi_server/dependency_router.py +4 -3
  33. instaui/fastapi_server/resource.py +12 -17
  34. instaui/fastapi_server/server.py +66 -20
  35. instaui/html_tools.py +12 -0
  36. instaui/inject.py +3 -3
  37. instaui/runtime/_app.py +6 -1
  38. instaui/runtime/resource.py +5 -2
  39. instaui/spa_router/_functions.py +1 -1
  40. instaui/spa_router/_route_model.py +1 -1
  41. instaui/static/insta-ui.css +1 -1
  42. instaui/static/insta-ui.esm-browser.prod.js +106 -111
  43. instaui/static/insta-ui.ico +0 -0
  44. instaui/static/insta-ui.js.map +1 -1
  45. instaui/static/templates/debug/sse.html +2 -2
  46. instaui/systems/file_system.py +3 -5
  47. instaui/systems/module_system.py +30 -0
  48. instaui/template/web_template.py +1 -1
  49. instaui/template/zero_template.py +19 -23
  50. instaui/ui/__build_init.py +73 -0
  51. instaui/ui/__init__.py +69 -57
  52. instaui/ui/__init__.pyi +129 -0
  53. instaui/ui/events.py +1 -1
  54. instaui/ui_functions/server.py +3 -1
  55. instaui/zero/func.py +16 -11
  56. instaui/zero/scope.py +89 -1
  57. {instaui-0.1.2.dist-info → instaui-0.1.4.dist-info}/METADATA +1 -1
  58. {instaui-0.1.2.dist-info → instaui-0.1.4.dist-info}/RECORD +60 -34
  59. instaui/static/insta-ui.iife.js +0 -29
  60. instaui/static/insta-ui.iife.js.map +0 -1
  61. {instaui-0.1.2.dist-info → instaui-0.1.4.dist-info}/LICENSE +0 -0
  62. {instaui-0.1.2.dist-info → instaui-0.1.4.dist-info}/WHEEL +0 -0
@@ -1,18 +1,18 @@
1
1
  from __future__ import annotations
2
- from typing import Dict
2
+ from typing import Any, Dict
3
3
  from instaui.components.component import Component
4
4
  from instaui.vars.types import TMaybeRef
5
5
  from instaui.vars.mixin_types.element_binding import ElementBindingMixin
6
6
 
7
7
 
8
8
  class Content(Component):
9
- def __init__(self, content: TMaybeRef[str]):
9
+ def __init__(self, content: TMaybeRef[Any]):
10
10
  """Content to be displayed on the page, typically used for pure text content within slots.
11
11
 
12
12
  Args:
13
- content (TMaybeRef[str]): The textual content to display.
13
+ content (TMaybeRef[Any]): The textual content to display.
14
14
 
15
- Example:
15
+ Examples:
16
16
  .. code-block:: python
17
17
  with html.div():
18
18
  ui.content("Hello, world!")
@@ -8,9 +8,11 @@ import re
8
8
  from typing import (
9
9
  Any,
10
10
  Dict,
11
+ Iterable,
11
12
  List,
12
13
  ClassVar,
13
14
  Optional,
15
+ Set,
14
16
  Tuple,
15
17
  Union,
16
18
  cast,
@@ -35,6 +37,7 @@ from instaui.vars.mixin_types.element_binding import ElementBindingMixin
35
37
 
36
38
  if TYPE_CHECKING:
37
39
  from instaui.event.event_mixin import EventMixin
40
+ from instaui.vars.types import TMaybeRef
38
41
 
39
42
 
40
43
  # Refer to the NiceGUI project.
@@ -103,7 +106,7 @@ class Element(Component):
103
106
  cls,
104
107
  *,
105
108
  esm: Union[str, Path, None] = None,
106
- externals: Optional[List[Union[str, Path]]] = None,
109
+ externals: Optional[Dict[str, Path]] = None,
107
110
  css: Union[List[Union[str, Path]], None] = None,
108
111
  ) -> None:
109
112
  super().__init_subclass__()
@@ -112,18 +115,21 @@ class Element(Component):
112
115
  esm = _make_dependency_path(esm, cls)
113
116
 
114
117
  if externals:
115
- externals = [_make_dependency_path(e, cls) for e in externals]
118
+ externals = {
119
+ key: _make_dependency_path(value, cls)
120
+ for key, value in externals.items()
121
+ }
116
122
 
117
123
  if css:
118
- css = [_make_dependency_path(c, cls) for c in css]
124
+ css = set(_make_dependency_path(c, cls) for c in css) # type: ignore
119
125
 
120
126
  tag_name = f"instaui-{esm.stem}"
121
127
 
122
128
  cls.dependency = ComponentDependencyInfo(
123
129
  tag_name=tag_name,
124
130
  esm=esm,
125
- externals=cast(List[Path], externals or []),
126
- css=cast(List[Path], css or []),
131
+ externals=cast(Dict[str, Path], externals or {}),
132
+ css=cast(Set[Path], css or set()),
127
133
  )
128
134
 
129
135
  cls._default_props = copy(cls._default_props)
@@ -225,32 +231,53 @@ class Element(Component):
225
231
  @overload
226
232
  def classes(self, add: str) -> Self: ...
227
233
  @overload
228
- def classes(self, add: Dict[str, ElementBindingMixin[bool]]) -> Self: ...
234
+ def classes(self, add: Dict[str, TMaybeRef[bool]]) -> Self: ...
229
235
 
230
236
  @overload
231
- def classes(self, add: ElementBindingMixin[str]) -> Self: ...
237
+ def classes(self, add: TMaybeRef[str]) -> Self: ...
232
238
 
233
239
  def classes(
234
240
  self,
235
241
  add: Union[
236
242
  str,
237
- Dict[str, ElementBindingMixin[bool]],
238
- ElementBindingMixin[str],
243
+ Dict[str, TMaybeRef[bool]],
244
+ TMaybeRef[str],
239
245
  VForItem,
240
246
  ],
241
247
  ) -> Self:
248
+ """Add classes to the component.
249
+
250
+ Args:
251
+ add (Union[ str, Dict[str, TMaybeRef[bool]], TMaybeRef[str], VForItem, ]): classes to add.
252
+
253
+
254
+ Examples:
255
+ .. code-block:: python
256
+
257
+ elemelt = html.span('test')
258
+ elemelt.classes('class1 class2')
259
+
260
+ # dynamically classes
261
+ class_name = ui.state('x')
262
+ elemelt.classes(class_name)
263
+
264
+ # apply name if True
265
+ apply = ui.state(True)
266
+ elemelt.classes({'x': apply})
267
+ """
268
+
242
269
  if isinstance(add, str):
243
270
  self._str_classes = self._update_classes(self._str_classes, add)
244
271
 
245
272
  if isinstance(add, dict):
246
- self._dict_classes.update(**add)
273
+ self._dict_classes.update(**add) # type: ignore
247
274
 
248
275
  if isinstance(add, ElementBindingMixin):
249
276
  self._bind_str_classes.append(add) # type: ignore
250
277
 
251
278
  return self
252
279
 
253
- def style(self, add: Union[str, Dict[str, Any], ElementBindingMixin[str]]) -> Self:
280
+ def style(self, add: Union[str, Dict[str, Any], TMaybeRef[str]]) -> Self:
254
281
  if isinstance(add, dict):
255
282
  add = {key: value for key, value in add.items()}
256
283
 
@@ -262,7 +289,7 @@ class Element(Component):
262
289
  self._style.update(new_style)
263
290
  return self
264
291
 
265
- def props(self, add: Union[str, Dict[str, Any], ElementBindingMixin]) -> Self:
292
+ def props(self, add: Union[str, Dict[str, Any], TMaybeRef]) -> Self:
266
293
  if isinstance(add, ElementBindingMixin):
267
294
  self._proxy_props.append(add)
268
295
  return self
@@ -326,6 +353,23 @@ class Element(Component):
326
353
  self._element_ref = ref
327
354
  return self
328
355
 
356
+ def update_dependencies(
357
+ self,
358
+ *,
359
+ css: Optional[Iterable[Path]] = None,
360
+ externals: Optional[Dict[str, Path]] = None,
361
+ ):
362
+ if not self.dependency:
363
+ return
364
+
365
+ if css:
366
+ self.dependency.css.update(css)
367
+
368
+ if externals:
369
+ self.dependency.externals.update(externals)
370
+
371
+ get_app_slot().use_component_dependency(self.dependency.copy(), replace=True)
372
+
329
373
  def _to_json_dict(self):
330
374
  data = super()._to_json_dict()
331
375
 
@@ -0,0 +1,63 @@
1
+ import { h, onMounted, ref, computed, watch } from "vue";
2
+ import hljs from 'highlight.js/lib/core.min.js'
3
+
4
+ async function registerLanguage(language) {
5
+ const langModule = await import(`highlight.js/languages/${language}.min.js`);
6
+ hljs.registerLanguage(language, langModule.default);
7
+ }
8
+
9
+
10
+ export default {
11
+ props: ['code', 'language'],
12
+ setup(props) {
13
+ const language = ref(props.language ?? hljs.getLanguage(props.code))
14
+
15
+ watch(() => props.language, (newLanguage) => {
16
+ language.value = newLanguage
17
+ })
18
+
19
+ watch(language, async (newLanguage) => {
20
+ ready.value = false
21
+ await registerLanguage(language.value)
22
+ ready.value = true
23
+ })
24
+
25
+ const ready = ref(false)
26
+
27
+ onMounted(async () => {
28
+ await registerLanguage(language.value)
29
+ ready.value = true
30
+ })
31
+
32
+ const highlightedCode = computed(() => {
33
+ if (!ready.value) {
34
+ return ''
35
+ }
36
+
37
+ if (!language.value) {
38
+ const result = hljs.highlightAuto(props.code)
39
+ return result.value
40
+ }
41
+
42
+ const result = hljs.highlight(props.code, { language: language.value })
43
+ return result.value
44
+ })
45
+
46
+ const classes = computed(() => {
47
+ if (!ready.value) {
48
+ return ''
49
+ }
50
+
51
+ return `hljs language-${language.value}`
52
+
53
+ })
54
+
55
+
56
+ return () => h("div", { class: classes.value },
57
+ h('pre', {},
58
+ h('code', { innerHTML: highlightedCode.value }))
59
+ );
60
+ }
61
+
62
+ }
63
+
@@ -0,0 +1,117 @@
1
+ from pathlib import Path
2
+ from typing import ClassVar, Iterable, List, Union
3
+ from warnings import warn
4
+ from instaui import ui
5
+ from instaui.runtime import get_app_slot
6
+
7
+ _STATIC_DIR = Path(__file__).parent / "static"
8
+ _STYLES_DIR = _STATIC_DIR / "styles"
9
+ _LANGUAGE_DIR = _STATIC_DIR / "languages"
10
+ _CORE_JS_FILE = _STATIC_DIR / "core.min.js"
11
+
12
+ _LANGUAGE_IMPORT_NAME = "highlight.js/languages/"
13
+ _CORE_JS_IMPORT_NAME_ZERO_MODE = "highlight.js/lib/core.min.js"
14
+
15
+ _IMPORT_MAPS = {
16
+ "highlight.js/lib/": _STATIC_DIR,
17
+ _LANGUAGE_IMPORT_NAME: _LANGUAGE_DIR,
18
+ }
19
+
20
+
21
+ class Code(
22
+ ui.element,
23
+ esm="./code.js",
24
+ externals=_IMPORT_MAPS,
25
+ css=[_STYLES_DIR],
26
+ ):
27
+ _language_folder: ClassVar[Path] = _LANGUAGE_DIR
28
+
29
+ def __init__(
30
+ self,
31
+ code: ui.TMaybeRef[str],
32
+ *,
33
+ language: ui.TMaybeRef[str] = "python",
34
+ theme: str = "default",
35
+ ):
36
+ super().__init__()
37
+ self.props({"code": code})
38
+
39
+ mode = get_app_slot().mode
40
+
41
+ if language:
42
+ self.props({"language": language})
43
+
44
+ if mode == "zero":
45
+ _try_update_dependencies_by_zero(self, language)
46
+
47
+ self.update_dependencies(css=[_STYLES_DIR / f"{theme}.min.css"])
48
+
49
+ @classmethod
50
+ def reset_language_folder(cls, folder: Path):
51
+ """Reset the language folder for all js files.
52
+
53
+ Args:
54
+ folder (Path): The new language folder.
55
+
56
+ Examples
57
+ .. code-block:: python
58
+ from instaui import ui
59
+
60
+ # must be called outside of page function
61
+ ui.code.reset_language_folder(Path("my_lang_folder"))
62
+ """
63
+ assert cls.dependency
64
+ cls.dependency.externals.update({_LANGUAGE_IMPORT_NAME: folder})
65
+ cls._language_folder = folder
66
+
67
+ @classmethod
68
+ def specified_language_by_zero_mode(
69
+ cls, folder_or_files: Union[Path, Iterable[Path]]
70
+ ):
71
+ """Specify the language files for zero mode.
72
+
73
+ Args:
74
+ folder_or_files (Union[Path, Iterable[Path]]): The folder or files to be imported.
75
+
76
+ Examples
77
+ .. code-block:: python
78
+ from instaui import ui,zero
79
+
80
+ def page():
81
+ ...
82
+
83
+ with zero() as z:
84
+ ui.code.specified_language_by_zero_mode(Path("my_lang_folder"))
85
+ page()
86
+ """
87
+ if not isinstance(folder_or_files, Iterable):
88
+ is_dir = folder_or_files.is_dir()
89
+ files = (
90
+ list(folder_or_files.glob("*.min.js")) if is_dir else [folder_or_files]
91
+ )
92
+
93
+ else:
94
+ files = folder_or_files
95
+
96
+ externals = {}
97
+ for file in files:
98
+ language = file.stem
99
+ externals[f"{_LANGUAGE_IMPORT_NAME}{language}.min.js"] = file
100
+
101
+ cls.dependency.externals.update(externals) # type: ignore
102
+
103
+
104
+ def _try_update_dependencies_by_zero(code: Code, language: ui.TMaybeRef[str]):
105
+ if isinstance(language, str):
106
+ code.update_dependencies(
107
+ externals={
108
+ f"{_LANGUAGE_IMPORT_NAME}{language}.min.js": code._language_folder
109
+ / f"{language}.min.js",
110
+ _CORE_JS_IMPORT_NAME_ZERO_MODE: _CORE_JS_FILE,
111
+ }
112
+ )
113
+ else:
114
+ warn(
115
+ "language must be a string in zero mode , or you can call specified_language_by_zero_mode() to specify the language files",
116
+ stacklevel=2,
117
+ )
@@ -0,0 +1,307 @@
1
+ /*!
2
+ Highlight.js v11.10.0 (git: 366a8bd012)
3
+ (c) 2006-2024 Josh Goebel <hello@joshgoebel.com> and other contributors
4
+ License: BSD-3-Clause
5
+ */
6
+ function e(t){return t instanceof Map?t.clear=t.delete=t.set=()=>{
7
+ throw Error("map is read-only")}:t instanceof Set&&(t.add=t.clear=t.delete=()=>{
8
+ throw Error("set is read-only")
9
+ }),Object.freeze(t),Object.getOwnPropertyNames(t).forEach((n=>{
10
+ const i=t[n],s=typeof i;"object"!==s&&"function"!==s||Object.isFrozen(i)||e(i)
11
+ })),t}class t{constructor(e){
12
+ void 0===e.data&&(e.data={}),this.data=e.data,this.isMatchIgnored=!1}
13
+ ignoreMatch(){this.isMatchIgnored=!0}}function n(e){
14
+ return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;")
15
+ }function i(e,...t){const n=Object.create(null);for(const t in e)n[t]=e[t]
16
+ ;return t.forEach((e=>{for(const t in e)n[t]=e[t]})),n}const s=e=>!!e.scope
17
+ ;class r{constructor(e,t){
18
+ this.buffer="",this.classPrefix=t.classPrefix,e.walk(this)}addText(e){
19
+ this.buffer+=n(e)}openNode(e){if(!s(e))return;const t=((e,{prefix:t})=>{
20
+ if(e.startsWith("language:"))return e.replace("language:","language-")
21
+ ;if(e.includes(".")){const n=e.split(".")
22
+ ;return[`${t}${n.shift()}`,...n.map(((e,t)=>`${e}${"_".repeat(t+1)}`))].join(" ")
23
+ }return`${t}${e}`})(e.scope,{prefix:this.classPrefix});this.span(t)}
24
+ closeNode(e){s(e)&&(this.buffer+="</span>")}value(){return this.buffer}span(e){
25
+ this.buffer+=`<span class="${e}">`}}const o=(e={})=>{const t={children:[]}
26
+ ;return Object.assign(t,e),t};class a{constructor(){
27
+ this.rootNode=o(),this.stack=[this.rootNode]}get top(){
28
+ return this.stack[this.stack.length-1]}get root(){return this.rootNode}add(e){
29
+ this.top.children.push(e)}openNode(e){const t=o({scope:e})
30
+ ;this.add(t),this.stack.push(t)}closeNode(){
31
+ if(this.stack.length>1)return this.stack.pop()}closeAllNodes(){
32
+ for(;this.closeNode(););}toJSON(){return JSON.stringify(this.rootNode,null,4)}
33
+ walk(e){return this.constructor._walk(e,this.rootNode)}static _walk(e,t){
34
+ return"string"==typeof t?e.addText(t):t.children&&(e.openNode(t),
35
+ t.children.forEach((t=>this._walk(e,t))),e.closeNode(t)),e}static _collapse(e){
36
+ "string"!=typeof e&&e.children&&(e.children.every((e=>"string"==typeof e))?e.children=[e.children.join("")]:e.children.forEach((e=>{
37
+ a._collapse(e)})))}}class c extends a{constructor(e){super(),this.options=e}
38
+ addText(e){""!==e&&this.add(e)}startScope(e){this.openNode(e)}endScope(){
39
+ this.closeNode()}__addSublanguage(e,t){const n=e.root
40
+ ;t&&(n.scope="language:"+t),this.add(n)}toHTML(){
41
+ return new r(this,this.options).value()}finalize(){
42
+ return this.closeAllNodes(),!0}}function l(e){
43
+ return e?"string"==typeof e?e:e.source:null}function g(e){return h("(?=",e,")")}
44
+ function u(e){return h("(?:",e,")*")}function d(e){return h("(?:",e,")?")}
45
+ function h(...e){return e.map((e=>l(e))).join("")}function f(...e){const t=(e=>{
46
+ const t=e[e.length-1]
47
+ ;return"object"==typeof t&&t.constructor===Object?(e.splice(e.length-1,1),t):{}
48
+ })(e);return"("+(t.capture?"":"?:")+e.map((e=>l(e))).join("|")+")"}
49
+ function p(e){return RegExp(e.toString()+"|").exec("").length-1}
50
+ const b=/\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./
51
+ ;function m(e,{joinWith:t}){let n=0;return e.map((e=>{n+=1;const t=n
52
+ ;let i=l(e),s="";for(;i.length>0;){const e=b.exec(i);if(!e){s+=i;break}
53
+ s+=i.substring(0,e.index),
54
+ i=i.substring(e.index+e[0].length),"\\"===e[0][0]&&e[1]?s+="\\"+(Number(e[1])+t):(s+=e[0],
55
+ "("===e[0]&&n++)}return s})).map((e=>`(${e})`)).join(t)}
56
+ const E="[a-zA-Z]\\w*",x="[a-zA-Z_]\\w*",w="\\b\\d+(\\.\\d+)?",y="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",_="\\b(0b[01]+)",O={
57
+ begin:"\\\\[\\s\\S]",relevance:0},k={scope:"string",begin:"'",end:"'",
58
+ illegal:"\\n",contains:[O]},v={scope:"string",begin:'"',end:'"',illegal:"\\n",
59
+ contains:[O]},N=(e,t,n={})=>{const s=i({scope:"comment",begin:e,end:t,
60
+ contains:[]},n);s.contains.push({scope:"doctag",
61
+ begin:"[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
62
+ end:/(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,excludeBegin:!0,relevance:0})
63
+ ;const r=f("I","a","is","so","us","to","at","if","in","it","on",/[A-Za-z]+['](d|ve|re|ll|t|s|n)/,/[A-Za-z]+[-][a-z]+/,/[A-Za-z][a-z]{2,}/)
64
+ ;return s.contains.push({begin:h(/[ ]+/,"(",r,/[.]?[:]?([.][ ]|[ ])/,"){3}")}),s
65
+ },S=N("//","$"),M=N("/\\*","\\*/"),R=N("#","$");var A=Object.freeze({
66
+ __proto__:null,APOS_STRING_MODE:k,BACKSLASH_ESCAPE:O,BINARY_NUMBER_MODE:{
67
+ scope:"number",begin:_,relevance:0},BINARY_NUMBER_RE:_,COMMENT:N,
68
+ C_BLOCK_COMMENT_MODE:M,C_LINE_COMMENT_MODE:S,C_NUMBER_MODE:{scope:"number",
69
+ begin:y,relevance:0},C_NUMBER_RE:y,END_SAME_AS_BEGIN:e=>Object.assign(e,{
70
+ "on:begin":(e,t)=>{t.data._beginMatch=e[1]},"on:end":(e,t)=>{
71
+ t.data._beginMatch!==e[1]&&t.ignoreMatch()}}),HASH_COMMENT_MODE:R,IDENT_RE:E,
72
+ MATCH_NOTHING_RE:/\b\B/,METHOD_GUARD:{begin:"\\.\\s*"+x,relevance:0},
73
+ NUMBER_MODE:{scope:"number",begin:w,relevance:0},NUMBER_RE:w,
74
+ PHRASAL_WORDS_MODE:{
75
+ begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
76
+ },QUOTE_STRING_MODE:v,REGEXP_MODE:{scope:"regexp",begin:/\/(?=[^/\n]*\/)/,
77
+ end:/\/[gimuy]*/,contains:[O,{begin:/\[/,end:/\]/,relevance:0,contains:[O]}]},
78
+ RE_STARTERS_RE:"!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
79
+ SHEBANG:(e={})=>{const t=/^#![ ]*\//
80
+ ;return e.binary&&(e.begin=h(t,/.*\b/,e.binary,/\b.*/)),i({scope:"meta",begin:t,
81
+ end:/$/,relevance:0,"on:begin":(e,t)=>{0!==e.index&&t.ignoreMatch()}},e)},
82
+ TITLE_MODE:{scope:"title",begin:E,relevance:0},UNDERSCORE_IDENT_RE:x,
83
+ UNDERSCORE_TITLE_MODE:{scope:"title",begin:x,relevance:0}});function j(e,t){
84
+ "."===e.input[e.index-1]&&t.ignoreMatch()}function I(e,t){
85
+ void 0!==e.className&&(e.scope=e.className,delete e.className)}function T(e,t){
86
+ t&&e.beginKeywords&&(e.begin="\\b("+e.beginKeywords.split(" ").join("|")+")(?!\\.)(?=\\b|\\s)",
87
+ e.__beforeBegin=j,e.keywords=e.keywords||e.beginKeywords,delete e.beginKeywords,
88
+ void 0===e.relevance&&(e.relevance=0))}function L(e,t){
89
+ Array.isArray(e.illegal)&&(e.illegal=f(...e.illegal))}function B(e,t){
90
+ if(e.match){
91
+ if(e.begin||e.end)throw Error("begin & end are not supported with match")
92
+ ;e.begin=e.match,delete e.match}}function P(e,t){
93
+ void 0===e.relevance&&(e.relevance=1)}const D=(e,t)=>{if(!e.beforeMatch)return
94
+ ;if(e.starts)throw Error("beforeMatch cannot be used with starts")
95
+ ;const n=Object.assign({},e);Object.keys(e).forEach((t=>{delete e[t]
96
+ })),e.keywords=n.keywords,e.begin=h(n.beforeMatch,g(n.begin)),e.starts={
97
+ relevance:0,contains:[Object.assign(n,{endsParent:!0})]
98
+ },e.relevance=0,delete n.beforeMatch
99
+ },H=["of","and","for","in","not","or","if","then","parent","list","value"],C="keyword"
100
+ ;function $(e,t,n=C){const i=Object.create(null)
101
+ ;return"string"==typeof e?s(n,e.split(" ")):Array.isArray(e)?s(n,e):Object.keys(e).forEach((n=>{
102
+ Object.assign(i,$(e[n],t,n))})),i;function s(e,n){
103
+ t&&(n=n.map((e=>e.toLowerCase()))),n.forEach((t=>{const n=t.split("|")
104
+ ;i[n[0]]=[e,U(n[0],n[1])]}))}}function U(e,t){
105
+ return t?Number(t):(e=>H.includes(e.toLowerCase()))(e)?0:1}const z={},W=e=>{
106
+ console.error(e)},X=(e,...t)=>{console.log("WARN: "+e,...t)},G=(e,t)=>{
107
+ z[`${e}/${t}`]||(console.log(`Deprecated as of ${e}. ${t}`),z[`${e}/${t}`]=!0)
108
+ },K=Error();function F(e,t,{key:n}){let i=0;const s=e[n],r={},o={}
109
+ ;for(let e=1;e<=t.length;e++)o[e+i]=s[e],r[e+i]=!0,i+=p(t[e-1])
110
+ ;e[n]=o,e[n]._emit=r,e[n]._multi=!0}function Z(e){(e=>{
111
+ e.scope&&"object"==typeof e.scope&&null!==e.scope&&(e.beginScope=e.scope,
112
+ delete e.scope)})(e),"string"==typeof e.beginScope&&(e.beginScope={
113
+ _wrap:e.beginScope}),"string"==typeof e.endScope&&(e.endScope={_wrap:e.endScope
114
+ }),(e=>{if(Array.isArray(e.begin)){
115
+ if(e.skip||e.excludeBegin||e.returnBegin)throw W("skip, excludeBegin, returnBegin not compatible with beginScope: {}"),
116
+ K
117
+ ;if("object"!=typeof e.beginScope||null===e.beginScope)throw W("beginScope must be object"),
118
+ K;F(e,e.begin,{key:"beginScope"}),e.begin=m(e.begin,{joinWith:""})}})(e),(e=>{
119
+ if(Array.isArray(e.end)){
120
+ if(e.skip||e.excludeEnd||e.returnEnd)throw W("skip, excludeEnd, returnEnd not compatible with endScope: {}"),
121
+ K
122
+ ;if("object"!=typeof e.endScope||null===e.endScope)throw W("endScope must be object"),
123
+ K;F(e,e.end,{key:"endScope"}),e.end=m(e.end,{joinWith:""})}})(e)}function V(e){
124
+ function t(t,n){
125
+ return RegExp(l(t),"m"+(e.case_insensitive?"i":"")+(e.unicodeRegex?"u":"")+(n?"g":""))
126
+ }class n{constructor(){
127
+ this.matchIndexes={},this.regexes=[],this.matchAt=1,this.position=0}
128
+ addRule(e,t){
129
+ t.position=this.position++,this.matchIndexes[this.matchAt]=t,this.regexes.push([t,e]),
130
+ this.matchAt+=p(e)+1}compile(){0===this.regexes.length&&(this.exec=()=>null)
131
+ ;const e=this.regexes.map((e=>e[1]));this.matcherRe=t(m(e,{joinWith:"|"
132
+ }),!0),this.lastIndex=0}exec(e){this.matcherRe.lastIndex=this.lastIndex
133
+ ;const t=this.matcherRe.exec(e);if(!t)return null
134
+ ;const n=t.findIndex(((e,t)=>t>0&&void 0!==e)),i=this.matchIndexes[n]
135
+ ;return t.splice(0,n),Object.assign(t,i)}}class s{constructor(){
136
+ this.rules=[],this.multiRegexes=[],
137
+ this.count=0,this.lastIndex=0,this.regexIndex=0}getMatcher(e){
138
+ if(this.multiRegexes[e])return this.multiRegexes[e];const t=new n
139
+ ;return this.rules.slice(e).forEach((([e,n])=>t.addRule(e,n))),
140
+ t.compile(),this.multiRegexes[e]=t,t}resumingScanAtSamePosition(){
141
+ return 0!==this.regexIndex}considerAll(){this.regexIndex=0}addRule(e,t){
142
+ this.rules.push([e,t]),"begin"===t.type&&this.count++}exec(e){
143
+ const t=this.getMatcher(this.regexIndex);t.lastIndex=this.lastIndex
144
+ ;let n=t.exec(e)
145
+ ;if(this.resumingScanAtSamePosition())if(n&&n.index===this.lastIndex);else{
146
+ const t=this.getMatcher(0);t.lastIndex=this.lastIndex+1,n=t.exec(e)}
147
+ return n&&(this.regexIndex+=n.position+1,
148
+ this.regexIndex===this.count&&this.considerAll()),n}}
149
+ if(e.compilerExtensions||(e.compilerExtensions=[]),
150
+ e.contains&&e.contains.includes("self"))throw Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.")
151
+ ;return e.classNameAliases=i(e.classNameAliases||{}),function n(r,o){const a=r
152
+ ;if(r.isCompiled)return a
153
+ ;[I,B,Z,D].forEach((e=>e(r,o))),e.compilerExtensions.forEach((e=>e(r,o))),
154
+ r.__beforeBegin=null,[T,L,P].forEach((e=>e(r,o))),r.isCompiled=!0;let c=null
155
+ ;return"object"==typeof r.keywords&&r.keywords.$pattern&&(r.keywords=Object.assign({},r.keywords),
156
+ c=r.keywords.$pattern,
157
+ delete r.keywords.$pattern),c=c||/\w+/,r.keywords&&(r.keywords=$(r.keywords,e.case_insensitive)),
158
+ a.keywordPatternRe=t(c,!0),
159
+ o&&(r.begin||(r.begin=/\B|\b/),a.beginRe=t(a.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),
160
+ r.end&&(a.endRe=t(a.end)),
161
+ a.terminatorEnd=l(a.end)||"",r.endsWithParent&&o.terminatorEnd&&(a.terminatorEnd+=(r.end?"|":"")+o.terminatorEnd)),
162
+ r.illegal&&(a.illegalRe=t(r.illegal)),
163
+ r.contains||(r.contains=[]),r.contains=[].concat(...r.contains.map((e=>(e=>(e.variants&&!e.cachedVariants&&(e.cachedVariants=e.variants.map((t=>i(e,{
164
+ variants:null},t)))),e.cachedVariants?e.cachedVariants:q(e)?i(e,{
165
+ starts:e.starts?i(e.starts):null
166
+ }):Object.isFrozen(e)?i(e):e))("self"===e?r:e)))),r.contains.forEach((e=>{n(e,a)
167
+ })),r.starts&&n(r.starts,o),a.matcher=(e=>{const t=new s
168
+ ;return e.contains.forEach((e=>t.addRule(e.begin,{rule:e,type:"begin"
169
+ }))),e.terminatorEnd&&t.addRule(e.terminatorEnd,{type:"end"
170
+ }),e.illegal&&t.addRule(e.illegal,{type:"illegal"}),t})(a),a}(e)}function q(e){
171
+ return!!e&&(e.endsWithParent||q(e.starts))}class J extends Error{
172
+ constructor(e,t){super(e),this.name="HTMLInjectionError",this.html=t}}
173
+ const Y=n,Q=i,ee=Symbol("nomatch"),te=n=>{
174
+ const i=Object.create(null),s=Object.create(null),r=[];let o=!0
175
+ ;const a="Could not find the language '{}', did you forget to load/include a language module?",l={
176
+ disableAutodetect:!0,name:"Plain text",contains:[]};let p={
177
+ ignoreUnescapedHTML:!1,throwUnescapedHTML:!1,noHighlightRe:/^(no-?highlight)$/i,
178
+ languageDetectRe:/\blang(?:uage)?-([\w-]+)\b/i,classPrefix:"hljs-",
179
+ cssSelector:"pre code",languages:null,__emitter:c};function b(e){
180
+ return p.noHighlightRe.test(e)}function m(e,t,n){let i="",s=""
181
+ ;"object"==typeof t?(i=e,
182
+ n=t.ignoreIllegals,s=t.language):(G("10.7.0","highlight(lang, code, ...args) has been deprecated."),
183
+ G("10.7.0","Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"),
184
+ s=e,i=t),void 0===n&&(n=!0);const r={code:i,language:s};N("before:highlight",r)
185
+ ;const o=r.result?r.result:E(r.language,r.code,n)
186
+ ;return o.code=r.code,N("after:highlight",o),o}function E(e,n,s,r){
187
+ const c=Object.create(null);function l(){if(!N.keywords)return void M.addText(R)
188
+ ;let e=0;N.keywordPatternRe.lastIndex=0;let t=N.keywordPatternRe.exec(R),n=""
189
+ ;for(;t;){n+=R.substring(e,t.index)
190
+ ;const s=_.case_insensitive?t[0].toLowerCase():t[0],r=(i=s,N.keywords[i]);if(r){
191
+ const[e,i]=r
192
+ ;if(M.addText(n),n="",c[s]=(c[s]||0)+1,c[s]<=7&&(A+=i),e.startsWith("_"))n+=t[0];else{
193
+ const n=_.classNameAliases[e]||e;u(t[0],n)}}else n+=t[0]
194
+ ;e=N.keywordPatternRe.lastIndex,t=N.keywordPatternRe.exec(R)}var i
195
+ ;n+=R.substring(e),M.addText(n)}function g(){null!=N.subLanguage?(()=>{
196
+ if(""===R)return;let e=null;if("string"==typeof N.subLanguage){
197
+ if(!i[N.subLanguage])return void M.addText(R)
198
+ ;e=E(N.subLanguage,R,!0,S[N.subLanguage]),S[N.subLanguage]=e._top
199
+ }else e=x(R,N.subLanguage.length?N.subLanguage:null)
200
+ ;N.relevance>0&&(A+=e.relevance),M.__addSublanguage(e._emitter,e.language)
201
+ })():l(),R=""}function u(e,t){
202
+ ""!==e&&(M.startScope(t),M.addText(e),M.endScope())}function d(e,t){let n=1
203
+ ;const i=t.length-1;for(;n<=i;){if(!e._emit[n]){n++;continue}
204
+ const i=_.classNameAliases[e[n]]||e[n],s=t[n];i?u(s,i):(R=s,l(),R=""),n++}}
205
+ function h(e,t){
206
+ return e.scope&&"string"==typeof e.scope&&M.openNode(_.classNameAliases[e.scope]||e.scope),
207
+ e.beginScope&&(e.beginScope._wrap?(u(R,_.classNameAliases[e.beginScope._wrap]||e.beginScope._wrap),
208
+ R=""):e.beginScope._multi&&(d(e.beginScope,t),R="")),N=Object.create(e,{parent:{
209
+ value:N}}),N}function f(e,n,i){let s=((e,t)=>{const n=e&&e.exec(t)
210
+ ;return n&&0===n.index})(e.endRe,i);if(s){if(e["on:end"]){const i=new t(e)
211
+ ;e["on:end"](n,i),i.isMatchIgnored&&(s=!1)}if(s){
212
+ for(;e.endsParent&&e.parent;)e=e.parent;return e}}
213
+ if(e.endsWithParent)return f(e.parent,n,i)}function b(e){
214
+ return 0===N.matcher.regexIndex?(R+=e[0],1):(T=!0,0)}function m(e){
215
+ const t=e[0],i=n.substring(e.index),s=f(N,e,i);if(!s)return ee;const r=N
216
+ ;N.endScope&&N.endScope._wrap?(g(),
217
+ u(t,N.endScope._wrap)):N.endScope&&N.endScope._multi?(g(),
218
+ d(N.endScope,e)):r.skip?R+=t:(r.returnEnd||r.excludeEnd||(R+=t),
219
+ g(),r.excludeEnd&&(R=t));do{
220
+ N.scope&&M.closeNode(),N.skip||N.subLanguage||(A+=N.relevance),N=N.parent
221
+ }while(N!==s.parent);return s.starts&&h(s.starts,e),r.returnEnd?0:t.length}
222
+ let w={};function y(i,r){const a=r&&r[0];if(R+=i,null==a)return g(),0
223
+ ;if("begin"===w.type&&"end"===r.type&&w.index===r.index&&""===a){
224
+ if(R+=n.slice(r.index,r.index+1),!o){const t=Error(`0 width match regex (${e})`)
225
+ ;throw t.languageName=e,t.badRule=w.rule,t}return 1}
226
+ if(w=r,"begin"===r.type)return(e=>{
227
+ const n=e[0],i=e.rule,s=new t(i),r=[i.__beforeBegin,i["on:begin"]]
228
+ ;for(const t of r)if(t&&(t(e,s),s.isMatchIgnored))return b(n)
229
+ ;return i.skip?R+=n:(i.excludeBegin&&(R+=n),
230
+ g(),i.returnBegin||i.excludeBegin||(R=n)),h(i,e),i.returnBegin?0:n.length})(r)
231
+ ;if("illegal"===r.type&&!s){
232
+ const e=Error('Illegal lexeme "'+a+'" for mode "'+(N.scope||"<unnamed>")+'"')
233
+ ;throw e.mode=N,e}if("end"===r.type){const e=m(r);if(e!==ee)return e}
234
+ if("illegal"===r.type&&""===a)return 1
235
+ ;if(I>1e5&&I>3*r.index)throw Error("potential infinite loop, way more iterations than matches")
236
+ ;return R+=a,a.length}const _=O(e)
237
+ ;if(!_)throw W(a.replace("{}",e)),Error('Unknown language: "'+e+'"')
238
+ ;const k=V(_);let v="",N=r||k;const S={},M=new p.__emitter(p);(()=>{const e=[]
239
+ ;for(let t=N;t!==_;t=t.parent)t.scope&&e.unshift(t.scope)
240
+ ;e.forEach((e=>M.openNode(e)))})();let R="",A=0,j=0,I=0,T=!1;try{
241
+ if(_.__emitTokens)_.__emitTokens(n,M);else{for(N.matcher.considerAll();;){
242
+ I++,T?T=!1:N.matcher.considerAll(),N.matcher.lastIndex=j
243
+ ;const e=N.matcher.exec(n);if(!e)break;const t=y(n.substring(j,e.index),e)
244
+ ;j=e.index+t}y(n.substring(j))}return M.finalize(),v=M.toHTML(),{language:e,
245
+ value:v,relevance:A,illegal:!1,_emitter:M,_top:N}}catch(t){
246
+ if(t.message&&t.message.includes("Illegal"))return{language:e,value:Y(n),
247
+ illegal:!0,relevance:0,_illegalBy:{message:t.message,index:j,
248
+ context:n.slice(j-100,j+100),mode:t.mode,resultSoFar:v},_emitter:M};if(o)return{
249
+ language:e,value:Y(n),illegal:!1,relevance:0,errorRaised:t,_emitter:M,_top:N}
250
+ ;throw t}}function x(e,t){t=t||p.languages||Object.keys(i);const n=(e=>{
251
+ const t={value:Y(e),illegal:!1,relevance:0,_top:l,_emitter:new p.__emitter(p)}
252
+ ;return t._emitter.addText(e),t})(e),s=t.filter(O).filter(v).map((t=>E(t,e,!1)))
253
+ ;s.unshift(n);const r=s.sort(((e,t)=>{
254
+ if(e.relevance!==t.relevance)return t.relevance-e.relevance
255
+ ;if(e.language&&t.language){if(O(e.language).supersetOf===t.language)return 1
256
+ ;if(O(t.language).supersetOf===e.language)return-1}return 0})),[o,a]=r,c=o
257
+ ;return c.secondBest=a,c}function w(e){let t=null;const n=(e=>{
258
+ let t=e.className+" ";t+=e.parentNode?e.parentNode.className:""
259
+ ;const n=p.languageDetectRe.exec(t);if(n){const t=O(n[1])
260
+ ;return t||(X(a.replace("{}",n[1])),
261
+ X("Falling back to no-highlight mode for this block.",e)),t?n[1]:"no-highlight"}
262
+ return t.split(/\s+/).find((e=>b(e)||O(e)))})(e);if(b(n))return
263
+ ;if(N("before:highlightElement",{el:e,language:n
264
+ }),e.dataset.highlighted)return void console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.",e)
265
+ ;if(e.children.length>0&&(p.ignoreUnescapedHTML||(console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."),
266
+ console.warn("https://github.com/highlightjs/highlight.js/wiki/security"),
267
+ console.warn("The element with unescaped HTML:"),
268
+ console.warn(e)),p.throwUnescapedHTML))throw new J("One of your code blocks includes unescaped HTML.",e.innerHTML)
269
+ ;t=e;const i=t.textContent,r=n?m(i,{language:n,ignoreIllegals:!0}):x(i)
270
+ ;e.innerHTML=r.value,e.dataset.highlighted="yes",((e,t,n)=>{const i=t&&s[t]||n
271
+ ;e.classList.add("hljs"),e.classList.add("language-"+i)
272
+ })(e,n,r.language),e.result={language:r.language,re:r.relevance,
273
+ relevance:r.relevance},r.secondBest&&(e.secondBest={
274
+ language:r.secondBest.language,relevance:r.secondBest.relevance
275
+ }),N("after:highlightElement",{el:e,result:r,text:i})}let y=!1;function _(){
276
+ "loading"!==document.readyState?document.querySelectorAll(p.cssSelector).forEach(w):y=!0
277
+ }function O(e){return e=(e||"").toLowerCase(),i[e]||i[s[e]]}
278
+ function k(e,{languageName:t}){"string"==typeof e&&(e=[e]),e.forEach((e=>{
279
+ s[e.toLowerCase()]=t}))}function v(e){const t=O(e)
280
+ ;return t&&!t.disableAutodetect}function N(e,t){const n=e;r.forEach((e=>{
281
+ e[n]&&e[n](t)}))}
282
+ "undefined"!=typeof window&&window.addEventListener&&window.addEventListener("DOMContentLoaded",(()=>{
283
+ y&&_()}),!1),Object.assign(n,{highlight:m,highlightAuto:x,highlightAll:_,
284
+ highlightElement:w,
285
+ highlightBlock:e=>(G("10.7.0","highlightBlock will be removed entirely in v12.0"),
286
+ G("10.7.0","Please use highlightElement now."),w(e)),configure:e=>{p=Q(p,e)},
287
+ initHighlighting:()=>{
288
+ _(),G("10.6.0","initHighlighting() deprecated. Use highlightAll() now.")},
289
+ initHighlightingOnLoad:()=>{
290
+ _(),G("10.6.0","initHighlightingOnLoad() deprecated. Use highlightAll() now.")
291
+ },registerLanguage:(e,t)=>{let s=null;try{s=t(n)}catch(t){
292
+ if(W("Language definition for '{}' could not be registered.".replace("{}",e)),
293
+ !o)throw t;W(t),s=l}
294
+ s.name||(s.name=e),i[e]=s,s.rawDefinition=t.bind(null,n),s.aliases&&k(s.aliases,{
295
+ languageName:e})},unregisterLanguage:e=>{delete i[e]
296
+ ;for(const t of Object.keys(s))s[t]===e&&delete s[t]},
297
+ listLanguages:()=>Object.keys(i),getLanguage:O,registerAliases:k,
298
+ autoDetection:v,inherit:Q,addPlugin:e=>{(e=>{
299
+ e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
300
+ e["before:highlightBlock"](Object.assign({block:t.el},t))
301
+ }),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
302
+ e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),r.push(e)},
303
+ removePlugin:e=>{const t=r.indexOf(e);-1!==t&&r.splice(t,1)}}),n.debugMode=()=>{
304
+ o=!1},n.safeMode=()=>{o=!0},n.versionString="11.10.0",n.regex={concat:h,
305
+ lookahead:g,either:f,optional:d,anyNumberOfTimes:u}
306
+ ;for(const t in A)"object"==typeof A[t]&&e(A[t]);return Object.assign(n,A),n
307
+ },ne=te({});ne.newInstance=()=>te({});export{ne as default};