diff --git a/CHANGELOG.md b/CHANGELOG.md index 800a4602a..508e447a8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [Unreleased] + +- Added experimental `free-math` multiline mathfield mode alongside `free-text`, preserving rows, empty lines, tabs, clipboard plain text, and public output formats when values are round-tripped. +- Fixed `free-text` fields to resolve direction independently for every line, keep mixed Hebrew/Latin prose in Unicode bidi order, group formulas with adjacent Latin text in logical LTR islands, and render the visual caret beside the logical insertion point instead of pinning it to the RTL edge. + ## 0.110.0 _2026-06-08_ ### Security Advisories diff --git a/css/core.less b/css/core.less index 27e8deacf..e67e438e5 100644 --- a/css/core.less +++ b/css/core.less @@ -75,6 +75,14 @@ white-space: pre; } +.ML__text.ML__underline { + text-decoration: underline; +} + +.ML__text.ML__line-through { + text-decoration: line-through; +} + /* Use cmr for 'math upright' */ .ML__cmr { font-family: KaTeX_Main; diff --git a/css/mathfield.less b/css/mathfield.less index 16a0604a2..f9bb31031 100644 --- a/css/mathfield.less +++ b/css/mathfield.less @@ -199,6 +199,40 @@ } } +// Free-text is a text editor whose lines happen to use MathLive's multiline +// array model. Keep the editor at the host's logical start rather than using +// the centered formula presentation. In RTL fields flex-start is the right +// edge, while the nested formula renderer remains LTR for math islands. +.ML__content:has(.ML__free-text-root) { + justify-content: flex-start; + text-align: start; +} + +:host([dir='rtl']) .ML__free-text-root { + direction: rtl; +} + +:host([dir='ltr']) .ML__free-text-root { + direction: ltr; +} + +.ML__free-text-root .col-align-l > .ML__vlist-t { + text-align: start; +} + +.ML__free-text-line { + text-align: start; +} + +.ML__free-text-line[dir='auto'] { + unicode-bidi: plaintext; +} + +.ML__free-text-math-island { + direction: ltr; + unicode-bidi: isolate; +} + /* Container for the virtual keyboard toggle and menu toggle buttons */ .ML__toggles { display: flex; diff --git a/dist/fonts/KaTeX_AMS-Regular.woff2 b/dist/fonts/KaTeX_AMS-Regular.woff2 new file mode 100644 index 000000000..0acaaff03 Binary files /dev/null and b/dist/fonts/KaTeX_AMS-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Caligraphic-Bold.woff2 b/dist/fonts/KaTeX_Caligraphic-Bold.woff2 new file mode 100644 index 000000000..f390922ec Binary files /dev/null and b/dist/fonts/KaTeX_Caligraphic-Bold.woff2 differ diff --git a/dist/fonts/KaTeX_Caligraphic-Regular.woff2 b/dist/fonts/KaTeX_Caligraphic-Regular.woff2 new file mode 100644 index 000000000..75344a1f9 Binary files /dev/null and b/dist/fonts/KaTeX_Caligraphic-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Fraktur-Bold.woff2 b/dist/fonts/KaTeX_Fraktur-Bold.woff2 new file mode 100644 index 000000000..395f28bea Binary files /dev/null and b/dist/fonts/KaTeX_Fraktur-Bold.woff2 differ diff --git a/dist/fonts/KaTeX_Fraktur-Regular.woff2 b/dist/fonts/KaTeX_Fraktur-Regular.woff2 new file mode 100644 index 000000000..735f6948d Binary files /dev/null and b/dist/fonts/KaTeX_Fraktur-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Main-Bold.woff2 b/dist/fonts/KaTeX_Main-Bold.woff2 new file mode 100644 index 000000000..ab2ad21da Binary files /dev/null and b/dist/fonts/KaTeX_Main-Bold.woff2 differ diff --git a/dist/fonts/KaTeX_Main-BoldItalic.woff2 b/dist/fonts/KaTeX_Main-BoldItalic.woff2 new file mode 100644 index 000000000..5931794de Binary files /dev/null and b/dist/fonts/KaTeX_Main-BoldItalic.woff2 differ diff --git a/dist/fonts/KaTeX_Main-Italic.woff2 b/dist/fonts/KaTeX_Main-Italic.woff2 new file mode 100644 index 000000000..b50920e13 Binary files /dev/null and b/dist/fonts/KaTeX_Main-Italic.woff2 differ diff --git a/dist/fonts/KaTeX_Main-Regular.woff2 b/dist/fonts/KaTeX_Main-Regular.woff2 new file mode 100644 index 000000000..eb24a7ba2 Binary files /dev/null and b/dist/fonts/KaTeX_Main-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Math-BoldItalic.woff2 b/dist/fonts/KaTeX_Math-BoldItalic.woff2 new file mode 100644 index 000000000..29657023a Binary files /dev/null and b/dist/fonts/KaTeX_Math-BoldItalic.woff2 differ diff --git a/dist/fonts/KaTeX_Math-Italic.woff2 b/dist/fonts/KaTeX_Math-Italic.woff2 new file mode 100644 index 000000000..215c143fd Binary files /dev/null and b/dist/fonts/KaTeX_Math-Italic.woff2 differ diff --git a/dist/fonts/KaTeX_SansSerif-Bold.woff2 b/dist/fonts/KaTeX_SansSerif-Bold.woff2 new file mode 100644 index 000000000..cfaa3bda5 Binary files /dev/null and b/dist/fonts/KaTeX_SansSerif-Bold.woff2 differ diff --git a/dist/fonts/KaTeX_SansSerif-Italic.woff2 b/dist/fonts/KaTeX_SansSerif-Italic.woff2 new file mode 100644 index 000000000..349c06dc6 Binary files /dev/null and b/dist/fonts/KaTeX_SansSerif-Italic.woff2 differ diff --git a/dist/fonts/KaTeX_SansSerif-Regular.woff2 b/dist/fonts/KaTeX_SansSerif-Regular.woff2 new file mode 100644 index 000000000..a90eea85f Binary files /dev/null and b/dist/fonts/KaTeX_SansSerif-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Script-Regular.woff2 b/dist/fonts/KaTeX_Script-Regular.woff2 new file mode 100644 index 000000000..b3048fc11 Binary files /dev/null and b/dist/fonts/KaTeX_Script-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Size1-Regular.woff2 b/dist/fonts/KaTeX_Size1-Regular.woff2 new file mode 100644 index 000000000..c5a8462fb Binary files /dev/null and b/dist/fonts/KaTeX_Size1-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Size2-Regular.woff2 b/dist/fonts/KaTeX_Size2-Regular.woff2 new file mode 100644 index 000000000..e1bccfe24 Binary files /dev/null and b/dist/fonts/KaTeX_Size2-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Size3-Regular.woff2 b/dist/fonts/KaTeX_Size3-Regular.woff2 new file mode 100644 index 000000000..249a28662 Binary files /dev/null and b/dist/fonts/KaTeX_Size3-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Size4-Regular.woff2 b/dist/fonts/KaTeX_Size4-Regular.woff2 new file mode 100644 index 000000000..680c13085 Binary files /dev/null and b/dist/fonts/KaTeX_Size4-Regular.woff2 differ diff --git a/dist/fonts/KaTeX_Typewriter-Regular.woff2 b/dist/fonts/KaTeX_Typewriter-Regular.woff2 new file mode 100644 index 000000000..771f1af70 Binary files /dev/null and b/dist/fonts/KaTeX_Typewriter-Regular.woff2 differ diff --git a/dist/mathfield-states/index.html b/dist/mathfield-states/index.html new file mode 100644 index 000000000..0c028d880 --- /dev/null +++ b/dist/mathfield-states/index.html @@ -0,0 +1,361 @@ + + + + + Mathfield States + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Mathfield States

+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ readonly + + + \sqrt{\frac{1}{x+\placeholder[id1]{}}}+\placeholder[id2]{x} + \sqrt{\frac{1}{x+1}}+x +
+ read-only + + + \sqrt{\frac{1}{x+\placeholder[id1]{}}}+\placeholder[id2]{x} + \sqrt{\frac{1}{x+1}}+x +
+ disabled + + + \sqrt{\frac{1}{x+1}}+\placeholder[id2]{} +
+ contenteditable=false + + + \sqrt{\frac{1}{x+\placeholder[id1]{}}}+\placeholder[id2]{x} +
+ contenteditable=false
&
user-select: none + +
+ \sqrt{\frac{1}{x+\placeholder[id1]{}}}+\placeholder[id2]{x} + + +
+
+ +

Inline

+

+ The solution is x=\frac{3}{4} or + . +

+
+ + + + diff --git a/dist/mathlive-fonts.css b/dist/mathlive-fonts.css new file mode 100644 index 000000000..96f3542b7 --- /dev/null +++ b/dist/mathlive-fonts.css @@ -0,0 +1,143 @@ +@font-face { + font-family: 'KaTeX_AMS'; + src: url('./fonts/KaTeX_AMS-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('./fonts/KaTeX_Caligraphic-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('./fonts/KaTeX_Caligraphic-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('./fonts/KaTeX_Fraktur-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('./fonts/KaTeX_Fraktur-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url('./fonts/KaTeX_Math-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url('./fonts/KaTeX_Math-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Script'; + src: url('./fonts/KaTeX_Script-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size1'; + src: url('./fonts/KaTeX_Size1-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size2'; + src: url('./fonts/KaTeX_Size2-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size3'; + src: url('./fonts/KaTeX_Size3-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size4'; + src: url('./fonts/KaTeX_Size4-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Typewriter'; + src: url('./fonts/KaTeX_Typewriter-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +:root { + --ML__static-fonts: true; +} diff --git a/dist/mathlive-ssr.min.mjs b/dist/mathlive-ssr.min.mjs new file mode 100644 index 000000000..65ae99b8a --- /dev/null +++ b/dist/mathlive-ssr.min.mjs @@ -0,0 +1,198 @@ +/** MathLive 0.110.0 */ +var _l=Object.defineProperty,Cl=Object.defineProperties;var Ll=Object.getOwnPropertyDescriptors;var $o=Object.getOwnPropertySymbols;var Tl=Object.prototype.hasOwnProperty,Bl=Object.prototype.propertyIsEnumerable;var Eo=(t,e,r)=>e in t?_l(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r,m=(t,e)=>{for(var r in e||(e={}))Tl.call(e,r)&&Eo(t,r,e[r]);if($o)for(var r of $o(e))Bl.call(e,r)&&Eo(t,r,e[r]);return t},u=(t,e)=>Cl(t,Ll(e));var Ro={fractionNavigationOrder:"numerator-denominator"};function te(t){return t==="text"||t==="free-text"}var _e=[0,.68889,0,0,.72222],zt=[0,.68889,0,0,.66667],Sn=[0,.68889,0,0,.77778],ti=[0,.68889,0,0,.61111],Fo=[.16667,.68889,0,0,.77778],Mr=[0,.68889,0,0,.55556],N=[0,0,0,0,.25],Po=[0,.825,0,0,2.33334],Oo=[0,.9,0,0,2.33334],ri=[0,.68889,0,0,.54028],wn=[-.03598,.46402,0,0,.5],he=[-.13313,.36687,0,0,1],ii=[.01354,.52239,0,0,1],qo=[.01354,.52239,0,0,1.11111],Io=[0,.54986,0,0,1],ni=[0,.69224,0,0,.5],Mn=[0,.43056,0,0,1],ht=[.08198,.58198,0,0,.77778],oi=[.19444,.69224,0,0,.41667],ai=[.1808,.675,0,0,1],No=[.19444,.69224,0,0,.83334],Vo=[.13667,.63667,0,0,1],Jo=[-.064,.437,0,0,1.334],dt=[.08167,.58167,0,0,.77778],Ar=[0,.69224,0,0,.72222],An=[0,.69224,0,0,.66667],si=[-.13313,.36687,0,0,.77778],Ho=[.06062,.54986,0,0,.77778],li=[0,.69224,0,0,.77778],Xt=[.25583,.75583,0,0,.77778],Ge=[.25142,.75726,0,0,.77778],Kt=[.20576,.70576,0,0,.77778],$e=[.30274,.79383,0,0,.77778],kr=[.22958,.72958,0,0,.77778],Go=[.1808,.675,0,0,.77778],We=[.13667,.63667,0,0,.77778],xe=[.13597,.63597,0,0,.77778],pt=[.03517,.54986,0,0,.77778],Yt=[0,.675,0,0,.77778],Wo=[.19444,.69224,0,0,.61111],Uo=[0,.54986,0,0,.76042],Zo=[0,.54986,0,0,.66667],ft=[.0391,.5391,0,0,.77778],jo=[.03517,.54986,0,0,1.33334],Xo=[.38569,.88569,0,0,.77778],ci=[.23222,.74111,0,0,.77778],Ko=[.19444,.69224,0,0,.77778],Yo=[0,.37788,0,0,.5],mi=[0,.54986,0,0,.72222],Qo=[0,.69224,0,0,.83334],ea=[.11111,.69224,0,0,.66667],Qt=[.26167,.75726,0,0,.77778],ta=[.48256,.98256,0,0,.77778],ra=[.28481,.79383,0,0,.77778],ia=[.08167,.58167,0,0,.22222],na=[.08167,.58167,0,0,.38889],oa=[0,.43056,.04028,0,.66667],aa=[.41951,.91951,0,0,.77778],sa=[.24982,.74947,0,0,.38865],la=[.08319,.58283,0,0,.75623],ca=[0,.10803,0,0,.27764],kn=[0,.47534,0,0,.50181],_r=[.18906,.47534,0,0,.50181],ma=[0,.69141,0,0,.50181],ua=[.24982,.74947,0,0,.27764],_n=[0,.69141,0,0,.21471],ui=[.25,.75,0,0,.44722],Ce=[0,.64444,0,0,.575],er=[.08556,.58556,0,0,.89444],hi=[0,.69444,0,0,.89444],di=[0,.68611,0,0,.9],Cn=[0,.68611,0,0,.86944],gt=[.25,.75,0,0,.575],pi=[.25,.75,0,0,.31944],$t=[0,.69444,0,0,.63889],tr=[0,.69444,0,0,.31944],ha=[0,.44444,0,0,.63889],da=[0,.44444,0,0,.51111],yt=[0,.69444,0,0,.575],Ee=[.13333,.63333,0,0,.89444],pa=[0,.44444,0,0,.31944],fa=[0,.69444,0,0,.86944],ga=[0,.68611,0,0,.69166],fi=[0,.68611,0,0,.83055],Ln=[0,.68611,0,0,.89444],Tn=[0,.69444,0,0,.60278],ya=[.19444,.69444,0,0,.51111],ba=[0,.69444,0,0,.83055],Ue=[-.10889,.39111,0,0,1.14999],xa=[.19444,.69444,0,0,.575],Cr=[.19444,.69444,0,0,1.14999],va=[.19444,.69444,0,0,.70277],Sa=[.05556,.75,0,0,.575],Bn=[0,.68611,0,0,.95833],wa=[.08556,.58556,0,0,.76666],Dn=[-.02639,.47361,0,0,.575],Ma=[0,.44444,0,0,.89444],Et=[0,.55556,0,0,.76666],Aa=[-.10889,.39111,0,0,.89444],zn=[.00222,.50222,0,0,.89444],bt=[.19667,.69667,0,0,.89444],ka=[.08556,.58556,0,0,1.14999],$n=[0,.69444,0,0,.70277],gi=[-.02778,.47222,0,0,.575],yi=[.25,.75,0,0,.51111],_a=[-.13889,.36111,0,0,1.14999],Ca=[.19444,.69444,0,0,1.02222],bi=[.12963,.69444,0,0,.89444],La=[.19444,.69444,0,0,.44722],xt=[0,.64444,.13167,0,.59111],Ta=[.19444,.64444,.13167,0,.59111],En=[0,.68611,.17208,0,.8961],Ba=[.19444,.44444,.105,0,.53222],Da=[0,.44444,.085,0,.82666],za=[0,.69444,.06709,0,.59111],xi=[0,.69444,.12945,0,.35555],$a=[0,.69444,0,0,.94888],Rn=[0,.69444,.11472,0,.59111],Ea=[0,.68611,.10778,0,.88555],Ra=[0,.69444,.07939,0,.62055],vi=[0,.69444,.12417,0,.30667],vt=[0,.64444,.13556,0,.51111],Fa=[.19444,.64444,.13556,0,.51111],Si=[0,.68333,.16389,0,.74333],Pa=[.19444,.43056,.08847,0,.46],Oa=[0,.43056,.07514,0,.71555],qa=[0,.69444,.06646,0,.51111],Ia=[0,.69444,0,0,.83129],Na=[0,.69444,.1225,0,.51111],Va=[0,.68333,.09403,0,.76666],Ja=[0,.68333,.11111,0,.76666],Ha=[0,.69444,.06961,0,.51444],it=[0,.69444,0,0,.27778],rr=[.25,.75,0,0,.38889],Le=[0,.64444,0,0,.5],Rt=[0,.69444,0,0,.77778],Ft=[0,.68333,0,0,.75],Lr=[0,.68333,0,0,.77778],Ga=[0,.68333,0,0,.68056],Tr=[0,.68333,0,0,.72222],nt=[.25,.75,0,0,.5],wi=[.25,.75,0,0,.27778],ie=[0,.69444,0,0,.5],ir=[0,.69444,0,0,.55556],Fn=[0,.43056,0,0,.44445],Br=[0,.43056,0,0,.5],Wa=[.19444,.43056,0,0,.55556],Ua=[0,.43056,0,0,.55556],Te=[.08333,.58333,0,0,.77778],Za=[0,.43056,0,0,.27778],ja=[0,.66786,0,0,.27778],Xa=[0,.69444,0,0,.75],Ka=[0,.66786,0,0,.5],Ya=[0,.68333,0,0,.625],Pn=[.19444,.69444,0,0,.44445],Dr=[0,.69444,0,0,.72222],Qa=[.19444,.69444,0,0,.5],zr=[.19444,.69444,0,0,1],es=[.011,.511,0,0,1.126],On=[.19444,.69444,0,0,.61111],qn=[.05556,.75,0,0,.5],ts=[0,.68333,0,0,.83334],rs=[.0391,.5391,0,0,.66667],In=[-.05555,.44445,0,0,.5],is=[0,.43056,0,0,.77778],Pt=[0,.55556,0,0,.66667],Mi=[-.03625,.46375,0,0,.77778],ns=[-.01688,.48312,0,0,.77778],os=[.0391,.5391,0,0,1],St=[0,.69444,0,0,.61111],Ai=[-.03472,.46528,0,0,.5],ki=[.25,.75,0,0,.44445],as=[-.14236,.35764,0,0,1],_i=[.244,.744,0,0,.412],ss=[.19444,.69444,0,0,.88889],Ci=[.12963,.69444,0,0,.77778],ls=[.19444,.69444,0,0,.38889],cs=[.011,.511,0,0,1.638],ms=[.19444,.69444,0,0,0],Li=[0,.44444,0,0,.575],$r=[.19444,.44444,0,0,.575],us=[0,.68611,0,0,.75555],hs=[0,.69444,0,0,.66759],ds=[0,.68611,0,0,.80555],ps=[0,.68611,.08229,0,.98229],fs=[0,.68611,0,0,.76666],gs=[0,.44444,0,0,.58472],ys=[.19444,.44444,0,0,.6118],Er=[.19444,.43056,0,0,.5],bs=[0,.68333,.02778,.08334,.76278],xs=[0,.68333,.08125,.05556,.83125],vs=[0,.43056,0,.05556,.48472],Ss=[.19444,.43056,0,.08334,.51702],ws=[.25,.75,0,0,.42778],ce=[0,.69444,0,0,.55],ot=[0,.69444,0,0,.73334],wt=[0,.69444,0,0,.79445],Ms=[0,.69444,0,0,.51945],Nn=[0,.69444,0,0,.70278],As=[0,.69444,0,0,.76389],ks=[.25,.75,0,0,.34306],Vn=[0,.69444,0,0,.56111],_s=[0,.69444,0,0,.25556],Cs=[.19444,.45833,0,0,.56111],Ls=[0,.45833,0,0,.56111],Ti=[0,.69444,0,0,.30556],Ts=[0,.69444,0,0,.58056],Bs=[0,.69444,0,0,.67223],Jn=[0,.69444,0,0,.85556],Hn=[0,.69444,0,0,.55834],Ze=[0,.65556,.11156,0,.5],Gn=[0,.69444,.08094,0,.70834],Wn=[.17014,0,0,0,.44445],Ds=[0,.69444,.0799,0,.5],zs=[0,.69444,0,0,.73752],$s=[0,.69444,.09205,0,.5],Es=[0,.69444,.09031,0,.77778],Un=[0,.69444,.07816,0,.27778],Rs=[0,.69444,.00316,0,.5],Fs=[.19444,.69444,0,0,.83334],Ps=[.05556,.75,0,0,.83334],Os=[0,.75,0,0,.5],qs=[.125,.08333,0,0,.27778],Is=[0,.08333,0,0,.27778],je=[0,.65556,0,0,.5],Zn=[0,.69444,0,0,.47222],at=[0,.69444,0,0,.66667],Ns=[0,.69444,0,0,.59722],jn=[0,.69444,0,0,.54167],Xn=[0,.69444,0,0,.70834],Vs=[.25,.75,0,0,.28889],Kn=[0,.69444,0,0,.51667],Js=[0,.44444,0,0,.44445],Hs=[.19444,.44444,0,0,.51667],Gs=[0,.44444,0,0,.38333],Ws=[0,.44444,0,0,.51667],Us=[0,.69444,0,0,.83334],Zs=[.35001,.85,0,0,.45834],js=[.35001,.85,0,0,.57778],Xs=[.35001,.85,0,0,.41667],Ks=[.35001,.85,0,0,.58334],Bi=[0,.72222,0,0,.55556],Ys=[1e-5,.6,0,0,.66667],Qs=[1e-5,.6,0,0,.77778],e0=[.25001,.75,0,0,.94445],t0=[.306,.805,.19445,0,.47222],r0=[.30612,.805,.19445,0,.47222],nr=[.25001,.75,0,0,.83334],or=[.35001,.85,0,0,.47222],Yn=[.25001,.75,0,0,1.11111],i0=[.65002,1.15,0,0,.59722],n0=[.65002,1.15,0,0,.81111],o0=[.65002,1.15,0,0,.47222],a0=[.65002,1.15,0,0,.66667],Di=[0,.75,0,0,1],s0=[.55001,1.05,0,0,1.27778],l0=[.862,1.36,.44445,0,.55556],c0=[.86225,1.36,.44445,0,.55556],ar=[.55001,1.05,0,0,1.11111],zi=[.65002,1.15,0,0,.52778],m0=[.65002,1.15,0,0,.61111],Qn=[.55001,1.05,0,0,1.51112],u0=[.95003,1.45,0,0,.73611],h0=[.95003,1.45,0,0,1.04445],d0=[.95003,1.45,0,0,.52778],$i=[.95003,1.45,0,0,.75],Ei=[0,.75,0,0,1.44445],Ri=[.95003,1.45,0,0,.58334],p0=[1.25003,1.75,0,0,.79167],f0=[1.25003,1.75,0,0,1.27778],g0=[1.25003,1.75,0,0,.58334],Fi=[1.25003,1.75,0,0,.80556],Pi=[0,.825,0,0,1.8889],Oi=[1.25003,1.75,0,0,.63889],qi=[.64502,1.155,0,0,.875],y0=[1e-5,.6,0,0,.875],eo=[-99e-5,.601,0,0,.66667],Ii=[.64502,1.155,0,0,.66667],b0=[1e-5,.9,0,0,.88889],x0=[.65002,1.15,0,0,.88889],v0=[.90001,0,0,0,.88889],S0=[-.00499,.605,0,0,1.05556],Ni=[0,.12,0,0,.45],C=[0,.61111,0,0,.525],Re=[.08333,.69444,0,0,.525],w0=[-.08056,.53055,0,0,.525],M0=[-.05556,.55556,0,0,.525],pe=[0,.43056,0,0,.525],Rr=[.22222,.43056,0,0,.525],A0=[0,0,0,0,.525],k0={"AMS-Regular":{32:N,65:_e,66:zt,67:_e,68:_e,69:zt,70:ti,71:Sn,72:Sn,73:[0,.68889,0,0,.38889],74:[.16667,.68889,0,0,.5],75:Sn,76:zt,77:[0,.68889,0,0,.94445],78:_e,79:Fo,80:ti,81:Fo,82:_e,83:Mr,84:zt,85:_e,86:_e,87:[0,.68889,0,0,1],88:_e,89:_e,90:zt,107:Mr,160:N,165:[0,.675,.025,0,.75],174:[.15559,.69224,0,0,.94666],240:Mr,295:ri,710:Po,732:Oo,770:Po,771:Oo,989:dt,1008:oa,8245:[0,.54986,0,0,.275],8463:ri,8487:_e,8498:Mr,8502:zt,8503:[0,.68889,0,0,.44445],8504:zt,8513:[0,.68889,0,0,.63889],8592:wn,8594:wn,8602:he,8603:he,8606:ii,8608:ii,8610:qo,8611:qo,8619:Io,8620:Io,8621:[-.13313,.37788,0,0,1.38889],8622:he,8624:ni,8625:ni,8630:Mn,8631:Mn,8634:ht,8635:ht,8638:oi,8639:oi,8642:oi,8643:oi,8644:ai,8646:ai,8647:ai,8648:No,8649:ai,8650:No,8651:ii,8652:ii,8653:he,8654:he,8655:he,8666:Vo,8667:Vo,8669:[-.13313,.37788,0,0,1],8672:Jo,8674:Jo,8705:[0,.825,0,0,.5],8708:Mr,8709:dt,8717:[0,.43056,0,0,.42917],8722:wn,8724:[.08198,.69224,0,0,.77778],8726:dt,8733:li,8736:Ar,8737:Ar,8738:[.03517,.52239,0,0,.72222],8739:ia,8740:[.25142,.74111,0,0,.27778],8741:na,8742:[.25142,.74111,0,0,.5],8756:An,8757:An,8764:si,8765:[-.13313,.37788,0,0,.77778],8769:si,8770:Mi,8774:$e,8776:ns,8778:dt,8782:Ho,8783:Ho,8785:ht,8786:ht,8787:ht,8790:li,8791:kr,8796:[.08198,.91667,0,0,.77778],8806:Xt,8807:Xt,8808:Ge,8809:Ge,8812:[.25583,.75583,0,0,.5],8814:Kt,8815:Kt,8816:$e,8817:$e,8818:kr,8819:kr,8822:Go,8823:Go,8828:We,8829:We,8830:kr,8831:kr,8832:Kt,8833:Kt,8840:$e,8841:$e,8842:xe,8843:xe,8847:pt,8848:pt,8858:ht,8859:ht,8861:ht,8862:Yt,8863:Yt,8864:Yt,8865:Yt,8872:[0,.69224,0,0,.61111],8873:Ar,8874:[0,.69224,0,0,.88889],8876:ti,8877:ti,8878:_e,8879:_e,8882:pt,8883:pt,8884:We,8885:We,8888:[0,.54986,0,0,1.11111],8890:Wa,8891:Wo,8892:Wo,8901:[0,.54986,0,0,.27778],8903:dt,8905:dt,8906:dt,8907:li,8908:li,8909:[-.03598,.46402,0,0,.77778],8910:Uo,8911:Uo,8912:pt,8913:pt,8914:Zo,8915:Zo,8916:An,8918:ft,8919:ft,8920:jo,8921:jo,8922:Xo,8923:Xo,8926:We,8927:We,8928:$e,8929:$e,8934:ci,8935:ci,8936:ci,8937:ci,8938:Kt,8939:Kt,8940:$e,8941:$e,8994:Ko,8995:Ko,9416:[.15559,.69224,0,0,.90222],9484:ni,9488:ni,9492:Yo,9496:Yo,9585:[.19444,.68889,0,0,.88889],9586:[.19444,.74111,0,0,.88889],9632:Yt,9633:Yt,9650:mi,9651:mi,9654:pt,9660:mi,9661:mi,9664:pt,9674:ea,9733:[.19444,.69224,0,0,.94445],10003:Qo,10016:Qo,10731:ea,10846:[.19444,.75583,0,0,.61111],10877:We,10878:We,10885:Xt,10886:Xt,10887:xe,10888:xe,10889:Qt,10890:Qt,10891:ta,10892:ta,10901:We,10902:We,10933:Ge,10934:Ge,10935:Qt,10936:Qt,10937:Qt,10938:Qt,10949:Xt,10950:Xt,10955:ra,10956:ra,57350:ia,57351:na,57352:dt,57353:oa,57356:Ge,57357:Ge,57358:aa,57359:$e,57360:$e,57361:aa,57366:Ge,57367:Ge,57368:Ge,57369:Ge,57370:xe,57371:xe},"Caligraphic-Regular":{32:N,65:[0,.68333,0,.19445,.79847],66:[0,.68333,.03041,.13889,.65681],67:[0,.68333,.05834,.13889,.52653],68:[0,.68333,.02778,.08334,.77139],69:[0,.68333,.08944,.11111,.52778],70:[0,.68333,.09931,.11111,.71875],71:[.09722,.68333,.0593,.11111,.59487],72:[0,.68333,.00965,.11111,.84452],73:[0,.68333,.07382,0,.54452],74:[.09722,.68333,.18472,.16667,.67778],75:[0,.68333,.01445,.05556,.76195],76:[0,.68333,0,.13889,.68972],77:[0,.68333,0,.13889,1.2009],78:[0,.68333,.14736,.08334,.82049],79:[0,.68333,.02778,.11111,.79611],80:[0,.68333,.08222,.08334,.69556],81:[.09722,.68333,0,.11111,.81667],82:[0,.68333,0,.08334,.8475],83:[0,.68333,.075,.13889,.60556],84:[0,.68333,.25417,0,.54464],85:[0,.68333,.09931,.08334,.62583],86:[0,.68333,.08222,0,.61278],87:[0,.68333,.08222,.08334,.98778],88:[0,.68333,.14643,.13889,.7133],89:[.09722,.68333,.08222,.08334,.66834],90:[0,.68333,.07944,.13889,.72473],160:N},"Fraktur-Regular":{32:N,33:[0,.69141,0,0,.29574],34:_n,38:[0,.69141,0,0,.73786],39:[0,.69141,0,0,.21201],40:sa,41:sa,42:[0,.62119,0,0,.27764],43:la,44:ca,45:la,46:ca,47:[.24982,.74947,0,0,.50181],48:kn,49:kn,50:kn,51:_r,52:_r,53:_r,54:ma,55:_r,56:ma,57:_r,58:[0,.47534,0,0,.21606],59:[.12604,.47534,0,0,.21606],61:[-.13099,.36866,0,0,.75623],63:[0,.69141,0,0,.36245],65:[0,.69141,0,0,.7176],66:[0,.69141,0,0,.88397],67:[0,.69141,0,0,.61254],68:[0,.69141,0,0,.83158],69:[0,.69141,0,0,.66278],70:[.12604,.69141,0,0,.61119],71:[0,.69141,0,0,.78539],72:[.06302,.69141,0,0,.7203],73:[0,.69141,0,0,.55448],74:[.12604,.69141,0,0,.55231],75:[0,.69141,0,0,.66845],76:[0,.69141,0,0,.66602],77:[0,.69141,0,0,1.04953],78:[0,.69141,0,0,.83212],79:[0,.69141,0,0,.82699],80:[.18906,.69141,0,0,.82753],81:[.03781,.69141,0,0,.82699],82:[0,.69141,0,0,.82807],83:[0,.69141,0,0,.82861],84:[0,.69141,0,0,.66899],85:[0,.69141,0,0,.64576],86:[0,.69141,0,0,.83131],87:[0,.69141,0,0,1.04602],88:[0,.69141,0,0,.71922],89:[.18906,.69141,0,0,.83293],90:[.12604,.69141,0,0,.60201],91:ua,93:ua,94:[0,.69141,0,0,.49965],97:[0,.47534,0,0,.50046],98:[0,.69141,0,0,.51315],99:[0,.47534,0,0,.38946],100:[0,.62119,0,0,.49857],101:[0,.47534,0,0,.40053],102:[.18906,.69141,0,0,.32626],103:[.18906,.47534,0,0,.5037],104:[.18906,.69141,0,0,.52126],105:[0,.69141,0,0,.27899],106:[0,.69141,0,0,.28088],107:[0,.69141,0,0,.38946],108:[0,.69141,0,0,.27953],109:[0,.47534,0,0,.76676],110:[0,.47534,0,0,.52666],111:[0,.47534,0,0,.48885],112:[.18906,.52396,0,0,.50046],113:[.18906,.47534,0,0,.48912],114:[0,.47534,0,0,.38919],115:[0,.47534,0,0,.44266],116:[0,.62119,0,0,.33301],117:[0,.47534,0,0,.5172],118:[0,.52396,0,0,.5118],119:[0,.52396,0,0,.77351],120:[.18906,.47534,0,0,.38865],121:[.18906,.47534,0,0,.49884],122:[.18906,.47534,0,0,.39054],160:N,8216:_n,8217:_n,58112:[0,.62119,0,0,.49749],58113:[0,.62119,0,0,.4983],58114:[.18906,.69141,0,0,.33328],58115:[.18906,.69141,0,0,.32923],58116:[.18906,.47534,0,0,.50343],58117:[0,.69141,0,0,.33301],58118:[0,.62119,0,0,.33409],58119:[0,.47534,0,0,.50073]},"Main-Bold":{32:N,33:[0,.69444,0,0,.35],34:Tn,35:[.19444,.69444,0,0,.95833],36:Sa,37:[.05556,.75,0,0,.95833],38:hi,39:tr,40:ui,41:ui,42:[0,.75,0,0,.575],43:Ee,44:[.19444,.15556,0,0,.31944],45:Gs,46:[0,.15556,0,0,.31944],47:gt,48:Ce,49:Ce,50:Ce,51:Ce,52:Ce,53:Ce,54:Ce,55:Ce,56:Ce,57:Ce,58:pa,59:[.19444,.44444,0,0,.31944],60:er,61:Aa,62:er,63:[0,.69444,0,0,.54305],64:hi,65:Cn,66:[0,.68611,0,0,.81805],67:fi,68:[0,.68611,0,0,.88194],69:us,70:[0,.68611,0,0,.72361],71:[0,.68611,0,0,.90416],72:di,73:[0,.68611,0,0,.43611],74:[0,.68611,0,0,.59444],75:[0,.68611,0,0,.90138],76:ga,77:[0,.68611,0,0,1.09166],78:di,79:[0,.68611,0,0,.86388],80:[0,.68611,0,0,.78611],81:[.19444,.68611,0,0,.86388],82:[0,.68611,0,0,.8625],83:[0,.68611,0,0,.63889],84:[0,.68611,0,0,.8],85:[0,.68611,0,0,.88472],86:[0,.68611,.01597,0,.86944],87:[0,.68611,.01597,0,1.18888],88:Cn,89:[0,.68611,.02875,0,.86944],90:[0,.68611,0,0,.70277],91:pi,92:gt,93:pi,94:yt,95:[.31,.13444,.03194,0,.575],97:[0,.44444,0,0,.55902],98:$t,99:da,100:$t,101:[0,.44444,0,0,.52708],102:[0,.69444,.10903,0,.35139],103:[.19444,.44444,.01597,0,.575],104:$t,105:tr,106:[.19444,.69444,0,0,.35139],107:[0,.69444,0,0,.60694],108:tr,109:[0,.44444,0,0,.95833],110:ha,111:Li,112:[.19444,.44444,0,0,.63889],113:[.19444,.44444,0,0,.60694],114:[0,.44444,0,0,.47361],115:[0,.44444,0,0,.45361],116:[0,.63492,0,0,.44722],117:ha,118:[0,.44444,.01597,0,.60694],119:[0,.44444,.01597,0,.83055],120:[0,.44444,0,0,.60694],121:[.19444,.44444,.01597,0,.60694],122:da,123:gt,124:pi,125:gt,126:[.35,.34444,0,0,.575],160:N,163:[0,.69444,0,0,.86853],168:yt,172:[0,.44444,0,0,.76666],176:fa,177:Ee,184:[.17014,0,0,0,.51111],198:[0,.68611,0,0,1.04166],215:Ee,216:[.04861,.73472,0,0,.89444],223:Ns,230:[0,.44444,0,0,.83055],247:Ee,248:[.09722,.54167,0,0,.575],305:pa,338:[0,.68611,0,0,1.16944],339:Ma,567:[.19444,.44444,0,0,.35139],710:yt,711:[0,.63194,0,0,.575],713:[0,.59611,0,0,.575],714:yt,715:yt,728:yt,729:tr,730:fa,732:yt,733:yt,915:ga,916:Bn,920:Ln,923:ds,926:fs,928:di,931:fi,933:Ln,934:fi,936:Ln,937:fi,8211:[0,.44444,.03194,0,.575],8212:[0,.44444,.03194,0,1.14999],8216:tr,8217:tr,8220:Tn,8221:Tn,8224:ya,8225:ya,8242:[0,.55556,0,0,.34444],8407:[0,.72444,.15486,0,.575],8463:hs,8465:ba,8467:[0,.69444,0,0,.47361],8472:[.19444,.44444,0,0,.74027],8476:ba,8501:$n,8592:Ue,8593:xa,8594:Ue,8595:xa,8596:Ue,8597:gt,8598:Cr,8599:Cr,8600:Cr,8601:Cr,8636:Ue,8637:Ue,8640:Ue,8641:Ue,8656:Ue,8657:va,8658:Ue,8659:va,8660:Ue,8661:[.25,.75,0,0,.70277],8704:$t,8706:[0,.69444,.06389,0,.62847],8707:$t,8709:Sa,8711:Bn,8712:wa,8715:wa,8722:Ee,8723:Ee,8725:gt,8726:gt,8727:gi,8728:Dn,8729:Dn,8730:[.18,.82,0,0,.95833],8733:Ma,8734:[0,.44444,0,0,1.14999],8736:Ar,8739:pi,8741:gt,8743:Et,8744:Et,8745:Et,8746:Et,8747:[.19444,.69444,.12778,0,.56875],8764:Aa,8768:[.19444,.69444,0,0,.31944],8771:zn,8776:[.02444,.52444,0,0,.89444],8781:zn,8801:zn,8804:bt,8805:bt,8810:ka,8811:ka,8826:er,8827:er,8834:er,8835:er,8838:bt,8839:bt,8846:Et,8849:bt,8850:bt,8851:Et,8852:Et,8853:Ee,8854:Ee,8855:Ee,8856:Ee,8857:Ee,8866:$n,8867:$n,8868:hi,8869:hi,8900:Dn,8901:[-.02639,.47361,0,0,.31944],8902:gi,8968:yi,8969:yi,8970:yi,8971:yi,8994:_a,8995:_a,9651:Ca,9657:gi,9661:Ca,9667:gi,9711:Cr,9824:bi,9825:bi,9826:bi,9827:bi,9837:[0,.75,0,0,.44722],9838:La,9839:La,10216:ui,10217:ui,10815:di,10927:bt,10928:bt,57376:ms},"Main-BoldItalic":{32:N,33:[0,.69444,.11417,0,.38611],34:Ra,35:[.19444,.69444,.06833,0,.94444],37:[.05556,.75,.12861,0,.94444],38:[0,.69444,.08528,0,.88555],39:xi,40:[.25,.75,.15806,0,.47333],41:[.25,.75,.03306,0,.47333],42:[0,.75,.14333,0,.59111],43:[.10333,.60333,.03306,0,.88555],44:[.19444,.14722,0,0,.35555],45:[0,.44444,.02611,0,.41444],46:[0,.14722,0,0,.35555],47:[.25,.75,.15806,0,.59111],48:xt,49:xt,50:xt,51:xt,52:Ta,53:xt,54:xt,55:Ta,56:xt,57:xt,58:[0,.44444,.06695,0,.35555],59:[.19444,.44444,.06695,0,.35555],61:[-.10889,.39111,.06833,0,.88555],63:Rn,64:[0,.69444,.09208,0,.88555],65:[0,.68611,0,0,.86555],66:[0,.68611,.0992,0,.81666],67:[0,.68611,.14208,0,.82666],68:[0,.68611,.09062,0,.87555],69:[0,.68611,.11431,0,.75666],70:[0,.68611,.12903,0,.72722],71:[0,.68611,.07347,0,.89527],72:En,73:[0,.68611,.15681,0,.47166],74:[0,.68611,.145,0,.61055],75:[0,.68611,.14208,0,.89499],76:[0,.68611,0,0,.69777],77:[0,.68611,.17208,0,1.07277],78:En,79:[0,.68611,.09062,0,.85499],80:[0,.68611,.0992,0,.78721],81:[.19444,.68611,.09062,0,.85499],82:[0,.68611,.02559,0,.85944],83:[0,.68611,.11264,0,.64999],84:[0,.68611,.12903,0,.7961],85:[0,.68611,.17208,0,.88083],86:[0,.68611,.18625,0,.86555],87:[0,.68611,.18625,0,1.15999],88:[0,.68611,.15681,0,.86555],89:[0,.68611,.19803,0,.86555],90:[0,.68611,.14208,0,.70888],91:[.25,.75,.1875,0,.35611],93:[.25,.75,.09972,0,.35611],94:za,95:[.31,.13444,.09811,0,.59111],97:[0,.44444,.09426,0,.59111],98:[0,.69444,.07861,0,.53222],99:[0,.44444,.05222,0,.53222],100:[0,.69444,.10861,0,.59111],101:[0,.44444,.085,0,.53222],102:[.19444,.69444,.21778,0,.4],103:Ba,104:[0,.69444,.09426,0,.59111],105:[0,.69326,.11387,0,.35555],106:[.19444,.69326,.1672,0,.35555],107:[0,.69444,.11111,0,.53222],108:[0,.69444,.10861,0,.29666],109:[0,.44444,.09426,0,.94444],110:[0,.44444,.09426,0,.64999],111:[0,.44444,.07861,0,.59111],112:[.19444,.44444,.07861,0,.59111],113:Ba,114:[0,.44444,.11111,0,.50167],115:[0,.44444,.08167,0,.48694],116:[0,.63492,.09639,0,.385],117:[0,.44444,.09426,0,.62055],118:[0,.44444,.11111,0,.53222],119:[0,.44444,.11111,0,.76777],120:[0,.44444,.12583,0,.56055],121:[.19444,.44444,.105,0,.56166],122:[0,.44444,.13889,0,.49055],126:[.35,.34444,.11472,0,.59111],160:N,168:[0,.69444,.11473,0,.59111],176:$a,184:[.17014,0,0,0,.53222],198:[0,.68611,.11431,0,1.02277],216:[.04861,.73472,.09062,0,.88555],223:[.19444,.69444,.09736,0,.665],230:Da,248:[.09722,.54167,.09458,0,.59111],305:[0,.44444,.09426,0,.35555],338:[0,.68611,.11431,0,1.14054],339:Da,567:[.19444,.44444,.04611,0,.385],710:za,711:[0,.63194,.08271,0,.59111],713:[0,.59444,.10444,0,.59111],714:[0,.69444,.08528,0,.59111],715:[0,.69444,0,0,.59111],728:[0,.69444,.10333,0,.59111],729:xi,730:$a,732:Rn,733:Rn,915:[0,.68611,.12903,0,.69777],916:[0,.68611,0,0,.94444],920:[0,.68611,.09062,0,.88555],923:[0,.68611,0,0,.80666],926:[0,.68611,.15092,0,.76777],928:En,931:[0,.68611,.11431,0,.82666],933:Ea,934:[0,.68611,.05632,0,.82666],936:Ea,937:[0,.68611,.0992,0,.82666],8211:[0,.44444,.09811,0,.59111],8212:[0,.44444,.09811,0,1.18221],8216:xi,8217:xi,8220:[0,.69444,.16772,0,.62055],8221:Ra},"Main-Italic":{32:N,33:vi,34:Ha,35:[.19444,.69444,.06616,0,.81777],37:[.05556,.75,.13639,0,.81777],38:[0,.69444,.09694,0,.76666],39:vi,40:[.25,.75,.16194,0,.40889],41:[.25,.75,.03694,0,.40889],42:[0,.75,.14917,0,.51111],43:[.05667,.56167,.03694,0,.76666],44:[.19444,.10556,0,0,.30667],45:[0,.43056,.02826,0,.35778],46:[0,.10556,0,0,.30667],47:[.25,.75,.16194,0,.51111],48:vt,49:vt,50:vt,51:vt,52:Fa,53:vt,54:vt,55:Fa,56:vt,57:vt,58:[0,.43056,.0582,0,.30667],59:[.19444,.43056,.0582,0,.30667],61:[-.13313,.36687,.06616,0,.76666],63:Na,64:[0,.69444,.09597,0,.76666],65:[0,.68333,0,0,.74333],66:[0,.68333,.10257,0,.70389],67:[0,.68333,.14528,0,.71555],68:[0,.68333,.09403,0,.755],69:[0,.68333,.12028,0,.67833],70:[0,.68333,.13305,0,.65277],71:[0,.68333,.08722,0,.77361],72:Si,73:[0,.68333,.15806,0,.38555],74:[0,.68333,.14028,0,.525],75:[0,.68333,.14528,0,.76888],76:[0,.68333,0,0,.62722],77:[0,.68333,.16389,0,.89666],78:Si,79:Va,80:[0,.68333,.10257,0,.67833],81:[.19444,.68333,.09403,0,.76666],82:[0,.68333,.03868,0,.72944],83:[0,.68333,.11972,0,.56222],84:[0,.68333,.13305,0,.71555],85:Si,86:[0,.68333,.18361,0,.74333],87:[0,.68333,.18361,0,.99888],88:[0,.68333,.15806,0,.74333],89:[0,.68333,.19383,0,.74333],90:[0,.68333,.14528,0,.61333],91:[.25,.75,.1875,0,.30667],93:[.25,.75,.10528,0,.30667],94:qa,95:[.31,.12056,.09208,0,.51111],97:[0,.43056,.07671,0,.51111],98:[0,.69444,.06312,0,.46],99:[0,.43056,.05653,0,.46],100:[0,.69444,.10333,0,.51111],101:[0,.43056,.07514,0,.46],102:[.19444,.69444,.21194,0,.30667],103:Pa,104:[0,.69444,.07671,0,.51111],105:[0,.65536,.1019,0,.30667],106:[.19444,.65536,.14467,0,.30667],107:[0,.69444,.10764,0,.46],108:[0,.69444,.10333,0,.25555],109:[0,.43056,.07671,0,.81777],110:[0,.43056,.07671,0,.56222],111:[0,.43056,.06312,0,.51111],112:[.19444,.43056,.06312,0,.51111],113:Pa,114:[0,.43056,.10764,0,.42166],115:[0,.43056,.08208,0,.40889],116:[0,.61508,.09486,0,.33222],117:[0,.43056,.07671,0,.53666],118:[0,.43056,.10764,0,.46],119:[0,.43056,.10764,0,.66444],120:[0,.43056,.12042,0,.46389],121:[.19444,.43056,.08847,0,.48555],122:[0,.43056,.12292,0,.40889],126:[.35,.31786,.11585,0,.51111],160:N,168:[0,.66786,.10474,0,.51111],176:Ia,184:[.17014,0,0,0,.46],198:[0,.68333,.12028,0,.88277],216:[.04861,.73194,.09403,0,.76666],223:[.19444,.69444,.10514,0,.53666],230:Oa,248:[.09722,.52778,.09194,0,.51111],338:[0,.68333,.12028,0,.98499],339:Oa,710:qa,711:[0,.62847,.08295,0,.51111],713:[0,.56167,.10333,0,.51111],714:[0,.69444,.09694,0,.51111],715:[0,.69444,0,0,.51111],728:[0,.69444,.10806,0,.51111],729:[0,.66786,.11752,0,.30667],730:Ia,732:[0,.66786,.11585,0,.51111],733:Na,915:[0,.68333,.13305,0,.62722],916:[0,.68333,0,0,.81777],920:Va,923:[0,.68333,0,0,.69222],926:[0,.68333,.15294,0,.66444],928:Si,931:[0,.68333,.12028,0,.71555],933:Ja,934:[0,.68333,.05986,0,.71555],936:Ja,937:[0,.68333,.10257,0,.71555],8211:[0,.43056,.09208,0,.51111],8212:[0,.43056,.09208,0,1.02222],8216:vi,8217:vi,8220:[0,.69444,.1685,0,.51444],8221:Ha,8463:ri},"Main-Regular":{32:N,33:it,34:ie,35:Fs,36:qn,37:Ps,38:Rt,39:it,40:rr,41:rr,42:Os,43:Te,44:[.19444,.10556,0,0,.27778],45:[0,.43056,0,0,.33333],46:[0,.10556,0,0,.27778],47:nt,48:Le,49:Le,50:Le,51:Le,52:Le,53:Le,54:Le,55:Le,56:Le,57:Le,58:Za,59:[.19444,.43056,0,0,.27778],60:ft,61:si,62:ft,63:Zn,64:Rt,65:Ft,66:[0,.68333,0,0,.70834],67:Tr,68:[0,.68333,0,0,.76389],69:Ga,70:[0,.68333,0,0,.65278],71:[0,.68333,0,0,.78472],72:Ft,73:[0,.68333,0,0,.36111],74:[0,.68333,0,0,.51389],75:Lr,76:Ya,77:[0,.68333,0,0,.91667],78:Ft,79:Lr,80:Ga,81:[.19444,.68333,0,0,.77778],82:[0,.68333,0,0,.73611],83:[0,.68333,0,0,.55556],84:Tr,85:Ft,86:[0,.68333,.01389,0,.75],87:[0,.68333,.01389,0,1.02778],88:Ft,89:[0,.68333,.025,0,.75],90:[0,.68333,0,0,.61111],91:wi,92:nt,93:wi,94:ie,95:[.31,.12056,.02778,0,.5],97:Br,98:ir,99:Fn,100:ir,101:Fn,102:[0,.69444,.07778,0,.30556],103:[.19444,.43056,.01389,0,.5],104:ir,105:ja,106:[.19444,.66786,0,0,.30556],107:[0,.69444,0,0,.52778],108:it,109:[0,.43056,0,0,.83334],110:Ua,111:Br,112:Wa,113:[.19444,.43056,0,0,.52778],114:[0,.43056,0,0,.39167],115:[0,.43056,0,0,.39445],116:[0,.61508,0,0,.38889],117:Ua,118:[0,.43056,.01389,0,.52778],119:[0,.43056,.01389,0,.72222],120:[0,.43056,0,0,.52778],121:[.19444,.43056,.01389,0,.52778],122:Fn,123:nt,124:wi,125:nt,126:[.35,.31786,0,0,.5],160:N,163:[0,.69444,0,0,.76909],167:Pn,168:Ka,172:[0,.43056,0,0,.66667],176:Xa,177:Te,182:On,184:Wn,198:[0,.68333,0,0,.90278],215:Te,216:[.04861,.73194,0,0,.77778],223:ie,230:[0,.43056,0,0,.72222],247:Te,248:[.09722,.52778,0,0,.5],305:Za,338:[0,.68333,0,0,1.01389],339:is,567:[.19444,.43056,0,0,.30556],710:ie,711:[0,.62847,0,0,.5],713:[0,.56778,0,0,.5],714:ie,715:ie,728:ie,729:ja,730:Xa,732:Ka,733:ie,915:Ya,916:ts,920:Lr,923:[0,.68333,0,0,.69445],926:[0,.68333,0,0,.66667],928:Ft,931:Tr,933:Lr,934:Tr,936:Lr,937:Tr,8211:[0,.43056,.02778,0,.5],8212:[0,.43056,.02778,0,1],8216:it,8217:it,8220:ie,8221:ie,8224:Pn,8225:Pn,8230:[0,.12,0,0,1.172],8242:[0,.55556,0,0,.275],8407:[0,.71444,.15382,0,.5],8463:ri,8465:Dr,8467:[0,.69444,0,.11111,.41667],8472:[.19444,.43056,0,.11111,.63646],8476:Dr,8501:St,8592:he,8593:Qa,8594:he,8595:Qa,8596:he,8597:nt,8598:zr,8599:zr,8600:zr,8601:zr,8614:[.011,.511,0,0,1],8617:es,8618:es,8636:he,8637:he,8640:he,8641:he,8652:[.011,.671,0,0,1],8656:he,8657:On,8658:he,8659:On,8660:he,8661:[.25,.75,0,0,.61111],8704:ir,8706:[0,.69444,.05556,.08334,.5309],8707:ir,8709:qn,8711:ts,8712:rs,8715:rs,8722:Te,8723:Te,8725:nt,8726:nt,8727:Ai,8728:In,8729:In,8730:[.2,.8,0,0,.83334],8733:is,8734:Mn,8736:Ar,8739:wi,8741:nt,8743:Pt,8744:Pt,8745:Pt,8746:Pt,8747:[.19444,.69444,.11111,0,.41667],8764:si,8768:[.19444,.69444,0,0,.27778],8771:Mi,8773:[-.022,.589,0,0,1],8776:ns,8781:Mi,8784:[-.133,.67,0,0,.778],8801:Mi,8804:xe,8805:xe,8810:os,8811:os,8826:ft,8827:ft,8834:ft,8835:ft,8838:xe,8839:xe,8846:Pt,8849:xe,8850:xe,8851:Pt,8852:Pt,8853:Te,8854:Te,8855:Te,8856:Te,8857:Te,8866:St,8867:St,8868:Rt,8869:Rt,8872:[.249,.75,0,0,.867],8900:In,8901:[-.05555,.44445,0,0,.27778],8902:Ai,8904:[.005,.505,0,0,.9],8942:[.03,.9,0,0,.278],8943:[-.19,.31,0,0,1.172],8945:[-.1,.82,0,0,1.282],8968:ki,8969:ki,8970:ki,8971:ki,8994:as,8995:as,9136:_i,9137:_i,9651:ss,9657:Ai,9661:ss,9667:Ai,9711:zr,9824:Ci,9825:Ci,9826:Ci,9827:Ci,9837:[0,.75,0,0,.38889],9838:ls,9839:ls,10216:rr,10217:rr,10222:_i,10223:_i,10229:[.011,.511,0,0,1.609],10230:cs,10231:[.011,.511,0,0,1.859],10232:[.024,.525,0,0,1.609],10233:[.024,.525,0,0,1.638],10234:[.024,.525,0,0,1.858],10236:cs,10815:Ft,10927:xe,10928:xe,57376:ms},"Math-BoldItalic":{32:N,48:Li,49:Li,50:Li,51:$r,52:$r,53:$r,54:Ce,55:$r,56:Ce,57:$r,65:Cn,66:[0,.68611,.04835,0,.8664],67:[0,.68611,.06979,0,.81694],68:[0,.68611,.03194,0,.93812],69:[0,.68611,.05451,0,.81007],70:[0,.68611,.15972,0,.68889],71:[0,.68611,0,0,.88673],72:ps,73:[0,.68611,.07778,0,.51111],74:[0,.68611,.10069,0,.63125],75:[0,.68611,.06979,0,.97118],76:us,77:[0,.68611,.11424,0,1.14201],78:[0,.68611,.11424,0,.95034],79:[0,.68611,.03194,0,.83666],80:[0,.68611,.15972,0,.72309],81:[.19444,.68611,0,0,.86861],82:[0,.68611,.00421,0,.87235],83:[0,.68611,.05382,0,.69271],84:[0,.68611,.15972,0,.63663],85:[0,.68611,.11424,0,.80027],86:[0,.68611,.25555,0,.67778],87:[0,.68611,.15972,0,1.09305],88:[0,.68611,.07778,0,.94722],89:[0,.68611,.25555,0,.67458],90:[0,.68611,.06979,0,.77257],97:[0,.44444,0,0,.63287],98:[0,.69444,0,0,.52083],99:[0,.44444,0,0,.51342],100:[0,.69444,0,0,.60972],101:[0,.44444,0,0,.55361],102:[.19444,.69444,.11042,0,.56806],103:[.19444,.44444,.03704,0,.5449],104:hs,105:[0,.69326,0,0,.4048],106:[.19444,.69326,.0622,0,.47083],107:[0,.69444,.01852,0,.6037],108:[0,.69444,.0088,0,.34815],109:[0,.44444,0,0,1.0324],110:[0,.44444,0,0,.71296],111:gs,112:[.19444,.44444,0,0,.60092],113:[.19444,.44444,.03704,0,.54213],114:[0,.44444,.03194,0,.5287],115:[0,.44444,0,0,.53125],116:[0,.63492,0,0,.41528],117:[0,.44444,0,0,.68102],118:[0,.44444,.03704,0,.56666],119:[0,.44444,.02778,0,.83148],120:[0,.44444,0,0,.65903],121:[.19444,.44444,.03704,0,.59028],122:[0,.44444,.04213,0,.55509],160:N,915:[0,.68611,.15972,0,.65694],916:Bn,920:[0,.68611,.03194,0,.86722],923:ds,926:[0,.68611,.07458,0,.84125],928:ps,931:[0,.68611,.05451,0,.88507],933:[0,.68611,.15972,0,.67083],934:fs,936:[0,.68611,.11653,0,.71402],937:[0,.68611,.04835,0,.8789],945:[0,.44444,0,0,.76064],946:[.19444,.69444,.03403,0,.65972],947:[.19444,.44444,.06389,0,.59003],948:[0,.69444,.03819,0,.52222],949:[0,.44444,0,0,.52882],950:[.19444,.69444,.06215,0,.50833],951:[.19444,.44444,.03704,0,.6],952:[0,.69444,.03194,0,.5618],953:[0,.44444,0,0,.41204],954:[0,.44444,0,0,.66759],955:[0,.69444,0,0,.67083],956:[.19444,.44444,0,0,.70787],957:[0,.44444,.06898,0,.57685],958:[.19444,.69444,.03021,0,.50833],959:gs,960:[0,.44444,.03704,0,.68241],961:ys,962:[.09722,.44444,.07917,0,.42361],963:[0,.44444,.03704,0,.68588],964:[0,.44444,.13472,0,.52083],965:[0,.44444,.03704,0,.63055],966:[.19444,.44444,0,0,.74722],967:[.19444,.44444,0,0,.71805],968:[.19444,.69444,.03704,0,.75833],969:[0,.44444,.03704,0,.71782],977:[0,.69444,0,0,.69155],981:[.19444,.69444,0,0,.7125],982:[0,.44444,.03194,0,.975],1009:ys,1013:[0,.44444,0,0,.48333],57649:[0,.44444,0,0,.39352],57911:[.19444,.44444,0,0,.43889]},"Math-Italic":{32:N,48:Br,49:Br,50:Br,51:Er,52:Er,53:Er,54:Le,55:Er,56:Le,57:Er,65:[0,.68333,0,.13889,.75],66:[0,.68333,.05017,.08334,.75851],67:[0,.68333,.07153,.08334,.71472],68:[0,.68333,.02778,.05556,.82792],69:[0,.68333,.05764,.08334,.7382],70:[0,.68333,.13889,.08334,.64306],71:[0,.68333,0,.08334,.78625],72:xs,73:[0,.68333,.07847,.11111,.43958],74:[0,.68333,.09618,.16667,.55451],75:[0,.68333,.07153,.05556,.84931],76:[0,.68333,0,.02778,.68056],77:[0,.68333,.10903,.08334,.97014],78:[0,.68333,.10903,.08334,.80347],79:bs,80:[0,.68333,.13889,.08334,.64201],81:[.19444,.68333,0,.08334,.79056],82:[0,.68333,.00773,.08334,.75929],83:[0,.68333,.05764,.08334,.6132],84:[0,.68333,.13889,.08334,.58438],85:[0,.68333,.10903,.02778,.68278],86:[0,.68333,.22222,0,.58333],87:[0,.68333,.13889,0,.94445],88:[0,.68333,.07847,.08334,.82847],89:[0,.68333,.22222,0,.58056],90:[0,.68333,.07153,.08334,.68264],97:[0,.43056,0,0,.52859],98:[0,.69444,0,0,.42917],99:[0,.43056,0,.05556,.43276],100:[0,.69444,0,.16667,.52049],101:[0,.43056,0,.05556,.46563],102:[.19444,.69444,.10764,.16667,.48959],103:[.19444,.43056,.03588,.02778,.47697],104:[0,.69444,0,0,.57616],105:[0,.65952,0,0,.34451],106:[.19444,.65952,.05724,0,.41181],107:[0,.69444,.03148,0,.5206],108:[0,.69444,.01968,.08334,.29838],109:[0,.43056,0,0,.87801],110:[0,.43056,0,0,.60023],111:vs,112:[.19444,.43056,0,.08334,.50313],113:[.19444,.43056,.03588,.08334,.44641],114:[0,.43056,.02778,.05556,.45116],115:[0,.43056,0,.05556,.46875],116:[0,.61508,0,.08334,.36111],117:[0,.43056,0,.02778,.57246],118:[0,.43056,.03588,.02778,.48472],119:[0,.43056,.02691,.08334,.71592],120:[0,.43056,0,.02778,.57153],121:[.19444,.43056,.03588,.05556,.49028],122:[0,.43056,.04398,.05556,.46505],160:N,915:[0,.68333,.13889,.08334,.61528],916:[0,.68333,0,.16667,.83334],920:bs,923:[0,.68333,0,.16667,.69445],926:[0,.68333,.07569,.08334,.74236],928:xs,931:[0,.68333,.05764,.08334,.77986],933:[0,.68333,.13889,.05556,.58333],934:[0,.68333,0,.08334,.66667],936:[0,.68333,.11,.05556,.61222],937:[0,.68333,.05017,.08334,.7724],945:[0,.43056,.0037,.02778,.6397],946:[.19444,.69444,.05278,.08334,.56563],947:[.19444,.43056,.05556,0,.51773],948:[0,.69444,.03785,.05556,.44444],949:[0,.43056,0,.08334,.46632],950:[.19444,.69444,.07378,.08334,.4375],951:[.19444,.43056,.03588,.05556,.49653],952:[0,.69444,.02778,.08334,.46944],953:[0,.43056,0,.05556,.35394],954:[0,.43056,0,0,.57616],955:[0,.69444,0,0,.58334],956:[.19444,.43056,0,.02778,.60255],957:[0,.43056,.06366,.02778,.49398],958:[.19444,.69444,.04601,.11111,.4375],959:vs,960:[0,.43056,.03588,0,.57003],961:Ss,962:[.09722,.43056,.07986,.08334,.36285],963:[0,.43056,.03588,0,.57141],964:[0,.43056,.1132,.02778,.43715],965:[0,.43056,.03588,.02778,.54028],966:[.19444,.43056,0,.08334,.65417],967:[.19444,.43056,0,.05556,.62569],968:[.19444,.69444,.03588,.11111,.65139],969:[0,.43056,.03588,0,.62245],977:[0,.69444,0,.08334,.59144],981:[.19444,.69444,0,.08334,.59583],982:[0,.43056,.02778,0,.82813],1009:Ss,1013:[0,.43056,0,.05556,.4059],57649:[0,.43056,0,.02778,.32246],57911:[.19444,.43056,0,.08334,.38403]},"SansSerif-Bold":{32:N,33:[0,.69444,0,0,.36667],34:Hn,35:[.19444,.69444,0,0,.91667],36:[.05556,.75,0,0,.55],37:[.05556,.75,0,0,1.02912],38:[0,.69444,0,0,.83056],39:Ti,40:ws,41:ws,42:[0,.75,0,0,.55],43:[.11667,.61667,0,0,.85556],44:[.10556,.13056,0,0,.30556],45:[0,.45833,0,0,.36667],46:[0,.13056,0,0,.30556],47:[.25,.75,0,0,.55],48:ce,49:ce,50:ce,51:ce,52:ce,53:ce,54:ce,55:ce,56:ce,57:ce,58:[0,.45833,0,0,.30556],59:[.10556,.45833,0,0,.30556],61:[-.09375,.40625,0,0,.85556],63:Ms,64:ot,65:ot,66:ot,67:Nn,68:wt,69:[0,.69444,0,0,.64167],70:St,71:ot,72:wt,73:[0,.69444,0,0,.33056],74:Ms,75:As,76:Ts,77:[0,.69444,0,0,.97778],78:wt,79:wt,80:Nn,81:[.10556,.69444,0,0,.79445],82:Nn,83:St,84:ot,85:As,86:[0,.69444,.01528,0,.73334],87:[0,.69444,.01528,0,1.03889],88:ot,89:[0,.69444,.0275,0,.73334],90:Bs,91:ks,93:ks,94:ce,95:[.35,.10833,.03056,0,.55],97:[0,.45833,0,0,.525],98:Vn,99:[0,.45833,0,0,.48889],100:Vn,101:[0,.45833,0,0,.51111],102:[0,.69444,.07639,0,.33611],103:[.19444,.45833,.01528,0,.55],104:Vn,105:_s,106:[.19444,.69444,0,0,.28611],107:[0,.69444,0,0,.53056],108:_s,109:[0,.45833,0,0,.86667],110:Ls,111:[0,.45833,0,0,.55],112:Cs,113:Cs,114:[0,.45833,.01528,0,.37222],115:[0,.45833,0,0,.42167],116:[0,.58929,0,0,.40417],117:Ls,118:[0,.45833,.01528,0,.5],119:[0,.45833,.01528,0,.74445],120:[0,.45833,0,0,.5],121:[.19444,.45833,.01528,0,.5],122:[0,.45833,0,0,.47639],126:[.35,.34444,0,0,.55],160:N,168:ce,176:ot,180:ce,184:[.17014,0,0,0,.48889],305:[0,.45833,0,0,.25556],567:[.19444,.45833,0,0,.28611],710:ce,711:[0,.63542,0,0,.55],713:[0,.63778,0,0,.55],728:ce,729:Ti,730:ot,732:ce,733:ce,915:Ts,916:[0,.69444,0,0,.91667],920:Jn,923:Bs,926:ot,928:wt,931:wt,933:Jn,934:wt,936:Jn,937:wt,8211:[0,.45833,.03056,0,.55],8212:[0,.45833,.03056,0,1.10001],8216:Ti,8217:Ti,8220:Hn,8221:Hn},"SansSerif-Italic":{32:N,33:[0,.69444,.05733,0,.31945],34:Rs,35:[.19444,.69444,.05087,0,.83334],36:[.05556,.75,.11156,0,.5],37:[.05556,.75,.03126,0,.83334],38:[0,.69444,.03058,0,.75834],39:Un,40:[.25,.75,.13164,0,.38889],41:[.25,.75,.02536,0,.38889],42:[0,.75,.11775,0,.5],43:[.08333,.58333,.02536,0,.77778],44:qs,45:[0,.44444,.01946,0,.33333],46:Is,47:[.25,.75,.13164,0,.5],48:Ze,49:Ze,50:Ze,51:Ze,52:Ze,53:Ze,54:Ze,55:Ze,56:Ze,57:Ze,58:[0,.44444,.02502,0,.27778],59:[.125,.44444,.02502,0,.27778],61:[-.13,.37,.05087,0,.77778],63:[0,.69444,.11809,0,.47222],64:[0,.69444,.07555,0,.66667],65:at,66:[0,.69444,.08293,0,.66667],67:[0,.69444,.11983,0,.63889],68:[0,.69444,.07555,0,.72223],69:[0,.69444,.11983,0,.59722],70:[0,.69444,.13372,0,.56945],71:[0,.69444,.11983,0,.66667],72:Gn,73:[0,.69444,.13372,0,.27778],74:[0,.69444,.08094,0,.47222],75:[0,.69444,.11983,0,.69445],76:jn,77:[0,.69444,.08094,0,.875],78:Gn,79:[0,.69444,.07555,0,.73611],80:[0,.69444,.08293,0,.63889],81:[.125,.69444,.07555,0,.73611],82:[0,.69444,.08293,0,.64584],83:[0,.69444,.09205,0,.55556],84:[0,.69444,.13372,0,.68056],85:[0,.69444,.08094,0,.6875],86:[0,.69444,.1615,0,.66667],87:[0,.69444,.1615,0,.94445],88:[0,.69444,.13372,0,.66667],89:[0,.69444,.17261,0,.66667],90:[0,.69444,.11983,0,.61111],91:[.25,.75,.15942,0,.28889],93:[.25,.75,.08719,0,.28889],94:Ds,95:[.35,.09444,.08616,0,.5],97:[0,.44444,.00981,0,.48056],98:[0,.69444,.03057,0,.51667],99:[0,.44444,.08336,0,.44445],100:[0,.69444,.09483,0,.51667],101:[0,.44444,.06778,0,.44445],102:[0,.69444,.21705,0,.30556],103:[.19444,.44444,.10836,0,.5],104:[0,.69444,.01778,0,.51667],105:[0,.67937,.09718,0,.23889],106:[.19444,.67937,.09162,0,.26667],107:[0,.69444,.08336,0,.48889],108:[0,.69444,.09483,0,.23889],109:[0,.44444,.01778,0,.79445],110:[0,.44444,.01778,0,.51667],111:[0,.44444,.06613,0,.5],112:[.19444,.44444,.0389,0,.51667],113:[.19444,.44444,.04169,0,.51667],114:[0,.44444,.10836,0,.34167],115:[0,.44444,.0778,0,.38333],116:[0,.57143,.07225,0,.36111],117:[0,.44444,.04169,0,.51667],118:[0,.44444,.10836,0,.46111],119:[0,.44444,.10836,0,.68334],120:[0,.44444,.09169,0,.46111],121:[.19444,.44444,.10836,0,.46111],122:[0,.44444,.08752,0,.43472],126:[.35,.32659,.08826,0,.5],160:N,168:[0,.67937,.06385,0,.5],176:zs,184:Wn,305:[0,.44444,.04169,0,.23889],567:[.19444,.44444,.04169,0,.26667],710:Ds,711:[0,.63194,.08432,0,.5],713:[0,.60889,.08776,0,.5],714:$s,715:ie,728:[0,.69444,.09483,0,.5],729:[0,.67937,.07774,0,.27778],730:zs,732:[0,.67659,.08826,0,.5],733:$s,915:[0,.69444,.13372,0,.54167],916:Us,920:[0,.69444,.07555,0,.77778],923:St,926:[0,.69444,.12816,0,.66667],928:Gn,931:[0,.69444,.11983,0,.72222],933:Es,934:[0,.69444,.04603,0,.72222],936:Es,937:[0,.69444,.08293,0,.72222],8211:[0,.44444,.08616,0,.5],8212:[0,.44444,.08616,0,1],8216:Un,8217:Un,8220:[0,.69444,.14205,0,.5],8221:Rs},"SansSerif-Regular":{32:N,33:[0,.69444,0,0,.31945],34:ie,35:Fs,36:qn,37:Ps,38:[0,.69444,0,0,.75834],39:it,40:rr,41:rr,42:Os,43:Te,44:qs,45:[0,.44444,0,0,.33333],46:Is,47:nt,48:je,49:je,50:je,51:je,52:je,53:je,54:je,55:je,56:je,57:je,58:[0,.44444,0,0,.27778],59:[.125,.44444,0,0,.27778],61:[-.13,.37,0,0,.77778],63:Zn,64:at,65:at,66:at,67:$t,68:[0,.69444,0,0,.72223],69:Ns,70:[0,.69444,0,0,.56945],71:at,72:Xn,73:it,74:Zn,75:[0,.69444,0,0,.69445],76:jn,77:[0,.69444,0,0,.875],78:Xn,79:[0,.69444,0,0,.73611],80:$t,81:[.125,.69444,0,0,.73611],82:[0,.69444,0,0,.64584],83:ir,84:[0,.69444,0,0,.68056],85:[0,.69444,0,0,.6875],86:[0,.69444,.01389,0,.66667],87:[0,.69444,.01389,0,.94445],88:at,89:[0,.69444,.025,0,.66667],90:St,91:Vs,93:Vs,94:ie,95:[.35,.09444,.02778,0,.5],97:[0,.44444,0,0,.48056],98:Kn,99:Js,100:Kn,101:Js,102:[0,.69444,.06944,0,.30556],103:[.19444,.44444,.01389,0,.5],104:Kn,105:[0,.67937,0,0,.23889],106:[.19444,.67937,0,0,.26667],107:[0,.69444,0,0,.48889],108:[0,.69444,0,0,.23889],109:[0,.44444,0,0,.79445],110:Ws,111:[0,.44444,0,0,.5],112:Hs,113:Hs,114:[0,.44444,.01389,0,.34167],115:Gs,116:[0,.57143,0,0,.36111],117:Ws,118:[0,.44444,.01389,0,.46111],119:[0,.44444,.01389,0,.68334],120:[0,.44444,0,0,.46111],121:[.19444,.44444,.01389,0,.46111],122:[0,.44444,0,0,.43472],126:[.35,.32659,0,0,.5],160:N,168:[0,.67937,0,0,.5],176:at,184:Wn,305:[0,.44444,0,0,.23889],567:[.19444,.44444,0,0,.26667],710:ie,711:[0,.63194,0,0,.5],713:[0,.60889,0,0,.5],714:ie,715:ie,728:ie,729:[0,.67937,0,0,.27778],730:at,732:[0,.67659,0,0,.5],733:ie,915:jn,916:Us,920:Rt,923:St,926:at,928:Xn,931:Dr,933:Rt,934:Dr,936:Rt,937:Dr,8211:[0,.44444,.02778,0,.5],8212:[0,.44444,.02778,0,1],8216:it,8217:it,8220:ie,8221:ie},"Script-Regular":{32:N,65:[0,.7,.22925,0,.80253],66:[0,.7,.04087,0,.90757],67:[0,.7,.1689,0,.66619],68:[0,.7,.09371,0,.77443],69:[0,.7,.18583,0,.56162],70:[0,.7,.13634,0,.89544],71:[0,.7,.17322,0,.60961],72:[0,.7,.29694,0,.96919],73:[0,.7,.19189,0,.80907],74:[.27778,.7,.19189,0,1.05159],75:[0,.7,.31259,0,.91364],76:[0,.7,.19189,0,.87373],77:[0,.7,.15981,0,1.08031],78:[0,.7,.3525,0,.9015],79:[0,.7,.08078,0,.73787],80:[0,.7,.08078,0,1.01262],81:[0,.7,.03305,0,.88282],82:[0,.7,.06259,0,.85],83:[0,.7,.19189,0,.86767],84:[0,.7,.29087,0,.74697],85:[0,.7,.25815,0,.79996],86:[0,.7,.27523,0,.62204],87:[0,.7,.27523,0,.80532],88:[0,.7,.26006,0,.94445],89:[0,.7,.2939,0,.70961],90:[0,.7,.24037,0,.8212],160:N},"Size1-Regular":{32:N,40:Zs,41:Zs,47:js,91:Xs,92:js,93:Xs,123:Ks,125:Ks,160:N,710:Bi,732:Bi,770:Bi,771:Bi,8214:[-99e-5,.601,0,0,.77778],8593:Ys,8595:Ys,8657:Qs,8659:Qs,8719:e0,8720:e0,8721:[.25001,.75,0,0,1.05556],8730:[.35001,.85,0,0,1],8739:[-.00599,.606,0,0,.33333],8741:[-.00599,.606,0,0,.55556],8747:r0,8748:t0,8749:t0,8750:r0,8896:nr,8897:nr,8898:nr,8899:nr,8968:or,8969:or,8970:or,8971:or,9168:eo,10216:or,10217:or,10752:Yn,10753:Yn,10754:Yn,10756:nr,10758:nr},"Size2-Regular":{32:N,40:i0,41:i0,47:n0,91:o0,92:n0,93:o0,123:a0,125:a0,160:N,710:Di,732:Di,770:Di,771:Di,8719:s0,8720:s0,8721:[.55001,1.05,0,0,1.44445],8730:[.65002,1.15,0,0,1],8747:c0,8748:l0,8749:l0,8750:c0,8896:ar,8897:ar,8898:ar,8899:ar,8968:zi,8969:zi,8970:zi,8971:zi,10216:m0,10217:m0,10752:Qn,10753:Qn,10754:Qn,10756:ar,10758:ar},"Size3-Regular":{32:N,40:u0,41:u0,47:h0,91:d0,92:h0,93:d0,123:$i,125:$i,160:N,710:Ei,732:Ei,770:Ei,771:Ei,8730:[.95003,1.45,0,0,1],8968:Ri,8969:Ri,8970:Ri,8971:Ri,10216:$i,10217:$i},"Size4-Regular":{32:N,40:p0,41:p0,47:f0,91:g0,92:f0,93:g0,123:Fi,125:Fi,160:N,710:Pi,732:Pi,770:Pi,771:Pi,8730:[1.25003,1.75,0,0,1],8968:Oi,8969:Oi,8970:Oi,8971:Oi,9115:qi,9116:y0,9117:qi,9118:qi,9119:y0,9120:qi,9121:Ii,9122:eo,9123:Ii,9124:Ii,9125:eo,9126:Ii,9127:b0,9128:x0,9129:v0,9130:[0,.3,0,0,.88889],9131:b0,9132:x0,9133:v0,9143:[.88502,.915,0,0,1.05556],10216:Fi,10217:Fi,57344:S0,57345:S0,57680:Ni,57681:Ni,57682:Ni,57683:Ni},"Typewriter-Regular":{32:A0,33:C,34:C,35:C,36:Re,37:Re,38:C,39:C,40:Re,41:Re,42:[0,.52083,0,0,.525],43:w0,44:[.13889,.125,0,0,.525],45:w0,46:[0,.125,0,0,.525],47:Re,48:C,49:C,50:C,51:C,52:C,53:C,54:C,55:C,56:C,57:C,58:pe,59:[.13889,.43056,0,0,.525],60:M0,61:[-.19549,.41562,0,0,.525],62:M0,63:C,64:C,65:C,66:C,67:C,68:C,69:C,70:C,71:C,72:C,73:C,74:C,75:C,76:C,77:C,78:C,79:C,80:C,81:[.13889,.61111,0,0,.525],82:C,83:C,84:C,85:C,86:C,87:C,88:C,89:C,90:C,91:Re,92:Re,93:Re,94:C,95:[.09514,0,0,0,.525],96:C,97:pe,98:C,99:pe,100:C,101:pe,102:C,103:Rr,104:C,105:C,106:[.22222,.61111,0,0,.525],107:C,108:C,109:pe,110:pe,111:pe,112:Rr,113:Rr,114:pe,115:pe,116:[0,.55358,0,0,.525],117:pe,118:pe,119:pe,120:pe,121:Rr,122:pe,123:Re,124:Re,125:Re,126:C,127:C,160:A0,176:C,184:[.19445,0,0,0,.525],305:pe,567:Rr,711:[0,.56597,0,0,.525],713:[0,.56555,0,0,.525],714:C,715:C,728:C,730:C,770:C,771:C,776:C,915:C,916:C,920:C,923:C,926:C,928:C,931:C,933:C,934:C,936:C,937:C,8216:C,8217:C,8242:C,9251:[.11111,.21944,0,0,.525]}};var Dl=/[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/,Xe=10,fe=.25,C0=1.2,Me=.431,to={slant:[.25,.25,.25],space:[0,0,0],stretch:[0,0,0],shrink:[0,0,0],xHeight:[Me,Me,Me],quad:[1,1.171,1.472],extraSpace:[0,0,0],num1:[.5,.732,.925],num2:[.394,.384,.5],num3:[.444,.471,.504],denom1:[.686,.752,1.025],denom2:[.345,.344,.532],sup1:[.413,.503,.504],sup2:[.363,.431,.404],sup3:[.289,.286,.294],sub1:[.15,.143,.2],sub2:[.247,.286,.4],supDrop:[.386,.353,.494],subDrop:[.05,.071,.1],delim1:[2.39,1.7,1.98],delim2:[1.01,1.157,1.42],axisHeight:[fe,fe,fe],defaultRuleThickness:[.04,.049,.049],bigOpSpacing1:[.111,.111,.111],bigOpSpacing2:[.166,.166,.166],bigOpSpacing3:[.2,.2,.2],bigOpSpacing4:[.6,.611,.611],bigOpSpacing5:[.1,.143,.143],sqrtRuleThickness:[.04,.04,.04]},Fr=[0,.5,.7,.8,.9,1,1.2,1.44,1.728,2.074,2.488],Pr=5,_0={"\xA0":" ","\u200B":" ",\u00C5:"A",\u00C7:"C",\u00D0:"D",\u00DE:"o",\u00E5:"a",\u00E7:"c",\u00F0:"d",\u00FE:"o",\u0410:"A",\u0411:"B",\u0412:"B",\u0413:"F",\u0414:"A",\u0415:"E",\u0416:"K",\u0417:"3",\u0418:"N",\u0419:"N",\u041A:"K",\u041B:"N",\u041C:"M",\u041D:"H",\u041E:"O",\u041F:"N",\u0420:"P",\u0421:"C",\u0422:"T",\u0423:"y",\u0424:"O",\u0425:"X",\u0426:"U",\u0427:"h",\u0428:"W",\u0429:"W",\u042A:"B",\u042B:"X",\u042C:"B",\u042D:"3",\u042E:"X",\u042F:"R",\u0430:"a",\u0431:"b",\u0432:"a",\u0433:"r",\u0434:"y",\u0435:"e",\u0436:"m",\u0437:"e",\u0438:"n",\u0439:"n",\u043A:"n",\u043B:"n",\u043C:"m",\u043D:"n",\u043E:"o",\u043F:"n",\u0440:"p",\u0441:"c",\u0442:"o",\u0443:"y",\u0444:"b",\u0445:"x",\u0446:"n",\u0447:"n",\u0448:"w",\u0449:"w",\u044A:"a",\u044B:"m",\u044C:"a",\u044D:"e",\u044E:"m",\u044F:"r"};function Mt(t,e){t===void 0&&(t=77);let r=k0[e][t];if(r)return{defaultMetrics:!1,depth:r[0],height:r[1],italic:r[2],skew:r[3],width:r[4]};if(t===11034)return{defaultMetrics:!0,depth:.2,height:.8,italic:0,skew:0,width:.8};let i=String.fromCodePoint(t);if(i in _0)t=_0[i].codePointAt(0);else if(Dl.test(i))return t=77,{defaultMetrics:!0,depth:.2,height:.9,italic:0,skew:0,width:1};return{defaultMetrics:!0,depth:.2,height:.7,italic:0,skew:0,width:.8}}function ve(t){return Array.isArray(t)}var ro={overrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],overleftarrow:[["leftarrow"],.888,522,"xMinYMin"],underrightarrow:[["rightarrow"],.888,522,"xMaxYMin"],underleftarrow:[["leftarrow"],.888,522,"xMinYMin"],xrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],longrightarrow:[["rightarrow"],1.469,522,"xMaxYMin"],xleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],longleftarrow:[["leftarrow"],1.469,522,"xMinYMin"],Overrightarrow:[["doublerightarrow"],.888,560,"xMaxYMin"],xRightarrow:[["doublerightarrow"],1.526,560,"xMaxYMin"],xLeftarrow:[["doubleleftarrow"],1.526,560,"xMinYMin"],overleftharpoon:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoonup:[["leftharpoon"],.888,522,"xMinYMin"],xleftharpoondown:[["leftharpoondown"],.888,522,"xMinYMin"],overrightharpoon:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoonup:[["rightharpoon"],.888,522,"xMaxYMin"],xrightharpoondown:[["rightharpoondown"],.888,522,"xMaxYMin"],xlongequal:[["longequal"],.888,334,"xMinYMin"],xtwoheadleftarrow:[["twoheadleftarrow"],.888,334,"xMinYMin"],xtwoheadrightarrow:[["twoheadrightarrow"],.888,334,"xMaxYMin"],overleftrightarrow:[["leftarrow","rightarrow"],.888,522],overbrace:[["leftbrace","midbrace","rightbrace"],1.6,548],underbrace:[["leftbraceunder","midbraceunder","rightbraceunder"],1.6,548],underleftrightarrow:[["leftarrow","rightarrow"],.888,522],xleftrightarrow:[["leftarrow","rightarrow"],1.75,522],longleftrightarrow:[["leftarrow","rightarrow"],1.75,522],xLeftrightarrow:[["doubleleftarrow","doublerightarrow"],1.75,560],xrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],longrightleftharpoons:[["leftharpoondownplus","rightharpoonplus"],1.75,716],xleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],longleftrightharpoons:[["leftharpoonplus","rightharpoondownplus"],1.75,716],xhookleftarrow:[["leftarrow","righthook"],1.08,522],xhookrightarrow:[["lefthook","rightarrow"],1.08,522],overlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],underlinesegment:[["leftlinesegment","rightlinesegment"],.888,522],overgroup:[["leftgroup","rightgroup"],.888,342],undergroup:[["leftgroupunder","rightgroupunder"],.888,342],xmapsto:[["leftmapsto","rightarrow"],1.5,522],xtofrom:[["leftToFrom","rightToFrom"],1.75,528],xleftrightarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],longleftrightarrows:[["baraboveleftarrow","rightarrowabovebar"],1.75,901],xRightleftharpoons:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],longRightleftharpoons:[["baraboveshortleftharpoon","rightharpoonaboveshortbar"],1.75,716],xLeftrightharpoons:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716],longLeftrightharpoons:[["shortbaraboveleftharpoon","shortrightharpoonabovebar"],1.75,716]},io={widehat1:[1062,239,.24],widehat2:[2364,300,.3],widehat3:[2364,360,.36],widehat4:[2364,420,.42],widecheck1:[1062,239,.24],widecheck2:[2364,300,.3],widecheck3:[2364,360,.36],widecheck4:[2364,420,.42],widetilde1:[600,260,.26],widetilde2:[1033,286,.286],widetilde3:[2339,306,.306],widetilde4:[2340,312,.34],overarc:[1061,159,.3],underarc:[1061,159,.3]},L0={doubleleftarrow:`M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`,doublerightarrow:`M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`,leftarrow:`M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`,leftbrace:`M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`,leftbraceunder:`M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`,overarc:"M529 0c179 0 524 115 524 115 5 1 9 5 9 10 0 1-1 2-1 3l-4 22c-1 5-5 9-11 9h-2s-338-93-512-92c-174 0-513 92-513 92h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13 0 0 342-115 520-115z",underarc:`m 529 160 + c -179 0 -524 -115 -524 -115 + c -5 -1 -9 -5 -9 -10 + c 0 -1 1 -2 1 -3 + l 4 -22 + c 1 -5 5 -9 11 -9 + h 2 + s 338 93 512 92 + c 174 0 513 -92 513 -92 + h 2 + c 5 0 9 4 11 9 + l 5 22 + c 1 6 -2 12 -8 13 + c 0 0 -342 115 -520 115 + z + `,leftgroup:`M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`,leftgroupunder:`M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`,leftharpoon:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`,leftharpoonplus:`M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`,leftharpoondown:`M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`,leftharpoondownplus:`M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`,lefthook:`M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`,leftlinesegment:`M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`,leftmapsto:`M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`,leftToFrom:`M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`,longequal:`M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`,midbrace:`M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`,midbraceunder:`M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`,oiintSize1:`M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`,oiintSize2:`M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`,oiiintSize1:`M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`,oiiintSize2:`M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`,rightarrow:`M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`,rightbrace:`M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`,rightbraceunder:`M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`,rightgroup:`M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`,rightgroupunder:`M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`,rightharpoon:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`,rightharpoonplus:`M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`,rightharpoondown:`M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`,rightharpoondownplus:`M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`,righthook:`M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`,rightlinesegment:`M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`,rightToFrom:`M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`,twoheadleftarrow:`M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`,twoheadrightarrow:`M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`,widetilde1:`M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`,widetilde2:`M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`,widetilde3:`M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`,widetilde4:`M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`,vec:`M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`,widehat1:`M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`,widehat2:`M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat3:`M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widehat4:`M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`,widecheck1:`M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`,widecheck2:`M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck3:`M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,widecheck4:`M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`,baraboveleftarrow:`M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`,rightarrowabovebar:`M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`,baraboveshortleftharpoon:`M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`,rightharpoonaboveshortbar:`M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`,shortbaraboveleftharpoon:`M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`,shortrightharpoonabovebar:`M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z`};function T0(t){if(io[t]){let[c,h,d]=io[t],f=``;return`${f}`}let[e,r,i,n]=ro[t],o,a,s=i/1e3;e.length===3?(o=["slice-1-of-3","slice-2-of-3","slice-3-of-3"],a=["xMinYMin","xMidYMin","xMaxYMin"]):e.length===2?(o=["slice-1-of-2","slice-2-of-2"],a=["xMinYMin","xMaxYMin"]):(o=["slice-1-of-1"],a=[n]);let l=e.map((c,h)=>``).join("");return`${l}`}function B0(t){return ro[t]?ro[t][2]/1e3:io[t][2]}var zl={m0:"#3F3D99",m1:"#993D71",m2:"#998B3D",m3:"#3D9956",m4:"#3D5A99",m5:"#993D90",m6:"#996D3D",m7:"#43993D",m8:"#3D7999",m9:"#843D99"},$l={blue:"#0072BD",orange:"#D95319",yellow:"#EDB120",purple:"#7E2F8E",green:"#77AC30",cyan:"#4DBEEE",red:"#A2142F"},D0={red:"#fbbbb6",orange:"#ffe0c2",yellow:"#fff1c2",lime:"#d0e8b9",green:"#bceac4",teal:"#b9f1f1",cyan:"#b8e5c9",blue:"#b6d9fb",indigo:"#d1c2f0",purple:"#e3baf8",magenta:"#f9c8e0",black:"#353535","dark-grey":"#8C8C8C",grey:"#D0D0D0","light-grey":"#F0F0F0",white:"#ffffff"},z0={red:"#d7170b",orange:"#fe8a2b",yellow:"#ffc02b",lime:"#63b215",green:"#21ba3a",teal:"#17cfcf",cyan:"#13a7ec",blue:"#0d80f2",indigo:"#63c",purple:"#a219e6",magenta:"#eb4799",black:"#000","dark-grey":"#666",grey:"#A6A6A6","light-grey":"#d4d5d2",white:"#ffffff"},$0={Red:"red",Orange:"orange",Yellow:"yellow",LimeGreen:"lime",Green:"green",TealBlue:"teal",Blue:"blue",Violet:"indigo",Purple:"purple",Magenta:"magenta",Black:"black",Gray:"grey",White:"white"},El={Apricot:"#FBB982",Aquamarine:"#00B5BE",Bittersweet:"#C04F17",Black:"#221E1F",Blue:"#2D2F92",BlueGreen:"#00B3B8",BlueViolet:"#473992",BrickRed:"#B6321C",Brown:"#792500",BurntOrange:"#F7921D",CadetBlue:"#74729A",CarnationPink:"#F282B4",Cerulean:"#00A2E3",CornflowerBlue:"#41B0E4",Cyan:"#00AEEF",Dandelion:"#FDBC42",DarkOrchid:"#A4538A",Emerald:"#00A99D",ForestGreen:"#009B55",Fuchsia:"#8C368C",Goldenrod:"#FFDF42",Gray:"#949698",Green:"#00A64F",GreenYellow:"#DFE674",JungleGreen:"#00A99A",Lavender:"#F49EC4",Limegreen:"#8DC73E",Magenta:"#EC008C",Mahogany:"#A9341F",Maroon:"#AF3235",Melon:"#F89E7B",MidnightBlue:"#006795",Mulberry:"#A93C93",NavyBlue:"#006EB8",OliveGreen:"#3C8031",Orange:"#F58137",OrangeRed:"#ED135A",Orchid:"#AF72B0",Peach:"#F7965A",Periwinkle:"#7977B8",PineGreen:"#008B72",Plum:"#92268F",ProcessBlue:"#00B0F0",Purple:"#99479B",RawSienna:"#974006",Red:"#ED1B23",RedOrange:"#F26035",RedViolet:"#A1246B",Rhodamine:"#EF559F",RoyalBlue:"#0071BC",RoyalPurple:"#613F99",RubineRed:"#ED017D",Salmon:"#F69289",SeaGreen:"#3FBC9D",Sepia:"#671800",SkyBlue:"#46C5DD",SpringGreen:"#C6DC67",Tan:"#DA9D76",TealBlue:"#00AEB3",Thistle:"#D883B7",Turquoise:"#00B4CE",Violet:"#58429B",VioletRed:"#EF58A0",White:"#FFFFFF",WildStrawberry:"#EE2967",Yellow:"#FFF200",YellowGreen:"#98CC70",YellowOrange:"#FAA21A"};function ao(t){var h,d,f,S,x,w;let e=t.split("!"),r,i,n,o=255,a=255,s=255,l=-1,c=e.length>0&&e[0].startsWith("-");c&&(e[0]=e[0].slice(1));for(let D=0;D=0&&(o=(1-l)*o+l*r,a=(1-l)*a+l*i,s=(1-l)*s+l*n,l=-1),D+1=0&&(o=l*o+(1-l)*r,a=l*a+(1-l)*i,s=l*s+(1-l)*n),c&&(o=255-o,a=255-a,s=255-s),"#"+("00"+Math.round(o).toString(16)).slice(-2)+("00"+Math.round(a).toString(16)).slice(-2)+("00"+Math.round(s).toString(16)).slice(-2)}function E0(t){var e,r;return t=t.trim(),(r=(e=D0[t.toLowerCase()])!=null?e:D0[$0[t]])!=null?r:ao(t)}function Rl(t){if(!t||t[0]!=="#")return;t=t.slice(1);let e;return t.length<=4?(e={r:parseInt(t[0]+t[0],16),g:parseInt(t[1]+t[1],16),b:parseInt(t[2]+t[2],16)},t.length===4&&(e.a=parseInt(t[3]+t[3],16)/255)):(e={r:parseInt(t[0]+t[1],16),g:parseInt(t[2]+t[3],16),b:parseInt(t[4]+t[5],16)},t.length===8&&(e.a=parseInt(t[6]+t[7],16)/255)),e&&e.a===void 0&&(e.a=1),e}function no(t,e,r){return r<0&&(r+=6),r>=6&&(r-=6),r<1?(e-t)*r+t:r<3?e:r<4?(e-t)*(4-r)+t:t}function Fl(t){let[e,r,i]=[t.h,t.s,t.l];e=(e+360)%360/60,i=Math.max(0,Math.min(i,1)),r=Math.max(0,Math.min(r,1));let n=i<=.5?i*(r+1):i+r-i*r,o=i*2-n;return{r:Math.round(255*no(o,n,e+2)),g:Math.round(255*no(o,n,e)),b:Math.round(255*no(o,n,e-2))}}function oo(t){return t<0?0:t>255?255:Math.round(t)}function Pl(t){let{r:e,g:r,b:i}=t,n=((1<<24)+(oo(e)<<16)+(oo(r)<<8)+oo(i)).toString(16).slice(1);return n[0]===n[1]&&n[2]===n[3]&&n[4]===n[5]&&n[6]===n[7]&&(n=n[0]+n[2]+n[4]),"#"+n}function Ol(t){let{r:e,g:r,b:i}=t;e=e/255,r=r/255,i=i/255;let n=Math.min(e,r,i),o=Math.max(e,r,i),a=o-n,s,l;o===n?s=0:e===o?s=(r-i)/a:r===o?s=2+(i-e)/a:i===o&&(s=4+(e-r)/a),s=Math.min(s*60,360),s<0&&(s+=360);let c=(n+o)/2;return o===n?l=0:c<=.5?l=a/(o+n):l=a/(2-o-n),{h:s,s:l,l:c}}function R0(t){let e=Rl(t);if(!e)return t;let{h:r,s:i,l:n}=Ol(e);return i+=.1,n-=.1,Pl(Fl({h:r,s:i,l:n}))}function Vi(){return"window"in globalThis&&"document"in globalThis}function F0(){var e,r;if(!Vi())return"other";let t=(r=(e=navigator.userAgentData)==null?void 0:e.platform)!=null?r:navigator.platform;return/^mac/i.test(t)?navigator.maxTouchPoints===5?"ios":"macos":/^win/i.test(t)?"windows":/android/i.test(navigator.userAgent)?"android":/iphone|ipod|ipad/i.test(navigator.userAgent)?"ios":/\bcros\b/i.test(navigator.userAgent)?"chromeos":"other"}function P0(){if(!Vi())return!0;if(/firefox/i.test(navigator.userAgent)){let t=navigator.userAgent.match(/firefox\/(\d+)/i);return t?parseInt(t[1])>=78:!1}if(/trident/i.test(navigator.userAgent))return!1;if(/edge/i.test(navigator.userAgent)){let t=navigator.userAgent.match(/edg\/(\d+)/i);return t?parseInt(t[1])>=79:!1}return!0}var lo={60:"\\lt",62:"\\gt",111:"o",38:"\\&",123:"\\lbrace",125:"\\rbrace",91:"\\lbrack",93:"\\rbrack",58:"\\colon",160:"~",172:"\\neg",183:"\\cdot",188:"\\frac{1}{4}",189:"\\frac{1}{2}",190:"\\frac{3}{4}",8304:"^{0}",8305:"^{i}",185:"^{1}",178:"^{2}",179:"^{3}",8224:"\\dagger",8225:"\\ddagger",8230:"\\ldots",8308:"^{4}",8309:"^{5}",8310:"^{6}",8311:"^{7}",8312:"^{8}",8313:"^{9}",8314:"^{+}",8315:"^{-}",8316:"^{=}",8319:"^{n}",8320:"_{0}",8321:"_{1}",8322:"_{2}",8323:"_{3}",8324:"_{4}",8325:"_{5}",8326:"_{6}",8327:"_{7}",8328:"_{8}",8329:"_{9}",8330:"_{+}",8331:"_{-}",8332:"_{=}",8336:"_{a}",8337:"_{e}",8338:"_{o}",8339:"_{x}",8242:"\\prime",39:"\\prime",8592:"\\gets",8594:"\\to",9651:"\\triangle",9661:"\\triangledown",8715:"\\owns",8727:"\\ast",8739:"\\vert",8741:"\\Vert",8743:"\\land",8744:"\\lor",8901:"\\cdot",8904:"\\bowtie",8800:"\\ne",8804:"\\le",8805:"\\ge",8869:"\\bot",10178:"\\perp",10231:"\\biconditional",10232:"\\impliedby",10233:"\\implies",10234:"\\iff",8450:"\\mathbb{C}",8469:"\\mathbb{N}",8473:"\\mathbb{P}",8474:"\\mathbb{Q}",8477:"\\mathbb{R}",8484:"\\mathbb{Z}",8461:"\\mathbb{H}",8476:"\\Re",8465:"\\Im",42:"\\ast",11036:"\\square",9633:"\\square",8720:"\\coprod",8716:"\\not\\ni",9671:"\\diamond",8846:"\\uplus",8851:"\\sqcap",8852:"\\sqcup",8768:"\\wr",8750:"\\oint",8226:"\\textbullet",8722:"-",978:"\\Upsilon"},so={119893:8462,119965:8492,119968:8496,119969:8497,119971:8459,119972:8464,119975:8466,119976:8499,119981:8475,119994:8495,119996:8458,120004:8500,120070:8493,120075:8460,120076:8465,120085:8476,120093:8488,120122:8450,120127:8461,120133:8469,120135:8473,120136:8474,120137:8477,120145:8484},O0=[{start:119808,len:26,offset:65,style:"bold"},{start:119834,len:26,offset:97,style:"bold"},{start:120488,len:25,offset:913,style:"bold"},{start:120514,len:25,offset:945,style:"bold"},{start:119860,len:26,offset:65,style:"italic"},{start:119886,len:26,offset:97,style:"italic"},{start:120546,len:25,offset:913,style:"italic"},{start:120572,len:25,offset:945,style:"italic"},{start:119912,len:26,offset:65,style:"bolditalic"},{start:119938,len:26,offset:97,style:"bolditalic"},{start:120604,len:25,offset:913,style:"bolditalic"},{start:120630,len:25,offset:945,style:"bolditalic"},{start:120782,len:10,offset:48,variant:"main",style:"bold"},{start:119964,len:26,offset:65,variant:"script"},{start:119990,len:26,offset:97,variant:"script"},{start:120016,len:26,offset:65,variant:"script",style:"bold"},{start:120042,len:26,offset:97,variant:"script",style:"bold"},{start:120068,len:26,offset:65,variant:"fraktur"},{start:120094,len:26,offset:97,variant:"fraktur"},{start:120172,len:26,offset:65,variant:"fraktur",style:"bold"},{start:120198,len:26,offset:97,variant:"fraktur",style:"bold"},{start:120120,len:26,offset:65,variant:"double-struck"},{start:120146,len:26,offset:97,variant:"double-struck"},{start:120792,len:10,offset:48,variant:"double-struck"},{start:120432,len:26,offset:65,variant:"monospace"},{start:120458,len:26,offset:97,variant:"monospace"},{start:120822,len:10,offset:48,variant:"monospace"},{start:120224,len:26,offset:65,variant:"sans-serif"},{start:120250,len:26,offset:97,variant:"sans-serif"},{start:120276,len:26,offset:65,variant:"sans-serif",style:"bold"},{start:120302,len:26,offset:97,variant:"sans-serif",style:"bold"},{start:120328,len:26,offset:65,variant:"sans-serif",style:"italic"},{start:120354,len:26,offset:97,variant:"sans-serif",style:"italic"},{start:120380,len:26,offset:65,variant:"sans-serif",style:"bolditalic"},{start:120406,len:26,offset:97,variant:"sans-serif",style:"bolditalic"},{start:120662,len:25,offset:913,variant:"sans-serif",style:"bold"},{start:120688,len:25,offset:945,variant:"sans-serif",style:"bold"},{start:120720,len:25,offset:913,variant:"sans-serif",style:"bolditalic"},{start:120746,len:25,offset:945,variant:"sans-serif",style:"bolditalic"},{start:120803,len:10,offset:48,variant:"sans-serif"},{start:120812,len:10,offset:48,variant:"sans-serif",style:"bold"}];function Or(t,e,r){if(!/[A-Za-z\d]/.test(t)||(r==="up"&&(r=void 0),!e&&!r))return;let i=t.codePointAt(0);if(i===void 0)return t;for(let n of O0)if((!e||n.variant===e)&&(!r||n.style===r)&&i>=n.offset&&i120831)&&(t<8448||t>8527))return{char:String.fromCodePoint(t)};for(let r in so)if(so[r]===t){t=(e=r.codePointAt(0))!=null?e:0;break}for(let r of O0)if(t>=r.start&&t[]$&*#^_%:'\u02DC".includes(t)||t.length>1)return;let e=(a=t.codePointAt(0))!=null?a:0,r=lo[e];if(r)return r;let{char:i,variant:n,style:o}=ql(e);if(!(!n&&!o)){switch(r=i,n){case"double-struck":r=`\\mathbb{${r}}`;break;case"fraktur":r=`\\mathfrak{${r}}`;break;case"script":r=`\\mathscr{${r}}`;break;case"sans-serif":r=`\\mathsf{${r}}`;break;case"monospace":r=`\\mathtt{${r}}`;break;case"calligraphic":r=`\\mathcal{${r}}`;break}switch(o){case"bold":r=`\\mathbf{${r}}`;break;case"italic":r=`\\mathit{${r}}`;break;case"bolditalic":r=`\\mathbfit{${r}}`;break}return r}}function A(t){return t?Array.isArray(t)?t:typeof t=="object"&&"group"in t?t.group:[]:[]}var co={},Hi=m({},lo),mo={},ho={},Il={darr:"\\downarrow",dArr:"\\Downarrow",Darr:"\\Downarrow",lang:"\\langle",rang:"\\rangle",uarr:"\\uparrow",uArr:"\\Uparrow",Uarr:"\\Uparrow",C:"\\mathbb{C}",H:"\\mathbb{H}",N:"\\mathbb{N}",Q:"\\mathbb{Q}",R:"\\mathbb{R}",Z:"\\mathbb{Z}",alef:"\\aleph",alefsym:"\\aleph",Alpha:"\\mathrm{A}",Beta:"\\mathrm{B}",bull:"\\bullet",Chi:"\\mathrm{X}",clubs:"\\clubsuit",cnums:"\\mathbb{C}",Complex:"\\mathbb{C}",Dagger:"\\ddagger",diamonds:"\\diamondsuit",doublecap:"\\Cap",doublecup:"\\Cup",empty:"\\emptyset",Epsilon:"\\mathrm{E}",Eta:"\\mathrm{H}",exist:"\\exists",hArr:"\\Leftrightarrow",harr:"\\leftrightarrow",Harr:"\\Leftrightarrow",hearts:"\\heartsuit",image:"\\Im",infin:"\\infty",Iota:"\\mathrm{I}",isin:"\\in",Kappa:"\\mathrm{K}",larr:"\\leftarrow",Larr:"\\Leftarrow",lArr:"\\Leftarrow",lrarr:"\\leftrightarrow",Lrarr:"\\Leftrightarrow",lrArr:"\\Leftrightarrow",Mu:"\\mathrm{M}",natnums:"\\mathbb{N}",Nu:"\\mathrm{N}",Omicron:"\\mathrm{O}",part:"\\partial",plusmn:"\\pm",rarr:"\\rightarrow",Rarr:"\\Rightarrow",rArr:"\\Rightarrow",real:"\\Re",reals:"\\mathbb{R}",Reals:"\\mathbb{R}",restriction:"\\upharpoonright",Rho:"\\mathrm{P}",sdot:"\\cdot",sect:"\\S",spades:"\\spadesuit",sub:"\\subset",sube:"\\subseteq",supe:"\\supseteq",Tau:"\\mathrm{T}",thetasym:"\\vartheta",varcoppa:"\\coppa",weierp:"\\wp",Zeta:"\\mathrm{Z}"},Nl={varGamma:"\\mathit{\\Gamma}",varDelta:"\\mathit{\\Delta}",varTheta:"\\mathit{\\Theta}",varLambda:"\\mathit{\\Lambda}",varXi:"\\mathit{\\Xi}",varPi:"\\mathit{\\Pi}",varSigma:"\\mathit{\\Sigma}",varUpsilon:"\\mathit{\\Upsilon}",varPhi:"\\mathit{\\Phi}",varPsi:"\\mathit{\\Psi}",varOmega:"\\mathit{\\Omega}",pmod:{def:"\\quad(\\operatorname{mod}\\ #1)",args:1,expand:!1,captureSelection:!1},mod:{def:"\\quad\\operatorname{mod}\\,\\,#1",args:1,expand:!1},bmod:{def:"\\;\\mathbin{\\operatorname{mod }}",expand:!1}},Vl={bra:{def:"\\mathinner{\\langle{#1}|}",args:1,captureSelection:!1},ket:{def:"\\mathinner{|{#1}\\rangle}",args:1,captureSelection:!1},braket:{def:"\\mathinner{\\langle{#1}\\rangle}",args:1,captureSelection:!1},set:{def:"\\mathinner{\\lbrace #1 \\rbrace}",args:1,captureSelection:!1},Bra:{def:"\\left\\langle #1\\right|",args:1,captureSelection:!1},Ket:{def:"\\left|#1\\right\\rangle",args:1,captureSelection:!1},Braket:{def:"\\left\\langle{#1}\\right\\rangle",args:1,captureSelection:!1},Set:{def:"\\left\\lbrace #1 \\right\\rbrace",args:1,captureSelection:!1}},Jl={strut:{primitive:!0,def:"\\phantom{\\rule[0.3\\baselineskip]{0}{0.7\\baselineskip}}",args:0,captureSelection:!0},iff:{primitive:!0,captureSelection:!0,def:"\\;\\Longleftrightarrow\\;"},nicefrac:"^{#1}\\!\\!/\\!_{#2}",phase:{def:"\\enclose{phasorangle}{#1}",args:1,captureSelection:!1},rd:"\\mathrm{d}",rD:"\\mathrm{D}",odif:"\\mathrm{d}",doubleStruckCapitalN:"\\mathbb{N}",doubleStruckCapitalR:"\\mathbb{R}",doubleStruckCapitalQ:"\\mathbb{Q}",doubleStruckCapitalZ:"\\mathbb{Z}",doubleStruckCapitalP:"\\mathbb{P}",scriptCapitalE:"\\mathscr{E}",scriptCapitalH:"\\mathscr{H}",scriptCapitalL:"\\mathscr{L}",gothicCapitalC:"\\mathfrak{C}",gothicCapitalH:"\\mathfrak{H}",gothicCapitalI:"\\mathfrak{I}",gothicCapitalR:"\\mathfrak{R}",imaginaryI:"\\mathrm{i}",imaginaryJ:"\\mathrm{j}",exponentialE:"\\mathrm{e}",differentialD:"\\mathrm{d}",capitalDifferentialD:"\\mathrm{D}",mathstrut:{def:"\\vphantom{(}",primitive:!0},angl:"\\enclose{actuarial}{#1}",angln:"\\enclose{actuarial}{n}",anglr:"\\enclose{actuarial}{r}",anglk:"\\enclose{actuarial}{k}",mathtools:{primitive:!0,package:{ordinarycolon:":",vcentcolon:"\\mathrel{\\mathop\\ordinarycolon}",dblcolon:'{\\mathop{\\char"2237}}',coloneqq:'{\\mathop{\\char"2254}}',Coloneqq:'{\\mathop{\\char"2A74}}',coloneq:'{\\mathop{\\char"2254}}',Coloneq:'{\\mathop{\\char"2A74}}',eqqcolon:'{\\mathop{\\char"2255}}',Eqqcolon:'{\\mathop{\\char"3D\\char"2237}}',eqcolon:'{\\mathop{\\char"2255}}',Eqcolon:'{\\mathop{\\char"3D\\char"2237}}',colonapprox:'{\\mathop{\\char"003A\\char"2248}}',Colonapprox:'{\\mathop{\\char"2237\\char"2248}}',colonsim:'{\\mathop{\\char"3A\\char"223C}}',Colonsim:'{\\mathop{\\char"2237\\char"223C}}',colondash:"\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}",Colondash:"\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}",dashcolon:"\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}",Dashcolon:"\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}"}},ratio:"\\vcentcolon",coloncolon:"\\dblcolon",colonequals:"\\coloneq",coloncolonequals:"\\Coloneq",equalscolon:"\\eqcolon",equalscoloncolon:"\\Eqcolon",colonminus:"\\colondash",coloncolonminus:"\\Colondash",minuscolon:"\\dashcolon",minuscoloncolon:"\\Dashcolon",coloncolonapprox:"\\Colonapprox",coloncolonsim:"\\Colonsim",simcolon:"\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}",Simcolon:"\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}",simcoloncolon:"\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}",approxcolon:"\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}",Approxcolon:"\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}",approxcoloncolon:"\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}",notni:"\\mathrel{\\char`\u220C}",limsup:"\\operatorname*{lim\\,sup}",liminf:"\\operatorname*{lim\\,inf}",injlim:"\\operatorname*{inj\\,lim}",projlim:"\\operatorname*{proj\\,lim}",varlimsup:"\\operatorname*{\\overline{lim}}",varliminf:"\\operatorname*{\\underline{lim}}",varinjlim:"\\operatorname*{\\underrightarrow{lim}}",varprojlim:"\\operatorname*{\\underleftarrow{lim}}",argmin:"\\operatorname*{arg\\,min}",argmax:"\\operatorname*{arg\\,max}",plim:"\\mathop{\\operatorname{plim}}\\limits",tripledash:{def:"\\vphantom{-}\\raise{4mu}{\\mkern1.5mu\\rule{2mu}{1.5mu}\\mkern{2.25mu}\\rule{2mu}{1.5mu}\\mkern{2.25mu}\\rule{2mu}{1.5mu}\\mkern{2mu}}",expand:!0},"braket.sty":{package:Vl},"amsmath.sty":{package:Nl,primitive:!0},"texvc.sty":{package:Il,primitive:!1}},sr={" ":32,"\\!":33,"\\#":35,"\\$":36,"\\%":37,"\\&":38,"\\_":95,"-":45,"\\textunderscore":95,"\\euro":8364,"\\maltese":10016,"\\{":123,"\\}":125,"\\textbraceleft":123,"\\textbraceright":125,"\\lbrace":123,"\\rbrace":125,"\\lbrack":91,"\\rbrack":93,"\\nobreakspace":160,"\\ldots":8230,"\\textellipsis":8230,"\\backslash":92,"`":8216,"'":8217,"``":8220,"''":8221,"\\degree":176,"\\textasciicircum":94,"\\textasciitilde":126,"\\textasteriskcentered":42,"\\textbackslash":92,"\\textbullet":8226,"\\textdollar":36,"\\textsterling":163,"\\textdagger":8224,"\\textdaggerdbl":8225,"\u2013":8211,"\u2014":8212,"\u2018":8216,"\u2019":8217,"\u201C":8220,"\u201D":8221,'"':8221,"\\ss":223,"\\ae":230,"\\oe":339,"\\AE":198,"\\OE":338,"\\O":216,"\\i":305,"\\j":567,"\\aa":229,"\\AA":197};var Gi,I0;P0()?(Gi=new RegExp("\\p{Letter}","u"),I0=new RegExp("[0-9\\p{Letter}]","u")):(Gi=/[a-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘꣳŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/,I0=/[\da-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘꣳŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/);function uo(t,e,r="mord",i){e!==void 0&&(co[t]={definitionType:"symbol",type:r,variant:i,codepoint:e},Hi[e]||(Hi[e]=t))}function ne(t,e,r){if(typeof t=="string"){for(let i=0;isr[i]===e);return r||String.fromCodePoint(e)}return String.fromCodePoint(e)}function Hl(t){let e=[];for(let r=0;r=55296&&i<=56319){let n=t.charCodeAt(r+1);if(n>=56320&&n<=57343){let o=i-55296,a=n-56320;i=2**16+o*2**10+a,r++}}e.push(i)}return e}var Xi=8205,Gl=[[Xi,1],[65038,2],[127995,5],[129456,4],[917536,96]],ji,H0=[127462,127487];function G0(t){var e;if(ji===void 0){ji={};for(let r of Gl)for(let i=r[0];i<=r[0]+r[1]-1;i++)ji[i]=!0}return(e=ji[t])!=null?e:!1}function Wl(t){return t>=H0[0]&&t<=H0[1]}function W0(t){if(/^[\u0020-\u00FF]*$/.test(t))return t;let e=[],r=Hl(t),i=0;for(;i=this.s.length}get(){return this.pos";let e=this.get();if(e==="\\"){if(!this.end()){let r=this.match(/^[a-zA-Z\*]+/);return r?this.match(/^[ \f\n\r\t\v\u00A0\u2028\u2029]*/):r=this.get(),"\\"+r}}else{if(e==="{")return"<{>";if(e==="}")return"<}>";if(e==="^"){if(this.peek()==="^"){this.get();let r=this.match(/^(\^(\^(\^(\^[\da-f])?[\da-f])?[\da-f])?[\da-f])?[\da-f]{2}/);if(r)return String.fromCodePoint(Number.parseInt(r.slice(r.lastIndexOf("^")+1),16))}return e}else if(e==="#"){if(!this.end()){let r=!1;if(/[\d?@]/.test(this.peek())&&(r=!0,this.pos+1"):"<$>"}return e}};function Ul(t,e){var n,o,a,s;let r=[],i=t.next();if(i&&i!=="\\relax"){if(i==="\\noexpand")i=t.next(),i&&r.push(i);else if(i==="\\obeyspaces")t.obeyspaces=!0;else if(i==="\\bgroup")r.push("<{>");else if(i==="\\egroup")r.push("<}>");else if(i==="\\string"){if(i=t.next(),i)if(i.startsWith("\\"))for(let l of i)r.push(l==="\\"?"\\backslash":l);else i==="<{>"?r.push("\\{"):i===""?r.push("~"):i==="<}>"&&r.push("\\}")}else if(i==="\\csname"){for(;t.peek()==="";)t.next();let l="",c=!1,h=[];do{if(h.length===0)if(/^#[\d?@]$/.test(t.peek())){let d=t.get().slice(1);h=lr((o=(n=e==null?void 0:e(d))!=null?n:e==null?void 0:e("?"))!=null?o:"\\placeholder{}",e),i=h[0]}else i=t.next(),h=i?[i]:[];c=h.length===0,!c&&i==="\\endcsname"&&(c=!0,h.shift()),c||(c=i==="<$>"||i==="<$$>"||i==="<{>"||i==="<}>"||typeof i=="string"&&i.length>1&&i.startsWith("\\")),c||(l+=h.shift())}while(!c);l&&r.push("\\"+l),r.push(...h)}else if(i!=="\\endcsname")if(i.length>1&&i.startsWith("#")){let l=i.slice(1);r.push(...lr((s=(a=e==null?void 0:e(l))!=null?a:e==null?void 0:e("?"))!=null?s:"\\placeholder{}",e))}else r.push(i)}return r}function lr(t,e=null){if(!t)return[];let r=[],i="";for(let a of t.toString().split(/\r?\n/)){i&&r.push(i),i=" ";let s=a.match(/((?:\\%)|[^%])*/);s!==null&&r.push(s[0])}let n=new yo(r.join("")),o=[];do o.push(...Ul(n,e));while(!n.end());return o}function B(t){let e="",r=[];for(let i of t)i&&(e&&/^[a-zA-Z\*]/.test(i)&&r.push(e),r.push(i),/^\\[a-zA-Z]+\*?[\"\'][^\ ]+$/.test(i)&&r.push(" "),e=/\\[a-zA-Z]+\*?$/.test(i)?" ":"");return r.join("")}function F(t,...e){return t.startsWith("\\"),e.length===0?t:B([t,...e.map(r=>`{${r}}`)])}function At(t){return B(t.map(e=>{var r;return(r={"":" ","<$$>":"$$","<$>":"$","<{>":"{","<}>":"}"}[e])!=null?r:e}))}var Ot=class Ot{constructor(e){Ot._registry[e]=this}static createAtom(e,r,i){return Ot._registry[e].createAtom(r,G(r,e),i)}static serialize(e,r){var i;if(!e||e.length===0)return"";if((i=r.skipStyles)!=null&&i){let n=[];for(let o of Z0(e)){let a=Ot._registry[o[0].mode];n.push(...a.serialize(o,r))}return B(n)}return B(jl(e,r))}static getFont(e,r,i){return Ot._registry[e].getFont(r,i)}};Ot._registry={};var Q=Ot;function Z0(t){let e=[],r=[],i="NONE";for(let n of t)n.type!=="first"&&(n.mode!==i?(r.length>0&&e.push(r),r=[n],i=n.mode):r.push(n));return r.length>0&&e.push(r),e}function Ki(t){if((t==null?void 0:t.mode)!=="math")return"";let{style:e}=t;return!e||!e.variantStyle?"":e.variantStyle==="bold"||e.variantStyle==="bolditalic"?"bold":""}function Yi(t){if(!t)return"";let{style:e}=t;if(!e)return"";let r=e.variant;return r===void 0&&(r="normal"),!["calligraphic","fraktur","double-struck","script","monospace","sans-serif"].includes(r)&&e.variantStyle&&(r+="-"+e.variantStyle),r}function Be(t,e){let r=[],i=[],n;for(let o of t){if(o.type==="first")continue;let a;e==="variant"?a=Yi(o):e==="bold"?a=Ki(o):a=o.style[e],a===n?i.push(o):(i.length>0&&r.push(i),i=[o],n=a)}return i.length>0&&r.push(i),r}function U0(t,e){var o;let{parent:r}=t[0],i=r==null?void 0:r.style.color,n=[];for(let a of Z0(t)){let s=e.defaultMode;for(let l of Be(a,"color")){let c=l[0].style,h=Q._registry[l[0].mode].serialize(l,u(m({},e),{defaultMode:te(s)?"text":"math"}));!e.skipStyles&&c.color&&c.color!=="none"&&(!r||i!==c.color)?n.push(F("\\textcolor",(o=c.verbatimColor)!=null?o:c.color,B(h))):n.push(B(h))}}return n}function Zl(t,e){let{parent:r}=t[0],i=r==null?void 0:r.style.backgroundColor;return Be(t,"backgroundColor").map(n=>{var o;if(n.length>0||n[0].type!=="box"){let a=n[0].style;if(a.backgroundColor&&a.backgroundColor!=="none"&&(!r||i!==a.backgroundColor))return F("\\colorbox",(o=a.verbatimBackgroundColor)!=null?o:a.backgroundColor,B(U0(n,u(m({},e),{defaultMode:"text"}))))}return B(U0(n,e))})}function jl(t,e){if(t.length===0)return[];let{parent:r}=t[0],i=r==null?void 0:r.style.fontSize,n=[];for(let o of Be(t,"fontSize")){let a=o[0].style.fontSize,s=Zl(o,e);s&&(a&&a!=="auto"&&(!r||i!==a)?n.push(["","\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"][a],...s):n.push(...s))}return n}function Qi(t){return t?{mord:"ord",mbin:"bin",mop:"op",mrel:"rel",mopen:"open",mclose:"close",mpunct:"punct",minner:"inner",spacing:"ignore",latex:"latex",composition:"inner",error:"inner",placeholder:"ord",supsub:"ignore"}[t]:void 0}function qt(t){if(t.length===0)return"ord";let e=Qi(t[0].type),r=Qi(t[t.length-1].type);return e&&e===r?e:"ord"}function Nr(t,e){if(typeof t=="string")return t;if(typeof t=="number"){Number.isFinite(t);let r=Math.ceil(100*t)/100;return r===0?"0":r.toString()+(e!=null?e:"")}return""}var y=class t{constructor(e,r){var n,o,a,s,l;if(typeof e=="number"?this.value=String.fromCodePoint(e):typeof e=="string"?this.value=e:ve(e)?this.children=e.filter(c=>c!==null):e&&e instanceof t&&(this.children=[e]),this.children)for(let c of this.children)c.parent=this;this.type=(n=r==null?void 0:r.type)!=null?n:"ignore",this.isSelected=(r==null?void 0:r.isSelected)===!0,r!=null&&r.caret&&(this.caret=r.caret),this.classes=(o=r==null?void 0:r.classes)!=null?o:"",this.isTight=(a=r==null?void 0:r.isTight)!=null?a:!1,r!=null&&r.attributes&&(this.attributes=r.attributes);let i=r==null?void 0:r.fontFamily;r!=null&&r.style&&this.value&&(i=(l=Q.getFont((s=r.mode)!=null?s:"math",this,u(m({variant:"normal"},r.style),{letterShapeStyle:r.letterShapeStyle})))!=null?l:void 0),i||(i="Main-Regular"),this._height=0,this._depth=0,this._width=0,this.hasExplicitWidth=!1,this.skew=0,this.italic=0,this.maxFontSize=0,this.scale=1,(r==null?void 0:r.maxFontSize)!==void 0&&(this.maxFontSize=r.maxFontSize),Xl(this,i)}set atomID(e){e===void 0||e.length===0||(this.id=e)}selected(e){if(this.isSelected!==e&&(this.isSelected=e,this.children))for(let r of this.children)r.selected(e)}setStyle(e,r,i){if(r===void 0)return;let n=Nr(r,i);n.length>0&&(this.cssProperties||(this.cssProperties={}),this.cssProperties[e]=n)}setTop(e){Number.isFinite(e)&&Math.abs(e)>.01&&(this.cssProperties||(this.cssProperties={}),this.cssProperties.top=Nr(e,"em"),this.height-=e,this.depth+=e)}get left(){var e;return(e=this.cssProperties)!=null&&e["margin-left"]?Number.parseFloat(this.cssProperties["margin-left"]):0}set left(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties["margin-left"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties["margin-left"]=Nr(e,"em")))}set right(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties["margin-right"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties["margin-right"]=Nr(e,"em")))}set bottom(e){Number.isFinite(e)&&(e===0?this.cssProperties&&delete this.cssProperties["margin-bottom"]:(this.cssProperties||(this.cssProperties={}),this.cssProperties["margin-bottom"]=Nr(e,"em")))}get width(){return this._width*this.scale}set width(e){this._width=e,this.hasExplicitWidth=!0}set softWidth(e){}get height(){return this._height*this.scale}set height(e){this._height=e}get depth(){return this._depth*this.scale}set depth(e){this._depth=e}wrap(e){let r=e.parent;if(!r)return this;e.isPhantom&&this.setStyle("opacity",0);let i=e.color;i&&i!==r.color&&this.setStyle("color",i);let o=e.backgroundColor;this.isSelected&&(o=R0(o)),o&&o!==r.backgroundColor&&(this.setStyle("background-color",o),this.setStyle("--bg-color",o),this.setStyle("display","inline-block"),this.setStyle("position","relative"),this.classes=this.classes?`${this.classes} ML__bg`:"ML__bg");let a=e.scalingFactor;return this.scale=a,this.skew*=a,this.italic*=a,this}toMarkup(){var c,h,d;let e=this.value?Kl(this.value):"";if(this.children)for(let f of this.children)e+=f.toMarkup();let r="";if(this.svgBody)r=T0(this.svgBody);else if(this.svgOverlay){r='',r+=e,r+="",r+='${this.svgOverlay}`}let i=[],n=this.classes.split(" ");n.push((h={latex:"ML__raw-latex",placeholder:"ML__placeholder",error:"ML__error"}[this.type])!=null?h:""),this.caret==="latex"&&n.push("ML__latex-caret"),this.isSelected&&n.push("ML__selected");let o=n.length===1?n[0]:n.filter((f,S,x)=>f.length>0&&x.indexOf(f)===S).join(" ");if(o.length>0&&i.push(`class=${cr(`"${o}"`)}`),this.id&&i.push(` data-atom-id=${cr(this.id)}`),this.cssId&&i.push(` id=${cr(`"${this.cssId.replace(/ /g,"-")}"`)}`),this.attributes&&i.push(...Object.keys(this.attributes).map(f=>`${bo(f)}=${cr(this.attributes[f])}`)),this.htmlData){let f=this.htmlData.split(",");for(let S of f){let x=S.match(/([^=]+)=(.+$)/);if(x){let w=bo(x[1]);if(w)if(w==="href"){let D=new URL(x[2]);if(D.protocol!=="http:"&&D.protocol!=="https:")throw new Error(`Invalid URL: ${x[2]}`);i.push(`href="${x[2].replace(/"/g,""")}"`)}else i.push(`data-${w}=${cr(x[2])}`)}else{let w=bo(S);w&&i.push(`data-${w} `)}}}let a=(d=this.cssProperties)!=null?d:{};this.hasExplicitWidth&&a.width===void 0&&(a.width=`${Math.ceil(this._width*100)/100}em`);let s=Object.keys(a).map(f=>`${f}:${a[f]}`);if(this.scale!==void 0&&this.scale!==1&&(e.length>0||r.length>0)&&s.push(`font-size: ${Math.ceil(this.scale*1e4)/100}%`),this.htmlStyle)for(let f of this.htmlStyle.split(";")){let S=f.match(/([^:]+):(.+$)/);if(S){let x=S[1].trim().replace(/ /g,"-");x&&s.push(`${x}:${S[2]}`)}}s.length>0&&i.push(`style=${cr(s.join(";"))}`);let l="";return i.length>0||r.length>0?l=`${e}${r}`:l=e,this.caret==="text"||this.caret==="free-text"?l+='':this.caret==="math"&&(l+=''),l}tryCoalesceWith(e){if(this.svgBody||!this.value||e.svgBody||!e.value)return!1;let r=this.children&&this.children.length>0,i=e.children&&e.children.length>0;if(r||i)return!1;if(e.cssProperties||this.cssProperties){for(let l of["border","border-left","border-right","border-right-width","left","margin","margin-left","margin-right","padding","position","width"])if(e.cssProperties&&l in e.cssProperties||this.cssProperties&&l in this.cssProperties)return!1}let n=this.cssProperties?Object.keys(this.cssProperties).length:0,o=e.cssProperties?Object.keys(e.cssProperties).length:0;if(n!==o)return!1;if(n>0){for(let l of Object.keys(this.cssProperties))if(this.cssProperties[l]!==e.cssProperties[l])return!1}let a=this.classes.trim().replace(/\s+/g," ").split(" "),s=e.classes.trim().replace(/\s+/g," ").split(" ");if(a.length!==s.length)return!1;a.sort(),s.sort();for(let[l,c]of a.entries())if(c==="ML__vertical-separator"||c!==s[l])return!1;return this.value+=e.value,this.height=Math.max(this.height,e.height),this.depth=Math.max(this.depth,e.depth),this._width=this._width+e._width,this.maxFontSize=Math.max(this.maxFontSize,e.maxFontSize),this.italic=e.italic,!0}};function xo(t){if(!t||t.length===0)return[];t[0].children=xo(t[0].children);let e=[t[0]];for(let r=1;r0){let i=-1/0,n=-1/0,o=0;for(let a of t.children)a.height>i&&(i=a.height),a.depth>n&&(n=a.depth),o=Math.max(o,(r=a.maxFontSize)!=null?r:0);t.height=i,t.depth=n,t._width=t.children.reduce((a,s)=>a+s.width,0),t.maxFontSize=o}}function Kl(t){return t.replace(/&/g,"&").replace(//g,">")}function bo(t){if(t=t.trim().replace(/ /g,"-"),t.length===0)throw new Error("Invalid empty attribute name");if(/[\x20\x09\x0a\x0c\x0d"'>/=\x00-\x1f]/.test(t))throw new Error(`Invalid attribute name "${t}"`);return t}function cr(t){if(t=t.trim(),t.startsWith('"')&&t.endsWith('"')){if(/"/.test(t.slice(1,-1)))throw new Error(`Invalid attribute value: ${t}`);return t}if(t.startsWith("'")&&t.endsWith("'")){if(/'/.test(t.slice(1,-1)))throw new Error(`Invalid attribute value: ${t}`);return t}if(t.length===0)throw new Error("Invalid empty attribute value");return`"${t.replace(/"/g,""")}"`}function Yl(t){if("individualShift"in t){let e=t.individualShift,r=e[0];if(r==null)return[null,0];let i=[r],n=-r.shift-r.box.depth,o=n;for(let a=1;a{x.softWidth=c});let h=new y(o,{classes:"ML__vlist"});if(h.softWidth=c,h.height=s,h.setStyle("height",s,"em"),a>=0)return[[new y(h,{classes:"ML__vlist-r"})],s,-a];let d=new y(new y(null),{classes:"ML__vlist"});d.height=-a,d.setStyle("height",-a,"em");let f=new y(8203,{classes:"ML__vlist-s",maxFontSize:0});return f.softWidth=0,f.height=0,f.depth=0,[[new y([h,f],{classes:"ML__vlist-r"}),new y(d,{classes:"ML__vlist-r"})],s,-a]}var J=class extends y{constructor(e,r){var a;let[i,n,o]=Ql(e);super(i.length===1?i[0]:i,{type:r==null?void 0:r.type,classes:((a=r==null?void 0:r.classes)!=null?a:"")+" ML__vlist-t"+(i.length===2?" ML__vlist-t2":"")}),this.height=n,this.depth=o,this.softWidth=i.reduce((s,l)=>Math.max(s,l.width),0)}};function X0(t,e){var c,h,d,f,S;let r=t.metrics,i=new y(e.base),n=(c=e.baseShift)!=null?c:0,o=(h=e.slant)!=null?h:0,a=0,s=0;e.above&&(a=(d=e.aboveShift)!=null?d:Math.max(r.bigOpSpacing1,r.bigOpSpacing3-e.above.depth)),e.below&&(s=(f=e.belowShift)!=null?f:Math.max(r.bigOpSpacing2,r.bigOpSpacing4-e.below.height));let l=null;if(e.below&&e.above){let x=r.bigOpSpacing5+e.below.height+e.below.depth+s+i.depth+n;l=new J({bottom:x,children:[r.bigOpSpacing5,{box:e.below,marginLeft:-o,classes:["ML__center"]},s,{box:i,classes:["ML__center"]},a,{box:e.above,marginLeft:o,classes:["ML__center"]},r.bigOpSpacing5]}).wrap(t)}else if(e.below&&!e.above)l=new J({top:i.height-n,children:[r.bigOpSpacing5,{box:e.below,marginLeft:-o,classes:["ML__center"]},s,{box:i,classes:["ML__center"]}]}).wrap(t);else if(!e.below&&e.above){let x=i.depth+n;l=new J({bottom:x,children:[{box:i,classes:["ML__center"]},a,{box:e.above,marginLeft:o,classes:["ML__center"]},r.bigOpSpacing5]}).wrap(t)}else{let x=i.depth+n;l=new J({bottom:x,children:[{box:i},r.bigOpSpacing5]}).wrap(t)}return new y(l,{type:(S=e.type)!=null?S:"op"})}var tn=7,Jr=6,Hr=5,kt=4,It=3,Se=2,_t=1,me=0,Ye=class{constructor(e,r,i){this.id=e,this.sizeDelta=r,this.cramped=i;let n={"-4":2,"-3":1,0:0}[r];this.metrics=Object.keys(to).reduce((o,a)=>u(m({},o),{[a]:to[a][n]}),{})}getFontSize(e){return Math.max(1,e+this.sizeDelta)}get sup(){return Fe[[me,_t,me,_t,Se,It,Se,It][this.id]]}get sub(){return Fe[[me,me,me,me,Se,Se,Se,Se][this.id]]}get fracNum(){return Fe[[me,_t,me,_t,Se,It,kt,Hr][this.id]]}get fracDen(){return Fe[[me,me,me,me,Se,Se,kt,kt][this.id]]}get cramp(){return Fe[[me,me,Se,Se,kt,kt,Jr,Jr][this.id]]}get isTight(){return this.sizeDelta<0}},Vr={7:new Ye(tn,0,!1),6:new Ye(Jr,0,!0),5:new Ye(Hr,0,!1),4:new Ye(kt,0,!0),3:new Ye(It,-3,!1),2:new Ye(Se,-3,!0),1:new Ye(_t,-4,!1),0:new Ye(me,-4,!0)},Fe=u(m({},Vr),{displaystyle:Vr[tn],textstyle:Vr[Hr],scriptstyle:Vr[It],scriptscriptstyle:Vr[_t]});function So(t,e){var i;if(!t)return 0;let r={pt:1,mm:7227/2540,cm:7227/254,ex:35271/8192,px:3/4,em:Xe,bp:803/800,dd:1238/1157,pc:12,in:72.27,mu:10/18}[(i=t.unit)!=null?i:"pt"];if(Number.isFinite(e)){let n=10**e;return Math.round(t.dimension/Xe*r*n)/n}return t.dimension*r}function rn(t,e){if(t===null)return 0;let r=So(t)/Xe;if(Number.isFinite(e)){let i=10**e;return Math.round(r*i)/i}return r}function vo(t){var e;return`${t.dimension}${(e=t.unit)!=null?e:"pt"}`}function ec(t){let e=vo(t.glue);return t.grow&&t.grow.dimension!==0&&(e+=` plus ${vo(t.grow)}`),t.shrink&&t.shrink.dimension!==0&&(e+=` minus ${vo(t.shrink)}`),e}function re(t){var r,i;if(t==null)return null;let e="";if("dimension"in t&&(e=`${t.dimension}${(r=t.unit)!=null?r:"pt"}`),"glue"in t&&(e=ec(t)),"number"in t)if(!("base"in t)||t.base==="decimal")e=Number(t.number).toString();else if(t.base==="alpha")e=`\`${String.fromCodePoint(t.number)}`;else{let n=Math.round(t.number)>>>0;t.base==="hexadecimal"?(e=Number(n).toString(16).toUpperCase(),n<=255?e=e.padStart(2,"0"):n<=65535?e=e.padStart(4,"0"):n<=16777215?e=e.padStart(6,"0"):e=e.padStart(8,"0"),e=`"${e}`):t.base==="octal"&&(e=Number(n).toString(8),n<=63?e=e.padStart(2,"0"):n<=30583?e=e.padStart(4,"0"):e=e.padStart(8,"0"),e=`'${e}`)}return"register"in t&&("factor"in t&&(t.factor===-1?e="-":t.factor!==1&&(e=Number(t.factor).toString())),"global"in t&&t.global&&(e+="\\global"),e+=`\\${t.register}`),"string"in t&&(e=t.string),(i=t.relax)!=null&&i&&(e+="\\relax"),e}function Pe(t,e){return t==null?null:"number"in t?u(m({},t),{number:t.number*e}):"register"in t?"factor"in t&&t.factor?u(m({},t),{factor:t.factor*e}):u(m({},t),{factor:e}):"dimension"in t?u(m({},t),{dimension:t.dimension*e}):"glue"in t?t.shrink&&t.grow?{glue:Pe(t.glue,e),shrink:Pe(t.shrink,e),grow:Pe(t.grow,e)}:t.shrink?{glue:Pe(t.glue,e),shrink:Pe(t.shrink,e)}:t.grow?{glue:Pe(t.glue,e),grow:Pe(t.grow,e)}:{glue:Pe(t.glue,e)}:null}var K0={en:{"keyboard.tooltip.symbols":"Symbols","keyboard.tooltip.greek":"Greek Letters","keyboard.tooltip.numeric":"Numeric","keyboard.tooltip.alphabetic":"Roman Letters","tooltip.copy to clipboard":"Copy to Clipboard","tooltip.cut to clipboard":"Cut to Clipboard","tooltip.paste from clipboard":"Paste from Clipboard","tooltip.redo":"Redo","tooltip.toggle virtual keyboard":"Toggle Virtual Keyboard","tooltip.menu":"Menu","tooltip.undo":"Undo","menu.borders":"Borders","menu.insert matrix":"Insert Matrix","menu.array.add row above":"Add Row Before","menu.array.add row below":"Add Row After","menu.array.add column after":"Add Column After","menu.array.add column before":"Add Column Before","menu.array.delete row":"Delete Row","menu.array.delete rows":"Delete Selected Rows","menu.array.delete column":"Delete Column","menu.array.delete columns":"Delete Selected Columns","menu.mode":"Mode","menu.mode-math":"Math","menu.mode-text":"Text","menu.mode-latex":"LaTeX","menu.insert":"Insert","menu.insert.abs":"Absolute Value","menu.insert.abs-template":"\\left|x\\right|","menu.insert.nth-root":"nth Root","menu.insert.nth-root-template":"\\sqrt[n]{x}","menu.insert.log-base":"Logarithm base a","menu.insert.log-base-template":"\\log_a(x)","menu.insert.heading-calculus":"Calculus","menu.insert.derivative":"Derivative","menu.insert.derivative-template":"\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}","menu.insert.nth-derivative":"nth derivative","menu.insert.nth-derivative-template":"\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}","menu.insert.integral":"Integral","menu.insert.integral-template":"$\\int_a^b f(x)\\,\\mathrm{d}x$","menu.insert.sum":"Sum","menu.insert.sum-template":"$\\sum_{i=1}^n x_i$","menu.insert.product":"Product","menu.insert.product-template":"\\prod_{i=1}^n x_i","menu.insert.heading-complex-numbers":"Complex Numbers","menu.insert.modulus":"Modulus","menu.insert.modulus-template":"\\lvert z \\rvert","menu.insert.argument":"Argument","menu.insert.argument-template":"\\arg(z)","menu.insert.real-part":"Real Part","menu.insert.real-part-template":"\\Re(z)","menu.insert.imaginary-part":"Imaginary Part","menu.insert.imaginary-part-template":"\\Im(z)","menu.insert.conjugate":"Conjugate","menu.insert.conjugate-template":"\\overline{z}","tooltip.blackboard":"Blackboard","tooltip.bold":"Bold","tooltip.italic":"Italic","tooltip.fraktur":"Fraktur","tooltip.script":"Script","tooltip.caligraphic":"Caligraphic","tooltip.typewriter":"Typewriter","tooltip.roman-upright":"Roman Upright","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Font Style","menu.accent":"Accent","menu.decoration":"Decoration","menu.color":"Color","menu.background-color":"Background","menu.evaluate":"Evaluate","menu.simplify":"Simplify","menu.solve":"Solve","menu.solve-for":"Solve for %@","menu.cut":"Cut","menu.copy":"Copy","menu.copy-as-latex":"Copy as LaTeX","menu.copy-as-typst":"Copy as Typst","menu.copy-as-ascii-math":"Copy as ASCII Math","menu.copy-as-mathml":"Copy as MathML","menu.paste":"Paste","menu.select-all":"Select All","color.red":"Red","color.orange":"Orange","color.yellow":"Yellow","color.lime":"Lime","color.green":"Green","color.teal":"Teal","color.cyan":"Cyan","color.blue":"Blue","color.indigo":"Indigo","color.purple":"Purple","color.magenta":"Magenta","color.black":"Black","color.dark-grey":"Dark Grey","color.grey":"Grey","color.light-grey":"Light Grey","color.white":"White"},ar:{"keyboard.tooltip.symbols":"\u062D\u0631\u0641 \u0627\u0648 \u0631\u0645\u0632","keyboard.tooltip.greek":"\u062D\u0631\u0648\u0641 \u064A\u0648\u0646\u0627\u0646\u064A\u0629","keyboard.tooltip.numeric":"\u0627\u0644\u0631\u0642\u0645\u064A\u0629","keyboard.tooltip.alphabetic":"\u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u0631\u0641 \u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064A\u0629","tooltip.copy to clipboard":"\u0646\u0633\u062E \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629","tooltip.cut to clipboard":"\u0642\u0635 \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629","tooltip.paste from clipboard":"\u0644\u0635\u0642 \u0645\u0646 \u0627\u0644\u062D\u0627\u0641\u0638\u0629","tooltip.redo":"\u0627\u0644\u0625\u0639\u0627\u062F\u0629","tooltip.toggle virtual keyboard":"\u062A\u0628\u062F\u064A\u0644 \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0625\u0641\u062A\u0631\u0627\u0636\u064A\u0629","tooltip.undo":"\u0625\u0644\u063A\u0627\u0621","menu.insert matrix":"\u0623\u062F\u062E\u0644 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629","menu.borders":"\u0645\u062D\u062F\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629","menu.array.add row above":"\u0623\u0636\u0641 \u0635\u0641\u064B\u0627 \u0628\u0639\u062F \u0630\u0644\u0643","menu.array.add row below":"\u0623\u0636\u0641 \u0627\u0644\u0635\u0641 \u0642\u0628\u0644","menu.array.add column after":"\u0623\u0636\u0641 \u0627\u0644\u0639\u0645\u0648\u062F \u0628\u0639\u062F \u0630\u0644\u0643","menu.array.add column before":"\u0623\u0636\u0641 \u0627\u0644\u0639\u0645\u0648\u062F \u0642\u0628\u0644","menu.array.delete row":"\u0627\u062D\u0630\u0641 \u0635\u0641","menu.array.delete rows":"\u062D\u0630\u0641 \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0645\u062D\u062F\u062F\u0629","menu.array.delete column":"\u062D\u0630\u0641 \u0627\u0644\u0639\u0645\u0648\u062F","menu.array.delete columns":"\u062D\u0630\u0641 \u0627\u0644\u0623\u0639\u0645\u062F\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629","menu.mode":"\u0648\u0636\u0639","menu.mode-math":"\u0631\u064A\u0627\u0636\u064A\u0627\u062A","menu.mode-text":"\u0646\u0635","menu.mode-latex":"\u0644\u0627\u062A\u0643\u0633","tooltip.blackboard":"\u0633\u0628\u0648\u0631\u0629","tooltip.bold":"\u0639\u0631\u064A\u0636","tooltip.italic":"\u0645\u0627\u0626\u0644","tooltip.fraktur":"\u0641\u0631\u0627\u0643\u062A\u0648\u0631","tooltip.script":"\u0633\u0643\u0631\u064A\u0628\u062A","tooltip.caligraphic":"\u0643\u0627\u0644\u064A\u062C\u0631\u0627\u0641\u064A\u0643","tooltip.typewriter":"\u0622\u0644\u0629 \u0643\u0627\u062A\u0628\u0629","tooltip.roman-upright":"\u0631\u0648\u0645\u0627\u0646\u064A \u0645\u0633\u062A\u0642\u064A\u0645","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u0646\u0645\u0637 \u0627\u0644\u062E\u0637","menu.accent":"\u062A\u0634\u0643\u064A\u0644","menu.decoration":"\u0632\u062E\u0631\u0641\u0629","menu.color":"\u0644\u0648\u0646","menu.background-color":"\u0627\u0644\u062E\u0644\u0641\u064A\u0629","menu.evaluate":"\u062A\u0642\u064A\u064A\u0645","menu.simplify":"\u062A\u0628\u0633\u064A\u0637","menu.solve":"\u062D\u0644","menu.solve-for":"\u062D\u0644 \u0644\u0640 %@","menu.cut":"\u0642\u0635","menu.copy":"\u0646\u0633\u062E","menu.copy-as-latex":"\u0646\u0633\u062E \u0643\u0640 LaTeX","menu.copy-as-ascii-math":"\u0646\u0633\u062E \u0643\u0640 ASCII Math","menu.copy-as-mathml":"\u0646\u0633\u062E \u0643\u0640 MathML","menu.paste":"\u0644\u0635\u0642","menu.select-all":"\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644","color.red":"\u0623\u062D\u0645\u0631","color.orange":"\u0628\u0631\u062A\u0642\u0627\u0644\u064A","color.yellow":"\u0623\u0635\u0641\u0631","color.lime":"\u0644\u064A\u0645\u0648\u0646\u064A","color.green":"\u0623\u062E\u0636\u0631","color.teal":"\u0633\u0645\u0627\u0648\u064A","color.cyan":"\u0633\u0645\u0627\u0648\u064A \u0641\u0627\u062A\u062D","color.blue":"\u0623\u0632\u0631\u0642","color.indigo":"\u0646\u064A\u0644\u064A","color.purple":"\u0628\u0646\u0641\u0633\u062C\u064A","color.magenta":"\u0623\u0631\u062C\u0648\u0627\u0646\u064A","color.black":"\u0623\u0633\u0648\u062F","color.dark-grey":"\u0631\u0645\u0627\u062F\u064A \u063A\u0627\u0645\u0642","color.grey":"\u0631\u0645\u0627\u062F\u064A","color.light-grey":"\u0631\u0645\u0627\u062F\u064A \u0641\u0627\u062A\u062D","color.white":"\u0623\u0628\u064A\u0636"},de:{"keyboard.tooltip.symbols":"Symbole","keyboard.tooltip.greek":"Griechische Buchstaben","keyboard.tooltip.numeric":"Numerisch","keyboard.tooltip.alphabetic":"R\xF6mische Buchstaben","tooltip.copy to clipboard":"In die Zwischenablage kopieren","tooltip.redo":"Wiederholen","tooltip.toggle virtual keyboard":"Virtuelle Tastatur umschalten","tooltip.undo":"Widerrufen","menu.insert matrix":"Matrix einf\xFCgen","menu.borders":"Matrixtrennzeichen","menu.array.add row above":"Zeile hinzuf\xFCgen nach","menu.array.add row below":"Zeile hinzuf\xFCgen vor","menu.array.add column after":"Spalte hinzuf\xFCgen nach","menu.array.add column before":"Spalte hinzuf\xFCgen vor","menu.array.delete row":"Zeile l\xF6schen","menu.array.delete rows":"Ausgew\xE4hlte Zeilen l\xF6schen","menu.array.delete column":"Spalte l\xF6schen","menu.array.delete columns":"Ausgew\xE4hlte Spalten l\xF6schen","menu.mode":"Modus","menu.mode-math":"Mathematik","menu.mode-text":"Text","menu.mode-latex":"LaTeX","tooltip.blackboard":"Tafel","tooltip.bold":"Fett","tooltip.italic":"Kursiv","tooltip.fraktur":"Fraktur","tooltip.script":"Skript","tooltip.caligraphic":"Kalligraphie","tooltip.typewriter":"Schreibmaschine","tooltip.roman-upright":"R\xF6misch aufrecht","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Schriftstil","menu.accent":"Akzent","menu.decoration":"Dekoration","menu.color":"Farbe","menu.background-color":"Hintergrund","menu.evaluate":"Auswerten","menu.simplify":"Vereinfachen","menu.solve":"L\xF6sen","menu.solve-for":"L\xF6sen f\xFCr %@","menu.cut":"Ausschneiden","menu.copy":"Kopieren","menu.copy-as-latex":"Als LaTeX kopieren","menu.copy-as-ascii-math":"Als ASCII Math kopieren","menu.copy-as-mathml":"Als MathML kopieren","menu.paste":"Einf\xFCgen","menu.select-all":"Alles ausw\xE4hlen","color.red":"Rot","color.orange":"Orange","color.yellow":"Gelb","color.lime":"Limette","color.green":"Gr\xFCn","color.teal":"Blaugr\xFCn","color.cyan":"Cyan","color.blue":"Blau","color.indigo":"Indigo","color.purple":"Lila","color.magenta":"Magenta","color.black":"Schwarz","color.dark-grey":"Dunkelgrau","color.grey":"Grau","color.light-grey":"Hellgrau","color.white":"Wei\xDF"},el:{"keyboard.tooltip.symbols":"\u03C3\u03CD\u03BC\u03B2\u03BF\u03BB\u03B1","keyboard.tooltip.greek":"\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC \u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1","keyboard.tooltip.numeric":"\u0391\u03C1\u03B9\u03B8\u03BC\u03B7\u03C4\u03B9\u03BA\u03CC\u03C2","keyboard.tooltip.alphabetic":"\u03A1\u03C9\u03BC\u03B1\u03CA\u03BA\u03AC \u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1","tooltip.copy to clipboard":"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03BF \u03C0\u03C1\u03CC\u03C7\u03B5\u03B9\u03C1\u03BF","tooltip.redo":"\u039E\u03B1\u03BD\u03B1\u03BA\u03AC\u03BD\u03C9","tooltip.toggle virtual keyboard":"\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03BA\u03BF\u03CD \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5","tooltip.undo":"\u039E\u03B5\u03BA\u03AC\u03BD\u03C9","menu.insert matrix":"\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BC\u03AE\u03C4\u03C1\u03B1","menu.borders":"\u039F\u03C1\u03B9\u03BF\u03B8\u03AD\u03C4\u03B5\u03C2 \u03BC\u03AE\u03C4\u03C1\u03B1","menu.array.add row above":"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03BC\u03B5\u03C4\u03AC","menu.array.add row below":"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03C0\u03C1\u03B9\u03BD","menu.array.add column after":"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 \u03BC\u03B5\u03C4\u03AC","menu.array.add column before":"\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 \u03C0\u03C1\u03B9\u03BD","menu.array.delete row":"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2","menu.array.delete rows":"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD","menu.array.delete column":"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2","menu.array.delete columns":"\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03C3\u03C4\u03B7\u03BB\u03CE\u03BD","menu.mode":"\u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1","menu.mode-math":"\u039C\u03B1\u03B8\u03B7\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC","menu.mode-text":"\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF","menu.mode-latex":"LaTeX","tooltip.blackboard":"\u03A0\u03AF\u03BD\u03B1\u03BA\u03B1\u03C2","tooltip.bold":"\u0388\u03BD\u03C4\u03BF\u03BD\u03B7","tooltip.italic":"\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1","tooltip.fraktur":"\u03A6\u03C1\u03AC\u03BA\u03C4\u03BF\u03C5\u03C1","tooltip.script":"\u03A3\u03B5\u03BD\u03AC\u03C1\u03B9\u03BF","tooltip.caligraphic":"\u039A\u03B1\u03BB\u03BB\u03B9\u03B3\u03C1\u03B1\u03C6\u03B9\u03BA\u03AE","tooltip.typewriter":"\u039C\u03B7\u03C7\u03B1\u03BD\u03AE \u03B3\u03C1\u03B1\u03C6\u03AE\u03C2","tooltip.roman-upright":"\u03A1\u03C9\u03BC\u03B1\u03CA\u03BA\u03CC \u039A\u03B1\u03C4\u03B1\u03BA\u03CC\u03C1\u03C5\u03C6\u03BF","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u03A3\u03C4\u03C5\u03BB \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2","menu.accent":"\u03A4\u03CC\u03BD\u03BF\u03C2","menu.decoration":"\u0394\u03B9\u03B1\u03BA\u03CC\u03C3\u03BC\u03B7\u03C3\u03B7","menu.color":"\u03A7\u03C1\u03CE\u03BC\u03B1","menu.background-color":"\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5","menu.evaluate":"\u0391\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7","menu.simplify":"\u0391\u03C0\u03BB\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7","menu.solve":"\u039B\u03CD\u03C3\u03B7","menu.solve-for":"\u039B\u03CD\u03C3\u03B7 \u03B3\u03B9\u03B1 %@","menu.cut":"\u0391\u03C0\u03BF\u03BA\u03BF\u03C0\u03AE","menu.copy":"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE","menu.copy-as-latex":"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 LaTeX","menu.copy-as-ascii-math":"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 ASCII Math","menu.copy-as-mathml":"\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 MathML","menu.paste":"\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7","menu.select-all":"\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03CC\u03BB\u03C9\u03BD","color.red":"\u039A\u03CC\u03BA\u03BA\u03B9\u03BD\u03BF","color.orange":"\u03A0\u03BF\u03C1\u03C4\u03BF\u03BA\u03B1\u03BB\u03AF","color.yellow":"\u039A\u03AF\u03C4\u03C1\u03B9\u03BD\u03BF","color.lime":"\u039B\u03B1\u03C7\u03B1\u03BD\u03AF","color.green":"\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF","color.teal":"\u039A\u03C5\u03B1\u03BD\u03CC","color.cyan":"\u0393\u03B1\u03BB\u03AC\u03B6\u03B9\u03BF","color.blue":"\u039C\u03C0\u03BB\u03B5","color.indigo":"\u0399\u03BD\u03B4\u03B9\u03BA\u03CC","color.purple":"\u039C\u03C9\u03B2","color.magenta":"\u039C\u03B1\u03C4\u03B6\u03AD\u03BD\u03C4\u03B1","color.black":"\u039C\u03B1\u03CD\u03C1\u03BF","color.dark-grey":"\u03A3\u03BA\u03BF\u03CD\u03C1\u03BF \u0393\u03BA\u03C1\u03B9","color.grey":"\u0393\u03BA\u03C1\u03B9","color.light-grey":"\u0391\u03BD\u03BF\u03B9\u03C7\u03C4\u03CC \u0393\u03BA\u03C1\u03B9","color.white":"\u039B\u03B5\u03C5\u03BA\u03CC"},es:{"keyboard.tooltip.symbols":"S\xEDmbolos","keyboard.tooltip.greek":"Letras griegas","keyboard.tooltip.numeric":"Num\xE9rico","keyboard.tooltip.alphabetic":"Letras romanas","tooltip.copy to clipboard":"Copiar al portapapeles","tooltip.redo":"Rehacer","tooltip.toggle virtual keyboard":"Alternar teclado virtual","tooltip.undo":"Deshacer","menu.insert matrix":"A\xF1adir Matriz","menu.borders":"Delimitadores de Matriz","menu.array.add row above":"A\xF1adir L\xEDnea Antes","menu.array.add row below":"A\xF1adir L\xEDnea Despues","menu.array.add column after":"A\xF1adir Columna Despues","menu.array.add column before":"A\xF1adir Columna Antes","menu.array.delete row":"Borrar L\xEDnea","menu.array.delete rows":"Borrar L\xEDneas Seleccionadas","menu.array.delete column":"Borrar Columna","menu.array.delete columns":"Borrar Columnas Seleccionadas","menu.mode":"Modo","menu.mode-math":"Matem\xE1ticas","menu.mode-text":"Texto","menu.mode-latex":"LaTeX","tooltip.blackboard":"Pizarra","tooltip.bold":"Negrita","tooltip.italic":"Cursiva","tooltip.fraktur":"Fraktur","tooltip.script":"Script","tooltip.caligraphic":"Caligr\xE1fico","tooltip.typewriter":"M\xE1quina de escribir","tooltip.roman-upright":"Romano Vertical","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Estilo de fuente","menu.accent":"Acento","menu.decoration":"Decoraci\xF3n","menu.color":"Color","menu.background-color":"Fondo","menu.evaluate":"Evaluar","menu.simplify":"Simplificar","menu.solve":"Resolver","menu.solve-for":"Resolver para %@","menu.cut":"Cortar","menu.copy":"Copiar","menu.copy-as-latex":"Copiar como LaTeX","menu.copy-as-ascii-math":"Copiar como ASCII Math","menu.copy-as-mathml":"Copiar como MathML","menu.paste":"Pegar","menu.select-all":"Seleccionar todo","color.red":"Rojo","color.orange":"Naranja","color.yellow":"Amarillo","color.lime":"Lima","color.green":"Verde","color.teal":"Verde azulado","color.cyan":"Cian","color.blue":"Azul","color.indigo":"\xCDndigo","color.purple":"Morado","color.magenta":"Magenta","color.black":"Negro","color.dark-grey":"Gris oscuro","color.grey":"Gris","color.light-grey":"Gris claro","color.white":"Blanco"},fr:{"keyboard.tooltip.symbols":"Symboles","keyboard.tooltip.greek":"Lettres grecques","keyboard.tooltip.numeric":"Num\xE9rique","keyboard.tooltip.alphabetic":"Lettres romaines","tooltip.menu":"Menu","tooltip.copy to clipboard":"Copier dans le presse-papiers","tooltip.redo":"R\xE9tablir","tooltip.toggle virtual keyboard":"Afficher/Masquer le clavier virtuel","tooltip.undo":"Annuler","menu.insert matrix":"Ins\xE9rer une Matrice","menu.borders":"Bords","menu.array.add row above":"Ajouter une Ligne Avant","menu.array.add row below":"Ajouter une Ligne Apr\xE8s","menu.array.add column before":"Ajouter une Colonne Avant","menu.array.add column after":"Ajouter une Colonne Apr\xE8s","menu.array.delete row":"Enlever une Ligne","menu.array.delete rows":"Enlever les Lignes S\xE9lection\xE9es","menu.array.delete column":"Enlever une Colone","menu.array.delete columns":"Enlever les Colonnes S\xE9lection\xE9es","menu.mode":"Mode","menu.mode-math":"Math","menu.mode-text":"Text","menu.mode-latex":"LaTeX","tooltip.blackboard":"Tableau noir","tooltip.bold":"Gras","tooltip.italic":"Italique","tooltip.fraktur":"Fraktur","tooltip.script":"Script","tooltip.caligraphic":"Calligraphique","tooltip.typewriter":"Machine \xE0 \xE9crire","tooltip.roman-upright":"Romain droit","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Style de police","menu.accent":"Accent","menu.decoration":"D\xE9coration","menu.color":"Couleur","menu.background-color":"Arri\xE8re-plan","menu.evaluate":"\xC9valuer","menu.simplify":"Simplifier","menu.solve":"R\xE9soudre","menu.solve-for":"R\xE9soudre pour %@","menu.cut":"Couper","menu.copy":"Copier","menu.copy-as-latex":"Copier en LaTeX","menu.copy-as-ascii-math":"Copier en ASCII Math","menu.copy-as-mathml":"Copier en MathML","menu.paste":"Coller","menu.select-all":"S\xE9lectionner tout","color.red":"Rouge","color.orange":"Orange","color.yellow":"Jaune","color.lime":"Citron vert","color.green":"Vert","color.teal":"Turquoise","color.cyan":"Cyan","color.blue":"Bleu","color.indigo":"Indigo","color.purple":"Violet","color.magenta":"Magenta","color.black":"Noir","color.dark-grey":"Gris fonc\xE9","color.grey":"Gris","color.light-grey":"Gris clair","color.white":"Blanc"},he:{"keyboard.tooltip.symbols":"\u05E1\u05DE\u05DC\u05D9\u05DD","keyboard.tooltip.greek":"\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05D9\u05D5\u05D5\u05E0\u05D9\u05D5\u05EA","keyboard.tooltip.numeric":"\u05DE\u05E1\u05E4\u05E8\u05D9","keyboard.tooltip.alphabetic":"\u05DE\u05DB\u05EA\u05D1\u05D9\u05DD \u05E8\u05D5\u05DE\u05D9\u05D9\u05DD","tooltip.copy to clipboard":"\u05D4\u05E2\u05EA\u05E7 \u05DC\u05DC\u05D5\u05D7","tooltip.redo":"\u05DC\u05B7\u05E2\u05B2\u05E9\u05C2\u05D5\u05B9\u05EA \u05E9\u05C1\u05D5\u05BC\u05D1","tooltip.toggle virtual keyboard":"\u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA \u05D4\u05DE\u05E7\u05DC\u05D3\u05EA \u05D4\u05D5\u05D5\u05D9\u05E8\u05D8\u05D5\u05D0\u05DC\u05D9\u05EA","tooltip.undo":"\u05DC\u05D1\u05D8\u05DC","menu.insert matrix":"\u05D4\u05DB\u05E0\u05E1 \u05DE\u05D8\u05E8\u05D9\u05E7\u05E1","menu.borders":"\u05DE\u05E4\u05E8\u05D9\u05D3\u05D9 \u05DE\u05D8\u05E8\u05D9\u05E7\u05E1","menu.array.add row above":"\u05D4\u05D5\u05E1\u05E3 \u05E9\u05D5\u05E8\u05D4 \u05D0\u05D7\u05E8\u05D9","menu.array.add row below":"\u05D4\u05D5\u05E1\u05E3 \u05E9\u05D5\u05E8\u05D4 \u05DC\u05E4\u05E0\u05D9","menu.array.add column after":"\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3\u05D4 \u05D0\u05D7\u05E8\u05D9","menu.array.add column before":"\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3\u05D4 \u05DC\u05E4\u05E0\u05D9","menu.array.delete row":"\u05DE\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D4","menu.array.delete rows":"\u05DE\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D5\u05EA \u05E9\u05E0\u05D1\u05D7\u05E8\u05D5","menu.array.delete column":"\u05DE\u05D7\u05E7 \u05E2\u05DE\u05D5\u05D3\u05D4","menu.array.delete columns":"\u05DE\u05D7\u05E7 \u05E2\u05DE\u05D5\u05D3\u05D5\u05EA \u05E9\u05E0\u05D1\u05D7\u05E8\u05D5","menu.mode":"\u05DE\u05E6\u05D1","menu.mode-math":"\u05DE\u05EA\u05DE\u05D8\u05D9\u05E7\u05D4","menu.mode-text":"\u05D8\u05E7\u05E1\u05D8","menu.mode-latex":"LaTeX","tooltip.blackboard":"\u05DC\u05D5\u05D7 \u05E9\u05D7\u05D5\u05E8","tooltip.bold":"\u05DE\u05D5\u05D3\u05D2\u05E9","tooltip.italic":"\u05E0\u05D8\u05D5\u05D9","tooltip.fraktur":"\u05E4\u05E8\u05E7\u05D8\u05D5\u05E8","tooltip.script":"\u05DB\u05EA\u05D1","tooltip.caligraphic":"\u05E7\u05DC\u05D9\u05D2\u05E8\u05E4\u05D9","tooltip.typewriter":"\u05DE\u05DB\u05D5\u05E0\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4","tooltip.roman-upright":"\u05E8\u05D5\u05DE\u05D9 \u05D9\u05E9\u05E8","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u05E1\u05D2\u05E0\u05D5\u05DF \u05D2\u05D5\u05E4\u05DF","menu.accent":"\u05E6\u05DC\u05D9\u05DC","menu.decoration":"\u05E7\u05D9\u05E9\u05D5\u05D8","menu.color":"\u05E6\u05D1\u05E2","menu.background-color":"\u05E8\u05E7\u05E2","menu.evaluate":"\u05D7\u05E9\u05D1","menu.simplify":"\u05E4\u05E9\u05D8","menu.solve":"\u05E4\u05EA\u05D5\u05E8","menu.solve-for":"\u05E4\u05EA\u05D5\u05E8 \u05E2\u05D1\u05D5\u05E8 %@","menu.cut":"\u05D2\u05D6\u05D5\u05E8","menu.copy":"\u05D4\u05E2\u05EA\u05E7","menu.copy-as-latex":"\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BELaTeX","menu.copy-as-ascii-math":"\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BEASCII Math","menu.copy-as-mathml":"\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BEMathML","menu.paste":"\u05D4\u05D3\u05D1\u05E7","menu.select-all":"\u05D1\u05D7\u05E8 \u05D4\u05DB\u05DC","color.red":"\u05D0\u05D3\u05D5\u05DD","color.orange":"\u05DB\u05EA\u05D5\u05DD","color.yellow":"\u05E6\u05D4\u05D5\u05D1","color.lime":"\u05D9\u05E8\u05D5\u05E7 \u05DC\u05D9\u05D9\u05DD","color.green":"\u05D9\u05E8\u05D5\u05E7","color.teal":"\u05D8\u05D9\u05DC","color.cyan":"\u05E6\u05D9\u05D0\u05DF","color.blue":"\u05DB\u05D7\u05D5\u05DC","color.indigo":"\u05D0\u05D9\u05E0\u05D3\u05D9\u05D2\u05D5","color.purple":"\u05E1\u05D2\u05D5\u05DC","color.magenta":"\u05DE\u05D2\u05E0\u05D8\u05D4","color.black":"\u05E9\u05D7\u05D5\u05E8","color.dark-grey":"\u05D0\u05E4\u05D5\u05E8 \u05DB\u05D4\u05D4","color.grey":"\u05D0\u05E4\u05D5\u05E8","color.light-grey":"\u05D0\u05E4\u05D5\u05E8 \u05D1\u05D4\u05D9\u05E8","color.white":"\u05DC\u05D1\u05DF"},it:{"keyboard.tooltip.symbols":"Simboli","keyboard.tooltip.greek":"Lettere greche","keyboard.tooltip.numeric":"Numerico","keyboard.tooltip.alphabetic":"Lettere romane","tooltip.copy to clipboard":"Copia negli appunti","tooltip.cut to clipboard":"Taglia negli appunti","tooltip.paste from clipboard":"Incolla dagli appunti","tooltip.redo":"Ripeti","tooltip.toggle virtual keyboard":"Attiva/disattiva tastiera virtuale","tooltip.menu":"Menu","tooltip.undo":"Annulla","menu.borders":"Delimitatori","menu.insert matrix":"Inserisci matrice","menu.array.add row above":"Aggiungi riga sopra","menu.array.add row below":"Aggiungi riga sotto","menu.array.add column after":"Aggiungi colonna dopo","menu.array.add column before":"Aggiungi colonna prima","menu.array.delete row":"Elimina riga","menu.array.delete rows":"Elimina righe selezionate","menu.array.delete column":"Elimina colonna","menu.array.delete columns":"Elimina colonne selezionate","menu.mode":"Modalit\xE0","menu.mode-math":"Matematica","menu.mode-text":"Testo","menu.mode-latex":"LaTeX","menu.insert":"Inserisci","menu.insert.abs":"Valore assoluto","menu.insert.abs-template":"\\left|x\\right|","menu.insert.nth-root":"Radice n-esima","menu.insert.nth-root-template":"\\sqrt[n]{x}","menu.insert.log-base":"Logaritmo in base a","menu.insert.log-base-template":"\\log_a(x)","menu.insert.heading-calculus":"Calcolo","menu.insert.derivative":"Derivata","menu.insert.derivative-template":"\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}","menu.insert.nth-derivative":"Derivata n-esima","menu.insert.nth-derivative-template":"\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}","menu.insert.integral":"Integrale","menu.insert.integral-template":"$\\int_a^b f(x)\\,\\mathrm{d}x$","menu.insert.sum":"Somma","menu.insert.sum-template":"$\\sum_{i=1}^n x_i$","menu.insert.product":"Prodotto","menu.insert.product-template":"\\prod_{i=1}^n x_i","menu.insert.heading-complex-numbers":"Numeri complessi","menu.insert.modulus":"Modulo","menu.insert.modulus-template":"\\lvert z \\rvert","menu.insert.argument":"Argomento","menu.insert.argument-template":"\\arg(z)","menu.insert.real-part":"Parte reale","menu.insert.real-part-template":"\\Re(z)","menu.insert.imaginary-part":"Parte immaginaria","menu.insert.imaginary-part-template":"\\Im(z)","menu.insert.conjugate":"Coniugato","menu.insert.conjugate-template":"\\overline{z}","tooltip.blackboard":"Lavagna","tooltip.bold":"Grassetto","tooltip.italic":"Corsivo","tooltip.fraktur":"Fraktur","tooltip.script":"Script","tooltip.caligraphic":"Calligrafico","tooltip.typewriter":"Macchina da scrivere","tooltip.roman-upright":"Romano diritto","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Stile carattere","menu.accent":"Accento","menu.decoration":"Decorazione","menu.color":"Colore","menu.background-color":"Sfondo","menu.evaluate":"Valuta","menu.simplify":"Semplifica","menu.solve":"Risolvi","menu.solve-for":"Risolvi per %@","menu.cut":"Taglia","menu.copy":"Copia","menu.copy-as-latex":"Copia come LaTeX","menu.copy-as-ascii-math":"Copia come ASCII Math","menu.copy-as-mathml":"Copia come MathML","menu.paste":"Incolla","menu.select-all":"Seleziona tutto","color.red":"Rosso","color.orange":"Arancione","color.yellow":"Giallo","color.lime":"Lime","color.green":"Verde","color.teal":"Verde acqua","color.cyan":"Ciano","color.blue":"Blu","color.indigo":"Indaco","color.purple":"Viola","color.magenta":"Magenta","color.black":"Nero","color.dark-grey":"Grigio scuro","color.grey":"Grigio","color.light-grey":"Grigio chiaro","color.white":"Bianco"},ja:{"keyboard.tooltip.symbols":"\u30B7\u30F3\u30DC\u30EB","keyboard.tooltip.greek":"\u30AE\u30EA\u30B7\u30E3\u6587\u5B57","keyboard.tooltip.numeric":"\u6570\u5024","keyboard.tooltip.alphabetic":"\u30ED\u30FC\u30DE\u5B57","tooltip.menu":"\u30E1\u30CB\u30E5\u30FC","tooltip.copy to clipboard":"\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC","tooltip.redo":"\u3084\u308A\u76F4\u3057","tooltip.toggle virtual keyboard":"\u4EEE\u60F3\u30AD\u30FC\u30DC\u30FC\u30C9\u306E\u5207\u308A\u66FF\u3048","tooltip.undo":"\u5143\u306B\u623B\u3059","menu.insert matrix":"\u30DE\u30C8\u30EA\u30C3\u30AF\u30B9\u3092\u633F\u5165","menu.borders":"\u884C\u5217\u533A\u5207\u308A\u6587\u5B57","menu.array.add row above":"\u5F8C\u306B\u884C\u3092\u8FFD\u52A0","menu.array.add row below":"\u524D\u306B\u884C\u3092\u8FFD\u52A0","menu.array.add column after":"\u5F8C\u306B\u5217\u3092\u8FFD\u52A0","menu.array.add column before":"\u524D\u306B\u5217\u3092\u8FFD\u52A0","menu.array.delete row":"\u884C\u3092\u524A\u9664","menu.array.delete rows":"\u9078\u629E\u3057\u305F\u884C\u3092\u524A\u9664\u3059\u308B","menu.array.delete column":"\u5217\u3092\u524A\u9664","menu.array.delete columns":"\u9078\u629E\u3057\u305F\u5217\u3092\u524A\u9664\u3059\u308B","menu.mode":"\u30E2\u30FC\u30C9","menu.mode-math":"\u6570\u5F0F","menu.mode-text":"\u30C6\u30AD\u30B9\u30C8","menu.mode-latex":"LaTeX","tooltip.blackboard":"\u9ED2\u677F","tooltip.bold":"\u592A\u5B57","tooltip.italic":"\u30A4\u30BF\u30EA\u30C3\u30AF","tooltip.fraktur":"\u30D5\u30E9\u30AF\u30C8\u30A5\u30FC\u30EB","tooltip.script":"\u30B9\u30AF\u30EA\u30D7\u30C8","tooltip.caligraphic":"\u30AB\u30EA\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF","tooltip.typewriter":"\u30BF\u30A4\u30D7\u30E9\u30A4\u30BF\u30FC","tooltip.roman-upright":"\u30ED\u30FC\u30DE\u76F4\u7ACB","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u30D5\u30A9\u30F3\u30C8\u30B9\u30BF\u30A4\u30EB","menu.accent":"\u30A2\u30AF\u30BB\u30F3\u30C8","menu.decoration":"\u88C5\u98FE","menu.color":"\u8272","menu.background-color":"\u80CC\u666F","menu.evaluate":"\u8A55\u4FA1","menu.simplify":"\u7C21\u7565\u5316","menu.solve":"\u89E3\u304F","menu.solve-for":"%@ \u3092\u89E3\u304F","menu.cut":"\u5207\u308A\u53D6\u308A","menu.copy":"\u30B3\u30D4\u30FC","menu.copy-as-latex":"LaTeX\u3068\u3057\u3066\u30B3\u30D4\u30FC","menu.copy-as-ascii-math":"ASCII Math\u3068\u3057\u3066\u30B3\u30D4\u30FC","menu.copy-as-mathml":"MathML\u3068\u3057\u3066\u30B3\u30D4\u30FC","menu.paste":"\u8CBC\u308A\u4ED8\u3051","menu.select-all":"\u3059\u3079\u3066\u9078\u629E","color.red":"\u8D64","color.orange":"\u30AA\u30EC\u30F3\u30B8","color.yellow":"\u9EC4\u8272","color.lime":"\u30E9\u30A4\u30E0","color.green":"\u7DD1","color.teal":"\u30C6\u30A3\u30FC\u30EB","color.cyan":"\u30B7\u30A2\u30F3","color.blue":"\u9752","color.indigo":"\u30A4\u30F3\u30C7\u30A3\u30B4","color.purple":"\u7D2B","color.magenta":"\u30DE\u30BC\u30F3\u30BF","color.black":"\u9ED2","color.dark-grey":"\u6FC3\u3044\u30B0\u30EC\u30FC","color.grey":"\u30B0\u30EC\u30FC","color.light-grey":"\u8584\u3044\u30B0\u30EC\u30FC","color.white":"\u767D"},ko:{"keyboard.tooltip.symbols":"\uAE30\uD638","keyboard.tooltip.greek":"\uADF8\uB9AC\uC2A4 \uBB38\uC790","keyboard.tooltip.numeric":"\uC22B\uC790","keyboard.tooltip.alphabetic":"\uB85C\uB9C8 \uBB38\uC790","tooltip.copy to clipboard":"\uD074\uB9BD \uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC","tooltip.redo":"\uB2E4\uC2DC \uC2E4\uD589","tooltip.toggle virtual keyboard":"\uAC00\uC0C1 \uD0A4\uBCF4\uB4DC \uC804\uD658","tooltip.undo":"\uC2E4\uD589 \uCDE8\uC18C","menu.insert matrix":"\uD589\uB82C \uC0BD\uC785","menu.borders":"\uD589\uB82C \uAD6C\uBD84 \uAE30\uD638","menu.array.add row above":"\uB4A4\uC5D0 \uD589 \uCD94\uAC00","menu.array.add row below":"\uC55E\uC5D0 \uD589 \uCD94\uAC00","menu.array.add column after":"\uB4A4\uC5D0 \uC5F4 \uCD94\uAC00","menu.array.add column before":"\uC55E\uC5D0 \uC5F4 \uCD94\uAC00","menu.array.delete row":"\uD589 \uC0AD\uC81C","menu.array.delete rows":"\uC120\uD0DD\uD55C \uD589 \uC0AD\uC81C","menu.array.delete column":"\uC5F4 \uC0AD\uC81C","menu.array.delete columns":"\uC120\uD0DD\uD55C \uC5F4 \uC0AD\uC81C","menu.mode":"\uBAA8\uB4DC","menu.mode-math":"\uC218\uC2DD","menu.mode-text":"\uD14D\uC2A4\uD2B8","menu.mode-latex":"LaTeX","tooltip.blackboard":"\uCE60\uD310","tooltip.bold":"\uAD75\uAC8C","tooltip.italic":"\uC774\uD0E4\uB9AD","tooltip.fraktur":"\uD504\uB799\uD22C\uC5B4","tooltip.script":"\uCCA8\uC790","tooltip.caligraphic":"\uD544\uAE30\uCCB4","tooltip.typewriter":"\uD0C0\uC790\uAE30","tooltip.roman-upright":"\uC77C\uBC18 \uB85C\uB9C8\uC790","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\uAE00\uAF34 \uC2A4\uD0C0\uC77C","menu.accent":"\uBC1C\uC74C \uAE30\uD638","menu.decoration":"\uC7A5\uC2DD","menu.color":"\uC0C9\uC0C1","menu.background-color":"\uBC30\uACBD","menu.evaluate":"\uD3C9\uAC00","menu.simplify":"\uAC04\uC18C\uD654","menu.solve":"\uD574\uACB0","menu.solve-for":"%@\uC5D0 \uB300\uD574 \uD574\uACB0","menu.cut":"\uC798\uB77C\uB0B4\uAE30","menu.copy":"\uBCF5\uC0AC","menu.copy-as-latex":"LaTeX\uB85C \uBCF5\uC0AC","menu.copy-as-ascii-math":"ASCIIMath\uB85C \uBCF5\uC0AC","menu.copy-as-mathml":"MathML\uB85C \uBCF5\uC0AC","menu.paste":"\uBD99\uC5EC\uB123\uAE30","menu.select-all":"\uBAA8\uB450 \uC120\uD0DD","color.red":"\uBE68\uAC15","color.orange":"\uC8FC\uD669","color.yellow":"\uB178\uB791","color.lime":"\uB77C\uC784","color.green":"\uCD08\uB85D","color.teal":"\uCCAD\uB85D","color.cyan":"\uCCAD\uC0C9","color.blue":"\uD30C\uB791","color.indigo":"\uB0A8\uC0C9","color.purple":"\uBCF4\uB77C","color.magenta":"\uC790\uD64D","color.black":"\uAC80\uC815","color.dark-grey":"\uC9C4\uD55C \uD68C\uC0C9","color.grey":"\uD68C\uC0C9","color.light-grey":"\uC5F0\uD55C \uD68C\uC0C9","color.white":"\uD770\uC0C9"},pl:{"keyboard.tooltip.symbols":"Symbolika","keyboard.tooltip.greek":"Litery greckie","keyboard.tooltip.numeric":"Numeryczne","keyboard.tooltip.alphabetic":"Litery rzymskie","tooltip.copy to clipboard":"Kopiuj do Schowka","tooltip.cut to clipboard":"Wytnij ze Schowka","tooltip.paste from clipboard":"Wklej ze Schowka","tooltip.redo":"Przywr\xF3\u0107","tooltip.toggle virtual keyboard":"Prze\u0142\u0105cz klawiatur\u0119 wirtualn\u0105","tooltip.menu":"Menu","tooltip.undo":"Cofnij","menu.borders":"Ograniczniki macierzy","menu.insert matrix":"Wstaw macierz","menu.array.add row above":"Dodaj wiersz przed","menu.array.add row below":"Dodaj wiersz po","menu.array.add column after":"Dodaj kolumn\u0119 po","menu.array.add column before":"Dodaj kolumn\u0119 przed","menu.array.delete row":"Usu\u0144 wiersz","menu.array.delete rows":"Usu\u0144 wybrane wiersze","menu.array.delete column":"Usu\u0144 kolumn\u0119","menu.array.delete columns":"Usu\u0144 wybrane kolumny","menu.mode":"Tryb","menu.mode-math":"Formu\u0142a","menu.mode-text":"Tekst","menu.mode-latex":"LaTeX","menu.insert":"Wstaw","menu.insert.abs":"Warto\u015B\u0107 bezwzgl\u0119dna","menu.insert.abs-template":"\\left|x\\right|","menu.insert.nth-root":"Pierwiastek n-tego stopnia","menu.insert.nth-root-template":"\\sqrt[n]{x}","menu.insert.log-base":"Logarytm o podstawie a","menu.insert.log-base-template":"\\log_a(x)","menu.insert.heading-calculus":"Rachunek r\xF3\u017Cniczkowy i ca\u0142kowy","menu.insert.derivative":"Pochodna","menu.insert.derivative-template":"\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}","menu.insert.nth-derivative":"Pochodna n-tego rz\u0119du","menu.insert.nth-derivative-template":"\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}","menu.insert.integral":"Ca\u0142ka","menu.insert.integral-template":"$\\int_a^b f(x)\\,\\mathrm{d}x$","menu.insert.sum":"Suma","menu.insert.sum-template":"$\\sum_{i=1}^n x_i$","menu.insert.product":"Iloczyn","menu.insert.product-template":"\\prod_{i=1}^n x_i","menu.insert.heading-complex-numbers":"Liczby zespolone","menu.insert.modulus":"Modu\u0142","menu.insert.modulus-template":"\\lvert z \\rvert","menu.insert.argument":"Argument","menu.insert.argument-template":"\\arg(z)","menu.insert.real-part":"Cz\u0119\u015B\u0107 rzeczywista","menu.insert.real-part-template":"\\Re(z)","menu.insert.imaginary-part":"Cz\u0119\u015B\u0107 urojona","menu.insert.imaginary-part-template":"\\Im(z)","menu.insert.conjugate":"Sprz\u0119\u017Cenie","menu.insert.conjugate-template":"\\overline{z}","tooltip.blackboard":"Tablica","tooltip.bold":"Pogrubienie","tooltip.italic":"Kursywa","tooltip.fraktur":"Fraktura","tooltip.script":"Skrypt","tooltip.caligraphic":"Kaligraficzny","tooltip.typewriter":"Maszynowy","tooltip.roman-upright":"Rzymski prosto","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Styl czcionki","menu.accent":"Akcent","menu.decoration":"Dekoracja","menu.color":"Kolor","menu.background-color":"T\u0142o","menu.evaluate":"Oblicz","menu.simplify":"Upro\u015B\u0107","menu.solve":"Rozwi\u0105\u017C","menu.solve-for":"Rozwi\u0105\u017C dla %@","menu.cut":"Wytnij","menu.copy":"Kopiuj","menu.copy-as-latex":"Kopiuj jako LaTeX","menu.copy-as-ascii-math":"Kopiuj jako ASCII Math","menu.copy-as-mathml":"Kopiuj jako MathML","menu.paste":"Wklej","menu.select-all":"Zaznacz wszystko","color.red":"Czerwony","color.orange":"Pomara\u0144czowy","color.yellow":"\u017B\xF3\u0142ty","color.lime":"Limetkowy","color.green":"Zielony","color.teal":"Turkusowy","color.cyan":"Cyjan","color.blue":"Niebieski","color.indigo":"Indygo","color.purple":"Fioletowy","color.magenta":"Magenta","color.black":"Czarny","color.dark-grey":"Ciemnoszary","color.grey":"Szary","color.light-grey":"Jasnoszary","color.white":"Bia\u0142y"},pt:{"keyboard.tooltip.symbols":"S\xEDmbolos","keyboard.tooltip.greek":"Letras gregas","keyboard.tooltip.numeric":"Num\xE9rico","keyboard.tooltip.alphabetic":"Letras romanas","tooltip.copy to clipboard":"Copiar para \xE1rea de transfer\xEAncia","tooltip.redo":"Refazer","tooltip.toggle virtual keyboard":"Alternar teclado virtual","tooltip.undo":"Desfazer","menu.insert matrix":"Inserir Matriz","menu.borders":"Delimitadores de matriz","menu.array.add row above":"Adicionar linha depois","menu.array.add row below":"Adicionar linha antes","menu.array.add column after":"Adicionar coluna depois","menu.array.add column before":"Adicionar coluna antes","menu.array.delete row":"Excluir linha","menu.array.delete rows":"Excluir linhas selecionadas","menu.array.delete column":"Apagar Coluna","menu.array.delete columns":"Excluir Colunas Selecionadas","menu.mode":"Modo","menu.mode-math":"F\xF3rmula","menu.mode-text":"Texto","menu.mode-latex":"LaTeX","tooltip.blackboard":"Quadro Negro","tooltip.bold":"Negrito","tooltip.italic":"It\xE1lico","tooltip.fraktur":"Fraktur","tooltip.script":"Script","tooltip.caligraphic":"Caligr\xE1fico","tooltip.typewriter":"M\xE1quina de Escrever","tooltip.roman-upright":"Romano Vertical","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"Estilo da Fonte","menu.accent":"Acento","menu.decoration":"Decora\xE7\xE3o","menu.color":"Cor","menu.background-color":"Cor de Fundo","menu.evaluate":"Avaliar","menu.simplify":"Simplificar","menu.solve":"Resolver","menu.solve-for":"Resolver para %@","menu.cut":"Recortar","menu.copy":"Copiar","menu.copy-as-latex":"Copiar como LaTeX","menu.copy-as-ascii-math":"Copiar como ASCII Math","menu.copy-as-mathml":"Copiar como MathML","menu.paste":"Colar","menu.select-all":"Selecionar Tudo","color.red":"Vermelho","color.orange":"Laranja","color.yellow":"Amarelo","color.lime":"Verde Lima","color.green":"Verde","color.teal":"Verde-azulado","color.cyan":"Ciano","color.blue":"Azul","color.indigo":"\xCDndigo","color.purple":"Roxo","color.magenta":"Magenta","color.black":"Preto","color.dark-grey":"Cinza Escuro","color.grey":"Cinza","color.light-grey":"Cinza Claro","color.white":"Branco"},uk:{"keyboard.tooltip.symbols":"\u0421\u0438\u043C\u0432\u043E\u043B\u0438","keyboard.tooltip.greek":"\u0413\u0440\u0435\u0446\u044C\u043A\u0456 \u043B\u0456\u0442\u0435\u0440\u0438","keyboard.tooltip.numeric":"\u0427\u0438\u0441\u043B\u043E\u0432\u0438\u0439","keyboard.tooltip.alphabetic":"\u0420\u0438\u043C\u0441\u044C\u043A\u0456 \u043B\u0456\u0442\u0435\u0440\u0438","tooltip.copy to clipboard":"\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443","tooltip.cut to clipboard":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443","tooltip.paste from clipboard":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u043E\u0431\u043C\u0456\u043D\u0443","tooltip.redo":"\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438","tooltip.toggle virtual keyboard":"\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0432\u0456\u0440\u0442\u0443\u0430\u043B\u044C\u043D\u0443 \u043A\u043B\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443","tooltip.menu":"\u041C\u0435\u043D\u044E","tooltip.undo":"\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438","menu.borders":"\u041C\u0435\u0436\u0456","menu.insert matrix":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043C\u0430\u0442\u0440\u0438\u0446\u044E","menu.array.add row above":"\u0414\u043E\u0434\u0430\u0442\u0438 \u0440\u044F\u0434\u043E\u043A \u043F\u0435\u0440\u0435\u0434","menu.array.add row below":"\u0414\u043E\u0434\u0430\u0442\u0438 \u0440\u044F\u0434\u043E\u043A \u043F\u0456\u0441\u043B\u044F","menu.array.add column after":"\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043F\u0456\u0441\u043B\u044F","menu.array.add column before":"\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043F\u0435\u0440\u0435\u0434","menu.array.delete row":"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0440\u044F\u0434\u043E\u043A","menu.array.delete rows":"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0440\u044F\u0434\u043A\u0438","menu.array.delete column":"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C","menu.array.delete columns":"\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456","menu.mode":"\u0420\u0435\u0436\u0438\u043C","menu.mode-math":"\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430","menu.mode-text":"\u0422\u0435\u043A\u0441\u0442","menu.mode-latex":"LaTeX","menu.insert":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","menu.insert.abs":"\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F","menu.insert.abs-template":"\\left|x\\right|","menu.insert.nth-root":"\u041A\u043E\u0440\u0456\u043D\u044C n-\u0433\u043E \u0441\u0442\u0435\u043F\u0435\u043D\u044F","menu.insert.nth-root-template":"\\sqrt[n]{x}","menu.insert.log-base":"\u041B\u043E\u0433\u0430\u0440\u0438\u0444\u043C \u0437\u0430 \u043E\u0441\u043D\u043E\u0432\u043E\u044E a","menu.insert.log-base-template":"\\log_a(x)","menu.insert.heading-calculus":"\u041E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F","menu.insert.derivative":"\u041F\u043E\u0445\u0456\u0434\u043D\u0430","menu.insert.derivative-template":"\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}","menu.insert.nth-derivative":"\u041F\u043E\u0445\u0456\u0434\u043D\u0430 n-\u0433\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443","menu.insert.nth-derivative-template":"\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}","menu.insert.integral":"\u0406\u043D\u0442\u0435\u0433\u0440\u0430\u043B","menu.insert.integral-template":"$\\int_a^b f(x)\\,\\mathrm{d}x$","menu.insert.sum":"\u0421\u0443\u043C\u0430","menu.insert.sum-template":"$\\sum_{i=1}^n x_i$","menu.insert.product":"\u0414\u043E\u0431\u0443\u0442\u043E\u043A","menu.insert.product-template":"\\prod_{i=1}^n x_i","menu.insert.heading-complex-numbers":"\u041A\u043E\u043C\u043F\u043B\u0435\u043A\u0441\u043D\u0456 \u0447\u0438\u0441\u043B\u0430","menu.insert.modulus":"\u041C\u043E\u0434\u0443\u043B\u044C","menu.insert.modulus-template":"\\lvert z \\rvert","menu.insert.argument":"\u0410\u0440\u0433\u0443\u043C\u0435\u043D\u0442","menu.insert.argument-template":"\\arg(z)","menu.insert.real-part":"\u0414\u0456\u0439\u0441\u043D\u0430 \u0447\u0430\u0441\u0442\u0438\u043D\u0430","menu.insert.real-part-template":"\\Re(z)","menu.insert.imaginary-part":"\u0423\u044F\u0432\u043D\u0430 \u0447\u0430\u0441\u0442\u0438\u043D\u0430","menu.insert.imaginary-part-template":"\\Im(z)","menu.insert.conjugate":"\u0421\u043F\u0440\u044F\u0436\u0435\u043D\u0435 \u0447\u0438\u0441\u043B\u043E","menu.insert.conjugate-template":"\\overline{z}","tooltip.blackboard":"\u0414\u043E\u0448\u043A\u0430","tooltip.bold":"\u0416\u0438\u0440\u043D\u0438\u0439","tooltip.italic":"\u041A\u0443\u0440\u0441\u0438\u0432","tooltip.fraktur":"\u0424\u0440\u0430\u043A\u0442\u0443\u0440\u043D\u0438\u0439","tooltip.script":"\u0420\u0443\u043A\u043E\u043F\u0438\u0441\u043D\u0438\u0439","tooltip.caligraphic":"\u041A\u0430\u043B\u0456\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439","tooltip.typewriter":"\u0414\u0440\u0443\u043A\u0430\u0440\u0441\u044C\u043A\u0438\u0439","tooltip.roman-upright":"\u041F\u0440\u044F\u043C\u0438\u0439 \u0440\u0438\u043C\u0441\u044C\u043A\u0438\u0439","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u0421\u0442\u0438\u043B\u044C \u0448\u0440\u0438\u0444\u0442\u0443","menu.accent":"\u0410\u043A\u0446\u0435\u043D\u0442","menu.decoration":"\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u043D\u044F","menu.color":"\u041A\u043E\u043B\u0456\u0440","menu.background-color":"\u0424\u043E\u043D","menu.evaluate":"\u041E\u0431\u0447\u0438\u0441\u043B\u0438\u0442\u0438","menu.simplify":"\u0421\u043F\u0440\u043E\u0441\u0442\u0438\u0442\u0438","menu.solve":"\u0420\u043E\u0437\u0432\u2019\u044F\u0437\u0430\u0442\u0438","menu.solve-for":"\u0420\u043E\u0437\u0432\u2019\u044F\u0437\u0430\u0442\u0438 \u0434\u043B\u044F %@","menu.cut":"\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438","menu.copy":"\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438","menu.copy-as-latex":"\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A LaTeX","menu.copy-as-ascii-math":"\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A ASCII Math","menu.copy-as-mathml":"\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A MathML","menu.paste":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438","menu.select-all":"\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0432\u0441\u0435","color.red":"\u0427\u0435\u0440\u0432\u043E\u043D\u0438\u0439","color.orange":"\u041F\u043E\u043C\u0430\u0440\u0430\u043D\u0447\u0435\u0432\u0438\u0439","color.yellow":"\u0416\u043E\u0432\u0442\u0438\u0439","color.lime":"\u041B\u0430\u0439\u043C\u043E\u0432\u0438\u0439","color.green":"\u0417\u0435\u043B\u0435\u043D\u0438\u0439","color.teal":"\u0411\u0456\u0440\u044E\u0437\u043E\u0432\u0438\u0439","color.cyan":"\u0421\u0438\u043D\u044C\u043E-\u0437\u0435\u043B\u0435\u043D\u0438\u0439","color.blue":"\u0421\u0438\u043D\u0456\u0439","color.indigo":"\u0406\u043D\u0434\u0438\u0433\u043E","color.purple":"\u0424\u0456\u043E\u043B\u0435\u0442\u043E\u0432\u0438\u0439","color.magenta":"\u041F\u0443\u0440\u043F\u0443\u0440\u043D\u0438\u0439","color.black":"\u0427\u043E\u0440\u043D\u0438\u0439","color.dark-grey":"\u0422\u0435\u043C\u043D\u043E-\u0441\u0456\u0440\u0438\u0439","color.grey":"\u0421\u0456\u0440\u0438\u0439","color.light-grey":"\u0421\u0432\u0456\u0442\u043B\u043E-\u0441\u0456\u0440\u0438\u0439","color.white":"\u0411\u0456\u043B\u0438\u0439"},"zh-cn":{"keyboard.tooltip.symbols":"\u7B26\u53F7","keyboard.tooltip.greek":"\u5E0C\u814A\u5B57\u6BCD","keyboard.tooltip.numeric":"\u6570\u5B57","keyboard.tooltip.alphabetic":"\u7F57\u9A6C\u5B57\u6BCD","tooltip.copy to clipboard":"\u590D\u5236\u5230\u526A\u8D34\u677F","tooltip.redo":"\u91CD\u505A","tooltip.toggle virtual keyboard":"\u5207\u6362\u865A\u62DF\u952E\u76D8","tooltip.undo":"\u64A4\u6D88","menu.insert matrix":"\u63D2\u5165\u77E9\u9635","menu.borders":"\u77E9\u9635\u5206\u9694\u7B26","menu.array.add row above":"\u5728\u540E\u9762\u6DFB\u52A0\u884C","menu.array.add row below":"\u5728\u524D\u9762\u6DFB\u52A0\u884C","menu.array.add column after":"\u5728\u540E\u9762\u6DFB\u52A0\u5217r","menu.array.add column before":"\u5728\u524D\u9762\u6DFB\u52A0\u5217","menu.array.delete row":"\u5220\u9664\u884C","menu.array.delete rows":"\u5220\u9664\u9009\u5B9A\u884C","menu.array.delete column":"\u5220\u9664\u5217","menu.array.delete columns":"\u5220\u9664\u9009\u5B9A\u7684\u5217","menu.mode":"\u6A21\u5F0F","menu.mode-math":"\u6570\u5B66","menu.mode-text":"\u6587\u672C","menu.mode-latex":"LaTeX","tooltip.blackboard":"\u9ED1\u677F","tooltip.bold":"\u7C97\u4F53","tooltip.italic":"\u659C\u4F53","tooltip.fraktur":"Fraktur","tooltip.script":"\u811A\u672C","tooltip.caligraphic":"\u8349\u4E66","tooltip.typewriter":"\u6253\u5B57\u673A","tooltip.roman-upright":"\u7F57\u9A6C\u76F4\u7ACB","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u5B57\u4F53\u6837\u5F0F","menu.accent":"\u91CD\u97F3","menu.decoration":"\u88C5\u9970","menu.color":"\u989C\u8272","menu.background-color":"\u80CC\u666F","menu.evaluate":"\u8BA1\u7B97","menu.simplify":"\u7B80\u5316","menu.solve":"\u6C42\u89E3","menu.solve-for":"\u6C42\u89E3 %@","menu.cut":"\u526A\u5207","menu.copy":"\u590D\u5236","menu.copy-as-latex":"\u590D\u5236\u4E3A LaTeX","menu.copy-as-ascii-math":"\u590D\u5236\u4E3A ASCII Math","menu.copy-as-mathml":"\u590D\u5236\u4E3A MathML","menu.paste":"\u7C98\u8D34","menu.select-all":"\u5168\u9009","color.red":"\u7EA2\u8272","color.orange":"\u6A59\u8272","color.yellow":"\u9EC4\u8272","color.lime":"\u7EFF\u9EC4\u8272","color.green":"\u7EFF\u8272","color.teal":"\u9752\u8272","color.cyan":"\u84DD\u7EFF\u8272","color.blue":"\u84DD\u8272","color.indigo":"\u975B\u84DD\u8272","color.purple":"\u7D2B\u8272","color.magenta":"\u6D0B\u7EA2\u8272","color.black":"\u9ED1\u8272","color.dark-grey":"\u6DF1\u7070\u8272","color.grey":"\u7070\u8272","color.light-grey":"\u6D45\u7070\u8272","color.white":"\u767D\u8272"},"zh-tw":{"keyboard.tooltip.symbols":"\u7B26\u865F","keyboard.tooltip.greek":"\u5E0C\u81D8\u5B57\u6BCD","keyboard.tooltip.numeric":"\u6578\u5B57","keyboard.tooltip.alphabetic":"\u7F85\u99AC\u5B57\u6BCD","tooltip.copy to clipboard":"\u8907\u88FD\u5230\u526A\u8CBC\u677F","tooltip.redo":"\u91CD\u505A","tooltip.toggle virtual keyboard":"\u5207\u63DB\u865B\u64EC\u9375\u76E4","tooltip.undo":"\u64A4\u6D88","menu.insert matrix":"\u63D2\u5165\u77E9\u9663","menu.borders":"\u77E9\u9663\u5206\u9694\u7B26","menu.array.add row above":"\u5728\u5F8C\u9762\u6DFB\u52A0\u884C","menu.array.add row below":"\u5728\u524D\u9762\u6DFB\u52A0\u884C","menu.array.add column after":"\u5728\u5F8C\u9762\u6DFB\u52A0\u5217","menu.array.add column before":"\u5728\u524D\u9762\u6DFB\u52A0\u5217","menu.array.delete row":"\u522A\u9664\u884C","menu.array.delete rows":"\u522A\u9664\u9078\u5B9A\u884C","menu.array.delete column":"\u522A\u9664\u5217","menu.array.delete columns":"\u522A\u9664\u9078\u5B9A\u7684\u5217","menu.mode":"\u6A21\u5F0F","menu.mode-math":"\u6578\u5B78","menu.mode-text":"\u6587\u672C","menu.mode-latex":"LaTeX","tooltip.blackboard":"\u9ED1\u677F","tooltip.bold":"\u7C97\u9AD4","tooltip.italic":"\u659C\u9AD4","tooltip.fraktur":"Fraktur","tooltip.script":"\u8173\u672C","tooltip.caligraphic":"\u8349\u66F8","tooltip.typewriter":"\u6253\u5B57\u6A5F","tooltip.roman-upright":"\u7F85\u99AC\u76F4\u7ACB","tooltip.row-by-col":"%@ \xD7 %@","menu.font-style":"\u5B57\u9AD4\u6A23\u5F0F","menu.accent":"\u91CD\u97F3","menu.decoration":"\u88DD\u98FE","menu.color":"\u984F\u8272","menu.background-color":"\u80CC\u666F","menu.evaluate":"\u8A08\u7B97","menu.simplify":"\u7C21\u5316","menu.solve":"\u6C42\u89E3","menu.solve-for":"\u6C42\u89E3 %@","menu.cut":"\u526A\u4E0B","menu.copy":"\u8907\u88FD","menu.copy-as-latex":"\u8907\u88FD\u70BA LaTeX","menu.copy-as-ascii-math":"\u8907\u88FD\u70BA ASCII Math","menu.copy-as-mathml":"\u8907\u88FD\u70BA MathML","menu.paste":"\u8CBC\u4E0A","menu.select-all":"\u5168\u9078","color.red":"\u7D05\u8272","color.orange":"\u6A59\u8272","color.yellow":"\u9EC3\u8272","color.lime":"\u7DA0\u9EC3\u8272","color.green":"\u7DA0\u8272","color.teal":"\u9752\u8272","color.cyan":"\u85CD\u7DA0\u8272","color.blue":"\u85CD\u8272","color.indigo":"\u975B\u85CD\u8272","color.purple":"\u7D2B\u8272","color.magenta":"\u6D0B\u7D05\u8272","color.black":"\u9ED1\u8272","color.dark-grey":"\u6DF1\u7070\u8272","color.grey":"\u7070\u8272","color.light-grey":"\u6DFA\u7070\u8272","color.white":"\u767D\u8272"}};var I={strings:K0,_locale:"",_dirty:!1,_subscribers:[],_numberFormatter:void 0,get locale(){return I._locale||(I._locale=Vi()?navigator.language.slice(0,5):"en-US"),I._locale},set locale(t){I._locale=t,I._numberFormatter=void 0,I.dirty=!0},get numberFormatter(){if(!I._numberFormatter)try{I._numberFormatter=new Intl.NumberFormat(I.locale)}catch(t){try{I._numberFormatter=new Intl.NumberFormat(I.locale.slice(0,2))}catch(e){I._numberFormatter=new Intl.NumberFormat("en-US")}}return I._numberFormatter},merge(t,e){if(typeof t=="string"&&e)I.strings[t]=m(m({},I.strings[t]),e),I.dirty=!0;else for(let r of Object.keys(t))I.merge(r,t[r])},get dirty(){return I._dirty},set dirty(t){I._dirty||I._dirty===t||(I._dirty=!0,setTimeout(()=>{I._dirty=!1,this._subscribers.forEach(e=>e==null?void 0:e())},0))},subscribe(t){return I._subscribers.push(t),I._subscribers.length-1},unsubscribe(t){t<0||t>=I._subscribers.length||(I._subscribers[t]=void 0)},update(t){let e=t.querySelectorAll("[data-l10n-tooltip]");for(let r of e){let i=r.getAttribute("data-l10n-tooltip");if(i){let n=Y0(i);n&&r.setAttribute("data-tooltip",n)}}e=t.querySelectorAll("[data-l10n-arial-label]");for(let r of e){let i=r.getAttribute("data-l10n-arial-label");if(i){let n=Y0(i);n&&r.setAttribute("aria-label",n)}}}};function Y0(t,...e){if(t===void 0)return;let r="",i=I.locale;I.strings[i]&&(r=I.strings[i][t]);let n=i.slice(0,2);if(!r&&I.strings[n]&&(r=I.strings[n][t]),r||(r=I.strings.en[t]),!r)return;let o=/(%@|%([0-9]+)\$@)/g,a=o.exec(r),s=0;for(;a;){if(e[s++]){let c=a[2]?parseInt(a[2],10)-1:s-1,h=e[c];typeof h=="number"&&(h=I.numberFormatter.format(h)),r=r.replace(a[1],h)}a=o.exec(r)}return r=r.replace(/%%/g,"%"),r}var tc={"p@":{dimension:1},"z@":{dimension:0},maxdimen:{dimension:16383.99999},hfuzz:{dimension:.1},vfuzz:{dimension:.1},overfullrule:{dimension:5},hsize:{dimension:6.5,unit:"in"},vsize:{dimension:8.9,unit:"in"},parindent:{dimension:20},maxdepth:{dimension:4},splitmaxdepth:{register:"maxdimen"},boxmaxdepth:{register:"maxdimen"},delimitershortfall:{dimension:5},nulldelimiterspace:{dimension:1.2,unit:"pt"},scriptspace:{dimension:.5},topskip:{dimension:10},splittopskip:{dimension:10},normalbaselineskip:{dimension:12},normallineskip:{dimension:1},normallineskiplimit:{dimension:0},jot:{dimension:3},doublerulesep:{dimension:2},arrayrulewidth:{dimension:.4},arraycolsep:{dimension:5},fboxsep:{dimension:3},fboxrule:{dimension:.4},"z@skip":{glue:{dimension:0},shrink:{dimension:0},grow:{dimension:0}},hideskip:{glue:{dimension:-1e3},grow:{dimension:1,unit:"fill"}},"@flushglue":{glue:{dimension:0},grow:{dimension:1,unit:"fill"}},parskip:{glue:{dimension:0},grow:{dimension:1}},abovedisplayskip:{glue:{dimension:12},grow:{dimension:3},shrink:{dimension:9}},abovedisplayshortskip:{glue:{dimension:0},grow:{dimension:3}},belowdisplayskip:{glue:{dimension:12},grow:{dimension:3},shrink:{dimension:9}},belowdisplayshortskip:{glue:{dimension:7},grow:{dimension:3},shrink:{dimension:4}},parfillskip:{glue:{dimension:0},grow:{dimension:1,unit:"fil"}},thinmuskip:{glue:{dimension:3,unit:"mu"}},medmuskip:{glue:{dimension:4,unit:"mu"},grow:{dimension:2,unit:"mu"},shrink:{dimension:4,unit:"mu"}},thickmuskip:{glue:{dimension:5,unit:"mu"},grow:{dimension:5,unit:"mu"}},smallskipamount:{glue:{dimension:3},grow:{dimension:1},shrink:{dimension:1}},medskipamount:{glue:{dimension:6},grow:{dimension:2},shrink:{dimension:3}},bigskipamount:{glue:{dimension:12},grow:{dimension:2},shrink:{dimension:4}},pretolerance:100,tolerance:200,hbadness:1e3,vbadness:1e3,linepenalty:10,hyphenpenalty:50,exhyphenpenalty:50,binoppenalty:700,relpenalty:500,clubpenalty:150,widowpenalty:150,displaywidowpenalty:50,brokenpenalty:100,predisplaypenalty:1e4,doublehyphendemerits:1e4,finalhyphendemerits:5e3,adjdemerits:1e4,tracinglostchars:1,uchyph:1,delimiterfactor:901,defaulthyphenchar:"\\-",defaultskewchar:-1,newlinechar:-1,showboxbreadth:5,showboxdepth:3,errorcontextlines:5,interdisplaylinepenalty:100,interfootnotelinepenalty:100,baselineSkip:1.2,arraystretch:1,month:new Date().getMonth()+1,day:new Date().getDate(),year:new Date().getFullYear()};function Q0(){return m({},tc)}function Gr(){return{registers:Q0(),smartFence:!1,renderPlaceholder:void 0,placeholderSymbol:"\u25A2",letterShapeStyle:I.locale.startsWith("fr")?"french":"tex",minFontScale:0,maxMatrixCols:10,colorMap:ao,backgroundColorMap:E0,getMacro:t=>Ir(t,Zi())}}var $=class t{constructor(e,r){var o,a,s,l,c,h,d,f,S,x,w,D,b,M,k;let i;e!=null&&e.parent?(this.parent=e.parent,i=e.parent,this.registers={}):(i=m(m({},Gr()),(o=e==null?void 0:e.from)!=null?o:{}),this.registers=i.registers),i.atomIdsSettings&&(this.atomIdsSettings=m({},i.atomIdsSettings)),this.renderPlaceholder=i.renderPlaceholder,this.isPhantom=(l=(s=e==null?void 0:e.isPhantom)!=null?s:(a=this.parent)==null?void 0:a.isPhantom)!=null?l:!1,this.letterShapeStyle=i.letterShapeStyle,this.minFontScale=i.minFontScale,this.maxMatrixCols=i.maxMatrixCols,r!=null&&r.color&&r.color!=="none"?this.color=r.color:this.color=(h=(c=this.parent)==null?void 0:c.color)!=null?h:"",r!=null&&r.backgroundColor&&r.backgroundColor!=="none"?this.backgroundColor=r.backgroundColor:this.backgroundColor=(f=(d=this.parent)==null?void 0:d.backgroundColor)!=null?f:"",r!=null&&r.fontSize&&r.fontSize!=="auto"&&r.fontSize!==((S=this.parent)==null?void 0:S.size)?this.size=r.fontSize:this.size=(w=(x=this.parent)==null?void 0:x.size)!=null?w:Pr;let n=(b=(D=this.parent)==null?void 0:D.mathstyle)!=null?b:Fe.displaystyle;if(typeof(e==null?void 0:e.mathstyle)=="string"){if(i instanceof t)switch(e.mathstyle){case"cramp":n=n.cramp;break;case"superscript":n=n.sup;break;case"subscript":n=n.sub;break;case"numerator":n=n.fracNum;break;case"denominator":n=n.fracDen;break}switch(e.mathstyle){case"textstyle":n=Fe.textstyle;break;case"displaystyle":n=Fe.displaystyle;break;case"scriptstyle":n=Fe.scriptstyle;break;case"scriptscriptstyle":n=Fe.scriptscriptstyle;break;case"":case"auto":break}}this.mathstyle=n,this.smartFence=i.smartFence,this.placeholderSymbol=i.placeholderSymbol,this.colorMap=(M=i.colorMap)!=null?M:(T=>T),this.backgroundColorMap=(k=i.backgroundColorMap)!=null?k:(T=>T),this.getMacro=i.getMacro,this.parent!==void 0||this.registers}makeID(){if(!this.atomIdsSettings)return;if(this.atomIdsSettings.overrideID)return this.atomIdsSettings.overrideID;if(typeof this.atomIdsSettings.seed!="number")return`${Date.now().toString(36).slice(-2)}${Math.floor(Math.random()*1e5).toString(36)}`;let e=this.atomIdsSettings.seed.toString(36);return this.atomIdsSettings.seed+=1,e}scale(e){return e*this.effectiveFontSize}get scalingFactor(){return this.parent?this.effectiveFontSize/this.parent.effectiveFontSize:1}get isDisplayStyle(){return this.mathstyle.id===tn||this.mathstyle.id===Jr}get isCramped(){return this.mathstyle.cramped}get isTight(){return this.mathstyle.isTight}get metrics(){return this.mathstyle.metrics}get effectiveFontSize(){return Math.max(Fr[Math.max(1,this.size+this.mathstyle.sizeDelta)],this.minFontScale)}getRegister(e){if(this.registers&&e in this.registers)return this.registers[e];if(this.parent)return this.parent.getRegister(e)}getRegisterAsNumber(e){let r=this.getRegister(e);if(typeof r=="number")return r;if(typeof r=="string")return Number(r)}getRegisterAsGlue(e){if(this.registers&&e in this.registers){let r=this.registers[e];return typeof r=="object"&&"glue"in r?r:typeof r=="object"&&"dimension"in r?{glue:{dimension:r.dimension}}:typeof r=="number"?{glue:{dimension:r}}:void 0}if(this.parent)return this.parent.getRegisterAsGlue(e)}getRegisterAsEm(e,r){return rn(this.getRegisterAsDimension(e),r)}getRegisterAsDimension(e){if(this.registers&&e in this.registers){let r=this.registers[e];return typeof r=="object"&&"glue"in r?r.glue:typeof r=="object"&&"dimension"in r?r:typeof r=="number"?{dimension:r}:void 0}if(this.parent)return this.parent.getRegisterAsDimension(e)}setRegister(e,r){if(r===void 0){delete this.registers[e];return}this.registers[e]=r}evaluate(e){if(!e||!("register"in e))return e;let r=this;if("global"in e&&e.global)for(;r.parent;)r=r.parent;let i=1;"factor"in e&&e.factor!==1&&e.factor!==void 0&&(i=e.factor);let n=r.getRegister(e.register);if(n===void 0)return;if(typeof n=="string")return{string:Number(n).toString()+n};if(typeof n=="number")return{number:i*n};let o=r.evaluate(n);if(o!==void 0)return"string"in o?{string:Number(n).toString()+o.string}:"number"in o?{number:i*o.number}:"dimension"in o?u(m({},o),{dimension:i*o.dimension}):"glue"in o?u(m({},o),{glue:u(m({},o.glue),{dimension:i*o.glue.dimension}),shrink:o.shrink?u(m({},o.shrink),{dimension:i*o.shrink.dimension}):void 0,grow:o.grow?u(m({},o.grow),{dimension:i*o.grow.dimension}):void 0}):e}toDimension(e){let r=this.evaluate(e);if(r===void 0)return null;if("dimension"in r)return r;if("glue"in r)return r.glue;if("number"in r)return{dimension:r.number};if("string"in r){let i=parseFloat(r.string),n=r.string.match(/(mm|cm|ex|px|em|bp|dd|pc|in|mu)$/);return n?{dimension:i,unit:n[0]}:{dimension:i}}return null}toEm(e,r){if(e===null)return 0;let i=this.toDimension(e);return i===null?0:So(i,r)/Xe}toNumber(e){if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:"number"in r?r.number:"dimension"in r?r.dimension:"glue"in r?r.glue.dimension:"string"in r?Number(r.string):null}toColor(e){var i,n;if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:"string"in r?(n=(i=this.colorMap)==null?void 0:i.call(this,r.string))!=null?n:r.string:null}toBackgroundColor(e){var i,n;if(e===null)return null;let r=this.evaluate(e);return r===void 0?null:"string"in r?(n=(i=this.backgroundColorMap)==null?void 0:i.call(this,r.string))!=null?n:r.string:null}};var Lt=["body","above","below","superscript","subscript"];function Ct(t){return typeof t=="string"&&Lt.includes(t)}function Wr(t){return t!==void 0&&Array.isArray(t)&&t.length===2}var p=class t{constructor(e){this.isRoot=!1;var r,i,n,o,a,s,l;this.type=e.type,typeof e.value=="string"&&(this.value=e.value),this.command=(i=(r=e.command)!=null?r:this.value)!=null?i:"",this.mode=(n=e.mode)!=null?n:"math",e.isFunction&&(this.isFunction=!0),(e.isRoot||this.type==="root")&&(this.isRoot=!0),e.limits&&(this.subsupPlacement=e.limits),this.style=m({},(o=e.style)!=null?o:{}),this.displayContainsHighlight=(a=e.displayContainsHighlight)!=null?a:!1,this.captureSelection=(s=e.captureSelection)!=null?s:!1,this.skipBoundary=(l=e.skipBoundary)!=null?l:!1,e.verbatimLatex!==void 0&&e.verbatimLatex!==null&&(this.verbatimLatex=e.verbatimLatex),e.args&&(this.args=e.args),e.body&&(this.body=e.body),this._changeCounter=0}static createBox(e,r,i){var s;if(!r)return null;let n=rc(r),o=[];for(let l of n){let c=l[0].style,h=ic(e,l,{style:{color:c.color,backgroundColor:c.backgroundColor,fontSize:c.fontSize}});h&&o.push(h)}if(o.length===0)return null;let a=((s=i==null?void 0:i.classes)!=null?s:"").trim();return o.length===1&&!a&&!(i!=null&&i.type)?o[0].wrap(e):new y(o,{classes:a,type:i==null?void 0:i.type}).wrap(e)}static serialize(e,r){return Q.serialize(e,r)}static commonAncestor(e,r){if(e===r||e.parent===r.parent)return e.parent;let i=new WeakSet,{parent:n}=e;for(;n;)i.add(n),n=n.parent;for(n=r.parent;n;){if(i.has(n))return n;n=n.parent}}static fromJson(e){return typeof e=="string"?new t({type:"mord",value:e,mode:"math"}):new t(e)}toJson(){if(this._json)return this._json;let e={};if(this.type&&(e.type=this.type),this.mode!=="math"&&(e.mode=this.mode),this.command&&this.command!==this.value&&(e.command=this.command),this.value!==void 0&&(e.value=this.value),this.style&&Object.keys(this.style).length>0&&(e.style=m({},this.style)),this.verbatimLatex!==void 0&&(e.verbatimLatex=this.verbatimLatex),this.subsupPlacement&&(e.subsupPlacement=this.subsupPlacement),this.explicitSubsupPlacement&&(e.explicitSubsupPlacement=!0),this.isFunction&&(e.isFunction=!0),this.displayContainsHighlight&&(e.displayContainsHighlight=!0),this.skipBoundary&&(e.skipBoundary=!0),this.captureSelection&&(e.captureSelection=!0),this.args&&(e.args=nc(this.args)),this._branches)for(let r of Object.keys(this._branches))this._branches[r]&&(e[r]=this._branches[r].filter(i=>i.type!=="first").map(i=>i.toJson()));return e.type==="mord"&&Object.keys(e).length===2&&"value"in e?e.value:(this._json=e,e)}get changeCounter(){return this.parent?this.parent.changeCounter:this._changeCounter}set isDirty(e){e&&(this._json=void 0,this.parent||this._changeCounter++,"verbatimLatex"in this&&(this.verbatimLatex=void 0),this._children=void 0,this.parent&&(this.parent.isDirty=!0))}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):this.body&&this.command?B([F(this.command,this.bodyToLatex(e)),this.supsubToLatex(e)]):this.body?B([this.bodyToLatex(e),this.supsubToLatex(e)]):!this.value||this.value==="\u200B"?"":this.command}bodyToLatex(e){var i;let r=(i=e.defaultMode)!=null?i:this.mode==="math"?"math":"text";return Q.serialize(this.body,u(m({},e),{defaultMode:r}))}aboveToLatex(e){return Q.serialize(this.above,e)}belowToLatex(e){return Q.serialize(this.below,e)}supsubToLatex(e){let r="";if(e=u(m({},e),{defaultMode:"math"}),this.branch("subscript")!==void 0){let i=Q.serialize(this.subscript,e);i.length===0?r+="_{}":i.length===1?/^[0-9]$/.test(i)?r+=`_${i}`:r+=`_{${i}}`:r+=`_{${i}}`}if(this.branch("superscript")!==void 0){let i=Q.serialize(this.superscript,e);i.length===0?r+="^{}":i.length===1?i==="\u2032"?r+="^\\prime ":i==="\u2033"?r+="^\\doubleprime ":/^[0-9]$/.test(i)?r+=`^${i}`:r+=`^{${i}}`:r+=`^{${i}}`}return r}get treeDepth(){let e=1,r=this.parent;for(;r;)r=r.parent,e+=1;return e}get inCaptureSelection(){let e=this;for(;e;){if(e.captureSelection)return!0;e=e.parent}return!1}get parentPrompt(){let e=this.parent;for(;e;){if(e.type==="prompt"&&!e.captureSelection)return e;e=e.parent}return null}branch(e){if(Ct(e)&&this._branches)return this._branches[e]}get branches(){if(!this._branches)return[];let e=[];for(let r of Lt)this._branches[r]&&e.push(r);return e}createBranch(e){return Ct(e),Ct(e)?(this._branches?this._branches[e]||(this._branches[e]=[this.makeFirstAtom(e)]):this._branches={[e]:[this.makeFirstAtom(e)]},this.isDirty=!0,this._branches[e]):[]}get row(){return Wr(this.parentBranch)?this.parentBranch[0]:-1}get col(){return Wr(this.parentBranch)?this.parentBranch[1]:-1}get body(){var e;return(e=this._branches)==null?void 0:e.body}set body(e){this.setChildren(e,"body")}get superscript(){var e;return(e=this._branches)==null?void 0:e.superscript}set superscript(e){this.setChildren(e,"superscript")}get subscript(){var e;return(e=this._branches)==null?void 0:e.subscript}set subscript(e){this.setChildren(e,"subscript")}get above(){var e;return(e=this._branches)==null?void 0:e.above}set above(e){this.setChildren(e,"above")}get below(){var e;return(e=this._branches)==null?void 0:e.below}set below(e){this.setChildren(e,"below")}applyStyle(e,r){this.isDirty=!0,r!=null&&r.unstyledOnly?(e.color&&!this.style.color&&(this.style.color=e.color),e.backgroundColor&&!this.style.backgroundColor&&(this.style.backgroundColor=e.backgroundColor),e.fontFamily&&!this.style.fontFamily&&(this.style.fontFamily=e.fontFamily),e.fontShape&&!this.style.fontShape&&(this.style.fontShape=e.fontShape),e.fontSeries&&!this.style.fontSeries&&(this.style.fontSeries=e.fontSeries),e.textDecoration&&!this.style.textDecoration&&(this.style.textDecoration=e.textDecoration),e.fontSize&&!this.style.fontSize&&(this.style.fontSize=e.fontSize),e.variant&&!this.style.variant&&(this.style.variant=e.variant),e.variantStyle&&!this.style.variantStyle&&(this.style.variantStyle=e.variantStyle)):this.style=m(m({},this.style),e),this.style.fontFamily==="none"&&delete this.style.fontFamily,this.style.fontShape==="auto"&&delete this.style.fontShape,this.style.fontSeries==="auto"&&delete this.style.fontSeries,this.style.color==="none"&&(delete this.style.color,delete this.style.verbatimColor),this.style.backgroundColor==="none"&&(delete this.style.backgroundColor,delete this.style.verbatimBackgroundColor),this.style.fontSize==="auto"&&delete this.style.fontSize;for(let i of this.children)i.applyStyle(e,r)}getInitialBaseElement(){var e,r,i;return this.hasEmptyBranch("body")?this:((e=this.body)==null||e[0].type,(i=(r=this.body[1])==null?void 0:r.getInitialBaseElement())!=null?i:this)}getFinalBaseElement(){return this.hasEmptyBranch("body")?this:this.body[this.body.length-1].getFinalBaseElement()}isCharacterBox(){return this.type==="leftright"||this.type==="genfrac"||this.type==="subsup"||this.type==="delim"||this.type==="array"||this.type==="surd"?!1:this.getFinalBaseElement().type==="mord"}hasEmptyBranch(e){let r=this.branch(e);return r?(r.length>0,r[0].type,r.length===1):!0}setChildren(e,r){var n;if(!e||(Ct(r),!Ct(r)))return;let i=((n=e[0])==null?void 0:n.type)==="first"?[...e]:[this.makeFirstAtom(r),...e];this._branches?this._branches[r]=i:this._branches={[r]:i};for(let o of e)o.parent=this,o.parentBranch=r;this.isDirty=!0}makeFirstAtom(e){let r=new t({type:"first",mode:this.mode});return r.parent=this,r.parentBranch=e,r}addChild(e,r){e.type,this.createBranch(r).push(e),this.isDirty=!0,e.parent=this,e.parentBranch=r}addChildBefore(e,r){r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r),0,e),this.isDirty=!0,e.parent=this,e.parentBranch=r.parentBranch}addChildAfter(e,r){r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r)+1,0,e),this.isDirty=!0,e.parent=this,e.parentBranch=r.parentBranch}addChildren(e,r){let i=this.createBranch(r);for(let n of e)n.parent=this,n.parentBranch=r,i.push(n);this.isDirty=!0}addChildrenAfter(e,r){e.length===0||e[0].type,r.parentBranch;let i=this.createBranch(r.parentBranch);i.splice(i.indexOf(r)+1,0,...e),this.isDirty=!0;for(let n of e)n.parent=this,n.parentBranch=r.parentBranch;return e[e.length-1]}removeBranch(e){let r=this.branch(e);if(Ct(e)&&(this._branches[e]=void 0),!r)return[];for(let o of r)o.parent=void 0,o.parentBranch=void 0;r[0].type;let[i,...n]=r;return this.isDirty=!0,n}removeChild(e){if(e.parent,e.type==="first")return;let r=this.branch(e.parentBranch),i=r.indexOf(e);i>=0,r.splice(i,1),this.isDirty=!0,e.parent=void 0,e.parentBranch=void 0}get siblings(){return this.parent?this.parent.branch(this.parentBranch):[]}get firstSibling(){return this.siblings[0]}get lastSibling(){let{siblings:e}=this;return e[e.length-1]}get isFirstSibling(){return this===this.firstSibling}get isLastSibling(){return this===this.lastSibling}get hasNoSiblings(){return this.siblings.length===1}get leftSibling(){this.parent;let e=this.parent.branch(this.parentBranch);return e[e.indexOf(this)-1]}get rightSibling(){this.parent;let e=this.parent.branch(this.parentBranch);return e[e.indexOf(this)+1]}get hasChildren(){return!!(this._branches&&this.children.length>0)}get firstChild(){return this.hasChildren,this.children[0]}get lastChild(){this.hasChildren;let{children:e}=this;return e[e.length-1]}get children(){if(this._children)return this._children;if(!this._branches)return[];let e=[];for(let r of Lt)if(this._branches[r])for(let i of this._branches[r])e.push(...i.children),e.push(i);return this._children=e,e}render(e){if(this.type==="first"&&!e.atomIdsSettings)return null;let r=G(this.command,this.mode);if(r!=null&&r.render)return r.render(this,e);let i=new $({parent:e},this.style),n=this.createBox(i,{classes:this.parent?"":"ML__base"});return n?(!this.subsupPlacement&&(this.superscript||this.subscript)&&(n=this.attachSupsub(i,{base:n})),n.wrap(i)):null}attachSupsub(e,r){var x;let i=r.base,n=this.superscript,o=this.subscript;if(!n&&!o)return i;let a=null,s=null,l=(x=r.isCharacterBox)!=null?x:this.isCharacterBox(),c=0;if(n){let w=new $({parent:e,mathstyle:"superscript"});a=t.createBox(w,n),l||(c=i.height-e.metrics.supDrop*w.scalingFactor)}let h=0;if(o){let w=new $({parent:e,mathstyle:"subscript"});s=t.createBox(w,o),l||(h=i.depth+e.metrics.subDrop*w.scalingFactor)}let d;e.isDisplayStyle?d=e.metrics.sup1:e.isCramped?d=e.metrics.sup3:d=e.metrics.sup2;let f=.5/Xe/e.scalingFactor,S=null;if(s&&a){c=Math.max(c,d,a.depth+.25*e.metrics.xHeight),h=Math.max(h,e.metrics.sub2);let w=e.metrics.defaultRuleThickness;if(c-a.depth-(s.height-h)<4*w){h=4*w-(c-a.depth)+s.height;let b=.8*e.metrics.xHeight-(c-a.depth);b>0&&(c+=b,h-=b)}let D=this.type==="extensible-symbol"&&i.italic?-i.italic:0;S=new J({individualShift:[{box:s,shift:h,marginLeft:D},{box:a,shift:-c}]})}else s&&!a?(h=Math.max(h,e.metrics.sub1,s.height-.8*Me),S=new J({shift:h,children:[{box:s,marginRight:f,marginLeft:this.isCharacterBox()?-i.italic:0}]})):!s&&a&&(c=Math.max(c,d,a.depth+.25*Me),S=new J({shift:-c,children:[{box:a,marginRight:f}]}));return new y([i,new y(S,{caret:this.caret,isSelected:this.isSelected,classes:"ML__msubsup"})],{type:r.type})}attachLimits(e,r){let i=this.superscript?t.createBox(new $({parent:e,mathstyle:"superscript"},this.style),this.superscript):null,n=this.subscript?t.createBox(new $({parent:e,mathstyle:"subscript"},this.style),this.subscript):null;return!i&&!n?r.base.wrap(e):X0(e,u(m({},r),{above:i,below:n}))}bind(e,r){if(!r||e.isPhantom||this.value==="\u200B")return r;let i=this.parent;for(;i&&!i.captureSelection;)i=i.parent;return i!=null&&i.captureSelection||(this.id||(this.id=e.makeID()),r.atomID=this.id),r}createBox(e,r){var s,l,c,h;let i=(s=this.value)!=null?s:this.body,n=(l=r==null?void 0:r.boxType)!=null?l:Qi(this.type),o=(c=r==null?void 0:r.classes)!=null?c:"";te(this.mode)&&(o+=" ML__text");let a=typeof i=="string"||i===void 0?new y(i!=null?i:null,{type:n,isSelected:this.isSelected,mode:this.mode,maxFontSize:e.scalingFactor,style:u(m({variant:"normal"},this.style),{fontSize:Math.max(1,e.size+e.mathstyle.sizeDelta)}),letterShapeStyle:e.letterShapeStyle,classes:o}):(h=t.createBox(e,i,{type:n,classes:o}))!=null?h:new y(null);return e.isTight&&(a.isTight=!0),(this.mode!=="math"||this.style.variant==="main")&&(a.italic=0),a.right=a.italic,this.bind(e,a),this.caret&&!this.superscript&&!this.subscript&&(a.caret=this.caret),a}isDigit(){var e;return this.type==="mord"&&this.value?/^[\d,\.]$/.test(this.value):this.type==="group"&&((e=this.body)==null?void 0:e.length)===2?this.body[0].type==="first"&&this.body[1].value===",":!1}asDigit(){var e;return this.type==="mord"&&this.value&&/^[\d,\.]$/.test(this.value)?this.value:this.type==="group"&&((e=this.body)==null?void 0:e.length)===2&&this.body[0].type==="first"&&this.body[1].value===","?".":""}};function rc(t){let e,r=[],i=[];for(let n of t){if(n.type==="first"){i.push(n);continue}if(!e&&!n.style)i.push(n);else{let o=n.style;e&&o.color===e.color&&o.backgroundColor===e.backgroundColor&&o.fontSize===e.fontSize?i.push(n):(i.length>0&&r.push(i),i=[n],e=o)}}return i.length>0&&r.push(i),r}function ic(t,e,r){var s,l,c,h,d;if(!e||e.length===0)return null;let i=new $({parent:t},r.style),n=!((s=i.atomIdsSettings)!=null&&s.groupNumbers),o=[];if(e.length===1){let f=e[0],S=f.render(i);S&&(n&&f.isSelected&&S.selected(!0),o=[S])}else{let f="",S=!0;for(let x of e){(l=i.atomIdsSettings)!=null&&l.groupNumbers&&f&&(S&&x.isDigit()||!S&&wo(x))&&(i.atomIdsSettings.overrideID=f);let w=x.render(i);i.atomIdsSettings&&(i.atomIdsSettings.overrideID=void 0),w&&((c=i.atomIdsSettings)!=null&&c.groupNumbers&&((x.isDigit()||wo(x))&&(!f||S!==x.isDigit())&&(S=x.isDigit(),f=(h=x.id)!=null?h:""),f&&(!(x.isDigit()||wo(x))||!x.hasEmptyBranch("superscript")||!x.hasEmptyBranch("subscript"))&&(f="")),n&&x.isSelected&&w.selected(!0),o.push(w))}}if(o.length===0)return null;let a=new y(o,u(m({isTight:i.isTight},r),{type:(d=r.type)!=null?d:"lift"}));return a.isSelected=o.every(f=>f.isSelected),a.wrap(i)}function wo(t){return te(t.mode)}function nc(t){return t.map(e=>e===null?"":Array.isArray(e)&&e[0]instanceof p?{atoms:e.map(r=>r.toJson())}:typeof e=="object"&&"group"in e?{group:e.group.map(r=>r.toJson())}:e)}var Tt=class t extends p{constructor(e){var r;super(u(m({},e),{type:"accent",body:(r=e.body)!=null?r:void 0})),e.accentChar?this.accent=e.accentChar:this.svgAccent=e==null?void 0:e.svgAccent,this.skipBoundary=!0,this.captureSelection=!0}static fromJson(e){return new t(e)}toJson(){return u(m({},super.toJson()),{accentChar:this.accent,svgAccent:this.svgAccent})}render(e){var c;let r=new $({parent:e,mathstyle:"cramp"},this.style),i=(c=p.createBox(r,this.body))!=null?c:new y("\u25A1",{style:this.style}),n=0;!this.hasEmptyBranch("body")&&this.body.length===2&&this.body[1].isCharacterBox()&&(n=i.skew);let o=Math.min(i.height,Me),a;if(this.svgAccent)a=mr(this.svgAccent),o=r.metrics.bigOpSpacing1-o;else if(this.accent){let h=new y(this.accent,{fontFamily:"Main-Regular"});h.italic=0;let d=this.accent===8407||this.accent===8411||this.accent===8412?" ML__accent-combining-char":"";a=new y(h,{classes:"ML__accent-body"+d})}let s=(i.width-a.width)/2+i.left+2*n;a=new J({shift:0,children:[{box:new y(i)},-o,{box:a,marginLeft:s,classes:["ML__center"]}]});let l=new y(a,{type:"ord"});return this.caret&&(l.caret=this.caret),this.bind(r,l.wrap(r)),this.attachSupsub(r,{base:l})}};var Mo={"(":")","{":"}","[":"]","|":"|","\\lbrace":"\\rbrace","\\lparen":"\\rparen","\\{":"\\}","\\langle":"\\rangle","\\lfloor":"\\rfloor","\\lceil":"\\rceil","\\vert":"\\vert","\\lvert":"\\rvert","\\Vert":"\\Vert","\\lVert":"\\rVert","\\lbrack":"\\rbrack","\\ulcorner":"\\urcorner","\\llcorner":"\\lrcorner","\\lgroup":"\\rgroup","\\lmoustache":"\\rmoustache"},_u=Object.fromEntries(Object.entries(Mo).map(([t,e])=>[e,t]));function nn(t){var e;return(e={"[":91,"]":93,"(":40,")":41,"\\mid":8739,"|":8739,"\u2223":8739,"\u2225":8741,"\\|":8739,"\\{":123,"\\}":125,"\\lbrace":123,"\\rbrace":125,"\\lparen":40,"\\rparen":41,"\\lbrack":91,"\\rbrack":93,"\\vert":8739,"\\lvert":8739,"\\mvert":8739,"\\rvert":8739,"\\Vert":8741,"\\lVert":8741,"\\mVert":8741,"\\rVert":8741,"\\parallel":8741,"\\shortparallel":8741,"\\langle":10216,"\\rangle":10217,"\\lfloor":8970,"\\rfloor":8971,"\\lceil":8968,"\\rceil":8969,"\\ulcorner":9484,"\\urcorner":9488,"\\llcorner":9492,"\\lrcorner":9496,"\\lgroup":10222,"\\rgroup":10223,"\\lmoustache":9136,"\\rmoustache":9137,"\\surd":8730}[t])!=null?e:t.codePointAt(0)}function oc(t,e,r,i){var a;let o=new y(nn(t),{fontFamily:"Main-Regular",isSelected:i.isSelected,classes:"ML__small-delim "+((a=i.classes)!=null?a:"")}).wrap(e);return r&&o.setTop((1-e.scalingFactor)*fe),o}function el(t,e,r,i,n){var s,l;let o=new $({parent:i,mathstyle:"textstyle"},n==null?void 0:n.style),a=new y(nn(t),{fontFamily:`Size${e}-Regular`,isSelected:n.isSelected,classes:((s=n.classes)!=null?s:"")+` ML__delim-size${e}`,type:(l=n.type)!=null?l:"ignore"}).wrap(o);return r&&a.setTop((1-o.scalingFactor)*fe),a}function tl(t,e,r,i,n){var ae;let o,a,s,l;o=s=l=nn(t),a=null;let c="Size1-Regular";t==="\\vert"||t==="\\lvert"||t==="\\rvert"||t==="\\mvert"||t==="\\mid"?s=o=l=8739:t==="\\Vert"||t==="\\lVert"||t==="\\rVert"||t==="\\mVert"||t==="\\|"?s=o=l=8741:t==="\\uparrow"?s=l=9168:t==="\\Uparrow"?s=l=8214:t==="\\downarrow"?o=s=9168:t==="\\Downarrow"?o=s=8214:t==="\\updownarrow"?(o=8593,s=9168,l=8595):t==="\\Updownarrow"?(o=8657,s=8214,l=8659):t==="["||t==="\\lbrack"?(o=9121,s=9122,l=9123,c="Size4-Regular"):t==="]"||t==="\\rbrack"?(o=9124,s=9125,l=9126,c="Size4-Regular"):t==="\\lfloor"||t==="\u230A"?(s=o=9122,l=9123,c="Size4-Regular"):t==="\\lceil"||t==="\u2308"?(o=9121,s=l=9122,c="Size4-Regular"):t==="\\rfloor"||t==="\u230B"?(s=o=9125,l=9126,c="Size4-Regular"):t==="\\rceil"||t==="\u2309"?(o=9124,s=l=9125,c="Size4-Regular"):t==="("||t==="\\lparen"?(o=9115,s=9116,l=9117,c="Size4-Regular"):t===")"||t==="\\rparen"?(o=9118,s=9119,l=9120,c="Size4-Regular"):t==="\\{"||t==="\\lbrace"?(o=9127,a=9128,l=9129,s=9130,c="Size4-Regular"):t==="\\}"||t==="\\rbrace"?(o=9131,a=9132,l=9133,s=9130,c="Size4-Regular"):t==="\\lgroup"||t==="\u27EE"?(o=9127,l=9129,s=9130,c="Size4-Regular"):t==="\\rgroup"||t==="\u27EF"?(o=9131,l=9133,s=9130,c="Size4-Regular"):t==="\\lmoustache"||t==="\u23B0"?(o=9127,l=9133,s=9130,c="Size4-Regular"):t==="\\rmoustache"||t==="\u23B1"?(o=9131,l=9129,s=9130,c="Size4-Regular"):t==="\\surd"?(o=57345,l=9143,s=57344,c="Size4-Regular"):t==="\\ulcorner"?(o=9484,s=l=32):t==="\\urcorner"?(o=9488,s=l=32):t==="\\llcorner"?(l=9492,s=o=32):t==="\\lrcorner"&&(o=9496,s=o=32);let h=Mt(o,c),d=h.height+h.depth,f=Mt(s,c),S=f.height+f.depth,x=Mt(l,c),w=x.height+x.depth,D=0,b=1;if(a!==null){let E=Mt(a,c);D=E.height+E.depth,b=2}let M=d+w+D,k=Math.max(0,Math.ceil((e-M)/(b*S))),T=M+k*b*S,q=fe;r&&(q=q*i.scalingFactor);let L=T/2-q,_=.008,z=[];z.push({box:new y(l,{fontFamily:c})}),z.push(-_);let ee=new y(s,{fontFamily:c});if(a===null)for(let E=0;E","\\langle","\\rangle","/","\\backslash","\\lt","\\gt"]),sc=[0,1.2,1.8,2.4,3];function nl(t,e,r,i){return t===void 0||t==="."?st(r,i.classes):(t==="<"||t==="\\lt"||t==="\u27E8"?t="\\langle":(t===">"||t==="\\gt"||t==="\u27E9")&&(t="\\rangle"),rl.has(t)||il.has(t)?el(t,e,!1,r,i):ac.has(t)?tl(t,sc[e],!1,r,i):(""+t,null))}var lc=[{type:"small",mathstyle:"scriptscriptstyle"},{type:"small",mathstyle:"scriptstyle"},{type:"small",mathstyle:"textstyle"},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4}],cc=[{type:"small",mathstyle:"scriptscriptstyle"},{type:"small",mathstyle:"scriptscriptstyle"},{type:"small",mathstyle:"textstyle"},{type:"stack"}],mc=[{type:"small",mathstyle:"scriptscriptstyle"},{type:"small",mathstyle:"scriptstyle"},{type:"small",mathstyle:"textstyle"},{type:"large",size:1},{type:"large",size:2},{type:"large",size:3},{type:"large",size:4},{type:"stack"}];function uc(t){return t.type==="small"?"Main-Regular":t.type==="large"?"Size"+t.size+"-Regular":(t.type,"Size4-Regular")}function hc(t,e,r,i){let n={"-4":0,"-3":1,0:2}[i.mathstyle.sizeDelta];for(let o=n;oe)return r[o]}return r[r.length-1]}function ur(t,e,r,i,n,o){if(!e||e.length===0||e===".")return st(n);e==="<"||e==="\\lt"?e="\\langle":(e===">"||e==="\\gt")&&(e="\\rangle");let a;il.has(e)?a=lc:rl.has(e)?a=mc:a=cc;let s=hc(nn(e),r,a,n),l=new $({parent:n,mathstyle:s.mathstyle},o==null?void 0:o.style);return s.type==="small"?oc(e,l,i,u(m({},o),{type:t})):s.type==="large"?el(e,s.size,i,l,u(m({},o),{type:t})):(s.type,tl(e,r,i,l,u(m({},o),{type:t})))}function Nt(t,e,r,i,n,o){if(e===".")return st(n,o==null?void 0:o.classes);let a=fe*n.scalingFactor,s=901,l=5/Xe,c=Math.max(r-a,i+a),h=Math.max(c/500*s,2*c-l);return ur(t,e,h,!0,n,o)}function st(t,e){let r=new y(null,{classes:" ML__nulldelimiter "+(e!=null?e:""),type:"ignore"});return r.width=t.getRegisterAsEm("nulldelimiterspace"),r.wrap(new $({parent:t,mathstyle:"textstyle"}))}var se=class t extends p{constructor(e){var r,i,n,o;super({type:"overunder",command:e.command,style:e.style,mode:e.mode,body:e.body,skipBoundary:(r=e.skipBoundary)!=null?r:!0}),this.subsupPlacement=e.supsubPlacement,this.svgAbove=e.svgAbove,this.svgBelow=e.svgBelow,this.svgBody=e.svgBody,this.above=e.above,this.below=e.below,this.boxType=(i=e.boxType)!=null?i:"ord",this.paddedBody=(n=e.paddedBody)!=null?n:!1,this.paddedLabels=(o=e.paddedLabels)!=null?o:!1}static fromJson(e){return new t(e)}toJson(){let e=super.toJson();return this.skipBoundary||(e.skipBoundary=!1),this.subsupPlacement&&(e.subsupPlacement=this.subsupPlacement),this.svgAbove&&(e.svgAbove=this.svgAbove),this.svgBelow&&(e.svgBelow=this.svgBelow),this.svgBody&&(e.svgBody=this.svgBody),this.boxType!=="ord"&&(e.boxType=this.boxType),this.paddedBody&&(e.paddedBody=!0),this.paddedLabels&&(e.paddedLabels=!0),e}render(e){let r=this.svgBody?mr(this.svgBody):p.createBox(e,this.body,{type:"ignore"}),i=new $({parent:e,mathstyle:"scriptstyle"},this.style),n=null;this.svgAbove?n=mr(this.svgAbove):this.above&&(n=p.createBox(i,this.above,{type:"ignore"}));let o=null;this.svgBelow?o=mr(this.svgBelow):this.below&&(o=p.createBox(i,this.below,{type:"ignore"})),this.paddedBody&&(r=new y([st(e,"ML__open"),r,st(e,"ML__close")],{type:"ignore"}));let a=dc(e,{base:r,above:n,below:o,type:this.boxType==="bin"||this.boxType==="rel"?this.boxType:"ord",paddedAboveBelow:this.paddedLabels});return a?(this.subsupPlacement==="over-under"?a=this.attachLimits(e,{base:a,type:a.type}):a=this.attachSupsub(e,{base:a}),this.caret&&(a.caret=this.caret),this.bind(e,a)):null}};function dc(t,e){if(!e.base)return null;if(!e.above&&!e.below){let s=new y(e.base,{type:e.type});return s.setStyle("position","relative"),s}let r=0;e.above&&(r=t.metrics.bigOpSpacing5);let i=null,n=e.base,o=0,a=["ML__center"];if(e.paddedAboveBelow&&a.push("ML__label_padding"),e.below&&e.above){let s=t.metrics.bigOpSpacing5+e.below.height+e.below.depth+n.depth+o;i=new J({bottom:s,children:[t.metrics.bigOpSpacing5,{box:e.below,classes:a},{box:n,classes:["ML__center"]},r,{box:e.above,classes:a},t.metrics.bigOpSpacing5]})}else e.below?i=new J({top:n.height-o,children:[t.metrics.bigOpSpacing5,{box:e.below,classes:a},{box:n,classes:["ML__center"]}]}):e.above&&(i=new J({bottom:n.depth+o,children:[{box:n,classes:["ML__center"]},r,{box:e.above,classes:a},t.metrics.bigOpSpacing5]}));return new y(i,{type:e.type})}var ol={acute:714,grave:715,dot:729,ddot:168,dddot:8411,ddddot:8412,mathring:730,tilde:126,bar:713,breve:728,check:711,hat:94,vec:8407};g(Object.keys(ol),"{body:auto}",{createAtom:t=>new Tt(u(m({},t),{body:A(t.args[0]),accentChar:ol[t.command.slice(1)]}))});g(["widehat","widecheck","widetilde"],"{body:auto}",{createAtom:t=>{let e=fo(A(t.args[0]));return new Tt(u(m({},t),{body:A(t.args[0]),svgAccent:t.command.slice(1)+(e.length>5?"4":["1","1","2","2","3","3"][e.length])}))}});g(["overarc","overparen","wideparen"],"{body:auto}",{createAtom:t=>new Tt(u(m({},t),{body:A(t.args[0]),svgAccent:"overarc"}))});g(["underarc","underparen"],"{body:auto}",{createAtom:t=>new se(u(m({},t),{body:A(t.args[0]),svgBelow:"underarc"}))});g("utilde","{body:auto}",{createAtom:t=>{let e=A(t.args[0]),r=fo(e),i="widetilde"+(r.length>5?"4":["1","1","2","2","3","3"][r.length]);return new se(u(m({},t),{body:e,svgBelow:i,boxType:qt(e)}))}});g("^","{:string}",{createAtom:t=>{var e;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:t.args[0]&&(e={a:"\xE2",e:"\xEA",i:"\xEE",o:"\xF4",u:"\xFB",A:"\xC2",E:"\xCA",I:"\xCE",O:"\xD4",U:"\xDB"}[t.args[0]])!=null?e:"^"}))}});g("`","{:string}",{createAtom:t=>{var e;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:t.args[0]&&(e={a:"\xE0",e:"\xE8",i:"\xEC",o:"\xF2",u:"\xF9",A:"\xC0",E:"\xC8",I:"\xCC",O:"\xD2",U:"\xD9"}[t.args[0]])!=null?e:"`"}))}});g("'","{:string}",{createAtom:t=>{var e;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:t.args[0]&&(e={a:"\xE1",e:"\xE9",i:"\xED",o:"\xF3",u:"\xFA",A:"\xC1",E:"\xC9",I:"\xCD",O:"\xD3",U:"\xDA"}[t.args[0]])!=null?e:"'"}))}});g('"',"{:string}",{createAtom:t=>{var e,r;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:(e=t.args)!=null&&e[0]?(r={a:"\xE4",e:"\xEB",i:"\xEF",o:"\xF6",u:"\xFC",A:"\xC4",E:"\xCB",I:"\xCB",O:"\xD6",U:"\xDC"}[t.args[0]])!=null?r:'"'+t.args[0]:'"'}))}});g(".","{:string}",{createAtom:t=>{var e,r;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:(e=t.args)!=null&&e[0]?(r={a:"\u0227",e:"\u0117",i:"\u0307i",o:"\u022F",u:"\u0307u",A:"\u0226",E:"\u0116",I:"\u0130",O:"\u022E",U:"\u0307U"}[t.args[0]])!=null?r:"."+t.args[0]:"."}))}});g("=","{:string}",{createAtom:t=>{var e,r;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:(e=t.args)!=null&&e[0]?(r={a:"\u0101",e:"\u0113",i:"\u012B",o:"\u014D",u:"\u016B",A:"\u0100",E:"\u0112",I:"\u012A",O:"\u014C",U:"\u016A"}[t.args[0]])!=null?r:"="+t.args[0]:"="}))}});g("~","{:string}",{createAtom:t=>{var e;return new p(u(m({type:"mord"},t),{isFunction:!1,limits:"adjacent",value:t.args[0]&&(e={n:"\xF1",N:"\xD1",a:"\xE3",o:"\xF5",A:"\xC3",O:"\xD5"}[t.args[0]])!=null?e:"\xB4"}))}});g("c","{:string}",{createAtom:t=>{var e;return new p(u(m({},t),{type:"mord",isFunction:!1,limits:"adjacent",value:t.args[0]&&(e={c:"\xE7",C:"\xC7"}[t.args[0]])!=null?e:""}))}});function hr(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(//g,">")}var lt=class t extends p{constructor(e,r,i,n){var o,a;super({type:"enclose",command:e,style:n.style}),this.body=r,this.backgroundcolor=n.backgroundcolor,i.updiagonalarrow&&(i.updiagonalstrike=!1),i.box&&(i.left=!1,i.right=!1,i.bottom=!1,i.top=!1),this.notation=i,this.shadow=(o=n.shadow)!=null?o:"none",this.strokeWidth=(a=n.strokeWidth)!=null?a:"0.06em",this.strokeWidth||(this.strokeWidth="0.06em"),this.strokeStyle=n.strokeStyle,this.svgStrokeStyle=n.svgStrokeStyle,this.strokeColor=n.strokeColor,this.borderStyle=n.borderStyle,this.padding=n.padding,this.captureSelection=!1}static fromJson(e){return new t(e.command,e.body,e.notation,e)}toJson(){return u(m({},super.toJson()),{notation:this.notation,shadow:this.shadow,strokeWidth:this.strokeWidth,strokeStyle:this.strokeStyle,svgStrokeStyle:this.svgStrokeStyle,strokeColor:this.strokeColor,borderStyle:this.borderStyle,padding:this.padding})}_serialize(e){var n;if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=(n=this.command)!=null?n:"";if(this.command==="\\enclose"){i+="{"+Object.keys(this.notation).join(" ")+"}";let o="",a="";this.backgroundcolor&&this.backgroundcolor!=="transparent"&&(o+=a+'mathbackground="'+this.backgroundcolor+'"',a=","),this.shadow&&this.shadow!=="auto"&&(o+=a+'shadow="'+this.shadow+'"',a=","),this.strokeWidth||this.strokeStyle!=="solid"?(o+=a+this.borderStyle,a=","):this.strokeColor&&this.strokeColor!=="currentColor"&&(o+=a+'mathcolor="'+this.strokeColor+'"',a=","),o&&(i+=`[${o}]`)}return F(i,this.bodyToLatex(e))}render(e){var S,x,w,D,b;let r=new $({parent:e},this.style),i=p.createBox(r,this.body);if(!i)return null;let n=pc(this.borderStyle),o=r.toEm(!this.padding||this.padding==="auto"?{register:"fboxsep"}:{string:this.padding});i.setStyle("position","relative"),i.setStyle("display","inline-block"),i.setStyle("height",i.height+i.depth,"em"),i.setStyle("width",i.width,"em");let a=new y(null,{classes:"ML__notation"}),s=i.height+i.depth+2*o,l=i.width+2*o,c="",h=Math.min(o*.2,.05);if(this.notation.horizontalstrike){let M=2*o+i.height-Me/2;c+=this.line((o+h).toString(),M.toString(),(o+i.width-h).toString(),M.toString())}if(this.notation.verticalstrike){let M=o+i.width/2;c+=this.line(M.toString(),(o+h).toString(),M.toString(),(s-o-h).toString())}if(this.notation.updiagonalstrike&&(c+=this.line((o+h).toString(),(s-o-h).toString(),(o+i.width-h).toString(),(o+h).toString())),this.notation.downdiagonalstrike&&(c+=this.line((o+h).toString(),(o+h).toString(),(o+i.width-h).toString(),(s-o-h).toString())),this.notation.updiagonalarrow){c+=this.line(o.toString(),(2*o+i.depth+i.height).toString(),(o+i.width).toString(),o.toString());let T=.03*Math.sqrt(l*l+s*s)*1,q=i.width*T,L=(i.depth+i.height)*T,_=o+i.width,z=o;z+L-.4*q<0&&(z=.4*q-L),c+='`}};function on(t){return typeof t=="number"?`${Math.floor(100*t)/100}%`:t}function pc(t){if(!t)return"1px";let e=t.match(/([0-9][a-zA-Z\%]+)/);return e===null?"1px":e[1]}function fc(t){return(Math.floor(100*t.metrics.sqrtRuleThickness/t.scalingFactor)/100/10).toString()+"em"}function al(t){let e=t.isDisplayStyle?Me:t.metrics.defaultRuleThickness;return t.metrics.defaultRuleThickness+t.scalingFactor*e/4}g("enclose","{notation:string}[style:string]{body:auto}",{createAtom:t=>{var n,o;let e=t.args,r={strokeColor:"currentColor",strokeWidth:"",strokeStyle:"solid",backgroundcolor:"transparent",padding:"auto",shadow:"none",svgStrokeStyle:void 0,borderStyle:void 0,style:(n=t.style)!=null?n:{}};if(e[1]){let a=e[1].split(/,(?![^(]*\)(?:(?:[^(]*\)){2})*[^"]*$)/);for(let s of a){let l=s.match(/\s*(\S+)\s+(\S+)\s+(.*)/);if(l)r.strokeWidth=l[1],r.strokeStyle=l[2],r.strokeColor=l[3];else{let c=s.match(/\s*([a-z]*)\s*=\s*"(.*)"/);c&&(c[1]==="mathbackground"?r.backgroundcolor=c[2]:c[1]==="mathcolor"?r.strokeColor=c[2]:c[1]==="padding"?r.padding=c[2]:c[1]==="shadow"&&(r.shadow=c[2]))}}r.strokeStyle==="dashed"?r.svgStrokeStyle="5,5":r.strokeStyle==="dotted"&&(r.svgStrokeStyle="1,5")}r.borderStyle=`${r.strokeWidth} ${r.strokeStyle} ${r.strokeColor}`;let i={};return((o=e[0])!=null?o:"").split(/[, ]/).filter(a=>a.length>0).forEach(a=>{i[a.toLowerCase()]=!0}),new lt(t.command,A(e[2]),i,r)}});g("cancel","{body:auto}",{createAtom:t=>{var e;return new lt(t.command,A(t.args[0]),{updiagonalstrike:!0},{strokeColor:"currentColor",strokeWidth:"",strokeStyle:"solid",borderStyle:"1px solid currentColor",backgroundcolor:"transparent",padding:"auto",shadow:"none",style:(e=t.style)!=null?e:{}})}});g("bcancel","{body:auto}",{createAtom:t=>{var e;return new lt(t.command,A(t.args[0]),{downdiagonalstrike:!0},{strokeColor:"currentColor",strokeWidth:"",strokeStyle:"solid",borderStyle:"1px solid currentColor",backgroundcolor:"transparent",padding:"auto",shadow:"none",style:(e=t.style)!=null?e:{}})}});g("xcancel","{body:auto}",{createAtom:t=>{var e;return new lt(t.command,A(t.args[0]),{updiagonalstrike:!0,downdiagonalstrike:!0},{strokeColor:"currentColor",strokeWidth:"",strokeStyle:"solid",borderStyle:"1px solid currentColor",backgroundcolor:"transparent",padding:"auto",shadow:"none",style:(e=t.style)!=null?e:{}})}});var ue=class t extends p{constructor(e){var r;super({type:"placeholder",command:"\\placeholder",mode:(r=e==null?void 0:e.mode)!=null?r:"math",style:e==null?void 0:e.style}),this.captureSelection=!0}static fromJson(e){return new t(e)}toJson(){return super.toJson()}render(e){let r;return this.value=e.placeholderSymbol,typeof e.renderPlaceholder=="function"?r=e.renderPlaceholder(e):r=this.createBox(e),this.caret&&(r.classes+=" ML__placeholder-selected"),r}_serialize(e){return e.skipPlaceholders?"":"\\placeholder{}"}};var gc=["matrix","matrix*","pmatrix","pmatrix*","bmatrix","bmatrix*","Bmatrix","Bmatrix*","vmatrix","vmatrix*","Vmatrix","Vmatrix*"];function sl(t){return gc.includes(t)}function yc(t){for(let e of t)if(e.type!=="first"){if(!te(e.mode))return"ltr";if(e.value&&!/^\s+$/u.test(e.value))return"auto"}return"auto"}function bc(t,e){let r=[];for(let n of e){let o=n.type==="first"||te(n.mode),a=r[r.length-1];(a==null?void 0:a.isText)!==o?r.push({atoms:[n],isText:o}):a.atoms.push(n)}let i=r.flatMap(n=>{let o=p.createBox(t,n.atoms,{type:"ignore"});return o?n.isText?[o]:[new y(o,{classes:"ML__free-text-math-island",attributes:{dir:"ltr"}})]:[]});return i.length===0?null:new y(i,{type:"ignore"})}function xc(t,e,r){let i=0;for(let c of r.columns)"align"in c&&(i+=1);i=Math.max(i,r.minColumns);let n=0,o=[];for(let c of e){n=Math.max(n,Math.min(c.length,i));let h=0;for(;h0&&o[o.length-1].length===1&&Mc(o[o.length-1][0])&&o.pop();let a=[];for(let c of o){if(c.length!==n)for(let h=c.length;h0&&t.every(e=>e.type==="first")}function Sc(t,e,r){let i=new y(null,{classes:"ML__empty-line-anchor"}),n=t[0];n&&(n.id||(n.id=e.makeID()),i.atomID=n.id),i.setStyle("display","inline-block"),i.setStyle("width",0),i.setStyle("position","relative"),i.setStyle("height",Math.max(0,r.height+r.depth),"em"),i.setStyle("vertical-align",-r.depth,"em"),i.height=r.height,i.depth=r.depth;let o=t.find(a=>a.caret);return o!=null&&o.caret&&(i.caret=o.caret),t.some(a=>a.isSelected)&&i.selected(!0),i}function wc(t,e){return t.length===0?[new p({type:"first",mode:e})]:t[0].type!=="first"?[new p({type:"first",mode:e}),...t]:(t.slice(1).some(r=>r.type==="first"),t)}function Mc(t){return t.length===1&&t[0].type==="first"}var W=class t extends p{get isMultiline(){let e=this.environmentName;return["lines","multline","multline*","align","split","gather","gathered"].includes(e)}constructor(e,r,i,n={}){var o,a,s,l;if(super({type:"array",isRoot:n.isRoot}),this.environmentName=e,n.columns)n.columns.length===0?this.colFormat=[{align:"l"}]:this.colFormat=[...n.columns];else if(n.minColumns){let c=[];for(let h=0;hr.map(i=>i.map(n=>n.toJson()))),rowGaps:this.rowGaps,columns:this.colFormat,colSeparationType:this.colSeparationType,minColumns:this.minColumns,minRows:this.minRows,maxRows:this.maxRows});return this.arraystretch!==void 0&&(e.arraystretch=this.arraystretch),this.arraycolsep!==void 0&&(e.arraycolsep=this.arraycolsep),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),this.isRoot&&(e.isRoot=!0),e.minColumns=this.minColumns,e.minRows=this.minRows,e.maxRows=this.maxRows,this.mathstyleName&&(e.mathstyleName=this.mathstyleName),this.classes.length>0&&(e.classes=this.classes),e}branch(e){var r;if(Wr(e))return(r=this._rows[e[0]][e[1]])!=null?r:void 0}createBranch(e){var r;return Wr(e)?(this.isDirty=!0,(r=this.branch(e))!=null?r:[]):[]}get rowCount(){return this._rows.length}get colCount(){return this._rows[0].length}get maxColumns(){return this.colFormat.filter(e=>!!e.align).length}removeBranch(e){if(Ct(e))return super.removeBranch(e);let[r,...i]=this.branch(e);return r.type,this._rows[e[0]][e[1]]=void 0,i.forEach(n=>{n.parent=void 0,n.parentBranch=void 0}),this.isDirty=!0,i}get hasChildren(){return this.children.length>0}get children(){let e=[];for(let r of this._rows)for(let i of r)if(i)for(let n of i)e.push(...n.children),e.push(n);return[...e,...super.children]}render(e){var X,ae,E,V,K,Je,Dt,ut;let r=new $({parent:e,mathstyle:this.mathstyleName},this.style),i=r.getRegisterAsEm("arrayrulewidth"),n=r.getRegisterAsEm("arraycolsep"),o=r.getRegisterAsEm("doublerulesep"),a=(ae=(X=this.arraystretch)!=null?X:r.getRegisterAsNumber("arraystretch"))!=null?ae:1,s=typeof this.arraycolsep=="number"?this.arraycolsep:n;this.colSeparationType==="small"&&(s=.2778*(new $({parent:e,mathstyle:"scriptstyle"}).scalingFactor/e.scalingFactor));let l=a*C0,c=.7*l,h=.3*l,d=0,f=[],S=this.classes.includes("ML__free-text-root"),x=0,w=this._rows.length;for(let j=0;j0&&(He+=h,be=Math.max(be,He),He=0),j0&&b.push(new J({individualShift:oe}))}let M=[],k=!1,T=!1,q=0,L=!this.leftDelim,{colFormat:_}=this;for(let j of _){if("align"in j&&q>=b.length)break;if("align"in j)k?M.push(sn(2*s)):(T||L)&&M.push(sn(s)),M.push(new y(b[q],{classes:"col-align-"+j.align})),q++,k=!0,T=!1,L=!1;else if("gap"in j){if(typeof j.gap=="number")M.push(sn(j.gap));else{let oe=Ac(e,f,D,j.gap);oe&&M.push(oe)}k=!1,T=!1,L=!1}else if("separator"in j){let oe=new y(null,{classes:"ML__vertical-separator"});oe.height=d,oe.setStyle("height",d,"em"),oe.setStyle("border-right",`${i}em ${j.separator} currentColor`),oe.setStyle("vertical-align",-(d-D),"em");let P=0;T?P=o-i:k&&(P=s-i),oe.left=P,M.push(oe),k=!1,T=!0,L=!1}}k&&!this.rightDelim&&M.push(sn(s));let z=new y(M,{classes:["ML__mtable",...this.classes].join(" ")});if(this.environmentName==="array"&&!this.isMultiline&&(z.height=f[0].height,z.depth=d-f[0].height),(!this.leftDelim||this.leftDelim===".")&&(!this.rightDelim||this.rightDelim==="."))return this.caret&&(z.caret=this.caret),this.bind(e,z);let ee=z.height,de=z.depth,ye=this.bind(e,new y([this.bind(e,Nt("open",(Dt=this.leftDelim)!=null?Dt:".",ee,de,r,{isSelected:this.isSelected})),z,this.bind(e,Nt("close",(ut=this.rightDelim)!=null?ut:".",ee,de,r,{isSelected:this.isSelected}))],{type:"ord"}));return ye?(ye.setStyle("display","inline-block"),this.caret&&(ye.caret=this.caret),this.bind(e,this.attachSupsub(e,{base:ye}))):null}_serialize(e){var i;let r=[];if(this.environmentName==="lines"&&this._rows.length>1?r.push("\\displaylines{"):this.environmentName!=="lines"&&r.push(`\\begin{${this.environmentName}}`),this.environmentName==="array"){if(r.push("{"),this.colFormat!==void 0)for(let n of this.colFormat)"align"in n&&typeof n.align=="string"?r.push(n.align):"separator"in n&&n.separator==="solid"?r.push("|"):"separator"in n&&n.separator==="dashed"&&r.push(":");r.push("}")}for(let n=0;n0&&r.push(" & "),r.push(p.serialize(this._rows[n][o],e));if(n1?r.push("}"):this.environmentName!=="lines"&&r.push(`\\end{${this.environmentName}}`),B(r)}forEachCell(e){for(let r=0;ro.type!=="first")];this._rows[e][r]=n,Vt(this),this.isDirty=!0}addRowBefore(e){this.type==="array"&&Array.isArray(this._rows),this._rows.splice(e,0,Array.from({length:this.colCount},()=>an(this,!this.isMultiline))),Vt(this),this.isDirty=!0}addRowAfter(e){this.type==="array"&&Array.isArray(this._rows),this._rows.splice(e+1,0,Array.from({length:this.colCount},()=>an(this,!this.isMultiline))),Vt(this),this.isDirty=!0}removeRow(e){this.type==="array"&&Array.isArray(this._rows)&&this.rowCount>e;let r=this._rows.splice(e,1);for(let i of r)for(let n of i)if(n)for(let o of n)o.parent=void 0,o.parentBranch=void 0;Vt(this),this.isDirty=!0}addColumnBefore(e){this.type==="array"&&Array.isArray(this._rows);for(let r of this._rows)r.splice(e,0,an(this));Vt(this),this.isDirty=!0}addColumnAfter(e){this.type==="array"&&Array.isArray(this._rows);for(let r of this._rows)r.splice(e+1,0,an(this));Vt(this),this.isDirty=!0}addColumn(){this.addColumnAfter(this.colCount-1)}removeColumn(e){this.type==="array"&&Array.isArray(this._rows)&&this.colCount>e;for(let r of this._rows){let i=r.splice(e,1);for(let n of i)if(n)for(let o of n)o.parent=void 0,o.parentBranch=void 0}Vt(this),this.isDirty=!0}get cells(){let e=[];for(let r of this._rows)for(let i of r)i&&e.push(i.filter(n=>n.type!=="first"));return e}get rows(){return this._rows}};function an(t,e=!1){let r=new p({type:"first",mode:t.mode});r.parent=t;let i=[r];if(e){let n=new ue;n.parent=t,i.push(n)}return i}function Vt(t){for(let e=0;e{if(t.skipWhitespace(),!t.match("<{>"))return[];let e=[],r=[];t.mathlist.length>0&&e.push([t.mathlist]),t.beginContext({tabular:!0,root:!0});do{if(t.end()||t.match("<}>"))break;t.matchColumnSeparator()||t.matchRowSeparator()?(e.push([r]),r=[]):r.push(...t.scan(n=>["<}>","&","\\cr","\\\\","\\tabularnewline"].includes(n)))}while(!0);t.endContext(),e.push([r]);let i=t.scan();return i.length>0&&e.push([i]),e},createAtom:t=>new W("lines",t.args,[],{leftDelim:".",rightDelim:".",columns:[{align:"l"}],classes:["ML__multiline_environment"],isRoot:!0,minColumns:1,maxColumns:1,minRows:1})});Ke("split","",Oe);Ke(["gather","gather*","gathered"],"",Oe);Ke(["equation","equation*","subequations"],"",Oe);Ui(["align","align*","eqnarray"],Oe,{tabular:!0});Ke(["aligned"],"",Oe);Ke("array","{columns:colspec}",(t,e,r,i)=>new W(t,e,r,{columns:i[0],mathstyleName:"textstyle"}));Ke(["matrix","pmatrix","bmatrix","Bmatrix","vmatrix","Vmatrix","matrix*","pmatrix*","bmatrix*","Bmatrix*","vmatrix*","Vmatrix*"],"[columns:colspec]",Oe);Ke(["smallmatrix","smallmatrix*"],"[columns:colspec]",Oe);Ke(["cases","dcases","rcases"],"",Oe);function Oe(t,e=[[[]]],r=[],i=[],n){switch(t){case"math":return new W(t,e,r,{mathstyleName:"textstyle",isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case"displaymath":return new W(t,e,r,{mathstyleName:"textstyle",isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case"center":return new W(t,e,r,{columns:[{align:"c"}],classes:["ML__center_environment"],isRoot:!0,minColumns:1,maxColumns:1,minRows:1,maxRows:1});case"multline":case"multline*":return new W(t,e,r,{columns:[{align:"m"}],leftDelim:".",rightDelim:".",isRoot:!0,minColumns:1,maxColumns:1,minRows:1});case"split":return new W(t,e,r,{columns:[{align:"r"},{align:"l"}],minColumns:2,minRows:1,isRoot:!1});case"gather":case"gather*":return new W(t,e,r,{columns:[{gap:.25},{align:"c"},{gap:0}],minColumns:1,maxColumns:1,minRows:1,isRoot:!0,classes:["ML__gather_environment"]});case"gathered":return new W(t,e,r,{columns:[{gap:.25},{align:"c"},{gap:0}],minColumns:1,maxColumns:1,minRows:1});case"equation":case"equation*":case"subequations":return new W(t,e,r,{columns:[{align:"c"}],isRoot:!0,minColumns:1,maxColumns:1,minRows:1});case"aligned":{let o=0;for(let l of e)o=Math.max(o,l.length);let a=[{gap:0},{align:"r"},{gap:.25},{align:"l"}],s=2;for(;s0&&e.push({gap:1}),e.push({align:"l"});return e}g(["overrightarrow","overleftarrow","Overrightarrow","overleftharpoon","overrightharpoon","overleftrightarrow","overlinesegment","overgroup"],"{:auto}",{createAtom:t=>{var e;return new se(u(m({},t),{body:A((e=t.args)==null?void 0:e[0]),skipBoundary:!1,supsubPlacement:"over-under",paddedBody:!0,boxType:"rel",svgAbove:t.command.slice(1)}))}});g("overbrace","{:auto}",{createAtom:t=>new se(u(m({},t),{body:A(t.args[0]),skipBoundary:!1,supsubPlacement:"over-under",paddedBody:!0,boxType:"ord",svgAbove:t.command.slice(1)}))});g(["underrightarrow","underleftarrow","underleftrightarrow","underlinesegment","undergroup"],"{:auto}",{createAtom:t=>new se(u(m({},t),{body:A(t.args[0]),skipBoundary:!1,supsubPlacement:"over-under",paddedBody:!0,boxType:"rel",svgBelow:t.command.slice(1)}))});g(["underbrace"],"{:auto}",{createAtom:t=>new se(u(m({},t),{body:A(t.args[0]),skipBoundary:!1,supsubPlacement:"over-under",paddedBody:!0,boxType:"ord",svgBelow:t.command.slice(1)}))});g(["xrightarrow","longrightarrow","xleftarrow","longleftarrow","xRightarrow","xLeftarrow","xleftharpoonup","xleftharpoondown","xrightharpoonup","xrightharpoondown","xlongequal","xtwoheadleftarrow","xtwoheadrightarrow","xleftrightarrow","longleftrightarrow","xLeftrightarrow","xrightleftharpoons","longrightleftharpoons","xleftrightharpoons","xhookleftarrow","xhookrightarrow","xmapsto","xtofrom","xleftrightarrows","longleftrightarrows","xRightleftharpoons","longRightleftharpoons","xLeftrightharpoons","longLeftrightharpoons"],"[:auto]{:auto}",{createAtom:t=>{var e,r,i,n,o;return new se(u(m({},t),{svgBody:t.command.slice(1),above:((r=A((e=t.args)==null?void 0:e[1]))==null?void 0:r.length)===0?void 0:A((i=t.args)==null?void 0:i[1]),below:(o=A((n=t.args)==null?void 0:n[0]))!=null?o:null,skipBoundary:!1,supsubPlacement:"over-under",paddedBody:!0,paddedLabels:!0,boxType:"rel"}))},serialize:(t,e)=>t.command+(t.hasEmptyBranch("below")?"":`[${t.belowToLatex(e)}]`)+`{${t.aboveToLatex(e)}}${t.supsubToLatex(e)}`});var Ht=class t extends p{constructor(e,r){super(u(m({},r),{type:"extensible-symbol",isFunction:r==null?void 0:r.isFunction})),this.value=e,this.variant=r==null?void 0:r.variant,this.subsupPlacement=r==null?void 0:r.limits}static fromJson(e){return new t(e.symbol,e)}toJson(){let e=super.toJson();return this.variant&&(e.variant=this.variant),this.subsupPlacement&&(e.limits=this.subsupPlacement),this.value&&(e.symbol=this.value),e}render(e){var s;let r=e.isDisplayStyle&&this.value!=="\\smallint",i=new y(this.value,{fontFamily:r?"Size2-Regular":"Size1-Regular",classes:"ML__op-symbol "+(r?"ML__large-op":"ML__small-op"),type:"op",maxFontSize:e.scalingFactor,isSelected:this.isSelected});if(!i)return null;i.right=i.italic;let n=(i.height-i.depth)/2-fe*e.scalingFactor,o=i.italic;i.setTop(n);let a=i;if(this.superscript||this.subscript){let l=(s=this.subsupPlacement)!=null?s:"auto";l==="auto"&&e.isDisplayStyle&&(l="over-under"),a=l==="over-under"?this.attachLimits(e,{base:i,baseShift:n,slant:o}):this.attachSupsub(e,{base:i})}return new y(this.bind(e,a),{type:"op",caret:this.caret,isSelected:this.isSelected,classes:"ML__op-group"}).wrap(e)}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=[];return i.push(this.command),this.explicitSubsupPlacement&&(this.subsupPlacement==="over-under"&&i.push("\\limits"),this.subsupPlacement==="adjacent"&&i.push("\\nolimits"),this.subsupPlacement==="auto"&&i.push("\\displaylimits")),i.push(this.supsubToLatex(e)),B(i)}};var dr=class t extends p{constructor(e){var r;super(u(m({},e),{type:"surd",mode:(r=e.mode)!=null?r:"math",style:e.style,displayContainsHighlight:!0,body:e.body})),this.above=e.index}static fromJson(e){return new t(u(m({},e),{index:e.above}))}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=this.command,n=this.bodyToLatex(e);return this.above&&!this.hasEmptyBranch("above")?F(`${i}[${this.aboveToLatex(e)}]`,n):/^[0-9]$/.test(n)?`${i}${n}`:F(i,n)}get children(){if(this._children)return this._children;let e=[];if(this.above)for(let r of this.above)e.push(...r.children),e.push(r);if(this.body)for(let r of this.body)e.push(...r.children),e.push(r);return this._children=e,e}render(e){var M;let r=new $({parent:e,mathstyle:"cramp"},this.style),i=(M=p.createBox(r,this.body,{type:"inner"}))!=null?M:new y(null),n=r.scalingFactor,o=r.metrics.defaultRuleThickness/n,a=e.isDisplayStyle?Me:o,s=new y(null,{classes:"ML__sqrt-line",style:this.style});s.height=o,s.softWidth=i.width;let l=n*(o+a/4),h=Math.max(n*2*a,i.height+i.depth)+l+o,d=new $({parent:e},this.style),f=this.bind(d,new y(ur("inner","\\surd",h,!1,d,{isSelected:this.isSelected}),{isSelected:this.isSelected,classes:"ML__sqrt-sign",style:this.style}));if(!f)return null;let S=f.height+f.depth-o;S>i.height+i.depth+l&&(l=(l+S-(i.height+i.depth))/2),f.setTop(f.height-i.height-l);let x=this.bind(e,new J({firstBaseline:[{box:new y(i)},l-2*o,{box:s},o]})),w=p.createBox(new $({parent:e,mathstyle:"scriptscriptstyle"}),this.above,{type:"ignore"});if(!w){let k=new y([f,x],{classes:this.containsCaret?"ML__contains-caret":"",type:"inner"});return k.setStyle("display","inline-block"),k.setStyle("height",k.height+k.depth,"em"),this.caret&&(k.caret=this.caret),this.bind(e,k)}let D=new J({shift:-.6*(Math.max(f.height,x.height)-Math.max(f.depth,x.depth)),children:[{box:w}]}),b=new y([new y(D,{classes:"ML__sqrt-index",type:"ignore"}),f,x],{type:"inner",classes:this.containsCaret?"ML__contains-caret":""});return b.height=f.height,b.depth=f.depth,this.caret&&(b.caret=this.caret),this.bind(e,b)}};var qe=class t extends p{constructor(e,r,i){var n,o,a;super(u(m({},i),{type:"genfrac",displayContainsHighlight:!0})),this.above=e,this.below=r,this.hasBarLine=(n=i==null?void 0:i.hasBarLine)!=null?n:!0,this.continuousFraction=(o=i==null?void 0:i.continuousFraction)!=null?o:!1,this.align=(a=i==null?void 0:i.align)!=null?a:"center",this.numerPrefix=i==null?void 0:i.numerPrefix,this.denomPrefix=i==null?void 0:i.denomPrefix,this.mathstyleName=i==null?void 0:i.mathstyleName,this.leftDelim=i==null?void 0:i.leftDelim,this.rightDelim=i==null?void 0:i.rightDelim}static fromJson(e){return new t(e.above,e.below,e)}toJson(){let e={};return this.continuousFraction&&(e.continuousFraction=!0),this.align!=="center"&&(e.align=this.align),this.numerPrefix&&(e.numerPrefix=this.numerPrefix),this.denomPrefix&&(e.denomPrefix=this.denomPrefix),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),this.hasBarLine||(e.hasBarLine=!1),this.mathstyleName&&(e.mathstyleName=this.mathstyleName),m(m({},super.toJson()),e)}get children(){if(this._children)return this._children;let e=[];if(Ro.fractionNavigationOrder==="denominator-numerator"){for(let r of this.below)e.push(...r.children),e.push(r);for(let r of this.above)e.push(...r.children),e.push(r)}else{for(let r of this.above)e.push(...r.children),e.push(r);for(let r of this.below)e.push(...r.children),e.push(r)}return this._children=e,e}render(e){var q,L;let r=new $({parent:e,mathstyle:this.mathstyleName},this.style),i=r.metrics,n=new $({parent:r,mathstyle:this.continuousFraction?"":"numerator"},this.style),o=this.numerPrefix?new y([new y(this.numerPrefix),p.createBox(n,this.above)],{isTight:n.isTight,type:"ignore"}):(q=p.createBox(n,this.above,{type:"ignore"}))!=null?q:new y(null,{type:"ignore"}),a=new $({parent:r,mathstyle:this.continuousFraction?"":"denominator"},this.style),s=this.denomPrefix?new y([new y(this.denomPrefix),p.createBox(a,this.below,{type:"ignore"})]):(L=p.createBox(a,this.below,{type:"ignore"}))!=null?L:new y(null,{type:"ignore"}),l=this.hasBarLine?i.defaultRuleThickness:0,c,h=0,d;r.isDisplayStyle?(c=n.metrics.num1,h=l>0?3*l:7*l,d=a.metrics.denom1):(l>0?(c=n.metrics.num2,h=l):(c=n.metrics.num3,h=3*i.defaultRuleThickness),d=a.metrics.denom2);let f=[];this.isSelected&&f.push("ML__selected");let S=o.depth,x=s.height,w;if(l<=0){let _=c-S-(x-d);_new Ie(t.command.slice(1),u(m({},t),{limits:"adjacent",isFunction:!0,variant:"main",variantStyle:"up"}))});g(["liminf","limsup"],"",{ifMode:"math",createAtom:t=>new Ie({"\\liminf":"lim inf","\\limsup":"lim sup"}[t.command],u(m({},t),{limits:"over-under",variant:"main"}))});g(["lim","mod"],"",{ifMode:"math",createAtom:t=>new Ie(t.command.slice(1),u(m({},t),{limits:"over-under",variant:"main"}))});g(["det","max","min"],"",{ifMode:"math",isFunction:!0,createAtom:t=>new Ie(t.command.slice(1),u(m({},t),{limits:"over-under",isFunction:!0,variant:"main"}))});g("ang","{:math}",{ifMode:"math",createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),serialize:(t,e)=>`\\ang{${t.bodyToLatex(e)}}`,render:(t,e)=>{let r=t.createBox(e),i=r.caret;r.caret=void 0;let n=new y("\xB0",{style:u(m({},t.style),{variant:"normal",variantStyle:"up"})});return new y([r,n],{type:"inner",isSelected:t.isSelected,caret:i})}});g("sqrt","[index:auto]{radicand:expression}",{ifMode:"math",createAtom:t=>new dr(u(m({},t),{body:A(t.args[1]),index:t.args[0]?A(t.args[0]):void 0}))});g(["frac","dfrac","tfrac","binom","dbinom","tbinom"],"{:expression}{:expression}",{ifMode:"math",createAtom:t=>{let e=m({},t),r=t.command,i=t.args;switch(r){case"\\dfrac":case"\\frac":case"\\tfrac":e.hasBarLine=!0;break;case"\\atopfrac":e.hasBarLine=!1;break;case"\\dbinom":case"\\binom":case"\\tbinom":e.hasBarLine=!1,e.leftDelim="(",e.rightDelim=")";break;case"\\cfrac":e.hasBarLine=!0,e.continuousFraction=!0;break;default:}switch(r){case"\\dfrac":case"\\dbinom":e.mathstyleName="displaystyle";break;case"\\tfrac":case"\\tbinom":e.mathstyleName="textstyle";break;default:}return new qe(i[0]?A(i[0]):[new ue],i[1]?A(i[1]):[new ue],e)},serialize:(t,e)=>{let r=t.aboveToLatex(e),i=t.belowToLatex(e);return/^[0-9]$/.test(r)&&/^[0-9]$/.test(i)?`${t.command}${r}${i}`:F(t.command,r,i)}});g(["cfrac"],"[:string]{:expression}{:expression}",{ifMode:"math",createAtom:t=>{let e=m({},t),r=t.args;return e.hasBarLine=!0,e.continuousFraction=!0,r[0]==="r"&&(e.align="right"),r[0]==="l"&&(e.align="left"),new qe(r[1]?A(r[1]):[new ue],r[2]?A(r[2]):[new ue],e)},serialize:(t,e)=>{let r=t.aboveToLatex(e),i=t.belowToLatex(e);return F(t.command,r,i)}});g(["brace","brack"],"",{infix:!0,createAtom:t=>new qe(A(t.args[0]),A(t.args[1]),u(m({},t),{hasBarLine:!1,leftDelim:t.command==="\\brace"?"\\lbrace":"\\lbrack",rightDelim:t.command==="\\brace"?"\\rbrace":"\\rbrack"})),serialize:(t,e)=>B([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});g(["over","atop","choose"],"",{infix:!0,createAtom:t=>{let e,r,i=t.args;return t.command==="\\choose"&&(e="(",r=")"),new qe(A(i[0]),A(i[1]),u(m({},t),{hasBarLine:t.command==="\\over",leftDelim:e,rightDelim:r}))},serialize:(t,e)=>B([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});g(["overwithdelims","atopwithdelims"],"{numer:auto}{denom:auto}{left-delim:delim}{right-delim:delim}",{infix:!0,createAtom:t=>{var r,i;let e=t.args;return new qe(A(e[0]),A(e[1]),u(m({},t),{leftDelim:(r=e[2])!=null?r:".",rightDelim:(i=e[3])!=null?i:".",hasBarLine:!1}))},serialize:(t,e)=>`${t.aboveToLatex(e)} ${t.command}${t.leftDelim}${t.rightDelim}${t.belowToLatex(e)}`});g("pdiff","{numerator}{denominator}",{ifMode:"math",createAtom:t=>new qe(A(t.args[0]),A(t.args[1]),u(m({},t),{hasBarLine:!0,numerPrefix:"\u2202",denomPrefix:"\u2202"})),serialize:(t,e)=>B([t.aboveToLatex(e),t.command,t.belowToLatex(e)])});g(["sum","prod","bigcup","bigcap","coprod","bigvee","bigwedge","biguplus","bigotimes","bigoplus","bigodot","bigsqcup","intop"],"",{ifMode:"math",createAtom:t=>new Ht({coprod:"\u2210",bigvee:"\u22C1",bigwedge:"\u22C0",biguplus:"\u2A04",bigcap:"\u22C2",bigcup:"\u22C3",intop:"\u222B",prod:"\u220F",sum:"\u2211",bigotimes:"\u2A02",bigoplus:"\u2A01",bigodot:"\u2A00",bigsqcup:"\u2A06",smallint:"\u222B"}[t.command.slice(1)],u(m({},t),{limits:"auto",variant:"main"}))});g("smallint","",{ifMode:"math",createAtom:t=>new Ie("\u222B",u(m({},t),{limits:"adjacent",variant:"main"}))});var cl={int:"\u222B",iint:"\u222C",iiint:"\u222D",oint:"\u222E",oiint:"\u222F",oiiint:"\u2230",intclockwise:"\u2231",varointclockwise:"\u2232",ointctrclockwise:"\u2233",intctrclockwise:"\u2A11",sqcup:"\u2294",sqcap:"\u2293",uplus:"\u228E",wr:"\u2240",amalg:"\u2A3F",Cap:"\u22D2",Cup:"\u22D3",doublecap:"\u22D2",doublecup:"\u22D3"};g(Object.keys(cl),"",{ifMode:"math",createAtom:t=>{let e=t.command,r=cl[e.slice(1)];return new Ht(r,u(m({},t),{limits:"adjacent",variant:{"\u22D2":"ams","\u22D3":"ams"}[r]}))}});g(["Re","Im"],"",{ifMode:"math",createAtom:t=>new Ie({"\\Re":"\u211C","\\Im":"\u2111"}[t.command],u(m({},t),{limits:"adjacent",isFunction:!0,variant:"fraktur"}))});g("middle","{:delim}",{ifMode:"math",createAtom:t=>{var e;return new pr(u(m({},t),{delim:(e=t.args[0])!=null?e:"|",size:1}))}});g("the","{:value}",{createAtom:t=>new p(u(m({},t),{captureSelection:!0,verbatimLatex:null})),render:(t,e)=>{var o;let r=new $({parent:e},t.style),i="";t.isSelected&&(i+=" ML__selected");let n=r.evaluate(t.args[0]);return new y(((o=re(n))!=null?o:"").split("").map(a=>new y(a,{type:"ord",classes:i,mode:t.mode,isSelected:t.isSelected,style:m({variant:"main"},t.style)})),{type:"lift",style:t.style,caret:t.caret,isSelected:t.isSelected,classes:i}).wrap(r)},serialize:t=>{var e;return`\\the${(e=re(t.args[0]))!=null?e:"\\relax"}`}});var Ne=class t extends p{constructor(e){super({type:"error",value:e,command:e,mode:"math"}),this.verbatimLatex=e}static fromJson(e){return new t(e.command)}toJson(){return super.toJson()}render(e){let r=this.createBox(e,{classes:"ML__error"});return this.caret&&(r.caret=this.caret),r}};var gr=class t extends p{constructor(e,r){super({type:"group",mode:r}),this.body=e,this.boxType=e.length>1?"ord":"ignore",this.skipBoundary=!0,this.displayContainsHighlight=!1,(e==null?void 0:e.length)===1&&e[0].command===","&&(this.captureSelection=!0)}static fromJson(e){return new t(e.body,e.mode)}render(e){let r=p.createBox(e,this.body,{type:this.boxType});return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}_serialize(e){if(!(e.expandMacro||e.skipStyles||e.skipPlaceholders)&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);return r!=null&&r.serialize?r.serialize(this,e):`{${this.bodyToLatex(e)}}`}};var Gt=class t extends p{constructor(e,r,i){super({type:"leftright",style:i.style,displayContainsHighlight:!0}),this.variant=e,this.body=r,this.leftDelim=i.leftDelim,this.rightDelim=i.rightDelim}static fromJson(e){var r;return new t((r=e.variant)!=null?r:"",e.body,e)}toJson(){let e=super.toJson();return this.variant&&(e.variant=this.variant),this.leftDelim&&(e.leftDelim=this.leftDelim),this.rightDelim&&(e.rightDelim=this.rightDelim),e}_serialize(e){var i,n;let r=this.matchingRightDelim();return this.variant==="left...right"?B(["\\left",(i=this.leftDelim)!=null?i:".",this.bodyToLatex(e),"\\right",r]):this.variant==="mleft...mright"?B(["\\mleft",(n=this.leftDelim)!=null?n:".",this.bodyToLatex(e),"\\mright",r]):B([!this.leftDelim||this.leftDelim==="."?"":this.leftDelim,this.bodyToLatex(e),r])}matchingRightDelim(){var r,i;if(this.rightDelim&&this.rightDelim!=="?")return this.rightDelim;let e=(r=this.leftDelim)!=null?r:".";return(i=Mo[e])!=null?i:e}render(e){var d,f;let r=new $({parent:e},this.style);this.body;let i=new $({parent:e,mathstyle:"textstyle"},this.style),n=(d=p.createBox(r,this.body,{type:"inner"}))!=null?d:new y(null,{type:"inner"}),o=n.height/i.scalingFactor,a=n.depth/i.scalingFactor,s=[];if(this.leftDelim&&s.push(this.bind(i,Nt("open",this.leftDelim,o,a,i,{isSelected:this.isSelected,classes:"ML__open"+(this.containsCaret?" ML__contains-caret":""),mode:this.mode,style:this.style}))),n&&(ml(n.children,this,r,o,a),s.push(n)),this.rightDelim){let S=this.containsCaret?" ML__contains-caret":"",x=this.rightDelim;x==="?"&&(r.smartFence?(x=this.matchingRightDelim(),S+=" ML__smart-fence__close"):x="."),s.push(this.bind(i,Nt("close",x,o,a,i,{isSelected:this.isSelected,classes:S+" ML__close",mode:this.mode,style:this.style})))}let l=this.variant==="mleft...mright",c=this.leftSibling;c&&(!l&&c.isFunction&&(l=!0),!l&&c.type==="subsup"&&((f=c.leftSibling)!=null&&f.isFunction)&&(l=!0));let h=new y(s,{type:l?"close":"inner",classes:"ML__left-right"});return h.setStyle("margin-top",`${-n.depth}em`),h.setStyle("height",`${n.height+n.depth}em`),this.caret&&(h.caret=this.caret),this.bind(r,h.wrap(r))}};function ml(t,e,r,i,n){if(t)for(let o=0;or.type!=="first").map(r=>r.toJson())),this.correctness&&(e.correctness=this.correctness),e.locked=this.locked,e}render(e){var L,_,z,ee,de;let r=new $({parent:e}),i=r.getRegisterAsEm("fboxsep"),n=i,o=i,a=p.createBox(e,this.body);if(!a)return null;let l=!this.body||this.body.length===0||this.body.every(ye=>ye.type==="first")?new ue({mode:this.mode,style:this.style}).render(new $({parent:e,isPhantom:!0})):null,c=(L=l==null?void 0:l.height)!=null?L:r.metrics.xHeight,h=(_=l==null?void 0:l.depth)!=null?_:c/2,d=Math.max((z=a.height)!=null?z:0,c),f=Math.max((ee=a.depth)!=null?ee:0,h);a.setStyle("vertical-align",`calc(-${d}em + 2px)`),this.correctness==="correct"?a.setStyle("color","var(--correct-color, var(--ML__correct-color))"):this.correctness==="incorrect"&&a.setStyle("color","var(--incorrect-color, var(--ML__incorrect-color))");let x=d+f+2*o-2*n,w=new y(a,{type:"ord"});w.setStyle("display","inline-block"),w.height=d,w.depth=f,w.setStyle("height",d+f,"em"),w.setStyle("vertical-align",-o,"em"),((de=a.width)!=null?de:0)'),M&&(b.svgOverlay=M);let k=new y([b,w],{classes:"ML__prompt-atom"});w.setStyle("line-height",1),k.setStyle("position","relative"),k.setStyle("display","inline-block"),k.setStyle("line-height",0),k.height=d+o+.2,k.depth=f+o,k.left=n,k.right=n,k.setStyle("height",d+2*o,"em"),k.setStyle("top",f-d-o/2,"em"),k.setStyle("vertical-align",w.depth,"em"),k.setStyle("margin-left",.5,"em"),k.setStyle("margin-right",.5,"em"),this.caret&&(k.caret=this.caret);let T=this.attachSupsub(e,{base:k}),q=this.bind(r,T);return q&&this.id&&(b.atomID=this.id,w.atomID=this.id,k.atomID=this.id),q}_serialize(e){var n;let r=(n=this.bodyToLatex(e))!=null?n:"";if(e.skipPlaceholders)return r;let i="\\placeholder";return this.placeholderId&&(i+=`[${this.placeholderId}]`),this.correctness==="correct"?i+="[correct]":this.correctness==="incorrect"&&(i+="[incorrect]"),this.locked&&(i+="[locked]"),F(i,r)}};var xr=class t extends p{constructor(e){super({type:"subsup",style:e==null?void 0:e.style}),this.subsupPlacement="auto"}get children(){if(!this._children){let e=[],r=this.branch("subscript");if(r)for(let n of r)e.push(...n.children),e.push(n);let i=this.branch("superscript");if(i)for(let n of i)e.push(...n.children),e.push(n);this._children=e}return this._children}static fromJson(e){let r=new t(e);for(let i of Lt)e[i]&&r.setChildren(e[i],i);return r}render(e){var a;let r=new $({parent:e,isPhantom:!0}),i=this.leftSibling,n=(a=i.render(r))!=null?a:new y(null),o=new y(null);return o.height=n.height,o.depth=n.depth,this.attachSupsub(e,{base:o,isCharacterBox:i.isCharacterBox(),type:"ignore"})}_serialize(e){return this.supsubToLatex(e)}};var ct=class t extends p{constructor(e,r,i){super({type:"text",command:e,mode:"text",displayContainsHighlight:!0}),this.value=r,this.verbatimLatex=r,this.applyStyle(i)}static fromJson(e){return new t(e.command,e.value,e.style)}render(e){let r=this.createBox(e);return this.caret&&(r.caret=this.caret),r}_serialize(e){var r;return(r=this.verbatimLatex)!=null?r:go("text",this.value.codePointAt(0))}};var kc="\uE000";function vr(t){return t?!/^(<$$>|<$>||<{>|<}>|#[0-9\?]|\\.+)$/.test(t):!1}var mn=class{constructor(e,r,i){this.errors=[];this.index=0;this.endCount=0;var n,o,a,s;i!=null||(i={}),this.tokens=e,this.context=r instanceof $&&!(i!=null&&i.parseMode)&&!i.mathstyle?r:new $({from:r,mathstyle:i.mathstyle},i.style),this.args=(n=i.args)!=null?n:void 0,this.smartFence=this.context.smartFence,this.parsingContext={parent:void 0,mathlist:[],style:(o=i.style)!=null?o:{},parseMode:i.parseMode==="free-text"?"text":i.parseMode==="free-math"?"math":(a=i.parseMode)!=null?a:"math",mathstyle:(s=i.mathstyle)!=null?s:"displaystyle",tabular:!1}}beginContext(e){var n,o,a,s,l,c;if(e!=null&&e.root){this.parsingContext={parent:this.parsingContext.parent,mathlist:[],style:{},parseMode:(n=e==null?void 0:e.mode)!=null?n:"math",mathstyle:(o=e==null?void 0:e.mathstyle)!=null?o:"displaystyle",tabular:(a=e==null?void 0:e.tabular)!=null?a:!1};return}let r=this.parsingContext,i={parent:r,mathlist:[],style:m({},r.style),parseMode:(s=e==null?void 0:e.mode)!=null?s:r.parseMode,mathstyle:(l=e==null?void 0:e.mathstyle)!=null?l:r.mathstyle,tabular:(c=e==null?void 0:e.tabular)!=null?c:!1};this.parsingContext=i}endContext(){this.parsingContext=this.parsingContext.parent}onError(e){this.errors.push(m({before:At(this.tokens.slice(this.index,this.index+10)),after:At(this.tokens.slice(Math.max(0,this.index-10),this.index))},e))}get mathlist(){return this.parsingContext.mathlist}set mathlist(e){this.parsingContext.mathlist=e}get parseMode(){return this.parsingContext.parseMode}set parseMode(e){this.parsingContext.parseMode=e}get tabularMode(){return this.parsingContext.tabular}get style(){let e=this.parsingContext;for(;e;){if(e.style)return m({},e.style);e=e.parent}return{}}set style(e){this.parsingContext.style=e}end(){return this.endCount++,this.index>=this.tokens.length||this.endCount>1e3}next(){this.index+=1}get(){return this.endCount=0,this.index0&&(e=this.mathlist[this.mathlist.length-1],e.type==="subsup"||e.subsupPlacement!==void 0)||(e=new xr({style:this.style}),this.mathlist.push(e)),e}hasPattern(e){return e.test(this.tokens[this.index])}hasInfixCommand(){var r;let{index:e}=this;if(e"););}skipUntilToken(e){let r=this.tokens[this.index];for(;r&&r!==e;)r=this.tokens[++this.index];r===e&&this.index++}skipFiller(){for(;this.match("\\relax")||this.match(""););}matchKeyword(e){let r=this.index,i=this.end(),n="";for(;!i;){let a=this.get();vr(a)?(n+=a,i=this.end()||n.length>=e.length):i=!0}let o=e.toUpperCase()===n.toUpperCase();return o||(this.index=r),o}scanString(){let e="";for(;!this.end();){let r=this.peek();if(r==="]")return e;if(r==="")e+=" ";else if(r.startsWith("\\"))this.onError({code:"unexpected-command-in-string"}),e+=r.substring(1);else if(vr(r))e+=r;else return e;this.next()}return e}scanBalancedString(){let e="",r=this.end(),i=1;for(;!r;){let n=this.get();n===""?e+=" ":n==="<{>"?(e+="{",i+=1):n==="<}>"?(i-=1,i>0?e+="}":this.index-=1):n==="<$>"?e+="$":n==="<$$>"?e+="$$":e+=n,r=i===0||this.end()}return e}scanLiteralGroup(){var i;if(!this.match("<{>"))return"";let e="",r=1;for(;r>0&&!this.end();){let n=this.get();n==="<}>"?(r-=1,r>0&&(e+="}")):n==="<{>"?(r+=1,e+="{"):(/\\[a-zA-Z]+$/.test(e)&&/^[a-zA-Z]/.test(n)&&(e+=" "),e+=(i={"":" ","<$$>":"$$","<$>":"$"}[n])!=null?i:n)}return e}scanNumber(e=!0){var l,c;let r=!1,i=this.peek();for(;i===""||i==="+"||i==="-";)this.get(),i==="-"&&(r=!r),i=this.peek();e=!!e;let n=10,o=/\d/;if(this.match("'"))n=8,o=/[0-7]/,e=!0;else if(this.match('"'))n=16,o=/[\dA-F]/,e=!0;else if(this.match("x"))n=16,o=/[\dA-Fa-f]/,e=!0;else if(this.match("`"))return i=this.get(),i?i.length===2&&i.startsWith("\\")?{number:(r?-1:1)*((l=i.codePointAt(1))!=null?l:0),base:"alpha"}:{number:(r?-1:1)*((c=i.codePointAt(0))!=null?c:0),base:"alpha"}:null;let a="";for(;this.hasPattern(o);)a+=this.get();if(!e&&(this.match(".")||this.match(",")))for(a+=".";this.hasPattern(o);)a+=this.get();let s=e?Number.parseInt(a,n):Number.parseFloat(a);return Number.isNaN(s)?null:{number:r?-s:s,base:n===16?"hexadecimal":n===8?"octal":"decimal"}}scanRegister(){var o;let e=this.index,r=this.scanNumber(!1);if(this.skipWhitespace(),this.match("\\relax"))return r;let i=!1;if(r===null)for(;;){let a=this.peek();if(a==="-")i=!i;else if(a!=="+")break;this.next(),this.skipWhitespace()}if(this.match("\\global")){this.skipWhitespace();let a=this.get();return a.startsWith("\\")?r?{register:a,global:!0,factor:(i?-1:1)*r.number}:i?{register:a,global:!0,factor:-1}:{register:a,global:!0}:(this.index=e,null)}let n=this.get();return n!=null&&n.startsWith("\\")?(n=n.substring(1),this.context.registers[n]?!i||r!==null?{register:n,factor:(i?-1:1)*((o=r==null?void 0:r.number)!=null?o:1)}:{register:n}:(this.index=e,null)):(this.index=e,null)}scanValue(){let e=this.scanRegister();if(e)return e;let r=this.index,i=this.scanGlueOrDimen();if(i&&("unit"in i||"glue"in i&&"unit"in i.glue))return i;this.index=r;let n=this.scanNumber();if(n)return n;if(this.end()||!vr(this.peek()))return null;let o=this.scanString();return o.length>0?{string:o}:null}scanDimen(){let e=this.scanNumber(!1);if(e===null)return null;let r=e.number;this.skipWhitespace(),this.matchKeyword("true"),this.skipWhitespace();let i;return this.matchKeyword("pt")?i="pt":this.matchKeyword("mm")?i="mm":this.matchKeyword("cm")?i="cm":this.matchKeyword("ex")?i="ex":this.matchKeyword("px")?i="px":this.matchKeyword("em")?i="em":this.matchKeyword("bp")?i="bp":this.matchKeyword("dd")?i="dd":this.matchKeyword("pc")?i="pc":this.matchKeyword("in")?i="in":this.matchKeyword("mu")&&(i="mu"),i?{dimension:r,unit:i}:{dimension:r}}scanGlueOrDimen(){let e=this.scanDimen();if(e===null)return null;if(this.skipWhitespace(),this.match("\\relax"))return e;let r={glue:e};if(this.matchKeyword("plus")){let i=this.scanDimen();if(i)r.grow=i;else return r}if(this.skipWhitespace(),this.match("\\relax"))return r;if(this.skipWhitespace(),this.matchKeyword("minus")){let i=this.scanDimen();if(i)r.shrink=i;else return r}return!r.grow&&!r.shrink?e:r}scanColspec(){this.skipWhitespace();let e=[];for(;!this.end()&&!(this.peek()==="<}>"||this.peek()==="]");){let r=this.get();r==="c"||r==="r"||r==="l"?e.push({align:r}):r==="|"?e.push({separator:"solid"}):r===":"?e.push({separator:"dashed"}):r==="@"&&(this.match("<{>")&&(this.beginContext({mode:"math"}),e.push({gap:this.scan(i=>i==="<}>")}),this.endContext()),this.match("<}>")||this.onError({code:"unbalanced-braces"}))}return e}scanModeSet(){let e;if(this.match("\\(")&&(e="textstyle"),!e&&this.match("\\[")&&(e="displaystyle"),!e)return null;this.beginContext({mode:"math",mathstyle:e});let r=this.scan(i=>i===(e==="displaystyle"?"\\]":"\\)"));return this.match(e==="displaystyle"?"\\]":"\\)")||this.onError({code:"unbalanced-mode-shift"}),this.endContext(),r}scanModeShift(){let e="";if(this.match("<$>")&&(e="<$>"),!e&&this.match("<$$>")&&(e="<$$>"),!e)return null;this.beginContext({mode:"math",mathstyle:e==="<$>"?"textstyle":"displaystyle"});let r=this.scan(i=>i===e);return this.match(e)||this.onError({code:"unbalanced-mode-shift"}),this.endContext(),r}scanEnvironment(){if(!this.match("\\begin"))return null;let e=this.scanArgument("string");if(!e)return null;let r=J0(e);if(!r)return this.onError({code:"unknown-environment",arg:e}),null;let i=[];if(r.params)for(let l of r.params)if(l.isOptional)i.push(this.scanOptionalArgument(l.type));else{let c=this.scanArgument(l.type);c||this.onError({code:"missing-argument",arg:e}),i.push(c)}this.beginContext({tabular:r.tabular,root:r.rootOnly});let n=[],o=[],a=[],s=!1;do if(this.end()&&(this.onError({code:"unbalanced-environment",arg:e}),s=!0),!s&&this.match("\\end")&&(this.scanArgument("string")!==e&&this.onError({code:"unbalanced-environment",arg:e}),s=!0),!s)if(this.matchColumnSeparator())a.push(this.mathlist),this.mathlist=[];else if(this.matchRowSeparator()){a.push(this.mathlist),this.mathlist=[];let l=null;this.skipWhitespace(),this.match("[")&&(l=this.scanDimen(),this.skipWhitespace(),this.match("]")),o.push(l!=null?l:{dimension:0}),n.push(a),a=[]}else this.mathlist.push(...this.scan(l=>["<}>","&","\\end","\\cr","\\\\","\\tabularnewline"].includes(l)));while(!s);return a.push(this.mathlist),a.length>0&&n.push(a),this.endContext(),r.rootOnly&&(this.index=this.tokens.length),r.createAtom(e,n,o,i,this.context.maxMatrixCols)}scanExpression(){let e=this.mathlist;if(this.mathlist=[],this.parseExpression()){let r=this.mathlist;return this.mathlist=e,r}return this.mathlist=e,null}scan(e){this.beginContext(),e||(e=s=>s==="<}>");let r="",i=null,n=[],o=null;for(;!this.end()&&!e(this.peek());)this.hasInfixCommand()&&!r?(r=this.get(),i=G(r,"math"),i&&(n=this.scanArguments(i)[1]),o=this.mathlist,this.mathlist=[]):this.parseExpression();let a;return r?(n.unshift(this.mathlist),o&&n.unshift(o),a=[i.createAtom({command:r,args:n,style:this.style,mode:this.parseMode})]):a=this.mathlist,this.endContext(),a}scanGroup(){let e=this.index;if(!this.match("<{>"))return null;let r=this.scan(n=>n==="<}>");if(this.match("<}>")||this.onError({code:"unbalanced-braces"}),r.length===1&&r[0].type==="placeholder")return r[0];let i=new gr(r,this.parseMode);return i.verbatimLatex=At(this.tokens.slice(e,this.index)),i}scanSmartFence(){if(this.skipWhitespace(),!this.match("("))return null;this.beginContext();let e=1;for(;!this.end()&&e!==0;)this.match("(")&&(e+=1),this.match(")")&&(e-=1),e!==0&&this.parseExpression();let r=new Gt("",this.mathlist,{leftDelim:"(",rightDelim:e===0?")":"?"});return this.endContext(),r}scanDelim(){this.skipWhitespace();let e=this.peek();if(!e)return this.onError({code:"unexpected-end-of-string"}),null;if(!vr(e)&&!e.startsWith("\\"))return null;this.next();let r=G(e,"math");return r?r.definitionType==="function"&&r.ifMode&&!r.ifMode.includes(this.parseMode)?(this.onError({code:"unexpected-delimiter",arg:e}),null):r.definitionType==="symbol"&&(r.type==="mopen"||r.type==="mclose")||/^(\.|\?|\||<|>|\\vert|\\Vert|\\\||\\surd|\\uparrow|\\downarrow|\\Uparrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\mid|\\mvert|\\mVert)$/.test(e)?e:(this.onError({code:"unexpected-delimiter",arg:e}),null):(this.onError({code:"unknown-command",arg:e}),null)}scanLeftRight(){var o;if(this.match("\\right"))return this.onError({code:"unbalanced-braces"}),new Ne("\\right");if(this.match("\\mright"))return this.onError({code:"unbalanced-braces"}),new Ne("\\mright");let e="\\right";if(!this.match("\\left")){if(!this.match("\\mleft"))return null;e="\\mright"}let r=this.scanDelim();if(!r)return this.onError({code:"unexpected-delimiter"}),new Ne(e==="\\right"?"\\left":"\\mleft");for(this.beginContext();!this.end()&&!this.match(e);)this.parseExpression();let i=this.mathlist;this.endContext();let n=(o=this.scanDelim())!=null?o:".";return new Gt(e==="\\right"?"left...right":"mleft...mright",i,{leftDelim:r,rightDelim:n,style:this.style})}parseSupSub(){if(this.parseMode!=="math")return!1;let e=this.peek();if(e!=="^"&&e!=="_"&&e!=="'")return!1;let r=this.lastSubsupAtom();for(;e==="^"||e==="_"||e==="'";)this.match("'")?this.match("'")?r.addChild(new p({type:"mord",command:"\\doubleprime",mode:"math",value:"\u2032\u2032"}),"superscript"):r.addChild(new p({type:"mord",command:"\\prime",mode:"math",value:"\u2032"}),"superscript"):(this.match("^")||this.match("_"))&&r.addChildren(A(this.scanArgument("expression")),e==="_"?"subscript":"superscript"),e=this.peek();return!0}parseLimits(){if(this.parseMode!=="math")return!1;let e=this.match("\\limits"),r=!e&&this.match("\\nolimits"),i=!r&&!e&&this.match("\\displaylimits");if(!e&&!r&&!i)return!1;let n=this.mathlist.length>0?this.mathlist[this.mathlist.length-1]:null;return n===null?!1:(n.explicitSubsupPlacement=!0,e&&(n.subsupPlacement="over-under"),r&&(n.subsupPlacement="adjacent"),i&&(n.subsupPlacement="auto"),!0)}scanArguments(e){if(!(e!=null&&e.params))return[void 0,[]];let r,i=[],n=e.infix?2:0;for(;n["<}>","&","\\end","\\cr","\\\\","\\tabularnewline","\\right"].includes(a))):o.isOptional?i.push(this.scanOptionalArgument(o.type)):o.type.endsWith("*")?r=o.type.slice(0,-1):i.push(this.scanArgument(o.type)),n+=1}return[r,i]}scanSymbolOrLiteral(){let e=this.peek();if(!e)return null;this.next();let r;if(vr(e)){if(e===kc)return[new ct(e," ",this.style)];let i=Q.createAtom(this.parseMode,e,m({},this.style));return i?[i]:null}if(r=this.scanMacro(e),r)return[r];if(e.startsWith("\\")){let i=G(e,this.parseMode);if(!i)return this.onError({code:"unknown-command",arg:e}),[new Ne(e)];if(i.definitionType==="symbol"){let n=m({},this.style);i.variant&&(n.variant=i.variant),r=new p({type:i.type,command:e,style:n,value:String.fromCodePoint(i.codepoint),mode:this.parseMode,verbatimLatex:e})}else{if(i.applyMode||i.applyStyle||i.infix)return this.onError({code:"invalid-command",arg:e}),[new Ne(e)];i.createAtom&&(r=i.createAtom({command:e,args:[],style:this.style,mode:this.parseMode}))}}return r?[r]:null}scanArgument(e){var n;this.skipFiller();let r=this.parseMode;if(e==="auto"&&(e=r),!this.match("<{>")){if(e==="string")return this.scanString();if(e==="value")return this.scanValue();if(e==="delim")return(n=this.scanDelim())!=null?n:".";if(e==="expression")return this.scanExpression();if(e==="math"){e!==r&&this.beginContext({mode:"math"});let o=this.scanSymbolOrLiteral();return e!==r&&this.endContext(),o}if(e==="text"){e!==r&&this.beginContext({mode:"text"});let o=this.scanSymbolOrLiteral();return e!==r&&this.endContext(),o}return e==="balanced-string"?null:e==="rest"?this.scan(o=>["<}>","&","\\end","\\cr","\\\\","\\tabularnewline","\\right"].includes(o)):null}if(e==="text"){this.beginContext({mode:"text"});do this.mathlist.push(...this.scan());while(!this.match("<}>")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}if(e==="math"){this.beginContext({mode:"math"});do this.mathlist.push(...this.scan());while(!this.match("<}>")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}if(e==="rest"){let o=this.scan();return this.match("<}>")||this.onError({code:"unbalanced-braces"}),{group:o}}let i=null;if(e==="expression"){this.beginContext({mode:"math"});do this.mathlist.push(...this.scan());while(!this.match("<}>")&&!this.end());let o=this.mathlist;return this.endContext(),{group:o}}return e==="string"?i=this.scanString():e==="balanced-string"?i=this.scanBalancedString():e==="colspec"?i=this.scanColspec():e==="value"&&(i=this.scanValue()),this.skipUntilToken("<}>"),i}scanOptionalArgument(e){if(e=e==="auto"?this.parseMode:e,this.skipFiller(),!this.match("["))return null;let r=null;for(;!this.end()&&!this.match("]");)if(e==="string")r=this.scanString();else if(e==="value")r=this.scanValue();else if(e==="colspec")r=this.scanColspec();else if(e==="bbox"){let i={},n=this.scanString().toLowerCase().trim().split(/,(?![^(]*\)(?:(?:[^(]*\)){2})*[^"]*$)/);for(let o of n){let a=o.match(/^\s*([\d.]+)\s*([a-z]{2})/);if(a)i.padding={dimension:Number.parseFloat(a[1]),unit:a[2]};else{let s=o.match(/^\s*border\s*:\s*(.*)/);s?i.border=s[1]:i.backgroundcolor={string:o}}}r=i}else e==="math"&&(this.beginContext({mode:"math"}),r=this.mathlist.concat(this.scan(i=>i==="]")),this.endContext());return r}scanSymbolOrCommand(e){var o,a,s;if(e==="\\placeholder"){let l=this.scanOptionalArgument("string"),c=this.scanOptionalArgument("math"),h=p.serialize(c,{defaultMode:"math"}),d=[],f;!f&&h==="correct"?f="correct":!f&&h==="incorrect"?f="incorrect":h!==""&&(d=c);let S=this.scanOptionalArgument("string")==="locked",x=this.scanArgument("auto"),w;return x&&Array.isArray(x)&&x.length>0?w=x:x&&typeof x=="object"&&"group"in x?w=x.group:w=d,l?[new br(l,f,S,w!=null?w:d,{mode:this.parseMode,style:this.style})]:[new ue({mode:this.parseMode,style:this.style})]}if(e==="\\renewcommand"||e==="\\newcommand"||e==="\\providecommand"||e==="\\def"){let l=this.index,c=this.scanLiteralGroup()||this.next();if(!c)return null;if(this.context.registers[c.substring(1)]){let h=this.scanArgument("string");h!==null&&(this.context.registers[c.substring(1)]=h);let d=B([e,At(this.tokens.slice(l,this.index))]);return[new p({type:"text",value:"",verbatimLatex:d})]}}let r=this.scanMacro(e);if(r)return[r];let i=G(e,this.parseMode);if(!i)return this.parseMode==="text"?(/[a-zA-Z]/.test((o=this.peek())!=null?o:"")&&(e+=" "),[...e].map(l=>new p({type:"text",value:l,mode:"text",style:this.style}))):(this.onError({code:"unknown-command",arg:e}),[new Ne(e)]);let n=this.index;if(i.definitionType==="symbol"){let l=m({},this.style);i.variant&&(l.variant=i.variant),r=new p({type:i.type,command:e,style:l,value:String.fromCodePoint(i.codepoint),mode:this.parseMode})}else{if(i.ifMode&&!i.ifMode.includes(this.parseMode))return[];let l=this.parseMode;i.applyMode&&(this.parseMode=i.applyMode);let c,h=[];if(i.parse?h=i.parse(this):[c,h]=this.scanArguments(i),this.parseMode=l,i.applyMode&&!i.applyStyle&&!i.createAtom)return A(h[0]);if(i.infix)return this.onError({code:"too-many-infix-commands",arg:e}),null;if(typeof i.createAtom=="function")r=i.createAtom({command:e,args:h,style:this.style,mode:this.parseMode}),c&&(r.body=A(this.scanArgument(c)));else if(typeof i.applyStyle=="function"){let d=i.applyStyle(this.style,e,h,this.context),f=this.parseMode;if(i.applyMode&&(this.parseMode=i.applyMode),c){let S=this.style;this.style=d;let x=this.scanArgument(c);return this.style=S,this.parseMode=f,A(x)}this.style=d}else r=new p({type:"mord",command:(a=i.command)!=null?a:e,style:m({},this.style),value:e,mode:(s=i.applyMode)!=null?s:this.parseMode})}if(!r)return null;if(r instanceof p&&r.verbatimLatex===void 0&&!/^\\(llap|rlap|class|cssId|htmlData)$/.test(e)){let l=B([e,At(this.tokens.slice(n,this.index))]);l&&(r.verbatimLatex=l)}if(r.verbatimLatex===null&&(r.verbatimLatex=void 0),r.isFunction&&this.smartFence){let l=this.scanSmartFence();if(l)return[r,l]}return[r]}scanSymbolCommandOrLiteral(){this.expandUnicode();let e=this.get();if(!e)return null;if(vr(e)){let r=Q.createAtom(this.parseMode,e,m({},this.style));if(!r)return null;if(r.isFunction&&this.smartFence){let i=this.scanSmartFence();if(i)return[r,i]}return[r]}return e.startsWith("\\")?this.scanSymbolOrCommand(e):e===""?this.parseMode==="text"?[new ct(" "," ",this.style)]:null:(e==="<}>"?this.onError({latex:"",code:"unbalanced-braces"}):this.onError({latex:"",code:"unexpected-token",arg:e}),null)}scanMacro(e){var a;let r=this.context.getMacro(e);if(!r)return null;let i=this.index,n=r.args,o={"?":(a=this.args)==null?void 0:a.call(this,"?")};for(let s=1;s<=n;s++){let l=this.scanLiteralGroup();if(!l){let c=this.index;this.scanExpression(),l=At(this.tokens.slice(c,this.index))}o[s]=l}return new yr(e,{expand:r.expand,captureSelection:r.captureSelection,args:i===this.index?null:At(this.tokens.slice(i,this.index)),style:this.parsingContext.style,body:mt(r.def,{context:this.context,parseMode:this.parseMode,args:s=>o[s],mathstyle:this.parsingContext.mathstyle,style:this.parsingContext.style})})}parseExpression(){var r,i,n,o;let e=(o=(n=(i=(r=this.scanEnvironment())!=null?r:this.scanModeShift())!=null?i:this.scanModeSet())!=null?n:this.scanGroup())!=null?o:this.scanLeftRight();if(e===null){if(this.parseSupSub()||this.parseLimits())return!0;e=this.scanSymbolCommandOrLiteral()}return e?(ve(e)?this.mathlist.push(...e):this.mathlist.push(e),!0):!1}};function mt(t,e){var o,a,s,l;let r=(o=e==null?void 0:e.args)!=null?o:void 0,i=new mn(lr(t,r),e==null?void 0:e.context,{args:r,mathstyle:(a=e==null?void 0:e.mathstyle)!=null?a:"displaystyle",parseMode:(s=e==null?void 0:e.parseMode)!=null?s:"math",style:(l=e==null?void 0:e.style)!=null?l:{}}),n=[];for(;!i.end();)n.push(...i.scan(()=>!1));return n}function ul(t,e){var i;let r=new mn(lr(t,null),e==null?void 0:e.context,{mathstyle:"displaystyle",parseMode:(i=e==null?void 0:e.parseMode)!=null?i:"math"});for(;!r.end();)r.scan();return r.errors}var Ur=class t extends p{constructor(e,r){super({type:"chem"},{command:e,mode:"math"});let i=U.go(v.go(r,e==="\\pu"?"pu":"ce"),!1);this.body=mt(i),this._verbatimLatex=e+"{"+r+"}",this.arg=r,this.captureSelection=!0}static fromJson(e){return new t(e.command,e.arg)}set verbatimLatex(e){}get verbatimLatex(){return this._verbatimLatex}toJson(){return u(m({},super.toJson()),{arg:this.arg})}render(e){let r=p.createBox(e,this.body,{type:"inner"});return this.caret&&(r.caret=this.caret),this.bind(e,r)}_serialize(e){return this.verbatimLatex,this.verbatimLatex}};g(["ce","pu"],"{chemformula:balanced-string}",{createAtom:t=>{var e;return new Ur(t.command,(e=t.args[0])!=null?e:"")}});var v={go:function(t,e){if(!t)return[];e===void 0&&(e="ce");var r="0",i={};i.parenthesisLevel=0,t=t.replace(/\n/g," "),t=t.replace(/[\u2212\u2013\u2014\u2010]/g,"-"),t=t.replace(/[\u2026]/g,"...");for(var n,o=10,a=[];;){n!==t?(o=10,n=t):o--;var s=v.stateMachines[e],l=s.transitions[r]||s.transitions["*"];e:for(var c=0;c0){if(d.revisit||(t=h.remainder),!d.toContinue)break e}else return a}}if(o<=0)throw["MhchemBugU","mhchem bug U. Please report."]}},concatArray:function(t,e){if(e)if(Object.prototype.toString.call(e)==="[object Array]")for(var r=0;r":/^[=<>]/,"#":/^[#\u2261]/,"+":/^\+/,"-$":/^-(?=[\s_},;\]/]|$|\([a-z]+\))/,"-9":/^-(?=[0-9])/,"- orbital overlap":/^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/,"-":/^-/,"pm-operator":/^(?:\\pm|\$\\pm\$|\+-|\+\/-)/,operator:/^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/,arrowUpDown:/^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/,"\\bond{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\bond{","","","}")},"->":/^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/,CMT:/^[CMT](?=\[)/,"[(...)]":function(t){return v.patterns.findObserveGroups(t,"[","","","]")},"1st-level escape":/^(&|\\\\|\\hline)\s*/,"\\,":/^(?:\\[,\ ;:])/,"\\x{}{}":function(t){return v.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","","","{","}","",!0)},"\\x{}":function(t){return v.patterns.findObserveGroups(t,"",/^\\[a-zA-Z]+\{/,"}","")},"\\ca":/^\\ca(?:\s+|(?![a-zA-Z]))/,"\\x":/^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/,orbital:/^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/,others:/^[\/~|]/,"\\frac{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\frac{","","","}","{","","","}")},"\\overset{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\overset{","","","}","{","","","}")},"\\underset{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\underset{","","","}","{","","","}")},"\\underbrace{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\underbrace{","","","}_","{","","","}")},"\\color{(...)}0":function(t){return v.patterns.findObserveGroups(t,"\\color{","","","}")},"\\color{(...)}{(...)}1":function(t){return v.patterns.findObserveGroups(t,"\\color{","","","}","{","","","}")},"\\color(...){(...)}2":function(t){return v.patterns.findObserveGroups(t,"\\color","\\","",/^(?=\{)/,"{","","","}")},"\\ce{(...)}":function(t){return v.patterns.findObserveGroups(t,"\\ce{","","","}")},oxidation$:/^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"d-oxidation$":/^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/,"roman numeral":/^[IVX]+/,"1/2$":/^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/,amount:function(t){var e;if(e=t.match(/^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/),e)return{match_:e[0],remainder:t.substr(e[0].length)};var r=v.patterns.findObserveGroups(t,"","$","$","");return r&&(e=r.match_.match(/^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/),e)?{match_:e[0],remainder:t.substr(e[0].length)}:null},amount2:function(t){return this.amount(t)},"(KV letters),":/^(?:[A-Z][a-z]{0,2}|i)(?=,)/,formula$:function(t){if(t.match(/^\([a-z]+\)$/))return null;var e=t.match(/^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/);return e?{match_:e[0],remainder:t.substr(e[0].length)}:null},uprightEntities:/^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/,"/":/^\s*(\/)\s*/,"//":/^\s*(\/\/)\s*/,"*":/^\s*[*.]\s*/},findObserveGroups:function(t,e,r,i,n,o,a,s,l,c){var h=function(b,M){if(typeof M=="string")return b.indexOf(M)!==0?null:M;var k=b.match(M);return k?k[0]:null},d=function(b,M,k){for(var T=0;M0,null},f=h(t,e);if(f===null||(t=t.substr(f.length),f=h(t,r),f===null))return null;var S=d(t,f.length,i||n);if(S===null)return null;var x=t.substring(0,i?S.endMatchEnd:S.endMatchBegin);if(o||a){var w=this.findObserveGroups(t.substr(S.endMatchEnd),o,a,s,l);if(w===null)return null;var D=[x,w.match_];return{match_:c?D.join(""):D,remainder:w.remainder}}else return{match_:x,remainder:t.substr(S.endMatchEnd)}},match_:function(t,e){var r=v.patterns.patterns[t];if(r===void 0)throw["MhchemBugP","mhchem bug P. Please report. ("+t+")"];if(typeof r=="function")return v.patterns.patterns[t](e);var i=e.match(r);if(i){var n;return i[2]?n=[i[1],i[2]]:i[1]?n=i[1]:n=i[0],{match_:n,remainder:e.substr(i[0].length)}}return null}},actions:{"a=":function(t,e){t.a=(t.a||"")+e},"b=":function(t,e){t.b=(t.b||"")+e},"p=":function(t,e){t.p=(t.p||"")+e},"o=":function(t,e){t.o=(t.o||"")+e},"q=":function(t,e){t.q=(t.q||"")+e},"d=":function(t,e){t.d=(t.d||"")+e},"rm=":function(t,e){t.rm=(t.rm||"")+e},"text=":function(t,e){t.text_=(t.text_||"")+e},insert:function(t,e,r){return{type_:r}},"insert+p1":function(t,e,r){return{type_:r,p1:e}},"insert+p1+p2":function(t,e,r){return{type_:r,p1:e[0],p2:e[1]}},copy:function(t,e){return e},rm:function(t,e){return{type_:"rm",p1:e||""}},text:function(t,e){return v.go(e,"text")},"{text}":function(t,e){var r=["{"];return v.concatArray(r,v.go(e,"text")),r.push("}"),r},"tex-math":function(t,e){return v.go(e,"tex-math")},"tex-math tight":function(t,e){return v.go(e,"tex-math tight")},bond:function(t,e,r){return{type_:"bond",kind_:r||e}},"color0-output":function(t,e){return{type_:"color0",color:e[0]}},ce:function(t,e){return v.go(e)},"1/2":function(t,e){var r=[];e.match(/^[+\-]/)&&(r.push(e.substr(0,1)),e=e.substr(1));var i=e.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/);return i[1]=i[1].replace(/\$/g,""),r.push({type_:"frac",p1:i[1],p2:i[2]}),i[3]&&(i[3]=i[3].replace(/\$/g,""),r.push({type_:"tex-math",p1:i[3]})),r},"9,9":function(t,e){return v.go(e,"9,9")}},createTransitions:function(t){var e,r,i,n,o={};for(e in t)for(r in t[e])for(i=r.split("|"),t[e][r].stateArray=i,n=0;n":{"0|1|2|3":{action_:"r=",nextState:"r"},"a|as":{action_:["output","r="],nextState:"r"},"*":{action_:["output","r="],nextState:"r"}},"+":{o:{action_:"d= kv",nextState:"d"},"d|D":{action_:"d=",nextState:"d"},q:{action_:"d=",nextState:"qd"},"qd|qD":{action_:"d=",nextState:"qd"},dq:{action_:["output","d="],nextState:"d"},3:{action_:["sb=false","output","operator"],nextState:"0"}},amount:{"0|2":{action_:"a=",nextState:"a"}},"pm-operator":{"0|1|2|a|as":{action_:["sb=false","output",{type_:"operator",option:"\\pm"}],nextState:"0"}},operator:{"0|1|2|a|as":{action_:["sb=false","output","operator"],nextState:"0"}},"-$":{"o|q":{action_:["charge or bond","output"],nextState:"qd"},d:{action_:"d=",nextState:"d"},D:{action_:["output",{type_:"bond",option:"-"}],nextState:"3"},q:{action_:"d=",nextState:"qd"},qd:{action_:"d=",nextState:"qd"},"qD|dq":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},"-9":{"3|o":{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"3"}},"- orbital overlap":{o:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},d:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"}},"-":{"0|1|2":{action_:[{type_:"output",option:1},"beginsWithBond=true",{type_:"bond",option:"-"}],nextState:"3"},3:{action_:{type_:"bond",option:"-"}},a:{action_:["output",{type_:"insert",option:"hyphen"}],nextState:"2"},as:{action_:[{type_:"output",option:2},{type_:"bond",option:"-"}],nextState:"3"},b:{action_:"b="},o:{action_:{type_:"- after o/d",option:!1},nextState:"2"},q:{action_:{type_:"- after o/d",option:!1},nextState:"2"},"d|qd|dq":{action_:{type_:"- after o/d",option:!0},nextState:"2"},"D|qD|p":{action_:["output",{type_:"bond",option:"-"}],nextState:"3"}},amount2:{"1|3":{action_:"a=",nextState:"a"}},letters:{"0|1|2|3|a|as|b|p|bp|o":{action_:"o=",nextState:"o"},"q|dq":{action_:["output","o="],nextState:"o"},"d|D|qd|qD":{action_:"o after d",nextState:"o"}},digits:{o:{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},q:{action_:["output","o="],nextState:"o"},a:{action_:"o=",nextState:"o"}},"space A":{"b|p|bp":{}},space:{a:{nextState:"as"},0:{action_:"sb=false"},"1|2":{action_:"sb=true"},"r|rt|rd|rdt|rdq":{action_:"output",nextState:"0"},"*":{action_:["output","sb=true"],nextState:"1"}},"1st-level escape":{"1|2":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}]},"*":{action_:["output",{type_:"insert+p1",option:"1st-level escape"}],nextState:"0"}},"[(...)]":{"r|rt":{action_:"rd=",nextState:"rd"},"rd|rdt":{action_:"rq=",nextState:"rdq"}},"...":{"o|d|D|dq|qd|qD":{action_:["output",{type_:"bond",option:"..."}],nextState:"3"},"*":{action_:[{type_:"output",option:1},{type_:"insert",option:"ellipsis"}],nextState:"1"}},". |* ":{"*":{action_:["output",{type_:"insert",option:"addition compound"}],nextState:"1"}},"state of aggregation $":{"*":{action_:["output","state of aggregation"],nextState:"1"}},"{[(":{"a|as|o":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"0|1|2|3":{action_:["o=","output","parenthesisLevel++"],nextState:"2"},"*":{action_:["output","o=","output","parenthesisLevel++"],nextState:"2"}},")]}":{"0|1|2|3|b|p|bp|o":{action_:["o=","parenthesisLevel--"],nextState:"o"},"a|as|d|D|q|qd|qD|dq":{action_:["output","o=","parenthesisLevel--"],nextState:"o"}},", ":{"*":{action_:["output","comma"],nextState:"0"}},"^_":{"*":{}},"^{(...)}|^($...$)":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"D"},q:{action_:"d=",nextState:"qD"},"d|D|qd|qD|dq":{action_:["output","d="],nextState:"D"}},"^a|^\\x{}{}|^\\x{}|^\\x|'":{"0|1|2|as":{action_:"b=",nextState:"b"},p:{action_:"b=",nextState:"bp"},"3|o":{action_:"d= kv",nextState:"d"},q:{action_:"d=",nextState:"qd"},"d|qd|D|qD":{action_:"d="},dq:{action_:["output","d="],nextState:"d"}},"_{(state of aggregation)}$":{"d|D|q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x":{"0|1|2|as":{action_:"p=",nextState:"p"},b:{action_:"p=",nextState:"bp"},"3|o":{action_:"q=",nextState:"q"},"d|D":{action_:"q=",nextState:"dq"},"q|qd|qD|dq":{action_:["output","q="],nextState:"q"}},"=<>":{"0|1|2|3|a|as|o|q|d|D|qd|qD|dq":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"#":{"0|1|2|3|a|as|o":{action_:[{type_:"output",option:2},{type_:"bond",option:"#"}],nextState:"3"}},"{}":{"*":{action_:{type_:"output",option:1},nextState:"1"}},"{...}":{"0|1|2|3|a|as|b|p|bp":{action_:"o=",nextState:"o"},"o|d|D|q|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"$...$":{a:{action_:"a="},"0|1|2|3|as|b|p|bp|o":{action_:"o=",nextState:"o"},"as|o":{action_:"o="},"q|d|D|qd|qD|dq":{action_:["output","o="],nextState:"o"}},"\\bond{(...)}":{"*":{action_:[{type_:"output",option:2},"bond"],nextState:"3"}},"\\frac{(...)}":{"*":{action_:[{type_:"output",option:1},"frac-output"],nextState:"3"}},"\\overset{(...)}":{"*":{action_:[{type_:"output",option:2},"overset-output"],nextState:"3"}},"\\underset{(...)}":{"*":{action_:[{type_:"output",option:2},"underset-output"],nextState:"3"}},"\\underbrace{(...)}":{"*":{action_:[{type_:"output",option:2},"underbrace-output"],nextState:"3"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:[{type_:"output",option:2},"color-output"],nextState:"3"}},"\\color{(...)}0":{"*":{action_:[{type_:"output",option:2},"color0-output"]}},"\\ce{(...)}":{"*":{action_:[{type_:"output",option:2},"ce"],nextState:"3"}},"\\,":{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"1"}},"\\x{}{}|\\x{}|\\x":{"0|1|2|3|a|as|b|p|bp|o|c0":{action_:["o=","output"],nextState:"3"},"*":{action_:["output","o=","output"],nextState:"3"}},others:{"*":{action_:[{type_:"output",option:1},"copy"],nextState:"3"}},else2:{a:{action_:"a to o",nextState:"o",revisit:!0},as:{action_:["output","sb=true"],nextState:"1",revisit:!0},"r|rt|rd|rdt|rdq":{action_:["output"],nextState:"0",revisit:!0},"*":{action_:["output","copy"],nextState:"3"}}}),actions:{"o after d":function(t,e){var r;if((t.d||"").match(/^[0-9]+$/)){var i=t.d;t.d=void 0,r=this.output(t),t.b=i}else r=this.output(t);return v.actions["o="](t,e),r},"d= kv":function(t,e){t.d=e,t.dType="kv"},"charge or bond":function(t,e){if(t.beginsWithBond){var r=[];return v.concatArray(r,this.output(t)),v.concatArray(r,v.actions.bond(t,e,"-")),r}else t.d=e},"- after o/d":function(t,e,r){var i=v.patterns.match_("orbital",t.o||""),n=v.patterns.match_("one lowercase greek letter $",t.o||""),o=v.patterns.match_("one lowercase latin letter $",t.o||""),a=v.patterns.match_("$one lowercase latin letter$ $",t.o||""),s=e==="-"&&(i&&i.remainder===""||n||o||a);s&&!t.a&&!t.b&&!t.p&&!t.d&&!t.q&&!i&&o&&(t.o="$"+t.o+"$");var l=[];return s?(v.concatArray(l,this.output(t)),l.push({type_:"hyphen"})):(i=v.patterns.match_("digits",t.d||""),r&&i&&i.remainder===""?(v.concatArray(l,v.actions["d="](t,e)),v.concatArray(l,this.output(t))):(v.concatArray(l,this.output(t)),v.concatArray(l,v.actions.bond(t,e,"-")))),l},"a to o":function(t){t.o=t.a,t.a=void 0},"sb=true":function(t){t.sb=!0},"sb=false":function(t){t.sb=!1},"beginsWithBond=true":function(t){t.beginsWithBond=!0},"beginsWithBond=false":function(t){t.beginsWithBond=!1},"parenthesisLevel++":function(t){t.parenthesisLevel++},"parenthesisLevel--":function(t){t.parenthesisLevel--},"state of aggregation":function(t,e){return{type_:"state of aggregation",p1:v.go(e,"o")}},comma:function(t,e){var r=e.replace(/\s*$/,""),i=r!==e;return i&&t.parenthesisLevel===0?{type_:"comma enumeration L",p1:r}:{type_:"comma enumeration M",p1:r}},output:function(t,e,r){var i;if(!t.r)i=[],!t.a&&!t.b&&!t.p&&!t.o&&!t.q&&!t.d&&!r||(t.sb&&i.push({type_:"entitySkip"}),!t.o&&!t.q&&!t.d&&!t.b&&!t.p&&r!==2?(t.o=t.a,t.a=void 0):!t.o&&!t.q&&!t.d&&(t.b||t.p)?(t.o=t.a,t.d=t.b,t.q=t.p,t.a=t.b=t.p=void 0):t.o&&t.dType==="kv"&&v.patterns.match_("d-oxidation$",t.d||"")?t.dType="oxidation":t.o&&t.dType==="kv"&&!t.q&&(t.dType=void 0),i.push({type_:"chemfive",a:v.go(t.a,"a"),b:v.go(t.b,"bd"),p:v.go(t.p,"pq"),o:v.go(t.o,"o"),q:v.go(t.q,"pq"),d:v.go(t.d,t.dType==="oxidation"?"oxidation":"bd"),dType:t.dType}));else{var n;t.rdt==="M"?n=v.go(t.rd,"tex-math"):t.rdt==="T"?n=[{type_:"text",p1:t.rd||""}]:n=v.go(t.rd);var o;t.rqt==="M"?o=v.go(t.rq,"tex-math"):t.rqt==="T"?o=[{type_:"text",p1:t.rq||""}]:o=v.go(t.rq),i={type_:"arrow",r:t.r,rd:n,rq:o}}for(var a in t)a!=="parenthesisLevel"&&a!=="beginsWithBond"&&delete t[a];return i},"oxidation-output":function(t,e){var r=["{"];return v.concatArray(r,v.go(e,"oxidation")),r.push("}"),r},"frac-output":function(t,e){return{type_:"frac-ce",p1:v.go(e[0]),p2:v.go(e[1])}},"overset-output":function(t,e){return{type_:"overset",p1:v.go(e[0]),p2:v.go(e[1])}},"underset-output":function(t,e){return{type_:"underset",p1:v.go(e[0]),p2:v.go(e[1])}},"underbrace-output":function(t,e){return{type_:"underbrace",p1:v.go(e[0]),p2:v.go(e[1])}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:v.go(e[1])}},"r=":function(t,e){t.r=e},"rdt=":function(t,e){t.rdt=e},"rd=":function(t,e){t.rd=e},"rqt=":function(t,e){t.rqt=e},"rq=":function(t,e){t.rq=e},operator:function(t,e,r){return{type_:"operator",kind_:r||e}}}},a:{transitions:v.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},"$(...)$":{"*":{action_:"tex-math tight",nextState:"1"}},",":{"*":{action_:{type_:"insert",option:"commaDecimal"}}},else2:{"*":{action_:"copy"}}}),actions:{}},o:{transitions:v.createTransitions({empty:{"*":{}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"1",revisit:!0}},letters:{"*":{action_:"rm"}},"\\ca":{"*":{action_:{type_:"insert",option:"circa"}}},"\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"{text}"}},else2:{"*":{action_:"copy"}}}),actions:{}},text:{transitions:v.createTransitions({empty:{"*":{action_:"output"}},"{...}":{"*":{action_:"text="}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"\\greek":{"*":{action_:["output","rm"]}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:["output","copy"]}},else:{"*":{action_:"text="}}}),actions:{output:function(t){if(t.text_){var e={type_:"text",p1:t.text_};for(var r in t)delete t[r];return e}}}},pq:{transitions:v.createTransitions({empty:{"*":{}},"state of aggregation $":{"*":{action_:"state of aggregation"}},i$:{0:{nextState:"!f",revisit:!0}},"(KV letters),":{0:{action_:"rm",nextState:"0"}},formula$:{0:{nextState:"f",revisit:!0}},"1/2$":{0:{action_:"1/2"}},else:{0:{nextState:"!f",revisit:!0}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"a-z":{f:{action_:"tex-math"}},letters:{"*":{action_:"rm"}},"-9.,9":{"*":{action_:"9,9"}},",":{"*":{action_:{type_:"insert+p1",option:"comma enumeration S"}}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"state of aggregation":function(t,e){return{type_:"state of aggregation subscript",p1:v.go(e,"o")}},"color-output":function(t,e){return{type_:"color",color1:e[0],color2:v.go(e[1],"pq")}}}},bd:{transitions:v.createTransitions({empty:{"*":{}},x$:{0:{nextState:"!f",revisit:!0}},formula$:{0:{nextState:"f",revisit:!0}},else:{0:{nextState:"!f",revisit:!0}},"-9.,9 no missing 0":{"*":{action_:"9,9"}},".":{"*":{action_:{type_:"insert",option:"electron dot"}}},"a-z":{f:{action_:"tex-math"}},x:{"*":{action_:{type_:"insert",option:"KV x"}}},letters:{"*":{action_:"rm"}},"'":{"*":{action_:{type_:"insert",option:"prime"}}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},"{(...)}":{"*":{action_:"text"}},"\\color{(...)}{(...)}1|\\color(...){(...)}2":{"*":{action_:"color-output"}},"\\color{(...)}0":{"*":{action_:"color0-output"}},"\\ce{(...)}":{"*":{action_:"ce"}},"\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"copy"}},else2:{"*":{action_:"copy"}}}),actions:{"color-output":function(t,e){return{type_:"color",color1:e[0],color2:v.go(e[1],"bd")}}}},oxidation:{transitions:v.createTransitions({empty:{"*":{}},"roman numeral":{"*":{action_:"roman-numeral"}},"${(...)}$|$(...)$":{"*":{action_:"tex-math"}},else:{"*":{action_:"copy"}}}),actions:{"roman-numeral":function(t,e){return{type_:"roman numeral",p1:e||""}}}},"tex-math":{transitions:v.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},else:{"*":{action_:"o="}}}),actions:{output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var r in t)delete t[r];return e}}}},"tex-math tight":{transitions:v.createTransitions({empty:{"*":{action_:"output"}},"\\ce{(...)}":{"*":{action_:["output","ce"]}},"{...}|\\,|\\x{}{}|\\x{}|\\x":{"*":{action_:"o="}},"-|+":{"*":{action_:"tight operator"}},else:{"*":{action_:"o="}}}),actions:{"tight operator":function(t,e){t.o=(t.o||"")+"{"+e+"}"},output:function(t){if(t.o){var e={type_:"tex-math",p1:t.o};for(var r in t)delete t[r];return e}}}},"9,9":{transitions:v.createTransitions({empty:{"*":{}},",":{"*":{action_:"comma"}},else:{"*":{action_:"copy"}}}),actions:{comma:function(){return{type_:"commaDecimal"}}}},pu:{transitions:v.createTransitions({empty:{"*":{action_:"output"}},space$:{"*":{action_:["output","space"]}},"{[(|)]}":{"0|a":{action_:"copy"}},"(-)(9)^(-9)":{0:{action_:"number^",nextState:"a"}},"(-)(9.,9)(e)(99)":{0:{action_:"enumber",nextState:"a"}},space:{"0|a":{}},"pm-operator":{"0|a":{action_:{type_:"operator",option:"\\pm"},nextState:"0"}},operator:{"0|a":{action_:"copy",nextState:"0"}},"//":{d:{action_:"o=",nextState:"/"}},"/":{d:{action_:"o=",nextState:"/"}},"{...}|else":{"0|d":{action_:"d=",nextState:"d"},a:{action_:["space","d="],nextState:"d"},"/|q":{action_:"q=",nextState:"q"}}}),actions:{enumber:function(t,e){var r=[];return e[0]==="+-"||e[0]==="+/-"?r.push("\\pm "):e[0]&&r.push(e[0]),e[1]&&(v.concatArray(r,v.go(e[1],"pu-9,9")),e[2]&&(e[2].match(/[,.]/)?v.concatArray(r,v.go(e[2],"pu-9,9")):r.push(e[2])),(e[3]||e[4])&&(e[3]==="e"||e[4]==="*"?r.push({type_:"cdot"}):r.push({type_:"times"}))),e[5]&&r.push("10^{"+e[5]+"}"),r},"number^":function(t,e){var r=[];return e[0]==="+-"||e[0]==="+/-"?r.push("\\pm "):e[0]&&r.push(e[0]),v.concatArray(r,v.go(e[1],"pu-9,9")),r.push("^{"+e[2]+"}"),r},operator:function(t,e,r){return{type_:"operator",kind_:r||e}},space:function(){return{type_:"pu-space-1"}},output:function(t){var e,r=v.patterns.match_("{(...)}",t.d||"");r&&r.remainder===""&&(t.d=r.match_);var i=v.patterns.match_("{(...)}",t.q||"");if(i&&i.remainder===""&&(t.q=i.match_),t.d&&(t.d=t.d.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.d=t.d.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F")),t.q){t.q=t.q.replace(/\u00B0C|\^oC|\^{o}C/g,"{}^{\\circ}C"),t.q=t.q.replace(/\u00B0F|\^oF|\^{o}F/g,"{}^{\\circ}F");var n={d:v.go(t.d,"pu"),q:v.go(t.q,"pu")};t.o==="//"?e={type_:"pu-frac",p1:n.d,p2:n.q}:(e=n.d,n.d.length>1||n.q.length>1?e.push({type_:" / "}):e.push({type_:"/"}),v.concatArray(e,n.q))}else e=v.go(t.d,"pu-2");for(var o in t)delete t[o];return e}}},"pu-2":{transitions:v.createTransitions({empty:{"*":{action_:"output"}},"*":{"*":{action_:["output","cdot"],nextState:"0"}},"\\x":{"*":{action_:"rm="}},space:{"*":{action_:["output","space"],nextState:"0"}},"^{(...)}|^(-1)":{1:{action_:"^(-1)"}},"-9.,9":{0:{action_:"rm=",nextState:"0"},1:{action_:"^(-1)",nextState:"0"}},"{...}|else":{"*":{action_:"rm=",nextState:"1"}}}),actions:{cdot:function(){return{type_:"tight cdot"}},"^(-1)":function(t,e){t.rm+="^{"+e+"}"},space:function(){return{type_:"pu-space-2"}},output:function(t){var e=[];if(t.rm){var r=v.patterns.match_("{(...)}",t.rm||"");r&&r.remainder===""?e=v.go(r.match_,"pu"):e={type_:"rm",p1:t.rm}}for(var i in t)delete t[i];return e}}},"pu-9,9":{transitions:v.createTransitions({empty:{0:{action_:"output-0"},o:{action_:"output-o"}},",":{0:{action_:["output-0","comma"],nextState:"o"}},".":{0:{action_:["output-0","copy"],nextState:"o"}},else:{"*":{action_:"text="}}}),actions:{comma:function(){return{type_:"commaDecimal"}},"output-0":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){var r=t.text_.length%3;r===0&&(r=3);for(var i=t.text_.length-3;i>0;i-=3)e.push(t.text_.substr(i,3)),e.push({type_:"1000 separator"});e.push(t.text_.substr(0,r)),e.reverse()}else e.push(t.text_);for(var n in t)delete t[n];return e},"output-o":function(t){var e=[];if(t.text_=t.text_||"",t.text_.length>4){for(var r=t.text_.length-3,i=0;i"||t.r==="<=>>"||t.r==="<<=>"||t.r==="<-->"?(a="\\long"+a,o.rd&&(a="\\overset{"+o.rd+"}{"+a+"}"),o.rq&&(t.r==="<-->"?a="\\underset{\\lower2mu{"+o.rq+"}}{"+a+"}":a="\\underset{\\lower6mu{"+o.rq+"}}{"+a+"}"),a=" {}\\mathrel{"+a+"}{} "):(o.rq&&(a+="[{"+o.rq+"}]"),a+="{"+o.rd+"}",a=" {}\\mathrel{\\x"+a+"}{} "):a=" {}\\mathrel{\\long"+a+"}{} ",e=a;break;case"operator":e=U._getOperator(t.kind_);break;case"1st-level escape":e=t.p1+" ";break;case"space":e=" ";break;case"entitySkip":e="~";break;case"pu-space-1":e="~";break;case"pu-space-2":e="\\mkern3mu ";break;case"1000 separator":e="\\mkern2mu ";break;case"commaDecimal":e="{,}";break;case"comma enumeration L":e="{"+t.p1+"}\\mkern6mu ";break;case"comma enumeration M":e="{"+t.p1+"}\\mkern3mu ";break;case"comma enumeration S":e="{"+t.p1+"}\\mkern1mu ";break;case"hyphen":e="\\text{-}";break;case"addition compound":e="\\,{\\cdot}\\,";break;case"electron dot":e="\\mkern1mu \\bullet\\mkern1mu ";break;case"KV x":e="{\\times}";break;case"prime":e="\\prime ";break;case"cdot":e="\\cdot ";break;case"tight cdot":e="\\mkern1mu{\\cdot}\\mkern1mu ";break;case"times":e="\\times ";break;case"circa":e="{\\sim}";break;case"^":e="uparrow";break;case"v":e="downarrow";break;case"ellipsis":e="\\ldots ";break;case"/":e="/";break;case" / ":e="\\,/\\,";break;default:throw["MhchemBugT","mhchem bug T. Please report."]}return e},_getArrow:function(t){switch(t){case"->":return"rightarrow";case"\u2192":return"rightarrow";case"\u27F6":return"rightarrow";case"<-":return"leftarrow";case"<->":return"leftrightarrow";case"<-->":return"leftrightarrows";case"<=>":return"rightleftharpoons";case"\u21CC":return"rightleftharpoons";case"<=>>":return"Rightleftharpoons";case"<<=>":return"Leftrightharpoons";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getBond:function(t){switch(t){case"-":return"{-}";case"1":return"{-}";case"=":return"{=}";case"2":return"{=}";case"#":return"{\\equiv}";case"3":return"{\\equiv}";case"~":return"{\\tripledash}";case"~-":return"{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}";case"~=":return"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}";case"~--":return"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}";case"-~-":return"{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}";case"...":return"{{\\cdot}{\\cdot}{\\cdot}}";case"....":return"{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}";case"->":return"{\\rightarrow}";case"<-":return"{\\leftarrow}";case"<":return"{<}";case">":return"{>}";default:throw["MhchemBugT","mhchem bug T. Please report."]}},_getOperator:function(t){switch(t){case"+":return" {}+{} ";case"-":return" {}-{} ";case"=":return" {}={} ";case"<":return" {}<{} ";case">":return" {}>{} ";case"<<":return" {}\\ll{} ";case">>":return" {}\\gg{} ";case"\\pm":return" {}\\pm{} ";case"\\approx":return" {}\\approx{} ";case"$\\approx$":return" {}\\approx{} ";case"v":return" \\downarrow{} ";case"(v)":return" \\downarrow{} ";case"^":return" \\uparrow{} ";case"(^)":return" \\uparrow{} ";default:throw["MhchemBugT","mhchem bug T. Please report."]}}};var De=class t extends p{constructor(e){super({mode:e.mode,command:e.command,style:e.style,body:e.body,type:"box"}),this.framecolor=e.framecolor,this.backgroundcolor=e.backgroundcolor,this.padding=e.padding,this.offset=e.offset,this.border=e.border}static fromJson(e){return new t(e)}toJson(){return u(m({},super.toJson()),{framecolor:this.framecolor,backgroundcolor:this.backgroundcolor,padding:this.padding,offset:this.offset,border:this.border})}render(e){var l,c,h,d;let r=p.createBox(e,this.body,{type:"lift"});if(!r)return null;let i=e.toEm((l=this.offset)!=null?l:{dimension:0});r.depth+=i,r.setStyle("display","inline-block"),r.setStyle("position","relative"),r.setStyle("height",Math.floor(100*r.height+r.depth)/100,"em"),r.setStyle("vertical-align",-Math.floor(100*r.height)/100,"em");let n=new $({parent:e},this.style),o=n.toEm((c=this.padding)!=null?c:{register:"fboxsep"}),a=new y(null,{classes:"ML__box"});a.height=r.height+o,a.depth=r.depth+o,a.setStyle("box-sizing","border-box"),a.setStyle("position","absolute"),a.setStyle("top",-o+.3,"em"),a.setStyle("left",0),a.setStyle("height",a.height+a.depth,"em"),a.setStyle("width","100%"),this.backgroundcolor&&a.setStyle("background-color",(h=n.toBackgroundColor(this.backgroundcolor))!=null?h:"transparent"),this.framecolor&&a.setStyle("border",`${n.getRegisterAsEm("fboxrule",2)}em solid ${(d=n.toColor(this.framecolor))!=null?d:"black"}`),this.border&&a.setStyle("border",this.border);let s=new y([a,r],{type:"lift"});return s.setStyle("display","inline-block"),s.setStyle("position","relative"),s.setStyle("line-height",0),s.height=r.height+o+(i>0?i:0),s.depth=r.depth+o+(i<0?-i:0),s.setStyle("padding-left",o,"em"),s.setStyle("padding-right",o,"em"),s.setStyle("height",Math.floor(100*(r.height+r.depth+2*o+Math.abs(i)))/100,"em"),s.setStyle("margin-top",-o,"em"),s.setStyle("top",Math.floor(100*(r.depth-r.height+2*o-i))/100,"em"),s.setStyle("vertical-align",Math.floor(100*(r.depth+2*o))/100,"em"),this.caret&&(s.caret=this.caret),this.attachSupsub(e,{base:s})}_serialize(e){return e.skipStyles?B([this.bodyToLatex(e),this.supsubToLatex(e)]):super._serialize(e)}};var Qe=class t extends p{constructor(e){var r,i,n,o;super(u(m({},e),{type:"phantom"})),this.captureSelection=!0,this.isInvisible=(r=e.isInvisible)!=null?r:!1,this.smashDepth=(i=e.smashDepth)!=null?i:!1,this.smashHeight=(n=e.smashHeight)!=null?n:!1,this.smashWidth=(o=e.smashWidth)!=null?o:!1}static fromJson(e){return new t(e)}toJson(){let e={};return this.isInvisible&&(e.isInvisible=!0),this.smashDepth&&(e.smashDepth=!0),this.smashHeight&&(e.smashHeight=!0),this.smashWidth&&(e.smashWidth=!0),m(m({},super.toJson()),e)}render(e){let r=new $({parent:e,isPhantom:!0});if(!this.smashDepth&&!this.smashHeight&&!this.smashWidth)return this.isInvisible,p.createBox(r,this.body,{classes:"ML__inner"});let i=p.createBox(this.isInvisible?r:e,this.body);if(!i)return null;if(this.smashWidth){let n=new y(null,{classes:"ML__fix"});return new y([i,n],{classes:"ML__rlap"}).wrap(e)}if(!this.smashHeight&&!this.smashDepth)return i;if(this.smashHeight&&(i.height=0),this.smashDepth&&(i.depth=0),i.children)for(let n of i.children)this.smashHeight&&(n.height=0),this.smashDepth&&(n.depth=0);return new J({firstBaseline:[{box:i}]},{type:i.type}).wrap(e)}};var et=class t extends p{constructor(e){var r;super(m({type:"spacing"},e)),this.width=e==null?void 0:e.width,this._braced=(r=e==null?void 0:e.braced)!=null?r:!1}static fromJson(e){return new t(e)}toJson(){let e=super.toJson();return this.width!==void 0&&(e.width=this.width),this._braced&&(e.braced=!0),e}render(e){var i;if(this.command==="space")return new y(this.mode==="math"?null:" ");let r;if(this.width!==void 0)r=new y(null,{classes:"ML__mspace"}),r.left=e.toEm(this.width);else{let n=(i={"\\qquad":"ML__qquad","\\quad":"ML__quad","\\enspace":"ML__enspace","\\;":"ML__thickspace","\\:":"ML__mediumspace","\\>":"ML__mediumspace","\\,":"ML__thinspace","\\!":"ML__negativethinspace"}[this.command])!=null?i:"ML__mediumspace";r=new y(null,{classes:n})}return r=this.bind(e,r),this.caret&&(r.caret=this.caret),r}_serialize(e){var n;if(!e.expandMacro&&typeof this.verbatimLatex=="string")return this.verbatimLatex;let r=G(this.command,this.mode);if(r!=null&&r.serialize)return r.serialize(this,e);let i=(n=this.command)!=null?n:"";return this.width===void 0?i:this._braced&&!("register"in this.width)?`${i}{${re(this.width)}}`:`${i}${re(this.width)}`}};var Ve=class t extends p{constructor(e){let r=e.body;super(u(m({},e),{type:"overlap",body:typeof r=="string"?[new p({value:r})]:r,style:e==null?void 0:e.style})),this.skipBoundary=!0,this.align=e==null?void 0:e.align,this.boxType=e==null?void 0:e.boxType}static fromJson(e){return new t(e)}toJson(){let e={};return this.align&&(e.align=this.align),this.boxType&&(e.boxType=this.boxType),m(m({},super.toJson()),e)}render(e){let r=p.createBox(e,this.body,{classes:"ML__inner"});return r?(this.caret&&(r.caret=this.caret),this.bind(e,new y([r,new y(null,{classes:"ML__fix"})],{classes:this.align==="right"?"ML__rlap":"ML__llap",type:this.boxType}))):null}};var un=class t extends p{constructor(e,r){var i;super({type:"composition",mode:(i=r==null?void 0:r.mode)!=null?i:"math",value:e})}static fromJson(e){return new t(e.value,e)}toJson(){return super.toJson()}render(e){let r=new y(this.value,{classes:"ML__composition",type:"composition"});return this.bind(e,r),this.caret&&(r.caret=this.caret),r}_serialize(e){return""}};var Bt=class t extends p{constructor(e,r){var i;super({type:"latex",value:e,mode:"latex"}),this.isSuggestion=(i=r==null?void 0:r.isSuggestion)!=null?i:!1,this.isError=!1}static fromJson(e){let r=new t(e.value);return e.isSuggestion&&(r.isSuggestion=!0),e.isError&&(r.isError=!0),r}toJson(){let e={};return this.isSuggestion&&(e.isSuggestion=!0),this.isError&&(e.isError=!0),m({type:"latex",value:this.value},e)}render(e){let r=new y(this.value,{classes:this.isSuggestion?"ML__suggestion":this.isError?"ML__error":"",type:"latex",maxFontSize:1});return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}},hn=class t extends p{constructor(e=""){super({type:"latexgroup",mode:"latex"}),this.body=[...e].map(r=>new Bt(r)),this.skipBoundary=!0}static fromJson(e){return new t}toJson(){return super.toJson()}render(e){let r=p.createBox(e,this.body);return r?(this.caret&&(r.caret=this.caret),this.bind(e,r)):null}_serialize(e){var r,i;return(i=(r=this.body)==null?void 0:r.map(n=>n.value).join(""))!=null?i:""}};function Wt(t){if(ve(t))return t.map(i=>Wt(i));if(typeof t=="string")return p.fromJson(t);t=m({},t);for(let i of Lt)t[i]&&(t[i]=Wt(t[i]));t.args&&(t.args=_c(t.args)),t.array&&(t.array=Wt(t.array));let e=t.type,r;e==="accent"&&(r=Tt.fromJson(t)),e==="array"&&(r=W.fromJson(t)),e==="box"&&(r=De.fromJson(t)),e==="chem"&&(r=Ur.fromJson(t)),e==="composition"&&(r=un.fromJson(t)),e==="delim"&&(r=pr.fromJson(t)),e==="enclose"&&(r=lt.fromJson(t)),e==="error"&&(r=Ne.fromJson(t)),e==="extensible-symbol"&&(r=Ht.fromJson(t)),e==="genfrac"&&(r=qe.fromJson(t)),e==="group"&&(r=gr.fromJson(t)),e==="latex"&&(r=Bt.fromJson(t)),e==="latexgroup"&&(r=hn.fromJson(t)),e==="leftright"&&(r=Gt.fromJson(t)),e==="macro"&&(r=yr.fromJson(t)),e==="macro-argument"&&(r=cn.fromJson(t)),e==="operator"&&(r=Ie.fromJson(t)),e==="overlap"&&(r=Ve.fromJson(t)),e==="overunder"&&(r=se.fromJson(t)),e==="placeholder"&&(r=ue.fromJson(t)),e==="prompt"&&(r=br.fromJson(t)),e==="phantom"&&(r=Qe.fromJson(t)),e==="sizeddelim"&&(r=fr.fromJson(t)),e==="spacing"&&(r=et.fromJson(t)),e==="subsup"&&(r=xr.fromJson(t)),e==="surd"&&(r=dr.fromJson(t)),e==="text"&&(r=ct.fromJson(t)),e==="tooltip"&&(r=Ut.fromJson(t)),r||(!e||["first","mbin","mrel","mclose","minner","mop","mopen","mord","mpunct","root","space"].includes(e),`${e}`,r=p.fromJson(t));for(let i of Lt)t[i]&&r.setChildren(t[i],i);return t.verbatimLatex!==void 0&&(r.verbatimLatex=t.verbatimLatex),t.subsupPlacement&&(r.subsupPlacement=t.subsupPlacement),t.explicitSubsupPlacement&&(r.explicitSubsupPlacement=!0),t.isFunction&&(r.isFunction=!0),t.skipBoundary&&(r.skipBoundary=!0),t.captureSelection&&(r.captureSelection=!0),r}function _c(t){if(t){if(typeof t=="string")return t;if(Array.isArray(t))return t.map(e=>e===""?null:typeof e=="object"&&"group"in e?{group:e.group.map(r=>Wt(r))}:typeof e=="object"&&"atoms"in e?e.atoms.map(r=>Wt(r)):e)}}var Ao=class extends y{constructor(e){super(null,{type:"skip"}),this._width=e}toMarkup(){return``}};function Zr(t,e){if(!t.parent)return;let r=t.parent.children,i=r.indexOf(t),n=i-1;for(;n>=0&&r[n].type==="ignore";)n-=1;if(n<0&&t.parent.parent&&t.parent.type==="lift"){Zr(t.parent,e);return}i>0&&r[i-1].type==="skip"?r[i-1].width+=e:r.splice(i,0,new Ao(e))}var Cc={ord:{op:3,bin:4,rel:5,inner:3},op:{ord:3,op:3,rel:5,inner:3},bin:{ord:4,op:4,open:4,inner:4},rel:{ord:5,op:5,open:5,inner:5},close:{op:3,bin:4,rel:5,inner:3},punct:{ord:3,op:3,rel:3,open:3,punct:3,inner:3},inner:{ord:3,op:3,bin:4,rel:5,open:3,punct:3,inner:3}},Lc={ord:{op:3},op:{ord:3,op:3},close:{op:3},inner:{op:3}};function Tc(t){jr(t,(e,r)=>{r.type==="bin"&&(!e||/^(middle|bin|op|rel|open|punct)$/.test(e.type))&&(r.type="ord"),(e==null?void 0:e.type)==="bin"&&/^(rel|close|punct)$/.test(r.type)&&(e.type="ord"),r.type!=="ignore"&&(e=r)})}function dn(t,e){if(!t.children)return t;let r=t.children;Tc(r);let i=e.getRegisterAsEm("thinmuskip"),n=e.getRegisterAsEm("medmuskip"),o=e.getRegisterAsEm("thickmuskip");return jr(r,(a,s)=>{var d,f,S;if(!a)return;let l=a.type,c=s.isTight?(d=Lc[l])!=null?d:null:(f=Cc[l])!=null?f:null,h=(S=c==null?void 0:c[s.type])!=null?S:null;h===3&&Zr(s,i),h===4&&Zr(s,n),h===5&&Zr(s,o)}),t}function jr(t,e,r=void 0){if(!t)return r;t=[...t];for(let i of t)i.type==="lift"?r=jr(i.children,e,r):i.type==="ignore"?jr(i.children,e):(e(r,i),jr(i.children,e),r=i);return r}var Ut=class t extends p{constructor(e){super({type:"tooltip",command:e.command,mode:e.mode,style:e.style,body:e.body,displayContainsHighlight:!0}),this.tooltip=new p({type:"root",mode:e.content,body:e.tooltip,style:{}}),this.skipBoundary=!0,this.captureSelection=!1}static fromJson(e){return new t(u(m({},e),{tooltip:Wt(e.tooltip)}))}toJson(){var r;let e=(r=this.tooltip.body)==null?void 0:r.filter(i=>i.type!=="first").map(i=>i.toJson());return u(m({},super.toJson()),{tooltip:e})}render(e){let r=p.createBox(e,this.body);if(!r)return null;let i=new $({parent:e,mathstyle:"displaystyle"},{fontSize:Pr}),n=en(dn(new y(this.tooltip.render(i),{classes:"ML__tooltip-content"}),i)),o=new y([n,r],{classes:"ML__tooltip-container"});return this.caret&&(o.caret=this.caret),this.bind(e,o)}};function hl(t){return{up:"italic",bold:"bolditalic",italic:"italic",bolditalic:"bolditalic","":"italic"}[t!=null?t:""]}function Xr(t){return{up:"up",bold:"bold",italic:void 0,bolditalic:"bold","":void 0}[t!=null?t:""]}g("mathtip","{:auto}{:math}",{createAtom:t=>new Ut(u(m({},t),{body:A(t.args[0]),tooltip:A(t.args[1]),content:"math"})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\mathtip{${t.bodyToLatex(e)}}{${p.serialize([t.tooltip],u(m({},e),{defaultMode:"math"}))}}`});g("texttip","{:auto}{:text}",{createAtom:t=>new Ut(u(m({},t),{body:A(t.args[0]),tooltip:A(t.args[1]),content:"text"})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\texttip{${t.bodyToLatex(e)}}{${p.serialize([t.tooltip],u(m({},e),{defaultMode:"text"}))}}`});g("error","{:math}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),serialize:(t,e)=>`\\error{${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:"ML__error"})});g("ensuremath","{:math}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),serialize:(t,e)=>`${t.command}{${t.bodyToLatex(u(m({},e),{defaultMode:"math"}))}}`});g("color","{:value}",{applyStyle:(t,e,r,i)=>{var n,o;return u(m({},t),{verbatimColor:(n=re(r[0]))!=null?n:void 0,color:i.toColor((o=r[0])!=null?o:{string:"red"})})}});g("textcolor","{:value}{content:auto*}",{applyStyle:(t,e,r,i)=>{var n,o;return u(m({},t),{verbatimColor:(n=re(r[0]))!=null?n:void 0,color:i.toColor((o=r[0])!=null?o:{string:"red"})})}});g("boxed","{content:math}",{createAtom:t=>new De(u(m({},t),{body:A(t.args[0]),framecolor:{string:"black"}}))});g("colorbox","{:value}{:text*}",{applyStyle:(t,e,r,i)=>{var n,o;return u(m({},t),{verbatimBackgroundColor:(n=re(r[0]))!=null?n:void 0,backgroundColor:i.toBackgroundColor((o=r[0])!=null?o:{string:"yellow"})})}});g("fcolorbox","{frame-color:value}{background-color:value}{content:text}",{applyMode:"text",createAtom:t=>{var e,r;return new De(u(m({},t),{body:A(t.args[2]),framecolor:(e=t.args[0])!=null?e:{string:"blue"},backgroundcolor:(r=t.args[1])!=null?r:{string:"yellow"}}))},serialize:(t,e)=>{var r,i;return e.skipStyles?t.bodyToLatex(u(m({},e),{defaultMode:"text"})):F(t.command,(r=re(t.framecolor))!=null?r:"",(i=re(t.backgroundcolor))!=null?i:"",t.bodyToLatex(u(m({},e),{defaultMode:"text"})))}});g("bbox","[:bbox]{body:auto}",{createAtom:t=>{var i;let e=t.args[0],r=A(t.args[1]);return e?new De(u(m({},t),{body:r,padding:e.padding,border:e.border,backgroundcolor:(i=e.backgroundcolor)!=null?i:void 0})):new De(u(m({},t),{body:r}))},serialize:(t,e)=>{var i,n;if(e.skipStyles)return t.bodyToLatex(e);let r=t.command;if(Number.isFinite(t.padding)||t.border!==void 0||t.backgroundcolor!==void 0){let o=[];t.padding&&o.push((i=re(t.padding))!=null?i:""),t.border&&o.push(`border: ${t.border}`),t.backgroundcolor&&o.push((n=re(t.backgroundcolor))!=null?n:""),r+=`[${o.join(",")}]`}return F(r,t.bodyToLatex(e))}});g(["displaystyle","textstyle","scriptstyle","scriptscriptstyle"],"{:rest}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),render:(t,e)=>{let r=new $({parent:e,mathstyle:t.command.slice(1)},t.style),i=p.createBox(r,t.body,{type:"lift"});return t.caret&&(i.caret=t.caret),t.bind(e,i)},serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`{${B([t.command,t.bodyToLatex(e)])}}`});g(["tiny","scriptsize","footnotesize","small","normalsize","large","Large","LARGE","huge","Huge"],"",{applyStyle:(t,e)=>u(m({},t),{fontSize:{"\\tiny":1,"\\scriptsize":2,"\\footnotesize":3,"\\small":4,"\\normalsize":5,"\\large":6,"\\Large":7,"\\LARGE":8,"\\huge":9,"\\Huge":10}[e]})});g("fontseries","{:string}",{ifMode:"text",applyStyle:(t,e,r)=>{var i;return u(m({},t),{fontSeries:(i=r[0])!=null?i:"auto"})}});g("fontshape","{:string}",{ifMode:"text",applyStyle:(t,e,r)=>{var i;return u(m({},t),{fontShape:(i=r[0])!=null?i:"auto"})}});g("fontfamily","{:string}",{ifMode:"text",applyStyle:(t,e,r)=>{var i;return u(m({},t),{fontFamily:(i=r[0])!=null?i:"roman"})}});g("selectfont","",{ifMode:"text",applyStyle:t=>t});g("bf","{:rest*}",{applyStyle:t=>u(m({},t),{fontSeries:"b",fontShape:"n",fontFamily:"roman"})});g(["boldsymbol","bm","bold"],"{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variantStyle:"bold"})});g("bfseries","{:rest*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontSeries:"b"})});g("mdseries","{:rest*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontSeries:"m"})});g("upshape","{:rest*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"n"})});g("slshape","{:rest*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"sl"})});g("scshape","{:rest*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"sc"})});g("textbf","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontSeries:"b"})});g("textmd","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontSeries:"m"})});g("textup","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"n"})});g("textnormal","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"n",fontSeries:"m"})});g("textsl","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"sl"})});g("textit","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"it"})});g("textsc","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontShape:"sc"})});g("textrm","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontFamily:"roman"})});g("textsf","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontFamily:"sans-serif"})});g("texttt","{:text*}",{applyMode:"text",applyStyle:t=>u(m({},t),{fontFamily:"monospace"})});g("mathbf","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"normal",variantStyle:"bold"})});g("mathit","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"main",variantStyle:"italic"})});g("mathnormal","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"normal",variantStyle:"italic"})});g("mathbfit","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"main",variantStyle:"bolditalic"})});g("mathrm","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"normal",variantStyle:"up"})});g("mathsf","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"sans-serif",variantStyle:"up"})});g("mathtt","{:math*}",{applyMode:"math",applyStyle:t=>u(m({},t),{variant:"monospace",variantStyle:"up"})});g("it","{:rest*}",{applyStyle:t=>u(m({},t),{fontSeries:"m",fontShape:"it",fontFamily:"roman",variantStyle:"italic"})});g("rmfamily","{:rest*}",{applyStyle:t=>u(m({},t),{fontFamily:"roman"})});g("sffamily","{:rest*}",{applyStyle:t=>u(m({},t),{fontFamily:"sans-serif"})});g("ttfamily","{:rest*}",{applyStyle:t=>u(m({},t),{fontFamily:"monospace"})});g(["Bbb","mathbb"],"{:math*}",{applyStyle:t=>u(m({},t),{variant:"double-struck",variantStyle:Xr(t.variantStyle)})});g(["frak","mathfrak"],"{:math*}",{applyStyle:t=>u(m({},t),{variant:"fraktur",variantStyle:Xr(t.variantStyle)})});g("mathcal","{:math*}",{applyStyle:t=>u(m({},t),{variant:"calligraphic",variantStyle:Xr(t.variantStyle)})});g("mathscr","{:math*}",{applyStyle:t=>u(m({},t),{variant:"script",variantStyle:Xr(t.variantStyle)})});g("mbox","{:text}",{ifMode:"math",createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[0]),mode:"math"})),serialize:(t,e)=>F("\\mbox",t.bodyToLatex(u(m({},e),{defaultMode:"text"})))});g("text","{:text}",{ifMode:"math",applyMode:"text"});g(["class","htmlClass"],"{name:string}{content:auto*}",{createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[1])})),serialize:(t,e)=>!t.args[0]||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`,render:(t,e)=>{var r;return t.createBox(e,{classes:(r=t.args[0])!=null?r:"",boxType:"lift"})}});g(["cssId","htmlId"],"{id:string}{content:auto*}",{createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.cssId=(i=t.args[0])!=null?i:"",r}});g("htmlData","{data:string}{content:auto*}",{createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`\\htmlData{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.htmlData=(i=t.args[0])!=null?i:"",r}});g(["style","htmlStyle"],"{data:string}{content:auto*}",{createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[1])})),serialize:(t,e)=>{var r;return!((r=t.args)!=null&&r[0])||e.skipStyles?t.bodyToLatex(e):`${t.command}{${t.args[0]}}{${t.bodyToLatex(e)}}`},render:(t,e)=>{var i;let r=t.createBox(e);return r.htmlStyle=(i=t.args[0])!=null?i:"",r}});g("href","{url:string}{content:auto*}",{createAtom:t=>new p(u(m({},t),{type:"mord",body:A(t.args[1])})),render:(t,e)=>{var n;let r=t.createBox(e),i=(n=t.args[0])!=null?n:"";return i&&(r.htmlData=`href=${i}`),r}});g("em","{:rest}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`{\\em ${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:"ML__emph",boxType:"lift"})});g("emph","{:auto}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[1])})),serialize:(t,e)=>e.skipStyles?t.bodyToLatex(e):`\\emph{${t.bodyToLatex(e)}}`,render:(t,e)=>t.createBox(e,{classes:"ML__emph",boxType:"lift"})});var dl={"\\bigl":{mclass:"mopen",size:1},"\\Bigl":{mclass:"mopen",size:2},"\\biggl":{mclass:"mopen",size:3},"\\Biggl":{mclass:"mopen",size:4},"\\bigr":{mclass:"mclose",size:1},"\\Bigr":{mclass:"mclose",size:2},"\\biggr":{mclass:"mclose",size:3},"\\Biggr":{mclass:"mclose",size:4},"\\bigm":{mclass:"mrel",size:1},"\\Bigm":{mclass:"mrel",size:2},"\\biggm":{mclass:"mrel",size:3},"\\Biggm":{mclass:"mrel",size:4},"\\big":{mclass:"mord",size:1},"\\Big":{mclass:"mord",size:2},"\\bigg":{mclass:"mord",size:3},"\\Bigg":{mclass:"mord",size:4}};g(["bigl","Bigl","biggl","Biggl","bigr","Bigr","biggr","Biggr","bigm","Bigm","biggm","Biggm","big","Big","bigg","Bigg"],"{:delim}",{createAtom:t=>{var e;return new fr(u(m({},t),{delim:(e=t.args[0])!=null?e:".",size:dl[t.command].size,delimType:dl[t.command].mclass}))},serialize:(t,e)=>B([t.command,/^[a-zA-Z]/.test(t.value)?`{${t.value}}`:t.value])});g(["hspace","hspace*"],"{width:value}",{createAtom:t=>{var e;return new et(u(m({},t),{width:(e=t.args[0])!=null?e:{dimension:0}}))}});g(["mkern","kern","mskip","hskip","mspace"],"{width:value}",{createAtom:t=>{var e;return new et(u(m({},t),{width:(e=t.args[0])!=null?e:{dimension:0}}))}});g("mathchoice","{:math}{:math}{:math}{:math}",{createAtom:t=>new p(t),render:(t,e)=>{let r=0,i=e.mathstyle.id;(i===Hr||i===kt)&&(r=1),(i===It||i===Se)&&(r=2),(i===_t||i===me)&&(r=3);let n=A(t.args[r]);return p.createBox(e,n)},serialize:(t,e)=>`\\mathchoice{${p.serialize(t.args[0],e)}}{${p.serialize(t.args[1],e)}}{${p.serialize(t.args[2],e)}}{${p.serialize(t.args[3],e)}}`});g("mathop","{:auto}",{createAtom:t=>new p(u(m({},t),{type:"mop",body:A(t.args[0]),limits:"over-under",isFunction:!0,captureSelection:!0})),render:(t,e)=>{var i;let r=p.createBox(e,t.body);if(t.superscript||t.subscript){let n=(i=t.subsupPlacement)!=null?i:"auto";r=n==="over-under"||n==="auto"&&e.isDisplayStyle?t.attachLimits(e,{base:r}):t.attachSupsub(e,{base:r})}return t.caret&&(r.caret=t.caret),new y(t.bind(e,r),{type:"op",isSelected:t.isSelected,classes:"ML__op-group"})},serialize:(t,e)=>{let r=[F(t.command,t.bodyToLatex(e))];return t.explicitSubsupPlacement&&(t.subsupPlacement==="over-under"&&r.push("\\limits"),t.subsupPlacement==="adjacent"&&r.push("\\nolimits"),t.subsupPlacement==="auto"&&r.push("\\displaylimits")),r.push(t.supsubToLatex(e)),B(r)}});g(["mathbin","mathrel","mathopen","mathclose","mathpunct","mathord","mathinner"],"{:auto}",{createAtom:t=>new p(u(m({},t),{type:{"\\mathbin":"mbin","\\mathrel":"mrel","\\mathopen":"mopen","\\mathclose":"mclose","\\mathpunct":"mpunct","\\mathord":"mord","\\mathinner":"minner"}[t.command],body:A(t.args[0])}))});g(["operatorname","operatorname*"],"{operator:math}",{createAtom:t=>{let e=A(t.args[0]).map(r=>{var i;return r.type!=="first"&&(r.type="mord",r.value=(i={"\u2217":"*","\u2212":"-"}[r.value])!=null?i:r.value,r.isFunction=!1,!r.style.variant&&!r.style.variantStyle&&(r.style.variant="main",r.style.variantStyle="up")),r});return new p(u(m({},t),{type:"mop",body:e,isFunction:!0,limits:t.command==="\\operatorname"?"adjacent":"over-under"}))},render:(t,e)=>{var i;let r=p.createBox(e,t.body);if(t.superscript||t.subscript){let n=(i=t.subsupPlacement)!=null?i:"auto";r=n==="over-under"||n==="auto"&&e.isDisplayStyle?t.attachLimits(e,{base:r}):t.attachSupsub(e,{base:r})}return t.caret&&(r.caret=t.caret),new y(t.bind(e,r),{type:"op",isSelected:t.isSelected,classes:"ML__op-group"})},serialize:(t,e)=>{let r=[F(t.command,t.bodyToLatex(e))];return t.explicitSubsupPlacement&&(t.subsupPlacement==="over-under"&&r.push("\\limits"),t.subsupPlacement==="adjacent"&&r.push("\\nolimits"),t.subsupPlacement==="auto"&&r.push("\\displaylimits")),r.push(t.supsubToLatex(e)),B(r)}});g(["char","unicode"],"{charcode:value}",{createAtom:t=>new p(u(m({},t),{type:t.mode==="text"?"text":"mord"})),serialize:t=>{var e;return`${t.command}${re((e=t.args[0])!=null?e:{number:10067,base:"hexadecimal"})}`},render:(t,e)=>{let r=e.evaluate(t.args[0]);return(!r||!("number"in r))&&(r={number:10067,base:"hexadecimal"}),t.value=String.fromCodePoint(r.number),t.createBox(e)}});g("rule","[raise:value]{width:value}{thickness:value}",{createAtom:t=>new p(t),render:(t,e)=>{var s,l,c;let r=new $({parent:e,mathstyle:"textstyle"},t.style),i=r.toEm((s=t.args[0])!=null?s:{dimension:0}),n=r.toEm((l=t.args[1])!=null?l:{dimension:10}),o=r.toEm((c=t.args[2])!=null?c:{dimension:10}),a=new y(null,{classes:"ML__rule",type:"ord"});return a.width=n,a.height=o+i,a.depth=-i,a.setStyle("border-right-width",n,"em"),a.setStyle("border-top-width",o,"em"),a.setStyle("border-color",t.style.color),a.setStyle("vertical-align",i,"em"),t.isSelected&&a.setStyle("opacity","50%"),t.bind(r,a),t.caret&&(a.caret=t.caret),a.wrap(e)},serialize:t=>`\\rule${t.args[0]?`[${re(t.args[0])}]`:""}{${re(t.args[1])}}{${re(t.args[2])}}`});g(["overline","underline"],"{:auto}",{createAtom:t=>new p(u(m({},t),{body:A(t.args[0])})),render:(t,e)=>{let r=t.command.substring(1),i=new $({parent:e,mathstyle:"cramp"},t.style),n=p.createBox(i,t.body);if(!n)return null;let o=i.metrics.defaultRuleThickness/i.scalingFactor,a=new y(null,{classes:r+"-line"});a.height=o,a.maxFontSize=o*1.125*i.scalingFactor;let s;return r==="overline"?s=new J({shift:0,children:[{box:n},3*o,{box:a},o]}):s=new J({top:n.height,children:[o,{box:a},3*o,{box:n}]}),t.caret&&(s.caret=t.caret),new y(s,{classes:r,type:"ignore"})}});g("overset","{:auto}{base:auto}",{createAtom:t=>{let e=A(t.args[1]);return new se(u(m({},t),{above:A(t.args[0]),body:e,skipBoundary:!1,boxType:qt(e)}))},serialize:(t,e)=>F(t.command,t.aboveToLatex(e),t.bodyToLatex(e))});g("underset","{:auto}{base:auto}",{createAtom:t=>{let e=A(t.args[1]);return new se(u(m({},t),{below:A(t.args[0]),body:e,skipBoundary:!1,boxType:qt(e)}))},serialize:(t,e)=>F(t.command,t.belowToLatex(e),t.bodyToLatex(e))});g("overunderset","{above:auto}{below:auto}{base:auto}",{createAtom:t=>{let e=A(t.args[2]);return new se(u(m({},t),{above:A(t.args[0]),below:A(t.args[1]),body:e,skipBoundary:!1,boxType:qt(e)}))},serialize:(t,e)=>F(t.command,t.belowToLatex(e),t.bodyToLatex(e))});g(["stackrel","stackbin"],"[below:auto]{above:auto}{base:auto}",{createAtom:t=>new se(u(m({},t),{body:A(t.args[2]),above:A(t.args[1]),below:A(t.args[0]),skipBoundary:!1,boxType:t.command==="\\stackrel"?"rel":"bin"})),serialize:(t,e)=>F(t.command,t.aboveToLatex(e),t.bodyToLatex(e))});g("smash","[:string]{:auto}",{createAtom:t=>{var e,r,i,n;return new Qe(u(m({},t),{body:A(t.args[1]),smashHeight:(r=(e=t.args[0])==null?void 0:e.includes("t"))!=null?r:!0,smashDepth:(n=(i=t.args[0])==null?void 0:i.includes("b"))!=null?n:!0}))}});g("vphantom","{:auto}",{createAtom:t=>new Qe(u(m({},t),{body:A(t.args[0]),isInvisible:!0,smashWidth:!0}))});g("hphantom","{:auto}",{createAtom:t=>new Qe(u(m({},t),{body:A(t.args[0]),isInvisible:!0,smashHeight:!0,smashDepth:!0}))});g("phantom","{:auto}",{createAtom:t=>new Qe(u(m({},t),{body:A(t.args[0]),isInvisible:!0}))});g("mathstrut","",{createAtom:t=>new Qe(u(m({},t),{body:[new p({value:"("})],isInvisible:!0}))});g("not","{:math}",{createAtom:t=>{let e=A(t.args[0]);return e.length===0?new p(u(m({},t),{type:"mrel",value:"\uE020"})):new p(u(m({},t),{body:[new Ve(u(m({},t),{body:"\uE020",align:"right"})),...e],captureSelection:!0}))},serialize:(t,e)=>{let r=t.args[0],i=r&&typeof r=="object"&&"group"in r;return t.value!=="\uE020"?i?`\\not{${p.serialize(r.group,e)}}`:`\\not${p.serialize(r,e)}`:i?"\\not{}":"\\not"},render:(t,e)=>{if(t.value)return t.createBox(e);let i=t.args[0]&&typeof t.args[0]=="object"&&"group"in t.args[0]?"ord":qt(A(t.args[0])),n=p.createBox(e,t.body,{type:i});return t.caret&&(n.caret=t.caret),t.bind(e,n)}});g(["ne","neq"],"",{createAtom:t=>new p(u(m({},t),{type:"mrel",body:[new Ve(u(m({},t),{body:"\uE020",align:"right",boxType:"rel"})),new p(u(m({},t),{value:"="}))],captureSelection:!0})),serialize:t=>t.command});g("rlap","{:auto}",{createAtom:t=>new Ve(u(m({},t),{body:A(t.args[0]),align:"right"}))});g("llap","{:auto}",{createAtom:t=>new Ve(u(m({},t),{body:A(t.args[0]),align:"left"}))});g("mathrlap","{:math}",{createAtom:t=>new Ve(u(m({},t),{body:A(t.args[0]),align:"right"}))});g("mathllap","{:math}",{createAtom:t=>new Ve(u(m({},t),{body:A(t.args[0]),align:"left"}))});g("raisebox","{:value}{:text}",{createAtom:t=>{var e;return new De(u(m({},t),{body:A(t.args[1]),padding:{dimension:0},offset:(e=t.args[0])!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r;return F("\\raisebox",(r=re(t.offset))!=null?r:"0pt",t.bodyToLatex(e))}});g("raise","{:value}{:auto}",{createAtom:t=>{var e;return new De(u(m({},t),{body:A(t.args[1]),padding:{dimension:0},offset:(e=t.args[0])!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r;return F("\\raise",(r=re(t.offset))!=null?r:"0pt",t.bodyToLatex(e))}});g("lower","{:value}{:auto}",{createAtom:t=>{var e;return new De(u(m({},t),{body:A(t.args[1]),padding:{dimension:0},offset:(e=Pe(t.args[0],-1))!=null?e:{dimension:0}}))},serialize:(t,e)=>{var r,i;return F("\\lower",(i=re(Pe((r=t.offset)!=null?r:{dimension:0},-1)))!=null?i:"0pt",t.bodyToLatex(e))}});ne("0123456789/@.?!");po(65,90);po(97,122);ne([["\\forall",8704],["\\exists",8707],["\\nexists",8708,"mord","ams"],["\\mid",8739,"mrel"],["\\top",8868],["\\bot",8869]]);ne([["\\#",35],["\\&",38],["\\parallelogram",9649],["\\spadesuit",9824],["\\heartsuit",9825],["\\diamondsuit",9826],["\\clubsuit",9827],["\\flat",9837],["\\natural",9838],["\\sharp",9839]]);ne([["\\backslash",92],["\\nabla",8711],["\\partial",8706],["\\ell",8467],["\\hbar",8463],["\\pounds",163],["\\euro",8364]]);ne([["\\rightarrow",8594],["\\to",8594],["\\leftarrow",8592],["\\gets",8592],["\\Rightarrow",8658],["\\Leftarrow",8656],["\\longrightarrow",10230],["\\longleftarrow",10229],["\\Longrightarrow",10233],["\\implies",10233],["\\Longleftarrow",10232],["\\impliedby",10232],["\\longleftrightarrow",10231],["\\biconditional",10231],["\\Longleftrightarrow",10234],["\\mapsto",8614],["\\longmapsto",10236],["\\uparrow",8593],["\\downarrow",8595],["\\Uparrow",8657],["\\Downarrow",8659],["\\updownarrow",8597],["\\Updownarrow",8661],["\\hookrightarrow",8618],["\\hookleftarrow",8617],["\\rightharpoonup",8640],["\\leftharpoonup",8636],["\\rightharpoondown",8641],["\\leftharpoondown",8637],["\\searrow",8600],["\\nearrow",8599],["\\swarrow",8601],["\\nwarrow",8598],["\\originalof",8886],["\\laplace",8886],["\\imageof",8887],["\\Laplace",8887]],"mrel");ne([["\\mapsfrom",8612,"mrel"],["\\Mapsfrom",10502,"mrel"],["\\MapsTo",10503,"mrel"],["\\Yup",8516,"mord"],["\\lightning",8623,"mrel"],["\\leftarrowtriangle",8701,"mrel"],["\\rightarrowtriangle",8702,"mrel"],["\\leftrightarrowtriangle",8703,"mrel"],["\\boxdot",8865,"mbin"],["\\bigtriangleup",9651,"mbin"],["\\bigtriangledown",9661,"mbin"],["\\boxbar",9707,"mbin"],["\\Lbag",10181,"mopen"],["\\Rbag",10182,"mclose"],["\\llbracket",10214,"mopen"],["\\rrbracket",10215,"mclose"],["\\longmapsfrom",10235,"mrel"],["\\Longmapsfrom",10237,"mrel"],["\\Longmapsto",10238,"mrel"],["\\boxslash",10692,"mbin"],["\\boxbslash",10693,"mbin"],["\\boxast",10694,"mbin"],["\\boxcircle",10695,"mbin"],["\\boxbox",10696,"mbin"],["\\fatsemi",10783,"mop"],["\\leftslice",10918,"mrel"],["\\rightslice",10919,"mrel"],["\\interleave",10996,"mbin"],["\\biginterleave",11004,"mop"],["\\sslash",11005,"mbin"],["\\talloblong",11006,"mbin"]]);ne([["\\lbrace",123,"mopen"],["\\rbrace",125,"mclose"],["\\lparen",40,"mopen"],["\\rparen",41,"mclose"],["\\langle",10216,"mopen"],["\\rangle",10217,"mclose"],["\\lfloor",8970,"mopen"],["\\rfloor",8971,"mclose"],["\\lceil",8968,"mopen"],["\\rceil",8969,"mclose"],["\\vert",8739],["\\lvert",8739,"mopen"],["\\rvert",8739,"mclose"],["\\|",8741],["\\Vert",8741],["\\mVert",8741],["\\lVert",8741,"mopen"],["\\rVert",8741,"mclose"],["\\lbrack",91,"mopen"],["\\rbrack",93,"mclose"],["\\{",123,"mopen"],["\\}",125,"mclose"],["(",40,"mopen"],[")",41,"mclose"],["[",91,"mopen"],["]",93,"mclose"],["\\ulcorner",9484,"mopen","ams"],["\\urcorner",9488,"mclose","ams"],["\\llcorner",9492,"mopen","ams"],["\\lrcorner",9496,"mclose","ams"],["\\lgroup",10222,"mopen"],["\\rgroup",10223,"mclose"],["\\lmoustache",9136,"mopen"],["\\rmoustache",9137,"mclose"]]);ne([["\\dashrightarrow",8674],["\\dashleftarrow",8672],["\\Rrightarrow",8667],["\\Lleftarrow",8666],["\\leftrightarrows",8646],["\\rightleftarrows",8644],["\\curvearrowright",8631],["\\curvearrowleft",8630],["\\rightrightarrows",8649],["\\leftleftarrows",8647],["\\upuparrows",8648],["\\downdownarrows",8650],["\\vartriangle",9651],["\\triangleq",8796],["\\vartriangleleft",8882],["\\trianglelefteq",8884],["\\ntriangleleft",8938],["\\ntrianglelefteq",8940],["\\vartriangleright",8883],["\\trianglerighteq",8885],["\\ntriangleright",8939],["\\ntrianglerighteq",8941],["\\blacktriangleleft",9664],["\\blacktriangleright",9654],["\\leftarrowtail",8610],["\\rightarrowtail",8611],["\\looparrowright",8620],["\\looparrowleft",8619],["\\twoheadleftarrow",8606],["\\twoheadrightarrow",8608],["\\twoheadrightarrowtail",10518],["\\rightleftharpoons",8652],["\\leftrightharpoons",8651],["\\Rsh",8625],["\\Lsh",8624],["\\circlearrowright",8635],["\\circlearrowleft",8634],["\\restriction",8638],["\\upharpoonright",8638],["\\upharpoonleft",8639],["\\downharpoonright",8642],["\\downharpoonleft",8643],["\\rightsquigarrow",8669],["\\leadsto",8669],["\\leftrightsquigarrow",8621],["\\multimap",8888],["\\nleftarrow",8602],["\\nrightarrow",8603],["\\nRightarrow",8655],["\\nLeftarrow",8653],["\\nleftrightarrow",8622],["\\nLeftrightarrow",8654],["\\nvrightarrow",8696],["\\nvtwoheadrightarrow",10496],["\\nvrightarrowtail",10516],["\\nvtwoheadrightarrowtail",10519],["\\shortparallel",8741],["\\nless",8814],["\\nleqslant",57360],["\\lneq",10887],["\\lneqq",8808],["\\nleqq",57361],["\\lvertneqq",57356],["\\lnsim",8934],["\\lnapprox",10889],["\\nprec",8832],["\\npreceq",8928],["\\precnsim",8936],["\\precnapprox",10937],["\\nsim",8769],["\\nshortmid",57350],["\\nmid",8740],["\\nvdash",8876],["\\nvDash",8877],["\\ngtr",8815],["\\ngeqslant",57359],["\\ngeqq",57358],["\\gneq",10888],["\\gneqq",8809],["\\gvertneqq",57357],["\\gnsim",8935],["\\gnapprox",10890],["\\nsucc",8833],["\\nsucceq",8929],["\\succnsim",8937],["\\succnapprox",10938],["\\ncong",8774],["\\nshortparallel",57351],["\\nparallel",8742],["\\nVDash",8879],["\\nsupseteqq",57368],["\\supsetneq",8843],["\\varsupsetneq",57371],["\\supsetneqq",10956],["\\varsupsetneqq",57369],["\\nVdash",8878],["\\precneqq",10933],["\\succneqq",10934],["\\nsubseteqq",57366],["\\leqslant",10877],["\\geqslant",10878],["\\gtrsim",8819],["\\approxeq",8778],["\\thickapprox",8776],["\\lessapprox",10885],["\\gtrapprox",10886],["\\precapprox",10935],["\\succapprox",10936],["\\thicksim",8764],["\\succsim",8831],["\\precsim",8830],["\\backsim",8765],["\\eqsim",8770],["\\backsimeq",8909],["\\lesssim",8818],["\\nleq",8816],["\\ngeq",8817],["\\smallsmile",8995],["\\smallfrown",8994],["\\leqq",8806],["\\eqslantless",10901],["\\lll",8920],["\\lessgtr",8822],["\\lesseqgtr",8922],["\\lesseqqgtr",10891],["\\risingdotseq",8787],["\\fallingdotseq",8786],["\\subseteqq",10949],["\\Subset",8912],["\\sqsubset",8847],["\\preccurlyeq",8828],["\\curlyeqprec",8926],["\\vDash",8872],["\\Vvdash",8874],["\\bumpeq",8783],["\\Bumpeq",8782],["\\geqq",8807],["\\eqslantgtr",10902],["\\ggg",8921],["\\gtrless",8823],["\\gtreqless",8923],["\\gtreqqless",10892],["\\supseteqq",10950],["\\Supset",8913],["\\sqsupset",8848],["\\succcurlyeq",8829],["\\curlyeqsucc",8927],["\\Vdash",8873],["\\shortmid",8739],["\\between",8812],["\\pitchfork",8916],["\\varpropto",8733],["\\backepsilon",8717],["\\llless",8920],["\\gggtr",8921],["\\doteqdot",8785],["\\Doteq",8785],["\\eqcirc",8790],["\\circeq",8791],["\\therefore",8756],["\\because",8757]],"mrel","ams");ne([["+",43],["-",8722],["\u2212",8722],["\\pm",177],["\\mp",8723],["*",8727],["\\times",215],["\\div",247],["\\divides",8739],["\\cdot",8901],["\\cap",8745],["\\cup",8746],["\\setminus",8726],["\\land",8743],["\\wedge",8743],["\\lor",8744],["\\vee",8744],["\\circ",8728],["\\bigcirc",9711],["\\bullet",8729],["\\oplus",8853],["\\ominus",8854],["\\otimes",8855],["\\odot",8857],["\\oslash",8856],["\\bigtriangleup",9651],["\\bigtriangledown",9661],["\\triangleleft",9667],["\\triangleright",9657],["\\And",38],["\\dagger",8224],["\\dag",8224],["\\ddag",8225],["\\ddagger",8225],["\\ast",8727],["\\star",8902],["\\bigstar",9733],["\\diamond",8900]],"mbin");ne([["\\lhd",8882],["\\rhd",8883],["\\lessdot",8918],["\\gtrdot",8919],["\\ltimes",8905],["\\rtimes",8906],["\\leftthreetimes",8907],["\\rightthreetimes",8908],["\\intercal",8890],["\\dotplus",8724],["\\doublebarwedge",10846],["\\divideontimes",8903],["\\centerdot",8901],["\\smallsetminus",8726],["\\barwedge",8892],["\\veebar",8891],["\\nor",8891],["\\curlywedge",8911],["\\curlyvee",8910],["\\boxminus",8863],["\\boxplus",8862],["\\boxtimes",8864],["\\boxdot",8865],["\\circleddash",8861],["\\circledast",8859],["\\circledcirc",8858],["\\unlhd",8884],["\\unrhd",8885]],"mbin","ams");ne([["\\surd",8730],["\\S",167],["\\infty",8734],["\\prime",8242],["\\doubleprime",8243],["\\angle",8736],["`",8216],["\\$",36],["\\%",37],["\\_",95],["\\alpha",945],["\\beta",946],["\\gamma",947],["\\delta",948],["\\epsilon",1013],["\\varepsilon",949],["\\zeta",950],["\\eta",951],["\\theta",952],["\\vartheta",977],["\\iota",953],["\\kappa",954],["\\varkappa",1008,"mord","ams"],["\\lambda",955],["\\mu",956],["\\nu",957],["\\xi",958],["\\omicron",111],["\\pi",960],["\\varpi",982],["\\rho",961],["\\varrho",1009],["\\sigma",963],["\\varsigma",962],["\\tau",964],["\\phi",981],["\\varphi",966],["\\upsilon",965],["\\chi",967],["\\psi",968],["\\omega",969],["\\Gamma",915],["\\Delta",916],["\\Theta",920],["\\Lambda",923],["\\Xi",926],["\\Pi",928],["\\Sigma",931],["\\Upsilon",933],["\\Phi",934],["\\Psi",936],["\\Omega",937],["\\digamma",989,"mord","ams"],["\\varkappa",1008,"mord","ams"],["\\coppa",985,"mord","ams"],["\\koppa",985,"mord","ams"],["\\Coppa",984,"mord","ams"],["\\Koppa",984,"mord","ams"],["\\sampi",993,"mord","ams"],["\\Sampi",992,"mord","ams"],["\\emptyset",8709]]);ne([["=",61],["<",60],["\\lt",60],[">",62],["\\gt",62],["\\le",8804],["\\leq",8804],["\\ge",8805],["\\geq",8805],["\\ll",8810],["\\gg",8811],["\\coloneq",8788],["\\coloneqq",8788],["\\colonequals",8788],["\\measeq",8797],["\\eqdef",8798],["\\questeq",8799],[":",58],["\\cong",8773],["\\equiv",8801],["\\prec",8826],["\\preceq",10927],["\\succ",8827],["\\succeq",10928],["\\perp",10178],["\\propto",8733],["\\Colon",8759],["\\smile",8995],["\\frown",8994],["\\sim",8764],["\\doteq",8784],["\\bowtie",8904],["\\Join",8904],["\\asymp",8781],["\\sqsubseteq",8849],["\\sqsupseteq",8850],["\\approx",8776],["\\~",126],["\\leftrightarrow",8596],["\\Leftrightarrow",8660],["\\models",8872],["\\vdash",8866],["\\dashv",8867],["\\roundimplies",10608],["\\in",8712],["\\notin",8713],["\\ni",8715],["\\owns",8715],["\\subset",8834],["\\supset",8835],["\\subseteq",8838],["\\supseteq",8839],["\\differencedelta",8710],["\\mvert",8739],["\\parallel",8741],["\\simeq",8771]],"mrel");ne([["\\lnot",172],["\\neg",172],["\\triangle",9651],["\\subsetneq",8842],["\\varsubsetneq",57370],["\\subsetneqq",10955],["\\varsubsetneqq",57367],["\\nsubset",8836],["\\nsupset",8837],["\\nsubseteq",8840],["\\nsupseteq",8841]],"mrel","ams");ne([["\\wp",8472],["\\aleph",8501]]);ne([["\\blacktriangle",9650],["\\hslash",8463],["\\Finv",8498],["\\Game",8513],["\\eth",240],["\\mho",8487],["\\Bbbk",107],["\\yen",165],["\\square",9633],["\\Box",9633],["\\blacksquare",9632],["\\circledS",9416],["\\circledR",174],["\\triangledown",9661],["\\blacktriangledown",9660],["\\checkmark",10003],["\\diagup",9585],["\\measuredangle",8737],["\\sphericalangle",8738],["\\backprime",8245],["\\backdoubleprime",8246],["\\Diamond",9674],["\\lozenge",9674],["\\blacklozenge",10731],["\\varnothing",8709],["\\complement",8705],["\\maltese",10016],["\\beth",8502],["\\daleth",8504],["\\gimel",8503]],"mord","ams");ne([["\\ ",160],["~",160]],"space");g(["!",",",":",";",">","enskip","enspace","quad","qquad"],"",{createAtom:t=>new et(t)});g("space","",{createAtom:t=>new et(t)});ne([["\\colon",58],["\\cdotp",8901],["\\vdots",8942,"mord"],["\\ldotp",46],[",",44],[";",59]],"mpunct");ne([["\\cdots",8943],["\\ddots",8945],["\\ldots",8230],["\\mathellipsis",8230]],"minner");ne([["\\/",47],["|",8739,"mord"],["\\imath",305],["\\jmath",567],["\\degree",176],["'",8242],['"',8221]]);var pl="",pn="";function ge(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(//g,">")}function H(t,e){return!t||!e.generateID?"":` extid="${t}"`}function Bc(t,e,r){var d,f,S,x,w,D,b,M;let i=!1;e=e!=null?e:t.atoms.length;let n="",o="",a=t.atoms[t.index],s=(d=a.style)==null?void 0:d.variant,l=(f=a.style)==null?void 0:f.variantStyle,c="";if(a.value&&(s||l)){let k=(S=Or(a.value,s,l))!=null?S:a.value;if(k!==a.value)return t.index+=1,n=`${k}`,tt(n,t,r)||(t.mathML+=n,t.lastType="mi"),!0;c=(x={upnormal:"normal",boldnormal:"bold",italicmain:"italic",bolditalicmain:"bold-italic","updouble-struck":"double-struck","double-struck":"double-struck",boldfraktur:"bold-fraktur",calligraphic:"script",upcalligraphic:"script",script:"script",boldscript:"bold-script",boldcalligraphic:"bold-script",fraktur:"fraktur","upsans-serif":"sans-serif","boldsans-serif":"bold-sans-serif","italicsans-serif":"sans-serif-italic","bolditalicsans-serif":"sans-serif-bold-italic",monospace:"monospace"}[(l!=null?l:"")+(s!=null?s:"")])!=null?x:"",c&&(c=` mathvariant="${c}"`)}let h={"\\exponentialE":"ⅇ","\\imaginaryI":"ⅈ","\\differentialD":"ⅆ","\\capitalDifferentialD":"ⅅ","\\alpha":"α","\\pi":"π","\\infty":"∞","\\forall":"∀","\\nexists":"∄","\\exists":"∃","\\hbar":"\u210F","\\cdotp":"\u22C5","\\ldots":"\u2026","\\cdots":"\u22EF","\\ddots":"\u22F1","\\vdots":"\u22EE","\\ldotp":"."};if(a.command==="!")return t.index+=1,n="!",tt(n,t,r)||(t.mathML+=n,t.lastType="mo"),!0;if(h[a.command]){t.index+=1;let k=`${h[a.command]}`;return(t.lastType==="mi"||t.lastType==="mn"||t.lastType==="mtext"||t.lastType==="fence")&&(k=pn+k),tt(k,t,r)||(t.mathML+=k,t.lastType="mi"),!0}if(a.command==="\\operatorname")o=Sr(a.body),t.index+=1;else if(s||l)for(;t.index0){i=!0,n=`${o}`;let k=t.lastType;n.endsWith(">f")||n.endsWith(">g")?(n+=pl,t.lastType="applyfunction"):t.lastType=/^(.*)<\/mo>$/.test(n)?"mo":"mi",tt(n,t,r)||((k==="mi"||k==="mn"||k==="mtext"||k==="fence")&&(n=pn+n),t.mathML+=n)}return i}function fl(t){return t.index${t}${a}${o}`:o?s=`${t}${o}`:a&&(s=`${t}${a}`),e.mathML+=s,e.lastType="",!0}function Dc(t,e,r){e=e!=null?e:t.atoms.length;let i=t.index;for(;t.index=e)return t.index=i,!1;let n=t.index,o="",a=gl(t);a>=0&&a0){let l=H(t.atoms[n].id,r),{fontSeries:c,fontShape:h,textDecoration:d}=s,f=c==="b"&&h==="it"?"bold-italic":c==="b"?"bold":h==="it"?"italic":"";return f&&(l+=` mathvariant="${f}"`),d&&d!=="none"&&(l+=` style="text-decoration:${d}"`),o=`${ge(o)}`,a<0&&fl(t)&&(a=t.index,t.index+=1),tt(o,t,r)||(t.mathML+=o,t.lastType="mtext"),!0}return!1}function zc(t,e,r){e=e!=null?e:t.atoms.length;let i=t.index,n="",o=gl(t);for(o>=0&&o"+n+"",o<0&&fl(t)&&(o=t.index,t.index+=1),tt(n,t,r)||(t.mathML+=n,t.lastType="mn"),!0)}function $c(t,e,r){let i=!1;e=e!=null?e:t.atoms.length;let n="",o="";if(t.index",n+=Zt(t.atoms[l],r),n+=O(t.atoms,r,l+1,c),n+=Zt(t.atoms[c],r),n+="",t.index=c+1,(t.lastType==="mi"||t.lastType==="mn"||t.lastType==="mfrac"||t.lastType==="fence")&&(t.mathML+=pn),tt(n,t,r)&&(i=!0,t.lastType="",n=""),o="fence")}return n.length>0&&(i=!0,t.mathML+=n,t.lastType=o),i}function Ec(t,e,r){let i=!1;e=e!=null?e:t.atoms.length;let n="",o="",a=t.atoms[t.index];if(!a)return!1;let s={"\\ne":"≠","\\neq":"≠","\\pm":"±","\\times":"×","\\colon":":","\\vert":"|","\\Vert":"\u2225","\\mid":"\u2223","\\{":"{","\\}":"}","\\lbrace":"{","\\rbrace":"}","\\lbrack":"[","\\rbrack":"]","\\lparen":"(","\\rparen":")","\\langle":"\u27E8","\\rangle":"\u27E9","\\lfloor":"\u230A","\\rfloor":"\u230B","\\lceil":"\u2308","\\rceil":"\u2309"};if(s[a.command]){t.index+=1;let l=`${s[a.command]}`;return tt(l,t,r)||(t.mathML+=l,t.lastType="mo"),!0}if(t.index"):a.superscript?(n+=""+l,n+=O(a.superscript,r),n+=""):a.subscript&&(n+=""+l,n+=O(a.subscript,r),n+=""),t.mathML+=n,t.lastType="mo",t.index+=1,!0}{let l=t.atoms[t.index],c=l.value==="\\operatorname",h=c?'"+Sr(l.value)+"":Zt(l,r);n+=h,!c&&!/^(.*)<\/mo>$/.test(h)?(n+=pl,o="applyfunction"):o=c?"mi":"mo"}(t.lastType==="mi"||t.lastType==="mn")&&!/^(.*)<\/mo>$/.test(n)&&(n=pn+n),t.index+=1}return n.length>0&&(i=!0,tt(n,t,r)||(t.mathML+=n,t.lastType=o)),i}function O(t,e,r,i){e!=null||(e={});let n={atoms:[],index:r!=null?r:0,mathML:"",lastType:""};if(typeof t=="number"||typeof t=="boolean")n.mathML=t.toString();else if(typeof t=="string")n.mathML=t;else if(t instanceof p)n.mathML=ko(t,e);else if(Array.isArray(t)){n.atoms=t;let o=0;for(i=i||(t?t.length:0);n.index0&&n.atoms[n.index].type==="genfrac"&&(a=""+a),n.atoms[n.index].type==="genfrac"?n.lastType="mfrac":n.lastType="",n.index+=1,tt(a,n,e)?o+=1:a.length>0&&(n.mathML+=a,o+=1)}o>1&&(n.mathML=""+n.mathML+"")}return n.mathML}function Zt(t,e){let r="",i=Sr(t.value);return i&&(r=""+i+""),r}function Sr(t){if(!t)return"";if(typeof t=="string")return ge(t);if(!Array.isArray(t)&&typeof t.body=="string")return ge(t.body);let e="";for(let r of t)typeof r.value=="string"&&(e+=r.value);return ge(e)}function ko(t,e){var w,D,b,M,k,T,q,L,_,z,ee,de,ye,X,ae,E,V,K,Je,Dt,ut,j,oe;if(t.type==="first")return"";if(te(t.mode))return`${ge(t.value)}`;let r={widehat:"^",widecheck:"\u02C7",widetilde:"~",utilde:"~",overleftarrow:"\u2190",underleftarrow:"\u2190",xleftarrow:"\u2190",longleftarrow:"\u2190",overrightarrow:"\u2192",underrightarrow:"\u2192",xrightarrow:"\u2192",longrightarrow:"\u2192",underbrace:"\u23DF",overbrace:"\u23DE",overgroup:"\u23E0",undergroup:"\u23E1",overleftrightarrow:"\u2194",underleftrightarrow:"\u2194",xleftrightarrow:"\u2194",Overrightarrow:"\u21D2",xRightarrow:"\u21D2",overleftharpoon:"\u21BC",xleftharpoonup:"\u21BC",overrightharpoon:"\u21C0",xrightharpoonup:"\u21C0",xLeftarrow:"\u21D0",xLeftrightarrow:"\u21D4",xhookleftarrow:"\u21A9",xhookrightarrow:"\u21AA",xmapsto:"\u21A6",xrightharpoondown:"\u21C1",xleftharpoondown:"\u21BD",xrightleftharpoons:"\u21CC",longrightleftharpoons:"\u21CC",xleftrightharpoons:"\u21CB",xtwoheadleftarrow:"\u219E",xtwoheadrightarrow:"\u21A0",xlongequal:"=",xtofrom:"\u21C4",xleftrightarrows:"\u21C4",xRightleftharpoons:"\u21CC",longRightleftharpoons:"\u21CC",xLeftrightharpoons:"\u21CB",longLeftrightharpoons:"\u21CB"},i={"\\!":-3/18,"\\ ":6/18,"\\,":3/18,"\\:":4/18,"\\>":4/18,"\\;":5/18,"\\enspace":.5,"\\quad":1,"\\qquad":2,"\\enskip":.5},n="",o="",a,s,l,c,h,d,{command:f}=t;if(t.command==="\\error")return`${O(t.body,e)}`;let S={"\\vert":"|","\\Vert":"\u2225","\\mid":"\u2223","\\lbrack":"[","\\rbrack":"]","\\{":"{","\\}":"}","\\lbrace":"{","\\rbrace":"}","\\lparen":"(","\\rparen":")","\\langle":"\u27E8","\\rangle":"\u27E9","\\lfloor":"\u230A","\\rfloor":"\u230B","\\lceil":"\u2308","\\rceil":"\u2309"},x={"\\vec":"⃗","\\acute":"´","\\grave":"`","\\dot":"˙","\\ddot":"¨","\\tilde":"~","\\bar":"¯","\\breve":"˘","\\check":"ˇ","\\hat":"^"};switch(t.type){case"first":break;case"error":if(t.command==="\\\\")break;n=`${O(t.body,e)}`;break;case"group":case"root":n=O(t.body,e);break;case"array":let P=t;if((P.leftDelim&&P.leftDelim!=="."||P.rightDelim&&P.rightDelim!==".")&&(n+="",P.leftDelim&&P.leftDelim!=="."&&(n+=`${ge(S[P.leftDelim]||P.leftDelim)}`)),n+="",a=0;a"+O(P.rows[s][a],e)+"";n+=""}n+="",(P.leftDelim&&P.leftDelim!=="."||P.rightDelim&&P.rightDelim!==".")&&(P.rightDelim&&P.rightDelim!=="."&&(n+=`${ge(S[P.rightDelim]||P.rightDelim)}`),n+="");break;case"genfrac":let Y=t;(Y.leftDelim||Y.rightDelim)&&(n+=""),Y.leftDelim&&Y.leftDelim!=="."&&(n+=""+ge(S[Y.leftDelim]||Y.leftDelim)+""),Y.hasBarLine?(n+="",n+=O(t.above,e)||" ",n+=O(t.below,e)||" ",n+=""):(n+="",n+=""+O(t.above,e)+"",n+=""+O(t.below,e)+"",n+=""),Y.rightDelim&&Y.rightDelim!=="."&&(n+=""+ge(S[Y.rightDelim]||Y.rightDelim)+""),(Y.leftDelim||Y.rightDelim)&&(n+="");break;case"surd":t.hasEmptyBranch("above")?(n+="",n+=O(t.body,e),n+=""):(n+="",n+=O(t.body,e),n+=O(t.above,e),n+="");break;case"leftright":let be=t,ze=be.leftDelim;n="",ze&&ze!=="."&&(n+=`${ge((w=S[ze])!=null?w:ze)}`),t.body&&(n+=O(t.body,e));let He=be.matchingRightDelim();He&&He!=="."&&(n+=`${ge((D=S[He])!=null?D:He)}`),n+="";break;case"sizeddelim":case"delim":n+=`${ge(S[t.value]||t.value)}`;break;case"accent":let Ae=t;n+='",n+=O(t.body,e),n+=""+(x[f]||Ae.accent)+"",n+="";break;case"line":case"overlap":break;case"overunder":let le=t;h=t.above,c=t.below,(le.svgAbove||h)&&(le.svgBelow||c)?d=t.body:h&&h.length>0?(d=t.body,(M=(b=t.body)==null?void 0:b[0])!=null&&M.below?(c=t.body[0].below,d=t.body[0].body):((T=(k=t.body)==null?void 0:k[0])==null?void 0:T.type)==="first"&&((L=(q=t.body)==null?void 0:q[1])!=null&&L.below)&&(c=t.body[1].below,d=t.body[1].body)):c&&c.length>0&&(d=t.body,(z=(_=t.body)==null?void 0:_[0])!=null&&z.above?(h=t.body[0].above,d=t.body[0].body):((de=(ee=t.body)==null?void 0:ee[0])==null?void 0:de.type)==="first"&&((X=(ye=t.body)==null?void 0:ye[1])!=null&&X.above)&&(h=t.body[1].above,d=t.body[1].body)),(le.svgAbove||h)&&(le.svgBelow||c)?(n+=``,n+=(ae=r[le.svgBody])!=null?ae:O(d,e),n+=(E=r[le.svgBelow])!=null?E:O(c,e),n+=(V=r[le.svgAbove])!=null?V:O(h,e),n+=""):le.svgAbove||h?(n+=``+((K=r[le.svgBody])!=null?K:O(d,e)),n+=(Je=r[le.svgAbove])!=null?Je:O(h,e),n+=""):(le.svgBelow||c)&&(n+=``+((Dt=r[le.svgBody])!=null?Dt:O(d,e)),n+=(ut=r[le.svgBelow])!=null?ut:O(c,e),n+="");break;case"placeholder":n+="?";break;case"mord":{if(n=typeof t.value=="string"?t.value:f,n.length>0&&n.startsWith("\\"))typeof t.value=="string"&&t.value.charCodeAt(0)>255?n=String.fromCodePoint(t.value.codePointAt(0)):typeof t.value=="string"&&(n=t.value.charAt(0));else if(t.command==="\\char"){let vn=(j=t.args)==null?void 0:j[0];if(vn!==void 0&&"number"in vn){let ei=vn.number;typeof ei=="number"&&ei>=0&&ei<=1114111&&(n=String.fromCodePoint(ei))}}else typeof t.value=="string"?n=t.value:(console.error("Did not expect this"),n="");let ke=/\d/.test(n)?"mn":"mi";n=`<${ke}${H(t.id,e)}>${ge(n)}`;break}case"mbin":case"mrel":case"minner":n=Zt(t,e);break;case"mpunct":n='"+f+"";break;case"mop":case"operator":case"extensible-symbol":t.value!=="\u200B"&&(n="",n+=f==="\\operatorname"?t.body:f||t.body,n+="");break;case"box":let zo=t;n='"+O(t.body,e)+"";break;case"spacing":n+='';break;case"enclose":let xn=t;n=''+O(t.body,e)+"";break;case"prompt":n=''+O(t.body,e)+"";break;case"space":n+=" ";break;case"subsup":break;case"phantom":break;case"composition":break;case"rule":break;case"chem":break;case"mopen":n+=Zt(t,e);break;case"mclose":n+=Zt(t,e);break;case"macro":{let ke=t.command+Sr(t.macroArgs);ke&&(n+=`${ke}`)}break;case"latexgroup":n+=O(t.body,e);break;case"latex":n+=""+ge(t.value)+"";break;case"tooltip":n+=O(t.body,e);break;case"text":n+=`${ge(t.value)}`;break;default:if(t.command==="\\displaystyle")return`${O(t.body,e)}`;if(t.command==="\\textstyle")return`${O(t.body,e)}`;console.info("Unexpected element in conversion to MathML:",t)}return n}var wr={"\\alpha":"alpha ","\\mu":"mew ","\\sigma":"sigma ","\\pi":"pie ","\\imaginaryI":"imaginary eye ","\\imaginaryJ":"imaginary jay ","\\sum":"Summation ","\\prod":"Product ","+":"plus ","-":"minus ",";":' semi-colon ',",":' comma ',"|":'Vertical bar',"(":'Open paren. ',")":' Close paren. ',"=":"equals ","<":"is less than ","\\lt":"is less than ","<=":"is less than or equal to ","\\le":"is less than or equal to ","\\gt":"is greater than ",">":"is greater than ","\\pm":"plus or minus","\\mp":"minus or plus","\\ge":"is greater than or equal to ","\\geq":"is greater than or equal to ","\\leq":"is less than or equal to ","\\ne":"is not equal to ","\\neq":"is not equal to ","!":"factorial ","\\sin":"sine ","\\cos":"cosine ","\u200B":"","\u2212":"minus ",":":' such that ',"\\colon":' such that ',"\\hbar":"etch bar ","\\iff":'if, and only if, ',"\\Longleftrightarrow":'if, and only if, ',"\\land":"and ","\\lor":"or ","\\neg":"not ","\\div":"divided by ","\\forall":"for all ","\\exists":"there exists ","\\nexists":"there does not exists ","\\in":"element of ","\\N":'the set n',"\\C":'the set c',"\\Z":'the set z',"\\Q":'the set q',"\\infty":"infinity ","\\nabla":"nabla ","\\partial":"partial derivative of ","\\cdot":"times ","\\cdots":"dot dot dot ","\\Rightarrow":"implies ","\\lparen":'open paren',"\\rparen":'close paren',"\\lbrace":'open brace',"\\{":'open brace',"\\rbrace":'close brace',"\\}":'close brace',"\\langle":'left angle bracket',"\\rangle":'right angle bracket',"\\lfloor":'open floor',"\\rfloor":'close floor',"\\lceil":'open ceiling',"\\rceil":'close ceiling',"\\vert":'vertical bar',"\\mvert":'divides',"\\lvert":'left vertical bar',"\\rvert":'right vertical bar',"\\lbrack":' open square bracket ',"\\rbrack":' close square bracket ',mm:"millimeters",cm:"centimeters",km:"kilometers",kg:"kilograms"},_o={array:"array",matrix:"matrix",pmatrix:"parenthesis matrix",bmatrix:"square brackets matrix",Bmatrix:"braces matrix",vmatrix:"bars matrix",Vmatrix:"double bars matrix","matrix*":"matrix",smallmatrix:"small matrix"};function Rc(t){let e="";return t.startsWith("\\")&&(e=" "+t.replace("\\","")+" "),e}function Kr(t){let e=0;if(ve(t))for(let r of t)r.type!=="first"&&(e+=1);return e===1}function Fc(t){if(ve(t)){for(let e of t)if(e.type!=="first"&&e.id)return e.id.toString()}return""}function yl(t){let e="";if(ve(t))for(let r of t)r.type!=="first"&&typeof r.value=="string"&&(e+=r.value);return e}function Pc(t){return t?t.map(e=>e.value).join(""):""}function fn(t){if(t&&!t.some(e=>e.type!=="first"&&e.value===void 0))return t.map(e=>e.value).join("")}function Co(t){return`${t}`}function Oc(t,e){var o;let r="",i=!1,n=!1;for(let a=0;a${b}`:/[A-Z]/.test(b)?`capital ${b.toLowerCase()}`:b:/[a-z]/.test(b)?" '"+b.toUpperCase()+"'":/[A-Z]/.test(b)?" 'capital "+b.toUpperCase()+"'":b}if(!e)return"";if(ve(e))return Oc(t,e);let i="";if(e.id&&t==="math"&&(i+=''),te(e.mode))return i+e.value;let n="",o="",a="",s=!1,{command:l}=e;switch(l){case"\\vec":return"vector "+R(t,e.body);case"\\acute":return R(t,e.body)+" acute";case"\\grave":return R(t,e.body)+" grave";case"\\dot":return"dot over"+R(t,e.body);case"\\ddot":return"double dot over"+R(t,e.body);case"\\mathring":return"ring over"+R(t,e.body);case"\\tilde":case"\\widetilde":return"tilde over"+R(t,e.body);case"\\bar":return R(t,e.body)+" bar";case"\\breve":return R(t,e.body)+" breve";case"\\check":case"\\widecheck":return"check over "+R(t,e.body);case"\\hat":case"\\widehat":return"hat over"+R(t,e.body);case"\\overarc":case"\\overparen":case"\\wideparen":return"arc over "+R(t,e.body);case"\\underarc":case"\\underparen":return"arc under "+R(t,e.body);case"\\mathop":return(c=fn(e.body))!=null?c:R(t,e.body);case"\\mathit":return(h=fn(e.body))!=null?h:R(t,e.body);case"\\mathrm":return(d=fn(e.body))!=null?d:R(t,e.body);case"\\mathbb":return"blackboard"+((f=fn(e.body))!=null?f:R(t,e.body))}switch(e.type){case"prompt":let b=e.body.length>1?'start input . '+R(t,e.body)+'. end input':"blank";i+=' '+b+'. '+((S=e.correctness)!=null?S:"")+' . ';break;case"array":let M=e.rows,k=e.environmentName;if(k==="lines")for(let L=0;L0&&(i+=" line break ");let _=M[L].map(z=>R("text",z)).join("");i+=_||" blank "}else if(Object.keys(_o).includes(k)){i+=` begin ${_o[k]} `;for(let L=0;L0&&(i+=","),i+=` row ${L+1} `;for(let _=0;_0&&(i+=","),i+=` column ${_+1}: `,i+=R("math",M[L][_])}i+=` end ${_o[k]} `}break;case"group":l==="\\ne"?i+=" not equal ":(l==="\\not"&&(i+=" not "),i+=R("math",e.body));break;case"root":i+=R("math",e.body);break;case"genfrac":if(n=R("math",e.above),o=R("math",e.below),Kr(e.above)&&Kr(e.below)){let _={"1/2":" half ","1/3":" one third ","2/3":" two third","1/4":" one quarter ","3/4":" three quarter ","1/5":" one fifth ","2/5":" two fifths ","3/5":" three fifths ","4/5":" four fifths ","1/6":" one sixth ","5/6":" five sixths ","1/8":" one eight ","3/8":" three eights ","5/8":" five eights ","7/8":" seven eights ","1/9":" one ninth ","2/9":" two ninths ","4/9":" four ninths ","5/9":" five ninths ","7/9":" seven ninths ","8/9":" eight ninths "}[yl(e.above)+"/"+yl(e.below)];_?i=_:i+=n+" over "+o}else i+=' the fraction '+n+' over '+o+'. End fraction.';break;case"surd":if(a=R("math",e.body),e.hasEmptyBranch("above"))i+=Kr(e.body)?" the square root of "+a+" , ":' the square root of '+a+'. End square root';else{let L=R("math",e.above);L=L.trim();let _=L.replace(//g,"");_==="3"?i+=' the cube root of '+a+'. End cube root':_==="n"?i+=' the nth root of '+a+'. End root':i+=' the root with index: '+L+', of '+a+'. End root'}break;case"leftright":{let L=e;i+=(x=L.leftDelim?wr[L.leftDelim]:void 0)!=null?x:L.leftDelim,i+=R("math",e.body),i+=(w=L.rightDelim?wr[L.rightDelim]:void 0)!=null?w:L.rightDelim}break;case"rule":break;case"overunder":break;case"overlap":break;case"macro":let T=l.replace(/^\\/g,""),q=Zi()[T];q!=null&&q.expand?i+=R("math",e.body):i+=`${T} `;break;case"placeholder":i+="placeholder ";break;case"delim":case"sizeddelim":case"mord":case"minner":case"mbin":case"mrel":case"mpunct":case"mopen":case"mclose":{if(l==="\\mathbin"||l==="\\mathrel"||l==="\\mathopen"||l==="\\mathclose"||l==="\\mathpunct"||l==="\\mathord"||l==="\\mathinner"){i=R(t,e.body);break}let L=e.isDigit()?e.asDigit():e.value,_=e.command;if((e.type==="delim"||e.type==="sizeddelim")&&(_=e.value,L=_),t==="text")i+=L;else{if(e.type==="mbin"&&(i+=''),L){let z=wr[L]||(_?wr[_.trim()]:"");if(z)i+=" "+z;else{let ee=_?Rc(_.trim()):"";i+=ee||r(L)}}else i+=R("math",e.body);e.type==="mbin"&&(i+='')}break}case"mop":case"operator":case"extensible-symbol":if(e.value!=="\u200B"){let L=e.command;if(L==="\\sum")if(!e.hasEmptyBranch("superscript")&&!e.hasEmptyBranch("subscript")){let _=R("math",e.superscript);_=_.trim();let z=R("math",e.subscript);z=z.trim(),i+=' the summation from '+z+' to '+_+' of ',s=!0}else if(e.hasEmptyBranch("subscript"))i+=" the summation of";else{let _=R("math",e.subscript);_=_.trim(),i+=' the summation from '+_+' of ',s=!0}else if(L==="\\prod")if(!e.hasEmptyBranch("superscript")&&!e.hasEmptyBranch("subscript")){let _=R("math",e.superscript);_=_.trim();let z=R("math",e.subscript);z=z.trim(),i+=' the product from '+z+' to '+_+' of ',s=!0}else if(e.hasEmptyBranch("subscript"))i+=" the product of ";else{let _=R("math",e.subscript);_=_.trim(),i+=' the product from '+_+' of ',s=!0}else if(L==="\\int")if(!e.hasEmptyBranch("superscript")&&!e.hasEmptyBranch("subscript")){let _=R("math",e.superscript);_=_.trim();let z=R("math",e.subscript);z=z.trim(),i+=' the integral from '+Co(z)+' to '+Co(_)+' of ',s=!0}else i+=' the integral of ';else if(L==="\\operatorname"||L==="\\operatorname*")i+=Pc(e.body)+" ";else if(typeof e.value=="string"){let _=(D=wr[e.value])!=null?D:e.command?wr[e.command]:void 0;i+=_||" "+e.value}else e.command&&(e.command==="\\mathop"?i+=R("math",e.body):i+=e.command.startsWith("\\")?" "+e.command.slice(1):" "+e.command)}break;case"enclose":a=R("math",e.body),i+=" crossed out "+a+". End crossed out.";break;case"space":case"spacing":break}if(!s&&!e.hasEmptyBranch("superscript")){let b=R(t,e.superscript);b=b.trim();let M=b.replace(/<[^>]*>/g,"");if(Kr(e.superscript)){if(t==="math"){let k=Fc(e.superscript);k&&(i+='')}M==="\u2032"?i+=" prime ":M==="2"?i+=" squared ":M==="3"?i+=" cubed ":Number.isNaN(Number.parseInt(M))?i+=" to the "+b+"; ":i+=' to the '+M+" power; "}else Number.isNaN(Number.parseInt(M))?i+=" raised to the "+b+"; ":i+=' raised to the '+M+" power; "}if(!s&&!e.hasEmptyBranch("subscript")){let b=R("math",e.subscript);b=b.trim(),i+=Kr(e.subscript)?" sub "+b:" subscript "+b+". End subscript. "}return i}function bl(t){var i,n;let e=globalThis.MathfieldElement;if(e.textToSpeechRules==="sre"&&("sre"in window||"SRE"in window)){let o=O(t);if(o){e.textToSpeechMarkup&&(e.textToSpeechRulesOptions=(i=e.textToSpeechRulesOptions)!=null?i:{},e.textToSpeechRulesOptions=u(m({},e.textToSpeechRulesOptions),{markup:e.textToSpeechMarkup}),e.textToSpeechRulesOptions.markup==="ssml"&&(e.textToSpeechRulesOptions=u(m({},e.textToSpeechRulesOptions),{markup:"ssml_step"})),e.textToSpeechRulesOptions=u(m({},e.textToSpeechRulesOptions),{rate:e.speechEngineRate}));let a=(n=window.SRE)!=null?n:globalThis.sre.System.getInstance();e.textToSpeechRulesOptions&&a.setupEngine(e.textToSpeechRulesOptions);let s="";try{s=a.toSpeech(o)}catch(l){console.error("MathLive {{SDK_VERSION}}: `SRE.toSpeech()` runtime error",l)}return s}return""}let r=R("math",t);if(e.textToSpeechMarkup==="ssml"){let o="";e.speechEngineRate&&(o=''),r=''+o+"

"+r+"

"+(o?"
":"")+""}else e.textToSpeechMarkup==="mac"&&F0()==="macos"?r=r.replace(//g,"").replace(//g,"[[emph+]]").replace(/<\/emphasis>/g,"").replace(//g,"[[slc $1]]").replace(/]*>/g,"").replace(/<\/say-as>/g,""):r=r.replace(/<[^>]*>/g,"").replace(/\s{2,}/g," ");return r}var rt={"\\ne":"\u2260","\\neq":"\u2260","\u2212":"-","-":"-","\\alpha":"alpha","\\beta":"beta","\\gamma":"gamma","\\delta":"delta","\\epsilon":"epsilon","\\varepsilon":"varepsilon","\\zeta":"zeta","\\eta":"eta","\\theta":"theta","\\vartheta":"vartheta","\\iota":"iota","\\kappa":"kappa","\\lambda":"lambda","\\mu":"mu","\\nu":"nu","\\xi":"xi","\\pi":"pi","\\rho":"rho","\\sigma":"sigma","\\tau":"tau","\\upsilon":"upsilon","\\phi":"phi","\\varphi":"varphi","\\chi":"chi","\\psi":"psi","\\omega":"omega","\\Gamma":"Gamma","\\Delta":"Delta","\\Theta":"Theta","\\Lambda":"Lambda","\\Xi":"Xi","\\Pi":"Pi","\\Sigma":"Sigma","\\Phi":"Phi","\\Psi":"Psi","\\Omega":"Omega","\\exponentialE":"e","\\imaginaryI":"i","\\imaginaryJ":"j","\\!":" ","\\,":" ","\\:":" ","\\>":" ","\\;":" ","\\enskip":" ","\\enspace":" ","\\qquad":" ","\\quad":" ","\\infty":"oo","\\R":"RR","\\mathbb{R}":"RR","\\N":"NN","\\mathbb{N}":"NN","\\Z":"ZZ","\\mathbb{Z}":"ZZ","\\Q":"QQ","\\mathbb{Q}":"QQ","\\C":"CC","\\mathbb{C}":"CC","\\emptyset":"O/","\\varnothing":"O/","\\varDelta":"Delta","\\varTheta":"Theta","\\varLambda":"Lambda","\\varXi":"Xi","\\varPi":"Pi","\\varSigma":"Sigma","\\varUpsilon":"Upsilon","\\varPhi":"Phi","\\varPsi":"Psi","\\varOmega":"Omega"},Yr={"\\pm":"+-","\\colon":" : ","\\sum":" sum ","\\prod":" prod ","\\bigcap":" nnn ","\\bigcup":" uuu ","\\int":" int ","\\oint":" oint ","\\ge":">=","\\le":"<=","\\ne":"!=","\\neq":"!=","\\lt":"<","\\gt":">","\\gets":"<-","\\to":"->","\\land":" and ","\\lor":" or ","\\lnot":" not ","\\forall":" AA ","\\exists":" EE ","\\in":" in ","\\notin":" !in ","\\mapsto":"|->","\\implies":"=>","\\iff":"<=>","\\cdot":" * ","\\ast":" ** ","\\star":" *** ","\\times":" * ","\\div":" -: ","\\ltimes":" |>< ","\\rtimes":" ><| ","\\bowtie":" |><| ","\\circ":"@"},gn={"\\vert":"|","\\Vert":"||","\\mid":"|","\\lbrack":"[","\\rbrack":"]","\\lbrace":"{","\\rbrace":"}","\\lparen":"(","\\rparen":")","\\langle":"(:","\\rangle":":)"};function qc(t){let e="";for(let r of t){let i=e[e.length-1];i!==void 0&&(/\d$/.test(i)&&/^\d/.test(r)||/[a-zA-Z]$/.test(i)&&/^[a-zA-Z]/.test(r))&&(e+=" "),e+=r}return e}function Z(t,e){var a,s,l,c,h,d,f,S,x,w,D,b,M,k,T,q,L,_,z,ee,de,ye;if(!t)return"";if(ve(t)){if(t.length===0)return"";let X=0;for(;((a=t[X])==null?void 0:a.type)==="first";)X+=1;if(X>0)return Z(t.slice(X),e);if(t[0].mode==="latex")return t.map(V=>Z(V)).join("");if(te(t[0].mode)){let V=0,K="";for(;((s=t[V])==null?void 0:s.type)!=="first"&&te((c=(l=t[V])==null?void 0:l.mode)!=null?c:"");)K+=t[V].body?Z(t[V].body,e):t[V].value,V++;return e!=null&&e.plain?K+Z(t.slice(V),e):`"${K}" ${Z(t.slice(V))}`}let ae=0,E=[];for(;((h=t[ae])==null?void 0:h.mode)==="math";){let V="";for(;((d=t[ae])==null?void 0:d.type)==="mord"&&/\d/.test(t[ae].value);)V+=t[ae++].value;V?E.push(V):E.push(Z(t[ae++],e))}return E.push(Z(t.slice(ae),e)),qc(E)}if(te(t.mode))return e!=null&&e.plain?t.value:`"${t.value}"`;let r="",{command:i}=t,n;if(i==="\\placeholder")return`(${Z(t.body,e)})`;let o=p.serialize([t],{expandMacro:!1,defaultMode:"math"});switch(t.type){case"accent":let X={"\\vec":"vec","\\dot":"dot","\\ddot":"ddot","\\bar":"bar","\\hat":"hat","\\acute":"acute;","\\grave":"grave","\\tilde":"tilde","\\breve":"breave","\\check":"check"}[i];r=`${X!=null?X:""} ${Z(t.body,e)} `;break;case"first":return"";case"latexgroup":return t.body.map(E=>E.value).join("");case"group":case"root":r=(f=rt[i])!=null?f:Z(t.body,e);break;case"genfrac":{let E=t;(E.leftDelim||E.rightDelim)&&(r=E.leftDelim==="."||!E.leftDelim?"{:":E.leftDelim),E.hasBarLine?(r+="(",r+=Z(E.above,e),r+=")/(",r+=Z(E.below,e),r+=")"):(r+="((",r+=Z(E.above,e),r+=") choose (",r+=Z(E.below,e),r+="))"),(E.leftDelim||E.rightDelim)&&(r+=E.rightDelim==="."||!E.rightDelim?"{:":E.rightDelim)}break;case"surd":t.hasEmptyBranch("above")?r+=`sqrt(${Z(t.body,e)})`:r+=`root(${Z(t.above,e)})(${Z(t.body,e)})`;break;case"latex":r=t.value;break;case"leftright":{let E=t,V=E.leftDelim;V&&gn[V]&&(V=gn[V]),r+=V==="."||!V?"{:":V,r+=Z(E.body,e);let K=E.matchingRightDelim();K&&gn[K]&&(K=gn[K]),r+=K==="."||!K?":}":K}break;case"sizeddelim":case"delim":r=t.value;break;case"overlap":break;case"overunder":break;case"mord":if(rt[o])return rt[o];r=(w=(x=(S=rt[i])!=null?S:i)!=null?x:i)!=null?w:typeof t.value=="string"?t.value:"",r.startsWith("\\")&&(r+=" "),n=i?i.match(/{?\\char"([\dabcdefABCDEF]+)}?/):null,n?r=String.fromCodePoint(Number.parseInt("0x"+n[1])):r.length>0&&r.startsWith("\\")&&(r=typeof t.value=="string"?t.value.charAt(0):t.command),r=Ic(r,t.style);break;case"mbin":case"mrel":case"minner":r=(M=(b=(D=rt[o])!=null?D:rt[i])!=null?b:Yr[i])!=null?M:t.value;break;case"mopen":case"mclose":r=t.value;break;case"mpunct":r=(k=Yr[i])!=null?k:i;break;case"mop":case"operator":case"extensible-symbol":t.value!=="\u200B"&&(Yr[i]?r=Yr[i]:r=i==="\\operatorname"?Z(t.body,e):(T=t.value)!=null?T:i,r+=" ");break;case"array":let ae=t.environmentName;if(t.isMultiline)r=t.rows.map(V=>V.map(K=>Z((K!=null?K:[]).filter(Je=>Je.type!=="first"),e)).join("")).join(` +`);else{let E=(q={bmatrix:["[","]"],"bmatrix*":["[","]"]}[ae])!=null?q:["(",")"],V=[],K=t.rows;for(let Dt of K){let ut=[];for(let j of Dt)ut.push(Z(j,e));V.push(E[0]+ut.join(",")+E[1])}let Je=(L={bmatrix:["[","]"],"bmatrix*":["[","]"],cases:["{",":}"]}[ae])!=null?L:["(",")"];r=Je[0]+V.join(",")+Je[1]}break;case"box":break;case"spacing":r=(z=(_=rt[o])!=null?_:rt[i])!=null?z:" ";break;case"enclose":r="("+Z(t.body,e)+")";break;case"space":r=" ";break;case"subsup":r="";break;case"macro":r=(ye=(de=(ee=rt[o])!=null?ee:rt[i])!=null?de:Yr[i])!=null?ye:Z(t.body,e);break}if(!t.hasEmptyBranch("subscript")){r+="_";let X=Z(t.subscript,e);r+=X.length!==1?`(${X})`:X}if(!t.hasEmptyBranch("superscript")){r+="^";let X=Z(t.superscript,e);r+=X.length!==1?`(${X})`:X}return r}function Ic(t,e){if(!e)return t;let r=t;return e.variant==="double-struck"&&(r=`bbb "${r}"`),e.variant==="script"&&(r=`cc "${r}"`),e.variant==="fraktur"&&(r=`fr "${r}"`),e.variant==="sans-serif"&&(r=`sf "${r}"`),e.variant==="monospace"&&(r=`tt "${r}"`),e.variantStyle==="bold"&&(r=`bb "${r}"`),e.color?`color({${e.color}})(${r})`:r}function Nc(t,e){if(!e)return"";if(typeof e=="string")return e;if(!t||e.after===void 0)return e.value;let r=!1,i=!1,n=!1,o=!1,a=!1,s=!1,l=!1,c=!1,h=!1,d=!1,f=!1,S=!1,x=!1,w=!1,D=!1,b=t[0],M=0;for(;b!=null&&b.type&&/^(subsup|placeholder)$/.test(b.type);)M+=1,b=t[M];return r=!b||b.type==="first",b&&(w=b.mode==="text",i=!w&&b.type==="mord"&&Gi.test(b.value),n=!w&&b.type==="mord"&&/\d+$/.test(b.value),o=!w&&b.isFunction,a=b.type==="genfrac",s=b.type==="surd",l=b.type==="mbin",c=b.type==="mrel",h=b.type==="mop"||b.type==="operator"||b.type==="extensible-symbol",d=b.type==="mpunct"||b.type==="minner",f=b.type==="array",S=b.type==="mopen",x=b.type==="mclose"||b.type==="leftright",D=b.type==="space"),e.after.includes("nothing")&&r||e.after.includes("letter")&&i||e.after.includes("digit")&&n||e.after.includes("function")&&o||e.after.includes("frac")&&a||e.after.includes("surd")&&s||e.after.includes("binop")&&l||e.after.includes("relop")&&c||e.after.includes("operator")&&h||e.after.includes("punct")&&d||e.after.includes("array")&&f||e.after.includes("openfence")&&S||e.after.includes("closefence")&&x||e.after.includes("text")&&w||e.after.includes("space")&&D?e.value:""}function Lo(t,e,r){return r?Nc(t,r[e]):""}var xl={"&":"\\&","%":"\\%",$:"\\$","''":"^{\\doubleprime}","'''":"^{\\prime\\prime\\prime}","''''":"^{\\prime\\prime\\prime\\prime}",alpha:"\\alpha",delta:"\\delta",Delta:"\\Delta",pi:"\\pi",Pi:"\\Pi",theta:"\\theta",Theta:"\\Theta",ii:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\imaginaryI"},jj:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\imaginaryJ"},ee:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\exponentialE"},nabla:"\\nabla",grad:"\\nabla",del:"\\partial",deg:{after:"digit+space",value:"\\degree"},infty:"\\infty","\u221E":"\\infty",oo:{after:"nothing+digit+frac+surd+binop+relop+punct+array+openfence+closefence+space",value:"\\infty"},"\u2211":"\\sum",sum:"\\sum_{#?}^{#?}",int:"\\int_{#?}^{#?}",prod:"\\prod_{#?}^{#?}",sqrt:"\\sqrt{#?}","\u2206":"\\differentialD","\u2202":"\\differentialD",sin:"\\sin",cos:"\\cos",tan:"\\tan",arccos:"\\arccos",arcsin:"\\arcsin",arctan:"\\arctan",arctg:"\\operatorname{arctg}",arcsec:"\\operatorname{arcsec}",arccsc:"\\operatorname{arccsc}",arsinh:"\\operatorname{arsinh}",arccosh:"\\operatorname{arccosh}",arcosh:"\\operatorname{arcosh}",artanh:"\\operatorname{artanh}",arctanh:"\\operatorname{arctanh}",arcsech:"\\operatorname{arcsech}",arccsch:"\\operatorname{arccsch}",ch:"\\operatorname{ch}",cosec:"\\operatorname{cosec}",cosh:"\\cosh",cot:"\\cot",cotg:"\\operatorname{cotg}",coth:"\\coth",csc:"\\csc",ctg:"\\operatorname{ctg}",cth:"\\operatorname{cth}",sec:"\\sec",sech:"\\operatorname{sech}",sinh:"\\sinh",sh:"\\operatorname{sh}",tanh:"\\tanh",tg:"\\operatorname{tg}",th:"\\operatorname{th}",arg:"\\arg",lg:"\\lg",lb:"\\operatorname{lb}",log:"\\log_{#?}",ln:"\\ln",exp:"\\exp",lim:"\\lim_{#?\\to#?}",dx:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\differentialD x"},dy:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\differentialD y"},dt:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\differentialD t"},AA:"\\forall",EE:"\\exists","!EE":"\\nexists","&&":"\\land",xin:{after:"nothing+text+relop+punct+openfence+space",value:"x \\in"},sint:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\sin t"},in:{after:"nothing+letter+closefence",value:"\\in"},"!in":"\\notin",NN:"\\mathbb{N}",ZZ:"\\mathbb{Z}",QQ:"\\mathbb{Q}",RR:"\\mathbb{R}",CC:"\\mathbb{C}",xx:"\\times","+-":"\\pm","\u2260":"\\ne","!=":"\\ne","\u2265":"\\ge",">=":"\\ge","\u2264":"\\le","<=":"\\le","<<":"\\ll",">>":"\\gg","~~":"\\approx","\u2248":"\\approx","?=":"\\questeq","\xF7":"\\div","\xAC":"\\neg",":=":"\\coloneq","::":"\\Colon","(:":"\\langle",":)":"\\rangle",beta:"\\beta",chi:"\\chi",epsilon:"\\epsilon",varepsilon:"\\varepsilon",eta:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\eta"},gamma:"\\gamma",Gamma:"\\Gamma",iota:"\\iota",kappa:"\\kappa",lambda:"\\lambda",Lambda:"\\Lambda",mu:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\mu"},nu:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\nu"},\u00B5:"\\mu",phi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\phi"},Phi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\Phi"},varphi:"\\varphi",psi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\psi"},Psi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\Psi"},rho:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\rho"},sigma:"\\sigma",Sigma:"\\Sigma",tau:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\tau"},vartheta:"\\vartheta",upsilon:"\\upsilon",xi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space",value:"\\xi"},Xi:{after:"nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text",value:"\\Xi"},zeta:"\\zeta",omega:"\\omega",Omega:"\\Omega",\u03A9:"\\omega",forall:"\\forall",exists:"\\exists","!exists":"\\nexists",":.":"\\therefore",liminf:"\\liminf_{#?}",limsup:"\\limsup_{#?}",argmin:"\\operatorname*{arg~min}_{#?}",argmax:"\\operatorname*{arg~max}_{#?}",det:"\\det",mod:"\\bmod{#?}","(mod":"\\pmod{#?}",max:"\\max",min:"\\min",erf:"\\operatorname{erf}",erfc:"\\operatorname{erfc}",bessel:"\\operatorname{bessel}",mean:"\\operatorname{mean}",median:"\\operatorname{median}",fft:"\\operatorname{fft}",lcm:"\\operatorname{lcm}",gcd:"\\gcd",randomReal:"\\operatorname{randomReal}",randomInteger:"\\operatorname{randomInteger}",Re:"\\operatorname{Re}",Im:"\\operatorname{Im}",mm:{after:"nothing+digit+operator",value:"\\operatorname{mm}"},cm:{after:"nothing+digit+operator",value:"\\operatorname{cm}"},km:{after:"nothing+digit+operator",value:"\\operatorname{km}"},kg:{after:"nothing+digit+operator",value:"\\operatorname{kg}"},ft:{after:"nothing+digit+operator",value:"\\operatorname{ft}"},inch:{after:"nothing+digit+operator",value:"\\operatorname{inch}"},mi:{after:"nothing+digit+operator",value:"\\operatorname{mi}"},"...":"\\ldots","+...":"+\\cdots","-...":"-\\cdots","->...":"\\to\\cdots","-->...":"\\longrightarrow\\cdots","->":"\\to","|->":"\\mapsto","-->":"\\longrightarrow","<--":"\\longleftarrow","=>":"\\Rightarrow","==>":"\\Longrightarrow","<=>":"\\iff","<->":"\\leftrightarrow","(.)":"\\odot","(+)":"\\oplus","(/)":"\\oslash","(*)":"\\otimes","(-)":"\\ominus","||":"\\Vert","*":"\\cdot","**":"\\star","***":"\\ast","//":"\\slash","\\\\":"\\backslash",setminus:"\\backslash","|><":"\\ltimes","><|":"\\rtimes","|><|":"\\bowtie","-:":"\\div",divide:"\\div","@":"\\circ","^^":"\\wedge","^^^":"\\bigwedge",vv:"\\vee",vvv:"\\bigvee",nn:"\\cap",nnn:"\\bigcap",uu:"\\cup",uuu:"\\bigcup","-=":"\\equiv","~=":"\\cong",lt:"<","lt=":"\\leq",gt:">","gt=":"\\geq","-<":"\\prec","-lt":"\\prec","-<=":"\\preceq",">-=":"\\succeq",prop:"\\propto",diamond:"\\diamond",square:"\\square",iff:"\\iff",sub:"\\subset",sup:"\\supset",sube:"\\subseteq",supe:"\\supseteq",uarr:"\\uparrow",darr:"\\downarrow",rarr:"\\rightarrow",rArr:"\\Rightarrow",larr:"\\leftarrow",lArr:"\\Leftarrow",harr:"\\leftrightarrow",hArr:"\\Leftrightarrow",aleph:"\\aleph",and:"\\land",or:"\\lor",not:"\\neg","_|_":"\\bot",TT:"\\top","|--":"\\vdash","|==":"\\models","|__":"\\lfloor","__|":"\\rfloor","|~":"\\lceil","~|":"\\rceil",">->":"\\rightarrowtail","->>":"\\twoheadrightarrow",">->>":"\\twoheadrightarrowtail",times:"\\times",of:"\\circ",infinity:"\\infty",defint:"\\int_{#?}^{#?}",approaches:"\\to",ceil:"\\left\\lceil#?\\right\\rceil",floor:"\\left\\lfloor#?\\right\\rfloor",union:"\\cup",asterisk:"\\ast",frac:"\\frac{#?}{#?}",cbrt:"\\sqrt[3]{#?}",nthroot:"\\sqrt[#?]{#?}"};function wl(t,e){var i;let r=(i=e==null?void 0:e.format)!=null?i:"auto";return r==="auto"&&([r,t]=Hc(t)),r==="ascii-math"?(t=t.replace(/\u2061/gu,""),t=t.replace(/\u3016/gu,"{"),t=t.replace(/\u3017/gu,"}"),t=t.replace(/([^\\])sinx/g,"$1\\sin x"),t=t.replace(/([^\\])cosx/g,"$1\\cos x "),t=t.replace(/\u2013/g,"-"),["ascii-math",we(t,{inlineShortcuts:e==null?void 0:e.inlineShortcuts})]):["latex",t]}function we(t,e){var a;if(t=t.trim(),!t)return"";let r=(a=e.inlineShortcuts)!=null?a:xl;if(t.startsWith("^")||t.startsWith("_")){let{match:s,rest:l}=jt(t.slice(1),{inlineShortcuts:r,noWrap:!0});return`${t[0]}{${s}}${we(l,e)}`}let i=t.match(/^(sqrt|\u221A)(.*)/);if(i){let{match:s,rest:l}=jt(i[2],{inlineShortcuts:r,noWrap:!0});return`\\sqrt{${s!=null?s:"\\placeholder{}"}}${we(l,e)}`}if(i=t.match(/^(\\cbrt|\u221B)(.*)/),i){let{match:s,rest:l}=jt(i[2],{inlineShortcuts:r,noWrap:!0});return`\\sqrt[3]{${s!=null?s:"\\placeholder{}"}}${we(l,e)}`}if(i=t.match(/^abs(.*)/),i){let{match:s,rest:l}=jt(i[1],{inlineShortcuts:r,noWrap:!0});return`\\left|${s!=null?s:"\\placeholder{}"}\\right|${we(l,e)}`}if(i=t.match(/^["”“](.*?)["”“](.*)/),i)return`\\text{${i[1]}}${we(i[2],e)}`;if(i=t.match(/^([^a-zA-Z0-9\(\{\[\_\^\\\s"]+)(.*)/),i)return`${Sl(i[1],r)}${we(i[2],e)}`;if(/^([fgh])[^a-zA-Z]/.test(t)){let{rest:s,match:l}=jt(t.slice(1),{inlineShortcuts:r,noWrap:!0}),c="";return t[1]==="("?c=`${t[0]}\\left(${l}\\right)`:c=t[0]+l,c+we(s,e)}if(i=t.match(/^([a-zA-Z]+)(.*)/),i)return Sl(i[1],r)+we(i[2],e);let{match:n,rest:o}=jt(t,{inlineShortcuts:r,noWrap:!0});if(n&&o[0]==="/"){let s=jt(o.slice(1),{inlineShortcuts:r,noWrap:!0});if(s.match)return`\\frac{${n}}{${s.match}}${we(s.rest,e)}`}else return t.startsWith("(")?"\\left("+n+"\\right)"+we(o,e):n+we(o,e);return i=t.match(/^(\s+)(.*)$/),i?" "+we(i[2],e):t}var vl={"[":"\\lbrack","]":"\\rbrack","{":"\\lbrace","}":"\\rbrace"};function jt(t,e){var a,s;let r="";t=t.trim();let i=t,n=t.charAt(0),o={"(":")","{":"}","[":"]"}[n];if(o){let l=1,c=1;for(;c0;)t[c]===n&&l++,t[c]===o&&l--,c++;if(l===0){let h=we(t.substring(1,c-1),e);e.noWrap&&n==="("?r=h:r=`\\left${(a=vl[n])!=null?a:n}${h}\\right${(s=vl[o])!=null?s:o}`,i=t.slice(Math.max(0,c))}else r=t.substring(1,c),i=""}else{let l=t.match(/^([a-zA-Z]+)/);if(l){let c=Lo(null,t,e.inlineShortcuts);if(c)return c=c.replace("_{#?}",""),c=c.replace("^{#?}",""),{match:c,rest:t.slice(c.length)}}if(l=t.match(/^([a-zA-Z])/),l)return{match:l[1],rest:t.slice(1)};if(l=t.match(/^(-)?\d+(\.\d*)?/),l)return{match:l[0],rest:t.slice(l[0].length)};/^\\(left|right)/.test(t)||(l=t.match(/^(\\[a-zA-Z]+)/),l&&(i=t.slice(l[1].length),r=l[1]))}return{match:r,rest:i}}function Sl(t,e){let r=Lo(null,t,e);return r?(r=r.replace("_{#?}",""),r=r.replace("^{#?}",""),r+=" "):r=t,r}var Vc=[["\\[","\\]"],["\\(","\\)"],["$$","$$"],["$","$"],["\\begin{math}","\\end{math}"],["\\begin{displaymath}","\\end{displaymath}"],["\\begin{equation}","\\end{equation}"],["\\begin{equation*}","\\end{equation*}"]];function Jc(t){let e=t.trim();for(let r of Vc)if(e.startsWith(r[0])&&e.endsWith(r[1]))return[!0,e.substring(r[0].length,e.length-r[1].length)];return[!1,t]}function Hc(t){if(t=t.trim(),t.length<=1)return["latex",t];let e;return[e,t]=Jc(t),e?["latex",t]:t.startsWith("`")&&t.endsWith("`")?(t=t.substring(1,t.length-1),["ascii-math",t]):t.includes("\\")?["latex",t]:/\$.+\$/.test(t)?["latex",`\\text{${t}}`]:[void 0,t]}var yn={main:["Main-Regular","ML__cmr"],"main-italic":["Main-Italic","ML__cmr ML__it"],"main-bold":["Main-Bold","ML__cmr ML__bold"],"main-bolditalic":["Main-BoldItalic","ML__cmr ML__bold ML__it"],normal:["Main-Regular","ML__cmr"],"normal-bold":["Main-Bold","ML__mathbf"],"normal-italic":["Math-Italic","ML__mathit"],"normal-bolditalic":["Math-BoldItalic","ML__mathbfit"],roman:["Main-Regular","ML__cmr"],"roman-bold":["Main-Bold","ML__mathbf"],"roman-italic":["Math-Italic","ML__mathit"],"roman-bolditalic":["Math-BoldItalic","ML__mathbfit"],ams:["AMS-Regular","ML__ams"],"ams-bold":["AMS-Regular","ML__ams ML__bold"],"ams-italic":["AMS-Regular","ML__ams ML__it"],"ams-bolditalic":["AMS-Regular","ML__ams ML__bold ML__it"],"sans-serif":["SansSerif-Regular","ML__sans"],"sans-serif-bold":["SansSerif-Regular","ML__sans ML__bold"],"sans-serif-italic":["SansSerif-Regular","ML__sans ML__it"],"sans-serif-bolditalic":["SansSerif-Regular","ML__sans ML__bold ML__it"],calligraphic:["Caligraphic-Regular","ML__cal"],"calligraphic-bold":["Caligraphic-Regular","ML__cal ML__bold"],"calligraphic-italic":["Caligraphic-Regular","ML__cal ML__it"],"calligraphic-bolditalic":["Caligraphic-Regular","ML__cal ML__bold ML__it"],script:["Script-Regular","ML__script"],"script-bold":["Script-Regular","ML__script ML__bold"],"script-italic":["Script-Regular","ML__script ML__it"],"script-bolditalic":["Script-Regular","ML__script ML__bold ML__it"],fraktur:["Fraktur-Regular","ML__frak"],"fraktur-bold":["Fraktur-Regular","ML__frak ML__bold"],"fraktur-italic":["Fraktur-Regular","ML__frak ML__it"],"fraktur-bolditalic":["Fraktur-Regular","ML__frak ML__bold ML__it"],monospace:["Typewriter-Regular","ML__tt"],"monospace-bold":["Typewriter-Regular","ML__tt ML__bold"],"monospace-italic":["Typewriter-Regular","ML__tt ML__it"],"monospace-bolditalic":["Typewriter-Regular","ML__tt ML__bold ML__it"],"double-struck":["AMS-Regular","ML__bb"],"double-struck-bold":["AMS-Regular","ML__bb ML__bold"],"double-struck-italic":["AMS-Regular","ML__bb ML_italic"],"double-struck-bolditalic":["AMS-Regular","ML__bb ML_bolditalic"]},Ml={"double-struck":/^[A-Z ]$/,script:/^[A-Z ]$/,calligraphic:/^[\dA-Z ]$/,fraktur:/^[\dA-Za-z ]$|^[!"#$%&'()*+,\-./:;=?[]^’‘]$/,monospace:/^[\dA-Za-z ]$|^[!"&'()*+,\-./:;=?@[\]^_~\u0131\u0237\u0393\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A8\u03A9]$/,"sans-serif":/^[\dA-Za-z ]$|^[!"&'()*+,\-./:;=?@[\]^_~\u0131\u0237\u0393\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A8\u03A9]$/},Al=/^[\u03B1-\u03C9]|\u03D1|\u03D5|\u03D6|\u03F1|\u03F5]$/,Gc=/^[\u0393|\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A6\u03A8\u03A9]$/,Wc=[/^[a-z]$/,/^[A-Z]$/,Al,Gc],Uc={iso:["it","it","it","it"],tex:["it","it","it","up"],french:["it","up","up","up"],upright:["up","up","up","up"]},To=class extends Q{constructor(){super("math"),Q._registry["free-math"]=this}createAtom(e,r,i){var a,s,l,c,h,d;if(r===null)return new p({type:"mord",mode:"math",command:e,value:e,style:i});let n;try{n=(l=(s=globalThis.MathfieldElement)==null?void 0:s.isFunction((a=r.command)!=null?a:e))!=null?l:!1}catch(f){n=!1}if(r.definitionType==="symbol"){let f=new p({type:(c=r.type)!=null?c:"mord",mode:"math",command:(h=r.command)!=null?h:e,value:String.fromCodePoint(r.codepoint),isFunction:n,style:i});return e.startsWith("\\")&&(f.verbatimLatex=e),f}let o=new p({type:"mord",mode:"math",command:(d=r.command)!=null?d:e,value:e,isFunction:n,style:i});return e.startsWith("\\")&&(o.verbatimLatex=e),o}serialize(e,r){let i=Zc(e,u(m({},r),{defaultMode:"math"}));return i.length===0||!te(r.defaultMode)?i:["$ ",...i," $"]}getFont(e,r){var l,c,h;if(r.variant,r.fontFamily){let d=r.fontFamily;r.fontSeries==="b"&&r.fontShape==="it"?d+="-bolditalic":r.fontSeries==="b"?d+="-bold":r.fontShape==="it"&&(d+="-italic");let f=(l=yn[d])!=null?l:yn[r.fontFamily];if(!f)return console.error(`Unknown font family variant: ${d}`),null;let[S,x]=f;return x&&(e.classes+=" "+x),S}let{variant:i}=r,{variantStyle:n}=r;if(i==="normal"&&!n&&/[\u00A3\u0131\u0237]/.test(e.value)&&(i="main",n="italic"),i==="normal"&&!n&&e.value.length===1){let d=!1;Wc.forEach((f,S)=>{var x;f.test(e.value)&&Uc[(x=r.letterShapeStyle)!=null?x:"tex"][S]==="it"&&(d=!0)}),d&&(n=hl(n))}n==="up"&&(n=void 0);let o=n?i+"-"+n:i;yn[o];let[a,s]=yn[o];if(Ml[i]&&!Ml[i].test(e.value)){let d=Or(e.value,i,n);return d||(d=(c=Or(e.value,i))!=null?c:e.value,e.classes+=(h={bold:" ML__bold",italic:" ML__it","bold-italic":" ML__bold ML__it"}[n!=null?n:""])!=null?h:""),e.value=d,null}return Al.test(e.value)&&(e.classes+=" lcGreek"),s&&(e.classes+=" "+s),a}};function Zc(t,e){return Be(t,"bold").map(r=>{if(Ki(r[0])!=="bold")return B(bn(r,e));if(Ki(r[0].parent)==="bold")return B(bn(r,e));let n=B(r.map(o=>{var a;return(a=o.value)!=null?a:""}));return/^[a-zA-Z0-9]+$/.test(n)?F("\\mathbf",B(bn(r,e))):F("\\bm",B(bn(r,e)))})}function bn(t,e){let{parent:r}=t[0],i=Yi(r);return Be(t,"variant").map(n=>{let o=Yi(n[0]),a="";o&&o!==i&&(a={calligraphic:"\\mathcal","calligraphic-uo":"\\mathcal",fraktur:"\\mathfrak","fraktur-uo":"\\mathfrak","double-struck":"\\mathbb","double-struck-uo":"\\mathbb",script:"\\mathscr","script-uo":"\\mathscr",monospace:"\\mathtt","monospace-uo":"\\mathtt","sans-serif":"\\mathsf","sans-serif-uo":"\\mathsf",normal:"","normal-up":"\\mathrm","normal-italic":"\\mathnormal","normal-bold":"","normal-bolditalic":"\\mathbfit",ams:"","ams-up":"\\mathrm","ams-italic":"\\mathit","ams-bold":"","ams-bolditalic":"\\mathbfit",main:"","main-up":"\\mathrm","main-italic":"\\mathit","main-bold":"","main-bolditalic":"\\mathbfit"}[o]);let s="",l=n[n.length-1],c=a&&n.length>0&&(l.branch("subscript")!==void 0||l.branch("superscript")!==void 0);c&&(s=l.supsubToLatex(e));let h=B(n.map((d,f)=>{if(c&&f===n.length-1){let S=G(d.command,d.mode);return S!=null&&S.serialize?S.serialize(d,e):d.body&&d.command?F(d.command,d.bodyToLatex(e)):d.body?d.bodyToLatex(e):!d.value||d.value==="\u200B"?"":d.command||d.value}return d._serialize(e)}));return a?F(a,h)+s:h})}new To;function jc(t,e){return t.map(r=>r._serialize(e))}function Xc(t,e){return Be(t,"fontShape").map(r=>{let i=jc(r,e),{fontShape:n}=r[0].style,o="";return n==="it"&&(o="\\textit"),n==="sl"&&(o="\\textsl"),n==="sc"&&(o="\\textsc"),n==="n"&&(o="\\textup"),!o&&n?`{${F("\\fontshape",n)}${B(i)}}`:o?F(o,B(i)):B(i)})}function Kc(t,e){return Be(t,"fontSeries").map(r=>{let i=Xc(r,e),{fontSeries:n}=r[0].style,o="";return n==="b"&&(o="\\textbf"),n==="l"&&(o="\\textlf"),n==="m"&&(o="\\textmd"),n&&!o?`{${F("\\fontseries",n)}${B(i)}}`:o?F(o,B(i)):B(i)})}function Yc(t,e){return Be(t,"fontSize").map(r=>{var o,a;let i=Kc(r,e),n=(a=["","\\tiny","\\scriptsize","\\footnotesize","\\small","\\normalsize","\\large","\\Large","\\LARGE","\\huge","\\Huge"][(o=r[0].style.fontSize)!=null?o:""])!=null?a:"";return n?`${n} ${B(i)}`:B(i)})}function Qc(t,e,r){return Be(t,"textDecoration").map(i=>{let n=em(i,e,r),o=i[0].style.textDecoration;if(!o||o==="none")return B(n);let a=B(n);return o.includes("underline")&&(a=`\\underline{${a}}`),o.includes("line-through")&&(a=`\\enclose{horizontalstrike}{${a}}`),a})}function em(t,e,r){return Be(t,"fontFamily").map(i=>{var s;r=r&&!i.every(l=>l.style.fontFamily||l.style.fontShape||l.style.fontSeries||l.style.fontSize);let n=Yc(i,e),{fontFamily:o}=i[0].style,a=(s={roman:"textrm",monospace:"texttt","sans-serif":"textsf"}[o!=null?o:""])!=null?s:"";return a?`\\${a}{${B(n)}}`:o?`{\\fontfamily{${i[0].style.fontFamily}} ${B(n)}}`:r?`\\text{${B(n)}}`:B(n)})}var kl={roman:"","sans-serif":"ML__sans",monospace:"ML__tt"},Bo=class extends Q{constructor(){super("text"),Q._registry["free-text"]=this}createAtom(e,r,i){return r&&r.definitionType==="symbol"?new ct(e,String.fromCodePoint(r.codepoint),i!=null?i:{}):null}serialize(e,r){return Qc(e,u(m({},r),{defaultMode:"text"}),r.defaultMode!=="text"&&r.defaultMode!=="free-text")}getFont(e,r){var n,o,a,s,l;let{fontFamily:i}=r;if(kl[i]?e.classes+=" "+kl[i]:i&&e.setStyle("font-family",i),r.fontShape&&(e.classes+=" ",e.classes+=(n={it:"ML__it",sl:"ML__shape_sl",sc:"ML__shape_sc",ol:"ML__shape_ol"}[r.fontShape])!=null?n:""),r.fontSeries){let c=r.fontSeries.match(/(.?[lbm])?(.?[cx])?/);c&&(e.classes+=" ",e.classes+=(a={ul:"ML__series_ul",el:"ML__series_el",l:"ML__series_l",sl:"ML__series_sl",m:"",sb:"ML__series_sb",b:"ML__bold",eb:"ML__series_eb",ub:"ML__series_ub"}[(o=c[1])!=null?o:""])!=null?a:"",e.classes+=" ",e.classes+=(l={uc:"ML__series_uc",ec:"ML__series_ec",c:"ML__series_c",sc:"ML__series_sc",n:"",sx:"ML__series_sx",x:"ML__series_x",ex:"ML__series_ex",ux:"ML__series_ux"}[(s=c[2])!=null?s:""])!=null?l:"")}return r.textDecoration&&r.textDecoration!=="none"&&(r.textDecoration.includes("underline")&&(e.classes+=" ML__underline"),r.textDecoration.includes("line-through")&&(e.classes+=" ML__line-through")),"Main-Regular"}};new Bo;var Do=class extends Q{constructor(){super("latex")}createAtom(e){return new Bt(e)}serialize(e,r){return e.filter(i=>i instanceof Bt&&!i.isSuggestion).map(i=>i.value)}getFont(){return null}};new Do;function A2(t,e){var h;let r=u(m({},Gr()),{renderPlaceholder:()=>new y(160,{maxFontSize:1})});if(e!=null&&e.letterShapeStyle&&(e==null?void 0:e.letterShapeStyle)!=="auto"&&(r.letterShapeStyle=e.letterShapeStyle),e!=null&&e.macros){let d=qr(e==null?void 0:e.macros);r.getMacro=f=>Ir(f,d)}e!=null&&e.registers&&(r.registers=m(m({},r.registers),e.registers));let i=(h=e==null?void 0:e.defaultMode)!=null?h:"math",n="math",o="displaystyle";i==="inline-math"?o="textstyle":i==="math"?o="displaystyle":(i==="text"||i==="free-text")&&(o="textstyle",n="text");let a=new $({from:r}),l=new p({type:"root",mode:n,body:mt(t,{context:a,parseMode:n,mathstyle:o})}).render(a);return l?(en(dn(l,a)),j0(l,{classes:"ML__latex"}).toMarkup()):""}function k2(t,e){let r=m({},Gr());if(e!=null&&e.macros){let i=qr(e.macros);r.getMacro=n=>Ir(n,i)}return ul(t,{context:r})}function _2(t,e={}){return O(mt(t,{parseMode:"math",args:()=>"",mathstyle:"displaystyle"}),e)}function C2(t){let e=mt(t,{parseMode:"math",mathstyle:"displaystyle"});return bl(e)}var Qr;function L2(t){var e,r;if(!Qr){let i=(e=globalThis[Symbol.for("io.cortexjs.compute-engine")])==null?void 0:e.ComputeEngine;i?Qr=new i:console.error(`MathLive {{SDK_VERSION}}: The CortexJS Compute Engine library is not available. + + Load the library, for example with: + + import "https://esm.run/@cortex-js/compute-engine"`)}return(r=Qr==null?void 0:Qr.box(t).latex)!=null?r:""}function T2(t,e="math"){return Z(new p({type:"root",body:mt(t,{parseMode:e})}))}function B2(t){return wl(t,{format:"ascii-math"})[1]}export{B2 as convertAsciiMathToLatex,T2 as convertLatexToAsciiMath,A2 as convertLatexToMarkup,_2 as convertLatexToMathMl,C2 as convertLatexToSpeakableText,L2 as convertMathJsonToLatex,k2 as validateLatex}; +//# sourceMappingURL=mathlive-ssr.min.mjs.map diff --git a/dist/mathlive-ssr.min.mjs.map b/dist/mathlive-ssr.min.mjs.map new file mode 100644 index 000000000..e235c8578 --- /dev/null +++ b/dist/mathlive-ssr.min.mjs.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/core/math-environment.ts", "../src/public/core-types.ts", "../src/core/font-metrics-data.ts", "../src/core/font-metrics.ts", "../src/common/types.ts", "../src/core/svg-box.ts", "../src/core/color.ts", "../src/ui/utils/capabilities.ts", "../src/core/unicode.ts", "../src/latex-commands/definitions-utils.ts", "../src/core/grapheme-splitter.ts", "../src/core/tokenizer.ts", "../src/core/modes-utils.ts", "../src/core/box.ts", "../src/core/v-box.ts", "../src/core/mathstyle.ts", "../src/core/registers-utils.ts", "../src/editor/l10n-strings.ts", "../src/core/l10n.ts", "../src/core/registers.ts", "../src/core/context-utils.ts", "../src/core/context.ts", "../src/core/atom-class.ts", "../src/atoms/accent.ts", "../src/core/delimiters.ts", "../src/atoms/overunder.ts", "../src/latex-commands/accents.ts", "../src/atoms/enclose.ts", "../src/latex-commands/enclose.ts", "../src/atoms/placeholder.ts", "../src/latex-commands/environment-types.ts", "../src/atoms/array.ts", "../src/latex-commands/environments.ts", "../src/latex-commands/extensible-symbols.ts", "../src/atoms/extensible-symbol.ts", "../src/atoms/surd.ts", "../src/atoms/genfrac.ts", "../src/atoms/delim.ts", "../src/atoms/operator.ts", "../src/latex-commands/functions.ts", "../src/atoms/error.ts", "../src/atoms/group.ts", "../src/atoms/leftright.ts", "../src/atoms/macro.ts", "../src/atoms/prompt.ts", "../src/atoms/subsup.ts", "../src/atoms/text.ts", "../src/core/parser.ts", "../src/latex-commands/mhchem.ts", "../src/atoms/box.ts", "../src/atoms/phantom.ts", "../src/atoms/spacing.ts", "../src/atoms/overlap.ts", "../src/atoms/composition.ts", "../src/atoms/latex.ts", "../src/core/atom.ts", "../src/core/skip-box.ts", "../src/core/inter-box-spacing.ts", "../src/atoms/tooltip.ts", "../src/editor-model/styling.ts", "../src/latex-commands/styling.ts", "../src/latex-commands/symbols.ts", "../src/formats/atom-to-math-ml.ts", "../src/formats/atom-to-speakable-text.ts", "../src/formats/atom-to-ascii-math.ts", "../src/editor/shortcuts.ts", "../src/editor/shortcuts-definitions.ts", "../src/formats/parse-math-string.ts", "../src/core/modes-math.ts", "../src/core/modes-text.ts", "../src/core/modes-latex.ts", "../src/public/mathlive-ssr.ts"], + "sourceRoot": "../src", + "mappings": "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", + "names": ["_MathEnvironment", "isTextMode", "mode", "M1", "M2", "M3", "M4", "M5", "M6", "M7", "M8", "M9", "M10", "M11", "M12", "M13", "M14", "M15", "M16", "M17", "M18", "M19", "M20", "M21", "M22", "M23", "M24", "M25", "M26", "M27", "M28", "M29", "M30", "M31", "M32", "M33", "M34", "M35", "M36", "M37", "M38", "M39", "M40", "M41", "M42", "M43", "M44", "M45", "M46", "M47", "M48", "M49", "M50", "M51", "M52", "M53", "M54", "M55", "M56", "M57", "M58", "M59", "M60", "M61", "M62", "M63", "M64", "M65", "M66", "M67", "M68", "M69", "M70", "M71", "M72", "M73", "M74", "M75", "M76", "M77", "M78", "M79", "M80", "M81", "M82", "M83", "M84", "M85", "M86", "M87", "M88", "M89", "M90", "M91", "M92", "M93", "M94", "M95", "M96", "M97", "M98", "M99", "M100", "M101", "M102", "M103", "M104", "M105", "M106", "M107", "M108", "M109", "M110", "M111", "M112", "M113", "M114", "M115", "M116", "M117", "M118", "M119", "M120", "M121", "M122", "M123", "M124", "M125", "M126", "M127", "M128", "M129", "M130", "M131", "M132", "M133", "M134", "M135", "M136", "M137", "M138", "M139", "M140", "M141", "M142", "M143", "M144", "M145", "M146", "M147", "M148", "M149", "M150", "M151", "M152", "M153", "M154", "M155", "M156", "M157", "M158", "M159", "M160", "M161", "M162", "M163", "M164", "M165", "M166", "M167", "M168", "M169", "M170", "M171", "M172", "M173", "M174", "M175", "M176", "M177", "M178", "M179", "M180", "M181", "M182", "M183", "M184", "M185", "M186", "M187", "M188", "M189", "M190", "M191", "M192", "M193", "M194", "M195", "M196", "M197", "M198", "M199", "M200", "M201", "M202", "M203", "M204", "M205", "M206", "M207", "M208", "M209", "M210", "M211", "M212", "M213", "M214", "M215", "M216", "M217", "M218", "M219", "M220", "M221", "M222", "M223", "M224", "M225", "M226", "M227", "M228", "M229", "M230", "M231", "M232", "M233", "M234", "M235", "M236", "M237", "M238", "M239", "M240", "M241", "M242", "M243", "M244", "M245", "M246", "M247", "M248", "M249", "M250", "M251", "M252", "M253", "M254", "M255", "M256", "M257", "M258", "M259", "M260", "M261", "M262", "M263", "M264", "M265", "M266", "M267", "M268", "M269", "M270", "M271", "M272", "M273", "M274", "M275", "M276", "M277", "M278", "M279", "M280", "M281", "M282", "M283", "M284", "M285", "M286", "M287", "M288", "M289", "M290", "font_metrics_data_default", "CJK_REGEX", "PT_PER_EM", "AXIS_HEIGHT", "BASELINE_SKIP", "X_HEIGHT", "FONT_METRICS", "FONT_SCALE", "DEFAULT_FONT_SIZE", "EXTRA_CHARACTER_MAP", "getCharacterMetrics", "codepoint", "fontName", "metrics", "font_metrics_data_default", "char", "isArray", "x", "SVG_BODY", "SVG_ACCENTS", "PATHS", "svgBodyToMarkup", "svgBodyName", "vbWidth", "vbHeight", "height", "result", "paths", "minWidth", "viewBoxHeight", "align", "widthClasses", "aligns", "body", "path", "i", "svgBodyHeight", "MATHEMATICA_COLORS", "MATLAB_COLORS", "BACKGROUND_COLORS", "FOREGROUND_COLORS", "DVIPS_TO_CHROMATIC", "DVIPS_COLORS", "defaultColorMap", "s", "_a", "_b", "_c", "_d", "_e", "_f", "colorSpec", "baseRed", "baseGreen", "baseBlue", "red", "green", "blue", "mix", "complementary", "i", "colorName", "lcColorName", "color", "m", "r1", "g1", "b1", "defaultBackgroundColorMap", "parseHex", "hex", "result", "hueToRgbChannel", "t1", "t2", "hue", "hslToRgb", "hsl", "sat", "light", "clampByte", "v", "rgbToHexstring", "rgb", "r", "g", "b", "hexString", "rgbToHsl", "min", "max", "delta", "h", "l", "highlight", "isBrowser", "osPlatform", "_a", "_b", "isBrowser", "platform", "supportRegexPropertyEscape", "m", "UNICODE_TO_LATEX", "MATH_LETTER_EXCEPTIONS", "MATH_UNICODE_BLOCKS", "mathVariantToUnicode", "char", "variant", "style", "codepoint", "block", "result", "unicodeToMathVariant", "_a", "c", "codePointToLatex", "latex", "argAtoms", "arg", "MATH_SYMBOLS", "REVERSE_MATH_SYMBOLS", "__spreadValues", "UNICODE_TO_LATEX", "LATEX_COMMANDS", "ENVIRONMENTS", "TEXVC_MACROS", "AMSMATH_MACROS", "BRAKET_MACROS", "DEFAULT_MACROS", "TEXT_SYMBOLS", "LETTER", "LETTER_AND_DIGITS", "supportRegexPropertyEscape", "defineSymbol", "symbol", "codepoint", "type", "variant", "MATH_SYMBOLS", "REVERSE_MATH_SYMBOLS", "defineSymbols", "value", "inType", "inVariant", "ch", "val", "defineSymbolRange", "from", "to", "i", "getEnvironmentDefinition", "name", "_a", "ENVIRONMENTS", "parseParameterTemplateArgument", "argTemplate", "type", "parseParameterTemplate", "parameterTemplate", "result", "parameters", "parseArgAsString", "atoms", "success", "atom", "defineTabularEnvironment", "names", "parameters", "createAtom", "data", "parseParameterTemplate", "name", "ENVIRONMENTS", "defineRootEnvironment", "options", "_a", "def", "defineFunction", "_b", "LATEX_COMMANDS", "_DEFAULT_MACROS", "getMacros", "otherMacros", "normalizeMacroDictionary", "DEFAULT_MACROS", "__spreadValues", "normalizeMacroDefinition", "_c", "_d", "argCount", "defString", "macros", "result", "macro", "macroDef", "packageMacro", "getDefinition", "token", "parseMode", "info", "MATH_SYMBOLS", "TEXT_SYMBOLS", "command", "charToLatex", "__spreadProps", "getMacroDefinition", "codepoint", "REVERSE_MATH_SYMBOLS", "textSymbol", "x", "stringToCodepoints", "string", "result", "i", "code", "nextCode", "lead", "trail", "ZWJ", "EMOJI_COMBINATOR", "emojiCombinator", "REGIONAL_INDICATOR", "isEmojiCombinator", "_a", "x", "isRegionalIndicator", "splitGraphemes", "codePoints", "index", "next", "baseIndex", "Tokenizer", "s", "splitGraphemes", "regEx", "execResult", "next", "command", "hex", "isParameter", "after", "expand", "lex", "args", "_a", "_b", "_c", "_d", "result", "token", "x", "done", "tokens", "parameter", "tokenize", "lines", "sep", "line", "m", "tokenizer", "joinLatex", "segments", "segment", "latexCommand", "tokensToString", "_Mode", "name", "mode", "command", "style", "getDefinition", "atoms", "options", "_a", "body", "run", "getModeRuns", "joinLatex", "emitFontSizeRun", "box", "Mode", "result", "currentMode", "atom", "weightString", "variantString", "getPropertyRuns", "property", "currentValue", "value", "emitColorRun", "parent", "parentColor", "modeRun", "colorRun", "__spreadProps", "__spreadValues", "isTextMode", "latexCommand", "emitBackgroundColorRun", "x", "contextFontsize", "sizeRun", "fontsize", "boxType", "type", "atomsBoxType", "atoms", "first", "last", "toString", "arg1", "arg2", "numValue", "Box", "_Box", "content", "options", "_a", "_b", "_c", "_d", "_e", "isArray", "x", "child", "fontName", "Mode", "__spreadProps", "__spreadValues", "horizontalLayout", "id", "isSelected", "prop", "value", "unit", "v", "top", "_value", "context", "parent", "color", "backgroundColor", "highlight", "scale", "body", "escapeText", "box", "svgMarkup", "svgBodyToMarkup", "padding", "props", "classes", "classList", "e", "a", "sanitizeAttributeValue", "sanitizeAttributeName", "entries", "entry", "matched", "key", "url", "cssProps", "styles", "result", "hasChildren", "boxHasChildren", "thisStyleCount", "boxStyleCount", "boxClasses", "i", "class_", "coalesceRecursive", "boxes", "coalesce", "makeStruts", "topStrut", "struts", "bottomStrut", "makeSVGBox", "svgBodyName", "height", "svgBodyHeight", "metrics", "getCharacterMetrics", "depth", "maxFontSize", "acc", "s", "attribute", "getVListChildrenAndDepth", "params", "oldChildren", "prevChild", "children", "depth", "currPos", "i", "child", "diff", "size", "bottom", "firstChild", "makeRows", "_a", "pstrut", "Box", "pstrutSize", "box", "realChildren", "minPos", "maxPos", "width", "classes", "childWrap", "vlist", "depthStrut", "topStrut", "VBox", "content", "options", "rows", "height", "acc", "row", "makeLimitsStack", "context", "_b", "_c", "_d", "_e", "metrics", "base", "baseShift", "slant", "aboveShift", "belowShift", "result", "D", "Dc", "T", "Tc", "S", "Sc", "SS", "SSc", "Mathstyle", "id", "sizeDelta", "cramped", "metricsIndex", "FONT_METRICS", "acc", "x", "__spreadProps", "__spreadValues", "size", "MATHSTYLES", "NUMERIC_MATHSTYLES", "convertDimensionToPt", "value", "precision", "_a", "f", "PT_PER_EM", "factor", "convertDimensionToEm", "result", "serializeDimension", "value", "_a", "serializeGlue", "result", "serializeLatexValue", "value", "_a", "_b", "result", "serializeGlue", "i", "multiplyLatexValue", "factor", "__spreadProps", "__spreadValues", "STRINGS", "l10n", "STRINGS", "isBrowser", "value", "e", "locale", "strings", "__spreadValues", "l", "val", "x", "callback", "id", "root", "elements", "element", "key", "localized", "localize", "params", "result", "language", "regex", "match", "index", "parameterIndex", "repl", "DEFAULT_REGISTERS", "getDefaultRegisters", "__spreadValues", "getDefaultContext", "getDefaultRegisters", "l10n", "defaultColorMap", "defaultBackgroundColorMap", "token", "getMacroDefinition", "getMacros", "Context", "_Context", "options", "style", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "template", "__spreadValues", "getDefaultContext", "DEFAULT_FONT_SIZE", "mathstyle", "MATHSTYLES", "x", "result", "value", "D", "Dc", "FONT_SCALE", "name", "val", "precision", "convertDimensionToEm", "context", "factor", "__spreadProps", "number", "m", "dimen", "convertDimensionToPt", "PT_PER_EM", "NAMED_BRANCHES", "isNamedBranch", "branch", "isCellBranch", "Atom", "_Atom", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "__spreadValues", "context", "atoms", "runs", "getStyleRuns", "boxes", "run", "style", "box", "renderStyleRun", "classes", "Box", "value", "Mode", "a", "b", "parents", "parent", "json", "result", "argumentsToJson", "x", "dirty", "def", "getDefinition", "joinLatex", "latexCommand", "defaultMode", "__spreadProps", "sub", "sup", "atom", "name", "child", "children", "newBranch", "before", "after", "branchName", "_first", "rest", "index", "siblings", "parentContext", "Context", "base", "superscript", "subscript", "supBox", "subBox", "isCharacterBox", "supShift", "subShift", "minSupShift", "scriptspace", "PT_PER_EM", "supsub", "ruleWidth", "psi", "slant", "VBox", "X_HEIGHT", "ctx", "above", "below", "makeLimitsStack", "type", "boxType", "isTextMode", "atomStyle", "displaySelection", "digitOrTextStringID", "lastWasDigit", "isText", "args", "arg", "AccentAtom", "_AccentAtom", "Atom", "options", "_a", "__spreadProps", "__spreadValues", "json", "parentContext", "context", "Context", "base", "Box", "skew", "clearance", "X_HEIGHT", "accentBox", "makeSVGBox", "accent", "correctionClass", "accentMargin", "VBox", "result", "RIGHT_DELIM", "LEFT_DELIM", "leftDelim", "rightDelim", "getSymbolValue", "symbol", "_a", "makeSmallDelim", "delim", "context", "center", "options", "box", "Box", "AXIS_HEIGHT", "makeLargeDelim", "size", "parentContext", "_b", "Context", "result", "makeStackedDelim", "heightTotal", "top", "middle", "repeat", "bottom", "fontFamily", "topMetrics", "getCharacterMetrics", "topHeightTotal", "repeatMetrics", "repeatHeightTotal", "bottomMetrics", "bottomHeightTotal", "middleHeightTotal", "middleFactor", "middleMetrics", "minHeight", "repeatCount", "realHeightTotal", "axisHeight", "depth", "OVERLAP", "stack", "repeatBox", "i", "sizeClass", "inner", "VBox", "__spreadProps", "__spreadValues", "stackLargeDelimiters", "stackAlwaysDelimiters", "stackNeverDelimiters", "sizeToMaxHeight", "makeSizedDelim", "makeNullDelimiter", "stackNeverDelimiterSequence", "stackAlwaysDelimiterSequence", "stackLargeDelimiterSequence", "delimTypeToFont", "info", "traverseSequence", "height", "sequence", "start", "metrics", "heightDepth", "FONT_SCALE", "makeCustomSizedDelim", "type", "delimType", "ctx", "makeLeftRightDelim", "delimiterFactor", "delimiterExtend", "PT_PER_EM", "maxDistFromAxis", "totalHeight", "parent", "classes", "OverunderAtom", "_OverunderAtom", "Atom", "options", "_a", "_b", "_c", "_d", "json", "parentContext", "body", "makeSVGBox", "annotationContext", "Context", "above", "below", "Box", "makeNullDelimiter", "base", "makeOverunderStack", "context", "box", "aboveShift", "result", "baseShift", "classes", "bottom", "VBox", "ACCENTS", "defineFunction", "options", "AccentAtom", "__spreadProps", "__spreadValues", "argAtoms", "baseString", "parseArgAsString", "OverunderAtom", "body", "accent", "atomsBoxType", "_a", "Atom", "_b", "escapeSvgAttr", "s", "EncloseAtom", "_EncloseAtom", "Atom", "command", "body", "notation", "options", "_a", "_b", "json", "__spreadProps", "__spreadValues", "def", "getDefinition", "style", "sep", "latexCommand", "parentContext", "_c", "_d", "_e", "context", "Context", "base", "borderWidth", "borderDim", "padding", "Box", "h", "w", "svg", "margin", "y", "X_HEIGHT", "x", "f", "wf", "hf", "wDelta", "clearance", "getClearance", "bot", "angleWidth", "surdWidth", "getRuleThickness", "svgStyle", "result", "x1", "y1", "x2", "y2", "coord", "c", "m", "ctx", "phi", "defineFunction", "atomOptions", "_a", "_b", "args", "options", "styles", "shorthand", "attribute", "notation", "v", "x", "EncloseAtom", "argAtoms", "PlaceholderAtom", "_PlaceholderAtom", "Atom", "options", "_a", "json", "context", "result", "matrices", "isMatrixEnvironment", "environment", "matrices", "freeTextRowDirection", "atoms", "atom", "isTextMode", "makeFreeTextCellBox", "context", "runs", "atomIsText", "current", "boxes", "run", "box", "Atom", "Box", "normalizeCells", "cells", "options", "maxColCount", "colSpec", "colCount", "rows", "row", "colIndex", "newRow", "lastCol", "normalizeCell", "isEmptyCell", "result", "i", "PlaceholderAtom", "rowIndex", "cell", "element", "isEmptyMultilineCell", "makeEmptyLineAnchor", "metrics", "marker", "idSource", "caretAtom", "mode", "x", "ArrayAtom", "_ArrayAtom", "env", "envName", "array", "rowGaps", "_a", "_b", "_c", "_d", "columns", "json", "__spreadProps", "__spreadValues", "col", "isCellBranch", "name", "isNamedBranch", "_first", "children", "_e", "_f", "_g", "_h", "innerContext", "Context", "arrayRuleWidth", "arrayColSep", "doubleRuleSep", "arraystretch", "arraycolsep", "arrayskip", "BASELINE_SKIP", "arstrutHeight", "arstrutDepth", "totalHeight", "body", "isFreeText", "nc", "nr", "r", "inrow", "cellContext", "height", "depth", "outrow", "elt", "gap", "convertDimensionToEm", "isMatrixEnvironment", "offset", "AXIS_HEIGHT", "contentCols", "stack", "direction", "VBox", "cols", "previousColContent", "previousColRule", "currentContentCol", "firstColumn", "colFormat", "colDesc", "makeColGap", "makeColOfRepeatingElements", "separator", "inner", "innerHeight", "innerDepth", "base", "makeLeftRightDelim", "format", "joinLatex", "callback", "j", "column", "value", "adjustBranches", "makeEmptyCell", "deleted", "child", "parent", "withPlaceholder", "first", "placeholder", "makeColGap", "width", "result", "Box", "makeColOfRepeatingElements", "context", "rows", "offset", "element", "col", "row", "cell", "Atom", "VBox", "defineRootEnvironment", "makeEnvironment", "defineTabularEnvironment", "defineFunction", "parser", "lines", "line", "token", "rhs", "options", "ArrayAtom", "name", "array", "rowGaps", "args", "content", "maxMatrixCols", "colCount", "row", "columns", "i", "defaultColumns", "casesColumns", "maxCasesColumns", "defineFunction", "options", "_a", "OverunderAtom", "__spreadProps", "__spreadValues", "argAtoms", "_b", "_c", "_d", "_e", "atom", "ExtensibleSymbolAtom", "_ExtensibleSymbolAtom", "Atom", "symbol", "options", "__spreadProps", "__spreadValues", "json", "result", "context", "_a", "large", "base", "Box", "baseShift", "AXIS_HEIGHT", "slant", "limits", "def", "getDefinition", "joinLatex", "SurdAtom", "_SurdAtom", "Atom", "options", "_a", "__spreadProps", "__spreadValues", "json", "def", "getDefinition", "command", "body", "latexCommand", "result", "x", "context", "innerContext", "Context", "innerBox", "Box", "factor", "ruleWidth", "phi", "X_HEIGHT", "line", "lineClearance", "minDelimiterHeight", "delimContext", "delimBox", "makeCustomSizedDelim", "delimDepth", "bodyBox", "VBox", "indexBox", "indexStack", "GenfracAtom", "_GenfracAtom", "Atom", "above", "below", "options", "_a", "_b", "_c", "__spreadProps", "__spreadValues", "json", "result", "_MathEnvironment", "x", "context", "fracContext", "Context", "metrics", "numContext", "numerBox", "Box", "denomContext", "denomBox", "ruleThickness", "numerShift", "clearance", "denomShift", "classes", "numerDepth", "denomHeight", "frac", "candidateClearance", "VBox", "align", "fracLine", "numerLine", "AXIS_HEIGHT", "denomLine", "delimSize", "leftDelim", "makeCustomSizedDelim", "makeNullDelimiter", "rightDelim", "mfrac", "v", "MiddleDelimAtom", "_MiddleDelimAtom", "Atom", "options", "__spreadProps", "__spreadValues", "json", "_context", "Box", "def", "getDefinition", "latexCommand", "SizedDelimAtom", "_SizedDelimAtom", "context", "result", "makeSizedDelim", "OperatorAtom", "_OperatorAtom", "Atom", "symbol", "options", "__spreadProps", "__spreadValues", "json", "result", "context", "_a", "base", "Box", "limits", "def", "getDefinition", "joinLatex", "defineFunction", "options", "OperatorAtom", "__spreadProps", "__spreadValues", "Atom", "argAtoms", "atom", "context", "box", "caret", "deg", "Box", "SurdAtom", "genfracOptions", "command", "args", "GenfracAtom", "PlaceholderAtom", "numer", "denom", "latexCommand", "joinLatex", "leftDelim", "rightDelim", "_a", "_b", "ExtensibleSymbolAtom", "EXTENSIBLE_SYMBOLS", "symbol", "MiddleDelimAtom", "parent", "ctx", "Context", "classes", "arg", "serializeLatexValue", "x", "ErrorAtom", "_ErrorAtom", "Atom", "value", "json", "context", "result", "GroupAtom", "_GroupAtom", "Atom", "arg", "mode", "json", "context", "box", "options", "def", "getDefinition", "LeftRightAtom", "_LeftRightAtom", "Atom", "variant", "body", "options", "json", "_a", "result", "_b", "rightDelim", "joinLatex", "leftDelim", "RIGHT_DELIM", "parentContext", "context", "Context", "delimContext", "inner", "Box", "innerHeight", "innerDepth", "boxes", "makeLeftRightDelim", "upgradeMiddle", "classes", "delim", "tightSpacing", "sibling", "atom", "height", "depth", "i", "child", "MacroAtom", "_MacroAtom", "Atom", "macro", "options", "_a", "json", "style", "allowedStyle", "context", "result", "MacroArgumentAtom", "_MacroArgumentAtom", "_json", "_options", "_context", "PromptAtom", "_PromptAtom", "Atom", "placeholderId", "correctness", "locked", "body", "options", "_a", "json", "result", "x", "parentContext", "_b", "_c", "_d", "_e", "context", "Context", "fboxsep", "hPadding", "vPadding", "content", "placeholderMetrics", "atom", "PlaceholderAtom", "emptyHeight", "emptyDepth", "effectiveHeight", "effectiveDepth", "minInnerWidth", "base", "Box", "boxClasses", "box", "svg", "withSupSub", "bound", "value", "command", "latexCommand", "SubsupAtom", "_SubsupAtom", "Atom", "options", "result", "sub", "x", "sup", "json", "branch", "NAMED_BRANCHES", "context", "_a", "phantomCtx", "Context", "leftSibling", "base", "Box", "phantom", "TextAtom", "_TextAtom", "Atom", "command", "value", "style", "json", "context", "result", "_options", "_a", "charToLatex", "FREE_TEXT_TAB_MARKER", "isLiteral", "token", "Parser", "tokens", "context", "options", "_a", "_b", "_c", "_d", "Context", "_e", "_f", "current", "newContext", "__spreadValues", "err", "tokensToString", "value", "latex", "codePointToLatex", "tokenize", "input", "atom", "SubsupAtom", "pattern", "index", "info", "getDefinition", "peek", "placeHolderArg", "parseLatex", "PlaceholderAtom", "keyword", "savedIndex", "done", "hasKeyword", "result", "level", "isInteger", "negative", "radix", "digits", "number", "s", "register", "glue", "dimension", "unit", "dimen", "grow", "shrink", "literal", "mathstyle", "final", "envName", "def", "getEnvironmentDefinition", "args", "parameter", "arg", "array", "rowGaps", "row", "gap", "savedList", "infix", "infixInfo", "infixArgs", "prefix", "initialIndex", "body", "GroupAtom", "nestLevel", "LeftRightAtom", "ErrorAtom", "close", "leftDelim", "rightDelim", "target", "Atom", "argAtoms", "isLimits", "isNoLimits", "isDisplayLimits", "opAtom", "deferredArg", "i", "TextAtom", "Mode", "style", "type", "mode", "atoms", "argType", "bboxParameter", "list", "element", "m", "command", "id", "defaultValue", "defaultAsString", "defaultAtoms", "correctness", "locked", "PromptAtom", "cmd", "verbatimLatex", "joinLatex", "c", "savedMode", "saveStyle", "verbatim", "smartFence", "macro", "argCount", "MacroAtom", "isArray", "parser", "validateLatex", "ChemAtom", "_ChemAtom", "Atom", "command", "arg", "tex", "texify", "mhchemParser", "parseLatex", "json", "_latex", "__spreadProps", "__spreadValues", "context", "box", "_options", "defineFunction", "options", "_a", "input", "stateMachine", "state", "buffer", "lastInput", "watchdog", "output", "machine", "t", "iterateTransitions", "i", "matches", "task", "iA", "o", "a", "b", "iB", "m", "match", "begExcl", "begIncl", "endIncl", "endExcl", "beg2Excl", "beg2Incl", "end2Incl", "end2Excl", "combine", "_match", "pattern", "_findObserveGroups", "endChars", "braces", "e", "match1", "group2", "matchRet", "mm", "ret", "k", "n", "stateArray", "transitions", "p", "patternArray", "j", "tmp", "isAfterD", "c1", "c2", "c3", "c4", "hyphenFollows", "withSpace", "entityFollows", "rd", "rq", "p1", "md", "mq", "b5", "mrm", "isInner", "res", "cee", "inputi", "buf", "c", "d", "b6", "arrow", "BoxAtom", "_BoxAtom", "Atom", "options", "json", "__spreadProps", "__spreadValues", "parentContext", "_a", "_b", "_c", "_d", "base", "offset", "context", "Context", "padding", "box", "Box", "result", "joinLatex", "PhantomAtom", "_PhantomAtom", "Atom", "options", "_a", "_b", "_c", "_d", "__spreadProps", "__spreadValues", "json", "context", "phantom", "Context", "content", "fix", "Box", "box", "VBox", "SpacingAtom", "_SpacingAtom", "Atom", "options", "_a", "__spreadValues", "json", "context", "Box", "result", "spacingCls", "def", "getDefinition", "command", "serializeLatexValue", "OverlapAtom", "_OverlapAtom", "Atom", "options", "body", "__spreadProps", "__spreadValues", "json", "context", "inner", "Box", "CompositionAtom", "_CompositionAtom", "Atom", "value", "options", "_a", "json", "context", "result", "Box", "_options", "LatexAtom", "_LatexAtom", "Atom", "value", "options", "_a", "json", "result", "__spreadValues", "context", "Box", "LatexGroupAtom", "_LatexGroupAtom", "latex", "c", "_json", "box", "_options", "_b", "x", "fromJson", "json", "isArray", "x", "Atom", "__spreadValues", "branch", "NAMED_BRANCHES", "argumentsFromJson", "type", "result", "AccentAtom", "ArrayAtom", "BoxAtom", "ChemAtom", "CompositionAtom", "MiddleDelimAtom", "EncloseAtom", "ErrorAtom", "ExtensibleSymbolAtom", "GenfracAtom", "GroupAtom", "LatexAtom", "LatexGroupAtom", "LeftRightAtom", "MacroAtom", "MacroArgumentAtom", "OperatorAtom", "OverlapAtom", "OverunderAtom", "PlaceholderAtom", "PromptAtom", "PhantomAtom", "SizedDelimAtom", "SpacingAtom", "SubsupAtom", "SurdAtom", "TextAtom", "TooltipAtom", "arg", "SkipBox", "Box", "width", "addSkipBefore", "box", "siblings", "j", "INTER_BOX_SPACING", "INTER_BOX_TIGHT_SPACING", "adjustType", "boxes", "traverseBoxes", "prev", "cur", "applyInterBoxSpacing", "root", "context", "thin", "med", "thick", "_a", "_b", "_c", "prevType", "table", "hskip", "addSkipBefore", "f", "TooltipAtom", "_TooltipAtom", "Atom", "options", "json", "__spreadProps", "__spreadValues", "fromJson", "_a", "tooltip", "x", "context", "body", "tooltipContext", "Context", "DEFAULT_FONT_SIZE", "coalesce", "applyInterBoxSpacing", "Box", "box", "addItalic", "v", "removeItalic", "defineFunction", "options", "TooltipAtom", "__spreadProps", "__spreadValues", "argAtoms", "atom", "Atom", "context", "style", "_name", "args", "_a", "_b", "serializeLatexValue", "BoxAtom", "latexCommand", "arg", "body", "result", "bboxParameters", "ctx", "Context", "box", "joinLatex", "name", "removeItalic", "href", "DELIMITER_SIZES", "SizedDelimAtom", "SpacingAtom", "i", "d", "T", "Tc", "S", "Sc", "SS", "SSc", "base", "limits", "Box", "x", "value", "_c", "shift", "width", "height", "parentContext", "position", "inner", "ruleThickness", "line", "stack", "VBox", "OverunderAtom", "atomsBoxType", "_d", "PhantomAtom", "OverlapAtom", "isGroup", "type", "multiplyLatexValue", "defineSymbols", "defineSymbolRange", "defineFunction", "options", "SpacingAtom", "APPLY_FUNCTION", "INVISIBLE_TIMES", "xmlEscape", "string", "makeID", "id", "options", "scanIdentifier", "stream", "final", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "result", "mathML", "body", "atom", "variant", "variantStyle", "variantProp", "unicodeVariant", "mathVariantToUnicode", "parseSubsup", "SPECIAL_IDENTIFIERS", "toString", "lastType", "isSuperscriptAtom", "indexOfSuperscriptInNumber", "i", "done", "found", "base", "superscript", "toMathML", "subscript", "scanText", "savedIndex", "initial", "textStyle", "isTextMode", "attributes", "fontSeries", "fontShape", "textDecoration", "mathvariant", "scanNumber", "scanFence", "depth", "openIndex", "closeIndex", "index", "toMo", "scanOperator", "SPECIAL_OPERATORS", "atomToMathML", "op", "isUnit", "input", "Atom", "count", "atoms", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_t", "_u", "_v", "_w", "SVG_CODE_POINTS", "SPACING", "sep", "col", "row", "underscript", "overscript", "command", "SPECIAL_DELIMS", "SPECIAL_ACCENTS", "arrayAtom", "format", "genfracAtom", "leftrightAtom", "lDelim", "rDelim", "accentAtom", "overunderAtom", "val", "codepoint", "tag", "boxAtom", "encloseAtom", "notation", "PRONUNCIATION", "ENVIRONMENTS_NAMES", "getSpokenName", "latex", "result", "isAtomic", "atoms", "count", "isArray", "atom", "atomicID", "atomicValue", "atomsAsText", "atomsAsPotentialText", "x", "emph", "s", "atomsToSpeakableFragment", "mode", "_a", "isInDigitRun", "isInTextRun", "i", "isTextMode", "atomToSpeakableFragment", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "letter", "c", "numer", "denom", "body", "supsubHandled", "command", "input", "array", "environment", "line", "cell", "j", "commonFraction", "index", "index2", "delimAtom", "macroName", "macro", "getMacros", "atomValue", "latexValue", "value", "spokenName", "trimLatex", "sup", "sub", "sup2", "id", "atomToSpeakableText", "mfe", "mathML", "toMathML", "__spreadProps", "__spreadValues", "SRE", "e", "prosody", "osPlatform", "IDENTIFIERS", "OPERATORS", "FENCES", "joinAsciiMath", "xs", "result", "x", "last", "atomToAsciiMath", "atom", "options", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_i", "_j", "_k", "_l", "_m", "_n", "_o", "_p", "_q", "_r", "_s", "_t", "_u", "_v", "isArray", "first", "isTextMode", "i", "text", "digits", "command", "m", "latex", "Atom", "accent", "genfracAtom", "leftrightAtom", "lDelim", "rDelim", "asciiStyle", "environment", "line", "cell", "child", "rowDelim", "rows", "array", "row", "cells", "delim", "arg", "body", "style", "validateShortcut", "siblings", "shortcut", "nothing", "letter", "digit", "isFunction", "frac", "surd", "binop", "relop", "operator", "punct", "array", "openfence", "closefence", "text", "space", "sibling", "index", "LETTER", "getInlineShortcut", "context", "s", "shortcuts", "INLINE_SHORTCUTS", "parseMathString", "s", "options", "_a", "format", "inferFormat", "parseMathExpression", "inlineShortcuts", "INLINE_SHORTCUTS", "match", "rest", "parseMathArgument", "m", "paddedShortcut", "result", "m2", "FENCES", "_b", "lFence", "rFence", "level", "i", "body", "shortcut", "getInlineShortcut", "shortcuts", "MODE_SHIFT_COMMANDS", "trimModeShiftCommand", "trimmedString", "mode", "hasLatexModeShiftCommand", "VARIANTS", "VARIANT_REPERTOIRE", "GREEK_LOWERCASE", "GREEK_UPPERCASE", "LETTER_SHAPE_RANGES", "LETTER_SHAPE_MODIFIER", "MathMode", "Mode", "command", "info", "style", "_a", "_b", "_c", "_d", "_e", "_f", "Atom", "isFunction", "e", "result", "run", "options", "emitBoldRun", "__spreadProps", "__spreadValues", "isTextMode", "box", "variantKey", "variant", "fontName", "classes", "variantStyle", "italicize", "x", "i", "addItalic", "styledVariant", "v", "mathVariantToUnicode", "getPropertyRuns", "weightString", "joinLatex", "emitVariantRun", "value", "latexCommand", "parent", "contextVariant", "variantString", "trailingSupsub", "lastAtom", "hasTrailingSupsub", "arg", "atom", "index", "def", "getDefinition", "emitStringTextRun", "run", "options", "x", "emitFontShapeTextRun", "getPropertyRuns", "s", "fontShape", "command", "latexCommand", "joinLatex", "emitFontSeriesTextRun", "fontSeries", "emitSizeTextRun", "_a", "_b", "emitTextDecorationTextRun", "needsWrap", "body", "emitFontFamilyTextRun", "decoration", "result", "fontFamily", "TEXT_FONT_CLASS", "TextMode", "Mode", "info", "style", "TextAtom", "__spreadProps", "__spreadValues", "box", "_c", "_d", "_e", "m", "LatexMode", "Mode", "command", "LatexAtom", "run", "_options", "x", "convertLatexToMarkup", "text", "options", "_a", "from", "__spreadProps", "__spreadValues", "getDefaultContext", "Box", "macros", "normalizeMacroDictionary", "token", "getMacroDefinition", "defaultMode", "parseMode", "mathstyle", "effectiveContext", "Context", "box", "Atom", "parseLatex", "coalesce", "applyInterBoxSpacing", "makeStruts", "validateLatex", "s", "context", "convertLatexToMathMl", "latex", "toMathML", "convertLatexToSpeakableText", "atoms", "atomToSpeakableText", "gComputeEngine", "convertMathJsonToLatex", "json", "_b", "ComputeEngineCtor", "convertLatexToAsciiMath", "atomToAsciiMath", "convertAsciiMathToLatex", "ascii", "parseMathString"] +} diff --git a/dist/mathlive-static.css b/dist/mathlive-static.css new file mode 100644 index 000000000..6e872872c --- /dev/null +++ b/dist/mathlive-static.css @@ -0,0 +1,796 @@ +@font-face { + font-family: 'KaTeX_AMS'; + src: url('./fonts/KaTeX_AMS-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('./fonts/KaTeX_Caligraphic-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Caligraphic'; + src: url('./fonts/KaTeX_Caligraphic-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('./fonts/KaTeX_Fraktur-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Fraktur'; + src: url('./fonts/KaTeX_Fraktur-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Main'; + src: url('./fonts/KaTeX_Main-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url('./fonts/KaTeX_Math-BoldItalic.woff2') format('woff2'); + font-weight: bold; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Math'; + src: url('./fonts/KaTeX_Math-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Bold.woff2') format('woff2'); + font-weight: bold; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Italic.woff2') format('woff2'); + font-weight: normal; + font-style: italic; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_SansSerif'; + src: url('./fonts/KaTeX_SansSerif-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Script'; + src: url('./fonts/KaTeX_Script-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size1'; + src: url('./fonts/KaTeX_Size1-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size2'; + src: url('./fonts/KaTeX_Size2-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size3'; + src: url('./fonts/KaTeX_Size3-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Size4'; + src: url('./fonts/KaTeX_Size4-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +@font-face { + font-family: 'KaTeX_Typewriter'; + src: url('./fonts/KaTeX_Typewriter-Regular.woff2') format('woff2'); + font-weight: normal; + font-style: normal; + font-display: 'swap'; +} +:root { + --ML__static-fonts: true; +} +.ML__container { + min-height: auto !important; + --_hue: var(--hue, 212); + --_placeholder-color: var(--placeholder-color, hsl(var(--_hue), 40%, 49%)); + --_placeholder-opacity: var(--placeholder-opacity, 0.4); + --_text-font-family: var(--text-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif); +} +.ML__sr-only { + position: absolute; + width: 1px; + height: 1px; + margin: -1px; + padding: 0; + overflow: hidden; + clip: rect(0, 0, 0, 0); + clip-path: inset(50%); + white-space: nowrap; + border: 0; +} +.ML__is-inline { + display: inline-block; +} +.ML__base { + visibility: inherit; + display: inline-block; + position: relative; + cursor: text; + padding: 0; + margin: 0; + box-sizing: content-box; + border: 0; + outline: 0; + vertical-align: baseline; + font-weight: inherit; + font-family: inherit; + font-style: inherit; + text-decoration: none; + width: min-content; +} +.ML__strut, +.ML__strut--bottom { + display: inline-block; + min-height: 0.5em; +} +.ML__small-delim { + font-family: KaTeX_Main; +} +/* Text mode */ +.ML__text { + font-family: var(--_text-font-family); + white-space: pre; +} +.ML__text.ML__underline { + text-decoration: underline; +} +.ML__text.ML__line-through { + text-decoration: line-through; +} +/* Use cmr for 'math upright' */ +.ML__cmr { + font-family: KaTeX_Main; + font-style: normal; +} +.ML__mathit { + font-family: KaTeX_Math; + /* The KaTeX_Math font is italic by default, so the font-style below is only + useful when a fallback font is used + */ + font-style: italic; +} +.ML__mathbf { + font-family: KaTeX_Main; + font-weight: bold; +} +/* Lowercase greek symbols should stick to math font when \mathbf is applied + to match TeX idiosyncratic behavior */ +.lcGreek.ML__mathbf { + font-family: KaTeX_Math; +} +.ML__mathbfit { + font-family: KaTeX_Math; + font-weight: bold; + font-style: italic; +} +.ML__ams { + font-family: KaTeX_AMS; +} +/* Blackboard */ +.ML__bb { + font-family: KaTeX_AMS; +} +.ML__cal { + font-family: KaTeX_Caligraphic; +} +.ML__frak { + font-family: KaTeX_Fraktur; +} +.ML__tt { + font-family: KaTeX_Typewriter; +} +.ML__script { + font-family: KaTeX_Script; +} +.ML__sans { + font-family: KaTeX_SansSerif; +} +.ML__series_ul { + font-weight: 100; +} +.ML__series_el { + font-weight: 100; +} +.ML__series_l { + font-weight: 200; +} +.ML__series_sl { + font-weight: 300; +} +.ML__series_sb { + font-weight: 500; +} +.ML__bold { + font-weight: 700; +} +.ML__series_eb { + font-weight: 800; +} +.ML__series_ub { + font-weight: 900; +} +.ML__series_uc { + font-stretch: ultra-condensed; +} +.ML__series_ec { + font-stretch: extra-condensed; +} +.ML__series_c { + font-stretch: condensed; +} +.ML__series_sc { + font-stretch: semi-condensed; +} +.ML__series_sx { + font-stretch: semi-expanded; +} +.ML__series_x { + font-stretch: expanded; +} +.ML__series_ex { + font-stretch: extra-expanded; +} +.ML__series_ux { + font-stretch: ultra-expanded; +} +.ML__it { + font-style: italic; +} +.ML__shape_ol { + -webkit-text-stroke: 1px black; + text-stroke: 1px black; + color: transparent; +} +.ML__shape_sc { + font-variant: small-caps; +} +.ML__shape_sl { + font-style: oblique; +} +/* First level emphasis */ +.ML__emph { + color: #bc2612; +} +/* Second level emphasis */ +.ML__emph .ML__emph { + color: #0c7f99; +} +.ML__highlight { + color: #007cb2; + background: #edd1b0; +} +.ML__center { + text-align: center; +} +.ML__left { + text-align: left; +} +.ML__right { + text-align: right; +} +.ML__label_padding { + padding: 0 0.5em; +} +.ML__frac-line { + width: 100%; + min-height: 1px; +} +.ML__frac-line:after { + content: ''; + display: block; + margin-top: max(-1px, -0.04em); + min-height: max(1px, 0.04em); + /* Ensure the line is visible when printing even if "turn off background images" is on*/ + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + /* There's a bug since Chrome 62 where + sub-pixel border lines don't draw at some zoom + levels (110%, 90%). + Setting the min-height used to work around it, but that workaround + broke in Chrome 84 or so. + Setting the background (and the min-height) seems to work for now. + */ + background: currentColor; + box-sizing: content-box; + /* Vuetify sets the box-sizing to inherit + causes the fraction line to not draw at all sizes (see #26) */ + /* On some versions of Firefox on Windows, the line fails to + draw at some zoom levels, but setting the transform triggers + the hardware accelerated path, which works */ + transform: translate(0, 0); + forced-color-adjust: preserve-parent-color; +} +@media (forced-colors: active) { + .ML__frac-line { + min-height: 0px; + } +} +.ML__sqrt { + display: inline-block; +} +.ML__sqrt-sign { + display: inline-block; + position: relative; +} +.ML__sqrt-line { + display: inline-block; + height: max(1px, 0.04em); + width: 100%; +} +.ML__sqrt-line:before { + content: ''; + display: block; + margin-top: min(-1px, -0.04em); + min-height: max(1px, 0.04em); + /* Ensure the line is visible when printing even if "turn off background images" is on*/ + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + background: currentColor; + /* On some versions of Firefox on Windows, the line fails to + draw at some zoom levels, but setting the transform triggers + the hardware accelerated path, which works */ + transform: translate(0, 0); + forced-color-adjust: preserve-parent-color; +} +@media (forced-colors: active) { + .ML__sqrt-line:after { + background: white !important; + } +} +.ML__sqrt-line:after { + border-bottom-width: 1px; + content: ' '; + display: block; + margin-top: -0.1em; +} +.ML__sqrt-index { + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.ML__delim-size1 { + font-family: KaTeX_Size1; +} +.ML__delim-size2 { + font-family: KaTeX_Size2; +} +.ML__delim-size3 { + font-family: KaTeX_Size3; +} +.ML__delim-size4 { + font-family: KaTeX_Size4; +} +.ML__delim-mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.ML__delim-mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.ML__accent-body { + font-family: KaTeX_Main; +} +.ML__accent-combining-char { + position: relative; + left: 0.24em; +} +/** The markup for a LaTeX formula, either in an editable mathfield or + in a static display. +*/ +.ML__latex { + display: inline-block; + direction: ltr; + text-align: left; + text-indent: 0; + text-rendering: auto; + font-family: inherit; + font-style: normal; + font-size-adjust: none; + font-stretch: normal; + font-variant-caps: normal; + letter-spacing: normal; + line-height: 1.2; + word-wrap: normal; + word-spacing: normal; + white-space: nowrap; + text-shadow: none; + -webkit-user-select: none; + user-select: none; + width: min-content; + forced-color-adjust: preserve-parent-color; +} +.ML__latex .style-wrap { + position: relative; +} +.ML__latex .ML__mfrac { + display: inline-block; +} +.ML__latex .ML__left-right { + display: inline-block; +} +.ML__latex .ML__vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.ML__latex .ML__vlist-r { + display: table-row; +} +.ML__latex .ML__vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.ML__latex .ML__vlist > span { + display: block; + height: 0; + position: relative; +} +.ML__latex .ML__vlist > span > span { + display: inline-block; +} +.ML__latex .ML__vlist > span > .ML__pstrut { + overflow: hidden; + width: 0; +} +.ML__latex .ML__vlist-t2 { + margin-right: -2px; +} +.ML__latex .ML__vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.ML__latex .ML__msubsup { + text-align: left; +} +.ML__latex .ML__negativethinspace { + display: inline-block; + margin-left: -0.16667em; + height: 0.71em; +} +.ML__latex .ML__thinspace { + display: inline-block; + width: 0.16667em; + height: 0.71em; +} +.ML__latex .ML__mediumspace { + display: inline-block; + width: 0.22222em; + height: 0.71em; +} +.ML__latex .ML__thickspace { + display: inline-block; + width: 0.27778em; + height: 0.71em; +} +.ML__latex .ML__enspace { + display: inline-block; + width: 0.5em; + height: 0.71em; +} +.ML__latex .ML__quad { + display: inline-block; + width: 1em; + height: 0.71em; +} +.ML__latex .ML__qquad { + display: inline-block; + width: 2em; + height: 0.71em; +} +.ML__latex .ML__llap, +.ML__latex .ML__rlap { + width: 0; + position: relative; + display: inline-block; +} +.ML__latex .ML__llap > .ML__inner, +.ML__latex .ML__rlap > .ML__inner { + position: absolute; +} +.ML__latex .ML__llap > .ML__fix, +.ML__latex .ML__rlap > .ML__fix { + display: inline-block; +} +.ML__latex .ML__llap > .ML__inner { + right: 0; +} +.ML__latex .ML__rlap > .ML__inner { + left: 0; +} +.ML__latex .ML__rule { + display: inline-block; + border: solid 0; + position: relative; + box-sizing: border-box; +} +.ML__latex .overline .overline-line, +.ML__latex .underline .underline-line { + width: 100%; +} +.ML__latex .overline .overline-line:before, +.ML__latex .underline .underline-line:before { + content: ''; + border-bottom-style: solid; + border-bottom-width: max(1px, 0.04em); + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + display: block; +} +.ML__latex .overline .overline-line:after, +.ML__latex .underline .underline-line:after { + border-bottom-style: solid; + border-bottom-width: max(1px, 0.04em); + -webkit-print-color-adjust: exact; + print-color-adjust: exact; + content: ''; + display: block; + margin-top: -1px; +} +.ML__latex .ML__stretchy { + display: block; + position: absolute; + width: 100%; + left: 0; + overflow: hidden; +} +.ML__latex .ML__stretchy:before, +.ML__latex .ML__stretchy:after { + content: ''; +} +.ML__latex .ML__stretchy svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.ML__latex .slice-1-of-2 { + display: inline-flex; + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.ML__latex .slice-2-of-2 { + display: inline-flex; + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.ML__latex .slice-1-of-3 { + display: inline-flex; + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.ML__latex .slice-2-of-3 { + display: inline-flex; + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.ML__latex .slice-3-of-3 { + display: inline-flex; + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.ML__latex .slice-1-of-1 { + display: inline-flex; + position: absolute; + width: 100%; + left: 0; + overflow: hidden; +} +.ML__latex .ML__nulldelimiter { + display: inline-block; +} +.ML__latex .ML__op-group { + display: inline-block; +} +.ML__latex .ML__op-symbol { + position: relative; +} +.ML__latex .ML__op-symbol.ML__small-op { + font-family: KaTeX_Size1; +} +.ML__latex .ML__op-symbol.ML__large-op { + font-family: KaTeX_Size2; +} +.ML__latex:has(.ML__center_environment), +.ML__latex:has(.ML__multiline_environment), +.ML__latex:has(.ML__align_environment), +.ML__latex:has(.ML__eqnarray_environment), +.ML__latex:has(.ML__gather_environment) { + width: 100%; +} +.ML__latex .ML__multiline_environment { + display: inline-flex; + width: 100%; +} +.ML__latex .ML__center_environment { + display: inline-flex; + width: 100%; + justify-content: center; +} +.ML__latex .ML__align_environment, +.ML__latex .ML__eqnarray_environment, +.ML__latex .ML__gather_environment { + display: inline-block; +} +.ML__latex .ML__mtable .ML__vertical-separator { + display: inline-block; + min-width: 1px; + box-sizing: border-box; +} +.ML__latex .ML__mtable .ML__arraycolsep { + display: inline-block; +} +.ML__latex .ML__mtable .col-align-m > .ML__vlist-t { + text-align: center; +} +.ML__latex .ML__mtable .col-align-c > .ML__vlist-t { + text-align: center; +} +.ML__latex .ML__mtable .col-align-l > .ML__vlist-t { + text-align: left; +} +.ML__latex .ML__mtable .col-align-r > .ML__vlist-t { + text-align: right; +} +[data-href] { + cursor: pointer; +} +.ML__error { + display: inline-block; + background-image: radial-gradient(ellipse at center, hsl(341, 100%, 40%), rgba(0, 0, 0, 0) 70%); + background-color: hsla(341, 100%, 40%, 0.1); + background-repeat: repeat-x; + background-size: 3px 3px; + padding-bottom: 3px; + background-position: 0 100%; +} +.ML__error > .ML__error { + background: transparent; + padding: 0; +} +.ML__placeholder { + color: var(--_placeholder-color); + opacity: var(--_placeholder-opacity); + padding-left: 0.4ex; + padding-right: 0.4ex; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; +} +.ML__notation { + position: absolute; + box-sizing: border-box; + line-height: 0; +} +/* This class is used to implement the `\mathtip` and `\texttip` commands + For UI elements, see `[data-ML__tooltip]` +*/ +.ML__tooltip-container { + position: relative; + transform: scale(0); +} +.ML__tooltip-container .ML__tooltip-content { + position: fixed; + display: inline-table; + visibility: hidden; + z-index: 2; + width: max-content; + max-width: 400px; + padding: 12px 12px; + border: var(--_tooltip-border); + border-radius: var(--_tooltip-border-radius); + background: var(--_tooltip-background-color); + --_selection-color: var(--_tooltip-color); + color: var(--_tooltip-color); + box-shadow: var(--_tooltip-box-shadow); + opacity: 0; + transition: opacity 0.15s cubic-bezier(0.4, 0, 1, 1); +} +.ML__tooltip-container .ML__tooltip-content .ML__text { + white-space: normal; +} +.ML__tooltip-container .ML__tooltip-content .ML__base { + display: contents; +} +.ML__tooltip-container:hover .ML__tooltip-content { + visibility: visible; + opacity: 1; + font-size: 0.75em; + transform: scale(1) translate(0, 3em); +} +.ML__bg { + background-color: transparent !important; +} +.ML__bg::before { + content: ''; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: var(--bg-color); + z-index: -1; + box-sizing: border-box; +} diff --git a/dist/mathlive.js b/dist/mathlive.js new file mode 100644 index 000000000..9f6bb7afe --- /dev/null +++ b/dist/mathlive.js @@ -0,0 +1,44245 @@ +/** MathLive 0.110.0 */ + (function(global,factory){typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'],factory):(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.MathLive = {}));})(this, (function (exports) { 'use strict'; +var MathLive = (() => { + var __defProp = Object.defineProperty; + var __defProps = Object.defineProperties; + var __getOwnPropDesc = Object.getOwnPropertyDescriptor; + var __getOwnPropDescs = Object.getOwnPropertyDescriptors; + var __getOwnPropNames = Object.getOwnPropertyNames; + var __getOwnPropSymbols = Object.getOwnPropertySymbols; + var __hasOwnProp = Object.prototype.hasOwnProperty; + var __propIsEnum = Object.prototype.propertyIsEnumerable; + var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; + var __spreadValues = (a, b) => { + for (var prop in b || (b = {})) + if (__hasOwnProp.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + if (__getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(b)) { + if (__propIsEnum.call(b, prop)) + __defNormalProp(a, prop, b[prop]); + } + return a; + }; + var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b)); + var __restKey = (key) => typeof key === "symbol" ? key : key + ""; + var __objRest = (source, exclude) => { + var target = {}; + for (var prop in source) + if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0) + target[prop] = source[prop]; + if (source != null && __getOwnPropSymbols) + for (var prop of __getOwnPropSymbols(source)) { + if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop)) + target[prop] = source[prop]; + } + return target; + }; + var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); + }; + var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; + }; + var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + + // src/mathlive.ts + var mathlive_exports = {}; + __export(mathlive_exports, { + MathDivElement: () => MathDivElement, + MathSpanElement: () => MathSpanElement, + MathfieldElement: () => MathfieldElement, + _renderMathInElement: () => _renderMathInElement, + convertAsciiMathToLatex: () => convertAsciiMathToLatex, + convertLatexToAsciiMath: () => convertLatexToAsciiMath, + convertLatexToMarkup: () => convertLatexToMarkup, + convertLatexToMathMl: () => convertLatexToMathMl, + convertLatexToSpeakableText: () => convertLatexToSpeakableText, + convertMathJsonToLatex: () => convertMathJsonToLatex, + globalMathLive: () => globalMathLive, + initVirtualKeyboardInCurrentBrowsingContext: () => mountMathVirtualKeyboard, + isMathMode: () => isMathMode, + isTextMode: () => isTextMode, + renderMathInDocument: () => renderMathInDocument, + renderMathInElement: () => renderMathInElement, + setKeyboardLayout: () => setKeyboardLayout2, + setKeyboardLayoutLocale: () => setKeyboardLayoutLocale2, + validateLatex: () => validateLatex2, + version: () => version + }); + + // src/ui/utils/capabilities.ts + function isBrowser() { + return "window" in globalThis && "document" in globalThis; + } + function isTouchCapable() { + if ("matchMedia" in window) + return window.matchMedia("(pointer: coarse)").matches; + return "ontouchstart" in window || navigator.maxTouchPoints > 0; + } + function isInIframe() { + try { + return window.self !== window.top; + } catch (e) { + return true; + } + } + function canVibrate() { + return typeof navigator.vibrate === "function"; + } + function osPlatform() { + var _a3, _b3; + if (!isBrowser()) return "other"; + const platform2 = (_b3 = (_a3 = navigator["userAgentData"]) == null ? void 0 : _a3.platform) != null ? _b3 : navigator.platform; + if (/^mac/i.test(platform2)) { + if (navigator.maxTouchPoints === 5) return "ios"; + return "macos"; + } + if (/^win/i.test(platform2)) return "windows"; + if (/android/i.test(navigator.userAgent)) return "android"; + if (/iphone|ipod|ipad/i.test(navigator.userAgent)) return "ios"; + if (/\bcros\b/i.test(navigator.userAgent)) return "chromeos"; + return "other"; + } + function supportRegexPropertyEscape() { + if (!isBrowser()) return true; + if (/firefox/i.test(navigator.userAgent)) { + const m = navigator.userAgent.match(/firefox\/(\d+)/i); + if (!m) return false; + const version2 = parseInt(m[1]); + return version2 >= 78; + } + if (/trident/i.test(navigator.userAgent)) return false; + if (/edge/i.test(navigator.userAgent)) { + const m = navigator.userAgent.match(/edg\/(\d+)/i); + if (!m) return false; + const version2 = parseInt(m[1]); + return version2 >= 79; + } + return true; + } + function supportPopover() { + return HTMLElement.prototype.hasOwnProperty("popover"); + } + + // src/editor/keyboard-layouts/dvorak.ts + var DVORAK = { + id: "dvorak", + locale: "en", + displayName: "Dvorak", + virtualLayout: "dvorak", + platform: "", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE5", "\xC5"], + KeyB: ["x", "X", "\u2248", "\u02DB"], + KeyC: ["j", "J", "\u2206", "\xD4"], + KeyD: ["e", "E", "\xB4", "\xB4"], + KeyE: [".", ">", "\u2265", "\u02D8"], + KeyF: ["u", "U", "\xA8", "\xA8"], + KeyG: ["i", "I", "\u02C6", "\u02C6"], + KeyH: ["d", "D", "\u2202", "\xCE"], + KeyI: ["c", "C", "\xE7", "\xC7"], + KeyJ: ["h", "H", "\u02D9", "\xD3"], + KeyK: ["t", "T", "\u2020", "\u02C7"], + KeyL: ["n", "N", "\u02DC", "\u02DC"], + KeyM: ["m", "M", "\xB5", "\xC2"], + KeyN: ["b", "B", "\u222B", "\u0131"], + KeyO: ["r", "R", "\xAE", "\u2030"], + KeyP: ["l", "L", "\xAC", "\xD2"], + KeyQ: ["'", '"', "\xE6", "\xC6"], + KeyR: ["p", "P", "\u03C0", "\u220F"], + KeyS: ["o", "O", "\xF8", "\xD8"], + KeyT: ["y", "Y", "\xA5", "\xC1"], + KeyU: ["g", "G", "\xA9", "\u02DD"], + KeyV: ["k", "K", "\u02DA", "\uF8FF"], + KeyW: [",", "<", "\u2264", "\xAF"], + KeyX: ["q", "Q", "\u0153", "\u0152"], + KeyY: ["f", "F", "\u0192", "\xCF"], + KeyZ: [";", ":", "\u2026", "\xDA"], + Digit1: ["1", "!", "\xA1", "\u2044"], + Digit2: ["2", "@", "\u2122", "\u20AC"], + Digit3: ["3", "#", "\xA3", "\u2039"], + Digit4: ["4", "$", "\xA2", "\u203A"], + Digit5: ["5", "%", "\u221E", "\uFB01"], + Digit6: ["6", "^", "\xA7", "\uFB02"], + Digit7: ["7", "&", "\xB6", "\u2021"], + Digit8: ["8", "*", "\u2022", "\xB0"], + Digit9: ["9", "(", "\xAA", "\xB7"], + Digit0: ["0", ")", "\xBA", "\u201A"], + Space: [" ", " ", " ", " "], + Minus: ["[", "{", "\u201C", "\u201D"], + Equal: ["]", "}", "\u2018", "\u2019"], + BracketLeft: ["/", "?", "\xF7", "\xBF"], + BracketRight: ["=", "+", "\u2260", "\xB1"], + Backslash: ["\\", "|", "\xAB", "\xBB"], + Semicolon: ["s", "S", "\xDF", "\xCD"], + Quote: ["-", "_", "\u2013", "\u2014"], + Backquote: ["`", "~", "`", "`"], + Comma: ["w", "W", "\u2211", "\u201E"], + Period: ["v", "V", "\u221A", "\u25CA"], + Slash: ["z", "Z", "\u03A9", "\xB8"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + Numpad1: ["1", "1", "1", "1"], + Numpad2: ["2", "2", "2", "2"], + Numpad3: ["3", "3", "3", "3"], + Numpad4: ["4", "4", "4", "4"], + Numpad5: ["5", "5", "5", "5"], + Numpad6: ["6", "6", "6", "6"], + Numpad7: ["7", "7", "7", "7"], + Numpad8: ["8", "8", "8", "8"], + Numpad9: ["9", "9", "9", "9"], + Numpad0: ["0", "0", "0", "0"], + NumpadDecimal: [".", ".", ".", "."], + IntlBackslash: ["\xA7", "\xB1", "\xA7", "\xB1"], + NumpadEqual: ["=", "=", "=", "="], + AudioVolumeUp: ["", "=", "", "="] + } + }; + + // src/editor/keyboard-layouts/english.ts + var APPLE_ENGLISH = { + id: "apple.en-intl", + displayName: "English (international)", + virtualLayout: "qwerty", + platform: "apple", + locale: "en", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE5", "\xC5"], + KeyB: ["b", "B", "\u222B", "\u0131"], + KeyC: ["c", "C", "\xE7", "\xC7"], + KeyD: ["d", "D", "\u2202", "\xCE"], + KeyE: ["e", "E", "\xB4", "\xB4"], + KeyF: ["f", "F", "\u0192", "\xCF"], + KeyG: ["g", "G", "\xA9", "\u02DD"], + KeyH: ["h", "H", "\u02D9", "\xD3"], + KeyI: ["i", "I", "\u02C6", "\u02C6"], + KeyJ: ["j", "J", "\u2206", "\xD4"], + KeyK: ["k", "K", "\u02DA", "\uF8FF"], + KeyL: ["l", "L", "\xAC", "\xD2"], + KeyM: ["m", "M", "\xB5", "\xC2"], + KeyN: ["n", "N", "\u02DC", "\u02DC"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\u03C0", "\u220F"], + KeyQ: ["q", "Q", "\u0153", "\u0152"], + KeyR: ["r", "R", "\xAE", "\u2030"], + KeyS: ["s", "S", "\xDF", "\xCD"], + KeyT: ["t", "T", "\u2020", "\u02C7"], + KeyU: ["u", "U", "\xA8", "\xA8"], + KeyV: ["v", "V", "\u221A", "\u25CA"], + KeyW: ["w", "W", "\u2211", "\u201E"], + KeyX: ["x", "X", "\u2248", "\u02DB"], + KeyY: ["y", "Y", "\xA5", "\xC1"], + KeyZ: ["z", "Z", "\u03A9", "\xB8"], + Digit1: ["1", "!", "\xA1", "\u2044"], + Digit2: ["2", "@", "\u2122", "\u20AC"], + Digit3: ["3", "#", "\xA3", "\u2039"], + Digit4: ["4", "$", "\xA2", "\u203A"], + Digit5: ["5", "%", "\u221E", "\uFB01"], + Digit6: ["6", "^", "\xA7", "\uFB02"], + Digit7: ["7", "&", "\xB6", "\u2021"], + Digit8: ["8", "*", "\u2022", "\xB0"], + Digit9: ["9", "(", "\xAA", "\xB7"], + Digit0: ["0", ")", "\xBA", "\u201A"], + Space: [" ", " ", " ", " "], + Minus: ["-", "_", "\u2013", "\u2014"], + Equal: ["=", "+", "\u2260", "\xB1"], + BracketLeft: ["[", "{", "\u201C", "\u201D"], + BracketRight: ["]", "}", "\u2018", "\u2019"], + Backslash: ["\\", "|", "\xAB", "\xBB"], + Semicolon: [";", ":", "\u2026", "\xDA"], + Quote: ["'", '"', "\xE6", "\xC6"], + Backquote: ["`", "\u02DC", "`", "`"], + Comma: [",", "<", "\u2264", "\xAF"], + Period: [".", ">", "\u2265", "\u02D8"], + Slash: ["/", "?", "\xF7", "\xBF"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + Numpad1: ["1", "1", "1", "1"], + Numpad2: ["2", "2", "2", "2"], + Numpad3: ["3", "3", "3", "3"], + Numpad4: ["4", "4", "4", "4"], + Numpad5: ["5", "5", "5", "5"], + Numpad6: ["6", "6", "6", "6"], + Numpad7: ["7", "7", "7", "7"], + Numpad8: ["8", "8", "8", "8"], + Numpad9: ["9", "9", "9", "9"], + Numpad0: ["0", "0", "0", "0"], + NumpadDecimal: [".", ".", ".", "."], + IntlBackslash: ["\xA7", "\xB1", "\xA7", "\xB1"], + NumpadEqual: ["=", "=", "=", "="], + AudioVolumeUp: ["", "=", "", "="] + } + }; + var WINDOWS_ENGLISH = { + id: "windows.en-intl", + displayName: "English (international)", + platform: "windows", + virtualLayout: "qwerty", + locale: "en", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE1", "\xC1"], + KeyB: ["b", "B", "", ""], + KeyC: ["c", "C", "\xA9", "\xA2"], + KeyD: ["d", "D", "\xF0", "\xD0"], + KeyE: ["e", "E", "\xE9", "\xC9"], + KeyF: ["f", "F", "", ""], + KeyG: ["g", "G", "", ""], + KeyH: ["h", "H", "", ""], + KeyI: ["i", "I", "\xED", "\xCD"], + KeyJ: ["j", "J", "", ""], + KeyK: ["k", "K", "", ""], + KeyL: ["l", "L", "\xF8", "\xD8"], + KeyM: ["m", "M", "\xB5", ""], + KeyN: ["n", "N", "\xF1", "\xD1"], + KeyO: ["o", "O", "\xF3", "\xD3"], + KeyP: ["p", "P", "\xF6", "\xD6"], + KeyQ: ["q", "Q", "\xE4", "\xC4"], + KeyR: ["r", "R", "\xAE", ""], + KeyS: ["s", "S", "\xDF", "\xA7"], + KeyT: ["t", "T", "\xFE", "\xDE"], + KeyU: ["u", "U", "\xFA", "\xDA"], + KeyV: ["v", "V", "", ""], + KeyW: ["w", "W", "\xE5", "\xC5"], + KeyX: ["x", "X", "", ""], + KeyY: ["y", "Y", "\xFC", "\xDC"], + KeyZ: ["z", "Z", "\xE6", "\xC6"], + Digit1: ["1", "!", "\xA1", "\xB9"], + Digit2: ["2", "@", "\xB2", ""], + Digit3: ["3", "#", "\xB3", ""], + Digit4: ["4", "$", "\xA4", "\xA3"], + Digit5: ["5", "%", "\u20AC", ""], + Digit6: ["6", "^", "\xBC", ""], + Digit7: ["7", "&", "\xBD", ""], + Digit8: ["8", "*", "\xBE", ""], + Digit9: ["9", "(", "\u2018", ""], + Digit0: ["0", ")", "\u2019", ""], + Space: [" ", " ", "", ""], + Minus: ["-", "_", "\xA5", ""], + Equal: ["=", "+", "\xD7", "\xF7"], + BracketLeft: ["[", "{", "\xAB", ""], + BracketRight: ["]", "}", "\xBB", ""], + Backslash: ["\\", "|", "\xAC", "\xA6"], + Semicolon: [";", ":", "\xB6", "\xB0"], + Quote: ["'", '"', "\xB4", "\xA8"], + Backquote: ["`", "~", "", ""], + Comma: [",", "<", "\xE7", "\xC7"], + Period: [".", ">", "", ""], + Slash: ["/", "?", "\xBF", ""], + NumpadDivide: ["/", "/", "", ""], + NumpadMultiply: ["*", "*", "", ""], + NumpadSubtract: ["-", "-", "", ""], + NumpadAdd: ["+", "+", "", ""], + IntlBackslash: ["\\", "|", "", ""] + } + }; + var LINUX_ENGLISH = { + id: "linux.en", + displayName: "English", + platform: "linux", + virtualLayout: "qwerty", + locale: "en", + score: 0, + mapping: { + KeyA: ["a", "A", "a", "A"], + KeyB: ["b", "B", "b", "B"], + KeyC: ["c", "C", "c", "C"], + KeyD: ["d", "D", "d", "D"], + KeyE: ["e", "E", "e", "E"], + KeyF: ["f", "F", "f", "F"], + KeyG: ["g", "G", "g", "G"], + KeyH: ["h", "H", "h", "H"], + KeyI: ["i", "I", "i", "I"], + KeyJ: ["j", "J", "j", "J"], + KeyK: ["k", "K", "k", "K"], + KeyL: ["l", "L", "l", "L"], + KeyM: ["m", "M", "m", "M"], + KeyN: ["n", "N", "n", "N"], + KeyO: ["o", "O", "o", "O"], + KeyP: ["p", "P", "p", "P"], + KeyQ: ["q", "Q", "q", "Q"], + KeyR: ["r", "R", "r", "R"], + KeyS: ["s", "S", "s", "S"], + KeyT: ["t", "T", "t", "T"], + KeyU: ["u", "U", "u", "U"], + KeyV: ["v", "V", "v", "V"], + KeyW: ["w", "W", "w", "W"], + KeyX: ["x", "X", "x", "X"], + KeyY: ["y", "Y", "y", "Y"], + KeyZ: ["z", "Z", "z", "Z"], + Digit1: ["1", "!", "1", "!"], + Digit2: ["2", "@", "2", "@"], + Digit3: ["3", "#", "3", "#"], + Digit4: ["4", "$", "4", "$"], + Digit5: ["5", "%", "5", "%"], + Digit6: ["6", "^", "6", "^"], + Digit7: ["7", "&", "7", "&"], + Digit8: ["8", "*", "8", "*"], + Digit9: ["9", "(", "9", "("], + Digit0: ["0", ")", "0", ")"], + Space: [" ", " ", " ", " "], + Minus: ["-", "_", "-", "_"], + Equal: ["=", "+", "=", "+"], + BracketLeft: ["[", "{", "[", "{"], + BracketRight: ["]", "}", "]", "}"], + Backslash: ["\\", "|", "\\", "|"], + Semicolon: [";", ":", ";", ":"], + Quote: ["'", '"', "'", '"'], + Backquote: ["`", "~", "`", "~"], + Comma: [",", "<", ",", "<"], + Period: [".", ">", ".", ">"], + Slash: ["/", "?", "/", "?"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + Numpad1: ["1", "1", "1", "1"], + Numpad2: ["2", "2", "2", "2"], + Numpad3: ["3", "3", "3", "3"], + Numpad4: ["4", "4", "4", "4"], + Numpad5: ["5", "5", "5", "5"], + Numpad6: ["6", "6", "6", "6"], + Numpad7: ["7", "7", "7", "7"], + Numpad8: ["8", "8", "8", "8"], + Numpad9: ["9", "9", "9", "9"], + Numpad0: ["0", "0", "0", "0"], + NumpadDecimal: ["", ".", "", "."], + IntlBackslash: ["<", ">", "|", "\xA6"], + NumpadEqual: ["=", "=", "=", "="], + NumpadComma: [".", ".", ".", "."], + NumpadParenLeft: ["(", "(", "(", "("], + NumpadParenRight: [")", ")", ")", ")"] + } + }; + + // src/editor/keyboard-layouts/french.ts + var APPLE_FRENCH = { + id: "apple.french", + locale: "fr", + displayName: "French", + platform: "apple", + virtualLayout: "azerty", + score: 0, + mapping: { + KeyA: ["q", "Q", "\u2021", "\u03A9"], + KeyB: ["b", "B", "\xDF", "\u222B"], + KeyC: ["c", "C", "\xA9", "\xA2"], + KeyD: ["d", "D", "\u2202", "\u2206"], + KeyE: ["e", "E", "\xEA", "\xCA"], + KeyF: ["f", "F", "\u0192", "\xB7"], + KeyG: ["g", "G", "\uFB01", "\uFB02"], + KeyH: ["h", "H", "\xCC", "\xCE"], + KeyI: ["i", "I", "\xEE", "\xEF"], + KeyJ: ["j", "J", "\xCF", "\xCD"], + KeyK: ["k", "K", "\xC8", "\xCB"], + KeyL: ["l", "L", "\xAC", "|"], + KeyM: [",", "?", "\u221E", "\xBF"], + KeyN: ["n", "N", "~", "\u0131"], + KeyO: ["o", "O", "\u0153", "\u0152"], + KeyP: ["p", "P", "\u03C0", "\u220F"], + KeyQ: ["a", "A", "\xE6", "\xC6"], + KeyR: ["r", "R", "\xAE", "\u201A"], + KeyS: ["s", "S", "\xD2", "\u2211"], + KeyT: ["t", "T", "\u2020", "\u2122"], + KeyU: ["u", "U", "\xBA", "\xAA"], + KeyV: ["v", "V", "\u25CA", "\u221A"], + KeyW: ["z", "Z", "\xC2", "\xC5"], + KeyX: ["x", "X", "\u2248", "\u2044"], + KeyY: ["y", "Y", "\xDA", "\u0178"], + KeyZ: ["w", "W", "\u2039", "\u203A"], + Digit1: ["&", "1", "\uF8FF", "\xB4"], + Digit2: ["\xE9", "2", "\xEB", "\u201E"], + Digit3: ['"', "3", "\u201C", "\u201D"], + Digit4: ["'", "4", "\u2018", "\u2019"], + Digit5: ["(", "5", "{", "["], + Digit6: ["\xA7", "6", "\xB6", "\xE5"], + Digit7: ["\xE8", "7", "\xAB", "\xBB"], + Digit8: ["!", "8", "\xA1", "\xDB"], + Digit9: ["\xE7", "9", "\xC7", "\xC1"], + Digit0: ["\xE0", "0", "\xF8", "\xD8"], + Space: [" ", " ", " ", " "], + Minus: [")", "\xB0", "}", "]"], + Equal: ["-", "_", "\u2014", "\u2013"], + BracketLeft: ["^", "\xA8", "\xF4", "\xD4"], + BracketRight: ["$", "*", "\u20AC", "\xA5"], + Backslash: ["`", "\xA3", "@", "#"], + Semicolon: ["m", "M", "\xB5", "\xD3"], + Quote: ["\xF9", "%", "\xD9", "\u2030"], + Backquote: ["<", ">", "\u2264", "\u2265"], + Comma: [";", ".", "\u2026", "\u2022"], + Period: [":", "/", "\xF7", "\\"], + Slash: ["=", "+", "\u2260", "\xB1"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + NumpadDecimal: [",", ".", ",", "."], + IntlBackslash: ["@", "#", "\u2022", "\u0178"], + NumpadEqual: ["=", "=", "=", "="] + } + }; + var WINDOWS_FRENCH = { + id: "windows.french", + locale: "fr", + displayName: "French", + virtualLayout: "azerty", + platform: "windows", + score: 0, + mapping: { + KeyA: ["q", "Q", "", ""], + KeyB: ["b", "B", "", ""], + KeyC: ["c", "C", "", ""], + KeyD: ["d", "D", "", ""], + KeyE: ["e", "E", "\u20AC", ""], + KeyF: ["f", "F", "", ""], + KeyG: ["g", "G", "", ""], + KeyH: ["h", "H", "", ""], + KeyI: ["i", "I", "", ""], + KeyJ: ["j", "J", "", ""], + KeyK: ["k", "K", "", ""], + KeyL: ["l", "L", "", ""], + KeyM: [",", "?", "", ""], + KeyN: ["n", "N", "", ""], + KeyO: ["o", "O", "", ""], + KeyP: ["p", "P", "", ""], + KeyQ: ["a", "A", "", ""], + KeyR: ["r", "R", "", ""], + KeyS: ["s", "S", "", ""], + KeyT: ["t", "T", "", ""], + KeyU: ["u", "U", "", ""], + KeyV: ["v", "V", "", ""], + KeyW: ["z", "Z", "", ""], + KeyX: ["x", "X", "", ""], + KeyY: ["y", "Y", "", ""], + KeyZ: ["w", "W", "", ""], + Digit1: ["&", "1", "", ""], + Digit2: ["\xE9", "2", "~", ""], + Digit3: ['"', "3", "#", ""], + Digit4: ["'", "4", "{", ""], + Digit5: ["(", "5", "[", ""], + Digit6: ["-", "6", "|", ""], + Digit7: ["\xE8", "7", "`", ""], + Digit8: ["_", "8", "\\", ""], + Digit9: ["\xE7", "9", "^", ""], + Digit0: ["\xE0", "0", "@", ""], + Space: [" ", " ", "", ""], + Minus: [")", "\xB0", "]", ""], + Equal: ["=", "+", "}", ""], + BracketLeft: ["^", "\xA8", "", ""], + BracketRight: ["$", "\xA3", "\xA4", ""], + Backslash: ["*", "\xB5", "", ""], + Semicolon: ["m", "M", "", ""], + Quote: ["\xF9", "%", "", ""], + Backquote: ["\xB2", "", "", ""], + Comma: [";", ".", "", ""], + Period: [":", "/", "", ""], + Slash: ["!", "\xA7", "", ""], + NumpadDivide: ["/", "/", "", ""], + NumpadMultiply: ["*", "*", "", ""], + NumpadSubtract: ["-", "-", "", ""], + NumpadAdd: ["+", "+", "", ""], + IntlBackslash: ["<", ">", "", ""] + } + }; + var LINUX_FRENCH = { + id: "linux.french", + locale: "fr", + displayName: "French", + virtualLayout: "azerty", + platform: "linux", + score: 0, + mapping: { + KeyA: ["q", "Q", "@", "\u03A9"], + KeyB: ["b", "B", "\u201D", "\u2019"], + KeyC: ["c", "C", "\xA2", "\xA9"], + KeyD: ["d", "D", "\xF0", "\xD0"], + KeyE: ["e", "E", "\u20AC", "\xA2"], + KeyF: ["f", "F", "\u0111", "\xAA"], + KeyG: ["g", "G", "\u014B", "\u014A"], + KeyH: ["h", "H", "\u0127", "\u0126"], + KeyI: ["i", "I", "\u2192", "\u0131"], + KeyJ: ["j", "J", "\u0309", "\u031B"], + KeyK: ["k", "K", "\u0138", "&"], + KeyL: ["l", "L", "\u0142", "\u0141"], + KeyM: [",", "?", "\u0301", "\u030B"], + KeyN: ["n", "N", "n", "N"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\xFE", "\xDE"], + KeyQ: ["a", "A", "\xE6", "\xC6"], + KeyR: ["r", "R", "\xB6", "\xAE"], + KeyS: ["s", "S", "\xDF", "\xA7"], + KeyT: ["t", "T", "\u0167", "\u0166"], + KeyU: ["u", "U", "\u2193", "\u2191"], + KeyV: ["v", "V", "\u201C", "\u2018"], + KeyW: ["z", "Z", "\xAB", "<"], + KeyX: ["x", "X", "\xBB", ">"], + KeyY: ["y", "Y", "\u2190", "\xA5"], + KeyZ: ["w", "W", "\u0142", "\u0141"], + Digit1: ["&", "1", "\xB9", "\xA1"], + Digit2: ["\xE9", "2", "~", "\u215B"], + Digit3: ['"', "3", "#", "\xA3"], + Digit4: ["'", "4", "{", "$"], + Digit5: ["(", "5", "[", "\u215C"], + Digit6: ["-", "6", "|", "\u215D"], + Digit7: ["\xE8", "7", "`", "\u215E"], + Digit8: ["_", "8", "\\", "\u2122"], + Digit9: ["\xE7", "9", "^", "\xB1"], + Digit0: ["\xE0", "0", "@", "\xB0"], + Enter: ["\r", "\r", "\r", "\r"], + Escape: ["\x1B", "\x1B", "\x1B", "\x1B"], + Backspace: ["\b", "\b", "\b", "\b"], + Tab: [" ", "", " ", ""], + Space: [" ", " ", " ", " "], + Minus: [")", "\xB0", "]", "\xBF"], + Equal: ["=", "+", "}", "\u0328"], + BracketLeft: ["\u0302", "\u0308", "\u0308", "\u030A"], + BracketRight: ["$", "\xA3", "\xA4", "\u0304"], + Backslash: ["*", "\xB5", "\u0300", "\u0306"], + Semicolon: ["m", "M", "\xB5", "\xBA"], + Quote: ["\xF9", "%", "\u0302", "\u030C"], + Backquote: ["\xB2", "~", "\xAC", "\xAC"], + Comma: [";", ".", "\u2500", "\xD7"], + Period: [":", "/", "\xB7", "\xF7"], + Slash: ["!", "\xA7", "\u0323", "\u0307"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + NumpadDecimal: ["", ".", "", "."], + IntlBackslash: ["<", ">", "|", "\xA6"] + } + }; + + // src/editor/keyboard-layouts/german.ts + var APPLE_GERMAN = { + id: "apple.german", + locale: "de", + displayName: "German", + virtualLayout: "qwertz", + platform: "apple", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE5", "\xC5"], + KeyB: ["b", "B", "\u222B", "\u2039"], + KeyC: ["c", "C", "\xE7", "\xC7"], + KeyD: ["d", "D", "\u2202", "\u2122"], + KeyE: ["e", "E", "\u20AC", "\u2030"], + KeyF: ["f", "F", "\u0192", "\xCF"], + KeyG: ["g", "G", "\xA9", "\xCC"], + KeyH: ["h", "H", "\xAA", "\xD3"], + KeyI: ["i", "I", "\u2044", "\xDB"], + KeyJ: ["j", "J", "\xBA", "\u0131"], + KeyK: ["k", "K", "\u2206", "\u02C6"], + KeyL: ["l", "L", "@", "\uFB02"], + KeyM: ["m", "M", "\xB5", "\u02D8"], + KeyN: ["n", "N", "~", "\u203A"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\u03C0", "\u220F"], + KeyQ: ["q", "Q", "\xAB", "\xBB"], + KeyR: ["r", "R", "\xAE", "\xB8"], + KeyS: ["s", "S", "\u201A", "\xCD"], + KeyT: ["t", "T", "\u2020", "\u02DD"], + KeyU: ["u", "U", "\xA8", "\xC1"], + KeyV: ["v", "V", "\u221A", "\u25CA"], + KeyW: ["w", "W", "\u2211", "\u201E"], + KeyX: ["x", "X", "\u2248", "\xD9"], + KeyY: ["z", "Z", "\u03A9", "\u02C7"], + KeyZ: ["y", "Y", "\xA5", "\u2021"], + Digit1: ["1", "!", "\xA1", "\xAC"], + Digit2: ["2", '"', "\u201C", "\u201D"], + Digit3: ["3", "\xA7", "\xB6", "#"], + Digit4: ["4", "$", "\xA2", "\xA3"], + Digit5: ["5", "%", "[", "\uFB01"], + Digit6: ["6", "&", "]", "^"], + Digit7: ["7", "/", "|", "\\"], + Digit8: ["8", "(", "{", "\u02DC"], + Digit9: ["9", ")", "}", "\xB7"], + Digit0: ["0", "=", "\u2260", "\xAF"], + Space: [" ", " ", " ", " "], + Minus: ["\xDF", "?", "\xBF", "\u02D9"], + Equal: ["\xB4", "`", "'", "\u02DA"], + BracketLeft: ["\xFC", "\xDC", "\u2022", "\xB0"], + BracketRight: ["+", "*", "\xB1", "\uF8FF"], + Backslash: ["#", "'", "\u2018", "\u2019"], + Semicolon: ["\xF6", "\xD6", "\u0153", "\u0152"], + Quote: ["\xE4", "\xC4", "\xE6", "\xC6"], + Backquote: ["<", ">", "\u2264", "\u2265"], + Comma: [",", ";", "\u221E", "\u02DB"], + Period: [".", ":", "\u2026", "\xF7"], + Slash: ["-", "_", "\u2013", "\u2014"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + NumpadDecimal: [",", ",", ".", "."], + IntlBackslash: ["^", "\xB0", "\u201E", "\u201C"], + NumpadEqual: ["=", "=", "=", "="] + } + }; + var WINDOWS_GERMAN = { + id: "windows.german", + locale: "de", + displayName: "German", + platform: "windows", + virtualLayout: "qwertz", + score: 0, + mapping: { + KeyA: ["a", "A", "", ""], + KeyB: ["b", "B", "", ""], + KeyC: ["c", "C", "", ""], + KeyD: ["d", "D", "", ""], + KeyE: ["e", "E", "\u20AC", ""], + KeyF: ["f", "F", "", ""], + KeyG: ["g", "G", "", ""], + KeyH: ["h", "H", "", ""], + KeyI: ["i", "I", "", ""], + KeyJ: ["j", "J", "", ""], + KeyK: ["k", "K", "", ""], + KeyL: ["l", "L", "", ""], + KeyM: ["m", "M", "\xB5", ""], + KeyN: ["n", "N", "", ""], + KeyO: ["o", "O", "", ""], + KeyP: ["p", "P", "", ""], + KeyQ: ["q", "Q", "@", ""], + KeyR: ["r", "R", "", ""], + KeyS: ["s", "S", "", ""], + KeyT: ["t", "T", "", ""], + KeyU: ["u", "U", "", ""], + KeyV: ["v", "V", "", ""], + KeyW: ["w", "W", "", ""], + KeyX: ["x", "X", "", ""], + KeyY: ["z", "Z", "", ""], + KeyZ: ["y", "Y", "", ""], + Digit1: ["1", "!", "", ""], + Digit2: ["2", '"', "\xB2", ""], + Digit3: ["3", "\xA7", "\xB3", ""], + Digit4: ["4", "$", "", ""], + Digit5: ["5", "%", "", ""], + Digit6: ["6", "&", "", ""], + Digit7: ["7", "/", "{", ""], + Digit8: ["8", "(", "[", ""], + Digit9: ["9", ")", "]", ""], + Digit0: ["0", "=", "}", ""], + Space: [" ", " ", "", ""], + Minus: ["\xDF", "?", "\\", "\u1E9E"], + Equal: ["\xB4", "`", "", ""], + BracketLeft: ["\xFC", "\xDC", "", ""], + BracketRight: ["+", "*", "~", ""], + Backslash: ["#", "'", "", ""], + Semicolon: ["\xF6", "\xD6", "", ""], + Quote: ["\xE4", "\xC4", "", ""], + Backquote: ["^", "\xB0", "", ""], + Comma: [",", ";", "", ""], + Period: [".", ":", "", ""], + Slash: ["-", "_", "", ""], + NumpadDivide: ["/", "/", "", ""], + NumpadMultiply: ["*", "*", "", ""], + NumpadSubtract: ["-", "-", "", ""], + NumpadAdd: ["+", "+", "", ""], + IntlBackslash: ["<", ">", "|", ""] + } + }; + var LINUX_GERMAN = { + id: "linux.german", + locale: "de", + displayName: "German", + platform: "windows", + virtualLayout: "qwertz", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE6", "\xC6"], + KeyB: ["b", "B", "\u201C", "\u2018"], + KeyC: ["c", "C", "\xA2", "\xA9"], + KeyD: ["d", "D", "\xF0", "\xD0"], + KeyE: ["e", "E", "\u20AC", "\u20AC"], + KeyF: ["f", "F", "\u0111", "\xAA"], + KeyG: ["g", "G", "\u014B", "\u014A"], + KeyH: ["h", "H", "\u0127", "\u0126"], + KeyI: ["i", "I", "\u2192", "\u0131"], + KeyJ: ["j", "J", "\u0323", "\u0307"], + KeyK: ["k", "K", "\u0138", "&"], + KeyL: ["l", "L", "\u0142", "\u0141"], + KeyM: ["m", "M", "\xB5", "\xBA"], + KeyN: ["n", "N", "\u201D", "\u2019"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\xFE", "\xDE"], + KeyQ: ["q", "Q", "@", "\u03A9"], + KeyR: ["r", "R", "\xB6", "\xAE"], + KeyS: ["s", "S", "\u017F", "\u1E9E"], + KeyT: ["t", "T", "\u0167", "\u0166"], + KeyU: ["u", "U", "\u2193", "\u2191"], + KeyV: ["v", "V", "\u201E", "\u201A"], + KeyW: ["w", "W", "\u0142", "\u0141"], + KeyX: ["x", "X", "\xAB", "\u2039"], + KeyY: ["z", "Z", "\u2190", "\xA5"], + KeyZ: ["y", "Y", "\xBB", "\u203A"], + Digit1: ["1", "!", "\xB9", "\xA1"], + Digit2: ["2", '"', "\xB2", "\u215B"], + Digit3: ["3", "\xA7", "\xB3", "\xA3"], + Digit4: ["4", "$", "\xBC", "\xA4"], + Digit5: ["5", "%", "\xBD", "\u215C"], + Digit6: ["6", "&", "\xAC", "\u215D"], + Digit7: ["7", "/", "{", "\u215E"], + Digit8: ["8", "(", "[", "\u2122"], + Digit9: ["9", ")", "]", "\xB1"], + Digit0: ["0", "=", "}", "\xB0"], + Enter: ["\r", "\r", "\r", "\r"], + Escape: ["\x1B", "\x1B", "\x1B", "\x1B"], + Backspace: ["\b", "\b", "\b", "\b"], + Tab: [" ", "", " ", ""], + Space: [" ", " ", " ", " "], + Minus: ["\xDF", "?", "\\", "\xBF"], + Equal: ["\u0301", "\u0300", "\u0327", "\u0328"], + BracketLeft: ["\xFC", "\xDC", "\u0308", "\u030A"], + BracketRight: ["+", "*", "~", "\xAF"], + Backslash: ["#", "'", "\u2019", "\u0306"], + Semicolon: ["\xF6", "\xD6", "\u030B", "\u0323"], + Quote: ["\xE4", "\xC4", "\u0302", "\u030C"], + Backquote: ["\u0302", "\xB0", "\u2032", "\u2033"], + Comma: [",", ";", "\xB7", "\xD7"], + Period: [".", ":", "\u2026", "\xF7"], + Slash: ["-", "_", "\u2013", "\u2014"], + PrintScreen: ["", "", "", ""], + PageUp: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + Numpad1: ["", "1", "", "1"], + Numpad2: ["", "2", "", "2"], + Numpad3: ["", "3", "", "3"], + Numpad4: ["", "4", "", "4"], + Numpad5: ["", "5", "", "5"], + Numpad6: ["", "6", "", "6"], + Numpad7: ["", "7", "", "7"], + Numpad8: ["", "8", "", "8"], + Numpad9: ["", "9", "", "9"], + Numpad0: ["", "0", "", "0"], + NumpadDecimal: ["", ",", "", ","], + IntlBackslash: ["<", ">", "|", "\u0331"], + AltRight: ["\r", "\r", "\r", "\r"], + MetaRight: [".", ".", ".", "."] + } + }; + + // src/editor/keyboard-layouts/spanish.ts + var APPLE_SPANISH = { + id: "apple.spanish", + locale: "es", + displayName: "Spanish ISO", + platform: "apple", + virtualLayout: "qwerty", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE5", "\xC5"], + KeyB: ["b", "B", "\xDF", ""], + KeyC: ["c", "C", "\xA9", " "], + KeyD: ["d", "D", "\u2202", "\u2206"], + KeyE: ["e", "E", "\u20AC", "\u20AC"], + KeyF: ["f", "F", "\u0192", "\uFB01"], + KeyG: ["g", "G", "\uF8FF", "\uFB02"], + KeyH: ["h", "H", "\u2122", " "], + KeyI: ["i", "I", " ", " "], + KeyJ: ["j", "J", "\xB6", "\xAF"], + KeyK: ["k", "K", "\xA7", "\u02C7"], + KeyL: ["l", "L", " ", "\u02D8"], + KeyM: ["m", "M", "\xB5", "\u02DA"], + KeyN: ["n", "N", " ", "\u02D9"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\u03C0", "\u220F"], + KeyQ: ["q", "Q", "\u0153", "\u0152"], + KeyR: ["r", "R", "\xAE", " "], + KeyS: ["s", "S", "\u222B", " "], + KeyT: ["t", "T", "\u2020", "\u2021"], + KeyU: ["u", "U", " ", " "], + KeyV: ["v", "V", "\u221A", "\u25CA"], + KeyW: ["w", "W", "\xE6", "\xC6"], + KeyX: ["x", "X", "\u2211", "\u203A"], + KeyY: ["y", "Y", "\xA5", " "], + KeyZ: ["z", "Z", "\u03A9", "\u2039"], + Digit1: ["1", "!", "|", "\u0131"], + Digit2: ["2", '"', "@", "\u02DD"], + Digit3: ["3", "\xB7", "#", "\u2022"], + Digit4: ["4", "$", "\xA2", "\xA3"], + Digit5: ["5", "%", "\u221E", "\u2030"], + Digit6: ["6", "&", "\xAC", " "], + Digit7: ["7", "/", "\xF7", "\u2044"], + Digit8: ["8", "(", "\u201C", "\u2018"], + Digit9: ["9", ")", "\u201D", "\u2019"], + Digit0: ["0", "=", "\u2260", "\u2248"], + Space: [" ", " ", " ", " "], + Minus: ["'", "?", "\xB4", "\xB8"], + Equal: ["\xA1", "\xBF", "\u201A", "\u02DB"], + BracketLeft: ["`", "^", "[", "\u02C6"], + BracketRight: ["+", "*", "]", "\xB1"], + Backslash: ["\xE7", "\xC7", "}", "\xBB"], + Semicolon: ["\xF1", "\xD1", "~", "\u02DC"], + Quote: ["\xB4", "\xA8", "{", "\xAB"], + Backquote: ["<", ">", "\u2264", "\u2265"], + Comma: [",", ";", "\u201E", ""], + Period: [".", ":", "\u2026", "\u2026"], + Slash: ["-", "_", "\u2013", "\u2014"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + Numpad1: ["1", "1", "1", "1"], + Numpad2: ["2", "2", "2", "2"], + Numpad3: ["3", "3", "3", "3"], + Numpad4: ["4", "4", "4", "4"], + Numpad5: ["5", "5", "5", "5"], + Numpad6: ["6", "6", "6", "6"], + Numpad7: ["7", "7", "7", "7"], + Numpad8: ["8", "8", "8", "8"], + Numpad9: ["9", "9", "9", "9"], + Numpad0: ["0", "0", "0", "0"], + NumpadDecimal: [",", ",", ",", ","], + IntlBackslash: ["\xBA", "\xAA", "\\", "\xB0"] + } + }; + var WINDOWS_SPANISH = { + id: "windows.spanish", + locale: "es", + displayName: "Spanish", + platform: "windows", + virtualLayout: "qwerty", + score: 0, + mapping: { + KeyA: ["a", "A", "", ""], + KeyB: ["b", "B", "", ""], + KeyC: ["c", "C", "", ""], + KeyD: ["d", "D", "", ""], + KeyE: ["e", "E", "\u20AC", ""], + KeyF: ["f", "F", "", ""], + KeyG: ["g", "G", "", ""], + KeyH: ["h", "H", "", ""], + KeyI: ["i", "I", "", ""], + KeyJ: ["j", "J", "", ""], + KeyK: ["k", "K", "", ""], + KeyL: ["l", "L", "", ""], + KeyM: ["m", "M", "", ""], + KeyN: ["n", "N", "", ""], + KeyO: ["o", "O", "", ""], + KeyP: ["p", "P", "", ""], + KeyQ: ["q", "Q", "", ""], + KeyR: ["r", "R", "", ""], + KeyS: ["s", "S", "", ""], + KeyT: ["t", "T", "", ""], + KeyU: ["u", "U", "", ""], + KeyV: ["v", "V", "", ""], + KeyW: ["w", "W", "", ""], + KeyX: ["x", "X", "", ""], + KeyY: ["y", "Y", "", ""], + KeyZ: ["z", "Z", "", ""], + Digit1: ["1", "!", "|", ""], + Digit2: ["2", '"', "@", ""], + Digit3: ["3", "\xB7", "#", ""], + Digit4: ["4", "$", "~", ""], + Digit5: ["5", "%", "\u20AC", ""], + Digit6: ["6", "&", "\xAC", ""], + Digit7: ["7", "/", "", ""], + Digit8: ["8", "(", "", ""], + Digit9: ["9", ")", "", ""], + Digit0: ["0", "=", "", ""], + Space: [" ", " ", "", ""], + Minus: ["'", "?", "", ""], + Equal: ["\xA1", "\xBF", "", ""], + BracketLeft: ["`", "^", "[", ""], + BracketRight: ["+", "*", "]", ""], + Backslash: ["\xE7", "\xC7", "}", ""], + Semicolon: ["\xF1", "\xD1", "", ""], + Quote: ["\xB4", "\xA8", "{", ""], + Backquote: ["\xBA", "\xAA", "\\", ""], + Comma: [",", ";", "", ""], + Period: [".", ":", "", ""], + Slash: ["-", "_", "", ""], + NumpadDivide: ["/", "/", "", ""], + NumpadMultiply: ["*", "*", "", ""], + NumpadSubtract: ["-", "-", "", ""], + NumpadAdd: ["+", "+", "", ""], + IntlBackslash: ["<", ">", "", ""] + } + }; + var LINUX_SPANISH = { + id: "linux.spanish", + locale: "es", + displayName: "Spanish", + platform: "linux", + virtualLayout: "qwerty", + score: 0, + mapping: { + KeyA: ["a", "A", "\xE6", "\xC6"], + KeyB: ["b", "B", "\u201D", "\u2019"], + KeyC: ["c", "C", "\xA2", "\xA9"], + KeyD: ["d", "D", "\xF0", "\xD0"], + KeyE: ["e", "E", "\u20AC", "\xA2"], + KeyF: ["f", "F", "\u0111", "\xAA"], + KeyG: ["g", "G", "\u014B", "\u014A"], + KeyH: ["h", "H", "\u0127", "\u0126"], + KeyI: ["i", "I", "\u2192", "\u0131"], + KeyJ: ["j", "J", "\u0309", "\u031B"], + KeyK: ["k", "K", "\u0138", "&"], + KeyL: ["l", "L", "\u0142", "\u0141"], + KeyM: ["m", "M", "\xB5", "\xBA"], + KeyN: ["n", "N", "n", "N"], + KeyO: ["o", "O", "\xF8", "\xD8"], + KeyP: ["p", "P", "\xFE", "\xDE"], + KeyQ: ["q", "Q", "@", "\u03A9"], + KeyR: ["r", "R", "\xB6", "\xAE"], + KeyS: ["s", "S", "\xDF", "\xA7"], + KeyT: ["t", "T", "\u0167", "\u0166"], + KeyU: ["u", "U", "\u2193", "\u2191"], + KeyV: ["v", "V", "\u201C", "\u2018"], + KeyW: ["w", "W", "\u0142", "\u0141"], + KeyX: ["x", "X", "\xBB", ">"], + KeyY: ["y", "Y", "\u2190", "\xA5"], + KeyZ: ["z", "Z", "\xAB", "<"], + Digit1: ["1", "!", "|", "\xA1"], + Digit2: ["2", '"', "@", "\u215B"], + Digit3: ["3", "\xB7", "#", "\xA3"], + Digit4: ["4", "$", "~", "$"], + Digit5: ["5", "%", "\xBD", "\u215C"], + Digit6: ["6", "&", "\xAC", "\u215D"], + Digit7: ["7", "/", "{", "\u215E"], + Digit8: ["8", "(", "[", "\u2122"], + Digit9: ["9", ")", "]", "\xB1"], + Digit0: ["0", "=", "}", "\xB0"], + Enter: ["\r", "\r", "\r", "\r"], + Escape: ["\x1B", "\x1B", "\x1B", "\x1B"], + Backspace: ["\b", "\b", "\b", "\b"], + Tab: [" ", "", " ", ""], + Space: [" ", " ", " ", " "], + Minus: ["'", "?", "\\", "\xBF"], + Equal: ["\xA1", "\xBF", "\u0303", "~"], + BracketLeft: ["\u0300", "\u0302", "[", "\u030A"], + BracketRight: ["+", "*", "]", "\u0304"], + Backslash: ["\xE7", "\xC7", "}", "\u0306"], + Semicolon: ["\xF1", "\xD1", "~", "\u030B"], + Quote: ["\u0301", "\u0308", "{", "{"], + Backquote: ["\xBA", "\xAA", "\\", "\\"], + Comma: [",", ";", "\u2500", "\xD7"], + Period: [".", ":", "\xB7", "\xF7"], + Slash: ["-", "_", "\u0323", "\u0307"], + NumpadDivide: ["/", "/", "/", "/"], + NumpadMultiply: ["*", "*", "*", "*"], + NumpadSubtract: ["-", "-", "-", "-"], + NumpadAdd: ["+", "+", "+", "+"], + NumpadEnter: ["\r", "\r", "\r", "\r"], + Numpad1: ["", "1", "", "1"], + Numpad2: ["", "2", "", "2"], + Numpad3: ["", "3", "", "3"], + Numpad4: ["", "4", "", "4"], + Numpad5: ["", "5", "", "5"], + Numpad6: ["", "6", "", "6"], + Numpad7: ["", "7", "", "7"], + Numpad8: ["", "8", "", "8"], + Numpad9: ["", "9", "", "9"], + Numpad0: ["", "0", "", "0"], + NumpadDecimal: ["", ".", "", "."], + IntlBackslash: ["<", ">", "|", "\xA6"], + NumpadEqual: ["=", "=", "=", "="], + NumpadComma: [".", ".", ".", "."], + NumpadParenLeft: ["(", "(", "(", "("], + NumpadParenRight: [")", ")", ")", ")"] + } + }; + + // src/editor/keyboard-layout.ts + function keystrokeModifiersFromString(key) { + const segments = key.split("+"); + const result = { + shift: false, + alt: false, + cmd: false, + win: false, + meta: false, + ctrl: false, + key: segments.pop() + }; + if (segments.includes("shift")) result.shift = true; + if (segments.includes("alt")) result.alt = true; + if (segments.includes("ctrl")) result.ctrl = true; + if (segments.includes("cmd")) result.cmd = true; + if (segments.includes("win")) result.win = true; + if (segments.includes("meta")) result.meta = true; + return result; + } + function keystrokeModifiersToString(key) { + let result = ""; + if (key.shift) result += "shift+"; + if (key.alt) result += "alt+"; + if (key.ctrl) result += "ctrl+"; + if (key.cmd) result += "cmd+"; + if (key.win) result += "win+"; + if (key.meta) result += "meta+"; + return result + key.key; + } + var BASE_LAYOUT_MAPPING = { + enter: "[Enter]", + escape: "[Escape]", + backspace: "[Backspace]", + tab: "[Tab]", + space: "[Space]", + pausebreak: "[Pause]", + insert: "[Insert]", + home: "[Home]", + pageup: "[PageUp]", + delete: "[Delete]", + end: "[End]", + pagedown: "[PageDown]", + right: "[ArrowRight]", + left: "[ArrowLeft]", + down: "[ArrowDown]", + up: "[ArrowUp]", + numpad0: "[Numpad0]", + numpad1: "[Numpad1]", + numpad2: "[Numpad2]", + numpad3: "[Numpad3]", + numpad4: "[Numpad4]", + numpad5: "[Numpad5]", + numpad6: "[Numpad6]", + numpad7: "[Numpad7]", + numpad8: "[Numpad8]", + numpad9: "[Numpad9]", + "numpad_divide": "[NumpadDivide]", + "numpad_multiply": "[NumpadMultiply]", + "numpad_subtract": "[NumpadSubtract]", + "numpad_add": "[NumpadAdd]", + "numpad_decimal": "[NumpadDecimal]", + "numpad_separator": "[NumpadComma]", + capslock: "[Capslock]", + f1: "[F1]", + f2: "[F2]", + f3: "[F3]", + f4: "[F4]", + f5: "[F5]", + f6: "[F6]", + f7: "[F7]", + f8: "[F8]", + f9: "[F9]", + f10: "[F10]", + f11: "[F11]", + f12: "[F12]", + f13: "[F13]", + f14: "[F14]", + f15: "[F15]", + f16: "[F16]", + f17: "[F17]", + f18: "[F18]", + f19: "[F19]" + }; + var gKeyboardLayouts = []; + var gKeyboardLayout; + function platform() { + switch (osPlatform()) { + case "macos": + case "ios": + return "apple"; + case "windows": + return "windows"; + } + return "linux"; + } + function register(layout) { + if (!layout.platform || layout.platform === platform()) + gKeyboardLayouts.push(layout); + } + function getCodeForKey(k, layout) { + var _a3; + const result = { + shift: false, + alt: false, + cmd: false, + win: false, + meta: false, + ctrl: false, + key: "" + }; + if (!k) return result; + for (const [key, value] of Object.entries(layout.mapping)) { + if (value[0] === k) { + result.key = `[${key}]`; + return result; + } + if (value[1] === k) { + result.shift = true; + result.key = `[${key}]`; + return result; + } + if (value[2] === k) { + result.alt = true; + result.key = `[${key}]`; + return result; + } + if (value[3] === k) { + result.shift = true; + result.alt = true; + result.key = `[${key}]`; + return result; + } + } + result.key = (_a3 = BASE_LAYOUT_MAPPING[k]) != null ? _a3 : ""; + return result; + } + function normalizeKeyboardEvent(evt) { + if (evt.code) return evt; + const mapping = Object.entries(getActiveKeyboardLayout().mapping); + let altKey = false; + let shiftKey = false; + let code = ""; + for (let index = 0; index < 4; index++) { + for (const [key, value] of mapping) { + if (value[index] === evt.key) { + code = key; + if (index === 3) { + altKey = true; + shiftKey = true; + } else if (index === 2) altKey = true; + else if (index === 1) shiftKey = true; + break; + } + } + if (code) break; + } + return new KeyboardEvent(evt.type, __spreadProps(__spreadValues({}, evt), { altKey, shiftKey, code })); + } + function validateKeyboardLayout(evt) { + var _a3, _b3; + if (!evt) return; + if (evt.key === "Unidentified") return; + if (evt.key === "Dead") return; + const index = evt.shiftKey && evt.altKey ? 3 : evt.altKey ? 2 : evt.shiftKey ? 1 : 0; + for (const layout of gKeyboardLayouts) { + if (((_a3 = layout.mapping[evt.code]) == null ? void 0 : _a3[index]) === evt.key) { + layout.score += 1; + } else if ((_b3 = layout.mapping[evt.code]) == null ? void 0 : _b3[index]) { + layout.score = 0; + } + } + gKeyboardLayouts.sort((a, b) => b.score - a.score); + } + function setKeyboardLayoutLocale(locale) { + gKeyboardLayout = gKeyboardLayouts.find((x) => locale.startsWith(x.locale)); + } + function setKeyboardLayout(name) { + gKeyboardLayout = gKeyboardLayouts.find((x) => x.id === name); + return gKeyboardLayout; + } + function getActiveKeyboardLayout() { + return gKeyboardLayout != null ? gKeyboardLayout : gKeyboardLayouts[0]; + } + function getDefaultKeyboardLayout() { + switch (platform()) { + case "apple": + return APPLE_ENGLISH; + case "windows": + return WINDOWS_ENGLISH; + case "linux": + return LINUX_ENGLISH; + } + return APPLE_ENGLISH; + } + switch (platform()) { + case "apple": + register(APPLE_ENGLISH); + register(APPLE_FRENCH); + register(APPLE_SPANISH); + register(APPLE_GERMAN); + break; + case "windows": + register(WINDOWS_ENGLISH); + register(WINDOWS_FRENCH); + register(WINDOWS_SPANISH); + register(WINDOWS_GERMAN); + break; + case "linux": + register(LINUX_ENGLISH); + register(LINUX_FRENCH); + register(LINUX_SPANISH); + register(LINUX_GERMAN); + break; + } + register(DVORAK); + + // src/public/keyboard-layout.ts + function setKeyboardLayout2(name) { + setKeyboardLayout(name); + } + function setKeyboardLayoutLocale2(locale) { + setKeyboardLayoutLocale(locale); + } + + // src/public/core-types.ts + function isTextMode(mode) { + return mode === "text" || mode === "free-text"; + } + function isMathMode(mode) { + return mode === "math" || mode === "free-math"; + } + + // src/common/types.ts + function isArray(x) { + return Array.isArray(x); + } + + // src/editor/l10n-strings.ts + var STRINGS = { + "en": { + "keyboard.tooltip.symbols": "Symbols", + "keyboard.tooltip.greek": "Greek Letters", + "keyboard.tooltip.numeric": "Numeric", + "keyboard.tooltip.alphabetic": "Roman Letters", + "tooltip.copy to clipboard": "Copy to Clipboard", + "tooltip.cut to clipboard": "Cut to Clipboard", + "tooltip.paste from clipboard": "Paste from Clipboard", + "tooltip.redo": "Redo", + "tooltip.toggle virtual keyboard": "Toggle Virtual Keyboard", + "tooltip.menu": "Menu", + "tooltip.undo": "Undo", + "menu.borders": "Borders", + "menu.insert matrix": "Insert Matrix", + "menu.array.add row above": "Add Row Before", + "menu.array.add row below": "Add Row After", + "menu.array.add column after": "Add Column After", + "menu.array.add column before": "Add Column Before", + "menu.array.delete row": "Delete Row", + "menu.array.delete rows": "Delete Selected Rows", + "menu.array.delete column": "Delete Column", + "menu.array.delete columns": "Delete Selected Columns", + "menu.mode": "Mode", + "menu.mode-math": "Math", + "menu.mode-text": "Text", + "menu.mode-latex": "LaTeX", + "menu.insert": "Insert", + "menu.insert.abs": "Absolute Value", + "menu.insert.abs-template": "\\left|x\\right|", + "menu.insert.nth-root": "nth Root", + "menu.insert.nth-root-template": "\\sqrt[n]{x}", + "menu.insert.log-base": "Logarithm base a", + "menu.insert.log-base-template": "\\log_a(x)", + "menu.insert.heading-calculus": "Calculus", + "menu.insert.derivative": "Derivative", + "menu.insert.derivative-template": "\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}", + "menu.insert.nth-derivative": "nth derivative", + "menu.insert.nth-derivative-template": "\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}", + "menu.insert.integral": "Integral", + "menu.insert.integral-template": "$\\int_a^b f(x)\\,\\mathrm{d}x$", + "menu.insert.sum": "Sum", + "menu.insert.sum-template": "$\\sum_{i=1}^n x_i$", + "menu.insert.product": "Product", + "menu.insert.product-template": "\\prod_{i=1}^n x_i", + "menu.insert.heading-complex-numbers": "Complex Numbers", + "menu.insert.modulus": "Modulus", + "menu.insert.modulus-template": "\\lvert z \\rvert", + "menu.insert.argument": "Argument", + "menu.insert.argument-template": "\\arg(z)", + "menu.insert.real-part": "Real Part", + "menu.insert.real-part-template": "\\Re(z)", + "menu.insert.imaginary-part": "Imaginary Part", + "menu.insert.imaginary-part-template": "\\Im(z)", + "menu.insert.conjugate": "Conjugate", + "menu.insert.conjugate-template": "\\overline{z}", + "tooltip.blackboard": "Blackboard", + "tooltip.bold": "Bold", + "tooltip.italic": "Italic", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Script", + "tooltip.caligraphic": "Caligraphic", + "tooltip.typewriter": "Typewriter", + "tooltip.roman-upright": "Roman Upright", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Font Style", + "menu.accent": "Accent", + "menu.decoration": "Decoration", + "menu.color": "Color", + "menu.background-color": "Background", + "menu.evaluate": "Evaluate", + "menu.simplify": "Simplify", + "menu.solve": "Solve", + "menu.solve-for": "Solve for %@", + "menu.cut": "Cut", + "menu.copy": "Copy", + "menu.copy-as-latex": "Copy as LaTeX", + "menu.copy-as-typst": "Copy as Typst", + "menu.copy-as-ascii-math": "Copy as ASCII Math", + "menu.copy-as-mathml": "Copy as MathML", + "menu.paste": "Paste", + "menu.select-all": "Select All", + // Colors (accessible labels in color swatches) + "color.red": "Red", + "color.orange": "Orange", + "color.yellow": "Yellow", + "color.lime": "Lime", + "color.green": "Green", + "color.teal": "Teal", + "color.cyan": "Cyan", + "color.blue": "Blue", + "color.indigo": "Indigo", + "color.purple": "Purple", + "color.magenta": "Magenta", + "color.black": "Black", + "color.dark-grey": "Dark Grey", + "color.grey": "Grey", + "color.light-grey": "Light Grey", + "color.white": "White" + }, + // Arabic + "ar": { + "keyboard.tooltip.symbols": "\u062D\u0631\u0641 \u0627\u0648 \u0631\u0645\u0632", + "keyboard.tooltip.greek": "\u062D\u0631\u0648\u0641 \u064A\u0648\u0646\u0627\u0646\u064A\u0629", + "keyboard.tooltip.numeric": "\u0627\u0644\u0631\u0642\u0645\u064A\u0629", + "keyboard.tooltip.alphabetic": "\u0631\u0645\u0648\u0632 \u0627\u0644\u0627\u062D\u0631\u0641 \u0627\u0644\u0631\u0648\u0645\u0627\u0646\u064A\u0629", + "tooltip.copy to clipboard": "\u0646\u0633\u062E \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629", + "tooltip.cut to clipboard": "\u0642\u0635 \u0625\u0644\u0649 \u0627\u0644\u062D\u0627\u0641\u0638\u0629", + "tooltip.paste from clipboard": "\u0644\u0635\u0642 \u0645\u0646 \u0627\u0644\u062D\u0627\u0641\u0638\u0629", + "tooltip.redo": "\u0627\u0644\u0625\u0639\u0627\u062F\u0629", + "tooltip.toggle virtual keyboard": "\u062A\u0628\u062F\u064A\u0644 \u0644\u0648\u062D\u0629 \u0627\u0644\u0645\u0641\u0627\u062A\u064A\u062D \u0627\u0644\u0625\u0641\u062A\u0631\u0627\u0636\u064A\u0629", + "tooltip.undo": "\u0625\u0644\u063A\u0627\u0621", + "menu.insert matrix": "\u0623\u062F\u062E\u0644 \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629", + "menu.borders": "\u0645\u062D\u062F\u062F\u0627\u062A \u0627\u0644\u0645\u0635\u0641\u0648\u0641\u0629", + "menu.array.add row above": "\u0623\u0636\u0641 \u0635\u0641\u064B\u0627 \u0628\u0639\u062F \u0630\u0644\u0643", + "menu.array.add row below": "\u0623\u0636\u0641 \u0627\u0644\u0635\u0641 \u0642\u0628\u0644", + "menu.array.add column after": "\u0623\u0636\u0641 \u0627\u0644\u0639\u0645\u0648\u062F \u0628\u0639\u062F \u0630\u0644\u0643", + "menu.array.add column before": "\u0623\u0636\u0641 \u0627\u0644\u0639\u0645\u0648\u062F \u0642\u0628\u0644", + "menu.array.delete row": "\u0627\u062D\u0630\u0641 \u0635\u0641", + "menu.array.delete rows": "\u062D\u0630\u0641 \u0627\u0644\u0635\u0641\u0648\u0641 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", + "menu.array.delete column": "\u062D\u0630\u0641 \u0627\u0644\u0639\u0645\u0648\u062F", + "menu.array.delete columns": "\u062D\u0630\u0641 \u0627\u0644\u0623\u0639\u0645\u062F\u0629 \u0627\u0644\u0645\u062D\u062F\u062F\u0629", + "menu.mode": "\u0648\u0636\u0639", + "menu.mode-math": "\u0631\u064A\u0627\u0636\u064A\u0627\u062A", + "menu.mode-text": "\u0646\u0635", + "menu.mode-latex": "\u0644\u0627\u062A\u0643\u0633", + "tooltip.blackboard": "\u0633\u0628\u0648\u0631\u0629", + "tooltip.bold": "\u0639\u0631\u064A\u0636", + "tooltip.italic": "\u0645\u0627\u0626\u0644", + "tooltip.fraktur": "\u0641\u0631\u0627\u0643\u062A\u0648\u0631", + "tooltip.script": "\u0633\u0643\u0631\u064A\u0628\u062A", + "tooltip.caligraphic": "\u0643\u0627\u0644\u064A\u062C\u0631\u0627\u0641\u064A\u0643", + "tooltip.typewriter": "\u0622\u0644\u0629 \u0643\u0627\u062A\u0628\u0629", + "tooltip.roman-upright": "\u0631\u0648\u0645\u0627\u0646\u064A \u0645\u0633\u062A\u0642\u064A\u0645", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u0646\u0645\u0637 \u0627\u0644\u062E\u0637", + "menu.accent": "\u062A\u0634\u0643\u064A\u0644", + "menu.decoration": "\u0632\u062E\u0631\u0641\u0629", + "menu.color": "\u0644\u0648\u0646", + "menu.background-color": "\u0627\u0644\u062E\u0644\u0641\u064A\u0629", + "menu.evaluate": "\u062A\u0642\u064A\u064A\u0645", + "menu.simplify": "\u062A\u0628\u0633\u064A\u0637", + "menu.solve": "\u062D\u0644", + "menu.solve-for": "\u062D\u0644 \u0644\u0640 %@", + "menu.cut": "\u0642\u0635", + "menu.copy": "\u0646\u0633\u062E", + "menu.copy-as-latex": "\u0646\u0633\u062E \u0643\u0640 LaTeX", + "menu.copy-as-ascii-math": "\u0646\u0633\u062E \u0643\u0640 ASCII Math", + "menu.copy-as-mathml": "\u0646\u0633\u062E \u0643\u0640 MathML", + "menu.paste": "\u0644\u0635\u0642", + "menu.select-all": "\u062A\u062D\u062F\u064A\u062F \u0627\u0644\u0643\u0644", + // Colors (accessible labels in color swatches) + "color.red": "\u0623\u062D\u0645\u0631", + "color.orange": "\u0628\u0631\u062A\u0642\u0627\u0644\u064A", + "color.yellow": "\u0623\u0635\u0641\u0631", + "color.lime": "\u0644\u064A\u0645\u0648\u0646\u064A", + "color.green": "\u0623\u062E\u0636\u0631", + "color.teal": "\u0633\u0645\u0627\u0648\u064A", + "color.cyan": "\u0633\u0645\u0627\u0648\u064A \u0641\u0627\u062A\u062D", + "color.blue": "\u0623\u0632\u0631\u0642", + "color.indigo": "\u0646\u064A\u0644\u064A", + "color.purple": "\u0628\u0646\u0641\u0633\u062C\u064A", + "color.magenta": "\u0623\u0631\u062C\u0648\u0627\u0646\u064A", + "color.black": "\u0623\u0633\u0648\u062F", + "color.dark-grey": "\u0631\u0645\u0627\u062F\u064A \u063A\u0627\u0645\u0642", + "color.grey": "\u0631\u0645\u0627\u062F\u064A", + "color.light-grey": "\u0631\u0645\u0627\u062F\u064A \u0641\u0627\u062A\u062D", + "color.white": "\u0623\u0628\u064A\u0636" + }, + // German + "de": { + "keyboard.tooltip.symbols": "Symbole", + "keyboard.tooltip.greek": "Griechische Buchstaben", + "keyboard.tooltip.numeric": "Numerisch", + "keyboard.tooltip.alphabetic": "R\xF6mische Buchstaben", + "tooltip.copy to clipboard": "In die Zwischenablage kopieren", + "tooltip.redo": "Wiederholen", + "tooltip.toggle virtual keyboard": "Virtuelle Tastatur umschalten", + "tooltip.undo": "Widerrufen", + "menu.insert matrix": "Matrix einf\xFCgen", + "menu.borders": "Matrixtrennzeichen", + "menu.array.add row above": "Zeile hinzuf\xFCgen nach", + "menu.array.add row below": "Zeile hinzuf\xFCgen vor", + "menu.array.add column after": "Spalte hinzuf\xFCgen nach", + "menu.array.add column before": "Spalte hinzuf\xFCgen vor", + "menu.array.delete row": "Zeile l\xF6schen", + "menu.array.delete rows": "Ausgew\xE4hlte Zeilen l\xF6schen", + "menu.array.delete column": "Spalte l\xF6schen", + "menu.array.delete columns": "Ausgew\xE4hlte Spalten l\xF6schen", + "menu.mode": "Modus", + "menu.mode-math": "Mathematik", + "menu.mode-text": "Text", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "Tafel", + "tooltip.bold": "Fett", + "tooltip.italic": "Kursiv", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Skript", + "tooltip.caligraphic": "Kalligraphie", + "tooltip.typewriter": "Schreibmaschine", + "tooltip.roman-upright": "R\xF6misch aufrecht", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Schriftstil", + "menu.accent": "Akzent", + "menu.decoration": "Dekoration", + "menu.color": "Farbe", + "menu.background-color": "Hintergrund", + "menu.evaluate": "Auswerten", + "menu.simplify": "Vereinfachen", + "menu.solve": "L\xF6sen", + "menu.solve-for": "L\xF6sen f\xFCr %@", + "menu.cut": "Ausschneiden", + "menu.copy": "Kopieren", + "menu.copy-as-latex": "Als LaTeX kopieren", + "menu.copy-as-ascii-math": "Als ASCII Math kopieren", + "menu.copy-as-mathml": "Als MathML kopieren", + "menu.paste": "Einf\xFCgen", + "menu.select-all": "Alles ausw\xE4hlen", + // Colors (accessible labels in color swatches) + "color.red": "Rot", + "color.orange": "Orange", + "color.yellow": "Gelb", + "color.lime": "Limette", + "color.green": "Gr\xFCn", + "color.teal": "Blaugr\xFCn", + "color.cyan": "Cyan", + "color.blue": "Blau", + "color.indigo": "Indigo", + "color.purple": "Lila", + "color.magenta": "Magenta", + "color.black": "Schwarz", + "color.dark-grey": "Dunkelgrau", + "color.grey": "Grau", + "color.light-grey": "Hellgrau", + "color.white": "Wei\xDF" + }, + // Greek + "el": { + "keyboard.tooltip.symbols": "\u03C3\u03CD\u03BC\u03B2\u03BF\u03BB\u03B1", + "keyboard.tooltip.greek": "\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC \u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1", + "keyboard.tooltip.numeric": "\u0391\u03C1\u03B9\u03B8\u03BC\u03B7\u03C4\u03B9\u03BA\u03CC\u03C2", + "keyboard.tooltip.alphabetic": "\u03A1\u03C9\u03BC\u03B1\u03CA\u03BA\u03AC \u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1", + "tooltip.copy to clipboard": "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03BF \u03C0\u03C1\u03CC\u03C7\u03B5\u03B9\u03C1\u03BF", + "tooltip.redo": "\u039E\u03B1\u03BD\u03B1\u03BA\u03AC\u03BD\u03C9", + "tooltip.toggle virtual keyboard": "\u0395\u03BD\u03B1\u03BB\u03BB\u03B1\u03B3\u03AE \u03B5\u03B9\u03BA\u03BF\u03BD\u03B9\u03BA\u03BF\u03CD \u03C0\u03BB\u03B7\u03BA\u03C4\u03C1\u03BF\u03BB\u03BF\u03B3\u03AF\u03BF\u03C5", + "tooltip.undo": "\u039E\u03B5\u03BA\u03AC\u03BD\u03C9", + "menu.insert matrix": "\u0395\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE \u03BC\u03AE\u03C4\u03C1\u03B1", + "menu.borders": "\u039F\u03C1\u03B9\u03BF\u03B8\u03AD\u03C4\u03B5\u03C2 \u03BC\u03AE\u03C4\u03C1\u03B1", + "menu.array.add row above": "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03BC\u03B5\u03C4\u03AC", + "menu.array.add row below": "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2 \u03C0\u03C1\u03B9\u03BD", + "menu.array.add column after": "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 \u03BC\u03B5\u03C4\u03AC", + "menu.array.add column before": "\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 \u03C0\u03C1\u03B9\u03BD", + "menu.array.delete row": "\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03B5\u03B9\u03C1\u03AC\u03C2", + "menu.array.delete rows": "\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03C3\u03B5\u03B9\u03C1\u03CE\u03BD", + "menu.array.delete column": "\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2", + "menu.array.delete columns": "\u0394\u03B9\u03B1\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03C3\u03C4\u03B7\u03BB\u03CE\u03BD", + "menu.mode": "\u039B\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1", + "menu.mode-math": "\u039C\u03B1\u03B8\u03B7\u03BC\u03B1\u03C4\u03B9\u03BA\u03AC", + "menu.mode-text": "\u039A\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "\u03A0\u03AF\u03BD\u03B1\u03BA\u03B1\u03C2", + "tooltip.bold": "\u0388\u03BD\u03C4\u03BF\u03BD\u03B7", + "tooltip.italic": "\u03A0\u03BB\u03AC\u03B3\u03B9\u03B1", + "tooltip.fraktur": "\u03A6\u03C1\u03AC\u03BA\u03C4\u03BF\u03C5\u03C1", + "tooltip.script": "\u03A3\u03B5\u03BD\u03AC\u03C1\u03B9\u03BF", + "tooltip.caligraphic": "\u039A\u03B1\u03BB\u03BB\u03B9\u03B3\u03C1\u03B1\u03C6\u03B9\u03BA\u03AE", + "tooltip.typewriter": "\u039C\u03B7\u03C7\u03B1\u03BD\u03AE \u03B3\u03C1\u03B1\u03C6\u03AE\u03C2", + "tooltip.roman-upright": "\u03A1\u03C9\u03BC\u03B1\u03CA\u03BA\u03CC \u039A\u03B1\u03C4\u03B1\u03BA\u03CC\u03C1\u03C5\u03C6\u03BF", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u03A3\u03C4\u03C5\u03BB \u03B3\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC\u03C2", + "menu.accent": "\u03A4\u03CC\u03BD\u03BF\u03C2", + "menu.decoration": "\u0394\u03B9\u03B1\u03BA\u03CC\u03C3\u03BC\u03B7\u03C3\u03B7", + "menu.color": "\u03A7\u03C1\u03CE\u03BC\u03B1", + "menu.background-color": "\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C6\u03CC\u03BD\u03C4\u03BF\u03C5", + "menu.evaluate": "\u0391\u03BE\u03B9\u03BF\u03BB\u03CC\u03B3\u03B7\u03C3\u03B7", + "menu.simplify": "\u0391\u03C0\u03BB\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7", + "menu.solve": "\u039B\u03CD\u03C3\u03B7", + "menu.solve-for": "\u039B\u03CD\u03C3\u03B7 \u03B3\u03B9\u03B1 %@", + "menu.cut": "\u0391\u03C0\u03BF\u03BA\u03BF\u03C0\u03AE", + "menu.copy": "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE", + "menu.copy-as-latex": "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 LaTeX", + "menu.copy-as-ascii-math": "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 ASCII Math", + "menu.copy-as-mathml": "\u0391\u03BD\u03C4\u03B9\u03B3\u03C1\u03B1\u03C6\u03AE \u03C9\u03C2 MathML", + "menu.paste": "\u0395\u03C0\u03B9\u03BA\u03CC\u03BB\u03BB\u03B7\u03C3\u03B7", + "menu.select-all": "\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03CC\u03BB\u03C9\u03BD", + // Colors (accessible labels in color swatches) + "color.red": "\u039A\u03CC\u03BA\u03BA\u03B9\u03BD\u03BF", + "color.orange": "\u03A0\u03BF\u03C1\u03C4\u03BF\u03BA\u03B1\u03BB\u03AF", + "color.yellow": "\u039A\u03AF\u03C4\u03C1\u03B9\u03BD\u03BF", + "color.lime": "\u039B\u03B1\u03C7\u03B1\u03BD\u03AF", + "color.green": "\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF", + "color.teal": "\u039A\u03C5\u03B1\u03BD\u03CC", + "color.cyan": "\u0393\u03B1\u03BB\u03AC\u03B6\u03B9\u03BF", + "color.blue": "\u039C\u03C0\u03BB\u03B5", + "color.indigo": "\u0399\u03BD\u03B4\u03B9\u03BA\u03CC", + "color.purple": "\u039C\u03C9\u03B2", + "color.magenta": "\u039C\u03B1\u03C4\u03B6\u03AD\u03BD\u03C4\u03B1", + "color.black": "\u039C\u03B1\u03CD\u03C1\u03BF", + "color.dark-grey": "\u03A3\u03BA\u03BF\u03CD\u03C1\u03BF \u0393\u03BA\u03C1\u03B9", + "color.grey": "\u0393\u03BA\u03C1\u03B9", + "color.light-grey": "\u0391\u03BD\u03BF\u03B9\u03C7\u03C4\u03CC \u0393\u03BA\u03C1\u03B9", + "color.white": "\u039B\u03B5\u03C5\u03BA\u03CC" + }, + // Spanish + "es": { + "keyboard.tooltip.symbols": "S\xEDmbolos", + "keyboard.tooltip.greek": "Letras griegas", + "keyboard.tooltip.numeric": "Num\xE9rico", + "keyboard.tooltip.alphabetic": "Letras romanas", + "tooltip.copy to clipboard": "Copiar al portapapeles", + "tooltip.redo": "Rehacer", + "tooltip.toggle virtual keyboard": "Alternar teclado virtual", + "tooltip.undo": "Deshacer", + "menu.insert matrix": "A\xF1adir Matriz", + "menu.borders": "Delimitadores de Matriz", + "menu.array.add row above": "A\xF1adir L\xEDnea Antes", + "menu.array.add row below": "A\xF1adir L\xEDnea Despues", + "menu.array.add column after": "A\xF1adir Columna Despues", + "menu.array.add column before": "A\xF1adir Columna Antes", + "menu.array.delete row": "Borrar L\xEDnea", + "menu.array.delete rows": "Borrar L\xEDneas Seleccionadas", + "menu.array.delete column": "Borrar Columna", + "menu.array.delete columns": "Borrar Columnas Seleccionadas", + "menu.mode": "Modo", + "menu.mode-math": "Matem\xE1ticas", + "menu.mode-text": "Texto", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "Pizarra", + "tooltip.bold": "Negrita", + "tooltip.italic": "Cursiva", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Script", + "tooltip.caligraphic": "Caligr\xE1fico", + "tooltip.typewriter": "M\xE1quina de escribir", + "tooltip.roman-upright": "Romano Vertical", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Estilo de fuente", + "menu.accent": "Acento", + "menu.decoration": "Decoraci\xF3n", + "menu.color": "Color", + "menu.background-color": "Fondo", + "menu.evaluate": "Evaluar", + "menu.simplify": "Simplificar", + "menu.solve": "Resolver", + "menu.solve-for": "Resolver para %@", + "menu.cut": "Cortar", + "menu.copy": "Copiar", + "menu.copy-as-latex": "Copiar como LaTeX", + "menu.copy-as-ascii-math": "Copiar como ASCII Math", + "menu.copy-as-mathml": "Copiar como MathML", + "menu.paste": "Pegar", + "menu.select-all": "Seleccionar todo", + // Colors (accessible labels in color swatches) + "color.red": "Rojo", + "color.orange": "Naranja", + "color.yellow": "Amarillo", + "color.lime": "Lima", + "color.green": "Verde", + "color.teal": "Verde azulado", + "color.cyan": "Cian", + "color.blue": "Azul", + "color.indigo": "\xCDndigo", + "color.purple": "Morado", + "color.magenta": "Magenta", + "color.black": "Negro", + "color.dark-grey": "Gris oscuro", + "color.grey": "Gris", + "color.light-grey": "Gris claro", + "color.white": "Blanco" + }, + // French + "fr": { + "keyboard.tooltip.symbols": "Symboles", + "keyboard.tooltip.greek": "Lettres grecques", + "keyboard.tooltip.numeric": "Num\xE9rique", + "keyboard.tooltip.alphabetic": "Lettres romaines", + "tooltip.menu": "Menu", + "tooltip.copy to clipboard": "Copier dans le presse-papiers", + "tooltip.redo": "R\xE9tablir", + "tooltip.toggle virtual keyboard": "Afficher/Masquer le clavier virtuel", + "tooltip.undo": "Annuler", + "menu.insert matrix": "Ins\xE9rer une Matrice", + "menu.borders": "Bords", + "menu.array.add row above": "Ajouter une Ligne Avant", + "menu.array.add row below": "Ajouter une Ligne Apr\xE8s", + "menu.array.add column before": "Ajouter une Colonne Avant", + "menu.array.add column after": "Ajouter une Colonne Apr\xE8s", + "menu.array.delete row": "Enlever une Ligne", + "menu.array.delete rows": "Enlever les Lignes S\xE9lection\xE9es", + "menu.array.delete column": "Enlever une Colone", + "menu.array.delete columns": "Enlever les Colonnes S\xE9lection\xE9es", + "menu.mode": "Mode", + "menu.mode-math": "Math", + "menu.mode-text": "Text", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "Tableau noir", + "tooltip.bold": "Gras", + "tooltip.italic": "Italique", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Script", + "tooltip.caligraphic": "Calligraphique", + "tooltip.typewriter": "Machine \xE0 \xE9crire", + "tooltip.roman-upright": "Romain droit", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Style de police", + "menu.accent": "Accent", + "menu.decoration": "D\xE9coration", + "menu.color": "Couleur", + "menu.background-color": "Arri\xE8re-plan", + "menu.evaluate": "\xC9valuer", + "menu.simplify": "Simplifier", + "menu.solve": "R\xE9soudre", + "menu.solve-for": "R\xE9soudre pour %@", + "menu.cut": "Couper", + "menu.copy": "Copier", + "menu.copy-as-latex": "Copier en LaTeX", + "menu.copy-as-ascii-math": "Copier en ASCII Math", + "menu.copy-as-mathml": "Copier en MathML", + "menu.paste": "Coller", + "menu.select-all": "S\xE9lectionner tout", + // Colors (accessible labels in color swatches) + "color.red": "Rouge", + "color.orange": "Orange", + "color.yellow": "Jaune", + "color.lime": "Citron vert", + "color.green": "Vert", + "color.teal": "Turquoise", + "color.cyan": "Cyan", + "color.blue": "Bleu", + "color.indigo": "Indigo", + "color.purple": "Violet", + "color.magenta": "Magenta", + "color.black": "Noir", + "color.dark-grey": "Gris fonc\xE9", + "color.grey": "Gris", + "color.light-grey": "Gris clair", + "color.white": "Blanc" + }, + // Hebrew (Israel) + "he": { + "keyboard.tooltip.symbols": "\u05E1\u05DE\u05DC\u05D9\u05DD", + "keyboard.tooltip.greek": "\u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05D9\u05D5\u05D5\u05E0\u05D9\u05D5\u05EA", + "keyboard.tooltip.numeric": "\u05DE\u05E1\u05E4\u05E8\u05D9", + "keyboard.tooltip.alphabetic": "\u05DE\u05DB\u05EA\u05D1\u05D9\u05DD \u05E8\u05D5\u05DE\u05D9\u05D9\u05DD", + "tooltip.copy to clipboard": "\u05D4\u05E2\u05EA\u05E7 \u05DC\u05DC\u05D5\u05D7", + "tooltip.redo": "\u05DC\u05B7\u05E2\u05B2\u05E9\u05C2\u05D5\u05B9\u05EA \u05E9\u05C1\u05D5\u05BC\u05D1", + "tooltip.toggle virtual keyboard": "\u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA \u05D4\u05DE\u05E7\u05DC\u05D3\u05EA \u05D4\u05D5\u05D5\u05D9\u05E8\u05D8\u05D5\u05D0\u05DC\u05D9\u05EA", + "tooltip.undo": "\u05DC\u05D1\u05D8\u05DC", + "menu.insert matrix": "\u05D4\u05DB\u05E0\u05E1 \u05DE\u05D8\u05E8\u05D9\u05E7\u05E1", + "menu.borders": "\u05DE\u05E4\u05E8\u05D9\u05D3\u05D9 \u05DE\u05D8\u05E8\u05D9\u05E7\u05E1", + "menu.array.add row above": "\u05D4\u05D5\u05E1\u05E3 \u05E9\u05D5\u05E8\u05D4 \u05D0\u05D7\u05E8\u05D9", + "menu.array.add row below": "\u05D4\u05D5\u05E1\u05E3 \u05E9\u05D5\u05E8\u05D4 \u05DC\u05E4\u05E0\u05D9", + "menu.array.add column after": "\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3\u05D4 \u05D0\u05D7\u05E8\u05D9", + "menu.array.add column before": "\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3\u05D4 \u05DC\u05E4\u05E0\u05D9", + "menu.array.delete row": "\u05DE\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D4", + "menu.array.delete rows": "\u05DE\u05D7\u05E7 \u05E9\u05D5\u05E8\u05D5\u05EA \u05E9\u05E0\u05D1\u05D7\u05E8\u05D5", + "menu.array.delete column": "\u05DE\u05D7\u05E7 \u05E2\u05DE\u05D5\u05D3\u05D4", + "menu.array.delete columns": "\u05DE\u05D7\u05E7 \u05E2\u05DE\u05D5\u05D3\u05D5\u05EA \u05E9\u05E0\u05D1\u05D7\u05E8\u05D5", + "menu.mode": "\u05DE\u05E6\u05D1", + "menu.mode-math": "\u05DE\u05EA\u05DE\u05D8\u05D9\u05E7\u05D4", + "menu.mode-text": "\u05D8\u05E7\u05E1\u05D8", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "\u05DC\u05D5\u05D7 \u05E9\u05D7\u05D5\u05E8", + "tooltip.bold": "\u05DE\u05D5\u05D3\u05D2\u05E9", + "tooltip.italic": "\u05E0\u05D8\u05D5\u05D9", + "tooltip.fraktur": "\u05E4\u05E8\u05E7\u05D8\u05D5\u05E8", + "tooltip.script": "\u05DB\u05EA\u05D1", + "tooltip.caligraphic": "\u05E7\u05DC\u05D9\u05D2\u05E8\u05E4\u05D9", + "tooltip.typewriter": "\u05DE\u05DB\u05D5\u05E0\u05EA \u05DB\u05EA\u05D9\u05D1\u05D4", + "tooltip.roman-upright": "\u05E8\u05D5\u05DE\u05D9 \u05D9\u05E9\u05E8", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u05E1\u05D2\u05E0\u05D5\u05DF \u05D2\u05D5\u05E4\u05DF", + "menu.accent": "\u05E6\u05DC\u05D9\u05DC", + "menu.decoration": "\u05E7\u05D9\u05E9\u05D5\u05D8", + "menu.color": "\u05E6\u05D1\u05E2", + "menu.background-color": "\u05E8\u05E7\u05E2", + "menu.evaluate": "\u05D7\u05E9\u05D1", + "menu.simplify": "\u05E4\u05E9\u05D8", + "menu.solve": "\u05E4\u05EA\u05D5\u05E8", + "menu.solve-for": "\u05E4\u05EA\u05D5\u05E8 \u05E2\u05D1\u05D5\u05E8 %@", + "menu.cut": "\u05D2\u05D6\u05D5\u05E8", + "menu.copy": "\u05D4\u05E2\u05EA\u05E7", + "menu.copy-as-latex": "\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BELaTeX", + "menu.copy-as-ascii-math": "\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BEASCII Math", + "menu.copy-as-mathml": "\u05D4\u05E2\u05EA\u05E7 \u05DB\u05BEMathML", + "menu.paste": "\u05D4\u05D3\u05D1\u05E7", + "menu.select-all": "\u05D1\u05D7\u05E8 \u05D4\u05DB\u05DC", + // Colors (accessible labels in color swatches) + "color.red": "\u05D0\u05D3\u05D5\u05DD", + "color.orange": "\u05DB\u05EA\u05D5\u05DD", + "color.yellow": "\u05E6\u05D4\u05D5\u05D1", + "color.lime": "\u05D9\u05E8\u05D5\u05E7 \u05DC\u05D9\u05D9\u05DD", + "color.green": "\u05D9\u05E8\u05D5\u05E7", + "color.teal": "\u05D8\u05D9\u05DC", + "color.cyan": "\u05E6\u05D9\u05D0\u05DF", + "color.blue": "\u05DB\u05D7\u05D5\u05DC", + "color.indigo": "\u05D0\u05D9\u05E0\u05D3\u05D9\u05D2\u05D5", + "color.purple": "\u05E1\u05D2\u05D5\u05DC", + "color.magenta": "\u05DE\u05D2\u05E0\u05D8\u05D4", + "color.black": "\u05E9\u05D7\u05D5\u05E8", + "color.dark-grey": "\u05D0\u05E4\u05D5\u05E8 \u05DB\u05D4\u05D4", + "color.grey": "\u05D0\u05E4\u05D5\u05E8", + "color.light-grey": "\u05D0\u05E4\u05D5\u05E8 \u05D1\u05D4\u05D9\u05E8", + "color.white": "\u05DC\u05D1\u05DF" + }, + // Italian + "it": { + "keyboard.tooltip.symbols": "Simboli", + "keyboard.tooltip.greek": "Lettere greche", + "keyboard.tooltip.numeric": "Numerico", + "keyboard.tooltip.alphabetic": "Lettere romane", + "tooltip.copy to clipboard": "Copia negli appunti", + "tooltip.cut to clipboard": "Taglia negli appunti", + "tooltip.paste from clipboard": "Incolla dagli appunti", + "tooltip.redo": "Ripeti", + "tooltip.toggle virtual keyboard": "Attiva/disattiva tastiera virtuale", + "tooltip.menu": "Menu", + "tooltip.undo": "Annulla", + "menu.borders": "Delimitatori", + "menu.insert matrix": "Inserisci matrice", + "menu.array.add row above": "Aggiungi riga sopra", + "menu.array.add row below": "Aggiungi riga sotto", + "menu.array.add column after": "Aggiungi colonna dopo", + "menu.array.add column before": "Aggiungi colonna prima", + "menu.array.delete row": "Elimina riga", + "menu.array.delete rows": "Elimina righe selezionate", + "menu.array.delete column": "Elimina colonna", + "menu.array.delete columns": "Elimina colonne selezionate", + "menu.mode": "Modalit\xE0", + "menu.mode-math": "Matematica", + "menu.mode-text": "Testo", + "menu.mode-latex": "LaTeX", + "menu.insert": "Inserisci", + "menu.insert.abs": "Valore assoluto", + "menu.insert.abs-template": "\\left|x\\right|", + "menu.insert.nth-root": "Radice n-esima", + "menu.insert.nth-root-template": "\\sqrt[n]{x}", + "menu.insert.log-base": "Logaritmo in base a", + "menu.insert.log-base-template": "\\log_a(x)", + "menu.insert.heading-calculus": "Calcolo", + "menu.insert.derivative": "Derivata", + "menu.insert.derivative-template": "\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}", + "menu.insert.nth-derivative": "Derivata n-esima", + "menu.insert.nth-derivative-template": "\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}", + "menu.insert.integral": "Integrale", + "menu.insert.integral-template": "$\\int_a^b f(x)\\,\\mathrm{d}x$", + "menu.insert.sum": "Somma", + "menu.insert.sum-template": "$\\sum_{i=1}^n x_i$", + "menu.insert.product": "Prodotto", + "menu.insert.product-template": "\\prod_{i=1}^n x_i", + "menu.insert.heading-complex-numbers": "Numeri complessi", + "menu.insert.modulus": "Modulo", + "menu.insert.modulus-template": "\\lvert z \\rvert", + "menu.insert.argument": "Argomento", + "menu.insert.argument-template": "\\arg(z)", + "menu.insert.real-part": "Parte reale", + "menu.insert.real-part-template": "\\Re(z)", + "menu.insert.imaginary-part": "Parte immaginaria", + "menu.insert.imaginary-part-template": "\\Im(z)", + "menu.insert.conjugate": "Coniugato", + "menu.insert.conjugate-template": "\\overline{z}", + "tooltip.blackboard": "Lavagna", + "tooltip.bold": "Grassetto", + "tooltip.italic": "Corsivo", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Script", + "tooltip.caligraphic": "Calligrafico", + "tooltip.typewriter": "Macchina da scrivere", + "tooltip.roman-upright": "Romano diritto", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Stile carattere", + "menu.accent": "Accento", + "menu.decoration": "Decorazione", + "menu.color": "Colore", + "menu.background-color": "Sfondo", + "menu.evaluate": "Valuta", + "menu.simplify": "Semplifica", + "menu.solve": "Risolvi", + "menu.solve-for": "Risolvi per %@", + "menu.cut": "Taglia", + "menu.copy": "Copia", + "menu.copy-as-latex": "Copia come LaTeX", + "menu.copy-as-ascii-math": "Copia come ASCII Math", + "menu.copy-as-mathml": "Copia come MathML", + "menu.paste": "Incolla", + "menu.select-all": "Seleziona tutto", + "color.red": "Rosso", + "color.orange": "Arancione", + "color.yellow": "Giallo", + "color.lime": "Lime", + "color.green": "Verde", + "color.teal": "Verde acqua", + "color.cyan": "Ciano", + "color.blue": "Blu", + "color.indigo": "Indaco", + "color.purple": "Viola", + "color.magenta": "Magenta", + "color.black": "Nero", + "color.dark-grey": "Grigio scuro", + "color.grey": "Grigio", + "color.light-grey": "Grigio chiaro", + "color.white": "Bianco" + }, + // Japanese + "ja": { + "keyboard.tooltip.symbols": "\u30B7\u30F3\u30DC\u30EB", + "keyboard.tooltip.greek": "\u30AE\u30EA\u30B7\u30E3\u6587\u5B57", + "keyboard.tooltip.numeric": "\u6570\u5024", + "keyboard.tooltip.alphabetic": "\u30ED\u30FC\u30DE\u5B57", + "tooltip.menu": "\u30E1\u30CB\u30E5\u30FC", + "tooltip.copy to clipboard": "\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC", + "tooltip.redo": "\u3084\u308A\u76F4\u3057", + "tooltip.toggle virtual keyboard": "\u4EEE\u60F3\u30AD\u30FC\u30DC\u30FC\u30C9\u306E\u5207\u308A\u66FF\u3048", + "tooltip.undo": "\u5143\u306B\u623B\u3059", + "menu.insert matrix": "\u30DE\u30C8\u30EA\u30C3\u30AF\u30B9\u3092\u633F\u5165", + "menu.borders": "\u884C\u5217\u533A\u5207\u308A\u6587\u5B57", + "menu.array.add row above": "\u5F8C\u306B\u884C\u3092\u8FFD\u52A0", + "menu.array.add row below": "\u524D\u306B\u884C\u3092\u8FFD\u52A0", + "menu.array.add column after": "\u5F8C\u306B\u5217\u3092\u8FFD\u52A0", + "menu.array.add column before": "\u524D\u306B\u5217\u3092\u8FFD\u52A0", + "menu.array.delete row": "\u884C\u3092\u524A\u9664", + "menu.array.delete rows": "\u9078\u629E\u3057\u305F\u884C\u3092\u524A\u9664\u3059\u308B", + "menu.array.delete column": "\u5217\u3092\u524A\u9664", + "menu.array.delete columns": "\u9078\u629E\u3057\u305F\u5217\u3092\u524A\u9664\u3059\u308B", + "menu.mode": "\u30E2\u30FC\u30C9", + "menu.mode-math": "\u6570\u5F0F", + "menu.mode-text": "\u30C6\u30AD\u30B9\u30C8", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "\u9ED2\u677F", + "tooltip.bold": "\u592A\u5B57", + "tooltip.italic": "\u30A4\u30BF\u30EA\u30C3\u30AF", + "tooltip.fraktur": "\u30D5\u30E9\u30AF\u30C8\u30A5\u30FC\u30EB", + "tooltip.script": "\u30B9\u30AF\u30EA\u30D7\u30C8", + "tooltip.caligraphic": "\u30AB\u30EA\u30B0\u30E9\u30D5\u30A3\u30C3\u30AF", + "tooltip.typewriter": "\u30BF\u30A4\u30D7\u30E9\u30A4\u30BF\u30FC", + "tooltip.roman-upright": "\u30ED\u30FC\u30DE\u76F4\u7ACB", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u30D5\u30A9\u30F3\u30C8\u30B9\u30BF\u30A4\u30EB", + "menu.accent": "\u30A2\u30AF\u30BB\u30F3\u30C8", + "menu.decoration": "\u88C5\u98FE", + "menu.color": "\u8272", + "menu.background-color": "\u80CC\u666F", + "menu.evaluate": "\u8A55\u4FA1", + "menu.simplify": "\u7C21\u7565\u5316", + "menu.solve": "\u89E3\u304F", + "menu.solve-for": "%@ \u3092\u89E3\u304F", + "menu.cut": "\u5207\u308A\u53D6\u308A", + "menu.copy": "\u30B3\u30D4\u30FC", + "menu.copy-as-latex": "LaTeX\u3068\u3057\u3066\u30B3\u30D4\u30FC", + "menu.copy-as-ascii-math": "ASCII Math\u3068\u3057\u3066\u30B3\u30D4\u30FC", + "menu.copy-as-mathml": "MathML\u3068\u3057\u3066\u30B3\u30D4\u30FC", + "menu.paste": "\u8CBC\u308A\u4ED8\u3051", + "menu.select-all": "\u3059\u3079\u3066\u9078\u629E", + // Colors (accessible labels in color swatches) + "color.red": "\u8D64", + "color.orange": "\u30AA\u30EC\u30F3\u30B8", + "color.yellow": "\u9EC4\u8272", + "color.lime": "\u30E9\u30A4\u30E0", + "color.green": "\u7DD1", + "color.teal": "\u30C6\u30A3\u30FC\u30EB", + "color.cyan": "\u30B7\u30A2\u30F3", + "color.blue": "\u9752", + "color.indigo": "\u30A4\u30F3\u30C7\u30A3\u30B4", + "color.purple": "\u7D2B", + "color.magenta": "\u30DE\u30BC\u30F3\u30BF", + "color.black": "\u9ED2", + "color.dark-grey": "\u6FC3\u3044\u30B0\u30EC\u30FC", + "color.grey": "\u30B0\u30EC\u30FC", + "color.light-grey": "\u8584\u3044\u30B0\u30EC\u30FC", + "color.white": "\u767D" + }, + // Korean + "ko": { + "keyboard.tooltip.symbols": "\uAE30\uD638", + "keyboard.tooltip.greek": "\uADF8\uB9AC\uC2A4 \uBB38\uC790", + "keyboard.tooltip.numeric": "\uC22B\uC790", + "keyboard.tooltip.alphabetic": "\uB85C\uB9C8 \uBB38\uC790", + "tooltip.copy to clipboard": "\uD074\uB9BD \uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC", + "tooltip.redo": "\uB2E4\uC2DC \uC2E4\uD589", + "tooltip.toggle virtual keyboard": "\uAC00\uC0C1 \uD0A4\uBCF4\uB4DC \uC804\uD658", + "tooltip.undo": "\uC2E4\uD589 \uCDE8\uC18C", + "menu.insert matrix": "\uD589\uB82C \uC0BD\uC785", + "menu.borders": "\uD589\uB82C \uAD6C\uBD84 \uAE30\uD638", + "menu.array.add row above": "\uB4A4\uC5D0 \uD589 \uCD94\uAC00", + "menu.array.add row below": "\uC55E\uC5D0 \uD589 \uCD94\uAC00", + "menu.array.add column after": "\uB4A4\uC5D0 \uC5F4 \uCD94\uAC00", + "menu.array.add column before": "\uC55E\uC5D0 \uC5F4 \uCD94\uAC00", + "menu.array.delete row": "\uD589 \uC0AD\uC81C", + "menu.array.delete rows": "\uC120\uD0DD\uD55C \uD589 \uC0AD\uC81C", + "menu.array.delete column": "\uC5F4 \uC0AD\uC81C", + "menu.array.delete columns": "\uC120\uD0DD\uD55C \uC5F4 \uC0AD\uC81C", + // Modes - fixed by SRCreator + "menu.mode": "\uBAA8\uB4DC", + "menu.mode-math": "\uC218\uC2DD", + "menu.mode-text": "\uD14D\uC2A4\uD2B8", + "menu.mode-latex": "LaTeX", + // Tooltip and so on + "tooltip.blackboard": "\uCE60\uD310", + "tooltip.bold": "\uAD75\uAC8C", + "tooltip.italic": "\uC774\uD0E4\uB9AD", + "tooltip.fraktur": "\uD504\uB799\uD22C\uC5B4", + "tooltip.script": "\uCCA8\uC790", + "tooltip.caligraphic": "\uD544\uAE30\uCCB4", + "tooltip.typewriter": "\uD0C0\uC790\uAE30", + "tooltip.roman-upright": "\uC77C\uBC18 \uB85C\uB9C8\uC790", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\uAE00\uAF34 \uC2A4\uD0C0\uC77C", + "menu.accent": "\uBC1C\uC74C \uAE30\uD638", + "menu.decoration": "\uC7A5\uC2DD", + "menu.color": "\uC0C9\uC0C1", + "menu.background-color": "\uBC30\uACBD", + "menu.evaluate": "\uD3C9\uAC00", + "menu.simplify": "\uAC04\uC18C\uD654", + "menu.solve": "\uD574\uACB0", + "menu.solve-for": "%@\uC5D0 \uB300\uD574 \uD574\uACB0", + "menu.cut": "\uC798\uB77C\uB0B4\uAE30", + "menu.copy": "\uBCF5\uC0AC", + "menu.copy-as-latex": "LaTeX\uB85C \uBCF5\uC0AC", + "menu.copy-as-ascii-math": "ASCIIMath\uB85C \uBCF5\uC0AC", + "menu.copy-as-mathml": "MathML\uB85C \uBCF5\uC0AC", + "menu.paste": "\uBD99\uC5EC\uB123\uAE30", + "menu.select-all": "\uBAA8\uB450 \uC120\uD0DD", + // Colors (accessible labels in color swatches) + "color.red": "\uBE68\uAC15", + "color.orange": "\uC8FC\uD669", + "color.yellow": "\uB178\uB791", + "color.lime": "\uB77C\uC784", + "color.green": "\uCD08\uB85D", + "color.teal": "\uCCAD\uB85D", + "color.cyan": "\uCCAD\uC0C9", + "color.blue": "\uD30C\uB791", + "color.indigo": "\uB0A8\uC0C9", + "color.purple": "\uBCF4\uB77C", + "color.magenta": "\uC790\uD64D", + "color.black": "\uAC80\uC815", + "color.dark-grey": "\uC9C4\uD55C \uD68C\uC0C9", + "color.grey": "\uD68C\uC0C9", + "color.light-grey": "\uC5F0\uD55C \uD68C\uC0C9", + "color.white": "\uD770\uC0C9" + }, + // Polish + "pl": { + "keyboard.tooltip.symbols": "Symbolika", + "keyboard.tooltip.greek": "Litery greckie", + "keyboard.tooltip.numeric": "Numeryczne", + "keyboard.tooltip.alphabetic": "Litery rzymskie", + "tooltip.copy to clipboard": "Kopiuj do Schowka", + "tooltip.cut to clipboard": "Wytnij ze Schowka", + "tooltip.paste from clipboard": "Wklej ze Schowka", + "tooltip.redo": "Przywr\xF3\u0107", + "tooltip.toggle virtual keyboard": "Prze\u0142\u0105cz klawiatur\u0119 wirtualn\u0105", + "tooltip.menu": "Menu", + "tooltip.undo": "Cofnij", + "menu.borders": "Ograniczniki macierzy", + "menu.insert matrix": "Wstaw macierz", + "menu.array.add row above": "Dodaj wiersz przed", + "menu.array.add row below": "Dodaj wiersz po", + "menu.array.add column after": "Dodaj kolumn\u0119 po", + "menu.array.add column before": "Dodaj kolumn\u0119 przed", + "menu.array.delete row": "Usu\u0144 wiersz", + "menu.array.delete rows": "Usu\u0144 wybrane wiersze", + "menu.array.delete column": "Usu\u0144 kolumn\u0119", + "menu.array.delete columns": "Usu\u0144 wybrane kolumny", + "menu.mode": "Tryb", + "menu.mode-math": "Formu\u0142a", + "menu.mode-text": "Tekst", + "menu.mode-latex": "LaTeX", + "menu.insert": "Wstaw", + "menu.insert.abs": "Warto\u015B\u0107 bezwzgl\u0119dna", + "menu.insert.abs-template": "\\left|x\\right|", + "menu.insert.nth-root": "Pierwiastek n-tego stopnia", + "menu.insert.nth-root-template": "\\sqrt[n]{x}", + "menu.insert.log-base": "Logarytm o podstawie a", + "menu.insert.log-base-template": "\\log_a(x)", + "menu.insert.heading-calculus": "Rachunek r\xF3\u017Cniczkowy i ca\u0142kowy", + "menu.insert.derivative": "Pochodna", + "menu.insert.derivative-template": "\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}", + "menu.insert.nth-derivative": "Pochodna n-tego rz\u0119du", + "menu.insert.nth-derivative-template": "\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}", + "menu.insert.integral": "Ca\u0142ka", + "menu.insert.integral-template": "$\\int_a^b f(x)\\,\\mathrm{d}x$", + "menu.insert.sum": "Suma", + "menu.insert.sum-template": "$\\sum_{i=1}^n x_i$", + "menu.insert.product": "Iloczyn", + "menu.insert.product-template": "\\prod_{i=1}^n x_i", + "menu.insert.heading-complex-numbers": "Liczby zespolone", + "menu.insert.modulus": "Modu\u0142", + "menu.insert.modulus-template": "\\lvert z \\rvert", + "menu.insert.argument": "Argument", + "menu.insert.argument-template": "\\arg(z)", + "menu.insert.real-part": "Cz\u0119\u015B\u0107 rzeczywista", + "menu.insert.real-part-template": "\\Re(z)", + "menu.insert.imaginary-part": "Cz\u0119\u015B\u0107 urojona", + "menu.insert.imaginary-part-template": "\\Im(z)", + "menu.insert.conjugate": "Sprz\u0119\u017Cenie", + "menu.insert.conjugate-template": "\\overline{z}", + "tooltip.blackboard": "Tablica", + "tooltip.bold": "Pogrubienie", + "tooltip.italic": "Kursywa", + "tooltip.fraktur": "Fraktura", + "tooltip.script": "Skrypt", + "tooltip.caligraphic": "Kaligraficzny", + "tooltip.typewriter": "Maszynowy", + "tooltip.roman-upright": "Rzymski prosto", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Styl czcionki", + "menu.accent": "Akcent", + "menu.decoration": "Dekoracja", + "menu.color": "Kolor", + "menu.background-color": "T\u0142o", + "menu.evaluate": "Oblicz", + "menu.simplify": "Upro\u015B\u0107", + "menu.solve": "Rozwi\u0105\u017C", + "menu.solve-for": "Rozwi\u0105\u017C dla %@", + "menu.cut": "Wytnij", + "menu.copy": "Kopiuj", + "menu.copy-as-latex": "Kopiuj jako LaTeX", + "menu.copy-as-ascii-math": "Kopiuj jako ASCII Math", + "menu.copy-as-mathml": "Kopiuj jako MathML", + "menu.paste": "Wklej", + "menu.select-all": "Zaznacz wszystko", + // Colors (accessible labels in color swatches) + "color.red": "Czerwony", + "color.orange": "Pomara\u0144czowy", + "color.yellow": "\u017B\xF3\u0142ty", + "color.lime": "Limetkowy", + "color.green": "Zielony", + "color.teal": "Turkusowy", + "color.cyan": "Cyjan", + "color.blue": "Niebieski", + "color.indigo": "Indygo", + "color.purple": "Fioletowy", + "color.magenta": "Magenta", + "color.black": "Czarny", + "color.dark-grey": "Ciemnoszary", + "color.grey": "Szary", + "color.light-grey": "Jasnoszary", + "color.white": "Bia\u0142y" + }, + // Portuguese + "pt": { + "keyboard.tooltip.symbols": "S\xEDmbolos", + "keyboard.tooltip.greek": "Letras gregas", + "keyboard.tooltip.numeric": "Num\xE9rico", + "keyboard.tooltip.alphabetic": "Letras romanas", + "tooltip.copy to clipboard": "Copiar para \xE1rea de transfer\xEAncia", + "tooltip.redo": "Refazer", + "tooltip.toggle virtual keyboard": "Alternar teclado virtual", + "tooltip.undo": "Desfazer", + "menu.insert matrix": "Inserir Matriz", + "menu.borders": "Delimitadores de matriz", + "menu.array.add row above": "Adicionar linha depois", + "menu.array.add row below": "Adicionar linha antes", + "menu.array.add column after": "Adicionar coluna depois", + "menu.array.add column before": "Adicionar coluna antes", + "menu.array.delete row": "Excluir linha", + "menu.array.delete rows": "Excluir linhas selecionadas", + "menu.array.delete column": "Apagar Coluna", + "menu.array.delete columns": "Excluir Colunas Selecionadas", + "menu.mode": "Modo", + "menu.mode-math": "F\xF3rmula", + "menu.mode-text": "Texto", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "Quadro Negro", + "tooltip.bold": "Negrito", + "tooltip.italic": "It\xE1lico", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "Script", + "tooltip.caligraphic": "Caligr\xE1fico", + "tooltip.typewriter": "M\xE1quina de Escrever", + "tooltip.roman-upright": "Romano Vertical", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "Estilo da Fonte", + "menu.accent": "Acento", + "menu.decoration": "Decora\xE7\xE3o", + "menu.color": "Cor", + "menu.background-color": "Cor de Fundo", + "menu.evaluate": "Avaliar", + "menu.simplify": "Simplificar", + "menu.solve": "Resolver", + "menu.solve-for": "Resolver para %@", + "menu.cut": "Recortar", + "menu.copy": "Copiar", + "menu.copy-as-latex": "Copiar como LaTeX", + "menu.copy-as-ascii-math": "Copiar como ASCII Math", + "menu.copy-as-mathml": "Copiar como MathML", + "menu.paste": "Colar", + "menu.select-all": "Selecionar Tudo", + // Colors (accessible labels in color swatches) + "color.red": "Vermelho", + "color.orange": "Laranja", + "color.yellow": "Amarelo", + "color.lime": "Verde Lima", + "color.green": "Verde", + "color.teal": "Verde-azulado", + "color.cyan": "Ciano", + "color.blue": "Azul", + "color.indigo": "\xCDndigo", + "color.purple": "Roxo", + "color.magenta": "Magenta", + "color.black": "Preto", + "color.dark-grey": "Cinza Escuro", + "color.grey": "Cinza", + "color.light-grey": "Cinza Claro", + "color.white": "Branco" + }, + //Ukrainian + "uk": { + "keyboard.tooltip.symbols": "\u0421\u0438\u043C\u0432\u043E\u043B\u0438", + "keyboard.tooltip.greek": "\u0413\u0440\u0435\u0446\u044C\u043A\u0456 \u043B\u0456\u0442\u0435\u0440\u0438", + "keyboard.tooltip.numeric": "\u0427\u0438\u0441\u043B\u043E\u0432\u0438\u0439", + "keyboard.tooltip.alphabetic": "\u0420\u0438\u043C\u0441\u044C\u043A\u0456 \u043B\u0456\u0442\u0435\u0440\u0438", + "tooltip.copy to clipboard": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443", + "tooltip.cut to clipboard": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443", + "tooltip.paste from clipboard": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u043E\u0431\u043C\u0456\u043D\u0443", + "tooltip.redo": "\u041F\u043E\u0432\u0442\u043E\u0440\u0438\u0442\u0438", + "tooltip.toggle virtual keyboard": "\u041F\u0435\u0440\u0435\u043A\u043B\u044E\u0447\u0438\u0442\u0438 \u0432\u0456\u0440\u0442\u0443\u0430\u043B\u044C\u043D\u0443 \u043A\u043B\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443", + "tooltip.menu": "\u041C\u0435\u043D\u044E", + "tooltip.undo": "\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438", + "menu.borders": "\u041C\u0435\u0436\u0456", + "menu.insert matrix": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u043C\u0430\u0442\u0440\u0438\u0446\u044E", + "menu.array.add row above": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0440\u044F\u0434\u043E\u043A \u043F\u0435\u0440\u0435\u0434", + "menu.array.add row below": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0440\u044F\u0434\u043E\u043A \u043F\u0456\u0441\u043B\u044F", + "menu.array.add column after": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043F\u0456\u0441\u043B\u044F", + "menu.array.add column before": "\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043F\u0435\u0440\u0435\u0434", + "menu.array.delete row": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0440\u044F\u0434\u043E\u043A", + "menu.array.delete rows": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0440\u044F\u0434\u043A\u0438", + "menu.array.delete column": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C", + "menu.array.delete columns": "\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456", + "menu.mode": "\u0420\u0435\u0436\u0438\u043C", + "menu.mode-math": "\u041C\u0430\u0442\u0435\u043C\u0430\u0442\u0438\u043A\u0430", + "menu.mode-text": "\u0422\u0435\u043A\u0441\u0442", + "menu.mode-latex": "LaTeX", + "menu.insert": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438", + "menu.insert.abs": "\u0410\u0431\u0441\u043E\u043B\u044E\u0442\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F", + "menu.insert.abs-template": "\\left|x\\right|", + "menu.insert.nth-root": "\u041A\u043E\u0440\u0456\u043D\u044C n-\u0433\u043E \u0441\u0442\u0435\u043F\u0435\u043D\u044F", + "menu.insert.nth-root-template": "\\sqrt[n]{x}", + "menu.insert.log-base": "\u041B\u043E\u0433\u0430\u0440\u0438\u0444\u043C \u0437\u0430 \u043E\u0441\u043D\u043E\u0432\u043E\u044E a", + "menu.insert.log-base-template": "\\log_a(x)", + "menu.insert.heading-calculus": "\u041E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F", + "menu.insert.derivative": "\u041F\u043E\u0445\u0456\u0434\u043D\u0430", + "menu.insert.derivative-template": "\\dfrac{\\mathrm{d}}{\\mathrm{d}x}f(x)\\bigm|_{x=a}", + "menu.insert.nth-derivative": "\u041F\u043E\u0445\u0456\u0434\u043D\u0430 n-\u0433\u043E \u043F\u043E\u0440\u044F\u0434\u043A\u0443", + "menu.insert.nth-derivative-template": "\\dfrac{\\mathrm{d}^n}{\\mathrm{d}x^n}f(x)\\bigm|_{x=a}", + "menu.insert.integral": "\u0406\u043D\u0442\u0435\u0433\u0440\u0430\u043B", + "menu.insert.integral-template": "$\\int_a^b f(x)\\,\\mathrm{d}x$", + "menu.insert.sum": "\u0421\u0443\u043C\u0430", + "menu.insert.sum-template": "$\\sum_{i=1}^n x_i$", + "menu.insert.product": "\u0414\u043E\u0431\u0443\u0442\u043E\u043A", + "menu.insert.product-template": "\\prod_{i=1}^n x_i", + "menu.insert.heading-complex-numbers": "\u041A\u043E\u043C\u043F\u043B\u0435\u043A\u0441\u043D\u0456 \u0447\u0438\u0441\u043B\u0430", + "menu.insert.modulus": "\u041C\u043E\u0434\u0443\u043B\u044C", + "menu.insert.modulus-template": "\\lvert z \\rvert", + "menu.insert.argument": "\u0410\u0440\u0433\u0443\u043C\u0435\u043D\u0442", + "menu.insert.argument-template": "\\arg(z)", + "menu.insert.real-part": "\u0414\u0456\u0439\u0441\u043D\u0430 \u0447\u0430\u0441\u0442\u0438\u043D\u0430", + "menu.insert.real-part-template": "\\Re(z)", + "menu.insert.imaginary-part": "\u0423\u044F\u0432\u043D\u0430 \u0447\u0430\u0441\u0442\u0438\u043D\u0430", + "menu.insert.imaginary-part-template": "\\Im(z)", + "menu.insert.conjugate": "\u0421\u043F\u0440\u044F\u0436\u0435\u043D\u0435 \u0447\u0438\u0441\u043B\u043E", + "menu.insert.conjugate-template": "\\overline{z}", + "tooltip.blackboard": "\u0414\u043E\u0448\u043A\u0430", + "tooltip.bold": "\u0416\u0438\u0440\u043D\u0438\u0439", + "tooltip.italic": "\u041A\u0443\u0440\u0441\u0438\u0432", + "tooltip.fraktur": "\u0424\u0440\u0430\u043A\u0442\u0443\u0440\u043D\u0438\u0439", + "tooltip.script": "\u0420\u0443\u043A\u043E\u043F\u0438\u0441\u043D\u0438\u0439", + "tooltip.caligraphic": "\u041A\u0430\u043B\u0456\u0433\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439", + "tooltip.typewriter": "\u0414\u0440\u0443\u043A\u0430\u0440\u0441\u044C\u043A\u0438\u0439", + "tooltip.roman-upright": "\u041F\u0440\u044F\u043C\u0438\u0439 \u0440\u0438\u043C\u0441\u044C\u043A\u0438\u0439", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u0421\u0442\u0438\u043B\u044C \u0448\u0440\u0438\u0444\u0442\u0443", + "menu.accent": "\u0410\u043A\u0446\u0435\u043D\u0442", + "menu.decoration": "\u041E\u0444\u043E\u0440\u043C\u043B\u0435\u043D\u043D\u044F", + "menu.color": "\u041A\u043E\u043B\u0456\u0440", + "menu.background-color": "\u0424\u043E\u043D", + "menu.evaluate": "\u041E\u0431\u0447\u0438\u0441\u043B\u0438\u0442\u0438", + "menu.simplify": "\u0421\u043F\u0440\u043E\u0441\u0442\u0438\u0442\u0438", + "menu.solve": "\u0420\u043E\u0437\u0432\u2019\u044F\u0437\u0430\u0442\u0438", + "menu.solve-for": "\u0420\u043E\u0437\u0432\u2019\u044F\u0437\u0430\u0442\u0438 \u0434\u043B\u044F %@", + "menu.cut": "\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438", + "menu.copy": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438", + "menu.copy-as-latex": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A LaTeX", + "menu.copy-as-ascii-math": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A ASCII Math", + "menu.copy-as-mathml": "\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u044F\u043A MathML", + "menu.paste": "\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438", + "menu.select-all": "\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0432\u0441\u0435", + // Colors (accessible labels in color swatches) + "color.red": "\u0427\u0435\u0440\u0432\u043E\u043D\u0438\u0439", + "color.orange": "\u041F\u043E\u043C\u0430\u0440\u0430\u043D\u0447\u0435\u0432\u0438\u0439", + "color.yellow": "\u0416\u043E\u0432\u0442\u0438\u0439", + "color.lime": "\u041B\u0430\u0439\u043C\u043E\u0432\u0438\u0439", + "color.green": "\u0417\u0435\u043B\u0435\u043D\u0438\u0439", + "color.teal": "\u0411\u0456\u0440\u044E\u0437\u043E\u0432\u0438\u0439", + "color.cyan": "\u0421\u0438\u043D\u044C\u043E-\u0437\u0435\u043B\u0435\u043D\u0438\u0439", + "color.blue": "\u0421\u0438\u043D\u0456\u0439", + "color.indigo": "\u0406\u043D\u0434\u0438\u0433\u043E", + "color.purple": "\u0424\u0456\u043E\u043B\u0435\u0442\u043E\u0432\u0438\u0439", + "color.magenta": "\u041F\u0443\u0440\u043F\u0443\u0440\u043D\u0438\u0439", + "color.black": "\u0427\u043E\u0440\u043D\u0438\u0439", + "color.dark-grey": "\u0422\u0435\u043C\u043D\u043E-\u0441\u0456\u0440\u0438\u0439", + "color.grey": "\u0421\u0456\u0440\u0438\u0439", + "color.light-grey": "\u0421\u0432\u0456\u0442\u043B\u043E-\u0441\u0456\u0440\u0438\u0439", + "color.white": "\u0411\u0456\u043B\u0438\u0439" + }, + // Simplified Chinese + "zh-cn": { + "keyboard.tooltip.symbols": "\u7B26\u53F7", + "keyboard.tooltip.greek": "\u5E0C\u814A\u5B57\u6BCD", + "keyboard.tooltip.numeric": "\u6570\u5B57", + "keyboard.tooltip.alphabetic": "\u7F57\u9A6C\u5B57\u6BCD", + "tooltip.copy to clipboard": "\u590D\u5236\u5230\u526A\u8D34\u677F", + "tooltip.redo": "\u91CD\u505A", + "tooltip.toggle virtual keyboard": "\u5207\u6362\u865A\u62DF\u952E\u76D8", + "tooltip.undo": "\u64A4\u6D88", + "menu.insert matrix": "\u63D2\u5165\u77E9\u9635", + "menu.borders": "\u77E9\u9635\u5206\u9694\u7B26", + "menu.array.add row above": "\u5728\u540E\u9762\u6DFB\u52A0\u884C", + "menu.array.add row below": "\u5728\u524D\u9762\u6DFB\u52A0\u884C", + "menu.array.add column after": "\u5728\u540E\u9762\u6DFB\u52A0\u5217r", + "menu.array.add column before": "\u5728\u524D\u9762\u6DFB\u52A0\u5217", + "menu.array.delete row": "\u5220\u9664\u884C", + "menu.array.delete rows": "\u5220\u9664\u9009\u5B9A\u884C", + "menu.array.delete column": "\u5220\u9664\u5217", + "menu.array.delete columns": "\u5220\u9664\u9009\u5B9A\u7684\u5217", + "menu.mode": "\u6A21\u5F0F", + "menu.mode-math": "\u6570\u5B66", + "menu.mode-text": "\u6587\u672C", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "\u9ED1\u677F", + "tooltip.bold": "\u7C97\u4F53", + "tooltip.italic": "\u659C\u4F53", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "\u811A\u672C", + "tooltip.caligraphic": "\u8349\u4E66", + "tooltip.typewriter": "\u6253\u5B57\u673A", + "tooltip.roman-upright": "\u7F57\u9A6C\u76F4\u7ACB", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u5B57\u4F53\u6837\u5F0F", + "menu.accent": "\u91CD\u97F3", + "menu.decoration": "\u88C5\u9970", + "menu.color": "\u989C\u8272", + "menu.background-color": "\u80CC\u666F", + "menu.evaluate": "\u8BA1\u7B97", + "menu.simplify": "\u7B80\u5316", + "menu.solve": "\u6C42\u89E3", + "menu.solve-for": "\u6C42\u89E3 %@", + "menu.cut": "\u526A\u5207", + "menu.copy": "\u590D\u5236", + "menu.copy-as-latex": "\u590D\u5236\u4E3A LaTeX", + "menu.copy-as-ascii-math": "\u590D\u5236\u4E3A ASCII Math", + "menu.copy-as-mathml": "\u590D\u5236\u4E3A MathML", + "menu.paste": "\u7C98\u8D34", + "menu.select-all": "\u5168\u9009", + // Colors (accessible labels in color swatches) + "color.red": "\u7EA2\u8272", + "color.orange": "\u6A59\u8272", + "color.yellow": "\u9EC4\u8272", + "color.lime": "\u7EFF\u9EC4\u8272", + "color.green": "\u7EFF\u8272", + "color.teal": "\u9752\u8272", + "color.cyan": "\u84DD\u7EFF\u8272", + "color.blue": "\u84DD\u8272", + "color.indigo": "\u975B\u84DD\u8272", + "color.purple": "\u7D2B\u8272", + "color.magenta": "\u6D0B\u7EA2\u8272", + "color.black": "\u9ED1\u8272", + "color.dark-grey": "\u6DF1\u7070\u8272", + "color.grey": "\u7070\u8272", + "color.light-grey": "\u6D45\u7070\u8272", + "color.white": "\u767D\u8272" + }, + // Traditional Chinese + "zh-tw": { + "keyboard.tooltip.symbols": "\u7B26\u865F", + "keyboard.tooltip.greek": "\u5E0C\u81D8\u5B57\u6BCD", + "keyboard.tooltip.numeric": "\u6578\u5B57", + "keyboard.tooltip.alphabetic": "\u7F85\u99AC\u5B57\u6BCD", + "tooltip.copy to clipboard": "\u8907\u88FD\u5230\u526A\u8CBC\u677F", + "tooltip.redo": "\u91CD\u505A", + "tooltip.toggle virtual keyboard": "\u5207\u63DB\u865B\u64EC\u9375\u76E4", + "tooltip.undo": "\u64A4\u6D88", + "menu.insert matrix": "\u63D2\u5165\u77E9\u9663", + "menu.borders": "\u77E9\u9663\u5206\u9694\u7B26", + "menu.array.add row above": "\u5728\u5F8C\u9762\u6DFB\u52A0\u884C", + "menu.array.add row below": "\u5728\u524D\u9762\u6DFB\u52A0\u884C", + "menu.array.add column after": "\u5728\u5F8C\u9762\u6DFB\u52A0\u5217", + "menu.array.add column before": "\u5728\u524D\u9762\u6DFB\u52A0\u5217", + "menu.array.delete row": "\u522A\u9664\u884C", + "menu.array.delete rows": "\u522A\u9664\u9078\u5B9A\u884C", + "menu.array.delete column": "\u522A\u9664\u5217", + "menu.array.delete columns": "\u522A\u9664\u9078\u5B9A\u7684\u5217", + "menu.mode": "\u6A21\u5F0F", + "menu.mode-math": "\u6578\u5B78", + "menu.mode-text": "\u6587\u672C", + "menu.mode-latex": "LaTeX", + "tooltip.blackboard": "\u9ED1\u677F", + "tooltip.bold": "\u7C97\u9AD4", + "tooltip.italic": "\u659C\u9AD4", + "tooltip.fraktur": "Fraktur", + "tooltip.script": "\u8173\u672C", + "tooltip.caligraphic": "\u8349\u66F8", + "tooltip.typewriter": "\u6253\u5B57\u6A5F", + "tooltip.roman-upright": "\u7F85\u99AC\u76F4\u7ACB", + "tooltip.row-by-col": "%@ \xD7 %@", + "menu.font-style": "\u5B57\u9AD4\u6A23\u5F0F", + "menu.accent": "\u91CD\u97F3", + "menu.decoration": "\u88DD\u98FE", + "menu.color": "\u984F\u8272", + "menu.background-color": "\u80CC\u666F", + "menu.evaluate": "\u8A08\u7B97", + "menu.simplify": "\u7C21\u5316", + "menu.solve": "\u6C42\u89E3", + "menu.solve-for": "\u6C42\u89E3 %@", + "menu.cut": "\u526A\u4E0B", + "menu.copy": "\u8907\u88FD", + "menu.copy-as-latex": "\u8907\u88FD\u70BA LaTeX", + "menu.copy-as-ascii-math": "\u8907\u88FD\u70BA ASCII Math", + "menu.copy-as-mathml": "\u8907\u88FD\u70BA MathML", + "menu.paste": "\u8CBC\u4E0A", + "menu.select-all": "\u5168\u9078", + // Colors (accessible labels in color swatches) + "color.red": "\u7D05\u8272", + "color.orange": "\u6A59\u8272", + "color.yellow": "\u9EC3\u8272", + "color.lime": "\u7DA0\u9EC3\u8272", + "color.green": "\u7DA0\u8272", + "color.teal": "\u9752\u8272", + "color.cyan": "\u85CD\u7DA0\u8272", + "color.blue": "\u85CD\u8272", + "color.indigo": "\u975B\u85CD\u8272", + "color.purple": "\u7D2B\u8272", + "color.magenta": "\u6D0B\u7D05\u8272", + "color.black": "\u9ED1\u8272", + "color.dark-grey": "\u6DF1\u7070\u8272", + "color.grey": "\u7070\u8272", + "color.light-grey": "\u6DFA\u7070\u8272", + "color.white": "\u767D\u8272" + } + }; + + // src/core/l10n.ts + var l10n = { + strings: STRINGS, + _locale: "", + // Important! Set the locale to empty so it can be determined at runtime + _dirty: false, + _subscribers: [], + _numberFormatter: void 0, + get locale() { + if (!l10n._locale) + l10n._locale = isBrowser() ? navigator.language.slice(0, 5) : "en-US"; + return l10n._locale; + }, + set locale(value) { + l10n._locale = value; + l10n._numberFormatter = void 0; + l10n.dirty = true; + }, + get numberFormatter() { + if (!l10n._numberFormatter) { + try { + l10n._numberFormatter = new Intl.NumberFormat(l10n.locale); + } catch (e) { + try { + l10n._numberFormatter = new Intl.NumberFormat( + l10n.locale.slice(0, 2) + ); + } catch (e2) { + l10n._numberFormatter = new Intl.NumberFormat("en-US"); + } + } + } + return l10n._numberFormatter; + }, + /* + * Two forms for this function: + * - merge(locale, strings) + * Merge a dictionary of keys -> values for the specified locale + * - merge(strings) + * Merge a dictionary of locale code -> dictionary of keys -> values + * + */ + merge(locale, strings) { + if (typeof locale === "string" && strings) { + l10n.strings[locale] = __spreadValues(__spreadValues({}, l10n.strings[locale]), strings); + l10n.dirty = true; + } else { + for (const l of Object.keys( + locale + )) + l10n.merge(l, locale[l]); + } + }, + get dirty() { + return l10n._dirty; + }, + set dirty(val) { + if (l10n._dirty || l10n._dirty === val) return; + l10n._dirty = true; + setTimeout(() => { + l10n._dirty = false; + this._subscribers.forEach((x) => x == null ? void 0 : x()); + }, 0); + }, + subscribe(callback) { + l10n._subscribers.push(callback); + return l10n._subscribers.length - 1; + }, + unsubscribe(id) { + if (id < 0 || id >= l10n._subscribers.length) return; + l10n._subscribers[id] = void 0; + }, + /** + * Update the l10n strings in the DOM + */ + update(root) { + let elements = root.querySelectorAll("[data-l10n-tooltip]"); + for (const element of elements) { + const key = element.getAttribute("data-l10n-tooltip"); + if (key) { + const localized = localize(key); + if (localized) element.setAttribute("data-tooltip", localized); + } + } + elements = root.querySelectorAll("[data-l10n-arial-label]"); + for (const element of elements) { + const key = element.getAttribute("data-l10n-arial-label"); + if (key) { + const localized = localize(key); + if (localized) element.setAttribute("aria-label", localized); + } + } + } + }; + function localize(key, ...params) { + if (key === void 0) return void 0; + let result = ""; + const locale = l10n.locale; + if (l10n.strings[locale]) result = l10n.strings[locale][key]; + const language = locale.slice(0, 2); + if (!result && l10n.strings[language]) result = l10n.strings[language][key]; + if (!result) result = l10n.strings.en[key]; + if (!result) return void 0; + const regex = /(%@|%([0-9]+)\$@)/g; + let match = regex.exec(result); + let index = 0; + while (match) { + const parameter = params[index++]; + if (parameter) { + const parameterIndex = match[2] ? parseInt(match[2], 10) - 1 : index - 1; + let repl = params[parameterIndex]; + if (typeof repl === "number") repl = l10n.numberFormatter.format(repl); + result = result.replace(match[1], repl); + } + match = regex.exec(result); + } + result = result.replace(/%%/g, "%"); + return result; + } + + // src/core/color.ts + var MATHEMATICA_COLORS = { + m0: "#3F3D99", + // Strong blue + m1: "#993D71", + // Strong cerise + m2: "#998B3D", + // Strong gold + m3: "#3D9956", + // Malachite green + m4: "#3D5A99", + // Strong cobalt blue + m5: "#993D90", + // Strong orchid + m6: "#996D3D", + // Strong orange + m7: "#43993D", + // Strong sap green + m8: "#3D7999", + // Cornflower blue + m9: "#843D99" + // Mulberry + }; + var MATLAB_COLORS = { + blue: "#0072BD", + // [0, 0.4470, 0.7410] blue + orange: "#D95319", + // [0.8500, 0.3250, 0.0980] orange + yellow: "#EDB120", + // [0.9290, 0.6940, 0.1250] yellow + purple: "#7E2F8E", + // [0.4940, 0.1840, 0.5560] purple + green: "#77AC30", + // [0.4660, 0.6740, 0.1880] green + cyan: "#4DBEEE", + // [0.3010, 0.7450, 0.9330] cyan + red: "#A2142F" + // [0.6350, 0.0780, 0.1840] dark red + }; + var BACKGROUND_COLORS = { + "red": "#fbbbb6", + "orange": "#ffe0c2", + "yellow": "#fff1c2", + "lime": "#d0e8b9", + "green": "#bceac4", + "teal": "#b9f1f1", + "cyan": "#b8e5c9", + "blue": "#b6d9fb", + "indigo": "#d1c2f0", + "purple": "#e3baf8", + "magenta": "#f9c8e0", + "black": "#353535", + "dark-grey": "#8C8C8C", + "grey": "#D0D0D0", + "light-grey": "#F0F0F0", + "white": "#ffffff" + }; + var FOREGROUND_COLORS = { + "red": "#d7170b", + //<- 700, 500 ->'#f21c0d' + "orange": "#fe8a2b", + "yellow": "#ffc02b", + // <- 600, 500 -> '#ffcf33', + "lime": "#63b215", + "green": "#21ba3a", + "teal": "#17cfcf", + "cyan": "#13a7ec", + "blue": "#0d80f2", + "indigo": "#63c", + "purple": "#a219e6", + "magenta": "#eb4799", + "black": "#000", + "dark-grey": "#666", + "grey": "#A6A6A6", + "light-grey": "#d4d5d2", + "white": "#ffffff" + }; + var DVIPS_TO_CHROMATIC = { + Red: "red", + Orange: "orange", + Yellow: "yellow", + LimeGreen: "lime", + Green: "green", + TealBlue: "teal", + Blue: "blue", + Violet: "indigo", + Purple: "purple", + Magenta: "magenta", + Black: "black", + Gray: "grey", + White: "white" + }; + var DVIPS_COLORS = { + Apricot: "#FBB982", + Aquamarine: "#00B5BE", + Bittersweet: "#C04F17", + Black: "#221E1F", + // Indeed. + Blue: "#2D2F92", + BlueGreen: "#00B3B8", + BlueViolet: "#473992", + BrickRed: "#B6321C", + Brown: "#792500", + BurntOrange: "#F7921D", + CadetBlue: "#74729A", + CarnationPink: "#F282B4", + Cerulean: "#00A2E3", + CornflowerBlue: "#41B0E4", + Cyan: "#00AEEF", + Dandelion: "#FDBC42", + DarkOrchid: "#A4538A", + Emerald: "#00A99D", + ForestGreen: "#009B55", + Fuchsia: "#8C368C", + Goldenrod: "#FFDF42", + Gray: "#949698", + Green: "#00A64F", + GreenYellow: "#DFE674", + JungleGreen: "#00A99A", + Lavender: "#F49EC4", + Limegreen: "#8DC73E", + Magenta: "#EC008C", + Mahogany: "#A9341F", + Maroon: "#AF3235", + Melon: "#F89E7B", + MidnightBlue: "#006795", + Mulberry: "#A93C93", + NavyBlue: "#006EB8", + OliveGreen: "#3C8031", + Orange: "#F58137", + OrangeRed: "#ED135A", + Orchid: "#AF72B0", + Peach: "#F7965A", + Periwinkle: "#7977B8", + PineGreen: "#008B72", + Plum: "#92268F", + ProcessBlue: "#00B0F0", + Purple: "#99479B", + RawSienna: "#974006", + Red: "#ED1B23", + RedOrange: "#F26035", + RedViolet: "#A1246B", + Rhodamine: "#EF559F", + RoyalBlue: "#0071BC", + RoyalPurple: "#613F99", + RubineRed: "#ED017D", + Salmon: "#F69289", + SeaGreen: "#3FBC9D", + Sepia: "#671800", + SkyBlue: "#46C5DD", + SpringGreen: "#C6DC67", + Tan: "#DA9D76", + TealBlue: "#00AEB3", + Thistle: "#D883B7", + Turquoise: "#00B4CE", + Violet: "#58429B", + VioletRed: "#EF58A0", + White: "#FFFFFF", + WildStrawberry: "#EE2967", + Yellow: "#FFF200", + YellowGreen: "#98CC70", + YellowOrange: "#FAA21A" + }; + function defaultColorMap(s) { + var _a3, _b3, _c2, _d2, _e, _f; + const colorSpec = s.split("!"); + let baseRed; + let baseGreen; + let baseBlue; + let red = 255; + let green = 255; + let blue = 255; + let mix = -1; + const complementary = colorSpec.length > 0 && colorSpec[0].startsWith("-"); + if (complementary) colorSpec[0] = colorSpec[0].slice(1); + for (let i = 0; i < colorSpec.length; i++) { + baseRed = red; + baseGreen = green; + baseBlue = blue; + const colorName = (_a3 = colorSpec[i].trim().match(/^([A-Za-z\d-]+)/)) == null ? void 0 : _a3[1]; + const lcColorName = colorName == null ? void 0 : colorName.toLowerCase(); + const color = !colorName ? colorSpec[i].trim() : (_f = (_e = (_d2 = (_c2 = (_b3 = FOREGROUND_COLORS[lcColorName]) != null ? _b3 : FOREGROUND_COLORS[DVIPS_TO_CHROMATIC[colorName]]) != null ? _c2 : MATLAB_COLORS[colorName]) != null ? _d2 : DVIPS_COLORS[colorName]) != null ? _e : MATHEMATICA_COLORS[colorName]) != null ? _f : colorSpec[i].trim(); + let m = color.match(/^#([\da-f]{2})([\da-f]{2})([\da-f]{2})$/i); + if ((m == null ? void 0 : m[1]) && m[2] && m[3]) { + red = Math.max(0, Math.min(255, Number.parseInt(m[1], 16))); + green = Math.max(0, Math.min(255, Number.parseInt(m[2], 16))); + blue = Math.max(0, Math.min(255, Number.parseInt(m[3], 16))); + } else { + m = color.match(/^#([\da-f]{3})$/i); + if (m == null ? void 0 : m[1]) { + const r1 = Number.parseInt(m[1][0], 16); + const g1 = Number.parseInt(m[1][1], 16); + const b1 = Number.parseInt(m[1][2], 16); + red = Math.max(0, Math.min(255, r1 * 16 + r1)); + green = Math.max(0, Math.min(255, g1 * 16 + g1)); + blue = Math.max(0, Math.min(255, b1 * 16 + b1)); + } else { + m = color.match(/^rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/i); + if ((m == null ? void 0 : m[1]) && m[2] && m[3]) { + red = Math.max(0, Math.min(255, Number.parseInt(m[1]))); + green = Math.max(0, Math.min(255, Number.parseInt(m[2]))); + blue = Math.max(0, Math.min(255, Number.parseInt(m[3]))); + } else return void 0; + } + } + if (mix >= 0) { + red = (1 - mix) * red + mix * baseRed; + green = (1 - mix) * green + mix * baseGreen; + blue = (1 - mix) * blue + mix * baseBlue; + mix = -1; + } + if (i + 1 < colorSpec.length) + mix = Math.max(0, Math.min(100, Number.parseInt(colorSpec[++i]))) / 100; + } + if (mix >= 0) { + red = mix * red + (1 - mix) * baseRed; + green = mix * green + (1 - mix) * baseGreen; + blue = mix * blue + (1 - mix) * baseBlue; + } + if (complementary) { + red = 255 - red; + green = 255 - green; + blue = 255 - blue; + } + return "#" + ("00" + Math.round(red).toString(16)).slice(-2) + ("00" + Math.round(green).toString(16)).slice(-2) + ("00" + Math.round(blue).toString(16)).slice(-2); + } + function defaultBackgroundColorMap(s) { + var _a3, _b3; + s = s.trim(); + return (_b3 = (_a3 = BACKGROUND_COLORS[s.toLowerCase()]) != null ? _a3 : BACKGROUND_COLORS[DVIPS_TO_CHROMATIC[s]]) != null ? _b3 : defaultColorMap(s); + } + function parseHex(hex) { + if (!hex) return void 0; + if (hex[0] !== "#") return void 0; + hex = hex.slice(1); + let result; + if (hex.length <= 4) { + result = { + r: parseInt(hex[0] + hex[0], 16), + g: parseInt(hex[1] + hex[1], 16), + b: parseInt(hex[2] + hex[2], 16) + }; + if (hex.length === 4) result.a = parseInt(hex[3] + hex[3], 16) / 255; + } else { + result = { + r: parseInt(hex[0] + hex[1], 16), + g: parseInt(hex[2] + hex[3], 16), + b: parseInt(hex[4] + hex[5], 16) + }; + if (hex.length === 8) result.a = parseInt(hex[6] + hex[7], 16) / 255; + } + if (result && result.a === void 0) result.a = 1; + return result; + } + function hueToRgbChannel(t1, t2, hue) { + if (hue < 0) hue += 6; + if (hue >= 6) hue -= 6; + if (hue < 1) return (t2 - t1) * hue + t1; + else if (hue < 3) return t2; + else if (hue < 4) return (t2 - t1) * (4 - hue) + t1; + return t1; + } + function hslToRgb(hsl) { + let [hue, sat, light] = [hsl.h, hsl.s, hsl.l]; + hue = (hue + 360) % 360 / 60; + light = Math.max(0, Math.min(light, 1)); + sat = Math.max(0, Math.min(sat, 1)); + const t2 = light <= 0.5 ? light * (sat + 1) : light + sat - light * sat; + const t1 = light * 2 - t2; + return { + r: Math.round(255 * hueToRgbChannel(t1, t2, hue + 2)), + g: Math.round(255 * hueToRgbChannel(t1, t2, hue)), + b: Math.round(255 * hueToRgbChannel(t1, t2, hue - 2)) + }; + } + function clampByte(v) { + if (v < 0) return 0; + if (v > 255) return 255; + return Math.round(v); + } + function rgbToHexstring(rgb) { + const { r, g, b } = rgb; + let hexString = ((1 << 24) + (clampByte(r) << 16) + (clampByte(g) << 8) + clampByte(b)).toString(16).slice(1); + if (hexString[0] === hexString[1] && hexString[2] === hexString[3] && hexString[4] === hexString[5] && hexString[6] === hexString[7]) + hexString = hexString[0] + hexString[2] + hexString[4]; + return "#" + hexString; + } + function rgbToHsl(rgb) { + let { r, g, b } = rgb; + r = r / 255; + g = g / 255; + b = b / 255; + const min = Math.min(r, g, b); + const max = Math.max(r, g, b); + const delta = max - min; + let h; + let s; + if (max === min) h = 0; + else if (r === max) h = (g - b) / delta; + else if (g === max) h = 2 + (b - r) / delta; + else if (b === max) h = 4 + (r - g) / delta; + h = Math.min(h * 60, 360); + if (h < 0) h += 360; + const l = (min + max) / 2; + if (max === min) s = 0; + else if (l <= 0.5) s = delta / (max + min); + else s = delta / (2 - max - min); + return { h, s, l }; + } + function highlight(color) { + let rgb = parseHex(color); + if (!rgb) return color; + let { h, s, l } = rgbToHsl(rgb); + s += 0.1; + l -= 0.1; + return rgbToHexstring(hslToRgb({ h, s, l })); + } + + // src/core/unicode.ts + var UNICODE_TO_LATEX = { + 60: "\\lt", + 62: "\\gt", + 111: "o", + // Also \omicron + 38: "\\&", + // Also \And + 123: "\\lbrace", + 125: "\\rbrace", + 91: "\\lbrack", + 93: "\\rbrack", + 58: "\\colon", + // Also : + 160: "~", + // Also \space + 172: "\\neg", + // Also \lnot + 183: "\\cdot", + 188: "\\frac{1}{4}", + 189: "\\frac{1}{2}", + 190: "\\frac{3}{4}", + 8304: "^{0}", + 8305: "^{i}", + 185: "^{1}", + 178: "^{2}", + // ² + 179: "^{3}", + 8224: "\\dagger", + // Also \dag + 8225: "\\ddagger", + // Also \ddag + 8230: "\\ldots", + // Also \mathellipsis + 8308: "^{4}", + 8309: "^{5}", + 8310: "^{6}", + 8311: "^{7}", + 8312: "^{8}", + 8313: "^{9}", + 8314: "^{+}", + 8315: "^{-}", + 8316: "^{=}", + 8319: "^{n}", + 8320: "_{0}", + 8321: "_{1}", + 8322: "_{2}", + 8323: "_{3}", + 8324: "_{4}", + 8325: "_{5}", + 8326: "_{6}", + 8327: "_{7}", + 8328: "_{8}", + 8329: "_{9}", + 8330: "_{+}", + 8331: "_{-}", + 8332: "_{=}", + 8336: "_{a}", + 8337: "_{e}", + 8338: "_{o}", + 8339: "_{x}", + 8242: "\\prime", + 39: "\\prime", + 8592: "\\gets", + // Also \leftarrow + 8594: "\\to", + // Also \rightarrow + 9651: "\\triangle", + // Also \bigtriangleup, \vartriangle + 9661: "\\triangledown", + 8715: "\\owns", + // Also \ni + 8727: "\\ast", + // Also * + 8739: "\\vert", + // Also |, \mvert, \lvert, \rvert + 8741: "\\Vert", + // Also \parallel \shortparallel + 8743: "\\land", + // Also \wedge + 8744: "\\lor", + // Also \vee + 8901: "\\cdot", + // Also \centerdot, \cdotp + 8904: "\\bowtie", + // Also \Joint + 8800: "\\ne", + // Also \neq + 8804: "\\le", + // Also \leq + 8805: "\\ge", + // Also \geq + 8869: "\\bot", + 10178: "\\perp", + 10231: "\\biconditional", + // Also \longleftrightarrow + 10232: "\\impliedby", + // Also \Longleftarrow + 10233: "\\implies", + // Also \Longrightarrow + 10234: "\\iff", + 8450: "\\mathbb{C}", + 8469: "\\mathbb{N}", + 8473: "\\mathbb{P}", + 8474: "\\mathbb{Q}", + 8477: "\\mathbb{R}", + 8484: "\\mathbb{Z}", + 8461: "\\mathbb{H}", + 8476: "\\Re", + 8465: "\\Im", + 42: "\\ast", + 11036: "\\square", + 9633: "\\square", + 8720: "\\coprod", + 8716: "\\not\\ni", + 9671: "\\diamond", + 8846: "\\uplus", + 8851: "\\sqcap", + 8852: "\\sqcup", + 8768: "\\wr", + 8750: "\\oint", + 8226: "\\textbullet", + 8722: "-", + 978: "\\Upsilon" + }; + var MATH_LETTER_EXCEPTIONS = { + 119893: 8462, + 119965: 8492, + 119968: 8496, + 119969: 8497, + 119971: 8459, + 119972: 8464, + 119975: 8466, + 119976: 8499, + 119981: 8475, + 119994: 8495, + 119996: 8458, + 120004: 8500, + 120070: 8493, + 120075: 8460, + 120076: 8465, + 120085: 8476, + 120093: 8488, + 120122: 8450, + 120127: 8461, + 120133: 8469, + 120135: 8473, + 120136: 8474, + 120137: 8477, + 120145: 8484 + }; + var MATH_UNICODE_BLOCKS = [ + { start: 119808, len: 26, offset: 65, style: "bold" }, + { start: 119834, len: 26, offset: 97, style: "bold" }, + { start: 120488, len: 25, offset: 913, style: "bold" }, + { start: 120514, len: 25, offset: 945, style: "bold" }, + { start: 119860, len: 26, offset: 65, style: "italic" }, + { start: 119886, len: 26, offset: 97, style: "italic" }, + { start: 120546, len: 25, offset: 913, style: "italic" }, + { start: 120572, len: 25, offset: 945, style: "italic" }, + { start: 119912, len: 26, offset: 65, style: "bolditalic" }, + { start: 119938, len: 26, offset: 97, style: "bolditalic" }, + { start: 120604, len: 25, offset: 913, style: "bolditalic" }, + { start: 120630, len: 25, offset: 945, style: "bolditalic" }, + { start: 120782, len: 10, offset: 48, variant: "main", style: "bold" }, + { start: 119964, len: 26, offset: 65, variant: "script" }, + { start: 119990, len: 26, offset: 97, variant: "script" }, + { start: 120016, len: 26, offset: 65, variant: "script", style: "bold" }, + { start: 120042, len: 26, offset: 97, variant: "script", style: "bold" }, + { start: 120068, len: 26, offset: 65, variant: "fraktur" }, + { start: 120094, len: 26, offset: 97, variant: "fraktur" }, + { start: 120172, len: 26, offset: 65, variant: "fraktur", style: "bold" }, + { start: 120198, len: 26, offset: 97, variant: "fraktur", style: "bold" }, + { start: 120120, len: 26, offset: 65, variant: "double-struck" }, + { start: 120146, len: 26, offset: 97, variant: "double-struck" }, + { start: 120792, len: 10, offset: 48, variant: "double-struck" }, + { start: 120432, len: 26, offset: 65, variant: "monospace" }, + { start: 120458, len: 26, offset: 97, variant: "monospace" }, + { start: 120822, len: 10, offset: 48, variant: "monospace" }, + { start: 120224, len: 26, offset: 65, variant: "sans-serif" }, + { start: 120250, len: 26, offset: 97, variant: "sans-serif" }, + { + start: 120276, + len: 26, + offset: 65, + variant: "sans-serif", + style: "bold" + }, + { + start: 120302, + len: 26, + offset: 97, + variant: "sans-serif", + style: "bold" + }, + { + start: 120328, + len: 26, + offset: 65, + variant: "sans-serif", + style: "italic" + }, + { + start: 120354, + len: 26, + offset: 97, + variant: "sans-serif", + style: "italic" + }, + { + start: 120380, + len: 26, + offset: 65, + variant: "sans-serif", + style: "bolditalic" + }, + { + start: 120406, + len: 26, + offset: 97, + variant: "sans-serif", + style: "bolditalic" + }, + { + start: 120662, + len: 25, + offset: 913, + variant: "sans-serif", + style: "bold" + }, + { + start: 120688, + len: 25, + offset: 945, + variant: "sans-serif", + style: "bold" + }, + { + start: 120720, + len: 25, + offset: 913, + variant: "sans-serif", + style: "bolditalic" + }, + { + start: 120746, + len: 25, + offset: 945, + variant: "sans-serif", + style: "bolditalic" + }, + { start: 120803, len: 10, offset: 48, variant: "sans-serif" }, + { + start: 120812, + len: 10, + offset: 48, + variant: "sans-serif", + style: "bold" + } + ]; + function mathVariantToUnicode(char, variant, style) { + if (!/[A-Za-z\d]/.test(char)) return void 0; + if (style === "up") style = void 0; + if (!variant && !style) return void 0; + const codepoint = char.codePointAt(0); + if (codepoint === void 0) return char; + for (const block of MATH_UNICODE_BLOCKS) { + if (!variant || block.variant === variant) { + if (!style || block.style === style) { + if (codepoint >= block.offset && codepoint < block.offset + block.len) { + const result = block.start + codepoint - block.offset; + return String.fromCodePoint(MATH_LETTER_EXCEPTIONS[result] || result); + } + } + } + } + return void 0; + } + function unicodeToMathVariant(codepoint) { + var _a3; + if ((codepoint < 119808 || codepoint > 120831) && (codepoint < 8448 || codepoint > 8527)) + return { char: String.fromCodePoint(codepoint) }; + for (const c in MATH_LETTER_EXCEPTIONS) { + if (MATH_LETTER_EXCEPTIONS[c] === codepoint) { + codepoint = (_a3 = c.codePointAt(0)) != null ? _a3 : 0; + break; + } + } + for (const block of MATH_UNICODE_BLOCKS) { + if (codepoint >= block.start && codepoint < block.start + block.len) { + return { + char: String.fromCodePoint(codepoint - block.start + block.offset), + variant: block.variant, + style: block.style + }; + } + } + return { char: String.fromCodePoint(codepoint) }; + } + function codePointToLatex(c) { + var _a3; + if ("{}<>[]$&*#^_%:'\u02DC".includes(c)) return void 0; + if (c.length > 1) return void 0; + const codepoint = (_a3 = c.codePointAt(0)) != null ? _a3 : 0; + let latex = UNICODE_TO_LATEX[codepoint]; + if (latex) return latex; + const { char, variant, style } = unicodeToMathVariant(codepoint); + if (!variant && !style) return void 0; + latex = char; + switch (variant) { + case "double-struck": + latex = `\\mathbb{${latex}}`; + break; + case "fraktur": + latex = `\\mathfrak{${latex}}`; + break; + case "script": + latex = `\\mathscr{${latex}}`; + break; + case "sans-serif": + latex = `\\mathsf{${latex}}`; + break; + case "monospace": + latex = `\\mathtt{${latex}}`; + break; + case "calligraphic": + latex = `\\mathcal{${latex}}`; + break; + } + switch (style) { + case "bold": + latex = `\\mathbf{${latex}}`; + break; + case "italic": + latex = `\\mathit{${latex}}`; + break; + case "bolditalic": + latex = `\\mathbfit{${latex}}`; + break; + } + return latex; + } + + // src/latex-commands/definitions-utils.ts + function argAtoms(arg) { + if (!arg) return []; + if (Array.isArray(arg)) return arg; + if (typeof arg === "object" && "group" in arg) return arg.group; + return []; + } + var MATH_SYMBOLS = {}; + var REVERSE_MATH_SYMBOLS = __spreadValues({}, UNICODE_TO_LATEX); + var LATEX_COMMANDS = {}; + var ENVIRONMENTS = {}; + var TEXVC_MACROS = { + ////////////////////////////////////////////////////////////////////// + // texvc.sty + // The texvc package + // (https://ctan.math.illinois.edu/macros/latex/contrib/texvc/texvc.pdf) + // contains macros available in mediawiki pages. + // We omit the functions deprecated at + // https://en.wikipedia.org/wiki/Help:Displaying_a_formula#Deprecated_syntax + // We also omit texvc's \O, which conflicts with \text{\O} + darr: "\\downarrow", + dArr: "\\Downarrow", + Darr: "\\Downarrow", + lang: "\\langle", + rang: "\\rangle", + uarr: "\\uparrow", + uArr: "\\Uparrow", + Uarr: "\\Uparrow", + C: "\\mathbb{C}", + H: "\\mathbb{H}", + N: "\\mathbb{N}", + Q: "\\mathbb{Q}", + R: "\\mathbb{R}", + Z: "\\mathbb{Z}", + alef: "\\aleph", + alefsym: "\\aleph", + Alpha: "\\mathrm{A}", + // and: '\\land', + // ang: '\\angle', // We use the def from the siunitx package + Beta: "\\mathrm{B}", + bull: "\\bullet", + Chi: "\\mathrm{X}", + clubs: "\\clubsuit", + cnums: "\\mathbb{C}", + Complex: "\\mathbb{C}", + Dagger: "\\ddagger", + diamonds: "\\diamondsuit", + // Doteq: '\\doteq', // We map it to U+2251, while \doteq is U+2250 + doublecap: "\\Cap", + doublecup: "\\Cup", + empty: "\\emptyset", + Epsilon: "\\mathrm{E}", + Eta: "\\mathrm{H}", + exist: "\\exists", + // ge: '\\geq', // We have it as a builtin + // gggtr: '\\ggg', // We have it as a builtin + hArr: "\\Leftrightarrow", + harr: "\\leftrightarrow", + Harr: "\\Leftrightarrow", + hearts: "\\heartsuit", + image: "\\Im", + infin: "\\infty", + Iota: "\\mathrm{I}", + isin: "\\in", + Kappa: "\\mathrm{K}", + larr: "\\leftarrow", + Larr: "\\Leftarrow", + lArr: "\\Leftarrow", + // le: '\\leq', // We have it as a builtin + lrarr: "\\leftrightarrow", + Lrarr: "\\Leftrightarrow", + lrArr: "\\Leftrightarrow", + Mu: "\\mathrm{M}", + natnums: "\\mathbb{N}", + // ne: '\\neq', // We have it as a builtin + Nu: "\\mathrm{N}", + // O: '\\emptyset', // Conflicts with \O text command + // omicron: '\\mathrm{o}', // We have it as a builtin + Omicron: "\\mathrm{O}", + // or: '\\lor', + part: "\\partial", + plusmn: "\\pm", + rarr: "\\rightarrow", + Rarr: "\\Rightarrow", + rArr: "\\Rightarrow", + real: "\\Re", + reals: "\\mathbb{R}", + Reals: "\\mathbb{R}", + restriction: "\\upharpoonright", + Rho: "\\mathrm{P}", + sdot: "\\cdot", + sect: "\\S", + spades: "\\spadesuit", + sub: "\\subset", + sube: "\\subseteq", + supe: "\\supseteq", + Tau: "\\mathrm{T}", + thetasym: "\\vartheta", + varcoppa: "\\coppa", + weierp: "\\wp", + Zeta: "\\mathrm{Z}" + }; + var AMSMATH_MACROS = { + // amsmath.sty + // http://mirrors.concertpass.com/tex-archive/macros/latex/required/amsmath/amsmath.pdf + // Italic Greek capital letters. AMS defines these with \DeclareMathSymbol, + // but they are equivalent to \mathit{\Letter}. + varGamma: "\\mathit{\\Gamma}", + varDelta: "\\mathit{\\Delta}", + varTheta: "\\mathit{\\Theta}", + varLambda: "\\mathit{\\Lambda}", + varXi: "\\mathit{\\Xi}", + varPi: "\\mathit{\\Pi}", + varSigma: "\\mathit{\\Sigma}", + varUpsilon: "\\mathit{\\Upsilon}", + varPhi: "\\mathit{\\Phi}", + varPsi: "\\mathit{\\Psi}", + varOmega: "\\mathit{\\Omega}", + // From http://tug.ctan.org/macros/latex/required/amsmath/amsmath.dtx + // > \newcommand{\pod}[1]{ + // > \allowbreak + // > \if@display + // > \mkern18mu + // > \else + // > \mkern8mu + // > \fi + // > (#1) + // > } + // 18mu = \quad + // > \renewcommand{\pmod}[1]{ + // > \pod{{\operator@font mod}\mkern6mu#1} + // > } + pmod: { + def: "\\quad(\\operatorname{mod}\\ #1)", + args: 1, + expand: false, + captureSelection: false + }, + // > \newcommand{\mod}[1]{ + // > \allowbreak + // > \if@display + // > \mkern18mu + // > \else + // > \mkern12mu + // > \fi + //> {\operator@font mod}\,\,#1} + mod: { + def: "\\quad\\operatorname{mod}\\,\\,#1", + args: 1, + expand: false + }, + // > \renewcommand{\bmod}{ + // > \nonscript\mskip-\medmuskip\mkern5mu + // > \mathbin{\operator@font mod} + // > \penalty900 \mkern5mu + // > \nonscript\mskip-\medmuskip + // > } + // 5mu = \; + bmod: { + def: "\\;\\mathbin{\\operatorname{mod }}", + expand: false + } + }; + var BRAKET_MACROS = { + bra: { def: "\\mathinner{\\langle{#1}|}", args: 1, captureSelection: false }, + ket: { def: "\\mathinner{|{#1}\\rangle}", args: 1, captureSelection: false }, + braket: { + def: "\\mathinner{\\langle{#1}\\rangle}", + args: 1, + captureSelection: false + }, + set: { + def: "\\mathinner{\\lbrace #1 \\rbrace}", + args: 1, + captureSelection: false + }, + Bra: { def: "\\left\\langle #1\\right|", args: 1, captureSelection: false }, + Ket: { def: "\\left|#1\\right\\rangle", args: 1, captureSelection: false }, + Braket: { + def: "\\left\\langle{#1}\\right\\rangle", + args: 1, + captureSelection: false + }, + Set: { + def: "\\left\\lbrace #1 \\right\\rbrace", + args: 1, + captureSelection: false + } + }; + var DEFAULT_MACROS = { + "strut": { + primitive: true, + def: "\\phantom{\\rule[0.3\\baselineskip]{0}{0.7\\baselineskip}}", + args: 0, + captureSelection: true + }, + "iff": { + primitive: true, + captureSelection: true, + def: "\\;\\Longleftrightarrow\\;" + // >2,000 Note: additional spaces around the arrows, as per AMSMATH package definition + }, + "nicefrac": "^{#1}\\!\\!/\\!_{#2}", + "phase": { + def: "\\enclose{phasorangle}{#1}", + args: 1, + captureSelection: false + }, + // Proof Wiki + "rd": "\\mathrm{d}", + "rD": "\\mathrm{D}", + // Derivative package + "odif": "\\mathrm{d}", + // From Wolfram Alpha + "doubleStruckCapitalN": "\\mathbb{N}", + "doubleStruckCapitalR": "\\mathbb{R}", + "doubleStruckCapitalQ": "\\mathbb{Q}", + "doubleStruckCapitalZ": "\\mathbb{Z}", + "doubleStruckCapitalP": "\\mathbb{P}", + "scriptCapitalE": "\\mathscr{E}", + "scriptCapitalH": "\\mathscr{H}", + "scriptCapitalL": "\\mathscr{L}", + "gothicCapitalC": "\\mathfrak{C}", + "gothicCapitalH": "\\mathfrak{H}", + "gothicCapitalI": "\\mathfrak{I}", + "gothicCapitalR": "\\mathfrak{R}", + "imaginaryI": "\\mathrm{i}", + // NOTE: set in main (upright) as per ISO 80000-2:2009. + "imaginaryJ": "\\mathrm{j}", + // NOTE: set in main (upright) as per ISO 80000-2:2009. + "exponentialE": "\\mathrm{e}", + // NOTE: set in main (upright) as per ISO 80000-2:2009. + "differentialD": "\\mathrm{d}", + // NOTE: set in main (upright) as per ISO 80000-2:2009. + "capitalDifferentialD": "\\mathrm{D}", + // NOTE: set in main (upright) as per ISO 80000-2:2009. + "mathstrut": { def: "\\vphantom{(}", primitive: true }, + // https://ctan.math.washington.edu/tex-archive/macros/latex/contrib/actuarialangle/actuarialangle.pdf + "angl": "\\enclose{actuarial}{#1}", + "angln": "\\enclose{actuarial}{n}", + "anglr": "\\enclose{actuarial}{r}", + "anglk": "\\enclose{actuarial}{k}", + ////////////////////////////////////////////////////////////////////// + // mathtools.sty + // In the summer of 2022, mathtools did some renaming of macros. + // This is the latest version, with some legacy commands. + // See https://mirrors.ircam.fr/pub/CTAN/macros/latex/contrib/mathtools/mathtools.pdf + "mathtools": { + primitive: true, + package: { + //\providecommand\ordinarycolon{:} + ordinarycolon: ":", + //\def\vcentcolon{\mathrel{\mathop\ordinarycolon}} + //TODO(edemaine): Not yet centered. Fix via \raisebox or #726 + vcentcolon: "\\mathrel{\\mathop\\ordinarycolon}", + // \providecommand*\dblcolon{\vcentcolon\mathrel{\mkern-.9mu}\vcentcolon} + dblcolon: '{\\mathop{\\char"2237}}', + // ∷ + // \providecommand*\coloneqq{\vcentcolon\mathrel{\mkern-1.2mu}=} + coloneqq: '{\\mathop{\\char"2254}}', + // ≔ + // \providecommand*\Coloneqq{\dblcolon\mathrel{\mkern-1.2mu}=} + Coloneqq: '{\\mathop{\\char"2A74}}', + // ⩴ + // \providecommand*\coloneq{\vcentcolon\mathrel{\mkern-1.2mu}\mathrel{-}} + coloneq: '{\\mathop{\\char"2254}}', + // ≔ + // \providecommand*\Coloneq{\dblcolon\mathrel{\mkern-1.2mu}\mathrel{=}} + Coloneq: '{\\mathop{\\char"2A74}}', + // ⩴ + // \providecommand*\eqqcolon{=\mathrel{\mkern-1.2mu}\vcentcolon} + eqqcolon: '{\\mathop{\\char"2255}}', + // ≕ + // \providecommand*\Eqqcolon{=\mathrel{\mkern-1.2mu}\dblcolon} + Eqqcolon: '{\\mathop{\\char"3D\\char"2237}}', + // =∷ + // \providecommand*\eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\vcentcolon} + eqcolon: '{\\mathop{\\char"2255}}', + // ≕ + // \providecommand*\Eqcolon{\mathrel{-}\mathrel{\mkern-1.2mu}\dblcolon} + Eqcolon: '{\\mathop{\\char"3D\\char"2237}}', + // =∷ + // \providecommand*\colonapprox{\vcentcolon\mathrel{\mkern-1.2mu}\approx} + colonapprox: '{\\mathop{\\char"003A\\char"2248}}', + // :≈ + // \providecommand*\Colonapprox{\dblcolon\mathrel{\mkern-1.2mu}\approx} + Colonapprox: '{\\mathop{\\char"2237\\char"2248}}', + // ∷≈ + // \providecommand*\colonsim{\vcentcolon\mathrel{\mkern-1.2mu}\sim} + colonsim: '{\\mathop{\\char"3A\\char"223C}}', + // :∼ + // \providecommand*\Colonsim{\dblcolon\mathrel{\mkern-1.2mu}\sim} + Colonsim: '{\\mathop{\\char"2237\\char"223C}}', + // ∷∼ + colondash: "\\mathrel{\\vcentcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}", + // :- + Colondash: "\\mathrel{\\dblcolon\\mathrel{\\mkern-1.2mu}\\mathrel{-}}", + dashcolon: "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\vcentcolon}", + Dashcolon: "\\mathrel{\\mathrel{-}\\mathrel{\\mkern-1.2mu}\\dblcolon}" + } + }, + ////////////////////////////////////////////////////////////////////// + // colonequals.sty + // Alternate names for mathtools's macros: + "ratio": "\\vcentcolon", + "coloncolon": "\\dblcolon", + "colonequals": "\\coloneq", + "coloncolonequals": "\\Coloneq", + "equalscolon": "\\eqcolon", + "equalscoloncolon": "\\Eqcolon", + "colonminus": "\\colondash", + "coloncolonminus": "\\Colondash", + "minuscolon": "\\dashcolon", + "minuscoloncolon": "\\Dashcolon", + // \colonapprox name is same in mathtools and colonequals. + "coloncolonapprox": "\\Colonapprox", + // \colonsim name is same in mathtools and colonequals. + "coloncolonsim": "\\Colonsim", + // Additional macros, implemented by analogy with mathtools definitions: + "simcolon": "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\vcentcolon}", + "Simcolon": "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}", + "simcoloncolon": "\\mathrel{\\sim\\mathrel{\\mkern-1.2mu}\\dblcolon}", + "approxcolon": "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\vcentcolon}", + "Approxcolon": "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}", + "approxcoloncolon": "\\mathrel{\\approx\\mathrel{\\mkern-1.2mu}\\dblcolon}", + // Present in newtxmath, pxfonts and txfonts + "notni": "\\mathrel{\\char`\u220C}", + "limsup": "\\operatorname*{lim\\,sup}", + "liminf": "\\operatorname*{lim\\,inf}", + ////////////////////////////////////////////////////////////////////// + // From amsopn.sty + "injlim": "\\operatorname*{inj\\,lim}", + "projlim": "\\operatorname*{proj\\,lim}", + "varlimsup": "\\operatorname*{\\overline{lim}}", + "varliminf": "\\operatorname*{\\underline{lim}}", + "varinjlim": "\\operatorname*{\\underrightarrow{lim}}", + "varprojlim": "\\operatorname*{\\underleftarrow{lim}}", + ////////////////////////////////////////////////////////////////////// + // statmath.sty + // https://ctan.math.illinois.edu/macros/latex/contrib/statmath/statmath.pdf + "argmin": "\\operatorname*{arg\\,min}", + "argmax": "\\operatorname*{arg\\,max}", + "plim": "\\mathop{\\operatorname{plim}}\\limits", + // mhchem + "tripledash": { + def: "\\vphantom{-}\\raise{4mu}{\\mkern1.5mu\\rule{2mu}{1.5mu}\\mkern{2.25mu}\\rule{2mu}{1.5mu}\\mkern{2.25mu}\\rule{2mu}{1.5mu}\\mkern{2mu}}", + expand: true + }, + "braket.sty": { package: BRAKET_MACROS }, + "amsmath.sty": { + package: AMSMATH_MACROS, + primitive: true + }, + "texvc.sty": { + package: TEXVC_MACROS, + primitive: false + } + }; + var TEXT_SYMBOLS = { + " ": 32, + // want that in Text mode. + "\\!": 33, + "\\#": 35, + "\\$": 36, + "\\%": 37, + "\\&": 38, + "\\_": 95, + "-": 45, + // In Math mode, '-' is substituted to U+2212, but we don't + "\\textunderscore": 95, + // '_' + "\\euro": 8364, + "\\maltese": 10016, + "\\{": 123, + "\\}": 125, + "\\textbraceleft": 123, + "\\textbraceright": 125, + "\\lbrace": 123, + "\\rbrace": 125, + "\\lbrack": 91, + "\\rbrack": 93, + "\\nobreakspace": 160, + "\\ldots": 8230, + "\\textellipsis": 8230, + "\\backslash": 92, + "`": 8216, + "'": 8217, + "``": 8220, + "''": 8221, + "\\degree": 176, + "\\textasciicircum": 94, + "\\textasciitilde": 126, + "\\textasteriskcentered": 42, + "\\textbackslash": 92, + // '\' + "\\textbullet": 8226, + "\\textdollar": 36, + "\\textsterling": 163, + "\\textdagger": 8224, + "\\textdaggerdbl": 8225, + "\u2013": 8211, + // EN DASH + "\u2014": 8212, + // EM DASH + "\u2018": 8216, + // LEFT SINGLE QUOTATION MARK + "\u2019": 8217, + // RIGHT SINGLE QUOTATION MARK + "\u201C": 8220, + // LEFT DOUBLE QUOTATION MARK + "\u201D": 8221, + // RIGHT DOUBLE QUOTATION MARK + '"': 8221, + // DOUBLE PRIME + "\\ss": 223, + // LATIN SMALL LETTER SHARP S + "\\ae": 230, + // LATIN SMALL LETTER AE + "\\oe": 339, + // LATIN SMALL LIGATURE OE + "\\AE": 198, + // LATIN CAPITAL LETTER AE + "\\OE": 338, + // LATIN CAPITAL LIGATURE OE + "\\O": 216, + // LATIN CAPITAL LETTER O WITH STROKE + "\\i": 305, + // LATIN SMALL LETTER DOTLESS I + "\\j": 567, + // LATIN SMALL LETTER DOTLESS J + "\\aa": 229, + // LATIN SMALL LETTER A WITH RING ABOVE + "\\AA": 197 + // LATIN CAPITAL LETTER A WITH RING ABOVE + }; + var COMMAND_MODE_CHARACTERS = /[\w!@*()-=+{}\[\]\\';:?/.,~<>`|$%#&^" ]/; + var LETTER; + var LETTER_AND_DIGITS; + if (supportRegexPropertyEscape()) { + LETTER = new RegExp("\\p{Letter}", "u"); + LETTER_AND_DIGITS = new RegExp("[0-9\\p{Letter}]", "u"); + } else { + LETTER = /[a-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘꣳŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/; + LETTER_AND_DIGITS = /[\da-zA-ZаАбБвВгГдДеЕёЁжЖзЗиИйЙкКлЛмМнНоОпПрРсСтТуУфФхХцЦчЧшШщЩъЪыЫьЬэЭюЮяĄąĆćĘꣳŃńÓóŚśŹźŻżàâäôéèëêïîçùûüÿæœÀÂÄÔÉÈËÊÏΟÇÙÛÜÆŒößÖẞìíòúÌÍÒÚáñÁÑ]/; + } + function defineSymbol(symbol, codepoint, type = "mord", variant) { + if (codepoint === void 0) return; + MATH_SYMBOLS[symbol] = { + definitionType: "symbol", + type, + variant, + codepoint + }; + if (!REVERSE_MATH_SYMBOLS[codepoint]) + REVERSE_MATH_SYMBOLS[codepoint] = symbol; + } + function defineSymbols(value, inType, inVariant) { + if (typeof value === "string") { + for (let i = 0; i < value.length; i++) { + const ch = value.charAt(i); + defineSymbol(ch, ch.codePointAt(0)); + } + return; + } + for (const [symbol, val, type, variant] of value) + defineSymbol(symbol, val, type != null ? type : inType, variant != null ? variant : inVariant); + } + function defineSymbolRange(from, to) { + for (let i = from; i <= to; i++) defineSymbol(String.fromCodePoint(i), i); + } + function getEnvironmentDefinition(name) { + var _a3; + return (_a3 = ENVIRONMENTS[name]) != null ? _a3 : null; + } + function suggest(mf, s) { + var _a3, _b3; + if (s.length === 0 || s === "\\" || !s.startsWith("\\")) return []; + const result = []; + for (const p in LATEX_COMMANDS) { + if (p.startsWith(s) && !LATEX_COMMANDS[p].infix) + result.push({ match: p, frequency: (_a3 = LATEX_COMMANDS[p].frequency) != null ? _a3 : 0 }); + } + for (const p in MATH_SYMBOLS) { + if (p.startsWith(s)) + result.push({ match: p, frequency: (_b3 = MATH_SYMBOLS[p].frequency) != null ? _b3 : 0 }); + } + const command = s.substring(1); + for (const p of Object.keys(mf.options.macros)) + if (p.startsWith(command)) result.push({ match: "\\" + p, frequency: 0 }); + result.sort((a, b) => { + var _a4, _b4; + if (a.frequency === b.frequency) { + if (a.match.length === b.match.length) return a.match < b.match ? -1 : 1; + return a.match.length - b.match.length; + } + return ((_a4 = b.frequency) != null ? _a4 : 0) - ((_b4 = a.frequency) != null ? _b4 : 0); + }); + return result.map((x) => x.match); + } + function parseParameterTemplateArgument(argTemplate) { + let type = "auto"; + const r = argTemplate.match(/:([^=]+)/); + if (r) type = r[1].trim(); + return type; + } + function parseParameterTemplate(parameterTemplate) { + if (!parameterTemplate) return []; + const result = []; + let parameters = parameterTemplate.split("]"); + if (parameters[0].startsWith("[")) { + result.push({ + isOptional: true, + type: parseParameterTemplateArgument(parameters[0].slice(1)) + }); + for (let i = 1; i <= parameters.length; i++) + result.push(...parseParameterTemplate(parameters[i])); + } else { + parameters = parameterTemplate.split("}"); + if (parameters[0].startsWith("{")) { + result.push({ + isOptional: false, + type: parseParameterTemplateArgument(parameters[0].slice(1)) + }); + for (let i = 1; i <= parameters.length; i++) + result.push(...parseParameterTemplate(parameters[i])); + } + } + return result; + } + function parseArgAsString(atoms) { + if (!atoms) return ""; + let result = ""; + let success = true; + for (const atom of atoms) { + if (typeof atom.value === "string") result += atom.value; + else success = false; + } + return success ? result : ""; + } + function defineTabularEnvironment(names, parameters, createAtom) { + if (typeof names === "string") names = [names]; + const parsedParameters = parseParameterTemplate(parameters); + const data = { + tabular: true, + rootOnly: false, + params: parsedParameters, + createAtom + }; + for (const name of names) ENVIRONMENTS[name] = data; + } + function defineRootEnvironment(names, createAtom, options) { + var _a3; + if (typeof names === "string") names = [names]; + const def = { + tabular: (_a3 = options == null ? void 0 : options.tabular) != null ? _a3 : false, + rootOnly: true, + params: [], + createAtom + }; + for (const name of names) ENVIRONMENTS[name] = def; + } + function defineFunction(names, parameters, options) { + var _a3, _b3; + if (!options) options = {}; + const data = { + definitionType: "function", + // The parameters for this function, an array of + // {optional, type} + params: parseParameterTemplate(parameters), + ifMode: options.ifMode, + isFunction: (_a3 = options.isFunction) != null ? _a3 : false, + applyMode: options.applyMode, + infix: (_b3 = options.infix) != null ? _b3 : false, + parse: options.parse, + createAtom: options.createAtom, + applyStyle: options.applyStyle, + serialize: options.serialize, + render: options.render + }; + if (typeof names === "string") LATEX_COMMANDS["\\" + names] = data; + else for (const name of names) LATEX_COMMANDS["\\" + name] = data; + } + var _DEFAULT_MACROS; + function getMacros(otherMacros) { + if (!_DEFAULT_MACROS) + _DEFAULT_MACROS = normalizeMacroDictionary(DEFAULT_MACROS); + if (!otherMacros) return _DEFAULT_MACROS; + return normalizeMacroDictionary(__spreadValues(__spreadValues({}, _DEFAULT_MACROS), otherMacros)); + } + function normalizeMacroDefinition(def, options) { + var _a3, _b3, _c2, _d2; + if (typeof def === "string") { + let argCount = 0; + const defString = def; + if (/(^|[^\\])#1/.test(defString)) argCount = 1; + if (/(^|[^\\])#2/.test(defString)) argCount = 2; + if (/(^|[^\\])#3/.test(defString)) argCount = 3; + if (/(^|[^\\])#4/.test(defString)) argCount = 4; + if (/(^|[^\\])#5/.test(defString)) argCount = 5; + if (/(^|[^\\])#6/.test(defString)) argCount = 6; + if (/(^|[^\\])#7/.test(defString)) argCount = 7; + if (/(^|[^\\])#8/.test(defString)) argCount = 8; + if (/(^|[^\\])#9/.test(defString)) argCount = 9; + return { + expand: (_a3 = options == null ? void 0 : options.expand) != null ? _a3 : true, + captureSelection: (_b3 = options == null ? void 0 : options.captureSelection) != null ? _b3 : true, + args: argCount, + def: defString + }; + } + return __spreadValues({ + expand: (_c2 = options == null ? void 0 : options.expand) != null ? _c2 : true, + captureSelection: (_d2 = options == null ? void 0 : options.captureSelection) != null ? _d2 : true, + args: 0 + }, def); + } + function normalizeMacroDictionary(macros) { + if (!macros) return {}; + const result = {}; + for (const macro of Object.keys(macros)) { + const macroDef = macros[macro]; + if (macroDef === void 0 || macroDef === null) delete result[macro]; + else if (typeof macroDef === "object" && "package" in macroDef) { + for (const packageMacro of Object.keys(macroDef.package)) { + result[packageMacro] = normalizeMacroDefinition( + macroDef.package[packageMacro], + { + expand: !macroDef.primitive, + captureSelection: macroDef.captureSelection + } + ); + } + } else result[macro] = normalizeMacroDefinition(macroDef); + } + return result; + } + function getDefinition(token, parseMode = "math") { + if (!token || token.length === 0) return null; + let info = null; + if (token.startsWith("\\")) { + info = LATEX_COMMANDS[token]; + if (info) { + if (!info.ifMode || info.ifMode === parseMode) return info; + return null; + } + if (parseMode === "math") info = MATH_SYMBOLS[token]; + else if (TEXT_SYMBOLS[token]) { + info = { + definitionType: "symbol", + type: "mord", + codepoint: TEXT_SYMBOLS[token] + }; + } + } else if (parseMode === "math") { + info = MATH_SYMBOLS[token]; + if (!info && token.length === 1) { + const command = charToLatex("math", token.codePointAt(0)); + if (command.startsWith("\\")) + return __spreadProps(__spreadValues({}, getDefinition(command, "math")), { command }); + return null; + } + } else if (TEXT_SYMBOLS[token]) { + info = { + definitionType: "symbol", + type: "mord", + codepoint: TEXT_SYMBOLS[token] + }; + } else if (parseMode === "text") { + info = { + definitionType: "symbol", + type: "mord", + codepoint: token.codePointAt(0) + }; + } + return info != null ? info : null; + } + function getMacroDefinition(token, macros) { + if (!token.startsWith("\\")) return null; + const command = token.slice(1); + return macros[command]; + } + function charToLatex(parseMode, codepoint) { + if (codepoint === void 0) return ""; + if (parseMode === "math" && REVERSE_MATH_SYMBOLS[codepoint]) + return REVERSE_MATH_SYMBOLS[codepoint]; + if (parseMode === "text") { + const textSymbol = Object.keys(TEXT_SYMBOLS).find( + (x) => TEXT_SYMBOLS[x] === codepoint + ); + if (textSymbol) return textSymbol; + return String.fromCodePoint(codepoint); + } + return String.fromCodePoint(codepoint); + } + + // src/core/font-metrics-data.ts + var M1 = [0, 0.68889, 0, 0, 0.72222]; + var M2 = [0, 0.68889, 0, 0, 0.66667]; + var M3 = [0, 0.68889, 0, 0, 0.77778]; + var M4 = [0, 0.68889, 0, 0, 0.61111]; + var M5 = [0.16667, 0.68889, 0, 0, 0.77778]; + var M6 = [0, 0.68889, 0, 0, 0.55556]; + var M7 = [0, 0, 0, 0, 0.25]; + var M8 = [0, 0.825, 0, 0, 2.33334]; + var M9 = [0, 0.9, 0, 0, 2.33334]; + var M10 = [0, 0.68889, 0, 0, 0.54028]; + var M11 = [-0.03598, 0.46402, 0, 0, 0.5]; + var M12 = [-0.13313, 0.36687, 0, 0, 1]; + var M13 = [0.01354, 0.52239, 0, 0, 1]; + var M14 = [0.01354, 0.52239, 0, 0, 1.11111]; + var M15 = [0, 0.54986, 0, 0, 1]; + var M16 = [0, 0.69224, 0, 0, 0.5]; + var M17 = [0, 0.43056, 0, 0, 1]; + var M18 = [0.08198, 0.58198, 0, 0, 0.77778]; + var M19 = [0.19444, 0.69224, 0, 0, 0.41667]; + var M20 = [0.1808, 0.675, 0, 0, 1]; + var M21 = [0.19444, 0.69224, 0, 0, 0.83334]; + var M22 = [0.13667, 0.63667, 0, 0, 1]; + var M23 = [-0.064, 0.437, 0, 0, 1.334]; + var M24 = [0.08167, 0.58167, 0, 0, 0.77778]; + var M25 = [0, 0.69224, 0, 0, 0.72222]; + var M26 = [0, 0.69224, 0, 0, 0.66667]; + var M27 = [-0.13313, 0.36687, 0, 0, 0.77778]; + var M28 = [0.06062, 0.54986, 0, 0, 0.77778]; + var M29 = [0, 0.69224, 0, 0, 0.77778]; + var M30 = [0.25583, 0.75583, 0, 0, 0.77778]; + var M31 = [0.25142, 0.75726, 0, 0, 0.77778]; + var M32 = [0.20576, 0.70576, 0, 0, 0.77778]; + var M33 = [0.30274, 0.79383, 0, 0, 0.77778]; + var M34 = [0.22958, 0.72958, 0, 0, 0.77778]; + var M35 = [0.1808, 0.675, 0, 0, 0.77778]; + var M36 = [0.13667, 0.63667, 0, 0, 0.77778]; + var M37 = [0.13597, 0.63597, 0, 0, 0.77778]; + var M38 = [0.03517, 0.54986, 0, 0, 0.77778]; + var M39 = [0, 0.675, 0, 0, 0.77778]; + var M40 = [0.19444, 0.69224, 0, 0, 0.61111]; + var M41 = [0, 0.54986, 0, 0, 0.76042]; + var M42 = [0, 0.54986, 0, 0, 0.66667]; + var M43 = [0.0391, 0.5391, 0, 0, 0.77778]; + var M44 = [0.03517, 0.54986, 0, 0, 1.33334]; + var M45 = [0.38569, 0.88569, 0, 0, 0.77778]; + var M46 = [0.23222, 0.74111, 0, 0, 0.77778]; + var M47 = [0.19444, 0.69224, 0, 0, 0.77778]; + var M48 = [0, 0.37788, 0, 0, 0.5]; + var M49 = [0, 0.54986, 0, 0, 0.72222]; + var M50 = [0, 0.69224, 0, 0, 0.83334]; + var M51 = [0.11111, 0.69224, 0, 0, 0.66667]; + var M52 = [0.26167, 0.75726, 0, 0, 0.77778]; + var M53 = [0.48256, 0.98256, 0, 0, 0.77778]; + var M54 = [0.28481, 0.79383, 0, 0, 0.77778]; + var M55 = [0.08167, 0.58167, 0, 0, 0.22222]; + var M56 = [0.08167, 0.58167, 0, 0, 0.38889]; + var M57 = [0, 0.43056, 0.04028, 0, 0.66667]; + var M58 = [0.41951, 0.91951, 0, 0, 0.77778]; + var M59 = [0.24982, 0.74947, 0, 0, 0.38865]; + var M60 = [0.08319, 0.58283, 0, 0, 0.75623]; + var M61 = [0, 0.10803, 0, 0, 0.27764]; + var M62 = [0, 0.47534, 0, 0, 0.50181]; + var M63 = [0.18906, 0.47534, 0, 0, 0.50181]; + var M64 = [0, 0.69141, 0, 0, 0.50181]; + var M65 = [0.24982, 0.74947, 0, 0, 0.27764]; + var M66 = [0, 0.69141, 0, 0, 0.21471]; + var M67 = [0.25, 0.75, 0, 0, 0.44722]; + var M68 = [0, 0.64444, 0, 0, 0.575]; + var M69 = [0.08556, 0.58556, 0, 0, 0.89444]; + var M70 = [0, 0.69444, 0, 0, 0.89444]; + var M71 = [0, 0.68611, 0, 0, 0.9]; + var M72 = [0, 0.68611, 0, 0, 0.86944]; + var M73 = [0.25, 0.75, 0, 0, 0.575]; + var M74 = [0.25, 0.75, 0, 0, 0.31944]; + var M75 = [0, 0.69444, 0, 0, 0.63889]; + var M76 = [0, 0.69444, 0, 0, 0.31944]; + var M77 = [0, 0.44444, 0, 0, 0.63889]; + var M78 = [0, 0.44444, 0, 0, 0.51111]; + var M79 = [0, 0.69444, 0, 0, 0.575]; + var M80 = [0.13333, 0.63333, 0, 0, 0.89444]; + var M81 = [0, 0.44444, 0, 0, 0.31944]; + var M82 = [0, 0.69444, 0, 0, 0.86944]; + var M83 = [0, 0.68611, 0, 0, 0.69166]; + var M84 = [0, 0.68611, 0, 0, 0.83055]; + var M85 = [0, 0.68611, 0, 0, 0.89444]; + var M86 = [0, 0.69444, 0, 0, 0.60278]; + var M87 = [0.19444, 0.69444, 0, 0, 0.51111]; + var M88 = [0, 0.69444, 0, 0, 0.83055]; + var M89 = [-0.10889, 0.39111, 0, 0, 1.14999]; + var M90 = [0.19444, 0.69444, 0, 0, 0.575]; + var M91 = [0.19444, 0.69444, 0, 0, 1.14999]; + var M92 = [0.19444, 0.69444, 0, 0, 0.70277]; + var M93 = [0.05556, 0.75, 0, 0, 0.575]; + var M94 = [0, 0.68611, 0, 0, 0.95833]; + var M95 = [0.08556, 0.58556, 0, 0, 0.76666]; + var M96 = [-0.02639, 0.47361, 0, 0, 0.575]; + var M97 = [0, 0.44444, 0, 0, 0.89444]; + var M98 = [0, 0.55556, 0, 0, 0.76666]; + var M99 = [-0.10889, 0.39111, 0, 0, 0.89444]; + var M100 = [222e-5, 0.50222, 0, 0, 0.89444]; + var M101 = [0.19667, 0.69667, 0, 0, 0.89444]; + var M102 = [0.08556, 0.58556, 0, 0, 1.14999]; + var M103 = [0, 0.69444, 0, 0, 0.70277]; + var M104 = [-0.02778, 0.47222, 0, 0, 0.575]; + var M105 = [0.25, 0.75, 0, 0, 0.51111]; + var M106 = [-0.13889, 0.36111, 0, 0, 1.14999]; + var M107 = [0.19444, 0.69444, 0, 0, 1.02222]; + var M108 = [0.12963, 0.69444, 0, 0, 0.89444]; + var M109 = [0.19444, 0.69444, 0, 0, 0.44722]; + var M110 = [0, 0.64444, 0.13167, 0, 0.59111]; + var M111 = [0.19444, 0.64444, 0.13167, 0, 0.59111]; + var M112 = [0, 0.68611, 0.17208, 0, 0.8961]; + var M113 = [0.19444, 0.44444, 0.105, 0, 0.53222]; + var M114 = [0, 0.44444, 0.085, 0, 0.82666]; + var M115 = [0, 0.69444, 0.06709, 0, 0.59111]; + var M116 = [0, 0.69444, 0.12945, 0, 0.35555]; + var M117 = [0, 0.69444, 0, 0, 0.94888]; + var M118 = [0, 0.69444, 0.11472, 0, 0.59111]; + var M119 = [0, 0.68611, 0.10778, 0, 0.88555]; + var M120 = [0, 0.69444, 0.07939, 0, 0.62055]; + var M121 = [0, 0.69444, 0.12417, 0, 0.30667]; + var M122 = [0, 0.64444, 0.13556, 0, 0.51111]; + var M123 = [0.19444, 0.64444, 0.13556, 0, 0.51111]; + var M124 = [0, 0.68333, 0.16389, 0, 0.74333]; + var M125 = [0.19444, 0.43056, 0.08847, 0, 0.46]; + var M126 = [0, 0.43056, 0.07514, 0, 0.71555]; + var M127 = [0, 0.69444, 0.06646, 0, 0.51111]; + var M128 = [0, 0.69444, 0, 0, 0.83129]; + var M129 = [0, 0.69444, 0.1225, 0, 0.51111]; + var M130 = [0, 0.68333, 0.09403, 0, 0.76666]; + var M131 = [0, 0.68333, 0.11111, 0, 0.76666]; + var M132 = [0, 0.69444, 0.06961, 0, 0.51444]; + var M133 = [0, 0.69444, 0, 0, 0.27778]; + var M134 = [0.25, 0.75, 0, 0, 0.38889]; + var M135 = [0, 0.64444, 0, 0, 0.5]; + var M136 = [0, 0.69444, 0, 0, 0.77778]; + var M137 = [0, 0.68333, 0, 0, 0.75]; + var M138 = [0, 0.68333, 0, 0, 0.77778]; + var M139 = [0, 0.68333, 0, 0, 0.68056]; + var M140 = [0, 0.68333, 0, 0, 0.72222]; + var M141 = [0.25, 0.75, 0, 0, 0.5]; + var M142 = [0.25, 0.75, 0, 0, 0.27778]; + var M143 = [0, 0.69444, 0, 0, 0.5]; + var M144 = [0, 0.69444, 0, 0, 0.55556]; + var M145 = [0, 0.43056, 0, 0, 0.44445]; + var M146 = [0, 0.43056, 0, 0, 0.5]; + var M147 = [0.19444, 0.43056, 0, 0, 0.55556]; + var M148 = [0, 0.43056, 0, 0, 0.55556]; + var M149 = [0.08333, 0.58333, 0, 0, 0.77778]; + var M150 = [0, 0.43056, 0, 0, 0.27778]; + var M151 = [0, 0.66786, 0, 0, 0.27778]; + var M152 = [0, 0.69444, 0, 0, 0.75]; + var M153 = [0, 0.66786, 0, 0, 0.5]; + var M154 = [0, 0.68333, 0, 0, 0.625]; + var M155 = [0.19444, 0.69444, 0, 0, 0.44445]; + var M156 = [0, 0.69444, 0, 0, 0.72222]; + var M157 = [0.19444, 0.69444, 0, 0, 0.5]; + var M158 = [0.19444, 0.69444, 0, 0, 1]; + var M159 = [0.011, 0.511, 0, 0, 1.126]; + var M160 = [0.19444, 0.69444, 0, 0, 0.61111]; + var M161 = [0.05556, 0.75, 0, 0, 0.5]; + var M162 = [0, 0.68333, 0, 0, 0.83334]; + var M163 = [0.0391, 0.5391, 0, 0, 0.66667]; + var M164 = [-0.05555, 0.44445, 0, 0, 0.5]; + var M165 = [0, 0.43056, 0, 0, 0.77778]; + var M166 = [0, 0.55556, 0, 0, 0.66667]; + var M167 = [-0.03625, 0.46375, 0, 0, 0.77778]; + var M168 = [-0.01688, 0.48312, 0, 0, 0.77778]; + var M169 = [0.0391, 0.5391, 0, 0, 1]; + var M170 = [0, 0.69444, 0, 0, 0.61111]; + var M171 = [-0.03472, 0.46528, 0, 0, 0.5]; + var M172 = [0.25, 0.75, 0, 0, 0.44445]; + var M173 = [-0.14236, 0.35764, 0, 0, 1]; + var M174 = [0.244, 0.744, 0, 0, 0.412]; + var M175 = [0.19444, 0.69444, 0, 0, 0.88889]; + var M176 = [0.12963, 0.69444, 0, 0, 0.77778]; + var M177 = [0.19444, 0.69444, 0, 0, 0.38889]; + var M178 = [0.011, 0.511, 0, 0, 1.638]; + var M179 = [0.19444, 0.69444, 0, 0, 0]; + var M180 = [0, 0.44444, 0, 0, 0.575]; + var M181 = [0.19444, 0.44444, 0, 0, 0.575]; + var M182 = [0, 0.68611, 0, 0, 0.75555]; + var M183 = [0, 0.69444, 0, 0, 0.66759]; + var M184 = [0, 0.68611, 0, 0, 0.80555]; + var M185 = [0, 0.68611, 0.08229, 0, 0.98229]; + var M186 = [0, 0.68611, 0, 0, 0.76666]; + var M187 = [0, 0.44444, 0, 0, 0.58472]; + var M188 = [0.19444, 0.44444, 0, 0, 0.6118]; + var M189 = [0.19444, 0.43056, 0, 0, 0.5]; + var M190 = [0, 0.68333, 0.02778, 0.08334, 0.76278]; + var M191 = [0, 0.68333, 0.08125, 0.05556, 0.83125]; + var M192 = [0, 0.43056, 0, 0.05556, 0.48472]; + var M193 = [0.19444, 0.43056, 0, 0.08334, 0.51702]; + var M194 = [0.25, 0.75, 0, 0, 0.42778]; + var M195 = [0, 0.69444, 0, 0, 0.55]; + var M196 = [0, 0.69444, 0, 0, 0.73334]; + var M197 = [0, 0.69444, 0, 0, 0.79445]; + var M198 = [0, 0.69444, 0, 0, 0.51945]; + var M199 = [0, 0.69444, 0, 0, 0.70278]; + var M200 = [0, 0.69444, 0, 0, 0.76389]; + var M201 = [0.25, 0.75, 0, 0, 0.34306]; + var M202 = [0, 0.69444, 0, 0, 0.56111]; + var M203 = [0, 0.69444, 0, 0, 0.25556]; + var M204 = [0.19444, 0.45833, 0, 0, 0.56111]; + var M205 = [0, 0.45833, 0, 0, 0.56111]; + var M206 = [0, 0.69444, 0, 0, 0.30556]; + var M207 = [0, 0.69444, 0, 0, 0.58056]; + var M208 = [0, 0.69444, 0, 0, 0.67223]; + var M209 = [0, 0.69444, 0, 0, 0.85556]; + var M210 = [0, 0.69444, 0, 0, 0.55834]; + var M211 = [0, 0.65556, 0.11156, 0, 0.5]; + var M212 = [0, 0.69444, 0.08094, 0, 0.70834]; + var M213 = [0.17014, 0, 0, 0, 0.44445]; + var M214 = [0, 0.69444, 0.0799, 0, 0.5]; + var M215 = [0, 0.69444, 0, 0, 0.73752]; + var M216 = [0, 0.69444, 0.09205, 0, 0.5]; + var M217 = [0, 0.69444, 0.09031, 0, 0.77778]; + var M218 = [0, 0.69444, 0.07816, 0, 0.27778]; + var M219 = [0, 0.69444, 316e-5, 0, 0.5]; + var M220 = [0.19444, 0.69444, 0, 0, 0.83334]; + var M221 = [0.05556, 0.75, 0, 0, 0.83334]; + var M222 = [0, 0.75, 0, 0, 0.5]; + var M223 = [0.125, 0.08333, 0, 0, 0.27778]; + var M224 = [0, 0.08333, 0, 0, 0.27778]; + var M225 = [0, 0.65556, 0, 0, 0.5]; + var M226 = [0, 0.69444, 0, 0, 0.47222]; + var M227 = [0, 0.69444, 0, 0, 0.66667]; + var M228 = [0, 0.69444, 0, 0, 0.59722]; + var M229 = [0, 0.69444, 0, 0, 0.54167]; + var M230 = [0, 0.69444, 0, 0, 0.70834]; + var M231 = [0.25, 0.75, 0, 0, 0.28889]; + var M232 = [0, 0.69444, 0, 0, 0.51667]; + var M233 = [0, 0.44444, 0, 0, 0.44445]; + var M234 = [0.19444, 0.44444, 0, 0, 0.51667]; + var M235 = [0, 0.44444, 0, 0, 0.38333]; + var M236 = [0, 0.44444, 0, 0, 0.51667]; + var M237 = [0, 0.69444, 0, 0, 0.83334]; + var M238 = [0.35001, 0.85, 0, 0, 0.45834]; + var M239 = [0.35001, 0.85, 0, 0, 0.57778]; + var M240 = [0.35001, 0.85, 0, 0, 0.41667]; + var M241 = [0.35001, 0.85, 0, 0, 0.58334]; + var M242 = [0, 0.72222, 0, 0, 0.55556]; + var M243 = [1e-5, 0.6, 0, 0, 0.66667]; + var M244 = [1e-5, 0.6, 0, 0, 0.77778]; + var M245 = [0.25001, 0.75, 0, 0, 0.94445]; + var M246 = [0.306, 0.805, 0.19445, 0, 0.47222]; + var M247 = [0.30612, 0.805, 0.19445, 0, 0.47222]; + var M248 = [0.25001, 0.75, 0, 0, 0.83334]; + var M249 = [0.35001, 0.85, 0, 0, 0.47222]; + var M250 = [0.25001, 0.75, 0, 0, 1.11111]; + var M251 = [0.65002, 1.15, 0, 0, 0.59722]; + var M252 = [0.65002, 1.15, 0, 0, 0.81111]; + var M253 = [0.65002, 1.15, 0, 0, 0.47222]; + var M254 = [0.65002, 1.15, 0, 0, 0.66667]; + var M255 = [0, 0.75, 0, 0, 1]; + var M256 = [0.55001, 1.05, 0, 0, 1.27778]; + var M257 = [0.862, 1.36, 0.44445, 0, 0.55556]; + var M258 = [0.86225, 1.36, 0.44445, 0, 0.55556]; + var M259 = [0.55001, 1.05, 0, 0, 1.11111]; + var M260 = [0.65002, 1.15, 0, 0, 0.52778]; + var M261 = [0.65002, 1.15, 0, 0, 0.61111]; + var M262 = [0.55001, 1.05, 0, 0, 1.51112]; + var M263 = [0.95003, 1.45, 0, 0, 0.73611]; + var M264 = [0.95003, 1.45, 0, 0, 1.04445]; + var M265 = [0.95003, 1.45, 0, 0, 0.52778]; + var M266 = [0.95003, 1.45, 0, 0, 0.75]; + var M267 = [0, 0.75, 0, 0, 1.44445]; + var M268 = [0.95003, 1.45, 0, 0, 0.58334]; + var M269 = [1.25003, 1.75, 0, 0, 0.79167]; + var M270 = [1.25003, 1.75, 0, 0, 1.27778]; + var M271 = [1.25003, 1.75, 0, 0, 0.58334]; + var M272 = [1.25003, 1.75, 0, 0, 0.80556]; + var M273 = [0, 0.825, 0, 0, 1.8889]; + var M274 = [1.25003, 1.75, 0, 0, 0.63889]; + var M275 = [0.64502, 1.155, 0, 0, 0.875]; + var M276 = [1e-5, 0.6, 0, 0, 0.875]; + var M277 = [-99e-5, 0.601, 0, 0, 0.66667]; + var M278 = [0.64502, 1.155, 0, 0, 0.66667]; + var M279 = [1e-5, 0.9, 0, 0, 0.88889]; + var M280 = [0.65002, 1.15, 0, 0, 0.88889]; + var M281 = [0.90001, 0, 0, 0, 0.88889]; + var M282 = [-499e-5, 0.605, 0, 0, 1.05556]; + var M283 = [0, 0.12, 0, 0, 0.45]; + var M284 = [0, 0.61111, 0, 0, 0.525]; + var M285 = [0.08333, 0.69444, 0, 0, 0.525]; + var M286 = [-0.08056, 0.53055, 0, 0, 0.525]; + var M287 = [-0.05556, 0.55556, 0, 0, 0.525]; + var M288 = [0, 0.43056, 0, 0, 0.525]; + var M289 = [0.22222, 0.43056, 0, 0, 0.525]; + var M290 = [0, 0, 0, 0, 0.525]; + var font_metrics_data_default = { + "AMS-Regular": { + 32: M7, + // U+0020 + 65: M1, + // U+0041 A + 66: M2, + // U+0042 B + 67: M1, + // U+0043 C + 68: M1, + // U+0044 D + 69: M2, + // U+0045 E + 70: M4, + // U+0046 F + 71: M3, + // U+0047 G + 72: M3, + // U+0048 H + 73: [0, 0.68889, 0, 0, 0.38889], + // U+0049 I + 74: [0.16667, 0.68889, 0, 0, 0.5], + // U+004a J + 75: M3, + // U+004b K + 76: M2, + // U+004c L + 77: [0, 0.68889, 0, 0, 0.94445], + // U+004d M + 78: M1, + // U+004e N + 79: M5, + // U+004f O + 80: M4, + // U+0050 P + 81: M5, + // U+0051 Q + 82: M1, + // U+0052 R + 83: M6, + // U+0053 S + 84: M2, + // U+0054 T + 85: M1, + // U+0055 U + 86: M1, + // U+0056 V + 87: [0, 0.68889, 0, 0, 1], + // U+0057 W + 88: M1, + // U+0058 X + 89: M1, + // U+0059 Y + 90: M2, + // U+005a Z + 107: M6, + // U+006b k + 160: M7, + // U+00a0 + 165: [0, 0.675, 0.025, 0, 0.75], + // U+00a5 ¥ + 174: [0.15559, 0.69224, 0, 0, 0.94666], + // U+00ae ® + 240: M6, + // U+00f0 ð + 295: M10, + // U+0127 ħ + 710: M8, + // U+02c6 ˆ + 732: M9, + // U+02dc ˜ + 770: M8, + // U+0302 ̂ + 771: M9, + // U+0303 ̃ + 989: M24, + // U+03dd ϝ + 1008: M57, + // U+03f0 ϰ + 8245: [0, 0.54986, 0, 0, 0.275], + // U+2035 ‵ + 8463: M10, + // U+210f ℏ + 8487: M1, + // U+2127 ℧ + 8498: M6, + // U+2132 Ⅎ + 8502: M2, + // U+2136 ℶ + 8503: [0, 0.68889, 0, 0, 0.44445], + // U+2137 ℷ + 8504: M2, + // U+2138 ℸ + 8513: [0, 0.68889, 0, 0, 0.63889], + // U+2141 ⅁ + 8592: M11, + // U+2190 ← + 8594: M11, + // U+2192 → + 8602: M12, + // U+219a ↚ + 8603: M12, + // U+219b ↛ + 8606: M13, + // U+219e ↞ + 8608: M13, + // U+21a0 ↠ + 8610: M14, + // U+21a2 ↢ + 8611: M14, + // U+21a3 ↣ + 8619: M15, + // U+21ab ↫ + 8620: M15, + // U+21ac ↬ + 8621: [-0.13313, 0.37788, 0, 0, 1.38889], + // U+21ad ↭ + 8622: M12, + // U+21ae ↮ + 8624: M16, + // U+21b0 ↰ + 8625: M16, + // U+21b1 ↱ + 8630: M17, + // U+21b6 ↶ + 8631: M17, + // U+21b7 ↷ + 8634: M18, + // U+21ba ↺ + 8635: M18, + // U+21bb ↻ + 8638: M19, + // U+21be ↾ + 8639: M19, + // U+21bf ↿ + 8642: M19, + // U+21c2 ⇂ + 8643: M19, + // U+21c3 ⇃ + 8644: M20, + // U+21c4 ⇄ + 8646: M20, + // U+21c6 ⇆ + 8647: M20, + // U+21c7 ⇇ + 8648: M21, + // U+21c8 ⇈ + 8649: M20, + // U+21c9 ⇉ + 8650: M21, + // U+21ca ⇊ + 8651: M13, + // U+21cb ⇋ + 8652: M13, + // U+21cc ⇌ + 8653: M12, + // U+21cd ⇍ + 8654: M12, + // U+21ce ⇎ + 8655: M12, + // U+21cf ⇏ + 8666: M22, + // U+21da ⇚ + 8667: M22, + // U+21db ⇛ + 8669: [-0.13313, 0.37788, 0, 0, 1], + // U+21dd ⇝ + 8672: M23, + // U+21e0 ⇠ + 8674: M23, + // U+21e2 ⇢ + 8705: [0, 0.825, 0, 0, 0.5], + // U+2201 ∁ + 8708: M6, + // U+2204 ∄ + 8709: M24, + // U+2205 ∅ + 8717: [0, 0.43056, 0, 0, 0.42917], + // U+220d ∍ + 8722: M11, + // U+2212 − + 8724: [0.08198, 0.69224, 0, 0, 0.77778], + // U+2214 ∔ + 8726: M24, + // U+2216 ∖ + 8733: M29, + // U+221d ∝ + 8736: M25, + // U+2220 ∠ + 8737: M25, + // U+2221 ∡ + 8738: [0.03517, 0.52239, 0, 0, 0.72222], + // U+2222 ∢ + 8739: M55, + // U+2223 ∣ + 8740: [0.25142, 0.74111, 0, 0, 0.27778], + // U+2224 ∤ + 8741: M56, + // U+2225 ∥ + 8742: [0.25142, 0.74111, 0, 0, 0.5], + // U+2226 ∦ + 8756: M26, + // U+2234 ∴ + 8757: M26, + // U+2235 ∵ + 8764: M27, + // U+223c ∼ + 8765: [-0.13313, 0.37788, 0, 0, 0.77778], + // U+223d ∽ + 8769: M27, + // U+2241 ≁ + 8770: M167, + // U+2242 ≂ + 8774: M33, + // U+2246 ≆ + 8776: M168, + // U+2248 ≈ + 8778: M24, + // U+224a ≊ + 8782: M28, + // U+224e ≎ + 8783: M28, + // U+224f ≏ + 8785: M18, + // U+2251 ≑ + 8786: M18, + // U+2252 ≒ + 8787: M18, + // U+2253 ≓ + 8790: M29, + // U+2256 ≖ + 8791: M34, + // U+2257 ≗ + 8796: [0.08198, 0.91667, 0, 0, 0.77778], + // U+225c ≜ + 8806: M30, + // U+2266 ≦ + 8807: M30, + // U+2267 ≧ + 8808: M31, + // U+2268 ≨ + 8809: M31, + // U+2269 ≩ + 8812: [0.25583, 0.75583, 0, 0, 0.5], + // U+226c ≬ + 8814: M32, + // U+226e ≮ + 8815: M32, + // U+226f ≯ + 8816: M33, + // U+2270 ≰ + 8817: M33, + // U+2271 ≱ + 8818: M34, + // U+2272 ≲ + 8819: M34, + // U+2273 ≳ + 8822: M35, + // U+2276 ≶ + 8823: M35, + // U+2277 ≷ + 8828: M36, + // U+227c ≼ + 8829: M36, + // U+227d ≽ + 8830: M34, + // U+227e ≾ + 8831: M34, + // U+227f ≿ + 8832: M32, + // U+2280 ⊀ + 8833: M32, + // U+2281 ⊁ + 8840: M33, + // U+2288 ⊈ + 8841: M33, + // U+2289 ⊉ + 8842: M37, + // U+228a ⊊ + 8843: M37, + // U+228b ⊋ + 8847: M38, + // U+228f ⊏ + 8848: M38, + // U+2290 ⊐ + 8858: M18, + // U+229a ⊚ + 8859: M18, + // U+229b ⊛ + 8861: M18, + // U+229d ⊝ + 8862: M39, + // U+229e ⊞ + 8863: M39, + // U+229f ⊟ + 8864: M39, + // U+22a0 ⊠ + 8865: M39, + // U+22a1 ⊡ + 8872: [0, 0.69224, 0, 0, 0.61111], + // U+22a8 ⊨ + 8873: M25, + // U+22a9 ⊩ + 8874: [0, 0.69224, 0, 0, 0.88889], + // U+22aa ⊪ + 8876: M4, + // U+22ac ⊬ + 8877: M4, + // U+22ad ⊭ + 8878: M1, + // U+22ae ⊮ + 8879: M1, + // U+22af ⊯ + 8882: M38, + // U+22b2 ⊲ + 8883: M38, + // U+22b3 ⊳ + 8884: M36, + // U+22b4 ⊴ + 8885: M36, + // U+22b5 ⊵ + 8888: [0, 0.54986, 0, 0, 1.11111], + // U+22b8 ⊸ + 8890: M147, + // U+22ba ⊺ + 8891: M40, + // U+22bb ⊻ + 8892: M40, + // U+22bc ⊼ + 8901: [0, 0.54986, 0, 0, 0.27778], + // U+22c5 ⋅ + 8903: M24, + // U+22c7 ⋇ + 8905: M24, + // U+22c9 ⋉ + 8906: M24, + // U+22ca ⋊ + 8907: M29, + // U+22cb ⋋ + 8908: M29, + // U+22cc ⋌ + 8909: [-0.03598, 0.46402, 0, 0, 0.77778], + // U+22cd ⋍ + 8910: M41, + // U+22ce ⋎ + 8911: M41, + // U+22cf ⋏ + 8912: M38, + // U+22d0 ⋐ + 8913: M38, + // U+22d1 ⋑ + 8914: M42, + // U+22d2 ⋒ + 8915: M42, + // U+22d3 ⋓ + 8916: M26, + // U+22d4 ⋔ + 8918: M43, + // U+22d6 ⋖ + 8919: M43, + // U+22d7 ⋗ + 8920: M44, + // U+22d8 ⋘ + 8921: M44, + // U+22d9 ⋙ + 8922: M45, + // U+22da ⋚ + 8923: M45, + // U+22db ⋛ + 8926: M36, + // U+22de ⋞ + 8927: M36, + // U+22df ⋟ + 8928: M33, + // U+22e0 ⋠ + 8929: M33, + // U+22e1 ⋡ + 8934: M46, + // U+22e6 ⋦ + 8935: M46, + // U+22e7 ⋧ + 8936: M46, + // U+22e8 ⋨ + 8937: M46, + // U+22e9 ⋩ + 8938: M32, + // U+22ea ⋪ + 8939: M32, + // U+22eb ⋫ + 8940: M33, + // U+22ec ⋬ + 8941: M33, + // U+22ed ⋭ + 8994: M47, + // U+2322 ⌢ + 8995: M47, + // U+2323 ⌣ + 9416: [0.15559, 0.69224, 0, 0, 0.90222], + // U+24c8 Ⓢ + 9484: M16, + // U+250c ┌ + 9488: M16, + // U+2510 ┐ + 9492: M48, + // U+2514 └ + 9496: M48, + // U+2518 ┘ + 9585: [0.19444, 0.68889, 0, 0, 0.88889], + // U+2571 ╱ + 9586: [0.19444, 0.74111, 0, 0, 0.88889], + // U+2572 ╲ + 9632: M39, + // U+25a0 ■ + 9633: M39, + // U+25a1 □ + 9650: M49, + // U+25b2 ▲ + 9651: M49, + // U+25b3 △ + 9654: M38, + // U+25b6 ▶ + 9660: M49, + // U+25bc ▼ + 9661: M49, + // U+25bd ▽ + 9664: M38, + // U+25c0 ◀ + 9674: M51, + // U+25ca ◊ + 9733: [0.19444, 0.69224, 0, 0, 0.94445], + // U+2605 ★ + 10003: M50, + // U+2713 ✓ + 10016: M50, + // U+2720 ✠ + 10731: M51, + // U+29eb ⧫ + 10846: [0.19444, 0.75583, 0, 0, 0.61111], + // U+2a5e ⩞ + 10877: M36, + // U+2a7d ⩽ + 10878: M36, + // U+2a7e ⩾ + 10885: M30, + // U+2a85 ⪅ + 10886: M30, + // U+2a86 ⪆ + 10887: M37, + // U+2a87 ⪇ + 10888: M37, + // U+2a88 ⪈ + 10889: M52, + // U+2a89 ⪉ + 10890: M52, + // U+2a8a ⪊ + 10891: M53, + // U+2a8b ⪋ + 10892: M53, + // U+2a8c ⪌ + 10901: M36, + // U+2a95 ⪕ + 10902: M36, + // U+2a96 ⪖ + 10933: M31, + // U+2ab5 ⪵ + 10934: M31, + // U+2ab6 ⪶ + 10935: M52, + // U+2ab7 ⪷ + 10936: M52, + // U+2ab8 ⪸ + 10937: M52, + // U+2ab9 ⪹ + 10938: M52, + // U+2aba ⪺ + 10949: M30, + // U+2ac5 ⫅ + 10950: M30, + // U+2ac6 ⫆ + 10955: M54, + // U+2acb ⫋ + 10956: M54, + // U+2acc ⫌ + 57350: M55, + // U+e006  + 57351: M56, + // U+e007  + 57352: M24, + // U+e008  + 57353: M57, + // U+e009  + 57356: M31, + // U+e00c  + 57357: M31, + // U+e00d  + 57358: M58, + // U+e00e  + 57359: M33, + // U+e00f  + 57360: M33, + // U+e010  + 57361: M58, + // U+e011  + 57366: M31, + // U+e016  + 57367: M31, + // U+e017  + 57368: M31, + // U+e018  + 57369: M31, + // U+e019  + 57370: M37, + // U+e01a  + 57371: M37 + // U+e01b  + }, + "Caligraphic-Regular": { + 32: M7, + // U+0020 + 65: [0, 0.68333, 0, 0.19445, 0.79847], + // U+0041 A + 66: [0, 0.68333, 0.03041, 0.13889, 0.65681], + // U+0042 B + 67: [0, 0.68333, 0.05834, 0.13889, 0.52653], + // U+0043 C + 68: [0, 0.68333, 0.02778, 0.08334, 0.77139], + // U+0044 D + 69: [0, 0.68333, 0.08944, 0.11111, 0.52778], + // U+0045 E + 70: [0, 0.68333, 0.09931, 0.11111, 0.71875], + // U+0046 F + 71: [0.09722, 0.68333, 0.0593, 0.11111, 0.59487], + // U+0047 G + 72: [0, 0.68333, 965e-5, 0.11111, 0.84452], + // U+0048 H + 73: [0, 0.68333, 0.07382, 0, 0.54452], + // U+0049 I + 74: [0.09722, 0.68333, 0.18472, 0.16667, 0.67778], + // U+004a J + 75: [0, 0.68333, 0.01445, 0.05556, 0.76195], + // U+004b K + 76: [0, 0.68333, 0, 0.13889, 0.68972], + // U+004c L + 77: [0, 0.68333, 0, 0.13889, 1.2009], + // U+004d M + 78: [0, 0.68333, 0.14736, 0.08334, 0.82049], + // U+004e N + 79: [0, 0.68333, 0.02778, 0.11111, 0.79611], + // U+004f O + 80: [0, 0.68333, 0.08222, 0.08334, 0.69556], + // U+0050 P + 81: [0.09722, 0.68333, 0, 0.11111, 0.81667], + // U+0051 Q + 82: [0, 0.68333, 0, 0.08334, 0.8475], + // U+0052 R + 83: [0, 0.68333, 0.075, 0.13889, 0.60556], + // U+0053 S + 84: [0, 0.68333, 0.25417, 0, 0.54464], + // U+0054 T + 85: [0, 0.68333, 0.09931, 0.08334, 0.62583], + // U+0055 U + 86: [0, 0.68333, 0.08222, 0, 0.61278], + // U+0056 V + 87: [0, 0.68333, 0.08222, 0.08334, 0.98778], + // U+0057 W + 88: [0, 0.68333, 0.14643, 0.13889, 0.7133], + // U+0058 X + 89: [0.09722, 0.68333, 0.08222, 0.08334, 0.66834], + // U+0059 Y + 90: [0, 0.68333, 0.07944, 0.13889, 0.72473], + // U+005a Z + 160: M7 + // U+00a0 + }, + "Fraktur-Regular": { + 32: M7, + // U+0020 + 33: [0, 0.69141, 0, 0, 0.29574], + // U+0021 ! + 34: M66, + // U+0022 " + 38: [0, 0.69141, 0, 0, 0.73786], + // U+0026 & + 39: [0, 0.69141, 0, 0, 0.21201], + // U+0027 ' + 40: M59, + // U+0028 ( + 41: M59, + // U+0029 ) + 42: [0, 0.62119, 0, 0, 0.27764], + // U+002a * + 43: M60, + // U+002b + + 44: M61, + // U+002c , + 45: M60, + // U+002d - + 46: M61, + // U+002e . + 47: [0.24982, 0.74947, 0, 0, 0.50181], + // U+002f / + 48: M62, + // U+0030 0 + 49: M62, + // U+0031 1 + 50: M62, + // U+0032 2 + 51: M63, + // U+0033 3 + 52: M63, + // U+0034 4 + 53: M63, + // U+0035 5 + 54: M64, + // U+0036 6 + 55: M63, + // U+0037 7 + 56: M64, + // U+0038 8 + 57: M63, + // U+0039 9 + 58: [0, 0.47534, 0, 0, 0.21606], + // U+003a : + 59: [0.12604, 0.47534, 0, 0, 0.21606], + // U+003b ; + 61: [-0.13099, 0.36866, 0, 0, 0.75623], + // U+003d = + 63: [0, 0.69141, 0, 0, 0.36245], + // U+003f ? + 65: [0, 0.69141, 0, 0, 0.7176], + // U+0041 A + 66: [0, 0.69141, 0, 0, 0.88397], + // U+0042 B + 67: [0, 0.69141, 0, 0, 0.61254], + // U+0043 C + 68: [0, 0.69141, 0, 0, 0.83158], + // U+0044 D + 69: [0, 0.69141, 0, 0, 0.66278], + // U+0045 E + 70: [0.12604, 0.69141, 0, 0, 0.61119], + // U+0046 F + 71: [0, 0.69141, 0, 0, 0.78539], + // U+0047 G + 72: [0.06302, 0.69141, 0, 0, 0.7203], + // U+0048 H + 73: [0, 0.69141, 0, 0, 0.55448], + // U+0049 I + 74: [0.12604, 0.69141, 0, 0, 0.55231], + // U+004a J + 75: [0, 0.69141, 0, 0, 0.66845], + // U+004b K + 76: [0, 0.69141, 0, 0, 0.66602], + // U+004c L + 77: [0, 0.69141, 0, 0, 1.04953], + // U+004d M + 78: [0, 0.69141, 0, 0, 0.83212], + // U+004e N + 79: [0, 0.69141, 0, 0, 0.82699], + // U+004f O + 80: [0.18906, 0.69141, 0, 0, 0.82753], + // U+0050 P + 81: [0.03781, 0.69141, 0, 0, 0.82699], + // U+0051 Q + 82: [0, 0.69141, 0, 0, 0.82807], + // U+0052 R + 83: [0, 0.69141, 0, 0, 0.82861], + // U+0053 S + 84: [0, 0.69141, 0, 0, 0.66899], + // U+0054 T + 85: [0, 0.69141, 0, 0, 0.64576], + // U+0055 U + 86: [0, 0.69141, 0, 0, 0.83131], + // U+0056 V + 87: [0, 0.69141, 0, 0, 1.04602], + // U+0057 W + 88: [0, 0.69141, 0, 0, 0.71922], + // U+0058 X + 89: [0.18906, 0.69141, 0, 0, 0.83293], + // U+0059 Y + 90: [0.12604, 0.69141, 0, 0, 0.60201], + // U+005a Z + 91: M65, + // U+005b [ + 93: M65, + // U+005d ] + 94: [0, 0.69141, 0, 0, 0.49965], + // U+005e ^ + 97: [0, 0.47534, 0, 0, 0.50046], + // U+0061 a + 98: [0, 0.69141, 0, 0, 0.51315], + // U+0062 b + 99: [0, 0.47534, 0, 0, 0.38946], + // U+0063 c + 100: [0, 0.62119, 0, 0, 0.49857], + // U+0064 d + 101: [0, 0.47534, 0, 0, 0.40053], + // U+0065 e + 102: [0.18906, 0.69141, 0, 0, 0.32626], + // U+0066 f + 103: [0.18906, 0.47534, 0, 0, 0.5037], + // U+0067 g + 104: [0.18906, 0.69141, 0, 0, 0.52126], + // U+0068 h + 105: [0, 0.69141, 0, 0, 0.27899], + // U+0069 i + 106: [0, 0.69141, 0, 0, 0.28088], + // U+006a j + 107: [0, 0.69141, 0, 0, 0.38946], + // U+006b k + 108: [0, 0.69141, 0, 0, 0.27953], + // U+006c l + 109: [0, 0.47534, 0, 0, 0.76676], + // U+006d m + 110: [0, 0.47534, 0, 0, 0.52666], + // U+006e n + 111: [0, 0.47534, 0, 0, 0.48885], + // U+006f o + 112: [0.18906, 0.52396, 0, 0, 0.50046], + // U+0070 p + 113: [0.18906, 0.47534, 0, 0, 0.48912], + // U+0071 q + 114: [0, 0.47534, 0, 0, 0.38919], + // U+0072 r + 115: [0, 0.47534, 0, 0, 0.44266], + // U+0073 s + 116: [0, 0.62119, 0, 0, 0.33301], + // U+0074 t + 117: [0, 0.47534, 0, 0, 0.5172], + // U+0075 u + 118: [0, 0.52396, 0, 0, 0.5118], + // U+0076 v + 119: [0, 0.52396, 0, 0, 0.77351], + // U+0077 w + 120: [0.18906, 0.47534, 0, 0, 0.38865], + // U+0078 x + 121: [0.18906, 0.47534, 0, 0, 0.49884], + // U+0079 y + 122: [0.18906, 0.47534, 0, 0, 0.39054], + // U+007a z + 160: M7, + // U+00a0 + 8216: M66, + // U+2018 ‘ + 8217: M66, + // U+2019 ’ + 58112: [0, 0.62119, 0, 0, 0.49749], + // U+e300  + 58113: [0, 0.62119, 0, 0, 0.4983], + // U+e301  + 58114: [0.18906, 0.69141, 0, 0, 0.33328], + // U+e302  + 58115: [0.18906, 0.69141, 0, 0, 0.32923], + // U+e303  + 58116: [0.18906, 0.47534, 0, 0, 0.50343], + // U+e304  + 58117: [0, 0.69141, 0, 0, 0.33301], + // U+e305  + 58118: [0, 0.62119, 0, 0, 0.33409], + // U+e306  + 58119: [0, 0.47534, 0, 0, 0.50073] + // U+e307  + }, + "Main-Bold": { + 32: M7, + // U+0020 + 33: [0, 0.69444, 0, 0, 0.35], + // U+0021 ! + 34: M86, + // U+0022 " + 35: [0.19444, 0.69444, 0, 0, 0.95833], + // U+0023 # + 36: M93, + // U+0024 $ + 37: [0.05556, 0.75, 0, 0, 0.95833], + // U+0025 % + 38: M70, + // U+0026 & + 39: M76, + // U+0027 ' + 40: M67, + // U+0028 ( + 41: M67, + // U+0029 ) + 42: [0, 0.75, 0, 0, 0.575], + // U+002a * + 43: M80, + // U+002b + + 44: [0.19444, 0.15556, 0, 0, 0.31944], + // U+002c , + 45: M235, + // U+002d - + 46: [0, 0.15556, 0, 0, 0.31944], + // U+002e . + 47: M73, + // U+002f / + 48: M68, + // U+0030 0 + 49: M68, + // U+0031 1 + 50: M68, + // U+0032 2 + 51: M68, + // U+0033 3 + 52: M68, + // U+0034 4 + 53: M68, + // U+0035 5 + 54: M68, + // U+0036 6 + 55: M68, + // U+0037 7 + 56: M68, + // U+0038 8 + 57: M68, + // U+0039 9 + 58: M81, + // U+003a : + 59: [0.19444, 0.44444, 0, 0, 0.31944], + // U+003b ; + 60: M69, + // U+003c < + 61: M99, + // U+003d = + 62: M69, + // U+003e > + 63: [0, 0.69444, 0, 0, 0.54305], + // U+003f ? + 64: M70, + // U+0040 @ + 65: M72, + // U+0041 A + 66: [0, 0.68611, 0, 0, 0.81805], + // U+0042 B + 67: M84, + // U+0043 C + 68: [0, 0.68611, 0, 0, 0.88194], + // U+0044 D + 69: M182, + // U+0045 E + 70: [0, 0.68611, 0, 0, 0.72361], + // U+0046 F + 71: [0, 0.68611, 0, 0, 0.90416], + // U+0047 G + 72: M71, + // U+0048 H + 73: [0, 0.68611, 0, 0, 0.43611], + // U+0049 I + 74: [0, 0.68611, 0, 0, 0.59444], + // U+004a J + 75: [0, 0.68611, 0, 0, 0.90138], + // U+004b K + 76: M83, + // U+004c L + 77: [0, 0.68611, 0, 0, 1.09166], + // U+004d M + 78: M71, + // U+004e N + 79: [0, 0.68611, 0, 0, 0.86388], + // U+004f O + 80: [0, 0.68611, 0, 0, 0.78611], + // U+0050 P + 81: [0.19444, 0.68611, 0, 0, 0.86388], + // U+0051 Q + 82: [0, 0.68611, 0, 0, 0.8625], + // U+0052 R + 83: [0, 0.68611, 0, 0, 0.63889], + // U+0053 S + 84: [0, 0.68611, 0, 0, 0.8], + // U+0054 T + 85: [0, 0.68611, 0, 0, 0.88472], + // U+0055 U + 86: [0, 0.68611, 0.01597, 0, 0.86944], + // U+0056 V + 87: [0, 0.68611, 0.01597, 0, 1.18888], + // U+0057 W + 88: M72, + // U+0058 X + 89: [0, 0.68611, 0.02875, 0, 0.86944], + // U+0059 Y + 90: [0, 0.68611, 0, 0, 0.70277], + // U+005a Z + 91: M74, + // U+005b [ + 92: M73, + // U+005c \ + 93: M74, + // U+005d ] + 94: M79, + // U+005e ^ + 95: [0.31, 0.13444, 0.03194, 0, 0.575], + // U+005f _ + 97: [0, 0.44444, 0, 0, 0.55902], + // U+0061 a + 98: M75, + // U+0062 b + 99: M78, + // U+0063 c + 100: M75, + // U+0064 d + 101: [0, 0.44444, 0, 0, 0.52708], + // U+0065 e + 102: [0, 0.69444, 0.10903, 0, 0.35139], + // U+0066 f + 103: [0.19444, 0.44444, 0.01597, 0, 0.575], + // U+0067 g + 104: M75, + // U+0068 h + 105: M76, + // U+0069 i + 106: [0.19444, 0.69444, 0, 0, 0.35139], + // U+006a j + 107: [0, 0.69444, 0, 0, 0.60694], + // U+006b k + 108: M76, + // U+006c l + 109: [0, 0.44444, 0, 0, 0.95833], + // U+006d m + 110: M77, + // U+006e n + 111: M180, + // U+006f o + 112: [0.19444, 0.44444, 0, 0, 0.63889], + // U+0070 p + 113: [0.19444, 0.44444, 0, 0, 0.60694], + // U+0071 q + 114: [0, 0.44444, 0, 0, 0.47361], + // U+0072 r + 115: [0, 0.44444, 0, 0, 0.45361], + // U+0073 s + 116: [0, 0.63492, 0, 0, 0.44722], + // U+0074 t + 117: M77, + // U+0075 u + 118: [0, 0.44444, 0.01597, 0, 0.60694], + // U+0076 v + 119: [0, 0.44444, 0.01597, 0, 0.83055], + // U+0077 w + 120: [0, 0.44444, 0, 0, 0.60694], + // U+0078 x + 121: [0.19444, 0.44444, 0.01597, 0, 0.60694], + // U+0079 y + 122: M78, + // U+007a z + 123: M73, + // U+007b { + 124: M74, + // U+007c | + 125: M73, + // U+007d } + 126: [0.35, 0.34444, 0, 0, 0.575], + // U+007e ~ + 160: M7, + // U+00a0 + 163: [0, 0.69444, 0, 0, 0.86853], + // U+00a3 £ + 168: M79, + // U+00a8 ¨ + 172: [0, 0.44444, 0, 0, 0.76666], + // U+00ac ¬ + 176: M82, + // U+00b0 ° + 177: M80, + // U+00b1 ± + 184: [0.17014, 0, 0, 0, 0.51111], + // U+00b8 ¸ + 198: [0, 0.68611, 0, 0, 1.04166], + // U+00c6 Æ + 215: M80, + // U+00d7 × + 216: [0.04861, 0.73472, 0, 0, 0.89444], + // U+00d8 Ø + 223: M228, + // U+00df ß + 230: [0, 0.44444, 0, 0, 0.83055], + // U+00e6 æ + 247: M80, + // U+00f7 ÷ + 248: [0.09722, 0.54167, 0, 0, 0.575], + // U+00f8 ø + 305: M81, + // U+0131 ı + 338: [0, 0.68611, 0, 0, 1.16944], + // U+0152 Œ + 339: M97, + // U+0153 œ + 567: [0.19444, 0.44444, 0, 0, 0.35139], + // U+0237 ȷ + 710: M79, + // U+02c6 ˆ + 711: [0, 0.63194, 0, 0, 0.575], + // U+02c7 ˇ + 713: [0, 0.59611, 0, 0, 0.575], + // U+02c9 ˉ + 714: M79, + // U+02ca ˊ + 715: M79, + // U+02cb ˋ + 728: M79, + // U+02d8 ˘ + 729: M76, + // U+02d9 ˙ + 730: M82, + // U+02da ˚ + 732: M79, + // U+02dc ˜ + 733: M79, + // U+02dd ˝ + 915: M83, + // U+0393 Γ + 916: M94, + // U+0394 Δ + 920: M85, + // U+0398 Θ + 923: M184, + // U+039b Λ + 926: M186, + // U+039e Ξ + 928: M71, + // U+03a0 Π + 931: M84, + // U+03a3 Σ + 933: M85, + // U+03a5 Υ + 934: M84, + // U+03a6 Φ + 936: M85, + // U+03a8 Ψ + 937: M84, + // U+03a9 Ω + 8211: [0, 0.44444, 0.03194, 0, 0.575], + // U+2013 – + 8212: [0, 0.44444, 0.03194, 0, 1.14999], + // U+2014 — + 8216: M76, + // U+2018 ‘ + 8217: M76, + // U+2019 ’ + 8220: M86, + // U+201c “ + 8221: M86, + // U+201d ” + 8224: M87, + // U+2020 † + 8225: M87, + // U+2021 ‡ + 8242: [0, 0.55556, 0, 0, 0.34444], + // U+2032 ′ + 8407: [0, 0.72444, 0.15486, 0, 0.575], + // U+20d7 ⃗ + 8463: M183, + // U+210f ℏ + 8465: M88, + // U+2111 ℑ + 8467: [0, 0.69444, 0, 0, 0.47361], + // U+2113 ℓ + 8472: [0.19444, 0.44444, 0, 0, 0.74027], + // U+2118 ℘ + 8476: M88, + // U+211c ℜ + 8501: M103, + // U+2135 ℵ + 8592: M89, + // U+2190 ← + 8593: M90, + // U+2191 ↑ + 8594: M89, + // U+2192 → + 8595: M90, + // U+2193 ↓ + 8596: M89, + // U+2194 ↔ + 8597: M73, + // U+2195 ↕ + 8598: M91, + // U+2196 ↖ + 8599: M91, + // U+2197 ↗ + 8600: M91, + // U+2198 ↘ + 8601: M91, + // U+2199 ↙ + 8636: M89, + // U+21bc ↼ + 8637: M89, + // U+21bd ↽ + 8640: M89, + // U+21c0 ⇀ + 8641: M89, + // U+21c1 ⇁ + 8656: M89, + // U+21d0 ⇐ + 8657: M92, + // U+21d1 ⇑ + 8658: M89, + // U+21d2 ⇒ + 8659: M92, + // U+21d3 ⇓ + 8660: M89, + // U+21d4 ⇔ + 8661: [0.25, 0.75, 0, 0, 0.70277], + // U+21d5 ⇕ + 8704: M75, + // U+2200 ∀ + 8706: [0, 0.69444, 0.06389, 0, 0.62847], + // U+2202 ∂ + 8707: M75, + // U+2203 ∃ + 8709: M93, + // U+2205 ∅ + 8711: M94, + // U+2207 ∇ + 8712: M95, + // U+2208 ∈ + 8715: M95, + // U+220b ∋ + 8722: M80, + // U+2212 − + 8723: M80, + // U+2213 ∓ + 8725: M73, + // U+2215 ∕ + 8726: M73, + // U+2216 ∖ + 8727: M104, + // U+2217 ∗ + 8728: M96, + // U+2218 ∘ + 8729: M96, + // U+2219 ∙ + 8730: [0.18, 0.82, 0, 0, 0.95833], + // U+221a √ + 8733: M97, + // U+221d ∝ + 8734: [0, 0.44444, 0, 0, 1.14999], + // U+221e ∞ + 8736: M25, + // U+2220 ∠ + 8739: M74, + // U+2223 ∣ + 8741: M73, + // U+2225 ∥ + 8743: M98, + // U+2227 ∧ + 8744: M98, + // U+2228 ∨ + 8745: M98, + // U+2229 ∩ + 8746: M98, + // U+222a ∪ + 8747: [0.19444, 0.69444, 0.12778, 0, 0.56875], + // U+222b ∫ + 8764: M99, + // U+223c ∼ + 8768: [0.19444, 0.69444, 0, 0, 0.31944], + // U+2240 ≀ + 8771: M100, + // U+2243 ≃ + 8776: [0.02444, 0.52444, 0, 0, 0.89444], + // U+2248 ≈ + 8781: M100, + // U+224d ≍ + 8801: M100, + // U+2261 ≡ + 8804: M101, + // U+2264 ≤ + 8805: M101, + // U+2265 ≥ + 8810: M102, + // U+226a ≪ + 8811: M102, + // U+226b ≫ + 8826: M69, + // U+227a ≺ + 8827: M69, + // U+227b ≻ + 8834: M69, + // U+2282 ⊂ + 8835: M69, + // U+2283 ⊃ + 8838: M101, + // U+2286 ⊆ + 8839: M101, + // U+2287 ⊇ + 8846: M98, + // U+228e ⊎ + 8849: M101, + // U+2291 ⊑ + 8850: M101, + // U+2292 ⊒ + 8851: M98, + // U+2293 ⊓ + 8852: M98, + // U+2294 ⊔ + 8853: M80, + // U+2295 ⊕ + 8854: M80, + // U+2296 ⊖ + 8855: M80, + // U+2297 ⊗ + 8856: M80, + // U+2298 ⊘ + 8857: M80, + // U+2299 ⊙ + 8866: M103, + // U+22a2 ⊢ + 8867: M103, + // U+22a3 ⊣ + 8868: M70, + // U+22a4 ⊤ + 8869: M70, + // U+22a5 ⊥ + 8900: M96, + // U+22c4 ⋄ + 8901: [-0.02639, 0.47361, 0, 0, 0.31944], + // U+22c5 ⋅ + 8902: M104, + // U+22c6 ⋆ + 8968: M105, + // U+2308 ⌈ + 8969: M105, + // U+2309 ⌉ + 8970: M105, + // U+230a ⌊ + 8971: M105, + // U+230b ⌋ + 8994: M106, + // U+2322 ⌢ + 8995: M106, + // U+2323 ⌣ + 9651: M107, + // U+25b3 △ + 9657: M104, + // U+25b9 ▹ + 9661: M107, + // U+25bd ▽ + 9667: M104, + // U+25c3 ◃ + 9711: M91, + // U+25ef ◯ + 9824: M108, + // U+2660 ♠ + 9825: M108, + // U+2661 ♡ + 9826: M108, + // U+2662 ♢ + 9827: M108, + // U+2663 ♣ + 9837: [0, 0.75, 0, 0, 0.44722], + // U+266d ♭ + 9838: M109, + // U+266e ♮ + 9839: M109, + // U+266f ♯ + 10216: M67, + // U+27e8 ⟨ + 10217: M67, + // U+27e9 ⟩ + 10815: M71, + // U+2a3f ⨿ + 10927: M101, + // U+2aaf ⪯ + 10928: M101, + // U+2ab0 ⪰ + 57376: M179 + // U+e020  + }, + "Main-BoldItalic": { + 32: M7, + // U+0020 + 33: [0, 0.69444, 0.11417, 0, 0.38611], + // U+0021 ! + 34: M120, + // U+0022 " + 35: [0.19444, 0.69444, 0.06833, 0, 0.94444], + // U+0023 # + 37: [0.05556, 0.75, 0.12861, 0, 0.94444], + // U+0025 % + 38: [0, 0.69444, 0.08528, 0, 0.88555], + // U+0026 & + 39: M116, + // U+0027 ' + 40: [0.25, 0.75, 0.15806, 0, 0.47333], + // U+0028 ( + 41: [0.25, 0.75, 0.03306, 0, 0.47333], + // U+0029 ) + 42: [0, 0.75, 0.14333, 0, 0.59111], + // U+002a * + 43: [0.10333, 0.60333, 0.03306, 0, 0.88555], + // U+002b + + 44: [0.19444, 0.14722, 0, 0, 0.35555], + // U+002c , + 45: [0, 0.44444, 0.02611, 0, 0.41444], + // U+002d - + 46: [0, 0.14722, 0, 0, 0.35555], + // U+002e . + 47: [0.25, 0.75, 0.15806, 0, 0.59111], + // U+002f / + 48: M110, + // U+0030 0 + 49: M110, + // U+0031 1 + 50: M110, + // U+0032 2 + 51: M110, + // U+0033 3 + 52: M111, + // U+0034 4 + 53: M110, + // U+0035 5 + 54: M110, + // U+0036 6 + 55: M111, + // U+0037 7 + 56: M110, + // U+0038 8 + 57: M110, + // U+0039 9 + 58: [0, 0.44444, 0.06695, 0, 0.35555], + // U+003a : + 59: [0.19444, 0.44444, 0.06695, 0, 0.35555], + // U+003b ; + 61: [-0.10889, 0.39111, 0.06833, 0, 0.88555], + // U+003d = + 63: M118, + // U+003f ? + 64: [0, 0.69444, 0.09208, 0, 0.88555], + // U+0040 @ + 65: [0, 0.68611, 0, 0, 0.86555], + // U+0041 A + 66: [0, 0.68611, 0.0992, 0, 0.81666], + // U+0042 B + 67: [0, 0.68611, 0.14208, 0, 0.82666], + // U+0043 C + 68: [0, 0.68611, 0.09062, 0, 0.87555], + // U+0044 D + 69: [0, 0.68611, 0.11431, 0, 0.75666], + // U+0045 E + 70: [0, 0.68611, 0.12903, 0, 0.72722], + // U+0046 F + 71: [0, 0.68611, 0.07347, 0, 0.89527], + // U+0047 G + 72: M112, + // U+0048 H + 73: [0, 0.68611, 0.15681, 0, 0.47166], + // U+0049 I + 74: [0, 0.68611, 0.145, 0, 0.61055], + // U+004a J + 75: [0, 0.68611, 0.14208, 0, 0.89499], + // U+004b K + 76: [0, 0.68611, 0, 0, 0.69777], + // U+004c L + 77: [0, 0.68611, 0.17208, 0, 1.07277], + // U+004d M + 78: M112, + // U+004e N + 79: [0, 0.68611, 0.09062, 0, 0.85499], + // U+004f O + 80: [0, 0.68611, 0.0992, 0, 0.78721], + // U+0050 P + 81: [0.19444, 0.68611, 0.09062, 0, 0.85499], + // U+0051 Q + 82: [0, 0.68611, 0.02559, 0, 0.85944], + // U+0052 R + 83: [0, 0.68611, 0.11264, 0, 0.64999], + // U+0053 S + 84: [0, 0.68611, 0.12903, 0, 0.7961], + // U+0054 T + 85: [0, 0.68611, 0.17208, 0, 0.88083], + // U+0055 U + 86: [0, 0.68611, 0.18625, 0, 0.86555], + // U+0056 V + 87: [0, 0.68611, 0.18625, 0, 1.15999], + // U+0057 W + 88: [0, 0.68611, 0.15681, 0, 0.86555], + // U+0058 X + 89: [0, 0.68611, 0.19803, 0, 0.86555], + // U+0059 Y + 90: [0, 0.68611, 0.14208, 0, 0.70888], + // U+005a Z + 91: [0.25, 0.75, 0.1875, 0, 0.35611], + // U+005b [ + 93: [0.25, 0.75, 0.09972, 0, 0.35611], + // U+005d ] + 94: M115, + // U+005e ^ + 95: [0.31, 0.13444, 0.09811, 0, 0.59111], + // U+005f _ + 97: [0, 0.44444, 0.09426, 0, 0.59111], + // U+0061 a + 98: [0, 0.69444, 0.07861, 0, 0.53222], + // U+0062 b + 99: [0, 0.44444, 0.05222, 0, 0.53222], + // U+0063 c + 100: [0, 0.69444, 0.10861, 0, 0.59111], + // U+0064 d + 101: [0, 0.44444, 0.085, 0, 0.53222], + // U+0065 e + 102: [0.19444, 0.69444, 0.21778, 0, 0.4], + // U+0066 f + 103: M113, + // U+0067 g + 104: [0, 0.69444, 0.09426, 0, 0.59111], + // U+0068 h + 105: [0, 0.69326, 0.11387, 0, 0.35555], + // U+0069 i + 106: [0.19444, 0.69326, 0.1672, 0, 0.35555], + // U+006a j + 107: [0, 0.69444, 0.11111, 0, 0.53222], + // U+006b k + 108: [0, 0.69444, 0.10861, 0, 0.29666], + // U+006c l + 109: [0, 0.44444, 0.09426, 0, 0.94444], + // U+006d m + 110: [0, 0.44444, 0.09426, 0, 0.64999], + // U+006e n + 111: [0, 0.44444, 0.07861, 0, 0.59111], + // U+006f o + 112: [0.19444, 0.44444, 0.07861, 0, 0.59111], + // U+0070 p + 113: M113, + // U+0071 q + 114: [0, 0.44444, 0.11111, 0, 0.50167], + // U+0072 r + 115: [0, 0.44444, 0.08167, 0, 0.48694], + // U+0073 s + 116: [0, 0.63492, 0.09639, 0, 0.385], + // U+0074 t + 117: [0, 0.44444, 0.09426, 0, 0.62055], + // U+0075 u + 118: [0, 0.44444, 0.11111, 0, 0.53222], + // U+0076 v + 119: [0, 0.44444, 0.11111, 0, 0.76777], + // U+0077 w + 120: [0, 0.44444, 0.12583, 0, 0.56055], + // U+0078 x + 121: [0.19444, 0.44444, 0.105, 0, 0.56166], + // U+0079 y + 122: [0, 0.44444, 0.13889, 0, 0.49055], + // U+007a z + 126: [0.35, 0.34444, 0.11472, 0, 0.59111], + // U+007e ~ + 160: M7, + // U+00a0 + 168: [0, 0.69444, 0.11473, 0, 0.59111], + // U+00a8 ¨ + 176: M117, + // U+00b0 ° + 184: [0.17014, 0, 0, 0, 0.53222], + // U+00b8 ¸ + 198: [0, 0.68611, 0.11431, 0, 1.02277], + // U+00c6 Æ + 216: [0.04861, 0.73472, 0.09062, 0, 0.88555], + // U+00d8 Ø + 223: [0.19444, 0.69444, 0.09736, 0, 0.665], + // U+00df ß + 230: M114, + // U+00e6 æ + 248: [0.09722, 0.54167, 0.09458, 0, 0.59111], + // U+00f8 ø + 305: [0, 0.44444, 0.09426, 0, 0.35555], + // U+0131 ı + 338: [0, 0.68611, 0.11431, 0, 1.14054], + // U+0152 Œ + 339: M114, + // U+0153 œ + 567: [0.19444, 0.44444, 0.04611, 0, 0.385], + // U+0237 ȷ + 710: M115, + // U+02c6 ˆ + 711: [0, 0.63194, 0.08271, 0, 0.59111], + // U+02c7 ˇ + 713: [0, 0.59444, 0.10444, 0, 0.59111], + // U+02c9 ˉ + 714: [0, 0.69444, 0.08528, 0, 0.59111], + // U+02ca ˊ + 715: [0, 0.69444, 0, 0, 0.59111], + // U+02cb ˋ + 728: [0, 0.69444, 0.10333, 0, 0.59111], + // U+02d8 ˘ + 729: M116, + // U+02d9 ˙ + 730: M117, + // U+02da ˚ + 732: M118, + // U+02dc ˜ + 733: M118, + // U+02dd ˝ + 915: [0, 0.68611, 0.12903, 0, 0.69777], + // U+0393 Γ + 916: [0, 0.68611, 0, 0, 0.94444], + // U+0394 Δ + 920: [0, 0.68611, 0.09062, 0, 0.88555], + // U+0398 Θ + 923: [0, 0.68611, 0, 0, 0.80666], + // U+039b Λ + 926: [0, 0.68611, 0.15092, 0, 0.76777], + // U+039e Ξ + 928: M112, + // U+03a0 Π + 931: [0, 0.68611, 0.11431, 0, 0.82666], + // U+03a3 Σ + 933: M119, + // U+03a5 Υ + 934: [0, 0.68611, 0.05632, 0, 0.82666], + // U+03a6 Φ + 936: M119, + // U+03a8 Ψ + 937: [0, 0.68611, 0.0992, 0, 0.82666], + // U+03a9 Ω + 8211: [0, 0.44444, 0.09811, 0, 0.59111], + // U+2013 – + 8212: [0, 0.44444, 0.09811, 0, 1.18221], + // U+2014 — + 8216: M116, + // U+2018 ‘ + 8217: M116, + // U+2019 ’ + 8220: [0, 0.69444, 0.16772, 0, 0.62055], + // U+201c “ + 8221: M120 + // U+201d ” + }, + "Main-Italic": { + 32: M7, + // U+0020 + 33: M121, + // U+0021 ! + 34: M132, + // U+0022 " + 35: [0.19444, 0.69444, 0.06616, 0, 0.81777], + // U+0023 # + 37: [0.05556, 0.75, 0.13639, 0, 0.81777], + // U+0025 % + 38: [0, 0.69444, 0.09694, 0, 0.76666], + // U+0026 & + 39: M121, + // U+0027 ' + 40: [0.25, 0.75, 0.16194, 0, 0.40889], + // U+0028 ( + 41: [0.25, 0.75, 0.03694, 0, 0.40889], + // U+0029 ) + 42: [0, 0.75, 0.14917, 0, 0.51111], + // U+002a * + 43: [0.05667, 0.56167, 0.03694, 0, 0.76666], + // U+002b + + 44: [0.19444, 0.10556, 0, 0, 0.30667], + // U+002c , + 45: [0, 0.43056, 0.02826, 0, 0.35778], + // U+002d - + 46: [0, 0.10556, 0, 0, 0.30667], + // U+002e . + 47: [0.25, 0.75, 0.16194, 0, 0.51111], + // U+002f / + 48: M122, + // U+0030 0 + 49: M122, + // U+0031 1 + 50: M122, + // U+0032 2 + 51: M122, + // U+0033 3 + 52: M123, + // U+0034 4 + 53: M122, + // U+0035 5 + 54: M122, + // U+0036 6 + 55: M123, + // U+0037 7 + 56: M122, + // U+0038 8 + 57: M122, + // U+0039 9 + 58: [0, 0.43056, 0.0582, 0, 0.30667], + // U+003a : + 59: [0.19444, 0.43056, 0.0582, 0, 0.30667], + // U+003b ; + 61: [-0.13313, 0.36687, 0.06616, 0, 0.76666], + // U+003d = + 63: M129, + // U+003f ? + 64: [0, 0.69444, 0.09597, 0, 0.76666], + // U+0040 @ + 65: [0, 0.68333, 0, 0, 0.74333], + // U+0041 A + 66: [0, 0.68333, 0.10257, 0, 0.70389], + // U+0042 B + 67: [0, 0.68333, 0.14528, 0, 0.71555], + // U+0043 C + 68: [0, 0.68333, 0.09403, 0, 0.755], + // U+0044 D + 69: [0, 0.68333, 0.12028, 0, 0.67833], + // U+0045 E + 70: [0, 0.68333, 0.13305, 0, 0.65277], + // U+0046 F + 71: [0, 0.68333, 0.08722, 0, 0.77361], + // U+0047 G + 72: M124, + // U+0048 H + 73: [0, 0.68333, 0.15806, 0, 0.38555], + // U+0049 I + 74: [0, 0.68333, 0.14028, 0, 0.525], + // U+004a J + 75: [0, 0.68333, 0.14528, 0, 0.76888], + // U+004b K + 76: [0, 0.68333, 0, 0, 0.62722], + // U+004c L + 77: [0, 0.68333, 0.16389, 0, 0.89666], + // U+004d M + 78: M124, + // U+004e N + 79: M130, + // U+004f O + 80: [0, 0.68333, 0.10257, 0, 0.67833], + // U+0050 P + 81: [0.19444, 0.68333, 0.09403, 0, 0.76666], + // U+0051 Q + 82: [0, 0.68333, 0.03868, 0, 0.72944], + // U+0052 R + 83: [0, 0.68333, 0.11972, 0, 0.56222], + // U+0053 S + 84: [0, 0.68333, 0.13305, 0, 0.71555], + // U+0054 T + 85: M124, + // U+0055 U + 86: [0, 0.68333, 0.18361, 0, 0.74333], + // U+0056 V + 87: [0, 0.68333, 0.18361, 0, 0.99888], + // U+0057 W + 88: [0, 0.68333, 0.15806, 0, 0.74333], + // U+0058 X + 89: [0, 0.68333, 0.19383, 0, 0.74333], + // U+0059 Y + 90: [0, 0.68333, 0.14528, 0, 0.61333], + // U+005a Z + 91: [0.25, 0.75, 0.1875, 0, 0.30667], + // U+005b [ + 93: [0.25, 0.75, 0.10528, 0, 0.30667], + // U+005d ] + 94: M127, + // U+005e ^ + 95: [0.31, 0.12056, 0.09208, 0, 0.51111], + // U+005f _ + 97: [0, 0.43056, 0.07671, 0, 0.51111], + // U+0061 a + 98: [0, 0.69444, 0.06312, 0, 0.46], + // U+0062 b + 99: [0, 0.43056, 0.05653, 0, 0.46], + // U+0063 c + 100: [0, 0.69444, 0.10333, 0, 0.51111], + // U+0064 d + 101: [0, 0.43056, 0.07514, 0, 0.46], + // U+0065 e + 102: [0.19444, 0.69444, 0.21194, 0, 0.30667], + // U+0066 f + 103: M125, + // U+0067 g + 104: [0, 0.69444, 0.07671, 0, 0.51111], + // U+0068 h + 105: [0, 0.65536, 0.1019, 0, 0.30667], + // U+0069 i + 106: [0.19444, 0.65536, 0.14467, 0, 0.30667], + // U+006a j + 107: [0, 0.69444, 0.10764, 0, 0.46], + // U+006b k + 108: [0, 0.69444, 0.10333, 0, 0.25555], + // U+006c l + 109: [0, 0.43056, 0.07671, 0, 0.81777], + // U+006d m + 110: [0, 0.43056, 0.07671, 0, 0.56222], + // U+006e n + 111: [0, 0.43056, 0.06312, 0, 0.51111], + // U+006f o + 112: [0.19444, 0.43056, 0.06312, 0, 0.51111], + // U+0070 p + 113: M125, + // U+0071 q + 114: [0, 0.43056, 0.10764, 0, 0.42166], + // U+0072 r + 115: [0, 0.43056, 0.08208, 0, 0.40889], + // U+0073 s + 116: [0, 0.61508, 0.09486, 0, 0.33222], + // U+0074 t + 117: [0, 0.43056, 0.07671, 0, 0.53666], + // U+0075 u + 118: [0, 0.43056, 0.10764, 0, 0.46], + // U+0076 v + 119: [0, 0.43056, 0.10764, 0, 0.66444], + // U+0077 w + 120: [0, 0.43056, 0.12042, 0, 0.46389], + // U+0078 x + 121: [0.19444, 0.43056, 0.08847, 0, 0.48555], + // U+0079 y + 122: [0, 0.43056, 0.12292, 0, 0.40889], + // U+007a z + 126: [0.35, 0.31786, 0.11585, 0, 0.51111], + // U+007e ~ + 160: M7, + // U+00a0 + 168: [0, 0.66786, 0.10474, 0, 0.51111], + // U+00a8 ¨ + 176: M128, + // U+00b0 ° + 184: [0.17014, 0, 0, 0, 0.46], + // U+00b8 ¸ + 198: [0, 0.68333, 0.12028, 0, 0.88277], + // U+00c6 Æ + 216: [0.04861, 0.73194, 0.09403, 0, 0.76666], + // U+00d8 Ø + 223: [0.19444, 0.69444, 0.10514, 0, 0.53666], + // U+00df ß + 230: M126, + // U+00e6 æ + 248: [0.09722, 0.52778, 0.09194, 0, 0.51111], + // U+00f8 ø + 338: [0, 0.68333, 0.12028, 0, 0.98499], + // U+0152 Œ + 339: M126, + // U+0153 œ + 710: M127, + // U+02c6 ˆ + 711: [0, 0.62847, 0.08295, 0, 0.51111], + // U+02c7 ˇ + 713: [0, 0.56167, 0.10333, 0, 0.51111], + // U+02c9 ˉ + 714: [0, 0.69444, 0.09694, 0, 0.51111], + // U+02ca ˊ + 715: [0, 0.69444, 0, 0, 0.51111], + // U+02cb ˋ + 728: [0, 0.69444, 0.10806, 0, 0.51111], + // U+02d8 ˘ + 729: [0, 0.66786, 0.11752, 0, 0.30667], + // U+02d9 ˙ + 730: M128, + // U+02da ˚ + 732: [0, 0.66786, 0.11585, 0, 0.51111], + // U+02dc ˜ + 733: M129, + // U+02dd ˝ + 915: [0, 0.68333, 0.13305, 0, 0.62722], + // U+0393 Γ + 916: [0, 0.68333, 0, 0, 0.81777], + // U+0394 Δ + 920: M130, + // U+0398 Θ + 923: [0, 0.68333, 0, 0, 0.69222], + // U+039b Λ + 926: [0, 0.68333, 0.15294, 0, 0.66444], + // U+039e Ξ + 928: M124, + // U+03a0 Π + 931: [0, 0.68333, 0.12028, 0, 0.71555], + // U+03a3 Σ + 933: M131, + // U+03a5 Υ + 934: [0, 0.68333, 0.05986, 0, 0.71555], + // U+03a6 Φ + 936: M131, + // U+03a8 Ψ + 937: [0, 0.68333, 0.10257, 0, 0.71555], + // U+03a9 Ω + 8211: [0, 0.43056, 0.09208, 0, 0.51111], + // U+2013 – + 8212: [0, 0.43056, 0.09208, 0, 1.02222], + // U+2014 — + 8216: M121, + // U+2018 ‘ + 8217: M121, + // U+2019 ’ + 8220: [0, 0.69444, 0.1685, 0, 0.51444], + // U+201c “ + 8221: M132, + // U+201d ” + 8463: M10 + // U+210f ℏ + }, + "Main-Regular": { + 32: M7, + // U+0020 + 33: M133, + // U+0021 ! + 34: M143, + // U+0022 " + 35: M220, + // U+0023 # + 36: M161, + // U+0024 $ + 37: M221, + // U+0025 % + 38: M136, + // U+0026 & + 39: M133, + // U+0027 ' + 40: M134, + // U+0028 ( + 41: M134, + // U+0029 ) + 42: M222, + // U+002a * + 43: M149, + // U+002b + + 44: [0.19444, 0.10556, 0, 0, 0.27778], + // U+002c , + 45: [0, 0.43056, 0, 0, 0.33333], + // U+002d - + 46: [0, 0.10556, 0, 0, 0.27778], + // U+002e . + 47: M141, + // U+002f / + 48: M135, + // U+0030 0 + 49: M135, + // U+0031 1 + 50: M135, + // U+0032 2 + 51: M135, + // U+0033 3 + 52: M135, + // U+0034 4 + 53: M135, + // U+0035 5 + 54: M135, + // U+0036 6 + 55: M135, + // U+0037 7 + 56: M135, + // U+0038 8 + 57: M135, + // U+0039 9 + 58: M150, + // U+003a : + 59: [0.19444, 0.43056, 0, 0, 0.27778], + // U+003b ; + 60: M43, + // U+003c < + 61: M27, + // U+003d = + 62: M43, + // U+003e > + 63: M226, + // U+003f ? + 64: M136, + // U+0040 @ + 65: M137, + // U+0041 A + 66: [0, 0.68333, 0, 0, 0.70834], + // U+0042 B + 67: M140, + // U+0043 C + 68: [0, 0.68333, 0, 0, 0.76389], + // U+0044 D + 69: M139, + // U+0045 E + 70: [0, 0.68333, 0, 0, 0.65278], + // U+0046 F + 71: [0, 0.68333, 0, 0, 0.78472], + // U+0047 G + 72: M137, + // U+0048 H + 73: [0, 0.68333, 0, 0, 0.36111], + // U+0049 I + 74: [0, 0.68333, 0, 0, 0.51389], + // U+004a J + 75: M138, + // U+004b K + 76: M154, + // U+004c L + 77: [0, 0.68333, 0, 0, 0.91667], + // U+004d M + 78: M137, + // U+004e N + 79: M138, + // U+004f O + 80: M139, + // U+0050 P + 81: [0.19444, 0.68333, 0, 0, 0.77778], + // U+0051 Q + 82: [0, 0.68333, 0, 0, 0.73611], + // U+0052 R + 83: [0, 0.68333, 0, 0, 0.55556], + // U+0053 S + 84: M140, + // U+0054 T + 85: M137, + // U+0055 U + 86: [0, 0.68333, 0.01389, 0, 0.75], + // U+0056 V + 87: [0, 0.68333, 0.01389, 0, 1.02778], + // U+0057 W + 88: M137, + // U+0058 X + 89: [0, 0.68333, 0.025, 0, 0.75], + // U+0059 Y + 90: [0, 0.68333, 0, 0, 0.61111], + // U+005a Z + 91: M142, + // U+005b [ + 92: M141, + // U+005c \ + 93: M142, + // U+005d ] + 94: M143, + // U+005e ^ + 95: [0.31, 0.12056, 0.02778, 0, 0.5], + // U+005f _ + 97: M146, + // U+0061 a + 98: M144, + // U+0062 b + 99: M145, + // U+0063 c + 100: M144, + // U+0064 d + 101: M145, + // U+0065 e + 102: [0, 0.69444, 0.07778, 0, 0.30556], + // U+0066 f + 103: [0.19444, 0.43056, 0.01389, 0, 0.5], + // U+0067 g + 104: M144, + // U+0068 h + 105: M151, + // U+0069 i + 106: [0.19444, 0.66786, 0, 0, 0.30556], + // U+006a j + 107: [0, 0.69444, 0, 0, 0.52778], + // U+006b k + 108: M133, + // U+006c l + 109: [0, 0.43056, 0, 0, 0.83334], + // U+006d m + 110: M148, + // U+006e n + 111: M146, + // U+006f o + 112: M147, + // U+0070 p + 113: [0.19444, 0.43056, 0, 0, 0.52778], + // U+0071 q + 114: [0, 0.43056, 0, 0, 0.39167], + // U+0072 r + 115: [0, 0.43056, 0, 0, 0.39445], + // U+0073 s + 116: [0, 0.61508, 0, 0, 0.38889], + // U+0074 t + 117: M148, + // U+0075 u + 118: [0, 0.43056, 0.01389, 0, 0.52778], + // U+0076 v + 119: [0, 0.43056, 0.01389, 0, 0.72222], + // U+0077 w + 120: [0, 0.43056, 0, 0, 0.52778], + // U+0078 x + 121: [0.19444, 0.43056, 0.01389, 0, 0.52778], + // U+0079 y + 122: M145, + // U+007a z + 123: M141, + // U+007b { + 124: M142, + // U+007c | + 125: M141, + // U+007d } + 126: [0.35, 0.31786, 0, 0, 0.5], + // U+007e ~ + 160: M7, + // U+00a0 + 163: [0, 0.69444, 0, 0, 0.76909], + // U+00a3 £ + 167: M155, + // U+00a7 § + 168: M153, + // U+00a8 ¨ + 172: [0, 0.43056, 0, 0, 0.66667], + // U+00ac ¬ + 176: M152, + // U+00b0 ° + 177: M149, + // U+00b1 ± + 182: M160, + // U+00b6 ¶ + 184: M213, + // U+00b8 ¸ + 198: [0, 0.68333, 0, 0, 0.90278], + // U+00c6 Æ + 215: M149, + // U+00d7 × + 216: [0.04861, 0.73194, 0, 0, 0.77778], + // U+00d8 Ø + 223: M143, + // U+00df ß + 230: [0, 0.43056, 0, 0, 0.72222], + // U+00e6 æ + 247: M149, + // U+00f7 ÷ + 248: [0.09722, 0.52778, 0, 0, 0.5], + // U+00f8 ø + 305: M150, + // U+0131 ı + 338: [0, 0.68333, 0, 0, 1.01389], + // U+0152 Œ + 339: M165, + // U+0153 œ + 567: [0.19444, 0.43056, 0, 0, 0.30556], + // U+0237 ȷ + 710: M143, + // U+02c6 ˆ + 711: [0, 0.62847, 0, 0, 0.5], + // U+02c7 ˇ + 713: [0, 0.56778, 0, 0, 0.5], + // U+02c9 ˉ + 714: M143, + // U+02ca ˊ + 715: M143, + // U+02cb ˋ + 728: M143, + // U+02d8 ˘ + 729: M151, + // U+02d9 ˙ + 730: M152, + // U+02da ˚ + 732: M153, + // U+02dc ˜ + 733: M143, + // U+02dd ˝ + 915: M154, + // U+0393 Γ + 916: M162, + // U+0394 Δ + 920: M138, + // U+0398 Θ + 923: [0, 0.68333, 0, 0, 0.69445], + // U+039b Λ + 926: [0, 0.68333, 0, 0, 0.66667], + // U+039e Ξ + 928: M137, + // U+03a0 Π + 931: M140, + // U+03a3 Σ + 933: M138, + // U+03a5 Υ + 934: M140, + // U+03a6 Φ + 936: M138, + // U+03a8 Ψ + 937: M140, + // U+03a9 Ω + 8211: [0, 0.43056, 0.02778, 0, 0.5], + // U+2013 – + 8212: [0, 0.43056, 0.02778, 0, 1], + // U+2014 — + 8216: M133, + // U+2018 ‘ + 8217: M133, + // U+2019 ’ + 8220: M143, + // U+201c “ + 8221: M143, + // U+201d ” + 8224: M155, + // U+2020 † + 8225: M155, + // U+2021 ‡ + 8230: [0, 0.12, 0, 0, 1.172], + // U+2026 … + 8242: [0, 0.55556, 0, 0, 0.275], + // U+2032 ′ + 8407: [0, 0.71444, 0.15382, 0, 0.5], + // U+20d7 ⃗ + 8463: M10, + // U+210f ℏ + 8465: M156, + // U+2111 ℑ + 8467: [0, 0.69444, 0, 0.11111, 0.41667], + // U+2113 ℓ + 8472: [0.19444, 0.43056, 0, 0.11111, 0.63646], + // U+2118 ℘ + 8476: M156, + // U+211c ℜ + 8501: M170, + // U+2135 ℵ + 8592: M12, + // U+2190 ← + 8593: M157, + // U+2191 ↑ + 8594: M12, + // U+2192 → + 8595: M157, + // U+2193 ↓ + 8596: M12, + // U+2194 ↔ + 8597: M141, + // U+2195 ↕ + 8598: M158, + // U+2196 ↖ + 8599: M158, + // U+2197 ↗ + 8600: M158, + // U+2198 ↘ + 8601: M158, + // U+2199 ↙ + 8614: [0.011, 0.511, 0, 0, 1], + // U+21a6 ↦ + 8617: M159, + // U+21a9 ↩ + 8618: M159, + // U+21aa ↪ + 8636: M12, + // U+21bc ↼ + 8637: M12, + // U+21bd ↽ + 8640: M12, + // U+21c0 ⇀ + 8641: M12, + // U+21c1 ⇁ + 8652: [0.011, 0.671, 0, 0, 1], + // U+21cc ⇌ + 8656: M12, + // U+21d0 ⇐ + 8657: M160, + // U+21d1 ⇑ + 8658: M12, + // U+21d2 ⇒ + 8659: M160, + // U+21d3 ⇓ + 8660: M12, + // U+21d4 ⇔ + 8661: [0.25, 0.75, 0, 0, 0.61111], + // U+21d5 ⇕ + 8704: M144, + // U+2200 ∀ + 8706: [0, 0.69444, 0.05556, 0.08334, 0.5309], + // U+2202 ∂ + 8707: M144, + // U+2203 ∃ + 8709: M161, + // U+2205 ∅ + 8711: M162, + // U+2207 ∇ + 8712: M163, + // U+2208 ∈ + 8715: M163, + // U+220b ∋ + 8722: M149, + // U+2212 − + 8723: M149, + // U+2213 ∓ + 8725: M141, + // U+2215 ∕ + 8726: M141, + // U+2216 ∖ + 8727: M171, + // U+2217 ∗ + 8728: M164, + // U+2218 ∘ + 8729: M164, + // U+2219 ∙ + 8730: [0.2, 0.8, 0, 0, 0.83334], + // U+221a √ + 8733: M165, + // U+221d ∝ + 8734: M17, + // U+221e ∞ + 8736: M25, + // U+2220 ∠ + 8739: M142, + // U+2223 ∣ + 8741: M141, + // U+2225 ∥ + 8743: M166, + // U+2227 ∧ + 8744: M166, + // U+2228 ∨ + 8745: M166, + // U+2229 ∩ + 8746: M166, + // U+222a ∪ + 8747: [0.19444, 0.69444, 0.11111, 0, 0.41667], + // U+222b ∫ + 8764: M27, + // U+223c ∼ + 8768: [0.19444, 0.69444, 0, 0, 0.27778], + // U+2240 ≀ + 8771: M167, + // U+2243 ≃ + 8773: [-0.022, 0.589, 0, 0, 1], + // U+2245 ≅ + 8776: M168, + // U+2248 ≈ + 8781: M167, + // U+224d ≍ + 8784: [-0.133, 0.67, 0, 0, 0.778], + // U+2250 ≐ + 8801: M167, + // U+2261 ≡ + 8804: M37, + // U+2264 ≤ + 8805: M37, + // U+2265 ≥ + 8810: M169, + // U+226a ≪ + 8811: M169, + // U+226b ≫ + 8826: M43, + // U+227a ≺ + 8827: M43, + // U+227b ≻ + 8834: M43, + // U+2282 ⊂ + 8835: M43, + // U+2283 ⊃ + 8838: M37, + // U+2286 ⊆ + 8839: M37, + // U+2287 ⊇ + 8846: M166, + // U+228e ⊎ + 8849: M37, + // U+2291 ⊑ + 8850: M37, + // U+2292 ⊒ + 8851: M166, + // U+2293 ⊓ + 8852: M166, + // U+2294 ⊔ + 8853: M149, + // U+2295 ⊕ + 8854: M149, + // U+2296 ⊖ + 8855: M149, + // U+2297 ⊗ + 8856: M149, + // U+2298 ⊘ + 8857: M149, + // U+2299 ⊙ + 8866: M170, + // U+22a2 ⊢ + 8867: M170, + // U+22a3 ⊣ + 8868: M136, + // U+22a4 ⊤ + 8869: M136, + // U+22a5 ⊥ + 8872: [0.249, 0.75, 0, 0, 0.867], + // U+22a8 ⊨ + 8900: M164, + // U+22c4 ⋄ + 8901: [-0.05555, 0.44445, 0, 0, 0.27778], + // U+22c5 ⋅ + 8902: M171, + // U+22c6 ⋆ + 8904: [5e-3, 0.505, 0, 0, 0.9], + // U+22c8 ⋈ + 8942: [0.03, 0.9, 0, 0, 0.278], + // U+22ee ⋮ + 8943: [-0.19, 0.31, 0, 0, 1.172], + // U+22ef ⋯ + 8945: [-0.1, 0.82, 0, 0, 1.282], + // U+22f1 ⋱ + 8968: M172, + // U+2308 ⌈ + 8969: M172, + // U+2309 ⌉ + 8970: M172, + // U+230a ⌊ + 8971: M172, + // U+230b ⌋ + 8994: M173, + // U+2322 ⌢ + 8995: M173, + // U+2323 ⌣ + 9136: M174, + // U+23b0 ⎰ + 9137: M174, + // U+23b1 ⎱ + 9651: M175, + // U+25b3 △ + 9657: M171, + // U+25b9 ▹ + 9661: M175, + // U+25bd ▽ + 9667: M171, + // U+25c3 ◃ + 9711: M158, + // U+25ef ◯ + 9824: M176, + // U+2660 ♠ + 9825: M176, + // U+2661 ♡ + 9826: M176, + // U+2662 ♢ + 9827: M176, + // U+2663 ♣ + 9837: [0, 0.75, 0, 0, 0.38889], + // U+266d ♭ + 9838: M177, + // U+266e ♮ + 9839: M177, + // U+266f ♯ + 10216: M134, + // U+27e8 ⟨ + 10217: M134, + // U+27e9 ⟩ + 10222: M174, + // U+27ee ⟮ + 10223: M174, + // U+27ef ⟯ + 10229: [0.011, 0.511, 0, 0, 1.609], + // U+27f5 ⟵ + 10230: M178, + // U+27f6 ⟶ + 10231: [0.011, 0.511, 0, 0, 1.859], + // U+27f7 ⟷ + 10232: [0.024, 0.525, 0, 0, 1.609], + // U+27f8 ⟸ + 10233: [0.024, 0.525, 0, 0, 1.638], + // U+27f9 ⟹ + 10234: [0.024, 0.525, 0, 0, 1.858], + // U+27fa ⟺ + 10236: M178, + // U+27fc ⟼ + 10815: M137, + // U+2a3f ⨿ + 10927: M37, + // U+2aaf ⪯ + 10928: M37, + // U+2ab0 ⪰ + 57376: M179 + // U+e020  + }, + "Math-BoldItalic": { + 32: M7, + // U+0020 + 48: M180, + // U+0030 0 + 49: M180, + // U+0031 1 + 50: M180, + // U+0032 2 + 51: M181, + // U+0033 3 + 52: M181, + // U+0034 4 + 53: M181, + // U+0035 5 + 54: M68, + // U+0036 6 + 55: M181, + // U+0037 7 + 56: M68, + // U+0038 8 + 57: M181, + // U+0039 9 + 65: M72, + // U+0041 A + 66: [0, 0.68611, 0.04835, 0, 0.8664], + // U+0042 B + 67: [0, 0.68611, 0.06979, 0, 0.81694], + // U+0043 C + 68: [0, 0.68611, 0.03194, 0, 0.93812], + // U+0044 D + 69: [0, 0.68611, 0.05451, 0, 0.81007], + // U+0045 E + 70: [0, 0.68611, 0.15972, 0, 0.68889], + // U+0046 F + 71: [0, 0.68611, 0, 0, 0.88673], + // U+0047 G + 72: M185, + // U+0048 H + 73: [0, 0.68611, 0.07778, 0, 0.51111], + // U+0049 I + 74: [0, 0.68611, 0.10069, 0, 0.63125], + // U+004a J + 75: [0, 0.68611, 0.06979, 0, 0.97118], + // U+004b K + 76: M182, + // U+004c L + 77: [0, 0.68611, 0.11424, 0, 1.14201], + // U+004d M + 78: [0, 0.68611, 0.11424, 0, 0.95034], + // U+004e N + 79: [0, 0.68611, 0.03194, 0, 0.83666], + // U+004f O + 80: [0, 0.68611, 0.15972, 0, 0.72309], + // U+0050 P + 81: [0.19444, 0.68611, 0, 0, 0.86861], + // U+0051 Q + 82: [0, 0.68611, 421e-5, 0, 0.87235], + // U+0052 R + 83: [0, 0.68611, 0.05382, 0, 0.69271], + // U+0053 S + 84: [0, 0.68611, 0.15972, 0, 0.63663], + // U+0054 T + 85: [0, 0.68611, 0.11424, 0, 0.80027], + // U+0055 U + 86: [0, 0.68611, 0.25555, 0, 0.67778], + // U+0056 V + 87: [0, 0.68611, 0.15972, 0, 1.09305], + // U+0057 W + 88: [0, 0.68611, 0.07778, 0, 0.94722], + // U+0058 X + 89: [0, 0.68611, 0.25555, 0, 0.67458], + // U+0059 Y + 90: [0, 0.68611, 0.06979, 0, 0.77257], + // U+005a Z + 97: [0, 0.44444, 0, 0, 0.63287], + // U+0061 a + 98: [0, 0.69444, 0, 0, 0.52083], + // U+0062 b + 99: [0, 0.44444, 0, 0, 0.51342], + // U+0063 c + 100: [0, 0.69444, 0, 0, 0.60972], + // U+0064 d + 101: [0, 0.44444, 0, 0, 0.55361], + // U+0065 e + 102: [0.19444, 0.69444, 0.11042, 0, 0.56806], + // U+0066 f + 103: [0.19444, 0.44444, 0.03704, 0, 0.5449], + // U+0067 g + 104: M183, + // U+0068 h + 105: [0, 0.69326, 0, 0, 0.4048], + // U+0069 i + 106: [0.19444, 0.69326, 0.0622, 0, 0.47083], + // U+006a j + 107: [0, 0.69444, 0.01852, 0, 0.6037], + // U+006b k + 108: [0, 0.69444, 88e-4, 0, 0.34815], + // U+006c l + 109: [0, 0.44444, 0, 0, 1.0324], + // U+006d m + 110: [0, 0.44444, 0, 0, 0.71296], + // U+006e n + 111: M187, + // U+006f o + 112: [0.19444, 0.44444, 0, 0, 0.60092], + // U+0070 p + 113: [0.19444, 0.44444, 0.03704, 0, 0.54213], + // U+0071 q + 114: [0, 0.44444, 0.03194, 0, 0.5287], + // U+0072 r + 115: [0, 0.44444, 0, 0, 0.53125], + // U+0073 s + 116: [0, 0.63492, 0, 0, 0.41528], + // U+0074 t + 117: [0, 0.44444, 0, 0, 0.68102], + // U+0075 u + 118: [0, 0.44444, 0.03704, 0, 0.56666], + // U+0076 v + 119: [0, 0.44444, 0.02778, 0, 0.83148], + // U+0077 w + 120: [0, 0.44444, 0, 0, 0.65903], + // U+0078 x + 121: [0.19444, 0.44444, 0.03704, 0, 0.59028], + // U+0079 y + 122: [0, 0.44444, 0.04213, 0, 0.55509], + // U+007a z + 160: M7, + // U+00a0 + 915: [0, 0.68611, 0.15972, 0, 0.65694], + // U+0393 Γ + 916: M94, + // U+0394 Δ + 920: [0, 0.68611, 0.03194, 0, 0.86722], + // U+0398 Θ + 923: M184, + // U+039b Λ + 926: [0, 0.68611, 0.07458, 0, 0.84125], + // U+039e Ξ + 928: M185, + // U+03a0 Π + 931: [0, 0.68611, 0.05451, 0, 0.88507], + // U+03a3 Σ + 933: [0, 0.68611, 0.15972, 0, 0.67083], + // U+03a5 Υ + 934: M186, + // U+03a6 Φ + 936: [0, 0.68611, 0.11653, 0, 0.71402], + // U+03a8 Ψ + 937: [0, 0.68611, 0.04835, 0, 0.8789], + // U+03a9 Ω + 945: [0, 0.44444, 0, 0, 0.76064], + // U+03b1 α + 946: [0.19444, 0.69444, 0.03403, 0, 0.65972], + // U+03b2 β + 947: [0.19444, 0.44444, 0.06389, 0, 0.59003], + // U+03b3 γ + 948: [0, 0.69444, 0.03819, 0, 0.52222], + // U+03b4 δ + 949: [0, 0.44444, 0, 0, 0.52882], + // U+03b5 ε + 950: [0.19444, 0.69444, 0.06215, 0, 0.50833], + // U+03b6 ζ + 951: [0.19444, 0.44444, 0.03704, 0, 0.6], + // U+03b7 η + 952: [0, 0.69444, 0.03194, 0, 0.5618], + // U+03b8 θ + 953: [0, 0.44444, 0, 0, 0.41204], + // U+03b9 ι + 954: [0, 0.44444, 0, 0, 0.66759], + // U+03ba κ + 955: [0, 0.69444, 0, 0, 0.67083], + // U+03bb λ + 956: [0.19444, 0.44444, 0, 0, 0.70787], + // U+03bc μ + 957: [0, 0.44444, 0.06898, 0, 0.57685], + // U+03bd ν + 958: [0.19444, 0.69444, 0.03021, 0, 0.50833], + // U+03be ξ + 959: M187, + // U+03bf ο + 960: [0, 0.44444, 0.03704, 0, 0.68241], + // U+03c0 π + 961: M188, + // U+03c1 ρ + 962: [0.09722, 0.44444, 0.07917, 0, 0.42361], + // U+03c2 ς + 963: [0, 0.44444, 0.03704, 0, 0.68588], + // U+03c3 σ + 964: [0, 0.44444, 0.13472, 0, 0.52083], + // U+03c4 τ + 965: [0, 0.44444, 0.03704, 0, 0.63055], + // U+03c5 υ + 966: [0.19444, 0.44444, 0, 0, 0.74722], + // U+03c6 φ + 967: [0.19444, 0.44444, 0, 0, 0.71805], + // U+03c7 χ + 968: [0.19444, 0.69444, 0.03704, 0, 0.75833], + // U+03c8 ψ + 969: [0, 0.44444, 0.03704, 0, 0.71782], + // U+03c9 ω + 977: [0, 0.69444, 0, 0, 0.69155], + // U+03d1 ϑ + 981: [0.19444, 0.69444, 0, 0, 0.7125], + // U+03d5 ϕ + 982: [0, 0.44444, 0.03194, 0, 0.975], + // U+03d6 ϖ + 1009: M188, + // U+03f1 ϱ + 1013: [0, 0.44444, 0, 0, 0.48333], + // U+03f5 ϵ + 57649: [0, 0.44444, 0, 0, 0.39352], + // U+e131  + 57911: [0.19444, 0.44444, 0, 0, 0.43889] + // U+e237  + }, + "Math-Italic": { + 32: M7, + // U+0020 + 48: M146, + // U+0030 0 + 49: M146, + // U+0031 1 + 50: M146, + // U+0032 2 + 51: M189, + // U+0033 3 + 52: M189, + // U+0034 4 + 53: M189, + // U+0035 5 + 54: M135, + // U+0036 6 + 55: M189, + // U+0037 7 + 56: M135, + // U+0038 8 + 57: M189, + // U+0039 9 + 65: [0, 0.68333, 0, 0.13889, 0.75], + // U+0041 A + 66: [0, 0.68333, 0.05017, 0.08334, 0.75851], + // U+0042 B + 67: [0, 0.68333, 0.07153, 0.08334, 0.71472], + // U+0043 C + 68: [0, 0.68333, 0.02778, 0.05556, 0.82792], + // U+0044 D + 69: [0, 0.68333, 0.05764, 0.08334, 0.7382], + // U+0045 E + 70: [0, 0.68333, 0.13889, 0.08334, 0.64306], + // U+0046 F + 71: [0, 0.68333, 0, 0.08334, 0.78625], + // U+0047 G + 72: M191, + // U+0048 H + 73: [0, 0.68333, 0.07847, 0.11111, 0.43958], + // U+0049 I + 74: [0, 0.68333, 0.09618, 0.16667, 0.55451], + // U+004a J + 75: [0, 0.68333, 0.07153, 0.05556, 0.84931], + // U+004b K + 76: [0, 0.68333, 0, 0.02778, 0.68056], + // U+004c L + 77: [0, 0.68333, 0.10903, 0.08334, 0.97014], + // U+004d M + 78: [0, 0.68333, 0.10903, 0.08334, 0.80347], + // U+004e N + 79: M190, + // U+004f O + 80: [0, 0.68333, 0.13889, 0.08334, 0.64201], + // U+0050 P + 81: [0.19444, 0.68333, 0, 0.08334, 0.79056], + // U+0051 Q + 82: [0, 0.68333, 773e-5, 0.08334, 0.75929], + // U+0052 R + 83: [0, 0.68333, 0.05764, 0.08334, 0.6132], + // U+0053 S + 84: [0, 0.68333, 0.13889, 0.08334, 0.58438], + // U+0054 T + 85: [0, 0.68333, 0.10903, 0.02778, 0.68278], + // U+0055 U + 86: [0, 0.68333, 0.22222, 0, 0.58333], + // U+0056 V + 87: [0, 0.68333, 0.13889, 0, 0.94445], + // U+0057 W + 88: [0, 0.68333, 0.07847, 0.08334, 0.82847], + // U+0058 X + 89: [0, 0.68333, 0.22222, 0, 0.58056], + // U+0059 Y + 90: [0, 0.68333, 0.07153, 0.08334, 0.68264], + // U+005a Z + 97: [0, 0.43056, 0, 0, 0.52859], + // U+0061 a + 98: [0, 0.69444, 0, 0, 0.42917], + // U+0062 b + 99: [0, 0.43056, 0, 0.05556, 0.43276], + // U+0063 c + 100: [0, 0.69444, 0, 0.16667, 0.52049], + // U+0064 d + 101: [0, 0.43056, 0, 0.05556, 0.46563], + // U+0065 e + 102: [0.19444, 0.69444, 0.10764, 0.16667, 0.48959], + // U+0066 f + 103: [0.19444, 0.43056, 0.03588, 0.02778, 0.47697], + // U+0067 g + 104: [0, 0.69444, 0, 0, 0.57616], + // U+0068 h + 105: [0, 0.65952, 0, 0, 0.34451], + // U+0069 i + 106: [0.19444, 0.65952, 0.05724, 0, 0.41181], + // U+006a j + 107: [0, 0.69444, 0.03148, 0, 0.5206], + // U+006b k + 108: [0, 0.69444, 0.01968, 0.08334, 0.29838], + // U+006c l + 109: [0, 0.43056, 0, 0, 0.87801], + // U+006d m + 110: [0, 0.43056, 0, 0, 0.60023], + // U+006e n + 111: M192, + // U+006f o + 112: [0.19444, 0.43056, 0, 0.08334, 0.50313], + // U+0070 p + 113: [0.19444, 0.43056, 0.03588, 0.08334, 0.44641], + // U+0071 q + 114: [0, 0.43056, 0.02778, 0.05556, 0.45116], + // U+0072 r + 115: [0, 0.43056, 0, 0.05556, 0.46875], + // U+0073 s + 116: [0, 0.61508, 0, 0.08334, 0.36111], + // U+0074 t + 117: [0, 0.43056, 0, 0.02778, 0.57246], + // U+0075 u + 118: [0, 0.43056, 0.03588, 0.02778, 0.48472], + // U+0076 v + 119: [0, 0.43056, 0.02691, 0.08334, 0.71592], + // U+0077 w + 120: [0, 0.43056, 0, 0.02778, 0.57153], + // U+0078 x + 121: [0.19444, 0.43056, 0.03588, 0.05556, 0.49028], + // U+0079 y + 122: [0, 0.43056, 0.04398, 0.05556, 0.46505], + // U+007a z + 160: M7, + // U+00a0 + 915: [0, 0.68333, 0.13889, 0.08334, 0.61528], + // U+0393 Γ + 916: [0, 0.68333, 0, 0.16667, 0.83334], + // U+0394 Δ + 920: M190, + // U+0398 Θ + 923: [0, 0.68333, 0, 0.16667, 0.69445], + // U+039b Λ + 926: [0, 0.68333, 0.07569, 0.08334, 0.74236], + // U+039e Ξ + 928: M191, + // U+03a0 Π + 931: [0, 0.68333, 0.05764, 0.08334, 0.77986], + // U+03a3 Σ + 933: [0, 0.68333, 0.13889, 0.05556, 0.58333], + // U+03a5 Υ + 934: [0, 0.68333, 0, 0.08334, 0.66667], + // U+03a6 Φ + 936: [0, 0.68333, 0.11, 0.05556, 0.61222], + // U+03a8 Ψ + 937: [0, 0.68333, 0.05017, 0.08334, 0.7724], + // U+03a9 Ω + 945: [0, 0.43056, 37e-4, 0.02778, 0.6397], + // U+03b1 α + 946: [0.19444, 0.69444, 0.05278, 0.08334, 0.56563], + // U+03b2 β + 947: [0.19444, 0.43056, 0.05556, 0, 0.51773], + // U+03b3 γ + 948: [0, 0.69444, 0.03785, 0.05556, 0.44444], + // U+03b4 δ + 949: [0, 0.43056, 0, 0.08334, 0.46632], + // U+03b5 ε + 950: [0.19444, 0.69444, 0.07378, 0.08334, 0.4375], + // U+03b6 ζ + 951: [0.19444, 0.43056, 0.03588, 0.05556, 0.49653], + // U+03b7 η + 952: [0, 0.69444, 0.02778, 0.08334, 0.46944], + // U+03b8 θ + 953: [0, 0.43056, 0, 0.05556, 0.35394], + // U+03b9 ι + 954: [0, 0.43056, 0, 0, 0.57616], + // U+03ba κ + 955: [0, 0.69444, 0, 0, 0.58334], + // U+03bb λ + 956: [0.19444, 0.43056, 0, 0.02778, 0.60255], + // U+03bc μ + 957: [0, 0.43056, 0.06366, 0.02778, 0.49398], + // U+03bd ν + 958: [0.19444, 0.69444, 0.04601, 0.11111, 0.4375], + // U+03be ξ + 959: M192, + // U+03bf ο + 960: [0, 0.43056, 0.03588, 0, 0.57003], + // U+03c0 π + 961: M193, + // U+03c1 ρ + 962: [0.09722, 0.43056, 0.07986, 0.08334, 0.36285], + // U+03c2 ς + 963: [0, 0.43056, 0.03588, 0, 0.57141], + // U+03c3 σ + 964: [0, 0.43056, 0.1132, 0.02778, 0.43715], + // U+03c4 τ + 965: [0, 0.43056, 0.03588, 0.02778, 0.54028], + // U+03c5 υ + 966: [0.19444, 0.43056, 0, 0.08334, 0.65417], + // U+03c6 φ + 967: [0.19444, 0.43056, 0, 0.05556, 0.62569], + // U+03c7 χ + 968: [0.19444, 0.69444, 0.03588, 0.11111, 0.65139], + // U+03c8 ψ + 969: [0, 0.43056, 0.03588, 0, 0.62245], + // U+03c9 ω + 977: [0, 0.69444, 0, 0.08334, 0.59144], + // U+03d1 ϑ + 981: [0.19444, 0.69444, 0, 0.08334, 0.59583], + // U+03d5 ϕ + 982: [0, 0.43056, 0.02778, 0, 0.82813], + // U+03d6 ϖ + 1009: M193, + // U+03f1 ϱ + 1013: [0, 0.43056, 0, 0.05556, 0.4059], + // U+03f5 ϵ + 57649: [0, 0.43056, 0, 0.02778, 0.32246], + // U+e131  + 57911: [0.19444, 0.43056, 0, 0.08334, 0.38403] + // U+e237  + }, + "SansSerif-Bold": { + 32: M7, + // U+0020 + 33: [0, 0.69444, 0, 0, 0.36667], + // U+0021 ! + 34: M210, + // U+0022 " + 35: [0.19444, 0.69444, 0, 0, 0.91667], + // U+0023 # + 36: [0.05556, 0.75, 0, 0, 0.55], + // U+0024 $ + 37: [0.05556, 0.75, 0, 0, 1.02912], + // U+0025 % + 38: [0, 0.69444, 0, 0, 0.83056], + // U+0026 & + 39: M206, + // U+0027 ' + 40: M194, + // U+0028 ( + 41: M194, + // U+0029 ) + 42: [0, 0.75, 0, 0, 0.55], + // U+002a * + 43: [0.11667, 0.61667, 0, 0, 0.85556], + // U+002b + + 44: [0.10556, 0.13056, 0, 0, 0.30556], + // U+002c , + 45: [0, 0.45833, 0, 0, 0.36667], + // U+002d - + 46: [0, 0.13056, 0, 0, 0.30556], + // U+002e . + 47: [0.25, 0.75, 0, 0, 0.55], + // U+002f / + 48: M195, + // U+0030 0 + 49: M195, + // U+0031 1 + 50: M195, + // U+0032 2 + 51: M195, + // U+0033 3 + 52: M195, + // U+0034 4 + 53: M195, + // U+0035 5 + 54: M195, + // U+0036 6 + 55: M195, + // U+0037 7 + 56: M195, + // U+0038 8 + 57: M195, + // U+0039 9 + 58: [0, 0.45833, 0, 0, 0.30556], + // U+003a : + 59: [0.10556, 0.45833, 0, 0, 0.30556], + // U+003b ; + 61: [-0.09375, 0.40625, 0, 0, 0.85556], + // U+003d = + 63: M198, + // U+003f ? + 64: M196, + // U+0040 @ + 65: M196, + // U+0041 A + 66: M196, + // U+0042 B + 67: M199, + // U+0043 C + 68: M197, + // U+0044 D + 69: [0, 0.69444, 0, 0, 0.64167], + // U+0045 E + 70: M170, + // U+0046 F + 71: M196, + // U+0047 G + 72: M197, + // U+0048 H + 73: [0, 0.69444, 0, 0, 0.33056], + // U+0049 I + 74: M198, + // U+004a J + 75: M200, + // U+004b K + 76: M207, + // U+004c L + 77: [0, 0.69444, 0, 0, 0.97778], + // U+004d M + 78: M197, + // U+004e N + 79: M197, + // U+004f O + 80: M199, + // U+0050 P + 81: [0.10556, 0.69444, 0, 0, 0.79445], + // U+0051 Q + 82: M199, + // U+0052 R + 83: M170, + // U+0053 S + 84: M196, + // U+0054 T + 85: M200, + // U+0055 U + 86: [0, 0.69444, 0.01528, 0, 0.73334], + // U+0056 V + 87: [0, 0.69444, 0.01528, 0, 1.03889], + // U+0057 W + 88: M196, + // U+0058 X + 89: [0, 0.69444, 0.0275, 0, 0.73334], + // U+0059 Y + 90: M208, + // U+005a Z + 91: M201, + // U+005b [ + 93: M201, + // U+005d ] + 94: M195, + // U+005e ^ + 95: [0.35, 0.10833, 0.03056, 0, 0.55], + // U+005f _ + 97: [0, 0.45833, 0, 0, 0.525], + // U+0061 a + 98: M202, + // U+0062 b + 99: [0, 0.45833, 0, 0, 0.48889], + // U+0063 c + 100: M202, + // U+0064 d + 101: [0, 0.45833, 0, 0, 0.51111], + // U+0065 e + 102: [0, 0.69444, 0.07639, 0, 0.33611], + // U+0066 f + 103: [0.19444, 0.45833, 0.01528, 0, 0.55], + // U+0067 g + 104: M202, + // U+0068 h + 105: M203, + // U+0069 i + 106: [0.19444, 0.69444, 0, 0, 0.28611], + // U+006a j + 107: [0, 0.69444, 0, 0, 0.53056], + // U+006b k + 108: M203, + // U+006c l + 109: [0, 0.45833, 0, 0, 0.86667], + // U+006d m + 110: M205, + // U+006e n + 111: [0, 0.45833, 0, 0, 0.55], + // U+006f o + 112: M204, + // U+0070 p + 113: M204, + // U+0071 q + 114: [0, 0.45833, 0.01528, 0, 0.37222], + // U+0072 r + 115: [0, 0.45833, 0, 0, 0.42167], + // U+0073 s + 116: [0, 0.58929, 0, 0, 0.40417], + // U+0074 t + 117: M205, + // U+0075 u + 118: [0, 0.45833, 0.01528, 0, 0.5], + // U+0076 v + 119: [0, 0.45833, 0.01528, 0, 0.74445], + // U+0077 w + 120: [0, 0.45833, 0, 0, 0.5], + // U+0078 x + 121: [0.19444, 0.45833, 0.01528, 0, 0.5], + // U+0079 y + 122: [0, 0.45833, 0, 0, 0.47639], + // U+007a z + 126: [0.35, 0.34444, 0, 0, 0.55], + // U+007e ~ + 160: M7, + // U+00a0 + 168: M195, + // U+00a8 ¨ + 176: M196, + // U+00b0 ° + 180: M195, + // U+00b4 ´ + 184: [0.17014, 0, 0, 0, 0.48889], + // U+00b8 ¸ + 305: [0, 0.45833, 0, 0, 0.25556], + // U+0131 ı + 567: [0.19444, 0.45833, 0, 0, 0.28611], + // U+0237 ȷ + 710: M195, + // U+02c6 ˆ + 711: [0, 0.63542, 0, 0, 0.55], + // U+02c7 ˇ + 713: [0, 0.63778, 0, 0, 0.55], + // U+02c9 ˉ + 728: M195, + // U+02d8 ˘ + 729: M206, + // U+02d9 ˙ + 730: M196, + // U+02da ˚ + 732: M195, + // U+02dc ˜ + 733: M195, + // U+02dd ˝ + 915: M207, + // U+0393 Γ + 916: [0, 0.69444, 0, 0, 0.91667], + // U+0394 Δ + 920: M209, + // U+0398 Θ + 923: M208, + // U+039b Λ + 926: M196, + // U+039e Ξ + 928: M197, + // U+03a0 Π + 931: M197, + // U+03a3 Σ + 933: M209, + // U+03a5 Υ + 934: M197, + // U+03a6 Φ + 936: M209, + // U+03a8 Ψ + 937: M197, + // U+03a9 Ω + 8211: [0, 0.45833, 0.03056, 0, 0.55], + // U+2013 – + 8212: [0, 0.45833, 0.03056, 0, 1.10001], + // U+2014 — + 8216: M206, + // U+2018 ‘ + 8217: M206, + // U+2019 ’ + 8220: M210, + // U+201c “ + 8221: M210 + // U+201d ” + }, + "SansSerif-Italic": { + 32: M7, + // U+0020 + 33: [0, 0.69444, 0.05733, 0, 0.31945], + // U+0021 ! + 34: M219, + // U+0022 " + 35: [0.19444, 0.69444, 0.05087, 0, 0.83334], + // U+0023 # + 36: [0.05556, 0.75, 0.11156, 0, 0.5], + // U+0024 $ + 37: [0.05556, 0.75, 0.03126, 0, 0.83334], + // U+0025 % + 38: [0, 0.69444, 0.03058, 0, 0.75834], + // U+0026 & + 39: M218, + // U+0027 ' + 40: [0.25, 0.75, 0.13164, 0, 0.38889], + // U+0028 ( + 41: [0.25, 0.75, 0.02536, 0, 0.38889], + // U+0029 ) + 42: [0, 0.75, 0.11775, 0, 0.5], + // U+002a * + 43: [0.08333, 0.58333, 0.02536, 0, 0.77778], + // U+002b + + 44: M223, + // U+002c , + 45: [0, 0.44444, 0.01946, 0, 0.33333], + // U+002d - + 46: M224, + // U+002e . + 47: [0.25, 0.75, 0.13164, 0, 0.5], + // U+002f / + 48: M211, + // U+0030 0 + 49: M211, + // U+0031 1 + 50: M211, + // U+0032 2 + 51: M211, + // U+0033 3 + 52: M211, + // U+0034 4 + 53: M211, + // U+0035 5 + 54: M211, + // U+0036 6 + 55: M211, + // U+0037 7 + 56: M211, + // U+0038 8 + 57: M211, + // U+0039 9 + 58: [0, 0.44444, 0.02502, 0, 0.27778], + // U+003a : + 59: [0.125, 0.44444, 0.02502, 0, 0.27778], + // U+003b ; + 61: [-0.13, 0.37, 0.05087, 0, 0.77778], + // U+003d = + 63: [0, 0.69444, 0.11809, 0, 0.47222], + // U+003f ? + 64: [0, 0.69444, 0.07555, 0, 0.66667], + // U+0040 @ + 65: M227, + // U+0041 A + 66: [0, 0.69444, 0.08293, 0, 0.66667], + // U+0042 B + 67: [0, 0.69444, 0.11983, 0, 0.63889], + // U+0043 C + 68: [0, 0.69444, 0.07555, 0, 0.72223], + // U+0044 D + 69: [0, 0.69444, 0.11983, 0, 0.59722], + // U+0045 E + 70: [0, 0.69444, 0.13372, 0, 0.56945], + // U+0046 F + 71: [0, 0.69444, 0.11983, 0, 0.66667], + // U+0047 G + 72: M212, + // U+0048 H + 73: [0, 0.69444, 0.13372, 0, 0.27778], + // U+0049 I + 74: [0, 0.69444, 0.08094, 0, 0.47222], + // U+004a J + 75: [0, 0.69444, 0.11983, 0, 0.69445], + // U+004b K + 76: M229, + // U+004c L + 77: [0, 0.69444, 0.08094, 0, 0.875], + // U+004d M + 78: M212, + // U+004e N + 79: [0, 0.69444, 0.07555, 0, 0.73611], + // U+004f O + 80: [0, 0.69444, 0.08293, 0, 0.63889], + // U+0050 P + 81: [0.125, 0.69444, 0.07555, 0, 0.73611], + // U+0051 Q + 82: [0, 0.69444, 0.08293, 0, 0.64584], + // U+0052 R + 83: [0, 0.69444, 0.09205, 0, 0.55556], + // U+0053 S + 84: [0, 0.69444, 0.13372, 0, 0.68056], + // U+0054 T + 85: [0, 0.69444, 0.08094, 0, 0.6875], + // U+0055 U + 86: [0, 0.69444, 0.1615, 0, 0.66667], + // U+0056 V + 87: [0, 0.69444, 0.1615, 0, 0.94445], + // U+0057 W + 88: [0, 0.69444, 0.13372, 0, 0.66667], + // U+0058 X + 89: [0, 0.69444, 0.17261, 0, 0.66667], + // U+0059 Y + 90: [0, 0.69444, 0.11983, 0, 0.61111], + // U+005a Z + 91: [0.25, 0.75, 0.15942, 0, 0.28889], + // U+005b [ + 93: [0.25, 0.75, 0.08719, 0, 0.28889], + // U+005d ] + 94: M214, + // U+005e ^ + 95: [0.35, 0.09444, 0.08616, 0, 0.5], + // U+005f _ + 97: [0, 0.44444, 981e-5, 0, 0.48056], + // U+0061 a + 98: [0, 0.69444, 0.03057, 0, 0.51667], + // U+0062 b + 99: [0, 0.44444, 0.08336, 0, 0.44445], + // U+0063 c + 100: [0, 0.69444, 0.09483, 0, 0.51667], + // U+0064 d + 101: [0, 0.44444, 0.06778, 0, 0.44445], + // U+0065 e + 102: [0, 0.69444, 0.21705, 0, 0.30556], + // U+0066 f + 103: [0.19444, 0.44444, 0.10836, 0, 0.5], + // U+0067 g + 104: [0, 0.69444, 0.01778, 0, 0.51667], + // U+0068 h + 105: [0, 0.67937, 0.09718, 0, 0.23889], + // U+0069 i + 106: [0.19444, 0.67937, 0.09162, 0, 0.26667], + // U+006a j + 107: [0, 0.69444, 0.08336, 0, 0.48889], + // U+006b k + 108: [0, 0.69444, 0.09483, 0, 0.23889], + // U+006c l + 109: [0, 0.44444, 0.01778, 0, 0.79445], + // U+006d m + 110: [0, 0.44444, 0.01778, 0, 0.51667], + // U+006e n + 111: [0, 0.44444, 0.06613, 0, 0.5], + // U+006f o + 112: [0.19444, 0.44444, 0.0389, 0, 0.51667], + // U+0070 p + 113: [0.19444, 0.44444, 0.04169, 0, 0.51667], + // U+0071 q + 114: [0, 0.44444, 0.10836, 0, 0.34167], + // U+0072 r + 115: [0, 0.44444, 0.0778, 0, 0.38333], + // U+0073 s + 116: [0, 0.57143, 0.07225, 0, 0.36111], + // U+0074 t + 117: [0, 0.44444, 0.04169, 0, 0.51667], + // U+0075 u + 118: [0, 0.44444, 0.10836, 0, 0.46111], + // U+0076 v + 119: [0, 0.44444, 0.10836, 0, 0.68334], + // U+0077 w + 120: [0, 0.44444, 0.09169, 0, 0.46111], + // U+0078 x + 121: [0.19444, 0.44444, 0.10836, 0, 0.46111], + // U+0079 y + 122: [0, 0.44444, 0.08752, 0, 0.43472], + // U+007a z + 126: [0.35, 0.32659, 0.08826, 0, 0.5], + // U+007e ~ + 160: M7, + // U+00a0 + 168: [0, 0.67937, 0.06385, 0, 0.5], + // U+00a8 ¨ + 176: M215, + // U+00b0 ° + 184: M213, + // U+00b8 ¸ + 305: [0, 0.44444, 0.04169, 0, 0.23889], + // U+0131 ı + 567: [0.19444, 0.44444, 0.04169, 0, 0.26667], + // U+0237 ȷ + 710: M214, + // U+02c6 ˆ + 711: [0, 0.63194, 0.08432, 0, 0.5], + // U+02c7 ˇ + 713: [0, 0.60889, 0.08776, 0, 0.5], + // U+02c9 ˉ + 714: M216, + // U+02ca ˊ + 715: M143, + // U+02cb ˋ + 728: [0, 0.69444, 0.09483, 0, 0.5], + // U+02d8 ˘ + 729: [0, 0.67937, 0.07774, 0, 0.27778], + // U+02d9 ˙ + 730: M215, + // U+02da ˚ + 732: [0, 0.67659, 0.08826, 0, 0.5], + // U+02dc ˜ + 733: M216, + // U+02dd ˝ + 915: [0, 0.69444, 0.13372, 0, 0.54167], + // U+0393 Γ + 916: M237, + // U+0394 Δ + 920: [0, 0.69444, 0.07555, 0, 0.77778], + // U+0398 Θ + 923: M170, + // U+039b Λ + 926: [0, 0.69444, 0.12816, 0, 0.66667], + // U+039e Ξ + 928: M212, + // U+03a0 Π + 931: [0, 0.69444, 0.11983, 0, 0.72222], + // U+03a3 Σ + 933: M217, + // U+03a5 Υ + 934: [0, 0.69444, 0.04603, 0, 0.72222], + // U+03a6 Φ + 936: M217, + // U+03a8 Ψ + 937: [0, 0.69444, 0.08293, 0, 0.72222], + // U+03a9 Ω + 8211: [0, 0.44444, 0.08616, 0, 0.5], + // U+2013 – + 8212: [0, 0.44444, 0.08616, 0, 1], + // U+2014 — + 8216: M218, + // U+2018 ‘ + 8217: M218, + // U+2019 ’ + 8220: [0, 0.69444, 0.14205, 0, 0.5], + // U+201c “ + 8221: M219 + // U+201d ” + }, + "SansSerif-Regular": { + 32: M7, + // U+0020 + 33: [0, 0.69444, 0, 0, 0.31945], + // U+0021 ! + 34: M143, + // U+0022 " + 35: M220, + // U+0023 # + 36: M161, + // U+0024 $ + 37: M221, + // U+0025 % + 38: [0, 0.69444, 0, 0, 0.75834], + // U+0026 & + 39: M133, + // U+0027 ' + 40: M134, + // U+0028 ( + 41: M134, + // U+0029 ) + 42: M222, + // U+002a * + 43: M149, + // U+002b + + 44: M223, + // U+002c , + 45: [0, 0.44444, 0, 0, 0.33333], + // U+002d - + 46: M224, + // U+002e . + 47: M141, + // U+002f / + 48: M225, + // U+0030 0 + 49: M225, + // U+0031 1 + 50: M225, + // U+0032 2 + 51: M225, + // U+0033 3 + 52: M225, + // U+0034 4 + 53: M225, + // U+0035 5 + 54: M225, + // U+0036 6 + 55: M225, + // U+0037 7 + 56: M225, + // U+0038 8 + 57: M225, + // U+0039 9 + 58: [0, 0.44444, 0, 0, 0.27778], + // U+003a : + 59: [0.125, 0.44444, 0, 0, 0.27778], + // U+003b ; + 61: [-0.13, 0.37, 0, 0, 0.77778], + // U+003d = + 63: M226, + // U+003f ? + 64: M227, + // U+0040 @ + 65: M227, + // U+0041 A + 66: M227, + // U+0042 B + 67: M75, + // U+0043 C + 68: [0, 0.69444, 0, 0, 0.72223], + // U+0044 D + 69: M228, + // U+0045 E + 70: [0, 0.69444, 0, 0, 0.56945], + // U+0046 F + 71: M227, + // U+0047 G + 72: M230, + // U+0048 H + 73: M133, + // U+0049 I + 74: M226, + // U+004a J + 75: [0, 0.69444, 0, 0, 0.69445], + // U+004b K + 76: M229, + // U+004c L + 77: [0, 0.69444, 0, 0, 0.875], + // U+004d M + 78: M230, + // U+004e N + 79: [0, 0.69444, 0, 0, 0.73611], + // U+004f O + 80: M75, + // U+0050 P + 81: [0.125, 0.69444, 0, 0, 0.73611], + // U+0051 Q + 82: [0, 0.69444, 0, 0, 0.64584], + // U+0052 R + 83: M144, + // U+0053 S + 84: [0, 0.69444, 0, 0, 0.68056], + // U+0054 T + 85: [0, 0.69444, 0, 0, 0.6875], + // U+0055 U + 86: [0, 0.69444, 0.01389, 0, 0.66667], + // U+0056 V + 87: [0, 0.69444, 0.01389, 0, 0.94445], + // U+0057 W + 88: M227, + // U+0058 X + 89: [0, 0.69444, 0.025, 0, 0.66667], + // U+0059 Y + 90: M170, + // U+005a Z + 91: M231, + // U+005b [ + 93: M231, + // U+005d ] + 94: M143, + // U+005e ^ + 95: [0.35, 0.09444, 0.02778, 0, 0.5], + // U+005f _ + 97: [0, 0.44444, 0, 0, 0.48056], + // U+0061 a + 98: M232, + // U+0062 b + 99: M233, + // U+0063 c + 100: M232, + // U+0064 d + 101: M233, + // U+0065 e + 102: [0, 0.69444, 0.06944, 0, 0.30556], + // U+0066 f + 103: [0.19444, 0.44444, 0.01389, 0, 0.5], + // U+0067 g + 104: M232, + // U+0068 h + 105: [0, 0.67937, 0, 0, 0.23889], + // U+0069 i + 106: [0.19444, 0.67937, 0, 0, 0.26667], + // U+006a j + 107: [0, 0.69444, 0, 0, 0.48889], + // U+006b k + 108: [0, 0.69444, 0, 0, 0.23889], + // U+006c l + 109: [0, 0.44444, 0, 0, 0.79445], + // U+006d m + 110: M236, + // U+006e n + 111: [0, 0.44444, 0, 0, 0.5], + // U+006f o + 112: M234, + // U+0070 p + 113: M234, + // U+0071 q + 114: [0, 0.44444, 0.01389, 0, 0.34167], + // U+0072 r + 115: M235, + // U+0073 s + 116: [0, 0.57143, 0, 0, 0.36111], + // U+0074 t + 117: M236, + // U+0075 u + 118: [0, 0.44444, 0.01389, 0, 0.46111], + // U+0076 v + 119: [0, 0.44444, 0.01389, 0, 0.68334], + // U+0077 w + 120: [0, 0.44444, 0, 0, 0.46111], + // U+0078 x + 121: [0.19444, 0.44444, 0.01389, 0, 0.46111], + // U+0079 y + 122: [0, 0.44444, 0, 0, 0.43472], + // U+007a z + 126: [0.35, 0.32659, 0, 0, 0.5], + // U+007e ~ + 160: M7, + // U+00a0 + 168: [0, 0.67937, 0, 0, 0.5], + // U+00a8 ¨ + 176: M227, + // U+00b0 ° + 184: M213, + // U+00b8 ¸ + 305: [0, 0.44444, 0, 0, 0.23889], + // U+0131 ı + 567: [0.19444, 0.44444, 0, 0, 0.26667], + // U+0237 ȷ + 710: M143, + // U+02c6 ˆ + 711: [0, 0.63194, 0, 0, 0.5], + // U+02c7 ˇ + 713: [0, 0.60889, 0, 0, 0.5], + // U+02c9 ˉ + 714: M143, + // U+02ca ˊ + 715: M143, + // U+02cb ˋ + 728: M143, + // U+02d8 ˘ + 729: [0, 0.67937, 0, 0, 0.27778], + // U+02d9 ˙ + 730: M227, + // U+02da ˚ + 732: [0, 0.67659, 0, 0, 0.5], + // U+02dc ˜ + 733: M143, + // U+02dd ˝ + 915: M229, + // U+0393 Γ + 916: M237, + // U+0394 Δ + 920: M136, + // U+0398 Θ + 923: M170, + // U+039b Λ + 926: M227, + // U+039e Ξ + 928: M230, + // U+03a0 Π + 931: M156, + // U+03a3 Σ + 933: M136, + // U+03a5 Υ + 934: M156, + // U+03a6 Φ + 936: M136, + // U+03a8 Ψ + 937: M156, + // U+03a9 Ω + 8211: [0, 0.44444, 0.02778, 0, 0.5], + // U+2013 – + 8212: [0, 0.44444, 0.02778, 0, 1], + // U+2014 — + 8216: M133, + // U+2018 ‘ + 8217: M133, + // U+2019 ’ + 8220: M143, + // U+201c “ + 8221: M143 + // U+201d ” + }, + "Script-Regular": { + 32: M7, + // U+0020 + 65: [0, 0.7, 0.22925, 0, 0.80253], + // U+0041 A + 66: [0, 0.7, 0.04087, 0, 0.90757], + // U+0042 B + 67: [0, 0.7, 0.1689, 0, 0.66619], + // U+0043 C + 68: [0, 0.7, 0.09371, 0, 0.77443], + // U+0044 D + 69: [0, 0.7, 0.18583, 0, 0.56162], + // U+0045 E + 70: [0, 0.7, 0.13634, 0, 0.89544], + // U+0046 F + 71: [0, 0.7, 0.17322, 0, 0.60961], + // U+0047 G + 72: [0, 0.7, 0.29694, 0, 0.96919], + // U+0048 H + 73: [0, 0.7, 0.19189, 0, 0.80907], + // U+0049 I + 74: [0.27778, 0.7, 0.19189, 0, 1.05159], + // U+004a J + 75: [0, 0.7, 0.31259, 0, 0.91364], + // U+004b K + 76: [0, 0.7, 0.19189, 0, 0.87373], + // U+004c L + 77: [0, 0.7, 0.15981, 0, 1.08031], + // U+004d M + 78: [0, 0.7, 0.3525, 0, 0.9015], + // U+004e N + 79: [0, 0.7, 0.08078, 0, 0.73787], + // U+004f O + 80: [0, 0.7, 0.08078, 0, 1.01262], + // U+0050 P + 81: [0, 0.7, 0.03305, 0, 0.88282], + // U+0051 Q + 82: [0, 0.7, 0.06259, 0, 0.85], + // U+0052 R + 83: [0, 0.7, 0.19189, 0, 0.86767], + // U+0053 S + 84: [0, 0.7, 0.29087, 0, 0.74697], + // U+0054 T + 85: [0, 0.7, 0.25815, 0, 0.79996], + // U+0055 U + 86: [0, 0.7, 0.27523, 0, 0.62204], + // U+0056 V + 87: [0, 0.7, 0.27523, 0, 0.80532], + // U+0057 W + 88: [0, 0.7, 0.26006, 0, 0.94445], + // U+0058 X + 89: [0, 0.7, 0.2939, 0, 0.70961], + // U+0059 Y + 90: [0, 0.7, 0.24037, 0, 0.8212], + // U+005a Z + 160: M7 + // U+00a0 + }, + "Size1-Regular": { + 32: M7, + // U+0020 + 40: M238, + // U+0028 ( + 41: M238, + // U+0029 ) + 47: M239, + // U+002f / + 91: M240, + // U+005b [ + 92: M239, + // U+005c \ + 93: M240, + // U+005d ] + 123: M241, + // U+007b { + 125: M241, + // U+007d } + 160: M7, + // U+00a0 + 710: M242, + // U+02c6 ˆ + 732: M242, + // U+02dc ˜ + 770: M242, + // U+0302 ̂ + 771: M242, + // U+0303 ̃ + 8214: [-99e-5, 0.601, 0, 0, 0.77778], + // U+2016 ‖ + 8593: M243, + // U+2191 ↑ + 8595: M243, + // U+2193 ↓ + 8657: M244, + // U+21d1 ⇑ + 8659: M244, + // U+21d3 ⇓ + 8719: M245, + // U+220f ∏ + 8720: M245, + // U+2210 ∐ + 8721: [0.25001, 0.75, 0, 0, 1.05556], + // U+2211 ∑ + 8730: [0.35001, 0.85, 0, 0, 1], + // U+221a √ + 8739: [-599e-5, 0.606, 0, 0, 0.33333], + // U+2223 ∣ + 8741: [-599e-5, 0.606, 0, 0, 0.55556], + // U+2225 ∥ + 8747: M247, + // U+222b ∫ + 8748: M246, + // U+222c ∬ + 8749: M246, + // U+222d ∭ + 8750: M247, + // U+222e ∮ + 8896: M248, + // U+22c0 ⋀ + 8897: M248, + // U+22c1 ⋁ + 8898: M248, + // U+22c2 ⋂ + 8899: M248, + // U+22c3 ⋃ + 8968: M249, + // U+2308 ⌈ + 8969: M249, + // U+2309 ⌉ + 8970: M249, + // U+230a ⌊ + 8971: M249, + // U+230b ⌋ + 9168: M277, + // U+23d0 ⏐ + 10216: M249, + // U+27e8 ⟨ + 10217: M249, + // U+27e9 ⟩ + 10752: M250, + // U+2a00 ⨀ + 10753: M250, + // U+2a01 ⨁ + 10754: M250, + // U+2a02 ⨂ + 10756: M248, + // U+2a04 ⨄ + 10758: M248 + // U+2a06 ⨆ + }, + "Size2-Regular": { + 32: M7, + // U+0020 + 40: M251, + // U+0028 ( + 41: M251, + // U+0029 ) + 47: M252, + // U+002f / + 91: M253, + // U+005b [ + 92: M252, + // U+005c \ + 93: M253, + // U+005d ] + 123: M254, + // U+007b { + 125: M254, + // U+007d } + 160: M7, + // U+00a0 + 710: M255, + // U+02c6 ˆ + 732: M255, + // U+02dc ˜ + 770: M255, + // U+0302 ̂ + 771: M255, + // U+0303 ̃ + 8719: M256, + // U+220f ∏ + 8720: M256, + // U+2210 ∐ + 8721: [0.55001, 1.05, 0, 0, 1.44445], + // U+2211 ∑ + 8730: [0.65002, 1.15, 0, 0, 1], + // U+221a √ + 8747: M258, + // U+222b ∫ + 8748: M257, + // U+222c ∬ + 8749: M257, + // U+222d ∭ + 8750: M258, + // U+222e ∮ + 8896: M259, + // U+22c0 ⋀ + 8897: M259, + // U+22c1 ⋁ + 8898: M259, + // U+22c2 ⋂ + 8899: M259, + // U+22c3 ⋃ + 8968: M260, + // U+2308 ⌈ + 8969: M260, + // U+2309 ⌉ + 8970: M260, + // U+230a ⌊ + 8971: M260, + // U+230b ⌋ + 10216: M261, + // U+27e8 ⟨ + 10217: M261, + // U+27e9 ⟩ + 10752: M262, + // U+2a00 ⨀ + 10753: M262, + // U+2a01 ⨁ + 10754: M262, + // U+2a02 ⨂ + 10756: M259, + // U+2a04 ⨄ + 10758: M259 + // U+2a06 ⨆ + }, + "Size3-Regular": { + 32: M7, + // U+0020 + 40: M263, + // U+0028 ( + 41: M263, + // U+0029 ) + 47: M264, + // U+002f / + 91: M265, + // U+005b [ + 92: M264, + // U+005c \ + 93: M265, + // U+005d ] + 123: M266, + // U+007b { + 125: M266, + // U+007d } + 160: M7, + // U+00a0 + 710: M267, + // U+02c6 ˆ + 732: M267, + // U+02dc ˜ + 770: M267, + // U+0302 ̂ + 771: M267, + // U+0303 ̃ + 8730: [0.95003, 1.45, 0, 0, 1], + // U+221a √ + 8968: M268, + // U+2308 ⌈ + 8969: M268, + // U+2309 ⌉ + 8970: M268, + // U+230a ⌊ + 8971: M268, + // U+230b ⌋ + 10216: M266, + // U+27e8 ⟨ + 10217: M266 + // U+27e9 ⟩ + }, + "Size4-Regular": { + 32: M7, + // U+0020 + 40: M269, + // U+0028 ( + 41: M269, + // U+0029 ) + 47: M270, + // U+002f / + 91: M271, + // U+005b [ + 92: M270, + // U+005c \ + 93: M271, + // U+005d ] + 123: M272, + // U+007b { + 125: M272, + // U+007d } + 160: M7, + // U+00a0 + 710: M273, + // U+02c6 ˆ + 732: M273, + // U+02dc ˜ + 770: M273, + // U+0302 ̂ + 771: M273, + // U+0303 ̃ + 8730: [1.25003, 1.75, 0, 0, 1], + // U+221a √ + 8968: M274, + // U+2308 ⌈ + 8969: M274, + // U+2309 ⌉ + 8970: M274, + // U+230a ⌊ + 8971: M274, + // U+230b ⌋ + 9115: M275, + // U+239b ⎛ + 9116: M276, + // U+239c ⎜ + 9117: M275, + // U+239d ⎝ + 9118: M275, + // U+239e ⎞ + 9119: M276, + // U+239f ⎟ + 9120: M275, + // U+23a0 ⎠ + 9121: M278, + // U+23a1 ⎡ + 9122: M277, + // U+23a2 ⎢ + 9123: M278, + // U+23a3 ⎣ + 9124: M278, + // U+23a4 ⎤ + 9125: M277, + // U+23a5 ⎥ + 9126: M278, + // U+23a6 ⎦ + 9127: M279, + // U+23a7 ⎧ + 9128: M280, + // U+23a8 ⎨ + 9129: M281, + // U+23a9 ⎩ + 9130: [0, 0.3, 0, 0, 0.88889], + // U+23aa ⎪ + 9131: M279, + // U+23ab ⎫ + 9132: M280, + // U+23ac ⎬ + 9133: M281, + // U+23ad ⎭ + 9143: [0.88502, 0.915, 0, 0, 1.05556], + // U+23b7 ⎷ + 10216: M272, + // U+27e8 ⟨ + 10217: M272, + // U+27e9 ⟩ + 57344: M282, + // U+e000  + 57345: M282, + // U+e001  + 57680: M283, + // U+e150  + 57681: M283, + // U+e151  + 57682: M283, + // U+e152  + 57683: M283 + // U+e153  + }, + "Typewriter-Regular": { + 32: M290, + // U+0020 + 33: M284, + // U+0021 ! + 34: M284, + // U+0022 " + 35: M284, + // U+0023 # + 36: M285, + // U+0024 $ + 37: M285, + // U+0025 % + 38: M284, + // U+0026 & + 39: M284, + // U+0027 ' + 40: M285, + // U+0028 ( + 41: M285, + // U+0029 ) + 42: [0, 0.52083, 0, 0, 0.525], + // U+002a * + 43: M286, + // U+002b + + 44: [0.13889, 0.125, 0, 0, 0.525], + // U+002c , + 45: M286, + // U+002d - + 46: [0, 0.125, 0, 0, 0.525], + // U+002e . + 47: M285, + // U+002f / + 48: M284, + // U+0030 0 + 49: M284, + // U+0031 1 + 50: M284, + // U+0032 2 + 51: M284, + // U+0033 3 + 52: M284, + // U+0034 4 + 53: M284, + // U+0035 5 + 54: M284, + // U+0036 6 + 55: M284, + // U+0037 7 + 56: M284, + // U+0038 8 + 57: M284, + // U+0039 9 + 58: M288, + // U+003a : + 59: [0.13889, 0.43056, 0, 0, 0.525], + // U+003b ; + 60: M287, + // U+003c < + 61: [-0.19549, 0.41562, 0, 0, 0.525], + // U+003d = + 62: M287, + // U+003e > + 63: M284, + // U+003f ? + 64: M284, + // U+0040 @ + 65: M284, + // U+0041 A + 66: M284, + // U+0042 B + 67: M284, + // U+0043 C + 68: M284, + // U+0044 D + 69: M284, + // U+0045 E + 70: M284, + // U+0046 F + 71: M284, + // U+0047 G + 72: M284, + // U+0048 H + 73: M284, + // U+0049 I + 74: M284, + // U+004a J + 75: M284, + // U+004b K + 76: M284, + // U+004c L + 77: M284, + // U+004d M + 78: M284, + // U+004e N + 79: M284, + // U+004f O + 80: M284, + // U+0050 P + 81: [0.13889, 0.61111, 0, 0, 0.525], + // U+0051 Q + 82: M284, + // U+0052 R + 83: M284, + // U+0053 S + 84: M284, + // U+0054 T + 85: M284, + // U+0055 U + 86: M284, + // U+0056 V + 87: M284, + // U+0057 W + 88: M284, + // U+0058 X + 89: M284, + // U+0059 Y + 90: M284, + // U+005a Z + 91: M285, + // U+005b [ + 92: M285, + // U+005c \ + 93: M285, + // U+005d ] + 94: M284, + // U+005e ^ + 95: [0.09514, 0, 0, 0, 0.525], + // U+005f _ + 96: M284, + // U+0060 ` + 97: M288, + // U+0061 a + 98: M284, + // U+0062 b + 99: M288, + // U+0063 c + 100: M284, + // U+0064 d + 101: M288, + // U+0065 e + 102: M284, + // U+0066 f + 103: M289, + // U+0067 g + 104: M284, + // U+0068 h + 105: M284, + // U+0069 i + 106: [0.22222, 0.61111, 0, 0, 0.525], + // U+006a j + 107: M284, + // U+006b k + 108: M284, + // U+006c l + 109: M288, + // U+006d m + 110: M288, + // U+006e n + 111: M288, + // U+006f o + 112: M289, + // U+0070 p + 113: M289, + // U+0071 q + 114: M288, + // U+0072 r + 115: M288, + // U+0073 s + 116: [0, 0.55358, 0, 0, 0.525], + // U+0074 t + 117: M288, + // U+0075 u + 118: M288, + // U+0076 v + 119: M288, + // U+0077 w + 120: M288, + // U+0078 x + 121: M289, + // U+0079 y + 122: M288, + // U+007a z + 123: M285, + // U+007b { + 124: M285, + // U+007c | + 125: M285, + // U+007d } + 126: M284, + // U+007e ~ + 127: M284, + // U+007f  + 160: M290, + // U+00a0 + 176: M284, + // U+00b0 ° + 184: [0.19445, 0, 0, 0, 0.525], + // U+00b8 ¸ + 305: M288, + // U+0131 ı + 567: M289, + // U+0237 ȷ + 711: [0, 0.56597, 0, 0, 0.525], + // U+02c7 ˇ + 713: [0, 0.56555, 0, 0, 0.525], + // U+02c9 ˉ + 714: M284, + // U+02ca ˊ + 715: M284, + // U+02cb ˋ + 728: M284, + // U+02d8 ˘ + 730: M284, + // U+02da ˚ + 770: M284, + // U+0302 ̂ + 771: M284, + // U+0303 ̃ + 776: M284, + // U+0308 ̈ + 915: M284, + // U+0393 Γ + 916: M284, + // U+0394 Δ + 920: M284, + // U+0398 Θ + 923: M284, + // U+039b Λ + 926: M284, + // U+039e Ξ + 928: M284, + // U+03a0 Π + 931: M284, + // U+03a3 Σ + 933: M284, + // U+03a5 Υ + 934: M284, + // U+03a6 Φ + 936: M284, + // U+03a8 Ψ + 937: M284, + // U+03a9 Ω + 8216: M284, + // U+2018 ‘ + 8217: M284, + // U+2019 ’ + 8242: M284, + // U+2032 ′ + 9251: [0.11111, 0.21944, 0, 0, 0.525] + // U+2423 ␣ + } + }; + + // src/core/font-metrics.ts + var CJK_REGEX = /[\u3040-\u309F]|[\u30A0-\u30FF]|[\u4E00-\u9FAF]|[\uAC00-\uD7AF]/; + var PT_PER_EM = 10; + var AXIS_HEIGHT = 0.25; + var BASELINE_SKIP = 1.2; + var X_HEIGHT = 0.431; + var FONT_METRICS = { + slant: [0.25, 0.25, 0.25], + space: [0, 0, 0], + stretch: [0, 0, 0], + shrink: [0, 0, 0], + xHeight: [X_HEIGHT, X_HEIGHT, X_HEIGHT], + quad: [1, 1.171, 1.472], + extraSpace: [0, 0, 0], + num1: [0.5, 0.732, 0.925], + // Was num1: [0.677, 0.732, 0.925], + num2: [0.394, 0.384, 0.5], + // Was num2: [0.394, 0.384, 0.387], + num3: [0.444, 0.471, 0.504], + denom1: [0.686, 0.752, 1.025], + denom2: [0.345, 0.344, 0.532], + sup1: [0.413, 0.503, 0.504], + sup2: [0.363, 0.431, 0.404], + sup3: [0.289, 0.286, 0.294], + sub1: [0.15, 0.143, 0.2], + sub2: [0.247, 0.286, 0.4], + supDrop: [0.386, 0.353, 0.494], + subDrop: [0.05, 0.071, 0.1], + delim1: [2.39, 1.7, 1.98], + delim2: [1.01, 1.157, 1.42], + axisHeight: [AXIS_HEIGHT, AXIS_HEIGHT, AXIS_HEIGHT], + defaultRuleThickness: [0.04, 0.049, 0.049], + bigOpSpacing1: [0.111, 0.111, 0.111], + bigOpSpacing2: [0.166, 0.166, 0.166], + bigOpSpacing3: [0.2, 0.2, 0.2], + bigOpSpacing4: [0.6, 0.611, 0.611], + bigOpSpacing5: [0.1, 0.143, 0.143], + sqrtRuleThickness: [0.04, 0.04, 0.04] + }; + var FONT_SCALE = [ + 0, + // not used + 0.5, + // size 1 = scriptscriptstyle + 0.7, + // size 2 = scriptstyle + 0.8, + 0.9, + 1, + // size 5 = default + 1.2, + 1.44, + 1.728, + 2.074, + 2.488 + //size 10 + ]; + var DEFAULT_FONT_SIZE = 5; + var EXTRA_CHARACTER_MAP = { + "\xA0": " ", + // NON-BREAKING SPACE is like space + "\u200B": " ", + // ZERO WIDTH SPACE is like space + // Latin-1 + "\xC5": "A", + "\xC7": "C", + "\xD0": "D", + "\xDE": "o", + "\xE5": "a", + "\xE7": "c", + "\xF0": "d", + "\xFE": "o", + // Cyrillic + "\u0410": "A", + "\u0411": "B", + "\u0412": "B", + "\u0413": "F", + "\u0414": "A", + "\u0415": "E", + "\u0416": "K", + "\u0417": "3", + "\u0418": "N", + "\u0419": "N", + "\u041A": "K", + "\u041B": "N", + "\u041C": "M", + "\u041D": "H", + "\u041E": "O", + "\u041F": "N", + "\u0420": "P", + "\u0421": "C", + "\u0422": "T", + "\u0423": "y", + "\u0424": "O", + "\u0425": "X", + "\u0426": "U", + "\u0427": "h", + "\u0428": "W", + "\u0429": "W", + "\u042A": "B", + "\u042B": "X", + "\u042C": "B", + "\u042D": "3", + "\u042E": "X", + "\u042F": "R", + "\u0430": "a", + "\u0431": "b", + "\u0432": "a", + "\u0433": "r", + "\u0434": "y", + "\u0435": "e", + "\u0436": "m", + "\u0437": "e", + "\u0438": "n", + "\u0439": "n", + "\u043A": "n", + "\u043B": "n", + "\u043C": "m", + "\u043D": "n", + "\u043E": "o", + "\u043F": "n", + "\u0440": "p", + "\u0441": "c", + "\u0442": "o", + "\u0443": "y", + "\u0444": "b", + "\u0445": "x", + "\u0446": "n", + "\u0447": "n", + "\u0448": "w", + "\u0449": "w", + "\u044A": "a", + "\u044B": "m", + "\u044C": "a", + "\u044D": "e", + "\u044E": "m", + "\u044F": "r" + }; + function getCharacterMetrics(codepoint, fontName) { + if (codepoint === void 0) codepoint = 77; + const metrics = font_metrics_data_default[fontName][codepoint]; + if (metrics) { + return { + defaultMetrics: false, + depth: metrics[0], + height: metrics[1], + italic: metrics[2], + skew: metrics[3], + width: metrics[4] + }; + } + if (codepoint === 11034) { + return { + defaultMetrics: true, + depth: 0.2, + height: 0.8, + italic: 0, + skew: 0, + width: 0.8 + }; + } + const char = String.fromCodePoint(codepoint); + if (char in EXTRA_CHARACTER_MAP) + codepoint = EXTRA_CHARACTER_MAP[char].codePointAt(0); + else if (CJK_REGEX.test(char)) { + codepoint = 77; + return { + defaultMetrics: true, + depth: 0.2, + height: 0.9, + italic: 0, + skew: 0, + width: 1 + }; + } + return { + defaultMetrics: true, + depth: 0.2, + height: 0.7, + italic: 0, + skew: 0, + width: 0.8 + }; + } + + // src/core/svg-box.ts + var SVG_BODY = { + // Adapted from https://github.com/KaTeX/KaTeX/blob/master/src/stretchy.js + overrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + overleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + underrightarrow: [["rightarrow"], 0.888, 522, "xMaxYMin"], + underleftarrow: [["leftarrow"], 0.888, 522, "xMinYMin"], + xrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + longrightarrow: [["rightarrow"], 1.469, 522, "xMaxYMin"], + xleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + longleftarrow: [["leftarrow"], 1.469, 522, "xMinYMin"], + Overrightarrow: [["doublerightarrow"], 0.888, 560, "xMaxYMin"], + xRightarrow: [["doublerightarrow"], 1.526, 560, "xMaxYMin"], + xLeftarrow: [["doubleleftarrow"], 1.526, 560, "xMinYMin"], + overleftharpoon: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoonup: [["leftharpoon"], 0.888, 522, "xMinYMin"], + xleftharpoondown: [["leftharpoondown"], 0.888, 522, "xMinYMin"], + overrightharpoon: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoonup: [["rightharpoon"], 0.888, 522, "xMaxYMin"], + xrightharpoondown: [["rightharpoondown"], 0.888, 522, "xMaxYMin"], + xlongequal: [["longequal"], 0.888, 334, "xMinYMin"], + xtwoheadleftarrow: [["twoheadleftarrow"], 0.888, 334, "xMinYMin"], + xtwoheadrightarrow: [["twoheadrightarrow"], 0.888, 334, "xMaxYMin"], + overleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + overbrace: [["leftbrace", "midbrace", "rightbrace"], 1.6, 548], + underbrace: [ + ["leftbraceunder", "midbraceunder", "rightbraceunder"], + 1.6, + 548 + ], + underleftrightarrow: [["leftarrow", "rightarrow"], 0.888, 522], + xleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + longleftrightarrow: [["leftarrow", "rightarrow"], 1.75, 522], + xLeftrightarrow: [["doubleleftarrow", "doublerightarrow"], 1.75, 560], + xrightleftharpoons: [["leftharpoondownplus", "rightharpoonplus"], 1.75, 716], + longrightleftharpoons: [ + ["leftharpoondownplus", "rightharpoonplus"], + 1.75, + 716 + ], + xleftrightharpoons: [["leftharpoonplus", "rightharpoondownplus"], 1.75, 716], + longleftrightharpoons: [ + ["leftharpoonplus", "rightharpoondownplus"], + 1.75, + 716 + ], + xhookleftarrow: [["leftarrow", "righthook"], 1.08, 522], + xhookrightarrow: [["lefthook", "rightarrow"], 1.08, 522], + overlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + underlinesegment: [["leftlinesegment", "rightlinesegment"], 0.888, 522], + overgroup: [["leftgroup", "rightgroup"], 0.888, 342], + undergroup: [["leftgroupunder", "rightgroupunder"], 0.888, 342], + xmapsto: [["leftmapsto", "rightarrow"], 1.5, 522], + xtofrom: [["leftToFrom", "rightToFrom"], 1.75, 528], + // The next three arrows are from the mhchem package. + // In mhchem.sty, min-length is 2.0em. But these arrows might appear in the + // document as \xrightarrow or \xrightleftharpoons. Those have + // min-length = 1.75em, so we set min-length on these next three to match. + xleftrightarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + longleftrightarrows: [["baraboveleftarrow", "rightarrowabovebar"], 1.75, 901], + xRightleftharpoons: [ + ["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], + 1.75, + 716 + ], + longRightleftharpoons: [ + ["baraboveshortleftharpoon", "rightharpoonaboveshortbar"], + 1.75, + 716 + ], + xLeftrightharpoons: [ + ["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], + 1.75, + 716 + ], + longLeftrightharpoons: [ + ["shortbaraboveleftharpoon", "shortrightharpoonabovebar"], + 1.75, + 716 + ] + }; + var SVG_ACCENTS = { + // ViewBoxWidth, viewBoxHeight, height + widehat1: [1062, 239, 0.24], + widehat2: [2364, 300, 0.3], + widehat3: [2364, 360, 0.36], + widehat4: [2364, 420, 0.42], + widecheck1: [1062, 239, 0.24], + widecheck2: [2364, 300, 0.3], + widecheck3: [2364, 360, 0.36], + widecheck4: [2364, 420, 0.42], + widetilde1: [600, 260, 0.26], + widetilde2: [1033, 286, 0.286], + widetilde3: [2339, 306, 0.306], + widetilde4: [2340, 312, 0.34], + overarc: [1061, 159, 0.3], + underarc: [1061, 159, 0.3] + }; + var PATHS = { + // The doubleleftarrow geometry is from glyph U+21D0 in the font KaTeX Main + doubleleftarrow: `M262 157 +l10-10c34-36 62.7-77 86-123 3.3-8 5-13.3 5-16 0-5.3-6.7-8-20-8-7.3 + 0-12.2.5-14.5 1.5-2.3 1-4.8 4.5-7.5 10.5-49.3 97.3-121.7 169.3-217 216-28 + 14-57.3 25-88 33-6.7 2-11 3.8-13 5.5-2 1.7-3 4.2-3 7.5s1 5.8 3 7.5 +c2 1.7 6.3 3.5 13 5.5 68 17.3 128.2 47.8 180.5 91.5 52.3 43.7 93.8 96.2 124.5 + 157.5 9.3 8 15.3 12.3 18 13h6c12-.7 18-4 18-10 0-2-1.7-7-5-15-23.3-46-52-87 +-86-123l-10-10h399738v-40H218c328 0 0 0 0 0l-10-8c-26.7-20-65.7-43-117-69 2.7 +-2 6-3.7 10-5 36.7-16 72.3-37.3 107-64l10-8h399782v-40z +m8 0v40h399730v-40zm0 194v40h399730v-40z`, + // Doublerightarrow is from glyph U+21D2 in font KaTeX Main + doublerightarrow: `M399738 392l +-10 10c-34 36-62.7 77-86 123-3.3 8-5 13.3-5 16 0 5.3 6.7 8 20 8 7.3 0 12.2-.5 + 14.5-1.5 2.3-1 4.8-4.5 7.5-10.5 49.3-97.3 121.7-169.3 217-216 28-14 57.3-25 88 +-33 6.7-2 11-3.8 13-5.5 2-1.7 3-4.2 3-7.5s-1-5.8-3-7.5c-2-1.7-6.3-3.5-13-5.5-68 +-17.3-128.2-47.8-180.5-91.5-52.3-43.7-93.8-96.2-124.5-157.5-9.3-8-15.3-12.3-18 +-13h-6c-12 .7-18 4-18 10 0 2 1.7 7 5 15 23.3 46 52 87 86 123l10 10H0v40h399782 +c-328 0 0 0 0 0l10 8c26.7 20 65.7 43 117 69-2.7 2-6 3.7-10 5-36.7 16-72.3 37.3 +-107 64l-10 8H0v40zM0 157v40h399730v-40zm0 194v40h399730v-40z`, + // Leftarrow is from glyph U+2190 in font KaTeX Main + leftarrow: `M400000 241H110l3-3c68.7-52.7 113.7-120 + 135-202 4-14.7 6-23 6-25 0-7.3-7-11-21-11-8 0-13.2.8-15.5 2.5-2.3 1.7-4.2 5.8 +-5.5 12.5-1.3 4.7-2.7 10.3-4 17-12 48.7-34.8 92-68.5 130S65.3 228.3 18 247 +c-10 4-16 7.7-18 11 0 8.7 6 14.3 18 17 47.3 18.7 87.8 47 121.5 85S196 441.3 208 + 490c.7 2 1.3 5 2 9s1.2 6.7 1.5 8c.3 1.3 1 3.3 2 6s2.2 4.5 3.5 5.5c1.3 1 3.3 + 1.8 6 2.5s6 1 10 1c14 0 21-3.7 21-11 0-2-2-10.3-6-25-20-79.3-65-146.7-135-202 + l-3-3h399890zM100 241v40h399900v-40z`, + // Overbrace is from glyphs U+23A9/23A8/23A7 in font KaTeX_Size4-Regular + leftbrace: `M6 548l-6-6v-35l6-11c56-104 135.3-181.3 238-232 57.3-28.7 117 +-45 179-50h399577v120H403c-43.3 7-81 15-113 26-100.7 33-179.7 91-237 174-2.7 + 5-6 9-10 13-.7 1-7.3 1-20 1H6z`, + leftbraceunder: `M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13 + 35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688 + 0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7 +-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z`, + overarc: `M529 0c179 0 524 115 524 115 5 1 9 5 9 10 0 1-1 2-1 3l-4 22c-1 5-5 9-11 9h-2s-338-93-512-92c-174 0-513 92-513 92h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13 0 0 342-115 520-115z`, + underarc: `m 529 160 + c -179 0 -524 -115 -524 -115 + c -5 -1 -9 -5 -9 -10 + c 0 -1 1 -2 1 -3 + l 4 -22 + c 1 -5 5 -9 11 -9 + h 2 + s 338 93 512 92 + c 174 0 513 -92 513 -92 + h 2 + c 5 0 9 4 11 9 + l 5 22 + c 1 6 -2 12 -8 13 + c 0 0 -342 115 -520 115 + z + `, + // Overgroup is from the MnSymbol package (public domain) + leftgroup: `M400000 80 +H435C64 80 168.3 229.4 21 260c-5.9 1.2-18 0-18 0-2 0-3-1-3-3v-38C76 61 257 0 + 435 0h399565z`, + leftgroupunder: `M400000 262 +H435C64 262 168.3 112.6 21 82c-5.9-1.2-18 0-18 0-2 0-3 1-3 3v38c76 158 257 219 + 435 219h399565z`, + // Harpoons are from glyph U+21BD in font KaTeX Main + leftharpoon: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3 +-3.3 10.2-9.5 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5 +-18.3 3-21-1.3-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7 +-196 228-6.7 4.7-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40z`, + leftharpoonplus: `M0 267c.7 5.3 3 10 7 14h399993v-40H93c3.3-3.3 10.2-9.5 + 20.5-18.5s17.8-15.8 22.5-20.5c50.7-52 88-110.3 112-175 4-11.3 5-18.3 3-21-1.3 +-4-7.3-6-18-6-8 0-13 .7-15 2s-4.7 6.7-8 16c-42 98.7-107.3 174.7-196 228-6.7 4.7 +-10.7 8-12 10-1.3 2-2 5.7-2 11zm100-26v40h399900v-40zM0 435v40h400000v-40z +m0 0v40h400000v-40z`, + leftharpoondown: `M7 241c-4 4-6.333 8.667-7 14 0 5.333.667 9 2 11s5.333 + 5.333 12 10c90.667 54 156 130 196 228 3.333 10.667 6.333 16.333 9 17 2 .667 5 + 1 9 1h5c10.667 0 16.667-2 18-6 2-2.667 1-9.667-3-21-32-87.333-82.667-157.667 +-152-211l-3-3h399907v-40zM93 281 H400000 v-40L7 241z`, + leftharpoondownplus: `M7 435c-4 4-6.3 8.7-7 14 0 5.3.7 9 2 11s5.3 5.3 12 + 10c90.7 54 156 130 196 228 3.3 10.7 6.3 16.3 9 17 2 .7 5 1 9 1h5c10.7 0 16.7 +-2 18-6 2-2.7 1-9.7-3-21-32-87.3-82.7-157.7-152-211l-3-3h399907v-40H7zm93 0 +v40h399900v-40zM0 241v40h399900v-40zm0 0v40h399900v-40z`, + // Hook is from glyph U+21A9 in font KaTeX Main + lefthook: `M400000 281 H103s-33-11.2-61-33.5S0 197.3 0 164s14.2-61.2 42.5 +-83.5C70.8 58.2 104 47 142 47 c16.7 0 25 6.7 25 20 0 12-8.7 18.7-26 20-40 3.3 +-68.7 15.7-86 37-10 12-15 25.3-15 40 0 22.7 9.8 40.7 29.5 54 19.7 13.3 43.5 21 + 71.5 23h399859zM103 281v-40h399897v40z`, + leftlinesegment: `M40 281 V428 H0 V94 H40 V241 H400000 v40z +M40 281 V428 H0 V94 H40 V241 H400000 v40z`, + leftmapsto: `M40 281 V448H0V74H40V241H400000v40z +M40 281 V448H0V74H40V241H400000v40z`, + // Tofrom is from glyph U+21C4 in font KaTeX AMS Regular + leftToFrom: `M0 147h400000v40H0zm0 214c68 40 115.7 95.7 143 167h22c15.3 0 23 +-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69-70-101l-7-8h399905v-40H95l7-8 +c28.7-32 52-65.7 70-101 10.7-23.3 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 265.3 + 68 321 0 361zm0-174v-40h399900v40zm100 154v40h399900v-40z`, + longequal: `M0 50 h400000 v40H0z m0 194h40000v40H0z +M0 50 h400000 v40H0z m0 194h40000v40H0z`, + midbrace: `M200428 334 +c-100.7-8.3-195.3-44-280-108-55.3-42-101.7-93-139-153l-9-14c-2.7 4-5.7 8.7-9 14 +-53.3 86.7-123.7 153-211 199-66.7 36-137.3 56.3-212 62H0V214h199568c178.3-11.7 + 311.7-78.3 403-201 6-8 9.7-12 11-12 .7-.7 6.7-1 18-1s17.3.3 18 1c1.3 0 5 4 11 + 12 44.7 59.3 101.3 106.3 170 141s145.3 54.3 229 60h199572v120z`, + midbraceunder: `M199572 214 +c100.7 8.3 195.3 44 280 108 55.3 42 101.7 93 139 153l9 14c2.7-4 5.7-8.7 9-14 + 53.3-86.7 123.7-153 211-199 66.7-36 137.3-56.3 212-62h199568v120H200432c-178.3 + 11.7-311.7 78.3-403 201-6 8-9.7 12-11 12-.7.7-6.7 1-18 1s-17.3-.3-18-1c-1.3 0 +-5-4-11-12-44.7-59.3-101.3-106.3-170-141s-145.3-54.3-229-60H0V214z`, + oiintSize1: `M512.6 71.6c272.6 0 320.3 106.8 320.3 178.2 0 70.8-47.7 177.6 +-320.3 177.6S193.1 320.6 193.1 249.8c0-71.4 46.9-178.2 319.5-178.2z +m368.1 178.2c0-86.4-60.9-215.4-368.1-215.4-306.4 0-367.3 129-367.3 215.4 0 85.8 +60.9 214.8 367.3 214.8 307.2 0 368.1-129 368.1-214.8z`, + oiintSize2: `M757.8 100.1c384.7 0 451.1 137.6 451.1 230 0 91.3-66.4 228.8 +-451.1 228.8-386.3 0-452.7-137.5-452.7-228.8 0-92.4 66.4-230 452.7-230z +m502.4 230c0-111.2-82.4-277.2-502.4-277.2s-504 166-504 277.2 +c0 110 84 276 504 276s502.4-166 502.4-276z`, + oiiintSize1: `M681.4 71.6c408.9 0 480.5 106.8 480.5 178.2 0 70.8-71.6 177.6 +-480.5 177.6S202.1 320.6 202.1 249.8c0-71.4 70.5-178.2 479.3-178.2z +m525.8 178.2c0-86.4-86.8-215.4-525.7-215.4-437.9 0-524.7 129-524.7 215.4 0 +85.8 86.8 214.8 524.7 214.8 438.9 0 525.7-129 525.7-214.8z`, + oiiintSize2: `M1021.2 53c603.6 0 707.8 165.8 707.8 277.2 0 110-104.2 275.8 +-707.8 275.8-606 0-710.2-165.8-710.2-275.8C311 218.8 415.2 53 1021.2 53z +m770.4 277.1c0-131.2-126.4-327.6-770.5-327.6S248.4 198.9 248.4 330.1 +c0 130 128.8 326.4 772.7 326.4s770.5-196.4 770.5-326.4z`, + rightarrow: `M0 241v40h399891c-47.3 35.3-84 78-110 128 +-16.7 32-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 + 11 8 0 13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 + 39-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85 +-40.5-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 + 151.7 139 205zm0 0v40h399900v-40z`, + rightbrace: `M400000 542l +-6 6h-17c-12.7 0-19.3-.3-20-1-4-4-7.3-8.3-10-13-35.3-51.3-80.8-93.8-136.5-127.5 +s-117.2-55.8-184.5-66.5c-.7 0-2-.3-4-1-18.7-2.7-76-4.3-172-5H0V214h399571l6 1 +c124.7 8 235 61.7 331 161 31.3 33.3 59.7 72.7 85 118l7 13v35z`, + rightbraceunder: `M399994 0l6 6v35l-6 11c-56 104-135.3 181.3-238 232-57.3 + 28.7-117 45-179 50H-300V214h399897c43.3-7 81-15 113-26 100.7-33 179.7-91 237 +-174 2.7-5 6-9 10-13 .7-1 7.3-1 20-1h17z`, + rightgroup: `M0 80h399565c371 0 266.7 149.4 414 180 5.9 1.2 18 0 18 0 2 0 + 3-1 3-3v-38c-76-158-257-219-435-219H0z`, + rightgroupunder: `M0 262h399565c371 0 266.7-149.4 414-180 5.9-1.2 18 0 18 + 0 2 0 3 1 3 3v38c-76 158-257 219-435 219H0z`, + rightharpoon: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3 +-3.7-15.3-11-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2 +-10.7 0-16.7 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 + 69.2 92 94.5zm0 0v40h399900v-40z`, + rightharpoonplus: `M0 241v40h399993c4.7-4.7 7-9.3 7-14 0-9.3-3.7-15.3-11 +-18-92.7-56.7-159-133.7-199-231-3.3-9.3-6-14.7-8-16-2-1.3-7-2-15-2-10.7 0-16.7 + 2-18 6-2 2.7-1 9.7 3 21 15.3 42 36.7 81.8 64 119.5 27.3 37.7 58 69.2 92 94.5z +m0 0v40h399900v-40z m100 194v40h399900v-40zm0 0v40h399900v-40z`, + rightharpoondown: `M399747 511c0 7.3 6.7 11 20 11 8 0 13-.8 15-2.5s4.7-6.8 + 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 8.5-5.8 9.5 +-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3-64.7 57-92 95 +-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 241v40h399900v-40z`, + rightharpoondownplus: `M399747 705c0 7.3 6.7 11 20 11 8 0 13-.8 + 15-2.5s4.7-6.8 8-15.5c40-94 99.3-166.3 178-217 13.3-8 20.3-12.3 21-13 5.3-3.3 + 8.5-5.8 9.5-7.5 1-1.7 1.5-5.2 1.5-10.5s-2.3-10.3-7-15H0v40h399908c-34 25.3 +-64.7 57-92 95-27.3 38-48.7 77.7-64 119-3.3 8.7-5 14-5 16zM0 435v40h399900v-40z +m0-194v40h400000v-40zm0 0v40h400000v-40z`, + righthook: `M399859 241c-764 0 0 0 0 0 40-3.3 68.7-15.7 86-37 10-12 15-25.3 + 15-40 0-22.7-9.8-40.7-29.5-54-19.7-13.3-43.5-21-71.5-23-17.3-1.3-26-8-26-20 0 +-13.3 8.7-20 26-20 38 0 71 11.2 99 33.5 0 0 7 5.6 21 16.7 14 11.2 21 33.5 21 + 66.8s-14 61.2-42 83.5c-28 22.3-61 33.5-99 33.5L0 241z M0 281v-40h399859v40z`, + rightlinesegment: `M399960 241 V94 h40 V428 h-40 V281 H0 v-40z +M399960 241 V94 h40 V428 h-40 V281 H0 v-40z`, + rightToFrom: `M400000 167c-70.7-42-118-97.7-142-167h-23c-15.3 0-23 .3-23 + 1 0 1.3 5.3 13.7 16 37 18 35.3 41.3 69 70 101l7 8H0v40h399905l-7 8c-28.7 32 +-52 65.7-70 101-10.7 23.3-16 35.7-16 37 0 .7 7.7 1 23 1h23c24-69.3 71.3-125 142 +-167z M100 147v40h399900v-40zM0 341v40h399900v-40z`, + // Twoheadleftarrow is from glyph U+219E in font KaTeX AMS Regular + twoheadleftarrow: `M0 167c68 40 + 115.7 95.7 143 167h22c15.3 0 23-.3 23-1 0-1.3-5.3-13.7-16-37-18-35.3-41.3-69 +-70-101l-7-8h125l9 7c50.7 39.3 85 86 103 140h46c0-4.7-6.3-18.7-19-42-18-35.3 +-40-67.3-66-96l-9-9h399716v-40H284l9-9c26-28.7 48-60.7 66-96 12.7-23.333 19 +-37.333 19-42h-46c-18 54-52.3 100.7-103 140l-9 7H95l7-8c28.7-32 52-65.7 70-101 + 10.7-23.333 16-35.7 16-37 0-.7-7.7-1-23-1h-22C115.7 71.3 68 127 0 167z`, + twoheadrightarrow: `M400000 167 +c-68-40-115.7-95.7-143-167h-22c-15.3 0-23 .3-23 1 0 1.3 5.3 13.7 16 37 18 35.3 + 41.3 69 70 101l7 8h-125l-9-7c-50.7-39.3-85-86-103-140h-46c0 4.7 6.3 18.7 19 42 + 18 35.3 40 67.3 66 96l9 9H0v40h399716l-9 9c-26 28.7-48 60.7-66 96-12.7 23.333 +-19 37.333-19 42h46c18-54 52.3-100.7 103-140l9-7h125l-7 8c-28.7 32-52 65.7-70 + 101-10.7 23.333-16 35.7-16 37 0 .7 7.7 1 23 1h22c27.3-71.3 75-127 143-167z`, + // Tilde1 is a modified version of a glyph from the MnSymbol package + widetilde1: `M200 55.538c-77 0-168 73.953-177 73.953-3 0-7 +-2.175-9-5.437L2 97c-1-2-2-4-2-6 0-4 2-7 5-9l20-12C116 12 171 0 207 0c86 0 + 114 68 191 68 78 0 168-68 177-68 4 0 7 2 9 5l12 19c1 2.175 2 4.35 2 6.525 0 + 4.35-2 7.613-5 9.788l-19 13.05c-92 63.077-116.937 75.308-183 76.128 +-68.267.847-113-73.952-191-73.952z`, + // Ditto tilde2, tilde3, & tilde4 + widetilde2: `M344 55.266c-142 0-300.638 81.316-311.5 86.418 +-8.01 3.762-22.5 10.91-23.5 5.562L1 120c-1-2-1-3-1-4 0-5 3-9 8-10l18.4-9C160.9 + 31.9 283 0 358 0c148 0 188 122 331 122s314-97 326-97c4 0 8 2 10 7l7 21.114 +c1 2.14 1 3.21 1 4.28 0 5.347-3 9.626-7 10.696l-22.3 12.622C852.6 158.372 751 + 181.476 676 181.476c-149 0-189-126.21-332-126.21z`, + widetilde3: `M786 59C457 59 32 175.242 13 175.242c-6 0-10-3.457 +-11-10.37L.15 138c-1-7 3-12 10-13l19.2-6.4C378.4 40.7 634.3 0 804.3 0c337 0 + 411.8 157 746.8 157 328 0 754-112 773-112 5 0 10 3 11 9l1 14.075c1 8.066-.697 + 16.595-6.697 17.492l-21.052 7.31c-367.9 98.146-609.15 122.696-778.15 122.696 + -338 0-409-156.573-744-156.573z`, + widetilde4: `M786 58C457 58 32 177.487 13 177.487c-6 0-10-3.345 +-11-10.035L.15 143c-1-7 3-12 10-13l22-6.7C381.2 35 637.15 0 807.15 0c337 0 409 + 177 744 177 328 0 754-127 773-127 5 0 10 3 11 9l1 14.794c1 7.805-3 13.38-9 + 14.495l-20.7 5.574c-366.85 99.79-607.3 139.372-776.3 139.372-338 0-409 + -175.236-744-175.236z`, + // Vec is from glyph U+20D7 in font KaTeX Main + vec: `M377 20c0-5.333 1.833-10 5.5-14S391 0 397 0c4.667 0 8.667 1.667 12 5 +3.333 2.667 6.667 9 10 19 6.667 24.667 20.333 43.667 41 57 7.333 4.667 11 +10.667 11 18 0 6-1 10-3 12s-6.667 5-14 9c-28.667 14.667-53.667 35.667-75 63 +-1.333 1.333-3.167 3.5-5.5 6.5s-4 4.833-5 5.5c-1 .667-2.5 1.333-4.5 2s-4.333 1 +-7 1c-4.667 0-9.167-1.833-13.5-5.5S337 184 337 178c0-12.667 15.667-32.333 47-59 +H213l-171-1c-8.667-6-13-12.333-13-19 0-4.667 4.333-11.333 13-20h359 +c-16-25.333-24-45-24-59z`, + // Widehat1 is a modified version of a glyph from the MnSymbol package + widehat1: `M529 0h5l519 115c5 1 9 5 9 10 0 1-1 2-1 3l-4 22 +c-1 5-5 9-11 9h-2L532 67 19 159h-2c-5 0-9-4-11-9l-5-22c-1-6 2-12 8-13z`, + // Ditto widehat2, widehat3, & widehat4 + widehat2: `M1181 0h2l1171 176c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 220h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat3: `M1181 0h2l1171 236c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 280h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + widehat4: `M1181 0h2l1171 296c6 0 10 5 10 11l-2 23c-1 6-5 10 +-11 10h-1L1182 67 15 340h-1c-6 0-10-4-11-10l-2-23c-1-6 4-11 10-11z`, + // Widecheck paths are all inverted versions of widehat + widecheck1: `M529,159h5l519,-115c5,-1,9,-5,9,-10c0,-1,-1,-2,-1,-3l-4,-22c-1, +-5,-5,-9,-11,-9h-2l-512,92l-513,-92h-2c-5,0,-9,4,-11,9l-5,22c-1,6,2,12,8,13z`, + widecheck2: `M1181,220h2l1171,-176c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,153l-1167,-153h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck3: `M1181,280h2l1171,-236c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,213l-1167,-213h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + widecheck4: `M1181,340h2l1171,-296c6,0,10,-5,10,-11l-2,-23c-1,-6,-5,-10, +-11,-10h-1l-1168,273l-1167,-273h-1c-6,0,-10,4,-11,10l-2,23c-1,6,4,11,10,11z`, + // The next ten paths support reaction arrows from the mhchem package. + // Arrows for \ce{<-->} are offset from xAxis by 0.22ex, per mhchem in LaTeX + // baraboveleftarrow is mostly from from glyph U+2190 in font KaTeX Main + baraboveleftarrow: `M400000 620h-399890l3 -3c68.7 -52.7 113.7 -120 135 -202 +c4 -14.7 6 -23 6 -25c0 -7.3 -7 -11 -21 -11c-8 0 -13.2 0.8 -15.5 2.5 +c-2.3 1.7 -4.2 5.8 -5.5 12.5c-1.3 4.7 -2.7 10.3 -4 17c-12 48.7 -34.8 92 -68.5 130 +s-74.2 66.3 -121.5 85c-10 4 -16 7.7 -18 11c0 8.7 6 14.3 18 17c47.3 18.7 87.8 47 +121.5 85s56.5 81.3 68.5 130c0.7 2 1.3 5 2 9s1.2 6.7 1.5 8c0.3 1.3 1 3.3 2 6 +s2.2 4.5 3.5 5.5c1.3 1 3.3 1.8 6 2.5s6 1 10 1c14 0 21 -3.7 21 -11 +c0 -2 -2 -10.3 -6 -25c-20 -79.3 -65 -146.7 -135 -202l-3 -3h399890z +M100 620v40h399900v-40z M0 241v40h399900v-40zM0 241v40h399900v-40z`, + // Rightarrowabovebar is mostly from glyph U+2192, KaTeX Main + rightarrowabovebar: `M0 241v40h399891c-47.3 35.3-84 78-110 128-16.7 32 +-27.7 63.7-33 95 0 1.3-.2 2.7-.5 4-.3 1.3-.5 2.3-.5 3 0 7.3 6.7 11 20 11 8 0 +13.2-.8 15.5-2.5 2.3-1.7 4.2-5.5 5.5-11.5 2-13.3 5.7-27 11-41 14.7-44.7 39 +-84.5 73-119.5s73.7-60.2 119-75.5c6-2 9-5.7 9-11s-3-9-9-11c-45.3-15.3-85-40.5 +-119-75.5s-58.3-74.8-73-119.5c-4.7-14-8.3-27.3-11-40-1.3-6.7-3.2-10.8-5.5 +-12.5-2.3-1.7-7.5-2.5-15.5-2.5-14 0-21 3.7-21 11 0 2 2 10.3 6 25 20.7 83.3 67 +151.7 139 205zm96 379h399894v40H0zm0 0h399904v40H0z`, + // The short left harpoon has 0.5em (i.e. 500 units) kern on the left end. + // Ref from mhchem.sty: \rlap{\raisebox{-.22ex}{$\kern0.5em + baraboveshortleftharpoon: `M507,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17 +c2,0.7,5,1,9,1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21 +c-32,-87.3,-82.7,-157.7,-152,-211c0,0,-3,-3,-3,-3l399351,0l0,-40 +c-398570,0,-399437,0,-399437,0z M593 435 v40 H399500 v-40z +M0 281 v-40 H399908 v40z M0 281 v-40 H399908 v40z`, + rightharpoonaboveshortbar: `M0,241 l0,40c399126,0,399993,0,399993,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M0 241 v40 H399908 v-40z M0 475 v-40 H399500 v40z M0 475 v-40 H399500 v40z`, + shortbaraboveleftharpoon: `M7,435c-4,4,-6.3,8.7,-7,14c0,5.3,0.7,9,2,11 +c1.3,2,5.3,5.3,12,10c90.7,54,156,130,196,228c3.3,10.7,6.3,16.3,9,17c2,0.7,5,1,9, +1c0,0,5,0,5,0c10.7,0,16.7,-2,18,-6c2,-2.7,1,-9.7,-3,-21c-32,-87.3,-82.7,-157.7, +-152,-211c0,0,-3,-3,-3,-3l399907,0l0,-40c-399126,0,-399993,0,-399993,0z +M93 435 v40 H400000 v-40z M500 241 v40 H400000 v-40z M500 241 v40 H400000 v-40z`, + shortrightharpoonabovebar: `M53,241l0,40c398570,0,399437,0,399437,0 +c4.7,-4.7,7,-9.3,7,-14c0,-9.3,-3.7,-15.3,-11,-18c-92.7,-56.7,-159,-133.7,-199, +-231c-3.3,-9.3,-6,-14.7,-8,-16c-2,-1.3,-7,-2,-15,-2c-10.7,0,-16.7,2,-18,6 +c-2,2.7,-1,9.7,3,21c15.3,42,36.7,81.8,64,119.5c27.3,37.7,58,69.2,92,94.5z +M500 241 v40 H399408 v-40z M500 435 v40 H400000 v-40z` + }; + function svgBodyToMarkup(svgBodyName) { + if (SVG_ACCENTS[svgBodyName]) { + const [vbWidth, vbHeight, height2] = SVG_ACCENTS[svgBodyName]; + const result = ``; + return `${result}`; + } + const [paths, minWidth, viewBoxHeight, align3] = SVG_BODY[svgBodyName]; + let widthClasses; + let aligns; + const height = viewBoxHeight / 1e3; + if (paths.length === 3) { + widthClasses = ["slice-1-of-3", "slice-2-of-3", "slice-3-of-3"]; + aligns = ["xMinYMin", "xMidYMin", "xMaxYMin"]; + } else if (paths.length === 2) { + widthClasses = ["slice-1-of-2", "slice-2-of-2"]; + aligns = ["xMinYMin", "xMaxYMin"]; + } else { + widthClasses = ["slice-1-of-1"]; + aligns = [align3]; + } + const body = paths.map( + (path, i) => `` + ).join(""); + return `${body}`; + } + function svgBodyHeight(svgBodyName) { + if (SVG_BODY[svgBodyName]) return SVG_BODY[svgBodyName][2] / 1e3; + return SVG_ACCENTS[svgBodyName][2]; + } + + // src/core/grapheme-splitter.ts + function stringToCodepoints(string) { + const result = []; + for (let i = 0; i < string.length; i++) { + let code = string.charCodeAt(i); + if (code === 13 && string.charCodeAt(i + 1) === 10) { + code = 10; + i++; + } + if (code === 13 || code === 12) code = 10; + if (code === 0) code = 65533; + if (code >= 55296 && code <= 56319) { + const nextCode = string.charCodeAt(i + 1); + if (nextCode >= 56320 && nextCode <= 57343) { + const lead = code - 55296; + const trail = nextCode - 56320; + code = 2 ** 16 + lead * 2 ** 10 + trail; + i++; + } + } + result.push(code); + } + return result; + } + var ZWJ = 8205; + var EMOJI_COMBINATOR = [ + [ZWJ, 1], + [65038, 2], + // VS-15: text presentation, VS-16: Emoji presentation + [127995, 5], + // EMOJI_MODIFIER_FITZPATRICK_TYPE 1-6 + [129456, 4], + // Red hair..white hair + [917536, 96] + // EMOJI_TAG + ]; + var emojiCombinator; + var REGIONAL_INDICATOR = [127462, 127487]; + function isEmojiCombinator(code) { + var _a3; + if (emojiCombinator === void 0) { + emojiCombinator = {}; + for (const x of EMOJI_COMBINATOR) + for (let i = x[0]; i <= x[0] + x[1] - 1; i++) emojiCombinator[i] = true; + } + return (_a3 = emojiCombinator[code]) != null ? _a3 : false; + } + function isRegionalIndicator(code) { + return code >= REGIONAL_INDICATOR[0] && code <= REGIONAL_INDICATOR[1]; + } + function splitGraphemes(string) { + if (/^[\u0020-\u00FF]*$/.test(string)) return string; + const result = []; + const codePoints = stringToCodepoints(string); + let index = 0; + while (index < codePoints.length) { + const code = codePoints[index++]; + const next = codePoints[index]; + if (next === ZWJ) { + const baseIndex = index - 1; + index += 2; + while (codePoints[index] === ZWJ) index += 2; + result.push( + String.fromCodePoint( + ...codePoints.slice(baseIndex, index - baseIndex + 1) + ) + ); + } else if (isEmojiCombinator(next)) { + const baseIndex = index - 1; + while (isEmojiCombinator(codePoints[index])) + index += codePoints[index] === ZWJ ? 2 : 1; + result.push( + String.fromCodePoint( + ...codePoints.slice(baseIndex, 2 * index - baseIndex - 1) + ) + ); + } else if (isRegionalIndicator(code)) { + index += 1; + result.push(String.fromCodePoint(...codePoints.slice(index - 2, 2))); + } else result.push(String.fromCodePoint(code)); + } + return result; + } + + // src/core/tokenizer.ts + var Tokenizer = class { + constructor(s) { + this.obeyspaces = false; + this.pos = 0; + this.s = splitGraphemes(s); + } + /** + * @return True if we reached the end of the stream + */ + end() { + return this.pos >= this.s.length; + } + /** + * Return the next char and advance + */ + get() { + return this.pos < this.s.length ? this.s[this.pos++] : ""; + } + /** + * Return the next char, but do not advance + */ + peek() { + return this.s[this.pos]; + } + /** + * Return the next substring matching regEx and advance. + */ + match(regEx) { + const execResult = typeof this.s === "string" ? regEx.exec(this.s.slice(this.pos)) : regEx.exec(this.s.slice(this.pos).join("")); + if (execResult == null ? void 0 : execResult[0]) { + this.pos += execResult[0].length; + return execResult[0]; + } + return ""; + } + /** + * Return the next token, or null. + */ + next() { + if (this.end()) return null; + if (!this.obeyspaces && this.match(/^[ \f\n\r\t\v\u00A0\u2028\u2029]+/)) { + return ""; + } + if (this.obeyspaces && this.match(/^[ \f\n\r\t\v\u00A0\u2028\u2029]/)) { + return ""; + } + const next = this.get(); + if (next === "\\") { + if (!this.end()) { + let command = this.match(/^[a-zA-Z\*]+/); + if (command) { + this.match(/^[ \f\n\r\t\v\u00A0\u2028\u2029]*/); + } else { + command = this.get(); + } + return "\\" + command; + } + } else if (next === "{") { + return "<{>"; + } else if (next === "}") { + return "<}>"; + } else if (next === "^") { + if (this.peek() === "^") { + this.get(); + const hex = this.match( + /^(\^(\^(\^(\^[\da-f])?[\da-f])?[\da-f])?[\da-f])?[\da-f]{2}/ + ); + if (hex) { + return String.fromCodePoint( + Number.parseInt(hex.slice(hex.lastIndexOf("^") + 1), 16) + ); + } + } + return next; + } else if (next === "#") { + if (!this.end()) { + let isParameter = false; + if (/[\d?@]/.test(this.peek())) { + isParameter = true; + if (this.pos + 1 < this.s.length) { + const after = this.s[this.pos + 1]; + isParameter = /[^\dA-Za-z]/.test(after); + } + } + if (isParameter) return "#" + this.get(); + return "#"; + } + } else if (next === "$") { + if (this.peek() === "$") { + this.get(); + return "<$$>"; + } + return "<$>"; + } + return next; + } + }; + function expand(lex, args) { + var _a3, _b3, _c2, _d2; + const result = []; + let token = lex.next(); + if (token) { + if (token === "\\relax") { + } else if (token === "\\noexpand") { + token = lex.next(); + if (token) result.push(token); + } else if (token === "\\obeyspaces") lex.obeyspaces = true; + else if (token === "\\bgroup") { + result.push("<{>"); + } else if (token === "\\egroup") { + result.push("<}>"); + } else if (token === "\\string") { + token = lex.next(); + if (token) { + if (token.startsWith("\\")) + for (const x of token) result.push(x === "\\" ? "\\backslash" : x); + else if (token === "<{>") result.push("\\{"); + else if (token === "") result.push("~"); + else if (token === "<}>") result.push("\\}"); + } + } else if (token === "\\csname") { + while (lex.peek() === "") lex.next(); + let command = ""; + let done = false; + let tokens = []; + do { + if (tokens.length === 0) { + if (/^#[\d?@]$/.test(lex.peek())) { + const parameter = lex.get().slice(1); + tokens = tokenize( + (_b3 = (_a3 = args == null ? void 0 : args(parameter)) != null ? _a3 : args == null ? void 0 : args("?")) != null ? _b3 : "\\placeholder{}", + args + ); + token = tokens[0]; + } else { + token = lex.next(); + tokens = token ? [token] : []; + } + } + done = tokens.length === 0; + if (!done && token === "\\endcsname") { + done = true; + tokens.shift(); + } + if (!done) { + done = token === "<$>" || token === "<$$>" || token === "<{>" || token === "<}>" || typeof token === "string" && token.length > 1 && token.startsWith("\\"); + } + if (!done) command += tokens.shift(); + } while (!done); + if (command) result.push("\\" + command); + result.push(...tokens); + } else if (token === "\\endcsname") { + } else if (token.length > 1 && token.startsWith("#")) { + const parameter = token.slice(1); + result.push( + ...tokenize((_d2 = (_c2 = args == null ? void 0 : args(parameter)) != null ? _c2 : args == null ? void 0 : args("?")) != null ? _d2 : "\\placeholder{}", args) + ); + } else result.push(token); + } + return result; + } + function tokenize(s, args = null) { + if (!s) return []; + const lines = []; + let sep = ""; + for (const line of s.toString().split(/\r?\n/)) { + if (sep) lines.push(sep); + sep = " "; + const m = line.match(/((?:\\%)|[^%])*/); + if (m !== null) lines.push(m[0]); + } + const tokenizer = new Tokenizer(lines.join("")); + const result = []; + do + result.push(...expand(tokenizer, args)); + while (!tokenizer.end()); + return result; + } + function joinLatex(segments) { + let sep = ""; + const result = []; + for (const segment of segments) { + if (segment) { + if (sep && /^[a-zA-Z\*]/.test(segment)) result.push(sep); + result.push(segment); + if (/^\\[a-zA-Z]+\*?[\"\'][^\ ]+$/.test(segment)) result.push(" "); + sep = /\\[a-zA-Z]+\*?$/.test(segment) ? " " : ""; + } + } + return result.join(""); + } + function latexCommand(command, ...args) { + console.assert(command.startsWith("\\")); + if (args.length === 0) return command; + return joinLatex([command, ...args.map((x) => `{${x}}`)]); + } + function tokensToString(tokens) { + return joinLatex( + tokens.map( + (token) => { + var _a3; + return (_a3 = { + "": " ", + "<$$>": "$$", + "<$>": "$", + "<{>": "{", + "<}>": "}" + }[token]) != null ? _a3 : token; + } + ) + ); + } + + // src/core/modes-utils.ts + var _Mode = class _Mode { + constructor(name) { + _Mode._registry[name] = this; + } + static createAtom(mode, command, style) { + return _Mode._registry[mode].createAtom( + command, + getDefinition(command, mode), + style + ); + } + static serialize(atoms, options) { + var _a3; + if (!atoms || atoms.length === 0) return ""; + if ((_a3 = options.skipStyles) != null ? _a3 : false) { + const body = []; + for (const run of getModeRuns(atoms)) { + const mode = _Mode._registry[run[0].mode]; + body.push(...mode.serialize(run, options)); + } + return joinLatex(body); + } + return joinLatex(emitFontSizeRun(atoms, options)); + } + static getFont(mode, box, style) { + return _Mode._registry[mode].getFont(box, style); + } + }; + _Mode._registry = {}; + var Mode = _Mode; + function getModeRuns(atoms) { + const result = []; + let run = []; + let currentMode = "NONE"; + for (const atom of atoms) { + if (atom.type !== "first") { + if (atom.mode !== currentMode) { + if (run.length > 0) result.push(run); + run = [atom]; + currentMode = atom.mode; + } else run.push(atom); + } + } + if (run.length > 0) result.push(run); + return result; + } + function weightString(atom) { + if ((atom == null ? void 0 : atom.mode) !== "math") return ""; + const { style } = atom; + if (!style) return ""; + if (!style.variantStyle) return ""; + if (style.variantStyle === "bold" || style.variantStyle === "bolditalic") + return "bold"; + return ""; + } + function variantString(atom) { + if (!atom) return ""; + const { style } = atom; + if (!style) return ""; + let result = style.variant; + if (result === void 0) result = "normal"; + if (![ + "calligraphic", + "fraktur", + "double-struck", + "script", + "monospace", + "sans-serif" + ].includes(result) && style.variantStyle) + result += "-" + style.variantStyle; + return result; + } + function getPropertyRuns(atoms, property) { + const result = []; + let run = []; + let currentValue = void 0; + for (const atom of atoms) { + if (atom.type === "first") continue; + let value; + if (property === "variant") value = variantString(atom); + else if (property === "bold") value = weightString(atom); + else value = atom.style[property]; + if (value === currentValue) { + run.push(atom); + } else { + if (run.length > 0) result.push(run); + run = [atom]; + currentValue = value; + } + } + if (run.length > 0) result.push(run); + return result; + } + function emitColorRun(run, options) { + var _a3; + const { parent } = run[0]; + const parentColor = parent == null ? void 0 : parent.style.color; + const result = []; + for (const modeRun of getModeRuns(run)) { + const mode = options.defaultMode; + for (const colorRun of getPropertyRuns(modeRun, "color")) { + const style = colorRun[0].style; + const body = Mode._registry[colorRun[0].mode].serialize(colorRun, __spreadProps(__spreadValues({}, options), { + defaultMode: isTextMode(mode) ? "text" : "math" + })); + if (!options.skipStyles && style.color && style.color !== "none" && (!parent || parentColor !== style.color)) { + result.push( + latexCommand( + "\\textcolor", + (_a3 = style.verbatimColor) != null ? _a3 : style.color, + joinLatex(body) + ) + ); + } else result.push(joinLatex(body)); + } + } + return result; + } + function emitBackgroundColorRun(run, options) { + const { parent } = run[0]; + const parentColor = parent == null ? void 0 : parent.style.backgroundColor; + return getPropertyRuns(run, "backgroundColor").map((x) => { + var _a3; + if (x.length > 0 || x[0].type !== "box") { + const style = x[0].style; + if (style.backgroundColor && style.backgroundColor !== "none" && (!parent || parentColor !== style.backgroundColor)) { + return latexCommand( + "\\colorbox", + (_a3 = style.verbatimBackgroundColor) != null ? _a3 : style.backgroundColor, + joinLatex(emitColorRun(x, __spreadProps(__spreadValues({}, options), { defaultMode: "text" }))) + ); + } + } + return joinLatex(emitColorRun(x, options)); + }); + } + function emitFontSizeRun(run, options) { + if (run.length === 0) return []; + const { parent } = run[0]; + const contextFontsize = parent == null ? void 0 : parent.style.fontSize; + const result = []; + for (const sizeRun of getPropertyRuns(run, "fontSize")) { + const fontsize = sizeRun[0].style.fontSize; + const body = emitBackgroundColorRun(sizeRun, options); + if (body) { + if (fontsize && fontsize !== "auto" && (!parent || contextFontsize !== fontsize)) { + result.push( + [ + "", + "\\tiny", + "\\scriptsize", + "\\footnotesize", + "\\small", + "\\normalsize", + "\\large", + "\\Large", + "\\LARGE", + "\\huge", + "\\Huge" + ][fontsize], + ...body + ); + } else result.push(...body); + } + } + return result; + } + + // src/core/box.ts + function boxType(type) { + if (!type) return void 0; + const result = { + mord: "ord", + mbin: "bin", + mop: "op", + mrel: "rel", + mopen: "open", + mclose: "close", + mpunct: "punct", + minner: "inner", + spacing: "ignore", + latex: "latex", + composition: "inner", + error: "inner", + placeholder: "ord", + supsub: "ignore" + }[type]; + return result; + } + function atomsBoxType(atoms) { + if (atoms.length === 0) return "ord"; + const first = boxType(atoms[0].type); + const last = boxType(atoms[atoms.length - 1].type); + if (first && first === last) return first; + return "ord"; + } + function toString(arg1, arg2) { + if (typeof arg1 === "string") return arg1; + if (typeof arg1 === "number") { + console.assert(Number.isFinite(arg1)); + const numValue = Math.ceil(100 * arg1) / 100; + if (numValue === 0) return "0"; + return numValue.toString() + (arg2 != null ? arg2 : ""); + } + return ""; + } + var Box = class _Box { + constructor(content, options) { + var _a3, _b3, _c2, _d2, _e; + if (typeof content === "number") this.value = String.fromCodePoint(content); + else if (typeof content === "string") this.value = content; + else if (isArray(content)) + this.children = content.filter((x) => x !== null); + else if (content && content instanceof _Box) this.children = [content]; + if (this.children) for (const child of this.children) child.parent = this; + this.type = (_a3 = options == null ? void 0 : options.type) != null ? _a3 : "ignore"; + this.isSelected = (options == null ? void 0 : options.isSelected) === true; + if (options == null ? void 0 : options.caret) this.caret = options.caret; + this.classes = (_b3 = options == null ? void 0 : options.classes) != null ? _b3 : ""; + this.isTight = (_c2 = options == null ? void 0 : options.isTight) != null ? _c2 : false; + if (options == null ? void 0 : options.attributes) this.attributes = options.attributes; + let fontName = options == null ? void 0 : options.fontFamily; + if ((options == null ? void 0 : options.style) && this.value) { + fontName = (_e = Mode.getFont((_d2 = options.mode) != null ? _d2 : "math", this, __spreadProps(__spreadValues({ + variant: "normal" + }, options.style), { + letterShapeStyle: options.letterShapeStyle + }))) != null ? _e : void 0; + } + fontName || (fontName = "Main-Regular"); + this._height = 0; + this._depth = 0; + this._width = 0; + this.hasExplicitWidth = false; + this.skew = 0; + this.italic = 0; + this.maxFontSize = 0; + this.scale = 1; + if ((options == null ? void 0 : options.maxFontSize) !== void 0) + this.maxFontSize = options.maxFontSize; + horizontalLayout(this, fontName); + } + set atomID(id) { + if (id === void 0 || id.length === 0) return; + this.id = id; + } + selected(isSelected) { + if (this.isSelected === isSelected) return; + this.isSelected = isSelected; + if (this.children) + for (const child of this.children) child.selected(isSelected); + } + setStyle(prop, value, unit) { + if (value === void 0) return; + const v = toString(value, unit); + if (v.length > 0) { + if (!this.cssProperties) this.cssProperties = {}; + this.cssProperties[prop] = v; + } + } + setTop(top) { + if (Number.isFinite(top) && Math.abs(top) > 0.01) { + if (!this.cssProperties) this.cssProperties = {}; + this.cssProperties.top = toString(top, "em"); + this.height -= top; + this.depth += top; + } + } + get left() { + var _a3; + if ((_a3 = this.cssProperties) == null ? void 0 : _a3["margin-left"]) + return Number.parseFloat(this.cssProperties["margin-left"]); + return 0; + } + set left(value) { + if (!Number.isFinite(value)) return; + if (value === 0) { + if (this.cssProperties) delete this.cssProperties["margin-left"]; + } else { + if (!this.cssProperties) this.cssProperties = {}; + this.cssProperties["margin-left"] = toString(value, "em"); + } + } + set right(value) { + if (!Number.isFinite(value)) return; + if (value === 0) { + if (this.cssProperties) delete this.cssProperties["margin-right"]; + } else { + if (!this.cssProperties) this.cssProperties = {}; + this.cssProperties["margin-right"] = toString(value, "em"); + } + } + set bottom(value) { + if (!Number.isFinite(value)) return; + if (value === 0) { + if (this.cssProperties) delete this.cssProperties["margin-bottom"]; + } else { + if (!this.cssProperties) this.cssProperties = {}; + this.cssProperties["margin-bottom"] = toString(value, "em"); + } + } + get width() { + return this._width * this.scale; + } + set width(value) { + this._width = value; + this.hasExplicitWidth = true; + } + set softWidth(_value) { + } + get height() { + return this._height * this.scale; + } + set height(value) { + this._height = value; + } + get depth() { + return this._depth * this.scale; + } + set depth(value) { + this._depth = value; + } + /** + * Apply the context (color, backgroundColor, size) to the box. + */ + wrap(context) { + const parent = context.parent; + if (!parent) return this; + if (context.isPhantom) this.setStyle("opacity", 0); + const color = context.color; + if (color && color !== parent.color) this.setStyle("color", color); + const originalBackgroundColor = context.backgroundColor; + let backgroundColor = originalBackgroundColor; + if (this.isSelected) backgroundColor = highlight(backgroundColor); + if (backgroundColor && backgroundColor !== parent.backgroundColor) { + this.setStyle("background-color", backgroundColor); + this.setStyle("--bg-color", backgroundColor); + this.setStyle("display", "inline-block"); + this.setStyle("position", "relative"); + this.classes = this.classes ? `${this.classes} ML__bg` : "ML__bg"; + } + const scale = context.scalingFactor; + this.scale = scale; + this.skew *= scale; + this.italic *= scale; + return this; + } + /** + * Generate the HTML markup to represent this box. + */ + toMarkup() { + var _a3, _b3, _c2; + let body = this.value ? escapeText(this.value) : ""; + if (this.children) for (const box of this.children) body += box.toMarkup(); + let svgMarkup = ""; + if (this.svgBody) svgMarkup = svgBodyToMarkup(this.svgBody); + else if (this.svgOverlay) { + svgMarkup = '${this.svgOverlay}`; + } + const props = []; + const classes = this.classes.split(" "); + classes.push( + (_b3 = { + latex: "ML__raw-latex", + placeholder: "ML__placeholder", + error: "ML__error" + }[this.type]) != null ? _b3 : "" + ); + if (this.caret === "latex") classes.push("ML__latex-caret"); + if (this.isSelected) classes.push("ML__selected"); + const classList = classes.length === 1 ? classes[0] : classes.filter((x, e, a) => x.length > 0 && a.indexOf(x) === e).join(" "); + if (classList.length > 0) + props.push(`class=${sanitizeAttributeValue(`"${classList}"`)}`); + if (this.id) props.push(` data-atom-id=${sanitizeAttributeValue(this.id)}`); + if (this.cssId) { + props.push( + ` id=${sanitizeAttributeValue(`"${this.cssId.replace(/ /g, "-")}"`)}` + ); + } + if (this.attributes) { + props.push( + ...Object.keys(this.attributes).map( + (x) => `${sanitizeAttributeName(x)}=${sanitizeAttributeValue(this.attributes[x])}` + ) + ); + } + if (this.htmlData) { + const entries = this.htmlData.split(","); + for (const entry of entries) { + const matched = entry.match(/([^=]+)=(.+$)/); + if (matched) { + const key = sanitizeAttributeName(matched[1]); + if (key) { + if (key === "href") { + const url = new URL(matched[2]); + if (url.protocol !== "http:" && url.protocol !== "https:") + throw new Error(`Invalid URL: ${matched[2]}`); + props.push(`href="${matched[2].replace(/"/g, """)}"`); + } else + props.push(`data-${key}=${sanitizeAttributeValue(matched[2])}`); + } + } else { + const key = sanitizeAttributeName(entry); + if (key) props.push(`data-${key} `); + } + } + } + const cssProps = (_c2 = this.cssProperties) != null ? _c2 : {}; + if (this.hasExplicitWidth) { + if (cssProps.width === void 0) + cssProps.width = `${Math.ceil(this._width * 100) / 100}em`; + } + const styles = Object.keys(cssProps).map((x) => `${x}:${cssProps[x]}`); + if (this.scale !== void 0 && this.scale !== 1 && (body.length > 0 || svgMarkup.length > 0)) + styles.push(`font-size: ${Math.ceil(this.scale * 1e4) / 100}%`); + if (this.htmlStyle) { + for (const entry of this.htmlStyle.split(";")) { + const matched = entry.match(/([^:]+):(.+$)/); + if (matched) { + const key = matched[1].trim().replace(/ /g, "-"); + if (key) styles.push(`${key}:${matched[2]}`); + } + } + } + if (styles.length > 0) + props.push(`style=${sanitizeAttributeValue(styles.join(";"))}`); + let result = ""; + if (props.length > 0 || svgMarkup.length > 0) + result = `${body}${svgMarkup}`; + else result = body; + if (this.caret === "text" || this.caret === "free-text") + result += ''; + else if (this.caret === "math") result += ''; + return result; + } + /** + * Can this box be coalesced with 'box'? + * This is used to 'coalesce' (i.e. group together) a series of boxes that are + * identical except for their value, and to avoid generating redundant boxes. + * That is: '12' -> + * "12" + * rather than: + * "12" + */ + tryCoalesceWith(box) { + if (this.svgBody || !this.value) return false; + if (box.svgBody || !box.value) return false; + const hasChildren = this.children && this.children.length > 0; + const boxHasChildren = box.children && box.children.length > 0; + if (hasChildren || boxHasChildren) return false; + if (box.cssProperties || this.cssProperties) { + for (const prop of [ + "border", + "border-left", + "border-right", + "border-right-width", + "left", + "margin", + "margin-left", + "margin-right", + "padding", + "position", + "width" + ]) { + if (box.cssProperties && prop in box.cssProperties) return false; + if (this.cssProperties && prop in this.cssProperties) return false; + } + } + const thisStyleCount = this.cssProperties ? Object.keys(this.cssProperties).length : 0; + const boxStyleCount = box.cssProperties ? Object.keys(box.cssProperties).length : 0; + if (thisStyleCount !== boxStyleCount) return false; + if (thisStyleCount > 0) { + for (const prop of Object.keys(this.cssProperties)) { + if (this.cssProperties[prop] !== box.cssProperties[prop]) + return false; + } + } + const classes = this.classes.trim().replace(/\s+/g, " ").split(" "); + const boxClasses = box.classes.trim().replace(/\s+/g, " ").split(" "); + if (classes.length !== boxClasses.length) return false; + classes.sort(); + boxClasses.sort(); + for (const [i, class_] of classes.entries()) { + if (class_ === "ML__vertical-separator") return false; + if (class_ !== boxClasses[i]) return false; + } + this.value += box.value; + this.height = Math.max(this.height, box.height); + this.depth = Math.max(this.depth, box.depth); + this._width = this._width + box._width; + this.maxFontSize = Math.max(this.maxFontSize, box.maxFontSize); + this.italic = box.italic; + return true; + } + }; + function coalesceRecursive(boxes) { + if (!boxes || boxes.length === 0) return []; + boxes[0].children = coalesceRecursive(boxes[0].children); + const result = [boxes[0]]; + for (let i = 1; i < boxes.length; i++) { + if (!result[result.length - 1].tryCoalesceWith(boxes[i])) { + boxes[i].children = coalesceRecursive(boxes[i].children); + result.push(boxes[i]); + } + } + return result; + } + function coalesce(box) { + if (box.children) box.children = coalesceRecursive(box.children); + return box; + } + function makeStruts(content, options) { + if (!content) return new Box(null, options); + const topStrut = new Box(null, { classes: "ML__strut", type: "ignore" }); + topStrut.setStyle("height", Math.max(0, content.height), "em"); + const struts = [topStrut]; + if (content.depth !== 0) { + const bottomStrut = new Box(null, { + classes: "ML__strut--bottom", + type: "ignore" + }); + bottomStrut.setStyle("height", content.height + content.depth, "em"); + bottomStrut.setStyle("vertical-align", -content.depth, "em"); + struts.push(bottomStrut); + } + struts.push(content); + return new Box(struts, __spreadProps(__spreadValues({}, options), { type: "lift" })); + } + function makeSVGBox(svgBodyName) { + const height = svgBodyHeight(svgBodyName) / 2; + const box = new Box(null, { maxFontSize: 0 }); + box.height = height + 0.166; + box.depth = height - 0.166; + box.svgBody = svgBodyName; + return box; + } + function horizontalLayout(box, fontName) { + var _a3; + if (box.type === "latex") { + box.height = 0.9; + box.depth = 0.2; + box._width = 1; + return; + } + if (box.value) { + box.height = -Infinity; + box.depth = -Infinity; + box._width = 0; + box.skew = -Infinity; + box.italic = -Infinity; + for (let i = 0; i < box.value.length; i++) { + const metrics = getCharacterMetrics(box.value.codePointAt(i), fontName); + box.height = Math.max(box.height, metrics.height); + box.depth = Math.max(box.depth, metrics.depth); + box._width += metrics.width; + box.skew = metrics.skew; + box.italic = metrics.italic; + } + return; + } + if (box.children && box.children.length > 0) { + let height = -Infinity; + let depth = -Infinity; + let maxFontSize = 0; + for (const child of box.children) { + if (child.height > height) height = child.height; + if (child.depth > depth) depth = child.depth; + maxFontSize = Math.max(maxFontSize, (_a3 = child.maxFontSize) != null ? _a3 : 0); + } + box.height = height; + box.depth = depth; + box._width = box.children.reduce((acc, x) => acc + x.width, 0); + box.maxFontSize = maxFontSize; + } + } + function escapeText(s) { + return s.replace(/&/g, "&").replace(//g, ">"); + } + function sanitizeAttributeName(attribute) { + attribute = attribute.trim().replace(/ /g, "-"); + if (attribute.length === 0) throw new Error(`Invalid empty attribute name`); + const invalidAttributeName = /[\x20\x09\x0a\x0c\x0d"'>/=\x00-\x1f]/; + if (invalidAttributeName.test(attribute)) + throw new Error(`Invalid attribute name "${attribute}"`); + return attribute; + } + function sanitizeAttributeValue(value) { + value = value.trim(); + if (value.startsWith('"') && value.endsWith('"')) { + if (/"/.test(value.slice(1, -1))) + throw new Error(`Invalid attribute value: ${value}`); + return value; + } + if (value.startsWith("'") && value.endsWith("'")) { + if (/'/.test(value.slice(1, -1))) + throw new Error(`Invalid attribute value: ${value}`); + return value; + } + if (value.length === 0) throw new Error(`Invalid empty attribute value`); + return `"${value.replace(/"/g, """)}"`; + } + + // src/core/v-box.ts + function getVListChildrenAndDepth(params) { + if ("individualShift" in params) { + const oldChildren = params.individualShift; + let prevChild = oldChildren[0]; + if (prevChild == null) return [null, 0]; + const children = [prevChild]; + const depth = -prevChild.shift - prevChild.box.depth; + let currPos = depth; + for (let i = 1; i < oldChildren.length; i++) { + const child = oldChildren[i]; + const diff = -child.shift - currPos - child.box.depth; + const size = diff - (prevChild.box.height + prevChild.box.depth); + currPos = currPos + diff; + children.push(size); + children.push(child); + prevChild = child; + } + return [children, depth]; + } + if ("top" in params) { + let bottom = params.top; + for (const child of params.children) { + bottom -= typeof child === "number" ? child : child.box.height + child.box.depth; + } + return [params.children, bottom]; + } else if ("bottom" in params) return [params.children, -params.bottom]; + else if ("firstBaseline" in params) { + const firstChild = params.firstBaseline[0]; + if (typeof firstChild === "number") + throw new Error("First child must be an element."); + return [params.firstBaseline, -firstChild.box.depth]; + } else if ("shift" in params) { + const firstChild = params.children[0]; + if (typeof firstChild === "number") + throw new Error("First child must be an element."); + return [params.children, -firstChild.box.depth - params.shift]; + } + return [null, 0]; + } + function makeRows(params) { + var _a3; + const [children, depth] = getVListChildrenAndDepth(params); + if (!children) return [[], 0, 0]; + const pstrut = new Box(null, { classes: "ML__pstrut" }); + let pstrutSize = 0; + for (const child of children) { + if (typeof child !== "number") { + const box = child.box; + pstrutSize = Math.max(pstrutSize, box.maxFontSize, box.height); + } + } + pstrutSize += 2; + pstrut.height = pstrutSize; + pstrut.setStyle("height", pstrutSize, "em"); + const realChildren = []; + let minPos = depth; + let maxPos = depth; + let currPos = depth; + let width = 0; + for (const child of children) { + if (typeof child === "number") currPos += child; + else { + const box = child.box; + const classes = (_a3 = child.classes) != null ? _a3 : []; + const childWrap = new Box([pstrut, box], { + classes: classes.join(" "), + style: child.style, + attributes: child.attributes + }); + box.setStyle("height", box.height + box.depth, "em"); + box.setStyle("display", "inline-block"); + childWrap.setStyle("top", -pstrutSize - currPos - box.depth, "em"); + if (child.marginLeft) + childWrap.setStyle("margin-left", child.marginLeft, "em"); + if (child.marginRight) + childWrap.setStyle("margin-right", child.marginRight, "em"); + realChildren.push(childWrap); + currPos += box.height + box.depth; + width = Math.max(width, childWrap.width); + } + minPos = Math.min(minPos, currPos); + maxPos = Math.max(maxPos, currPos); + } + realChildren.forEach((child) => { + child.softWidth = width; + }); + const vlist = new Box(realChildren, { classes: "ML__vlist" }); + vlist.softWidth = width; + vlist.height = maxPos; + vlist.setStyle("height", maxPos, "em"); + if (minPos >= 0) + return [[new Box(vlist, { classes: "ML__vlist-r" })], maxPos, -minPos]; + const depthStrut = new Box(new Box(null), { classes: "ML__vlist" }); + depthStrut.height = -minPos; + depthStrut.setStyle("height", -minPos, "em"); + const topStrut = new Box(8203, { + classes: "ML__vlist-s", + maxFontSize: 0 + }); + topStrut.softWidth = 0; + topStrut.height = 0; + topStrut.depth = 0; + return [ + [ + new Box([vlist, topStrut], { classes: "ML__vlist-r" }), + new Box(depthStrut, { classes: "ML__vlist-r" }) + ], + maxPos, + -minPos + ]; + } + var VBox = class extends Box { + constructor(content, options) { + var _a3; + const [rows, height, depth] = makeRows(content); + super(rows.length === 1 ? rows[0] : rows, { + type: options == null ? void 0 : options.type, + classes: ((_a3 = options == null ? void 0 : options.classes) != null ? _a3 : "") + " ML__vlist-t" + (rows.length === 2 ? " ML__vlist-t2" : "") + }); + this.height = height; + this.depth = depth; + this.softWidth = rows.reduce((acc, row) => Math.max(acc, row.width), 0); + } + }; + function makeLimitsStack(context, options) { + var _a3, _b3, _c2, _d2, _e; + const metrics = context.metrics; + const base = new Box(options.base); + const baseShift = (_a3 = options.baseShift) != null ? _a3 : 0; + const slant = (_b3 = options.slant) != null ? _b3 : 0; + let aboveShift = 0; + let belowShift = 0; + if (options.above) { + aboveShift = (_c2 = options.aboveShift) != null ? _c2 : Math.max( + metrics.bigOpSpacing1, + metrics.bigOpSpacing3 - options.above.depth + ); + } + if (options.below) { + belowShift = (_d2 = options.belowShift) != null ? _d2 : Math.max( + metrics.bigOpSpacing2, + metrics.bigOpSpacing4 - options.below.height + ); + } + let result = null; + if (options.below && options.above) { + const bottom = metrics.bigOpSpacing5 + options.below.height + options.below.depth + belowShift + base.depth + baseShift; + result = new VBox({ + bottom, + children: [ + metrics.bigOpSpacing5, + { + box: options.below, + marginLeft: -slant, + classes: ["ML__center"] + }, + belowShift, + // We need to center the base to account for the case where the + // above/below is wider + { box: base, classes: ["ML__center"] }, + aboveShift, + { + box: options.above, + marginLeft: slant, + classes: ["ML__center"] + }, + metrics.bigOpSpacing5 + ] + }).wrap(context); + } else if (options.below && !options.above) { + result = new VBox({ + top: base.height - baseShift, + children: [ + metrics.bigOpSpacing5, + { + box: options.below, + marginLeft: -slant, + classes: ["ML__center"] + }, + belowShift, + { box: base, classes: ["ML__center"] } + ] + }).wrap(context); + } else if (!options.below && options.above) { + const bottom = base.depth + baseShift; + result = new VBox({ + bottom, + children: [ + { box: base, classes: ["ML__center"] }, + aboveShift, + { + box: options.above, + marginLeft: slant, + classes: ["ML__center"] + }, + metrics.bigOpSpacing5 + ] + }).wrap(context); + } else { + const bottom = base.depth + baseShift; + result = new VBox({ + bottom, + children: [{ box: base }, metrics.bigOpSpacing5] + }).wrap(context); + } + return new Box(result, { type: (_e = options.type) != null ? _e : "op" }); + } + + // src/core/mathstyle.ts + var D = 7; + var Dc = 6; + var T = 5; + var Tc = 4; + var S = 3; + var Sc = 2; + var SS = 1; + var SSc = 0; + var Mathstyle = class { + constructor(id, sizeDelta, cramped) { + this.id = id; + this.sizeDelta = sizeDelta; + this.cramped = cramped; + const metricsIndex = { "-4": 2, "-3": 1, 0: 0 }[sizeDelta]; + this.metrics = Object.keys(FONT_METRICS).reduce((acc, x) => { + return __spreadProps(__spreadValues({}, acc), { [x]: FONT_METRICS[x][metricsIndex] }); + }, {}); + } + getFontSize(size) { + return Math.max(1, size + this.sizeDelta); + } + /** + * Get the style of a superscript given a base in the current style. + */ + get sup() { + return MATHSTYLES[[SSc, SS, SSc, SS, Sc, S, Sc, S][this.id]]; + } + /** + * Get the style of a subscript given a base in the current style. + */ + get sub() { + return MATHSTYLES[[SSc, SSc, SSc, SSc, Sc, Sc, Sc, Sc][this.id]]; + } + /** + * Get the style of a fraction numerator given the fraction in the current + * style. + * See TeXBook p 141. + */ + get fracNum() { + return MATHSTYLES[[SSc, SS, SSc, SS, Sc, S, Tc, T][this.id]]; + } + /** + * Get the style of a fraction denominator given the fraction in the current + * style. + * See TeXBook p 141. + */ + get fracDen() { + return MATHSTYLES[[SSc, SSc, SSc, SSc, Sc, Sc, Tc, Tc][this.id]]; + } + /** + * Get the cramped version of a style (in particular, cramping a cramped style + * doesn't change the style). + */ + get cramp() { + return MATHSTYLES[[SSc, SSc, Sc, Sc, Tc, Tc, Dc, Dc][this.id]]; + } + /** + * Return if this style is tightly spaced (scriptstyle/scriptscriptstyle) + */ + get isTight() { + return this.sizeDelta < 0; + } + }; + var NUMERIC_MATHSTYLES = { + 7: new Mathstyle(D, 0, false), + 6: new Mathstyle(Dc, 0, true), + 5: new Mathstyle(T, 0, false), + 4: new Mathstyle(Tc, 0, true), + 3: new Mathstyle(S, -3, false), + 2: new Mathstyle(Sc, -3, true), + 1: new Mathstyle(SS, -4, false), + 0: new Mathstyle(SSc, -4, true) + }; + var MATHSTYLES = __spreadProps(__spreadValues({}, NUMERIC_MATHSTYLES), { + displaystyle: NUMERIC_MATHSTYLES[D], + textstyle: NUMERIC_MATHSTYLES[T], + scriptstyle: NUMERIC_MATHSTYLES[S], + scriptscriptstyle: NUMERIC_MATHSTYLES[SS] + }); + + // src/core/registers-utils.ts + function convertDimensionToPt(value, precision) { + var _a3; + if (!value) return 0; + const f = { + pt: 1, + mm: 7227 / 2540, + cm: 7227 / 254, + ex: 35271 / 8192, + px: 3 / 4, + em: PT_PER_EM, + bp: 803 / 800, + dd: 1238 / 1157, + pc: 12, + in: 72.27, + mu: 10 / 18 + }[(_a3 = value.unit) != null ? _a3 : "pt"]; + if (Number.isFinite(precision)) { + const factor = 10 ** precision; + return Math.round(value.dimension / PT_PER_EM * f * factor) / factor; + } + return value.dimension * f; + } + function convertDimensionToEm(value, precision) { + if (value === null) return 0; + const result = convertDimensionToPt(value) / PT_PER_EM; + if (Number.isFinite(precision)) { + const factor = 10 ** precision; + return Math.round(result * factor) / factor; + } + return result; + } + function serializeDimension(value) { + var _a3; + return `${value.dimension}${(_a3 = value.unit) != null ? _a3 : "pt"}`; + } + function serializeGlue(value) { + let result = serializeDimension(value.glue); + if (value.grow && value.grow.dimension !== 0) + result += ` plus ${serializeDimension(value.grow)}`; + if (value.shrink && value.shrink.dimension !== 0) + result += ` minus ${serializeDimension(value.shrink)}`; + return result; + } + function serializeLatexValue(value) { + var _a3, _b3; + if (value === null || value === void 0) return null; + let result = ""; + if ("dimension" in value) result = `${value.dimension}${(_a3 = value.unit) != null ? _a3 : "pt"}`; + if ("glue" in value) result = serializeGlue(value); + if ("number" in value) { + if (!("base" in value) || value.base === "decimal") + result = Number(value.number).toString(); + else if (value.base === "alpha") + result = `\`${String.fromCodePoint(value.number)}`; + else { + const i = Math.round(value.number) >>> 0; + if (value.base === "hexadecimal") { + result = Number(i).toString(16).toUpperCase(); + if (i <= 255) result = result.padStart(2, "0"); + else if (i <= 65535) result = result.padStart(4, "0"); + else if (i <= 16777215) result = result.padStart(6, "0"); + else result = result.padStart(8, "0"); + result = `"${result}`; + } else if (value.base === "octal") { + result = Number(i).toString(8); + if (i <= 63) result = result.padStart(2, "0"); + else if (i <= 30583) result = result.padStart(4, "0"); + else result = result.padStart(8, "0"); + result = `'${result}`; + } + } + } + if ("register" in value) { + if ("factor" in value) { + if (value.factor === -1) result = "-"; + else if (value.factor !== 1) result = Number(value.factor).toString(); + } + if ("global" in value && value.global) result += "\\global"; + result += `\\${value.register}`; + } + if ("string" in value) result = value.string; + if ((_b3 = value.relax) != null ? _b3 : false) result += "\\relax"; + return result; + } + function multiplyLatexValue(value, factor) { + if (value === null || value === void 0) return null; + if ("number" in value) return __spreadProps(__spreadValues({}, value), { number: value.number * factor }); + if ("register" in value) { + if ("factor" in value && value.factor) + return __spreadProps(__spreadValues({}, value), { factor: value.factor * factor }); + return __spreadProps(__spreadValues({}, value), { factor }); + } + if ("dimension" in value) + return __spreadProps(__spreadValues({}, value), { dimension: value.dimension * factor }); + if ("glue" in value) { + if (value.shrink && value.grow) { + return { + glue: multiplyLatexValue(value.glue, factor), + shrink: multiplyLatexValue(value.shrink, factor), + grow: multiplyLatexValue(value.grow, factor) + }; + } + if (value.shrink) { + return { + glue: multiplyLatexValue(value.glue, factor), + shrink: multiplyLatexValue(value.shrink, factor) + }; + } + if (value.grow) { + return { + glue: multiplyLatexValue(value.glue, factor), + grow: multiplyLatexValue(value.grow, factor) + }; + } + return { + glue: multiplyLatexValue(value.glue, factor) + }; + } + return null; + } + + // src/core/registers.ts + var DEFAULT_REGISTERS = { + "p@": { dimension: 1 }, + "z@": { dimension: 0 }, + "maxdimen": { dimension: 16383.99999 }, + "hfuzz": { dimension: 0.1 }, + "vfuzz": { dimension: 0.1 }, + "overfullrule": { dimension: 5 }, + "hsize": { dimension: 6.5, unit: "in" }, + "vsize": { dimension: 8.9, unit: "in" }, + "parindent": { dimension: 20 }, + "maxdepth": { dimension: 4 }, + "splitmaxdepth": { register: "maxdimen" }, + "boxmaxdepth": { register: "maxdimen" }, + "delimitershortfall": { dimension: 5 }, + // @todo used in makeLeftRightDelim() + "nulldelimiterspace": { dimension: 1.2, unit: "pt" }, + "scriptspace": { dimension: 0.5 }, + // In pt. + "topskip": { dimension: 10 }, + "splittopskip": { dimension: 10 }, + "normalbaselineskip": { dimension: 12 }, + "normallineskip": { dimension: 1 }, + "normallineskiplimit": { dimension: 0 }, + // The vertical space between the lines for all math expressions which + // allow multiple lines (see array, multline) + "jot": { dimension: 3 }, + // The space between adjacent `|` columns in an array definition. + // From article.cls.txt:455 + "doublerulesep": { dimension: 2 }, + // The width of separator lines in {array} environments. + "arrayrulewidth": { dimension: 0.4 }, + "arraycolsep": { dimension: 5 }, + // Two values from LaTeX source2e: + "fboxsep": { dimension: 3 }, + // From letter.dtx:1626 + "fboxrule": { dimension: 0.4 }, + // From letter.dtx:1627 + "z@skip": { + glue: { dimension: 0 }, + shrink: { dimension: 0 }, + grow: { dimension: 0 } + }, + "hideskip": { + glue: { dimension: -1e3 }, + grow: { dimension: 1, unit: "fill" } + }, + // LaTeX + "@flushglue": { + glue: { dimension: 0 }, + grow: { dimension: 1, unit: "fill" } + }, + // LaTeX + "parskip": { + glue: { dimension: 0 }, + grow: { dimension: 1 } + }, + // @todo the "shortskip" are used if the formula starts to the right of the + // line before (i.e. centered and short line before) + "abovedisplayskip": { + glue: { dimension: 12 }, + grow: { dimension: 3 }, + shrink: { dimension: 9 } + }, + "abovedisplayshortskip": { + glue: { dimension: 0 }, + grow: { dimension: 3 } + }, + "belowdisplayskip": { + glue: { dimension: 12 }, + grow: { dimension: 3 }, + shrink: { dimension: 9 } + }, + "belowdisplayshortskip": { + glue: { dimension: 7 }, + grow: { dimension: 3 }, + shrink: { dimension: 4 } + }, + "parfillskip": { + glue: { dimension: 0 }, + grow: { dimension: 1, unit: "fil" } + }, + "thinmuskip": { glue: { dimension: 3, unit: "mu" } }, + "medmuskip": { + glue: { dimension: 4, unit: "mu" }, + grow: { dimension: 2, unit: "mu" }, + shrink: { dimension: 4, unit: "mu" } + }, + "thickmuskip": { + glue: { dimension: 5, unit: "mu" }, + grow: { dimension: 5, unit: "mu" } + }, + "smallskipamount": { + glue: { dimension: 3 }, + grow: { dimension: 1 }, + shrink: { dimension: 1 } + }, + "medskipamount": { + glue: { dimension: 6 }, + grow: { dimension: 2 }, + shrink: { dimension: 3 } + }, + "bigskipamount": { + glue: { dimension: 12 }, + grow: { dimension: 2 }, + shrink: { dimension: 4 } + }, + // From TeXBook p.348 + // See also https://ctan.math.washington.edu/tex-archive/info/macros2e/macros2e.pdf + // 'voidb@x' + "pretolerance": 100, + "tolerance": 200, + "hbadness": 1e3, + "vbadness": 1e3, + "linepenalty": 10, + "hyphenpenalty": 50, + "exhyphenpenalty": 50, + "binoppenalty": 700, + "relpenalty": 500, + "clubpenalty": 150, + "widowpenalty": 150, + "displaywidowpenalty": 50, + "brokenpenalty": 100, + "predisplaypenalty": 1e4, + "doublehyphendemerits": 1e4, + "finalhyphendemerits": 5e3, + "adjdemerits": 1e4, + "tracinglostchars": 1, + "uchyph": 1, + "delimiterfactor": 901, + "defaulthyphenchar": "\\-", + "defaultskewchar": -1, + "newlinechar": -1, + "showboxbreadth": 5, + "showboxdepth": 3, + "errorcontextlines": 5, + "interdisplaylinepenalty": 100, + "interfootnotelinepenalty": 100, + "baselineSkip": 1.2, + "arraystretch": 1, + "month": (/* @__PURE__ */ new Date()).getMonth() + 1, + "day": (/* @__PURE__ */ new Date()).getDate(), + "year": (/* @__PURE__ */ new Date()).getFullYear() + }; + function getDefaultRegisters() { + return __spreadValues({}, DEFAULT_REGISTERS); + } + + // src/core/context-utils.ts + function getDefaultContext() { + return { + registers: getDefaultRegisters(), + smartFence: false, + renderPlaceholder: void 0, + placeholderSymbol: "\u25A2", + letterShapeStyle: l10n.locale.startsWith("fr") ? "french" : "tex", + minFontScale: 0, + maxMatrixCols: 10, + colorMap: defaultColorMap, + backgroundColorMap: defaultBackgroundColorMap, + getMacro: (token) => getMacroDefinition(token, getMacros()) + }; + } + + // src/core/context.ts + var Context = class _Context { + constructor(options, style) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o; + let template; + if (options == null ? void 0 : options.parent) { + this.parent = options.parent; + template = options.parent; + this.registers = {}; + } else { + template = __spreadValues(__spreadValues({}, getDefaultContext()), (_a3 = options == null ? void 0 : options.from) != null ? _a3 : {}); + this.registers = template.registers; + } + if (template.atomIdsSettings) + this.atomIdsSettings = __spreadValues({}, template.atomIdsSettings); + this.renderPlaceholder = template.renderPlaceholder; + this.isPhantom = (_d2 = (_c2 = options == null ? void 0 : options.isPhantom) != null ? _c2 : (_b3 = this.parent) == null ? void 0 : _b3.isPhantom) != null ? _d2 : false; + this.letterShapeStyle = template.letterShapeStyle; + this.minFontScale = template.minFontScale; + this.maxMatrixCols = template.maxMatrixCols; + if ((style == null ? void 0 : style.color) && style.color !== "none") this.color = style.color; + else this.color = (_f = (_e = this.parent) == null ? void 0 : _e.color) != null ? _f : ""; + if ((style == null ? void 0 : style.backgroundColor) && style.backgroundColor !== "none") + this.backgroundColor = style.backgroundColor; + else this.backgroundColor = (_h = (_g = this.parent) == null ? void 0 : _g.backgroundColor) != null ? _h : ""; + if ((style == null ? void 0 : style.fontSize) && style.fontSize !== "auto" && style.fontSize !== ((_i = this.parent) == null ? void 0 : _i.size)) + this.size = style.fontSize; + else this.size = (_k = (_j = this.parent) == null ? void 0 : _j.size) != null ? _k : DEFAULT_FONT_SIZE; + let mathstyle = (_m = (_l = this.parent) == null ? void 0 : _l.mathstyle) != null ? _m : MATHSTYLES.displaystyle; + if (typeof (options == null ? void 0 : options.mathstyle) === "string") { + if (template instanceof _Context) { + switch (options.mathstyle) { + case "cramp": + mathstyle = mathstyle.cramp; + break; + case "superscript": + mathstyle = mathstyle.sup; + break; + case "subscript": + mathstyle = mathstyle.sub; + break; + case "numerator": + mathstyle = mathstyle.fracNum; + break; + case "denominator": + mathstyle = mathstyle.fracDen; + break; + } + } + switch (options.mathstyle) { + case "textstyle": + mathstyle = MATHSTYLES.textstyle; + break; + case "displaystyle": + mathstyle = MATHSTYLES.displaystyle; + break; + case "scriptstyle": + mathstyle = MATHSTYLES.scriptstyle; + break; + case "scriptscriptstyle": + mathstyle = MATHSTYLES.scriptscriptstyle; + break; + case "": + case "auto": + break; + } + } + this.mathstyle = mathstyle; + this.smartFence = template.smartFence; + this.placeholderSymbol = template.placeholderSymbol; + this.colorMap = (_n = template.colorMap) != null ? _n : ((x) => x); + this.backgroundColorMap = (_o = template.backgroundColorMap) != null ? _o : ((x) => x); + this.getMacro = template.getMacro; + console.assert(this.parent !== void 0 || this.registers !== void 0); + } + makeID() { + if (!this.atomIdsSettings) return void 0; + if (this.atomIdsSettings.overrideID) return this.atomIdsSettings.overrideID; + if (typeof this.atomIdsSettings.seed !== "number") { + return `${Date.now().toString(36).slice(-2)}${Math.floor( + Math.random() * 1e5 + ).toString(36)}`; + } + const result = this.atomIdsSettings.seed.toString(36); + this.atomIdsSettings.seed += 1; + return result; + } + // Scale a value, in em, to account for the fontsize and mathstyle + // of this context + scale(value) { + return value * this.effectiveFontSize; + } + get scalingFactor() { + if (!this.parent) return 1; + return this.effectiveFontSize / this.parent.effectiveFontSize; + } + get isDisplayStyle() { + return this.mathstyle.id === D || this.mathstyle.id === Dc; + } + get isCramped() { + return this.mathstyle.cramped; + } + get isTight() { + return this.mathstyle.isTight; + } + get metrics() { + return this.mathstyle.metrics; + } + // Return the font size, in em relative to the mathfield fontsize, + // accounting both for the base font size and the mathstyle + get effectiveFontSize() { + return Math.max( + FONT_SCALE[Math.max(1, this.size + this.mathstyle.sizeDelta)], + this.minFontScale + ); + } + getRegister(name) { + if (this.registers && name in this.registers) return this.registers[name]; + if (this.parent) return this.parent.getRegister(name); + return void 0; + } + getRegisterAsNumber(name) { + const val = this.getRegister(name); + if (typeof val === "number") return val; + if (typeof val === "string") return Number(val); + return void 0; + } + getRegisterAsGlue(name) { + if (this.registers && name in this.registers) { + const value = this.registers[name]; + if (typeof value === "object" && "glue" in value) return value; + else if (typeof value === "object" && "dimension" in value) + return { glue: { dimension: value.dimension } }; + else if (typeof value === "number") return { glue: { dimension: value } }; + return void 0; + } + if (this.parent) return this.parent.getRegisterAsGlue(name); + return void 0; + } + getRegisterAsEm(name, precision) { + return convertDimensionToEm(this.getRegisterAsDimension(name), precision); + } + getRegisterAsDimension(name) { + if (this.registers && name in this.registers) { + const value = this.registers[name]; + if (typeof value === "object" && "glue" in value) return value.glue; + else if (typeof value === "object" && "dimension" in value) return value; + else if (typeof value === "number") return { dimension: value }; + return void 0; + } + if (this.parent) return this.parent.getRegisterAsDimension(name); + return void 0; + } + setRegister(name, value) { + if (value === void 0) { + delete this.registers[name]; + return; + } + this.registers[name] = value; + } + evaluate(value) { + if (!value || !("register" in value)) return value; + let context = this; + if ("global" in value && value.global) + while (context.parent) context = context.parent; + let factor = 1; + if ("factor" in value && value.factor !== 1 && value.factor !== void 0) + factor = value.factor; + const val = context.getRegister(value.register); + if (val === void 0) return void 0; + if (typeof val === "string") + return { string: Number(val).toString() + val }; + if (typeof val === "number") return { number: factor * val }; + const result = context.evaluate(val); + if (result === void 0) return void 0; + if ("string" in result) + return { string: Number(val).toString() + result.string }; + if ("number" in result) return { number: factor * result.number }; + if ("dimension" in result) + return __spreadProps(__spreadValues({}, result), { dimension: factor * result.dimension }); + if ("glue" in result) { + return __spreadProps(__spreadValues({}, result), { + glue: __spreadProps(__spreadValues({}, result.glue), { dimension: factor * result.glue.dimension }), + shrink: result.shrink ? __spreadProps(__spreadValues({}, result.shrink), { dimension: factor * result.shrink.dimension }) : void 0, + grow: result.grow ? __spreadProps(__spreadValues({}, result.grow), { dimension: factor * result.grow.dimension }) : void 0 + }); + } + return value; + } + toDimension(value) { + const val = this.evaluate(value); + if (val === void 0) return null; + if ("dimension" in val) return val; + if ("glue" in val) return val.glue; + if ("number" in val) return { dimension: val.number }; + if ("string" in val) { + const number = parseFloat(val.string); + const m = val.string.match(/(mm|cm|ex|px|em|bp|dd|pc|in|mu)$/); + if (m) return { dimension: number, unit: m[0] }; + return { dimension: number }; + } + return null; + } + toEm(value, precision) { + if (value === null) return 0; + const dimen = this.toDimension(value); + if (dimen === null) return 0; + return convertDimensionToPt(dimen, precision) / PT_PER_EM; + } + toNumber(value) { + if (value === null) return null; + const val = this.evaluate(value); + if (val === void 0) return null; + if ("number" in val) return val.number; + if ("dimension" in val) return val.dimension; + if ("glue" in val) return val.glue.dimension; + if ("string" in val) return Number(val.string); + return null; + } + toColor(value) { + var _a3, _b3; + if (value === null) return null; + const val = this.evaluate(value); + if (val === void 0) return null; + if ("string" in val) return (_b3 = (_a3 = this.colorMap) == null ? void 0 : _a3.call(this, val.string)) != null ? _b3 : val.string; + return null; + } + toBackgroundColor(value) { + var _a3, _b3; + if (value === null) return null; + const val = this.evaluate(value); + if (val === void 0) return null; + if ("string" in val) + return (_b3 = (_a3 = this.backgroundColorMap) == null ? void 0 : _a3.call(this, val.string)) != null ? _b3 : val.string; + return null; + } + }; + + // src/core/atom-class.ts + var NAMED_BRANCHES = [ + "body", + "above", + "below", + "superscript", + "subscript" + ]; + function isNamedBranch(branch) { + return typeof branch === "string" && NAMED_BRANCHES.includes(branch); + } + function isCellBranch(branch) { + return branch !== void 0 && Array.isArray(branch) && branch.length === 2; + } + var Atom = class _Atom { + constructor(options) { + // If `true`, the atom is the root of the tree. That's the case for + // some environment, such as `lines`, etc... + this.isRoot = false; + var _a3, _b3, _c2, _d2, _e, _f, _g; + this.type = options.type; + if (typeof options.value === "string") this.value = options.value; + this.command = (_b3 = (_a3 = options.command) != null ? _a3 : this.value) != null ? _b3 : ""; + this.mode = (_c2 = options.mode) != null ? _c2 : "math"; + if (options.isFunction) this.isFunction = true; + if (options.isRoot || this.type === "root") this.isRoot = true; + if (options.limits) this.subsupPlacement = options.limits; + this.style = __spreadValues({}, (_d2 = options.style) != null ? _d2 : {}); + this.displayContainsHighlight = (_e = options.displayContainsHighlight) != null ? _e : false; + this.captureSelection = (_f = options.captureSelection) != null ? _f : false; + this.skipBoundary = (_g = options.skipBoundary) != null ? _g : false; + if (options.verbatimLatex !== void 0 && options.verbatimLatex !== null) + this.verbatimLatex = options.verbatimLatex; + if (options.args) this.args = options.args; + if (options.body) this.body = options.body; + this._changeCounter = 0; + } + /** + * Return a list of boxes equivalent to atoms. + * + * While an atom represent an abstract element (for example 'genfrac'), + * a box corresponds to something to draw on screen (a character, a line, + * etc...). + * + * @param context Font family, variant, size, color, and other info useful + * to render an expression + */ + static createBox(context, atoms, options) { + var _a3; + if (!atoms) return null; + const runs = getStyleRuns(atoms); + const boxes = []; + for (const run of runs) { + const style = run[0].style; + const box = renderStyleRun(context, run, { + style: { + color: style.color, + backgroundColor: style.backgroundColor, + fontSize: style.fontSize + } + }); + if (box) boxes.push(box); + } + if (boxes.length === 0) return null; + const classes = ((_a3 = options == null ? void 0 : options.classes) != null ? _a3 : "").trim(); + if (boxes.length === 1 && !classes && !(options == null ? void 0 : options.type)) + return boxes[0].wrap(context); + return new Box(boxes, { classes, type: options == null ? void 0 : options.type }).wrap(context); + } + /** + * Given an atom or an array of atoms, return a LaTeX string representation + */ + static serialize(value, options) { + return Mode.serialize(value, options); + } + /** + * The common ancestor between two atoms + */ + static commonAncestor(a, b) { + if (a === b) return a.parent; + if (a.parent === b.parent) return a.parent; + const parents = /* @__PURE__ */ new WeakSet(); + let { parent } = a; + while (parent) { + parents.add(parent); + parent = parent.parent; + } + parent = b.parent; + while (parent) { + if (parents.has(parent)) return parent; + parent = parent.parent; + } + console.assert(Boolean(parent)); + return void 0; + } + static fromJson(json) { + if (typeof json === "string") + return new _Atom({ type: "mord", value: json, mode: "math" }); + return new _Atom(json); + } + toJson() { + if (this._json) return this._json; + const result = {}; + if (this.type) result.type = this.type; + if (this.mode !== "math") result.mode = this.mode; + if (this.command && this.command !== this.value) + result.command = this.command; + if (this.value !== void 0) result.value = this.value; + if (this.style && Object.keys(this.style).length > 0) + result.style = __spreadValues({}, this.style); + if (this.verbatimLatex !== void 0) + result.verbatimLatex = this.verbatimLatex; + if (this.subsupPlacement) result.subsupPlacement = this.subsupPlacement; + if (this.explicitSubsupPlacement) result.explicitSubsupPlacement = true; + if (this.isFunction) result.isFunction = true; + if (this.displayContainsHighlight) result.displayContainsHighlight = true; + if (this.skipBoundary) result.skipBoundary = true; + if (this.captureSelection) result.captureSelection = true; + if (this.args) result.args = argumentsToJson(this.args); + if (this._branches) { + for (const branch of Object.keys(this._branches)) { + if (this._branches[branch]) { + result[branch] = this._branches[branch].filter( + (x) => x.type !== "first" + ).map((x) => x.toJson()); + } + } + } + if (result.type === "mord") { + if (Object.keys(result).length === 2 && "value" in result) + return result.value; + } + this._json = result; + return result; + } + // Used to detect changes and send appropriate notifications + get changeCounter() { + if (this.parent) return this.parent.changeCounter; + return this._changeCounter; + } + set isDirty(dirty) { + if (!dirty) return; + this._json = void 0; + if (!this.parent) this._changeCounter++; + if ("verbatimLatex" in this) this.verbatimLatex = void 0; + this._children = void 0; + if (this.parent) this.parent.isDirty = true; + } + /** + * Serialize the atom to LaTeX. + * Used internally by Mode: does not serialize styling. To serialize + * one or more atoms, use `Atom.serialize()` + */ + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + if (this.body && this.command) { + return joinLatex([ + latexCommand(this.command, this.bodyToLatex(options)), + this.supsubToLatex(options) + ]); + } + if (this.body) { + return joinLatex([ + this.bodyToLatex(options), + this.supsubToLatex(options) + ]); + } + if (!this.value || this.value === "\u200B") return ""; + return this.command; + } + bodyToLatex(options) { + var _a3; + const defaultMode = (_a3 = options.defaultMode) != null ? _a3 : this.mode === "math" ? "math" : "text"; + return Mode.serialize(this.body, __spreadProps(__spreadValues({}, options), { defaultMode })); + } + aboveToLatex(options) { + return Mode.serialize(this.above, options); + } + belowToLatex(options) { + return Mode.serialize(this.below, options); + } + supsubToLatex(options) { + let result = ""; + options = __spreadProps(__spreadValues({}, options), { defaultMode: "math" }); + if (this.branch("subscript") !== void 0) { + const sub = Mode.serialize(this.subscript, options); + if (sub.length === 0) result += "_{}"; + else if (sub.length === 1) { + if (/^[0-9]$/.test(sub)) result += `_${sub}`; + else result += `_{${sub}}`; + } else result += `_{${sub}}`; + } + if (this.branch("superscript") !== void 0) { + const sup = Mode.serialize(this.superscript, options); + if (sup.length === 0) result += "^{}"; + else if (sup.length === 1) { + if (sup === "\u2032") result += "^\\prime "; + else if (sup === "\u2033") result += "^\\doubleprime "; + else if (/^[0-9]$/.test(sup)) result += `^${sup}`; + else result += `^{${sup}}`; + } else result += `^{${sup}}`; + } + return result; + } + get treeDepth() { + let result = 1; + let atom = this.parent; + while (atom) { + atom = atom.parent; + result += 1; + } + return result; + } + get inCaptureSelection() { + let atom = this; + while (atom) { + if (atom.captureSelection) return true; + atom = atom.parent; + } + return false; + } + /** Return the parent editable prompt, if it exists */ + get parentPrompt() { + let atom = this.parent; + while (atom) { + if (atom.type === "prompt" && !atom.captureSelection) return atom; + atom = atom.parent; + } + return null; + } + /** + * Return the atoms in the branch, if it exists, otherwise null + */ + branch(name) { + if (!isNamedBranch(name)) return void 0; + if (!this._branches) return void 0; + return this._branches[name]; + } + /** + * Return all the branches that exist. + * Some of them may be empty. + */ + get branches() { + if (!this._branches) return []; + const result = []; + for (const branch of NAMED_BRANCHES) + if (this._branches[branch]) result.push(branch); + return result; + } + /** + * Return the atoms in the branch, if it exists, otherwise create it. + * + * Return mutable array of atoms in the branch, since isDirty is + * set to true + */ + createBranch(name) { + console.assert(isNamedBranch(name)); + if (!isNamedBranch(name)) return []; + if (!this._branches) { + this._branches = { + [name]: [this.makeFirstAtom(name)] + }; + } else if (!this._branches[name]) + this._branches[name] = [this.makeFirstAtom(name)]; + this.isDirty = true; + return this._branches[name]; + } + get row() { + if (!isCellBranch(this.parentBranch)) return -1; + return this.parentBranch[0]; + } + get col() { + if (!isCellBranch(this.parentBranch)) return -1; + return this.parentBranch[1]; + } + get body() { + var _a3; + return (_a3 = this._branches) == null ? void 0 : _a3.body; + } + set body(atoms) { + this.setChildren(atoms, "body"); + } + get superscript() { + var _a3; + return (_a3 = this._branches) == null ? void 0 : _a3.superscript; + } + set superscript(atoms) { + this.setChildren(atoms, "superscript"); + } + get subscript() { + var _a3; + return (_a3 = this._branches) == null ? void 0 : _a3.subscript; + } + set subscript(atoms) { + this.setChildren(atoms, "subscript"); + } + get above() { + var _a3; + return (_a3 = this._branches) == null ? void 0 : _a3.above; + } + set above(atoms) { + this.setChildren(atoms, "above"); + } + get below() { + var _a3; + return (_a3 = this._branches) == null ? void 0 : _a3.below; + } + set below(atoms) { + this.setChildren(atoms, "below"); + } + applyStyle(style, options) { + this.isDirty = true; + if (options == null ? void 0 : options.unstyledOnly) { + if (style.color && !this.style.color) this.style.color = style.color; + if (style.backgroundColor && !this.style.backgroundColor) + this.style.backgroundColor = style.backgroundColor; + if (style.fontFamily && !this.style.fontFamily) + this.style.fontFamily = style.fontFamily; + if (style.fontShape && !this.style.fontShape) + this.style.fontShape = style.fontShape; + if (style.fontSeries && !this.style.fontSeries) + this.style.fontSeries = style.fontSeries; + if (style.textDecoration && !this.style.textDecoration) + this.style.textDecoration = style.textDecoration; + if (style.fontSize && !this.style.fontSize) + this.style.fontSize = style.fontSize; + if (style.variant && !this.style.variant) + this.style.variant = style.variant; + if (style.variantStyle && !this.style.variantStyle) + this.style.variantStyle = style.variantStyle; + } else this.style = __spreadValues(__spreadValues({}, this.style), style); + if (this.style.fontFamily === "none") delete this.style.fontFamily; + if (this.style.fontShape === "auto") delete this.style.fontShape; + if (this.style.fontSeries === "auto") delete this.style.fontSeries; + if (this.style.color === "none") { + delete this.style.color; + delete this.style.verbatimColor; + } + if (this.style.backgroundColor === "none") { + delete this.style.backgroundColor; + delete this.style.verbatimBackgroundColor; + } + if (this.style.fontSize === "auto") delete this.style.fontSize; + for (const child of this.children) child.applyStyle(style, options); + } + getInitialBaseElement() { + var _a3, _b3, _c2; + if (this.hasEmptyBranch("body")) return this; + console.assert(((_a3 = this.body) == null ? void 0 : _a3[0].type) === "first"); + return (_c2 = (_b3 = this.body[1]) == null ? void 0 : _b3.getInitialBaseElement()) != null ? _c2 : this; + } + getFinalBaseElement() { + if (this.hasEmptyBranch("body")) return this; + return this.body[this.body.length - 1].getFinalBaseElement(); + } + isCharacterBox() { + if (this.type === "leftright" || this.type === "genfrac" || this.type === "subsup" || this.type === "delim" || this.type === "array" || this.type === "surd") + return false; + return this.getFinalBaseElement().type === "mord"; + } + hasEmptyBranch(branch) { + const atoms = this.branch(branch); + if (!atoms) return true; + console.assert(atoms.length > 0); + console.assert(atoms[0].type === "first"); + return atoms.length === 1; + } + /* + * Setting `null` does nothing + * Setting `[]` adds an empty list (the branch is created) + * The children should *not* start with a `"first"` atom: + * the `first` atom will be added if necessary + */ + setChildren(children, branch) { + var _a3; + if (!children) return; + console.assert(isNamedBranch(branch)); + if (!isNamedBranch(branch)) return; + const newBranch = ((_a3 = children[0]) == null ? void 0 : _a3.type) === "first" ? [...children] : [this.makeFirstAtom(branch), ...children]; + if (this._branches) this._branches[branch] = newBranch; + else this._branches = { [branch]: newBranch }; + for (const child of children) { + child.parent = this; + child.parentBranch = branch; + } + this.isDirty = true; + } + makeFirstAtom(branch) { + const result = new _Atom({ type: "first", mode: this.mode }); + result.parent = this; + result.parentBranch = branch; + return result; + } + addChild(child, branch) { + console.assert(child.type !== "first"); + this.createBranch(branch).push(child); + this.isDirty = true; + child.parent = this; + child.parentBranch = branch; + } + addChildBefore(child, before) { + console.assert(before.parentBranch !== void 0); + const branch = this.createBranch(before.parentBranch); + branch.splice(branch.indexOf(before), 0, child); + this.isDirty = true; + child.parent = this; + child.parentBranch = before.parentBranch; + } + addChildAfter(child, after) { + console.assert(after.parentBranch !== void 0); + const branch = this.createBranch(after.parentBranch); + branch.splice(branch.indexOf(after) + 1, 0, child); + this.isDirty = true; + child.parent = this; + child.parentBranch = after.parentBranch; + } + addChildren(children, branchName) { + const branch = this.createBranch(branchName); + for (const child of children) { + child.parent = this; + child.parentBranch = branchName; + branch.push(child); + } + this.isDirty = true; + } + /** + * Return the last atom that was added + */ + addChildrenAfter(children, after) { + console.assert(children.length === 0 || children[0].type !== "first"); + console.assert(after.parentBranch !== void 0); + const branch = this.createBranch(after.parentBranch); + branch.splice(branch.indexOf(after) + 1, 0, ...children); + this.isDirty = true; + for (const child of children) { + child.parent = this; + child.parentBranch = after.parentBranch; + } + return children[children.length - 1]; + } + removeBranch(name) { + const children = this.branch(name); + if (isNamedBranch(name)) this._branches[name] = void 0; + if (!children) return []; + for (const child of children) { + child.parent = void 0; + child.parentBranch = void 0; + } + console.assert(children[0].type === "first"); + const [_first, ...rest] = children; + this.isDirty = true; + return rest; + } + removeChild(child) { + console.assert(child.parent === this); + if (child.type === "first") return; + const branch = this.branch(child.parentBranch); + const index = branch.indexOf(child); + console.assert(index >= 0); + branch.splice(index, 1); + this.isDirty = true; + child.parent = void 0; + child.parentBranch = void 0; + } + get siblings() { + if (!this.parent) return []; + return this.parent.branch(this.parentBranch); + } + get firstSibling() { + return this.siblings[0]; + } + get lastSibling() { + const { siblings } = this; + return siblings[siblings.length - 1]; + } + get isFirstSibling() { + return this === this.firstSibling; + } + get isLastSibling() { + return this === this.lastSibling; + } + get hasNoSiblings() { + return this.siblings.length === 1; + } + get leftSibling() { + console.assert(this.parent !== void 0); + const siblings = this.parent.branch(this.parentBranch); + return siblings[siblings.indexOf(this) - 1]; + } + get rightSibling() { + console.assert(this.parent !== void 0); + const siblings = this.parent.branch(this.parentBranch); + return siblings[siblings.indexOf(this) + 1]; + } + get hasChildren() { + return Boolean(this._branches && this.children.length > 0); + } + get firstChild() { + console.assert(this.hasChildren); + return this.children[0]; + } + get lastChild() { + console.assert(this.hasChildren); + const { children } = this; + return children[children.length - 1]; + } + /** + * All the children of this atom. + * + * The order of the atoms is the order in which they + * are navigated using the keyboard. + */ + get children() { + if (this._children) return this._children; + if (!this._branches) return []; + const result = []; + for (const branchName of NAMED_BRANCHES) { + if (this._branches[branchName]) { + for (const x of this._branches[branchName]) { + result.push(...x.children); + result.push(x); + } + } + } + this._children = result; + return result; + } + /** + * Render this atom as a box. + * + * The parent context (color, size...) will be applied + * to the result. + * + */ + render(parentContext) { + if (this.type === "first" && !parentContext.atomIdsSettings) return null; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.render) return def.render(this, parentContext); + const context = new Context({ parent: parentContext }, this.style); + let result = this.createBox(context, { + classes: !this.parent ? "ML__base" : "" + }); + if (!result) return null; + if (!this.subsupPlacement && (this.superscript || this.subscript)) { + result = this.attachSupsub(context, { base: result }); + } + return result.wrap(context); + } + attachSupsub(parentContext, options) { + var _a3; + const base = options.base; + const superscript = this.superscript; + const subscript = this.subscript; + if (!superscript && !subscript) return base; + let supBox = null; + let subBox = null; + const isCharacterBox = (_a3 = options.isCharacterBox) != null ? _a3 : this.isCharacterBox(); + let supShift = 0; + if (superscript) { + const context = new Context({ + parent: parentContext, + mathstyle: "superscript" + }); + supBox = _Atom.createBox(context, superscript); + if (!isCharacterBox) { + supShift = base.height - parentContext.metrics.supDrop * context.scalingFactor; + } + } + let subShift = 0; + if (subscript) { + const context = new Context({ + parent: parentContext, + mathstyle: "subscript" + }); + subBox = _Atom.createBox(context, subscript); + if (!isCharacterBox) { + subShift = base.depth + parentContext.metrics.subDrop * context.scalingFactor; + } + } + let minSupShift; + if (parentContext.isDisplayStyle) + minSupShift = parentContext.metrics.sup1; + else if (parentContext.isCramped) + minSupShift = parentContext.metrics.sup3; + else minSupShift = parentContext.metrics.sup2; + const scriptspace = 0.5 / PT_PER_EM / parentContext.scalingFactor; + let supsub = null; + if (subBox && supBox) { + supShift = Math.max( + supShift, + minSupShift, + supBox.depth + 0.25 * parentContext.metrics.xHeight + ); + subShift = Math.max(subShift, parentContext.metrics.sub2); + const ruleWidth = parentContext.metrics.defaultRuleThickness; + if (supShift - supBox.depth - (subBox.height - subShift) < 4 * ruleWidth) { + subShift = 4 * ruleWidth - (supShift - supBox.depth) + subBox.height; + const psi = 0.8 * parentContext.metrics.xHeight - (supShift - supBox.depth); + if (psi > 0) { + supShift += psi; + subShift -= psi; + } + } + const slant = this.type === "extensible-symbol" && base.italic ? -base.italic : 0; + supsub = new VBox({ + individualShift: [ + { box: subBox, shift: subShift, marginLeft: slant }, + { box: supBox, shift: -supShift } + ] + }); + } else if (subBox && !supBox) { + subShift = Math.max( + subShift, + parentContext.metrics.sub1, + subBox.height - 0.8 * X_HEIGHT + ); + supsub = new VBox({ + shift: subShift, + children: [ + { + box: subBox, + marginRight: scriptspace, + marginLeft: this.isCharacterBox() ? -base.italic : 0 + } + ] + }); + } else if (!subBox && supBox) { + supShift = Math.max( + supShift, + minSupShift, + supBox.depth + 0.25 * X_HEIGHT + ); + supsub = new VBox({ + shift: -supShift, + children: [{ box: supBox, marginRight: scriptspace }] + }); + } + return new Box( + [ + base, + new Box(supsub, { + caret: this.caret, + isSelected: this.isSelected, + classes: "ML__msubsup" + }) + ], + { type: options.type } + ); + } + attachLimits(ctx, options) { + const above = this.superscript ? _Atom.createBox( + new Context({ parent: ctx, mathstyle: "superscript" }, this.style), + this.superscript + ) : null; + const below = this.subscript ? _Atom.createBox( + new Context({ parent: ctx, mathstyle: "subscript" }, this.style), + this.subscript + ) : null; + if (!above && !below) return options.base.wrap(ctx); + return makeLimitsStack(ctx, __spreadProps(__spreadValues({}, options), { above, below })); + } + bind(context, box) { + if (!box || context.isPhantom || this.value === "\u200B") return box; + let parent = this.parent; + while (parent && !parent.captureSelection) parent = parent.parent; + if (parent == null ? void 0 : parent.captureSelection) return box; + if (!this.id) this.id = context.makeID(); + box.atomID = this.id; + return box; + } + /** + * Create a box with the specified body. + */ + createBox(context, options) { + var _a3, _b3, _c2, _d2; + const value = (_a3 = this.value) != null ? _a3 : this.body; + const type = (_b3 = options == null ? void 0 : options.boxType) != null ? _b3 : boxType(this.type); + let classes = (_c2 = options == null ? void 0 : options.classes) != null ? _c2 : ""; + if (isTextMode(this.mode)) classes += " ML__text"; + const result = typeof value === "string" || value === void 0 ? new Box(value != null ? value : null, { + type, + isSelected: this.isSelected, + mode: this.mode, + maxFontSize: context.scalingFactor, + style: __spreadProps(__spreadValues({ + variant: "normal" + }, this.style), { + fontSize: Math.max( + 1, + context.size + context.mathstyle.sizeDelta + ) + }), + letterShapeStyle: context.letterShapeStyle, + classes + }) : (_d2 = _Atom.createBox(context, value, { type, classes })) != null ? _d2 : new Box(null); + if (context.isTight) result.isTight = true; + if (this.mode !== "math" || this.style.variant === "main") + result.italic = 0; + result.right = result.italic; + this.bind(context, result); + if (this.caret) { + if (!this.superscript && !this.subscript) result.caret = this.caret; + } + return result; + } + /** Return true if a digit, or a decimal point, or a french decimal `{,}` */ + isDigit() { + var _a3; + if (this.type === "mord" && this.value) return /^[\d,\.]$/.test(this.value); + if (this.type === "group" && ((_a3 = this.body) == null ? void 0 : _a3.length) === 2) + return this.body[0].type === "first" && this.body[1].value === ","; + return false; + } + asDigit() { + var _a3; + if (this.type === "mord" && this.value && /^[\d,\.]$/.test(this.value)) + return this.value; + if (this.type === "group" && ((_a3 = this.body) == null ? void 0 : _a3.length) === 2) { + if (this.body[0].type === "first" && this.body[1].value === ",") + return "."; + } + return ""; + } + }; + function getStyleRuns(atoms) { + let style = void 0; + const runs = []; + let run = []; + for (const atom of atoms) { + if (atom.type === "first") { + run.push(atom); + continue; + } + if (!style && !atom.style) run.push(atom); + else { + const atomStyle = atom.style; + if (style && atomStyle.color === style.color && atomStyle.backgroundColor === style.backgroundColor && atomStyle.fontSize === style.fontSize) { + run.push(atom); + } else { + if (run.length > 0) runs.push(run); + run = [atom]; + style = atomStyle; + } + } + } + if (run.length > 0) runs.push(run); + return runs; + } + function renderStyleRun(parentContext, atoms, options) { + var _a3, _b3, _c2, _d2, _e; + if (!atoms || atoms.length === 0) return null; + const context = new Context({ parent: parentContext }, options.style); + const displaySelection = !((_a3 = context.atomIdsSettings) == null ? void 0 : _a3.groupNumbers); + let boxes = []; + if (atoms.length === 1) { + const atom = atoms[0]; + const box = atom.render(context); + if (box) { + if (displaySelection && atom.isSelected) box.selected(true); + boxes = [box]; + } + } else { + let digitOrTextStringID = ""; + let lastWasDigit = true; + for (const atom of atoms) { + if (((_b3 = context.atomIdsSettings) == null ? void 0 : _b3.groupNumbers) && digitOrTextStringID && (lastWasDigit && atom.isDigit() || !lastWasDigit && isText(atom))) + context.atomIdsSettings.overrideID = digitOrTextStringID; + const box = atom.render(context); + if (context.atomIdsSettings) + context.atomIdsSettings.overrideID = void 0; + if (box) { + if ((_c2 = context.atomIdsSettings) == null ? void 0 : _c2.groupNumbers) { + if (atom.isDigit() || isText(atom)) { + if (!digitOrTextStringID || lastWasDigit !== atom.isDigit()) { + lastWasDigit = atom.isDigit(); + digitOrTextStringID = (_d2 = atom.id) != null ? _d2 : ""; + } + } + if (digitOrTextStringID && (!(atom.isDigit() || isText(atom)) || !atom.hasEmptyBranch("superscript") || !atom.hasEmptyBranch("subscript"))) { + digitOrTextStringID = ""; + } + } + if (displaySelection && atom.isSelected) box.selected(true); + boxes.push(box); + } + } + } + if (boxes.length === 0) return null; + const result = new Box(boxes, __spreadProps(__spreadValues({ + isTight: context.isTight + }, options), { + type: (_e = options.type) != null ? _e : "lift" + })); + result.isSelected = boxes.every((x) => x.isSelected); + return result.wrap(context); + } + function isText(atom) { + return isTextMode(atom.mode); + } + function argumentsToJson(args) { + return args.map((arg) => { + if (arg === null) return ""; + if (Array.isArray(arg) && arg[0] instanceof Atom) + return { atoms: arg.map((x) => x.toJson()) }; + if (typeof arg === "object" && "group" in arg) + return { group: arg.group.map((x) => x.toJson()) }; + return arg; + }); + } + + // src/atoms/text.ts + var TextAtom = class _TextAtom extends Atom { + constructor(command, value, style) { + super({ + type: "text", + command, + mode: "text", + displayContainsHighlight: true + }); + this.value = value; + this.verbatimLatex = value; + this.applyStyle(style); + } + static fromJson(json) { + return new _TextAtom(json.command, json.value, json.style); + } + render(context) { + const result = this.createBox(context); + if (this.caret) result.caret = this.caret; + return result; + } + _serialize(_options) { + var _a3; + return (_a3 = this.verbatimLatex) != null ? _a3 : charToLatex("text", this.value.codePointAt(0)); + } + }; + + // src/editor-model/selection-utils.ts + function compareSelection(a, b) { + if (a.direction === b.direction) { + const l = a.ranges.length; + if (b.ranges.length === l) { + let i = 0; + while (i < l && compareRange(a.ranges[i], b.ranges[i]) === "equal") i++; + return i === l ? "equal" : "different"; + } + } + return "different"; + } + function compareRange(a, b) { + if (a[0] === b[0] && a[1] === b[1]) return "equal"; + return "different"; + } + function range(selection) { + let first = Infinity; + let last = -Infinity; + for (const range2 of selection.ranges) { + first = Math.min(first, range2[0], range2[1]); + last = Math.max(last, range2[0], range2[1]); + } + return [first, last]; + } + function isOffset(value) { + return typeof value === "number" && !Number.isNaN(value); + } + function isRange(value) { + return Array.isArray(value) && value.length === 2; + } + function isSelection(value) { + return value !== void 0 && value !== null && typeof value === "object" && "ranges" in value && Array.isArray(value.ranges); + } + function getMode(model, offset) { + const atom = model.at(offset); + let result; + if (atom) { + result = atom.mode; + let ancestor = atom.parent; + while (!result && ancestor) { + if (ancestor) result = ancestor.mode; + ancestor = ancestor.parent; + } + } + return result; + } + + // src/editor/shortcuts.ts + function validateShortcut(siblings, shortcut) { + if (!shortcut) return ""; + if (typeof shortcut === "string") return shortcut; + if (!siblings || shortcut.after === void 0) return shortcut.value; + let nothing = false; + let letter = false; + let digit = false; + let isFunction = false; + let frac = false; + let surd = false; + let binop = false; + let relop = false; + let operator = false; + let punct = false; + let array = false; + let openfence = false; + let closefence = false; + let text = false; + let space = false; + let sibling = siblings[0]; + let index = 0; + while ((sibling == null ? void 0 : sibling.type) && /^(subsup|placeholder)$/.test(sibling.type)) { + index += 1; + sibling = siblings[index]; + } + nothing = !sibling || sibling.type === "first"; + if (sibling) { + text = sibling.mode === "text"; + letter = !text && sibling.type === "mord" && LETTER.test(sibling.value); + digit = !text && sibling.type === "mord" && /\d+$/.test(sibling.value); + isFunction = !text && sibling.isFunction; + frac = sibling.type === "genfrac"; + surd = sibling.type === "surd"; + binop = sibling.type === "mbin"; + relop = sibling.type === "mrel"; + operator = sibling.type === "mop" || sibling.type === "operator" || sibling.type === "extensible-symbol"; + punct = sibling.type === "mpunct" || sibling.type === "minner"; + array = sibling.type === "array"; + openfence = sibling.type === "mopen"; + closefence = sibling.type === "mclose" || sibling.type === "leftright"; + space = sibling.type === "space"; + } + if (shortcut.after.includes("nothing") && nothing || shortcut.after.includes("letter") && letter || shortcut.after.includes("digit") && digit || shortcut.after.includes("function") && isFunction || shortcut.after.includes("frac") && frac || shortcut.after.includes("surd") && surd || shortcut.after.includes("binop") && binop || shortcut.after.includes("relop") && relop || shortcut.after.includes("operator") && operator || shortcut.after.includes("punct") && punct || shortcut.after.includes("array") && array || shortcut.after.includes("openfence") && openfence || shortcut.after.includes("closefence") && closefence || shortcut.after.includes("text") && text || shortcut.after.includes("space") && space) + return shortcut.value; + return ""; + } + function getInlineShortcut(context, s, shortcuts) { + if (!shortcuts) return ""; + return validateShortcut(context, shortcuts[s]); + } + + // src/editor/shortcuts-definitions.ts + var INLINE_SHORTCUTS = { + "&": "\\&", + "%": "\\%", + "$": "\\$", + // Primes + // "'": '^{\\prime}', // Conflicts with text zone shortcut + "''": "^{\\doubleprime}", + "'''": "^{\\prime\\prime\\prime}", + "''''": "^{\\prime\\prime\\prime\\prime}", + // Greek letters + "alpha": "\\alpha", + "delta": "\\delta", + "Delta": "\\Delta", + "pi": "\\pi", + "Pi": "\\Pi", + "theta": "\\theta", + "Theta": "\\Theta", + // Letter-like + "ii": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\imaginaryI" + }, + "jj": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\imaginaryJ" + }, + "ee": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\exponentialE" + }, + "nabla": "\\nabla", + "grad": "\\nabla", + "del": "\\partial", + "deg": { after: "digit+space", value: "\\degree" }, + "infty": "\\infty", + "\u221E": "\\infty", + // @TODO: doesn't work + // '∞': '\\infty', + // '∞': '\\infty', + "oo": { + after: "nothing+digit+frac+surd+binop+relop+punct+array+openfence+closefence+space", + value: "\\infty" + }, + // Big operators + "\u2211": "\\sum", + "sum": "\\sum_{#?}^{#?}", + "int": "\\int_{#?}^{#?}", + "prod": "\\prod_{#?}^{#?}", + "sqrt": "\\sqrt{#?}", + // '∫': '\\int', // There's a alt-B command for this + "\u2206": "\\differentialD", + // @TODO: is \\diffD most common? + "\u2202": "\\differentialD", + // + // Functions + // + // The standard LaTeX commands (i.e. in the amsmath package) are: + // https://mirror.math.princeton.edu/pub/CTAN/macros/latex/required/amsmath/amsldoc.pdf + // \arccos, \arcsin, \arctan, \arg, \cos, \cosh, \cot, \coth, \csc, \deg, \det, \dim, \exp, \gcd, \hom, \inf, \injlim, \ker, \lg, \lim, \liminf, \limsup, \ln, \log, \max, \min, \Pr, \projlim, \sec, \sin, \sinh, \sup, \tan, \tanh + // \varinjlim, \varprojlim, \varlimsup, \varliminf + // Although we support rendering of non-standard commands (i.e. \arsinh) + // we avoid generating them when using the shortcuts. + "sin": "\\sin", + "cos": "\\cos", + "tan": "\\tan", + "arccos": "\\arccos", + "arcsin": "\\arcsin", + "arctan": "\\arctan", + "arctg": "\\operatorname{arctg}", + "arcsec": "\\operatorname{arcsec}", + "arccsc": "\\operatorname{arccsc}", + "arsinh": "\\operatorname{arsinh}", + "arccosh": "\\operatorname{arccosh}", + "arcosh": "\\operatorname{arcosh}", + "artanh": "\\operatorname{artanh}", + "arctanh": "\\operatorname{arctanh}", + "arcsech": "\\operatorname{arcsech}", + "arccsch": "\\operatorname{arccsch}", + "ch": "\\operatorname{ch}", + "cosec": "\\operatorname{cosec}", + "cosh": "\\cosh", + "cot": "\\cot", + "cotg": "\\operatorname{cotg}", + "coth": "\\coth", + "csc": "\\csc", + "ctg": "\\operatorname{ctg}", + "cth": "\\operatorname{cth}", + "sec": "\\sec", + "sech": "\\operatorname{sech}", + "sinh": "\\sinh", + "sh": "\\operatorname{sh}", + "tanh": "\\tanh", + "tg": "\\operatorname{tg}", + "th": "\\operatorname{th}", + "arg": "\\arg", + "lg": "\\lg", + "lb": "\\operatorname{lb}", + // not in amsmath + "log": "\\log_{#?}", + "ln": "\\ln", + "exp": "\\exp", + "lim": "\\lim_{#?\\to#?}", + // Differentials + // According to ISO31/XI (ISO 80000-2), differentials should be upright + // (note this is not universal: https://tex.stackexchange.com/questions/14821/whats-the-proper-way-to-typeset-a-differential-operator/637613#637613) + "dx": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\differentialD x" + }, + "dy": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\differentialD y" + }, + "dt": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\differentialD t" + }, + // Logic + "AA": "\\forall", + "EE": "\\exists", + "!EE": "\\nexists", + "&&": "\\land", + // The shortcut for the greek letter "xi" is interfering with "x in" + "xin": { + after: "nothing+text+relop+punct+openfence+space", + value: "x \\in" + }, + // The shortcut for `\int` is interfering with `\sin x` + "sint": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\sin t" + }, + "in": { + after: "nothing+letter+closefence", + value: "\\in" + }, + "!in": "\\notin", + // Sets + "NN": "\\mathbb{N}", + // Natural numbers + "ZZ": "\\mathbb{Z}", + // Integers + "QQ": "\\mathbb{Q}", + // Rational numbers + "RR": "\\mathbb{R}", + // Real numbers + "CC": "\\mathbb{C}", + // Complex numbers + // Operators + "xx": "\\times", + "+-": "\\pm", + // Relational operators + "\u2260": "\\ne", + "!=": "\\ne", + "\u2265": "\\ge", + ">=": "\\ge", + "\u2264": "\\le", + "<=": "\\le", + "<<": "\\ll", + ">>": "\\gg", + "~~": "\\approx", + // More operators + "\u2248": "\\approx", + "?=": "\\questeq", + "\xF7": "\\div", + "\xAC": "\\neg", + ":=": "\\coloneq", + "::": "\\Colon", + // Fences + "(:": "\\langle", + ":)": "\\rangle", + // More Greek letters + "beta": "\\beta", + "chi": "\\chi", + "epsilon": "\\epsilon", + "varepsilon": "\\varepsilon", + "eta": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\eta" + }, + "gamma": "\\gamma", + "Gamma": "\\Gamma", + "iota": "\\iota", + "kappa": "\\kappa", + "lambda": "\\lambda", + "Lambda": "\\Lambda", + "mu": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\mu" + }, + "nu": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\nu" + }, + "\xB5": "\\mu", + // @TODO: or micro? + "phi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\phi" + }, + "Phi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\Phi" + }, + "varphi": "\\varphi", + "psi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\psi" + }, + "Psi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\Psi" + }, + "rho": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\rho" + }, + "sigma": "\\sigma", + "Sigma": "\\Sigma", + "tau": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\tau" + }, + "vartheta": "\\vartheta", + "upsilon": "\\upsilon", + "xi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space", + value: "\\xi" + }, + "Xi": { + after: "nothing+digit+function+frac+surd+binop+relop+punct+array+openfence+closefence+space+text", + value: "\\Xi" + }, + "zeta": "\\zeta", + "omega": "\\omega", + "Omega": "\\Omega", + "\u03A9": "\\omega", + // @TODO: or ohm? + // More Logic + "forall": "\\forall", + "exists": "\\exists", + "!exists": "\\nexists", + ":.": "\\therefore", + // MORE FUNCTIONS + // 'arg': '\\arg', + "liminf": "\\liminf_{#?}", + "limsup": "\\limsup_{#?}", + "argmin": "\\operatorname*{arg~min}_{#?}", + "argmax": "\\operatorname*{arg~max}_{#?}", + "det": "\\det", + "mod": "\\bmod{#?}", + "(mod": "\\pmod{#?}", + "max": "\\max", + "min": "\\min", + "erf": "\\operatorname{erf}", + "erfc": "\\operatorname{erfc}", + "bessel": "\\operatorname{bessel}", + "mean": "\\operatorname{mean}", + "median": "\\operatorname{median}", + "fft": "\\operatorname{fft}", + "lcm": "\\operatorname{lcm}", + "gcd": "\\gcd", + "randomReal": "\\operatorname{randomReal}", + "randomInteger": "\\operatorname{randomInteger}", + "Re": "\\operatorname{Re}", + "Im": "\\operatorname{Im}", + // UNITS + "mm": { + after: "nothing+digit+operator", + value: "\\operatorname{mm}" + // Millimeter + }, + "cm": { + after: "nothing+digit+operator", + value: "\\operatorname{cm}" + // Centimeter + }, + "km": { + after: "nothing+digit+operator", + value: "\\operatorname{km}" + // Kilometer + }, + "kg": { + after: "nothing+digit+operator", + value: "\\operatorname{kg}" + // Kilogram + }, + "ft": { + after: "nothing+digit+operator", + value: "\\operatorname{ft}" + // feet + }, + "inch": { + after: "nothing+digit+operator", + value: "\\operatorname{inch}" + // inch + }, + "mi": { + after: "nothing+digit+operator", + value: "\\operatorname{mi}" + // mile + }, + // '||': '\\lor', + "...": "\\ldots", + // In general, use \ldots + "+...": "+\\cdots", + // ... but use \cdots after + ... + "-...": "-\\cdots", + // ... - and ... + "->...": "\\to\\cdots", + // -> + "-->...": "\\longrightarrow\\cdots", + "->": "\\to", + "|->": "\\mapsto", + "-->": "\\longrightarrow", + // '<-': '\\leftarrow', + "<--": "\\longleftarrow", + "=>": "\\Rightarrow", + "==>": "\\Longrightarrow", + // '<=': '\\Leftarrow', // CONFLICTS WITH LESS THAN OR EQUAL + "<=>": "\\iff", + "<->": "\\leftrightarrow", + "(.)": "\\odot", + "(+)": "\\oplus", + "(/)": "\\oslash", + "(*)": "\\otimes", + "(-)": "\\ominus", + // '(-)': '\\circleddash', + "||": "\\Vert", + "*": "\\cdot", + // + // ASCIIIMath + // + // Binary operation symbols + // + "**": "\\star", + "***": "\\ast", + "//": "\\slash", + "\\\\": "\\backslash", + "setminus": "\\backslash", + "|><": "\\ltimes", + "><|": "\\rtimes", + "|><|": "\\bowtie", + "-:": "\\div", + "divide": "\\div", + "@": "\\circ", + // 'o+': '\\oplus', + // 'ox': '\\otimes', + // 'o.': '\\odot', + "^^": "\\wedge", + "^^^": "\\bigwedge", + "vv": "\\vee", + "vvv": "\\bigvee", + "nn": "\\cap", + "nnn": "\\bigcap", + "uu": "\\cup", + "uuu": "\\bigcup", + // Binary relation symbols + "-=": "\\equiv", + "~=": "\\cong", + "lt": "<", + "lt=": "\\leq", + "gt": ">", + "gt=": "\\geq", + "-<": "\\prec", + "-lt": "\\prec", + "-<=": "\\preceq", + // '>-': '\\succ', + ">-=": "\\succeq", + "prop": "\\propto", + "diamond": "\\diamond", + "square": "\\square", + "iff": "\\iff", + "sub": "\\subset", + "sup": "\\supset", + "sube": "\\subseteq", + "supe": "\\supseteq", + "uarr": "\\uparrow", + "darr": "\\downarrow", + "rarr": "\\rightarrow", + "rArr": "\\Rightarrow", + "larr": "\\leftarrow", + "lArr": "\\Leftarrow", + "harr": "\\leftrightarrow", + "hArr": "\\Leftrightarrow", + "aleph": "\\aleph", + // Logic + "and": "\\land", + "or": "\\lor", + "not": "\\neg", + "_|_": "\\bot", + "TT": "\\top", + "|--": "\\vdash", + "|==": "\\models", + // Other functions + "|__": "\\lfloor", + "__|": "\\rfloor", + "|~": "\\lceil", + "~|": "\\rceil", + // Arrows + ">->": "\\rightarrowtail", + "->>": "\\twoheadrightarrow", + // \char"21A0 + ">->>": "\\twoheadrightarrowtail", + // \char"2916 + "times": "\\times", + // "?=":"\\questeq" + "of": "\\circ", + "infinity": "\\infty", + "defint": "\\int_{#?}^{#?}", + "approaches": "\\to", + "ceil": "\\left\\lceil#?\\right\\rceil", + "floor": "\\left\\lfloor#?\\right\\rfloor", + "union": "\\cup", + "asterisk": "\\ast", + // + // Desmos Graphing Calculator + // + "frac": "\\frac{#?}{#?}", + "cbrt": "\\sqrt[3]{#?}", + "nthroot": "\\sqrt[#?]{#?}" + }; + + // src/formats/parse-math-string.ts + function parseMathString(s, options) { + var _a3; + let format = (_a3 = options == null ? void 0 : options.format) != null ? _a3 : "auto"; + if (format === "auto") [format, s] = inferFormat(s); + if (format === "ascii-math") { + s = s.replace(/\u2061/gu, ""); + s = s.replace(/\u3016/gu, "{"); + s = s.replace(/\u3017/gu, "}"); + s = s.replace(/([^\\])sinx/g, "$1\\sin x"); + s = s.replace(/([^\\])cosx/g, "$1\\cos x "); + s = s.replace(/\u2013/g, "-"); + return [ + "ascii-math", + parseMathExpression(s, { inlineShortcuts: options == null ? void 0 : options.inlineShortcuts }) + ]; + } + return ["latex", s]; + } + function parseMathExpression(s, options) { + var _a3; + s = s.trim(); + if (!s) return ""; + const inlineShortcuts = (_a3 = options.inlineShortcuts) != null ? _a3 : INLINE_SHORTCUTS; + if (s.startsWith("^") || s.startsWith("_")) { + const { match: match2, rest: rest2 } = parseMathArgument(s.slice(1), { + inlineShortcuts, + noWrap: true + }); + return `${s[0]}{${match2}}${parseMathExpression(rest2, options)}`; + } + let m = s.match(/^(sqrt|\u221A)(.*)/); + if (m) { + const { match: match2, rest: rest2 } = parseMathArgument(m[2], { + inlineShortcuts, + noWrap: true + }); + return `\\sqrt{${match2 != null ? match2 : "\\placeholder{}"}}${parseMathExpression( + rest2, + options + )}`; + } + m = s.match(/^(\\cbrt|\u221B)(.*)/); + if (m) { + const { match: match2, rest: rest2 } = parseMathArgument(m[2], { + inlineShortcuts, + noWrap: true + }); + return `\\sqrt[3]{${match2 != null ? match2 : "\\placeholder{}"}}${parseMathExpression( + rest2, + options + )}`; + } + m = s.match(/^abs(.*)/); + if (m) { + const { match: match2, rest: rest2 } = parseMathArgument(m[1], { + inlineShortcuts, + noWrap: true + }); + return `\\left|${match2 != null ? match2 : "\\placeholder{}"}\\right|${parseMathExpression( + rest2, + options + )}`; + } + m = s.match(/^["”“](.*?)["”“](.*)/); + if (m) { + return `\\text{${m[1]}}${parseMathExpression(m[2], options)}`; + } + m = s.match(/^([^a-zA-Z0-9\(\{\[\_\^\\\s"]+)(.*)/); + if (m) { + return `${paddedShortcut(m[1], inlineShortcuts)}${parseMathExpression( + m[2], + options + )}`; + } + if (/^([fgh])[^a-zA-Z]/.test(s)) { + const { rest: rest2, match: match2 } = parseMathArgument(s.slice(1), { + inlineShortcuts, + noWrap: true + }); + let result = ""; + if (s[1] === "(") result = `${s[0]}\\left(${match2}\\right)`; + else result = s[0] + match2; + return result + parseMathExpression(rest2, options); + } + m = s.match(/^([a-zA-Z]+)(.*)/); + if (m) { + return paddedShortcut(m[1], inlineShortcuts) + parseMathExpression(m[2], options); + } + const { match, rest } = parseMathArgument(s, { + inlineShortcuts, + noWrap: true + }); + if (match && rest[0] === "/") { + const m2 = parseMathArgument(rest.slice(1), { + inlineShortcuts, + noWrap: true + }); + if (m2.match) { + return `\\frac{${match}}{${m2.match}}${parseMathExpression( + m2.rest, + options + )}`; + } + } else { + return s.startsWith("(") ? "\\left(" + match + "\\right)" + parseMathExpression(rest, options) : match + parseMathExpression(rest, options); + } + m = s.match(/^(\s+)(.*)$/); + if (m) return " " + parseMathExpression(m[2], options); + return s; + } + var FENCES = { + "[": "\\lbrack", + "]": "\\rbrack", + "{": "\\lbrace", + "}": "\\rbrace" + }; + function parseMathArgument(s, options) { + var _a3, _b3; + let match = ""; + s = s.trim(); + let rest = s; + const lFence = s.charAt(0); + const rFence = { "(": ")", "{": "}", "[": "]" }[lFence]; + if (rFence) { + let level = 1; + let i = 1; + while (i < s.length && level > 0) { + if (s[i] === lFence) level++; + if (s[i] === rFence) level--; + i++; + } + if (level === 0) { + const body = parseMathExpression(s.substring(1, i - 1), options); + if (options.noWrap && lFence === "(") match = body; + else + match = `\\left${(_a3 = FENCES[lFence]) != null ? _a3 : lFence}${body}\\right${(_b3 = FENCES[rFence]) != null ? _b3 : rFence}`; + rest = s.slice(Math.max(0, i)); + } else { + match = s.substring(1, i); + rest = ""; + } + } else { + let m = s.match(/^([a-zA-Z]+)/); + if (m) { + let shortcut = getInlineShortcut(null, s, options.inlineShortcuts); + if (shortcut) { + shortcut = shortcut.replace("_{#?}", ""); + shortcut = shortcut.replace("^{#?}", ""); + return { match: shortcut, rest: s.slice(shortcut.length) }; + } + } + m = s.match(/^([a-zA-Z])/); + if (m) { + return { match: m[1], rest: s.slice(1) }; + } + m = s.match(/^(-)?\d+(\.\d*)?/); + if (m) { + return { match: m[0], rest: s.slice(m[0].length) }; + } + if (!/^\\(left|right)/.test(s)) { + m = s.match(/^(\\[a-zA-Z]+)/); + if (m) { + rest = s.slice(m[1].length); + match = m[1]; + } + } + } + return { match, rest }; + } + function paddedShortcut(s, shortcuts) { + let result = getInlineShortcut(null, s, shortcuts); + if (result) { + result = result.replace("_{#?}", ""); + result = result.replace("^{#?}", ""); + result += " "; + } else result = s; + return result; + } + var MODE_SHIFT_COMMANDS = [ + ["\\[", "\\]"], + ["\\(", "\\)"], + ["$$", "$$"], + ["$", "$"], + // Must be *after* $$..$$ + ["\\begin{math}", "\\end{math}"], + ["\\begin{displaymath}", "\\end{displaymath}"], + ["\\begin{equation}", "\\end{equation}"], + ["\\begin{equation*}", "\\end{equation*}"] + ]; + function trimModeShiftCommand(s) { + const trimmedString = s.trim(); + for (const mode of MODE_SHIFT_COMMANDS) { + if (trimmedString.startsWith(mode[0]) && trimmedString.endsWith(mode[1])) { + return [ + true, + trimmedString.substring( + mode[0].length, + trimmedString.length - mode[1].length + ) + ]; + } + } + return [false, s]; + } + function inferFormat(s) { + s = s.trim(); + if (s.length <= 1) return ["latex", s]; + let hasLatexModeShiftCommand; + [hasLatexModeShiftCommand, s] = trimModeShiftCommand(s); + if (hasLatexModeShiftCommand) return ["latex", s]; + if (s.startsWith("`") && s.endsWith("`")) { + s = s.substring(1, s.length - 1); + return ["ascii-math", s]; + } + if (s.includes("\\")) { + return ["latex", s]; + } + if (/\$.+\$/.test(s)) { + return ["latex", `\\text{${s}}`]; + } + return [void 0, s]; + } + + // src/core/delimiters.ts + var RIGHT_DELIM = { + "(": ")", + "{": "}", + "[": "]", + "|": "|", + "\\lbrace": "\\rbrace", + "\\lparen": "\\rparen", + "\\{": "\\}", + "\\langle": "\\rangle", + "\\lfloor": "\\rfloor", + "\\lceil": "\\rceil", + "\\vert": "\\vert", + "\\lvert": "\\rvert", + "\\Vert": "\\Vert", + "\\lVert": "\\rVert", + "\\lbrack": "\\rbrack", + "\\ulcorner": "\\urcorner", + "\\llcorner": "\\lrcorner", + "\\lgroup": "\\rgroup", + "\\lmoustache": "\\rmoustache" + }; + var LEFT_DELIM = Object.fromEntries( + Object.entries(RIGHT_DELIM).map(([leftDelim, rightDelim]) => [ + rightDelim, + leftDelim + ]) + ); + function getSymbolValue(symbol) { + var _a3; + return (_a3 = { + "[": 91, + // '[', + "]": 93, + // ']', + "(": 40, + // '(', + ")": 41, + // ')', + "\\mid": 8739, + "|": 8739, + "\u2223": 8739, + // DIVIDES + "\u2225": 8741, + // PARALLEL TO + "\\|": 8739, + "\\{": 123, + // '{', + "\\}": 125, + // '}', + "\\lbrace": 123, + // '{', + "\\rbrace": 125, + // '}', + "\\lparen": 40, + // '(' + "\\rparen": 41, + // ')' + "\\lbrack": 91, + // '[', + "\\rbrack": 93, + // ']', + "\\vert": 8739, + "\\lvert": 8739, + "\\mvert": 8739, + "\\rvert": 8739, + "\\Vert": 8741, + "\\lVert": 8741, + "\\mVert": 8741, + "\\rVert": 8741, + "\\parallel": 8741, + "\\shortparallel": 8741, + "\\langle": 10216, + "\\rangle": 10217, + "\\lfloor": 8970, + "\\rfloor": 8971, + "\\lceil": 8968, + "\\rceil": 8969, + "\\ulcorner": 9484, + "\\urcorner": 9488, + "\\llcorner": 9492, + "\\lrcorner": 9496, + "\\lgroup": 10222, + "\\rgroup": 10223, + "\\lmoustache": 9136, + "\\rmoustache": 9137, + "\\surd": 8730 + }[symbol]) != null ? _a3 : symbol.codePointAt(0); + } + function makeSmallDelim(delim, context, center, options) { + var _a3; + const text = new Box(getSymbolValue(delim), { + fontFamily: "Main-Regular", + isSelected: options.isSelected, + classes: "ML__small-delim " + ((_a3 = options.classes) != null ? _a3 : "") + }); + const box = text.wrap(context); + if (center) box.setTop((1 - context.scalingFactor) * AXIS_HEIGHT); + return box; + } + function makeLargeDelim(delim, size, center, parentContext, options) { + var _a3, _b3; + const context = new Context( + { parent: parentContext, mathstyle: "textstyle" }, + options == null ? void 0 : options.style + ); + const result = new Box(getSymbolValue(delim), { + fontFamily: `Size${size}-Regular`, + isSelected: options.isSelected, + classes: ((_a3 = options.classes) != null ? _a3 : "") + ` ML__delim-size${size}`, + type: (_b3 = options.type) != null ? _b3 : "ignore" + }).wrap(context); + if (center) result.setTop((1 - context.scalingFactor) * AXIS_HEIGHT); + return result; + } + function makeStackedDelim(delim, heightTotal, center, context, options) { + var _a3; + let top; + let middle; + let repeat; + let bottom; + top = repeat = bottom = getSymbolValue(delim); + middle = null; + let fontFamily = "Size1-Regular"; + if (delim === "\\vert" || delim === "\\lvert" || delim === "\\rvert" || delim === "\\mvert" || delim === "\\mid") + repeat = top = bottom = 8739; + else if (delim === "\\Vert" || delim === "\\lVert" || delim === "\\rVert" || delim === "\\mVert" || delim === "\\|") + repeat = top = bottom = 8741; + else if (delim === "\\uparrow") repeat = bottom = 9168; + else if (delim === "\\Uparrow") repeat = bottom = 8214; + else if (delim === "\\downarrow") top = repeat = 9168; + else if (delim === "\\Downarrow") top = repeat = 8214; + else if (delim === "\\updownarrow") { + top = 8593; + repeat = 9168; + bottom = 8595; + } else if (delim === "\\Updownarrow") { + top = 8657; + repeat = 8214; + bottom = 8659; + } else if (delim === "[" || delim === "\\lbrack") { + top = 9121; + repeat = 9122; + bottom = 9123; + fontFamily = "Size4-Regular"; + } else if (delim === "]" || delim === "\\rbrack") { + top = 9124; + repeat = 9125; + bottom = 9126; + fontFamily = "Size4-Regular"; + } else if (delim === "\\lfloor" || delim === "\u230A") { + repeat = top = 9122; + bottom = 9123; + fontFamily = "Size4-Regular"; + } else if (delim === "\\lceil" || delim === "\u2308") { + top = 9121; + repeat = bottom = 9122; + fontFamily = "Size4-Regular"; + } else if (delim === "\\rfloor" || delim === "\u230B") { + repeat = top = 9125; + bottom = 9126; + fontFamily = "Size4-Regular"; + } else if (delim === "\\rceil" || delim === "\u2309") { + top = 9124; + repeat = bottom = 9125; + fontFamily = "Size4-Regular"; + } else if (delim === "(" || delim === "\\lparen") { + top = 9115; + repeat = 9116; + bottom = 9117; + fontFamily = "Size4-Regular"; + } else if (delim === ")" || delim === "\\rparen") { + top = 9118; + repeat = 9119; + bottom = 9120; + fontFamily = "Size4-Regular"; + } else if (delim === "\\{" || delim === "\\lbrace") { + top = 9127; + middle = 9128; + bottom = 9129; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\}" || delim === "\\rbrace") { + top = 9131; + middle = 9132; + bottom = 9133; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\lgroup" || delim === "\u27EE") { + top = 9127; + bottom = 9129; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\rgroup" || delim === "\u27EF") { + top = 9131; + bottom = 9133; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\lmoustache" || delim === "\u23B0") { + top = 9127; + bottom = 9133; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\rmoustache" || delim === "\u23B1") { + top = 9131; + bottom = 9129; + repeat = 9130; + fontFamily = "Size4-Regular"; + } else if (delim === "\\surd") { + top = 57345; + bottom = 9143; + repeat = 57344; + fontFamily = "Size4-Regular"; + } else if (delim === "\\ulcorner") { + top = 9484; + repeat = bottom = 32; + } else if (delim === "\\urcorner") { + top = 9488; + repeat = bottom = 32; + } else if (delim === "\\llcorner") { + bottom = 9492; + repeat = top = 32; + } else if (delim === "\\lrcorner") { + top = 9496; + repeat = top = 32; + } + const topMetrics = getCharacterMetrics(top, fontFamily); + const topHeightTotal = topMetrics.height + topMetrics.depth; + const repeatMetrics = getCharacterMetrics(repeat, fontFamily); + const repeatHeightTotal = repeatMetrics.height + repeatMetrics.depth; + const bottomMetrics = getCharacterMetrics(bottom, fontFamily); + const bottomHeightTotal = bottomMetrics.height + bottomMetrics.depth; + let middleHeightTotal = 0; + let middleFactor = 1; + if (middle !== null) { + const middleMetrics = getCharacterMetrics(middle, fontFamily); + middleHeightTotal = middleMetrics.height + middleMetrics.depth; + middleFactor = 2; + } + const minHeight = topHeightTotal + bottomHeightTotal + middleHeightTotal; + const repeatCount = Math.max( + 0, + Math.ceil((heightTotal - minHeight) / (middleFactor * repeatHeightTotal)) + ); + const realHeightTotal = minHeight + repeatCount * middleFactor * repeatHeightTotal; + let axisHeight = AXIS_HEIGHT; + if (center) axisHeight = axisHeight * context.scalingFactor; + const depth = realHeightTotal / 2 - axisHeight; + const OVERLAP = 8e-3; + const stack = []; + stack.push({ box: new Box(bottom, { fontFamily }) }); + stack.push(-OVERLAP); + const repeatBox = new Box(repeat, { fontFamily }); + if (middle === null) { + for (let i = 0; i < repeatCount; i++) stack.push({ box: repeatBox }); + } else { + for (let i = 0; i < repeatCount; i++) stack.push({ box: repeatBox }); + stack.push(-OVERLAP); + stack.push({ box: new Box(middle, { fontFamily }) }); + stack.push(-OVERLAP); + for (let i = 0; i < repeatCount; i++) stack.push({ box: repeatBox }); + } + stack.push(-OVERLAP); + stack.push({ box: new Box(top, { fontFamily }) }); + let sizeClass = ""; + if (fontFamily === "Size1-Regular") sizeClass = " delim-size1"; + else if (fontFamily === "Size4-Regular") sizeClass = " delim-size4"; + const inner = new VBox( + { + bottom: depth, + children: stack + }, + { classes: sizeClass } + ); + const result = new Box(inner, __spreadProps(__spreadValues({}, options != null ? options : {}), { + classes: ((_a3 = options == null ? void 0 : options.classes) != null ? _a3 : "") + " ML__delim-mult" + })); + return result; + } + var stackLargeDelimiters = /* @__PURE__ */ new Set([ + "(", + ")", + "\\lparen", + "\\rparen", + "[", + "]", + "\\lbrack", + "\\rbrack", + "\\{", + "\\}", + "\\lbrace", + "\\rbrace", + "\\lfloor", + "\\rfloor", + "\\lceil", + "\\rceil", + "\\surd", + "\u230A", + "\u230B", + "\u2308", + "\u2309" + ]); + var stackAlwaysDelimiters = /* @__PURE__ */ new Set([ + "\\uparrow", + "\\downarrow", + "\\updownarrow", + "\\Uparrow", + "\\Downarrow", + "\\Updownarrow", + "|", + "\\|", + "\\vert", + "\\Vert", + "\\lvert", + "\\rvert", + "\\lVert", + "\\rVert", + "\\mvert", + "\\mid", + "\\lgroup", + "\\rgroup", + "\\lmoustache", + "\\rmoustache", + "\u27EE", + "\u27EF", + "\u23B0", + "\u23B1" + ]); + var stackNeverDelimiters = /* @__PURE__ */ new Set([ + "<", + ">", + "\\langle", + "\\rangle", + "/", + "\\backslash", + "\\lt", + "\\gt" + ]); + var sizeToMaxHeight = [0, 1.2, 1.8, 2.4, 3]; + function makeSizedDelim(delim, size, context, options) { + if (delim === void 0 || delim === ".") + return makeNullDelimiter(context, options.classes); + if (delim === "<" || delim === "\\lt" || delim === "\u27E8") + delim = "\\langle"; + else if (delim === ">" || delim === "\\gt" || delim === "\u27E9") + delim = "\\rangle"; + if (stackLargeDelimiters.has(delim) || stackNeverDelimiters.has(delim)) + return makeLargeDelim(delim, size, false, context, options); + if (stackAlwaysDelimiters.has(delim)) { + return makeStackedDelim( + delim, + sizeToMaxHeight[size], + false, + context, + options + ); + } + console.assert(false, "Unknown delimiter '" + delim + "'"); + return null; + } + var stackNeverDelimiterSequence = [ + { type: "small", mathstyle: "scriptscriptstyle" }, + { type: "small", mathstyle: "scriptstyle" }, + { type: "small", mathstyle: "textstyle" }, + { type: "large", size: 1 }, + { type: "large", size: 2 }, + { type: "large", size: 3 }, + { type: "large", size: 4 } + ]; + var stackAlwaysDelimiterSequence = [ + { type: "small", mathstyle: "scriptscriptstyle" }, + { type: "small", mathstyle: "scriptscriptstyle" }, + { type: "small", mathstyle: "textstyle" }, + { type: "stack" } + ]; + var stackLargeDelimiterSequence = [ + { type: "small", mathstyle: "scriptscriptstyle" }, + { type: "small", mathstyle: "scriptstyle" }, + { type: "small", mathstyle: "textstyle" }, + { type: "large", size: 1 }, + { type: "large", size: 2 }, + { type: "large", size: 3 }, + { type: "large", size: 4 }, + { type: "stack" } + ]; + function delimTypeToFont(info) { + if (info.type === "small") return "Main-Regular"; + if (info.type === "large") + return "Size" + info.size + "-Regular"; + console.assert(info.type === "stack"); + return "Size4-Regular"; + } + function traverseSequence(delim, height, sequence, context) { + const start = { "-4": 0, "-3": 1, "0": 2 }[context.mathstyle.sizeDelta]; + for (let i = start; i < sequence.length; i++) { + if (sequence[i].type === "stack") { + break; + } + const metrics = getCharacterMetrics(delim, delimTypeToFont(sequence[i])); + if (metrics.defaultMetrics) { + return { type: "small", mathstyle: "scriptstyle" }; + } + let heightDepth = metrics.height + metrics.depth; + if (sequence[i].type === "small") { + if (sequence[i].mathstyle === "scriptscriptstyle") { + heightDepth *= Math.max( + FONT_SCALE[Math.max(1, context.size - 2)], + context.minFontScale + ); + } else if (sequence[i].mathstyle === "scriptstyle") { + heightDepth *= Math.max( + FONT_SCALE[Math.max(1, context.size - 1)], + context.minFontScale + ); + } + } + if (heightDepth > height) return sequence[i]; + } + return sequence[sequence.length - 1]; + } + function makeCustomSizedDelim(type, delim, height, center, context, options) { + if (!delim || delim.length === 0 || delim === ".") + return makeNullDelimiter(context); + if (delim === "<" || delim === "\\lt") delim = "\\langle"; + else if (delim === ">" || delim === "\\gt") delim = "\\rangle"; + let sequence; + if (stackNeverDelimiters.has(delim)) sequence = stackNeverDelimiterSequence; + else if (stackLargeDelimiters.has(delim)) + sequence = stackLargeDelimiterSequence; + else sequence = stackAlwaysDelimiterSequence; + const delimType = traverseSequence( + getSymbolValue(delim), + height, + sequence, + context + ); + const ctx = new Context( + { parent: context, mathstyle: delimType.mathstyle }, + options == null ? void 0 : options.style + ); + if (delimType.type === "small") + return makeSmallDelim(delim, ctx, center, __spreadProps(__spreadValues({}, options), { type })); + if (delimType.type === "large") { + return makeLargeDelim(delim, delimType.size, center, ctx, __spreadProps(__spreadValues({}, options), { + type + })); + } + console.assert(delimType.type === "stack"); + return makeStackedDelim(delim, height, center, ctx, __spreadProps(__spreadValues({}, options), { type })); + } + function makeLeftRightDelim(type, delim, height, depth, context, options) { + if (delim === ".") return makeNullDelimiter(context, options == null ? void 0 : options.classes); + const axisHeight = AXIS_HEIGHT * context.scalingFactor; + const delimiterFactor = 901; + const delimiterExtend = 5 / PT_PER_EM; + const maxDistFromAxis = Math.max(height - axisHeight, depth + axisHeight); + const totalHeight = Math.max( + maxDistFromAxis / 500 * delimiterFactor, + 2 * maxDistFromAxis - delimiterExtend + ); + return makeCustomSizedDelim(type, delim, totalHeight, true, context, options); + } + function makeNullDelimiter(parent, classes) { + const box = new Box(null, { + classes: " ML__nulldelimiter " + (classes != null ? classes : ""), + type: "ignore" + }); + box.width = parent.getRegisterAsEm("nulldelimiterspace"); + return box.wrap(new Context({ parent, mathstyle: "textstyle" })); + } + + // src/atoms/placeholder.ts + var PlaceholderAtom = class _PlaceholderAtom extends Atom { + constructor(options) { + var _a3; + super({ + type: "placeholder", + command: "\\placeholder", + mode: (_a3 = options == null ? void 0 : options.mode) != null ? _a3 : "math", + style: options == null ? void 0 : options.style + }); + this.captureSelection = true; + } + static fromJson(json) { + return new _PlaceholderAtom(json); + } + toJson() { + return super.toJson(); + } + render(context) { + let result; + this.value = context.placeholderSymbol; + if (typeof context.renderPlaceholder === "function") + result = context.renderPlaceholder(context); + else result = this.createBox(context); + if (this.caret) result.classes += " ML__placeholder-selected"; + return result; + } + _serialize(options) { + if (options.skipPlaceholders) return ""; + return "\\placeholder{}"; + } + }; + + // src/latex-commands/environment-types.ts + var matrices = [ + "matrix", + "matrix*", + "pmatrix", + "pmatrix*", + "bmatrix", + "bmatrix*", + "Bmatrix", + "Bmatrix*", + "vmatrix", + "vmatrix*", + "Vmatrix", + "Vmatrix*" + ]; + var cases = ["cases", "dcases", "rcases"]; + var align = [ + "align", + "align*", + "aligned", + "gather", + "gather*", + "gathered", + "split" + ]; + var otherTabular = ["array", "subequations", "eqnarray"]; + function isTabularEnvironment(environment) { + return align.includes(environment) || cases.includes(environment) || cases.includes(environment) || matrices.includes(environment) || otherTabular.includes(environment); + } + function isMatrixEnvironment(environment) { + return matrices.includes(environment); + } + function isCasesEnvironment(environment) { + return cases.includes(environment); + } + function isAlignEnvironment(environment) { + return align.includes(environment); + } + + // src/atoms/array.ts + function freeTextRowDirection(atoms) { + for (const atom of atoms) { + if (atom.type === "first") continue; + if (!isTextMode(atom.mode)) return "ltr"; + if (atom.value && !/^\s+$/u.test(atom.value)) return "auto"; + } + return "auto"; + } + function makeFreeTextCellBox(context, atoms) { + const runs = []; + for (const atom of atoms) { + const atomIsText = atom.type === "first" || isTextMode(atom.mode); + const current = runs[runs.length - 1]; + if ((current == null ? void 0 : current.isText) !== atomIsText) + runs.push({ atoms: [atom], isText: atomIsText }); + else current.atoms.push(atom); + } + const boxes = runs.flatMap((run) => { + const box = Atom.createBox(context, run.atoms, { type: "ignore" }); + if (!box) return []; + if (run.isText) return [box]; + return [ + new Box(box, { + classes: "ML__free-text-math-island", + attributes: { dir: "ltr" } + }) + ]; + }); + if (boxes.length === 0) return null; + return new Box(boxes, { type: "ignore" }); + } + function normalizeCells(atom, cells, options) { + let maxColCount = 0; + for (const colSpec of options.columns) + if ("align" in colSpec) maxColCount += 1; + maxColCount = Math.max(maxColCount, options.minColumns); + let colCount = 0; + const rows = []; + for (const row of cells) { + colCount = Math.max(colCount, Math.min(row.length, maxColCount)); + let colIndex2 = 0; + while (colIndex2 < row.length) { + const newRow = []; + const lastCol = Math.min(row.length, colIndex2 + maxColCount); + while (colIndex2 < lastCol) { + newRow.push(normalizeCell(row[colIndex2], atom.mode)); + colIndex2 += 1; + } + if (newRow.length < options.minColumns) { + while (newRow.length < options.minColumns) + newRow.push([new Atom({ type: "first", mode: atom.mode })]); + } + rows.push(newRow); + } + } + if (!atom.isMultiline && rows.length > 0 && rows[rows.length - 1].length === 1 && isEmptyCell(rows[rows.length - 1][0])) + rows.pop(); + const result = []; + for (const row of rows) { + if (row.length !== colCount) { + for (let i = row.length; i < colCount; i++) { + if (atom.isMultiline) + row.push([new Atom({ type: "first", mode: atom.mode })]); + else { + row.push([ + new Atom({ type: "first", mode: atom.mode }), + new PlaceholderAtom() + ]); + } + } + } + result.push(row); + } + let rowIndex = 0; + let colIndex = 0; + for (const row of result) { + colIndex = 0; + for (const cell of row) { + for (const element of cell) { + element.parent = atom; + element.parentBranch = [rowIndex, colIndex]; + } + colIndex += 1; + } + rowIndex += 1; + } + atom.isDirty = true; + return result; + } + function isEmptyMultilineCell(cell) { + return cell.length > 0 && cell.every((atom) => atom.type === "first"); + } + function makeEmptyLineAnchor(cell, context, metrics) { + const marker = new Box(null, { classes: "ML__empty-line-anchor" }); + const idSource = cell[0]; + if (idSource) { + if (!idSource.id) idSource.id = context.makeID(); + marker.atomID = idSource.id; + } + marker.setStyle("display", "inline-block"); + marker.setStyle("width", 0); + marker.setStyle("position", "relative"); + marker.setStyle("height", Math.max(0, metrics.height + metrics.depth), "em"); + marker.setStyle("vertical-align", -metrics.depth, "em"); + marker.height = metrics.height; + marker.depth = metrics.depth; + const caretAtom = cell.find((atom) => atom.caret); + if (caretAtom == null ? void 0 : caretAtom.caret) marker.caret = caretAtom.caret; + if (cell.some((atom) => atom.isSelected)) marker.selected(true); + return marker; + } + function normalizeCell(cell, mode) { + if (cell.length === 0) return [new Atom({ type: "first", mode })]; + if (cell[0].type !== "first") + return [new Atom({ type: "first", mode }), ...cell]; + console.assert(!cell.slice(1).some((x) => x.type === "first")); + return cell; + } + function isEmptyCell(cell) { + return cell.length === 1 && cell[0].type === "first"; + } + var ArrayAtom = class _ArrayAtom extends Atom { + /** True if the environment is multiline. In a multiline environment, + * pressing return automatically creates a new row. In non-multiline + * environments, pressing alt+return creates a new row. + */ + get isMultiline() { + const env = this.environmentName; + return [ + "lines", + "multline", + "multline*", + "align", + "split", + "gather", + "gathered" + ].includes(env); + } + constructor(envName, array, rowGaps, options = {}) { + var _a3, _b3, _c2, _d2; + super({ type: "array", isRoot: options.isRoot }); + this.environmentName = envName; + if (options.columns) { + if (options.columns.length === 0) this.colFormat = [{ align: "l" }]; + else this.colFormat = [...options.columns]; + } else { + if (options.minColumns) { + const columns = []; + for (let i = 0; i < options.minColumns; i++) + columns.push({ align: "l" }); + this.colFormat = columns; + } else { + this.colFormat = [ + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" }, + { align: "l" } + ]; + } + } + this.minColumns = (_a3 = options.minColumns) != null ? _a3 : 1; + this.minRows = (_b3 = options.minRows) != null ? _b3 : 1; + this.maxRows = (_c2 = options.maxRows) != null ? _c2 : Infinity; + this._rows = normalizeCells(this, array, { + columns: this.colFormat, + minColumns: this.minColumns, + minRows: this.minRows, + maxRows: this.maxRows + }); + this.rowGaps = rowGaps; + if (options.arraycolsep !== void 0) + this.arraycolsep = options.arraycolsep; + this.colSeparationType = options.colSeparationType; + if (options.arraystretch !== void 0) + this.arraystretch = options.arraystretch; + if (options.mathstyleName) this.mathstyleName = options.mathstyleName; + if (options.leftDelim) this.leftDelim = options.leftDelim; + if (options.rightDelim) this.rightDelim = options.rightDelim; + this.classes = (_d2 = options.classes) != null ? _d2 : []; + } + static fromJson(json) { + return new _ArrayAtom( + json.environmentName, + json.array, + json.rowGaps, + json + ); + } + toJson() { + const result = __spreadProps(__spreadValues({}, super.toJson()), { + environmentName: this.environmentName, + array: this._rows.map( + (row) => row.map((col) => col.map((x) => x.toJson())) + ), + rowGaps: this.rowGaps, + columns: this.colFormat, + colSeparationType: this.colSeparationType, + minColumns: this.minColumns, + minRows: this.minRows, + maxRows: this.maxRows + }); + if (this.arraystretch !== void 0) + result.arraystretch = this.arraystretch; + if (this.arraycolsep !== void 0) result.arraycolsep = this.arraycolsep; + if (this.leftDelim) result.leftDelim = this.leftDelim; + if (this.rightDelim) result.rightDelim = this.rightDelim; + if (this.isRoot) result.isRoot = true; + result.minColumns = this.minColumns; + result.minRows = this.minRows; + result.maxRows = this.maxRows; + if (this.mathstyleName) result.mathstyleName = this.mathstyleName; + if (this.classes.length > 0) result.classes = this.classes; + return result; + } + branch(cell) { + var _a3; + if (!isCellBranch(cell)) return void 0; + return (_a3 = this._rows[cell[0]][cell[1]]) != null ? _a3 : void 0; + } + createBranch(cell) { + var _a3; + if (!isCellBranch(cell)) return []; + this.isDirty = true; + return (_a3 = this.branch(cell)) != null ? _a3 : []; + } + get rowCount() { + return this._rows.length; + } + get colCount() { + return this._rows[0].length; + } + get maxColumns() { + return this.colFormat.filter((col) => Boolean(col["align"])).length; + } + removeBranch(name) { + if (isNamedBranch(name)) return super.removeBranch(name); + const [_first, ...children] = this.branch(name); + console.assert(_first.type === "first"); + this._rows[name[0]][name[1]] = void 0; + children.forEach((x) => { + x.parent = void 0; + x.parentBranch = void 0; + }); + this.isDirty = true; + return children; + } + get hasChildren() { + return this.children.length > 0; + } + get children() { + const result = []; + for (const row of this._rows) { + for (const cell of row) { + if (cell) { + for (const atom of cell) { + result.push(...atom.children); + result.push(atom); + } + } + } + } + return [...result, ...super.children]; + } + render(context) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h; + const innerContext = new Context( + { parent: context, mathstyle: this.mathstyleName }, + this.style + ); + const arrayRuleWidth = innerContext.getRegisterAsEm("arrayrulewidth"); + const arrayColSep = innerContext.getRegisterAsEm("arraycolsep"); + const doubleRuleSep = innerContext.getRegisterAsEm("doublerulesep"); + const arraystretch = (_b3 = (_a3 = this.arraystretch) != null ? _a3 : innerContext.getRegisterAsNumber("arraystretch")) != null ? _b3 : 1; + let arraycolsep = typeof this.arraycolsep === "number" ? this.arraycolsep : arrayColSep; + if (this.colSeparationType === "small") { + const localMultiplier = new Context({ + parent: context, + mathstyle: "scriptstyle" + }).scalingFactor; + arraycolsep = 0.2778 * (localMultiplier / context.scalingFactor); + } + const arrayskip = arraystretch * BASELINE_SKIP; + const arstrutHeight = 0.7 * arrayskip; + const arstrutDepth = 0.3 * arrayskip; + let totalHeight = 0; + const body = []; + const isFreeText = this.classes.includes("ML__free-text-root"); + let nc = 0; + const nr = this._rows.length; + for (let r = 0; r < nr; ++r) { + const inrow = this._rows[r]; + nc = Math.max(nc, inrow.length); + const cellContext = new Context( + { parent: innerContext, mathstyle: this.mathstyleName }, + this.style + ); + let height = arstrutHeight / cellContext.scalingFactor; + let depth = arstrutDepth / cellContext.scalingFactor; + const outrow = { + cells: [], + directions: isFreeText ? [] : void 0, + height: 0, + depth: 0, + pos: 0 + }; + for (const element of inrow) { + const elt = this.isMultiline && element && isEmptyMultilineCell(element) ? makeEmptyLineAnchor(element, cellContext, { + height: arstrutHeight / cellContext.scalingFactor, + depth: arstrutDepth / cellContext.scalingFactor + }) : (_c2 = isFreeText ? makeFreeTextCellBox(cellContext, element != null ? element : []) : Atom.createBox(cellContext, element, { type: "ignore" })) != null ? _c2 : new Box(null, { type: "ignore" }); + depth = Math.max(depth, elt.depth); + height = Math.max(height, elt.height); + outrow.cells.push(elt); + (_d2 = outrow.directions) == null ? void 0 : _d2.push(freeTextRowDirection(element != null ? element : [])); + } + let gap = (_e = convertDimensionToEm(this.rowGaps[r])) != null ? _e : 0; + if (gap > 0) { + gap += arstrutDepth; + depth = Math.max(depth, gap); + gap = 0; + } + if (r < nr - 1 && !isMatrixEnvironment(this.environmentName) && this.environmentName !== "cases" && this.environmentName !== "array") + depth += innerContext.getRegisterAsEm("jot"); + outrow.height = height; + outrow.depth = depth; + totalHeight += height; + outrow.pos = totalHeight; + totalHeight += depth + gap; + body.push(outrow); + } + const offset = this.environmentName === "array" && !this.isMultiline ? body[0].height : totalHeight / 2 + AXIS_HEIGHT; + const contentCols = []; + for (let colIndex = 0; colIndex < nc; colIndex++) { + const stack = []; + for (const row of body) { + const element = row.cells[colIndex]; + if (element) { + element.depth = row.depth; + element.height = row.height; + const direction = (_f = row.directions) == null ? void 0 : _f[colIndex]; + stack.push({ + box: element, + shift: row.pos - offset, + classes: direction ? ["ML__free-text-line"] : void 0, + attributes: direction ? { dir: direction } : void 0 + }); + } + } + if (stack.length > 0) + contentCols.push(new VBox({ individualShift: stack })); + } + const cols = []; + let previousColContent = false; + let previousColRule = false; + let currentContentCol = 0; + let firstColumn = !this.leftDelim; + const { colFormat } = this; + for (const colDesc of colFormat) { + if ("align" in colDesc && currentContentCol >= contentCols.length) { + break; + } + if ("align" in colDesc) { + if (previousColContent) { + cols.push(makeColGap(2 * arraycolsep)); + } else if (previousColRule || firstColumn) { + cols.push(makeColGap(arraycolsep)); + } + cols.push( + new Box(contentCols[currentContentCol], { + classes: "col-align-" + colDesc.align + }) + ); + currentContentCol++; + previousColContent = true; + previousColRule = false; + firstColumn = false; + } else if ("gap" in colDesc) { + if (typeof colDesc.gap === "number") { + cols.push(makeColGap(colDesc.gap)); + } else { + const col = makeColOfRepeatingElements( + context, + body, + offset, + colDesc.gap + ); + if (col) cols.push(col); + } + previousColContent = false; + previousColRule = false; + firstColumn = false; + } else if ("separator" in colDesc) { + const separator = new Box(null, { classes: "ML__vertical-separator" }); + separator.height = totalHeight; + separator.setStyle("height", totalHeight, "em"); + separator.setStyle( + "border-right", + `${arrayRuleWidth}em ${colDesc.separator} currentColor` + ); + separator.setStyle("vertical-align", -(totalHeight - offset), "em"); + let gap = 0; + if (previousColRule) gap = doubleRuleSep - arrayRuleWidth; + else if (previousColContent) gap = arraycolsep - arrayRuleWidth; + separator.left = gap; + cols.push(separator); + previousColContent = false; + previousColRule = true; + firstColumn = false; + } + } + if (previousColContent && !this.rightDelim) { + cols.push(makeColGap(arraycolsep)); + } + const inner = new Box(cols, { + classes: ["ML__mtable", ...this.classes].join(" ") + }); + if (this.environmentName === "array" && !this.isMultiline) { + inner.height = body[0].height; + inner.depth = totalHeight - body[0].height; + } + if ((!this.leftDelim || this.leftDelim === ".") && (!this.rightDelim || this.rightDelim === ".")) { + if (this.caret) inner.caret = this.caret; + return this.bind(context, inner); + } + const innerHeight = inner.height; + const innerDepth = inner.depth; + const base = this.bind( + context, + new Box( + [ + this.bind( + context, + makeLeftRightDelim( + "open", + (_g = this.leftDelim) != null ? _g : ".", + innerHeight, + innerDepth, + innerContext, + { isSelected: this.isSelected } + ) + ), + inner, + this.bind( + context, + makeLeftRightDelim( + "close", + (_h = this.rightDelim) != null ? _h : ".", + innerHeight, + innerDepth, + innerContext, + { isSelected: this.isSelected } + ) + ) + ], + { type: "ord" } + ) + ); + if (!base) return null; + base.setStyle("display", "inline-block"); + if (this.caret) base.caret = this.caret; + return this.bind(context, this.attachSupsub(context, { base })); + } + _serialize(options) { + var _a3; + const result = []; + if (this.environmentName === "lines" && this._rows.length > 1) + result.push(`\\displaylines{`); + else if (this.environmentName !== "lines") + result.push(`\\begin{${this.environmentName}}`); + if (this.environmentName === "array") { + result.push("{"); + if (this.colFormat !== void 0) { + for (const format of this.colFormat) { + if ("align" in format && typeof format.align === "string") + result.push(format.align); + else if ("separator" in format && format.separator === "solid") + result.push("|"); + else if ("separator" in format && format.separator === "dashed") + result.push(":"); + } + } + result.push("}"); + } + for (let row = 0; row < this._rows.length; row++) { + for (let col = 0; col < this._rows[row].length; col++) { + if (col > 0) result.push(" & "); + result.push(Atom.serialize(this._rows[row][col], options)); + } + if (row < this._rows.length - 1) { + const gap = this.rowGaps[row]; + if (gap == null ? void 0 : gap.dimension) + result.push(`\\\\[${gap.dimension} ${(_a3 = gap.unit) != null ? _a3 : "pt"}] `); + else result.push("\\\\ "); + } + } + if (this.environmentName === "lines" && this._rows.length > 1) + result.push(`}`); + else if (this.environmentName !== "lines") + result.push(`\\end{${this.environmentName}}`); + return joinLatex(result); + } + forEachCell(callback) { + for (let i = 0; i < this.rowCount; i++) + for (let j = 0; j < this.colCount; j++) callback(this._rows[i][j], i, j); + } + getCell(row, col) { + var _a3; + return (_a3 = this._rows[row]) == null ? void 0 : _a3[col]; + } + setCell(row, column, value) { + console.assert( + this.type === "array" && Array.isArray(this._rows) && this._rows[row][column] !== void 0 + ); + for (const atom of this._rows[row][column]) { + atom.parent = void 0; + atom.parentBranch = void 0; + } + const atoms = [ + new Atom({ type: "first", mode: this.mode }), + ...value.filter((x) => x.type !== "first") + ]; + this._rows[row][column] = atoms; + adjustBranches(this); + this.isDirty = true; + } + addRowBefore(row) { + console.assert(this.type === "array" && Array.isArray(this._rows)); + this._rows.splice( + row, + 0, + Array.from( + { length: this.colCount }, + () => makeEmptyCell(this, !this.isMultiline) + ) + ); + adjustBranches(this); + this.isDirty = true; + } + addRowAfter(row) { + console.assert(this.type === "array" && Array.isArray(this._rows)); + this._rows.splice( + row + 1, + 0, + Array.from( + { length: this.colCount }, + () => makeEmptyCell(this, !this.isMultiline) + ) + ); + adjustBranches(this); + this.isDirty = true; + } + removeRow(row) { + console.assert( + this.type === "array" && Array.isArray(this._rows) && this.rowCount > row + ); + const deleted = this._rows.splice(row, 1); + for (const column of deleted) { + for (const cell of column) { + if (cell) { + for (const child of cell) { + child.parent = void 0; + child.parentBranch = void 0; + } + } + } + } + adjustBranches(this); + this.isDirty = true; + } + addColumnBefore(col) { + console.assert(this.type === "array" && Array.isArray(this._rows)); + for (const row of this._rows) row.splice(col, 0, makeEmptyCell(this)); + adjustBranches(this); + this.isDirty = true; + } + addColumnAfter(col) { + console.assert(this.type === "array" && Array.isArray(this._rows)); + for (const row of this._rows) row.splice(col + 1, 0, makeEmptyCell(this)); + adjustBranches(this); + this.isDirty = true; + } + addColumn() { + this.addColumnAfter(this.colCount - 1); + } + removeColumn(col) { + console.assert( + this.type === "array" && Array.isArray(this._rows) && this.colCount > col + ); + for (const row of this._rows) { + const deleted = row.splice(col, 1); + for (const cell of deleted) { + if (cell) { + for (const child of cell) { + child.parent = void 0; + child.parentBranch = void 0; + } + } + } + } + adjustBranches(this); + this.isDirty = true; + } + get cells() { + const result = []; + for (const row of this._rows) { + for (const cell of row) + if (cell) result.push(cell.filter((x) => x.type !== "first")); + } + return result; + } + get rows() { + return this._rows; + } + }; + function makeEmptyCell(parent, withPlaceholder = false) { + const first = new Atom({ type: "first", mode: parent.mode }); + first.parent = parent; + const result = [first]; + if (withPlaceholder) { + const placeholder = new PlaceholderAtom(); + placeholder.parent = parent; + result.push(placeholder); + } + return result; + } + function adjustBranches(array) { + for (let i = 0; i < array.rowCount; i++) { + for (let j = 0; j < array.colCount; j++) { + const atoms = array.getCell(i, j); + if (atoms) { + for (const atom of atoms) { + if (atom) { + atom.parent = array; + atom.parentBranch = [i, j]; + } + } + } + } + } + } + function makeColGap(width) { + const result = new Box(null, { classes: "ML__arraycolsep" }); + result.width = width; + return result; + } + function makeColOfRepeatingElements(context, rows, offset, element) { + if (!element) return null; + const col = []; + for (const row of rows) { + const cell = Atom.createBox(context, element, { type: "ignore" }); + if (cell) { + cell.depth = row.depth; + cell.height = row.height; + col.push({ box: cell, shift: row.pos - offset }); + } + } + return new VBox({ individualShift: col }).wrap(context); + } + + // src/atoms/error.ts + var ErrorAtom = class _ErrorAtom extends Atom { + constructor(value) { + super({ type: "error", value, command: value, mode: "math" }); + this.verbatimLatex = value; + } + static fromJson(json) { + return new _ErrorAtom(json.command); + } + toJson() { + return super.toJson(); + } + render(context) { + const result = this.createBox(context, { classes: "ML__error" }); + if (this.caret) result.caret = this.caret; + return result; + } + }; + + // src/atoms/group.ts + var GroupAtom = class _GroupAtom extends Atom { + constructor(arg, mode) { + super({ type: "group", mode }); + this.body = arg; + this.boxType = arg.length > 1 ? "ord" : "ignore"; + this.skipBoundary = true; + this.displayContainsHighlight = false; + if ((arg == null ? void 0 : arg.length) === 1 && arg[0].command === ",") + this.captureSelection = true; + } + static fromJson(json) { + return new _GroupAtom(json.body, json.mode); + } + render(context) { + const box = Atom.createBox(context, this.body, { type: this.boxType }); + if (!box) return null; + if (this.caret) box.caret = this.caret; + return this.bind(context, box); + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + return `{${this.bodyToLatex(options)}}`; + } + }; + + // src/atoms/leftright.ts + var LeftRightAtom = class _LeftRightAtom extends Atom { + constructor(variant, body, options) { + super({ + type: "leftright", + style: options.style, + displayContainsHighlight: true + }); + this.variant = variant; + this.body = body; + this.leftDelim = options.leftDelim; + this.rightDelim = options.rightDelim; + } + static fromJson(json) { + var _a3; + return new _LeftRightAtom((_a3 = json.variant) != null ? _a3 : "", json.body, json); + } + toJson() { + const result = super.toJson(); + if (this.variant) result.variant = this.variant; + if (this.leftDelim) result.leftDelim = this.leftDelim; + if (this.rightDelim) result.rightDelim = this.rightDelim; + return result; + } + _serialize(options) { + var _a3, _b3; + const rightDelim = this.matchingRightDelim(); + if (this.variant === "left...right") { + return joinLatex([ + "\\left", + (_a3 = this.leftDelim) != null ? _a3 : ".", + this.bodyToLatex(options), + "\\right", + rightDelim + ]); + } + if (this.variant === "mleft...mright") { + return joinLatex([ + "\\mleft", + (_b3 = this.leftDelim) != null ? _b3 : ".", + this.bodyToLatex(options), + "\\mright", + rightDelim + ]); + } + return joinLatex([ + !this.leftDelim || this.leftDelim === "." ? "" : this.leftDelim, + this.bodyToLatex(options), + rightDelim + ]); + } + matchingRightDelim() { + var _a3, _b3; + if (this.rightDelim && this.rightDelim !== "?") return this.rightDelim; + const leftDelim = (_a3 = this.leftDelim) != null ? _a3 : "."; + return (_b3 = RIGHT_DELIM[leftDelim]) != null ? _b3 : leftDelim; + } + render(parentContext) { + var _a3, _b3; + const context = new Context({ parent: parentContext }, this.style); + console.assert(this.body !== void 0); + const delimContext = new Context( + { parent: parentContext, mathstyle: "textstyle" }, + this.style + ); + const inner = (_a3 = Atom.createBox(context, this.body, { type: "inner" })) != null ? _a3 : new Box(null, { type: "inner" }); + const innerHeight = inner.height / delimContext.scalingFactor; + const innerDepth = inner.depth / delimContext.scalingFactor; + const boxes = []; + if (this.leftDelim) { + boxes.push( + this.bind( + delimContext, + makeLeftRightDelim( + "open", + this.leftDelim, + innerHeight, + innerDepth, + delimContext, + { + isSelected: this.isSelected, + classes: "ML__open" + (this.containsCaret ? " ML__contains-caret" : ""), + mode: this.mode, + style: this.style + } + ) + ) + ); + } + if (inner) { + upgradeMiddle(inner.children, this, context, innerHeight, innerDepth); + boxes.push(inner); + } + if (this.rightDelim) { + let classes = this.containsCaret ? " ML__contains-caret" : ""; + let delim = this.rightDelim; + if (delim === "?") { + if (context.smartFence) { + delim = this.matchingRightDelim(); + classes += " ML__smart-fence__close"; + } else delim = "."; + } + boxes.push( + this.bind( + delimContext, + makeLeftRightDelim( + "close", + delim, + innerHeight, + innerDepth, + delimContext, + { + isSelected: this.isSelected, + classes: classes + " ML__close", + mode: this.mode, + style: this.style + } + ) + ) + ); + } + let tightSpacing = this.variant === "mleft...mright"; + const sibling = this.leftSibling; + if (sibling) { + if (!tightSpacing && sibling.isFunction) tightSpacing = true; + if (!tightSpacing && sibling.type === "subsup" && ((_b3 = sibling.leftSibling) == null ? void 0 : _b3.isFunction)) + tightSpacing = true; + } + const result = new Box(boxes, { + type: tightSpacing ? "close" : "inner", + classes: "ML__left-right" + }); + result.setStyle("margin-top", `${-inner.depth}em`); + result.setStyle("height", `${inner.height + inner.depth}em`); + if (this.caret) result.caret = this.caret; + return this.bind(context, result.wrap(context)); + } + }; + function upgradeMiddle(boxes, atom, context, height, depth) { + if (!boxes) return; + for (let i = 0; i < boxes.length; i++) { + const child = boxes[i]; + if (child.type === "middle") { + boxes[i] = atom.bind( + context, + makeLeftRightDelim("inner", child.value, height, depth, context, { + isSelected: atom.isSelected + }) + ); + boxes[i].caret = child.caret; + boxes[i].isSelected = child.isSelected; + boxes[i].cssId = child.cssId; + boxes[i].htmlData = child.htmlData; + boxes[i].htmlStyle = child.htmlStyle; + boxes[i].attributes = child.attributes; + boxes[i].cssProperties = child.cssProperties; + } else if (child.children) + upgradeMiddle(child.children, atom, context, height, depth); + } + } + + // src/atoms/macro.ts + var MacroAtom = class _MacroAtom extends Atom { + constructor(macro, options) { + var _a3; + super({ type: "macro", command: macro, style: options.style }); + this.body = options.body; + if (options.captureSelection === void 0) { + if (options.args) this.captureSelection = false; + else this.captureSelection = true; + } else this.captureSelection = options.captureSelection; + this.macroArgs = options.args; + this.expand = (_a3 = options.expand) != null ? _a3 : false; + } + static fromJson(json) { + return new _MacroAtom(json.command, json); + } + toJson() { + const options = super.toJson(); + if (this.expand) options.expand = true; + if (this.captureSelection !== void 0) + options.captureSelection = this.captureSelection; + if (this.macroArgs) options.args = this.macroArgs; + return options; + } + _serialize(options) { + var _a3; + return options.expandMacro && this.expand ? this.bodyToLatex(options) : this.command + ((_a3 = this.macroArgs) != null ? _a3 : ""); + } + applyStyle(style, options) { + const allowedStyle = {}; + if (style.color) allowedStyle.color = style.color; + if (style.backgroundColor) + allowedStyle.backgroundColor = style.backgroundColor; + super.applyStyle(allowedStyle, options); + } + render(context) { + const result = Atom.createBox(context, this.body, { type: "lift" }); + if (!result) return null; + if (this.caret) result.caret = this.caret; + return this.bind(context, result); + } + }; + var MacroArgumentAtom = class _MacroArgumentAtom extends Atom { + constructor() { + super({ type: "macro-argument" }); + } + static fromJson(_json) { + return new _MacroArgumentAtom(); + } + toJson() { + const options = super.toJson(); + return options; + } + _serialize(_options) { + return ""; + } + render(_context) { + return null; + } + }; + + // src/atoms/prompt.ts + var PromptAtom = class _PromptAtom extends Atom { + constructor(placeholderId, correctness, locked = false, body, options) { + var _a3; + super({ + type: "prompt", + mode: (_a3 = options == null ? void 0 : options.mode) != null ? _a3 : "math", + style: options == null ? void 0 : options.style, + command: "\\placeholder" + }); + this.body = body; + this.correctness = correctness; + this.placeholderId = placeholderId; + this.locked = locked; + this.captureSelection = this.locked; + } + static fromJson(json) { + return new _PromptAtom( + json.placeholderId, + json.correctness, + json.locked, + json.body, + json + ); + } + toJson() { + const result = super.toJson(); + if (this.placeholderId) result.placeholderId = this.placeholderId; + if (!this.body) delete result.body; + if (this.body) { + result.body = this.body.filter((x) => x.type !== "first").map((x) => x.toJson()); + } + if (this.correctness) result.correctness = this.correctness; + result.locked = this.locked; + return result; + } + render(parentContext) { + var _a3, _b3, _c2, _d2, _e; + const context = new Context({ parent: parentContext }); + const fboxsep = context.getRegisterAsEm("fboxsep"); + const hPadding = fboxsep; + const vPadding = fboxsep; + const content = Atom.createBox(parentContext, this.body); + if (!content) return null; + const isEffectivelyEmpty = !this.body || this.body.length === 0 || this.body.every((atom) => atom.type === "first"); + const placeholderMetrics = isEffectivelyEmpty ? new PlaceholderAtom({ + mode: this.mode, + style: this.style + }).render(new Context({ parent: parentContext, isPhantom: true })) : null; + const emptyHeight = (_a3 = placeholderMetrics == null ? void 0 : placeholderMetrics.height) != null ? _a3 : context.metrics.xHeight; + const emptyDepth = (_b3 = placeholderMetrics == null ? void 0 : placeholderMetrics.depth) != null ? _b3 : emptyHeight / 2; + const effectiveHeight = Math.max((_c2 = content.height) != null ? _c2 : 0, emptyHeight); + const effectiveDepth = Math.max((_d2 = content.depth) != null ? _d2 : 0, emptyDepth); + content.setStyle("vertical-align", `calc(-${effectiveHeight}em + 2px)`); + if (this.correctness === "correct") { + content.setStyle( + "color", + "var(--correct-color, var(--ML__correct-color))" + ); + } else if (this.correctness === "incorrect") { + content.setStyle( + "color", + "var(--incorrect-color, var(--ML__incorrect-color))" + ); + } + const squareSide = effectiveHeight + effectiveDepth + 2 * vPadding; + const minInnerWidth = squareSide - 2 * hPadding; + const base = new Box(content, { type: "ord" }); + base.setStyle("display", "inline-block"); + base.height = effectiveHeight; + base.depth = effectiveDepth; + base.setStyle("height", effectiveHeight + effectiveDepth, "em"); + base.setStyle("vertical-align", -vPadding, "em"); + if (((_e = content.width) != null ? _e : 0) < minInnerWidth) { + base.width = minInnerWidth; + base.setStyle("width", minInnerWidth, "em"); + } + let boxClasses = "ML__prompt "; + if (this.locked) { + boxClasses += " ML__lockedPromptBox "; + } else boxClasses += " ML__editablePromptBox "; + if (this.correctness === "correct") boxClasses += " ML__correctPromptBox "; + else if (this.correctness === "incorrect") + boxClasses += " ML__incorrectPromptBox "; + if (this.containsCaret) boxClasses += " ML__focusedPromptBox "; + const box = new Box(null, { + classes: boxClasses, + attributes: { part: "prompt" } + }); + box.height = base.height + vPadding; + box.depth = base.depth + vPadding; + box.width = base.width + 2 * hPadding; + box.setStyle("position", "absolute"); + box.setStyle("height", base.height + base.depth + 2 * vPadding, "em"); + if (hPadding === 0) box.setStyle("width", "100%"); + if (hPadding !== 0) { + box.setStyle("width", `calc(100% + ${2 * hPadding}em)`); + box.setStyle("top", fboxsep, "em"); + box.setStyle("left", -hPadding, "em"); + } + let svg = ""; + if (this.correctness === "incorrect") { + svg += ''; + } + if (svg) box.svgOverlay = svg; + const result = new Box([box, base], { classes: "ML__prompt-atom" }); + base.setStyle("line-height", 1); + result.setStyle("position", "relative"); + result.setStyle("display", "inline-block"); + result.setStyle("line-height", 0); + result.height = effectiveHeight + vPadding + 0.2; + result.depth = effectiveDepth + vPadding; + result.left = hPadding; + result.right = hPadding; + result.setStyle("height", effectiveHeight + 2 * vPadding, "em"); + result.setStyle( + "top", + effectiveDepth - effectiveHeight - vPadding / 2, + "em" + ); + result.setStyle("vertical-align", base.depth, "em"); + result.setStyle("margin-left", 0.5, "em"); + result.setStyle("margin-right", 0.5, "em"); + if (this.caret) result.caret = this.caret; + const withSupSub = this.attachSupsub(parentContext, { base: result }); + const bound = this.bind(context, withSupSub); + if (bound && this.id) { + box.atomID = this.id; + base.atomID = this.id; + result.atomID = this.id; + } + return bound; + } + _serialize(options) { + var _a3; + const value = (_a3 = this.bodyToLatex(options)) != null ? _a3 : ""; + if (options.skipPlaceholders) return value; + let command = "\\placeholder"; + if (this.placeholderId) command += `[${this.placeholderId}]`; + if (this.correctness === "correct") command += "[correct]"; + else if (this.correctness === "incorrect") command += "[incorrect]"; + if (this.locked) command += "[locked]"; + return latexCommand(command, value); + } + }; + + // src/atoms/subsup.ts + var SubsupAtom = class _SubsupAtom extends Atom { + constructor(options) { + super({ type: "subsup", style: options == null ? void 0 : options.style }); + this.subsupPlacement = "auto"; + } + get children() { + if (!this._children) { + const result = []; + const sub = this.branch("subscript"); + if (sub) { + for (const x of sub) { + result.push(...x.children); + result.push(x); + } + } + const sup = this.branch("superscript"); + if (sup) { + for (const x of sup) { + result.push(...x.children); + result.push(x); + } + } + this._children = result; + } + return this._children; + } + static fromJson(json) { + const result = new _SubsupAtom(json); + for (const branch of NAMED_BRANCHES) + if (json[branch]) result.setChildren(json[branch], branch); + return result; + } + render(context) { + var _a3; + const phantomCtx = new Context({ parent: context, isPhantom: true }); + const leftSibling = this.leftSibling; + const base = (_a3 = leftSibling.render(phantomCtx)) != null ? _a3 : new Box(null); + const phantom = new Box(null); + phantom.height = base.height; + phantom.depth = base.depth; + return this.attachSupsub(context, { + base: phantom, + isCharacterBox: leftSibling.isCharacterBox(), + // Set to 'ignore' so that it is ignored during inter-box spacing + // adjustment. + type: "ignore" + }); + } + _serialize(options) { + return this.supsubToLatex(options); + } + }; + + // src/core/parser.ts + var FREE_TEXT_TAB_MARKER = "\uE000"; + function isLiteral(token) { + if (!token) return false; + return !/^(<$$>|<$>||<{>|<}>|#[0-9\?]|\\.+)$/.test(token); + } + var Parser = class { + /** + * @param tokens - An array of tokens generated by the lexer. + * + * Note: smartFence and registers are usually defined by the GloablContext. + * However, in some cases they need to be overridden. + * + */ + constructor(tokens, context, options) { + // Accumulated errors encountered while parsing + this.errors = []; + // The current token to be parsed: index in `this.tokens` + this.index = 0; + // Counter to prevent deadlock. If `end()` is called too many + // times (1,000) in a row for the same token, bail. + this.endCount = 0; + var _a3, _b3, _c2, _d2; + options != null ? options : options = {}; + this.tokens = tokens; + this.context = context instanceof Context && !(options == null ? void 0 : options.parseMode) && !options.mathstyle ? context : new Context( + { from: context, mathstyle: options.mathstyle }, + options.style + ); + this.args = (_a3 = options.args) != null ? _a3 : void 0; + this.smartFence = this.context.smartFence; + this.parsingContext = { + parent: void 0, + mathlist: [], + style: (_b3 = options.style) != null ? _b3 : {}, + // Free-text has the text parser semantics. Free-math has the ordinary + // math parser semantics; both distinctions are editor/layout modes. + parseMode: options.parseMode === "free-text" ? "text" : options.parseMode === "free-math" ? "math" : (_c2 = options.parseMode) != null ? _c2 : "math", + mathstyle: (_d2 = options.mathstyle) != null ? _d2 : "displaystyle", + tabular: false + }; + } + beginContext(options) { + var _a3, _b3, _c2, _d2, _e, _f; + if (options == null ? void 0 : options.root) { + this.parsingContext = { + parent: this.parsingContext.parent, + mathlist: [], + style: {}, + parseMode: (_a3 = options == null ? void 0 : options.mode) != null ? _a3 : "math", + mathstyle: (_b3 = options == null ? void 0 : options.mathstyle) != null ? _b3 : "displaystyle", + tabular: (_c2 = options == null ? void 0 : options.tabular) != null ? _c2 : false + }; + return; + } + const current = this.parsingContext; + const newContext = { + parent: current, + mathlist: [], + style: __spreadValues({}, current.style), + parseMode: (_d2 = options == null ? void 0 : options.mode) != null ? _d2 : current.parseMode, + mathstyle: (_e = options == null ? void 0 : options.mathstyle) != null ? _e : current.mathstyle, + tabular: (_f = options == null ? void 0 : options.tabular) != null ? _f : false + }; + this.parsingContext = newContext; + } + endContext() { + this.parsingContext = this.parsingContext.parent; + } + onError(err) { + this.errors.push(__spreadValues({ + before: tokensToString(this.tokens.slice(this.index, this.index + 10)), + after: tokensToString( + this.tokens.slice(Math.max(0, this.index - 10), this.index) + ) + }, err)); + } + get mathlist() { + return this.parsingContext.mathlist; + } + set mathlist(value) { + this.parsingContext.mathlist = value; + } + get parseMode() { + return this.parsingContext.parseMode; + } + set parseMode(value) { + this.parsingContext.parseMode = value; + } + get tabularMode() { + return this.parsingContext.tabular; + } + get style() { + let context = this.parsingContext; + while (context) { + if (context.style) return __spreadValues({}, context.style); + context = context.parent; + } + return {}; + } + set style(value) { + this.parsingContext.style = value; + } + /** + * True if we've reached the end of the token stream + */ + end() { + this.endCount++; + return this.index >= this.tokens.length || this.endCount > 1e3; + } + next() { + this.index += 1; + } + get() { + this.endCount = 0; + return this.index < this.tokens.length ? this.tokens[this.index++] : ""; + } + peek() { + return this.tokens[this.index]; + } + // If the next token is a Unicode character such as ² or ℂ, + // expand it with an equivalent LaTeX command. + expandUnicode() { + if (!this.peek()) return; + if (this.parseMode !== "math") return; + const latex = codePointToLatex(this.peek()); + if (latex) this.tokens.splice(this.index, 1, ...tokenize(latex)); + } + /** + * @return True if the next token matches the input, and advance + */ + match(input) { + if (this.tokens[this.index] === input) { + this.index++; + return true; + } + return false; + } + /** + * Return the last atom in the mathlisst that can have a + * subscript/superscript attached to it. + * If there isn't one, insert a `SubsupAtom` and return it. + */ + lastSubsupAtom() { + let atom; + if (this.mathlist.length > 0) { + atom = this.mathlist[this.mathlist.length - 1]; + if (atom.type === "subsup") return atom; + if (atom.subsupPlacement !== void 0) return atom; + } + atom = new SubsupAtom({ style: this.style }); + this.mathlist.push(atom); + return atom; + } + /** + * @return True if the next token matches the specified regular expression pattern. + */ + hasPattern(pattern) { + return pattern.test(this.tokens[this.index]); + } + hasInfixCommand() { + var _a3; + const { index } = this; + if (index < this.tokens.length && this.tokens[index].startsWith("\\")) { + const info = getDefinition(this.tokens[index], this.parseMode); + if (!info || info.definitionType === "symbol") return false; + if (info.ifMode && !info.ifMode.includes(this.parseMode)) return false; + return (_a3 = info.infix) != null ? _a3 : false; + } + return false; + } + matchColumnSeparator() { + if (!this.tabularMode) return false; + const peek = this.peek(); + if (peek !== "&") return false; + this.index++; + return true; + } + matchRowSeparator() { + if (!this.tabularMode) return false; + const peek = this.peek(); + if (peek !== "\\\\" && peek !== "\\cr" && peek !== "\\tabularnewline") + return false; + this.index++; + return true; + } + /** + * Return the appropriate value for a placeholder, either a default + * one, or if a value was provided for #? via args, that value. + */ + placeholder() { + var _a3; + const placeHolderArg = (_a3 = this.args) == null ? void 0 : _a3.call(this, "?"); + if (!placeHolderArg) + return [new PlaceholderAtom({ mode: this.parseMode, style: this.style })]; + return parseLatex(placeHolderArg, { + parseMode: this.parseMode, + mathstyle: "textstyle" + }); + } + skipWhitespace() { + while (this.match("")) { + } + } + skipUntilToken(input) { + let token = this.tokens[this.index]; + while (token && token !== input) token = this.tokens[++this.index]; + if (token === input) this.index++; + } + skipFiller() { + while (this.match("\\relax") || this.match("")) { + } + } + /** + * Keywords are used to specify dimensions, and for various other + * syntactic constructs. + * + * Unlike commands, they are not case sensitive. + * + * There are 25 keywords: + * + * at by bp cc cm dd depth em ex fil fill filll height in minus + * mm mu pc plus pt sp spread to true width + * + * TeX: 8212 + * @return true if the expected keyword is present + */ + matchKeyword(keyword) { + const savedIndex = this.index; + let done = this.end(); + let value = ""; + while (!done) { + const token = this.get(); + if (isLiteral(token)) { + value += token; + done = this.end() || value.length >= keyword.length; + } else done = true; + } + const hasKeyword = keyword.toUpperCase() === value.toUpperCase(); + if (!hasKeyword) this.index = savedIndex; + return hasKeyword; + } + /** + * Return a sequence of characters as a string. + * i.e. 'abcd' returns 'abcd'. + * Terminates on the first non-literal token encountered + * e.g. '<{>', '<}>' etc... + * Will also terminate on character literal ']' + */ + scanString() { + let result = ""; + while (!this.end()) { + const token = this.peek(); + if (token === "]") return result; + if (token === "") result += " "; + else if (token.startsWith("\\")) { + this.onError({ code: "unexpected-command-in-string" }); + result += token.substring(1); + } else if (isLiteral(token)) result += token; + else { + return result; + } + this.next(); + } + return result; + } + /** + * Return a sequence of characters as a string. + * Terminates on a balanced closing bracket + * This is used by the `\ce` command + */ + scanBalancedString() { + let result = ""; + let done = this.end(); + let level = 1; + while (!done) { + const token = this.get(); + if (token === "") result += " "; + else if (token === "<{>") { + result += "{"; + level += 1; + } else if (token === "<}>") { + level -= 1; + if (level > 0) result += "}"; + else this.index -= 1; + } else if (token === "<$>") result += "$"; + else if (token === "<$$>") result += "$$"; + else result += token; + done = level === 0 || this.end(); + } + return result; + } + /** + * Return the literal tokens, as a string, until a matching closing "}" + * Used when handling macros + */ + scanLiteralGroup() { + var _a3; + if (!this.match("<{>")) return ""; + let result = ""; + let level = 1; + while (level > 0 && !this.end()) { + const token = this.get(); + if (token === "<}>") { + level -= 1; + if (level > 0) result += "}"; + } else if (token === "<{>") { + level += 1; + result += "{"; + } else { + if (/\\[a-zA-Z]+$/.test(result) && /^[a-zA-Z]/.test(token)) + result += " "; + result += (_a3 = { + "": " ", + "<$$>": "$$", + "<$>": "$" + }[token]) != null ? _a3 : token; + } + } + return result; + } + /** + * Return as a number a group of characters representing a + * numerical quantity. + * + * From TeX:8695 (scan_int): + * > An integer number can be preceded by any number of spaces and `+' or + * > `-' signs. Then comes either a decimal constant (i.e., radix 10), an + * > octal constant (i.e., radix 8, preceded by '), a hexadecimal constant + * > (radix 16, preceded by "), an alphabetic constant (preceded by `), or + * > an internal variable. + */ + scanNumber(isInteger = true) { + var _a3, _b3; + let negative = false; + let token = this.peek(); + while (token === "" || token === "+" || token === "-") { + this.get(); + if (token === "-") negative = !negative; + token = this.peek(); + } + isInteger = Boolean(isInteger); + let radix = 10; + let digits = /\d/; + if (this.match("'")) { + radix = 8; + digits = /[0-7]/; + isInteger = true; + } else if (this.match('"')) { + radix = 16; + digits = /[\dA-F]/; + isInteger = true; + } else if (this.match("x")) { + radix = 16; + digits = /[\dA-Fa-f]/; + isInteger = true; + } else if (this.match("`")) { + token = this.get(); + if (token) { + if (token.length === 2 && token.startsWith("\\")) { + return { + number: (negative ? -1 : 1) * ((_a3 = token.codePointAt(1)) != null ? _a3 : 0), + base: "alpha" + }; + } + return { + number: (negative ? -1 : 1) * ((_b3 = token.codePointAt(0)) != null ? _b3 : 0), + base: "alpha" + }; + } + return null; + } + let value = ""; + while (this.hasPattern(digits)) value += this.get(); + if (!isInteger && (this.match(".") || this.match(","))) { + value += "."; + while (this.hasPattern(digits)) value += this.get(); + } + const result = isInteger ? Number.parseInt(value, radix) : Number.parseFloat(value); + if (Number.isNaN(result)) return null; + return { + number: negative ? -result : result, + base: radix === 16 ? "hexadecimal" : radix === 8 ? "octal" : "decimal" + }; + } + scanRegister() { + var _a3; + const index = this.index; + const number = this.scanNumber(false); + this.skipWhitespace(); + if (this.match("\\relax")) return number; + let negative = false; + if (number === null) { + while (true) { + const s = this.peek(); + if (s === "-") negative = !negative; + else if (s !== "+") break; + this.next(); + this.skipWhitespace(); + } + } + if (this.match("\\global")) { + this.skipWhitespace(); + const register4 = this.get(); + if (register4.startsWith("\\")) { + if (number) { + return { + register: register4, + global: true, + factor: (negative ? -1 : 1) * number.number + }; + } + if (negative) return { register: register4, global: true, factor: -1 }; + return { register: register4, global: true }; + } + this.index = index; + return null; + } + let register3 = this.get(); + if (!(register3 == null ? void 0 : register3.startsWith("\\"))) { + this.index = index; + return null; + } + register3 = register3.substring(1); + if (!this.context.registers[register3]) { + this.index = index; + return null; + } + if (!negative || number !== null) { + return { + register: register3, + factor: (negative ? -1 : 1) * ((_a3 = number == null ? void 0 : number.number) != null ? _a3 : 1) + }; + } + return { register: register3 }; + } + scanValue() { + const register3 = this.scanRegister(); + if (register3) return register3; + const index = this.index; + const glue = this.scanGlueOrDimen(); + if (glue && ("unit" in glue || "glue" in glue && "unit" in glue.glue)) + return glue; + this.index = index; + const number = this.scanNumber(); + if (number) return number; + if (this.end() || !isLiteral(this.peek())) return null; + const s = this.scanString(); + if (s.length > 0) return { string: s }; + return null; + } + /** + * Return a dimension + * + * See TeX:8831 + */ + scanDimen() { + const value = this.scanNumber(false); + if (value === null) return null; + const dimension = value.number; + this.skipWhitespace(); + this.matchKeyword("true"); + this.skipWhitespace(); + let unit; + if (this.matchKeyword("pt")) unit = "pt"; + else if (this.matchKeyword("mm")) unit = "mm"; + else if (this.matchKeyword("cm")) unit = "cm"; + else if (this.matchKeyword("ex")) unit = "ex"; + else if (this.matchKeyword("px")) unit = "px"; + else if (this.matchKeyword("em")) unit = "em"; + else if (this.matchKeyword("bp")) unit = "bp"; + else if (this.matchKeyword("dd")) unit = "dd"; + else if (this.matchKeyword("pc")) unit = "pc"; + else if (this.matchKeyword("in")) unit = "in"; + else if (this.matchKeyword("mu")) unit = "mu"; + return unit ? { dimension, unit } : { dimension }; + } + scanGlueOrDimen() { + const dimen = this.scanDimen(); + if (dimen === null) return null; + this.skipWhitespace(); + if (this.match("\\relax")) return dimen; + const result = { glue: dimen }; + if (this.matchKeyword("plus")) { + const grow = this.scanDimen(); + if (grow) result.grow = grow; + else return result; + } + this.skipWhitespace(); + if (this.match("\\relax")) return result; + this.skipWhitespace(); + if (this.matchKeyword("minus")) { + const shrink = this.scanDimen(); + if (shrink) result.shrink = shrink; + else return result; + } + if (!result.grow && !result.shrink) return dimen; + return result; + } + scanColspec() { + this.skipWhitespace(); + const result = []; + while (!this.end() && !(this.peek() === "<}>" || this.peek() === "]")) { + const literal = this.get(); + if (literal === "c" || literal === "r" || literal === "l") + result.push({ align: literal }); + else if (literal === "|") result.push({ separator: "solid" }); + else if (literal === ":") result.push({ separator: "dashed" }); + else if (literal === "@") { + if (this.match("<{>")) { + this.beginContext({ mode: "math" }); + result.push({ + gap: this.scan((token) => token === "<}>") + }); + this.endContext(); + } + if (!this.match("<}>")) this.onError({ code: "unbalanced-braces" }); + } + } + return result; + } + /** + * Scan a `\(...\)` or `\[...\]` sequence + * @return group for the sequence or null + */ + scanModeSet() { + let mathstyle = void 0; + if (this.match("\\(")) mathstyle = "textstyle"; + if (!mathstyle && this.match("\\[")) mathstyle = "displaystyle"; + if (!mathstyle) return null; + this.beginContext({ mode: "math", mathstyle }); + const result = this.scan( + (token) => token === (mathstyle === "displaystyle" ? "\\]" : "\\)") + ); + if (!this.match(mathstyle === "displaystyle" ? "\\]" : "\\)")) + this.onError({ code: "unbalanced-mode-shift" }); + this.endContext(); + return result; + } + /** + * Scan a `$...$` or `$$...$$` sequence + */ + scanModeShift() { + let final = ""; + if (this.match("<$>")) final = "<$>"; + if (!final && this.match("<$$>")) final = "<$$>"; + if (!final) return null; + this.beginContext({ + mode: "math", + mathstyle: final === "<$>" ? "textstyle" : "displaystyle" + }); + const result = this.scan((token) => token === final); + if (!this.match(final)) this.onError({ code: "unbalanced-mode-shift" }); + this.endContext(); + return result; + } + /** + * Scan a \begin{env}...\end{end} sequence + */ + scanEnvironment() { + if (!this.match("\\begin")) return null; + const envName = this.scanArgument("string"); + if (!envName) return null; + const def = getEnvironmentDefinition(envName); + if (!def) { + this.onError({ + code: "unknown-environment", + arg: envName + }); + return null; + } + const args = []; + if (def.params) { + for (const parameter of def.params) { + if (parameter.isOptional) { + args.push(this.scanOptionalArgument(parameter.type)); + } else { + const arg = this.scanArgument(parameter.type); + if (!arg) this.onError({ code: "missing-argument", arg: envName }); + args.push(arg); + } + } + } + this.beginContext({ tabular: def.tabular, root: def.rootOnly }); + const array = []; + const rowGaps = []; + let row = []; + let done = false; + do { + if (this.end()) { + this.onError({ code: "unbalanced-environment", arg: envName }); + done = true; + } + if (!done && this.match("\\end")) { + if (this.scanArgument("string") !== envName) { + this.onError({ + code: "unbalanced-environment", + arg: envName + }); + } + done = true; + } + if (!done) { + if (this.matchColumnSeparator()) { + row.push(this.mathlist); + this.mathlist = []; + } else if (this.matchRowSeparator()) { + row.push(this.mathlist); + this.mathlist = []; + let gap = null; + this.skipWhitespace(); + if (this.match("[")) { + gap = this.scanDimen(); + this.skipWhitespace(); + this.match("]"); + } + rowGaps.push(gap != null ? gap : { dimension: 0 }); + array.push(row); + row = []; + } else { + this.mathlist.push( + ...this.scan( + (token) => [ + "<}>", + "&", + "\\end", + "\\cr", + "\\\\", + "\\tabularnewline" + ].includes(token) + ) + ); + } + } + } while (!done); + row.push(this.mathlist); + if (row.length > 0) array.push(row); + this.endContext(); + if (def.rootOnly) this.index = this.tokens.length; + return def.createAtom( + envName, + array, + rowGaps, + args, + this.context.maxMatrixCols + ); + } + /** + * Parse an expression: a literal, or a command and its arguments + */ + scanExpression() { + const savedList = this.mathlist; + this.mathlist = []; + if (this.parseExpression()) { + const result = this.mathlist; + this.mathlist = savedList; + return result; + } + this.mathlist = savedList; + return null; + } + /** + * Parse a sequence until a group end marker, such as `}`, `\end`, `&`, etc... + * + * Returns an array of atoms or an empty array if the sequence terminates + * right away. + * + * @param done - A predicate indicating if a token signals the end of a + * group + */ + scan(done) { + this.beginContext(); + if (!done) done = (token) => token === "<}>"; + let infix = ""; + let infixInfo = null; + let infixArgs = []; + let prefix = null; + while (!this.end() && !done(this.peek())) { + if (this.hasInfixCommand() && !infix) { + infix = this.get(); + infixInfo = getDefinition(infix, "math"); + if (infixInfo) infixArgs = this.scanArguments(infixInfo)[1]; + prefix = this.mathlist; + this.mathlist = []; + } else this.parseExpression(); + } + let result; + if (infix) { + console.assert(Boolean(infixInfo)); + infixArgs.unshift(this.mathlist); + if (prefix) infixArgs.unshift(prefix); + result = [ + infixInfo.createAtom({ + command: infix, + args: infixArgs, + style: this.style, + mode: this.parseMode + }) + ]; + } else result = this.mathlist; + this.endContext(); + return result; + } + /** + * Parse a group enclosed in a pair of braces: `{...}`. + * + * Return either a group Atom or null if not a group. + * + * Return a group Atom with an empty body if an empty + * group (i.e. `{}`). + * + * If the group only contains a placeholder, return a placeholder, + */ + scanGroup() { + const initialIndex = this.index; + if (!this.match("<{>")) return null; + const body = this.scan((token) => token === "<}>"); + if (!this.match("<}>")) this.onError({ code: "unbalanced-braces" }); + if (body.length === 1 && body[0].type === "placeholder") return body[0]; + const result = new GroupAtom(body, this.parseMode); + result.verbatimLatex = tokensToString( + this.tokens.slice(initialIndex, this.index) + ); + return result; + } + scanSmartFence() { + this.skipWhitespace(); + if (!this.match("(")) return null; + this.beginContext(); + let nestLevel = 1; + while (!this.end() && nestLevel !== 0) { + if (this.match("(")) nestLevel += 1; + if (this.match(")")) nestLevel -= 1; + if (nestLevel !== 0) this.parseExpression(); + } + const result = new LeftRightAtom("", this.mathlist, { + leftDelim: "(", + rightDelim: nestLevel === 0 ? ")" : "?" + }); + this.endContext(); + return result; + } + /** + * Scan a delimiter, e.g. '(', '|', '\vert', '\ulcorner' + * + * @return The delimiter (as a character or command) or null + */ + scanDelim() { + this.skipWhitespace(); + const token = this.peek(); + if (!token) { + this.onError({ code: "unexpected-end-of-string" }); + return null; + } + if (!isLiteral(token) && !token.startsWith("\\")) return null; + this.next(); + const info = getDefinition(token, "math"); + if (!info) { + this.onError({ code: "unknown-command", arg: token }); + return null; + } + if (info.definitionType === "function" && info.ifMode && !info.ifMode.includes(this.parseMode)) { + this.onError({ code: "unexpected-delimiter", arg: token }); + return null; + } + if (info.definitionType === "symbol" && (info.type === "mopen" || info.type === "mclose")) + return token; + if (/^(\.|\?|\||<|>|\\vert|\\Vert|\\\||\\surd|\\uparrow|\\downarrow|\\Uparrow|\\Downarrow|\\updownarrow|\\Updownarrow|\\mid|\\mvert|\\mVert)$/.test( + token + )) + return token; + this.onError({ code: "unexpected-delimiter", arg: token }); + return null; + } + /** + * Parse a `/left.../right` sequence. + * + * Note: the `/middle` command can occur multiple times inside a + * `/left.../right` sequence, and is handled separately. + * + * Return either an atom of type `"leftright"` or null + */ + scanLeftRight() { + var _a3; + if (this.match("\\right")) { + this.onError({ code: "unbalanced-braces" }); + return new ErrorAtom("\\right"); + } + if (this.match("\\mright")) { + this.onError({ code: "unbalanced-braces" }); + return new ErrorAtom("\\mright"); + } + let close = "\\right"; + if (!this.match("\\left")) { + if (!this.match("\\mleft")) return null; + close = "\\mright"; + } + const leftDelim = this.scanDelim(); + if (!leftDelim) { + this.onError({ code: "unexpected-delimiter" }); + return new ErrorAtom(close === "\\right" ? "\\left" : "\\mleft"); + } + this.beginContext(); + while (!this.end() && !this.match(close)) this.parseExpression(); + const body = this.mathlist; + this.endContext(); + const rightDelim = (_a3 = this.scanDelim()) != null ? _a3 : "."; + return new LeftRightAtom( + close === "\\right" ? "left...right" : "mleft...mright", + body, + { + leftDelim, + rightDelim, + style: this.style + } + ); + } + /** + * Parse a subscript/superscript: `^` and `_`. + * + * Modify the last atom accordingly, or create a new 'subsup' carrier. + * + */ + parseSupSub() { + if (this.parseMode !== "math") return false; + let token = this.peek(); + if (token !== "^" && token !== "_" && token !== "'") return false; + const target = this.lastSubsupAtom(); + while (token === "^" || token === "_" || token === "'") { + if (this.match("'")) { + if (this.match("'")) { + target.addChild( + new Atom({ + type: "mord", + command: "\\doubleprime", + mode: "math", + value: "\u2032\u2032" + // "\u2033" displays too high + }), + "superscript" + ); + } else { + target.addChild( + new Atom({ + type: "mord", + command: "\\prime", + mode: "math", + value: "\u2032" + }), + "superscript" + ); + } + } else if (this.match("^") || this.match("_")) { + target.addChildren( + argAtoms(this.scanArgument("expression")), + token === "_" ? "subscript" : "superscript" + ); + } + token = this.peek(); + } + return true; + } + /** + * Parse a `\limits` or `\nolimits` command. + * + * This will change the placement of limits to be either above or below + * (if `\limits`) or in the superscript/subscript position (if `\nolimits`). + * + * This overrides the calculation made for the placement, which is usually + * dependent on the displaystyle (`textstyle` prefers `\nolimits`, while + * `displaystyle` prefers `\limits`). + */ + parseLimits() { + if (this.parseMode !== "math") return false; + const isLimits = this.match("\\limits"); + const isNoLimits = !isLimits && this.match("\\nolimits"); + const isDisplayLimits = !isNoLimits && !isLimits && this.match("\\displaylimits"); + if (!isLimits && !isNoLimits && !isDisplayLimits) return false; + const opAtom = this.mathlist.length > 0 ? this.mathlist[this.mathlist.length - 1] : null; + if (opAtom === null) return false; + opAtom.explicitSubsupPlacement = true; + if (isLimits) opAtom.subsupPlacement = "over-under"; + if (isNoLimits) opAtom.subsupPlacement = "adjacent"; + if (isDisplayLimits) opAtom.subsupPlacement = "auto"; + return true; + } + scanArguments(info) { + if (!(info == null ? void 0 : info.params)) return [void 0, []]; + let deferredArg = void 0; + const args = []; + let i = info.infix ? 2 : 0; + while (i < info.params.length) { + const parameter = info.params[i]; + if (parameter.type === "rest") { + args.push( + this.scan( + (token) => [ + "<}>", + "&", + "\\end", + "\\cr", + "\\\\", + "\\tabularnewline", + "\\right" + ].includes(token) + ) + ); + } else if (parameter.isOptional) + args.push(this.scanOptionalArgument(parameter.type)); + else if (parameter.type.endsWith("*")) { + deferredArg = parameter.type.slice(0, -1); + } else args.push(this.scanArgument(parameter.type)); + i += 1; + } + return [deferredArg, args]; + } + /** + * This function is similar to `scanSymbolOrCommand` but is is invoked + * from a context where commands with arguments are not allowed, specifically + * when parsing an unbraced argument, i.e. `\frac1\alpha`. + * + */ + scanSymbolOrLiteral() { + const token = this.peek(); + if (!token) return null; + this.next(); + let result; + if (isLiteral(token)) { + if (token === FREE_TEXT_TAB_MARKER) { + return [new TextAtom(token, " ", this.style)]; + } + const result2 = Mode.createAtom(this.parseMode, token, __spreadValues({}, this.style)); + return result2 ? [result2] : null; + } + result = this.scanMacro(token); + if (result) return [result]; + if (token.startsWith("\\")) { + const def = getDefinition(token, this.parseMode); + if (!def) { + this.onError({ code: "unknown-command", arg: token }); + return [new ErrorAtom(token)]; + } + if (def.definitionType === "symbol") { + const style = __spreadValues({}, this.style); + if (def.variant) style.variant = def.variant; + result = new Atom({ + type: def.type, + command: token, + style, + value: String.fromCodePoint(def.codepoint), + mode: this.parseMode, + verbatimLatex: token + }); + } else if (def.applyMode || def.applyStyle || def.infix) { + this.onError({ code: "invalid-command", arg: token }); + return [new ErrorAtom(token)]; + } else if (def.createAtom) { + result = def.createAtom({ + command: token, + args: [], + style: this.style, + mode: this.parseMode + }); + } + } + return result ? [result] : null; + } + scanArgument(type) { + var _a3; + this.skipFiller(); + const mode = this.parseMode; + if (type === "auto") type = mode; + if (!this.match("<{>")) { + if (type === "string") return this.scanString(); + if (type === "value") return this.scanValue(); + if (type === "delim") return (_a3 = this.scanDelim()) != null ? _a3 : "."; + if (type === "expression") return this.scanExpression(); + if (type === "math") { + if (type !== mode) this.beginContext({ mode: "math" }); + const result2 = this.scanSymbolOrLiteral(); + if (type !== mode) this.endContext(); + return result2; + } + if (type === "text") { + if (type !== mode) this.beginContext({ mode: "text" }); + const result2 = this.scanSymbolOrLiteral(); + if (type !== mode) this.endContext(); + return result2; + } + if (type === "balanced-string") return null; + if (type === "rest") { + return this.scan( + (token) => [ + "<}>", + "&", + "\\end", + "\\cr", + "\\\\", + "\\tabularnewline", + "\\right" + ].includes(token) + ); + } + console.assert(false); + return null; + } + if (type === "text") { + this.beginContext({ mode: "text" }); + do + this.mathlist.push(...this.scan()); + while (!this.match("<}>") && !this.end()); + const atoms = this.mathlist; + this.endContext(); + return { group: atoms }; + } + if (type === "math") { + this.beginContext({ mode: "math" }); + do + this.mathlist.push(...this.scan()); + while (!this.match("<}>") && !this.end()); + const atoms = this.mathlist; + this.endContext(); + return { group: atoms }; + } + if (type === "rest") { + const atoms = this.scan(); + if (!this.match("<}>")) this.onError({ code: "unbalanced-braces" }); + return { group: atoms }; + } + let result = null; + if (type === "expression") { + this.beginContext({ mode: "math" }); + do + this.mathlist.push(...this.scan()); + while (!this.match("<}>") && !this.end()); + const atoms = this.mathlist; + this.endContext(); + return { group: atoms }; + } + if (type === "string") result = this.scanString(); + else if (type === "balanced-string") result = this.scanBalancedString(); + else if (type === "colspec") result = this.scanColspec(); + else if (type === "value") result = this.scanValue(); + this.skipUntilToken("<}>"); + return result; + } + scanOptionalArgument(argType) { + argType = argType === "auto" ? this.parseMode : argType; + this.skipFiller(); + if (!this.match("[")) return null; + let result = null; + while (!this.end() && !this.match("]")) { + if (argType === "string") result = this.scanString(); + else if (argType === "value") result = this.scanValue(); + else if (argType === "colspec") result = this.scanColspec(); + else if (argType === "bbox") { + const bboxParameter = {}; + const list = this.scanString().toLowerCase().trim().split(/,(?![^(]*\)(?:(?:[^(]*\)){2})*[^"]*$)/); + for (const element of list) { + const m = element.match(/^\s*([\d.]+)\s*([a-z]{2})/); + if (m) { + bboxParameter.padding = { + dimension: Number.parseFloat(m[1]), + unit: m[2] + }; + } else { + const m2 = element.match(/^\s*border\s*:\s*(.*)/); + if (m2) bboxParameter.border = m2[1]; + else bboxParameter.backgroundcolor = { string: element }; + } + } + result = bboxParameter; + } else if (argType === "math") { + this.beginContext({ mode: "math" }); + result = this.mathlist.concat(this.scan((token) => token === "]")); + this.endContext(); + } + } + return result; + } + /** Parse a symbol or a command and its arguments + * See also `scanSymbolOrLiteral` which is invoked from a context where + * commands with arguments are not allowed, specifically when parsing an + * unbraced argument, i.e. `\frac1\alpha`. + */ + scanSymbolOrCommand(command) { + var _a3, _b3, _c2; + if (command === "\\placeholder") { + const id = this.scanOptionalArgument("string"); + const defaultValue = this.scanOptionalArgument("math"); + const defaultAsString = Atom.serialize(defaultValue, { + defaultMode: "math" + }); + let defaultAtoms = []; + let correctness; + if (!correctness && defaultAsString === "correct") + correctness = "correct"; + else if (!correctness && defaultAsString === "incorrect") + correctness = "incorrect"; + else if (defaultAsString !== "") defaultAtoms = defaultValue; + const locked = this.scanOptionalArgument("string") === "locked"; + const value = this.scanArgument("auto"); + let body; + if (value && Array.isArray(value) && value.length > 0) body = value; + else if (value && typeof value === "object" && "group" in value) + body = value.group; + else body = defaultAtoms; + if (id) { + return [ + new PromptAtom(id, correctness, locked, body != null ? body : defaultAtoms, { + mode: this.parseMode, + style: this.style + }) + ]; + } + return [new PlaceholderAtom({ mode: this.parseMode, style: this.style })]; + } + if (command === "\\renewcommand" || command === "\\newcommand" || command === "\\providecommand" || command === "\\def") { + const index = this.index; + const cmd = this.scanLiteralGroup() || this.next(); + if (!cmd) return null; + if (this.context.registers[cmd.substring(1)]) { + const value = this.scanArgument("string"); + if (value !== null) this.context.registers[cmd.substring(1)] = value; + const verbatimLatex = joinLatex([ + command, + tokensToString(this.tokens.slice(index, this.index)) + ]); + return [new Atom({ type: "text", value: "", verbatimLatex })]; + } + } + let result = this.scanMacro(command); + if (result) return [result]; + const info = getDefinition(command, this.parseMode); + if (!info) { + if (this.parseMode === "text") { + if (/[a-zA-Z]/.test((_a3 = this.peek()) != null ? _a3 : "")) { + command += " "; + } + return [...command].map( + (c) => new Atom({ + type: "text", + value: c, + mode: "text", + style: this.style + }) + ); + } + this.onError({ code: "unknown-command", arg: command }); + return [new ErrorAtom(command)]; + } + const initialIndex = this.index; + if (info.definitionType === "symbol") { + const style = __spreadValues({}, this.style); + if (info.variant) style.variant = info.variant; + result = new Atom({ + type: info.type, + command, + style, + value: String.fromCodePoint(info.codepoint), + mode: this.parseMode + }); + } else { + if (info.ifMode && !info.ifMode.includes(this.parseMode)) { + return []; + } + const savedMode = this.parseMode; + if (info.applyMode) this.parseMode = info.applyMode; + let deferredArg = void 0; + let args = []; + if (info.parse) args = info.parse(this); + else [deferredArg, args] = this.scanArguments(info); + this.parseMode = savedMode; + if (info.applyMode && !info.applyStyle && !info.createAtom) + return argAtoms(args[0]); + if (info.infix) { + this.onError({ + code: "too-many-infix-commands", + arg: command + }); + return null; + } + if (typeof info.createAtom === "function") { + result = info.createAtom({ + command, + args, + style: this.style, + mode: this.parseMode + }); + if (deferredArg) + result.body = argAtoms(this.scanArgument(deferredArg)); + } else if (typeof info.applyStyle === "function") { + const style = info.applyStyle(this.style, command, args, this.context); + const savedMode2 = this.parseMode; + if (info.applyMode) this.parseMode = info.applyMode; + if (deferredArg) { + const saveStyle = this.style; + this.style = style; + const atoms = this.scanArgument(deferredArg); + this.style = saveStyle; + this.parseMode = savedMode2; + return argAtoms(atoms); + } + this.style = style; + } else { + result = new Atom({ + type: "mord", + command: (_b3 = info.command) != null ? _b3 : command, + style: __spreadValues({}, this.style), + value: command, + mode: (_c2 = info.applyMode) != null ? _c2 : this.parseMode + }); + } + } + if (!result) return null; + if (result instanceof Atom && result.verbatimLatex === void 0 && !/^\\(llap|rlap|class|cssId|htmlData)$/.test(command)) { + const verbatim = joinLatex([ + command, + tokensToString(this.tokens.slice(initialIndex, this.index)) + ]); + if (verbatim) result.verbatimLatex = verbatim; + } + if (result.verbatimLatex === null) result.verbatimLatex = void 0; + if (result.isFunction && this.smartFence) { + const smartFence = this.scanSmartFence(); + if (smartFence) return [result, smartFence]; + } + return [result]; + } + scanSymbolCommandOrLiteral() { + this.expandUnicode(); + const token = this.get(); + if (!token) return null; + if (isLiteral(token)) { + const result = Mode.createAtom(this.parseMode, token, __spreadValues({}, this.style)); + if (!result) return null; + if (result.isFunction && this.smartFence) { + const smartFence = this.scanSmartFence(); + if (smartFence) return [result, smartFence]; + } + return [result]; + } + if (token.startsWith("\\")) return this.scanSymbolOrCommand(token); + if (token === "") { + if (this.parseMode === "text") + return [new TextAtom(" ", " ", this.style)]; + return null; + } + if (token === "<}>") this.onError({ latex: "", code: "unbalanced-braces" }); + else { + this.onError({ + latex: "", + code: "unexpected-token", + arg: token + }); + } + return null; + } + /** + * Scan the macro name and its arguments and return a macro atom + */ + scanMacro(macro) { + var _a3; + const def = this.context.getMacro(macro); + if (!def) return null; + const initialIndex = this.index; + const argCount = def.args; + const args = { "?": (_a3 = this.args) == null ? void 0 : _a3.call(this, "?") }; + for (let i = 1; i <= argCount; i++) { + let arg = this.scanLiteralGroup(); + if (!arg) { + const index = this.index; + this.scanExpression(); + arg = tokensToString(this.tokens.slice(index, this.index)); + } + args[i] = arg; + } + return new MacroAtom(macro, { + expand: def.expand, + captureSelection: def.captureSelection, + args: initialIndex === this.index ? null : tokensToString(this.tokens.slice(initialIndex, this.index)), + style: this.parsingContext.style, + body: parseLatex(def.def, { + context: this.context, + parseMode: this.parseMode, + args: (arg) => args[arg], + mathstyle: this.parsingContext.mathstyle, + style: this.parsingContext.style + }) + }); + } + /** + * Make an atom for the current token or token group and + * add it to the parser's mathlist. + * If the token is a command with arguments, will also parse the + * arguments. + */ + parseExpression() { + var _a3, _b3, _c2, _d2; + let result = (_d2 = (_c2 = (_b3 = (_a3 = this.scanEnvironment()) != null ? _a3 : this.scanModeShift()) != null ? _b3 : this.scanModeSet()) != null ? _c2 : this.scanGroup()) != null ? _d2 : this.scanLeftRight(); + if (result === null) { + if (this.parseSupSub()) return true; + if (this.parseLimits()) return true; + result = this.scanSymbolCommandOrLiteral(); + } + if (!result) return false; + if (isArray(result)) this.mathlist.push(...result); + else this.mathlist.push(result); + return true; + } + }; + function parseLatex(s, options) { + var _a3, _b3, _c2, _d2; + const args = (_a3 = options == null ? void 0 : options.args) != null ? _a3 : void 0; + const parser = new Parser(tokenize(s, args), options == null ? void 0 : options.context, { + args, + mathstyle: (_b3 = options == null ? void 0 : options.mathstyle) != null ? _b3 : "displaystyle", + parseMode: (_c2 = options == null ? void 0 : options.parseMode) != null ? _c2 : "math", + style: (_d2 = options == null ? void 0 : options.style) != null ? _d2 : {} + }); + const atoms = []; + while (!parser.end()) atoms.push(...parser.scan(() => false)); + return atoms; + } + function validateLatex(s, options) { + var _a3; + const parser = new Parser(tokenize(s, null), options == null ? void 0 : options.context, { + mathstyle: "displaystyle", + parseMode: (_a3 = options == null ? void 0 : options.parseMode) != null ? _a3 : "math" + }); + while (!parser.end()) parser.scan(); + return parser.errors; + } + + // src/editor-mathfield/free-text.ts + function makeFreeTextRoot(lines) { + return makeFreeLinesRoot(lines, "free-text"); + } + function makeFreeMathRoot(lines) { + return makeFreeLinesRoot(lines, "free-math"); + } + function makeFreeLinesRoot(lines, mode) { + return markFreeTextAnchors( + new ArrayAtom( + "lines", + lines.map((line) => [[...line]]), + [], + { + leftDelim: ".", + rightDelim: ".", + columns: [{ align: "l" }], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1 + } + ), + mode + ); + } + function markFreeTextAnchors(root, mode = "free-text") { + var _a3; + root.classes = root.classes.filter( + (className) => className !== "ML__free-text-root" && className !== "ML__free-math-root" + ); + root.classes.push( + mode === "free-text" ? "ML__free-text-root" : "ML__free-math-root" + ); + for (const row of root.rows) + for (const cell of row) + if (((_a3 = cell == null ? void 0 : cell[0]) == null ? void 0 : _a3.type) === "first") cell[0].mode = mode; + return root; + } + function isFreeLinesRoot(root) { + return root instanceof ArrayAtom && root.environmentName === "lines" && root.isRoot; + } + function isFreeTextRoot(root) { + return isFreeLinesRoot(root) && freeLinesMode(root) === "free-text"; + } + function freeLinesMode(root) { + var _a3, _b3, _c2; + const mode = (_c2 = (_b3 = (_a3 = root.rows[0]) == null ? void 0 : _a3[0]) == null ? void 0 : _b3[0]) == null ? void 0 : _c2.mode; + return mode === "free-text" || mode === "free-math" ? mode : void 0; + } + function makeFreeTextAtoms(text, style = {}) { + const graphemes = splitGraphemes(text); + const result = []; + for (const grapheme of typeof graphemes === "string" ? [...graphemes] : graphemes) + result.push(new TextAtom(grapheme, grapheme, style)); + return result; + } + function parseFreeText(value, context, style = {}) { + return value.split(/\r\n|\n|\r/).map( + (line) => parseFreeTextLine(line, context, style) + ); + } + function parseFreeTextValue(value, context) { + if (/\\displaylines|\\begin\{(?:lines|gathered|gather)\}|\$\$|\\(?:\(|\[)/.test( + value + )) { + const atoms = parseLatex(value.split(" ").join(FREE_TEXT_TAB_MARKER), { + context + }); + if (atoms.length === 1 && isFreeLinesRoot(atoms[0])) { + restoreFreeTextTabs(atoms[0]); + return markFreeTextAnchors(atoms[0]); + } + } + return makeFreeTextRoot(parseFreeText(value, context)); + } + function parseFreeMathValue(value, context) { + if (/\\displaylines|\\begin\{(?:lines|gathered|gather)\}/.test(value)) { + const atoms = parseLatex(value, { context, parseMode: "math" }); + if (atoms.length === 1 && isFreeLinesRoot(atoms[0])) + return markFreeTextAnchors(atoms[0], "free-math"); + } + return makeFreeMathRoot(parseFreeMath(value, context)); + } + function parseFreeMath(value, context, style = {}) { + return value.split(/\r\n|\n|\r/).map( + (line) => parseFreeMathLine(line, context, style) + ); + } + function parseFreeMathLine(line, context, style) { + const result = []; + const segments = line.split(" "); + for (let index = 0; index < segments.length; index++) { + if (index > 0) result.push(new TextAtom(" ", " ", style)); + if (segments[index]) { + result.push( + ...parseLatex(segments[index], { + context, + parseMode: "math", + style + }) + ); + } + } + return result; + } + function restoreFreeTextTabs(root) { + if (root instanceof TextAtom && root.value.includes(FREE_TEXT_TAB_MARKER)) { + root.value = root.value.split(FREE_TEXT_TAB_MARKER).join(" "); + if (root.verbatimLatex !== void 0) + root.verbatimLatex = root.verbatimLatex.split(FREE_TEXT_TAB_MARKER).join(" "); + } + for (const child of root.children) restoreFreeTextTabs(child); + } + function parseFreeTextLine(line, context, style) { + const result = []; + let textStart = 0; + let index = 0; + const flushText = (end) => { + if (end <= textStart) return; + result.push(...makeFreeTextAtoms(line.slice(textStart, end), style)); + }; + while (index < line.length) { + const c = line[index]; + if (c === "$") { + const end = line.indexOf("$", index + 1); + if (end > index + 1) { + const atoms = parseLatex(line.slice(index + 1, end), { + context, + style + }); + if (atoms.length > 0) { + flushText(index); + result.push(...atoms); + index = end + 1; + textStart = index; + continue; + } + } + } + if (c === "\\") { + const commandEnd = commandNameEnd(line, index); + const command = line.slice(index, commandEnd); + if (command === "\\item") { + flushText(index); + result.push(...makeFreeTextAtoms("\u2022 ", style)); + index = commandEnd; + textStart = index; + continue; + } + const definition = getDefinition(command, "math"); + if (definition) { + const end = definition.definitionType === "symbol" ? commandEnd : commandWithArgumentsEnd(line, commandEnd, definition); + if (end >= commandEnd) { + const atoms = parseLatex(line.slice(index, end), { + context, + parseMode: "math", + style + }); + if (atoms.length > 0) { + flushText(index); + result.push(...atoms); + index = end; + textStart = index; + continue; + } + } + } + } + index += 1; + } + flushText(line.length); + return result; + } + function commandNameEnd(value, start) { + if (start + 1 >= value.length) return value.length; + if (/[A-Za-z*]/.test(value[start + 1])) { + let end = start + 2; + while (end < value.length && /[A-Za-z*]/.test(value[end])) end += 1; + return end; + } + return start + 2; + } + function commandWithArgumentsEnd(value, start, definition) { + if (!definition || definition.definitionType !== "function") return start; + let index = start; + for (const parameter of definition.params) { + while (index < value.length && /[ \t]/.test(value[index])) index += 1; + if (value[index] === "[") index = balancedEnd(value, index, "[", "]"); + else if (value[index] === "{") index = balancedEnd(value, index, "{", "}"); + else if (parameter.isOptional) continue; + else if (index < value.length) index += 1; + else return start; + if (index === -1) return start; + } + return index; + } + function balancedEnd(value, start, open, close) { + let depth = 0; + for (let index = start; index < value.length; index++) { + if (value[index] === open) depth += 1; + else if (value[index] === close) { + depth -= 1; + if (depth === 0) return index + 1; + } + } + return -1; + } + + // src/editor-mathfield/mode-editor.ts + var CLIPBOARD_LATEX_BEGIN = "$$"; + var CLIPBOARD_LATEX_END = "$$"; + var defaultExportHook = (_from, latex, _range) => { + if (!MODE_SHIFT_COMMANDS.some( + (x) => latex.startsWith(x[0]) && latex.endsWith(x[1]) + )) + latex = `${CLIPBOARD_LATEX_BEGIN} ${latex} ${CLIPBOARD_LATEX_END}`; + return latex; + }; + var _ModeEditor = class _ModeEditor { + constructor(name) { + _ModeEditor._modes[name] = this; + } + static onPaste(mode, mathfield, data) { + var _a3; + if (!mathfield.contentEditable && mathfield.userSelect === "none") { + mathfield.model.announce("plonk"); + return false; + } + if (typeof data === "string") { + const dataTransfer = new DataTransfer(); + dataTransfer.setData("text/plain", data); + data = dataTransfer; + } + const redispatchedEvent = new ClipboardEvent("paste", { + clipboardData: data, + cancelable: true + }); + if (!((_a3 = mathfield.host) == null ? void 0 : _a3.dispatchEvent(redispatchedEvent))) return false; + return _ModeEditor._modes[mode].onPaste(mathfield, data); + } + /** Call this method from a menu */ + static copyToClipboard(mathfield, format) { + if (!mathfield.contentEditable && mathfield.userSelect === "none") { + mathfield.model.announce("plonk"); + return; + } + const model = mathfield.model; + const exportRange = model.selectionIsCollapsed ? [0, model.lastOffset] : range(model.selection); + const latex = model.getValue(exportRange, format); + navigator.clipboard.writeText(latex).then( + () => { + }, + () => mathfield.model.announce("plonk") + ); + } + /** Call this method in response to a clipboard event */ + static onCopy(mathfield, ev) { + var _a3; + if (!ev.clipboardData) return; + if (!mathfield.contentEditable && mathfield.userSelect === "none") { + mathfield.model.announce("plonk"); + return; + } + const model = mathfield.model; + const exportRange = model.selectionIsCollapsed ? [0, model.lastOffset] : range(model.selection); + if ((mathfield.options.defaultMode === "free-text" || mathfield.options.defaultMode === "free-math") && isFreeLinesRoot(model.root) && exportRange[0] === 0 && exportRange[1] === model.lastOffset) { + ev.clipboardData.setData("text/plain", model.getValue("plain-text")); + return; + } + let atoms = model.getAtoms(exportRange); + if (atoms.every((x) => x.mode === "text" || !x.mode)) { + ev.clipboardData.setData( + "text/plain", + atoms.filter((x) => x instanceof TextAtom).map((x) => x.value).join("") + ); + } else if (atoms.every((x) => x.mode === "latex")) { + ev.clipboardData.setData( + "text/plain", + model.getAtoms(exportRange, { includeChildren: true }).map((x) => { + var _a4; + return (_a4 = x.value) != null ? _a4 : ""; + }).join("") + ); + } else { + let latex; + if (atoms.length === 1 && atoms[0].verbatimLatex !== void 0) + latex = atoms[0].verbatimLatex; + else latex = model.getValue(exportRange, "latex-expanded"); + ev.clipboardData.setData("application/x-latex", latex); + try { + ev.clipboardData.setData( + "text/plain", + mathfield.options.onExport(mathfield, latex, exportRange) + ); + } catch (e) { + } + if (atoms.length === 1) { + const atom = atoms[0]; + if (atom.type === "root" || atom.type === "group") + atoms = atom.body.filter((x) => x.type !== "first"); + } + try { + ev.clipboardData.setData( + "application/json+mathlive", + JSON.stringify(atoms.map((x) => x.toJson())) + ); + } catch (e) { + } + if ((_a3 = window[Symbol.for("io.cortexjs.compute-engine")]) == null ? void 0 : _a3.ComputeEngine) { + const ce = globalThis.MathfieldElement.computeEngine; + if (ce) { + try { + const options = ce.jsonSerializationOptions; + ce.jsonSerializationOptions = { metadata: ["latex"] }; + const expr = ce.parse( + model.getValue(exportRange, "latex-unstyled") + ); + ce.jsonSerializationOptions = options; + const mathJson = JSON.stringify(expr.json); + if (mathJson) + ev.clipboardData.setData("application/json", mathJson); + } catch (e) { + } + } + } + } + ev.preventDefault(); + } + static insert(model, text, options = {}) { + var _a3; + const mode = options.mode === "auto" ? model.mode : (_a3 = options.mode) != null ? _a3 : model.mode; + return _ModeEditor._modes[mode].insert(model, text, options); + } + onPaste(_mathfield, _data) { + return false; + } + insert(_model, _text, _options) { + return false; + } + }; + _ModeEditor._modes = {}; + var ModeEditor = _ModeEditor; + + // src/editor/keybindings-definitions.ts + var DEFAULT_KEYBINDINGS = [ + { key: "left", command: "moveToPreviousChar" }, + { key: "right", command: "moveToNextChar" }, + { key: "up", command: "moveUp" }, + { key: "down", command: "moveDown" }, + { key: "shift+[ArrowLeft]", command: "extendSelectionBackward" }, + { key: "shift+[ArrowRight]", command: "extendSelectionForward" }, + { key: "shift+[ArrowUp]", command: "extendSelectionUpward" }, + { key: "shift+[ArrowDown]", command: "extendSelectionDownward" }, + { key: "[Backspace]", command: "deleteBackward" }, + { key: "[Delete]", command: "deleteForward" }, + { key: "shift+[Backspace]", command: "deleteForward" }, + { key: "alt+[Backspace]", command: "deletePreviousWord" }, + { key: "alt+[Delete]", command: "deleteNextWord" }, + { key: "ctrl+[Backspace]", command: "deleteToGroupStart" }, + { key: "ctrl+[Delete]", command: "deleteToGroupEnd" }, + { key: "ctrl+shift+[Backspace]", command: "deleteToGroupEnd" }, + { key: "alt+[ArrowLeft]", command: "moveToPreviousWord" }, + { key: "alt+[ArrowRight]", command: "moveToNextWord" }, + { key: "shift+alt+[ArrowLeft]", command: "extendToPreviousWord" }, + { key: "shift+alt+[ArrowRight]", command: "extendToNextWord" }, + { key: "ctrl+[ArrowLeft]", command: "moveToGroupStart" }, + { key: "ctrl+[ArrowRight]", command: "moveToGroupEnd" }, + { key: "shift+ctrl+[ArrowLeft]", command: "extendToGroupStart" }, + { key: "shift+ctrl+[ArrowRight]", command: "extendToGroupEnd" }, + { key: "[Home]", command: "moveToMathfieldStart" }, + { key: "cmd+[ArrowLeft]", command: "moveToMathfieldStart" }, + { key: "shift+[Home]", command: "extendToMathFieldStart" }, + { key: "shift+cmd+[ArrowLeft]", command: "extendToMathFieldStart" }, + { key: "[End]", command: "moveToMathfieldEnd" }, + { key: "cmd+[ArrowRight]", command: "moveToMathfieldEnd" }, + { key: "shift+[End]", command: "extendToMathFieldEnd" }, + { key: "shift+cmd+[ArrowRight]", command: "extendToMathFieldEnd" }, + { key: "[Pageup]", command: "moveToGroupStart" }, + { key: "[Pagedown]", command: "moveToGroupEnd" }, + { key: "[Tab]", command: "moveToNextGroup" }, + { + key: "shift+[Tab]", + command: "moveToPreviousGroup" + }, + // Free modes use Tab and Enter for document editing. Keep explicit + // compatibility shortcuts for navigating between math groups. + { + key: "ctrl+[Tab]", + ifMode: "free-text", + command: "moveToNextGroup" + }, + { + key: "ctrl+shift+[Tab]", + ifMode: "free-text", + command: "moveToPreviousGroup" + }, + { + key: "ctrl+[Tab]", + ifMode: "free-math", + command: "moveToNextGroup" + }, + { + key: "ctrl+shift+[Tab]", + ifMode: "free-math", + command: "moveToPreviousGroup" + }, + { key: "[Escape]", ifMode: "math", command: ["switchMode", "latex"] }, + { key: "[Escape]", ifMode: "text", command: ["switchMode", "latex"] }, + { + key: "[Escape]", + ifMode: "latex", + command: ["complete", "complete", { selectItem: "true" }] + }, + // Accept the entry (without the suggestion) and select + { + key: "\\", + ifMode: "math", + command: ["switchMode", "latex", "", "\\"] + }, + { + key: "\\", + ifMode: "text", + command: ["switchMode", "latex", "", "\\"] + }, + // { key: '[Backslash]', ifMode: 'math', command: ['switchMode', 'latex'] }, + { + key: "[IntlBackslash]", + ifMode: "math", + command: ["switchMode", "latex", "", "\\"] + }, + // On UK QWERTY keyboards + { + key: "[Tab]", + ifMode: "latex", + command: ["complete", "accept-suggestion"] + }, + // Complete the suggestion + { key: "[Return]", ifMode: "latex", command: ["complete", "accept-all"] }, + { key: "[Enter]", ifMode: "latex", command: ["complete", "accept-all"] }, + { + key: "shift+[Escape]", + ifMode: "latex", + command: ["complete", "reject"] + }, + // Some keyboards can't generate + // this combination, for example in 60% keyboards it is mapped to ~ + { key: "[ArrowDown]", ifMode: "latex", command: "nextSuggestion" }, + // { key: 'ios:command:[Tab]', ifMode: 'latex',command: 'nextSuggestion' }, + { key: "[ArrowUp]", ifMode: "latex", command: "previousSuggestion" }, + { key: "ctrl+a", ifPlatform: "!macos", command: "selectAll" }, + { key: "cmd+a", command: "selectAll" }, + // Rare keys on some extended keyboards + { key: "[Cut]", command: "cutToClipboard" }, + { key: "[Copy]", command: "copyToClipboard" }, + { key: "[Paste]", command: "pasteFromClipboard" }, + { key: "[Clear]", command: "deleteBackward" }, + { key: "[Undo]", command: "undo" }, + { key: "[Redo]", command: "redo" }, + { key: "[EraseEof]", command: "deleteToGroupEnd" }, + // Safari on iOS does not send cut/copy/paste commands when the mathfield + // is focused, so intercept the keyboard shortcuts. + // This is less desirable because the full clipboard API is not accessible + // by this path, and user authorization is required. + { key: "ctrl+x", ifPlatform: "ios", command: "cutToClipboard" }, + { key: "cmd+x", ifPlatform: "ios", command: "cutToClipboard" }, + { key: "ctrl+c", ifPlatform: "ios", command: "copyToClipboard" }, + { key: "cmd+c", ifPlatform: "ios", command: "copyToClipboard" }, + { key: "ctrl+v", ifPlatform: "ios", command: "pasteFromClipboard" }, + { key: "cmd+v", ifPlatform: "ios", command: "pasteFromClipboard" }, + { key: "ctrl+z", ifPlatform: "!macos", command: "undo" }, + { key: "cmd+z", command: "undo" }, + { key: "ctrl+y", ifPlatform: "!macos", command: "redo" }, + // ARIA recommendation + { key: "shift+cmd+y", command: "redo" }, + { key: "shift+ctrl+z", ifPlatform: "!macos", command: "redo" }, + { key: "shift+cmd+z", command: "redo" }, + // EMACS/MACOS BINDINGS + { key: "ctrl+b", ifPlatform: "macos", command: "moveToPreviousChar" }, + { key: "ctrl+f", ifPlatform: "macos", command: "moveToNextChar" }, + { key: "ctrl+p", ifPlatform: "macos", command: "moveUp" }, + { key: "ctrl+n", ifPlatform: "macos", command: "moveDown" }, + { key: "ctrl+a", ifPlatform: "macos", command: "moveToMathfieldStart" }, + { key: "ctrl+e", ifPlatform: "macos", command: "moveToMathfieldEnd" }, + { + key: "shift+ctrl+b", + ifPlatform: "macos", + command: "extendSelectionBackward" + }, + { + key: "shift+ctrl+f", + ifPlatform: "macos", + command: "extendSelectionForward" + }, + { + key: "shift+ctrl+p", + ifPlatform: "macos", + command: "extendSelectionUpward" + }, + { + key: "shift+ctrl+n", + ifPlatform: "macos", + command: "extendSelectionDownward" + }, + { + key: "shift+ctrl+a", + ifPlatform: "macos", + command: "extendToMathFieldStart" + }, + { + key: "shift+ctrl+e", + ifPlatform: "macos", + command: "extendToMathFieldEnd" + }, + { key: "alt+ctrl+b", ifPlatform: "macos", command: "moveToPreviousWord" }, + { key: "alt+ctrl+f", ifPlatform: "macos", command: "moveToNextWord" }, + { + key: "shift+alt+ctrl+b", + ifPlatform: "macos", + command: "extendToPreviousWord" + }, + { + key: "shift+alt+ctrl+f", + ifPlatform: "macos", + command: "extendToNextWord" + }, + { key: "ctrl+h", ifPlatform: "macos", command: "deleteBackward" }, + { key: "ctrl+d", ifPlatform: "macos", command: "deleteForward" }, + { key: "ctrl+l", ifPlatform: "macos", command: "scrollIntoView" }, + // { key: 'ctrl+t', ifPlatform: 'macos', command: 'transpose' }, + // WOLFRAM MATHEMATICA BINDINGS + { + key: "ctrl+[Digit2]", + ifMode: "math", + command: ["insert", "\\sqrt{#0}"] + }, + { key: "ctrl+[Digit5]", ifMode: "math", command: "moveToOpposite" }, + { key: "ctrl+[Digit6]", ifMode: "math", command: "moveToSuperscript" }, + { key: "ctrl+[Return]", ifMode: "math", command: "addRowAfter" }, + { key: "ctrl+[Enter]", ifMode: "math", command: "addRowAfter" }, + { key: "cmd+[Return]", ifMode: "math", command: "addRowAfter" }, + { key: "cmd+[Enter]", ifMode: "math", command: "addRowAfter" }, + // In free modes, Enter is the normal line-break key. Ctrl/Cmd+Enter + // preserves the explicit commit/row-insertion command for integrations + // that need the legacy command behavior. + { key: "ctrl+[Return]", ifMode: "free-text", command: "commit" }, + { key: "ctrl+[Enter]", ifMode: "free-text", command: "commit" }, + { key: "cmd+[Return]", ifMode: "free-text", command: "commit" }, + { key: "cmd+[Enter]", ifMode: "free-text", command: "commit" }, + { key: "ctrl+[Return]", ifMode: "free-math", command: "commit" }, + { key: "ctrl+[Enter]", ifMode: "free-math", command: "commit" }, + { key: "cmd+[Return]", ifMode: "free-math", command: "commit" }, + { key: "cmd+[Enter]", ifMode: "free-math", command: "commit" }, + // Excel keybindings: + // shift+space: select entire row, ctrl+space: select an entire column + // shift+ctrl++ or ctrl+numpad+ + // ctrl+- to delete a row or columns + // MATHLIVE BINDINGS + { key: "alt+p", ifMode: "math", command: ["insert", "\\pi"] }, + { key: "alt+v", ifMode: "math", command: ["insert", "\\sqrt{#0}"] }, + { key: "alt+shift+v", ifMode: "math", command: ["insert", "\\sqrt[#0]{#1}"] }, + { key: "alt+o", ifMode: "math", command: ["insert", "\\emptyset"] }, + { + key: "alt+d", + ifMode: "math", + command: ["insert", "\\differentialD"] + }, + { + key: "shift+alt+o", + ifMode: "math", + command: ["insert", "\\varnothing"] + }, + { + key: "shift+alt+d", + ifMode: "math", + command: ["insert", "\\partial"] + }, + { + key: "alt+[Backslash]", + ifMode: "math", + command: ["insert", "\\backslash"] + }, + // "|" key} override command mode + { + key: "[NumpadDivide]", + ifMode: "math", + command: ["insert", "\\frac{#@}{#?}"] + }, + // ?? + { + key: "alt+[NumpadDivide]", + ifMode: "math", + command: ["insert", "\\frac{#?}{#@}"] + }, + // ?? + // Accessibility + { key: "shift+alt+k", command: "toggleKeystrokeCaption" }, + { key: "alt+[Space]", command: "toggleContextMenu" }, + { key: "alt+shift+[Space]", command: "toggleVirtualKeyboard" }, + // Note: On Mac OS (as of 10.12), there is a bug/behavior that causes + // a beep to be generated with certain command+control key combinations. + // The workaround is to create a default binding file to silence them. + // In ~/Library/KeyBindings/DefaultKeyBinding.dict add these entries: + // + // { + // "^@\UF701" = "noop:"; + // "^@\UF702" = "noop:"; + // "^@\UF703" = "noop:"; + // } + { + key: "alt+ctrl+[ArrowUp]", + command: ["speak", "all", { withHighlighting: false }] + }, + { + key: "alt+ctrl+[ArrowDown]", + command: ["speak", "selection", { withHighlighting: false }] + }, + // + // Punctuations and some non-alpha key combinations + // only work with specific keyboard layouts + // + { + key: "shift+[Quote]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["switchMode", "text", "", ""] + // command: ['switchMode', 'text', '', '«'], + }, + { + key: "shift+[Quote]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "text", + command: ["switchMode", "math", "", ""] + // command: ['switchMode', 'math', '»', ''], + }, + { + key: "shift+alt+[KeyT]", + ifMode: "math", + command: ["switchMode", "text"] + }, + { + key: "shift+alt+[KeyT]", + ifMode: "text", + command: ["switchMode", "math"] + }, + { + key: "/", + ifMode: "math", + command: ["insert", "\\frac{#@}{#?}"] + }, + { + key: "alt+/", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "/"] + }, + { + key: "alt+shift+/", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "/"] + }, + { + key: "alt+[BracketLeft]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "\\left\\lbrack #0 \\right\\rbrack"] + }, + // ?? + { + key: "ctrl+[Minus]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: "moveToSubscript" + }, + // ?? + { + key: "shift+alt+[BracketLeft]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "\\left\\lbrace #0 \\right\\rbrace"] + }, + // ?? + { + key: "ctrl+;", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: "addRowAfter" + }, + { + key: "cmd+;", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: "addRowAfter" + }, + { + key: "shift+ctrl+;", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: "addRowBefore" + }, + { + key: "shift+cmd+;", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: "addRowBefore" + }, + // { + // key: 'ctrl+[Comma]', + // ifLayout: ['apple.en-intl', 'windows.en-intl', 'linux.en'], + // ifMode: 'math', + // command: 'addColumnAfter', + // }, + // { + // key: 'cmd+[Comma]', + // ifLayout: ['apple.en-intl', 'windows.en-intl', 'linux.en'], + // ifMode: 'math', + // command: 'addColumnAfter', + // }, + // { + // key: 'shift+ctrl+[Comma]', + // ifLayout: ['apple.en-intl', 'windows.en-intl', 'linux.en'], + // ifMode: 'math', + // command: 'addColumnBefore', + // }, + // { + // key: 'shift+cmd+[Comma]', + // ifLayout: ['apple.en-intl', 'windows.en-intl', 'linux.en'], + // ifMode: 'math', + // command: 'addColumnBefore', + // }, + { key: "alt+[Tab]", ifMode: "math", command: "addColumnAfter" }, + { key: "shift+alt+[Tab]", ifMode: "math", command: "addColumnBefore" }, + { key: "alt+[Enter]", ifMode: "math", command: "addRowAfter" }, + { key: "shift+alt+[Enter]", ifMode: "math", command: "addRowBefore" }, + { key: "alt+[Return]", ifMode: "math", command: "addRowAfter" }, + { key: "shift+alt+[Return]", ifMode: "math", command: "addRowBefore" }, + { + key: "shift+[Backspace]", + ifMode: "math", + command: "removeColumn" + }, + { + key: "shift+[Delete]", + ifMode: "math", + command: "removeRow" + }, + { + key: "shift+alt+[Backspace]", + ifMode: "math", + command: "removeRow" + }, + { + key: "alt+[Digit5]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "$\\infty"] + }, + // "%" key + { + key: "alt+[Digit9]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "("] + }, + // "(" key} override smartFence + { + key: "alt+[Digit0]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", ")"] + }, + // ")" key} override smartFence + { + key: "alt+|", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "|"] + }, + // "|" key} override smartFence + { + key: "shift+[Backquote]", + ifLayout: ["apple.en-intl", "windows.en-intl", "linux.en"], + ifMode: "math", + command: ["insert", "\\~"] + }, + // ?? + { + key: "[Backquote]", + ifLayout: ["windows.french", "linux.french"], + ifMode: "math", + command: ["insert", "^2"] + }, + { + key: "[Backquote]", + ifLayout: ["windows.german", "linux.german"], + ifMode: "math", + command: ["insert", "^"] + }, + { + key: "[IntlBackslash]", + ifLayout: ["apple.german"], + ifMode: "math", + command: ["insert", "^"] + } + ]; + var REVERSE_KEYBINDINGS = { + "\\sqrt": ["alt+v", "ctrl+[Digit2]"], + "\\pi": "alt+p", + "\\infty": "alt+[Digit5]", + "\\differentialD": "alt+d", + "\\partial": "shift+alt+d", + "\\frac": "Slash", + "\\emptyset": "alt+o", + "\\varnothing": "shift+alt+o", + "\\~": "~" + }; + + // src/editor-mathfield/utils.ts + function isValidMathfield(mf) { + var _a3; + return ((_a3 = mf.element) == null ? void 0 : _a3.mathfield) === mf; + } + function findElementWithCaret(element) { + var _a3, _b3; + return (_b3 = (_a3 = element.querySelector(".ML__caret")) != null ? _a3 : element.querySelector(".ML__text-caret")) != null ? _b3 : element.querySelector(".ML__latex-caret"); + } + function getCaretPoint(element) { + const caret = findElementWithCaret(element); + if (!caret) return null; + const bounds = caret.getBoundingClientRect(); + return { + x: bounds.right, + y: bounds.bottom, + height: bounds.height + }; + } + function branchId(atom) { + var _a3; + if (!atom.parent) return "root"; + let result = (_a3 = atom.parent.id) != null ? _a3 : ""; + result += typeof atom.parentBranch === "string" ? "-" + atom.parentBranch : `-${atom.parentBranch[0]}/${atom.parentBranch[0]}`; + return result; + } + function adjustForScrolling(mathfield, rect, scaleFactor) { + if (!rect) return null; + const fieldRect = mathfield.field.getBoundingClientRect(); + const w = rect.right - rect.left; + const h = rect.bottom - rect.top; + const left = Math.ceil( + rect.left - fieldRect.left + mathfield.field.scrollLeft * scaleFactor + ); + const top = Math.ceil(rect.top - fieldRect.top); + return { left, right: left + w, top, bottom: top + h }; + } + function getNodeBounds(node) { + let target = node; + let bounds = target.getBoundingClientRect(); + while (bounds.bottom === bounds.top && target.parentElement instanceof Element) { + target = target.parentElement; + bounds = target.getBoundingClientRect(); + if (bounds.bottom !== bounds.top) break; + } + const styles = getComputedStyle(target); + const marginRight = parseInt(styles.marginRight); + let width = bounds.right - bounds.left; + let height = bounds.bottom - bounds.top; + if (width === 0 || !Number.isFinite(width)) { + const computedWidth = parseFloat(styles.width); + if (Number.isFinite(computedWidth) && computedWidth > 0) + width = computedWidth; + else if (target instanceof HTMLElement && target.offsetWidth > 0) + width = target.offsetWidth; + } + if (height === 0 || !Number.isFinite(height)) { + const computedHeight = parseFloat(styles.height); + if (Number.isFinite(computedHeight) && computedHeight > 0) + height = computedHeight; + else if (target instanceof HTMLElement && target.offsetHeight > 0) + height = target.offsetHeight; + } + const result = { + top: bounds.top - 1, + bottom: bounds.top - 1 + height, + left: bounds.left, + right: bounds.left + width - 1 + marginRight + }; + if (node.children.length === 0 || node.tagName.toUpperCase() === "SVG") + return result; + for (const child of node.children) { + if (child.nodeType === 1 && "atomId" in child.dataset && !child.classList.contains("ML__pstrut")) { + const r = getNodeBounds(child); + result.left = Math.min(result.left, r.left); + result.right = Math.max(result.right, r.right); + result.top = Math.min(result.top, r.top); + result.bottom = Math.max(result.bottom, r.bottom); + } + } + return result; + } + function getAtomBounds(mathfield, atom) { + var _a3, _b3; + if (!atom.id) return null; + let result = (_b3 = (_a3 = mathfield.atomBoundsCache) == null ? void 0 : _a3.get(atom.id)) != null ? _b3 : null; + if (result !== null) return result; + const nodes = mathfield.field.querySelectorAll(`[data-atom-id="${atom.id}"]`); + const nodeList = Array.from(nodes); + if (atom.type === "prompt") { + for (const node of nodeList) { + if (node.classList.contains("ML__prompt-atom")) { + const overlay = node.querySelector(".ML__prompt"); + if (overlay) { + const overlayBounds = getNodeBounds(overlay); + if (!result) result = overlayBounds; + else { + result.left = Math.min(result.left, overlayBounds.left); + result.right = Math.max(result.right, overlayBounds.right); + result.top = Math.min(result.top, overlayBounds.top); + result.bottom = Math.max(result.bottom, overlayBounds.bottom); + } + } + } + } + } + for (const node of nodeList) { + const bounds = getNodeBounds(node); + if (!result) result = bounds; + else { + result.left = Math.min(result.left, bounds.left); + result.right = Math.max(result.right, bounds.right); + result.top = Math.min(result.top, bounds.top); + result.bottom = Math.max(result.bottom, bounds.bottom); + } + } + if (mathfield.atomBoundsCache) { + if (result) mathfield.atomBoundsCache.set(atom.id, result); + else mathfield.atomBoundsCache.delete(atom.id); + } + return result != null ? result : null; + } + function getRangeBoundingRect(mf, range2) { + const [start, end] = range2; + let result = null; + for (let i = start; i <= end; i++) { + const bounds = getAtomBounds(mf, mf.model.at(i)); + if (bounds) { + if (!result) result = bounds; + else { + result.top = Math.min(result.top, bounds.top); + result.bottom = Math.max(result.bottom, bounds.bottom); + result.left = Math.min(result.left, bounds.left); + result.right = Math.max(result.right, bounds.right); + } + } + } + return result != null ? result : { top: 0, bottom: 0, left: 0, right: 0 }; + } + function getRangeBounds(mathfield, range2, options) { + const rects = /* @__PURE__ */ new Map(); + const field = mathfield.field; + const offsetWidth = field.offsetWidth; + const actualWidth = Math.floor(field.getBoundingClientRect().width); + let scaleFactor = actualWidth / offsetWidth; + scaleFactor = isNaN(scaleFactor) ? 1 : scaleFactor; + for (const atom of mathfield.model.getAtoms(range2, { + includeChildren: true + })) { + if ((options == null ? void 0 : options.excludeAtomsWithBackground) && atom.style.backgroundColor) + continue; + const bounds = adjustForScrolling( + mathfield, + getAtomBounds(mathfield, atom), + scaleFactor + ); + if (bounds) { + const id = branchId(atom); + if (rects.has(id)) { + const r = rects.get(id); + rects.set(id, { + left: Math.min(r.left, bounds.left), + right: Math.max(r.right, bounds.right), + top: Math.min(r.top, bounds.top), + bottom: Math.max(r.bottom, bounds.bottom) + }); + } else rects.set(id, bounds); + } + } + return [...rects.values()]; + } + function getSelectionBounds(mathfield, options) { + return mathfield.model.selection.ranges.reduce( + (acc, x) => acc.concat(...getRangeBounds(mathfield, x, options)), + [] + ); + } + function validateOrigin(origin, originValidator) { + if (origin === "*" || originValidator === "none") return true; + if (originValidator === "same-origin") + return !window.origin || origin === window.origin; + if (typeof originValidator === "function") return originValidator(origin); + return false; + } + function getLocalDOMRect(el) { + let offsetTop = 0; + let offsetLeft = 0; + const width = el.offsetWidth; + const height = el.offsetHeight; + while (el instanceof HTMLElement) { + offsetTop += el.offsetTop; + offsetLeft += el.offsetLeft; + el = el.offsetParent; + } + return new DOMRect(offsetLeft, offsetTop, width, height); + } + function getElementInfo(mf, offset) { + if (!mf) return void 0; + const atom = mf.model.at(offset); + if (!atom) return void 0; + const result = {}; + const bounds = getAtomBounds(mf, atom); + if (bounds) { + result.bounds = new DOMRect( + bounds.left, + bounds.top, + bounds.right - bounds.left, + bounds.bottom - bounds.top + ); + } + result.depth = atom.treeDepth - 2; + result.style = atom.style; + let a = atom; + while (a) { + if (a.command === "\\htmlData" && a.args && typeof a.args[0] === "string") { + const entries = a.args[0].split(","); + for (const entry of entries) { + const matched = entry.match(/([^=]+)=(.+$)/); + if (matched) { + const key = matched[1].trim().replace(/ /g, "-"); + if (key) { + if (!result.data) result.data = {}; + result.data[key] = matched[2]; + } + } else { + const key = entry.trim().replace(/ /g, "-"); + if (key) { + if (!result.data) result.data = {}; + result.data[key] = void 0; + } + } + } + } + if (a.command === "\\htmlId" || a.command === "\\cssId") { + if (!result.id && a.args && typeof a.args[0] === "string") + result.id = a.args[0]; + } + a = a.parent; + } + if (atom.mode === "math" || atom.mode === "text") + result.latex = Atom.serialize([atom], { defaultMode: "math" }); + return result; + } + function getHref(mf, offset) { + let a = mf.model.at(offset); + while (a) { + if (a.command === "\\href") { + const url = a.args[0]; + if (typeof url === "string") return url; + } + a = a.parent; + } + return ""; + } + + // css/mathfield.less + var mathfield_default = `@keyframes ML__caret-blink { + 0%, + 100% { + opacity: 1; + } + 50% { + opacity: 0; + } +} +:host { + display: block; +} +.ML__container { + display: inline-flex; + flex-flow: row; + justify-content: space-between; + align-items: flex-end; + min-height: 39px; + /* Need some room for the virtual keyboard toggle */ + width: 100%; + padding: 4px; + box-sizing: border-box; + /* This attribute is necessary to work around a Firefox issue where + where clicking multiple times on the border leads to a focused mathfield that cannot be edited until focus is lost and regained (also fixes the multiple cursor issue on firefox that can occur with the same sequence of events). + */ + pointer-events: auto; + /* Prevent the browser from trying to interpret touch gestures in the field */ + /* "Disabling double-tap to zoom removes the need for browsers to + delay the generation of click events when the user taps the screen." */ + touch-action: none; + --_caret-color: var(--caret-color, hsl(var(--_hue), 40%, 49%)); + --_selection-color: var(--selection-color, #000); + --_selection-background-color: var(--selection-background-color, hsl(var(--_hue), 70%, 85%)); + --_text-highlight-background-color: var(--highlight-text, hsla(var(--_hue), 40%, 50%, 0.1)); + --_contains-highlight-background-color: var(--contains-highlight-background-color, hsl(var(--_hue), 40%, 95%)); + --_smart-fence-color: var(--smart-fence-color, currentColor); + --_smart-fence-opacity: var(--smart-fence-opacity, 0.5); + --_contains-highlight-color: var(--contains-highlight-color, var(--_caret-color)); + --_latex-color: var(--latex-color, hsl(var(--_hue), 80%, 40%)); + --_correct-color: var(--correct-color, #10a000); + --_incorrect-color: var(--incorrect-color, #a01b00); + --_composition-background-color: var(--composition-background-color, #fff1c2); + --_composition-text-color: var(--composition-text-color, black); + --_composition-underline-color: var(--composition-underline-color, transparent); + --_tooltip-border: var(--tooltip-border, 1px solid transparent); + --_tooltip-border-radius: var(--tooltip-border-radius, 8px); + --_tooltip-background-color: var(--tooltip-background-color, #616161); + --_tooltip-color: var(--tooltip-color, #fff); + --_tooltip-box-shadow: var(--tooltip-box-shadow, 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2)); +} +@media (prefers-color-scheme: dark) { + .ML__container { + --_contains-highlight-color: var(--contains-highlight-color, hsl(var(--_hue), 85%, 75%)); + --_caret-color: var(--caret-color, hsl(var(--_hue), 65%, 55%)); + --_selection-color: var(--selection-color, #fff); + --_selection-background-color: var(--selection-background-color, hsl(var(--_hue), 65%, 55%)); + --_text-highlight-background-color: var(--text-highlight-background-color, hsla(var(--_hue), 40%, 50%, 0.6)); + --_contains-highlight-background-color: var(--contains-highlight-background-color, hsl(var(--_hue), 5%, 34%)); + --_latex-color: var(--primary, hsl(var(--_hue), 40%, 50%)); + --_composition-background-color: #69571c; + --_composition-text-color: white; + --_placeholder-color: hsl(var(--_hue), 60%, 69%); + --_smart-fence-color: var(--smart-fence-color, #fff); + --_smart-fence-opacity: var(--smart-fence-opacity, 0.7); + } +} +@media (forced-colors: active) { + .ML__container { + --_caret-color: white; + --_selection-color: white; + --_smart-fence-color: white; + --_latex-color: white; + --_correct-color: white; + --_incorrect-color: white; + --_composition-text-color: white; + } +} +@media (hover: none) and (pointer: coarse) { + :host(:not(:focus)) .ML__container { + pointer-events: none; + } +} +/* This is the actual field content (formula) */ +.ML__content { + display: flex; + align-items: center; + align-self: center; + position: relative; + overflow: hidden; + padding: 2px 3px 2px 1px; + width: 100%; + /* Encourage the browser to use the GPU to render the field. + Weirdly, this is required for prompts to be rendered correctly. + */ + isolation: isolate; + text-shadow: var(--text-shadow); +} +.ML__content .ML__latex { + text-shadow: var(--text-shadow); +} +.ML__content .ML__sqrt-line { + box-shadow: var(--text-shadow); +} +.ML__content .ML__frac-line { + box-shadow: var(--text-shadow); +} +.ML__content:has(.ML__free-text-root) { + justify-content: flex-start; + text-align: start; +} +:host([dir='rtl']) .ML__free-text-root { + direction: rtl; +} +:host([dir='ltr']) .ML__free-text-root { + direction: ltr; +} +.ML__free-text-root .col-align-l > .ML__vlist-t { + text-align: start; +} +.ML__free-text-line { + text-align: start; +} +.ML__free-text-line[dir='auto'] { + unicode-bidi: plaintext; +} +.ML__free-text-math-island { + direction: ltr; + unicode-bidi: isolate; +} +/* Container for the virtual keyboard toggle and menu toggle buttons */ +.ML__toggles { + display: flex; + flex-direction: row; + align-items: flex-start; + gap: 0; + align-self: flex-start; +} +/* Vertical layout modifier */ +.ML__toggles--vertical { + flex-direction: column; + align-items: center; + gap: 4px; +} +.ML__toggles--vertical .ML__virtual-keyboard-toggle, +.ML__toggles--vertical .ML__menu-toggle { + margin-right: 0; +} +.ML__virtual-keyboard-toggle, +.ML__menu-toggle { + box-sizing: border-box; + display: flex; + align-self: center; + align-items: center; + flex-shrink: 0; + flex-direction: column; + justify-content: center; + width: 34px; + height: 34px; + padding: 0; + margin-right: 4px; + cursor: pointer; + /* Avoid some weird blinking with :hover */ + border-radius: 8px; + border: 1px solid transparent; + transition: background 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + color: hsl(var(--_hue), 40%, 50%); + fill: currentColor; + background: transparent; +} +.ML__virtual-keyboard-toggle:hover, +.ML__menu-toggle:hover { + background: hsla(0, 0%, 70%, 0.3); + color: #333; + fill: currentColor; +} +.ML__virtual-keyboard-toggle > span, +.ML__menu-toggle > span { + display: flex; + align-self: center; + align-items: center; +} +@media (pointer: coarse) { + .ML__virtual-keyboard-toggle, + .ML__menu-toggle { + min-width: 60px; + min-height: 60px; + } +} +/* The invisible element used to capture keyboard events. We're just trying + really hard to make sure it doesn't show. */ +.ML__keyboard-sink { + display: inline-block; + resize: none; + outline: none; + border: none; + pointer-events: none; + /* Need these for Microsoft Edge */ + position: fixed; + clip: rect(0 0 0 0); + /* Need this to prevent iOS Safari from auto-zooming */ + font-size: 1em; + font-family: KaTeX_Main; + line-height: 0.5; + /* On Chromium, if this is 0, no keyboard events are received */ + /* Preferred over clip */ + clip-path: inset(50%); +} +[part='placeholder'] { + color: var(--neutral-400); +} +.ML__composition { + background: var(--_composition-background-color); + color: var(--_composition-text-color); + text-decoration: underline var(--_composition-underline-color); +} +.ML__caret { + display: inline-block; +} +.ML__caret::after { + content: ''; + visibility: hidden; + width: 0; + display: inline-block; + height: 0.76em; + --_caret-width: clamp(2px, 0.08em, 10px); + border: none; + border-radius: calc(var(--_caret-width) / 2); + border-right: var(--_caret-width) solid var(--_caret-color); + margin-right: calc(-1 * var(--_caret-width)); + position: relative; + left: -0.045em; + bottom: -0.05em; + animation: ML__caret-blink 1.05s step-end forwards infinite; +} +.ML__text-caret::after { + content: ''; + visibility: hidden; + width: 0; + display: inline-block; + height: 0.76em; + --_caret-width: clamp(2px, 0.08em, 10px); + border: none; + border-radius: calc(var(--_caret-width) / 2); + border-right: var(--_caret-width) solid var(--_caret-color); + margin-right: calc(-1 * var(--_caret-width)); + position: relative; + left: -0.045em; + bottom: -0.05em; + animation: ML__caret-blink 1.05s step-end forwards infinite; +} +.ML__latex-caret::after { + content: ''; + visibility: hidden; + --_caret-width: clamp(2px, 0.08em, 10px); + border: none; + border-radius: calc(var(--_caret-width) / 2); + border-right: var(--_caret-width) solid var(--_latex-color); + margin-right: calc(-1 * var(--_caret-width)); + position: relative; + left: -0.019em; + animation: ML__caret-blink 1.05s step-end forwards infinite; +} +.ML__focused .ML__latex-caret::after, +.ML__focused .ML__text-caret::after, +.ML__focused .ML__caret::after { + visibility: visible; +} +.ML__focused .ML__text { + background: var(--_text-highlight-background-color); +} +/* When using smartFence, the anticipated closing fence is displayed +with this style */ +.ML__smart-fence__close { + opacity: var(--_smart-fence-opacity); + color: var(--_smart-fence-color); +} +.ML__focused .ML__selected, +.ML__focused .ML__selected .ML__contains-caret, +.ML__focused .ML__selected .ML__smart-fence__close, +.ML__focused .ML__selected .ML__placeholder { + color: var(--_selection-color); + opacity: 1; +} +.ML__empty-line-anchor::after { + content: ''; + position: absolute; + left: 0; + top: 50%; + transform: translateY(-50%); + width: 8px; + height: 20px; + border-radius: 2px; + background: transparent; + opacity: 0; + pointer-events: none; +} +.ML__focused .ML__empty-line-anchor.ML__selected::after { + background: var(--_selection-background-color); + opacity: 1; +} +.ML__selection { + box-sizing: border-box; + background: transparent; +} +:host(:focus) .ML__selection { + background: var(--_selection-background-color) !important; +} +.ML__contains-caret.ML__close, +.ML__contains-caret.ML__open, +.ML__contains-caret > .ML__close, +.ML__contains-caret > .ML__open, +.ML__contains-caret .ML__sqrt-sign, +.ML__contains-caret .ML__sqrt-line { + color: var(--_contains-highlight-color); +} +.ML__contains-highlight { + box-sizing: border-box; + background: transparent; +} +.ML__focused .ML__contains-highlight { + background: var(--_contains-highlight-background-color); +} +.ML__raw-latex { + font-family: 'Berkeley Mono', 'IBM Plex Mono', 'Source Code Pro', Consolas, 'Roboto Mono', Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Courier, monospace; + font-weight: 400; + font-size: 0.8em; + letter-spacing: -0.05em; + color: var(--_latex-color); +} +.ML__suggestion { + color: var(--neutral-500); +} +.ML__virtual-keyboard-toggle.is-visible.is-pressed:hover { + background: hsl(var(--_hue), 25%, 35%); + color: #fafafa; + fill: currentColor; +} +.ML__virtual-keyboard-toggle.is-pressed, +.ML__virtual-keyboard-toggle.is-active:hover, +.ML__virtual-keyboard-toggle.is-active { + background: hsl(var(--_hue), 25%, 35%); + color: #fafafa; + fill: currentColor; +} +/* Add an attribute 'data-tooltip' to automatically show a + tooltip over a element on hover. +*/ +[data-tooltip] { + position: relative; +} +[data-tooltip]::after { + content: attr(data-tooltip); + position: absolute; + display: block; + z-index: 2; + pointer-events: none; + right: auto; + top: calc(-100% - 4px); + width: max-content; + max-width: 200px; + padding: 8px 8px; + border-radius: 4px; + background: #616161; + color: #fff; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + text-align: center; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-style: normal; + font-weight: 400; + font-size: 13px; + /* Phone */ + opacity: 0; + transform: scale(0.5); +} +@media only screen and (max-width: 767px) { + [data-tooltip]::after { + padding: 8px 16px; + font-size: 16px; + } +} +menu [data-tooltip]::after { + left: 100%; + top: 0%; +} +menu .ML__base { + cursor: default; +} +/** Don't display if we're tracking, i.e. have the pointer down */ +.tracking [data-tooltip]:hover::after { + /* Use visibility, not display. Display will remove the after from the DOM, and the override below will not work */ + visibility: hidden; +} +/** But do display if tracking and inside a menu */ +.tracking menu li[data-tooltip]:hover::after, +[data-tooltip]:hover::after { + visibility: visible; + opacity: 1; + transform: scale(1); + transition-property: opacity, scale; + transition-duration: 0.15s; + transition-delay: 1s; + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); +} +.ML__prompt { + border-radius: 2px; +} +.ML__editablePromptBox { + outline: 1px solid #acacac; + border-radius: 2px; + z-index: -1; +} +.ML__focused .ML__focusedPromptBox { + outline: highlight auto 1px; +} +.ML__lockedPromptBox { + background-color: rgba(142, 142, 141, 0.4); + z-index: -1; +} +.ML__correctPromptBox { + outline: 1px solid var(--_correct-color); + box-shadow: 0 0 5px var(--_correct-color); +} +.ML__incorrectPromptBox { + outline: 1px solid var(--_incorrect-color); + box-shadow: 0 0 5px var(--_incorrect-color); +} +.variant-submenu { + display: flex; + flex-direction: column; + padding: 8px; +} +.variant-submenu [part='menu-item'].ML__xl { + font-size: 2rem; + text-align: center; + margin: 0; +} +.ML__center-menu .label { + text-align: center; +} +.insert-matrix-submenu { + /* Grid doesn't work on Safari */ + --_menu-item-size: 25px; + width: calc(5 * var(--_menu-item-size)); + display: flex; + flex-wrap: wrap; + padding: 8px; + align-content: center; + justify-content: center; +} +.insert-matrix-submenu [part='menu-item'] { + width: var(--_menu-item-size); + height: var(--_menu-item-size); + font-size: 21px; + border: none; + border-radius: 0; + line-height: 21px; + text-align: center; + padding: 0; + margin: 0; +} +.border-submenu [part='menu-item'] { + font-size: 2rem; + line-height: 1.2; + text-align: center; +} +.swatches-submenu { + --_swatch-size: 2rem; + --_columns: 4; + display: flex; + flex-flow: wrap; + padding: 8px; + max-width: calc(var(--_columns) * (var(--_swatch-size) + 18px) + 16px); + box-sizing: border-box; +} +.menu-swatch { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: fit-content; + height: fit-content; + margin: 2px; + padding: 0; + background: var(--neutral-200); +} +.menu-swatch > .label { + padding: 0; + margin: 0; + line-height: 0; +} +.menu-swatch > .label > span { + display: inline-block; + margin: 6px; + min-width: var(--_swatch-size); + min-height: var(--_swatch-size); + border-radius: 50%; +} +.menu-swatch.active { + background: var(--neutral-100); + z-index: 1; + scale: 1.4; +} +.menu-swatch.active > .label > span { + border-radius: 2px; +} +.menu-swatch .ui-checkmark, +.menu-swatch .ui-mixedmark { + position: absolute; + margin: 0; + padding: 0; + color: white; +} +.menu-swatch.dark-contrast .ui-checkmark, +.menu-swatch.dark-contrast .ui-mixedmark { + color: #000; +} +.ML__insert-template { + font-size: 1em; +} +.ML__insert-label { + opacity: 0.5; + margin-left: 2ex; +} +`; + + // css/core.less + var core_default = ".ML__container {\n min-height: auto !important;\n --_hue: var(--hue, 212);\n --_placeholder-color: var(--placeholder-color, hsl(var(--_hue), 40%, 49%));\n --_placeholder-opacity: var(--placeholder-opacity, 0.4);\n --_text-font-family: var(--text-font-family, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif);\n}\n.ML__sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n.ML__is-inline {\n display: inline-block;\n}\n.ML__base {\n visibility: inherit;\n display: inline-block;\n position: relative;\n cursor: text;\n padding: 0;\n margin: 0;\n box-sizing: content-box;\n border: 0;\n outline: 0;\n vertical-align: baseline;\n font-weight: inherit;\n font-family: inherit;\n font-style: inherit;\n text-decoration: none;\n width: min-content;\n}\n.ML__strut,\n.ML__strut--bottom {\n display: inline-block;\n min-height: 0.5em;\n}\n.ML__small-delim {\n font-family: KaTeX_Main;\n}\n/* Text mode */\n.ML__text {\n font-family: var(--_text-font-family);\n white-space: pre;\n}\n.ML__text.ML__underline {\n text-decoration: underline;\n}\n.ML__text.ML__line-through {\n text-decoration: line-through;\n}\n/* Use cmr for 'math upright' */\n.ML__cmr {\n font-family: KaTeX_Main;\n font-style: normal;\n}\n.ML__mathit {\n font-family: KaTeX_Math;\n /* The KaTeX_Math font is italic by default, so the font-style below is only \n useful when a fallback font is used\n */\n font-style: italic;\n}\n.ML__mathbf {\n font-family: KaTeX_Main;\n font-weight: bold;\n}\n/* Lowercase greek symbols should stick to math font when \\mathbf is applied \n to match TeX idiosyncratic behavior */\n.lcGreek.ML__mathbf {\n font-family: KaTeX_Math;\n}\n.ML__mathbfit {\n font-family: KaTeX_Math;\n font-weight: bold;\n font-style: italic;\n}\n.ML__ams {\n font-family: KaTeX_AMS;\n}\n/* Blackboard */\n.ML__bb {\n font-family: KaTeX_AMS;\n}\n.ML__cal {\n font-family: KaTeX_Caligraphic;\n}\n.ML__frak {\n font-family: KaTeX_Fraktur;\n}\n.ML__tt {\n font-family: KaTeX_Typewriter;\n}\n.ML__script {\n font-family: KaTeX_Script;\n}\n.ML__sans {\n font-family: KaTeX_SansSerif;\n}\n.ML__series_ul {\n font-weight: 100;\n}\n.ML__series_el {\n font-weight: 100;\n}\n.ML__series_l {\n font-weight: 200;\n}\n.ML__series_sl {\n font-weight: 300;\n}\n.ML__series_sb {\n font-weight: 500;\n}\n.ML__bold {\n font-weight: 700;\n}\n.ML__series_eb {\n font-weight: 800;\n}\n.ML__series_ub {\n font-weight: 900;\n}\n.ML__series_uc {\n font-stretch: ultra-condensed;\n}\n.ML__series_ec {\n font-stretch: extra-condensed;\n}\n.ML__series_c {\n font-stretch: condensed;\n}\n.ML__series_sc {\n font-stretch: semi-condensed;\n}\n.ML__series_sx {\n font-stretch: semi-expanded;\n}\n.ML__series_x {\n font-stretch: expanded;\n}\n.ML__series_ex {\n font-stretch: extra-expanded;\n}\n.ML__series_ux {\n font-stretch: ultra-expanded;\n}\n.ML__it {\n font-style: italic;\n}\n.ML__shape_ol {\n -webkit-text-stroke: 1px black;\n text-stroke: 1px black;\n color: transparent;\n}\n.ML__shape_sc {\n font-variant: small-caps;\n}\n.ML__shape_sl {\n font-style: oblique;\n}\n/* First level emphasis */\n.ML__emph {\n color: #bc2612;\n}\n/* Second level emphasis */\n.ML__emph .ML__emph {\n color: #0c7f99;\n}\n.ML__highlight {\n color: #007cb2;\n background: #edd1b0;\n}\n.ML__center {\n text-align: center;\n}\n.ML__left {\n text-align: left;\n}\n.ML__right {\n text-align: right;\n}\n.ML__label_padding {\n padding: 0 0.5em;\n}\n.ML__frac-line {\n width: 100%;\n min-height: 1px;\n}\n.ML__frac-line:after {\n content: '';\n display: block;\n margin-top: max(-1px, -0.04em);\n min-height: max(1px, 0.04em);\n /* Ensure the line is visible when printing even if \"turn off background images\" is on*/\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n /* There's a bug since Chrome 62 where \n sub-pixel border lines don't draw at some zoom \n levels (110%, 90%). \n Setting the min-height used to work around it, but that workaround\n broke in Chrome 84 or so.\n Setting the background (and the min-height) seems to work for now.\n */\n background: currentColor;\n box-sizing: content-box;\n /* Vuetify sets the box-sizing to inherit \n causes the fraction line to not draw at all sizes (see #26) */\n /* On some versions of Firefox on Windows, the line fails to \n draw at some zoom levels, but setting the transform triggers\n the hardware accelerated path, which works */\n transform: translate(0, 0);\n forced-color-adjust: preserve-parent-color;\n}\n@media (forced-colors: active) {\n .ML__frac-line {\n min-height: 0px;\n }\n}\n.ML__sqrt {\n display: inline-block;\n}\n.ML__sqrt-sign {\n display: inline-block;\n position: relative;\n}\n.ML__sqrt-line {\n display: inline-block;\n height: max(1px, 0.04em);\n width: 100%;\n}\n.ML__sqrt-line:before {\n content: '';\n display: block;\n margin-top: min(-1px, -0.04em);\n min-height: max(1px, 0.04em);\n /* Ensure the line is visible when printing even if \"turn off background images\" is on*/\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n background: currentColor;\n /* On some versions of Firefox on Windows, the line fails to \n draw at some zoom levels, but setting the transform triggers\n the hardware accelerated path, which works */\n transform: translate(0, 0);\n forced-color-adjust: preserve-parent-color;\n}\n@media (forced-colors: active) {\n .ML__sqrt-line:after {\n background: white !important;\n }\n}\n.ML__sqrt-line:after {\n border-bottom-width: 1px;\n content: ' ';\n display: block;\n margin-top: -0.1em;\n}\n.ML__sqrt-index {\n margin-left: 0.27777778em;\n margin-right: -0.55555556em;\n}\n.ML__delim-size1 {\n font-family: KaTeX_Size1;\n}\n.ML__delim-size2 {\n font-family: KaTeX_Size2;\n}\n.ML__delim-size3 {\n font-family: KaTeX_Size3;\n}\n.ML__delim-size4 {\n font-family: KaTeX_Size4;\n}\n.ML__delim-mult .delim-size1 > span {\n font-family: KaTeX_Size1;\n}\n.ML__delim-mult .delim-size4 > span {\n font-family: KaTeX_Size4;\n}\n.ML__accent-body {\n font-family: KaTeX_Main;\n}\n.ML__accent-combining-char {\n position: relative;\n left: 0.24em;\n}\n/** The markup for a LaTeX formula, either in an editable mathfield or \n in a static display.\n*/\n.ML__latex {\n display: inline-block;\n direction: ltr;\n text-align: left;\n text-indent: 0;\n text-rendering: auto;\n font-family: inherit;\n font-style: normal;\n font-size-adjust: none;\n font-stretch: normal;\n font-variant-caps: normal;\n letter-spacing: normal;\n line-height: 1.2;\n word-wrap: normal;\n word-spacing: normal;\n white-space: nowrap;\n text-shadow: none;\n -webkit-user-select: none;\n user-select: none;\n width: min-content;\n forced-color-adjust: preserve-parent-color;\n}\n.ML__latex .style-wrap {\n position: relative;\n}\n.ML__latex .ML__mfrac {\n display: inline-block;\n}\n.ML__latex .ML__left-right {\n display: inline-block;\n}\n.ML__latex .ML__vlist-t {\n display: inline-table;\n table-layout: fixed;\n border-collapse: collapse;\n}\n.ML__latex .ML__vlist-r {\n display: table-row;\n}\n.ML__latex .ML__vlist {\n display: table-cell;\n vertical-align: bottom;\n position: relative;\n}\n.ML__latex .ML__vlist > span {\n display: block;\n height: 0;\n position: relative;\n}\n.ML__latex .ML__vlist > span > span {\n display: inline-block;\n}\n.ML__latex .ML__vlist > span > .ML__pstrut {\n overflow: hidden;\n width: 0;\n}\n.ML__latex .ML__vlist-t2 {\n margin-right: -2px;\n}\n.ML__latex .ML__vlist-s {\n display: table-cell;\n vertical-align: bottom;\n font-size: 1px;\n width: 2px;\n min-width: 2px;\n}\n.ML__latex .ML__msubsup {\n text-align: left;\n}\n.ML__latex .ML__negativethinspace {\n display: inline-block;\n margin-left: -0.16667em;\n height: 0.71em;\n}\n.ML__latex .ML__thinspace {\n display: inline-block;\n width: 0.16667em;\n height: 0.71em;\n}\n.ML__latex .ML__mediumspace {\n display: inline-block;\n width: 0.22222em;\n height: 0.71em;\n}\n.ML__latex .ML__thickspace {\n display: inline-block;\n width: 0.27778em;\n height: 0.71em;\n}\n.ML__latex .ML__enspace {\n display: inline-block;\n width: 0.5em;\n height: 0.71em;\n}\n.ML__latex .ML__quad {\n display: inline-block;\n width: 1em;\n height: 0.71em;\n}\n.ML__latex .ML__qquad {\n display: inline-block;\n width: 2em;\n height: 0.71em;\n}\n.ML__latex .ML__llap,\n.ML__latex .ML__rlap {\n width: 0;\n position: relative;\n display: inline-block;\n}\n.ML__latex .ML__llap > .ML__inner,\n.ML__latex .ML__rlap > .ML__inner {\n position: absolute;\n}\n.ML__latex .ML__llap > .ML__fix,\n.ML__latex .ML__rlap > .ML__fix {\n display: inline-block;\n}\n.ML__latex .ML__llap > .ML__inner {\n right: 0;\n}\n.ML__latex .ML__rlap > .ML__inner {\n left: 0;\n}\n.ML__latex .ML__rule {\n display: inline-block;\n border: solid 0;\n position: relative;\n box-sizing: border-box;\n}\n.ML__latex .overline .overline-line,\n.ML__latex .underline .underline-line {\n width: 100%;\n}\n.ML__latex .overline .overline-line:before,\n.ML__latex .underline .underline-line:before {\n content: '';\n border-bottom-style: solid;\n border-bottom-width: max(1px, 0.04em);\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n display: block;\n}\n.ML__latex .overline .overline-line:after,\n.ML__latex .underline .underline-line:after {\n border-bottom-style: solid;\n border-bottom-width: max(1px, 0.04em);\n -webkit-print-color-adjust: exact;\n print-color-adjust: exact;\n content: '';\n display: block;\n margin-top: -1px;\n}\n.ML__latex .ML__stretchy {\n display: block;\n position: absolute;\n width: 100%;\n left: 0;\n overflow: hidden;\n}\n.ML__latex .ML__stretchy:before,\n.ML__latex .ML__stretchy:after {\n content: '';\n}\n.ML__latex .ML__stretchy svg {\n display: block;\n position: absolute;\n width: 100%;\n height: inherit;\n fill: currentColor;\n stroke: currentColor;\n fill-rule: nonzero;\n fill-opacity: 1;\n stroke-width: 1;\n stroke-linecap: butt;\n stroke-linejoin: miter;\n stroke-miterlimit: 4;\n stroke-dasharray: none;\n stroke-dashoffset: 0;\n stroke-opacity: 1;\n}\n.ML__latex .slice-1-of-2 {\n display: inline-flex;\n position: absolute;\n left: 0;\n width: 50.2%;\n overflow: hidden;\n}\n.ML__latex .slice-2-of-2 {\n display: inline-flex;\n position: absolute;\n right: 0;\n width: 50.2%;\n overflow: hidden;\n}\n.ML__latex .slice-1-of-3 {\n display: inline-flex;\n position: absolute;\n left: 0;\n width: 25.1%;\n overflow: hidden;\n}\n.ML__latex .slice-2-of-3 {\n display: inline-flex;\n position: absolute;\n left: 25%;\n width: 50%;\n overflow: hidden;\n}\n.ML__latex .slice-3-of-3 {\n display: inline-flex;\n position: absolute;\n right: 0;\n width: 25.1%;\n overflow: hidden;\n}\n.ML__latex .slice-1-of-1 {\n display: inline-flex;\n position: absolute;\n width: 100%;\n left: 0;\n overflow: hidden;\n}\n.ML__latex .ML__nulldelimiter {\n display: inline-block;\n}\n.ML__latex .ML__op-group {\n display: inline-block;\n}\n.ML__latex .ML__op-symbol {\n position: relative;\n}\n.ML__latex .ML__op-symbol.ML__small-op {\n font-family: KaTeX_Size1;\n}\n.ML__latex .ML__op-symbol.ML__large-op {\n font-family: KaTeX_Size2;\n}\n.ML__latex:has(.ML__center_environment),\n.ML__latex:has(.ML__multiline_environment),\n.ML__latex:has(.ML__align_environment),\n.ML__latex:has(.ML__eqnarray_environment),\n.ML__latex:has(.ML__gather_environment) {\n width: 100%;\n}\n.ML__latex .ML__multiline_environment {\n display: inline-flex;\n width: 100%;\n}\n.ML__latex .ML__center_environment {\n display: inline-flex;\n width: 100%;\n justify-content: center;\n}\n.ML__latex .ML__align_environment,\n.ML__latex .ML__eqnarray_environment,\n.ML__latex .ML__gather_environment {\n display: inline-block;\n}\n.ML__latex .ML__mtable .ML__vertical-separator {\n display: inline-block;\n min-width: 1px;\n box-sizing: border-box;\n}\n.ML__latex .ML__mtable .ML__arraycolsep {\n display: inline-block;\n}\n.ML__latex .ML__mtable .col-align-m > .ML__vlist-t {\n text-align: center;\n}\n.ML__latex .ML__mtable .col-align-c > .ML__vlist-t {\n text-align: center;\n}\n.ML__latex .ML__mtable .col-align-l > .ML__vlist-t {\n text-align: left;\n}\n.ML__latex .ML__mtable .col-align-r > .ML__vlist-t {\n text-align: right;\n}\n[data-href] {\n cursor: pointer;\n}\n.ML__error {\n display: inline-block;\n background-image: radial-gradient(ellipse at center, hsl(341, 100%, 40%), rgba(0, 0, 0, 0) 70%);\n background-color: hsla(341, 100%, 40%, 0.1);\n background-repeat: repeat-x;\n background-size: 3px 3px;\n padding-bottom: 3px;\n background-position: 0 100%;\n}\n.ML__error > .ML__error {\n background: transparent;\n padding: 0;\n}\n.ML__placeholder {\n color: var(--_placeholder-color);\n opacity: var(--_placeholder-opacity);\n padding-left: 0.4ex;\n padding-right: 0.4ex;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n}\n.ML__notation {\n position: absolute;\n box-sizing: border-box;\n line-height: 0;\n}\n/* This class is used to implement the `\\mathtip` and `\\texttip` commands\n For UI elements, see `[data-ML__tooltip]`\n*/\n.ML__tooltip-container {\n position: relative;\n transform: scale(0);\n}\n.ML__tooltip-container .ML__tooltip-content {\n position: fixed;\n display: inline-table;\n visibility: hidden;\n z-index: 2;\n width: max-content;\n max-width: 400px;\n padding: 12px 12px;\n border: var(--_tooltip-border);\n border-radius: var(--_tooltip-border-radius);\n background: var(--_tooltip-background-color);\n --_selection-color: var(--_tooltip-color);\n color: var(--_tooltip-color);\n box-shadow: var(--_tooltip-box-shadow);\n opacity: 0;\n transition: opacity 0.15s cubic-bezier(0.4, 0, 1, 1);\n}\n.ML__tooltip-container .ML__tooltip-content .ML__text {\n white-space: normal;\n}\n.ML__tooltip-container .ML__tooltip-content .ML__base {\n display: contents;\n}\n.ML__tooltip-container:hover .ML__tooltip-content {\n visibility: visible;\n opacity: 1;\n font-size: 0.75em;\n transform: scale(1) translate(0, 3em);\n}\n.ML__bg {\n background-color: transparent !important;\n}\n.ML__bg::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: var(--bg-color);\n z-index: -1;\n box-sizing: border-box;\n}\n"; + + // css/environment-popover.less + var environment_popover_default = "#mathlive-environment-popover.is-visible {\n visibility: visible;\n}\n#mathlive-environment-popover {\n --_environment-panel-height: var(--environment-panel-height, 70px);\n --_accent-color: var(--accent-color, #aaa);\n --_background: var(--environment-panel-background, #fff);\n --_button-background: var(--environment-panel-button-background, white);\n --_button-background-hover: var(--environment-panel-button-background-hover, #f5f5f7);\n --_button-background-active: var(--environment-panel-button-background-active, #f5f5f7);\n --_button-text: var(--environment-panel-button-text, #e3e4e8);\n position: absolute;\n width: calc(var(--_environment-panel-height) * 2);\n height: var(--_environment-panel-height);\n border-radius: 4px;\n border: 1.5px solid var(--_accent-color);\n background-color: var(--_background);\n box-shadow: 0 0 30px 0 var(--environment-shadow, rgba(0, 0, 0, 0.4));\n pointer-events: all;\n visibility: hidden;\n}\n#mathlive-environment-popover .MLEP__array-buttons {\n height: calc(var(--_environment-panel-height) * 5/4);\n width: calc(var(--_environment-panel-height) * 5/4);\n margin-left: calc(0px - var(--_environment-panel-height) * 0.16);\n margin-top: calc(0px - var(--_environment-panel-height) * 0.19);\n}\n#mathlive-environment-popover .MLEP__array-buttons .font {\n fill: white;\n}\n#mathlive-environment-popover .MLEP__array-buttons circle {\n fill: #7f7f7f;\n transition: fill 300ms;\n}\n#mathlive-environment-popover .MLEP__array-buttons .MLEP__array-insert-background {\n fill-opacity: 1;\n fill: var(--_background);\n stroke: var(--_accent-color);\n stroke-width: 3px;\n}\n#mathlive-environment-popover .MLEP__array-buttons line {\n stroke: var(--_accent-color);\n stroke-opacity: 0;\n stroke-width: 40;\n pointer-events: none;\n transition: stroke-opacity 300ms;\n stroke-linecap: round;\n}\n#mathlive-environment-popover .MLEP__array-buttons g[data-command]:hover circle {\n fill: var(--_accent-color);\n}\n#mathlive-environment-popover .MLEP__array-buttons g[data-command]:hover line {\n stroke-opacity: 1;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls {\n height: 100%;\n width: 50%;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options {\n width: var(--_environment-panel-height);\n height: var(--_environment-panel-height);\n display: flex;\n flex-wrap: wrap;\n flex-direction: row;\n justify-content: space-around;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg {\n pointer-events: all;\n margin-top: 2px;\n width: calc(var(--_environment-panel-height) / 3 * 28 / 24);\n height: calc(var(--_environment-panel-height) / 3 - 2px);\n border-radius: calc(var(--_environment-panel-height) / 25);\n background-color: var(--_button-background);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg:hover {\n background-color: var(--_button-background-hover);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg path,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg line {\n stroke: var(--_button-text);\n stroke-width: 2;\n stroke-linecap: round;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg rect,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg path {\n fill-opacity: 0;\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active {\n pointer-events: none;\n background-color: var(--_button-background-active);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active path,\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active line {\n stroke: var(--_accent-color);\n}\n#mathlive-environment-popover .MLEP__environment-delimiter-controls .MLEP__array-delimiter-options svg.active circle {\n fill: var(--_accent-color);\n}\n"; + + // css/suggestion-popover.less + var suggestion_popover_default = `/* The element that display info while in latex mode */ +#mathlive-suggestion-popover { + --_suggestion-zindex: var(--suggestion-zindex, 100); + background-color: rgba(97, 97, 97); + color: #fff; + text-align: center; + border-radius: 8px; + position: fixed; + z-index: var(--_suggestion-zindex); + display: none; + flex-direction: column; + justify-content: center; + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); +} +#mathlive-suggestion-popover.top-tip::after { + content: ''; + position: absolute; + top: -15px; + left: calc(50% - 15px); + width: 0; + height: 0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; + border-bottom: 15px solid rgba(97, 97, 97); + font-size: 1rem; +} +#mathlive-suggestion-popover.bottom-tip::after { + content: ''; + position: absolute; + bottom: -15px; + left: calc(50% - 15px); + width: 0; + height: 0; + border-left: 15px solid transparent; + border-right: 15px solid transparent; + border-top: 15px solid rgba(97, 97, 97); + font-size: 1rem; +} +#mathlive-suggestion-popover.is-animated { + transition: all 0.2s cubic-bezier(0.64, 0.09, 0.08, 1); + animation: ML__fade-in cubic-bezier(0, 0, 0.2, 1) 0.15s; +} +#mathlive-suggestion-popover.is-visible { + display: flex; +} +@keyframes ML__fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } +} +/* The wrapper class for the entire content of the popover panel */ +#mathlive-suggestion-popover ul { + display: flex; + flex-flow: column; + list-style: none; + margin: 0; + padding: 0; + align-items: flex-start; + max-height: 400px; + overflow-y: auto; +} +#mathlive-suggestion-popover li { + display: flex; + flex-direction: row; + justify-content: space-between; + margin: 8px; + padding: 8px; + width: calc(100% - 16px - 16px); + column-gap: 1em; + border-radius: 8px; + cursor: pointer; + /* Since the content can be clicked on, provide feedback on hover */ +} +#mathlive-suggestion-popover li a { + color: #5ea6fd; + padding-top: 0.3em; + margin-top: 0.4em; + display: block; +} +#mathlive-suggestion-popover li a:hover { + color: #5ea6fd; + text-decoration: underline; +} +#mathlive-suggestion-popover li:hover, +#mathlive-suggestion-popover li.is-pressed, +#mathlive-suggestion-popover li.is-active { + background: rgba(255, 255, 255, 0.1); +} +/* The command inside a popover (inside a #mathlive-suggestion-popover) */ +.ML__popover__command { + font-size: 1.6rem; + font-family: KaTeX_Main; +} +.ML__popover__current { + background: #5ea6fd; + color: #fff; +} +.ML__popover__latex { + font-family: 'IBM Plex Mono', 'Source Code Pro', Consolas, 'Roboto Mono', Menlo, 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', Monaco, Courier, monospace; + align-self: center; +} +/* The keyboard shortcuts for a symbol as displayed in the popover */ +.ML__popover__keybinding { + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 0.8em; + opacity: 0.7; +} +/* Style for the character that joins the modifiers of a keyboard shortcut +(usually a "+" sign)*/ +.ML__shortcut-join { + opacity: 0.5; +} +`; + + // css/keystroke-caption.less + var keystroke_caption_default = "/* The element that displays the keys as the user type them */\n#mathlive-keystroke-caption-panel {\n visibility: hidden;\n /*min-width: 160px;*/\n /*background-color: rgba(97, 97, 200, .95);*/\n background: var(--secondary, hsl(var(--_hue), 19%, 26%));\n border-color: var(--secondary-border, hsl(0, 0%, 91%));\n box-shadow: 0 3px 6px rgba(0, 0, 0, 0.16), 0 3px 6px rgba(0, 0, 0, 0.23);\n text-align: center;\n border-radius: 6px;\n padding: 16px;\n position: absolute;\n z-index: 1;\n display: flex;\n flex-direction: row-reverse;\n justify-content: center;\n --keystroke: white;\n --on-keystroke: #555;\n --keystroke-border: #f7f7f7;\n}\n@media (prefers-color-scheme: dark) {\n body:not([theme='light']) #mathlive-keystroke-caption-panel {\n --keystroke: hsl(var(--_hue), 50%, 30%);\n --on-keystroke: hsl(0, 0%, 98%);\n --keystroke-border: hsl(var(--_hue), 50%, 25%);\n }\n}\nbody[theme='dark'] #mathlive-keystroke-caption-panel {\n --keystroke: hsl(var(--_hue), 50%, 30%);\n --on-keystroke: hsl(0, 0%, 98%);\n --keystroke-border: hsl(var(--_hue), 50%, 25%);\n}\n#mathlive-keystroke-caption-panel > span {\n min-width: 14px;\n /*height: 8px;*/\n margin: 0 8px 0 0;\n padding: 4px;\n background-color: var(--keystroke);\n color: var(--on-keystroke);\n fill: currentColor;\n font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 1em;\n border-radius: 6px;\n border: 2px solid var(--keystroke-border);\n /*box-shadow: 0 7px 14px rgba(0,0,0,0.25), 0 5px 5px rgba(0,0,0,0.22);*/\n}\n"; + + // css/virtual-keyboard.less + var virtual_keyboard_default = `.ML__keyboard { + --_keyboard-height: 0; + --_keyboard-zindex: var(--keyboard-zindex, 105); + --_accent-color: var(--keyboard-accent-color, #0c75d8); + --_background: var(--keyboard-background, #cacfd7); + --_border: var(--keyboard-border, #ddd); + --_padding-horizontal: var(--keyboard-padding-horizontal, 0px); + --_padding-top: var(--keyboard-padding-top, 5px); + --_padding-bottom: var(--keyboard-padding-bottom, 0px); + --_row-padding-left: var(--keyboard-row-padding-left, 0px); + --_row-padding-right: var(--keyboard-row-padding-right, 0px); + --_toolbar-text: var(--keyboard-toolbar-text, #2c2e2f); + --_toolbar-text-active: var(--keyboard-toolbar-text-active, var(--_accent-color)); + --_toolbar-background: var(--keyboard-toolbar-background, transparent); + --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #eee); + --_toolbar-background-selected: var(--keyboard-toolbar-background-selected, transparent); + --_toolbar-font-size: var(--keyboard-toolbar-font-size, '135%'); + --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #fff); + --_keycap-background: var(--keycap-background, #f0f0f0); + --_keycap-background-hover: var(--keycap-background-hover, #f5f5f7); + --_keycap-background-active: var(--keycap-background-active, var(--_accent-color)); + --_keycap-background-pressed: var(--keycap-background-pressed, var(--_accent-color)); + --_keycap-border: var(--keycap-border, #e5e6e9); + --_keycap-border-bottom: var(--keycap-border-bottom, #8d8f92); + --_keycap-text: var(--keycap-text, #000); + --_keycap-text-active: var(--keycap-text-active, #fff); + --_keycap-text-hover: var(--keycap-text-hover, var(--_keycap-text)); + --_keycap-text-pressed: var(--keycap-text-pressed, #fff); + --_keycap-shift-text: var(--keycap-shift-text, var(--_accent-color)); + --_keycap-primary-background: var(--keycap-primary-background, var(--_accent-color)); + --_keycap-primary-text: var(--keycap-primary-text, #ddd); + --_keycap-primary-background-hover: var(--keycap-primary-background-hover, #0d80f2); + --_keycap-secondary-background: var(--keycap-secondary-background, #a0a9b8); + --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #7d8795); + --_keycap-secondary-text: var(--keycap-secondary-text, #060707); + --_keycap-secondary-border: var(--keycap-secondary-border, #c5c9d0); + --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, #989da6); + --_keycap-height: var(--keycap-height, 60px); + /* Keycap width (incl. margin) */ + --_keycap-max-width: var(--keycap-max-width, 100px); + --_keycap-gap: var(--keycap-gap, 8px); + --_keycap-font-size: var(--keycap-font-size, clamp(16px, 4cqw, 24px)); + --_keycap-small-font-size: var(--keycap-small-font-size, calc(var(--keycap-font-size) * 0.8)); + --_keycap-extra-small-font-size: var(--keycap-extra-small-font-size, calc(var(--keycap-font-size) / 1.42)); + --_variant-panel-background: var(--variant-panel-background, #f0f0f0); + --_variant-keycap-text: var(--variant-keycap-text, var(--_keycap-text)); + --_variant-keycap-text-active: var(--variant-keycap-text-active, var(--_keycap-text-active)); + --_variant-keycap-background-active: var(--variant-keycap-background-active, var(--_accent-color)); + --_variant-keycap-length: var(--variant-keycap-length, 70px); + --_variant-keycap-font-size: var(--variant-keycap-font-size, 30px); + --_variant-keycap-aside-font-size: var(--variant-keycap-aside-font-size, 12px); + --_keycap-shift-font-size: var(--keycap-shift-font-size, 16px); + --_keycap-shift-color: var(--keycap-shift-color, var(--_accent-color)); + --_box-placeholder-color: var(--box-placeholder-color, var(--_accent-color)); + --_box-placeholder-pressed-color: var(--box-placeholder-pressed-color, var(--keycap-text-pressed)); + --_keycap-glyph-size: var(--keycap-glyph-size, 20px); + --_keycap-glyph-size-lg: var(--keycap-glyph-size-lg, 24px); + --_keycap-glyph-size-xl: var(--keycap-glyph-size-xl, 50px); +} +.is-math-mode .MLK__rows .if-text-mode, +.is-text-mode .MLK__rows .if-math-mode { + display: none; +} +.if-can-undo, +.if-can-redo, +.if-can-copy, +.if-can-cut, +.if-can-paste { + opacity: 0.4; + pointer-events: none; +} +.can-undo .if-can-undo, +.can-redo .if-can-redo, +.can-copy .if-can-copy, +.can-cut .if-can-cut, +.can-paste .if-can-paste { + opacity: 1; + pointer-events: all; +} +body > .ML__keyboard { + position: fixed; + --_padding-bottom: calc(var(--keyboard-padding-bottom, 0px) + env(safe-area-inset-bottom, 0)); +} +body > .ML__keyboard.is-visible > .MLK__backdrop { + box-shadow: 0 -5px 6px rgba(0, 0, 0, 0.08); + border-top: 1px solid var(--_border); +} +body > .ML__keyboard.backdrop-is-transparent.is-visible > .MLK__backdrop { + box-shadow: none; + border: none; +} +body > .ML__keyboard.is-visible.animate > .MLK__backdrop { + transition: 0.28s cubic-bezier(0, 0, 0.2, 1); + transition-property: transform, opacity; + transition-timing-function: cubic-bezier(0.4, 0, 1, 1); +} +.ML__keyboard { + position: relative; + overflow: hidden; + top: 0; + left: 0; + height: 100%; + width: 100%; + z-index: var(--_keyboard-zindex); + box-sizing: border-box; + outline: none; + border: none; + margin: 0; + padding: 0; + line-height: 1; + overflow-wrap: unset; + text-align: left; + vertical-align: baseline; + cursor: auto; + white-space: pre; + box-shadow: none; + opacity: 1; + transform: none; + pointer-events: none; +} +.ML__keyboard :where(div) { + box-sizing: border-box; + outline: none; + border: none; + margin: 0; + padding: 0; + line-height: 1; + overflow-wrap: unset; + text-align: left; + vertical-align: baseline; + cursor: auto; + white-space: pre; + box-shadow: none; + transform: none; +} +.MLK__backdrop { + position: absolute; + bottom: calc(-1 * var(--_keyboard-height)); + width: 100%; + height: var(--_keyboard-height); + box-sizing: border-box; + padding-top: var(--_padding-top); + padding-bottom: var(--_padding-bottom); + padding-left: var(--_padding-horizontal); + padding-right: var(--_padding-horizontal); + opacity: 0; + visibility: hidden; + transform: translate(0, 0); + background: var(--_background); +} +.backdrop-is-transparent .MLK__backdrop { + background: transparent; +} +/* If a custom layout has a custom container/backdrop + (backdrop-is-transparent), make sure to let pointer event go through. */ +.backdrop-is-transparent .MLK__plate { + background: transparent; + pointer-events: none; +} +/* If a custom layout has a custom container/backdrop, make sure to + allow pointer events on it. */ +.backdrop-is-transparent .MLK__layer > div > div { + pointer-events: all; +} +.ML__keyboard.is-visible > .MLK__backdrop { + transform: translate(0, calc(-1 * var(--_keyboard-height))); + opacity: 1; + visibility: visible; +} +.caps-lock-indicator { + display: none; + width: 8px; + height: 8px; + background: #0cbc0c; + box-shadow: inset 0 0 4px 0 #13ca13, 0 0 4px 0 #a9ef48; + border-radius: 8px; + right: 8px; + top: 8px; + position: absolute; +} +.ML__keyboard.is-caps-lock .caps-lock-indicator { + display: block; +} +.ML__keyboard.is-caps-lock .shift { + background: var(--_keycap-background-active); + color: var(--_keycap-text-active); +} +.MLK__plate { + position: absolute; + top: var(--_padding-top); + left: var(--_padding-horizontal); + width: calc(100% - 2 * var(--_padding-horizontal)); + margin: 0; + padding: 0; + box-sizing: border-box; + container-type: inline-size; + touch-action: none; + -webkit-user-select: none; + user-select: none; + pointer-events: all; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 16px; + /* Size of toolbar labels */ + font-weight: 400; + text-shadow: none; +} +.ML__box-placeholder { + color: var(--_box-placeholder-color); +} +.MLK__tex { + font-family: KaTeX_Main, KaTeX_Math, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important; +} +.MLK__tex-math { + font-family: KaTeX_Math, KaTeX_Main, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important; + font-style: italic; +} +.MLK__layer { + display: none; + outline: none; +} +.MLK__layer.is-visible { + display: flex; + flex-flow: column; +} +/* Keyboard layouts are made or rows of keys... */ +.MLK__rows { + --_keycap-width: var(--keycap-width, min(var(--_keycap-max-width), 10cqw)); + display: flex; + flex-flow: column; + align-items: center; + border-collapse: separate; + clear: both; + border: 0; + margin: 0; + margin-bottom: var(--_keycap-gap); + gap: var(--_keycap-gap); + /* If the styling include, e.g., some shadows, they will be + cut off by the overflow. In that case, set the padding to + compensate. */ + padding-left: var(--_row-padding-left); + padding-right: var(--_row-padding-right); + overflow: visible; + touch-action: none; +} +.MLK__rows > .MLK__row { + display: flex; + flex-flow: row; + justify-content: center; + width: 100%; + gap: var(--_keycap-gap); + margin: 0; + padding: 0; + /* For the alignment of the text on some modifiers (e.g. shift) */ + /* Extra spacing between two adjacent keys */ +} +.MLK__rows > .MLK__row .tex { + font-family: KaTeX_Math, KaTeX_Main, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important; +} +.MLK__rows > .MLK__row .tex-math { + font-family: KaTeX_Math, 'Cambria Math', 'Asana Math', OpenSymbol, Symbola, STIX, Times, serif !important; +} +.MLK__rows > .MLK__row .big-op { + font-size: calc(1.25 * var(--_keycap-font-size)); +} +.MLK__rows > .MLK__row .small { + font-size: var(--_keycap-small-font-size); +} +.MLK__rows > .MLK__row .bottom { + justify-content: flex-end; +} +.MLK__rows > .MLK__row .left { + align-items: flex-start; + padding-left: 12px; +} +.MLK__rows > .MLK__row .right { + align-items: flex-end; + padding-right: 12px; +} +.MLK__rows > .MLK__row .w0 { + width: 0; +} +.MLK__rows > .MLK__row .w5 { + width: calc(0.5 * var(--_keycap-width) - var(--_keycap-gap)); +} +.MLK__rows > .MLK__row .w15 { + width: calc(1.5 * var(--_keycap-width) - var(--_keycap-gap)); +} +.MLK__rows > .MLK__row .w20 { + width: calc(2 * var(--_keycap-width) - var(--_keycap-gap)); +} +.MLK__rows > .MLK__row .w40 { + width: calc(4 * var(--_keycap-width) - var(--_keycap-gap)); +} +.MLK__rows > .MLK__row .w50 { + width: calc(5 * var(--_keycap-width) - var(--_keycap-gap)); +} +.MLK__rows > .MLK__row .MLK__keycap.w50 { + font-size: 80%; + padding-top: 10px; + font-weight: 100; +} +.MLK__rows > .MLK__row .separator { + background: transparent; + border: none; + pointer-events: none; +} +.MLK__rows > .MLK__row .horizontal-rule { + height: 6px; + margin-top: 3px; + margin-bottom: 0; + width: 100%; + border-radius: 0; + border-top: var(--_horizontal-rule); +} +.MLK__rows > .MLK__row .ghost { + background: var(--_toolbar-background); + border: none; + color: var(--_toolbar-text); +} +.MLK__rows > .MLK__row .ghost:hover { + background: var(--_toolbar-background-hover); +} +.MLK__rows > .MLK__row .bigfnbutton { + font-size: var(--_keycap-extra-small-font-size); +} +.MLK__rows > .MLK__row .shift, +.MLK__rows > .MLK__row .action { + color: var(--_keycap-secondary-text); + background: var(--_keycap-secondary-background); + border-color: var(--_keycap-secondary-border); + border-bottom-color: var(--_keycap-secondary-border-bottom); + line-height: 0.8; + font-size: min(1rem, var(--_keycap-small-font-size)); + font-weight: 600; + padding: 8px 12px 8px 12px; +} +.MLK__rows > .MLK__row .shift:hover, +.MLK__rows > .MLK__row .action:hover { + background: var(--_keycap-secondary-background-hover); +} +.MLK__rows > .MLK__row .action.primary { + background: var(--_keycap-primary-background); + color: var(--_keycap-primary-text); +} +.MLK__rows > .MLK__row .action.primary:hover { + background: var(--_keycap-primary-background-hover); + color: var(--_keycap-primary-text); +} +.MLK__rows > .MLK__row .shift.selected, +.MLK__rows > .MLK__row .action.selected { + color: var(--_toolbar-text-active); +} +.MLK__rows > .MLK__row .shift.selected.is-pressed, +.MLK__rows > .MLK__row .action.selected.is-pressed, +.MLK__rows > .MLK__row .shift.selected.is-active, +.MLK__rows > .MLK__row .action.selected.is-active { + color: white; +} +.MLK__rows > .MLK__row .warning { + background: #cd0030; + color: white; +} +.MLK__rows > .MLK__row .warning svg.svg-glyph { + width: var(--_keycap-glyph-size-lg); + height: var(--_keycap-glyph-size-lg); + min-height: var(--_keycap-glyph-size-lg); +} +/** A regular keycap + * Use the :where() pseudo-class to give it a very low specifity, + * so that it can be overriden by custom style. + */ +:where(.MLK__rows > .MLK__row div) { + display: flex; + flex-flow: column; + align-items: center; + justify-content: space-evenly; + width: calc(var(--_keycap-width) - var(--_keycap-gap)); + height: var(--_keycap-height); + box-sizing: border-box; + padding: 0; + vertical-align: top; + text-align: center; + float: left; + color: var(--_keycap-text); + fill: currentColor; + font-size: var(--_keycap-font-size); + background: var(--_keycap-background); + border: 1px solid var(--_keycap-border); + border-bottom-color: var(--_keycap-border-bottom); + border-radius: 6px; + cursor: pointer; + touch-action: none; + /* Keys with a variants panel */ + position: relative; + overflow: hidden; + -webkit-user-select: none; + user-select: none; + -webkit-tap-highlight-color: transparent; +} +:where(.MLK__rows > .MLK__row div):hover { + overflow: visible; + background: var(--_keycap-background-hover); + color: var(--_keycap-text-hover); +} +:where(.MLK__rows > .MLK__row div) .ML__latex { + pointer-events: none; + touch-action: none; +} +:where(.MLK__rows > .MLK__row div) svg.svg-glyph { + margin: 8px 0; + width: var(--_keycap-glyph-size); + height: var(--_keycap-glyph-size); + min-height: var(--_keycap-glyph-size); +} +:where(.MLK__rows > .MLK__row div) svg.svg-glyph-lg { + margin: 8px 0; + width: var(--_keycap-glyph-size-lg); + height: var(--_keycap-glyph-size-lg); + min-height: var(--_keycap-glyph-size-lg); +} +:where(.MLK__rows > .MLK__row div).MLK__tex-math { + font-size: 25px; +} +:where(.MLK__rows > .MLK__row div).is-pressed { + background: var(--_keycap-background-pressed); + color: var(--_keycap-text-pressed); + --_box-placeholder-color: var(--_box-placeholder-pressed-color); +} +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active, +:where(.MLK__rows > .MLK__row div).action.is-active, +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed, +:where(.MLK__rows > .MLK__row div).action.is-pressed { + z-index: calc(var(--_keyboard-zindex) - 5); +} +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active aside, +:where(.MLK__rows > .MLK__row div).action.is-active aside, +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed aside, +:where(.MLK__rows > .MLK__row div).action.is-pressed aside { + display: none; +} +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active .MLK__shift, +:where(.MLK__rows > .MLK__row div).action.is-active .MLK__shift, +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed .MLK__shift, +:where(.MLK__rows > .MLK__row div).action.is-pressed .MLK__shift { + display: none; +} +:where(.MLK__rows > .MLK__row div).shift.is-pressed, +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-pressed, +:where(.MLK__rows > .MLK__row div).action.is-pressed { + background: var(--_keycap-background-pressed); + color: var(--_keycap-text-pressed); +} +:where(.MLK__rows > .MLK__row div).shift.is-active, +:where(.MLK__rows > .MLK__row div).MLK__keycap.is-active, +:where(.MLK__rows > .MLK__row div).action.is-active { + background: var(--_keycap-background-active); + color: var(--_keycap-text-active); + --_box-placeholder-color: var(--_box-placeholder-pressed-color); +} +:where(.MLK__rows > .MLK__row div) small { + color: var(--_keycap-secondary-text); +} +:where(.MLK__rows > .MLK__row div) aside { + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 10px; + line-height: 10px; + color: var(--_keycap-secondary-text); +} +/* Add an attribute 'data-tooltip' to display a tooltip on hover. +Note there are a different set of tooltip rules for the keyboard toggle +(it's in a different CSS tree) */ +.ML__keyboard [data-tooltip] { + position: relative; +} +.ML__keyboard [data-tooltip]::after { + position: absolute; + display: inline-table; + content: attr(data-tooltip); + top: inherit; + bottom: 100%; + width: max-content; + max-width: 200px; + padding: 8px 8px; + background: #616161; + color: #fff; + text-align: center; + z-index: 2; + box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2); + border-radius: 2px; + font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-weight: 400; + font-size: 12px; + transition: all 0.15s cubic-bezier(0.4, 0, 1, 1) 1s; + opacity: 0; + transform: scale(0.5); +} +.ML__keyboard [data-tooltip]:hover { + position: relative; +} +.ML__keyboard [data-tooltip]:hover::after { + opacity: 1; + transform: scale(1); +} +.MLK__toolbar { + align-self: center; + display: flex; + flex-flow: row; + justify-content: space-between; + width: 100%; + max-width: 996px; + min-height: 32px; + /* Icons for undo/redo, etc. */ +} +.MLK__toolbar svg { + height: 20px; + width: 20px; +} +.MLK__toolbar > .left { + position: relative; + display: flex; + justify-content: flex-start; + flex-flow: row; +} +.MLK__toolbar > .right { + display: flex; + justify-content: flex-end; + flex-flow: row; +} +.MLK__toolbar > div > div { + /* "button" in the toolbar */ + display: flex; + align-items: center; + justify-content: center; + color: var(--_toolbar-text); + fill: currentColor; + background: var(--_toolbar-background); + font-size: var(--_toolbar-font-size); + padding: 4px 15px; + cursor: pointer; + width: max-content; + min-width: 42px; + min-height: 34px; + border: none; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 8px; + padding-top: 8px; + margin-top: 0; + margin-bottom: 4px; + margin-left: 4px; + margin-right: 4px; + border-radius: 8px; + box-shadow: none; + border-bottom: 2px solid transparent; +} +.MLK__toolbar > div > div:not(.disabled):not(.selected):hover { + background: var(--_toolbar-background-hover); +} +.MLK__toolbar > div > div.disabled svg, +.MLK__toolbar > div > div.disabled:hover svg, +.MLK__toolbar > div > div.disabled.is-pressed svg { + color: var(--_toolbar-text); + opacity: 0.2; +} +.MLK__toolbar > div > div:hover, +.MLK__toolbar > div > div:active, +.MLK__toolbar > div > div.is-pressed, +.MLK__toolbar > div > div.is-active { + color: var(--_toolbar-text-active); +} +.MLK__toolbar > div > div.selected { + color: var(--_toolbar-text-active); + background: var(--_toolbar-background-selected); + border-radius: 0; + border-bottom-color: var(--_toolbar-text-active); + padding-bottom: 4px; + margin-bottom: 8px; +} +/* This is the element that displays variants on press+hold */ +.MLK__variant-panel { + visibility: hidden; + position: fixed; + display: flex; + flex-flow: row wrap-reverse; + justify-content: center; + align-content: center; + margin: 0; + padding: 0; + bottom: auto; + top: 0; + box-sizing: content-box; + transform: none; + z-index: calc(var(--_keyboard-zindex) + 1); + touch-action: none; + max-width: 350px; + background: var(--_variant-panel-background); + text-align: center; + border-radius: 6px; + padding: 6px; + box-shadow: 0 14px 28px rgba(0, 0, 0, 0.25), 0 10px 10px rgba(0, 0, 0, 0.22); + transition: none; +} +.MLK__variant-panel.is-visible { + visibility: visible; +} +.MLK__variant-panel.compact { + --_variant-keycap-length: var(--variant-keycap-length, 50px); + --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px); + --_variant-keycap-aside-font-size: var(--variant-keycap-aside-font-size, 10px); +} +.MLK__variant-panel .item { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; + font-size: var(--_variant-keycap-font-size); + height: var(--_variant-keycap-length); + width: var(--_variant-keycap-length); + margin: 0; + box-sizing: border-box; + border-radius: 5px; + border: 1px solid transparent; + background: transparent; + pointer-events: all; + cursor: pointer; + color: var(--_variant-keycap-text); + fill: currentColor; +} +@media (max-height: 412px) { + .MLK__variant-panel .item { + --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px); + --_variant-keycap-length: var(--variant-keycap-length, 50px); + } +} +.MLK__variant-panel .item .ML__latex { + pointer-events: none; +} +.MLK__variant-panel .item:hover { + color: var(--_keycap-text-hover); +} +.MLK__variant-panel .item.is-active { + background: var(--_variant-keycap-background-active); + color: var(--_variant-keycap-text-active); + --_box-placeholder-color: var(--_box-placeholder-pressed-color); +} +.MLK__variant-panel .item.is-pressed { + background: var(--_variant-keycap-background-pressed); + color: var(--_variant-keycap-text-pressed); + --_box-placeholder-color: var(--_box-placeholder-pressed-color); +} +.MLK__variant-panel .item.small { + font-size: var(--_keycap-small-font-size); +} +.MLK__variant-panel .item.swatch-button { + box-sizing: border-box; + background: #fbfbfb; +} +.MLK__variant-panel .item.swatch-button > span { + display: inline-block; + margin: 6px; + width: calc(100% - 12px); + height: calc(100% - 12px); + border-radius: 50%; +} +.MLK__variant-panel .item.swatch-button:hover { + background: #f0f0f0; +} +.MLK__variant-panel .item.swatch-button:hover > span { + border-radius: 2px; +} +.MLK__variant-panel .item.box > div, +.MLK__variant-panel .item.box > span { + border: 1px dashed rgba(0, 0, 0, 0.24); +} +.MLK__variant-panel .item .warning { + min-height: 60px; + min-width: 60px; + background: #cd0030; + color: white; + padding: 5px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 5px; +} +.MLK__variant-panel .item .warning.is-pressed, +.MLK__variant-panel .item .warning.is-active { + background: red; +} +.MLK__variant-panel .item .warning svg.svg-glyph { + width: var(--_keycap-glyph-size-xl); + height: var(--_keycap-glyph-size-xl); +} +.MLK__variant-panel .item aside { + font-size: var(--_variant-keycap-aside-font-size); + line-height: 12px; + opacity: 0.78; + padding-top: 2px; + width: 100%; + text-align: center; + text-wrap: wrap; +} +.MLK__keycap { + position: relative; +} +.MLK__shift { + display: block; + position: absolute; + right: 4px; + top: 4px; + font-size: var(--_keycap-shift-font-size); + color: var(--_keycap-shift-color); +} +.hide-shift .MLK__shift { + display: none; +} +@media (max-width: 414px) { + .MLK__variant-panel { + max-width: 350px; + --_variant-keycap-font-size: var(--variant-keycap-font-size, 24px); + --_variant-keycap-length: var(--variant-keycap-length, 50px); + } +} +/* @xs breakpoint: iPhone 5 */ +@container (max-width: 414px) { + .MLK__rows { + --_keycap-gap: max(var(--_keycap-gap, 2px), 2px); + --_keycap-height: var(--keycap-height, 42px); + --_keycap-width: var(--keycap-width, min(min(var(--_keycap-max-width)), 10cqw), 62px)); + } + .MLK__toolbar > div > div { + font-size: 100%; + margin-left: 2px; + margin-right: 2px; + } + .MLK__rows .shift, + .MLK__rows .action { + font-size: 65%; + } + .MLK__rows .warning svg.svg-glyph { + width: 14px; + height: 14px; + min-height: 14px; + } +} +@container (max-width: 744px) { + .MLK__rows { + --_keycap-gap: max(var(--keycap-gap, 2px), 2px); + --_keycap-height: var(--keycap-height, 52px); + --_keycap-width: var(--keycap-width, min(min(var(--_keycap-max-width), 10cqw), 62px)); + } + .MLK__toolbar > div > div { + padding-left: 0; + padding-right: 0; + } + .MLK__tooltip::after { + padding: 8px 16px; + font-size: 16px; + } + .MLK__rows > .MLK__row > div.fnbutton { + font-size: 16px; + } + .MLK__rows > .MLK__row > div.bigfnbutton { + font-size: calc(var(--_keycap-extra-small-font-size) / 1.55); + } + .MLK__rows > .MLK__row > div.small { + font-size: 13px; + } + .MLK__rows > .MLK__row > div > aside { + display: none; + } + .MLK__shift { + display: none; + } +} +/* Medium breakpoint: larger phones */ +@container (max-width: 768px) { + .MLK__rows { + --_keycap-height: var(--keycap-height, 42px); + } + .MLK__rows > .MLK__row > div > small { + font-size: 14px; + } +} +@media (max-height: 768px) { + .MLK__rows { + --_keycap-height: var(--keycap-height, 42px); + } + .MLK__rows > .MLK__row > div > small { + font-size: 14px; + } +} +@container (max-width: 1444px) { + .MLK__rows .if-wide { + display: none; + } +} +@media (prefers-color-scheme: dark) { + .ML__keyboard { + --_accent-color: var(--keyboard-accent-color, #0b5c9c); + --_background: var(--keyboard-background, #151515); + --_border: var(--keyboard-border, transparent); + --_toolbar-text: var(--keyboard-toolbar-text, #e3e4e8); + --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #303030); + --keyboard-toolbar-background-hover: #303030; + --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #303030); + --_keycap-background: var(--keycap-background, #1f2022); + --_keycap-background-hover: var(--keycap-background-hover, #2f3032); + --_keycap-border: var(--_keycap-border, transparent); + --_keycap-border-bottom: var(--_keycap-border-bottom, transparent); + --_keycap-text: var(--keycap-text, #e3e4e8); + --_keycap-secondary-background: var(--keycap-secondary-background, #3d4144); + --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #4d5154); + --_keycap-secondary-text: var(--keycap-secondary-text, #e7ebee); + --keycap-secondary-border: transparent; + --keycap-secondary-border-bottom: transparent; + --_keycap-secondary-border: var(--keycap-secondary-border, transparent); + --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, transparent); + --_variant-panel-background: var(--variant-panel-background, #303030); + --_variant-keycap-text-active: var(--variant-keycap-text-active, #fff); + } +} +/* Same as the media query, but with a class */ +[theme='dark'] .ML__keyboard { + --_accent-color: var(--keyboard-accent-color, #0b5c9c); + --_background: var(--keyboard-background, #151515); + --_border: var(--keyboard-border, transparent); + --_toolbar-text: var(--keyboard-toolbar-text, #e3e4e8); + --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #303030); + --keyboard-toolbar-background-hover: #303030; + --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #303030); + --_keycap-background: var(--keycap-background, #1f2022); + --_keycap-background-hover: var(--keycap-background-hover, #2f3032); + --_keycap-border: var(--_keycap-border, transparent); + --_keycap-border-bottom: var(--_keycap-border-bottom, transparent); + --_keycap-text: var(--keycap-text, #e3e4e8); + --_keycap-secondary-background: var(--keycap-secondary-background, #3d4144); + --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #4d5154); + --_keycap-secondary-text: var(--keycap-secondary-text, #e7ebee); + --keycap-secondary-border: transparent; + --keycap-secondary-border-bottom: transparent; + --_keycap-secondary-border: var(--keycap-secondary-border, transparent); + --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, transparent); + --_variant-panel-background: var(--variant-panel-background, #303030); + --_variant-keycap-text-active: var(--variant-keycap-text-active, #fff); +} +[theme='light'] .ML__keyboard { + --_accent-color: var(--keyboard-accent-color, #0c75d8); + --_background: var(--keyboard-background, #cacfd7); + --_border: var(--keyboard-border, #ddd); + --_toolbar-text: var(--keyboard-toolbar-text, #2c2e2f); + --_toolbar-background: var(--keyboard-toolbar-background, transparent); + --_toolbar-background-hover: var(--keyboard-toolbar-background-hover, #eee); + --_toolbar-background-selected: var(--keyboard-toolbar-background-selected, transparent); + --_horizontal-rule: var(--keyboard-horizontal-rule, 1px solid #fff); + --_keycap-background: var(--keycap-background, white); + --_keycap-background-hover: var(--keycap-background-hover, #f5f5f7); + --_keycap-background-active: var(--keycap-background-active, var(--_accent-color)); + --_keycap-background-pressed: var(--keycap-background-pressed, var(--_accent-color)); + --_keycap-border: var(--_keycap-border, #e5e6e9); + --_keycap-border-bottom: var(--_keycap-border-bottom, #8d8f92); + --_keycap-text: var(--keycap-text, #000); + --_keycap-text-active: var(--keycap-text-active, #fff); + --_keycap-text-hover: var(--keycap-text-hover, var(--_keycap-text)); + --_keycap-text-pressed: var(--keycap-text-pressed, #fff); + --_keycap-shift-text: var(--keycap-shift-text, var(--_accent-color)); + --_keycap-secondary-background: var(--keycap-secondary-background, #a0a9b8); + --_keycap-secondary-background-hover: var(--keycap-secondary-background-hover, #7d8795); + --_keycap-secondary-text: var(--keycap-secondary-text, #060707); + --_keycap-secondary-border: var(--keycap-secondary-border, #c5c9d0); + --_keycap-secondary-border-bottom: var(--keycap-secondary-border-bottom, #989da6); + --_variant-panel-background: var(--variant-panel-background, #f0f0f0); + --_variant-keycap-text: var(--variant-keycap-textvar, var(--_keycap-text)); + --_variant-keycap-text-active: var(--variant-keycap-text-active, var(--_keycap-text-active)); + --_variant-keycap-background-active: var(--variant-keycap-background-active, var(--_accent-color)); +} +`; + + // src/ui/style.less + var style_default = ":host {\n --primary-color: #5898ff;\n --primary-color-dimmed: #c0c0f0;\n --primary-color-dark: var(--blue-500);\n --primary-color-light: var(--blue-100);\n --primary-color-reverse: #ffffff;\n --secondary-color: #ff8a65;\n --secondary-color-dimmed: #f0d5c5;\n --secondary-color-dark: var(--orange-500);\n --secondary-color-light: var(--orange-100);\n --secondary-color-reverse: #ffffff;\n --link-color: #5898ff;\n --link-color-dimmed: #c5c5c5;\n --link-color-dark: #121212;\n --link-color-light: #e2e2e2;\n --link-color-reverse: #ffffff;\n --semantic-blue: var(--blue-700);\n --semantic-red: var(--red-400);\n --semantic-orange: var(--orange-400);\n --semantic-green: var(--green-700);\n --neutral-100: #f5f5f5;\n --neutral-200: #eeeeee;\n --neutral-300: #e0e0e0;\n --neutral-400: #bdbdbd;\n --neutral-500: #9e9e9e;\n --neutral-600: #757575;\n --neutral-700: #616161;\n --neutral-800: #424242;\n --neutral-900: #212121;\n --red-25: #fff8f7;\n --red-50: #fff1ef;\n --red-100: #ffeae6;\n --red-200: #ffcac1;\n --red-300: #ffa495;\n --red-400: #ff7865;\n --red-500: #f21c0d;\n --red-600: #e50018;\n --red-700: #d30024;\n --red-800: #bd002c;\n --red-900: #a1002f;\n --orange-25: #fffbf8;\n --orange-50: #fff7f1;\n --orange-100: #fff3ea;\n --orange-200: #ffe1c9;\n --orange-300: #ffcca2;\n --orange-400: #ffb677;\n --orange-500: #fe9310;\n --orange-600: #f58700;\n --orange-700: #ea7c00;\n --orange-800: #dc6d00;\n --orange-900: #ca5b00;\n --brown-25: #fff8ef;\n --brown-50: #fff1df;\n --brown-100: #ffe9ce;\n --brown-200: #ebcca6;\n --brown-300: #cdaf8a;\n --brown-400: #af936f;\n --brown-500: #856a47;\n --brown-600: #7f5e34;\n --brown-700: #78511f;\n --brown-800: #6e4200;\n --brown-900: #593200;\n --yellow-25: #fffdf9;\n --yellow-50: #fffcf2;\n --yellow-100: #fffaec;\n --yellow-200: #fff2ce;\n --yellow-300: #ffe8ab;\n --yellow-400: #ffdf85;\n --yellow-500: #ffcf33;\n --yellow-600: #f1c000;\n --yellow-700: #dfb200;\n --yellow-800: #c9a000;\n --yellow-900: #ad8a00;\n --lime-25: #f4ffee;\n --lime-50: #e9ffdd;\n --lime-100: #ddffca;\n --lime-200: #a8fb6f;\n --lime-300: #94e659;\n --lime-400: #80d142;\n --lime-500: #63b215;\n --lime-600: #45a000;\n --lime-700: #268e00;\n --lime-800: #007417;\n --lime-900: #005321;\n --green-25: #f5fff5;\n --green-50: #ebffea;\n --green-100: #e0ffdf;\n --green-200: #a7ffa7;\n --green-300: #5afa65;\n --green-400: #45e953;\n --green-500: #17cf36;\n --green-600: #00b944;\n --green-700: #00a34a;\n --green-800: #008749;\n --green-900: #00653e;\n --teal-25: #f3ffff;\n --teal-50: #e6fffe;\n --teal-100: #d9fffe;\n --teal-200: #8dfffe;\n --teal-300: #57f4f4;\n --teal-400: #43e5e5;\n --teal-500: #17cfcf;\n --teal-600: #00c2c0;\n --teal-700: #00b5b1;\n --teal-800: #00a49e;\n --teal-900: #009087;\n --cyan-25: #f7fcff;\n --cyan-50: #eff8ff;\n --cyan-100: #e7f5ff;\n --cyan-200: #c2e6ff;\n --cyan-300: #95d5ff;\n --cyan-400: #61c4ff;\n --cyan-500: #13a7ec;\n --cyan-600: #069eda;\n --cyan-700: #0095c9;\n --cyan-800: #0088b2;\n --cyan-900: #0a7897;\n --blue-25: #f7faff;\n --blue-50: #eef5ff;\n --blue-100: #e5f1ff;\n --blue-200: #bfdbff;\n --blue-300: #92c2ff;\n --blue-400: #63a8ff;\n --blue-500: #0d80f2;\n --blue-600: #0077db;\n --blue-700: #006dc4;\n --blue-800: #0060a7;\n --blue-900: #005086;\n --indigo-25: #f8f7ff;\n --indigo-50: #f1efff;\n --indigo-100: #eae7ff;\n --indigo-200: #ccc3ff;\n --indigo-300: #ac99ff;\n --indigo-400: #916aff;\n --indigo-500: #63c;\n --indigo-600: #5a21b2;\n --indigo-700: #4e0b99;\n --indigo-800: #3b0071;\n --indigo-900: #220040;\n --purple-25: #fbf7ff;\n --purple-50: #f8f0ff;\n --purple-100: #f4e8ff;\n --purple-200: #e4c4ff;\n --purple-300: #d49aff;\n --purple-400: #c36aff;\n --purple-500: #a219e6;\n --purple-600: #9000c4;\n --purple-700: #7c009f;\n --purple-800: #600073;\n --purple-900: #3d0043;\n --magenta-25: #fff8fb;\n --magenta-50: #fff2f6;\n --magenta-100: #ffebf2;\n --magenta-200: #ffcddf;\n --magenta-300: #ffa8cb;\n --magenta-400: #ff7fb7;\n --magenta-500: #eb4799;\n --magenta-600: #da3689;\n --magenta-700: #c82179;\n --magenta-800: #b00065;\n --magenta-900: #8a004c;\n}\n@media (prefers-color-scheme: dark) {\n :host {\n --semantic-blue: var(--blue-700);\n --semantic-red: var(--red-400);\n --semantic-orange: var(--orange-400);\n --semantic-green: var(--green-700);\n --semantic-bg-blue: var(--blue-25);\n --semantic-bg-red: var(--red-25);\n --semantic-bg-orange: var(--orange-25);\n --semantic-bg-green: var(--green-25);\n --neutral-100: #121212;\n --neutral-200: #424242;\n --neutral-300: #616161;\n --neutral-400: #757575;\n --neutral-500: #9e9e9e;\n --neutral-600: #bdbdbd;\n --neutral-700: #e0e0e0;\n --neutral-800: #eeeeee;\n --neutral-900: #f5f5f5;\n }\n}\n:host([theme='dark']) {\n --semantic-blue: var(--blue-700);\n --semantic-red: var(--red-400);\n --semantic-orange: var(--orange-400);\n --semantic-green: var(--green-700);\n --semantic-bg-blue: var(--blue-25);\n --semantic-bg-red: var(--red-25);\n --semantic-bg-orange: var(--orange-25);\n --semantic-bg-green: var(--green-25);\n --neutral-100: #121212;\n --neutral-200: #424242;\n --neutral-300: #616161;\n --neutral-400: #757575;\n --neutral-500: #9e9e9e;\n --neutral-600: #bdbdbd;\n --neutral-700: #e0e0e0;\n --neutral-800: #eeeeee;\n --neutral-900: #f5f5f5;\n}\n/* @media (prefers-color-scheme: dark) {\n :host {\n --label-color: #fff;\n --active-label-color: #000;\n --menu-bg: #525252;\n --active-bg: #5898ff;\n --active-bg-dimmed: #5c5c5c;\n }\n} */\n:host {\n --ui-font-family: 'Inter', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n --ui-font-size: 14px;\n --ui-line-height: 1.5;\n --ui-letter-spacing: 0.007em;\n --mono-font-family: 'Berkeley Mono', 'JetBrains Mono', 'IBM Plex Mono', 'Source Code Pro', Menlo, Monaco, 'Courier New', monospace;\n --ui-layer-1: var(--neutral-100);\n --ui-layer-2: var(--neutral-200);\n --ui-layer-3: var(--neutral-300);\n --ui-layer-4: var(--neutral-400);\n --ui-layer-5: var(--neutral-500);\n --ui-layer-6: var(--neutral-600);\n --ui-border-color: var(--primary-color);\n --ui-border-radius: 4px;\n --ui-text: var(--neutral-900);\n --ui-text-secondary: var(--neutral-700);\n --ui-text-placeholder: var(--neutral-500);\n --ui-text-muted: var(--neutral-300);\n /** A field is a UI element in which a user can type data, for\n * example an input or textarea element.\n */\n --ui-field-bg: var(--neutral-100);\n --ui-field-bg-hover: var(--neutral-100);\n --ui-field-bg-disabled: var(--neutral-300);\n --ui-field-bg-invalid: var(--red-100);\n --ui-field-bg-focus: var(--neutral-100);\n --ui-field-border: 0.5px solid var(--border-color);\n --ui-field-border-hover: 0.5px solid var(--border-color);\n --ui-field-border-disabled: 0.5px solid var(--border-color);\n --ui-field-border-invalid: 0.5px solid var(--border-color);\n --ui-field-border-focus: 0.5px solid var(--border-color);\n --ui-menu-bg: var(--neutral-100);\n --ui-menu-text: var(--neutral-900);\n --ui-menu-bg-hover: var(--neutral-200);\n --ui-menu-text-hover: var(--neutral-900);\n /** The `active` state is used for the state of menu items\n * when they are selected.\n */\n --ui-menu-bg-active: var(--primary-color);\n --ui-menu-text-active: var(--primary-color-reverse);\n /** The `active-muted` set is used for the state of\n * submenus when they are open.\n */\n --ui-menu-bg-active-muted: var(--neutral-300);\n --ui-menu-text-active-muted: var(--neutral-900);\n /* --ui-menu-shadow: 0 1px 2px 0 rgba(60, 64, 67, 0.302),\n0 2px 6px 2px rgba(60, 64, 67, 0.149); */\n --ui-menu-shadow: 0 0 2px rgba(0, 0, 0, 0.5), 0 0 20px rgba(0, 0, 0, 0.2);\n --ui-menu-divider: 0.5px solid #c7c7c7;\n /* var(--neutral-300); */\n --ui-menu-z-index: 10000;\n --page-bg: var(--neutral-100);\n --content-bg: var(--neutral-200);\n}\n@media (prefers-color-scheme: dark) {\n :host {\n --ui-menu-bg: var(--neutral-200);\n }\n}\n:host([theme='dark']) {\n --ui-menu-bg: var(--neutral-200);\n}\n/* PingFang SC is a macOS font. Microsoft Yahei is a Windows font. \n Noto is a Linux/Android font.\n*/\n:lang(zh-cn),\n:lang(zh-sg),\n:lang(zh-my),\n:lang(zh) {\n --ui-font-family: -apple-system, system-ui, 'PingFang SC', 'Hiragino Sans GB', 'Noto Sans CJK SC', 'Noto Sans SC', 'Noto Sans', 'Microsoft Yahei UI', 'Microsoft YaHei New', 'Microsoft Yahei', '\u5FAE\u8F6F\u96C5\u9ED1', SimSun, '\u5B8B\u4F53', STXihei, '\u534E\u6587\u7EC6\u9ED1', sans-serif;\n}\n:lang(zh-tw),\n:lang(zh-hk),\n:lang(zh-mo) {\n --ui-font-family: -apple-system, system-ui, 'Noto Sans', 'Microsoft JhengHei UI', 'Microsoft JhengHei', '\u5FAE\u8EDF\u6B63\u9ED1\u9AD4', '\u65B0\u7D30\u660E\u9AD4', 'PMingLiU', '\u7D30\u660E\u9AD4', 'MingLiU', sans-serif;\n}\n:lang(ja),\n:lang(ja-jp),\n:lang(ja-jp-mac) {\n --ui-font-family: -apple-system, system-ui, 'Hiragino Sans', 'Hiragino Kaku Gothic ProN', 'Noto Sans CJK JP', 'Noto Sans JP', 'Noto Sans', '\u6E38\u30B4\u30B7\u30C3\u30AF', '\u6E38\u30B4\u30B7\u30C3\u30AF\u4F53', YuGothic, 'Yu Gothic', '\u30E1\u30A4\u30EA\u30AA', Meiryo, '\uFF2D\uFF33 \uFF30\u30B4\u30B7\u30C3\u30AF', 'MS PGothic', sans-serif;\n}\n:lang(ko),\n:lang(ko-kr),\n:lang(ko-kr-std) {\n --ui-font-family: -apple-system, system-ui, 'Noto Sans CJK KR', 'Noto Sans KR', 'Noto Sans', 'Malgun Gothic', '\uB9D1\uC740 \uACE0\uB515', 'Apple SD Gothic Neo', '\uC560\uD50C SD \uC0B0\uB3CC\uACE0\uB515 Neo', 'Apple SD \uC0B0\uB3CC\uACE0\uB515 Neo', '\uB3CB\uC6C0', Dotum, sans-serif;\n}\n:lang(ko-kr-apple) {\n --ui-font-family: -apple-system, system-ui, 'Noto Sans CJK KR', 'Noto Sans KR', 'Noto Sans', 'Apple SD Gothic Neo', '\uC560\uD50C SD \uC0B0\uB3CC\uACE0\uB515 Neo', 'Apple SD \uC0B0\uB3CC\uACE0\uB515 Neo', '\uB3CB\uC6C0', Dotum, sans-serif;\n}\n:lang(zh-cn),\n:lang(zh-sg),\n:lang(zh-my),\n:lang(zh),\n:lang(zh-tw),\n:lang(zh-hk),\n:lang(zh-mo),\n:lang(ja),\n:lang(ja-jp),\n:lang(ja-jp-mac),\n:lang(ko),\n:lang(ko-kr),\n:lang(ko-kr-std),\n:lang(ko-kr-apple) {\n --ui-font-size: 1rem;\n --ui-line-height: 1.7;\n --ui-letter-spacing: 0;\n}\n:dir(rtl) {\n --ui-line-height: auto;\n --ui-letter-spacing: 0;\n}\n"; + + // src/ui/menu/style.less + var style_default2 = ".ui-menu *,\n.ui-menu ::before,\n.ui-menu ::after {\n box-sizing: border-box;\n}\n.ui-menu {\n display: none;\n color-scheme: light dark;\n -webkit-user-select: none;\n /* Important: Safari iOS doesn't respect user-select */\n user-select: none;\n cursor: default;\n -webkit-touch-callout: none;\n -webkit-tap-highlight-color: rgba(0 0 0 0);\n --active-label-color: #fff;\n /* ui-menu-text-active */\n --label-color: #121212;\n /* ui-menu-text */\n --menu-bg: #e2e2e2;\n /* ui-menu-background */\n --active-bg: #5898ff;\n /* ui-menu-background-active */\n --active-bg-dimmed: #c5c5c5;\n /* ui-menu-background-active-muted */\n}\n/** Use the :where pseudo selector to make the specificity of the\n * selector 0, so that it can be overridden by the user.\n */\n:where(.ui-menu-container) {\n position: absolute;\n overflow: visible;\n width: auto;\n height: auto;\n z-index: 10000;\n border-radius: 8px;\n background: var(--ui-menu-bg);\n box-shadow: var(--ui-menu-shadow);\n list-style: none;\n padding: 6px 0 6px 0;\n margin: 0;\n user-select: none;\n cursor: default;\n color: var(--ui-menu-text);\n font-weight: normal;\n font-style: normal;\n text-shadow: none;\n text-transform: none;\n letter-spacing: 0;\n outline: none;\n opacity: 1;\n /* The [popover] elements have a 1px solid black border. Ugh. */\n border: none;\n width: fit-content;\n height: fit-content;\n}\n:where(.ui-menu-container > li) {\n display: flex;\n flex-flow: row;\n align-items: center;\n padding: 1px 7px 1px 7px;\n margin-top: 0;\n margin-left: 6px;\n margin-right: 6px;\n border-radius: 4px;\n white-space: nowrap;\n position: relative;\n outline: none;\n fill: currentColor;\n user-select: none;\n cursor: default;\n text-align: left;\n color: inherit;\n font-family: var(--ui-font-family);\n font-size: var(--ui-font-size);\n line-height: var(--ui-line-height);\n letter-spacing: var(--ui-letter-spacing);\n}\n:where(.ui-menu-container > li > .label) {\n display: flex;\n align-items: center;\n justify-content: space-between;\n appearance: none;\n background: none;\n outline: none;\n width: 100%;\n margin: 0;\n padding: 1px 2px 1px 1px;\n overflow: visible;\n border: 1px solid transparent;\n white-space: nowrap;\n text-align: start;\n align-content: center;\n}\n:where(.ui-menu-container > li:has(.heading)) {\n margin-top: 0.5em;\n}\n:where(.ui-menu-container > li > .label.heading) {\n font-weight: bold;\n opacity: 0.4;\n}\n:where(.ui-menu-container > li.indent > .label) {\n margin-inline-start: 12px;\n}\n:where(.ui-menu-container > li > .label.indent) {\n margin-inline-start: 12px;\n}\n:where(.ui-menu-container > li[role='divider']) {\n border-bottom: 1px solid var(--ui-menu-divider);\n border-radius: 0;\n padding: 0;\n margin-left: 15px;\n margin-right: 15px;\n padding-top: 5px;\n margin-bottom: 5px;\n width: calc(100% - 30px);\n /** 100% - (margin-left + margin-right) */\n}\n:where(.ui-menu-container > li[aria-disabled='true']) {\n opacity: 0.5;\n}\n:where(.ui-menu-container > li.active) {\n background: var(--ui-menu-bg-active);\n background: -apple-system-control-accent;\n color: var(--ui-menu-text-active);\n}\n:where(.ui-menu-container > li.active.is-submenu-open) {\n background: var(--ui-menu-bg-active-muted);\n color: inherit;\n}\n:where(.ui-menu-container > li[aria-haspopup='true'] > .label) {\n padding-inline-end: 0;\n}\n:where(.ui-menu-container > li[aria-haspopup='true'].active::after) {\n color: var(--ui-menu-text-active);\n}\n/** Keyboard shortcut */\n:where(.ui-menu-container > li > kbd) {\n font-family: var(--ui-font-family);\n margin-inline-start: 12px;\n opacity: 0.4;\n}\n:where(.ui-menu-container > li.active > kbd) {\n opacity: 0.85;\n}\n.ui-trailing-chevron {\n display: flex;\n margin-inline-start: 24px;\n width: 10px;\n height: 10px;\n margin-bottom: 4px;\n}\n.ui-trailing-chevron:dir(rtl) {\n transform: scaleX(-1);\n}\n.ui-checkmark {\n display: flex;\n margin-inline-end: -11px;\n margin-inline-start: -4px;\n margin-top: 2px;\n width: 16px;\n height: 16px;\n}\n.ui-mixedmark {\n display: flex;\n margin-inline-end: -11px;\n margin-inline-start: -4px;\n margin-top: 2px;\n width: 16px;\n height: 16px;\n}\n"; + + // src/common/stylesheet.ts + var gStylesheets; + function getStylesheetContent(id) { + let content = ""; + switch (id) { + // + // Note: the `position: relative` is required to fix https://github.com/arnog/mathlive/issues/971 + // + case "mathfield-element": + content = ` + :host { display: inline-block; background-color: field; color: fieldtext; border-width: 1px; border-style: solid; border-color: #acacac; border-radius: 2px;} + :host([hidden]) { display: none; } + :host([disabled]), :host([disabled]:focus), :host([disabled]:focus-within) { outline: none; opacity: .5; } + :host(:focus), :host(:focus-within) { + outline: Highlight auto 1px; /* For Firefox */ + outline: -webkit-focus-ring-color auto 1px; + } + :host([readonly]:focus), :host([readonly]:focus-within), + :host([read-only]:focus), :host([read-only]:focus-within) { + outline: none; + }`; + break; + case "core": + content = core_default; + break; + case "mathfield": + content = mathfield_default; + break; + case "environment-popover": + content = environment_popover_default; + break; + case "suggestion-popover": + content = suggestion_popover_default; + break; + case "keystroke-caption": + content = keystroke_caption_default; + break; + case "virtual-keyboard": + content = virtual_keyboard_default; + break; + case "ui": + content = style_default; + break; + case "menu": + content = style_default2; + break; + default: + debugger; + } + return content; + } + function getStylesheet(id) { + if (!gStylesheets) gStylesheets = {}; + if (gStylesheets[id]) return gStylesheets[id]; + gStylesheets[id] = new CSSStyleSheet(); + gStylesheets[id].replaceSync(getStylesheetContent(id)); + return gStylesheets[id]; + } + var gInjectedStylesheets; + function injectStylesheet(id) { + var _a3; + try { + if (!("adoptedStyleSheets" in document)) { + if (window.document.getElementById(`mathlive-style-${id}`)) return; + const styleNode = window.document.createElement("style"); + styleNode.id = `mathlive-style-${id}`; + styleNode.append( + window.document.createTextNode(getStylesheetContent(id)) + ); + window.document.head.appendChild(styleNode); + return; + } + if (!gInjectedStylesheets) gInjectedStylesheets = {}; + if (((_a3 = gInjectedStylesheets[id]) != null ? _a3 : 0) !== 0) gInjectedStylesheets[id] += 1; + else { + const stylesheet = getStylesheet(id); + document.adoptedStyleSheets = [ + ...document.adoptedStyleSheets, + stylesheet + ]; + gInjectedStylesheets[id] = 1; + } + } catch (error) { + console.error("Error injecting stylesheet", id, error); + } + } + function releaseStylesheet(id) { + if (!("adoptedStyleSheets" in document)) return; + if (!(gInjectedStylesheets == null ? void 0 : gInjectedStylesheets[id])) return; + gInjectedStylesheets[id] -= 1; + if (gInjectedStylesheets[id] <= 0) { + const stylesheet = gStylesheets[id]; + document.adoptedStyleSheets = document.adoptedStyleSheets.filter( + (x) => x !== stylesheet + ); + } + } + + // src/atoms/accent.ts + var AccentAtom = class _AccentAtom extends Atom { + constructor(options) { + var _a3; + super(__spreadProps(__spreadValues({}, options), { type: "accent", body: (_a3 = options.body) != null ? _a3 : void 0 })); + if (options.accentChar) this.accent = options.accentChar; + else this.svgAccent = options == null ? void 0 : options.svgAccent; + this.skipBoundary = true; + this.captureSelection = true; + } + static fromJson(json) { + return new _AccentAtom(json); + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { + accentChar: this.accent, + svgAccent: this.svgAccent + }); + } + render(parentContext) { + var _a3; + const context = new Context( + { parent: parentContext, mathstyle: "cramp" }, + this.style + ); + const base = (_a3 = Atom.createBox(context, this.body)) != null ? _a3 : new Box("\u25A1", { style: this.style }); + let skew = 0; + if (!this.hasEmptyBranch("body") && this.body.length === 2 && this.body[1].isCharacterBox()) + skew = base.skew; + let clearance = Math.min(base.height, X_HEIGHT); + let accentBox; + if (this.svgAccent) { + accentBox = makeSVGBox(this.svgAccent); + clearance = context.metrics.bigOpSpacing1 - clearance; + } else if (this.accent) { + const accent = new Box(this.accent, { fontFamily: "Main-Regular" }); + accent.italic = 0; + const correctionClass = ( + // this.accent === 94 || // ^ + this.accent === 8407 || // \\vec + this.accent === 8411 || // \\ddot + this.accent === 8412 ? " ML__accent-combining-char" : "" + ); + accentBox = new Box(accent, { + classes: "ML__accent-body" + correctionClass + }); + } + const accentMargin = (base.width - accentBox.width) / 2 + base.left + 2 * skew; + accentBox = new VBox({ + shift: 0, + children: [ + { box: new Box(base) }, + -clearance, + { + box: accentBox, + marginLeft: accentMargin, + classes: ["ML__center"] + } + ] + }); + const result = new Box(accentBox, { type: "ord" }); + if (this.caret) result.caret = this.caret; + this.bind(context, result.wrap(context)); + return this.attachSupsub(context, { base: result }); + } + }; + + // src/atoms/box.ts + var BoxAtom = class _BoxAtom extends Atom { + constructor(options) { + super({ + mode: options.mode, + command: options.command, + style: options.style, + body: options.body, + type: "box" + }); + this.framecolor = options.framecolor; + this.backgroundcolor = options.backgroundcolor; + this.padding = options.padding; + this.offset = options.offset; + this.border = options.border; + } + static fromJson(json) { + return new _BoxAtom(json); + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { + framecolor: this.framecolor, + backgroundcolor: this.backgroundcolor, + padding: this.padding, + offset: this.offset, + border: this.border + }); + } + render(parentContext) { + var _a3, _b3, _c2, _d2; + const base = Atom.createBox(parentContext, this.body, { type: "lift" }); + if (!base) return null; + const offset = parentContext.toEm((_a3 = this.offset) != null ? _a3 : { dimension: 0 }); + base.depth += offset; + base.setStyle("display", "inline-block"); + base.setStyle("position", "relative"); + base.setStyle( + "height", + Math.floor(100 * base.height + base.depth) / 100, + "em" + ); + base.setStyle("vertical-align", -Math.floor(100 * base.height) / 100, "em"); + const context = new Context({ parent: parentContext }, this.style); + const padding2 = context.toEm((_b3 = this.padding) != null ? _b3 : { register: "fboxsep" }); + const box = new Box(null, { classes: "ML__box" }); + box.height = base.height + padding2; + box.depth = base.depth + padding2; + box.setStyle("box-sizing", "border-box"); + box.setStyle("position", "absolute"); + box.setStyle("top", -padding2 + 0.3, "em"); + box.setStyle("left", 0); + box.setStyle("height", box.height + box.depth, "em"); + box.setStyle("width", "100%"); + if (this.backgroundcolor) { + box.setStyle( + "background-color", + (_c2 = context.toBackgroundColor(this.backgroundcolor)) != null ? _c2 : "transparent" + ); + } + if (this.framecolor) { + box.setStyle( + "border", + `${context.getRegisterAsEm("fboxrule", 2)}em solid ${(_d2 = context.toColor(this.framecolor)) != null ? _d2 : "black"}` + ); + } + if (this.border) box.setStyle("border", this.border); + const result = new Box([box, base], { type: "lift" }); + result.setStyle("display", "inline-block"); + result.setStyle("position", "relative"); + result.setStyle("line-height", 0); + result.height = base.height + padding2 + (offset > 0 ? offset : 0); + result.depth = base.depth + padding2 + (offset < 0 ? -offset : 0); + result.setStyle("padding-left", padding2, "em"); + result.setStyle("padding-right", padding2, "em"); + result.setStyle( + "height", + Math.floor( + 100 * (base.height + base.depth + 2 * padding2 + Math.abs(offset)) + ) / 100, + "em" + ); + result.setStyle("margin-top", -padding2, "em"); + result.setStyle( + "top", + Math.floor(100 * (base.depth - base.height + 2 * padding2 - offset)) / 100, + "em" + ); + result.setStyle( + "vertical-align", + Math.floor(100 * (base.depth + 2 * padding2)) / 100, + "em" + ); + if (this.caret) result.caret = this.caret; + return this.attachSupsub(parentContext, { base: result }); + } + _serialize(options) { + if (!options.skipStyles) return super._serialize(options); + return joinLatex([this.bodyToLatex(options), this.supsubToLatex(options)]); + } + }; + + // src/atoms/composition.ts + var CompositionAtom = class _CompositionAtom extends Atom { + constructor(value, options) { + var _a3; + super({ type: "composition", mode: (_a3 = options == null ? void 0 : options.mode) != null ? _a3 : "math", value }); + } + static fromJson(json) { + return new _CompositionAtom(json.value, json); + } + toJson() { + return super.toJson(); + } + render(context) { + const result = new Box(this.value, { + classes: "ML__composition", + type: "composition" + }); + this.bind(context, result); + if (this.caret) result.caret = this.caret; + return result; + } + _serialize(_options) { + return ""; + } + }; + + // src/latex-commands/mhchem.ts + var ChemAtom = class _ChemAtom extends Atom { + constructor(command, arg) { + super({ type: "chem" }, { command, mode: "math" }); + const tex = texify.go( + mhchemParser.go(arg, command === "\\pu" ? "pu" : "ce"), + false + ); + this.body = parseLatex(tex); + this._verbatimLatex = command + "{" + arg + "}"; + this.arg = arg; + this.captureSelection = true; + } + static fromJson(json) { + return new _ChemAtom(json.command, json.arg); + } + // We do not allow resetting the verbatimLatex for 'chem' atoms: + // once it is set in the ctor, it is immutable. + set verbatimLatex(_latex) { + } + get verbatimLatex() { + return this._verbatimLatex; + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { arg: this.arg }); + } + render(context) { + const box = Atom.createBox(context, this.body, { type: "inner" }); + if (this.caret) box.caret = this.caret; + return this.bind(context, box); + } + _serialize(_options) { + console.assert(this.verbatimLatex !== void 0); + return this.verbatimLatex; + } + }; + defineFunction(["ce", "pu"], "{chemformula:balanced-string}", { + createAtom: (options) => { + var _a3; + return new ChemAtom(options.command, (_a3 = options.args[0]) != null ? _a3 : ""); + } + }); + var mhchemParser = { + // + // Parses mchem \ce syntax + // + // Call like + // go("H2O"); + // + go: function(input, stateMachine) { + if (!input) { + return []; + } + if (stateMachine === void 0) { + stateMachine = "ce"; + } + var state = "0"; + var buffer = {}; + buffer["parenthesisLevel"] = 0; + input = input.replace(/\n/g, " "); + input = input.replace(/[\u2212\u2013\u2014\u2010]/g, "-"); + input = input.replace(/[\u2026]/g, "..."); + var lastInput; + var watchdog = 10; + var output = []; + while (true) { + if (lastInput !== input) { + watchdog = 10; + lastInput = input; + } else { + watchdog--; + } + var machine = mhchemParser.stateMachines[stateMachine]; + var t = machine.transitions[state] || machine.transitions["*"]; + iterateTransitions: for (var i = 0; i < t.length; i++) { + var matches = mhchemParser.patterns.match_(t[i].pattern, input); + if (matches) { + var task = t[i].task; + for (var iA = 0; iA < task.action_.length; iA++) { + var o; + if (machine.actions[task.action_[iA].type_]) { + o = machine.actions[task.action_[iA].type_]( + buffer, + matches.match_, + task.action_[iA].option + ); + } else if (mhchemParser.actions[task.action_[iA].type_]) { + o = mhchemParser.actions[task.action_[iA].type_]( + buffer, + matches.match_, + task.action_[iA].option + ); + } else { + throw [ + "MhchemBugA", + "mhchem bug A. Please report. (" + task.action_[iA].type_ + ")" + ]; + } + mhchemParser.concatArray(output, o); + } + state = task.nextState || state; + if (input.length > 0) { + if (!task.revisit) { + input = matches.remainder; + } + if (!task.toContinue) { + break iterateTransitions; + } + } else { + return output; + } + } + } + if (watchdog <= 0) { + throw ["MhchemBugU", "mhchem bug U. Please report."]; + } + } + }, + concatArray: function(a, b) { + if (b) { + if (Object.prototype.toString.call(b) === "[object Array]") { + for (var iB = 0; iB < b.length; iB++) { + a.push(b[iB]); + } + } else { + a.push(b); + } + } + }, + patterns: { + // + // Matching patterns + // either regexps or function that return null or {match_:"a", remainder:"bc"} + // + patterns: { + // property names must not look like integers ("2") for correct property traversal order, later on + "empty": /^$/, + "else": /^./, + "else2": /^./, + "space": /^\s/, + "space A": /^\s(?=[A-Z\\$])/, + "space$": /^\s$/, + "a-z": /^[a-z]/, + "x": /^x/, + "x$": /^x$/, + "i$": /^i$/, + "letters": /^(?:[a-zA-Z\u03B1-\u03C9\u0391-\u03A9?@]|(?:\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))))+/, + "\\greek": /^\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega|Gamma|Delta|Theta|Lambda|Xi|Pi|Sigma|Upsilon|Phi|Psi|Omega)(?:\s+|\{\}|(?![a-zA-Z]))/, + "one lowercase latin letter $": /^(?:([a-z])(?:$|[^a-zA-Z]))$/, + "$one lowercase latin letter$ $": /^\$(?:([a-z])(?:$|[^a-zA-Z]))\$$/, + "one lowercase greek letter $": /^(?:\$?[\u03B1-\u03C9]\$?|\$?\\(?:alpha|beta|gamma|delta|epsilon|zeta|eta|theta|iota|kappa|lambda|mu|nu|xi|omicron|pi|rho|sigma|tau|upsilon|phi|chi|psi|omega)\s*\$?)(?:\s+|\{\}|(?![a-zA-Z]))$/, + "digits": /^[0-9]+/, + "-9.,9": /^[+\-]?(?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))/, + "-9.,9 no missing 0": /^[+\-]?[0-9]+(?:[.,][0-9]+)?/, + "(-)(9.,9)(e)(99)": function(input) { + var m = input.match( + /^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))?(\((?:[0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+))\))?(?:(?:([eE])|\s*(\*|x|\\times|\u00D7)\s*10\^)([+\-]?[0-9]+|\{[+\-]?[0-9]+\}))?/ + ); + if (m && m[0]) { + return { match_: m.slice(1), remainder: input.substr(m[0].length) }; + } + return null; + }, + "(-)(9)^(-9)": function(input) { + var m = input.match( + /^(\+\-|\+\/\-|\+|\-|\\pm\s?)?([0-9]+(?:[,.][0-9]+)?|[0-9]*(?:\.[0-9]+)?)\^([+\-]?[0-9]+|\{[+\-]?[0-9]+\})/ + ); + if (m && m[0]) { + return { match_: m.slice(1), remainder: input.substr(m[0].length) }; + } + return null; + }, + "state of aggregation $": function(input) { + var a = mhchemParser.patterns.findObserveGroups( + input, + "", + /^\([a-z]{1,3}(?=[\),])/, + ")", + "" + ); + if (a && a.remainder.match(/^($|[\s,;\)\]\}])/)) { + return a; + } + var m = input.match(/^(?:\((?:\\ca\s?)?\$[amothc]\$\))/); + if (m) { + return { match_: m[0], remainder: input.substr(m[0].length) }; + } + return null; + }, + "_{(state of aggregation)}$": /^_\{(\([a-z]{1,3}\))\}/, + "{[(": /^(?:\\\{|\[|\()/, + ")]}": /^(?:\)|\]|\\\})/, + ", ": /^[,;]\s*/, + ",": /^[,;]/, + ".": /^[.]/, + ". ": /^([.\u22C5\u00B7\u2022])\s*/, + "...": /^\.\.\.(?=$|[^.])/, + "* ": /^([*])\s*/, + "^{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "^{", + "", + "", + "}" + ); + }, + "^($...$)": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "^", + "$", + "$", + "" + ); + }, + "^a": /^\^([0-9]+|[^\\_])/, + "^\\x{}{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "^", + /^\\[a-zA-Z]+\{/, + "}", + "", + "", + "{", + "}", + "", + true + ); + }, + "^\\x{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "^", + /^\\[a-zA-Z]+\{/, + "}", + "" + ); + }, + "^\\x": /^\^(\\[a-zA-Z]+)\s*/, + "^(-1)": /^\^(-?\d+)/, + "'": /^'/, + "_{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "_{", + "", + "", + "}" + ); + }, + "_($...$)": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "_", + "$", + "$", + "" + ); + }, + "_9": /^_([+\-]?[0-9]+|[^\\])/, + "_\\x{}{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "_", + /^\\[a-zA-Z]+\{/, + "}", + "", + "", + "{", + "}", + "", + true + ); + }, + "_\\x{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "_", + /^\\[a-zA-Z]+\{/, + "}", + "" + ); + }, + "_\\x": /^_(\\[a-zA-Z]+)\s*/, + "^_": /^(?:\^(?=_)|\_(?=\^)|[\^_]$)/, + "{}": /^\{\}/, + "{...}": function(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "{", "}", ""); + }, + "{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups(input, "{", "", "", "}"); + }, + "$...$": function(input) { + return mhchemParser.patterns.findObserveGroups(input, "", "$", "$", ""); + }, + "${(...)}$": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "${", + "", + "", + "}$" + ); + }, + "$(...)$": function(input) { + return mhchemParser.patterns.findObserveGroups(input, "$", "", "", "$"); + }, + "=<>": /^[=<>]/, + "#": /^[#\u2261]/, + "+": /^\+/, + "-$": /^-(?=[\s_},;\]/]|$|\([a-z]+\))/, + // -space -, -; -] -/ -$ -state-of-aggregation + "-9": /^-(?=[0-9])/, + "- orbital overlap": /^-(?=(?:[spd]|sp)(?:$|[\s,;\)\]\}]))/, + "-": /^-/, + "pm-operator": /^(?:\\pm|\$\\pm\$|\+-|\+\/-)/, + "operator": /^(?:\+|(?:[\-=<>]|<<|>>|\\approx|\$\\approx\$)(?=\s|$|-?[0-9]))/, + "arrowUpDown": /^(?:v|\(v\)|\^|\(\^\))(?=$|[\s,;\)\]\}])/, + "\\bond{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\bond{", + "", + "", + "}" + ); + }, + "->": /^(?:<->|<-->|->|<-|<=>>|<<=>|<=>|[\u2192\u27F6\u21CC])/, + "CMT": /^[CMT](?=\[)/, + "[(...)]": function(input) { + return mhchemParser.patterns.findObserveGroups(input, "[", "", "", "]"); + }, + "1st-level escape": /^(&|\\\\|\\hline)\s*/, + "\\,": /^(?:\\[,\ ;:])/, + // \\x - but output no space before + "\\x{}{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "", + /^\\[a-zA-Z]+\{/, + "}", + "", + "", + "{", + "}", + "", + true + ); + }, + "\\x{}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "", + /^\\[a-zA-Z]+\{/, + "}", + "" + ); + }, + "\\ca": /^\\ca(?:\s+|(?![a-zA-Z]))/, + "\\x": /^(?:\\[a-zA-Z]+\s*|\\[_&{}%])/, + "orbital": /^(?:[0-9]{1,2}[spdfgh]|[0-9]{0,2}sp)(?=$|[^a-zA-Z])/, + // only those with numbers in front, because the others will be formatted correctly anyway + "others": /^[\/~|]/, + "\\frac{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\frac{", + "", + "", + "}", + "{", + "", + "", + "}" + ); + }, + "\\overset{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\overset{", + "", + "", + "}", + "{", + "", + "", + "}" + ); + }, + "\\underset{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\underset{", + "", + "", + "}", + "{", + "", + "", + "}" + ); + }, + "\\underbrace{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\underbrace{", + "", + "", + "}_", + "{", + "", + "", + "}" + ); + }, + "\\color{(...)}0": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\color{", + "", + "", + "}" + ); + }, + "\\color{(...)}{(...)}1": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\color{", + "", + "", + "}", + "{", + "", + "", + "}" + ); + }, + "\\color(...){(...)}2": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\color", + "\\", + "", + /^(?=\{)/, + "{", + "", + "", + "}" + ); + }, + "\\ce{(...)}": function(input) { + return mhchemParser.patterns.findObserveGroups( + input, + "\\ce{", + "", + "", + "}" + ); + }, + "oxidation$": /^(?:[+-][IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + "d-oxidation$": /^(?:[+-]?\s?[IVX]+|\\pm\s*0|\$\\pm\$\s*0)$/, + // 0 could be oxidation or charge + "roman numeral": /^[IVX]+/, + "1/2$": /^[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+(?:\$[a-z]\$|[a-z])?$/, + "amount": function(input) { + var match; + match = input.match( + /^(?:(?:(?:\([+\-]?[0-9]+\/[0-9]+\)|[+\-]?(?:[0-9]+|\$[a-z]\$|[a-z])\/[0-9]+|[+\-]?[0-9]+[.,][0-9]+|[+\-]?\.[0-9]+|[+\-]?[0-9]+)(?:[a-z](?=\s*[A-Z]))?)|[+\-]?[a-z](?=\s*[A-Z])|\+(?!\s))/ + ); + if (match) { + return { match_: match[0], remainder: input.substr(match[0].length) }; + } + var a = mhchemParser.patterns.findObserveGroups( + input, + "", + "$", + "$", + "" + ); + if (a) { + match = a.match_.match( + /^\$(?:\(?[+\-]?(?:[0-9]*[a-z]?[+\-])?[0-9]*[a-z](?:[+\-][0-9]*[a-z]?)?\)?|\+|-)\$$/ + ); + if (match) { + return { + match_: match[0], + remainder: input.substr(match[0].length) + }; + } + } + return null; + }, + "amount2": function(input) { + return this["amount"](input); + }, + "(KV letters),": /^(?:[A-Z][a-z]{0,2}|i)(?=,)/, + "formula$": function(input) { + if (input.match(/^\([a-z]+\)$/)) { + return null; + } + var match = input.match( + /^(?:[a-z]|(?:[0-9\ \+\-\,\.\(\)]+[a-z])+[0-9\ \+\-\,\.\(\)]*|(?:[a-z][0-9\ \+\-\,\.\(\)]+)+[a-z]?)$/ + ); + if (match) { + return { match_: match[0], remainder: input.substr(match[0].length) }; + } + return null; + }, + "uprightEntities": /^(?:pH|pOH|pC|pK|iPr|iBu)(?=$|[^a-zA-Z])/, + "/": /^\s*(\/)\s*/, + "//": /^\s*(\/\/)\s*/, + "*": /^\s*[*.]\s*/ + }, + findObserveGroups: function(input, begExcl, begIncl, endIncl, endExcl, beg2Excl, beg2Incl, end2Incl, end2Excl, combine) { + var _match = function(input2, pattern) { + if (typeof pattern === "string") { + if (input2.indexOf(pattern) !== 0) { + return null; + } + return pattern; + } else { + var match2 = input2.match(pattern); + if (!match2) { + return null; + } + return match2[0]; + } + }; + var _findObserveGroups = function(input2, i, endChars) { + var braces = 0; + while (i < input2.length) { + var a = input2.charAt(i); + var match2 = _match(input2.substr(i), endChars); + if (match2 !== null && braces === 0) { + return { endMatchBegin: i, endMatchEnd: i + match2.length }; + } else if (a === "{") { + braces++; + } else if (a === "}") { + if (braces === 0) { + throw [ + "ExtraCloseMissingOpen", + "Extra close brace or missing open brace" + ]; + } else { + braces--; + } + } + i++; + } + if (braces > 0) { + return null; + } + return null; + }; + var match = _match(input, begExcl); + if (match === null) { + return null; + } + input = input.substr(match.length); + match = _match(input, begIncl); + if (match === null) { + return null; + } + var e = _findObserveGroups(input, match.length, endIncl || endExcl); + if (e === null) { + return null; + } + var match1 = input.substring( + 0, + endIncl ? e.endMatchEnd : e.endMatchBegin + ); + if (!(beg2Excl || beg2Incl)) { + return { + match_: match1, + remainder: input.substr(e.endMatchEnd) + }; + } else { + var group2 = this.findObserveGroups( + input.substr(e.endMatchEnd), + beg2Excl, + beg2Incl, + end2Incl, + end2Excl + ); + if (group2 === null) { + return null; + } + var matchRet = [match1, group2.match_]; + return { + match_: combine ? matchRet.join("") : matchRet, + remainder: group2.remainder + }; + } + }, + // + // Matching function + // e.g. match("a", input) will look for the regexp called "a" and see if it matches + // returns null or {match_:"a", remainder:"bc"} + // + match_: function(m, input) { + var pattern = mhchemParser.patterns.patterns[m]; + if (pattern === void 0) { + throw ["MhchemBugP", "mhchem bug P. Please report. (" + m + ")"]; + } else if (typeof pattern === "function") { + return mhchemParser.patterns.patterns[m](input); + } else { + var match = input.match(pattern); + if (match) { + var mm; + if (match[2]) { + mm = [match[1], match[2]]; + } else if (match[1]) { + mm = match[1]; + } else { + mm = match[0]; + } + return { match_: mm, remainder: input.substr(match[0].length) }; + } + return null; + } + } + }, + // + // Generic state machine actions + // + actions: { + "a=": function(buffer, m) { + buffer.a = (buffer.a || "") + m; + }, + "b=": function(buffer, m) { + buffer.b = (buffer.b || "") + m; + }, + "p=": function(buffer, m) { + buffer.p = (buffer.p || "") + m; + }, + "o=": function(buffer, m) { + buffer.o = (buffer.o || "") + m; + }, + "q=": function(buffer, m) { + buffer.q = (buffer.q || "") + m; + }, + "d=": function(buffer, m) { + buffer.d = (buffer.d || "") + m; + }, + "rm=": function(buffer, m) { + buffer.rm = (buffer.rm || "") + m; + }, + "text=": function(buffer, m) { + buffer.text_ = (buffer.text_ || "") + m; + }, + "insert": function(buffer, m, a) { + return { type_: a }; + }, + "insert+p1": function(buffer, m, a) { + return { type_: a, p1: m }; + }, + "insert+p1+p2": function(buffer, m, a) { + return { type_: a, p1: m[0], p2: m[1] }; + }, + "copy": function(buffer, m) { + return m; + }, + "rm": function(buffer, m) { + return { type_: "rm", p1: m || "" }; + }, + "text": function(buffer, m) { + return mhchemParser.go(m, "text"); + }, + "{text}": function(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, "text")); + ret.push("}"); + return ret; + }, + "tex-math": function(buffer, m) { + return mhchemParser.go(m, "tex-math"); + }, + "tex-math tight": function(buffer, m) { + return mhchemParser.go(m, "tex-math tight"); + }, + "bond": function(buffer, m, k) { + return { type_: "bond", kind_: k || m }; + }, + "color0-output": function(buffer, m) { + return { type_: "color0", color: m[0] }; + }, + "ce": function(buffer, m) { + return mhchemParser.go(m); + }, + "1/2": function(buffer, m) { + var ret = []; + if (m.match(/^[+\-]/)) { + ret.push(m.substr(0, 1)); + m = m.substr(1); + } + var n = m.match(/^([0-9]+|\$[a-z]\$|[a-z])\/([0-9]+)(\$[a-z]\$|[a-z])?$/); + n[1] = n[1].replace(/\$/g, ""); + ret.push({ type_: "frac", p1: n[1], p2: n[2] }); + if (n[3]) { + n[3] = n[3].replace(/\$/g, ""); + ret.push({ type_: "tex-math", p1: n[3] }); + } + return ret; + }, + "9,9": function(buffer, m) { + return mhchemParser.go(m, "9,9"); + } + }, + // + // createTransitions + // convert { 'letter': { 'state': { action_: 'output' } } } to { 'state' => [ { pattern: 'letter', task: { action_: [{type_: 'output'}] } } ] } + // with expansion of 'a|b' to 'a' and 'b' (at 2 places) + // + createTransitions: function(o) { + var pattern, state; + var stateArray; + var i; + var transitions = {}; + for (pattern in o) { + for (state in o[pattern]) { + stateArray = state.split("|"); + o[pattern][state].stateArray = stateArray; + for (i = 0; i < stateArray.length; i++) { + transitions[stateArray[i]] = []; + } + } + } + for (pattern in o) { + for (state in o[pattern]) { + stateArray = o[pattern][state].stateArray || []; + for (i = 0; i < stateArray.length; i++) { + var p = o[pattern][state]; + if (p.action_) { + p.action_ = [].concat(p.action_); + for (var k = 0; k < p.action_.length; k++) { + if (typeof p.action_[k] === "string") { + p.action_[k] = { type_: p.action_[k] }; + } + } + } else { + p.action_ = []; + } + var patternArray = pattern.split("|"); + for (var j = 0; j < patternArray.length; j++) { + if (stateArray[i] === "*") { + for (var t in transitions) { + transitions[t].push({ pattern: patternArray[j], task: p }); + } + } else { + transitions[stateArray[i]].push({ + pattern: patternArray[j], + task: p + }); + } + } + } + } + } + return transitions; + }, + stateMachines: {} + }; + mhchemParser.stateMachines = { + // + // \ce state machines + // + //#region ce + "ce": { + // main parser + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "else": { + "0|1|2": { + action_: "beginsWithBond=false", + revisit: true, + toContinue: true + } + }, + "oxidation$": { + "0": { action_: "oxidation-output" } + }, + "CMT": { + r: { action_: "rdt=", nextState: "rt" }, + rd: { action_: "rqt=", nextState: "rdt" } + }, + "arrowUpDown": { + "0|1|2|as": { + action_: ["sb=false", "output", "operator"], + nextState: "1" + } + }, + "uprightEntities": { + "0|1|2": { action_: ["o=", "output"], nextState: "1" } + }, + "orbital": { + "0|1|2|3": { action_: "o=", nextState: "o" } + }, + "->": { + "0|1|2|3": { action_: "r=", nextState: "r" }, + "a|as": { action_: ["output", "r="], nextState: "r" }, + "*": { action_: ["output", "r="], nextState: "r" } + }, + "+": { + "o": { action_: "d= kv", nextState: "d" }, + "d|D": { action_: "d=", nextState: "d" }, + "q": { action_: "d=", nextState: "qd" }, + "qd|qD": { action_: "d=", nextState: "qd" }, + "dq": { action_: ["output", "d="], nextState: "d" }, + "3": { action_: ["sb=false", "output", "operator"], nextState: "0" } + }, + "amount": { + "0|2": { action_: "a=", nextState: "a" } + }, + "pm-operator": { + "0|1|2|a|as": { + action_: [ + "sb=false", + "output", + { type_: "operator", option: "\\pm" } + ], + nextState: "0" + } + }, + "operator": { + "0|1|2|a|as": { + action_: ["sb=false", "output", "operator"], + nextState: "0" + } + }, + "-$": { + "o|q": { action_: ["charge or bond", "output"], nextState: "qd" }, + "d": { action_: "d=", nextState: "d" }, + "D": { + action_: ["output", { type_: "bond", option: "-" }], + nextState: "3" + }, + "q": { action_: "d=", nextState: "qd" }, + "qd": { action_: "d=", nextState: "qd" }, + "qD|dq": { + action_: ["output", { type_: "bond", option: "-" }], + nextState: "3" + } + }, + "-9": { + "3|o": { + action_: ["output", { type_: "insert", option: "hyphen" }], + nextState: "3" + } + }, + "- orbital overlap": { + o: { + action_: ["output", { type_: "insert", option: "hyphen" }], + nextState: "2" + }, + d: { + action_: ["output", { type_: "insert", option: "hyphen" }], + nextState: "2" + } + }, + "-": { + "0|1|2": { + action_: [ + { type_: "output", option: 1 }, + "beginsWithBond=true", + { type_: "bond", option: "-" } + ], + nextState: "3" + }, + "3": { action_: { type_: "bond", option: "-" } }, + "a": { + action_: ["output", { type_: "insert", option: "hyphen" }], + nextState: "2" + }, + "as": { + action_: [ + { type_: "output", option: 2 }, + { type_: "bond", option: "-" } + ], + nextState: "3" + }, + "b": { action_: "b=" }, + "o": { + action_: { type_: "- after o/d", option: false }, + nextState: "2" + }, + "q": { + action_: { type_: "- after o/d", option: false }, + nextState: "2" + }, + "d|qd|dq": { + action_: { type_: "- after o/d", option: true }, + nextState: "2" + }, + "D|qD|p": { + action_: ["output", { type_: "bond", option: "-" }], + nextState: "3" + } + }, + "amount2": { + "1|3": { action_: "a=", nextState: "a" } + }, + "letters": { + "0|1|2|3|a|as|b|p|bp|o": { action_: "o=", nextState: "o" }, + "q|dq": { action_: ["output", "o="], nextState: "o" }, + "d|D|qd|qD": { action_: "o after d", nextState: "o" } + }, + "digits": { + "o": { action_: "q=", nextState: "q" }, + "d|D": { action_: "q=", nextState: "dq" }, + "q": { action_: ["output", "o="], nextState: "o" }, + "a": { action_: "o=", nextState: "o" } + }, + "space A": { + "b|p|bp": {} + }, + "space": { + "a": { nextState: "as" }, + "0": { action_: "sb=false" }, + "1|2": { action_: "sb=true" }, + "r|rt|rd|rdt|rdq": { action_: "output", nextState: "0" }, + "*": { action_: ["output", "sb=true"], nextState: "1" } + }, + "1st-level escape": { + "1|2": { + action_: [ + "output", + { type_: "insert+p1", option: "1st-level escape" } + ] + }, + "*": { + action_: [ + "output", + { type_: "insert+p1", option: "1st-level escape" } + ], + nextState: "0" + } + }, + "[(...)]": { + "r|rt": { action_: "rd=", nextState: "rd" }, + "rd|rdt": { action_: "rq=", nextState: "rdq" } + }, + "...": { + "o|d|D|dq|qd|qD": { + action_: ["output", { type_: "bond", option: "..." }], + nextState: "3" + }, + "*": { + action_: [ + { type_: "output", option: 1 }, + { type_: "insert", option: "ellipsis" } + ], + nextState: "1" + } + }, + ". |* ": { + "*": { + action_: ["output", { type_: "insert", option: "addition compound" }], + nextState: "1" + } + }, + "state of aggregation $": { + "*": { action_: ["output", "state of aggregation"], nextState: "1" } + }, + "{[(": { + "a|as|o": { + action_: ["o=", "output", "parenthesisLevel++"], + nextState: "2" + }, + "0|1|2|3": { + action_: ["o=", "output", "parenthesisLevel++"], + nextState: "2" + }, + "*": { + action_: ["output", "o=", "output", "parenthesisLevel++"], + nextState: "2" + } + }, + ")]}": { + "0|1|2|3|b|p|bp|o": { + action_: ["o=", "parenthesisLevel--"], + nextState: "o" + }, + "a|as|d|D|q|qd|qD|dq": { + action_: ["output", "o=", "parenthesisLevel--"], + nextState: "o" + } + }, + ", ": { + "*": { action_: ["output", "comma"], nextState: "0" } + }, + "^_": { + // ^ and _ without a sensible argument + "*": {} + }, + "^{(...)}|^($...$)": { + "0|1|2|as": { action_: "b=", nextState: "b" }, + "p": { action_: "b=", nextState: "bp" }, + "3|o": { action_: "d= kv", nextState: "D" }, + "q": { action_: "d=", nextState: "qD" }, + "d|D|qd|qD|dq": { action_: ["output", "d="], nextState: "D" } + }, + "^a|^\\x{}{}|^\\x{}|^\\x|'": { + "0|1|2|as": { action_: "b=", nextState: "b" }, + "p": { action_: "b=", nextState: "bp" }, + "3|o": { action_: "d= kv", nextState: "d" }, + "q": { action_: "d=", nextState: "qd" }, + "d|qd|D|qD": { action_: "d=" }, + "dq": { action_: ["output", "d="], nextState: "d" } + }, + "_{(state of aggregation)}$": { + "d|D|q|qd|qD|dq": { action_: ["output", "q="], nextState: "q" } + }, + "_{(...)}|_($...$)|_9|_\\x{}{}|_\\x{}|_\\x": { + "0|1|2|as": { action_: "p=", nextState: "p" }, + "b": { action_: "p=", nextState: "bp" }, + "3|o": { action_: "q=", nextState: "q" }, + "d|D": { action_: "q=", nextState: "dq" }, + "q|qd|qD|dq": { action_: ["output", "q="], nextState: "q" } + }, + "=<>": { + "0|1|2|3|a|as|o|q|d|D|qd|qD|dq": { + action_: [{ type_: "output", option: 2 }, "bond"], + nextState: "3" + } + }, + "#": { + "0|1|2|3|a|as|o": { + action_: [ + { type_: "output", option: 2 }, + { type_: "bond", option: "#" } + ], + nextState: "3" + } + }, + "{}": { + "*": { action_: { type_: "output", option: 1 }, nextState: "1" } + }, + "{...}": { + "0|1|2|3|a|as|b|p|bp": { action_: "o=", nextState: "o" }, + "o|d|D|q|qd|qD|dq": { action_: ["output", "o="], nextState: "o" } + }, + "$...$": { + "a": { action_: "a=" }, + // 2$n$ + "0|1|2|3|as|b|p|bp|o": { action_: "o=", nextState: "o" }, + // not 'amount' + "as|o": { action_: "o=" }, + "q|d|D|qd|qD|dq": { action_: ["output", "o="], nextState: "o" } + }, + "\\bond{(...)}": { + "*": { + action_: [{ type_: "output", option: 2 }, "bond"], + nextState: "3" + } + }, + "\\frac{(...)}": { + "*": { + action_: [{ type_: "output", option: 1 }, "frac-output"], + nextState: "3" + } + }, + "\\overset{(...)}": { + "*": { + action_: [{ type_: "output", option: 2 }, "overset-output"], + nextState: "3" + } + }, + "\\underset{(...)}": { + "*": { + action_: [{ type_: "output", option: 2 }, "underset-output"], + nextState: "3" + } + }, + "\\underbrace{(...)}": { + "*": { + action_: [{ type_: "output", option: 2 }, "underbrace-output"], + nextState: "3" + } + }, + "\\color{(...)}{(...)}1|\\color(...){(...)}2": { + "*": { + action_: [{ type_: "output", option: 2 }, "color-output"], + nextState: "3" + } + }, + "\\color{(...)}0": { + "*": { action_: [{ type_: "output", option: 2 }, "color0-output"] } + }, + "\\ce{(...)}": { + "*": { + action_: [{ type_: "output", option: 2 }, "ce"], + nextState: "3" + } + }, + "\\,": { + "*": { + action_: [{ type_: "output", option: 1 }, "copy"], + nextState: "1" + } + }, + "\\x{}{}|\\x{}|\\x": { + "0|1|2|3|a|as|b|p|bp|o|c0": { + action_: ["o=", "output"], + nextState: "3" + }, + "*": { action_: ["output", "o=", "output"], nextState: "3" } + }, + "others": { + "*": { + action_: [{ type_: "output", option: 1 }, "copy"], + nextState: "3" + } + }, + "else2": { + "a": { action_: "a to o", nextState: "o", revisit: true }, + "as": { action_: ["output", "sb=true"], nextState: "1", revisit: true }, + "r|rt|rd|rdt|rdq": { + action_: ["output"], + nextState: "0", + revisit: true + }, + "*": { action_: ["output", "copy"], nextState: "3" } + } + }), + actions: { + "o after d": function(buffer, m) { + var ret; + if ((buffer.d || "").match(/^[0-9]+$/)) { + var tmp = buffer.d; + buffer.d = void 0; + ret = this["output"](buffer); + buffer.b = tmp; + } else { + ret = this["output"](buffer); + } + mhchemParser.actions["o="](buffer, m); + return ret; + }, + "d= kv": function(buffer, m) { + buffer.d = m; + buffer.dType = "kv"; + }, + "charge or bond": function(buffer, m) { + if (buffer["beginsWithBond"]) { + var ret = []; + mhchemParser.concatArray(ret, this["output"](buffer)); + mhchemParser.concatArray( + ret, + mhchemParser.actions["bond"](buffer, m, "-") + ); + return ret; + } else { + buffer.d = m; + } + }, + "- after o/d": function(buffer, m, isAfterD) { + var c1 = mhchemParser.patterns.match_("orbital", buffer.o || ""); + var c2 = mhchemParser.patterns.match_( + "one lowercase greek letter $", + buffer.o || "" + ); + var c3 = mhchemParser.patterns.match_( + "one lowercase latin letter $", + buffer.o || "" + ); + var c4 = mhchemParser.patterns.match_( + "$one lowercase latin letter$ $", + buffer.o || "" + ); + var hyphenFollows = m === "-" && (c1 && c1.remainder === "" || c2 || c3 || c4); + if (hyphenFollows && !buffer.a && !buffer.b && !buffer.p && !buffer.d && !buffer.q && !c1 && c3) { + buffer.o = "$" + buffer.o + "$"; + } + var ret = []; + if (hyphenFollows) { + mhchemParser.concatArray(ret, this["output"](buffer)); + ret.push({ type_: "hyphen" }); + } else { + c1 = mhchemParser.patterns.match_("digits", buffer.d || ""); + if (isAfterD && c1 && c1.remainder === "") { + mhchemParser.concatArray( + ret, + mhchemParser.actions["d="](buffer, m) + ); + mhchemParser.concatArray(ret, this["output"](buffer)); + } else { + mhchemParser.concatArray(ret, this["output"](buffer)); + mhchemParser.concatArray( + ret, + mhchemParser.actions["bond"](buffer, m, "-") + ); + } + } + return ret; + }, + "a to o": function(buffer) { + buffer.o = buffer.a; + buffer.a = void 0; + }, + "sb=true": function(buffer) { + buffer.sb = true; + }, + "sb=false": function(buffer) { + buffer.sb = false; + }, + "beginsWithBond=true": function(buffer) { + buffer["beginsWithBond"] = true; + }, + "beginsWithBond=false": function(buffer) { + buffer["beginsWithBond"] = false; + }, + "parenthesisLevel++": function(buffer) { + buffer["parenthesisLevel"]++; + }, + "parenthesisLevel--": function(buffer) { + buffer["parenthesisLevel"]--; + }, + "state of aggregation": function(buffer, m) { + return { type_: "state of aggregation", p1: mhchemParser.go(m, "o") }; + }, + "comma": function(buffer, m) { + var a = m.replace(/\s*$/, ""); + var withSpace = a !== m; + if (withSpace && buffer["parenthesisLevel"] === 0) { + return { type_: "comma enumeration L", p1: a }; + } else { + return { type_: "comma enumeration M", p1: a }; + } + }, + "output": function(buffer, m, entityFollows) { + var ret; + if (!buffer.r) { + ret = []; + if (!buffer.a && !buffer.b && !buffer.p && !buffer.o && !buffer.q && !buffer.d && !entityFollows) { + } else { + if (buffer.sb) { + ret.push({ type_: "entitySkip" }); + } + if (!buffer.o && !buffer.q && !buffer.d && !buffer.b && !buffer.p && entityFollows !== 2) { + buffer.o = buffer.a; + buffer.a = void 0; + } else if (!buffer.o && !buffer.q && !buffer.d && (buffer.b || buffer.p)) { + buffer.o = buffer.a; + buffer.d = buffer.b; + buffer.q = buffer.p; + buffer.a = buffer.b = buffer.p = void 0; + } else { + if (buffer.o && buffer.dType === "kv" && mhchemParser.patterns.match_("d-oxidation$", buffer.d || "")) { + buffer.dType = "oxidation"; + } else if (buffer.o && buffer.dType === "kv" && !buffer.q) { + buffer.dType = void 0; + } + } + ret.push({ + type_: "chemfive", + a: mhchemParser.go(buffer.a, "a"), + b: mhchemParser.go(buffer.b, "bd"), + p: mhchemParser.go(buffer.p, "pq"), + o: mhchemParser.go(buffer.o, "o"), + q: mhchemParser.go(buffer.q, "pq"), + d: mhchemParser.go( + buffer.d, + buffer.dType === "oxidation" ? "oxidation" : "bd" + ), + dType: buffer.dType + }); + } + } else { + var rd; + if (buffer.rdt === "M") { + rd = mhchemParser.go(buffer.rd, "tex-math"); + } else if (buffer.rdt === "T") { + rd = [{ type_: "text", p1: buffer.rd || "" }]; + } else { + rd = mhchemParser.go(buffer.rd); + } + var rq; + if (buffer.rqt === "M") { + rq = mhchemParser.go(buffer.rq, "tex-math"); + } else if (buffer.rqt === "T") { + rq = [{ type_: "text", p1: buffer.rq || "" }]; + } else { + rq = mhchemParser.go(buffer.rq); + } + ret = { + type_: "arrow", + r: buffer.r, + rd, + rq + }; + } + for (var p in buffer) { + if (p !== "parenthesisLevel" && p !== "beginsWithBond") { + delete buffer[p]; + } + } + return ret; + }, + "oxidation-output": function(buffer, m) { + var ret = ["{"]; + mhchemParser.concatArray(ret, mhchemParser.go(m, "oxidation")); + ret.push("}"); + return ret; + }, + "frac-output": function(buffer, m) { + return { + type_: "frac-ce", + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + "overset-output": function(buffer, m) { + return { + type_: "overset", + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + "underset-output": function(buffer, m) { + return { + type_: "underset", + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + "underbrace-output": function(buffer, m) { + return { + type_: "underbrace", + p1: mhchemParser.go(m[0]), + p2: mhchemParser.go(m[1]) + }; + }, + "color-output": function(buffer, m) { + return { type_: "color", color1: m[0], color2: mhchemParser.go(m[1]) }; + }, + "r=": function(buffer, m) { + buffer.r = m; + }, + "rdt=": function(buffer, m) { + buffer.rdt = m; + }, + "rd=": function(buffer, m) { + buffer.rd = m; + }, + "rqt=": function(buffer, m) { + buffer.rqt = m; + }, + "rq=": function(buffer, m) { + buffer.rq = m; + }, + "operator": function(buffer, m, p1) { + return { type_: "operator", kind_: p1 || m }; + } + } + }, + "a": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + "1/2$": { + "0": { action_: "1/2" } + }, + "else": { + "0": { nextState: "1", revisit: true } + }, + "$(...)$": { + "*": { action_: "tex-math tight", nextState: "1" } + }, + ",": { + "*": { action_: { type_: "insert", option: "commaDecimal" } } + }, + "else2": { + "*": { action_: "copy" } + } + }), + actions: {} + }, + "o": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + "1/2$": { + "0": { action_: "1/2" } + }, + "else": { + "0": { nextState: "1", revisit: true } + }, + "letters": { + "*": { action_: "rm" } + }, + "\\ca": { + "*": { action_: { type_: "insert", option: "circa" } } + }, + "\\x{}{}|\\x{}|\\x": { + "*": { action_: "copy" } + }, + "${(...)}$|$(...)$": { + "*": { action_: "tex-math" } + }, + "{(...)}": { + "*": { action_: "{text}" } + }, + "else2": { + "*": { action_: "copy" } + } + }), + actions: {} + }, + "text": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "{...}": { + "*": { action_: "text=" } + }, + "${(...)}$|$(...)$": { + "*": { action_: "tex-math" } + }, + "\\greek": { + "*": { action_: ["output", "rm"] } + }, + "\\,|\\x{}{}|\\x{}|\\x": { + "*": { action_: ["output", "copy"] } + }, + "else": { + "*": { action_: "text=" } + } + }), + actions: { + output: function(buffer) { + if (buffer.text_) { + var ret = { type_: "text", p1: buffer.text_ }; + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + } + }, + "pq": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + "state of aggregation $": { + "*": { action_: "state of aggregation" } + }, + "i$": { + "0": { nextState: "!f", revisit: true } + }, + "(KV letters),": { + "0": { action_: "rm", nextState: "0" } + }, + "formula$": { + "0": { nextState: "f", revisit: true } + }, + "1/2$": { + "0": { action_: "1/2" } + }, + "else": { + "0": { nextState: "!f", revisit: true } + }, + "${(...)}$|$(...)$": { + "*": { action_: "tex-math" } + }, + "{(...)}": { + "*": { action_: "text" } + }, + "a-z": { + f: { action_: "tex-math" } + }, + "letters": { + "*": { action_: "rm" } + }, + "-9.,9": { + "*": { action_: "9,9" } + }, + ",": { + "*": { action_: { type_: "insert+p1", option: "comma enumeration S" } } + }, + "\\color{(...)}{(...)}1|\\color(...){(...)}2": { + "*": { action_: "color-output" } + }, + "\\color{(...)}0": { + "*": { action_: "color0-output" } + }, + "\\ce{(...)}": { + "*": { action_: "ce" } + }, + "\\,|\\x{}{}|\\x{}|\\x": { + "*": { action_: "copy" } + }, + "else2": { + "*": { action_: "copy" } + } + }), + actions: { + "state of aggregation": function(buffer, m) { + return { + type_: "state of aggregation subscript", + p1: mhchemParser.go(m, "o") + }; + }, + "color-output": function(buffer, m) { + return { + type_: "color", + color1: m[0], + color2: mhchemParser.go(m[1], "pq") + }; + } + } + }, + "bd": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + "x$": { + "0": { nextState: "!f", revisit: true } + }, + "formula$": { + "0": { nextState: "f", revisit: true } + }, + "else": { + "0": { nextState: "!f", revisit: true } + }, + "-9.,9 no missing 0": { + "*": { action_: "9,9" } + }, + ".": { + "*": { action_: { type_: "insert", option: "electron dot" } } + }, + "a-z": { + f: { action_: "tex-math" } + }, + "x": { + "*": { action_: { type_: "insert", option: "KV x" } } + }, + "letters": { + "*": { action_: "rm" } + }, + "'": { + "*": { action_: { type_: "insert", option: "prime" } } + }, + "${(...)}$|$(...)$": { + "*": { action_: "tex-math" } + }, + "{(...)}": { + "*": { action_: "text" } + }, + "\\color{(...)}{(...)}1|\\color(...){(...)}2": { + "*": { action_: "color-output" } + }, + "\\color{(...)}0": { + "*": { action_: "color0-output" } + }, + "\\ce{(...)}": { + "*": { action_: "ce" } + }, + "\\,|\\x{}{}|\\x{}|\\x": { + "*": { action_: "copy" } + }, + "else2": { + "*": { action_: "copy" } + } + }), + actions: { + "color-output": function(buffer, m) { + return { + type_: "color", + color1: m[0], + color2: mhchemParser.go(m[1], "bd") + }; + } + } + }, + "oxidation": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + "roman numeral": { + "*": { action_: "roman-numeral" } + }, + "${(...)}$|$(...)$": { + "*": { action_: "tex-math" } + }, + "else": { + "*": { action_: "copy" } + } + }), + actions: { + "roman-numeral": function(buffer, m) { + return { type_: "roman numeral", p1: m || "" }; + } + } + }, + "tex-math": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "\\ce{(...)}": { + "*": { action_: ["output", "ce"] } + }, + "{...}|\\,|\\x{}{}|\\x{}|\\x": { + "*": { action_: "o=" } + }, + "else": { + "*": { action_: "o=" } + } + }), + actions: { + output: function(buffer) { + if (buffer.o) { + var ret = { type_: "tex-math", p1: buffer.o }; + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + } + }, + "tex-math tight": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "\\ce{(...)}": { + "*": { action_: ["output", "ce"] } + }, + "{...}|\\,|\\x{}{}|\\x{}|\\x": { + "*": { action_: "o=" } + }, + "-|+": { + "*": { action_: "tight operator" } + }, + "else": { + "*": { action_: "o=" } + } + }), + actions: { + "tight operator": function(buffer, m) { + buffer.o = (buffer.o || "") + "{" + m + "}"; + }, + "output": function(buffer) { + if (buffer.o) { + var ret = { type_: "tex-math", p1: buffer.o }; + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + } + }, + "9,9": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": {} + }, + ",": { + "*": { action_: "comma" } + }, + "else": { + "*": { action_: "copy" } + } + }), + actions: { + comma: function() { + return { type_: "commaDecimal" }; + } + } + }, + //#endregion + // + // \pu state machines + // + //#region pu + "pu": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "space$": { + "*": { action_: ["output", "space"] } + }, + "{[(|)]}": { + "0|a": { action_: "copy" } + }, + "(-)(9)^(-9)": { + "0": { action_: "number^", nextState: "a" } + }, + "(-)(9.,9)(e)(99)": { + "0": { action_: "enumber", nextState: "a" } + }, + "space": { + "0|a": {} + }, + "pm-operator": { + "0|a": { + action_: { type_: "operator", option: "\\pm" }, + nextState: "0" + } + }, + "operator": { + "0|a": { action_: "copy", nextState: "0" } + }, + "//": { + d: { action_: "o=", nextState: "/" } + }, + "/": { + d: { action_: "o=", nextState: "/" } + }, + "{...}|else": { + "0|d": { action_: "d=", nextState: "d" }, + "a": { action_: ["space", "d="], nextState: "d" }, + "/|q": { action_: "q=", nextState: "q" } + } + }), + actions: { + "enumber": function(buffer, m) { + var ret = []; + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + if (m[1]) { + mhchemParser.concatArray(ret, mhchemParser.go(m[1], "pu-9,9")); + if (m[2]) { + if (m[2].match(/[,.]/)) { + mhchemParser.concatArray(ret, mhchemParser.go(m[2], "pu-9,9")); + } else { + ret.push(m[2]); + } + } + if (m[3] || m[4]) { + if (m[3] === "e" || m[4] === "*") { + ret.push({ type_: "cdot" }); + } else { + ret.push({ type_: "times" }); + } + } + } + if (m[5]) { + ret.push("10^{" + m[5] + "}"); + } + return ret; + }, + "number^": function(buffer, m) { + var ret = []; + if (m[0] === "+-" || m[0] === "+/-") { + ret.push("\\pm "); + } else if (m[0]) { + ret.push(m[0]); + } + mhchemParser.concatArray(ret, mhchemParser.go(m[1], "pu-9,9")); + ret.push("^{" + m[2] + "}"); + return ret; + }, + "operator": function(buffer, m, p1) { + return { type_: "operator", kind_: p1 || m }; + }, + "space": function() { + return { type_: "pu-space-1" }; + }, + "output": function(buffer) { + var ret; + var md = mhchemParser.patterns.match_("{(...)}", buffer.d || ""); + if (md && md.remainder === "") { + buffer.d = md.match_; + } + var mq = mhchemParser.patterns.match_("{(...)}", buffer.q || ""); + if (mq && mq.remainder === "") { + buffer.q = mq.match_; + } + if (buffer.d) { + buffer.d = buffer.d.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.d = buffer.d.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + } + if (buffer.q) { + buffer.q = buffer.q.replace(/\u00B0C|\^oC|\^{o}C/g, "{}^{\\circ}C"); + buffer.q = buffer.q.replace(/\u00B0F|\^oF|\^{o}F/g, "{}^{\\circ}F"); + var b5 = { + d: mhchemParser.go(buffer.d, "pu"), + q: mhchemParser.go(buffer.q, "pu") + }; + if (buffer.o === "//") { + ret = { type_: "pu-frac", p1: b5.d, p2: b5.q }; + } else { + ret = b5.d; + if (b5.d.length > 1 || b5.q.length > 1) { + ret.push({ type_: " / " }); + } else { + ret.push({ type_: "/" }); + } + mhchemParser.concatArray(ret, b5.q); + } + } else { + ret = mhchemParser.go(buffer.d, "pu-2"); + } + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + }, + "pu-2": { + transitions: mhchemParser.createTransitions({ + "empty": { + "*": { action_: "output" } + }, + "*": { + "*": { action_: ["output", "cdot"], nextState: "0" } + }, + "\\x": { + "*": { action_: "rm=" } + }, + "space": { + "*": { action_: ["output", "space"], nextState: "0" } + }, + "^{(...)}|^(-1)": { + "1": { action_: "^(-1)" } + }, + "-9.,9": { + "0": { action_: "rm=", nextState: "0" }, + "1": { action_: "^(-1)", nextState: "0" } + }, + "{...}|else": { + "*": { action_: "rm=", nextState: "1" } + } + }), + actions: { + "cdot": function() { + return { type_: "tight cdot" }; + }, + "^(-1)": function(buffer, m) { + buffer.rm += "^{" + m + "}"; + }, + "space": function() { + return { type_: "pu-space-2" }; + }, + "output": function(buffer) { + var ret = []; + if (buffer.rm) { + var mrm = mhchemParser.patterns.match_("{(...)}", buffer.rm || ""); + if (mrm && mrm.remainder === "") { + ret = mhchemParser.go(mrm.match_, "pu"); + } else { + ret = { type_: "rm", p1: buffer.rm }; + } + } + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + }, + "pu-9,9": { + transitions: mhchemParser.createTransitions({ + "empty": { + "0": { action_: "output-0" }, + "o": { action_: "output-o" } + }, + ",": { + "0": { action_: ["output-0", "comma"], nextState: "o" } + }, + ".": { + "0": { action_: ["output-0", "copy"], nextState: "o" } + }, + "else": { + "*": { action_: "text=" } + } + }), + actions: { + "comma": function() { + return { type_: "commaDecimal" }; + }, + "output-0": function(buffer) { + var ret = []; + buffer.text_ = buffer.text_ || ""; + if (buffer.text_.length > 4) { + var a = buffer.text_.length % 3; + if (a === 0) { + a = 3; + } + for (var i = buffer.text_.length - 3; i > 0; i -= 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ type_: "1000 separator" }); + } + ret.push(buffer.text_.substr(0, a)); + ret.reverse(); + } else { + ret.push(buffer.text_); + } + for (var p in buffer) { + delete buffer[p]; + } + return ret; + }, + "output-o": function(buffer) { + var ret = []; + buffer.text_ = buffer.text_ || ""; + if (buffer.text_.length > 4) { + var a = buffer.text_.length - 3; + for (var i = 0; i < a; i += 3) { + ret.push(buffer.text_.substr(i, 3)); + ret.push({ type_: "1000 separator" }); + } + ret.push(buffer.text_.substr(i)); + } else { + ret.push(buffer.text_); + } + for (var p in buffer) { + delete buffer[p]; + } + return ret; + } + } + } + //#endregion + }; + var texify = { + go: function(input, isInner) { + if (!input) { + return ""; + } + var res = ""; + var cee = false; + for (var i = 0; i < input.length; i++) { + var inputi = input[i]; + if (typeof inputi === "string") { + res += inputi; + } else { + res += texify._go2(inputi); + if (inputi.type_ === "1st-level escape") { + cee = true; + } + } + } + if (!isInner && !cee && res) { + res = "{" + res + "}"; + } + return res; + }, + _goInner: function(input) { + if (!input) { + return input; + } + return texify.go(input, true); + }, + _go2: function(buf) { + var res; + switch (buf.type_) { + case "chemfive": + res = ""; + var b5 = { + a: texify._goInner(buf.a), + b: texify._goInner(buf.b), + p: texify._goInner(buf.p), + o: texify._goInner(buf.o), + q: texify._goInner(buf.q), + d: texify._goInner(buf.d) + }; + if (b5.a) { + if (b5.a.match(/^[+\-]/)) { + b5.a = "{" + b5.a + "}"; + } + res += b5.a + "\\,"; + } + if (b5.b || b5.p) { + res += "{\\vphantom{X}}"; + res += "^{\\hphantom{" + (b5.b || "") + "}}_{\\hphantom{" + (b5.p || "") + "}}"; + res += "{\\vphantom{X}}"; + res += "^{\\smash[t]{\\vphantom{2}}\\llap{" + (b5.b || "") + "}}"; + res += "_{\\vphantom{2}\\llap{\\smash[t]{" + (b5.p || "") + "}}}"; + } + if (b5.o) { + if (b5.o.match(/^[+\-]/)) { + b5.o = "{" + b5.o + "}"; + } + res += b5.o; + } + if (buf.dType === "kv") { + if (b5.d || b5.q) { + res += "{\\vphantom{X}}"; + } + if (b5.d) { + res += "^{" + b5.d + "}"; + } + if (b5.q) { + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else if (buf.dType === "oxidation") { + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + } else { + if (b5.q) { + res += "{\\vphantom{X}}"; + res += "_{\\smash[t]{" + b5.q + "}}"; + } + if (b5.d) { + res += "{\\vphantom{X}}"; + res += "^{" + b5.d + "}"; + } + } + break; + case "rm": + res = "\\mathrm{" + buf.p1 + "}"; + break; + case "text": + if (buf.p1.match(/[\^_]/)) { + buf.p1 = buf.p1.replace(" ", "~").replace("-", "\\text{-}"); + res = "\\mathrm{" + buf.p1 + "}"; + } else { + res = "\\text{" + buf.p1 + "}"; + } + break; + case "roman numeral": + res = "\\mathrm{" + buf.p1 + "}"; + break; + case "state of aggregation": + res = "\\mskip2mu " + texify._goInner(buf.p1); + break; + case "state of aggregation subscript": + res = "\\mskip1mu " + texify._goInner(buf.p1); + break; + case "bond": + res = texify._getBond(buf.kind_); + if (!res) { + throw [ + "MhchemErrorBond", + "mhchem Error. Unknown bond type (" + buf.kind_ + ")" + ]; + } + break; + case "frac": + var c = "\\frac{" + buf.p1 + "}{" + buf.p2 + "}"; + res = "\\mathchoice{\\textstyle" + c + "}{" + c + "}{" + c + "}{" + c + "}"; + break; + case "pu-frac": + var d = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + res = "\\mathchoice{\\textstyle" + d + "}{" + d + "}{" + d + "}{" + d + "}"; + break; + case "tex-math": + res = buf.p1 + " "; + break; + case "frac-ce": + res = "\\frac{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + case "overset": + res = "\\overset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + case "underset": + res = "\\underset{" + texify._goInner(buf.p1) + "}{" + texify._goInner(buf.p2) + "}"; + break; + case "underbrace": + res = "\\underbrace{" + texify._goInner(buf.p1) + "}_{" + texify._goInner(buf.p2) + "}"; + break; + case "color": + res = "{\\color{" + buf.color1 + "}{" + texify._goInner(buf.color2) + "}}"; + break; + case "color0": + res = "\\color{" + buf.color + "}"; + break; + case "arrow": + var b6 = { + rd: texify._goInner(buf.rd), + rq: texify._goInner(buf.rq) + }; + var arrow = texify._getArrow(buf.r); + if (b6.rd || b6.rq) { + if (buf.r === "<=>" || buf.r === "<=>>" || buf.r === "<<=>" || buf.r === "<-->") { + arrow = "\\long" + arrow; + if (b6.rd) { + arrow = "\\overset{" + b6.rd + "}{" + arrow + "}"; + } + if (b6.rq) { + if (buf.r === "<-->") { + arrow = "\\underset{\\lower2mu{" + b6.rq + "}}{" + arrow + "}"; + } else { + arrow = "\\underset{\\lower6mu{" + b6.rq + "}}{" + arrow + "}"; + } + } + arrow = " {}\\mathrel{" + arrow + "}{} "; + } else { + if (b6.rq) { + arrow += "[{" + b6.rq + "}]"; + } + arrow += "{" + b6.rd + "}"; + arrow = " {}\\mathrel{\\x" + arrow + "}{} "; + } + } else { + arrow = " {}\\mathrel{\\long" + arrow + "}{} "; + } + res = arrow; + break; + case "operator": + res = texify._getOperator(buf.kind_); + break; + case "1st-level escape": + res = buf.p1 + " "; + break; + case "space": + res = " "; + break; + case "entitySkip": + res = "~"; + break; + case "pu-space-1": + res = "~"; + break; + case "pu-space-2": + res = "\\mkern3mu "; + break; + case "1000 separator": + res = "\\mkern2mu "; + break; + case "commaDecimal": + res = "{,}"; + break; + case "comma enumeration L": + res = "{" + buf.p1 + "}\\mkern6mu "; + break; + case "comma enumeration M": + res = "{" + buf.p1 + "}\\mkern3mu "; + break; + case "comma enumeration S": + res = "{" + buf.p1 + "}\\mkern1mu "; + break; + case "hyphen": + res = "\\text{-}"; + break; + case "addition compound": + res = "\\,{\\cdot}\\,"; + break; + case "electron dot": + res = "\\mkern1mu \\bullet\\mkern1mu "; + break; + case "KV x": + res = "{\\times}"; + break; + case "prime": + res = "\\prime "; + break; + case "cdot": + res = "\\cdot "; + break; + case "tight cdot": + res = "\\mkern1mu{\\cdot}\\mkern1mu "; + break; + case "times": + res = "\\times "; + break; + case "circa": + res = "{\\sim}"; + break; + case "^": + res = "uparrow"; + break; + case "v": + res = "downarrow"; + break; + case "ellipsis": + res = "\\ldots "; + break; + case "/": + res = "/"; + break; + case " / ": + res = "\\,/\\,"; + break; + default: + assertNever(buf); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + assertString(res); + return res; + }, + _getArrow: function(a) { + switch (a) { + case "->": + return "rightarrow"; + case "\u2192": + return "rightarrow"; + case "\u27F6": + return "rightarrow"; + case "<-": + return "leftarrow"; + case "<->": + return "leftrightarrow"; + case "<-->": + return "leftrightarrows"; + case "<=>": + return "rightleftharpoons"; + case "\u21CC": + return "rightleftharpoons"; + case "<=>>": + return "Rightleftharpoons"; + case "<<=>": + return "Leftrightharpoons"; + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getBond: function(a) { + switch (a) { + case "-": + return "{-}"; + case "1": + return "{-}"; + case "=": + return "{=}"; + case "2": + return "{=}"; + case "#": + return "{\\equiv}"; + case "3": + return "{\\equiv}"; + case "~": + return "{\\tripledash}"; + case "~-": + return "{\\rlap{\\lower.1em{-}}\\raise.1em{\\tripledash}}"; + case "~=": + return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}"; + case "~--": + return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{\\tripledash}}-}"; + case "-~-": + return "{\\rlap{\\lower.2em{-}}\\rlap{\\raise.2em{-}}\\tripledash}"; + case "...": + return "{{\\cdot}{\\cdot}{\\cdot}}"; + case "....": + return "{{\\cdot}{\\cdot}{\\cdot}{\\cdot}}"; + case "->": + return "{\\rightarrow}"; + case "<-": + return "{\\leftarrow}"; + case "<": + return "{<}"; + case ">": + return "{>}"; + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + }, + _getOperator: function(a) { + switch (a) { + case "+": + return " {}+{} "; + case "-": + return " {}-{} "; + case "=": + return " {}={} "; + case "<": + return " {}<{} "; + case ">": + return " {}>{} "; + case "<<": + return " {}\\ll{} "; + case ">>": + return " {}\\gg{} "; + case "\\pm": + return " {}\\pm{} "; + case "\\approx": + return " {}\\approx{} "; + case "$\\approx$": + return " {}\\approx{} "; + case "v": + return " \\downarrow{} "; + case "(v)": + return " \\downarrow{} "; + case "^": + return " \\uparrow{} "; + case "(^)": + return " \\uparrow{} "; + default: + assertNever(a); + throw ["MhchemBugT", "mhchem bug T. Please report."]; + } + } + }; + function assertNever(a) { + } + function assertString(a) { + } + + // src/atoms/delim.ts + var MiddleDelimAtom = class _MiddleDelimAtom extends Atom { + constructor(options) { + super(__spreadProps(__spreadValues({}, options), { type: "delim" })); + this.value = options.delim; + this.size = options.size; + } + static fromJson(json) { + return new _MiddleDelimAtom(json); + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { delim: this.value, size: this.size }); + } + render(_context) { + return new Box(this.value, { type: "middle" }); + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + return latexCommand(this.command, this.value); + } + }; + var SizedDelimAtom = class _SizedDelimAtom extends Atom { + constructor(options) { + super(__spreadProps(__spreadValues({}, options), { type: "sizeddelim", value: options.delim })); + this.delimType = options.delimType; + this.size = options.size; + } + static fromJson(json) { + return new _SizedDelimAtom(json); + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { + delim: this.value, + size: this.size, + delimType: this.delimType + }); + } + render(context) { + let result = makeSizedDelim(this.value, this.size, context, { + classes: { open: "ML__open", close: "ML__close" }[this.delimType], + type: this.delimType, + isSelected: this.isSelected + }); + if (!result) return null; + result = this.bind(context, result); + if (this.caret) result.caret = this.caret; + return result; + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + return latexCommand(this.command, this.value); + } + }; + + // src/atoms/enclose.ts + function escapeSvgAttr(s) { + return s.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); + } + var EncloseAtom = class _EncloseAtom extends Atom { + constructor(command, body, notation, options) { + var _a3, _b3; + super({ type: "enclose", command, style: options.style }); + this.body = body; + this.backgroundcolor = options.backgroundcolor; + if (notation.updiagonalarrow) notation.updiagonalstrike = false; + if (notation.box) { + notation.left = false; + notation.right = false; + notation.bottom = false; + notation.top = false; + } + this.notation = notation; + this.shadow = (_a3 = options.shadow) != null ? _a3 : "none"; + this.strokeWidth = (_b3 = options.strokeWidth) != null ? _b3 : "0.06em"; + if (!this.strokeWidth) this.strokeWidth = "0.06em"; + this.strokeStyle = options.strokeStyle; + this.svgStrokeStyle = options.svgStrokeStyle; + this.strokeColor = options.strokeColor; + this.borderStyle = options.borderStyle; + this.padding = options.padding; + this.captureSelection = false; + } + static fromJson(json) { + return new _EncloseAtom( + json.command, + json.body, + json.notation, + json + ); + } + toJson() { + return __spreadProps(__spreadValues({}, super.toJson()), { + notation: this.notation, + shadow: this.shadow, + strokeWidth: this.strokeWidth, + strokeStyle: this.strokeStyle, + svgStrokeStyle: this.svgStrokeStyle, + strokeColor: this.strokeColor, + borderStyle: this.borderStyle, + padding: this.padding + }); + } + _serialize(options) { + var _a3; + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + let command = (_a3 = this.command) != null ? _a3 : ""; + if (this.command === "\\enclose") { + command += "{" + Object.keys(this.notation).join(" ") + "}"; + let style = ""; + let sep = ""; + if (this.backgroundcolor && this.backgroundcolor !== "transparent") { + style += sep + 'mathbackground="' + this.backgroundcolor + '"'; + sep = ","; + } + if (this.shadow && this.shadow !== "auto") { + style += sep + 'shadow="' + this.shadow + '"'; + sep = ","; + } + if (this.strokeWidth || this.strokeStyle !== "solid") { + style += sep + this.borderStyle; + sep = ","; + } else if (this.strokeColor && this.strokeColor !== "currentColor") { + style += sep + 'mathcolor="' + this.strokeColor + '"'; + sep = ","; + } + if (style) command += `[${style}]`; + } + return latexCommand(command, this.bodyToLatex(options)); + } + render(parentContext) { + var _a3, _b3, _c2, _d2, _e; + const context = new Context({ parent: parentContext }, this.style); + const base = Atom.createBox(context, this.body); + if (!base) return null; + const borderWidth = borderDim(this.borderStyle); + const padding2 = context.toEm( + !this.padding || this.padding === "auto" ? { register: "fboxsep" } : { string: this.padding } + ); + base.setStyle("position", "relative"); + base.setStyle("display", "inline-block"); + base.setStyle("height", base.height + base.depth, "em"); + base.setStyle("width", base.width, "em"); + const notation = new Box(null, { classes: "ML__notation" }); + let h = base.height + base.depth + 2 * padding2; + const w = base.width + 2 * padding2; + let svg = ""; + const margin = Math.min(padding2 * 0.2, 0.05); + if (this.notation.horizontalstrike) { + const y = 2 * padding2 + base.height - X_HEIGHT / 2; + svg += this.line( + (padding2 + margin).toString(), + y.toString(), + (padding2 + base.width - margin).toString(), + y.toString() + ); + } + if (this.notation.verticalstrike) { + const x = padding2 + base.width / 2; + svg += this.line( + x.toString(), + (padding2 + margin).toString(), + x.toString(), + (h - padding2 - margin).toString() + ); + } + if (this.notation.updiagonalstrike) { + svg += this.line( + (padding2 + margin).toString(), + (h - padding2 - margin).toString(), + // bottom + (padding2 + base.width - margin).toString(), + (padding2 + margin).toString() + // top + ); + } + if (this.notation.downdiagonalstrike) { + svg += this.line( + (padding2 + margin).toString(), + (padding2 + margin).toString(), + // top + (padding2 + base.width - margin).toString(), + (h - padding2 - margin).toString() + // bottom + ); + } + if (this.notation.updiagonalarrow) { + svg += this.line( + padding2.toString(), + (2 * padding2 + base.depth + base.height).toString(), + (padding2 + base.width).toString(), + padding2.toString() + ); + const t = 1; + const length = Math.sqrt(w * w + h * h); + const f = 0.03 * length * t; + const wf = base.width * f; + const hf = (base.depth + base.height) * f; + const x = padding2 + base.width; + let y = padding2; + if (y + hf - 0.4 * wf < 0) y = 0.4 * wf - hf; + svg += '`; + } + }; + function coord(c) { + if (typeof c === "number") return `${Math.floor(100 * c) / 100}%`; + return c; + } + function borderDim(s) { + if (!s) return "1px"; + const m = s.match(/([0-9][a-zA-Z\%]+)/); + if (m === null) return "1px"; + return m[1]; + } + function getRuleThickness(ctx) { + return (Math.floor(100 * ctx.metrics.sqrtRuleThickness / ctx.scalingFactor) / 100 / 10).toString() + "em"; + } + function getClearance(ctx) { + const phi = ctx.isDisplayStyle ? X_HEIGHT : ctx.metrics.defaultRuleThickness; + return ctx.metrics.defaultRuleThickness + ctx.scalingFactor * phi / 4; + } + + // src/core/math-environment.ts + var _MathEnvironment = { + fractionNavigationOrder: "numerator-denominator" + }; + + // src/atoms/genfrac.ts + var GenfracAtom = class _GenfracAtom extends Atom { + constructor(above, below, options) { + var _a3, _b3, _c2; + super(__spreadProps(__spreadValues({}, options), { + type: "genfrac", + displayContainsHighlight: true + })); + this.above = above; + this.below = below; + this.hasBarLine = (_a3 = options == null ? void 0 : options.hasBarLine) != null ? _a3 : true; + this.continuousFraction = (_b3 = options == null ? void 0 : options.continuousFraction) != null ? _b3 : false; + this.align = (_c2 = options == null ? void 0 : options.align) != null ? _c2 : "center"; + this.numerPrefix = options == null ? void 0 : options.numerPrefix; + this.denomPrefix = options == null ? void 0 : options.denomPrefix; + this.mathstyleName = options == null ? void 0 : options.mathstyleName; + this.leftDelim = options == null ? void 0 : options.leftDelim; + this.rightDelim = options == null ? void 0 : options.rightDelim; + } + static fromJson(json) { + return new _GenfracAtom( + json.above, + json.below, + json + ); + } + toJson() { + const options = {}; + if (this.continuousFraction) options.continuousFraction = true; + if (this.align !== "center") options.align = this.align; + if (this.numerPrefix) options.numerPrefix = this.numerPrefix; + if (this.denomPrefix) options.denomPrefix = this.denomPrefix; + if (this.leftDelim) options.leftDelim = this.leftDelim; + if (this.rightDelim) options.rightDelim = this.rightDelim; + if (!this.hasBarLine) options.hasBarLine = false; + if (this.mathstyleName) options.mathstyleName = this.mathstyleName; + return __spreadValues(__spreadValues({}, super.toJson()), options); + } + // The order of the children, which is used for keyboard navigation order, + // may be customized for fractions... + get children() { + if (this._children) return this._children; + const result = []; + if (_MathEnvironment.fractionNavigationOrder === "denominator-numerator") { + for (const x of this.below) { + result.push(...x.children); + result.push(x); + } + for (const x of this.above) { + result.push(...x.children); + result.push(x); + } + } else { + for (const x of this.above) { + result.push(...x.children); + result.push(x); + } + for (const x of this.below) { + result.push(...x.children); + result.push(x); + } + } + this._children = result; + return result; + } + render(context) { + var _a3, _b3; + const fracContext = new Context( + { parent: context, mathstyle: this.mathstyleName }, + this.style + ); + const metrics = fracContext.metrics; + const numContext = new Context( + { + parent: fracContext, + mathstyle: this.continuousFraction ? "" : "numerator" + }, + this.style + ); + const numerBox = this.numerPrefix ? new Box( + [new Box(this.numerPrefix), Atom.createBox(numContext, this.above)], + { isTight: numContext.isTight, type: "ignore" } + ) : (_a3 = Atom.createBox(numContext, this.above, { type: "ignore" })) != null ? _a3 : new Box(null, { type: "ignore" }); + const denomContext = new Context( + { + parent: fracContext, + mathstyle: this.continuousFraction ? "" : "denominator" + }, + this.style + ); + const denomBox = this.denomPrefix ? new Box([ + new Box(this.denomPrefix), + Atom.createBox(denomContext, this.below, { type: "ignore" }) + ]) : (_b3 = Atom.createBox(denomContext, this.below, { type: "ignore" })) != null ? _b3 : new Box(null, { type: "ignore" }); + const ruleThickness = this.hasBarLine ? metrics.defaultRuleThickness : 0; + let numerShift; + let clearance = 0; + let denomShift; + if (fracContext.isDisplayStyle) { + numerShift = numContext.metrics.num1; + clearance = ruleThickness > 0 ? 3 * ruleThickness : 7 * ruleThickness; + denomShift = denomContext.metrics.denom1; + } else { + if (ruleThickness > 0) { + numerShift = numContext.metrics.num2; + clearance = ruleThickness; + } else { + numerShift = numContext.metrics.num3; + clearance = 3 * metrics.defaultRuleThickness; + } + denomShift = denomContext.metrics.denom2; + } + const classes = []; + if (this.isSelected) classes.push("ML__selected"); + const numerDepth = numerBox.depth; + const denomHeight = denomBox.height; + let frac; + if (ruleThickness <= 0) { + const candidateClearance = numerShift - numerDepth - (denomHeight - denomShift); + if (candidateClearance < clearance) { + numerShift += (clearance - candidateClearance) / 2; + denomShift += (clearance - candidateClearance) / 2; + } + frac = new VBox({ + individualShift: [ + { + box: numerBox, + shift: -numerShift, + classes: [...classes, align2(this.align)] + }, + { + box: denomBox, + shift: denomShift, + classes: [...classes, align2(this.align)] + } + ] + }).wrap(fracContext); + } else { + const fracLine = new Box(null, { + classes: "ML__frac-line", + mode: this.mode, + style: this.style + }); + fracLine.softWidth = Math.max(numerBox.width, denomBox.width); + fracLine.height = ruleThickness / 2; + fracLine.depth = ruleThickness / 2; + const numerLine = AXIS_HEIGHT + ruleThickness / 2; + if (numerShift < clearance + numerDepth + numerLine) + numerShift = clearance + numerDepth + numerLine; + const denomLine = AXIS_HEIGHT - ruleThickness / 2; + if (denomShift < clearance + denomHeight - denomLine) + denomShift = clearance + denomHeight - denomLine; + frac = new VBox({ + individualShift: [ + { + box: denomBox, + shift: denomShift, + classes: [...classes, align2(this.align)] + }, + { box: fracLine, shift: -denomLine, classes }, + { + box: numerBox, + shift: -numerShift, + classes: [...classes, align2(this.align)] + } + ] + }).wrap(fracContext); + } + const delimSize = fracContext.isDisplayStyle ? metrics.delim1 : metrics.delim2; + const leftDelim = this.leftDelim ? this.bind( + context, + makeCustomSizedDelim( + "open", + this.leftDelim, + delimSize, + true, + context, + { style: this.style, mode: this.mode, isSelected: this.isSelected } + ) + ) : makeNullDelimiter(fracContext, "ML__open"); + let rightDelim = null; + if (this.continuousFraction) { + rightDelim = new Box(null, { type: "close" }); + } else if (!this.rightDelim) + rightDelim = makeNullDelimiter(fracContext, "ML__close"); + else { + rightDelim = this.bind( + context, + makeCustomSizedDelim( + "close", + this.rightDelim, + delimSize, + true, + context, + { style: this.style, mode: this.mode, isSelected: this.isSelected } + ) + ); + } + const mfrac = new Box([leftDelim, frac, rightDelim], { + isTight: fracContext.isTight, + type: "inner", + classes: "ML__mfrac" + }); + const result = this.bind(context, mfrac); + if (this.caret) result.caret = this.caret; + return this.attachSupsub(context, { base: result }); + } + }; + function align2(v) { + var _a3; + return (_a3 = { + left: "ML__left", + right: "ML__right", + center: "ML__center" + }[v]) != null ? _a3 : "ML__center"; + } + + // src/atoms/latex.ts + var LatexAtom = class _LatexAtom extends Atom { + // Display errors with wavy red line + constructor(value, options) { + var _a3; + super({ type: "latex", value, mode: "latex" }); + this.isSuggestion = (_a3 = options == null ? void 0 : options.isSuggestion) != null ? _a3 : false; + this.isError = false; + } + static fromJson(json) { + const result = new _LatexAtom(json.value); + if (json.isSuggestion) result.isSuggestion = true; + if (json.isError) result.isError = true; + return result; + } + toJson() { + const options = {}; + if (this.isSuggestion) options.isSuggestion = true; + if (this.isError) options.isError = true; + return __spreadValues({ type: "latex", value: this.value }, options); + } + render(context) { + const result = new Box(this.value, { + classes: this.isSuggestion ? "ML__suggestion" : this.isError ? "ML__error" : "", + type: "latex", + maxFontSize: 1 + }); + if (!result) return null; + if (this.caret) result.caret = this.caret; + return this.bind(context, result); + } + }; + var LatexGroupAtom = class _LatexGroupAtom extends Atom { + constructor(latex = "") { + super({ type: "latexgroup", mode: "latex" }); + this.body = [...latex].map((c) => new LatexAtom(c)); + this.skipBoundary = true; + } + static fromJson(_json) { + return new _LatexGroupAtom(); + } + toJson() { + return super.toJson(); + } + render(context) { + const box = Atom.createBox(context, this.body); + if (!box) return null; + if (this.caret) box.caret = this.caret; + return this.bind(context, box); + } + _serialize(_options) { + var _a3, _b3; + return (_b3 = (_a3 = this.body) == null ? void 0 : _a3.map((x) => x.value).join("")) != null ? _b3 : ""; + } + }; + + // src/atoms/extensible-symbol.ts + var ExtensibleSymbolAtom = class _ExtensibleSymbolAtom extends Atom { + constructor(symbol, options) { + super(__spreadProps(__spreadValues({}, options), { + type: "extensible-symbol", + isFunction: options == null ? void 0 : options.isFunction + })); + this.value = symbol; + this.variant = options == null ? void 0 : options.variant; + this.subsupPlacement = options == null ? void 0 : options.limits; + } + static fromJson(json) { + return new _ExtensibleSymbolAtom(json.symbol, json); + } + toJson() { + const result = super.toJson(); + if (this.variant) result.variant = this.variant; + if (this.subsupPlacement) result.limits = this.subsupPlacement; + if (this.value) result.symbol = this.value; + return result; + } + render(context) { + var _a3; + const large = context.isDisplayStyle && this.value !== "\\smallint"; + const base = new Box(this.value, { + fontFamily: large ? "Size2-Regular" : "Size1-Regular", + classes: "ML__op-symbol " + (large ? "ML__large-op" : "ML__small-op"), + type: "op", + maxFontSize: context.scalingFactor, + isSelected: this.isSelected + }); + if (!base) return null; + base.right = base.italic; + const baseShift = (base.height - base.depth) / 2 - AXIS_HEIGHT * context.scalingFactor; + const slant = base.italic; + base.setTop(baseShift); + let result = base; + if (this.superscript || this.subscript) { + let limits = (_a3 = this.subsupPlacement) != null ? _a3 : "auto"; + if (limits === "auto" && context.isDisplayStyle) limits = "over-under"; + result = limits === "over-under" ? this.attachLimits(context, { base, baseShift, slant }) : this.attachSupsub(context, { base }); + } + return new Box(this.bind(context, result), { + type: "op", + caret: this.caret, + isSelected: this.isSelected, + classes: "ML__op-group" + }).wrap(context); + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + const result = []; + result.push(this.command); + if (this.explicitSubsupPlacement) { + if (this.subsupPlacement === "over-under") result.push("\\limits"); + if (this.subsupPlacement === "adjacent") result.push("\\nolimits"); + if (this.subsupPlacement === "auto") result.push("\\displaylimits"); + } + result.push(this.supsubToLatex(options)); + return joinLatex(result); + } + }; + + // src/atoms/overlap.ts + var OverlapAtom = class _OverlapAtom extends Atom { + constructor(options) { + const body = options.body; + super(__spreadProps(__spreadValues({}, options), { + type: "overlap", + body: typeof body === "string" ? [new Atom({ value: body })] : body, + style: options == null ? void 0 : options.style + })); + this.skipBoundary = true; + this.align = options == null ? void 0 : options.align; + this.boxType = options == null ? void 0 : options.boxType; + } + static fromJson(json) { + return new _OverlapAtom(json); + } + toJson() { + const options = {}; + if (this.align) options.align = this.align; + if (this.boxType) options.boxType = this.boxType; + return __spreadValues(__spreadValues({}, super.toJson()), options); + } + render(context) { + const inner = Atom.createBox(context, this.body, { classes: "ML__inner" }); + if (!inner) return null; + if (this.caret) inner.caret = this.caret; + return this.bind( + context, + new Box([inner, new Box(null, { classes: "ML__fix" })], { + classes: this.align === "right" ? "ML__rlap" : "ML__llap", + type: this.boxType + }) + ); + } + }; + + // src/atoms/overunder.ts + var OverunderAtom = class _OverunderAtom extends Atom { + constructor(options) { + var _a3, _b3, _c2, _d2; + super({ + type: "overunder", + command: options.command, + style: options.style, + mode: options.mode, + body: options.body, + skipBoundary: (_a3 = options.skipBoundary) != null ? _a3 : true + }); + this.subsupPlacement = options.supsubPlacement; + this.svgAbove = options.svgAbove; + this.svgBelow = options.svgBelow; + this.svgBody = options.svgBody; + this.above = options.above; + this.below = options.below; + this.boxType = (_b3 = options.boxType) != null ? _b3 : "ord"; + this.paddedBody = (_c2 = options.paddedBody) != null ? _c2 : false; + this.paddedLabels = (_d2 = options.paddedLabels) != null ? _d2 : false; + } + static fromJson(json) { + return new _OverunderAtom(json); + } + toJson() { + const json = super.toJson(); + if (!this.skipBoundary) json.skipBoundary = false; + if (this.subsupPlacement) json.subsupPlacement = this.subsupPlacement; + if (this.svgAbove) json.svgAbove = this.svgAbove; + if (this.svgBelow) json.svgBelow = this.svgBelow; + if (this.svgBody) json.svgBody = this.svgBody; + if (this.boxType !== "ord") json.boxType = this.boxType; + if (this.paddedBody) json.paddedBody = true; + if (this.paddedLabels) json.paddedLabels = true; + return json; + } + /** + * Combine a base with an atom above and an atom below. + * + * See http://tug.ctan.org/macros/latex/required/amsmath/amsmath.dtx + * + * > \newcommand{\overset}[2]{\binrel@{#2}% + * > \binrel@@{\mathop{\kern\z@#2}\limits^{#1}}} + * + */ + render(parentContext) { + let body = this.svgBody ? makeSVGBox(this.svgBody) : Atom.createBox(parentContext, this.body, { type: "ignore" }); + const annotationContext = new Context( + { parent: parentContext, mathstyle: "scriptstyle" }, + this.style + ); + let above = null; + if (this.svgAbove) above = makeSVGBox(this.svgAbove); + else if (this.above) + above = Atom.createBox(annotationContext, this.above, { type: "ignore" }); + let below = null; + if (this.svgBelow) below = makeSVGBox(this.svgBelow); + else if (this.below) + below = Atom.createBox(annotationContext, this.below, { type: "ignore" }); + if (this.paddedBody) { + body = new Box( + [ + makeNullDelimiter(parentContext, "ML__open"), + body, + makeNullDelimiter(parentContext, "ML__close") + ], + { type: "ignore" } + ); + } + let base = makeOverunderStack(parentContext, { + base: body, + above, + below, + type: this.boxType === "bin" || this.boxType === "rel" ? this.boxType : "ord", + paddedAboveBelow: this.paddedLabels + }); + if (!base) return null; + if (this.subsupPlacement === "over-under") + base = this.attachLimits(parentContext, { base, type: base.type }); + else base = this.attachSupsub(parentContext, { base }); + if (this.caret) base.caret = this.caret; + return this.bind(parentContext, base); + } + }; + function makeOverunderStack(context, options) { + if (!options.base) return null; + if (!options.above && !options.below) { + const box = new Box(options.base, { type: options.type }); + box.setStyle("position", "relative"); + return box; + } + let aboveShift = 0; + if (options.above) aboveShift = context.metrics.bigOpSpacing5; + let result = null; + const base = options.base; + const baseShift = 0; + const classes = ["ML__center"]; + if (options.paddedAboveBelow) classes.push("ML__label_padding"); + if (options.below && options.above) { + const bottom = context.metrics.bigOpSpacing5 + options.below.height + options.below.depth + base.depth + baseShift; + result = new VBox({ + bottom, + children: [ + context.metrics.bigOpSpacing5, + { box: options.below, classes }, + { box: base, classes: ["ML__center"] }, + aboveShift, + { box: options.above, classes }, + context.metrics.bigOpSpacing5 + ] + }); + } else if (options.below) { + result = new VBox({ + top: base.height - baseShift, + children: [ + context.metrics.bigOpSpacing5, + { box: options.below, classes }, + { box: base, classes: ["ML__center"] } + ] + }); + } else if (options.above) { + result = new VBox({ + bottom: base.depth + baseShift, + children: [ + // base.depth, + { box: base, classes: ["ML__center"] }, + aboveShift, + { box: options.above, classes }, + context.metrics.bigOpSpacing5 + ] + }); + } + return new Box(result, { type: options.type }); + } + + // src/atoms/phantom.ts + var PhantomAtom = class _PhantomAtom extends Atom { + constructor(options) { + var _a3, _b3, _c2, _d2; + super(__spreadProps(__spreadValues({}, options), { type: "phantom" })); + this.captureSelection = true; + this.isInvisible = (_a3 = options.isInvisible) != null ? _a3 : false; + this.smashDepth = (_b3 = options.smashDepth) != null ? _b3 : false; + this.smashHeight = (_c2 = options.smashHeight) != null ? _c2 : false; + this.smashWidth = (_d2 = options.smashWidth) != null ? _d2 : false; + } + static fromJson(json) { + return new _PhantomAtom(json); + } + toJson() { + const options = {}; + if (this.isInvisible) options.isInvisible = true; + if (this.smashDepth) options.smashDepth = true; + if (this.smashHeight) options.smashHeight = true; + if (this.smashWidth) options.smashWidth = true; + return __spreadValues(__spreadValues({}, super.toJson()), options); + } + render(context) { + const phantom = new Context({ parent: context, isPhantom: true }); + if (!this.smashDepth && !this.smashHeight && !this.smashWidth) { + console.assert(this.isInvisible); + return Atom.createBox(phantom, this.body, { classes: "ML__inner" }); + } + const content = Atom.createBox( + this.isInvisible ? phantom : context, + this.body + ); + if (!content) return null; + if (this.smashWidth) { + const fix = new Box(null, { classes: "ML__fix" }); + return new Box([content, fix], { classes: "ML__rlap" }).wrap(context); + } + if (!this.smashHeight && !this.smashDepth) return content; + if (this.smashHeight) content.height = 0; + if (this.smashDepth) content.depth = 0; + if (content.children) { + for (const box of content.children) { + if (this.smashHeight) box.height = 0; + if (this.smashDepth) box.depth = 0; + } + } + return new VBox( + { firstBaseline: [{ box: content }] }, + { type: content.type } + ).wrap(context); + } + }; + + // src/atoms/spacing.ts + var SpacingAtom = class _SpacingAtom extends Atom { + constructor(options) { + var _a3; + super(__spreadValues({ type: "spacing" }, options)); + this.width = options == null ? void 0 : options.width; + this._braced = (_a3 = options == null ? void 0 : options.braced) != null ? _a3 : false; + } + static fromJson(json) { + return new _SpacingAtom(json); + } + toJson() { + const json = super.toJson(); + if (this.width !== void 0) json.width = this.width; + if (this._braced) json.braced = true; + return json; + } + render(context) { + var _a3; + if (this.command === "space") + return new Box(this.mode === "math" ? null : " "); + let result; + if (this.width !== void 0) { + result = new Box(null, { classes: "ML__mspace" }); + result.left = context.toEm(this.width); + } else { + const spacingCls = (_a3 = { + "\\qquad": "ML__qquad", + "\\quad": "ML__quad", + "\\enspace": "ML__enspace", + "\\;": "ML__thickspace", + "\\:": "ML__mediumspace", + "\\>": "ML__mediumspace", + "\\,": "ML__thinspace", + "\\!": "ML__negativethinspace" + }[this.command]) != null ? _a3 : "ML__mediumspace"; + result = new Box(null, { classes: spacingCls }); + } + result = this.bind(context, result); + if (this.caret) result.caret = this.caret; + return result; + } + _serialize(options) { + var _a3; + if (!options.expandMacro && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + const command = (_a3 = this.command) != null ? _a3 : ""; + if (this.width === void 0) return command; + if (this._braced && !("register" in this.width)) + return `${command}{${serializeLatexValue(this.width)}}`; + return `${command}${serializeLatexValue(this.width)}`; + } + }; + + // src/atoms/surd.ts + var SurdAtom = class _SurdAtom extends Atom { + constructor(options) { + var _a3; + super(__spreadProps(__spreadValues({}, options), { + type: "surd", + mode: (_a3 = options.mode) != null ? _a3 : "math", + style: options.style, + displayContainsHighlight: true, + body: options.body + })); + this.above = options.index; + } + static fromJson(json) { + return new _SurdAtom(__spreadProps(__spreadValues({}, json), { + index: json.above + })); + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + const command = this.command; + const body = this.bodyToLatex(options); + if (this.above && !this.hasEmptyBranch("above")) + return latexCommand(`${command}[${this.aboveToLatex(options)}]`, body); + if (/^[0-9]$/.test(body)) return `${command}${body}`; + return latexCommand(command, body); + } + // Custom implementation so that the navigation of the index feels natural + get children() { + if (this._children) return this._children; + const result = []; + if (this.above) { + for (const x of this.above) { + result.push(...x.children); + result.push(x); + } + } + if (this.body) { + for (const x of this.body) { + result.push(...x.children); + result.push(x); + } + } + this._children = result; + return result; + } + render(context) { + var _a3; + const innerContext = new Context( + { parent: context, mathstyle: "cramp" }, + this.style + ); + const innerBox = (_a3 = Atom.createBox(innerContext, this.body, { type: "inner" })) != null ? _a3 : new Box(null); + const factor = innerContext.scalingFactor; + const ruleWidth = innerContext.metrics.defaultRuleThickness / factor; + const phi = context.isDisplayStyle ? X_HEIGHT : ruleWidth; + const line = new Box(null, { classes: "ML__sqrt-line", style: this.style }); + line.height = ruleWidth; + line.softWidth = innerBox.width; + let lineClearance = factor * (ruleWidth + phi / 4); + const innerTotalHeight = Math.max( + factor * 2 * phi, + innerBox.height + innerBox.depth + ); + const minDelimiterHeight = innerTotalHeight + lineClearance + ruleWidth; + const delimContext = new Context({ parent: context }, this.style); + const delimBox = this.bind( + delimContext, + new Box( + makeCustomSizedDelim( + "inner", + // @todo not sure if that's the right type + "\\surd", + minDelimiterHeight, + false, + delimContext, + { isSelected: this.isSelected } + ), + { + isSelected: this.isSelected, + classes: "ML__sqrt-sign", + style: this.style + } + ) + ); + if (!delimBox) return null; + const delimDepth = delimBox.height + delimBox.depth - ruleWidth; + if (delimDepth > innerBox.height + innerBox.depth + lineClearance) { + lineClearance = (lineClearance + delimDepth - (innerBox.height + innerBox.depth)) / 2; + } + delimBox.setTop(delimBox.height - innerBox.height - lineClearance); + const bodyBox = this.bind( + context, + new VBox({ + firstBaseline: [ + { box: new Box(innerBox) }, + // Need to wrap the inner for proper selection bound calculation + lineClearance - 2 * ruleWidth, + { box: line }, + ruleWidth + ] + }) + ); + const indexBox = Atom.createBox( + new Context({ parent: context, mathstyle: "scriptscriptstyle" }), + this.above, + { type: "ignore" } + ); + if (!indexBox) { + const result2 = new Box([delimBox, bodyBox], { + classes: this.containsCaret ? "ML__contains-caret" : "", + type: "inner" + }); + result2.setStyle("display", "inline-block"); + result2.setStyle("height", result2.height + result2.depth, "em"); + if (this.caret) result2.caret = this.caret; + return this.bind(context, result2); + } + const indexStack = new VBox({ + shift: -0.6 * (Math.max(delimBox.height, bodyBox.height) - Math.max(delimBox.depth, bodyBox.depth)), + children: [{ box: indexBox }] + }); + const result = new Box( + [ + new Box(indexStack, { classes: "ML__sqrt-index", type: "ignore" }), + delimBox, + bodyBox + ], + { + type: "inner", + classes: this.containsCaret ? "ML__contains-caret" : "" + } + ); + result.height = delimBox.height; + result.depth = delimBox.depth; + if (this.caret) result.caret = this.caret; + return this.bind(context, result); + } + }; + + // src/core/skip-box.ts + var SkipBox = class extends Box { + constructor(width) { + super(null, { type: "skip" }); + this._width = width; + } + toMarkup() { + return ``; + } + }; + function addSkipBefore(box, width) { + if (!box.parent) return; + const siblings = box.parent.children; + const i = siblings.indexOf(box); + let j = i - 1; + while (j >= 0) { + if (siblings[j].type === "ignore") j -= 1; + else break; + } + if (j < 0 && box.parent.parent && box.parent.type === "lift") { + addSkipBefore(box.parent, width); + return; + } + if (i > 0 && siblings[i - 1].type === "skip") siblings[i - 1].width += width; + else siblings.splice(i, 0, new SkipBox(width)); + } + + // src/core/inter-box-spacing.ts + var INTER_BOX_SPACING = { + ord: { op: 3, bin: 4, rel: 5, inner: 3 }, + op: { ord: 3, op: 3, rel: 5, inner: 3 }, + bin: { ord: 4, op: 4, open: 4, inner: 4 }, + rel: { ord: 5, op: 5, open: 5, inner: 5 }, + close: { op: 3, bin: 4, rel: 5, inner: 3 }, + punct: { ord: 3, op: 3, rel: 3, open: 3, punct: 3, inner: 3 }, + inner: { ord: 3, op: 3, bin: 4, rel: 5, open: 3, punct: 3, inner: 3 } + }; + var INTER_BOX_TIGHT_SPACING = { + ord: { op: 3 }, + op: { ord: 3, op: 3 }, + close: { op: 3 }, + inner: { op: 3 } + }; + function adjustType(boxes) { + traverseBoxes(boxes, (prev, cur) => { + if (cur.type === "bin" && (!prev || /^(middle|bin|op|rel|open|punct)$/.test(prev.type))) + cur.type = "ord"; + if ((prev == null ? void 0 : prev.type) === "bin" && /^(rel|close|punct)$/.test(cur.type)) + prev.type = "ord"; + if (cur.type !== "ignore") prev = cur; + }); + } + function applyInterBoxSpacing(root, context) { + if (!root.children) return root; + const boxes = root.children; + adjustType(boxes); + const thin = context.getRegisterAsEm("thinmuskip"); + const med = context.getRegisterAsEm("medmuskip"); + const thick = context.getRegisterAsEm("thickmuskip"); + traverseBoxes(boxes, (prev, cur) => { + var _a3, _b3, _c2; + if (!prev) return; + const prevType = prev.type; + const table = cur.isTight ? (_a3 = INTER_BOX_TIGHT_SPACING[prevType]) != null ? _a3 : null : (_b3 = INTER_BOX_SPACING[prevType]) != null ? _b3 : null; + const hskip = (_c2 = table == null ? void 0 : table[cur.type]) != null ? _c2 : null; + if (hskip === 3) addSkipBefore(cur, thin); + if (hskip === 4) addSkipBefore(cur, med); + if (hskip === 5) addSkipBefore(cur, thick); + }); + return root; + } + function traverseBoxes(boxes, f, prev = void 0) { + if (!boxes) return prev; + boxes = [...boxes]; + for (const cur of boxes) { + if (cur.type === "lift") prev = traverseBoxes(cur.children, f, prev); + else if (cur.type === "ignore") traverseBoxes(cur.children, f); + else { + f(prev, cur); + traverseBoxes(cur.children, f); + prev = cur; + } + } + return prev; + } + + // src/atoms/tooltip.ts + var TooltipAtom = class _TooltipAtom extends Atom { + constructor(options) { + super({ + type: "tooltip", + command: options.command, + mode: options.mode, + style: options.style, + body: options.body, + displayContainsHighlight: true + }); + this.tooltip = new Atom({ + type: "root", + mode: options.content, + body: options.tooltip, + style: {} + }); + this.skipBoundary = true; + this.captureSelection = false; + } + static fromJson(json) { + return new _TooltipAtom(__spreadProps(__spreadValues({}, json), { + tooltip: fromJson(json.tooltip) + })); + } + toJson() { + var _a3; + const tooltip = (_a3 = this.tooltip.body) == null ? void 0 : _a3.filter((x) => x.type !== "first").map((x) => x.toJson()); + return __spreadProps(__spreadValues({}, super.toJson()), { tooltip }); + } + render(context) { + const body = Atom.createBox(context, this.body); + if (!body) return null; + const tooltipContext = new Context( + { parent: context, mathstyle: "displaystyle" }, + { fontSize: DEFAULT_FONT_SIZE } + ); + const tooltip = coalesce( + applyInterBoxSpacing( + new Box(this.tooltip.render(tooltipContext), { + classes: "ML__tooltip-content" + }), + tooltipContext + ) + ); + const box = new Box([tooltip, body], { classes: "ML__tooltip-container" }); + if (this.caret) box.caret = this.caret; + return this.bind(context, box); + } + }; + + // src/atoms/operator.ts + var OperatorAtom = class _OperatorAtom extends Atom { + constructor(symbol, options) { + super(__spreadProps(__spreadValues({}, options), { + type: "operator", + isFunction: options == null ? void 0 : options.isFunction + })); + this.value = symbol; + this.variant = options == null ? void 0 : options.variant; + this.variantStyle = options == null ? void 0 : options.variantStyle; + this.subsupPlacement = options == null ? void 0 : options.limits; + } + static fromJson(json) { + return new _OperatorAtom(json.symbol, json); + } + toJson() { + const result = super.toJson(); + if (this.variant) result.variant = this.variant; + if (this.variantStyle) result.variantStyle = this.variantStyle; + if (this.subsupPlacement) result.limits = this.subsupPlacement; + if (this.value) result.symbol = this.value; + return result; + } + render(context) { + var _a3; + const base = new Box(this.value, { + type: "op", + mode: "math", + maxFontSize: context.scalingFactor, + style: { + variant: this.variant, + variantStyle: this.variantStyle + }, + isSelected: this.isSelected, + letterShapeStyle: context.letterShapeStyle + }); + let result = base; + if (this.superscript || this.subscript) { + const limits = (_a3 = this.subsupPlacement) != null ? _a3 : "auto"; + result = limits === "over-under" || limits === "auto" && context.isDisplayStyle ? this.attachLimits(context, { base }) : this.attachSupsub(context, { base }); + } + return new Box(this.bind(context, result), { + type: "op", + caret: this.caret, + isSelected: this.isSelected, + classes: "ML__op-group" + }).wrap(context); + } + _serialize(options) { + if (!(options.expandMacro || options.skipStyles || options.skipPlaceholders) && typeof this.verbatimLatex === "string") + return this.verbatimLatex; + const def = getDefinition(this.command, this.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(this, options); + const result = [this.command]; + if (this.explicitSubsupPlacement) { + if (this.subsupPlacement === "over-under") result.push("\\limits"); + if (this.subsupPlacement === "adjacent") result.push("\\nolimits"); + if (this.subsupPlacement === "auto") result.push("\\displaylimits"); + } + result.push(this.supsubToLatex(options)); + return joinLatex(result); + } + }; + + // src/core/atom.ts + function fromJson(json) { + if (isArray(json)) return json.map((x) => fromJson(x)); + if (typeof json === "string") return Atom.fromJson(json); + json = __spreadValues({}, json); + for (const branch of NAMED_BRANCHES) + if (json[branch]) json[branch] = fromJson(json[branch]); + if (json.args) json.args = argumentsFromJson(json.args); + if (json.array) json.array = fromJson(json.array); + const type = json.type; + let result = void 0; + if (type === "accent") result = AccentAtom.fromJson(json); + if (type === "array") result = ArrayAtom.fromJson(json); + if (type === "box") result = BoxAtom.fromJson(json); + if (type === "chem") result = ChemAtom.fromJson(json); + if (type === "composition") result = CompositionAtom.fromJson(json); + if (type === "delim") result = MiddleDelimAtom.fromJson(json); + if (type === "enclose") result = EncloseAtom.fromJson(json); + if (type === "error") result = ErrorAtom.fromJson(json); + if (type === "extensible-symbol") + result = ExtensibleSymbolAtom.fromJson(json); + if (type === "genfrac") result = GenfracAtom.fromJson(json); + if (type === "group") result = GroupAtom.fromJson(json); + if (type === "latex") result = LatexAtom.fromJson(json); + if (type === "latexgroup") result = LatexGroupAtom.fromJson(json); + if (type === "leftright") result = LeftRightAtom.fromJson(json); + if (type === "macro") result = MacroAtom.fromJson(json); + if (type === "macro-argument") result = MacroArgumentAtom.fromJson(json); + if (type === "operator") result = OperatorAtom.fromJson(json); + if (type === "overlap") result = OverlapAtom.fromJson(json); + if (type === "overunder") result = OverunderAtom.fromJson(json); + if (type === "placeholder") result = PlaceholderAtom.fromJson(json); + if (type === "prompt") result = PromptAtom.fromJson(json); + if (type === "phantom") result = PhantomAtom.fromJson(json); + if (type === "sizeddelim") result = SizedDelimAtom.fromJson(json); + if (type === "spacing") result = SpacingAtom.fromJson(json); + if (type === "subsup") result = SubsupAtom.fromJson(json); + if (type === "surd") result = SurdAtom.fromJson(json); + if (type === "text") result = TextAtom.fromJson(json); + if (type === "tooltip") result = TooltipAtom.fromJson(json); + if (!result) { + console.assert( + !type || [ + "first", + "mbin", + "mrel", + "mclose", + "minner", + "mop", + "mopen", + "mord", + "mpunct", + "root", + "space" + ].includes(type), + `MathLive {{SDK_VERSION}}: an unexpected atom type "${type}" was encountered. Add new atom constructors to \`fromJson()\` in "atom.ts"` + ); + result = Atom.fromJson(json); + } + for (const branch of NAMED_BRANCHES) + if (json[branch]) result.setChildren(json[branch], branch); + if (json.verbatimLatex !== void 0) + result.verbatimLatex = json.verbatimLatex; + if (json.subsupPlacement) result.subsupPlacement = json.subsupPlacement; + if (json.explicitSubsupPlacement) result.explicitSubsupPlacement = true; + if (json.isFunction) result.isFunction = true; + if (json.skipBoundary) result.skipBoundary = true; + if (json.captureSelection) result.captureSelection = true; + return result; + } + function argumentsFromJson(json) { + if (!json) return void 0; + if (typeof json === "string") return json; + if (!Array.isArray(json)) return void 0; + return json.map((arg) => { + if (arg === "") return null; + if (typeof arg === "object" && "group" in arg) + return { group: arg.group.map((x) => fromJson(x)) }; + if (typeof arg === "object" && "atoms" in arg) + return arg.atoms.map((x) => fromJson(x)); + return arg; + }); + } + + // src/editor-model/styling.ts + function applyStyleToUnstyledAtoms(atom, style) { + if (!atom || !style) return; + if (isArray(atom)) { + atom.forEach((x) => applyStyleToUnstyledAtoms(x, style)); + } else if (typeof atom === "object") + atom.applyStyle(style, { unstyledOnly: true }); + } + function applyStyle(model, range2, style, options) { + var _a3; + function everyStyle(property, value) { + for (const atom of atoms) if (atom.style[property] !== value) return false; + return true; + } + range2 = model.normalizeRange(range2); + if (range2[0] === range2[1]) return false; + const atoms = model.getAtoms(range2, { includeChildren: true }); + if (options.operation === "toggle") { + if (style.color && everyStyle("color", style.color)) { + style.color = "none"; + delete style.verbatimColor; + } + if (style.backgroundColor && everyStyle("backgroundColor", style.backgroundColor)) { + style.backgroundColor = "none"; + delete style.verbatimBackgroundColor; + } + if (style.fontFamily && everyStyle("fontFamily", style.fontFamily)) { + style.fontFamily = "none"; + } + if (style.fontSeries && everyStyle("fontSeries", style.fontSeries)) { + style.fontSeries = "auto"; + } + if (style.fontShape && everyStyle("fontShape", style.fontShape)) { + style.fontShape = "auto"; + } + if (style.fontSize && everyStyle("fontSize", style.fontSize)) { + style.fontSize = DEFAULT_FONT_SIZE; + } + if (style.textDecoration && style.textDecoration !== "none") { + const requestedDecorations = style.textDecoration.split(" "); + const allHaveDecoration = atoms.every( + (atom) => requestedDecorations.every( + (decoration) => { + var _a4; + return ((_a4 = atom.style.textDecoration) != null ? _a4 : "").includes(decoration); + } + ) + ); + for (const atom of atoms) { + const currentDecorations = new Set( + ((_a3 = atom.style.textDecoration) != null ? _a3 : "").split(" ").filter(Boolean) + ); + if (allHaveDecoration) { + requestedDecorations.forEach( + (decoration) => currentDecorations.delete(decoration) + ); + } else { + requestedDecorations.forEach( + (decoration) => currentDecorations.add(decoration) + ); + } + atom.applyStyle(__spreadProps(__spreadValues({}, style), { + textDecoration: Array.from(currentDecorations).join(" ") || "none" + })); + } + delete style.textDecoration; + } + if (style.variant && everyStyle("variant", style.variant)) { + style.variant = "normal"; + } + if (style.variantStyle && everyStyle("variantStyle", style.variantStyle)) { + style.variantStyle = ""; + } + } + for (const atom of atoms) atom.applyStyle(style); + return true; + } + function addItalic(v) { + return { + "up": "italic", + "bold": "bolditalic", + "italic": "italic", + "bolditalic": "bolditalic", + "": "italic" + }[v != null ? v : ""]; + } + function removeItalic(v) { + return { + "up": "up", + "bold": "bold", + "italic": void 0, + "bolditalic": "bold", + "": void 0 + }[v != null ? v : ""]; + } + + // src/latex-commands/accents.ts + var ACCENTS = { + acute: 714, + grave: 715, + dot: 729, + ddot: 168, + dddot: 8411, + ddddot: 8412, + mathring: 730, + tilde: 126, + bar: 713, + breve: 728, + check: 711, + hat: 94, + vec: 8407 + }; + defineFunction(Object.keys(ACCENTS), "{body:auto}", { + createAtom: (options) => new AccentAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + accentChar: ACCENTS[options.command.slice(1)] + })) + }); + defineFunction(["widehat", "widecheck", "widetilde"], "{body:auto}", { + createAtom: (options) => { + const baseString = parseArgAsString(argAtoms(options.args[0])); + return new AccentAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + svgAccent: options.command.slice(1) + (baseString.length > 5 ? "4" : ["1", "1", "2", "2", "3", "3"][baseString.length]) + })); + } + }); + defineFunction(["overarc", "overparen", "wideparen"], "{body:auto}", { + createAtom: (options) => { + return new AccentAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + svgAccent: "overarc" + })); + } + }); + defineFunction(["underarc", "underparen"], "{body:auto}", { + createAtom: (options) => { + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + svgBelow: "underarc" + })); + } + }); + defineFunction("utilde", "{body:auto}", { + createAtom: (options) => { + const body = argAtoms(options.args[0]); + const baseString = parseArgAsString(body); + const accent = "widetilde" + (baseString.length > 5 ? "4" : ["1", "1", "2", "2", "3", "3"][baseString.length]); + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body, + svgBelow: accent, + boxType: atomsBoxType(body) + })); + } + }); + defineFunction("^", "{:string}", { + createAtom: (options) => { + var _a3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: options.args[0] ? (_a3 = { + a: "\xE2", + e: "\xEA", + i: "\xEE", + o: "\xF4", + u: "\xFB", + A: "\xC2", + E: "\xCA", + I: "\xCE", + O: "\xD4", + U: "\xDB" + }[options.args[0]]) != null ? _a3 : "^" : "^" + })); + } + }); + defineFunction("`", "{:string}", { + createAtom: (options) => { + var _a3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: options.args[0] ? (_a3 = { + a: "\xE0", + e: "\xE8", + i: "\xEC", + o: "\xF2", + u: "\xF9", + A: "\xC0", + E: "\xC8", + I: "\xCC", + O: "\xD2", + U: "\xD9" + }[options.args[0]]) != null ? _a3 : "`" : "`" + })); + } + }); + defineFunction("'", "{:string}", { + createAtom: (options) => { + var _a3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: options.args[0] ? (_a3 = { + a: "\xE1", + e: "\xE9", + i: "\xED", + o: "\xF3", + u: "\xFA", + A: "\xC1", + E: "\xC9", + I: "\xCD", + O: "\xD3", + U: "\xDA" + }[options.args[0]]) != null ? _a3 : "'" : "'" + })); + } + }); + defineFunction('"', "{:string}", { + createAtom: (options) => { + var _a3, _b3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: ((_a3 = options.args) == null ? void 0 : _a3[0]) ? (_b3 = { + a: "\xE4", + e: "\xEB", + i: "\xEF", + o: "\xF6", + u: "\xFC", + A: "\xC4", + E: "\xCB", + I: "\xCB", + O: "\xD6", + U: "\xDC" + }[options.args[0]]) != null ? _b3 : '"' + options.args[0] : '"' + })); + } + }); + defineFunction(".", "{:string}", { + createAtom: (options) => { + var _a3, _b3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: ((_a3 = options.args) == null ? void 0 : _a3[0]) ? (_b3 = { + // a with single dot above + a: "\u0227", + e: "\u0117", + // i with single dot above (combining character) + i: "\u0307i", + o: "\u022F", + // U with single dot above (combining character) + u: "\u0307u", + A: "\u0226", + E: "\u0116", + I: "\u0130", + O: "\u022E", + // U with single dot above (combining character) + U: "\u0307U" + }[options.args[0]]) != null ? _b3 : "." + options.args[0] : "." + })); + } + }); + defineFunction("=", "{:string}", { + createAtom: (options) => { + var _a3, _b3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: ((_a3 = options.args) == null ? void 0 : _a3[0]) ? (_b3 = { + // a with macron + a: "\u0101", + e: "\u0113", + i: "\u012B", + o: "\u014D", + u: "\u016B", + A: "\u0100", + E: "\u0112", + I: "\u012A", + O: "\u014C", + U: "\u016A" + }[options.args[0]]) != null ? _b3 : "=" + options.args[0] : "=" + // fallback + })); + } + }); + defineFunction("~", "{:string}", { + createAtom: (options) => { + var _a3; + return new Atom(__spreadProps(__spreadValues({ + type: "mord" + }, options), { + isFunction: false, + limits: "adjacent", + value: options.args[0] ? (_a3 = { n: "\xF1", N: "\xD1", a: "\xE3", o: "\xF5", A: "\xC3", O: "\xD5" }[options.args[0]]) != null ? _a3 : "\xB4" : "\xB4" + })); + } + }); + defineFunction("c", "{:string}", { + createAtom: (options) => { + var _a3; + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + isFunction: false, + limits: "adjacent", + value: options.args[0] ? (_a3 = { c: "\xE7", C: "\xC7" }[options.args[0]]) != null ? _a3 : "" : "" + })); + } + }); + + // src/latex-commands/enclose.ts + defineFunction("enclose", "{notation:string}[style:string]{body:auto}", { + createAtom: (atomOptions) => { + var _a3, _b3; + const args = atomOptions.args; + const options = { + strokeColor: "currentColor", + strokeWidth: "", + strokeStyle: "solid", + backgroundcolor: "transparent", + padding: "auto", + shadow: "none", + svgStrokeStyle: void 0, + borderStyle: void 0, + style: (_a3 = atomOptions.style) != null ? _a3 : {} + }; + if (args[1]) { + const styles = args[1].split(/,(?![^(]*\)(?:(?:[^(]*\)){2})*[^"]*$)/); + for (const s of styles) { + const shorthand = s.match(/\s*(\S+)\s+(\S+)\s+(.*)/); + if (shorthand) { + options.strokeWidth = shorthand[1]; + options.strokeStyle = shorthand[2]; + options.strokeColor = shorthand[3]; + } else { + const attribute = s.match(/\s*([a-z]*)\s*=\s*"(.*)"/); + if (attribute) { + if (attribute[1] === "mathbackground") + options.backgroundcolor = attribute[2]; + else if (attribute[1] === "mathcolor") + options.strokeColor = attribute[2]; + else if (attribute[1] === "padding") options.padding = attribute[2]; + else if (attribute[1] === "shadow") options.shadow = attribute[2]; + } + } + } + if (options.strokeStyle === "dashed") options.svgStrokeStyle = "5,5"; + else if (options.strokeStyle === "dotted") options.svgStrokeStyle = "1,5"; + } + options.borderStyle = `${options.strokeWidth} ${options.strokeStyle} ${options.strokeColor}`; + const notation = {}; + ((_b3 = args[0]) != null ? _b3 : "").split(/[, ]/).filter((v) => v.length > 0).forEach((x) => { + notation[x.toLowerCase()] = true; + }); + return new EncloseAtom( + atomOptions.command, + argAtoms(args[2]), + notation, + options + ); + } + }); + defineFunction("cancel", "{body:auto}", { + createAtom: (options) => { + var _a3; + return new EncloseAtom( + options.command, + argAtoms(options.args[0]), + { updiagonalstrike: true }, + { + strokeColor: "currentColor", + strokeWidth: "", + strokeStyle: "solid", + borderStyle: "1px solid currentColor", + backgroundcolor: "transparent", + padding: "auto", + shadow: "none", + style: (_a3 = options.style) != null ? _a3 : {} + } + ); + } + }); + defineFunction("bcancel", "{body:auto}", { + createAtom: (options) => { + var _a3; + return new EncloseAtom( + options.command, + argAtoms(options.args[0]), + { downdiagonalstrike: true }, + { + strokeColor: "currentColor", + strokeWidth: "", + strokeStyle: "solid", + borderStyle: "1px solid currentColor", + backgroundcolor: "transparent", + padding: "auto", + shadow: "none", + style: (_a3 = options.style) != null ? _a3 : {} + } + ); + } + }); + defineFunction("xcancel", "{body:auto}", { + createAtom: (options) => { + var _a3; + return new EncloseAtom( + options.command, + argAtoms(options.args[0]), + { updiagonalstrike: true, downdiagonalstrike: true }, + { + strokeColor: "currentColor", + strokeWidth: "", + strokeStyle: "solid", + borderStyle: "1px solid currentColor", + backgroundcolor: "transparent", + padding: "auto", + shadow: "none", + style: (_a3 = options.style) != null ? _a3 : {} + } + ); + } + }); + + // src/latex-commands/environments.ts + defineRootEnvironment(["math", "displaymath"], makeEnvironment); + defineRootEnvironment("center", makeEnvironment); + defineTabularEnvironment(["multline", "multline*"], "", makeEnvironment); + defineFunction("displaylines", "", { + parse: (parser) => { + parser.skipWhitespace(); + if (!parser.match("<{>")) return []; + const lines = []; + let line = []; + if (parser.mathlist.length > 0) lines.push([parser.mathlist]); + parser.beginContext({ tabular: true, root: true }); + do { + if (parser.end() || parser.match("<}>")) break; + if (parser.matchColumnSeparator() || parser.matchRowSeparator()) { + lines.push([line]); + line = []; + } else { + line.push( + ...parser.scan( + (token) => ["<}>", "&", "\\cr", "\\\\", "\\tabularnewline"].includes(token) + ) + ); + } + } while (true); + parser.endContext(); + lines.push([line]); + const rhs = parser.scan(); + if (rhs.length > 0) lines.push([rhs]); + return lines; + }, + createAtom: (options) => new ArrayAtom("lines", options.args, [], { + // arraystretch: 1.2, + leftDelim: ".", + rightDelim: ".", + columns: [{ align: "l" }], + classes: ["ML__multiline_environment"], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1 + }) + }); + defineTabularEnvironment("split", "", makeEnvironment); + defineTabularEnvironment( + ["gather", "gather*", "gathered"], + "", + makeEnvironment + ); + defineTabularEnvironment( + ["equation", "equation*", "subequations"], + "", + makeEnvironment + ); + defineRootEnvironment(["align", "align*", "eqnarray"], makeEnvironment, { + tabular: true + }); + defineTabularEnvironment(["aligned"], "", makeEnvironment); + defineTabularEnvironment( + "array", + "{columns:colspec}", + (name, array, rowGaps, args) => { + return new ArrayAtom(name, array, rowGaps, { + columns: args[0], + mathstyleName: "textstyle" + }); + } + ); + defineTabularEnvironment( + [ + "matrix", + "pmatrix", + "bmatrix", + "Bmatrix", + "vmatrix", + "Vmatrix", + "matrix*", + "pmatrix*", + "bmatrix*", + "Bmatrix*", + "vmatrix*", + "Vmatrix*" + ], + "[columns:colspec]", + makeEnvironment + ); + defineTabularEnvironment( + ["smallmatrix", "smallmatrix*"], + "[columns:colspec]", + makeEnvironment + ); + defineTabularEnvironment(["cases", "dcases", "rcases"], "", makeEnvironment); + function makeEnvironment(name, content = [[[]]], rowGaps = [], args = [], maxMatrixCols) { + switch (name) { + case "math": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1, + maxRows: 1 + }); + case "displaymath": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1, + maxRows: 1 + }); + case "center": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ align: "c" }], + classes: ["ML__center_environment"], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1, + maxRows: 1 + }); + case "multline": + case "multline*": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ align: "m" }], + leftDelim: ".", + rightDelim: ".", + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1 + }); + case "split": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ align: "r" }, { align: "l" }], + minColumns: 2, + minRows: 1, + isRoot: false + }); + case "gather": + case "gather*": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ gap: 0.25 }, { align: "c" }, { gap: 0 }], + // colSeparationType: 'gather', + minColumns: 1, + maxColumns: 1, + minRows: 1, + isRoot: true, + classes: ["ML__gather_environment"] + }); + case "gathered": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ gap: 0.25 }, { align: "c" }, { gap: 0 }], + // colSeparationType: 'gather', + minColumns: 1, + maxColumns: 1, + minRows: 1 + }); + case "equation": + case "equation*": + case "subequations": + return new ArrayAtom(name, content, rowGaps, { + columns: [{ align: "c" }], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1 + }); + case "aligned": { + let colCount = 0; + for (const row of content) colCount = Math.max(colCount, row.length); + const columns = [ + { gap: 0 }, + { align: "r" }, + { gap: 0.25 }, + { align: "l" } + ]; + let i = 2; + while (i < colCount) { + columns.push({ gap: 1 }, { align: "r" }, { gap: 0.25 }, { align: "l" }); + i += 2; + } + columns.push({ gap: 0 }); + return new ArrayAtom(name, content, rowGaps, { + arraycolsep: 0, + columns, + // colSeparationType: 'align', + minColumns: 2, + minRows: 1, + isRoot: name !== "aligned" + }); + } + case "eqnarray": + return new ArrayAtom(name, content, rowGaps, { + arraycolsep: 0, + columns: [{ gap: 0 }, { align: "r" }, { align: "c" }, { align: "l" }], + minColumns: 3, + maxColumns: 3, + minRows: 1, + isRoot: true, + classes: ["ML__eqnarray_environment"] + }); + case "align": + case "align*": + return new ArrayAtom(name, content, rowGaps, { + arraycolsep: 0, + columns: [{ gap: 0 }, { align: "r" }, { gap: 0.25 }, { align: "l" }], + minColumns: 2, + maxColumns: 2, + minRows: 1, + isRoot: true, + classes: ["ML__align_environment"] + }); + case "pmatrix": + case "pmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: "(", + rightDelim: ")", + columns: defaultColumns(args[0], maxMatrixCols) + }); + case "bmatrix": + case "bmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: "[", + rightDelim: "]", + columns: defaultColumns(args[0], maxMatrixCols) + }); + case "Bmatrix": + case "Bmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: "\\lbrace", + rightDelim: "\\rbrace", + columns: defaultColumns(args[0], maxMatrixCols) + }); + case "vmatrix": + case "vmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: "\\vert", + rightDelim: "\\vert", + columns: defaultColumns(args[0], maxMatrixCols) + }); + case "Vmatrix": + case "Vmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: "\\Vert", + rightDelim: "\\Vert", + columns: defaultColumns(args[0], maxMatrixCols) + }); + case "matrix": + case "matrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle", + leftDelim: ".", + rightDelim: ".", + columns: defaultColumns(args == null ? void 0 : args[0], maxMatrixCols) + }); + case "smallmatrix": + case "smallmatrix*": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "scriptstyle", + columns: defaultColumns(args == null ? void 0 : args[0], maxMatrixCols), + colSeparationType: "small", + arraystretch: 0.5 + }); + case "cases": + case "dcases": + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: name === "dcases" ? "displaystyle" : "textstyle", + arraystretch: 1.2, + leftDelim: "\\lbrace", + rightDelim: ".", + columns: casesColumns() + }); + case "rcases": + return new ArrayAtom(name, content, rowGaps, { + arraystretch: 1.2, + leftDelim: ".", + rightDelim: "\\rbrace", + columns: casesColumns() + }); + case "lines": + return new ArrayAtom(name, content, rowGaps, { + // arraystretch: 1.2, + leftDelim: ".", + rightDelim: ".", + columns: [{ align: "l" }], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1 + }); + } + return new ArrayAtom(name, content, rowGaps, { + mathstyleName: "textstyle" + }); + } + function defaultColumns(args, maxMatrixCols = 10) { + return args != null ? args : Array(maxMatrixCols).fill({ align: "c" }); + } + function casesColumns(maxCasesColumns = 10) { + const columns = []; + for (let i = 0; i < maxCasesColumns; i++) { + if (i > 0) columns.push({ gap: 1 }); + columns.push({ align: "l" }); + } + return columns; + } + + // src/latex-commands/extensible-symbols.ts + defineFunction( + [ + "overrightarrow", + "overleftarrow", + "Overrightarrow", + "overleftharpoon", + "overrightharpoon", + "overleftrightarrow", + "overlinesegment", + "overgroup" + ], + "{:auto}", + { + createAtom: (options) => { + var _a3; + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms((_a3 = options.args) == null ? void 0 : _a3[0]), + skipBoundary: false, + supsubPlacement: "over-under", + paddedBody: true, + boxType: "rel", + // Set the "svgAbove" to the name of a SVG object (which is the same + // as the command name) + svgAbove: options.command.slice(1) + })); + } + } + ); + defineFunction("overbrace", "{:auto}", { + createAtom: (options) => new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + skipBoundary: false, + supsubPlacement: "over-under", + paddedBody: true, + boxType: "ord", + svgAbove: options.command.slice(1) + })) + }); + defineFunction( + [ + "underrightarrow", + "underleftarrow", + "underleftrightarrow", + "underlinesegment", + "undergroup" + ], + "{:auto}", + { + createAtom: (options) => new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + skipBoundary: false, + supsubPlacement: "over-under", + paddedBody: true, + boxType: "rel", + // Set the "svgBelow" to the name of a SVG object (which is the same + // as the command name) + svgBelow: options.command.slice(1) + })) + } + ); + defineFunction(["underbrace"], "{:auto}", { + createAtom: (options) => new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + skipBoundary: false, + supsubPlacement: "over-under", + paddedBody: true, + boxType: "ord", + svgBelow: options.command.slice(1) + })) + }); + defineFunction( + [ + "xrightarrow", + "longrightarrow", + // From mhchem.sty package + "xleftarrow", + "longleftarrow", + // From mhchem.sty package + "xRightarrow", + "xLeftarrow", + "xleftharpoonup", + "xleftharpoondown", + "xrightharpoonup", + "xrightharpoondown", + "xlongequal", + "xtwoheadleftarrow", + "xtwoheadrightarrow", + "xleftrightarrow", + "longleftrightarrow", + // From mhchem.sty package + "xLeftrightarrow", + "xrightleftharpoons", + // From mhchem.sty package + "longrightleftharpoons", + "xleftrightharpoons", + "xhookleftarrow", + "xhookrightarrow", + "xmapsto", + "xtofrom", + "xleftrightarrows", + // From mhchem.sty package + "longleftrightarrows", + // From mhchem.sty package + "xRightleftharpoons", + // From mhchem.sty package + "longRightleftharpoons", + // From mhchem.sty package + "xLeftrightharpoons", + // From mhchem.sty package + "longLeftrightharpoons" + // From mhchem.sty package + ], + "[:auto]{:auto}", + { + createAtom: (options) => { + var _a3, _b3, _c2, _d2, _e; + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + // Set the "svgBody" to the name of a SVG object (which is the same + // as the command name) + svgBody: options.command.slice(1), + // The overscript is optional, i.e. `\xtofrom` is valid + above: ((_b3 = argAtoms((_a3 = options.args) == null ? void 0 : _a3[1])) == null ? void 0 : _b3.length) === 0 ? void 0 : argAtoms((_c2 = options.args) == null ? void 0 : _c2[1]), + below: (_e = argAtoms((_d2 = options.args) == null ? void 0 : _d2[0])) != null ? _e : null, + skipBoundary: false, + supsubPlacement: "over-under", + paddedBody: true, + paddedLabels: true, + boxType: "rel" + })); + }, + serialize: (atom, options) => atom.command + (!atom.hasEmptyBranch("below") ? `[${atom.belowToLatex(options)}]` : "") + `{${atom.aboveToLatex(options)}}${atom.supsubToLatex(options)}` + } + ); + + // src/latex-commands/functions.ts + defineFunction( + [ + "arccos", + "arcsin", + "arctan", + "arctg", + // Not LaTeX standard. Used in France + "arcctg", + // Not LaTeX standard. Used in France + "arg", + "ch", + // Not LaTeX standard. \cosh + "cos", + "cosh", + "cot", + "cotg", + // Not LaTeX standard. Used in France + "coth", + "ctg", + // Not LaTeX standard. Used in France + "cth", + "csc", + // Not LaTeX standard. \cth + "cosec", + // Not LaTeX standard. + "deg", + "dim", + "exp", + "gcd", + "hom", + "inf", + "ker", + "lb", + // Not LaTeX standard. US Dept of Commerce recommendation for log2 + "lg", + // Not LaTeX standard. In German and Russian literature, log10. + // Sometimes used as the log2 + "ln", + "log", + "Pr", + "sec", + "sh", + // Not LaTeX standard. \sinh + "sin", + "sinh", + "sup", + "tan", + "tanh", + "tg", + // Not LaTeX standard. Used in France + "th", + // Not LaTeX standard. \tanh + "arcsec", + // Not LaTeX standard. + "arccsc", + // Not LaTeX standard. + "arsinh", + "arcosh", + "artanh", + "arcsech", + // Not LaTeX standard. + "arccsch" + ], + "", + { + isFunction: true, + ifMode: "math", + createAtom: (options) => new OperatorAtom(options.command.slice(1), __spreadProps(__spreadValues({}, options), { + limits: "adjacent", + isFunction: true, + variant: "main", + variantStyle: "up" + })) + } + ); + defineFunction(["liminf", "limsup"], "", { + ifMode: "math", + createAtom: (options) => new OperatorAtom( + { "\\liminf": "lim inf", "\\limsup": "lim sup" }[options.command], + __spreadProps(__spreadValues({}, options), { limits: "over-under", variant: "main" }) + ) + }); + defineFunction(["lim", "mod"], "", { + ifMode: "math", + createAtom: (options) => new OperatorAtom(options.command.slice(1), __spreadProps(__spreadValues({}, options), { + limits: "over-under", + variant: "main" + })) + }); + defineFunction(["det", "max", "min"], "", { + ifMode: "math", + isFunction: true, + createAtom: (options) => new OperatorAtom(options.command.slice(1), __spreadProps(__spreadValues({}, options), { + limits: "over-under", + isFunction: true, + variant: "main" + })) + }); + defineFunction("ang", "{:math}", { + ifMode: "math", + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + serialize: (atom, options) => `\\ang{${atom.bodyToLatex(options)}}`, + render: (atom, context) => { + const box = atom.createBox(context); + const caret = box.caret; + box.caret = void 0; + const deg = new Box("\xB0", { + style: __spreadProps(__spreadValues({}, atom.style), { variant: "normal", variantStyle: "up" }) + }); + return new Box([box, deg], { + type: "inner", + isSelected: atom.isSelected, + caret + }); + } + }); + defineFunction("sqrt", "[index:auto]{radicand:expression}", { + ifMode: "math", + createAtom: (options) => new SurdAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[1]), + index: options.args[0] ? argAtoms(options.args[0]) : void 0 + })) + }); + defineFunction( + ["frac", "dfrac", "tfrac", "binom", "dbinom", "tbinom"], + "{:expression}{:expression}", + { + ifMode: "math", + createAtom: (options) => { + const genfracOptions = __spreadValues({}, options); + const command = options.command; + const args = options.args; + switch (command) { + case "\\dfrac": + case "\\frac": + case "\\tfrac": + genfracOptions.hasBarLine = true; + break; + case "\\atopfrac": + genfracOptions.hasBarLine = false; + break; + case "\\dbinom": + case "\\binom": + case "\\tbinom": + genfracOptions.hasBarLine = false; + genfracOptions.leftDelim = "("; + genfracOptions.rightDelim = ")"; + break; + case "\\cfrac": + genfracOptions.hasBarLine = true; + genfracOptions.continuousFraction = true; + break; + default: + } + switch (command) { + case "\\dfrac": + case "\\dbinom": + genfracOptions.mathstyleName = "displaystyle"; + break; + case "\\tfrac": + case "\\tbinom": + genfracOptions.mathstyleName = "textstyle"; + break; + default: + } + return new GenfracAtom( + !args[0] ? [new PlaceholderAtom()] : argAtoms(args[0]), + !args[1] ? [new PlaceholderAtom()] : argAtoms(args[1]), + genfracOptions + ); + }, + serialize: (atom, options) => { + const numer = atom.aboveToLatex(options); + const denom = atom.belowToLatex(options); + if (/^[0-9]$/.test(numer) && /^[0-9]$/.test(denom)) + return `${atom.command}${numer}${denom}`; + return latexCommand(atom.command, numer, denom); + } + } + ); + defineFunction(["cfrac"], "[:string]{:expression}{:expression}", { + ifMode: "math", + createAtom: (options) => { + const genfracOptions = __spreadValues({}, options); + const args = options.args; + genfracOptions.hasBarLine = true; + genfracOptions.continuousFraction = true; + if (args[0] === "r") genfracOptions.align = "right"; + if (args[0] === "l") genfracOptions.align = "left"; + return new GenfracAtom( + !args[1] ? [new PlaceholderAtom()] : argAtoms(args[1]), + !args[2] ? [new PlaceholderAtom()] : argAtoms(args[2]), + genfracOptions + ); + }, + serialize: (atom, options) => { + const numer = atom.aboveToLatex(options); + const denom = atom.belowToLatex(options); + return latexCommand(atom.command, numer, denom); + } + }); + defineFunction(["brace", "brack"], "", { + infix: true, + createAtom: (options) => new GenfracAtom(argAtoms(options.args[0]), argAtoms(options.args[1]), __spreadProps(__spreadValues({}, options), { + hasBarLine: false, + leftDelim: options.command === "\\brace" ? "\\lbrace" : "\\lbrack", + rightDelim: options.command === "\\brace" ? "\\rbrace" : "\\rbrack" + })), + serialize: (atom, options) => joinLatex([ + atom.aboveToLatex(options), + atom.command, + atom.belowToLatex(options) + ]) + }); + defineFunction(["over", "atop", "choose"], "", { + infix: true, + createAtom: (options) => { + let leftDelim = void 0; + let rightDelim = void 0; + const args = options.args; + if (options.command === "\\choose") { + leftDelim = "("; + rightDelim = ")"; + } + return new GenfracAtom(argAtoms(args[0]), argAtoms(args[1]), __spreadProps(__spreadValues({}, options), { + hasBarLine: options.command === "\\over", + leftDelim, + rightDelim + })); + }, + serialize: (atom, options) => joinLatex([ + atom.aboveToLatex(options), + atom.command, + atom.belowToLatex(options) + ]) + }); + defineFunction( + ["overwithdelims", "atopwithdelims"], + "{numer:auto}{denom:auto}{left-delim:delim}{right-delim:delim}", + { + infix: true, + createAtom: (options) => { + var _a3, _b3; + const args = options.args; + return new GenfracAtom(argAtoms(args[0]), argAtoms(args[1]), __spreadProps(__spreadValues({}, options), { + leftDelim: (_a3 = args[2]) != null ? _a3 : ".", + rightDelim: (_b3 = args[3]) != null ? _b3 : ".", + hasBarLine: false + })); + }, + serialize: (atom, options) => `${atom.aboveToLatex(options)} ${atom.command}${atom.leftDelim}${atom.rightDelim}${atom.belowToLatex(options)}` + } + ); + defineFunction("pdiff", "{numerator}{denominator}", { + ifMode: "math", + createAtom: (options) => new GenfracAtom(argAtoms(options.args[0]), argAtoms(options.args[1]), __spreadProps(__spreadValues({}, options), { + hasBarLine: true, + numerPrefix: "\u2202", + denomPrefix: "\u2202" + })), + serialize: (atom, options) => joinLatex([ + atom.aboveToLatex(options), + atom.command, + atom.belowToLatex(options) + ]) + }); + defineFunction( + [ + "sum", + "prod", + "bigcup", + "bigcap", + "coprod", + "bigvee", + "bigwedge", + "biguplus", + "bigotimes", + "bigoplus", + "bigodot", + "bigsqcup", + "intop" + ], + "", + { + ifMode: "math", + createAtom: (options) => new ExtensibleSymbolAtom( + { + coprod: "\u2210", + bigvee: "\u22C1", + bigwedge: "\u22C0", + biguplus: "\u2A04", + bigcap: "\u22C2", + bigcup: "\u22C3", + intop: "\u222B", + prod: "\u220F", + sum: "\u2211", + bigotimes: "\u2A02", + bigoplus: "\u2A01", + bigodot: "\u2A00", + bigsqcup: "\u2A06", + smallint: "\u222B" + }[options.command.slice(1)], + __spreadProps(__spreadValues({}, options), { + limits: "auto", + variant: "main" + }) + ) + } + ); + defineFunction("smallint", "", { + ifMode: "math", + createAtom: (options) => new OperatorAtom("\u222B", __spreadProps(__spreadValues({}, options), { + limits: "adjacent", + variant: "main" + })) + }); + var EXTENSIBLE_SYMBOLS = { + int: "\u222B", + iint: "\u222C", + iiint: "\u222D", + oint: "\u222E", + oiint: "\u222F", + oiiint: "\u2230", + intclockwise: "\u2231", + varointclockwise: "\u2232", + ointctrclockwise: "\u2233", + intctrclockwise: "\u2A11", + sqcup: "\u2294", + sqcap: "\u2293", + uplus: "\u228E", + wr: "\u2240", + amalg: "\u2A3F", + Cap: "\u22D2", + Cup: "\u22D3", + doublecap: "\u22D2", + doublecup: "\u22D3" + }; + defineFunction(Object.keys(EXTENSIBLE_SYMBOLS), "", { + ifMode: "math", + createAtom: (options) => { + const command = options.command; + const symbol = EXTENSIBLE_SYMBOLS[command.slice(1)]; + return new ExtensibleSymbolAtom(symbol, __spreadProps(__spreadValues({}, options), { + limits: "adjacent", + variant: { "\u22D2": "ams", "\u22D3": "ams" }[symbol] + })); + } + }); + defineFunction(["Re", "Im"], "", { + ifMode: "math", + createAtom: (options) => new OperatorAtom( + { "\\Re": "\u211C", "\\Im": "\u2111" }[options.command], + __spreadProps(__spreadValues({}, options), { + limits: "adjacent", + isFunction: true, + variant: "fraktur" + }) + ) + }); + defineFunction("middle", "{:delim}", { + ifMode: "math", + createAtom: (options) => { + var _a3; + return new MiddleDelimAtom(__spreadProps(__spreadValues({}, options), { + delim: (_a3 = options.args[0]) != null ? _a3 : "|", + size: 1 + })); + } + }); + defineFunction("the", "{:value}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { + captureSelection: true, + verbatimLatex: null + // disable verbatim LaTeX + })), + render: (atom, parent) => { + var _a3; + const ctx = new Context({ parent }, atom.style); + let classes = ""; + if (atom.isSelected) classes += " ML__selected"; + const arg = ctx.evaluate(atom.args[0]); + return new Box( + ((_a3 = serializeLatexValue(arg)) != null ? _a3 : "").split("").map( + (x) => new Box(x, { + type: "ord", + classes, + mode: atom.mode, + isSelected: atom.isSelected, + style: __spreadValues({ variant: "main" }, atom.style) + }) + ), + { + type: "lift", + style: atom.style, + caret: atom.caret, + isSelected: atom.isSelected, + classes + } + ).wrap(ctx); + }, + serialize: (atom) => { + var _a3; + return `\\the${(_a3 = serializeLatexValue(atom.args[0])) != null ? _a3 : "\\relax"}`; + } + }); + + // src/latex-commands/styling.ts + defineFunction("mathtip", "{:auto}{:math}", { + createAtom: (options) => new TooltipAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + tooltip: argAtoms(options.args[1]), + content: "math" + })), + serialize: (atom, options) => options.skipStyles ? atom.bodyToLatex(options) : `\\mathtip{${atom.bodyToLatex(options)}}{${Atom.serialize( + [atom.tooltip], + __spreadProps(__spreadValues({}, options), { + defaultMode: "math" + }) + )}}` + }); + defineFunction("texttip", "{:auto}{:text}", { + createAtom: (options) => new TooltipAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + tooltip: argAtoms(options.args[1]), + content: "text" + })), + serialize: (atom, options) => options.skipStyles ? atom.bodyToLatex(options) : `\\texttip{${atom.bodyToLatex(options)}}{${Atom.serialize( + [atom.tooltip], + __spreadProps(__spreadValues({}, options), { + defaultMode: "text" + }) + )}}` + }); + defineFunction("error", "{:math}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + serialize: (atom, options) => `\\error{${atom.bodyToLatex(options)}}`, + render: (atom, context) => atom.createBox(context, { classes: "ML__error" }) + }); + defineFunction("ensuremath", "{:math}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + serialize: (atom, options) => `${atom.command}{${atom.bodyToLatex(__spreadProps(__spreadValues({}, options), { defaultMode: "math" }))}}` + }); + defineFunction("color", "{:value}", { + applyStyle: (style, _name, args, context) => { + var _a3, _b3; + return __spreadProps(__spreadValues({}, style), { + verbatimColor: (_a3 = serializeLatexValue(args[0])) != null ? _a3 : void 0, + color: context.toColor((_b3 = args[0]) != null ? _b3 : { string: "red" }) + }); + } + }); + defineFunction("textcolor", "{:value}{content:auto*}", { + applyStyle: (style, _name, args, context) => { + var _a3, _b3; + return __spreadProps(__spreadValues({}, style), { + verbatimColor: (_a3 = serializeLatexValue(args[0])) != null ? _a3 : void 0, + color: context.toColor((_b3 = args[0]) != null ? _b3 : { string: "red" }) + }); + } + }); + defineFunction("boxed", "{content:math}", { + createAtom: (options) => new BoxAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + framecolor: { string: "black" } + })) + }); + defineFunction("colorbox", "{:value}{:text*}", { + applyStyle: (style, _name, args, context) => { + var _a3, _b3; + return __spreadProps(__spreadValues({}, style), { + verbatimBackgroundColor: (_a3 = serializeLatexValue(args[0])) != null ? _a3 : void 0, + backgroundColor: context.toBackgroundColor( + (_b3 = args[0]) != null ? _b3 : { string: "yellow" } + ) + }); + } + }); + defineFunction( + "fcolorbox", + "{frame-color:value}{background-color:value}{content:text}", + { + applyMode: "text", + createAtom: (options) => { + var _a3, _b3; + return new BoxAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[2]), + framecolor: (_a3 = options.args[0]) != null ? _a3 : { string: "blue" }, + backgroundcolor: (_b3 = options.args[1]) != null ? _b3 : { string: "yellow" } + })); + }, + serialize: (atom, options) => { + var _a3, _b3; + return options.skipStyles ? atom.bodyToLatex(__spreadProps(__spreadValues({}, options), { defaultMode: "text" })) : latexCommand( + atom.command, + (_a3 = serializeLatexValue(atom.framecolor)) != null ? _a3 : "", + (_b3 = serializeLatexValue(atom.backgroundcolor)) != null ? _b3 : "", + atom.bodyToLatex(__spreadProps(__spreadValues({}, options), { defaultMode: "text" })) + ); + } + } + ); + defineFunction("bbox", "[:bbox]{body:auto}", { + createAtom: (options) => { + var _a3; + const arg = options.args[0]; + const body = argAtoms(options.args[1]); + if (!arg) return new BoxAtom(__spreadProps(__spreadValues({}, options), { body })); + return new BoxAtom(__spreadProps(__spreadValues({}, options), { + body, + padding: arg.padding, + border: arg.border, + backgroundcolor: (_a3 = arg.backgroundcolor) != null ? _a3 : void 0 + })); + }, + serialize: (atom, options) => { + var _a3, _b3; + if (options.skipStyles) return atom.bodyToLatex(options); + let result = atom.command; + if (Number.isFinite(atom.padding) || atom.border !== void 0 || atom.backgroundcolor !== void 0) { + const bboxParameters = []; + if (atom.padding) + bboxParameters.push((_a3 = serializeLatexValue(atom.padding)) != null ? _a3 : ""); + if (atom.border) bboxParameters.push(`border: ${atom.border}`); + if (atom.backgroundcolor) + bboxParameters.push((_b3 = serializeLatexValue(atom.backgroundcolor)) != null ? _b3 : ""); + result += `[${bboxParameters.join(",")}]`; + } + return latexCommand(result, atom.bodyToLatex(options)); + } + }); + defineFunction( + ["displaystyle", "textstyle", "scriptstyle", "scriptscriptstyle"], + "{:rest}", + { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + render: (atom, context) => { + const ctx = new Context( + { parent: context, mathstyle: atom.command.slice(1) }, + atom.style + ); + const box = Atom.createBox(ctx, atom.body, { type: "lift" }); + if (atom.caret) box.caret = atom.caret; + return atom.bind(context, box); + }, + serialize: (atom, options) => options.skipStyles ? atom.bodyToLatex(options) : `{${joinLatex([atom.command, atom.bodyToLatex(options)])}}` + } + ); + defineFunction( + [ + "tiny", + "scriptsize", + "footnotesize", + "small", + "normalsize", + "large", + "Large", + "LARGE", + "huge", + "Huge" + ], + "", + { + // TeX behaves very inconsistently when sizing commands are applied + // to math mode. We allow sizing commands to be applied in both math and + // text mode + applyStyle: (style, name) => { + return __spreadProps(__spreadValues({}, style), { + fontSize: { + "\\tiny": 1, + "\\scriptsize": 2, + // Not to be confused with \scriptstyle + "\\footnotesize": 3, + "\\small": 4, + "\\normalsize": 5, + "\\large": 6, + "\\Large": 7, + "\\LARGE": 8, + "\\huge": 9, + "\\Huge": 10 + }[name] + }); + } + } + ); + defineFunction("fontseries", "{:string}", { + ifMode: "text", + applyStyle: (style, _name, args) => { + var _a3; + return __spreadProps(__spreadValues({}, style), { fontSeries: (_a3 = args[0]) != null ? _a3 : "auto" }); + } + }); + defineFunction("fontshape", "{:string}", { + ifMode: "text", + applyStyle: (style, _name, args) => { + var _a3; + return __spreadProps(__spreadValues({}, style), { fontShape: (_a3 = args[0]) != null ? _a3 : "auto" }); + } + }); + defineFunction("fontfamily", "{:string}", { + ifMode: "text", + applyStyle: (style, _name, args) => { + var _a3; + return __spreadProps(__spreadValues({}, style), { fontFamily: (_a3 = args[0]) != null ? _a3 : "roman" }); + } + }); + defineFunction("selectfont", "", { + ifMode: "text", + applyStyle: (style) => style + }); + defineFunction("bf", "{:rest*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + fontSeries: "b", + fontShape: "n", + fontFamily: "roman" + }) + }); + defineFunction(["boldsymbol", "bm", "bold"], "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { variantStyle: "bold" }) + }); + defineFunction("bfseries", "{:rest*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontSeries: "b" }) + }); + defineFunction("mdseries", "{:rest*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontSeries: "m" }) + }); + defineFunction("upshape", "{:rest*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "n" }) + }); + defineFunction("slshape", "{:rest*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "sl" }) + }); + defineFunction("scshape", "{:rest*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "sc" }) + }); + defineFunction("textbf", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontSeries: "b" }) + }); + defineFunction("textmd", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontSeries: "m" }) + }); + defineFunction("textup", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "n" }) + }); + defineFunction("textnormal", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "n", fontSeries: "m" }) + }); + defineFunction("textsl", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "sl" }) + }); + defineFunction("textit", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "it" }) + }); + defineFunction("textsc", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontShape: "sc" }) + }); + defineFunction("textrm", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "roman" }) + }); + defineFunction("textsf", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "sans-serif" }) + }); + defineFunction("texttt", "{:text*}", { + applyMode: "text", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "monospace" }) + }); + defineFunction("mathbf", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "normal", + variantStyle: "bold" + }) + }); + defineFunction("mathit", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "main", + variantStyle: "italic" + }) + }); + defineFunction("mathnormal", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "normal", + variantStyle: "italic" + }) + }); + defineFunction("mathbfit", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "main", + variantStyle: "bolditalic" + }) + }); + defineFunction("mathrm", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { variant: "normal", variantStyle: "up" }) + }); + defineFunction("mathsf", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "sans-serif", + variantStyle: "up" + }) + }); + defineFunction("mathtt", "{:math*}", { + applyMode: "math", + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "monospace", + variantStyle: "up" + }) + }); + defineFunction("it", "{:rest*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + fontSeries: "m", + fontShape: "it", + fontFamily: "roman", + variantStyle: "italic" + // For math mode + }) + }); + defineFunction("rmfamily", "{:rest*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "roman" }) + }); + defineFunction("sffamily", "{:rest*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "sans-serif" }) + }); + defineFunction("ttfamily", "{:rest*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { fontFamily: "monospace" }) + }); + defineFunction(["Bbb", "mathbb"], "{:math*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "double-struck", + variantStyle: removeItalic(style.variantStyle) + }) + }); + defineFunction(["frak", "mathfrak"], "{:math*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "fraktur", + variantStyle: removeItalic(style.variantStyle) + }) + }); + defineFunction("mathcal", "{:math*}", { + // Note that in LaTeX, \mathcal forces the 'up' variant. Use \bm to get bold + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "calligraphic", + variantStyle: removeItalic(style.variantStyle) + }) + }); + defineFunction("mathscr", "{:math*}", { + applyStyle: (style) => __spreadProps(__spreadValues({}, style), { + variant: "script", + variantStyle: removeItalic(style.variantStyle) + }) + }); + defineFunction("mbox", "{:text}", { + ifMode: "math", + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { + type: "mord", + body: argAtoms(options.args[0]), + mode: "math" + })), + serialize: (atom, options) => latexCommand( + "\\mbox", + atom.bodyToLatex(__spreadProps(__spreadValues({}, options), { defaultMode: "text" })) + ) + }); + defineFunction("text", "{:text}", { + ifMode: "math", + applyMode: "text" + }); + defineFunction(["class", "htmlClass"], "{name:string}{content:auto*}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: "mord", body: argAtoms(options.args[1]) })), + serialize: (atom, options) => { + if (!atom.args[0] || options.skipStyles) return atom.bodyToLatex(options); + return `${atom.command}{${atom.args[0]}}{${atom.bodyToLatex( + options + )}}`; + }, + render: (atom, context) => { + var _a3; + return atom.createBox(context, { + classes: (_a3 = atom.args[0]) != null ? _a3 : "", + boxType: "lift" + }); + } + }); + defineFunction(["cssId", "htmlId"], "{id:string}{content:auto*}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: "mord", body: argAtoms(options.args[1]) })), + serialize: (atom, options) => { + var _a3; + if (!((_a3 = atom.args) == null ? void 0 : _a3[0]) || options.skipStyles) return atom.bodyToLatex(options); + return `${atom.command}{${atom.args[0]}}{${atom.bodyToLatex( + options + )}}`; + }, + render: (atom, context) => { + var _a3; + const box = atom.createBox(context); + box.cssId = (_a3 = atom.args[0]) != null ? _a3 : ""; + return box; + } + }); + defineFunction("htmlData", "{data:string}{content:auto*}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: "mord", body: argAtoms(options.args[1]) })), + serialize: (atom, options) => { + var _a3; + if (!((_a3 = atom.args) == null ? void 0 : _a3[0]) || options.skipStyles) return atom.bodyToLatex(options); + return `\\htmlData{${atom.args[0]}}{${atom.bodyToLatex( + options + )}}`; + }, + render: (atom, context) => { + var _a3; + const box = atom.createBox(context); + box.htmlData = (_a3 = atom.args[0]) != null ? _a3 : ""; + return box; + } + }); + defineFunction(["style", "htmlStyle"], "{data:string}{content:auto*}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: "mord", body: argAtoms(options.args[1]) })), + serialize: (atom, options) => { + var _a3; + if (!((_a3 = atom.args) == null ? void 0 : _a3[0]) || options.skipStyles) return atom.bodyToLatex(options); + return `${atom.command}{${atom.args[0]}}{${atom.bodyToLatex( + options + )}}`; + }, + render: (atom, context) => { + var _a3; + const box = atom.createBox(context); + box.htmlStyle = (_a3 = atom.args[0]) != null ? _a3 : ""; + return box; + } + }); + defineFunction("href", "{url:string}{content:auto*}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: "mord", body: argAtoms(options.args[1]) })), + render: (atom, context) => { + var _a3; + const box = atom.createBox(context); + const href = (_a3 = atom.args[0]) != null ? _a3 : ""; + if (href) box.htmlData = `href=${href}`; + return box; + } + }); + defineFunction("em", "{:rest}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + serialize: (atom, options) => options.skipStyles ? atom.bodyToLatex(options) : `{\\em ${atom.bodyToLatex(options)}}`, + render: (atom, context) => atom.createBox(context, { classes: "ML__emph", boxType: "lift" }) + }); + defineFunction("emph", "{:auto}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[1]) })), + serialize: (atom, options) => options.skipStyles ? atom.bodyToLatex(options) : `\\emph{${atom.bodyToLatex(options)}}`, + render: (atom, context) => atom.createBox(context, { classes: "ML__emph", boxType: "lift" }) + }); + var DELIMITER_SIZES = { + "\\bigl": { mclass: "mopen", size: 1 }, + "\\Bigl": { mclass: "mopen", size: 2 }, + "\\biggl": { mclass: "mopen", size: 3 }, + "\\Biggl": { mclass: "mopen", size: 4 }, + "\\bigr": { mclass: "mclose", size: 1 }, + "\\Bigr": { mclass: "mclose", size: 2 }, + "\\biggr": { mclass: "mclose", size: 3 }, + "\\Biggr": { mclass: "mclose", size: 4 }, + "\\bigm": { mclass: "mrel", size: 1 }, + "\\Bigm": { mclass: "mrel", size: 2 }, + "\\biggm": { mclass: "mrel", size: 3 }, + "\\Biggm": { mclass: "mrel", size: 4 }, + "\\big": { mclass: "mord", size: 1 }, + "\\Big": { mclass: "mord", size: 2 }, + "\\bigg": { mclass: "mord", size: 3 }, + "\\Bigg": { mclass: "mord", size: 4 } + }; + defineFunction( + [ + "bigl", + "Bigl", + "biggl", + "Biggl", + "bigr", + "Bigr", + "biggr", + "Biggr", + "bigm", + "Bigm", + "biggm", + "Biggm", + "big", + "Big", + "bigg", + "Bigg" + ], + "{:delim}", + { + createAtom: (options) => { + var _a3; + return new SizedDelimAtom(__spreadProps(__spreadValues({}, options), { + delim: (_a3 = options.args[0]) != null ? _a3 : ".", + size: DELIMITER_SIZES[options.command].size, + delimType: DELIMITER_SIZES[options.command].mclass + })); + }, + // For compatibility with LaTeX, we serialize \bigl{x} as \biglx + serialize: (atom, options) => joinLatex([ + atom.command, + /^[a-zA-Z]/.test(atom.value) ? `{${atom.value}}` : atom.value + ]) + } + ); + defineFunction( + [ + "hspace", + "hspace*" + // \hspace* inserts a non-breakable space, but since we don't line break... + // it's the same as \hspace. + ], + "{width:value}", + { + createAtom: (options) => { + var _a3; + return new SpacingAtom(__spreadProps(__spreadValues({}, options), { + width: (_a3 = options.args[0]) != null ? _a3 : { dimension: 0 } + })); + } + } + ); + defineFunction(["mkern", "kern", "mskip", "hskip", "mspace"], "{width:value}", { + createAtom: (options) => { + var _a3; + return new SpacingAtom(__spreadProps(__spreadValues({}, options), { + width: (_a3 = options.args[0]) != null ? _a3 : { dimension: 0 } + })); + } + }); + defineFunction("mathchoice", "{:math}{:math}{:math}{:math}", { + // display, text, script and scriptscript + createAtom: (options) => new Atom(options), + render: (atom, context) => { + let i = 0; + const d = context.mathstyle.id; + if (d === T || d === Tc) i = 1; + if (d === S || d === Sc) i = 2; + if (d === SS || d === SSc) i = 3; + const body = argAtoms(atom.args[i]); + return Atom.createBox(context, body); + }, + serialize: (atom, options) => `\\mathchoice{${Atom.serialize( + atom.args[0], + options + )}}{${Atom.serialize(atom.args[1], options)}}{${Atom.serialize( + atom.args[2], + options + )}}{${Atom.serialize(atom.args[3], options)}}` + }); + defineFunction("mathop", "{:auto}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { + type: "mop", + body: argAtoms(options.args[0]), + limits: "over-under", + isFunction: true, + captureSelection: true + })), + render: (atom, context) => { + var _a3; + let base = Atom.createBox(context, atom.body); + if (atom.superscript || atom.subscript) { + const limits = (_a3 = atom.subsupPlacement) != null ? _a3 : "auto"; + base = limits === "over-under" || limits === "auto" && context.isDisplayStyle ? atom.attachLimits(context, { base }) : atom.attachSupsub(context, { base }); + } + if (atom.caret) base.caret = atom.caret; + return new Box(atom.bind(context, base), { + type: "op", + isSelected: atom.isSelected, + classes: "ML__op-group" + }); + }, + serialize: (atom, options) => { + const result = [latexCommand(atom.command, atom.bodyToLatex(options))]; + if (atom.explicitSubsupPlacement) { + if (atom.subsupPlacement === "over-under") result.push("\\limits"); + if (atom.subsupPlacement === "adjacent") result.push("\\nolimits"); + if (atom.subsupPlacement === "auto") result.push("\\displaylimits"); + } + result.push(atom.supsubToLatex(options)); + return joinLatex(result); + } + }); + defineFunction( + [ + "mathbin", + "mathrel", + "mathopen", + "mathclose", + "mathpunct", + "mathord", + "mathinner" + ], + "{:auto}", + { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { + type: { + "\\mathbin": "mbin", + "\\mathrel": "mrel", + "\\mathopen": "mopen", + "\\mathclose": "mclose", + "\\mathpunct": "mpunct", + "\\mathord": "mord", + "\\mathinner": "minner" + }[options.command], + body: argAtoms(options.args[0]) + })) + } + ); + defineFunction(["operatorname", "operatorname*"], "{operator:math}", { + createAtom: (options) => { + const body = argAtoms(options.args[0]).map((x) => { + var _a3; + if (x.type !== "first") { + x.type = "mord"; + x.value = (_a3 = { "\u2217": "*", "\u2212": "-" }[x.value]) != null ? _a3 : x.value; + x.isFunction = false; + if (!x.style.variant && !x.style.variantStyle) { + x.style.variant = "main"; + x.style.variantStyle = "up"; + } + } + return x; + }); + return new Atom(__spreadProps(__spreadValues({}, options), { + type: "mop", + body, + isFunction: true, + limits: options.command === "\\operatorname" ? "adjacent" : "over-under" + })); + }, + render: (atom, context) => { + var _a3; + let base = Atom.createBox(context, atom.body); + if (atom.superscript || atom.subscript) { + const limits = (_a3 = atom.subsupPlacement) != null ? _a3 : "auto"; + base = limits === "over-under" || limits === "auto" && context.isDisplayStyle ? atom.attachLimits(context, { base }) : atom.attachSupsub(context, { base }); + } + if (atom.caret) base.caret = atom.caret; + return new Box(atom.bind(context, base), { + type: "op", + isSelected: atom.isSelected, + classes: "ML__op-group" + }); + }, + serialize: (atom, options) => { + const result = [latexCommand(atom.command, atom.bodyToLatex(options))]; + if (atom.explicitSubsupPlacement) { + if (atom.subsupPlacement === "over-under") result.push("\\limits"); + if (atom.subsupPlacement === "adjacent") result.push("\\nolimits"); + if (atom.subsupPlacement === "auto") result.push("\\displaylimits"); + } + result.push(atom.supsubToLatex(options)); + return joinLatex(result); + } + }); + defineFunction(["char", "unicode"], "{charcode:value}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { type: options.mode === "text" ? "text" : "mord" })), + serialize: (atom) => { + var _a3; + return `${atom.command}${serializeLatexValue( + (_a3 = atom.args[0]) != null ? _a3 : { number: 10067, base: "hexadecimal" } + )}`; + }, + render: (atom, context) => { + let value = context.evaluate(atom.args[0]); + if (!value || !("number" in value)) + value = { number: 10067, base: "hexadecimal" }; + atom.value = String.fromCodePoint(value.number); + return atom.createBox(context); + } + }); + defineFunction("rule", "[raise:value]{width:value}{thickness:value}", { + createAtom: (options) => new Atom(options), + render: (atom, context) => { + var _a3, _b3, _c2; + const ctx = new Context( + { parent: context, mathstyle: "textstyle" }, + atom.style + ); + const shift = ctx.toEm((_a3 = atom.args[0]) != null ? _a3 : { dimension: 0 }); + const width = ctx.toEm((_b3 = atom.args[1]) != null ? _b3 : { dimension: 10 }); + const height = ctx.toEm((_c2 = atom.args[2]) != null ? _c2 : { dimension: 10 }); + const result = new Box(null, { + classes: "ML__rule", + type: "ord" + }); + result.width = width; + result.height = height + shift; + result.depth = -shift; + result.setStyle("border-right-width", width, "em"); + result.setStyle("border-top-width", height, "em"); + result.setStyle("border-color", atom.style.color); + result.setStyle("vertical-align", shift, "em"); + if (atom.isSelected) result.setStyle("opacity", "50%"); + atom.bind(ctx, result); + if (atom.caret) result.caret = atom.caret; + return result.wrap(context); + }, + serialize: (atom) => `\\rule${atom.args[0] ? `[${serializeLatexValue(atom.args[0])}]` : ""}{${serializeLatexValue(atom.args[1])}}{${serializeLatexValue( + atom.args[2] + )}}` + }); + defineFunction(["overline", "underline"], "{:auto}", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { body: argAtoms(options.args[0]) })), + render: (atom, parentContext) => { + const position = atom.command.substring(1); + const context = new Context( + { parent: parentContext, mathstyle: "cramp" }, + atom.style + ); + const inner = Atom.createBox(context, atom.body); + if (!inner) return null; + const ruleThickness = context.metrics.defaultRuleThickness / context.scalingFactor; + const line = new Box(null, { classes: position + "-line" }); + line.height = ruleThickness; + line.maxFontSize = ruleThickness * 1.125 * context.scalingFactor; + let stack; + if (position === "overline") { + stack = new VBox({ + shift: 0, + children: [ + { box: inner }, + 3 * ruleThickness, + { box: line }, + ruleThickness + ] + }); + } else { + stack = new VBox({ + top: inner.height, + children: [ + ruleThickness, + { box: line }, + 3 * ruleThickness, + { box: inner } + ] + }); + } + if (atom.caret) stack.caret = atom.caret; + return new Box(stack, { classes: position, type: "ignore" }); + } + }); + defineFunction("overset", "{:auto}{base:auto}", { + createAtom: (options) => { + const body = argAtoms(options.args[1]); + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + above: argAtoms(options.args[0]), + body, + skipBoundary: false, + boxType: atomsBoxType(body) + })); + }, + serialize: (atom, options) => latexCommand( + atom.command, + atom.aboveToLatex(options), + atom.bodyToLatex(options) + ) + }); + defineFunction("underset", "{:auto}{base:auto}", { + createAtom: (options) => { + const body = argAtoms(options.args[1]); + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + below: argAtoms(options.args[0]), + body, + skipBoundary: false, + boxType: atomsBoxType(body) + })); + }, + serialize: (atom, options) => latexCommand( + atom.command, + atom.belowToLatex(options), + atom.bodyToLatex(options) + ) + }); + defineFunction("overunderset", "{above:auto}{below:auto}{base:auto}", { + createAtom: (options) => { + const body = argAtoms(options.args[2]); + return new OverunderAtom(__spreadProps(__spreadValues({}, options), { + above: argAtoms(options.args[0]), + below: argAtoms(options.args[1]), + body, + skipBoundary: false, + boxType: atomsBoxType(body) + })); + }, + serialize: (atom, options) => latexCommand( + atom.command, + atom.belowToLatex(options), + atom.bodyToLatex(options) + ) + }); + defineFunction( + ["stackrel", "stackbin"], + "[below:auto]{above:auto}{base:auto}", + { + createAtom: (options) => new OverunderAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[2]), + above: argAtoms(options.args[1]), + below: argAtoms(options.args[0]), + skipBoundary: false, + boxType: options.command === "\\stackrel" ? "rel" : "bin" + })), + serialize: (atom, options) => latexCommand( + atom.command, + atom.aboveToLatex(options), + atom.bodyToLatex(options) + ) + } + ); + defineFunction("smash", "[:string]{:auto}", { + createAtom: (options) => { + var _a3, _b3, _c2, _d2; + return new PhantomAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[1]), + smashHeight: (_b3 = (_a3 = options.args[0]) == null ? void 0 : _a3.includes("t")) != null ? _b3 : true, + smashDepth: (_d2 = (_c2 = options.args[0]) == null ? void 0 : _c2.includes("b")) != null ? _d2 : true + })); + } + }); + defineFunction("vphantom", "{:auto}", { + createAtom: (options) => new PhantomAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + isInvisible: true, + smashWidth: true + })) + }); + defineFunction("hphantom", "{:auto}", { + createAtom: (options) => new PhantomAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + isInvisible: true, + smashHeight: true, + smashDepth: true + })) + }); + defineFunction("phantom", "{:auto}", { + createAtom: (options) => new PhantomAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + isInvisible: true + })) + }); + defineFunction("mathstrut", "", { + createAtom: (options) => new PhantomAtom(__spreadProps(__spreadValues({}, options), { + body: [new Atom({ value: "(" })], + isInvisible: true + })) + }); + defineFunction("not", "{:math}", { + createAtom: (options) => { + const body = argAtoms(options.args[0]); + if (body.length === 0) + return new Atom(__spreadProps(__spreadValues({}, options), { type: "mrel", value: "\uE020" })); + return new Atom(__spreadProps(__spreadValues({}, options), { + body: [ + new OverlapAtom(__spreadProps(__spreadValues({}, options), { body: "\uE020", align: "right" })), + ...body + ], + captureSelection: true + })); + }, + serialize: (atom, options) => { + const arg = atom.args[0]; + const isGroup = arg && typeof arg === "object" && "group" in arg; + if (atom.value !== "\uE020") { + return isGroup ? `\\not{${Atom.serialize(arg.group, options)}}` : `\\not${Atom.serialize(arg, options)}`; + } + return isGroup ? `\\not{}` : `\\not`; + }, + render: (atom, context) => { + if (atom.value) return atom.createBox(context); + const isGroup = atom.args[0] && typeof atom.args[0] === "object" && "group" in atom.args[0]; + const type = isGroup ? "ord" : atomsBoxType(argAtoms(atom.args[0])); + const box = Atom.createBox(context, atom.body, { type }); + if (atom.caret) box.caret = atom.caret; + return atom.bind(context, box); + } + }); + defineFunction(["ne", "neq"], "", { + createAtom: (options) => new Atom(__spreadProps(__spreadValues({}, options), { + type: "mrel", + body: [ + new OverlapAtom(__spreadProps(__spreadValues({}, options), { + body: "\uE020", + align: "right", + boxType: "rel" + })), + new Atom(__spreadProps(__spreadValues({}, options), { value: "=" })) + ], + captureSelection: true + })), + serialize: (atom) => atom.command + }); + defineFunction("rlap", "{:auto}", { + createAtom: (options) => new OverlapAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + align: "right" + })) + }); + defineFunction("llap", "{:auto}", { + createAtom: (options) => new OverlapAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + align: "left" + })) + }); + defineFunction("mathrlap", "{:math}", { + createAtom: (options) => new OverlapAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + align: "right" + })) + }); + defineFunction("mathllap", "{:math}", { + createAtom: (options) => new OverlapAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[0]), + align: "left" + })) + }); + defineFunction("raisebox", "{:value}{:text}", { + createAtom: (options) => { + var _a3; + return new BoxAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[1]), + padding: { dimension: 0 }, + offset: (_a3 = options.args[0]) != null ? _a3 : { dimension: 0 } + })); + }, + serialize: (atom, options) => { + var _a3; + return latexCommand( + "\\raisebox", + (_a3 = serializeLatexValue(atom.offset)) != null ? _a3 : "0pt", + atom.bodyToLatex(options) + ); + } + }); + defineFunction("raise", "{:value}{:auto}", { + createAtom: (options) => { + var _a3; + return new BoxAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[1]), + padding: { dimension: 0 }, + offset: (_a3 = options.args[0]) != null ? _a3 : { dimension: 0 } + })); + }, + serialize: (atom, options) => { + var _a3; + return latexCommand( + "\\raise", + (_a3 = serializeLatexValue(atom.offset)) != null ? _a3 : "0pt", + atom.bodyToLatex(options) + ); + } + }); + defineFunction("lower", "{:value}{:auto}", { + createAtom: (options) => { + var _a3; + return new BoxAtom(__spreadProps(__spreadValues({}, options), { + body: argAtoms(options.args[1]), + padding: { dimension: 0 }, + offset: (_a3 = multiplyLatexValue(options.args[0], -1)) != null ? _a3 : { dimension: 0 } + })); + }, + serialize: (atom, options) => { + var _a3, _b3; + return latexCommand( + "\\lower", + (_b3 = serializeLatexValue( + multiplyLatexValue((_a3 = atom.offset) != null ? _a3 : { dimension: 0 }, -1) + )) != null ? _b3 : "0pt", + atom.bodyToLatex(options) + ); + } + }); + + // src/latex-commands/symbols.ts + defineSymbols("0123456789/@.?!"); + defineSymbolRange(65, 90); + defineSymbolRange(97, 122); + defineSymbols([ + ["\\forall", 8704], + ["\\exists", 8707], + ["\\nexists", 8708, "mord", "ams"], + ["\\mid", 8739, "mrel"], + ["\\top", 8868], + ["\\bot", 8869] + ]); + defineSymbols([ + ["\\#", 35], + ["\\&", 38], + ["\\parallelogram", 9649], + ["\\spadesuit", 9824], + ["\\heartsuit", 9825], + ["\\diamondsuit", 9826], + ["\\clubsuit", 9827], + ["\\flat", 9837], + ["\\natural", 9838], + ["\\sharp", 9839] + ]); + defineSymbols([ + ["\\backslash", 92], + ["\\nabla", 8711], + ["\\partial", 8706], + ["\\ell", 8467], + ["\\hbar", 8463], + ["\\pounds", 163], + ["\\euro", 8364] + // NOTE: not TeX built-in, but textcomp package + // TODO Koppa, Stigma, Sampi + ]); + defineSymbols( + [ + ["\\rightarrow", 8594], + ["\\to", 8594], + ["\\leftarrow", 8592], + ["\\gets", 8592], + ["\\Rightarrow", 8658], + ["\\Leftarrow", 8656], + ["\\longrightarrow", 10230], + ["\\longleftarrow", 10229], + ["\\Longrightarrow", 10233], + ["\\implies", 10233], + ["\\Longleftarrow", 10232], + ["\\impliedby", 10232], + ["\\longleftrightarrow", 10231], + ["\\biconditional", 10231], + ["\\Longleftrightarrow", 10234], + ["\\mapsto", 8614], + ["\\longmapsto", 10236], + ["\\uparrow", 8593], + ["\\downarrow", 8595], + ["\\Uparrow", 8657], + ["\\Downarrow", 8659], + ["\\updownarrow", 8597], + ["\\Updownarrow", 8661], + ["\\hookrightarrow", 8618], + ["\\hookleftarrow", 8617], + ["\\rightharpoonup", 8640], + ["\\leftharpoonup", 8636], + ["\\rightharpoondown", 8641], + ["\\leftharpoondown", 8637], + ["\\searrow", 8600], + ["\\nearrow", 8599], + ["\\swarrow", 8601], + ["\\nwarrow", 8598], + ["\\originalof", 8886], + ["\\laplace", 8886], + ["\\imageof", 8887], + ["\\Laplace", 8887] + ], + "mrel" + ); + defineSymbols([ + ["\\mapsfrom", 8612, "mrel"], + ["\\Mapsfrom", 10502, "mrel"], + ["\\MapsTo", 10503, "mrel"], + ["\\Yup", 8516, "mord"], + ["\\lightning", 8623, "mrel"], + ["\\leftarrowtriangle", 8701, "mrel"], + ["\\rightarrowtriangle", 8702, "mrel"], + ["\\leftrightarrowtriangle", 8703, "mrel"], + ["\\boxdot", 8865, "mbin"], + ["\\bigtriangleup", 9651, "mbin"], + ["\\bigtriangledown", 9661, "mbin"], + ["\\boxbar", 9707, "mbin"], + ["\\Lbag", 10181, "mopen"], + ["\\Rbag", 10182, "mclose"], + ["\\llbracket", 10214, "mopen"], + ["\\rrbracket", 10215, "mclose"], + ["\\longmapsfrom", 10235, "mrel"], + ["\\Longmapsfrom", 10237, "mrel"], + ["\\Longmapsto", 10238, "mrel"], + ["\\boxslash", 10692, "mbin"], + ["\\boxbslash", 10693, "mbin"], + ["\\boxast", 10694, "mbin"], + ["\\boxcircle", 10695, "mbin"], + ["\\boxbox", 10696, "mbin"], + ["\\fatsemi", 10783, "mop"], + ["\\leftslice", 10918, "mrel"], + ["\\rightslice", 10919, "mrel"], + ["\\interleave", 10996, "mbin"], + ["\\biginterleave", 11004, "mop"], + ["\\sslash", 11005, "mbin"], + ["\\talloblong", 11006, "mbin"] + ]); + defineSymbols([ + // 'ams' Delimiters + ["\\lbrace", 123, "mopen"], + ["\\rbrace", 125, "mclose"], + ["\\lparen", 40, "mopen"], + // mathtools.sty + ["\\rparen", 41, "mclose"], + // mathtools.sty + ["\\langle", 10216, "mopen"], + ["\\rangle", 10217, "mclose"], + ["\\lfloor", 8970, "mopen"], + ["\\rfloor", 8971, "mclose"], + ["\\lceil", 8968, "mopen"], + ["\\rceil", 8969, "mclose"], + ["\\vert", 8739], + ["\\lvert", 8739, "mopen"], + ["\\rvert", 8739, "mclose"], + ["\\|", 8741], + ["\\Vert", 8741], + ["\\mVert", 8741], + ["\\lVert", 8741, "mopen"], + ["\\rVert", 8741, "mclose"], + ["\\lbrack", 91, "mopen"], + ["\\rbrack", 93, "mclose"], + ["\\{", 123, "mopen"], + ["\\}", 125, "mclose"], + ["(", 40, "mopen"], + [")", 41, "mclose"], + ["[", 91, "mopen"], + ["]", 93, "mclose"], + ["\\ulcorner", 9484, "mopen", "ams"], + ["\\urcorner", 9488, "mclose", "ams"], + ["\\llcorner", 9492, "mopen", "ams"], + ["\\lrcorner", 9496, "mclose", "ams"], + // Large Delimiters + ["\\lgroup", 10222, "mopen"], + ["\\rgroup", 10223, "mclose"], + ["\\lmoustache", 9136, "mopen"], + ["\\rmoustache", 9137, "mclose"] + // defineSymbol('\\ne', 0x2260, 'mrel'], + // defineSymbol('\\neq', 0x2260, 'mrel'], + // defineSymbol( '\\longequal', 0xF7D9, 'mrel', MAIN], // NOTE: Not TeX + ]); + defineSymbols( + [ + // 'ams' arrows + ["\\dashrightarrow", 8674], + ["\\dashleftarrow", 8672], + ["\\Rrightarrow", 8667], + ["\\Lleftarrow", 8666], + ["\\leftrightarrows", 8646], + ["\\rightleftarrows", 8644], + ["\\curvearrowright", 8631], + ["\\curvearrowleft", 8630], + ["\\rightrightarrows", 8649], + ["\\leftleftarrows", 8647], + ["\\upuparrows", 8648], + ["\\downdownarrows", 8650], + ["\\vartriangle", 9651], + ["\\triangleq", 8796], + ["\\vartriangleleft", 8882], + ["\\trianglelefteq", 8884], + ["\\ntriangleleft", 8938], + ["\\ntrianglelefteq", 8940], + ["\\vartriangleright", 8883], + ["\\trianglerighteq", 8885], + ["\\ntriangleright", 8939], + ["\\ntrianglerighteq", 8941], + ["\\blacktriangleleft", 9664], + ["\\blacktriangleright", 9654], + ["\\leftarrowtail", 8610], + ["\\rightarrowtail", 8611], + ["\\looparrowright", 8620], + ["\\looparrowleft", 8619], + ["\\twoheadleftarrow", 8606], + ["\\twoheadrightarrow", 8608], + ["\\twoheadrightarrowtail", 10518], + ["\\rightleftharpoons", 8652], + ["\\leftrightharpoons", 8651], + ["\\Rsh", 8625], + ["\\Lsh", 8624], + // 'ams' Relations + ["\\circlearrowright", 8635], + ["\\circlearrowleft", 8634], + ["\\restriction", 8638], + ["\\upharpoonright", 8638], + ["\\upharpoonleft", 8639], + ["\\downharpoonright", 8642], + ["\\downharpoonleft", 8643], + ["\\rightsquigarrow", 8669], + ["\\leadsto", 8669], + ["\\leftrightsquigarrow", 8621], + ["\\multimap", 8888], + // 'ams' Negated Arrows + ["\\nleftarrow", 8602], + ["\\nrightarrow", 8603], + ["\\nRightarrow", 8655], + ["\\nLeftarrow", 8653], + ["\\nleftrightarrow", 8622], + ["\\nLeftrightarrow", 8654], + ["\\nvrightarrow", 8696], + ["\\nvtwoheadrightarrow", 10496], + ["\\nvrightarrowtail", 10516], + ["\\nvtwoheadrightarrowtail", 10519], + // 'ams' Negated Relations + ["\\shortparallel", 8741], + ["\\nless", 8814], + ["\\nleqslant", 57360], + ["\\lneq", 10887], + ["\\lneqq", 8808], + ["\\nleqq", 57361], + ["\\lvertneqq", 57356], + ["\\lnsim", 8934], + ["\\lnapprox", 10889], + ["\\nprec", 8832], + ["\\npreceq", 8928], + ["\\precnsim", 8936], + ["\\precnapprox", 10937], + ["\\nsim", 8769], + ["\\nshortmid", 57350], + ["\\nmid", 8740], + ["\\nvdash", 8876], + ["\\nvDash", 8877], + ["\\ngtr", 8815], + ["\\ngeqslant", 57359], + ["\\ngeqq", 57358], + ["\\gneq", 10888], + ["\\gneqq", 8809], + ["\\gvertneqq", 57357], + ["\\gnsim", 8935], + ["\\gnapprox", 10890], + ["\\nsucc", 8833], + ["\\nsucceq", 8929], + ["\\succnsim", 8937], + ["\\succnapprox", 10938], + ["\\ncong", 8774], + ["\\nshortparallel", 57351], + ["\\nparallel", 8742], + ["\\nVDash", 8879], + ["\\nsupseteqq", 57368], + ["\\supsetneq", 8843], + ["\\varsupsetneq", 57371], + ["\\supsetneqq", 10956], + ["\\varsupsetneqq", 57369], + ["\\nVdash", 8878], + ["\\precneqq", 10933], + ["\\succneqq", 10934], + ["\\nsubseteqq", 57366], + ["\\leqslant", 10877], + ["\\geqslant", 10878], + ["\\gtrsim", 8819], + ["\\approxeq", 8778], + ["\\thickapprox", 8776], + ["\\lessapprox", 10885], + ["\\gtrapprox", 10886], + ["\\precapprox", 10935], + ["\\succapprox", 10936], + ["\\thicksim", 8764], + ["\\succsim", 8831], + ["\\precsim", 8830], + ["\\backsim", 8765], + ["\\eqsim", 8770], + ["\\backsimeq", 8909], + ["\\lesssim", 8818], + ["\\nleq", 8816], + ["\\ngeq", 8817], + ["\\smallsmile", 8995], + ["\\smallfrown", 8994], + ["\\leqq", 8806], + ["\\eqslantless", 10901], + ["\\lll", 8920], + ["\\lessgtr", 8822], + ["\\lesseqgtr", 8922], + ["\\lesseqqgtr", 10891], + ["\\risingdotseq", 8787], + ["\\fallingdotseq", 8786], + ["\\subseteqq", 10949], + ["\\Subset", 8912], + ["\\sqsubset", 8847], + ["\\preccurlyeq", 8828], + ["\\curlyeqprec", 8926], + ["\\vDash", 8872], + ["\\Vvdash", 8874], + ["\\bumpeq", 8783], + ["\\Bumpeq", 8782], + ["\\geqq", 8807], + ["\\eqslantgtr", 10902], + ["\\ggg", 8921], + ["\\gtrless", 8823], + ["\\gtreqless", 8923], + ["\\gtreqqless", 10892], + ["\\supseteqq", 10950], + ["\\Supset", 8913], + ["\\sqsupset", 8848], + ["\\succcurlyeq", 8829], + ["\\curlyeqsucc", 8927], + ["\\Vdash", 8873], + ["\\shortmid", 8739], + ["\\between", 8812], + ["\\pitchfork", 8916], + ["\\varpropto", 8733], + ["\\backepsilon", 8717], + ["\\llless", 8920], + ["\\gggtr", 8921], + ["\\doteqdot", 8785], + ["\\Doteq", 8785], + ["\\eqcirc", 8790], + ["\\circeq", 8791], + ["\\therefore", 8756], + ["\\because", 8757] + ], + "mrel", + "ams" + ); + defineSymbols( + [ + ["+", 43], + ["-", 8722], + ["\u2212", 8722], + ["\\pm", 177], + ["\\mp", 8723], + ["*", 8727], + ["\\times", 215], + ["\\div", 247], + ["\\divides", 8739], + ["\\cdot", 8901], + ["\\cap", 8745], + ["\\cup", 8746], + ["\\setminus", 8726], + ["\\land", 8743], + ["\\wedge", 8743], + ["\\lor", 8744], + ["\\vee", 8744], + ["\\circ", 8728], + ["\\bigcirc", 9711], + ["\\bullet", 8729], + ["\\oplus", 8853], + ["\\ominus", 8854], + ["\\otimes", 8855], + ["\\odot", 8857], + ["\\oslash", 8856], + ["\\bigtriangleup", 9651], + ["\\bigtriangledown", 9661], + ["\\triangleleft", 9667], + ["\\triangleright", 9657], + ["\\And", 38], + ["\\dagger", 8224], + ["\\dag", 8224], + ["\\ddag", 8225], + ["\\ddagger", 8225], + ["\\ast", 8727], + ["\\star", 8902], + ["\\bigstar", 9733], + ["\\diamond", 8900] + ], + "mbin" + ); + defineSymbols( + [ + ["\\lhd", 8882], + ["\\rhd", 8883], + ["\\lessdot", 8918], + ["\\gtrdot", 8919], + ["\\ltimes", 8905], + ["\\rtimes", 8906], + ["\\leftthreetimes", 8907], + ["\\rightthreetimes", 8908], + ["\\intercal", 8890], + ["\\dotplus", 8724], + ["\\doublebarwedge", 10846], + ["\\divideontimes", 8903], + ["\\centerdot", 8901], + ["\\smallsetminus", 8726], + ["\\barwedge", 8892], + ["\\veebar", 8891], + ["\\nor", 8891], + // NOTE: Not TeX, Mathematica + ["\\curlywedge", 8911], + ["\\curlyvee", 8910], + ["\\boxminus", 8863], + ["\\boxplus", 8862], + ["\\boxtimes", 8864], + ["\\boxdot", 8865], + ["\\circleddash", 8861], + ["\\circledast", 8859], + ["\\circledcirc", 8858], + ["\\unlhd", 8884], + ["\\unrhd", 8885] + ], + "mbin", + "ams" + ); + defineSymbols([ + ["\\surd", 8730], + ["\\S", 167], + // Section symbol: § + // From MnSymbol package + ["\\infty", 8734], + ["\\prime", 8242], + ["\\doubleprime", 8243], + // NOTE: Not in TeX, but Mathematica + ["\\angle", 8736], + ["`", 8216], + ["\\$", 36], + ["\\%", 37], + ["\\_", 95], + // Note: In TeX, greek symbols are only available in Math mode + ["\\alpha", 945], + ["\\beta", 946], + ["\\gamma", 947], + ["\\delta", 948], + ["\\epsilon", 1013], + ["\\varepsilon", 949], + ["\\zeta", 950], + ["\\eta", 951], + ["\\theta", 952], + ["\\vartheta", 977], + ["\\iota", 953], + ["\\kappa", 954], + ["\\varkappa", 1008, "mord", "ams"], + ["\\lambda", 955], + ["\\mu", 956], + ["\\nu", 957], + ["\\xi", 958], + ["\\omicron", 111], + ["\\pi", 960], + ["\\varpi", 982], + ["\\rho", 961], + ["\\varrho", 1009], + ["\\sigma", 963], + ["\\varsigma", 962], + ["\\tau", 964], + ["\\phi", 981], + ["\\varphi", 966], + ["\\upsilon", 965], + ["\\chi", 967], + ["\\psi", 968], + ["\\omega", 969], + ["\\Gamma", 915], + ["\\Delta", 916], + ["\\Theta", 920], + ["\\Lambda", 923], + ["\\Xi", 926], + ["\\Pi", 928], + ["\\Sigma", 931], + ["\\Upsilon", 933], + ["\\Phi", 934], + ["\\Psi", 936], + ["\\Omega", 937], + // 'ams' Greek + ["\\digamma", 989, "mord", "ams"], + ["\\varkappa", 1008, "mord", "ams"], + // See https://en.wikipedia.org/wiki/Koppa_(letter) for propert Unicode glyph + // In this caseL the "archaic" variant is used + ["\\coppa", 985, "mord", "ams"], + ["\\koppa", 985, "mord", "ams"], + ["\\Coppa", 984, "mord", "ams"], + ["\\Koppa", 984, "mord", "ams"], + ["\\sampi", 993, "mord", "ams"], + ["\\Sampi", 992, "mord", "ams"], + ["\\emptyset", 8709] + ]); + defineSymbols( + [ + ["=", 61], + ["<", 60], + ["\\lt", 60], + [">", 62], + ["\\gt", 62], + ["\\le", 8804], + ["\\leq", 8804], + ["\\ge", 8805], + ["\\geq", 8805], + ["\\ll", 8810], + ["\\gg", 8811], + ["\\coloneq", 8788], + // Prefered form as of Summer 2022. See § 3.7.3 https://ctan.math.illinois.edu/macros/latex/contrib/mathtools/mathtools.pdf) + ["\\coloneqq", 8788], + // Legacy form + ["\\colonequals", 8788], + // From the colonequals package + ["\\measeq", 8797], + // MEASSURED BY + ["\\eqdef", 8798], + ["\\questeq", 8799], + // QUESTIONED EQUAL TO + [":", 58], + ["\\cong", 8773], + ["\\equiv", 8801], + ["\\prec", 8826], + ["\\preceq", 10927], + ["\\succ", 8827], + ["\\succeq", 10928], + ["\\perp", 10178], + // Unicode U+27C2 is the perpendicular symbol + ["\\propto", 8733], + ["\\Colon", 8759], + ["\\smile", 8995], + ["\\frown", 8994], + ["\\sim", 8764], + ["\\doteq", 8784], + ["\\bowtie", 8904], + ["\\Join", 8904], + ["\\asymp", 8781], + ["\\sqsubseteq", 8849], + ["\\sqsupseteq", 8850], + ["\\approx", 8776], + // In TeX, '~' is a spacing command (non-breaking space). + // However, '~' is used as an ASCII Math shortctut character, so define a \\~ + // command which maps to the '~' character + ["\\~", 126], + ["\\leftrightarrow", 8596], + ["\\Leftrightarrow", 8660], + ["\\models", 8872], + ["\\vdash", 8866], + ["\\dashv", 8867], + ["\\roundimplies", 10608], + ["\\in", 8712], + ["\\notin", 8713], + // defineSymbol('\\not', 0x0338], + // defineSymbol('\\not', 0xe020], + ["\\ni", 8715], + ["\\owns", 8715], + ["\\subset", 8834], + ["\\supset", 8835], + ["\\subseteq", 8838], + ["\\supseteq", 8839], + ["\\differencedelta", 8710], + ["\\mvert", 8739], + ["\\parallel", 8741], + ["\\simeq", 8771] + ], + "mrel" + ); + defineSymbols( + [ + ["\\lnot", 172], + ["\\neg", 172], + ["\\triangle", 9651], + ["\\subsetneq", 8842], + ["\\varsubsetneq", 57370], + ["\\subsetneqq", 10955], + ["\\varsubsetneqq", 57367], + ["\\nsubset", 8836], + // NOTE: Not TeX? + ["\\nsupset", 8837], + // NOTE: Not TeX? + ["\\nsubseteq", 8840], + ["\\nsupseteq", 8841] + ], + "mrel", + "ams" + ); + defineSymbols([ + ["\\wp", 8472], + ["\\aleph", 8501] + ]); + defineSymbols( + [ + ["\\blacktriangle", 9650], + ["\\hslash", 8463], + ["\\Finv", 8498], + ["\\Game", 8513], + ["\\eth", 240], + ["\\mho", 8487], + ["\\Bbbk", 107], + ["\\yen", 165], + ["\\square", 9633], + ["\\Box", 9633], + ["\\blacksquare", 9632], + ["\\circledS", 9416], + ["\\circledR", 174], + ["\\triangledown", 9661], + ["\\blacktriangledown", 9660], + ["\\checkmark", 10003], + ["\\diagup", 9585], + ["\\measuredangle", 8737], + ["\\sphericalangle", 8738], + ["\\backprime", 8245], + ["\\backdoubleprime", 8246], + ["\\Diamond", 9674], + ["\\lozenge", 9674], + ["\\blacklozenge", 10731], + ["\\varnothing", 8709], + ["\\complement", 8705], + ["\\maltese", 10016], + // 'ams' Hebrew + ["\\beth", 8502], + ["\\daleth", 8504], + ["\\gimel", 8503] + ], + "mord", + "ams" + ); + defineSymbols( + [ + // See http://tex.stackexchange.com/questions/41476/lengths-and-when-to-use-them + ["\\ ", 160], + ["~", 160] + ], + "space" + ); + defineFunction( + ["!", ",", ":", ";", ">", "enskip", "enspace", "quad", "qquad"], + "", + { + createAtom: (options) => new SpacingAtom(options) + } + ); + defineFunction("space", "", { + createAtom: (options) => new SpacingAtom(options) + }); + defineSymbols( + [ + ["\\colon", 58], + ["\\cdotp", 8901], + ["\\vdots", 8942, "mord"], + ["\\ldotp", 46], + [",", 44], + [";", 59] + ], + "mpunct" + ); + defineSymbols( + [ + ["\\cdots", 8943], + ["\\ddots", 8945], + ["\\ldots", 8230], + ["\\mathellipsis", 8230] + ], + "minner" + ); + defineSymbols([ + ["\\/", 47], + ["|", 8739, "mord"], + ["\\imath", 305], + ["\\jmath", 567], + ["\\degree", 176], + ["'", 8242], + // Prime + ['"', 8221] + // Double Prime + // defineSymbol( "\'', 0x2033, 'mord', MAIN], // Double Prime + ]); + + // src/core/modes-math.ts + var VARIANTS = { + // Handle some special characters which are only available in "main" font (not "math") + "main": ["Main-Regular", "ML__cmr"], + "main-italic": ["Main-Italic", "ML__cmr ML__it"], + "main-bold": ["Main-Bold", "ML__cmr ML__bold"], + "main-bolditalic": ["Main-BoldItalic", "ML__cmr ML__bold ML__it"], + "normal": ["Main-Regular", "ML__cmr"], + // 'main' font. There is no 'math' regular (upright) + "normal-bold": ["Main-Bold", "ML__mathbf"], + // 'main' font. There is no 'math' bold + "normal-italic": ["Math-Italic", "ML__mathit"], + // Special metrics for 'math' + "normal-bolditalic": ["Math-BoldItalic", "ML__mathbfit"], + // Special metrics for 'math' + // Alias for 'normal' - used by \bf, \it, \rmfamily commands + "roman": ["Main-Regular", "ML__cmr"], + "roman-bold": ["Main-Bold", "ML__mathbf"], + "roman-italic": ["Math-Italic", "ML__mathit"], + "roman-bolditalic": ["Math-BoldItalic", "ML__mathbfit"], + // Extended math symbols, arrows, etc.. at their standard Unicode codepoints + "ams": ["AMS-Regular", "ML__ams"], + "ams-bold": ["AMS-Regular", "ML__ams ML__bold"], + "ams-italic": ["AMS-Regular", "ML__ams ML__it"], + "ams-bolditalic": ["AMS-Regular", "ML__ams ML__bold ML__it"], + "sans-serif": ["SansSerif-Regular", "ML__sans"], + "sans-serif-bold": ["SansSerif-Regular", "ML__sans ML__bold"], + "sans-serif-italic": ["SansSerif-Regular", "ML__sans ML__it"], + "sans-serif-bolditalic": ["SansSerif-Regular", "ML__sans ML__bold ML__it"], + "calligraphic": ["Caligraphic-Regular", "ML__cal"], + "calligraphic-bold": ["Caligraphic-Regular", "ML__cal ML__bold"], + "calligraphic-italic": ["Caligraphic-Regular", "ML__cal ML__it"], + "calligraphic-bolditalic": ["Caligraphic-Regular", "ML__cal ML__bold ML__it"], + "script": ["Script-Regular", "ML__script"], + "script-bold": ["Script-Regular", "ML__script ML__bold"], + "script-italic": ["Script-Regular", "ML__script ML__it"], + "script-bolditalic": ["Script-Regular", "ML__script ML__bold ML__it"], + "fraktur": ["Fraktur-Regular", "ML__frak"], + "fraktur-bold": ["Fraktur-Regular", "ML__frak ML__bold"], + "fraktur-italic": ["Fraktur-Regular", "ML__frak ML__it"], + "fraktur-bolditalic": ["Fraktur-Regular", "ML__frak ML__bold ML__it"], + "monospace": ["Typewriter-Regular", "ML__tt"], + "monospace-bold": ["Typewriter-Regular", "ML__tt ML__bold"], + "monospace-italic": ["Typewriter-Regular", "ML__tt ML__it"], + "monospace-bolditalic": ["Typewriter-Regular", "ML__tt ML__bold ML__it"], + // Blackboard characters are 'A-Z' in the AMS font + "double-struck": ["AMS-Regular", "ML__bb"], + "double-struck-bold": ["AMS-Regular", "ML__bb ML__bold"], + "double-struck-italic": ["AMS-Regular", "ML__bb ML_italic"], + "double-struck-bolditalic": ["AMS-Regular", "ML__bb ML_bolditalic"] + }; + var VARIANT_REPERTOIRE = { + "double-struck": /^[A-Z ]$/, + "script": /^[A-Z ]$/, + "calligraphic": /^[\dA-Z ]$/, + "fraktur": /^[\dA-Za-z ]$|^[!"#$%&'()*+,\-./:;=?[]^’‘]$/, + "monospace": /^[\dA-Za-z ]$|^[!"&'()*+,\-./:;=?@[\]^_~\u0131\u0237\u0393\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A8\u03A9]$/, + "sans-serif": /^[\dA-Za-z ]$|^[!"&'()*+,\-./:;=?@[\]^_~\u0131\u0237\u0393\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A8\u03A9]$/ + }; + var GREEK_LOWERCASE = /^[\u03B1-\u03C9]|\u03D1|\u03D5|\u03D6|\u03F1|\u03F5]$/; + var GREEK_UPPERCASE = /^[\u0393|\u0394\u0398\u039B\u039E\u03A0\u03A3\u03A5\u03A6\u03A8\u03A9]$/; + var LETTER_SHAPE_RANGES = [ + /^[a-z]$/, + // Lowercase latin + /^[A-Z]$/, + // Uppercase latin + GREEK_LOWERCASE, + GREEK_UPPERCASE + ]; + var LETTER_SHAPE_MODIFIER = { + iso: ["it", "it", "it", "it"], + tex: ["it", "it", "it", "up"], + french: ["it", "up", "up", "up"], + upright: ["up", "up", "up", "up"] + }; + var MathMode = class extends Mode { + constructor() { + super("math"); + Mode._registry["free-math"] = this; + } + createAtom(command, info, style) { + var _a3, _b3, _c2, _d2, _e, _f; + if (info === null) { + return new Atom({ + type: "mord", + mode: "math", + command, + value: command, + style + }); + } + let isFunction; + try { + isFunction = (_c2 = (_b3 = globalThis.MathfieldElement) == null ? void 0 : _b3.isFunction((_a3 = info.command) != null ? _a3 : command)) != null ? _c2 : false; + } catch (e) { + isFunction = false; + } + if (info.definitionType === "symbol") { + const result2 = new Atom({ + type: (_d2 = info.type) != null ? _d2 : "mord", + mode: "math", + command: (_e = info.command) != null ? _e : command, + value: String.fromCodePoint(info.codepoint), + isFunction, + style + }); + if (command.startsWith("\\")) result2.verbatimLatex = command; + return result2; + } + const result = new Atom({ + type: "mord", + mode: "math", + command: (_f = info.command) != null ? _f : command, + value: command, + isFunction, + style + }); + if (command.startsWith("\\")) result.verbatimLatex = command; + return result; + } + serialize(run, options) { + const result = emitBoldRun(run, __spreadProps(__spreadValues({}, options), { defaultMode: "math" })); + if (result.length === 0 || !isTextMode(options.defaultMode)) return result; + return ["$ ", ...result, " $"]; + } + getFont(box, style) { + var _a3, _b3, _c2; + console.assert(style.variant !== void 0); + if (style.fontFamily) { + let variantKey = style.fontFamily; + if (style.fontSeries === "b" && style.fontShape === "it") + variantKey += "-bolditalic"; + else if (style.fontSeries === "b") variantKey += "-bold"; + else if (style.fontShape === "it") variantKey += "-italic"; + const variant2 = (_a3 = VARIANTS[variantKey]) != null ? _a3 : VARIANTS[style.fontFamily]; + if (!variant2) { + console.error(`Unknown font family variant: ${variantKey}`); + return null; + } + const [fontName2, classes2] = variant2; + if (classes2) box.classes += " " + classes2; + return fontName2; + } + let { variant } = style; + let { variantStyle } = style; + if (variant === "normal" && !variantStyle && /[\u00A3\u0131\u0237]/.test(box.value)) { + variant = "main"; + variantStyle = "italic"; + } + if (variant === "normal" && !variantStyle && box.value.length === 1) { + let italicize = false; + LETTER_SHAPE_RANGES.forEach((x, i) => { + var _a4; + if (x.test(box.value) && LETTER_SHAPE_MODIFIER[(_a4 = style.letterShapeStyle) != null ? _a4 : "tex"][i] === "it") + italicize = true; + }); + if (italicize) variantStyle = addItalic(variantStyle); + } + if (variantStyle === "up") variantStyle = void 0; + const styledVariant = variantStyle ? variant + "-" + variantStyle : variant; + console.assert(VARIANTS[styledVariant] !== void 0); + const [fontName, classes] = VARIANTS[styledVariant]; + if (VARIANT_REPERTOIRE[variant] && !VARIANT_REPERTOIRE[variant].test(box.value)) { + let v = mathVariantToUnicode(box.value, variant, variantStyle); + if (!v) { + v = (_b3 = mathVariantToUnicode(box.value, variant)) != null ? _b3 : box.value; + box.classes += (_c2 = { + "bold": " ML__bold", + "italic": " ML__it", + "bold-italic": " ML__bold ML__it" + }[variantStyle != null ? variantStyle : ""]) != null ? _c2 : ""; + } + box.value = v; + return null; + } + if (GREEK_LOWERCASE.test(box.value)) box.classes += " lcGreek"; + if (classes) box.classes += " " + classes; + return fontName; + } + }; + function emitBoldRun(run, options) { + return getPropertyRuns(run, "bold").map((x) => { + const weight = weightString(x[0]); + if (weight !== "bold") return joinLatex(emitVariantRun(x, options)); + if (weightString(x[0].parent) === "bold") + return joinLatex(emitVariantRun(x, options)); + const value = joinLatex(x.map((x2) => { + var _a3; + return (_a3 = x2.value) != null ? _a3 : ""; + })); + if (/^[a-zA-Z0-9]+$/.test(value)) + return latexCommand("\\mathbf", joinLatex(emitVariantRun(x, options))); + return latexCommand("\\bm", joinLatex(emitVariantRun(x, options))); + }); + } + function emitVariantRun(run, options) { + const { parent } = run[0]; + const contextVariant = variantString(parent); + return getPropertyRuns(run, "variant").map((x) => { + const variant = variantString(x[0]); + let command = ""; + if (variant && variant !== contextVariant) { + command = { + "calligraphic": "\\mathcal", + "calligraphic-uo": "\\mathcal", + "fraktur": "\\mathfrak", + "fraktur-uo": "\\mathfrak", + "double-struck": "\\mathbb", + "double-struck-uo": "\\mathbb", + "script": "\\mathscr", + "script-uo": "\\mathscr", + "monospace": "\\mathtt", + "monospace-uo": "\\mathtt", + "sans-serif": "\\mathsf", + "sans-serif-uo": "\\mathsf", + "normal": "", + "normal-up": "\\mathrm", + "normal-italic": "\\mathnormal", + "normal-bold": "", + "normal-bolditalic": "\\mathbfit", + "ams": "", + "ams-up": "\\mathrm", + "ams-italic": "\\mathit", + "ams-bold": "", + "ams-bolditalic": "\\mathbfit", + "main": "", + "main-up": "\\mathrm", + "main-italic": "\\mathit", + "main-bold": "", + "main-bolditalic": "\\mathbfit" + // There are a few rare font families possible, which + // are not supported: + // mathbbm, mathbbmss, mathbbmtt, mathds, swab, goth + // In addition, the 'main' and 'math' font technically + // map to \mathnormal{} + }[variant]; + console.assert(command !== void 0); + } + let trailingSupsub = ""; + const lastAtom = x[x.length - 1]; + const hasTrailingSupsub = command && x.length > 0 && (lastAtom.branch("subscript") !== void 0 || lastAtom.branch("superscript") !== void 0); + if (hasTrailingSupsub) trailingSupsub = lastAtom.supsubToLatex(options); + const arg = joinLatex( + x.map((atom, index) => { + if (hasTrailingSupsub && index === x.length - 1) { + const def = getDefinition(atom.command, atom.mode); + if (def == null ? void 0 : def.serialize) return def.serialize(atom, options); + if (atom.body && atom.command) + return latexCommand(atom.command, atom.bodyToLatex(options)); + if (atom.body) return atom.bodyToLatex(options); + if (!atom.value || atom.value === "\u200B") return ""; + return atom.command || atom.value; + } + return atom._serialize(options); + }) + ); + if (!command) return arg; + return latexCommand(command, arg) + trailingSupsub; + }); + } + new MathMode(); + + // src/core/modes-text.ts + function emitStringTextRun(run, options) { + return run.map((x) => x._serialize(options)); + } + function emitFontShapeTextRun(run, options) { + return getPropertyRuns(run, "fontShape").map((x) => { + const s = emitStringTextRun(x, options); + const { fontShape } = x[0].style; + let command = ""; + if (fontShape === "it") command = "\\textit"; + if (fontShape === "sl") command = "\\textsl"; + if (fontShape === "sc") command = "\\textsc"; + if (fontShape === "n") command = "\\textup"; + if (!command && fontShape) + return `{${latexCommand("\\fontshape", fontShape)}${joinLatex(s)}}`; + return command ? latexCommand(command, joinLatex(s)) : joinLatex(s); + }); + } + function emitFontSeriesTextRun(run, options) { + return getPropertyRuns(run, "fontSeries").map((x) => { + const s = emitFontShapeTextRun(x, options); + const { fontSeries } = x[0].style; + let command = ""; + if (fontSeries === "b") command = "\\textbf"; + if (fontSeries === "l") command = "\\textlf"; + if (fontSeries === "m") command = "\\textmd"; + if (fontSeries && !command) + return `{${latexCommand("\\fontseries", fontSeries)}${joinLatex(s)}}`; + return command ? latexCommand(command, joinLatex(s)) : joinLatex(s); + }); + } + function emitSizeTextRun(run, options) { + return getPropertyRuns(run, "fontSize").map((x) => { + var _a3, _b3; + const s = emitFontSeriesTextRun(x, options); + const command = (_b3 = [ + "", + "\\tiny", + "\\scriptsize", + "\\footnotesize", + "\\small", + "\\normalsize", + "\\large", + "\\Large", + "\\LARGE", + "\\huge", + "\\Huge" + ][(_a3 = x[0].style.fontSize) != null ? _a3 : ""]) != null ? _b3 : ""; + return command ? `${command} ${joinLatex(s)}` : joinLatex(s); + }); + } + function emitTextDecorationTextRun(run, options, needsWrap) { + return getPropertyRuns(run, "textDecoration").map((x) => { + const body = emitFontFamilyTextRun(x, options, needsWrap); + const decoration = x[0].style.textDecoration; + if (!decoration || decoration === "none") return joinLatex(body); + let result = joinLatex(body); + if (decoration.includes("underline")) result = `\\underline{${result}}`; + if (decoration.includes("line-through")) + result = `\\enclose{horizontalstrike}{${result}}`; + return result; + }); + } + function emitFontFamilyTextRun(run, options, needsWrap) { + return getPropertyRuns(run, "fontFamily").map((x) => { + var _a3; + needsWrap = needsWrap && !x.every( + (x2) => x2.style.fontFamily || x2.style.fontShape || x2.style.fontSeries || x2.style.fontSize + ); + const s = emitSizeTextRun(x, options); + const { fontFamily } = x[0].style; + const command = (_a3 = { + "roman": "textrm", + "monospace": "texttt", + "sans-serif": "textsf" + }[fontFamily != null ? fontFamily : ""]) != null ? _a3 : ""; + if (command) return `\\${command}{${joinLatex(s)}}`; + if (fontFamily) + return `{\\fontfamily{${x[0].style.fontFamily}} ${joinLatex(s)}}`; + if (needsWrap) return `\\text{${joinLatex(s)}}`; + return joinLatex(s); + }); + } + var TEXT_FONT_CLASS = { + "roman": "", + "sans-serif": "ML__sans", + "monospace": "ML__tt" + }; + var TextMode = class extends Mode { + constructor() { + super("text"); + Mode._registry["free-text"] = this; + } + createAtom(command, info, style) { + if (!info) return null; + if (info.definitionType === "symbol") { + return new TextAtom( + command, + String.fromCodePoint(info.codepoint), + style != null ? style : {} + ); + } + return null; + } + serialize(run, options) { + return emitTextDecorationTextRun( + run, + __spreadProps(__spreadValues({}, options), { defaultMode: "text" }), + options.defaultMode !== "text" && options.defaultMode !== "free-text" + ); + } + /** + * Return the font-family name + */ + getFont(box, style) { + var _a3, _b3, _c2, _d2, _e; + const { fontFamily } = style; + if (TEXT_FONT_CLASS[fontFamily]) + box.classes += " " + TEXT_FONT_CLASS[fontFamily]; + else if (fontFamily) { + box.setStyle("font-family", fontFamily); + } + if (style.fontShape) { + box.classes += " "; + box.classes += (_a3 = { + it: "ML__it", + sl: "ML__shape_sl", + // Slanted + sc: "ML__shape_sc", + // Small caps + ol: "ML__shape_ol" + // Outline + }[style.fontShape]) != null ? _a3 : ""; + } + if (style.fontSeries) { + const m = style.fontSeries.match(/(.?[lbm])?(.?[cx])?/); + if (m) { + box.classes += " "; + box.classes += (_c2 = { + ul: "ML__series_ul", + el: "ML__series_el", + l: "ML__series_l", + sl: "ML__series_sl", + m: "", + // Medium (default) + sb: "ML__series_sb", + b: "ML__bold", + eb: "ML__series_eb", + ub: "ML__series_ub" + }[(_b3 = m[1]) != null ? _b3 : ""]) != null ? _c2 : ""; + box.classes += " "; + box.classes += (_e = { + uc: "ML__series_uc", + ec: "ML__series_ec", + c: "ML__series_c", + sc: "ML__series_sc", + n: "", + // Normal (default) + sx: "ML__series_sx", + x: "ML__series_x", + ex: "ML__series_ex", + ux: "ML__series_ux" + }[(_d2 = m[2]) != null ? _d2 : ""]) != null ? _e : ""; + } + } + if (style.textDecoration && style.textDecoration !== "none") { + if (style.textDecoration.includes("underline")) + box.classes += " ML__underline"; + if (style.textDecoration.includes("line-through")) + box.classes += " ML__line-through"; + } + return "Main-Regular"; + } + }; + new TextMode(); + + // src/core/modes-latex.ts + var LatexMode = class extends Mode { + constructor() { + super("latex"); + } + createAtom(command) { + return new LatexAtom(command); + } + serialize(run, _options) { + return run.filter((x) => x instanceof LatexAtom && !x.isSuggestion).map((x) => x.value); + } + getFont() { + return null; + } + }; + new LatexMode(); + + // src/ui/events/keyboard.ts + function getKeybindingMarkup(keybinding) { + var _a3; + const useGlyph = /macos|ios/.test(osPlatform()); + const segments = keybinding.split("+"); + let result = ""; + for (const segment of segments) { + if (result) { + result += useGlyph ? "\u2009" : '+'; + } + if (segment.startsWith("[Key")) result += segment.slice(4, 5); + else if (segment.startsWith("Key")) result += segment.slice(3, 4); + else if (segment.startsWith("[Digit")) result += segment.slice(6, 7); + else if (segment.startsWith("Digit")) result += segment.slice(5, 6); + else { + result += (_a3 = { + "cmd": "\u2318", + "meta": useGlyph ? "\u2318" : "Ctrl", + "shift": useGlyph ? "\u21E7" : "Shift", + "alt": useGlyph ? "\u2325" : "Alt", + "ctrl": useGlyph ? "\u2303" : "Ctrl", + "\n": useGlyph ? "\u23CE" : "Return", + "[return]": useGlyph ? "\u23CE" : "Return", + "[enter]": useGlyph ? "\u2324" : "Enter", + "[tab]": useGlyph ? "\u21E5" : "Tab", + // 'Esc': useSymbol ? '\u238b' : 'esc', + "[escape]": "Esc", + "[backspace]": useGlyph ? "\u232B" : "Backspace", + "[delete]": useGlyph ? "\u2326" : "Del", + "[pageup]": useGlyph ? "\u21DE" : "Page Up", + "[pagedown]": useGlyph ? "\u21DF" : "Page Down", + "[home]": useGlyph ? "\u2912" : "Home", + "[end]": useGlyph ? "\u2913" : "End", + "[space]": "Space", + "[equal]": "=", + "[minus]": "-", + "[comma]": ",", + "[slash]": "/", + "[backslash]": "\\", + "[bracketleft]": "[", + "[bracketright]": "]", + "semicolon": ";", + "period": ".", + "comma": ",", + "minus": "-", + "equal": "=", + "quote": "'", + "backslash": "\\", + "intlbackslash": "\\", + "backquote": "`", + "slash": "/", + "numpadmultiply": "* 🔢", + "numpaddivide": "/ 🔢", + // Numeric keypad + "numpadsubtract": "- 🔢", + "numpadadd": "+ 🔢", + "numpaddecimal": ". 🔢", + "numpadcomma": ", 🔢", + "help": "help", + "left": "\u21E0", + "up": "\u21E1", + "right": "\u21E2", + "down": "\u21E3", + "[arrowleft]": "\u21E0", + "[arrowup]": "\u21E1", + "[arrowright]": "\u21E2", + "[arrowdown]": "\u21E3" + }[segment.toLowerCase()]) != null ? _a3 : segment.toUpperCase(); + } + } + return result; + } + + // src/ui/events/utils.ts + function eventLocation(evt) { + if (evt instanceof MouseEvent || evt instanceof PointerEvent) + return { x: evt.clientX, y: evt.clientY }; + if (typeof TouchEvent !== "undefined" && evt instanceof TouchEvent) { + const result = [...evt.touches].reduce( + (acc, x) => ({ x: acc.x + x.clientX, y: acc.y + x.clientY }), + { x: 0, y: 0 } + ); + const l = evt.touches.length; + return { x: result.x / l, y: result.y / l }; + } + return void 0; + } + function keyboardModifiersFromEvent(ev) { + const result = { + alt: false, + control: false, + shift: false, + meta: false + }; + if (ev instanceof MouseEvent || ev instanceof PointerEvent || typeof TouchEvent !== "undefined" && ev instanceof TouchEvent || ev instanceof KeyboardEvent) { + if (ev.altKey) result.alt = true; + if (ev.ctrlKey) result.control = true; + if (ev.metaKey) result.meta = true; + if (ev.shiftKey) result.shift = true; + } + return result; + } + function equalKeyboardModifiers(a, b) { + if (!a && b || a && !b) return false; + if (!a || !b) return true; + return a.alt === b.alt && a.control === b.control && a.shift === b.shift && a.meta === b.meta; + } + var PRINTABLE_KEYCODE = /* @__PURE__ */ new Set([ + "Backquote", + // Japanese keyboard: hankaku/zenkaku/kanji key, which is non-printable + "Digit0", + "Digit1", + "Digit2", + "Digit3", + "Digit4", + "Digit5", + "Digit6", + "Digit7", + "Digit8", + "Digit9", + "Minus", + "Equal", + "IntlYen", + // Japanese Keyboard. Russian keyboard: \/ + "KeyQ", + // AZERTY keyboard: labeled 'a' + "KeyW", + // AZERTY keyboard: labeled 'z' + "KeyE", + "KeyR", + "KeyT", + "KeyY", + // QWERTZ keyboard: labeled 'z' + "KeyU", + "KeyI", + "KeyO", + "KeyP", + "BracketLeft", + "BracketRight", + "Backslash", + // May be labeled #~ on UK 102 keyboard + "KeyA", + // AZERTY keyboard: labeled 'q' + "KeyS", + "KeyD", + "KeyF", + "KeyG", + "KeyH", + "KeyJ", + "KeyK", + "KeyL", + "Semicolon", + "Quote", + "IntlBackslash", + // QWERTZ keyboard '><' + "KeyZ", + // AZERTY: 'w', QWERTZ: 'y' + "KeyX", + "KeyC", + "KeyV", + "KeyB", + "KeyN", + "KeyM", + "Comma", + "Period", + "Slash", + "IntlRo", + // Japanse keyboard '\ろ' + "Space", + "Numpad0", + "Numpad1", + "Numpad2", + "Numpad3", + "Numpad4", + "Numpad5", + "Numpad6", + "Numpad7", + "Numpad8", + "Numpad9", + "NumpadAdd", + "NumpadComma", + "NumpadDecimal", + "NumpadDivide", + "NumpadEqual", + "NumpadHash", + "NumpadMultiply", + "NumpadParenLeft", + "NumpadParenRight", + "NumpadStar", + "NumpadSubstract" + ]); + function mightProducePrintableCharacter(evt) { + if (evt.ctrlKey || evt.metaKey) return false; + if (["Dead", "Process"].includes(evt.key)) return false; + if (evt.code === "") return true; + return PRINTABLE_KEYCODE.has(evt.code); + } + function deepActiveElement() { + var _a3; + let a = document.activeElement; + while ((_a3 = a == null ? void 0 : a.shadowRoot) == null ? void 0 : _a3.activeElement) a = a.shadowRoot.activeElement; + return a; + } + + // src/ui/utils/scrim.ts + var Scrim = class _Scrim { + static get scrim() { + if (!_Scrim._scrim) _Scrim._scrim = new _Scrim(); + return _Scrim._scrim; + } + static open(options) { + _Scrim.scrim.open(options); + } + static close() { + _Scrim.scrim.close(); + } + static get state() { + return _Scrim.scrim.state; + } + static get element() { + return _Scrim.scrim.element; + } + /** + * - If `lightDismiss` is true, the scrim is closed if the + * user clicks on the scrim. That's the behavior for menus, for example. + * When you need a fully modal situation until the user has made an + * explicit choice (validating cookie usage, for example), set + * `lightDismiss` to fallse. + */ + constructor(options) { + var _a3, _b3; + this.lightDismiss = (_a3 = options == null ? void 0 : options.lightDismiss) != null ? _a3 : true; + this.translucent = (_b3 = options == null ? void 0 : options.translucent) != null ? _b3 : false; + this.state = "closed"; + } + get element() { + if (this._element) return this._element; + const element = document.createElement("div"); + element.setAttribute("role", "presentation"); + element.style.position = "fixed"; + element.style.contain = "content"; + element.style.top = "0"; + element.style.left = "0"; + element.style.right = "0"; + element.style.bottom = "0"; + element.style.zIndex = "var(--scrim-zindex, 10099)"; + element.style.outline = "none"; + if (this.translucent) { + element.style.background = "rgba(255, 255, 255, .2)"; + element.style["backdropFilter"] = "contrast(40%)"; + } else element.style.background = "transparent"; + this._element = element; + return element; + } + open(options) { + var _a3; + if (this.state !== "closed") return; + this.state = "opening"; + this.onDismiss = options == null ? void 0 : options.onDismiss; + this.savedActiveElement = deepActiveElement(); + const { element } = this; + ((_a3 = options == null ? void 0 : options.root) != null ? _a3 : document.body).appendChild(element); + element.addEventListener("click", this); + document.addEventListener("touchmove", this, false); + document.addEventListener("scroll", this, false); + const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; + this.savedMarginRight = document.body.style.marginRight; + this.savedOverflow = document.body.style.overflow; + document.body.style.overflow = "hidden"; + const marginRight = Number.parseFloat( + getComputedStyle(document.body).marginRight + ); + document.body.style.marginRight = `${marginRight + scrollbarWidth}px`; + const mlkPlate = document.querySelector(".MLK__plate"); + if (mlkPlate instanceof HTMLElement) { + this.savedMlkPaddingRight = mlkPlate.style.paddingRight; + const mlkPaddingRight = Number.parseFloat( + getComputedStyle(mlkPlate).paddingRight + ); + mlkPlate.style.paddingRight = `${mlkPaddingRight + scrollbarWidth}px`; + } + if (options == null ? void 0 : options.child) element.append(options.child); + this.state = "open"; + } + close() { + var _a3, _b3, _c2, _d2, _e; + if (this.state !== "open") { + console.assert(this.element.parentElement !== null); + return; + } + this.state = "closing"; + if (typeof this.onDismiss === "function") this.onDismiss(); + this.onDismiss = void 0; + const { element } = this; + element.removeEventListener("click", this); + document.removeEventListener("touchmove", this, false); + document.removeEventListener("scroll", this, false); + element.remove(); + document.body.style.overflow = (_a3 = this.savedOverflow) != null ? _a3 : ""; + document.body.style.marginRight = (_b3 = this.savedMarginRight) != null ? _b3 : ""; + const mlkPlate = document.querySelector(".MLK__plate"); + if (mlkPlate instanceof HTMLElement) + mlkPlate.style.paddingRight = (_c2 = this.savedMlkPaddingRight) != null ? _c2 : ""; + if (deepActiveElement() !== this.savedActiveElement) + (_e = (_d2 = this.savedActiveElement) == null ? void 0 : _d2.focus) == null ? void 0 : _e.call(_d2); + element.innerHTML = ""; + this.state = "closed"; + } + handleEvent(ev) { + if (this.lightDismiss) { + if (ev.target === this._element && ev.type === "click") { + this.close(); + ev.preventDefault(); + ev.stopPropagation(); + } else if (ev.target === document && (ev.type === "touchmove" || ev.type === "scroll")) { + this.close(); + ev.preventDefault(); + ev.stopPropagation(); + } + } + } + }; + + // src/editor/keyboard.ts + function delegateKeyboardEvents(keyboardSink, element, delegate) { + let keydownEvent = null; + let keypressEvent = null; + let compositionInProgress = false; + let focusInProgress = false; + let blurInProgress = false; + const controller = new AbortController(); + const signal = controller.signal; + keyboardSink.addEventListener( + "keydown", + (event) => { + if (compositionInProgress || event.key === "Process" || event.code === "CapsLock" || /(Control|Meta|Alt|Shift)(Left|Right)/.test(event.code)) { + keydownEvent = null; + return; + } + keydownEvent = event; + keypressEvent = null; + if (!delegate.onKeystroke(event)) keydownEvent = null; + else keyboardSink.textContent = ""; + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "keypress", + (event) => { + if (compositionInProgress) return; + if (keydownEvent && keypressEvent) delegate.onKeystroke(keydownEvent); + keypressEvent = event; + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "compositionstart", + (event) => { + keyboardSink.textContent = ""; + compositionInProgress = true; + delegate.onCompositionStart(event.data); + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "compositionupdate", + (ev) => { + if (!compositionInProgress) return; + delegate.onCompositionUpdate(ev.data); + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "compositionend", + (ev) => { + keyboardSink.textContent = ""; + if (!compositionInProgress) return; + compositionInProgress = false; + delegate.onCompositionEnd(ev.data); + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "beforeinput", + (ev) => ev.stopImmediatePropagation(), + { signal } + ); + keyboardSink.addEventListener( + "input", + (ev) => { + var _a3; + if (compositionInProgress) return; + keyboardSink.textContent = ""; + if (ev.inputType === "insertCompositionText") return; + if (ev.inputType === "insertFromPaste") { + ev.preventDefault(); + ev.stopPropagation(); + return; + } + delegate.onInput((_a3 = ev.data) != null ? _a3 : ""); + ev.preventDefault(); + ev.stopPropagation(); + }, + { signal } + ); + keyboardSink.addEventListener( + "paste", + (event) => { + keyboardSink.focus({ preventScroll: true }); + keyboardSink.textContent = ""; + if (!delegate.onPaste(event)) event.preventDefault(); + event.stopImmediatePropagation(); + }, + { signal } + ); + keyboardSink.addEventListener("cut", (ev) => delegate.onCut(ev), { + capture: true, + signal + }); + keyboardSink.addEventListener("copy", (ev) => delegate.onCopy(ev), { + capture: true, + signal + }); + keyboardSink.addEventListener( + "blur", + (event) => { + var _a3, _b3; + if (((_b3 = (_a3 = event["relatedTarget"]) == null ? void 0 : _a3["_mathfield"]) == null ? void 0 : _b3["element"]) === element) { + keyboardSink.focus({ preventScroll: true }); + event.preventDefault(); + event.stopPropagation(); + return; + } + let isInsideKeyboard = false; + let target = event.relatedTarget; + while (target) { + if (target.classList.contains("ML__keyboard")) { + isInsideKeyboard = true; + break; + } + target = target.parentElement; + } + if (isInsideKeyboard) { + keyboardSink.focus({ preventScroll: true }); + event.preventDefault(); + event.stopPropagation(); + return; + } + const scrimState = Scrim.state; + if (scrimState === "open" || scrimState === "opening") { + event.preventDefault(); + event.stopPropagation(); + return; + } + if (event.relatedTarget === event.target.getRootNode().host) { + event.preventDefault(); + event.stopPropagation(); + return; + } + if (blurInProgress || focusInProgress) return; + blurInProgress = true; + keydownEvent = null; + keypressEvent = null; + delegate.onBlur(); + blurInProgress = false; + }, + { capture: true, signal } + ); + keyboardSink.addEventListener( + "focus", + (_evt) => { + if (blurInProgress || focusInProgress) return; + focusInProgress = true; + delegate.onFocus(); + focusInProgress = false; + }, + { capture: true, signal } + ); + return { + dispose: () => controller.abort(), + cancelComposition: () => { + if (!compositionInProgress) return; + if (typeof keyboardSink.blur === "function") keyboardSink.blur(); + requestAnimationFrame(() => keyboardSink.focus({ preventScroll: true })); + }, + blur: () => { + if (typeof keyboardSink.blur === "function") { + blurInProgress = true; + keyboardSink.blur(); + blurInProgress = false; + } + }, + focus: () => { + if (!focusInProgress && typeof keyboardSink.focus === "function") { + focusInProgress = true; + keyboardSink.focus({ preventScroll: true }); + focusInProgress = false; + } + }, + hasFocus: () => { + return deepActiveElement() === keyboardSink; + }, + setAriaLabel: (value) => keyboardSink.setAttribute("aria-label", value), + setValue: (value) => { + var _a3; + if (keyboardSink.textContent === value) return; + keyboardSink.textContent = value; + keyboardSink.style.left = `-1000px`; + (_a3 = window.getSelection()) == null ? void 0 : _a3.selectAllChildren(keyboardSink); + }, + moveTo: (x, y) => { + keyboardSink.style.top = `${y}px`; + keyboardSink.style.left = `${x}px`; + } + }; + } + function keyboardEventToChar(evt) { + var _a3; + if (!evt || !mightProducePrintableCharacter(evt)) return ""; + let result; + if (evt.key === "Unidentified") { + if (evt.target) result = evt.target.value; + } + result = (_a3 = result != null ? result : evt.key) != null ? _a3 : evt.code; + if (/^(Dead|Return|Enter|Tab|Escape|Delete|PageUp|PageDown|Home|End|Help|ArrowLeft|ArrowRight|ArrowUp|ArrowDown)$/.test( + result + )) + result = ""; + return result; + } + function keyboardEventToString(evt) { + evt = normalizeKeyboardEvent(evt); + const modifiers = []; + if (evt.ctrlKey) modifiers.push("ctrl"); + if (evt.metaKey) modifiers.push("meta"); + if (evt.altKey) modifiers.push("alt"); + if (evt.shiftKey) modifiers.push("shift"); + if (modifiers.length === 0) return `[${evt.code}]`; + modifiers.push(`[${evt.code}]`); + return modifiers.join("+"); + } + + // src/editor/keybindings.ts + function matchPlatform(p) { + if (isBrowser()) { + const plat = osPlatform(); + const isNeg = p.startsWith("!"); + const isMatch = p.endsWith(plat); + if (isNeg && !isMatch) return true; + if (!isNeg && isMatch) return true; + } + if (p === "!other") return false; + return p === "other"; + } + function getCommandForKeybinding(keybindings, mode, evt) { + if (keybindings.length === 0) return ""; + const keystroke = keystrokeModifiersToString( + keystrokeModifiersFromString(keyboardEventToString(evt)) + ); + const altKeystroke = keystrokeModifiersToString({ + key: evt.key, + shift: evt.shiftKey, + alt: evt.altKey, + ctrl: evt.ctrlKey, + meta: evt.metaKey || evt.ctrlKey && /macos|ios/.test(osPlatform()), + cmd: false, + win: false + }); + for (let i = keybindings.length - 1; i >= 0; i--) { + if (keybindings[i].key === keystroke || keybindings[i].key === altKeystroke) { + if (!keybindings[i].ifMode || keybindings[i].ifMode === mode || keybindings[i].ifMode === "text" && isTextMode(mode) || keybindings[i].ifMode === "math" && mode === "free-math") + return keybindings[i].command; + } + } + return ""; + } + function commandToString(command) { + let result = command; + if (isArray(result)) { + result = result.length > 0 ? result[0] + "(" + result.slice(1).join("") + ")" : ""; + } + return result; + } + function getKeybindingsForCommand(keybindings, command) { + let result = []; + if (typeof command === "string") { + const candidate = REVERSE_KEYBINDINGS[command]; + if (isArray(candidate)) result = candidate.slice(); + else if (candidate) result.push(candidate); + } + const normalizedCommand = commandToString(command); + const regex = new RegExp( + "^" + normalizedCommand.replace("\\", "\\\\").replace("|", "\\|").replace("*", "\\*").replace("$", "\\$").replace("^", "\\^") + "([^*a-zA-Z]|$)" + ); + for (const keybinding of keybindings) { + if (regex.test(commandToString(keybinding.command))) + result.push(keybinding.key); + } + return result.map(getKeybindingMarkup); + } + function normalizeKeybinding(keybinding, layout) { + if (keybinding.ifPlatform && !/^!?(macos|windows|android|ios|chromeos|other)$/.test( + keybinding.ifPlatform + )) { + throw new Error( + `Unexpected platform "${keybinding.ifPlatform}" for keybinding ${keybinding.key}` + ); + } + if (keybinding.ifLayout !== void 0 && (layout.score === 0 || !keybinding.ifLayout.includes(layout.id))) + return void 0; + const modifiers = keystrokeModifiersFromString(keybinding.key); + let platform2 = keybinding.ifPlatform; + if (modifiers.cmd) { + if (platform2 && platform2 !== "macos" && platform2 !== "ios") { + throw new Error( + 'Unexpected "cmd" modifier with platform "' + platform2 + '"\n"cmd" modifier can only be used with macOS or iOS platform.' + ); + } + if (!platform2) platform2 = osPlatform() === "ios" ? "ios" : "macos"; + modifiers.win = false; + modifiers.cmd = false; + modifiers.meta = true; + } + if (modifiers.win) { + if (platform2 && platform2 !== "windows") { + throw new Error( + 'Unexpected "win" modifier with platform "' + platform2 + '"\n"win" modifier can only be used with Windows platform.' + ); + } + platform2 = "windows"; + modifiers.win = false; + modifiers.cmd = false; + modifiers.meta = true; + } + if (platform2 && !matchPlatform(platform2)) return void 0; + if (/^\[.+\]$/.test(modifiers.key)) + return __spreadProps(__spreadValues({}, keybinding), { key: keystrokeModifiersToString(modifiers) }); + const code = getCodeForKey(modifiers.key, layout); + if (!code) + return __spreadProps(__spreadValues({}, keybinding), { key: keystrokeModifiersToString(modifiers) }); + if (code.shift && modifiers.shift || code.alt && modifiers.alt) { + throw new Error( + `The keybinding ${keybinding.key} (${selectorToString( + keybinding.command + )}) is conflicting with the key combination ${keystrokeModifiersToString( + code + )} using the ${layout.displayName} keyboard layout` + ); + } + code.shift = code.shift || modifiers.shift; + code.alt = code.alt || modifiers.alt; + code.meta = modifiers.meta; + code.ctrl = modifiers.ctrl; + return __spreadProps(__spreadValues({}, keybinding), { key: keystrokeModifiersToString(code) }); + } + function selectorToString(selector) { + if (Array.isArray(selector)) { + const sel = [...selector]; + return sel.shift() + "(" + sel.map((x) => typeof x === "string" ? `"${x}"` : x.toString()).join(", ") + ")"; + } + return selector; + } + function normalizeKeybindings(keybindings, layout) { + const errors = []; + const result = []; + for (const x of keybindings) { + try { + const binding = normalizeKeybinding(x, layout); + if (!binding) continue; + const conflict = result.find( + (x2) => x2.key === binding.key && x2.ifMode === binding.ifMode + ); + if (conflict) { + throw new Error( + `Ambiguous key binding ${x.key} (${selectorToString( + x.command + )}) matches ${conflict.key} (${selectorToString( + conflict.command + )}) with the ${layout.displayName} keyboard layout` + ); + } + result.push(binding); + } catch (error) { + if (error instanceof Error) errors.push(error.message); + } + } + return [result, errors]; + } + + // src/editor-mathfield/mode-editor-latex.ts + var LatexModeEditor = class extends ModeEditor { + constructor() { + super("latex"); + } + createAtom(command) { + return new LatexAtom(command); + } + onPaste(mathfield, data) { + if (!data) return false; + const text = typeof data === "string" ? data : data.getData("application/x-latex") || data.getData("text/plain"); + if (text && mathfield.model.contentWillChange({ + inputType: "insertFromPaste", + data: text + })) { + mathfield.stopCoalescingUndo(); + mathfield.stopRecording(); + if (this.insert(mathfield.model, text)) { + mathfield.startRecording(); + mathfield.snapshot("paste"); + mathfield.model.contentDidChange({ inputType: "insertFromPaste" }); + requestUpdate(mathfield); + } + mathfield.startRecording(); + return true; + } + return false; + } + insert(model, text, options) { + if (!model.contentWillChange({ data: text, inputType: "insertText" })) + return false; + if (!options) options = {}; + if (!options.insertionMode) options.insertionMode = "replaceSelection"; + if (!options.selectionMode) options.selectionMode = "placeholder"; + const { silenceNotifications } = model; + if (options.silenceNotifications) model.silenceNotifications = true; + const saveSilenceNotifications = model.silenceNotifications; + model.silenceNotifications = true; + if (options.insertionMode === "replaceSelection" && !model.selectionIsCollapsed) + model.deleteAtoms(range(model.selection)); + else if (options.insertionMode === "replaceAll") { + model.root.setChildren([], "body"); + model.position = 0; + } else if (options.insertionMode === "insertBefore") + model.collapseSelection("backward"); + else if (options.insertionMode === "insertAfter") + model.collapseSelection("forward"); + const newAtoms = []; + for (const c of text) + if (COMMAND_MODE_CHARACTERS.test(c)) newAtoms.push(new LatexAtom(c)); + let cursor = model.at(model.position); + if (cursor instanceof LatexGroupAtom) cursor = cursor.lastChild; + if (!(cursor.parent instanceof LatexGroupAtom)) { + const group = new LatexGroupAtom(); + cursor.parent.addChildAfter(group, cursor); + cursor = group.firstChild; + } + const lastNewAtom = cursor.parent.addChildrenAfter(newAtoms, cursor); + model.silenceNotifications = saveSilenceNotifications; + if (options.selectionMode === "before") { + } else if (options.selectionMode === "item") + model.setSelection(model.anchor, model.offsetOf(lastNewAtom)); + else if (lastNewAtom) model.position = model.offsetOf(lastNewAtom); + model.contentDidChange({ data: text, inputType: "insertText" }); + model.silenceNotifications = silenceNotifications; + return true; + } + }; + function getLatexGroup(model) { + return model.atoms.find((x) => x.type === "latexgroup"); + } + function getLatexGroupBody(model) { + var _a3, _b3; + const atom = getLatexGroup(model); + return (_b3 = (_a3 = atom == null ? void 0 : atom.body) == null ? void 0 : _a3.filter((x) => x.type === "latex")) != null ? _b3 : []; + } + function getCommandSuggestionRange(model, options) { + var _a3; + let start = 0; + let found = false; + const last = Number.isFinite(options == null ? void 0 : options.before) ? (_a3 = options == null ? void 0 : options.before) != null ? _a3 : 0 : model.lastOffset; + while (start <= last && !found) { + const atom = model.at(start); + found = atom instanceof LatexAtom && atom.isSuggestion; + if (!found) start++; + } + if (!found) return [void 0, void 0]; + let end = start; + let done = false; + while (end <= last && !done) { + const atom = model.at(end); + done = !(atom instanceof LatexAtom && atom.isSuggestion); + if (!done) end++; + } + return [start - 1, end - 1]; + } + new LatexModeEditor(); + + // src/editor-mathfield/styling.ts + function applyStyle2(mathfield, inStyle) { + mathfield.flushInlineShortcutBuffer(); + mathfield.stopCoalescingUndo(); + const style = validateStyle(mathfield, inStyle); + const { model } = mathfield; + if (model.selectionIsCollapsed) { + if (mathfield.defaultStyle.fontSeries && style.fontSeries === mathfield.defaultStyle.fontSeries) + style.fontSeries = "auto"; + if (style.fontShape && style.fontShape === mathfield.defaultStyle.fontShape) + style.fontShape = "auto"; + if (style.color && style.color === mathfield.defaultStyle.color) + style.color = "none"; + if (style.backgroundColor && style.backgroundColor === mathfield.defaultStyle.backgroundColor) + style.backgroundColor = "none"; + if (style.fontSize && style.fontSize === mathfield.defaultStyle.fontSize) + style.fontSize = "auto"; + mathfield.defaultStyle = __spreadValues(__spreadValues({}, mathfield.defaultStyle), style); + } else { + mathfield.model.deferNotifications( + { content: true, type: "insertText" }, + () => { + model.selection.ranges.forEach( + (range2) => applyStyle(model, range2, style, { operation: "toggle" }) + ); + mathfield.snapshot("style-change"); + } + ); + } + return true; + } + register2( + { applyStyle: applyStyle2 }, + { + target: "mathfield", + canUndo: true, + changeContent: true + } + ); + function validateStyle(mathfield, style) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i, _j; + const result = {}; + if (typeof style.color === "string") { + const newColor = (_b3 = mathfield.colorMap((_a3 = style.color) != null ? _a3 : style.verbatimColor)) != null ? _b3 : "none"; + if (newColor !== style.color) + result.verbatimColor = (_c2 = style.verbatimColor) != null ? _c2 : style.color; + result.color = newColor; + } + if (typeof style.backgroundColor === "string") { + const newColor = (_e = mathfield.backgroundColorMap( + (_d2 = style.backgroundColor) != null ? _d2 : style.verbatimBackgroundColor + )) != null ? _e : "none"; + if (newColor !== style.backgroundColor) { + result.verbatimBackgroundColor = (_f = style.verbatimBackgroundColor) != null ? _f : style.backgroundColor; + } + result.backgroundColor = newColor; + } + if (typeof style.fontFamily === "string") + result.fontFamily = style.fontFamily; + if (typeof style.series === "string") + result.fontSeries = style.series; + if (typeof style.fontSeries === "string") + result.fontSeries = style.fontSeries.toLowerCase(); + if (result.fontSeries) { + result.fontSeries = (_g = { + bold: "b", + medium: "m", + normal: "m" + }[result.fontSeries]) != null ? _g : result.fontSeries; + } + if (typeof style.shape === "string") + result.fontShape = style.shape; + if (typeof style.fontShape === "string") + result.fontShape = style.fontShape.toLowerCase(); + if (typeof style.textDecoration === "string") + result.textDecoration = style.textDecoration; + if (result.fontShape) { + result.fontShape = (_h = { + italic: "it", + up: "n", + upright: "n", + normal: "n" + }[result.fontShape]) != null ? _h : result.fontShape; + } + if (style.variant) result.variant = style.variant.toLowerCase(); + if (style.variantStyle !== void 0) { + result.variantStyle = typeof style.variantStyle === "string" && style.variantStyle !== "" ? style.variantStyle.toLowerCase() : style.variantStyle; + } + const size = (_i = style.size) != null ? _i : style.fontSize; + if (typeof size === "number") + result.fontSize = Math.max(1, Math.min(10, size)); + else if (typeof size === "string") { + result.fontSize = (_j = { + size1: 1, + size2: 2, + size3: 3, + size4: 4, + size5: 5, + size6: 6, + size7: 7, + size8: 8, + size9: 9, + size10: 10 + }[size.toLowerCase()]) != null ? _j : { + tiny: 1, + scriptsize: 2, + footnotesize: 3, + small: 4, + normal: 5, + normalsize: 5, + large: 6, + Large: 7, + LARGE: 8, + huge: 9, + Huge: 10 + }[size]; + } + return result; + } + function defaultInsertStyleHook(mathfield, offset, info) { + var _a3, _b3; + const model = mathfield.model; + if (model.mode === "latex") return {}; + const bias = mathfield.styleBias; + if (bias === "none") return mathfield.defaultStyle; + if (isTextMode(model.mode)) { + return (_b3 = (_a3 = model.at(bias === "right" ? info.after : info.before)) == null ? void 0 : _a3.style) != null ? _b3 : mathfield.defaultStyle; + } + if (isMathMode(model.mode)) { + const atom = model.at(bias === "right" ? info.after : info.before); + if (!atom) return __spreadValues({ variant: "normal" }, mathfield.defaultStyle); + return __spreadValues(__spreadProps(__spreadValues({}, atom.style), { variant: "normal" }), mathfield.defaultStyle); + } + return {}; + } + function computeInsertStyle(mathfield) { + let hook = mathfield.options.onInsertStyle; + if (hook === null) return {}; + if (hook === void 0) hook = defaultInsertStyleHook; + const model = mathfield.model; + const bias = mathfield.styleBias; + const atom = model.at(model.position); + const before = ungroup(model, atom, bias); + const after = ungroup(model, atom.rightSibling, bias); + return hook(mathfield, model.position, { before, after }); + } + function ungroup(model, atom, bias) { + var _a3; + if (!atom) return -1; + if (atom.type === "first" && bias !== "right") return -1; + if (atom.type !== "group") return model.offsetOf(atom); + if (!atom.body || atom.body.length < 2) return -1; + if (((_a3 = atom.body) == null ? void 0 : _a3.length) === 1) return model.offsetOf(atom.body[0]); + if (bias !== "right") return model.offsetOf(atom.body[0]); + return model.offsetOf(atom.body[atom.body.length - 1]); + } + + // src/editor-mathfield/autocomplete.ts + function removeSuggestion(mathfield) { + const group = getLatexGroupBody(mathfield.model).filter( + (x) => x.isSuggestion + ); + if (group.length === 0) return; + mathfield.model.position = mathfield.model.offsetOf(group[0].leftSibling); + for (const atom of group) atom.parent.removeChild(atom); + } + function updateAutocomplete(mathfield, options) { + var _a3; + const { model } = mathfield; + removeSuggestion(mathfield); + for (const atom2 of getLatexGroupBody(model)) atom2.isError = false; + if (!model.selectionIsCollapsed || mathfield.options.popoverPolicy === "off") { + hideSuggestionPopover(mathfield); + return; + } + const commandAtoms = []; + let atom = model.at(model.position); + while (atom && atom instanceof LatexAtom && /^[a-zA-Z\*]$/.test(atom.value)) + atom = atom.leftSibling; + if (atom && atom instanceof LatexAtom && atom.value === "\\") { + commandAtoms.push(atom); + atom = atom.rightSibling; + while (atom && atom instanceof LatexAtom && /^[a-zA-Z\*]$/.test(atom.value)) { + commandAtoms.push(atom); + atom = atom.rightSibling; + } + } + const command = commandAtoms.map((x) => x.value).join(""); + const suggestions = suggest(mathfield, command); + if (suggestions.length === 0) { + if (/^\\[a-zA-Z\*]+$/.test(command)) + for (const atom2 of commandAtoms) atom2.isError = true; + hideSuggestionPopover(mathfield); + return; + } + const index = (_a3 = options == null ? void 0 : options.atIndex) != null ? _a3 : 0; + mathfield.suggestionIndex = index < 0 ? suggestions.length - 1 : index % suggestions.length; + const suggestion = suggestions[mathfield.suggestionIndex]; + if (suggestion !== command) { + const lastAtom = commandAtoms[commandAtoms.length - 1]; + lastAtom.parent.addChildrenAfter( + [...suggestion.slice(command.length - suggestion.length)].map( + (x) => new LatexAtom(x, { isSuggestion: true }) + ), + lastAtom + ); + render(mathfield, { interactive: true }); + } + showSuggestionPopover(mathfield, suggestions); + } + function acceptCommandSuggestion(model) { + const [from, to] = getCommandSuggestionRange(model, { + before: model.position + }); + if (from === void 0 || to === void 0) return false; + let result = false; + model.getAtoms([from, to]).forEach((x) => { + if (x.isSuggestion) { + x.isSuggestion = false; + result = true; + } + }); + return result; + } + function complete(mathfield, completion = "accept", options) { + var _a3, _b3; + hideSuggestionPopover(mathfield); + const latexGroup = getLatexGroup(mathfield.model); + if (!latexGroup) return false; + if (completion === "accept-suggestion" || completion === "accept-all") { + const suggestions = getLatexGroupBody(mathfield.model).filter( + (x) => x.isSuggestion + ); + if (suggestions.length !== 0) { + for (const suggestion of suggestions) suggestion.isSuggestion = false; + mathfield.model.position = mathfield.model.offsetOf( + suggestions[suggestions.length - 1] + ); + } + if (completion === "accept-suggestion") return suggestions.length !== 0; + } + const body = getLatexGroupBody(mathfield.model).filter( + (x) => !x.isSuggestion + ); + const latex = body.map((x) => x.value).join(""); + const newPos = latexGroup.leftSibling; + latexGroup.parent.removeChild(latexGroup); + mathfield.model.position = mathfield.model.offsetOf(newPos); + mathfield.switchMode((_a3 = options == null ? void 0 : options.mode) != null ? _a3 : "math"); + if (completion === "reject") return true; + const style = __spreadValues({}, computeInsertStyle(mathfield)); + if (!/^[a-zA-Z0-9]$/.test(latex) && mathfield.styleBias !== "none") { + style.variant = "normal"; + style.variantStyle = void 0; + } + ModeEditor.insert(mathfield.model, latex, { + selectionMode: ((_b3 = options == null ? void 0 : options.selectItem) != null ? _b3 : false) ? "item" : "placeholder", + format: "latex", + mode: "math", + style + }); + mathfield.snapshot(); + mathfield.model.announce("replacement"); + mathfield.switchMode("math"); + return true; + } + + // src/common/shared-element.ts + function getSharedElement(id) { + var _a3; + let result = document.getElementById(id); + if (result) { + result.dataset.refcount = Number( + Number.parseInt((_a3 = result.dataset.refcount) != null ? _a3 : "0") + 1 + ).toString(); + } else { + result = document.createElement("div"); + result.setAttribute("aria-hidden", "true"); + result.dataset.refcount = "1"; + result.id = id; + document.body.append(result); + } + return result; + } + function releaseSharedElement(id) { + var _a3; + const element = document.getElementById(id); + if (!element) return; + const refcount = Number.parseInt( + (_a3 = element.getAttribute("data-refcount")) != null ? _a3 : "0" + ); + if (refcount <= 1) element.remove(); + else element.dataset.refcount = Number(refcount - 1).toString(); + } + + // src/editor/suggestion-popover.ts + function escapeHtmlAttr(s) { + return s.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); + } + function latexToMarkup(mf, latex) { + const context = new Context({ from: mf.context }); + const root = new Atom({ + mode: "math", + type: "root", + body: parseLatex(latex, { context }) + }); + const box = coalesce( + applyInterBoxSpacing( + new Box(root.render(context), { classes: "ML__base" }), + context + ) + ); + return makeStruts(box, { classes: "ML__latex" }).toMarkup(); + } + function showSuggestionPopover(mf, suggestions) { + var _a3; + if (suggestions.length === 0) { + hideSuggestionPopover(mf); + return; + } + let template = ""; + for (const [i, suggestion] of suggestions.entries()) { + const command = suggestion; + const commandMarkup = latexToMarkup(mf, suggestion); + const keybinding = getKeybindingsForCommand(mf.keybindings, command).join( + "
" + ); + template += `
  • ${escapeHtmlAttr(command)}${commandMarkup}`; + if (keybinding) + template += `${keybinding}`; + template += "
  • "; + } + const panel = createSuggestionPopover(mf, `
      ${template}
    `); + if (isSuggestionPopoverVisible()) { + (_a3 = panel.querySelector(".ML__popover__current")) == null ? void 0 : _a3.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + setTimeout(() => { + var _a4; + if (panel && !isSuggestionPopoverVisible()) { + panel.classList.add("is-visible"); + updateSuggestionPopoverPosition(mf); + (_a4 = panel.querySelector(".ML__popover__current")) == null ? void 0 : _a4.scrollIntoView({ block: "nearest", inline: "nearest" }); + } + }, 32); + } + function isSuggestionPopoverVisible() { + const panel = document.getElementById("mathlive-suggestion-popover"); + if (!panel) return false; + return panel.classList.contains("is-visible"); + } + function updateSuggestionPopoverPosition(mf, options) { + var _a3, _b3, _c2; + if (!mf.element || mf.element.mathfield !== mf) return; + if (!isSuggestionPopoverVisible()) return; + if (((_a3 = mf.model.at(mf.model.position)) == null ? void 0 : _a3.type) !== "latex") { + hideSuggestionPopover(mf); + return; + } + if (options == null ? void 0 : options.deferred) { + setTimeout(() => updateSuggestionPopoverPosition(mf), 32); + return; + } + const position = getCaretPoint(mf.field); + if (!position) return; + const viewportHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; + const viewportWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; + const scrollbarWidth = window.innerWidth - document.documentElement.clientWidth; + const scrollbarHeight = window.innerHeight - document.documentElement.clientHeight; + const virtualkeyboardHeight = (_c2 = (_b3 = window.mathVirtualKeyboard) == null ? void 0 : _b3.boundingRect.height) != null ? _c2 : 0; + const panel = document.getElementById("mathlive-suggestion-popover"); + if (position.x + panel.offsetWidth / 2 > viewportWidth - scrollbarWidth) { + panel.style.left = `${viewportWidth - panel.offsetWidth - scrollbarWidth}px`; + } else if (position.x - panel.offsetWidth / 2 < 0) panel.style.left = "0"; + else panel.style.left = `${position.x - panel.offsetWidth / 2}px`; + const spaceAbove = position.y - position.height; + const spaceBelow = viewportHeight - scrollbarHeight - virtualkeyboardHeight - position.y; + if (spaceBelow < spaceAbove) { + panel.classList.add("ML__popover--reverse-direction"); + panel.classList.remove("top-tip"); + panel.classList.add("bottom-tip"); + panel.style.top = `${position.y - position.height - panel.offsetHeight - 15}px`; + } else { + panel.classList.remove("ML__popover--reverse-direction"); + panel.classList.add("top-tip"); + panel.classList.remove("bottom-tip"); + panel.style.top = `${position.y + 15}px`; + } + } + function hideSuggestionPopover(mf) { + mf.suggestionIndex = 0; + const panel = document.getElementById("mathlive-suggestion-popover"); + if (panel) releaseSharedElement("mathlive-suggestion-popover"); + } + function createSuggestionPopover(mf, html) { + let panel = document.getElementById("mathlive-suggestion-popover"); + if (panel) releaseSharedElement("mathlive-suggestion-popover"); + else { + injectStylesheet("suggestion-popover"); + injectStylesheet("core"); + } + panel = getSharedElement("mathlive-suggestion-popover"); + panel.addEventListener("pointerdown", (ev) => ev.preventDefault()); + panel.addEventListener("click", (ev) => { + let el = ev.target; + while (el && !el.dataset.command) el = el.parentElement; + if (!el) return; + complete(mf, "reject"); + ModeEditor.insert(mf.model, el.dataset.command, { + selectionMode: "placeholder", + format: "latex", + mode: "math" + }); + mf.dirty = true; + mf.focus(); + }); + panel.innerHTML = globalThis.MathfieldElement.createHTML(html); + return panel; + } + function disposeSuggestionPopover() { + if (!document.getElementById("mathlive-suggestion-popover")) return; + releaseSharedElement("mathlive-suggestion-popover"); + releaseStylesheet("suggestion-popover"); + releaseStylesheet("core"); + } + + // src/common/script-url.ts + function getFileUrl() { + const stackTraceFrames = String(new Error().stack).replace(/^Error.*\n/, "").split("\n"); + if (stackTraceFrames.length === 0) { + console.error( + `Can't use relative paths to specify assets location because the sourcefile location could not be determined (unexpected stack trace format "${new Error().stack}").` + ); + return ""; + } + let callerFrame = stackTraceFrames[1]; + let m = callerFrame.match(/http.*\.ts[\?:]/); + if (m) { + callerFrame = stackTraceFrames[2]; + } + m = callerFrame.match(/(https?:.*):[0-9]+:[0-9]+/); + if (!m) { + m = callerFrame.match(/at (.*(\.ts))[\?:]/); + if (!m) m = callerFrame.match(/at (.*(\.mjs|\.js))[\?:]/); + } + if (!m) { + console.error(stackTraceFrames); + console.error( + `Can't use relative paths to specify assets location because the source file location could not be determined (unexpected location "${callerFrame}").` + ); + return ""; + } + return m[1]; + } + var gResolvedScriptUrl = null; + var _a, _b; + var gScriptUrl = ((_b = (_a = globalThis == null ? void 0 : globalThis.document) == null ? void 0 : _a.currentScript) == null ? void 0 : _b.src) || getFileUrl(); + async function resolveUrl(url) { + if (/^(?:[a-z+]+:)?\/\//i.test(url)) { + try { + return new URL(url).href; + } catch (e) { + } + if (url.startsWith("//")) { + try { + return new URL(`${window.location.protocol}${url}`).href; + } catch (e) { + } + } + return url; + } + if (gResolvedScriptUrl === null) { + try { + const response = await fetch(gScriptUrl, { method: "HEAD" }); + if (response.status === 200) { + gResolvedScriptUrl = response.url; + gResolvedScriptUrl = gResolvedScriptUrl.replace(/\/\+esm$/, "/"); + if (gResolvedScriptUrl.includes("jsdelivr.net/")) + gResolvedScriptUrl += "/"; + } + } catch (e) { + console.error(`Invalid URL "${url}" (relative to "${gScriptUrl}")`); + } + } + return new URL(url, gResolvedScriptUrl != null ? gResolvedScriptUrl : gScriptUrl).href; + } + + // src/core/fonts.ts + function makeFontFace(name, source, descriptors = {}) { + return new FontFace( + name, + `url(${source}.woff2) format('woff2')`, + descriptors + ); + } + var gFontsState = "not-loaded"; + async function reloadFonts() { + gFontsState = "not-loaded"; + return loadFonts(); + } + async function loadFonts() { + var _a3; + if (gFontsState !== "not-loaded") return; + gFontsState = "loading"; + const useStaticFonts = (_a3 = getComputedStyle(document.documentElement).getPropertyValue( + "--ML__static-fonts" + )) != null ? _a3 : false; + if (useStaticFonts) { + gFontsState = "ready"; + return; + } + document.body.classList.remove("ML__fonts-did-not-load"); + if ("fonts" in document) { + const fontFamilies = [ + "KaTeX_Main", + "KaTeX_Math", + "KaTeX_AMS", + "KaTeX_Caligraphic", + "KaTeX_Fraktur", + "KaTeX_SansSerif", + "KaTeX_Script", + "KaTeX_Typewriter", + "KaTeX_Size1", + "KaTeX_Size2", + "KaTeX_Size3", + "KaTeX_Size4" + ]; + const fontsInDocument = Array.from(document.fonts).map((f) => f.family); + if (fontFamilies.every((x) => fontsInDocument.includes(x))) { + gFontsState = "ready"; + return; + } + if (!globalThis.MathfieldElement.fontsDirectory) { + gFontsState = "not-loaded"; + return; + } + let fontsFolder = await resolveUrl( + globalThis.MathfieldElement.fontsDirectory + ); + if (!fontsFolder) { + document.body.classList.add("ML__fonts-did-not-load"); + gFontsState = "error"; + return; + } + if (fontsFolder.endsWith("/")) fontsFolder = fontsFolder.slice(0, -1); + const fonts = [ + ["KaTeX_Main-Regular"], + ["KaTeX_Main-BoldItalic", { style: "italic", weight: "bold" }], + ["KaTeX_Main-Bold", { weight: "bold" }], + ["KaTeX_Main-Italic", { style: "italic" }], + ["KaTeX_Math-Italic", { style: "italic" }], + ["KaTeX_Math-BoldItalic", { style: "italic", weight: "bold" }], + ["KaTeX_AMS-Regular"], + ["KaTeX_Caligraphic-Regular"], + ["KaTeX_Caligraphic-Bold", { weight: "bold" }], + ["KaTeX_Fraktur-Regular"], + ["KaTeX_Fraktur-Bold", { weight: "bold" }], + ["KaTeX_SansSerif-Regular"], + ["KaTeX_SansSerif-Bold", { weight: "bold" }], + ["KaTeX_SansSerif-Italic", { style: "italic" }], + ["KaTeX_Script-Regular"], + ["KaTeX_Typewriter-Regular"], + ["KaTeX_Size1-Regular"], + ["KaTeX_Size2-Regular"], + ["KaTeX_Size3-Regular"], + ["KaTeX_Size4-Regular"] + ].map( + (x) => makeFontFace( + x[0].replace(/-[a-zA-Z]+$/, ""), + `${fontsFolder}/${x[0]}`, + x[1] + ) + ); + try { + const loadedFonts = await Promise.all( + fonts.map((x) => { + try { + return x.load(); + } catch (e) { + } + return void 0; + }) + ); + loadedFonts.forEach((font) => document.fonts.add(font)); + gFontsState = "ready"; + return; + } catch (error) { + console.error( + `MathLive {{SDK_VERSION}}: The math fonts could not be loaded from "${fontsFolder}"`, + { cause: error } + ); + document.body.classList.add("ML__fonts-did-not-load"); + } + gFontsState = "error"; + } + } + + // src/common/hash-code.ts + function hashCode(str, seed = 0) { + let h1 = 3735928559 ^ seed; + let h2 = 1103547991 ^ seed; + for (let i = 0; i < str.length; i++) { + const ch = str.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507); + h1 ^= Math.imul(h2 ^ h2 >>> 13, 3266489909); + h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507); + h2 ^= Math.imul(h1 ^ h1 >>> 13, 3266489909); + return 4294967296 * (2097151 & h2) + (h1 >>> 0); + } + + // src/editor-mathfield/render.ts + function requestUpdate(mathfield, options) { + if (!mathfield || mathfield.dirty || !mathfield.field) return; + mathfield.resizeObserver.unobserve(mathfield.field); + mathfield.dirty = true; + requestAnimationFrame(() => { + if (isValidMathfield(mathfield) && mathfield.dirty) { + mathfield.atomBoundsCache = /* @__PURE__ */ new Map(); + render(mathfield, options); + mathfield.resizeObserver.observe(mathfield.field); + mathfield.resizeObserverStarted = true; + } + }); + } + function makeBox(mathfield, renderOptions) { + var _a3; + renderOptions = renderOptions != null ? renderOptions : {}; + const context = new Context({ + from: __spreadProps(__spreadValues({}, mathfield.context), { + atomIdsSettings: { + // Using the hash as a seed for the ID + // keeps the IDs the same until the content of the field changes. + seed: renderOptions.forHighlighting ? hashCode( + Atom.serialize([mathfield.model.root], { + expandMacro: false, + defaultMode: mathfield.options.defaultMode + }) + ) : "random", + // The `groupNumbers` flag indicates that extra boxes should be generated + // to represent group of atoms, for example, a box to group + // consecutive digits to represent a number. + groupNumbers: (_a3 = renderOptions.forHighlighting) != null ? _a3 : false + }, + letterShapeStyle: mathfield.options.letterShapeStyle + }), + mathstyle: mathfield.options.defaultMode === "inline-math" ? "textstyle" : "displaystyle" + }); + const base = mathfield.model.root.render(context); + const wrapper = makeStruts(applyInterBoxSpacing(base, context), { + classes: mathfield.hasEditablePrompts ? "ML__latex ML__prompting" : "ML__latex", + attributes: { + // Sometimes Google Translate kicks in an attempts to 'translate' math + // This doesn't work very well, so turn off translate + "translate": "no", + // Hint to screen readers to not attempt to read this . + // They should use instead the 'aria-label' attribute. + "aria-hidden": "true" + } + }); + return wrapper; + } + function contentMarkup(mathfield, renderOptions) { + try { + const { model } = mathfield; + model.root.caret = void 0; + model.root.isSelected = false; + model.root.containsCaret = true; + for (const atom of model.atoms) { + atom.caret = void 0; + atom.isSelected = false; + atom.containsCaret = false; + } + if (model.selectionIsCollapsed) { + const atom = model.at(model.position); + atom.caret = mathfield.model.mode; + let ancestor = atom.parent; + while (ancestor) { + ancestor.containsCaret = true; + ancestor = ancestor.parent; + } + } else { + const atoms = model.getAtoms(model.selection, { + includeChildren: true, + includeFirstAtoms: true + }); + for (const atom of atoms) atom.isSelected = true; + } + const box = makeBox(mathfield, renderOptions); + return box.toMarkup(); + } catch (e) { + console.error(e); + return ''; + } + } + function render(mathfield, renderOptions) { + if (!isValidMathfield(mathfield)) return; + renderOptions != null ? renderOptions : renderOptions = {}; + const keyboardToggle = mathfield.element.querySelector( + "[part=virtual-keyboard-toggle]" + ); + if (keyboardToggle) + keyboardToggle.style.display = mathfield.hasEditableContent ? "" : "none"; + const field = mathfield.field; + if (!field) return; + const hasFocus = mathfield.isSelectionEditable && mathfield.hasFocus(); + const isFocused = field.classList.contains("ML__focused"); + if (isFocused && !hasFocus) field.classList.remove("ML__focused"); + else if (!isFocused && hasFocus) field.classList.add("ML__focused"); + let content = contentMarkup(mathfield, renderOptions); + const menuToggle = mathfield.element.querySelector("[part=menu-toggle]"); + if (menuToggle) { + let hideMenu = false; + if (mathfield.disabled || mathfield.readOnly && !mathfield.hasEditableContent || mathfield.userSelect === "none") + hideMenu = true; + if (!hideMenu && mathfield.element.offsetWidth < 50) hideMenu = true; + menuToggle.style.display = hideMenu ? "none" : ""; + } + if (mathfield.model.atoms.length <= 1) { + const placeholder = mathfield.options.contentPlaceholder; + if (placeholder) { + content += `${convertLatexToMarkup( + placeholder + )}`; + } + } + field.innerHTML = globalThis.MathfieldElement.createHTML(content); + renderSelection(mathfield, renderOptions.interactive); + mathfield.updateToggleLayout(); + mathfield.dirty = false; + } + function renderSelection(mathfield, interactive) { + var _a3; + const field = mathfield.field; + if (!field) return; + for (const element of field.querySelectorAll( + ".ML__selection, .ML__contains-highlight" + )) + element.remove(); + if (!(interactive != null ? interactive : false) && gFontsState !== "error" && gFontsState !== "ready") { + setTimeout(() => { + if (gFontsState === "ready") renderSelection(mathfield); + else setTimeout(() => renderSelection(mathfield), 128); + }, 32); + return; + } + const model = mathfield.model; + (_a3 = mathfield.atomBoundsCache) == null ? void 0 : _a3.clear(); + let _scaleFactor; + const scaleFactor = () => { + if (_scaleFactor !== void 0) return _scaleFactor; + const offsetWidth = field.offsetWidth; + const actualWidth = field.getBoundingClientRect().width; + _scaleFactor = Math.floor(actualWidth) / offsetWidth; + if (isNaN(_scaleFactor)) _scaleFactor = 1; + return _scaleFactor; + }; + if (model.selectionIsCollapsed) { + updateSuggestionPopoverPosition(mathfield, { deferred: true }); + let atom = model.at(model.position); + while (atom && atom.type !== "prompt" && !(atom.containsCaret && atom.displayContainsHighlight)) + atom = atom.parent; + if ((atom == null ? void 0 : atom.containsCaret) && atom.displayContainsHighlight) { + const s2 = scaleFactor(); + const bounds = adjustForScrolling( + mathfield, + getAtomBounds(mathfield, atom), + s2 + ); + if (bounds) { + bounds.left /= s2; + bounds.right /= s2; + bounds.top /= s2; + bounds.bottom /= s2; + const element = document.createElement("div"); + element.classList.add("ML__contains-highlight"); + element.style.position = "absolute"; + element.style.left = `${bounds.left + 1}px`; + element.style.top = `${Math.ceil(bounds.top)}px`; + element.style.width = `${Math.ceil(bounds.right - bounds.left)}px`; + element.style.height = `${Math.ceil(bounds.bottom - bounds.top)}px`; + field.insertBefore(element, field.childNodes[0]); + } + } + return; + } + const s = scaleFactor(); + const rects = unionRects( + getSelectionBounds(mathfield, { excludeAtomsWithBackground: true }) + ); + for (const x of rects) { + x.left /= s; + x.right /= s; + x.top /= s; + x.bottom /= s; + const selectionElement = document.createElement("div"); + selectionElement.classList.add("ML__selection"); + selectionElement.style.position = "absolute"; + selectionElement.style.left = `${x.left}px`; + selectionElement.style.top = `${x.top}px`; + selectionElement.style.width = `${Math.ceil(x.right - x.left)}px`; + selectionElement.style.height = `${Math.max(1, Math.ceil(x.bottom - x.top - 1))}px`; + field.insertBefore(selectionElement, field.childNodes[0]); + } + } + function unionRects(rects) { + let result = []; + for (const rect of rects) { + let found = false; + for (const rect2 of result) { + if (rect.left === rect2.left && rect.right === rect2.right && rect.top === rect2.top && rect.bottom === rect2.bottom) { + found = true; + break; + } + } + if (!found) result.push(rect); + } + rects = result; + result = []; + for (const rect of rects) { + let count = 0; + for (const rect2 of rects) { + if (rect.left >= rect2.left && rect.right <= rect2.right && rect.top >= rect2.top && rect.bottom <= rect2.bottom) { + count += 1; + if (count > 1) break; + } + } + if (count === 1) result.push(rect); + } + return result; + } + function reparse(mathfield) { + if (!mathfield) return; + const model = mathfield.model; + const selection = model.selection; + const content = Atom.serialize([model.root], { + expandMacro: false, + defaultMode: mathfield.options.defaultMode + }); + ModeEditor.insert(model, content, { + insertionMode: "replaceAll", + selectionMode: "after", + format: "latex", + silenceNotifications: true, + mode: "math" + }); + const wasSilent = model.silenceNotifications; + model.silenceNotifications = true; + model.selection = selection; + model.silenceNotifications = wasSilent; + requestUpdate(mathfield); + } + function reparseAllMathfields() { + for (const mathfield of document.querySelectorAll(".ML__mathfield")) + if ("_mathfield" in mathfield) reparse(mathfield._mathfield); + } + + // src/editor/commands.ts + var HAPTIC_FEEDBACK_DURATION = 3; + var COMMANDS; + function register2(commands, options) { + options = __spreadValues({ + target: "mathfield", + canUndo: false, + audioFeedback: void 0, + changeContent: false, + changeSelection: false + }, options != null ? options : {}); + if (!COMMANDS) COMMANDS = {}; + for (const selector of Object.keys(commands)) { + console.assert(!COMMANDS[selector], "Selector already defined: ", selector); + COMMANDS[selector] = __spreadProps(__spreadValues({}, options), { fn: commands[selector] }); + } + } + function getCommandInfo(command) { + let selector; + if (Array.isArray(command)) { + if (command[0] === "performWithFeedback") return getCommandInfo(command[1]); + selector = command[0]; + } else selector = command; + return COMMANDS[selector]; + } + function getCommandTarget(command) { + var _a3; + return (_a3 = getCommandInfo(command)) == null ? void 0 : _a3.target; + } + function perform(mathfield, command) { + var _a3, _b3; + command = parseCommand(command); + if (!command) return false; + let selector; + let args = []; + let handled = false; + let dirty = false; + if (isArray(command)) { + selector = command[0]; + args = command.slice(1); + } else selector = command; + const info = COMMANDS[selector]; + const commandTarget = info == null ? void 0 : info.target; + if (commandTarget === "model") { + if (!mathfield.isSelectionEditable && (info == null ? void 0 : info.changeContent)) { + mathfield.model.announce("plonk"); + return false; + } + if (/^(delete|add)/.test(selector)) { + if (selector !== "deleteBackward") mathfield.flushInlineShortcutBuffer(); + mathfield.snapshot(selector); + } + if (!/^complete/.test(selector)) removeSuggestion(mathfield); + COMMANDS[selector].fn(mathfield.model, ...args); + updateAutocomplete(mathfield); + dirty = true; + handled = true; + } else if (commandTarget === "virtual-keyboard") { + dirty = (_b3 = (_a3 = window.mathVirtualKeyboard) == null ? void 0 : _a3.executeCommand(command)) != null ? _b3 : false; + handled = true; + } else if (COMMANDS[selector]) { + if (!mathfield.isSelectionEditable && (info == null ? void 0 : info.changeContent)) { + mathfield.model.announce("plonk"); + return false; + } + if (/^(undo|redo)/.test(selector)) mathfield.flushInlineShortcutBuffer(); + dirty = COMMANDS[selector].fn(mathfield, ...args); + handled = true; + } else throw new Error(`Unknown command "${selector}"`); + if (commandTarget !== "virtual-keyboard") { + if (!mathfield.model.selectionIsCollapsed || (info == null ? void 0 : info.changeSelection) && selector !== "deleteBackward") { + mathfield.flushInlineShortcutBuffer(); + if (!(info == null ? void 0 : info.changeContent)) mathfield.stopCoalescingUndo(); + mathfield.defaultStyle = {}; + } + } + if (dirty) { + if ((info == null ? void 0 : info.changeSelection) && handled) { + mathfield.dirty = true; + mathfield.scrollIntoView(); + } else requestUpdate(mathfield); + } + return handled; + } + function performWithFeedback(mathfield, selector) { + var _a3; + if (!mathfield) return false; + mathfield.focus(); + if (mathfield_element_default.keypressVibration && canVibrate()) + navigator.vibrate(HAPTIC_FEEDBACK_DURATION); + const info = getCommandInfo(selector); + globalThis.MathfieldElement.playSound((_a3 = info == null ? void 0 : info.audioFeedback) != null ? _a3 : "keypress"); + const result = mathfield.executeCommand(selector); + mathfield.scrollIntoView(); + return result; + } + register2({ + performWithFeedback: (mathfield, command) => performWithFeedback(mathfield, command) + }); + function nextSuggestion(mathfield) { + updateAutocomplete(mathfield, { atIndex: mathfield.suggestionIndex + 1 }); + return false; + } + function previousSuggestion(mathfield) { + updateAutocomplete(mathfield, { atIndex: mathfield.suggestionIndex - 1 }); + return false; + } + register2( + { complete }, + { + target: "mathfield", + audioFeedback: "return", + canUndo: true, + changeContent: true, + changeSelection: true + } + ); + register2( + { + dispatchEvent: (mathfield, event, detail) => { + var _a3, _b3; + return (_b3 = (_a3 = mathfield.host) == null ? void 0 : _a3.dispatchEvent(new CustomEvent(event, { detail }))) != null ? _b3 : false; + } + }, + { target: "mathfield" } + ); + register2( + { nextSuggestion, previousSuggestion }, + { + target: "mathfield", + audioFeedback: "keypress", + changeSelection: true + } + ); + function parseCommand(command) { + if (!command) return void 0; + if (isArray(command) && command.length > 0) { + let selector2 = command[0]; + selector2 = selector2.replace(/-\w/g, (m) => m[1].toUpperCase()); + if (selector2 === "performWithFeedback" && command.length === 2) + return [selector2, parseCommand(command[1])]; + return [selector2, ...command.slice(1)]; + } + if (typeof command !== "string") return void 0; + const match = command.trim().match(/^([a-zA-Z0-9-]+)\((.*)\)$/); + if (match) { + const selector2 = match[1].replace(/-\w/g, (m) => m[1].toUpperCase()); + const args = match[2].split(",").map((x) => x.trim()); + return [ + selector2, + ...args.map((arg) => { + if (/"[^"]*"/.test(arg)) return arg.slice(1, -1); + if (/'[^']*'/.test(arg)) return arg.slice(1, -1); + if (/^true$/.test(arg)) return true; + if (/^false$/.test(arg)) return false; + if (/^[-]?\d+$/.test(arg)) return parseInt(arg, 10); + if (/^\{.*\}$/.test(arg)) { + try { + return JSON.parse(arg); + } catch (e) { + console.error("Invalid argument:", arg); + return arg; + } + } + return parseCommand(arg); + }) + ]; + } + const selector = command.replace(/-\w/g, (m) => m[1].toUpperCase()); + return selector; + } + + // src/virtual-keyboard/proxy.ts + var VIRTUAL_KEYBOARD_MESSAGE = "mathlive#virtual-keyboard-message"; + function isVirtualKeyboardMessage(evt) { + var _a3; + if (evt.type !== "message") return false; + const msg = evt; + return ((_a3 = msg.data) == null ? void 0 : _a3.type) === VIRTUAL_KEYBOARD_MESSAGE; + } + var VirtualKeyboardProxy = class _VirtualKeyboardProxy { + constructor() { + this.targetOrigin = window.origin; + this.originValidator = "none"; + this.targetWindow = window.top; + this._boundingRect = new DOMRect(0, 0, 0, 0); + this._isShifted = false; + window.addEventListener("message", this); + this.sendMessage("proxy-created"); + this.listeners = {}; + } + static get singleton() { + if (!this._singleton) this._singleton = new _VirtualKeyboardProxy(); + return this._singleton; + } + getKeycap(_keycap) { + return void 0; + } + setKeycap(keycap, value) { + this.sendMessage("update-setting", { setKeycap: { keycap, value } }); + } + set alphabeticLayout(value) { + this.sendMessage("update-setting", { alphabeticLayout: value }); + } + set layouts(value) { + this.sendMessage("update-setting", { layouts: value }); + } + get normalizedLayouts() { + return []; + } + set editToolbar(value) { + this.sendMessage("update-setting", { editToolbar: value }); + } + set container(value) { + throw new Error("Container inside an iframe cannot be changed"); + } + show(options) { + const success = this.dispatchEvent( + new CustomEvent("before-virtual-keyboard-toggle", { + detail: { visible: true }, + bubbles: true, + cancelable: true, + composed: true + }) + ); + if (success) { + this.sendMessage("show", options); + this.dispatchEvent(new Event("virtual-keyboard-toggle")); + } + } + hide(options) { + const success = this.dispatchEvent( + new CustomEvent("before-virtual-keyboard-toggle", { + detail: { visible: false }, + bubbles: true, + cancelable: true, + composed: true + }) + ); + if (success) { + this.sendMessage("hide", options); + this.dispatchEvent(new Event("virtual-keyboard-toggle")); + } + } + get isShifted() { + return this._isShifted; + } + get visible() { + return this._boundingRect.height > 0; + } + set visible(value) { + if (value) this.show(); + else this.hide(); + } + get boundingRect() { + return this._boundingRect; + } + executeCommand(command) { + this.sendMessage("execute-command", { command }); + return true; + } + updateToolbar(mf) { + this.sendMessage("update-toolbar", mf); + } + update(mf) { + this.sendMessage("update-setting", mf); + } + connect() { + this.sendMessage("connect"); + } + disconnect() { + this.sendMessage("disconnect"); + } + addEventListener(type, callback, _options) { + if (!this.listeners[type]) this.listeners[type] = /* @__PURE__ */ new Set(); + if (!this.listeners[type].has(callback)) this.listeners[type].add(callback); + } + dispatchEvent(event) { + if (!this.listeners[event.type] || this.listeners[event.type].size === 0) + return true; + this.listeners[event.type].forEach((x) => { + if (typeof x === "function") x(event); + else x == null ? void 0 : x.handleEvent(event); + }); + return !event.defaultPrevented; + } + removeEventListener(type, callback, _options) { + if (this.listeners[type]) this.listeners[type].delete(callback); + } + handleEvent(evt) { + if (isVirtualKeyboardMessage(evt)) { + if (!validateOrigin(evt.origin, this.originValidator)) { + throw new DOMException( + `Message from unknown origin (${evt.origin}) cannot be handled`, + "SecurityError" + ); + } + this.handleMessage(evt.data); + } + } + handleMessage(msg) { + const { action } = msg; + if (action === "execute-command") { + const { command } = msg; + const commandTarget = getCommandTarget(command); + if (commandTarget === "virtual-keyboard") this.executeCommand(command); + return; + } + if (action === "synchronize-proxy") { + this._boundingRect = msg.boundingRect; + this._isShifted = msg.isShifted; + return; + } + if (action === "geometry-changed") { + this._boundingRect = msg.boundingRect; + this.dispatchEvent(new Event("geometrychange")); + return; + } + } + sendMessage(action, payload = {}) { + if (!this.targetWindow) { + throw new DOMException( + `A frame does not have access to the top window and can't communicate with the keyboard.`, + "SecurityError" + ); + } + this.targetWindow.postMessage( + __spreadValues({ + type: VIRTUAL_KEYBOARD_MESSAGE, + action + }, payload), + this.targetOrigin + ); + } + }; + + // src/virtual-keyboard/data.ts + var LAYOUTS = { + "numeric": { + label: "123", + labelClass: "MLK__tex-math", + tooltip: "keyboard.tooltip.numeric", + rows: [ + [ + { + latex: "x", + shift: "y", + variants: [ + "y", + "z", + "t", + "r", + "x^2", + "x^n", + "x^{#?}", + "x_n", + "x_i", + "x_{#?}", + { latex: "f(#?)", class: "small" }, + { latex: "g(#?)", class: "small" } + ] + }, + { latex: "n", shift: "a", variants: ["i", "j", "p", "k", "a", "u"] }, + "[separator-5]", + "[7]", + "[8]", + "[9]", + "[/]", + "[separator-5]", + { + latex: "\\exponentialE", + shift: "\\ln", + variants: [ + "\\exp", + "\\times 10^{#?}", + "\\ln", + "\\log_{10}", + "\\log", + "\\lg", + "\\operatorname{lb}" + ] + }, + { + latex: "\\imaginaryI", + variants: ["\\Re", "\\Im", "\\imaginaryJ", "\\Vert #0 \\Vert"] + }, + { + latex: "\\pi", + shift: "\\sin", + variants: [ + "\\prod", + { latex: "\\theta", aside: "theta" }, + { latex: "\\rho", aside: "rho" }, + { latex: "\\tau", aside: "tau" }, + "\\sin", + "\\cos", + "\\tan" + ] + } + ], + [ + { + label: "<", + latex: "<", + class: "hide-shift", + shift: { latex: "\\le", label: "\u2264" } + }, + { + label: ">", + latex: ">", + class: "hide-shift", + shift: { latex: "\\ge", label: "\u2265" } + }, + "[separator-5]", + "[4]", + "[5]", + "[6]", + "[*]", + "[separator-5]", + { + class: "hide-shift", + latex: "#@^2}", + shift: "#@^{\\prime}}" + }, + { + latex: "#@^{#0}}", + class: "hide-shift", + shift: "#@_{#?}" + }, + { + class: "hide-shift", + latex: "\\sqrt{#0}", + shift: { latex: "\\sqrt[#0]{#?}}" } + } + ], + [ + "[(]", + "[)]", + "[separator-5]", + "[1]", + "[2]", + "[3]", + "[-]", + "[separator-5]", + { + latex: "\\int^{\\infty}_{0}\\!#?\\,\\mathrm{d}x", + class: "small hide-shift", + shift: "\\int", + variants: [ + { latex: "\\int_{#?}^{#?}", class: "small" }, + { latex: "\\int", class: "small" }, + { latex: "\\iint", class: "small" }, + { latex: "\\iiint", class: "small" }, + { latex: "\\oint", class: "small" }, + "\\mathrm{d}x", + { latex: "\\dfrac{\\mathrm{d}}{\\mathrm{d} x}", class: "small" }, + { latex: "\\frac{\\partial}{\\partial x}", class: "small" }, + "\\partial" + ] + }, + { + class: "hide-shift", + latex: "\\forall", + shift: "\\exists" + }, + { label: "[backspace]", width: 1 } + ], + [ + { label: "[shift]", width: 2 }, + "[separator-5]", + "[0]", + "[.]", + "[=]", + "[+]", + "[separator-5]", + "[left]", + "[right]", + { label: "[action]", width: 1 } + ] + ] + }, + "greek": { + label: "αβγ", + labelClass: "MLK__tex-math", + tooltip: "keyboard.tooltip.greek", + rows: [ + [ + { + label: "φ", + class: "MLK__tex hide-shift", + insert: "\\varphi", + aside: "phi var.", + shift: "\\Phi" + }, + { + label: "ς", + class: "MLK__tex hide-shift", + insert: "\\varsigma", + aside: "sigma var.", + shift: "\\Sigma" + }, + { + label: "ϵ", + class: "MLK__tex hide-shift", + insert: "\\epsilon", + aside: "epsilon", + shift: '\\char"0190' + }, + { + label: "ρ", + class: "MLK__tex hide-shift", + insert: "\\rho", + aside: "rho", + shift: '\\char"3A1' + }, + { + label: "τ", + class: "MLK__tex hide-shift", + insert: "\\tau", + aside: "tau", + shift: '\\char"3A4' + }, + { + label: "υ", + class: "MLK__tex hide-shift", + insert: "\\upsilon", + aside: "upsilon", + shift: "\\Upsilon" + }, + { + label: "θ", + class: "MLK__tex hide-shift", + insert: "\\theta", + aside: "theta", + shift: "\\Theta" + }, + { + label: "ι", + class: "MLK__tex hide-shift", + insert: "\\iota", + aside: "iota", + shift: '\\char"399' + }, + { + label: "ο", + class: "MLK__tex hide-shift", + insert: "\\omicron", + aside: "omicron", + shift: '\\char"39F' + }, + { + label: "π", + class: "MLK__tex hide-shift", + insert: "\\pi", + aside: "pi", + shift: "\\Pi" + } + ], + [ + "[separator-5]", + { + label: "α", + class: "MLK__tex hide-shift", + insert: "\\alpha", + aside: "alpha", + shift: '\\char"391' + }, + { + label: "σ", + class: "MLK__tex hide-shift", + insert: "\\sigma", + aside: "sigma", + shift: "\\Sigma" + }, + { + label: "δ", + class: "MLK__tex hide-shift", + insert: "\\delta", + aside: "delta", + shift: "\\Delta" + }, + { + latex: "\\phi", + class: "MLK__tex hide-shift", + insert: "\\phi", + aside: "phi", + shift: "\\Phi" + }, + { + label: "γ", + class: "MLK__tex hide-shift", + insert: "\\gamma", + aside: "gamma", + shift: "\\Gamma" + }, + { + label: "η", + class: "MLK__tex hide-shift", + insert: "\\eta", + aside: "eta", + shift: '\\char"397' + }, + { + label: "ξ", + class: "MLK__tex hide-shift", + insert: "\\xi", + aside: "xi", + shift: "\\Xi" + }, + { + label: "κ", + class: "MLK__tex hide-shift", + insert: "\\kappa", + aside: "kappa", + shift: "\\Kappa" + }, + { + label: "λ", + class: "MLK__tex hide-shift", + insert: "\\lambda", + aside: "lambda", + shift: "\\Lambda" + }, + "[separator-5]" + ], + [ + "[shift]", + { + label: "ζ", + class: "MLK__tex hide-shift", + insert: "\\zeta", + aside: "zeta", + shift: '\\char"396' + }, + { + label: "χ", + class: "MLK__tex hide-shift", + insert: "\\chi", + aside: "chi", + shift: '\\char"3A7' + }, + { + label: "ψ", + class: "MLK__tex hide-shift", + insert: "\\psi", + aside: "psi", + shift: "\\Psi" + }, + { + label: "ω", + class: "MLK__tex hide-shift", + insert: "\\omega", + aside: "omega", + shift: "\\Omega" + }, + { + label: "β", + class: "MLK__tex hide-shift", + insert: "\\beta", + aside: "beta", + shift: '\\char"392' + }, + { + label: "ν", + class: "MLK__tex hide-shift", + insert: "\\nu", + aside: "nu", + shift: '\\char"39D' + }, + { + label: "μ", + class: "MLK__tex hide-shift", + insert: "\\mu", + aside: "mu", + shift: '\\char"39C' + }, + "[backspace]" + ], + [ + "[separator]", + { + label: "ε", + class: "MLK__tex", + insert: "\\varepsilon", + aside: "epsilon var." + }, + { + label: "ϑ", + class: "MLK__tex", + insert: "\\vartheta", + aside: "theta var." + }, + { + label: "ϰ", + class: "MLK__tex", + insert: "\\varkappa", + aside: "kappa var." + }, + { + label: "ϖ", + class: "MLK__tex", + insert: "\\varpi", + aside: "pi var." + }, + { + label: "ϱ", + class: "MLK__tex", + insert: "\\varrho", + aside: "rho var." + }, + "[left]", + "[right]", + "[action]" + ] + ] + }, + "symbols": { + label: "∞\u2260\u2208", + labelClass: "MLK__tex", + tooltip: "keyboard.tooltip.symbols", + rows: [ + [ + { + latex: "\\sin", + shift: "\\sin^{-1}", + variants: [ + { class: "small", latex: "\\sinh" }, + { class: "small", latex: "\\sin^{-1}" }, + { class: "small", latex: "\\operatorname{arsinh}" } + ] + }, + "\\ln", + { + latex: "\\mathrm{abs}", + insert: "\\mathrm{abs}\\left(#0\\right)" + }, + { + latex: "\\rightarrow", + shift: "\\Rightarrow", + variants: [ + { latex: "\\implies", aside: "implies" }, + { latex: "\\to", aside: "to" }, + "\\dashv", + { latex: "\\roundimplies", aside: "round implies" } + ] + }, + { + latex: "\\exists", + variants: ["\\nexists"], + shift: "\\nexists" + }, + { latex: "\\in", shift: "\\notin", variants: ["\\notin", "\\owns"] }, + "\\cup", + { + latex: "\\overrightarrow{#@}", + shift: "\\overleftarrow{#@}", + variants: [ + "\\overleftarrow{#@}", + "\\bar{#@}", + "\\vec{#@}", + "\\hat{#@}", + "\\check{#@}", + "\\dot{#@}", + "\\ddot{#@}", + "\\mathring{#@}", + "\\breve{#@}", + "\\acute{#@}", + "\\tilde{#@}", + "\\grave{#@}" + ] + }, + { + class: "small hide-shift", + latex: "\\lim_{#?}", + shift: "\\lim_{x\\to\\infty}", + variants: [ + { class: "small", latex: "\\liminf_{#?}" }, + { class: "small", latex: "\\limsup_{#?}" } + ] + }, + "\\exponentialE" + ], + [ + { + latex: "\\cos", + shift: "\\cos^{-1}", + variants: [ + { class: "small", latex: "\\cosh" }, + { class: "small", latex: "\\cos^{-1}" }, + { class: "small", latex: "\\operatorname{arcosh}" } + ] + }, + { + latex: "\\log", + shift: "\\log_{10}", + variants: ["\\log_{#0}", "\\log_{10}"] + }, + "\\left\\vert#0\\right\\vert", + { + latex: "\\larr", + shift: "\\lArr", + variants: [ + { latex: "\\impliedby", aside: "implied by" }, + { latex: "\\gets", aside: "gets" }, + "\\lArr", + "\\vdash", + { latex: "\\models", aside: "models" } + ] + }, + { + latex: "\\forall", + shift: "\\lnot", + variants: [ + { latex: "\\land", aside: "and" }, + { latex: "\\lor", aside: "or" }, + { latex: "\\oplus", aside: "xor" }, + { latex: "\\lnot", aside: "not" }, + { latex: "\\downarrow", aside: "nor" }, + { latex: "\\uparrow", aside: "nand" }, + { latex: "\\curlywedge", aside: "nor" }, + { latex: "\\bar\\curlywedge", aside: "nand" } + // {latex:'\\barwedge', aside:'bar wedge'}, + // {latex:'\\curlyvee', aside:'curly vee'}, + // {latex:'\\veebar', aside:'vee bar'}, + ] + }, + { latex: "\\ni", shift: "\\not\\owns" }, + "\\cap", + { + latex: "\\overline{#@}", + shift: "\\underline{#@}", + variants: [ + "\\overbrace{#@}", + "\\overlinesegment{#@}", + "\\overleftrightarrow{#@}", + "\\overrightarrow{#@}", + "\\overleftarrow{#@}", + "\\overgroup{#@}", + "\\underbrace{#@}", + "\\underlinesegment{#@}", + "\\underleftrightarrow{#@}", + "\\underrightarrow{#@}", + "\\underleftarrow{#@}", + "\\undergroup{#@}" + ] + }, + { + class: "hide-shift small", + latex: "\\int", + shift: "\\iint", + variants: [ + { latex: "\\int_{#?}^{#?}", class: "small" }, + { latex: "\\int", class: "small" }, + { latex: "\\smallint", class: "small" }, + { latex: "\\iint", class: "small" }, + { latex: "\\iiint", class: "small" }, + { latex: "\\oint", class: "small" }, + "\\intop", + "\\iiint", + "\\oiint", + "\\oiiint", + "\\intclockwise", + "\\varointclockwise", + "\\ointctrclockwise", + "\\intctrclockwise" + ] + }, + { latex: "\\pi", shift: "\\tau", variants: ["\\tau"] } + ], + [ + { + latex: "\\tan", + shift: "\\tan^{-1}", + variants: [ + { class: "small", latex: "\\tanh" }, + { class: "small", latex: "\\tan^{-1}" }, + { class: "small", latex: "\\operatorname{artanh}" }, + { class: "small", latex: "\\arctan" }, + { class: "small", latex: "\\operatorname{arctg}" }, + { class: "small", latex: "\\operatorname{tg}" } + ] + }, + { + latex: "\\exp", + insert: "\\exp\\left(#0\\right)", + variants: ["\\exponentialE^{#0}"] + }, + "\\left\\Vert#0\\right\\Vert", + { + latex: "\\lrArr", + shift: "\\leftrightarrow", + variants: [ + { latex: "\\iff", aside: "if and only if" }, + "\\leftrightarrow", + "\\leftrightarrows", + "\\Leftrightarrow", + { latex: "^\\biconditional", aside: "biconditional" } + ] + }, + { latex: "\\vert", shift: "!" }, + { + latex: "#@^{\\complement}", + aside: "complement", + variants: [ + { latex: "\\setminus", aside: "set minus" }, + { latex: "\\smallsetminus", aside: "small set minus" } + ] + }, + { + latex: "\\subset", + shift: "\\subseteq", + variants: [ + "\\subset", + "\\subseteq", + "\\subsetneq", + "\\varsubsetneq", + "\\subsetneqq", + "\\nsubset", + "\\nsubseteq", + "\\supset", + "\\supseteq", + "\\supsetneq", + "\\supsetneqq", + "\\nsupset", + "\\nsupseteq" + ] + }, + { + latex: "#@^{\\prime}", + shift: "#@^{\\doubleprime}", + variants: ["#@^{\\doubleprime}", "#@\\degree"] + }, + { + latex: "\\mathrm{d}", + shift: "\\partial", + variants: [ + "\\mathrm{d}x", + { latex: "\\dfrac{\\mathrm{d}}{\\mathrm{d} x}", class: "small" }, + { latex: "\\frac{\\partial}{\\partial x}", class: "small" }, + "\\partial" + ] + }, + { + latex: "\\infty", + variants: ["\\aleph_0", "\\aleph_1", "\\omega", "\\mathfrak{m}"] + } + ], + [ + { label: "[shift]", width: 2 }, + { + class: "box", + latex: ",", + shift: ";", + variants: [";", "?"] + }, + { + class: "box", + latex: "\\colon", + shift: "\\Colon", + variants: [ + { latex: "\\Colon", aside: "such that", class: "box" }, + { latex: ":", aside: "ratio", class: "box" }, + { latex: "\\vdots", aside: "", class: "box" }, + { latex: "\\ddots", aside: "", class: "box" }, + { latex: "\\ldotp", aside: "low dot", class: "box" }, + { latex: "\\cdotp", aside: "center dot", class: "box" }, + { latex: "\\ldots", aside: "low ellipsis", class: "box" }, + { latex: "\\cdots", aside: "center ellipsis", class: "box" }, + { latex: "\\therefore", aside: "therefore", class: "box" }, + { latex: "\\because", aside: "because", class: "box" } + ] + }, + { + class: "box", + latex: "\\cdot", + aside: "centered dot", + shift: "\\ast", + variants: [ + "\\circ", + "\\bigcirc", + "\\bullet", + "\\odot", + "\\oslash", + "\\circledcirc", + "\\ast", + "\\star", + "\\times", + "\\doteq", + "\\doteqdot" + ] + }, + "[separator]", + "[left]", + "[right]", + { + label: "[backspace]", + width: 1, + class: "action hide-shift" + }, + { label: "[action]", width: 1 } + ] + ] + }, + "compact": { + label: "compact", + rows: [ + [ + "[+]", + "[-]", + "[*]", + "[/]", + "[=]", + "[.]", + "[(]", + "[)]", + "\\sqrt{#0}", + "#@^{#?}" + ], + ["[1]", "[2]", "[3]", "[4]", "[5]", "[6]", "[7]", "[8]", "[9]", "[0]"], + ["[hr]"], + [ + "[undo]", + "[redo]", + "[separator]", + "[separator]", + "[separator]", + "[left]", + "[right]", + { label: "[backspace]", class: "action hide-shift" }, + "[hide-keyboard]" + ] + ] + }, + "minimalist": { + label: "minimalist", + layers: [ + { + style: ` + div.minimalist-backdrop { + display: flex; + justify-content: center; + } + div.minimalist-container { + --keycap-height: 40px; + --keycap-max-width: 53px; + --keycap-small-font-size: 12px; + background: var(--keyboard-background); + padding: 20px 20px 0px 20px; + border-top-left-radius: 8px; + border-top-right-radius: 8px; + border: 1px solid var(--keyboard-border); + box-shadow: 0 0 32px rgb(0 0 0 / 30%); + } + `, + backdrop: "minimalist-backdrop", + container: "minimalist-container", + rows: [ + [ + "+", + "-", + "\\times", + { latex: "\\frac{#@}{#0}", class: "small" }, + "=", + "[.]", + "(", + ")", + { latex: "\\sqrt{#0}", class: "small" }, + { latex: "#@^{#?}", class: "small" } + ], + ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0"], + ["[hr]"], + [ + "[undo]", + "[redo]", + "[separator]", + "[separator]", + "[separator]", + "[left]", + "[right]", + { label: "[backspace]", class: "action hide-shift" }, + "[hide-keyboard]" + ] + ] + } + ] + }, + "numeric-only": { + label: "123", + labelClass: "MLK__tex-math", + tooltip: "keyboard.tooltip.numeric", + id: "numeric-only", + rows: [ + ["7", "8", "9", "[separator]", { label: "[backspace]", width: 2 }], + ["4", "5", "6", "[separator]", "[separator]", "[separator]"], + ["1", "2", "3", "[separator]", "[separator]", "[separator]"], + [ + "0", + { label: "[.]", variants: [] }, + "-", + "[separator]", + "[left]", + "[right]" + ] + ] + } + }; + + // src/virtual-keyboard/variants.ts + var VARIANTS2 = { + // '0-extended': [ + // '\\emptyset', + // '\\varnothing', + // '\\infty', + // { latex: '#?_0', insert: '#@_0' }, + // '\\circ', + // '\\bigcirc', + // '\\bullet', + // ], + "0": ["\\varnothing", "\\infty"], + "1": ["\\frac{1}{#@}", "#@^{-1}", "\\times 10^{#?}", "\\phi", "\\imaginaryI"], + "2": ["\\frac{1}{2}", "#@^2", "\\sqrt2", "\\exponentialE"], + "3": ["\\frac{1}{3}", "#@^3", "\\sqrt3", "\\pi"], + "4": ["\\frac{1}{4}", "#@^4"], + "5": ["\\frac{1}{5}", "#@^5", "\\sqrt5"], + "6": ["\\frac{1}{6}", "#@^6"], + "7": ["\\frac{1}{7}", "#@^7"], + "8": ["\\frac{1}{8}", "#@^8"], + "9": ["\\frac{1}{9}", "#@^9"], + ".": [".", ",", ";", "\\colon"], + ",": ["{,}", ".", ";", "\\colon"], + "a": [ + { latex: "\\aleph", aside: "aleph" }, + { latex: "\\forall", aside: "for all" }, + "\xE5", + "\xE0", + "\xE1", + "\xE2", + "\xE4", + "\xE6" + ], + "A": [ + { latex: "\\aleph", aside: "aleph" }, + { latex: "\\forall", aside: "for all" }, + "\xC5", + "\xC0", + "\xC1", + "\xC2", + "\xC4", + "\xC6" + ], + "b": [{ latex: "\\beth", aside: "beth" }], + "c": [{ latex: "\\C", aside: "set of complex numbers" }, "\xE7"], + "d": [{ latex: "\\daleth", aside: "daleth" }], + "e": [ + { latex: "\\exponentialE", aside: "exponential e" }, + { latex: "\\exists", aside: "there is" }, + { latex: "\\nexists", aside: "there isn\u2019t" }, + "\xE8", + "\xE9", + "\xEA", + "\xEB" + ], + "E": [ + { latex: "\\exponentialE", aside: "exponential e" }, + { latex: "\\exists", aside: "there is" }, + { latex: "\\nexists", aside: "there isn\u2019t" }, + "\xC8", + "\xC9", + "\xCA", + "\xCB" + ], + "g": [{ latex: "\\gimel", aside: "gimel" }], + "h": [ + { latex: "\\hbar", aside: "h bar" }, + { latex: "\\hslash", aside: "h slash" } + ], + "i": [{ latex: "\\imaginaryI", aside: "imaginary i" }, "\xEC", "\xED", "\xEE", "\xEF"], + "I": [{ latex: "\\imaginaryI", aside: "imaginary i" }, "\xCC", "\xCD", "\xCE", "\xCF"], + "j": [{ latex: "\\imaginaryJ", aside: "imaginary j" }], + "l": [{ latex: "\\ell", aside: "ell" }], + "n": [{ latex: "\\mathbb{N}", aside: "set of natural numbers" }, "\xF1"], + "o": ["\xF8", "\u0153", "\xF2", "\xF3", "\xF4", "\xF6"], + "O": ["\xF8", "\u0152", "\xD2", "\xD3", "\xD4", "\xD6"], + "p": [{ latex: "\\mathbb{P}", aside: "set of primes" }], + "q": [{ latex: "\\mathbb{Q}", aside: "set of rational numbers" }], + "r": [{ latex: "\\mathbb{R}", aside: "set of real numbers" }], + "u": ["\xF9", "\xFA", "\xFB", "\xFC"], + "U": ["\xD9", "\xDA", "\xDB", "\xDC"], + "z": [{ latex: "\\mathbb{Z}", aside: "set of integers" }], + "y": ["\xFD", "\xFF"], + "Y": ["\u0178"], + "space": [ + { + latex: '\\char"203A\\!\\char"2039', + insert: "\\!", + aside: "negative thin space
    \u207B\xB3\u29F8\u2081\u2088 em" + }, + { + latex: '\\char"203A\\,\\char"2039', + insert: "\\,", + aside: "thin space
    \xB3\u29F8\u2081\u2088 em" + }, + { + latex: '\\char"203A\\:\\char"2039', + insert: "\\:", + aside: "medium space
    \u2074\u29F8\u2081\u2088 em" + }, + { + latex: '\\char"203A\\;\\char"2039', + insert: "\\;", + aside: "thick space
    \u2075\u29F8\u2081\u2088 em" + }, + { + latex: '\\char"203A\\ \\char"2039', + insert: "\\ ", + aside: "\u2153 em" + }, + { + latex: '\\char"203A\\enspace\\char"2039', + insert: "\\enspace", + aside: "\xBD em" + }, + { + latex: '\\char"203A\\quad\\char"2039', + insert: "\\quad", + aside: "1 em" + }, + { + latex: '\\char"203A\\qquad\\char"2039', + insert: "\\qquad", + aside: "2 em" + } + ] + }; + var gVariantPanelController; + function showVariantsPanel(element, onClose) { + var _a3, _b3, _c2, _d2, _e; + const keyboard = VirtualKeyboard.singleton; + if (!keyboard) return; + const keycap = parentKeycap(element); + let variantDef = ""; + if (window.mathVirtualKeyboard.isShifted) { + const shiftedDefinition = (_a3 = keyboard.getKeycap(keycap == null ? void 0 : keycap.id)) == null ? void 0 : _a3.shift; + if (typeof shiftedDefinition === "object" && "variants" in shiftedDefinition) + variantDef = (_b3 = shiftedDefinition.variants) != null ? _b3 : ""; + } else variantDef = (_d2 = (_c2 = keyboard.getKeycap(keycap == null ? void 0 : keycap.id)) == null ? void 0 : _c2.variants) != null ? _d2 : ""; + if (typeof variantDef === "string" && !hasVariants(variantDef) || Array.isArray(variantDef) && variantDef.length === 0) { + onClose == null ? void 0 : onClose(); + return; + } + const variants = {}; + let markup = ""; + for (const variant of getVariants(variantDef)) { + const keycap2 = normalizeKeycap(variant); + const id = Date.now().toString(36).slice(-2) + Math.floor(Math.random() * 1e5).toString(36); + variants[id] = keycap2; + const [keycapMarkup, keycapCls] = renderKeycap(keycap2); + markup += `
    ${keycapMarkup}
    `; + } + const variantPanel = document.createElement("div"); + variantPanel.setAttribute("aria-hidden", "true"); + variantPanel.className = "MLK__variant-panel"; + variantPanel.style.height = "auto"; + const l = Object.keys(variants).length; + let w = 5; + if (l === 1) w = 1; + else if (l === 2 || l === 4) w = 2; + else if (l === 3 || l === 5 || l === 6) w = 3; + else if (l >= 7 && l < 14) w = 4; + variantPanel.style.width = `calc(var(--variant-keycap-length) * ${w} + 12px)`; + variantPanel.innerHTML = mathfield_element_default.createHTML(markup); + Scrim.open({ + root: (_e = keyboard == null ? void 0 : keyboard.container) == null ? void 0 : _e.querySelector(".ML__keyboard"), + child: variantPanel + }); + gVariantPanelController = new AbortController(); + const { signal } = gVariantPanelController; + const position = element == null ? void 0 : element.getBoundingClientRect(); + if (position) { + if (position.top - variantPanel.clientHeight < 0) { + variantPanel.style.width = "auto"; + if (l <= 6) + variantPanel.style.height = "56px"; + else if (l <= 12) + variantPanel.style.height = "108px"; + else if (l <= 18) + variantPanel.style.height = "205px"; + else variantPanel.classList.add("compact"); + } + const left = Math.max( + 0, + Math.min( + window.innerWidth - variantPanel.offsetWidth, + (position.left + position.right - variantPanel.offsetWidth) / 2 + ) + ); + const top = position.top - variantPanel.clientHeight + 5; + variantPanel.style.left = `${left}px`; + variantPanel.style.top = `${top}px`; + variantPanel.classList.add("is-visible"); + requestAnimationFrame(() => { + var _a4; + variantPanel.addEventListener( + "pointerup", + (ev) => { + const target = parentKeycap(ev.target); + if (!(target == null ? void 0 : target.id) || !variants[target.id]) return; + executeKeycapCommand(variants[target.id]); + hideVariantsPanel(); + onClose == null ? void 0 : onClose(); + ev.preventDefault(); + }, + { capture: true, passive: false, signal } + ); + variantPanel.addEventListener( + "pointerenter", + (ev) => { + const target = parentKeycap(ev.target); + if (!(target == null ? void 0 : target.id) || !variants[target.id]) return; + target.classList.add("is-active"); + }, + { capture: true, signal } + ); + variantPanel.addEventListener( + "pointerleave", + (ev) => { + const target = parentKeycap(ev.target); + if (ev.target && "tagName" in ev.target && typeof ev.target.tagName === "string" && ev.target.tagName.toUpperCase() === "ASIDE") + return; + if (!(target == null ? void 0 : target.id) || !variants[target.id]) return; + target.classList.remove("is-active"); + }, + { capture: true, signal } + ); + if ((_a4 = keyboard.getKeycap(keycap == null ? void 0 : keycap.id)) == null ? void 0 : _a4.stickyVariantPanel) { + window.addEventListener( + "pointerdown", + (ev) => { + if (!(ev.target instanceof Node)) return; + const isInside = variantPanel.contains(ev.target); + if (ev.target === variantPanel || isInside) return; + hideVariantsPanel(); + onClose == null ? void 0 : onClose(); + }, + { signal } + ); + } else { + window.addEventListener( + "pointercancel", + () => { + hideVariantsPanel(); + onClose == null ? void 0 : onClose(); + }, + { signal } + ); + window.addEventListener( + "pointerup", + () => { + hideVariantsPanel(); + onClose == null ? void 0 : onClose(); + }, + { signal } + ); + } + }); + } + return; + } + function hideVariantsPanel() { + gVariantPanelController == null ? void 0 : gVariantPanelController.abort(); + gVariantPanelController = null; + if (Scrim.state === "open") Scrim.close(); + } + function makeVariants(id) { + if (id === "foreground-color") { + const result = []; + for (const color of Object.keys(FOREGROUND_COLORS)) { + result.push({ + class: "swatch-button", + label: '', + command: ["applyStyle", { color }] + }); + } + return result; + } + if (id === "background-color") { + const result = []; + for (const color of Object.keys(BACKGROUND_COLORS)) { + result.push({ + class: "swatch-button", + label: '', + command: ["applyStyle", { backgroundColor: color }] + }); + } + return result; + } + return void 0; + } + function hasVariants(id) { + return VARIANTS2[id] !== void 0; + } + function getVariants(id) { + var _a3; + if (typeof id !== "string") return id; + if (!VARIANTS2[id]) VARIANTS2[id] = (_a3 = makeVariants(id)) != null ? _a3 : []; + return VARIANTS2[id]; + } + + // src/virtual-keyboard/utils.ts + function jsonToCssProps(json) { + if (typeof json === "string") return json; + return Object.entries(json).map(([k, v]) => `${k}:${v} !important`).join(";"); + } + function jsonToCss(json) { + return Object.keys(json).map((k) => { + return `${k} {${jsonToCssProps(json[k])}}`; + }).join(""); + } + function latexToMarkup2(latex) { + if (!latex) return ""; + const context = new Context(); + const root = new Atom({ + mode: "math", + type: "root", + body: parseLatex(latex, { + context, + args: (arg) => arg === "@" ? "{\\class{ML__box-placeholder}{\\blacksquare}}" : "\\placeholder{}" + }) + }); + const box = coalesce( + applyInterBoxSpacing( + new Box(root.render(context), { classes: "ML__base" }), + context + ) + ); + return makeStruts(box, { classes: "ML__latex" }).toMarkup(); + } + function escapeAttribute(value) { + return value.replace(/&/g, "&").replace(/"/g, """).replace(//g, ">"); + } + function stripTags(value) { + return value.replace(/<\/?[^>]+(>|$)/g, " "); + } + function getKeycapAriaLabel(keycap) { + var _a3, _b3, _c2, _d2; + const candidate = (_d2 = (_c2 = (_b3 = (_a3 = keycap.tooltip) != null ? _a3 : typeof keycap.label === "string" ? stripTags(keycap.label) : void 0) != null ? _b3 : keycap.insert) != null ? _c2 : keycap.latex) != null ? _d2 : keycap.key; + if (!candidate) return null; + const label = candidate.replace(/\s+/g, " ").trim(); + return label || null; + } + function serializeKeycapCommand(command) { + if (typeof command === "undefined" || command === null) return null; + try { + return JSON.stringify(command); + } catch (e) { + return null; + } + } + function getKeycapValue(keycap) { + var _a3, _b3; + const value = (_b3 = (_a3 = keycap.insert) != null ? _a3 : keycap.latex) != null ? _b3 : keycap.key; + return value != null ? value : null; + } + function normalizeLayer(layer) { + var _a3; + if (Array.isArray(layer)) return layer.map((x) => normalizeLayer(x)).flat(); + const result = typeof layer === "string" ? { markup: layer } : layer; + if ("rows" in result && Array.isArray(result.rows)) + result.rows = result.rows.map((row) => row.map((x) => normalizeKeycap(x))); + (_a3 = result.id) != null ? _a3 : result.id = "ML__layer_" + Date.now().toString(36).slice(-2) + Math.floor(Math.random() * 1e5).toString(36); + return [result]; + } + function alphabeticLayout() { + var _a3, _b3; + const keyboard = window.mathVirtualKeyboard; + let layoutName = keyboard.alphabeticLayout; + if (layoutName === "auto") { + const activeLayout = getActiveKeyboardLayout(); + if (activeLayout) layoutName = activeLayout.virtualLayout; + if (!layoutName || layoutName === "auto") { + layoutName = (_a3 = { + fr: "azerty", + be: "azerty", + al: "qwertz", + ba: "qwertz", + cz: "qwertz", + de: "qwertz", + hu: "qwertz", + sk: "qwertz", + ch: "qwertz" + }[l10n.locale.slice(0, 2)]) != null ? _a3 : "qwerty"; + } + } + const ALPHABETIC_TEMPLATE = { + qwerty: ["qwertyuiop", " asdfghjkl ", "^zxcvbnm~"], + azerty: ["azertyuiop", "qsdfghjklm", "^ wxcvbn ~"], + qwertz: ["qwertzuiop", " asdfghjkl ", "^yxcvbnm~"], + dvorak: ["^ pyfgcrl ", "aoeuidhtns", "qjkxbmwvz~"], + colemak: [" qwfpgjluy ", "arstdhneio", "^zxcvbkm~"] + }; + const template = (_b3 = ALPHABETIC_TEMPLATE[layoutName]) != null ? _b3 : ALPHABETIC_TEMPLATE.qwerty; + const rows = layoutName === "azerty" ? [ + [ + { label: "1", variants: "1" }, + { label: "2", shift: { latex: "\xE9" }, variants: "2" }, + { label: "3", shift: { latex: "\xF9" }, variants: "3" }, + { label: "4", variants: "4" }, + { label: "5", shift: { label: "(", latex: "(" }, variants: "5" }, + { label: "6", shift: { label: ")", latex: ")" }, variants: "6" }, + { label: "7", shift: { latex: "\xE8" }, variants: "7" }, + { label: "8", shift: { latex: "\xEA" }, variants: "8" }, + { label: "9", shift: { latex: "\xE7" }, variants: "9" }, + { label: "0", shift: { latex: "\xE0" }, variants: "0" } + ] + ] : [ + [ + { label: "1", variants: "1" }, + { label: "2", variants: "2" }, + { label: "3", variants: "3" }, + { label: "4", variants: "4" }, + { label: "5", shift: { latex: "\\frac{#@}{#?}" }, variants: "5" }, + { label: "6", shift: { latex: "#@^#?" }, variants: "6" }, + { label: "7", variants: "7" }, + { label: "8", shift: { latex: "\\times" }, variants: "8" }, + { label: "9", shift: { label: "(", latex: "(" }, variants: "9" }, + { label: "0", shift: { label: ")", latex: ")" }, variants: "0" } + ] + ]; + for (const templateRow of template) { + const row = []; + for (const k of templateRow) { + if (/[a-z]/.test(k)) { + row.push({ + label: k, + class: "hide-shift", + shift: { + label: k.toUpperCase(), + variants: hasVariants(k.toUpperCase()) ? k.toUpperCase() : void 0 + }, + variants: hasVariants(k) ? k : void 0 + }); + } else if (k === "~") { + if (layoutName !== "dvorak") row.push("[backspace]"); + else row.push({ label: "[backspace]", width: 1 }); + } else if (k === "^") row.push("[shift]"); + else if (k === " ") row.push("[separator-5]"); + } + rows.push(row); + } + rows.push([ + // { + // class: 'action', + // label: 'text mode', + // command: ['performWithFeedback', ['switchMode', 'text', '', '']], + // }, + "[-]", + "[+]", + "[=]", + { label: " ", width: 1.5 }, + { label: ",", shift: ";", variants: ".", class: "hide-shift" }, + "[.]", + "[left]", + "[right]", + { label: "[action]", width: 1.5 } + ]); + return { + label: "abc", + labelClass: "MLK__tex-math", + tooltip: "keyboard.tooltip.alphabetic", + layers: normalizeLayer({ rows }) + }; + } + function normalizeLayout(layout) { + if (layout === "alphabetic") return alphabeticLayout(); + if (typeof layout === "string") { + console.assert( + LAYOUTS[layout] !== void 0, + `MathLive {{SDK_VERSION}}: unknown keyboard layout "${layout}"` + ); + return normalizeLayout(LAYOUTS[layout]); + } + let result; + if ("rows" in layout && Array.isArray(layout.rows)) { + console.assert( + !("layers" in layout || "markup" in layout), + `MathLive {{SDK_VERSION}}: when providing a "rows" property, "layers" and "markup" are ignored` + ); + const _a3 = layout, { rows } = _a3, partialLayout = __objRest(_a3, ["rows"]); + result = __spreadProps(__spreadValues({}, partialLayout), { + layers: normalizeLayer({ rows: layout.rows }) + }); + } else if ("markup" in layout && typeof layout.markup === "string") { + const _b3 = layout, { markup } = _b3, partialLayout = __objRest(_b3, ["markup"]); + result = __spreadProps(__spreadValues({}, partialLayout), { + layers: normalizeLayer(layout.markup) + }); + } else { + result = __spreadValues({}, layout); + if ("layers" in layout) result.layers = normalizeLayer(layout.layers); + else { + console.error( + `MathLive {{SDK_VERSION}}: provide either a "rows", "markup" or "layers" property` + ); + } + } + let hasShift = false; + let hasEdit = false; + for (const layer of result.layers) { + if (layer.rows) { + for (const keycap of layer.rows.flat()) { + if (isShiftKey(keycap)) hasShift = true; + const command = keycap.command; + if (typeof command === "string" && ["undo", "redo", "cut", "copy", "paste"].includes(command)) + hasEdit = true; + } + } + } + if (!("displayShiftedKeycaps" in layout) || layout.displayShiftedKeycaps === void 0) + result.displayShiftedKeycaps = hasShift; + if (!("displayEditToolbar" in layout) || layout.displayEditToolbar === void 0) + result.displayEditToolbar = !hasEdit; + return result; + } + function makeLayoutsToolbar(keyboard, index) { + var _a3, _b3; + let markup = `
    `; + if (keyboard.normalizedLayouts.length > 1) { + for (const [i, l] of keyboard.normalizedLayouts.entries()) { + const layout = l; + const classes = [i === index ? "selected" : "layer-switch"]; + if (layout.tooltip) classes.push("MLK__tooltip"); + if (layout.labelClass) classes.push(...layout.labelClass.split(" ")); + markup += `
    ${(_b3 = layout.label) != null ? _b3 : "untitled"}
    `; + } + } + markup += "
    "; + return markup; + } + function makeEditToolbar(options, mathfield) { + let result = ""; + const toolbarOptions = options.editToolbar; + if (toolbarOptions === "none") return ""; + const availableActions = []; + if (mathfield.selectionIsCollapsed) + availableActions.push("undo", "redo", "pasteFromClipboard"); + else { + availableActions.push( + "cutToClipboard", + "copyToClipboard", + "pasteFromClipboard" + ); + } + const actionsMarkup = { + undo: `
    + +
    `, + redo: `
    + +
    `, + cutToClipboard: ` +
    + +
    + `, + copyToClipboard: ` +
    + +
    + `, + pasteFromClipboard: ` +
    + +
    + ` + }; + result += availableActions.map((action) => actionsMarkup[action]).join(""); + return result; + } + function makeSyntheticKeycaps(elementList) { + for (const element of elementList) + makeSyntheticKeycap(element); + } + function makeSyntheticKeycap(element) { + const keyboard = VirtualKeyboard.singleton; + if (!keyboard) return; + const keycap = {}; + if (!element.id) { + if (element.hasAttribute("data-label")) + keycap.label = element.dataset.label; + if (element.hasAttribute("data-latex")) + keycap.latex = element.dataset.latex; + if (element.hasAttribute("data-key")) keycap.key = element.dataset.key; + if (element.hasAttribute("data-insert")) + keycap.insert = element.dataset.insert; + if (element.hasAttribute("data-variants")) + keycap.variants = element.dataset.variants; + if (element.hasAttribute("data-aside")) + keycap.aside = element.dataset.aside; + if (element.className) keycap.class = element.className; + if (!keycap.label && !keycap.latex && !keycap.key && !keycap.insert) { + keycap.latex = element.innerText; + keycap.label = element.innerHTML; + } + if (element.hasAttribute("data-command")) { + try { + keycap.command = JSON.parse(element.dataset.command); + } catch (e) { + console.warn("Invalid JSON in data-command attribute", e); + } + } + element.id = keyboard.registerKeycap(keycap); + } + if (!element.innerHTML) { + const [markup, _] = renderKeycap(keycap); + element.innerHTML = globalThis.MathfieldElement.createHTML(markup); + } + } + function injectStylesheets() { + injectStylesheet("virtual-keyboard"); + injectStylesheet("core"); + void loadFonts(); + } + function releaseStylesheets() { + releaseStylesheet("core"); + releaseStylesheet("virtual-keyboard"); + } + var SVG_ICONS = ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +`; + function makeKeyboardElement(keyboard) { + keyboard.resetKeycapRegistry(); + injectStylesheets(); + const result = document.createElement("div"); + result.className = "ML__keyboard"; + const plate = document.createElement("div"); + plate.className = "MLK__plate"; + plate.innerHTML = globalThis.MathfieldElement.createHTML( + SVG_ICONS + keyboard.normalizedLayouts.map((x, i) => makeLayout(keyboard, x, i)).join("") + ); + const backdrop = document.createElement("div"); + backdrop.className = "MLK__backdrop"; + backdrop.appendChild(plate); + result.appendChild(backdrop); + result.addEventListener("pointerdown", handlePointerDown, { passive: false }); + const toolbars = result.querySelectorAll(".ML__edit-toolbar"); + if (toolbars) { + for (const toolbar of toolbars) { + toolbar.addEventListener("click", (ev) => { + var _a3, _b3; + let target = ev.target; + let command = ""; + while (target && !command) { + command = (_a3 = target == null ? void 0 : target.getAttribute("data-command")) != null ? _a3 : ""; + target = (_b3 = target == null ? void 0 : target.parentElement) != null ? _b3 : null; + } + if (command) keyboard.executeCommand(JSON.parse(command)); + }); + } + } + makeSyntheticKeycaps( + result.querySelectorAll( + ".MLK__keycap, .action, .fnbutton, .bigfnbutton" + ) + ); + const layerElements = result.querySelectorAll(".MLK__layer"); + console.assert(layerElements.length > 0, "No virtual keyboards available"); + for (const x of layerElements) + x.addEventListener("pointerdown", (evt) => evt.preventDefault()); + keyboard.currentLayer = keyboard.latentLayer; + return result; + } + function makeLayout(keyboard, layout, index) { + var _a3; + const markup = []; + if (!("layers" in layout)) return ""; + for (const layer of layout.layers) { + markup.push(`
    `); + if (keyboard.normalizedLayouts.length > 1 || layout.displayEditToolbar) { + markup.push(``); + } + markup.push(makeLayer(keyboard, layer)); + markup.push("
    "); + } + return markup.join(""); + } + function makeLayer(keyboard, layer) { + if (typeof layer === "string") return layer; + let layerMarkup = ""; + if (typeof layer.style === "string") + layerMarkup += ``; + else if (typeof layer.style === "object") + layerMarkup += ``; + if (layer.backdrop) layerMarkup += `
    `; + if (layer.container) layerMarkup += `
    `; + if (layer.rows) { + layerMarkup += `
    `; + for (const row of layer.rows) { + layerMarkup += `
    `; + for (const keycap of row) { + if (keycap) { + const keycapId = keyboard.registerKeycap(keycap); + const [markup, cls] = renderKeycap(keycap); + if (/(^|\s)separator/.test(cls)) layerMarkup += `
    ${markup}
    `; + } + } + layerMarkup += `
    `; + } + layerMarkup += `
    `; + } else if (layer.markup) layerMarkup += layer.markup; + if (layer.container) layerMarkup += "
    "; + if (layer.backdrop) layerMarkup += "
    "; + return layerMarkup; + } + function renderKeycap(keycap, options = { shifted: false }) { + var _a3, _b3, _c2, _d2, _e, _f, _g; + let markup = ""; + let cls = (_a3 = keycap.class) != null ? _a3 : ""; + if (options.shifted && isShiftKey(keycap)) cls += " is-active"; + if (options.shifted && "shift" in keycap) { + if (typeof keycap.shift === "string") markup = latexToMarkup2(keycap.shift); + else if (typeof keycap.shift === "object") { + markup = keycap.shift.label ? keycap.shift.label : (_b3 = latexToMarkup2(keycap.shift.latex || keycap.shift.insert || "") || keycap.shift.key) != null ? _b3 : ""; + } + if (typeof keycap.shift === "object") + cls = (_d2 = (_c2 = keycap.shift.class) != null ? _c2 : keycap.class) != null ? _d2 : ""; + } else { + markup = keycap.label ? keycap.label : (_e = latexToMarkup2(keycap.latex || keycap.insert || "") || keycap.key) != null ? _e : ""; + if (keycap.shift) { + let shiftLabel; + if (typeof keycap.shift === "string") + shiftLabel = latexToMarkup2(keycap.shift); + else if (keycap.shift.label) shiftLabel = keycap.shift.label; + else { + shiftLabel = (_f = latexToMarkup2(keycap.shift.latex || keycap.shift.insert || "") || keycap.shift.key) != null ? _f : ""; + } + markup += `${shiftLabel}`; + } + if (keycap.aside) markup += ``; + } + if (keycap.layer && !/layer-switch/.test(cls)) cls += " layer-switch"; + if (!/(^|\s)(separator|action|shift|fnbutton|bigfnbutton)($|\s)/.test(cls)) + cls += " MLK__keycap"; + if (!/\bw[0-9]+\b/.test(cls) && keycap.width) { + cls += (_g = { 0: " w0", 0.5: " w5", 1.5: " w15", 2: " w20", 5: " w50" }[keycap.width]) != null ? _g : ""; + } + return [markup, cls || "MLK__keycap"]; + } + var KEYCAP_SHORTCUTS = { + "[left]": { + class: "action hide-shift", + label: "", + command: "performWithFeedback(moveToPreviousChar)", + shift: { + label: "", + command: "performWithFeedback(extendSelectionBackward)" + } + }, + "[right]": { + class: "action hide-shift", + label: "", + command: "performWithFeedback(moveToNextChar)", + shift: { + label: "", + command: "performWithFeedback(extendSelectionForward)" + } + }, + "[up]": { + class: "action hide-shift", + label: "\u2191", + command: "performWithFeedback(moveUp)", + shift: { + label: "\u219F", + command: "performWithFeedback(extendSelectionUpward)" + } + }, + "[down]": { + class: "action hide-shift", + label: "\u2193", + command: "performWithFeedback(moveDown)", + shift: { + label: "\u21A1", + command: "performWithFeedback(extendSelectionDownward)" + } + }, + "[return]": { + class: "action hide-shift", + command: "performWithFeedback(commit)", + shift: { command: "performWithFeedback(addRowAfter)" }, + width: 1.5, + label: "" + }, + "[action]": { + class: "action hide-shift", + command: "performWithFeedback(commit)", + shift: { + label: "", + command: "performWithFeedback(addRowAfter)" + }, + width: 1.5, + label: "" + }, + "[hr]": { + class: "separator horizontal-rule" + }, + "[hide-keyboard]": { + class: "action", + command: ["hideVirtualKeyboard"], + width: 1.5, + label: "" + }, + "[.]": { + variants: ".", + command: "performWithFeedback(insertDecimalSeparator)", + shift: ",", + class: "big-op hide-shift", + label: "." + }, + "[,]": { + variants: ",", + command: "performWithFeedback(insertDecimalSeparator)", + shift: ".", + class: "big-op hide-shift", + label: "," + }, + "[+]": { + variants: [{ latex: "\\sum_{#0}^{#0}", class: "small" }, "\\oplus"], + latex: "+", + label: "+", + class: "big-op hide-shift", + shift: { + latex: "\\sum", + insert: "\\sum", + class: "small" + } + }, + "[-]": { + variants: ["\\pm", "\\ominus"], + latex: "-", + label: "−", + shift: "\\pm", + class: "big-op hide-shift" + }, + "[/]": { + class: "big-op hide-shift", + shift: { class: "", latex: "\\frac{1}{#@}" }, + variants: ["/", "\\div", "\\%", "\\oslash"], + latex: "\\frac{#@}{#?}", + label: "÷" + }, + "[*]": { + variants: [ + { latex: "\\prod_{#0}^{#0}", class: "small" }, + "\\otimes", + "\\cdot" + ], + latex: "\\cdot", + label: "×", + shift: { latex: "\\times" }, + class: "big-op hide-shift" + }, + "[=]": { + variants: [ + "\\neq", + "\\equiv", + "\\varpropto", + "\\thickapprox", + "\\lt", + "\\gt", + "\\le", + "\\ge" + ], + latex: "=", + label: "=", + shift: { label: "\u2260", latex: "\\ne" }, + class: "big-op hide-shift" + }, + "[backspace]": { + class: "action bottom right hide-shift", + width: 1.5, + command: "performWithFeedback(deleteBackward)", + label: "", + shift: { + class: "action warning", + label: "", + command: "deleteAll" + } + }, + "[undo]": { + class: "ghost if-can-undo", + command: "undo", + label: "", + tooltip: "tooltip.undo" + }, + "[redo]": { + class: "ghost if-can-redo", + command: "redo", + label: "", + tooltip: "tooltip.redo" + }, + "[(]": { + variants: [ + // We insert the fences as "keys" so they can be handled by smartFence. + // They will be sent via `onKeystroke` instead of inserted directly in + // the model + { latex: "\\lbrack", key: "[" }, + "\\langle", + "\\lfloor", + "\\lceil", + { latex: "\\lbrace", key: "{" } + ], + key: "(", + label: "(", + shift: { label: "[", key: "[" }, + class: "hide-shift" + }, + "[)]": { + variants: [ + { latex: "\\rbrack", key: "]" }, + "\\rangle", + "\\rfloor", + "\\rceil", + { latex: "\\rbrace", key: "}" } + ], + key: ")", + label: ")", + shift: { label: "]", latex: "\\rbrack" }, + class: "hide-shift" + }, + "[0]": { + variants: "0", + latex: "0", + label: "0", + shift: "\\infty", + class: "hide-shift" + }, + "[1]": { + variants: "1", + latex: "1", + label: "1", + shift: "#@^{-1}", + class: "hide-shift" + }, + "[2]": { + variants: "2", + latex: "2", + label: "2", + shift: "#@^2", + class: "hide-shift" + }, + "[3]": { + variants: "3", + latex: "3", + label: "3", + shift: "#@^3", + class: "hide-shift" + }, + "[4]": { + variants: "4", + latex: "4", + label: "4", + shift: "#@^4", + class: "hide-shift" + }, + "[5]": { + variants: "5", + latex: "5", + label: "5", + shift: "#@^5", + class: "hide-shift" + }, + "[6]": { + variants: "6", + latex: "6", + label: "6", + shift: "#@^6", + class: "hide-shift" + }, + "[7]": { + variants: "7", + latex: "7", + label: "7", + shift: "#@^7", + class: "hide-shift" + }, + "[8]": { + variants: "8", + latex: "8", + label: "8", + shift: "#@^8", + class: "hide-shift" + }, + "[9]": { + variants: "9", + latex: "9", + label: "9", + shift: "#@^9", + class: "hide-shift" + }, + "[separator-5]": { class: "separator", width: 0.5 }, + "[separator]": { class: "separator" }, + "[separator-10]": { class: "separator" }, + "[separator-15]": { class: "separator", width: 1.5 }, + "[separator-20]": { class: "separator", width: 2 }, + "[separator-50]": { class: "separator", width: 5 }, + "[shift]": { + class: "shift bottom left", + width: 1.5, + label: "" + }, + "[foreground-color]": { + variants: "foreground-color", + command: ["applyStyle", { color: "red" }], + label: "" + }, + "[background-color]": { + variants: "background-color", + command: ["applyStyle", { backgroundColor: "yellow" }], + label: "" + } + }; + function normalizeKeycap(keycap) { + var _a3; + if (typeof keycap === "string") { + if (keycap === "[.]" && globalThis.MathfieldElement.decimalSeparator === ",") + keycap = "[,]"; + if (!KEYCAP_SHORTCUTS[keycap]) return { latex: keycap }; + keycap = { label: keycap }; + } + let shortcut = void 0; + if ("label" in keycap && keycap.label && KEYCAP_SHORTCUTS[keycap.label]) { + shortcut = __spreadProps(__spreadValues(__spreadValues({}, KEYCAP_SHORTCUTS[keycap.label]), keycap), { + label: KEYCAP_SHORTCUTS[keycap.label].label + }); + } + if ("key" in keycap && keycap.key && KEYCAP_SHORTCUTS[keycap.key]) { + shortcut = __spreadProps(__spreadValues(__spreadValues({}, KEYCAP_SHORTCUTS[keycap.key]), keycap), { + key: KEYCAP_SHORTCUTS[keycap.key].key + }); + } + if (!shortcut) return keycap; + if (shortcut.command === "insertDecimalSeparator") + shortcut.label = (_a3 = globalThis.MathfieldElement.decimalSeparator) != null ? _a3 : "."; + if (shortcut.tooltip === void 0 || shortcut.tooltip === null || shortcut.tooltip === false) + delete shortcut.tooltip; + if (shortcut.tooltip === void 0 || shortcut.tooltip === null || shortcut.tooltip === false) + delete shortcut.tooltip; + if (shortcut.aside === void 0 || shortcut.aside === null || shortcut.aside === false) + delete shortcut.aside; + if (shortcut.variants === void 0 || shortcut.variants === null || shortcut.variants === false) + delete shortcut.variants; + if (shortcut.shift === void 0 || shortcut.shift === null || shortcut.shift === false) + delete shortcut.shift; + return shortcut; + } + var pressAndHoldTimer; + function handlePointerDown(ev) { + var _a3, _b3, _c2, _d2; + if (ev.button !== 0) return; + const keyboard = VirtualKeyboard.singleton; + if (!keyboard) return; + let layerButton = ev.target; + while (layerButton && !layerButton.getAttribute("data-layer")) + layerButton = layerButton.parentElement; + if (layerButton) { + keyboard.currentLayer = (_a3 = layerButton.getAttribute("data-layer")) != null ? _a3 : ""; + ev.preventDefault(); + return; + } + const target = parentKeycap(ev.target); + if (!(target == null ? void 0 : target.id)) return; + const keycap = keyboard.getKeycap(target.id); + if (!keycap) return; + console.assert(ev.type === "pointerdown"); + const vk = keyboard; + if (!vk.connectedMathfieldWindow) { + const focusedMf = (_b3 = window.focusedMathfield) == null ? void 0 : _b3.call(window); + if (focusedMf) { + const mfWindow = (_d2 = (_c2 = focusedMf.element) == null ? void 0 : _c2.ownerDocument) == null ? void 0 : _d2.defaultView; + if (mfWindow && mfWindow !== window) + vk.connectedMathfieldWindow = mfWindow; + } + } + const controller = new AbortController(); + const signal = controller.signal; + target.classList.add("is-pressed"); + target.addEventListener( + "pointerenter", + handleVirtualKeyboardEvent(controller), + { capture: true, signal } + ); + target.addEventListener( + "pointerleave", + handleVirtualKeyboardEvent(controller), + { capture: true, signal } + ); + target.addEventListener( + "pointercancel", + handleVirtualKeyboardEvent(controller), + { signal } + ); + target.addEventListener("pointerup", handleVirtualKeyboardEvent(controller), { + signal + }); + if (isShiftKey(keycap)) { + target.classList.add("is-active"); + keyboard.shiftPressCount++; + } + if (keycap.variants) { + if (pressAndHoldTimer) clearTimeout(pressAndHoldTimer); + pressAndHoldTimer = setTimeout( + () => { + if (target.classList.contains("is-pressed")) { + target.classList.remove("is-pressed"); + target.classList.add("is-active"); + if (ev.target && "releasePointerCapture" in ev.target) + ev.target.releasePointerCapture(ev.pointerId); + showVariantsPanel(target, () => { + controller.abort(); + target == null ? void 0 : target.classList.remove("is-active"); + }); + } + }, + keycap.stickyVariantPanel ? 0 : 300 + ); + } + ev.preventDefault(); + } + function handleVirtualKeyboardEvent(controller) { + return (ev) => { + const target = parentKeycap(ev.target); + if (!(target == null ? void 0 : target.id)) return; + const keyboard = VirtualKeyboard.singleton; + if (!keyboard) return; + const keycap = keyboard.getKeycap(target.id); + if (!keycap) return; + if (ev.type === "pointerenter" && ev.target === target) { + const pev = ev; + if (pev.isPrimary) target.classList.add("is-pressed"); + } + if (ev.type === "pointercancel") { + target.classList.remove("is-pressed"); + if (isShiftKey(keycap)) { + keyboard.shiftPressCount--; + target.classList.toggle("is-active", keyboard.isShifted); + } + controller.abort(); + return; + } + if (ev.type === "pointerleave" && ev.target === target) { + target.classList.remove("is-pressed"); + if (isShiftKey(keycap)) { + keyboard.shiftPressCount--; + target.classList.toggle("is-active", keyboard.isShifted); + } + return; + } + if (ev.type === "pointerup") { + if (pressAndHoldTimer) clearTimeout(pressAndHoldTimer); + if (isShiftKey(keycap)) { + target.classList.toggle("is-active", keyboard.isShifted); + } else if (target.classList.contains("is-pressed")) { + target.classList.remove("is-pressed"); + if (keyboard.isShifted && keycap.shift) { + if (typeof keycap.shift === "string") { + keyboard.executeCommand([ + "insert", + keycap.shift, + { + focus: true, + feedback: true, + scrollIntoView: true, + mode: "math", + format: "latex" + } + ]); + } else executeKeycapCommand(keycap.shift); + } else executeKeycapCommand(keycap); + if (keyboard.shiftPressCount === 1 && !ev.shiftKey) + keyboard.shiftPressCount = 0; + } + controller.abort(); + ev.preventDefault(); + return; + } + }; + } + function executeKeycapCommand(keycap) { + let command = keycap.command; + if (!command && keycap.insert) { + command = [ + "insert", + keycap.insert, + { + focus: true, + feedback: true, + scrollIntoView: true, + mode: "math", + format: "latex" + } + ]; + } + if (!command && keycap.key) { + command = [ + "typedText", + keycap.key, + { focus: true, feedback: true, simulateKeystroke: true } + ]; + } + if (!command && keycap.latex) { + command = [ + "insert", + keycap.latex, + { + focus: true, + feedback: true, + scrollIntoView: true, + mode: "math", + format: "latex" + } + ]; + } + if (!command) { + command = [ + "typedText", + keycap.label, + { focus: true, feedback: true, simulateKeystroke: true } + ]; + } + if (VirtualKeyboard.singleton) + VirtualKeyboard.singleton.executeCommand(command); + } + function isKeycapElement(el) { + if (el.nodeType !== 1) return false; + const classes = el.classList; + return classes.contains("MLK__keycap") || classes.contains("shift") || classes.contains("action") || classes.contains("fnbutton") || classes.contains("bigfnbutton"); + } + function parentKeycap(el) { + if (!el) return void 0; + let node = el; + while (node && !isKeycapElement(node)) node = node.parentElement; + return node != null ? node : void 0; + } + function isShiftKey(k) { + return !!k.class && /(^|\s)shift($|\s)/.test(k.class); + } + + // src/virtual-keyboard/virtual-keyboard.ts + var VirtualKeyboard = class _VirtualKeyboard { + constructor() { + this.originalContainerBottomPadding = null; + this.keycapRegistry = {}; + /** + * `0`: not pressed + * `1`: Shift is locked for next char only + * `2`: Shift is locked for all characters + */ + this._shiftPressCount = 0; + this.isSandbox = false; + var _a3; + this.targetOrigin = window.origin; + this.originValidator = "none"; + this._alphabeticLayout = "auto"; + this._layouts = Object.freeze(["default"]); + this._editToolbar = "default"; + this._container = void 0; + this._visible = false; + this._rebuilding = false; + this.observer = new ResizeObserver((_entries) => { + this.adjustBoundingRect(); + this.dispatchEvent(new Event("geometrychange")); + this.sendMessage("geometry-changed", { boundingRect: this.boundingRect }); + }); + this.listeners = {}; + try { + (_a3 = window.top) == null ? void 0 : _a3.addEventListener("message", this); + } catch (e) { + window.addEventListener("message", this); + } + if (isTouchCapable()) { + document.addEventListener("focusin", (event) => { + const target = event.target; + if (!(target == null ? void 0 : target.isConnected)) return; + setTimeout(() => { + const mf = focusedMathfield(); + if (!mf) return; + if (mf.mathVirtualKeyboardPolicy === "auto" && mf.hasEditableContent) + this.show({ animate: true }); + }, 300); + }); + } + document.addEventListener("focusout", (evt) => { + if (!(evt.target instanceof MathfieldElement)) return; + if (evt.target.mathVirtualKeyboardPolicy !== "manual") { + setTimeout(() => { + if (!focusedMathfield()) this.hide(); + }, 300); + } + }); + } + get currentLayer() { + var _a3, _b3, _c2; + return (_c2 = (_b3 = (_a3 = this._element) == null ? void 0 : _a3.querySelector(".MLK__layer.is-visible")) == null ? void 0 : _b3.id) != null ? _c2 : ""; + } + set currentLayer(id) { + var _a3; + if (!this._element) { + this.latentLayer = id; + return; + } + let newActive = id ? this._element.querySelector(`#${id}.MLK__layer`) : null; + if (!newActive) newActive = this._element.querySelector(".MLK__layer"); + if (newActive) { + (_a3 = this._element.querySelector(".MLK__layer.is-visible")) == null ? void 0 : _a3.classList.remove("is-visible"); + newActive.classList.add("is-visible"); + } + this.render(); + } + get shiftPressCount() { + return this._shiftPressCount; + } + set shiftPressCount(count) { + var _a3; + this._shiftPressCount = count > 2 || count < 0 ? 0 : count; + (_a3 = this._element) == null ? void 0 : _a3.classList.toggle("is-caps-lock", this.shiftPressCount === 2); + this.render(); + } + get isShifted() { + return this._shiftPressCount > 0; + } + resetKeycapRegistry() { + this.keycapRegistry = {}; + } + registerKeycap(keycap) { + const id = "ML__k" + Date.now().toString(36).slice(-2) + Math.floor(Math.random() * 1e5).toString(36); + this.keycapRegistry[id] = keycap; + return id; + } + setKeycap(keycap, value) { + KEYCAP_SHORTCUTS[keycap] = normalizeKeycap(value); + this.rebuild(); + } + getKeycap(id) { + var _a3; + return id ? (_a3 = KEYCAP_SHORTCUTS[id]) != null ? _a3 : this.keycapRegistry[id] : void 0; + } + getLayer(id) { + const layouts = this.normalizedLayouts; + for (const layout of layouts) + for (const layer of layout.layers) if (layer.id === id) return layer; + return void 0; + } + get alphabeticLayout() { + return this._alphabeticLayout; + } + set alphabeticLayout(value) { + this._alphabeticLayout = value; + this._normalizedLayouts = void 0; + this.rebuild(); + } + get layouts() { + return this._layouts; + } + set layouts(value) { + this.updateNormalizedLayouts(value); + this.rebuild(); + } + updateNormalizedLayouts(value) { + const layouts = Array.isArray(value) ? [...value] : [value]; + const defaultIndex = layouts.findIndex((x) => x === "default"); + if (defaultIndex >= 0) { + layouts.splice( + defaultIndex, + 1, + "numeric", + "symbols", + "alphabetic", + "greek" + ); + } + this._layouts = Object.freeze(layouts); + this._normalizedLayouts = layouts.map((x) => normalizeLayout(x)); + } + get normalizedLayouts() { + if (!this._normalizedLayouts) this.updateNormalizedLayouts(this._layouts); + return this._normalizedLayouts; + } + get editToolbar() { + return this._editToolbar; + } + set editToolbar(value) { + this._editToolbar = value; + this.rebuild(); + } + get container() { + if (this._container === void 0) return window.document.body; + return this._container; + } + set container(value) { + this._container = value; + this.rebuild(); + } + static get singleton() { + if (this._singleton === void 0) { + try { + this._singleton = new _VirtualKeyboard(); + } catch (e) { + this._singleton = null; + } + } + return this._singleton; + } + get style() { + return this._style; + } + addEventListener(type, callback, _options) { + if (!this.listeners[type]) this.listeners[type] = /* @__PURE__ */ new Set(); + if (!this.listeners[type].has(callback)) this.listeners[type].add(callback); + } + dispatchEvent(event) { + if (!this.listeners[event.type] || this.listeners[event.type].size === 0) + return true; + this.listeners[event.type].forEach((x) => { + if (typeof x === "function") x(event); + else x == null ? void 0 : x.handleEvent(event); + }); + return !event.defaultPrevented; + } + removeEventListener(type, callback, _options) { + if (this.listeners[type]) this.listeners[type].delete(callback); + } + get element() { + return this._element; + } + set element(val) { + var _a3; + if (this._element === val) return; + (_a3 = this._element) == null ? void 0 : _a3.remove(); + this._element = val; + } + get visible() { + return this._visible; + } + set visible(val) { + if (val) this.show(); + else this.hide(); + } + get boundingRect() { + var _a3; + if (!this._visible) return new DOMRect(); + const plate = (_a3 = this._element) == null ? void 0 : _a3.getElementsByClassName("MLK__plate")[0]; + if (plate) return plate.getBoundingClientRect(); + return new DOMRect(); + } + adjustBoundingRect() { + if (!this._element) return; + const h = this.boundingRect.height; + if (this.container === document.body) { + this._element.style.setProperty( + "--_keyboard-height", + `calc(${h}px + var(--_padding-top) + var(--_padding-bottom))` + ); + const keyboardHeight = h - 1; + this.container.style.paddingBottom = this.originalContainerBottomPadding ? `calc(${this.originalContainerBottomPadding} + ${keyboardHeight}px)` : `${keyboardHeight}px`; + } else this._element.style.setProperty("--_keyboard-height", `${h}px`); + } + // adjustBoundingRect(): void { + // if (!this._element) return; + // // Adjust the keyboard height + // const h = this.boundingRect.height; + // if (this.container !== document.body) { + // // We don't adjust the padding bottom if the container is not the body + // this._element.style.setProperty('--_keyboard-height', `${h}px`); + // return; + // } + // this._element.style.setProperty( + // '--_keyboard-height', + // `calc(${h}px + var(--_padding-top) + var(--_padding-bottom) + env(safe-area-inset-bottom, 0))` + // ); + // const keyboardHeight = `${h - 1}px + var(--_padding-top) + var(--_padding-bottom) + env(safe-area-inset-bottom, 0)`; + // document.body.style.paddingBottom = this.originalContainerBottomPadding + // ? `calc(${this.originalContainerBottomPadding} + ${keyboardHeight})` + // : `calc(${keyboardHeight})`; + // } + rebuild() { + if (this._rebuilding || !this._element) return; + this._rebuilding = true; + const currentLayerId = this.currentLayer; + requestAnimationFrame(() => { + this._rebuilding = false; + if (this._element) { + this._element.remove(); + this._element = void 0; + } + if (this.visible) { + this.buildAndAttachElement(); + this.currentLayer = currentLayerId; + this.render(); + this.adjustBoundingRect(); + this._element.classList.add("is-visible"); + } + }); + } + /** Update the keycaps to account for the current state */ + render() { + var _a3; + if (!this._element) return; + const layer = this.getLayer(this.currentLayer); + this._element.classList.toggle( + "backdrop-is-transparent", + Boolean(layer && (layer.backdrop || layer.container)) + ); + const keycaps = this._element.querySelectorAll( + ".MLK__layer.is-visible .MLK__keycap, .MLK__layer.is-visible .action, .fnbutton, .MLK__layer.is-visible .bigfnbutton, .MLK__layer.is-visible .shift" + ); + if (!keycaps) return; + const shifted = this.isShifted; + for (const keycapElement of keycaps) { + const keycap = this.getKeycap(keycapElement.id); + if (keycap) { + const [markup, cls] = renderKeycap(keycap, { shifted }); + keycapElement.innerHTML = globalThis.MathfieldElement.createHTML(markup); + keycapElement.className = cls; + if (shifted && typeof keycap.shift === "object" && ((_a3 = keycap.shift) == null ? void 0 : _a3.tooltip)) + keycapElement.dataset.tooltip = keycap.shift.tooltip; + else if (!shifted && keycap.tooltip) + keycapElement.dataset.tooltip = keycap.tooltip; + } + } + } + show(options) { + var _a3; + if (this._visible) return; + const container = this.container; + if (!container) return; + if (!window.mathVirtualKeyboard) return; + if (!this.stateWillChange(true)) return; + if (!this._element) { + this.buildAndAttachElement(); + this.adjustBoundingRect(); + } + if (!this._visible) { + const plate = this._element.getElementsByClassName( + "MLK__plate" + )[0]; + if (plate) this.observer.observe(plate); + if (container === window.document.body) { + const padding2 = container.style.paddingBottom; + this.originalContainerBottomPadding = padding2; + const keyboardHeight = plate.offsetHeight - 1; + container.style.paddingBottom = padding2 ? `calc(${padding2} + ${keyboardHeight}px)` : `${keyboardHeight}px`; + } + window.addEventListener("mouseup", this); + window.addEventListener("blur", this); + window.addEventListener("keydown", this, { capture: true }); + window.addEventListener("keyup", this, { capture: true }); + (_a3 = this._element) == null ? void 0 : _a3.classList.toggle( + "is-caps-lock", + this.shiftPressCount === 2 + ); + this.currentLayer = this.latentLayer; + } + this._visible = true; + if (options == null ? void 0 : options.animate) { + requestAnimationFrame(() => { + if (this._element) { + this._element.classList.add("animate"); + this._element.addEventListener( + "transitionend", + () => { + var _a4; + return (_a4 = this._element) == null ? void 0 : _a4.classList.remove("animate"); + }, + { once: true } + ); + this._element.classList.add("is-visible"); + this.stateChanged(); + } + }); + } else { + this._element.classList.add("is-visible"); + this.stateChanged(); + } + } + hide(_options) { + var _a3; + const container = this.container; + if (!container) return; + if (!this._visible) return; + if (!this.stateWillChange(false)) return; + this._visible = false; + if (this._element) { + this.latentLayer = this.currentLayer; + const plate = this._element.getElementsByClassName("MLK__plate")[0]; + if (plate) this.observer.unobserve(plate); + window.removeEventListener("mouseup", this); + window.removeEventListener("blur", this); + window.removeEventListener("keydown", this, { capture: true }); + window.removeEventListener("keyup", this, { capture: true }); + window.removeEventListener("contextmenu", this, { capture: true }); + hideVariantsPanel(); + releaseStylesheets(); + (_a3 = this._element) == null ? void 0 : _a3.remove(); + this._element = void 0; + if (this.originalContainerBottomPadding !== null) + container.style.paddingBottom = this.originalContainerBottomPadding; + } + this.stateChanged(); + } + get height() { + var _a3, _b3; + return (_b3 = (_a3 = this.element) == null ? void 0 : _a3.offsetHeight) != null ? _b3 : 0; + } + buildAndAttachElement() { + var _a3; + console.assert(!this.element); + this.element = makeKeyboardElement(this); + window.addEventListener("contextmenu", this, { capture: true }); + this.element.addEventListener( + "contextmenu", + (ev) => { + if (!ev.shiftKey) { + if (ev.ctrlKey || ev.button === 2) + showVariantsPanel(ev.target); + ev.preventDefault(); + ev.stopPropagation(); + } + }, + { capture: true } + ); + (_a3 = this.container) == null ? void 0 : _a3.appendChild(this.element); + } + handleEvent(evt) { + if (isVirtualKeyboardMessage(evt)) { + if (!validateOrigin(evt.origin, this.originValidator)) { + throw new DOMException( + `Message from unknown origin (${evt.origin}) cannot be handled`, + "SecurityError" + ); + } + if (evt.data.action === "disconnect") { + if (this._visible) return; + this.connectedMathfieldWindow = void 0; + } else if (evt.data.action !== "update-setting" && evt.data.action !== "proxy-created" && evt.data.action !== "execute-command") { + console.assert(evt.source !== void 0); + this.connectedMathfieldWindow = evt.source; + } + this.handleMessage(evt.data, evt.source); + } + if (!this._element) return; + switch (evt.type) { + case "mouseup": + case "blur": + document.body.style.userSelect = ""; + this.shiftPressCount = 0; + break; + case "contextmenu": + if (evt.button !== 2) evt.preventDefault(); + break; + case "keydown": { + if (evt.key === "Shift" && !evt.repeat) this.shiftPressCount = 1; + break; + } + case "keyup": { + if (evt.key === "Shift" || !evt.getModifierState("Shift") && this.shiftPressCount !== 2) + this.shiftPressCount = 0; + break; + } + } + } + handleMessage(msg, source) { + const { action } = msg; + if (action === "execute-command") { + const { command } = msg; + const commandTarget = getCommandTarget(command); + if (window === window.top && source !== window) return; + if (source === window && commandTarget !== "virtual-keyboard") return; + this.executeCommand(command); + return; + } + if (action === "connect" || action === "show") { + this.sendMessage( + "synchronize-proxy", + { + boundingRect: this.boundingRect, + alphabeticLayout: this._alphabeticLayout, + layouts: this._layouts, + editToolbar: this._editToolbar + }, + source + ); + } + if (action === "disconnect") return; + if (this.isSandbox) return; + if (action === "show") { + if (typeof msg.animate !== "undefined") + this.show({ animate: msg.animate }); + else this.show(); + return; + } + if (action === "hide") { + if (typeof msg.animate !== "undefined") + this.hide({ animate: msg.animate }); + else this.hide(); + return; + } + if (action === "update-setting") { + if (msg.alphabeticLayout) this.alphabeticLayout = msg.alphabeticLayout; + if (msg.layouts) this.layouts = msg.layouts; + if (msg.editToolbar) this.editToolbar = msg.editToolbar; + if (msg.setKeycap) { + const { keycap, value } = msg.setKeycap; + this.setKeycap(keycap, value); + this.render(); + } + return; + } + if (action === "proxy-created") { + this.sendMessage( + "synchronize-proxy", + { + boundingRect: this.boundingRect, + alphabeticLayout: this._alphabeticLayout, + layouts: this._layouts, + editToolbar: this._editToolbar + }, + source + ); + return; + } + } + sendMessage(action, payload, target) { + if (payload.command) { + this.dispatchEvent( + new CustomEvent("math-virtual-keyboard-command", { + detail: payload.command + }) + ); + } + if (!target) target = this.connectedMathfieldWindow; + if (this.targetOrigin === null || this.targetOrigin === "null" || target === window) { + window.dispatchEvent( + new MessageEvent("message", { + source: window, + origin: window.origin, + data: __spreadValues({ + type: VIRTUAL_KEYBOARD_MESSAGE, + action + }, payload) + }) + ); + return; + } + if (target) { + target.postMessage( + __spreadValues({ + type: VIRTUAL_KEYBOARD_MESSAGE, + action + }, payload), + { targetOrigin: this.targetOrigin } + ); + } else { + if (action === "execute-command" && Array.isArray(payload.command) && payload.command[0] === "insert") { + const s = payload.command[1].split(""); + for (const c of s) { + this.dispatchEvent( + new KeyboardEvent("keydown", { key: c, bubbles: true }) + ); + this.dispatchEvent( + new KeyboardEvent("keyup", { key: c, bubbles: true }) + ); + } + } + } + } + stateWillChange(visible) { + const success = this.dispatchEvent( + new CustomEvent("before-virtual-keyboard-toggle", { + detail: { visible }, + bubbles: true, + cancelable: true, + composed: true + }) + ); + return success; + } + stateChanged() { + this.dispatchEvent(new Event("virtual-keyboard-toggle")); + if (!this._visible) { + this.dispatchEvent(new Event("geometrychange")); + this.sendMessage("geometry-changed", { + boundingRect: this.boundingRect + }); + } + } + /** + * @category Focus + */ + focus() { + this.sendMessage("focus", {}); + } + /** + * @category Focus + */ + blur() { + this.sendMessage("blur", {}); + } + updateToolbar(mf) { + const el = this._element; + if (!el) return; + el.classList.toggle("is-math-mode", mf.mode === "math"); + el.classList.toggle("is-text-mode", mf.mode === "text"); + el.classList.toggle("can-undo", mf.canUndo); + el.classList.toggle("can-redo", mf.canRedo); + el.classList.toggle("can-copy", !mf.selectionIsCollapsed); + el.classList.toggle("can-cut", !mf.selectionIsCollapsed); + el.classList.toggle("can-paste", true); + const toolbars = el.querySelectorAll(".ML__edit-toolbar"); + if (!toolbars) return; + for (const toolbar of toolbars) + toolbar.innerHTML = makeEditToolbar(this, mf); + } + update(mf) { + this._style = mf.style; + this.updateToolbar(mf); + } + connect() { + this.connectedMathfieldWindow = window; + } + disconnect() { + if (this._visible) return; + this.connectedMathfieldWindow = void 0; + } + executeCommand(command) { + command = parseCommand(command); + if (!command) return false; + let selector; + let args = []; + let target = getCommandTarget(command); + if (isArray(command)) { + selector = command[0]; + if (selector === "performWithFeedback") { + target = getCommandTarget( + command.slice(1) + ); + } + args = command.slice(1); + } else selector = command; + if (target === "virtual-keyboard") + return COMMANDS[selector].fn(void 0, ...args); + this.sendMessage("execute-command", { command }); + return false; + } + dispose() { + window.removeEventListener("mouseup", this); + window.removeEventListener("blur", this); + window.removeEventListener("message", this); + } + }; + function focusedMathfield() { + let target = deepActiveElement(); + let mf = null; + while (target) { + if ("host" in target && target.host instanceof MathfieldElement) { + mf = target.host; + break; + } + target = target.parentNode; + } + return mf; + } + + // src/virtual-keyboard/global.ts + if (isBrowser() && !("mathVirtualKeyboard" in window)) { + if (window === window["top"]) { + mountMathVirtualKeyboard(); + } else { + Object.defineProperty(window, "mathVirtualKeyboard", { + get: () => VirtualKeyboardProxy.singleton, + configurable: true + }); + } + } + function mountMathVirtualKeyboard() { + const kbd = VirtualKeyboard.singleton; + if (window.mathVirtualKeyboard !== kbd) { + Object.defineProperty(window, "mathVirtualKeyboard", { + get: () => kbd + }); + } + return kbd; + } + + // src/editor-mathfield/options.ts + function update(updates) { + const result = {}; + for (const key of Object.keys(updates)) { + switch (key) { + case "scriptDepth": + const scriptDepth = updates.scriptDepth; + if (isArray(scriptDepth)) + result.scriptDepth = [scriptDepth[0], scriptDepth[1]]; + else if (typeof scriptDepth === "number") + result.scriptDepth = [scriptDepth, scriptDepth]; + else if (typeof scriptDepth === "string") { + const [from, to] = scriptDepth.split(",").map((x) => parseInt(x.trim())); + result.scriptDepth = [from, to]; + } else throw new TypeError("Unexpected value for scriptDepth"); + break; + case "mathVirtualKeyboardPolicy": + let keyboardPolicy = updates.mathVirtualKeyboardPolicy.toLowerCase(); + if (keyboardPolicy === "sandboxed") { + const kbd = mountMathVirtualKeyboard(); + if (kbd) kbd.isSandbox = true; + keyboardPolicy = "manual"; + } + result.mathVirtualKeyboardPolicy = keyboardPolicy; + break; + case "letterShapeStyle": + if (updates.letterShapeStyle === "auto") { + if (l10n.locale.startsWith("fr")) result.letterShapeStyle = "french"; + else result.letterShapeStyle = "tex"; + } else result.letterShapeStyle = updates.letterShapeStyle; + break; + case "defaultMode": + if (!["text", "free-text", "free-math", "math", "inline-math"].includes( + updates.defaultMode + )) { + console.error( + `MathLive {{SDK_VERSION}}: valid values for defaultMode are "text", "free-text", "free-math", "math" or "inline-math"` + ); + result.defaultMode = "math"; + } else result.defaultMode = updates.defaultMode; + break; + case "macros": + result.macros = normalizeMacroDictionary(updates.macros); + break; + default: + if (isArray(updates[key])) result[key] = [...updates[key]]; + else if (typeof updates[key] === "object" && !(updates[key] instanceof Element) && key !== "computeEngine") + result[key] = __spreadValues({}, updates[key]); + else result[key] = updates[key]; + } + } + return result; + } + function get(config, keys) { + let resolvedKeys; + if (typeof keys === "string") resolvedKeys = [keys]; + else if (keys === void 0) resolvedKeys = Object.keys(config); + else resolvedKeys = keys; + const result = {}; + for (const x of resolvedKeys) { + if (config[x] === null) result[x] = null; + else if (isArray(config[x])) result[x] = [...config[x]]; + else if (typeof config[x] === "object" && !(config[x] instanceof Element) && x !== "computeEngine") { + result[x] = __spreadValues({}, config[x]); + } else result[x] = config[x]; + } + if (typeof keys === "string") return result[keys]; + return result; + } + function getDefault() { + return { + readOnly: false, + defaultMode: "math", + macros: {}, + registers: {}, + colorMap: defaultColorMap, + backgroundColorMap: defaultBackgroundColorMap, + letterShapeStyle: l10n.locale.startsWith("fr") ? "french" : "tex", + minFontScale: 0, + maxMatrixCols: 10, + smartMode: false, + smartFence: true, + smartSuperscript: true, + scriptDepth: [Infinity, Infinity], + removeExtraneousParentheses: true, + isImplicitFunction: (x) => [ + "\\sin", + "\\cos", + "\\tan", + "\\arcsin", + "\\arccos", + "\\arctan", + "\\arcsec", + "\\arccsc", + "\\arsinh", + "\\arcosh", + "\\artanh", + "\\arcsech", + "\\arccsch", + "\\arg", + "\\ch", + "\\cosec", + "\\cosh", + "\\cot", + "\\cotg", + "\\coth", + "\\csc", + "\\ctg", + "\\cth", + "\\sec", + "\\sinh", + "\\sh", + "\\tanh", + "\\tg", + "\\th", + "\\lg", + "\\lb", + "\\log", + "\\ln" + ].includes(x), + mathModeSpace: "", + placeholderSymbol: "\u25A2", + contentPlaceholder: "", + popoverPolicy: "auto", + environmentPopoverPolicy: "off", + keybindings: DEFAULT_KEYBINDINGS, + inlineShortcuts: INLINE_SHORTCUTS, + inlineShortcutTimeout: 0, + mathVirtualKeyboardPolicy: "auto", + originValidator: "none", + onInsertStyle: defaultInsertStyleHook, + onInlineShortcut: () => "", + onScrollIntoView: null, + onExport: defaultExportHook, + value: "" + }; + } + function effectiveMode(options) { + if (options.defaultMode === "inline-math") return "math"; + return options.defaultMode; + } + + // src/editor-model/composition.ts + function updateComposition(model, s) { + const cursor = model.at(model.position); + if (cursor.type === "composition") { + cursor.value = s; + } else { + const { caret } = cursor; + cursor.caret = void 0; + const atom = new CompositionAtom(s, { mode: cursor.mode }); + atom.caret = caret; + cursor.parent.addChildAfter(atom, cursor); + model.position += 1; + } + } + function removeComposition(model) { + const cursor = model.at(model.position); + if (cursor.type === "composition") { + cursor.parent.removeChild(cursor); + model.position -= 1; + } + } + + // src/editor-model/array.ts + function cellSiblings(model) { + let atom = model.at(model.position); + while (atom && !isCellBranch(atom.parentBranch)) atom = atom.parent; + return [atom.firstSibling, atom.lastSibling]; + } + function parentArray(model, where) { + let atom = model.at(model.position); + while (atom && !(atom.parent instanceof ArrayAtom)) atom = atom.parent; + if ((atom == null ? void 0 : atom.type) === "array") { + const array = atom; + if (array.environmentName === "lines") { + } + } + if (!atom || !(atom.parent instanceof ArrayAtom)) { + const cursor = model.at(model.position); + atom = cursor; + if (!atom.parent.parent) { + let secondCell = model.extractAtoms([model.position, model.lastOffset]); + let firstCell = model.extractAtoms([0, model.position]); + let array; + if (where.endsWith("column")) { + if (firstCell.length === 0) firstCell = placeholderCell(); + if (secondCell.length === 0) secondCell = placeholderCell(); + array = makeEnvironment("split", [[firstCell, secondCell]]); + model.root = array; + if (isPlaceholderCell(array, 0, 0)) selectCell(model, array, 0, 0); + else if (isPlaceholderCell(array, 0, 1)) selectCell(model, array, 0, 1); + else model.position = model.offsetOf(cursor); + } else { + array = makeEnvironment("lines", [[firstCell], [secondCell]]); + model.root = array; + selectCell(model, array, 1, 0); + } + return [void 0, [0, 0]]; + } + if (atom.parent instanceof LeftRightAtom) { + const parent = atom.parent; + let secondCell = model.extractAtoms([ + model.position, + model.offsetOf(parent.lastChild) + ]); + let firstCell = model.extractAtoms([ + model.offsetOf(parent.firstChild), + model.position + ]); + if (firstCell.length === 0) firstCell = placeholderCell(); + if (secondCell.length === 0) secondCell = placeholderCell(); + let envName = "pmatrix"; + const lDelim = parent.leftDelim; + const rDelim = parent.rightDelim; + if (lDelim === "(" && (rDelim === ")" || rDelim === "?")) + envName = "pmatrix"; + else if ((lDelim === "[" || lDelim === "\\lbrack") && (rDelim === "]" || rDelim === "\\rbrack" || rDelim === "?")) + envName = "bmatrix"; + else if (lDelim === "\\vert" && rDelim === "\\vert") envName = "vmatrix"; + else if (lDelim === "\\Vert" && rDelim === "\\Vert") envName = "Vmatrix"; + else if ((lDelim === "{" || lDelim === "\\lbrace") && (rDelim === "." || rDelim === "?")) + envName = "cases"; + const array = makeEnvironment( + envName, + where.endsWith("column") ? [[firstCell, secondCell]] : [[firstCell], [secondCell]] + ); + parent.parent.addChildBefore(array, parent); + parent.parent.removeChild(parent); + if (isPlaceholderCell(array, 0, 0)) selectCell(model, array, 0, 0); + else if (where.endsWith("column")) { + if (isPlaceholderCell(array, 0, 1)) selectCell(model, array, 0, 1); + else model.position = model.offsetOf(atom); + } else { + if (isPlaceholderCell(array, 1, 0)) selectCell(model, array, 1, 0); + else model.position = model.offsetOf(atom); + } + return [void 0, [0, 0]]; + } + } + return atom && atom.parent instanceof ArrayAtom ? [atom.parent, atom.parentBranch] : [void 0, [0, 0]]; + } + function isPlaceholderCell(array, row, column) { + const cell = array.getCell(row, column); + if ((cell == null ? void 0 : cell.length) !== 2) return false; + return cell[1].type === "placeholder"; + } + function cellRange(model, array, row, column) { + const cell = array.getCell(row, column); + if (!cell) return -1; + return [model.offsetOf(cell[0]), model.offsetOf(cell[cell.length - 1])]; + } + function selectCell(model, array, row, column) { + const range2 = cellRange(model, array, row, column); + if (typeof range2 !== "number") model.setSelection(range2); + } + function setPositionInCell(model, array, row, column, pos) { + const cell = array.getCell(row, column); + if (!cell) return; + model.setPositionHandlingPlaceholder( + model.offsetOf(cell[pos === "start" ? 0 : cell.length - 1]) + ); + } + function addCell(model, where) { + const [arrayAtom, [row, column]] = parentArray(model, where); + if (!arrayAtom) return; + switch (where) { + case "after row": + arrayAtom.addRowAfter(row); + setPositionInCell(model, arrayAtom, row + 1, 0, "end"); + break; + case "after column": + if (arrayAtom.maxColumns <= arrayAtom.colCount) { + model.announce("plonk"); + return; + } + arrayAtom.addColumnAfter(column); + setPositionInCell(model, arrayAtom, row, column + 1, "end"); + break; + case "before row": + arrayAtom.addRowBefore(row); + setPositionInCell(model, arrayAtom, row, 0, "start"); + break; + case "before column": + if (arrayAtom.maxColumns <= arrayAtom.colCount) { + model.announce("plonk"); + return; + } + arrayAtom.addColumnBefore(column); + setPositionInCell(model, arrayAtom, row, column, "start"); + break; + } + } + function addRowAfter(model) { + var _a3; + const cursor = model.at(model.position); + if (!isCellBranch(cursor.parentBranch) && cursor.parent !== model.root && model.root.type !== "root") { + model.announce("plonk"); + return false; + } + if (!model.contentWillChange({ inputType: "insertText" })) return false; + if ((_a3 = model.parentEnvironment) == null ? void 0 : _a3.isMultiline) { + if (!model.selectionIsCollapsed) model.deleteAtoms(range(model.selection)); + const [first, last] = cellSiblings(model); + const after = model.extractAtoms([model.position, model.offsetOf(last)]); + const before = model.extractAtoms([model.offsetOf(first), model.position]); + const array = first.parent; + const [row, col] = first.parentBranch; + array.setCell(row, col, before); + addCell(model, "after row"); + array.setCell(row + 1, col, after); + model.position = model.offsetOf(array.getCell(row + 1, col)[0]); + model.contentDidChange({ inputType: "insertText" }); + return true; + } + addCell(model, "after row"); + model.contentDidChange({ inputType: "insertText" }); + return true; + } + function addRowBefore(model) { + if (!model.contentWillChange({ inputType: "insertText" })) return false; + addCell(model, "before row"); + model.contentDidChange({ inputType: "insertText" }); + return true; + } + function addColumnAfter(model) { + if (!model.contentWillChange({ inputType: "insertText" })) return false; + addCell(model, "after column"); + model.contentDidChange({ inputType: "insertText" }); + return true; + } + function addColumnBefore(model) { + if (!model.contentWillChange({ inputType: "insertText" })) return false; + addCell(model, "before column"); + model.contentDidChange({ inputType: "insertText" }); + return true; + } + function setEnvironment(model, environment) { + if (!model.contentWillChange({})) return false; + model.mathfield.snapshot(); + let leftDelim = "."; + let rightDelim = "."; + switch (environment) { + case "pmatrix": + case "pmatrix*": + leftDelim = "("; + rightDelim = ")"; + break; + case "bmatrix": + case "bmatrix*": + leftDelim = "["; + rightDelim = "]"; + break; + case "Bmatrix": + case "Bmatrix*": + leftDelim = "\\lbrace"; + rightDelim = "\\rbrace"; + break; + case "vmatrix": + case "vmatrix*": + leftDelim = "\\vert"; + rightDelim = "\\vert"; + break; + case "Vmatrix": + case "Vmatrix*": + leftDelim = "\\Vert"; + rightDelim = "\\Vert"; + break; + case "matrix": + case "matrix*": + leftDelim = "."; + rightDelim = "."; + break; + case "cases": + case "dcases": + leftDelim = "\\lbrace"; + break; + case "rcases": + rightDelim = "\\rbrace"; + break; + } + const atom = model.at(model.position); + const arrayAtom = atom.type === "array" ? atom : model.parentEnvironment; + arrayAtom.environmentName = environment; + arrayAtom.leftDelim = leftDelim; + arrayAtom.rightDelim = rightDelim; + model.contentDidChange({}); + return true; + } + function removeCell(model, where) { + let atom = model.at(model.position); + while (atom && !(Array.isArray(atom.parentBranch) && atom.parent instanceof ArrayAtom)) + atom = atom.parent; + if (Array.isArray(atom == null ? void 0 : atom.parentBranch) && (atom == null ? void 0 : atom.parent) instanceof ArrayAtom) { + const arrayAtom = atom.parent; + const treeBranch = atom.parentBranch; + let pos; + switch (where) { + case "row": + if (arrayAtom.rowCount > 1) { + arrayAtom.removeRow(treeBranch[0]); + const cell = arrayAtom.getCell( + Math.max(0, treeBranch[0] - 1), + treeBranch[1] + ); + pos = model.offsetOf(cell[cell.length - 1]); + } + break; + case "column": + if (arrayAtom.colCount > arrayAtom.minColumns) { + arrayAtom.removeColumn(treeBranch[1]); + const cell = arrayAtom.getCell( + treeBranch[0], + Math.max(0, treeBranch[1] - 1) + ); + pos = model.offsetOf(cell[cell.length - 1]); + } + break; + } + if (pos !== void 0) model.setPositionHandlingPlaceholder(pos); + } + } + function removeRow(model) { + if (!model.contentWillChange({ inputType: "deleteContent" })) return false; + removeCell(model, "row"); + model.contentDidChange({ inputType: "deleteContent" }); + return true; + } + function removeColumn(model) { + if (!model.contentWillChange({ inputType: "deleteContent" })) return false; + removeCell(model, "column"); + model.contentDidChange({ inputType: "deleteContent" }); + return true; + } + register2( + { + addRowAfter, + addColumnAfter, + addRowBefore, + addColumnBefore, + removeRow, + removeColumn, + setEnvironment + }, + { + target: "model", + canUndo: true, + changeContent: true, + changeSelection: true + } + ); + function placeholderCell() { + return [new PlaceholderAtom()]; + } + + // src/editor/undo.ts + var _UndoManager = class _UndoManager { + constructor(model) { + this.recording = false; + this.model = model; + this.reset(); + } + reset() { + this.stack = []; + this.index = -1; + this.lastOp = ""; + } + startRecording() { + this.recording = true; + } + stopRecording() { + this.recording = false; + } + canUndo() { + return this.index - 1 >= 0; + } + canRedo() { + return this.stack.length - 1 > this.index; + } + /** Call this to stop coalescing future ops, for example when the selection + * changes + */ + stopCoalescing(selection) { + if (selection && this.index >= 0) + this.stack[this.index].selection = selection; + this.lastOp = ""; + } + undo() { + if (!this.canUndo()) return false; + const state = this.stack[this.index - 1]; + this.index -= 1; + this.lastOp = ""; + this.model.setState(state, { silenceNotifications: false, type: "undo" }); + return true; + } + redo() { + if (!this.canRedo()) return false; + const state = this.stack[this.index + 1]; + this.index += 1; + this.lastOp = ""; + this.model.setState(state, { silenceNotifications: false, type: "redo" }); + return true; + } + pop() { + if (!this.canUndo()) return; + this.stack.splice(this.index, this.stack.length - this.index); + this.index -= 1; + } + /** + * Push a snapshot of the content and selection of the mathfield onto the + * undo stack so that it can potentially be reverted to later. + * + * **Return** `true` if the undo state changed + */ + snapshot(op) { + if (!this.recording) return false; + if (op && op === this.lastOp) this.pop(); + this.stack.splice(this.index + 1, this.stack.length - this.index - 1); + this.stack.push(this.model.getState()); + this.index += 1; + if (this.stack.length > _UndoManager.maximumDepth) { + this.stack.shift(); + this.index -= 1; + } + this.lastOp = op != null ? op : ""; + return true; + } + }; + // Maximum number of undo/redo states + _UndoManager.maximumDepth = 1e3; + var UndoManager = _UndoManager; + + // src/editor-model/delete.ts + function onDelete(model, direction, atom, branch) { + var _a3, _b3, _c2, _d2, _e, _f; + const parent = atom.parent; + if (isCellBranch(branch) && atom instanceof ArrayAtom && atom.isMultiline) { + if (deleteRow(model, atom, branch[0], direction)) return true; + } + if (parent && atom instanceof LeftRightAtom) { + const atStart = !branch && direction === "forward" || branch === "body" && direction === "backward"; + let pos = atStart ? model.offsetOf(atom.firstChild) : model.offsetOf(atom.lastChild); + if (atStart) { + if (atom.rightDelim !== "?" && atom.rightDelim !== ".") { + atom.leftDelim = "."; + atom.isDirty = true; + } else { + parent.addChildrenAfter(atom.removeBranch("body"), atom); + parent.removeChild(atom); + pos--; + } + } else { + if (atom.leftDelim !== "?" && atom.leftDelim !== ".") { + atom.rightDelim = "."; + atom.isDirty = true; + } else { + parent.addChildrenAfter(atom.removeBranch("body"), atom); + parent.removeChild(atom); + pos--; + } + } + model.position = pos; + return true; + } + if (parent && atom.type === "surd") { + if (direction === "forward" && !branch || direction === "backward" && branch === "body") { + const pos = atom.leftSibling; + if (atom.hasChildren) + parent.addChildrenAfter(atom.removeBranch("body"), atom); + parent.removeChild(atom); + model.position = model.offsetOf(pos); + } else if (direction === "forward" && branch === "body") { + model.position = model.offsetOf(atom); + } else if (!branch && direction === "backward") { + if (atom.hasChildren) model.position = model.offsetOf(atom.lastChild); + else { + model.position = Math.max(0, model.offsetOf(atom) - 1); + parent.removeChild(atom); + } + } else if (branch === "above") { + if (atom.hasEmptyBranch("above")) atom.removeBranch("above"); + if (direction === "backward") { + model.position = model.offsetOf(atom.leftSibling); + } else { + model.position = model.offsetOf(atom.body[0]); + } + } + return true; + } + if (parent && (atom.type === "box" || atom.type === "enclose")) { + const pos = branch && direction === "backward" || !branch && direction === "forward" ? atom.leftSibling : atom.lastChild; + parent.addChildrenAfter(atom.removeBranch("body"), atom); + parent.removeChild(atom); + model.position = model.offsetOf(pos); + return true; + } + if (atom.type === "genfrac" || atom.type === "overunder") { + if (!branch) { + if (atom.type === "overunder" && atom.hasEmptyBranch("body")) + return false; + if (atom.type === "genfrac" && atom.hasEmptyBranch("below") && atom.hasEmptyBranch("above")) + return false; + model.position = model.offsetOf( + direction === "forward" ? atom.firstChild : atom.lastChild + ); + return true; + } + const firstBranch = MathfieldElement.fractionNavigationOrder === "numerator-denominator" ? "above" : "below"; + const secondBranch = firstBranch === "above" ? "below" : "above"; + if (parent && (direction === "forward" && branch === firstBranch || direction === "backward" && branch === secondBranch)) { + const first = atom.removeBranch(firstBranch); + const second = atom.removeBranch(secondBranch); + parent.addChildrenAfter([...first, ...second], atom); + parent.removeChild(atom); + model.position = model.offsetOf( + first.length > 0 ? first[first.length - 1] : second[0] + ); + return true; + } + if (direction === "backward") + model.position = model.offsetOf(atom.leftSibling); + else model.position = model.offsetOf(atom); + return true; + } + if (atom.type === "extensible-symbol" || atom.type === "subsup" || atom.type === "operator") { + if (!branch && direction === "forward") return false; + if (!branch) { + if (atom.subscript || atom.superscript) { + const pos = direction === "forward" ? (_c2 = (_a3 = atom.superscript) == null ? void 0 : _a3[0]) != null ? _c2 : (_b3 = atom.subscript) == null ? void 0 : _b3[0] : (_f = (_d2 = atom.subscript) == null ? void 0 : _d2[0].lastSibling) != null ? _f : (_e = atom.superscript) == null ? void 0 : _e[0].lastSibling; + if (pos) model.position = model.offsetOf(pos); + return true; + } + return false; + } + if (!atom.hasChildren && atom.type === "subsup") { + const pos = direction === "forward" ? model.offsetOf(atom) : Math.max(0, model.offsetOf(atom) - 1); + atom.parent.removeChild(atom); + model.position = pos; + return true; + } + if (branch && atom.hasEmptyBranch(branch)) { + atom.removeBranch(branch); + if (atom.type === "subsup" && !atom.subscript && !atom.superscript) { + const pos = direction === "forward" ? model.offsetOf(atom) : Math.max(0, model.offsetOf(atom) - 1); + atom.parent.removeChild(atom); + model.position = pos; + return true; + } + if (branch === "superscript" && direction === "backward") + model.position = model.offsetOf(atom.firstChild) - 1; + else if (branch === "subscript" && direction === "backward") { + if (atom.superscript) + model.position = model.offsetOf(atom.superscript[0].lastSibling); + else model.position = model.offsetOf(atom.firstChild) - 1; + } else model.position = model.offsetOf(atom); + return true; + } + if (branch === "superscript") { + if (direction === "backward") { + const pos = model.offsetOf(atom.firstChild) - 1; + console.assert(pos >= 0); + model.position = pos; + } else if (atom.subscript) + model.position = model.offsetOf(atom.subscript[0]); + else model.position = model.offsetOf(atom); + } else if (branch === "subscript") { + if (direction === "backward" && atom.superscript) { + model.position = model.offsetOf(atom.superscript[0].lastSibling); + } else if (direction === "backward") { + model.position = model.offsetOf(atom.firstChild) - 1; + } else { + model.position = model.offsetOf(atom); + } + } + return true; + } + if ((parent == null ? void 0 : parent.type) === "genfrac" && !branch && atom.type !== "first") { + let pos = model.offsetOf(atom.leftSibling); + parent.removeChild(atom); + if (parent.hasEmptyBranch("above") && parent.hasEmptyBranch("below")) { + pos = model.offsetOf(parent.leftSibling); + parent.parent.removeChild(parent); + model.announce("delete", void 0, [parent]); + model.position = pos; + return true; + } + model.announce("delete", void 0, [atom]); + model.position = pos; + return true; + } + if (direction === "backward" && ((parent == null ? void 0 : parent.command) === "\\ln" || (parent == null ? void 0 : parent.command) === "\\log") && atom.parentBranch !== "body") { + const pos = model.offsetOf(parent.leftSibling); + parent.parent.removeChild(parent); + model.announce("delete", void 0, [parent]); + model.position = pos; + return true; + } + return false; + } + function deleteBackward(model) { + if (!model.mathfield.isSelectionEditable) return false; + if (!model.contentWillChange({ inputType: "deleteContentBackward" })) + return false; + if (!model.selectionIsCollapsed) + return deleteRange(model, range(model.selection), "deleteContentBackward"); + return model.deferNotifications( + { content: true, selection: true, type: "deleteContentBackward" }, + () => { + var _a3; + let target = model.at(model.position); + if (target && onDelete(model, "backward", target)) return; + if (target == null ? void 0 : target.isFirstSibling) { + if (onDelete(model, "backward", target.parent, target.parentBranch)) + return; + target = null; + } + if (!target) { + model.announce("plonk"); + return; + } + const targetParent = target.parent; + model.position = model.offsetOf(target.leftSibling); + targetParent.removeChild(target); + model.announce("delete", void 0, [target]); + if (targetParent.type === "latexgroup" && targetParent.hasEmptyBranch("body")) { + const pos = model.offsetOf(targetParent.leftSibling); + (_a3 = targetParent.parent) == null ? void 0 : _a3.removeChild(targetParent); + model.position = Math.max(0, pos); + } + if (model.root.hasEmptyBranch("body")) + model.mathfield.flushInlineShortcutBuffer(); + } + ); + } + function deleteForward(model) { + if (!model.mathfield.isSelectionEditable) return false; + if (!model.contentWillChange({ inputType: "deleteContentForward" })) + return false; + if (!model.selectionIsCollapsed) + return deleteRange(model, range(model.selection), "deleteContentForward"); + return model.deferNotifications( + { content: true, selection: true, type: "deleteContentForward" }, + () => { + var _a3, _b3, _c2; + let target = model.at(model.position).rightSibling; + if (target && onDelete(model, "forward", target)) return; + if (!target) { + target = model.at(model.position); + if (target.isLastSibling && onDelete(model, "forward", target.parent, target.parentBranch)) + return; + target = void 0; + } else if (model.at(model.position).isLastSibling && onDelete(model, "forward", target.parent, target.parentBranch)) + return; + if (model.position === model.lastOffset || !target) { + model.announce("plonk"); + return; + } + const targetParent = target.parent; + targetParent.removeChild(target); + let sibling = (_a3 = model.at(model.position)) == null ? void 0 : _a3.rightSibling; + while ((sibling == null ? void 0 : sibling.type) === "subsup") { + sibling.parent.removeChild(sibling); + sibling = (_b3 = model.at(model.position)) == null ? void 0 : _b3.rightSibling; + } + model.announce("delete", void 0, [target]); + if (targetParent.type === "latexgroup" && targetParent.hasEmptyBranch("body")) { + const pos = model.offsetOf(targetParent.leftSibling); + (_c2 = targetParent.parent) == null ? void 0 : _c2.removeChild(targetParent); + model.position = Math.max(0, pos); + } + if (model.root.hasEmptyBranch("body")) + model.mathfield.flushInlineShortcutBuffer(); + } + ); + } + function deleteRange(model, range2, type) { + const result = model.getAtoms(range2); + if (result.length > 0 && result[0].parent) { + let parent = result[0]; + while (parent && !(parent instanceof ArrayAtom)) parent = parent.parent; + let endArray = result[result.length - 1]; + while (endArray && !(endArray instanceof ArrayAtom)) + endArray = endArray.parent; + if (parent && parent instanceof ArrayAtom) { + const parentArray2 = parent; + if (parentArray2 && endArray === parentArray2 && parentArray2.isMultiline) { + const [startOffset, endOffset] = [ + Math.min(model.position, model.anchor), + Math.max(model.position, model.anchor) + ]; + const [startRow, startColumn] = model.at(startOffset).parentBranch; + const [endRow, endColumn] = model.at(endOffset).parentBranch; + const rowSpan = endRow - startRow + 1; + if (rowSpan >= 2) { + return model.deferNotifications( + { content: true, selection: true, type }, + () => { + var _a3; + const startCell = parentArray2.getCell(startRow, startColumn); + const endCell = parentArray2.getCell(endRow, endColumn); + if (!startCell || !endCell) return; + model.extractAtoms([startOffset, endOffset]); + const remainingStart = parentArray2.getCell(startRow, startColumn); + const remainingEnd = parentArray2.getCell(endRow, endColumn); + for (let i = endRow - 1; i > startRow; i--) + parentArray2.removeRow(i); + if (startRow !== endRow) { + const nowRemainingEnd = parentArray2.getCell( + startRow + 1, + startColumn + ); + if (remainingStart && nowRemainingEnd) { + const mergedContent = [ + ...remainingStart.filter((x) => x.type !== "first"), + ...nowRemainingEnd.filter((x) => x.type !== "first") + ]; + parentArray2.setCell(startRow, startColumn, mergedContent); + parentArray2.removeRow(startRow + 1); + } + } + const mergedCell = parentArray2.getCell(startRow, startColumn); + if (mergedCell) { + const targetIndex = remainingStart ? remainingStart.filter((x) => x.type !== "first").length : 0; + model.position = model.offsetOf( + (_a3 = mergedCell[targetIndex]) != null ? _a3 : mergedCell[0] + ); + } else model.position = startOffset; + parentArray2.isDirty = true; + } + ); + } + } + } + let firstChild = result[0].parent.firstChild; + if (firstChild.type === "first") firstChild = firstChild.rightSibling; + const lastChild = result[result.length - 1].parent.lastChild; + let firstSelected = result[0]; + if (firstSelected.type === "first") + firstSelected = firstSelected.rightSibling; + const lastSelected = result[result.length - 1]; + if (firstSelected === firstChild && lastSelected === lastChild) { + const parent2 = result[0].parent; + if (parent2.parent && parent2.type !== "prompt") + range2 = [model.offsetOf(parent2.leftSibling), model.offsetOf(parent2)]; + } + if (result.length === 1 && result[0].type === "placeholder" && result[0].parent.type === "genfrac") { + const genfrac = result[0].parent; + const branch = result[0].parentBranch === "below" ? "above" : "below"; + const pos = model.offsetOf(genfrac.leftSibling); + return model.deferNotifications( + { content: true, selection: true, type }, + () => { + var _a3, _b3; + const numer = genfrac.removeBranch(branch); + if (!(numer.length === 1 && numer[0].type === "placeholder")) { + const lastAtom = genfrac.parent.addChildrenAfter(numer, genfrac); + (_a3 = genfrac.parent) == null ? void 0 : _a3.removeChild(genfrac); + model.position = model.offsetOf(lastAtom); + } else { + (_b3 = genfrac.parent) == null ? void 0 : _b3.removeChild(genfrac); + model.position = Math.max(0, pos); + } + } + ); + } + } + return model.deferNotifications( + { content: true, selection: true, type }, + () => { + const specialAtomInfo = /* @__PURE__ */ new Map(); + if (result.length > 0) { + const startAtom = result[0]; + const endAtom = result[result.length - 1]; + const startAncestors = /* @__PURE__ */ new Set(); + let p = startAtom.parent; + while (p) { + if ((p.type === "surd" || p.type === "box" || p.type === "enclose" || p.type === "leftright" || p.type === "genfrac" || p.type === "overunder") && p.parent) + startAncestors.add(p); + p = p.parent; + } + const endAncestors = /* @__PURE__ */ new Set(); + p = endAtom.parent; + while (p) { + if ((p.type === "surd" || p.type === "box" || p.type === "enclose" || p.type === "leftright" || p.type === "genfrac" || p.type === "overunder") && p.parent) + endAncestors.add(p); + p = p.parent; + } + for (const atom of result) { + p = atom.parent; + while (p) { + if ((p.type === "surd" || p.type === "box" || p.type === "enclose" || p.type === "leftright" || p.type === "genfrac" || p.type === "overunder") && p.parent) { + if (!specialAtomInfo.has(p)) { + specialAtomInfo.set(p, { + containsStart: startAncestors.has(p), + containsEnd: endAncestors.has(p) + }); + } + break; + } + p = p.parent; + } + } + } + const startPos = Math.min(...range2); + model.deleteAtoms(range2); + for (const [specialAtom, info] of specialAtomInfo) { + if (!specialAtom.parent) continue; + const isBoundaryCrossing = info.containsStart !== info.containsEnd; + if (specialAtom.type === "surd" || specialAtom.type === "box" || specialAtom.type === "enclose" || specialAtom.type === "leftright") { + const body = specialAtom.branch("body"); + const bodyEmpty = !body || body.length === 0 || body.length === 1 && body[0].type === "placeholder"; + if (bodyEmpty) { + const pos = model.offsetOf(specialAtom.leftSibling); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } else if (isBoundaryCrossing && !info.containsStart && info.containsEnd) { + const pos = model.offsetOf(specialAtom.leftSibling); + const content = specialAtom.removeBranch("body"); + if (content && content.length > 0) + specialAtom.parent.addChildrenAfter(content, specialAtom); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } + } + if (specialAtom.type === "genfrac") { + const above = specialAtom.branch("above"); + const below = specialAtom.branch("below"); + const aboveEmpty = !above || above.length === 0 || above.length === 1 && above[0].type === "placeholder"; + const belowEmpty = !below || below.length === 0 || below.length === 1 && below[0].type === "placeholder"; + if (aboveEmpty && belowEmpty) { + const pos = model.offsetOf(specialAtom.leftSibling); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } else if (aboveEmpty && !belowEmpty) { + const pos = model.offsetOf(specialAtom.leftSibling); + const content = specialAtom.removeBranch("below"); + if (content && content.length > 0) + specialAtom.parent.addChildrenAfter(content, specialAtom); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } else if (!aboveEmpty && belowEmpty) { + const pos = model.offsetOf(specialAtom.leftSibling); + const content = specialAtom.removeBranch("above"); + if (content && content.length > 0) + specialAtom.parent.addChildrenAfter(content, specialAtom); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } else if (isBoundaryCrossing && !info.containsStart && info.containsEnd) { + if (!aboveEmpty && !belowEmpty) { + const pos = model.offsetOf(specialAtom.leftSibling); + const content = specialAtom.removeBranch("above"); + if (content && content.length > 0) + specialAtom.parent.addChildrenAfter(content, specialAtom); + specialAtom.parent.removeChild(specialAtom); + model.position = Math.max(0, pos); + } + } + } + } + if (specialAtomInfo.size === 0) model.position = startPos; + if (model.root.hasEmptyBranch("body")) + model.mathfield.flushInlineShortcutBuffer(); + } + ); + } + function deleteRow(model, atom, row, direction) { + if (!(atom instanceof ArrayAtom)) return false; + if (!atom.isMultiline) return false; + if (atom.rows.length === 1) return false; + if (atom.rows[row].length > 1) return false; + const content = atom.getCell(row, 0); + if (!content) return false; + atom.removeRow(row); + if (direction === "backward") { + const prevLine = atom.getCell(row - 1, 0); + if (!prevLine) { + model.position = model.offsetOf(atom); + return true; + } + if (prevLine.length > 0) + model.position = model.offsetOf(prevLine[prevLine.length - 1]); + else { + model.position = model.offsetOf(atom); + } + atom.setCell(row - 1, 0, [...prevLine, ...content]); + } else { + const nextLine = atom.getCell(row, 0); + if (!nextLine) { + model.position = model.offsetOf(atom); + return true; + } + if (nextLine.length > 0) model.position = model.offsetOf(nextLine[0]); + else { + model.position = model.offsetOf(atom); + } + atom.setCell(row, 0, [...content, ...nextLine]); + } + return true; + } + + // src/editor-model/commands.ts + function wordBoundaryOffset(model, offset, direction) { + var _a3, _b3; + if (model.at(offset).mode !== "text") return offset; + const dir = direction === "backward" ? -1 : 1; + let result; + if (LETTER_AND_DIGITS.test(model.at(offset).value)) { + let i = offset; + let match; + do { + match = model.at(i).mode === "text" && LETTER_AND_DIGITS.test(model.at(i).value); + i += dir; + } while (model.at(i) && match); + result = model.at(i) ? i - 2 * dir : i - dir; + } else if (/\s/.test(model.at(offset).value)) { + let i = offset; + while (((_a3 = model.at(i)) == null ? void 0 : _a3.mode) === "text" && /\s/.test(model.at(i).value)) + i += dir; + if (!model.at(i)) { + result = i - dir; + } else { + let match = true; + do { + match = model.at(i).mode === "text" && !/\s/.test(model.at(i).value); + i += dir; + } while (model.at(i) && match); + result = model.at(i) ? i - 2 * dir : i - dir; + } + } else { + let i = offset; + while (((_b3 = model.at(i)) == null ? void 0 : _b3.mode) === "text" && !/\s/.test(model.at(i).value)) + i += dir; + result = model.at(i) ? i : i - dir; + let match = true; + while (model.at(i) && match) { + match = model.at(i).mode === "text" && /\s/.test(model.at(i).value); + if (match) result = i; + i += dir; + } + result = model.at(i) ? i - 2 * dir : i - dir; + } + return result - (dir > 0 ? 0 : 1); + } + function skip(model, direction, options) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h; + const previousPosition = model.position; + if (!((_a3 = options == null ? void 0 : options.extend) != null ? _a3 : false)) model.collapseSelection(direction); + let atom = model.at(model.position); + if (direction === "forward") { + if (atom.type === "subsup") { + atom = atom.rightSibling; + if (!atom) atom = model.at(model.position + 1); + } else atom = model.at(model.position + 1); + } + if (!atom) { + model.announce("plonk"); + return false; + } + let offset = model.offsetOf(atom); + if (atom instanceof TextAtom) { + offset = wordBoundaryOffset(model, offset, direction); + } else if (atom instanceof LatexAtom) { + if (atom.isSuggestion) { + console.assert(direction === "forward"); + while (atom && atom instanceof LatexAtom) { + atom.isSuggestion = false; + offset = model.offsetOf(atom); + atom = atom.rightSibling; + } + } else if (direction === "forward") { + atom = atom.rightSibling; + if (!atom || !(atom instanceof LatexAtom)) { + model.announce("plonk"); + return false; + } + while (atom && atom instanceof LatexAtom && /[a-zA-Z\*]/.test(atom.value)) { + offset = model.offsetOf(atom); + atom = atom.rightSibling; + } + } else { + atom = atom.leftSibling; + if (!atom || !(atom instanceof LatexAtom)) { + model.announce("plonk"); + return false; + } + while (atom && atom instanceof LatexAtom && /[a-zA-Z\*]/.test(atom.value)) { + offset = model.offsetOf(atom); + atom = atom.leftSibling; + } + } + } else if (direction === "forward" && atom.type === "mopen") { + let level = 0; + do { + if (atom.type === "mopen") level += 1; + else if (atom.type === "mclose") level -= 1; + atom = atom.rightSibling; + } while (!atom.isLastSibling && level !== 0); + offset = model.offsetOf(atom.leftSibling); + } else if (direction === "backward" && atom.type === "mclose") { + let level = 0; + do { + if (atom.type === "mopen") level += 1; + else if (atom.type === "mclose") level -= 1; + atom = atom.leftSibling; + } while (!atom.isFirstSibling && level !== 0); + offset = model.offsetOf(atom); + } else if (direction === "backward") { + if (atom.type === "first") { + while (offset > 0 && atom.type === "first") { + offset -= 1; + atom = model.at(offset); + } + } else { + const type = atom.type; + if (atom.type === "subsup") { + offset = model.offsetOf(model.at(offset).leftSibling); + } + offset -= 1; + let nextType = (_b3 = model.at(offset)) == null ? void 0 : _b3.type; + while (offset >= 0 && nextType === type) { + if (((_c2 = model.at(offset)) == null ? void 0 : _c2.type) === "subsup") + offset = model.offsetOf(model.at(offset).leftSibling); + else offset -= 1; + nextType = model.at(offset).type; + } + } + } else { + const { type } = atom; + let nextType = (_d2 = model.at(offset)) == null ? void 0 : _d2.type; + const { lastOffset } = model; + while (offset <= lastOffset && (nextType === type || nextType === "subsup")) { + while (((_e = model.at(offset).rightSibling) == null ? void 0 : _e.type) === "subsup") + offset = model.offsetOf(model.at(offset).rightSibling); + offset += 1; + nextType = (_f = model.at(offset)) == null ? void 0 : _f.type; + } + offset -= 1; + } + if ((_g = options == null ? void 0 : options.extend) != null ? _g : false) { + if (!model.setSelection(model.anchor, offset)) { + model.announce("plonk"); + return false; + } + model.announce("move", previousPosition); + } else { + if (offset === model.position) { + model.announce("plonk"); + return false; + } + if ((_h = options == null ? void 0 : options.delete) != null ? _h : false) { + if (direction === "forward") + deleteRange(model, [previousPosition, offset], "deleteWordForward"); + else { + deleteRange(model, [previousPosition, offset], "deleteWordBackward"); + model.position = offset; + } + } else { + model.position = offset; + model.announce("move", previousPosition); + } + } + model.mathfield.stopCoalescingUndo(); + return true; + } + function move(model, direction, options) { + var _a3, _b3; + options = options != null ? options : { extend: false }; + model.mathfield.styleBias = direction === "backward" ? "right" : "left"; + if (direction !== "forward") { + const [from, to] = getCommandSuggestionRange(model); + if (from !== void 0 && to !== void 0) model.deleteAtoms([from, to]); + } + if (direction === "upward") return moveUpward(model, options); + if (direction === "downward") return moveDownward(model, options); + if (options.extend) { + let pos2 = nextValidPosition(model, model.position, direction); + if (pos2 < 0) pos2 = 0; + if (pos2 > model.lastOffset) pos2 = model.lastOffset; + const result = model.setSelection(model.anchor, pos2); + model.mathfield.stopCoalescingUndo(); + return result; + } + if (model.selectionIsPlaceholder) { + model.collapseSelection(direction); + const result = move(model, direction); + model.mathfield.stopCoalescingUndo(); + return result; + } + let pos = model.position; + const previousPosition = pos; + if (model.collapseSelection(direction)) { + pos = model.position; + if (!isValidPosition(model, pos)) + pos = nextValidPosition(model, pos, direction); + } else pos = nextValidPosition(model, pos, direction); + if (pos < 0 || pos > model.lastOffset) { + let success = true; + if (!model.silenceNotifications) { + success = (_b3 = (_a3 = model.mathfield.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("move-out", { + detail: { direction }, + cancelable: true, + bubbles: true, + composed: true + }) + )) != null ? _b3 : true; + } + if (success) model.announce("plonk"); + return success; + } + model.setPositionHandlingPlaceholder(pos); + model.mathfield.stopCoalescingUndo(); + model.announce("move", previousPosition); + return true; + } + function nextValidPosition(model, pos, direction) { + pos = pos + (direction === "forward" ? 1 : -1); + if (pos < 0 || pos > model.lastOffset) return pos; + if (!isValidPosition(model, pos)) + return nextValidPosition(model, pos, direction); + return pos; + } + function isValidPosition(model, pos) { + var _a3; + const atom = model.at(pos); + let parent = atom.parent; + while (parent && !parent.inCaptureSelection) parent = parent.parent; + if (parent == null ? void 0 : parent.inCaptureSelection) return false; + if ((_a3 = atom.parent) == null ? void 0 : _a3.skipBoundary) { + if (!atom.isFirstSibling && atom.isLastSibling) return false; + if (atom.type === "first") return false; + } + if (model.mathfield.hasEditablePrompts && !atom.parentPrompt) return false; + return true; + } + function getClosestAtomToXPosition(mathfield, search, x) { + let prevX = Infinity; + let i = 0; + for (; i < search.length; i++) { + const atom = search[i]; + const el = mathfield.getHTMLElement(atom); + if (!el) continue; + const toX = getLocalDOMRect(el).right; + const abs = Math.abs(x - toX); + if (abs <= prevX) { + prevX = abs; + } else { + break; + } + } + return search[i - 1]; + } + function moveToClosestAtomVertically(model, fromAtom, toAtoms, extend, direction) { + const hasEditablePrompts = model.mathfield.hasEditablePrompts; + const editableAtoms = !hasEditablePrompts ? toAtoms : toAtoms.filter((a) => a.type === "prompt" && !a.captureSelection); + const fromX = getLocalDOMRect(model.mathfield.getHTMLElement(fromAtom)).right; + const targetSelection = model.offsetOf( + getClosestAtomToXPosition(model.mathfield, editableAtoms, fromX) + ) - (hasEditablePrompts ? 1 : 0); + if (extend) { + const [left, right] = model.selection.ranges[0]; + let newSelection; + const cmp = direction === "up" ? left : right; + if (targetSelection < cmp) { + newSelection = { + ranges: [[targetSelection, right]], + direction: "backward" + }; + } else { + newSelection = { + ranges: [[left, targetSelection]], + direction: "forward" + }; + } + model.setSelection(newSelection); + } else { + model.setPositionHandlingPlaceholder(targetSelection); + } + model.announce(`move ${direction}`); + } + function moveUpward(model, options) { + var _a3, _b3; + const extend = (_a3 = options == null ? void 0 : options.extend) != null ? _a3 : false; + if (!extend) model.collapseSelection("backward"); + const handleDeadEnd = () => { + var _a4, _b4; + let success = true; + if (!model.silenceNotifications) { + success = (_b4 = (_a4 = model.mathfield.host) == null ? void 0 : _a4.dispatchEvent( + new CustomEvent("move-out", { + detail: { direction: "upward" }, + cancelable: true, + bubbles: true, + composed: true + }) + )) != null ? _b4 : true; + } + model.announce(success ? "line" : "plonk"); + return success; + }; + const baseAtom = model.at(model.position); + let atom = baseAtom; + while (atom && atom.parentBranch !== "below" && !(Array.isArray(atom.parentBranch) && atom.parent instanceof ArrayAtom)) + atom = atom.parent; + if (Array.isArray(atom == null ? void 0 : atom.parentBranch) && atom.parent instanceof ArrayAtom) { + const arrayAtom = atom.parent; + if (atom.parentBranch[0] < 1) return handleDeadEnd(); + const rowAbove = atom.parentBranch[0] - 1; + const aboveCell = arrayAtom.getCell(rowAbove, atom.parentBranch[1]); + const cellHasPrompt = aboveCell.some( + (a) => a.type === "prompt" && !a.captureSelection + ); + if (!cellHasPrompt && model.mathfield.hasEditablePrompts) + return handleDeadEnd(); + moveToClosestAtomVertically(model, baseAtom, aboveCell, extend, "up"); + } else if (atom) { + const branch = (_b3 = atom.parent.branch("above")) != null ? _b3 : atom.parent.createBranch("above"); + const branchHasPrompt = branch.some( + (a) => a.type === "prompt" && a.placeholderId + ); + if (!branchHasPrompt && model.mathfield.hasEditablePrompts) + return handleDeadEnd(); + moveToClosestAtomVertically(model, baseAtom, branch, extend, "up"); + } else return handleDeadEnd(); + model.mathfield.stopCoalescingUndo(); + return true; + } + function moveDownward(model, options) { + var _a3, _b3; + const extend = (_a3 = options == null ? void 0 : options.extend) != null ? _a3 : false; + if (!extend) model.collapseSelection("forward"); + const handleDeadEnd = () => { + var _a4, _b4; + let success = true; + if (!model.silenceNotifications) { + success = (_b4 = (_a4 = model.mathfield.host) == null ? void 0 : _a4.dispatchEvent( + new CustomEvent("move-out", { + detail: { direction: "downward" }, + cancelable: true, + bubbles: true, + composed: true + }) + )) != null ? _b4 : true; + } + model.announce(success ? "line" : "plonk"); + return success; + }; + const baseAtom = model.at(model.position); + let atom = baseAtom; + while (atom && atom.parentBranch !== "above" && !(isCellBranch(atom.parentBranch) && atom.parent instanceof ArrayAtom)) + atom = atom.parent; + if (isCellBranch(atom == null ? void 0 : atom.parentBranch) && atom.parent instanceof ArrayAtom) { + const arrayAtom = atom.parent; + if (atom.parentBranch[0] + 1 > arrayAtom.rows.length - 1) + return handleDeadEnd(); + const rowBelow = atom.parentBranch[0] + 1; + const belowCell = arrayAtom.getCell(rowBelow, atom.parentBranch[1]); + const cellHasPrompt = belowCell.some( + (a) => a.type === "prompt" && !a.captureSelection + ); + if (!cellHasPrompt && model.mathfield.hasEditablePrompts) + return handleDeadEnd(); + moveToClosestAtomVertically(model, baseAtom, belowCell, extend, "down"); + } else if (atom) { + const branch = (_b3 = atom.parent.branch("below")) != null ? _b3 : atom.parent.createBranch("below"); + const branchHasPrompt = branch.some((a) => a.type === "prompt"); + if (!branchHasPrompt && model.mathfield.hasEditablePrompts) + return handleDeadEnd(); + moveToClosestAtomVertically(model, baseAtom, branch, extend, "down"); + } else return handleDeadEnd(); + return true; + } + + // src/editor-model/commands-move.ts + function moveAfterParent(model) { + const previousPosition = model.position; + const parent = model.at(previousPosition).parent; + if (!(parent == null ? void 0 : parent.parent)) { + model.announce("plonk"); + return false; + } + model.position = model.offsetOf(parent); + model.mathfield.stopCoalescingUndo(); + model.announce("move", previousPosition); + return true; + } + function superscriptDepth(model) { + let result = 0; + let atom = model.at(model.position); + let wasSuperscript = false; + while (atom) { + if (!atom.hasEmptyBranch("superscript")) { + result += 1; + wasSuperscript = true; + } else if (!atom.hasEmptyBranch("subscript")) wasSuperscript = false; + atom = atom.parent; + } + return wasSuperscript ? result : 0; + } + function subscriptDepth(model) { + let result = 0; + let atom = model.at(model.position); + let wasSubscript = false; + while (atom) { + if (!atom.hasEmptyBranch("subscript")) { + result += 1; + wasSubscript = true; + } else if (!atom.hasEmptyBranch("superscript")) wasSubscript = false; + atom = atom.parent; + } + return wasSubscript ? result : 0; + } + function moveToSuperscript(model) { + model.collapseSelection(); + if (superscriptDepth(model) >= model.mathfield.options.scriptDepth[1]) { + model.announce("plonk"); + return false; + } + let target = model.at(model.position); + if (target.subsupPlacement === void 0) { + let subsup = target.rightSibling; + if ((subsup == null ? void 0 : subsup.type) !== "subsup") { + subsup = new SubsupAtom({ style: target.style }); + target.parent.addChildAfter(subsup, target); + } + target = subsup; + } + target.createBranch("superscript"); + model.setSelection( + model.getSiblingsRange(model.offsetOf(target.superscript[0])) + ); + return true; + } + function moveToSubscript(model) { + model.collapseSelection(); + if (subscriptDepth(model) >= model.mathfield.options.scriptDepth[0]) { + model.announce("plonk"); + return false; + } + let target = model.at(model.position); + if (target.subsupPlacement === void 0) { + let subsup = target.rightSibling; + if ((subsup == null ? void 0 : subsup.type) !== "subsup") { + subsup = new SubsupAtom({ style: target.style }); + target.parent.addChildAfter(subsup, target); + } + target = subsup; + } + target.createBranch("subscript"); + model.setSelection( + model.getSiblingsRange(model.offsetOf(target.subscript[0])) + ); + return true; + } + function getTabbableElements() { + function tabbable(element) { + const regularTabbables = []; + const orderedTabbables = []; + const candidates = [ + ...element.querySelectorAll(`input, select, textarea, a[href], button, + [tabindex], audio[controls], video[controls], + [contenteditable]:not([contenteditable="false"]), details>summary`) + ].filter(isNodeMatchingSelectorTabbable); + candidates.forEach((candidate, i) => { + const candidateTabindex = getTabindex(candidate); + if (candidateTabindex === 0) regularTabbables.push(candidate); + else { + orderedTabbables.push({ + documentOrder: i, + tabIndex: candidateTabindex, + node: candidate + }); + } + }); + return orderedTabbables.sort( + (a, b) => a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex + ).map((a) => a.node).concat(regularTabbables); + } + function isNodeMatchingSelectorTabbable(element) { + if (!isNodeMatchingSelectorFocusable(element) || isNonTabbableRadio(element) || getTabindex(element) < 0) + return false; + return true; + } + function isNodeMatchingSelectorFocusable(node) { + if (node.disabled || node.type === "hidden" && node.tagName.toUpperCase() === "INPUT" || isHidden(node)) + return false; + return true; + } + function getTabindex(node) { + var _a3; + const tabindexAttr = Number.parseInt( + (_a3 = node.getAttribute("tabindex")) != null ? _a3 : "NaN", + 10 + ); + if (!Number.isNaN(tabindexAttr)) return tabindexAttr; + if (node.contentEditable === "true") return 0; + if ((node.nodeName === "AUDIO" || node.nodeName === "VIDEO") && node.getAttribute("tabindex") === null) + return 0; + return node.tabIndex; + } + function isNonTabbableRadio(node) { + return node.tagName.toUpperCase() === "INPUT" && node.type === "radio" && !isTabbableRadio(node); + } + function getCheckedRadio(nodes, form) { + for (const node of nodes) + if (node.checked && node.form === form) return node; + return null; + } + function isTabbableRadio(node) { + var _a3; + if (!node.name) return true; + const radioScope = (_a3 = node.form) != null ? _a3 : node.ownerDocument; + const radioSet = radioScope.querySelectorAll( + 'input[type="radio"][name="' + node.name + '"]' + ); + const checked = getCheckedRadio(radioSet, node.form); + return !checked || checked === node; + } + function isHidden(element) { + if (!isBrowser() || element === document.activeElement || element.contains(document.activeElement)) + return false; + if (getComputedStyle(element).visibility === "hidden") return true; + const bounds = element.getBoundingClientRect(); + if (bounds.width === 0 || bounds.height === 0) return true; + while (element) { + if (getComputedStyle(element).display === "none") return true; + element = element.parentElement; + } + return false; + } + if (!isBrowser()) return []; + return tabbable(document.body); + } + function select(model, target, direction = "forward") { + const previousPosition = model.position; + if (isArray(target)) { + const first = model.offsetOf(target[0]); + const last = model.offsetOf(target[target.length - 1]); + if (direction === "forward") model.setSelection(first, last); + else model.setSelection(last, first); + model.announce("move", previousPosition); + model.mathfield.stopCoalescingUndo(); + return true; + } + if (direction === "forward") + return select(model, [target.leftSibling, target]); + return select(model, [target, target.leftSibling]); + } + function leapTo(model, target) { + const previousPosition = model.position; + if (typeof target === "number") target = model.at(target); + if (target.type === "prompt") { + model.setSelection( + model.offsetOf(target.firstChild), + model.offsetOf(target.lastChild) + ); + } else { + const newPosition = model.offsetOf(target); + if (target.type === "placeholder") + model.setSelection(newPosition - 1, newPosition); + else model.position = newPosition; + } + model.announce("move", previousPosition); + model.mathfield.stopCoalescingUndo(); + return true; + } + function leap(model, dir) { + var _a3, _b3; + const dist = dir === "forward" ? 1 : -1; + if (model.at(model.anchor).type === "placeholder") move(model, dir); + let origin; + const parentPrompt = model.at(model.anchor).parentPrompt; + if (parentPrompt) { + if (dir === "forward") origin = model.offsetOf(parentPrompt) + 1; + else origin = model.offsetOf(parentPrompt.leftSibling); + } else origin = Math.max(model.position + dist, 0); + const target = leapTarget(model, origin, dir); + if (!target || dir === "forward" && model.offsetOf(target) < origin || dir === "backward" && model.offsetOf(target) > origin) { + const success = (_b3 = (_a3 = model.mathfield.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("move-out", { + detail: { direction: dir }, + cancelable: true, + bubbles: true, + composed: true + }) + )) != null ? _b3 : true; + if (!success) { + model.announce("plonk"); + return false; + } + const tabbable = getTabbableElements(); + if (!document.activeElement || tabbable.length <= 1) { + model.announce("plonk"); + return false; + } + let index = tabbable.indexOf(document.activeElement) + dist; + if (index < 0) index = tabbable.length - 1; + if (index >= tabbable.length) index = 0; + tabbable[index].focus(); + model.mathfield.stopCoalescingUndo(); + return true; + } + leapTo(model, target); + return true; + } + function leapTarget(model, origin = 0, dir = "forward") { + return model.findAtom( + (atom) => atom.type === "placeholder" || atom.type === "prompt" || !model.mathfield.readOnly && atom.treeDepth > 2 && atom.isFirstSibling && atom.isLastSibling, + origin, + dir + ); + } + register2( + { + moveToOpposite: (model) => { + const OPPOSITE_RELATIONS = { + superscript: "subscript", + subscript: "superscript", + above: "below", + below: "above" + }; + const cursor = model.at(model.position); + const { parent } = cursor; + if (!parent) { + model.announce("plonk"); + return false; + } + const relation = cursor.parentBranch; + let oppositeRelation; + if (typeof relation === "string") + oppositeRelation = OPPOSITE_RELATIONS[relation]; + if (!oppositeRelation) { + const result2 = cursor.subsupPlacement ? moveToSubscript(model) : moveToSuperscript(model); + model.mathfield.stopCoalescingUndo(); + return result2; + } + if (!parent.branch(oppositeRelation)) { + parent.createBranch(oppositeRelation); + } + const result = model.setSelection( + model.getBranchRange(model.offsetOf(parent), oppositeRelation) + ); + model.mathfield.stopCoalescingUndo(); + return result; + }, + moveBeforeParent: (model) => { + const { parent } = model.at(model.position); + if (!parent) { + model.announce("plonk"); + return false; + } + model.position = model.offsetOf(parent); + model.mathfield.stopCoalescingUndo(); + return true; + }, + moveAfterParent: (model) => moveAfterParent(model), + moveToNextChar: (model) => move(model, "forward"), + moveToPreviousChar: (model) => move(model, "backward"), + moveUp: (model) => move(model, "upward"), + moveDown: (model) => move(model, "downward"), + moveToNextWord: (model) => skip(model, "forward"), + moveToPreviousWord: (model) => skip(model, "backward"), + moveToGroupStart: (model) => { + const pos = model.offsetOf(model.at(model.position).firstSibling); + if (pos === model.position) { + model.announce("plonk"); + return false; + } + model.position = pos; + model.mathfield.stopCoalescingUndo(); + return true; + }, + moveToGroupEnd: (model) => { + const pos = model.offsetOf(model.at(model.position).lastSibling); + if (pos === model.position) { + model.announce("plonk"); + return false; + } + model.position = pos; + model.mathfield.stopCoalescingUndo(); + return true; + }, + moveToNextGroup: (model) => { + var _a3, _b3, _c2, _d2; + if (model.position === model.lastOffset && model.anchor === model.lastOffset) + return leap(model, "forward"); + const atom = model.at(model.position); + const mode = atom.mode; + if (mode === "text") { + if (model.selectionIsCollapsed) { + let first = atom; + while ((first == null ? void 0 : first.mode) === "text") first = first.leftSibling; + let last = atom; + while (((_a3 = last.rightSibling) == null ? void 0 : _a3.mode) === "text") last = last.rightSibling; + if (first && last) return select(model, [first, last]); + } + if (atom.rightSibling.mode === "text") { + let next = atom; + while ((next == null ? void 0 : next.mode) === "text") next = next.rightSibling; + if (next) { + leapTo(model, (_b3 = next.leftSibling) != null ? _b3 : next); + model.mathfield.switchMode("math"); + return true; + } + return leapTo(model, model.lastOffset); + } + } + const parentPrompt = model.at(model.anchor).parentPrompt; + const origin = parentPrompt ? model.offsetOf(parentPrompt) + 1 : Math.max(model.position + 1, 0); + const target = leapTarget(model, origin, "forward"); + if (target && model.offsetOf(target) < origin) + return leap(model, "forward"); + if (target) return leapTo(model, target); + const sibling = findSibling( + model, + atom, + (x) => x.type === "leftright" || x.type === "text", + "forward" + ); + if (sibling) { + if (sibling.mode === "text") { + let last = sibling; + while ((last == null ? void 0 : last.mode) === "text") last = last.rightSibling; + return select(model, [ + (_c2 = sibling.leftSibling) != null ? _c2 : sibling, + (_d2 = last.leftSibling) != null ? _d2 : last + ]); + } + return select(model, sibling); + } + const parent = atom.parent; + if (parent) { + if (parent.type === "leftright" || parent.type === "surd") + return select(model, parent); + if (atom.parentBranch === "superscript" && parent.subscript) + return select(model, parent.subscript); + if (atom.parentBranch === "above" && parent.below) + return select(model, parent.below); + if (atom.parentBranch === "superscript" || atom.parentBranch === "subscript") + return leapTo(model, parent); + if (atom.parentBranch === "above" || atom.parentBranch === "below") + return select(model, parent); + } + return leapTo(model, model.lastOffset); + }, + moveToPreviousGroup: (model) => { + var _a3; + if (model.position === 0 && model.anchor === 0) + return leap(model, "backward"); + let atom = model.at(model.position); + const mode = atom.mode; + if (mode === "text") { + if (model.selectionIsCollapsed) { + let first = atom; + while ((first == null ? void 0 : first.mode) === "text") first = first.leftSibling; + let last = atom; + while (((_a3 = last.rightSibling) == null ? void 0 : _a3.mode) === "text") last = last.rightSibling; + if (first && last) return select(model, [first, last]); + } + while ((atom == null ? void 0 : atom.mode) === "text") atom = atom.leftSibling; + if (atom) return leapTo(model, atom); + return leapTo(model, 0); + } + const parentPrompt = model.at(model.anchor).parentPrompt; + const origin = parentPrompt ? model.offsetOf(parentPrompt.leftSibling) : Math.max(model.position - 1, 0); + const target = leapTarget(model, origin, "backward"); + if (target && model.offsetOf(target) > origin) + return leap(model, "backward"); + if (target) return leapTo(model, target); + if (mode === "math") { + const sibling = findSibling( + model, + atom, + (x) => x.type === "leftright" || x.type === "text", + "backward" + ); + if (sibling) { + if (sibling.mode === "text") { + let first = sibling; + while ((first == null ? void 0 : first.mode) === "text") first = first.leftSibling; + return select(model, [sibling, first]); + } + return select(model, sibling); + } + const parent = atom.parent; + if (parent) { + if (parent.type === "leftright" || parent.type === "surd") + return select(model, parent); + if (atom.parentBranch === "subscript" && parent.superscript) + return select(model, parent.superscript); + if (atom.parentBranch === "below" && parent.above) + return select(model, parent.above); + if (atom.parentBranch === "superscript" || atom.parentBranch === "subscript") + return leapTo(model, parent); + if (atom.parentBranch === "above" || atom.parentBranch === "below") + return select(model, parent); + } + return leapTo(model, 0); + } + return false; + }, + moveToMathfieldStart: (model) => { + if (model.selectionIsCollapsed && model.position === 0) { + model.announce("plonk"); + return false; + } + model.position = 0; + model.mathfield.stopCoalescingUndo(); + return true; + }, + moveToMathfieldEnd: (model) => { + if (model.selectionIsCollapsed && model.position === model.lastOffset) { + model.announce("plonk"); + return false; + } + model.position = model.lastOffset; + model.mathfield.stopCoalescingUndo(); + return true; + }, + moveToSuperscript, + moveToSubscript + }, + { target: "model", changeSelection: true } + ); + register2( + { + moveToNextPlaceholder: (model) => leap(model, "forward"), + moveToPreviousPlaceholder: (model) => leap(model, "backward") + }, + { target: "model", changeSelection: true, audioFeedback: "return" } + ); + function findSibling(model, atom, pred, dir) { + if (dir === "forward") { + let result2 = atom.rightSibling; + while (result2 && !pred(result2)) result2 = result2.rightSibling; + return result2; + } + let result = atom.leftSibling; + while (result && !pred(result)) result = result.leftSibling; + return result; + } + + // src/editor-mathfield/smartmode.ts + function convertLastAtomsToText(model, count, until) { + if (typeof count === "function") { + until = count; + count = Infinity; + } + if (count === void 0) count = Infinity; + let i = model.position; + let done = false; + let text = ""; + while (!done) { + const atom = model.at(i); + done = count === 0 || atom === void 0 || atom.type === "first" || atom.mode !== "math" || !(atom.type && /mord|mpunct|operator/.test(atom.type) || atom.type === "mop" && /[a-zA-Z ]+/.test(atom.value)) || !atom.hasEmptyBranch("superscript") || !atom.hasEmptyBranch("subscript") || typeof until === "function" && !until(atom); + if (!done) { + atom.mode = "text"; + atom.command = atom.value; + atom.verbatimLatex = void 0; + text += atom.value; + } + i -= 1; + count -= 1; + } + model.contentDidChange({ data: text, inputType: "insertText" }); + } + function convertLastAtomsToMath(model, count, until) { + if (typeof count === "function") { + until = count; + count = Infinity; + } + if (count === void 0) count = Infinity; + let i = model.position; + let done = false; + const data = []; + while (!done) { + const atom = model.at(i); + done = count === 0 || !atom || atom.type === "first" || atom.isFirstSibling || atom.mode !== "text" || atom.value === " " || typeof until === "function" && !until(atom); + if (!done) { + data.push(Atom.serialize([atom], { defaultMode: "math" })); + atom.mode = "math"; + } + i -= 1; + count -= 1; + } + removeIsolatedSpace(model); + model.contentDidChange({ data: joinLatex(data), inputType: "insertText" }); + } + function removeIsolatedSpace(model) { + var _a3; + let i = model.position - 1; + while (i >= 0 && ((_a3 = model.at(i)) == null ? void 0 : _a3.mode) === "math") i -= 1; + if (i < 0) return; + if (model.at(i).mode === "text" && model.at(i).value === " " && model.at(i - 1).mode === "math") { + model.at(i - 1).parent.removeChild(model.at(i - 1)); + const save = model.silenceNotifications; + model.silenceNotifications = true; + model.position -= 1; + model.silenceNotifications = save; + model.contentDidChange({ inputType: "deleteContent" }); + } + } + function getTextBeforePosition(model) { + let result = ""; + let i = model.position; + let done = false; + while (!done) { + const atom = model.at(i); + done = !(atom && (atom.mode === "text" || atom.mode === "math" && atom.type && /mord|mpunct/.test(atom.type))); + if (!done) result = atom.value + result; + i -= 1; + } + return result; + } + function smartMode(mathfield, keystroke, evt) { + const { model } = mathfield; + if (model.mode === "latex") return false; + if (!model.at(model.position).isLastSibling) return false; + if (!evt || !mightProducePrintableCharacter(evt)) return false; + const c = keyboardEventToChar(evt); + if (!model.selectionIsCollapsed) { + if (isTextMode(mathfield.model.mode)) { + if (/[/_^]/.test(c)) return true; + } + return false; + } + const context = getTextBeforePosition(model) + c; + if (isTextMode(mathfield.model.mode)) { + if (keystroke === "Esc" || /[/\\]/.test(c)) { + return true; + } + if (/[\^_]/.test(c)) { + if (/(^|\s)[a-zA-Z][^_]$/.test(context)) { + convertLastAtomsToMath(model, 1); + } + return true; + } + const lFence = { ")": "(", "}": "{", "]": "[" }[c]; + const { parent } = model.at(model.position); + if (lFence && parent instanceof LeftRightAtom && parent.leftDelim === lFence) + return true; + if (/(^|[^a-zA-Z])(a|I) $/.test(context)) { + return false; + } + if (/[$€£₤₺¥¤฿¢₡₧₨₹₩₱]/u.test(c)) { + return true; + } + if (/(^|[^a-zA-Z'’])[a-zA-Z] $/.test(context)) { + convertLastAtomsToMath(model, 1); + return false; + } + if (/\D\.[^\d\s]$/.test(context)) { + convertLastAtomsToMath(model, 1); + const atom = model.at(model.position); + atom.value = "\u22C5"; + atom.style.variant = "normal"; + atom.command = "\\cdot"; + atom.verbatimLatex = void 0; + model.contentDidChange({ data: "\\cdot", inputType: "insertText" }); + return true; + } + if (/(^|\s)[a-zA-Z][^a-zA-Z]$/.test(context)) { + convertLastAtomsToMath(model, 1); + return true; + } + if (/\.\d$/.test(context)) { + convertLastAtomsToMath(model, 1); + return true; + } + if (/\([\d+\-.]$/.test(context)) { + convertLastAtomsToMath(model, 1); + return true; + } + if (/\([a-z][,;]$/.test(context)) { + convertLastAtomsToMath(model, 2); + return true; + } + if (/[\d+\-=><*|]$/.test(c)) { + removeIsolatedSpace(model); + return true; + } + } else { + if (keystroke === "[Space]") { + convertLastAtomsToText( + model, + void 0, + (a) => /[a-z][:,;.]$/.test(a.value) + ); + return true; + } + if (/[a-zA-Z]{3,}$/.test(context) && !/(dxd|abc|xyz|uvw)$/.test(context)) { + convertLastAtomsToText(model, void 0, (a) => /[a-zA-Z]/.test(a.value)); + return true; + } + if (/(^|\W)(if)$/i.test(context)) { + convertLastAtomsToText(model, 1); + return true; + } + if (/(\u0393|\u0394|\u0398|\u039B|\u039E|\u03A0|\u03A3|\u03A5|\u03A6|\u03A8|\u03A9|[\u03B1-\u03C9]|\u03D1|\u03D5|\u03D6|\u03F1|\u03F5){3,}$/u.test( + context + ) && !/(αβγ)$/.test(context)) { + convertLastAtomsToText( + model, + void 0, + (a) => /(:|,|;|.|\u0393|\u0394|\u0398|\u039B|\u039E|\u03A0|\u03A3|\u03A5|\u03A6|\u03A8|\u03A9|[\u03B1-\u03C9]|\u03D1|\u03D5|\u03D6|\u03F1|\u03F5)/u.test( + a.value + ) + ); + return true; + } + if (c === "?") { + return true; + } + if (c === "." && !/[\d-+]\.$/.test(context)) { + return true; + } + } + return false; + } + + // src/editor-mathfield/keystroke-caption.ts + function showKeystroke(mathfield, keystroke) { + if (!mathfield.isSelectionEditable || !mathfield.keystrokeCaptionVisible) + return; + const vb = createKeystrokeCaption(); + const bounds = mathfield.element.getBoundingClientRect(); + vb.style.left = `${bounds.left}px`; + vb.style.top = `${bounds.top - 64}px`; + vb.innerHTML = globalThis.MathfieldElement.createHTML( + "" + (getKeybindingMarkup(keystroke) || keystroke) + "" + vb.innerHTML + ); + vb.style.visibility = "visible"; + setTimeout(() => { + if (vb.childNodes.length > 0) + vb.childNodes[vb.childNodes.length - 1].remove(); + if (vb.childNodes.length === 0) vb.style.visibility = "hidden"; + }, 3e3); + } + function toggleKeystrokeCaption(mathfield) { + mathfield.keystrokeCaptionVisible = !mathfield.keystrokeCaptionVisible; + if (!mathfield.keystrokeCaptionVisible) { + const panel = getSharedElement("mathlive-keystroke-caption-panel"); + panel.style.visibility = "hidden"; + } else { + const panel = createKeystrokeCaption(); + panel.innerHTML = ""; + } + return false; + } + function createKeystrokeCaption() { + const panel = document.getElementById("mathlive-keystroke-caption-panel"); + if (panel) return panel; + injectStylesheet("keystroke-caption"); + injectStylesheet("core"); + return getSharedElement("mathlive-keystroke-caption-panel"); + } + function disposeKeystrokeCaption() { + if (!document.getElementById("mathlive-keystroke-caption-panel")) return; + releaseSharedElement("mathlive-keystroke-caption-panel"); + releaseStylesheet("core"); + releaseStylesheet("keystroke-caption"); + } + + // src/editor-mathfield/keyboard-input.ts + function onKeystroke(mathfield, evt) { + var _a3, _b3, _c2, _d2; + const { model } = mathfield; + const keystroke = keyboardEventToString(evt); + if ((mathfield.options.defaultMode === "free-text" || mathfield.options.defaultMode === "free-math") && keyboardEventToChar(evt) === "\\" && !evt.ctrlKey && !evt.metaKey && !evt.altKey) { + mathfield.switchMode("latex", "", "\\"); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + return false; + } + if (evt.isTrusted) { + validateKeyboardLayout(evt); + const activeLayout = getActiveKeyboardLayout(); + if (mathfield.keyboardLayout !== activeLayout.id) { + mathfield.keyboardLayout = activeLayout.id; + mathfield._keybindings = void 0; + } + } + clearTimeout(mathfield.inlineShortcutBufferFlushTimer); + mathfield.inlineShortcutBufferFlushTimer = 0; + showKeystroke(mathfield, keystroke); + if (evt.isTrusted && evt.defaultPrevented) { + mathfield.flushInlineShortcutBuffer(); + return false; + } + let shortcut; + let shortcutLength = 0; + let selector = ""; + let stateIndex = 0; + const buffer = mathfield.inlineShortcutBuffer; + let placeholderReplaced = false; + if (mathfield.isSelectionEditable && model.selectionIsPlaceholder && mightProducePrintableCharacter(evt)) { + mathfield.flushInlineShortcutBuffer(); + model.deleteAtoms(range(model.selection)); + mathfield.snapshot("delete"); + placeholderReplaced = true; + } + if (mathfield.isSelectionEditable) { + if (isMathMode(model.mode) && (!model.selectionIsPlaceholder || placeholderReplaced)) { + if (keystroke === "[Backspace]") { + if (mathfield.undoManager.lastOp === "insert-shortcut") + selector = "undo"; + else buffer.pop(); + } else if (!mightProducePrintableCharacter(evt)) { + mathfield.flushInlineShortcutBuffer(); + } else { + const c = keyboardEventToChar(evt); + const keystrokes = [ + ...(_b3 = (_a3 = buffer[buffer.length - 1]) == null ? void 0 : _a3.keystrokes) != null ? _b3 : [], + c + ]; + buffer.push({ + state: model.getState(), + keystrokes, + leftSiblings: getLeftSiblings(mathfield) + }); + shortcutLength = 0; + let candidate = ""; + while (!shortcut && shortcutLength < keystrokes.length) { + stateIndex = buffer.length - (keystrokes.length - shortcutLength); + candidate = keystrokes.slice(shortcutLength).join(""); + shortcut = getInlineShortcut( + buffer[stateIndex].leftSiblings, + candidate, + mathfield.options.inlineShortcuts + ); + if (!shortcut && /^[a-zA-Z][a-zA-Z0-9]+?([_\^][a-zA-Z0-9\*\+\-]+?)?$/.test(candidate)) + shortcut = mathfield.options.onInlineShortcut(mathfield, candidate); + shortcutLength += 1; + } + mathfield.flushInlineShortcutBuffer({ defer: true }); + } + } + if (mathfield.options.smartMode) { + if (shortcut) { + mathfield.switchMode( + mathfield.options.defaultMode === "free-math" ? "free-math" : "math" + ); + } else if (model.mode !== "free-math" && smartMode(mathfield, keystroke, evt)) { + mathfield.switchMode( + isMathMode(model.mode) ? mathfield.options.defaultMode === "free-text" ? "free-text" : mathfield.options.defaultMode === "free-math" ? "free-math" : "text" : "math" + ); + selector = ""; + } + } + } + if (!shortcut) { + if ((model.mode === "free-text" || model.mode === "free-math") && keyboardEventToChar(evt) === "\\") { + mathfield.switchMode("latex", "", "\\"); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + return false; + } + if ((model.mode === "free-text" || model.mode === "free-math") && keystroke === "[Tab]") { + onInput(mathfield, " "); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + mathfield.focus({ preventScroll: true }); + return false; + } + if (!selector) { + selector = getCommandForKeybinding( + mathfield.keybindings, + model.mode, + evt + ); + } + if (!selector && (keystroke === "[Enter]" || keystroke === "[Return]")) { + let success = true; + if (model.contentWillChange({ inputType: "insertLineBreak" })) { + if (mathfield.host) { + success = mathfield.host.dispatchEvent( + new Event("change", { bubbles: true, composed: true }) + ); + } + if (!success && evt.preventDefault) { + evt.preventDefault(); + evt.stopPropagation(); + } else { + if ((_c2 = model.parentEnvironment) == null ? void 0 : _c2.isMultiline) { + const freeTextLineStyle = (mathfield.options.defaultMode === "free-text" || mathfield.options.defaultMode === "free-math") && (model.mode === "free-text" || model.mode === "free-math") ? __spreadValues({}, computeInsertStyle(mathfield)) : void 0; + const continueListPrefix = mathfield.options.defaultMode === "free-text" && model.mode === "free-text" && currentLineListPrefix(model); + mathfield.executeCommand("addRowAfter"); + if (isFreeLinesRoot(model.root)) + markFreeTextAnchors( + model.root, + mathfield.options.defaultMode === "free-math" ? "free-math" : "free-text" + ); + if (freeTextLineStyle) { + mathfield.defaultStyle = __spreadValues(__spreadValues({}, mathfield.defaultStyle), freeTextLineStyle); + mathfield.styleBias = "none"; + } + if ((mathfield.options.defaultMode === "free-text" || mathfield.options.defaultMode === "free-math") && model.mode !== mathfield.options.defaultMode) + mathfield.switchMode(mathfield.options.defaultMode); + if (continueListPrefix) + ModeEditor.insert(model, continueListPrefix, { + mode: "free-text", + selectionMode: "after" + }); + } + model.contentDidChange({ inputType: "insertLineBreak" }); + } + } + return success; + } + if (keystroke === "[Space]" && model.mode === "latex") { + const latex = getLatexGroupBody(model).map((x) => x.value).join(""); + const resumeFreeText = isInlineFreeTextMath(mathfield, latex); + if (complete(mathfield, "accept-all")) { + if ((mathfield.options.defaultMode === "free-text" || mathfield.options.defaultMode === "free-math") && (resumeFreeText || !model.selectionIsPlaceholder)) + mathfield.switchMode(mathfield.options.defaultMode); + mathfield.dirty = true; + mathfield.scrollIntoView(); + if (evt.preventDefault) { + evt.preventDefault(); + evt.stopPropagation(); + } + return false; + } + } + if ((!selector || keystroke === "[Space]") && isMathMode(model.mode)) { + if (keystroke === "[Space]") { + mathfield.styleBias = "none"; + mathfield.flushInlineShortcutBuffer(); + if (mathfield.options.mathModeSpace) { + ModeEditor.insert(model, mathfield.options.mathModeSpace, { + format: "latex", + mode: "math" + }); + mathfield.snapshot("insert-space"); + selector = ""; + mathfield.dirty = true; + mathfield.scrollIntoView(); + if (evt.preventDefault) { + evt.preventDefault(); + evt.stopPropagation(); + } + return false; + } + const nextSibling = model.at(model.position + 1); + const previousSibling = model.at(model.position - 1); + if ((nextSibling == null ? void 0 : nextSibling.mode) === "text" || (previousSibling == null ? void 0 : previousSibling.mode) === "text") { + ModeEditor.insert(model, " ", { mode: "text" }); + mathfield.snapshot("insert-space"); + mathfield.dirty = true; + mathfield.scrollIntoView(); + return false; + } + } + if (((_d2 = model.at(model.position)) == null ? void 0 : _d2.isDigit()) && globalThis.MathfieldElement.decimalSeparator === "," && keyboardEventToChar(evt) === ",") + selector = "insertDecimalSeparator"; + } + } + if (!shortcut && !selector) { + if (!model.mathfield.smartFence) { + const { parent: parent2 } = model.at(model.position); + if (parent2 instanceof LeftRightAtom && parent2.rightDelim === "?" && model.at(model.position).isLastSibling && /^[)}\]|]$/.test(keystroke)) { + mathfield.snapshot(); + parent2.isDirty = true; + parent2.rightDelim = keystroke; + model.position += 1; + model.selectionDidChange(); + model.contentDidChange({ + data: keyboardEventToChar(evt), + inputType: "insertText" + }); + mathfield.snapshot("insert-fence"); + mathfield.dirty = true; + mathfield.scrollIntoView(); + if (evt.preventDefault) evt.preventDefault(); + return false; + } + if (!model.selectionIsCollapsed) { + const fence = keyboardEventToChar(evt); + if (fence === "(" || fence === "{" || fence === "[") { + const lDelim = { "(": "(", "{": "\\lbrace", "[": "\\lbrack" }[fence]; + const rDelim = { "(": ")", "{": "\\rbrace", "[": "\\rbrack" }[fence]; + const [start, end] = range(model.selection); + mathfield.snapshot(); + model.position = end; + ModeEditor.insert(model, rDelim, { format: "latex" }); + model.position = start; + ModeEditor.insert(model, lDelim, { format: "latex" }); + model.setSelection(start + 1, end + 1); + model.contentDidChange({ + data: fence, + inputType: "insertText" + }); + mathfield.snapshot("insert-fence"); + mathfield.dirty = true; + mathfield.scrollIntoView(); + if (evt.preventDefault) evt.preventDefault(); + return false; + } + } + } else if (insertSmartFence( + model, + keyboardEventToChar(evt), + computeInsertStyle(mathfield) + )) { + mathfield.dirty = true; + mathfield.scrollIntoView(); + if (evt.preventDefault) evt.preventDefault(); + return false; + } + return true; + } + const child = model.at(Math.max(model.position, model.anchor)); + const { parent } = child; + if (selector === "moveAfterParent" && parent instanceof LeftRightAtom && child.isLastSibling && mathfield.options.smartFence && parent.rightDelim === "?") { + mathfield.snapshot(); + parent.rightDelim = parent.matchingRightDelim(); + parent.isDirty = true; + model.contentDidChange({ inputType: "insertText" }); + mathfield.snapshot("insert-fence"); + } + mathfield.keyboardDelegate.cancelComposition(); + if (selector) mathfield.executeCommand(selector); + else if (shortcut) { + const style = computeInsertStyle(mathfield); + model.setState(buffer[stateIndex].state); + let keystrokes = buffer[buffer.length - 1].keystrokes; + keystrokes = keystrokes.slice(shortcutLength - 1); + for (const c of keystrokes) { + ModeEditor.insert(model, c, { + silenceNotifications: true, + style + }); + } + mathfield.snapshot(`insert-shortcut`); + model.setState(buffer[stateIndex].state); + model.deferNotifications( + { + content: true, + selection: true, + data: shortcut, + type: "insertText" + }, + () => { + ModeEditor.insert(model, shortcut, { format: "latex", style }); + removeIsolatedSpace(mathfield.model); + if (shortcut.endsWith(" ")) { + const textMode = mathfield.options.defaultMode === "free-text" ? "free-text" : mathfield.options.defaultMode === "free-math" ? "free-math" : "text"; + mathfield.switchMode(textMode); + if (textMode !== "free-math") + ModeEditor.insert(model, " ", { style, mode: textMode }); + } + mathfield.snapshot(); + if (!model.selectionIsCollapsed) mathfield.flushInlineShortcutBuffer(); + return true; + } + ); + mathfield.dirty = true; + model.announce("replacement"); + } + mathfield.scrollIntoView(); + if (evt.preventDefault) evt.preventDefault(); + return false; + } + function detectScientificNotation(model) { + var _a3, _b3; + const { position } = model; + let offset = position; + const atoms = []; + while (offset > 0) { + const atom = model.at(offset); + const value = atom.value; + if (atom.type === "mord" || atom.type === "mbin" && (value === "+" || value === "-" || value === "\u2212")) { + atoms.unshift(atom); + offset--; + } else break; + } + if (atoms.length === 0) return null; + const text = atoms.map((a) => a.value).join(""); + const separator = (_b3 = (_a3 = globalThis.MathfieldElement) == null ? void 0 : _a3.decimalSeparator) != null ? _b3 : "."; + const separatorRegex = separator === "." ? "\\." : ","; + const pattern = new RegExp( + `^(\\d+(?:${separatorRegex}\\d*)?)[eE]([+\\-\u2212]?)(\\d+)$` + ); + const match = text.match(pattern); + if (!match) return null; + const significand = match[1]; + const sign = match[2]; + const exponentDigits = match[3]; + const exponent = sign + exponentDigits; + return { + startOffset: offset, + endOffset: position, + significand, + exponent + }; + } + function applyScientificNotationTemplate(significand, exponent) { + var _a3; + const template = (_a3 = globalThis.MathfieldElement) == null ? void 0 : _a3.scientificNotationTemplate; + if (!template || template === "" || !template.includes("#1") || !template.includes("#2")) + return null; + let result = template.replace("#1", significand); + result = result.replace("#2", exponent); + return result; + } + function formatScientificNotationIfApplicable(mathfield) { + const { model } = mathfield; + if (!isMathMode(model.mode)) return false; + const match = detectScientificNotation(model); + if (!match) return false; + const formatted = applyScientificNotationTemplate( + match.significand, + match.exponent + ); + if (!formatted) return false; + model.deferNotifications( + { content: true, selection: true, type: "insertText" }, + () => { + model.selection = { + ranges: [[match.startOffset, match.endOffset]], + direction: "forward" + }; + ModeEditor.insert(model, formatted, { + insertionMode: "replaceSelection", + selectionMode: "after" + }); + } + ); + mathfield.snapshot("format-scientific-notation"); + mathfield.dirty = true; + mathfield.scrollIntoView(); + return true; + } + function onInput(mathfield, text, options) { + const { model } = mathfield; + if (!mathfield.isSelectionEditable) { + model.announce("plonk"); + return; + } + options != null ? options : options = {}; + if (options.focus) mathfield.focus(); + if (options.feedback) globalThis.MathfieldElement.playSound("keypress"); + if (typeof options.mode === "string") { + mathfield.switchMode(options.mode); + mathfield.snapshot(); + } + let graphemes = splitGraphemes(text); + const keyboard = window.mathVirtualKeyboard; + if (keyboard == null ? void 0 : keyboard.isShifted) { + graphemes = typeof graphemes === "string" ? graphemes.toUpperCase() : graphemes.map((c) => c.toUpperCase()); + } + if (options.simulateKeystroke) { + let handled = true; + for (const c of graphemes) { + if (onKeystroke(mathfield, new KeyboardEvent("keypress", { key: c }))) + handled = false; + } + if (handled) return; + } + if (model.mode === "latex") { + model.deferNotifications( + { content: true, selection: true, data: text, type: "insertText" }, + () => { + removeSuggestion(mathfield); + for (const c of graphemes) + ModeEditor.insert(model, c, { insertionMode: "replaceSelection" }); + mathfield.snapshot("insert-latex"); + updateAutocomplete(mathfield); + } + ); + if (text === "}") { + const latexBody = getLatexGroupBody(model); + const latex = latexBody.map((x) => x.value).join(""); + const commandMatch = latex.match(/^\\([a-zA-Z]+)/); + if (commandMatch) { + const commandName = "\\" + commandMatch[1]; + const def = getDefinition(commandName, "math"); + if ((def == null ? void 0 : def.definitionType) === "function") { + const mandatoryArgCount = def.params.filter( + (p) => !p.isOptional + ).length; + if (mandatoryArgCount > 0) { + let depth = 0; + let completedBraces = 0; + let inCommandName = true; + for (let i = 0; i < latex.length; i++) { + const char = latex[i]; + if (inCommandName) { + if (char === "\\" || /[a-zA-Z]/.test(char)) continue; + inCommandName = false; + } + if (char === "{") depth++; + else if (char === "}") { + depth--; + if (depth === 0) completedBraces++; + } + } + if (depth === 0 && completedBraces === mandatoryArgCount) { + if (complete(mathfield, "accept-all")) { + mathfield.dirty = true; + mathfield.scrollIntoView(); + return; + } + } + } + } + } + } + } else if (model.mode === "text" || model.mode === "free-text") { + const style = __spreadValues(__spreadValues({}, getSelectionStyle(model)), mathfield.defaultStyle); + for (const c of graphemes) + ModeEditor.insert(model, c, { style, insertionMode: "replaceSelection" }); + mathfield.snapshot("insert-text"); + } else if (isMathMode(model.mode)) + for (const c of graphemes) insertMathModeChar(mathfield, c); + mathfield.dirty = true; + mathfield.scrollIntoView(); + } + function currentLineListPrefix(model) { + const environment = model.parentEnvironment; + if (!environment) return void 0; + let atom = model.at(model.position); + while (atom.parent && atom.parent !== environment) atom = atom.parent; + if (atom.parent !== environment || !Array.isArray(atom.parentBranch)) + return void 0; + const [row, column] = atom.parentBranch; + const cell = environment.getCell(row, column); + if (!cell) return void 0; + const text = cell.filter((x) => x.type !== "first" && x.mode === "text").map((x) => { + var _a3; + return (_a3 = x.value) != null ? _a3 : ""; + }).join(""); + if (text.startsWith(String.fromCodePoint(8226) + " ")) return "\u2022 "; + const numbered = /^(\d+)([.)])\s/.exec(text); + if (numbered) return `${Number(numbered[1]) + 1}${numbered[2]} `; + return void 0; + } + function isInlineFreeTextMath(mathfield, latex) { + const trimmed = latex.trim(); + if (!trimmed) return true; + if (/^\\(?:text(?:bf|it|rm|sf|tt)|underline)\b/.test(trimmed)) return true; + const atoms = parseLatex(trimmed, { + context: mathfield.context, + parseMode: "math" + }).filter((atom) => atom.type !== "first"); + if (atoms.length === 0) return true; + return atoms.every( + (atom) => atom.type !== void 0 && [ + "mord", + "mpunct", + "mopen", + "mclose", + "mbin", + "mrel", + "spacing", + "text" + ].includes(atom.type) + ); + } + function getLeftSiblings(mf) { + const model = mf.model; + const result = []; + let atom = model.at(Math.min(model.position, model.anchor)); + while (atom.type !== "first") { + result.push(atom); + atom = atom.leftSibling; + } + return result; + } + function insertMathModeChar(mathfield, c) { + const model = mathfield.model; + if (!/\d/.test(c)) formatScientificNotationIfApplicable(mathfield); + const selector = { + "^": "moveToSuperscript", + "_": "moveToSubscript", + " ": mathfield.options.mathModeSpace ? ["insert", mathfield.options.mathModeSpace] : "moveAfterParent" + }[c]; + if (selector === "moveAfterParent") { + const child = model.at(Math.max(model.position, model.anchor)); + const { parent } = child; + if (parent instanceof LeftRightAtom && child.isLastSibling && mathfield.options.smartFence && parent.rightDelim === "?") { + mathfield.snapshot(); + parent.rightDelim = parent.matchingRightDelim(); + parent.isDirty = true; + model.contentDidChange({ inputType: "insertText" }); + mathfield.snapshot("insert-fence"); + } + } + if (selector) { + mathfield.executeCommand(selector); + return; + } + const style = __spreadValues({}, computeInsertStyle(mathfield)); + if (!/[a-zA-Z0-9]/.test(c) && mathfield.styleBias !== "none") { + style.variant = "normal"; + style.variantStyle = void 0; + } + const atom = model.at(model.position); + const wasPlaceholderSelected = model.selectionIsPlaceholder; + if (/\d/.test(c) && mathfield.options.smartSuperscript && atom.parentBranch === "superscript" && atom.parent.type !== "mop" && atom.parent.type !== "operator" && atom.parent.type !== "extensible-symbol" && atom.hasNoSiblings) { + if (!ModeEditor.insert(model, c, { + style, + insertionMode: "replaceSelection", + selectionMode: wasPlaceholderSelected ? "after" : "placeholder" + })) { + mathfield.undoManager.pop(); + return; + } + mathfield.snapshot("insert-mord"); + moveAfterParent(model); + return; + } + let input = c; + if (input === "{") input = "\\lbrace"; + else if (input === "}") input = "\\rbrace"; + else if (input === "&") input = "\\&"; + else if (input === "#") input = "\\#"; + else if (input === "$") input = "\\$"; + else if (input === "%") input = "\\%"; + else if (input === "~") input = "\\~"; + else if (input === "\\") input = "\\backslash"; + if (!ModeEditor.insert(model, input, { + style, + insertionMode: "replaceSelection", + selectionMode: wasPlaceholderSelected ? "after" : "placeholder" + })) + return; + mathfield.snapshot(`insert-${model.at(model.position).type}`); + if (/\d/.test(c)) { + const timeoutValue = mathfield.options.inlineShortcutTimeout > 0 ? mathfield.options.inlineShortcutTimeout : 1e3; + clearTimeout(mathfield.scientificNotationTimer); + mathfield.scientificNotationTimer = setTimeout(() => { + formatScientificNotationIfApplicable(mathfield); + }, timeoutValue); + } + } + function getSelectionStyle(model) { + var _a3, _b3, _c2, _d2; + if (model.selectionIsCollapsed) return (_b3 = (_a3 = model.at(model.position)) == null ? void 0 : _a3.style) != null ? _b3 : {}; + const first = range(model.selection)[0]; + return (_d2 = (_c2 = model.at(first + 1)) == null ? void 0 : _c2.style) != null ? _d2 : {}; + } + function insertSmartFence(model, key, style) { + var _a3; + if (!key) return false; + if (!isMathMode(model.mode)) return false; + const atom = model.at(model.position); + const { parent } = atom; + const fence = { + "(": "(", + ")": ")", + "{": "\\lbrace", + "}": "\\rbrace", + "[": "\\lbrack", + "]": "\\rbrack", + "|": "|" + }[key]; + if (!fence) return false; + const lDelim = LEFT_DELIM[fence]; + const rDelim = RIGHT_DELIM[fence]; + if (!model.selectionIsCollapsed) { + model.mathfield.snapshot(); + const [start, end] = range(model.selection); + let body = model.extractAtoms([start, end]); + body = body.filter((a) => a.type !== "first"); + const atom2 = parent.addChildrenAfter( + [ + new LeftRightAtom("left...right", body, { + leftDelim: fence, + rightDelim: rDelim + }) + ], + model.at(start) + ); + model.setSelection( + model.offsetOf(atom2.firstChild), + model.offsetOf(atom2.lastChild) + ); + model.mathfield.snapshot("insert-fence"); + model.contentDidChange({ data: fence, inputType: "insertText" }); + return true; + } + if (fence === "|") { + const delims = parent instanceof LeftRightAtom ? parent.leftDelim + parent.rightDelim : ""; + if (delims === "\\lbrace\\rbrace" || delims === "\\{\\}" || delims === "\\lbrace?") { + model.mathfield.snapshot(); + ModeEditor.insert(model, "\\,\\middle\\vert\\,", { + format: "latex", + style + }); + model.mathfield.snapshot("insert-fence"); + model.contentDidChange({ data: fence, inputType: "insertText" }); + return true; + } + } + if (rDelim) { + if (parent instanceof LeftRightAtom && parent.firstChild === atom && // At first child + (parent.leftDelim === "?" || parent.leftDelim === ".")) { + parent.leftDelim = fence; + parent.isDirty = true; + model.mathfield.snapshot(); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + if (!(parent instanceof LeftRightAtom)) { + let sibling = atom; + while (sibling) { + if (sibling.type === "mclose" && sibling.value === rDelim) break; + sibling = sibling.rightSibling; + } + if (sibling) { + model.mathfield.snapshot(); + let body = model.extractAtoms([ + model.offsetOf(atom), + model.offsetOf(sibling) + ]); + body.pop(); + body = body.filter((a) => a.type !== "first"); + const newLeftRight = new LeftRightAtom("left...right", body, { + leftDelim: fence, + rightDelim: rDelim + }); + parent.addChildrenAfter([newLeftRight], atom); + model.position = model.offsetOf(newLeftRight.firstChild); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + } + const lastSibling = model.offsetOf(atom.lastSibling); + let i; + for (i = model.position; i <= lastSibling; i++) { + const atom2 = model.at(i); + if (atom2 instanceof LeftRightAtom && (atom2.leftDelim === "?" || atom2.leftDelim === ".") && isValidOpen(fence, atom2.rightDelim)) + break; + } + const match = model.at(i); + if (i <= lastSibling && match instanceof LeftRightAtom) { + match.leftDelim = fence; + model.mathfield.snapshot(); + let extractedAtoms = model.extractAtoms([model.position, i - 1]); + extractedAtoms = extractedAtoms.filter((value) => value.type !== "first"); + match.addChildren(extractedAtoms, match.parentBranch); + model.position += 1; + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + if (parent instanceof LeftRightAtom && (parent.leftDelim === "?" || parent.leftDelim === ".") && isValidOpen(fence, parent.rightDelim)) { + parent.isDirty = true; + parent.leftDelim = fence; + model.mathfield.snapshot(); + const extractedAtoms = model.extractAtoms([ + model.offsetOf(atom.firstSibling), + model.position + ]); + for (const extractedAtom of extractedAtoms) + parent.parent.addChildBefore(extractedAtom, parent); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + if (!(parent instanceof LeftRightAtom && parent.leftDelim === "|")) { + if (fence === "(") { + let i2 = model.position - 1; + let hasDecimalPoint = false; + while (i2 >= 0) { + const atom2 = model.at(i2); + if (atom2.type === "first") break; + if (atom2.type === "mord" && atom2.value && /^[\d]$/.test(atom2.value)) { + i2 -= 1; + continue; + } + if (atom2.type === "group" && ((_a3 = atom2.body) == null ? void 0 : _a3.length) === 2 && atom2.body[0].type === "first" && atom2.body[1].value === ",") { + hasDecimalPoint = true; + break; + } + if (atom2.type === "mord" && (atom2.value === "," || atom2.value === ".")) { + hasDecimalPoint = true; + break; + } + break; + } + if (hasDecimalPoint) return false; + } + model.mathfield.snapshot(); + ModeEditor.insert(model, `\\left${fence}\\right?`, { + format: "latex", + style + }); + if (atom.lastSibling.type !== "first") { + const lastSiblingOffset = model.offsetOf(atom.lastSibling); + const content = model.extractAtoms([model.position, lastSiblingOffset]); + model.at(model.position).body = content; + model.position -= 1; + } + model.mathfield.snapshot("insert-fence"); + return true; + } + } + if (lDelim) { + if (fence === ")") { + let i2 = model.position - 1; + let hasDigits = false; + while (i2 >= 0) { + const atom2 = model.at(i2); + if (atom2.type === "first") break; + if (atom2.type === "mord" && atom2.value && /^[\d]$/.test(atom2.value)) { + hasDigits = true; + i2 -= 1; + continue; + } + break; + } + if (hasDigits && model.at(i2).type === "mopen" && model.at(i2).value === "(") + return false; + } + let sibling = atom; + while (sibling) { + if (sibling.type === "mopen" && sibling.value === lDelim) { + model.mathfield.snapshot(); + const insertAfter = sibling.leftSibling; + let body = model.extractAtoms([ + model.offsetOf(sibling.leftSibling), + model.offsetOf(atom) + ]); + [, ...body] = body; + const result = new LeftRightAtom("left...right", body, { + leftDelim: lDelim, + rightDelim: fence + }); + parent.addChildrenAfter([result], insertAfter); + model.position = model.offsetOf(result); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + sibling = sibling.leftSibling; + } + if (parent instanceof LeftRightAtom && atom.isLastSibling && isValidClose(parent.leftDelim, fence)) { + model.mathfield.snapshot(); + parent.isDirty = true; + parent.rightDelim = fence; + model.position += 1; + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + const firstSibling = model.offsetOf(atom.firstSibling); + let i; + for (i = model.position; i >= firstSibling; i--) { + const atom2 = model.at(i); + if (atom2 instanceof LeftRightAtom && (atom2.rightDelim === "?" || atom2.rightDelim === ".") && isValidClose(atom2.leftDelim, fence)) + break; + } + const match = model.at(i); + if (i >= firstSibling && match instanceof LeftRightAtom) { + model.mathfield.snapshot(); + match.rightDelim = fence; + match.addChildren( + model.extractAtoms([i, model.position]), + match.parentBranch + ); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + if (parent instanceof LeftRightAtom && (parent.rightDelim === "?" || parent.rightDelim === ".") && isValidClose(parent.leftDelim, fence)) { + model.mathfield.snapshot(); + parent.isDirty = true; + parent.rightDelim = fence; + parent.parent.addChildren( + model.extractAtoms([model.position, model.offsetOf(atom.lastSibling)]), + parent.parentBranch + ); + model.position = model.offsetOf(parent); + model.contentDidChange({ data: fence, inputType: "insertText" }); + model.mathfield.snapshot("insert-fence"); + return true; + } + const grandparent = parent.parent; + if (grandparent instanceof LeftRightAtom && (grandparent.rightDelim === "?" || grandparent.rightDelim === ".") && model.at(model.position).isLastSibling) { + model.position = model.offsetOf(grandparent); + return insertSmartFence(model, fence, style); + } + return false; + } + return false; + } + function isValidClose(open, close) { + if (!open) return true; + if (["(", "\\lparen", "{", "\\{", "\\lbrace", "[", "\\lbrack"].includes(open)) { + return [")", "\\rparen", "}", "\\}", "\\rbrace", "]", "\\rbrack"].includes( + close + ); + } + return RIGHT_DELIM[open] === close; + } + function isValidOpen(open, close) { + if (!close) return true; + if ([")", "\\rparen", "}", "\\}", "\\rbrace", "]", "\\rbrack"].includes(close)) { + return ["(", "\\lparen", "{", "\\{", "\\lbrace", "[", "\\lbrack"].includes( + open + ); + } + return LEFT_DELIM[close] === open; + } + + // src/editor-mathfield/commands.ts + register2({ + scrollIntoView: (mathfield) => { + mathfield.scrollIntoView(); + return true; + }, + scrollToStart: (mathfield) => { + mathfield.field.scroll(0, 0); + return true; + }, + scrollToEnd: (mathfield) => { + const fieldBounds = mathfield.field.getBoundingClientRect(); + mathfield.field.scroll(fieldBounds.left - window.scrollX, 0); + return true; + }, + toggleKeystrokeCaption, + toggleContextMenu: (mathfield) => { + const result = mathfield.toggleContextMenu(); + if (!result) mathfield.model.announce("plonk"); + return result; + }, + plonk: (mathfield) => { + mathfield.model.announce("plonk"); + return true; + }, + switchMode: (mathfield, mode, prefix, suffix) => { + mathfield.switchMode(mode, prefix, suffix); + return true; + } + }); + register2( + { + undo: (mathfield) => { + mathfield.undo(); + return true; + }, + redo: (mathfield) => { + mathfield.redo(); + return true; + } + }, + { + target: "mathfield", + changeContent: true + } + ); + register2( + { + insert: (mathfield, s, options) => mathfield.insert(s, options), + typedText: (mathfield, text, options) => { + onInput(mathfield, text, options); + return true; + }, + insertDecimalSeparator: (mathfield) => { + const model = mathfield.model; + if (isMathMode(model.mode) && globalThis.MathfieldElement.decimalSeparator === ",") { + const child = model.at(Math.max(model.position, model.anchor)); + if (child.isDigit()) { + mathfield.insert("{,}", { format: "latex" }); + mathfield.snapshot("insert-mord"); + return true; + } + } + mathfield.insert("."); + return true; + }, + // A 'commit' command is used to simulate pressing the return/enter key, + // e.g. when using a virtual keyboard + commit: (mathfield) => { + var _a3, _b3; + const model = mathfield.model; + const freeMode = mathfield.options.defaultMode === "free-math" ? "free-math" : mathfield.options.defaultMode === "free-text" ? "free-text" : void 0; + if (model.contentWillChange({ inputType: "insertLineBreak" })) { + (_a3 = mathfield.host) == null ? void 0 : _a3.dispatchEvent( + new Event("change", { bubbles: true, composed: true }) + ); + if ((_b3 = model.parentEnvironment) == null ? void 0 : _b3.isMultiline) { + mathfield.executeCommand("addRowAfter"); + if (freeMode) { + if (isFreeLinesRoot(model.root)) + markFreeTextAnchors(model.root, freeMode); + if (model.mode !== freeMode) mathfield.switchMode(freeMode); + if (model.mode !== freeMode) model.mode = freeMode; + } + } + model.contentDidChange({ inputType: "insertLineBreak" }); + } + return true; + }, + insertPrompt: (mathfield, id, options) => { + const promptIds = mathfield.getPrompts(); + let prospectiveId = "prompt-" + Date.now().toString(36).slice(-2) + Math.floor(Math.random() * 1e5).toString(36); + let i = 0; + while (promptIds.includes(prospectiveId) && i < 100) { + if (i === 99) { + console.error("could not find a unique ID after 100 tries"); + return false; + } + prospectiveId = "prompt-" + Date.now().toString(36).slice(-2) + Math.floor(Math.random() * 1e5).toString(36); + i++; + } + mathfield.insert(`\\placeholder[${id != null ? id : prospectiveId}]{}`, options); + return true; + } + }, + { + target: "mathfield", + canUndo: true, + changeContent: true, + changeSelection: true + } + ); + register2( + { + copyToClipboard: (mathfield) => { + mathfield.focus(); + if (mathfield.model.selectionIsCollapsed) mathfield.select(); + if (!("queryCommandSupported" in document && document.queryCommandSupported("copy") && document.execCommand("copy"))) { + mathfield.element.querySelector(".ML__keyboard-sink").dispatchEvent( + new ClipboardEvent("copy", { + bubbles: true, + composed: true + }) + ); + } + return false; + } + }, + { target: "mathfield" } + ); + register2( + { + cutToClipboard: (mathfield) => { + mathfield.focus(); + if (!("queryCommandSupported" in document && document.queryCommandSupported("cut") && document.execCommand("cut"))) { + mathfield.element.querySelector(".ML__keyboard-sink").dispatchEvent( + new ClipboardEvent("cut", { + bubbles: true, + composed: true + }) + ); + } + return true; + }, + pasteFromClipboard: (mathfield) => { + mathfield.focus(); + if ("queryCommandSupported" in document && document.queryCommandSupported("paste")) { + document.execCommand("paste"); + return true; + } + navigator.clipboard.readText().then((text) => { + if (text && mathfield.model.contentWillChange({ + inputType: "insertFromPaste", + data: text + })) { + mathfield.stopCoalescingUndo(); + mathfield.stopRecording(); + if (mathfield.insert(text, { mode: mathfield.model.mode })) { + updateAutocomplete(mathfield); + mathfield.startRecording(); + mathfield.snapshot("paste"); + mathfield.model.contentDidChange({ + inputType: "insertFromPaste" + }); + requestUpdate(mathfield); + } + } else mathfield.model.announce("plonk"); + mathfield.startRecording(); + }).catch(() => { + mathfield.model.announce("plonk"); + mathfield.startRecording(); + }); + return true; + } + }, + { + target: "mathfield", + canUndo: true, + changeContent: true, + changeSelection: true + } + ); + + // src/editor-model/commands-select.ts + function selectGroup(model) { + let [start, end] = range(model.selection); + start = boundary(model, start, "backward"); + end = boundary(model, end, "forward"); + if (start === end) { + const atom = model.at(start); + if (atom.type === "leftright") + return model.setSelection(model.offsetOf(atom.firstChild) - 1, end); + if (atom.type === "first" && (atom.parent.type === "leftright" || atom.parent.type === "surd")) { + return model.setSelection( + start - 1, + model.offsetOf(atom.parent.lastChild) + 1 + ); + } + model.setSelection(start - 1, end); + } else model.setSelection(start, end); + return true; + } + function boundary(model, pos, direction) { + var _a3; + let atom = model.at(pos); + if (!atom) return pos; + const dir = direction === "forward" ? 1 : -1; + if (atom.mode === "text") { + while (atom) { + if (atom.mode !== "text" || !LETTER_AND_DIGITS.test(atom.value)) break; + pos += dir; + atom = model.at(pos); + } + return direction === "backward" ? pos - 1 : pos; + } + if (atom.mode === "latex") { + if (/[a-zA-Z\\*]/.test(atom.value)) { + if (direction === "backward") { + while ((atom == null ? void 0 : atom.mode) === "latex" && atom.value !== "\\" && /[a-zA-Z]/.test(atom.value)) { + pos += dir; + atom = model.at(pos); + } + } else { + while ((atom == null ? void 0 : atom.mode) === "latex" && /[a-zA-Z\\*]/.test(atom.value)) { + pos += dir; + atom = model.at(pos); + } + } + } else if (atom.value === "{") { + if (direction === "forward") { + while ((atom == null ? void 0 : atom.mode) === "latex" && atom.value !== "}") { + pos += dir; + atom = model.at(pos); + } + return pos; + } + return pos - 1; + } else if (atom.value === "}") { + if (direction === "backward") { + while ((atom == null ? void 0 : atom.mode) === "latex" && atom.value !== "{") { + pos += dir; + atom = model.at(pos); + } + return pos - 1; + } + return pos; + } + return pos - 1; + } + if (atom.mode === "math") { + if (atom.isDigit()) { + while ((_a3 = model.at(pos + dir)) == null ? void 0 : _a3.isDigit()) pos += dir; + return direction === "backward" ? pos - 1 : pos; + } + if (atom.style.variant || atom.style.variantStyle) { + const targetVariant = atom.style.variant; + const targetVariantStyle = atom.style.variantStyle; + while (true) { + const nextAtom = model.at(pos + dir); + if (!nextAtom) break; + if (nextAtom.style.variant !== targetVariant) break; + if (nextAtom.style.variantStyle !== targetVariantStyle) break; + pos += dir; + } + return direction === "backward" ? pos - 1 : pos; + } + return pos; + } + return pos; + } + register2( + { + selectGroup: (model) => { + const result = selectGroup(model); + if (!result) model.announce("plonk"); + return result; + }, + selectAll: (model) => model.setSelection(0, model.lastOffset), + extendSelectionForward: (model) => move(model, "forward", { extend: true }), + extendSelectionBackward: (model) => move(model, "backward", { extend: true }), + extendToNextWord: (model) => skip(model, "forward", { extend: true }), + extendToPreviousWord: (model) => skip(model, "backward", { extend: true }), + extendSelectionUpward: (model) => move(model, "upward", { extend: true }), + extendSelectionDownward: (model) => move(model, "downward", { extend: true }), + /** + * Extend the selection until the next boundary is reached. A boundary + * is defined by an atom of a different type (mbin, mord, etc...) + * than the current focus. For example, in "1234+x=y", if the focus is between + * "1" and "2", invoking `extendToNextBoundary_` would extend the selection + * to "234". + */ + extendToNextBoundary: (model) => skip(model, "forward", { extend: true }), + /** + * Extend the selection until the previous boundary is reached. A boundary + * is defined by an atom of a different type (mbin, mord, etc...) + * than the current focus. For example, in "1+23456", if the focus is between + * "5" and "6", invoking `extendToPreviousBoundary` would extend the selection + * to "2345". + */ + extendToPreviousBoundary: (model) => skip(model, "backward", { extend: true }), + extendToGroupStart: (model) => { + const result = model.setSelection( + model.anchor, + model.offsetOf(model.at(model.position).firstSibling) + ); + if (!result) model.announce("plonk"); + return result; + }, + extendToGroupEnd: (model) => { + const result = model.setSelection( + model.anchor, + model.offsetOf(model.at(model.position).lastSibling) + ); + if (!result) model.announce("plonk"); + return result; + }, + extendToMathFieldStart: (model) => { + const result = model.setSelection(model.anchor, 0); + if (!result) model.announce("plonk"); + return result; + }, + extendToMathFieldEnd: (model) => { + const result = model.setSelection(model.anchor, model.lastOffset); + if (!result) model.announce("plonk"); + return result; + } + }, + { target: "model", changeSelection: true } + ); + + // src/editor-mathfield/pointer-input.ts + var gLastTap = null; + var gTapCount = 0; + var PointerTracker = class _PointerTracker { + static start(element, evt, onMove, onCancel) { + var _a3; + _PointerTracker.element = element; + (_a3 = _PointerTracker.controller) == null ? void 0 : _a3.abort(); + _PointerTracker.controller = new AbortController(); + const options = { signal: _PointerTracker.controller.signal }; + if ("PointerEvent" in window) { + element.addEventListener("pointermove", onMove, options); + element.addEventListener("pointerup", onCancel, options); + element.addEventListener("pointercancel", onCancel, options); + if (isPointerEvent(evt)) { + _PointerTracker.pointerId = evt.pointerId; + element.setPointerCapture(evt.pointerId); + } + } else { + window.addEventListener("mousemove", onMove, options); + window.addEventListener("blur", onCancel, options); + window.addEventListener("mouseup", onCancel, options); + } + } + static stop() { + var _a3; + (_a3 = _PointerTracker.controller) == null ? void 0 : _a3.abort(); + _PointerTracker.controller = void 0; + if (typeof _PointerTracker.pointerId === "number") { + _PointerTracker.element.releasePointerCapture(_PointerTracker.pointerId); + _PointerTracker.pointerId = void 0; + } + } + }; + function isPointerEvent(evt) { + return evt !== null && globalThis.PointerEvent !== void 0 && evt instanceof PointerEvent; + } + function pointInRect(x, y, rect) { + return x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom; + } + function clamp(value, min, max) { + if (value < min) return min; + if (value > max) return max; + return value; + } + function onPointerDown(mathfield, evt) { + var _a3, _b3, _c2, _d2, _e, _f; + if (evt.buttons > 1) return; + if (!mathfield.atomBoundsCache) + mathfield.atomBoundsCache = /* @__PURE__ */ new Map(); + else mathfield.atomBoundsCache.clear(); + const that = mathfield; + let anchor; + let trackingPointer = false; + let trackingWords = false; + let dirty = "none"; + let scrollLeft = false; + let scrollRight = false; + const anchorX = evt.clientX; + const anchorY = evt.clientY; + const anchorTime = Date.now(); + const field = that.field; + const scrollInterval = setInterval(() => { + if (scrollLeft) field.scroll({ top: 0, left: field.scrollLeft - 16 }); + else if (scrollRight) field.scroll({ top: 0, left: field.scrollLeft + 16 }); + }, 32); + function endPointerTracking() { + PointerTracker.stop(); + trackingPointer = false; + clearInterval(scrollInterval); + mathfield.element.classList.remove("tracking"); + if (evt) evt.preventDefault(); + } + function onPointerMove(evt2) { + if (!that.hasFocus()) { + endPointerTracking(); + return; + } + const x = evt2.clientX; + const y = evt2.clientY; + const hysteresis = isPointerEvent(evt2) && evt2.pointerType === "touch" ? 20 : 5; + if (Date.now() < anchorTime + 500 && Math.abs(anchorX - x) < hysteresis && Math.abs(anchorY - y) < hysteresis) { + evt2.preventDefault(); + evt2.stopPropagation(); + return; + } + const fieldBounds = field.getBoundingClientRect(); + scrollRight = x > fieldBounds.right; + scrollLeft = x < fieldBounds.left; + let actualAnchor = anchor; + if (isPointerEvent(evt2)) { + if (!evt2.isPrimary) { + actualAnchor = offsetFromPoint(that, evt2.clientX, evt2.clientY, { + bias: 0 + }); + } + } + const focus = offsetFromPoint(that, x, y, { + bias: x <= anchorX ? x === anchorX ? 0 : -1 : 1 + }); + if (actualAnchor >= 0 && focus >= 0) { + that.model.extendSelectionTo(actualAnchor, focus); + requestUpdate(mathfield); + } + if (trackingWords) selectGroup(that.model); + } + if (gLastTap && Math.abs(gLastTap.x - anchorX) < 5 && Math.abs(gLastTap.y - anchorY) < 5 && Date.now() < gLastTap.time + 500) { + gTapCount += 1; + gLastTap.time = anchorTime; + } else { + gLastTap = { + x: anchorX, + y: anchorY, + time: anchorTime + }; + gTapCount = 1; + } + const bounds = field.getBoundingClientRect(); + const containerBounds = (_b3 = (_a3 = mathfield.container) == null ? void 0 : _a3.getBoundingClientRect()) != null ? _b3 : mathfield.element.getBoundingClientRect(); + const hostBounds = (_d2 = (_c2 = mathfield.element) == null ? void 0 : _c2.getBoundingClientRect()) != null ? _d2 : containerBounds; + const anchorInsideField = pointInRect(anchorX, anchorY, bounds); + const anchorInsideContainer = !anchorInsideField && containerBounds ? pointInRect(anchorX, anchorY, containerBounds) : false; + const anchorInsideHost = !anchorInsideField && !anchorInsideContainer && hostBounds ? pointInRect(anchorX, anchorY, hostBounds) : false; + const selectionAnchorX = anchorInsideField ? anchorX : anchorInsideContainer || anchorInsideHost ? clamp(anchorX, bounds.left, bounds.right) : anchorX; + const selectionAnchorY = anchorInsideField ? anchorY : anchorInsideContainer || anchorInsideHost ? clamp(anchorY, bounds.top, bounds.bottom) : anchorY; + if (anchorInsideField || anchorInsideContainer || anchorInsideHost) { + mathfield.flushInlineShortcutBuffer(); + anchor = offsetFromPoint(mathfield, selectionAnchorX, selectionAnchorY, { + bias: 0 + }); + if (anchor !== mathfield.model.anchor) { + const preservedVariantStyle = mathfield.defaultStyle.variantStyle; + mathfield.defaultStyle = preservedVariantStyle !== void 0 ? { variantStyle: preservedVariantStyle } : {}; + mathfield.styleBias = "left"; + } + if (anchor >= 0) { + mathfield.element.classList.add("tracking"); + if (evt.shiftKey) { + const wasCollapsed = mathfield.model.selectionIsCollapsed; + mathfield.model.extendSelectionTo(mathfield.model.anchor, anchor); + if (acceptCommandSuggestion(mathfield.model) || wasCollapsed) + dirty = "all"; + else dirty = "selection"; + } else if (mathfield.model.at(anchor).type === "placeholder" || mathfield.model.at(anchor).type === "prompt") { + const atom = mathfield.model.at(anchor); + if (atom.hasChildren && atom.firstChild) + mathfield.model.position = mathfield.model.offsetOf(atom.firstChild); + else mathfield.model.setSelection(anchor - 1, anchor); + dirty = "selection"; + } else if (((_e = mathfield.model.at(anchor).rightSibling) == null ? void 0 : _e.type) === "placeholder" || ((_f = mathfield.model.at(anchor).rightSibling) == null ? void 0 : _f.type) === "prompt") { + const atom = mathfield.model.at(anchor).rightSibling; + if (atom.hasChildren && atom.firstChild) + mathfield.model.position = mathfield.model.offsetOf(atom.firstChild); + else mathfield.model.setSelection(anchor, anchor + 1); + dirty = "selection"; + } else { + const atom = mathfield.model.at(anchor); + if (atom.captureSelection && atom.hasChildren && atom.body && atom.body.length > 0) { + const bodyAtom = atom.body.find((a) => a.type !== "first"); + if (bodyAtom && (bodyAtom.type === "placeholder" || bodyAtom.type === "prompt") && bodyAtom.hasChildren && bodyAtom.firstChild) { + mathfield.model.position = mathfield.model.offsetOf( + bodyAtom.firstChild + ); + dirty = "selection"; + } else { + mathfield.model.position = anchor; + if (acceptCommandSuggestion(mathfield.model)) dirty = "all"; + else dirty = "selection"; + } + } else { + mathfield.model.position = anchor; + if (acceptCommandSuggestion(mathfield.model)) dirty = "all"; + else dirty = "selection"; + } + } + if (evt.detail === 3 || gTapCount > 2) { + endPointerTracking(); + if (evt.detail === 3 || gTapCount === 3) { + mathfield.model.selection = { + ranges: [[0, mathfield.model.lastOffset]] + }; + dirty = "all"; + } + } else if (!trackingPointer) { + trackingPointer = true; + PointerTracker.start(field, evt, onPointerMove, endPointerTracking); + if (evt.detail === 2 || gTapCount === 2) { + trackingWords = true; + selectGroup(mathfield.model); + dirty = "all"; + } + } + } + if (!mathfield.hasFocus()) { + dirty = "none"; + mathfield.onFocus(); + mathfield.model.announce("line"); + } + } else gLastTap = null; + mathfield.stopCoalescingUndo(); + if (dirty !== "none") { + if (mathfield.model.selectionIsCollapsed) dirty = "all"; + requestUpdate(mathfield); + } + evt.preventDefault(); + } + function distance(x, y, r) { + if (x >= r.left && x <= r.right && y >= r.top && y <= r.bottom) return 0; + const dx = x - (r.left + r.right) / 2; + const dy = y - (r.top + r.bottom) / 2; + return dx * dx + dy * dy; + } + function nearestAtomFromPointRecursive(mathfield, cache, atom, x, y) { + if (!atom.id) return [Infinity, null]; + if (cache.has(atom.id)) return cache.get(atom.id); + const bounds = getAtomBounds(mathfield, atom); + if (!bounds) return [Infinity, null]; + let result = [ + Infinity, + null + ]; + const model = mathfield.model; + if (atom instanceof ArrayAtom) { + let targetRowIndex = -1; + let minRowDistance = Infinity; + for (let rowIndex = 0; rowIndex < atom.rows.length; rowIndex++) { + const row = atom.rows[rowIndex]; + if (!row || row.length === 0) continue; + let rowTop = Infinity; + let rowBottom = -Infinity; + for (const cell of row) { + if (cell) { + for (const atom2 of cell) { + const atomBounds = getAtomBounds(mathfield, atom2); + if (atomBounds) { + rowTop = Math.min(rowTop, atomBounds.top); + rowBottom = Math.max(rowBottom, atomBounds.bottom); + } + } + } + } + if (rowTop !== Infinity && rowBottom !== -Infinity) { + let rowDistance; + if (y < rowTop) rowDistance = rowTop - y; + else if (y > rowBottom) rowDistance = y - rowBottom; + else { + rowDistance = 0; + } + if (rowDistance < minRowDistance) { + minRowDistance = rowDistance; + targetRowIndex = rowIndex; + } + } + } + const rowsToSearch = targetRowIndex >= 0 ? [atom.rows[targetRowIndex]] : atom.rows; + for (const row of rowsToSearch) { + for (const cell of row) { + if (cell) { + for (const atom2 of cell) { + const r2 = nearestAtomFromPointRecursive( + mathfield, + cache, + atom2, + x, + y + ); + if (r2[0] <= result[0]) result = r2; + } + } + } + } + if (!atom.isMultiline) { + for (const child of atom.children) { + const r = nearestAtomFromPointRecursive(mathfield, cache, child, x, y); + if (r[0] <= result[0]) result = r; + } + } + } else if (atom.hasChildren && !atom.captureSelection && x >= bounds.left && x <= bounds.right) { + const children = atom.children; + for (const child of children) { + const r = nearestAtomFromPointRecursive(mathfield, cache, child, x, y); + if (r[0] <= result[0]) result = r; + } + for (const branch of atom.branches) { + const siblings = atom.branch(branch); + if (!siblings || siblings.length === 0) continue; + const siblingsRange = [ + model.offsetOf(siblings[0]), + model.offsetOf(siblings[siblings.length - 1]) + ]; + const r = getRangeBoundingRect(mathfield, siblingsRange); + if (y >= r.top && y <= r.bottom) { + for (const atom2 of siblings) { + const r2 = nearestAtomFromPointRecursive(mathfield, cache, atom2, x, y); + if (r2[0] <= result[0]) result = r2; + } + } + } + } + if (!result[1]) result = [distance(x, y, bounds), atom]; + cache.set(atom.id, result); + return result; + } + function nearestAtomFromPoint(mathfield, x, y) { + const [, atom] = nearestAtomFromPointRecursive( + mathfield, + /* @__PURE__ */ new Map(), + mathfield.model.root, + x, + y + ); + return atom; + } + function offsetFromPoint(mathfield, x, y, options) { + var _a3; + const bounds = mathfield.field.querySelector(".ML__latex").getBoundingClientRect(); + if (!bounds) return 0; + if (x > bounds.right || y > bounds.bottom + 8) + return mathfield.model.lastOffset; + if (x < bounds.left || y < bounds.top - 8) return 0; + options = options != null ? options : {}; + options.bias = (_a3 = options.bias) != null ? _a3 : 0; + let atom = nearestAtomFromPoint(mathfield, x, y); + const parents = []; + let parent = atom; + while (parent) { + parents.unshift(parent); + parent = parent.parent; + } + for (const x2 of parents) { + if (x2.captureSelection) { + atom = x2; + break; + } + } + let result = mathfield.model.offsetOf(atom); + if (result < 0) return -1; + if (atom.leftSibling) { + const skipMidlineBias = atom.type === "placeholder" || atom.type === "prompt"; + if (options.bias === 0 && !skipMidlineBias) { + const bounds2 = getAtomBounds(mathfield, atom); + if (bounds2 && x < (bounds2.left + bounds2.right) / 2) + result = mathfield.model.offsetOf(atom.leftSibling); + } else if (options.bias < 0) + result = mathfield.model.offsetOf(atom.leftSibling); + } + return result; + } + + // src/editor-mathfield/mode-editor-math.ts + var MathModeEditor = class extends ModeEditor { + constructor() { + super("math"); + } + onPaste(mathfield, data) { + if (!data) return false; + if (!mathfield.model.contentWillChange({ + data: typeof data === "string" ? data : null, + dataTransfer: typeof data === "string" ? null : data, + inputType: "insertFromPaste" + })) + return false; + let text = ""; + let format = "auto"; + let json = typeof data !== "string" ? data.getData("application/json+mathlive") : ""; + if (json) { + try { + const atomJson = JSON.parse(json); + if (atomJson && Array.isArray(atomJson)) { + mathfield.snapshot(); + const atoms = fromJson(atomJson); + const { model } = mathfield; + if (!model.selectionIsCollapsed) + model.deleteAtoms(range(model.selection)); + const cursor = model.at(model.position); + if (cursor.parent instanceof ArrayAtom) { + console.assert(cursor.parentBranch !== void 0); + const columns = []; + let buffer = []; + if (atoms[0].type === "first") atoms.shift(); + if (atoms[atoms.length - 1].type === "first") atoms.pop(); + for (const atom of atoms) { + if (atom.type === "first" && buffer.length > 0) { + columns.push(buffer); + buffer = [atom]; + } else buffer.push(atom); + } + if (buffer.length > 0) columns.push(buffer); + let currentRow = Number(cursor.parentBranch[0]); + let currentColumn = Number(cursor.parentBranch[1]); + const maxColumns = cursor.parent.maxColumns; + while (cursor.parent.colCount - currentColumn < columns.length && cursor.parent.colCount < maxColumns) + cursor.parent.addColumn(); + cursor.parent.addChildrenAfter(columns[0], cursor); + for (let i = 1; i < columns.length; i++) { + currentColumn++; + if (currentColumn >= maxColumns) { + currentColumn = 0; + cursor.parent.addRowAfter(currentRow); + currentRow++; + } + cursor.parent.setCell(currentRow, currentColumn, columns[i]); + } + } else { + cursor.parent.addChildrenAfter( + atoms.filter((a) => a.type !== "first"), + cursor + ); + } + model.position = model.offsetOf(atoms[atoms.length - 1]); + model.contentDidChange({ inputType: "insertFromPaste" }); + requestUpdate(mathfield); + return true; + } + } catch (e) { + } + } + json = typeof data !== "string" ? data.getData("application/json") : ""; + if (json && globalThis.MathfieldElement.computeEngine) { + try { + const expr = JSON.parse(json); + if (typeof expr === "object" && "latex" in expr && expr.latex) + text = expr.latex; + if (!text) { + const box = globalThis.MathfieldElement.computeEngine.box(expr); + if (box && !box.has("Error")) text = box.latex; + } + if (!text) format = "latex"; + } catch (e) { + } + } + if (!text && typeof data !== "string") { + text = data.getData("application/x-latex"); + if (text) format = "latex"; + } + if (!text) + text = typeof data === "string" ? data : data.getData("text/plain"); + if (text) { + let wasLatex; + [wasLatex, text] = trimModeShiftCommand(text); + if (format === "auto" && wasLatex) format = "latex"; + mathfield.stopCoalescingUndo(); + mathfield.stopRecording(); + if (this.insert(mathfield.model, text, { format })) { + mathfield.startRecording(); + mathfield.snapshot("paste"); + requestUpdate(mathfield); + } + mathfield.startRecording(); + return true; + } + return false; + } + insert(model, input, options) { + var _a3, _b3, _c2, _d2; + if (model.mode === "free-math" && (input.includes("\n") || input.includes("\r") || input.includes(" "))) + return insertFreeMath(this, model, input, options); + const data = typeof input === "string" ? input : (_b3 = (_a3 = globalThis.MathfieldElement.computeEngine) == null ? void 0 : _a3.box(input).latex) != null ? _b3 : ""; + if (!options.silenceNotifications && !model.contentWillChange({ data, inputType: "insertText" })) + return false; + if (!options.insertionMode) options.insertionMode = "replaceSelection"; + if (!options.selectionMode) options.selectionMode = "placeholder"; + if (!options.format) options.format = "auto"; + const { silenceNotifications } = model; + if (options.silenceNotifications) model.silenceNotifications = true; + const contentWasChanging = model.silenceNotifications; + model.silenceNotifications = true; + const args = { + "?": "\\placeholder{}", + "@": "\\placeholder{}" + }; + args[0] = options.insertionMode === "replaceAll" ? "" : model.getValue(model.selection, "latex-unstyled"); + if (options.insertionMode === "replaceSelection") + model.deleteAtoms(range(model.selection)); + else if (options.insertionMode === "replaceAll") model.deleteAtoms(); + else if (options.insertionMode === "insertBefore") + model.collapseSelection("backward"); + else if (options.insertionMode === "insertAfter") + model.collapseSelection("forward"); + const currentAtom = model.at(model.position); + if (currentAtom && !currentAtom.isLastSibling && ((_c2 = model.at(model.position + 1)) == null ? void 0 : _c2.type) === "placeholder") { + model.deleteAtoms([model.position, model.position + 1]); + } else if ((currentAtom == null ? void 0 : currentAtom.type) === "placeholder") { + model.deleteAtoms([model.position - 1, model.position]); + } + let implicitArgumentOffset = -1; + if (args[0]) { + args["@"] = args[0]; + } else if (typeof input === "string" && /(^|[^\\])#@/.test(input)) { + implicitArgumentOffset = getImplicitArgOffset(model); + if (implicitArgumentOffset >= 0) { + args["@"] = model.getValue( + implicitArgumentOffset, + model.position, + "latex" + ); + } + } + if (!args[0]) args[0] = args["?"]; + let usedArg = false; + const argFunction = (arg) => { + usedArg = true; + return args[arg]; + }; + let [format, newAtoms] = convertStringToAtoms( + model, + input, + argFunction, + options + ); + if (!newAtoms) return false; + const insertingFraction = newAtoms.length === 1 && newAtoms[0].type === "genfrac"; + const atomAtPos = model.at(model.position); + if (insertingFraction && implicitArgumentOffset >= 0 && typeof model.mathfield.options.isImplicitFunction === "function" && atomAtPos && model.mathfield.options.isImplicitFunction(atomAtPos.command)) { + args["@"] = args["?"]; + usedArg = false; + [format, newAtoms] = convertStringToAtoms( + model, + input, + argFunction, + options + ); + } + const implicitArgEndOffset = model.position; + if (newAtoms.length === 1 && newAtoms[0].isRoot) model.root = newAtoms[0]; + else { + const atom = model.at(model.position); + const parent = (_d2 = atom == null ? void 0 : atom.parent) != null ? _d2 : model.root; + const hadEmptyBody = parent.hasEmptyBranch("body"); + if (insertingFraction && format !== "latex" && model.mathfield.options.removeExtraneousParentheses && parent instanceof LeftRightAtom && parent.leftDelim === "(" && hadEmptyBody) { + const newParent = parent.parent; + const branch = parent.parentBranch; + newParent.removeChild(parent); + newParent.setChildren(newAtoms, branch); + } + const cursor = model.at(model.position); + if (cursor) { + cursor.parent.addChildrenAfter(newAtoms, cursor); + } else { + const body = parent.branch("body"); + const firstAtom = body == null ? void 0 : body[0]; + if (firstAtom) { + parent.addChildrenAfter(newAtoms, firstAtom); + } else { + parent.setChildren(newAtoms, "body"); + } + } + if (implicitArgumentOffset >= 0) { + model.deleteAtoms([implicitArgumentOffset, implicitArgEndOffset]); + const rootBody = model.root.branch("body"); + if (rootBody) { + for (const child of rootBody) { + if (child.parent !== model.root) { + child.parent = model.root; + child.parentBranch = "body"; + } + } + } + } + if (format === "latex" && typeof input === "string") { + if ((parent == null ? void 0 : parent.type) === "root" && hadEmptyBody && !usedArg) + parent.verbatimLatex = input; + } + } + model.silenceNotifications = contentWasChanging; + const lastNewAtom = newAtoms[newAtoms.length - 1]; + if (options.selectionMode === "placeholder") { + let placeholder; + if (newAtoms.length === 1 && newAtoms[0].type === "genfrac") { + const numerator = newAtoms[0].branch("above"); + placeholder = numerator == null ? void 0 : numerator.find((x) => x.type === "placeholder"); + if (!placeholder) { + const denominator = newAtoms[0].branch("below"); + placeholder = denominator == null ? void 0 : denominator.find((x) => x.type === "placeholder"); + } + } + if (!placeholder) { + placeholder = newAtoms.flatMap((x) => [x, ...x.children]).find((x) => x.type === "placeholder"); + } + if (placeholder) { + const placeholderOffset = model.offsetOf(placeholder); + model.setSelection(placeholderOffset - 1, placeholderOffset); + model.announce("move"); + } else if (lastNewAtom) { + const body = lastNewAtom.body; + const hadEmptyBody = lastNewAtom.hasEmptyBranch("body"); + if (body && hadEmptyBody) { + model.setSelection( + model.offsetOf(body[0]), + model.offsetOf(body[body.length - 1]) + 1 + ); + } else { + model.position = model.offsetOf(lastNewAtom); + } + } + } else if (options.selectionMode === "before") { + } else if (options.selectionMode === "after") { + if (lastNewAtom) model.position = model.offsetOf(lastNewAtom); + } else if (options.selectionMode === "item") + model.setSelection(model.anchor, model.offsetOf(lastNewAtom)); + model.contentDidChange({ data, inputType: "insertText" }); + model.silenceNotifications = silenceNotifications; + return true; + } + }; + function convertStringToAtoms(model, s, args, options) { + var _a3; + let format = void 0; + let result = []; + if (typeof s !== "string" || options.format === "math-json") { + const ce = globalThis.MathfieldElement.computeEngine; + if (!ce) return ["math-json", []]; + [format, s] = ["latex", ce.box(s).latex]; + result = parseLatex(s, { context: model.mathfield.context }); + } else if (typeof s === "string" && options.format === "ascii-math") { + [format, s] = parseMathString(s, { + format: "ascii-math", + inlineShortcuts: model.mathfield.options.inlineShortcuts + }); + result = parseLatex(s, { context: model.mathfield.context }); + if (format !== "latex" && model.mathfield.options.removeExtraneousParentheses) + result = result.map((x) => removeExtraneousParenthesis(x)); + } else if (options.format === "auto" || ((_a3 = options.format) == null ? void 0 : _a3.startsWith("latex"))) { + if (options.format === "auto") { + [format, s] = parseMathString(s, { + format: "auto", + inlineShortcuts: model.mathfield.options.inlineShortcuts + }); + } + if (options.format === "latex") [, s] = trimModeShiftCommand(s); + result = parseLatex(s, { + context: model.mathfield.context, + args + }); + if (options.format !== "latex" && model.mathfield.options.removeExtraneousParentheses) + result = result.map((x) => removeExtraneousParenthesis(x)); + } + applyStyleToUnstyledAtoms(result, options.style); + return [format != null ? format : "latex", result]; + } + function removeExtraneousParenthesis(atom) { + var _a3; + if (atom instanceof LeftRightAtom && atom.leftDelim !== "(" && atom.rightDelim === ")") { + const children = (_a3 = atom.body) == null ? void 0 : _a3.filter((x) => x.type !== "first"); + if ((children == null ? void 0 : children.length) === 1 && children[0].type === "genfrac") + return children[0]; + } + for (const branch of atom.branches) { + if (!atom.hasEmptyBranch(branch)) { + atom.setChildren( + atom.branch(branch).map((x) => removeExtraneousParenthesis(x)), + branch + ); + } + } + if (atom instanceof ArrayAtom) { + atom.forEachCell((cell, row, column) => { + atom.setCell( + row, + column, + cell.map((x) => removeExtraneousParenthesis(x)) + ); + }); + } + return atom; + } + function getImplicitArgOffset(model) { + let atom = model.at(model.position); + if (!atom) return -1; + if (atom.mode === "text") { + while (!atom.isFirstSibling && atom.mode === "text") + atom = atom.leftSibling; + return model.offsetOf(atom); + } + const atomAtCursor = atom; + let afterDelim = false; + if (atom.type === "mclose") { + const delim = LEFT_DELIM[atom.value]; + while (!atom.isFirstSibling && !(atom.type === "mopen" && atom.value === delim)) { + const left = atom.leftSibling; + if (!left) break; + atom = left; + } + if (!atom.isFirstSibling) { + const left = atom.leftSibling; + if (left) atom = left; + } + afterDelim = true; + } else if (atom.type === "leftright") { + const left = atom.leftSibling; + if (left) atom = left; + afterDelim = true; + } + if (afterDelim) { + while (!atom.isFirstSibling && (atom.isFunction || isImplicitArg(atom))) { + const left = atom.leftSibling; + if (!left) break; + atom = left; + } + } else { + const delimiterStack = []; + while (!atom.isFirstSibling && (isImplicitArg(atom) || delimiterStack.length > 0)) { + if (atom.type === "mclose") delimiterStack.unshift(atom.value); + if (atom.type === "mopen" && delimiterStack.length > 0 && atom.value === LEFT_DELIM[delimiterStack[0]]) + delimiterStack.shift(); + const left = atom.leftSibling; + if (!left) break; + atom = left; + } + } + if (atomAtCursor === atom) return -1; + return model.offsetOf(atom); + } + function isPartOfScientificNotation(atom) { + if (atom.type === "mord" && atom.value === "e") { + const left = atom.leftSibling; + if (left && left.isDigit()) return true; + } + if (atom.type === "mbin" && (atom.value === "+" || atom.value === "-" || atom.value === "\u2212")) { + const left = atom.leftSibling; + const right = atom.rightSibling; + if ((left == null ? void 0 : left.type) === "mord" && left.value === "e" && right && right.isDigit()) { + const leftLeft = left.leftSibling; + if (leftLeft && leftLeft.isDigit()) return true; + } + } + if (atom.type === "subsup") { + const left1 = atom.leftSibling; + if (left1 && left1.isDigit() && left1.value === "0") { + const left2 = left1.leftSibling; + if (left2 && left2.isDigit() && left2.value === "1") { + const left3 = left2.leftSibling; + if ((left3 == null ? void 0 : left3.type) === "mbin" && (left3.value === "\xD7" || left3.value === "\\times")) { + const left4 = left3.leftSibling; + if (left4 && left4.isDigit()) return true; + } + } + } + } + if (atom.isDigit() && atom.value === "0") { + const left = atom.leftSibling; + const right = atom.rightSibling; + if (left && left.isDigit() && left.value === "1" && (right == null ? void 0 : right.type) === "subsup") { + const left2 = left.leftSibling; + if ((left2 == null ? void 0 : left2.type) === "mbin" && (left2.value === "\xD7" || left2.value === "\\times")) { + const left3 = left2.leftSibling; + if (left3 && left3.isDigit()) return true; + } + } + } + if (atom.isDigit() && atom.value === "1") { + const right1 = atom.rightSibling; + if (right1 && right1.isDigit() && right1.value === "0") { + const right2 = right1.rightSibling; + if ((right2 == null ? void 0 : right2.type) === "subsup") { + const left = atom.leftSibling; + if ((left == null ? void 0 : left.type) === "mbin" && (left.value === "\xD7" || left.value === "\\times")) { + const left2 = left.leftSibling; + if (left2 && left2.isDigit()) return true; + } + } + } + } + if (atom.type === "mbin" && (atom.value === "\xD7" || atom.value === "\\times")) { + const left = atom.leftSibling; + const right1 = atom.rightSibling; + if (left && left.isDigit() && right1 && right1.isDigit() && right1.value === "1") { + const right2 = right1.rightSibling; + if (right2 && right2.isDigit() && right2.value === "0") { + const right3 = right2.rightSibling; + if ((right3 == null ? void 0 : right3.type) === "subsup") return true; + } + } + } + return false; + } + function isImplicitArg(atom) { + if (atom.isDigit()) return true; + if (isPartOfScientificNotation(atom)) return true; + if (atom.type && /^(mord|surd|subsup|leftright|mop|mclose)$/.test(atom.type)) { + if (atom.type === "extensible-symbol") return false; + return true; + } + return false; + } + new MathModeEditor(); + ModeEditor._modes["free-math"] = ModeEditor._modes["math"]; + function insertFreeMath(editor, model, input, options) { + var _a3; + const lines = input.split(/\r\n|\n|\r/); + let changed = false; + if (options.insertionMode === "replaceSelection" && !model.selectionIsCollapsed) + model.deleteAtoms(range(model.selection)); + else if (options.insertionMode === "replaceAll") { + model.deleteAtoms(); + model.position = 0; + } + for (let lineIndex = 0; lineIndex < lines.length; lineIndex++) { + const segments = lines[lineIndex].split(" "); + for (let segmentIndex = 0; segmentIndex < segments.length; segmentIndex++) { + if (segmentIndex > 0) { + const cursor = model.at(model.position); + const tab = new TextAtom(" ", " ", (_a3 = options.style) != null ? _a3 : {}); + cursor.parent.addChildrenAfter([tab], cursor); + model.position = model.offsetOf(tab); + model.mode = "free-math"; + changed = true; + } + const segment = segments[segmentIndex]; + if (segment) { + editor.insert(model, segment, __spreadProps(__spreadValues({}, options), { + insertionMode: "insertAfter", + selectionMode: "after" + })); + changed = true; + } + } + if (lineIndex < lines.length - 1) { + model.mathfield.executeCommand("addRowAfter"); + changed = true; + } + } + model.mode = "free-math"; + return changed; + } + + // src/editor-mathfield/mode-editor-text.ts + var TextModeEditor = class extends ModeEditor { + constructor() { + super("text"); + } + onPaste(mathfield, data) { + if (!data) return false; + const text = typeof data === "string" ? data : data.getData("text/plain"); + if (text && mathfield.model.contentWillChange({ + inputType: "insertFromPaste", + data: text + })) { + mathfield.stopCoalescingUndo(); + mathfield.stopRecording(); + if (this.insert(mathfield.model, text)) { + mathfield.model.contentDidChange({ inputType: "insertFromPaste" }); + mathfield.startRecording(); + mathfield.snapshot("paste"); + requestUpdate(mathfield); + } + mathfield.startRecording(); + return true; + } + return false; + } + insert(model, text, options = {}) { + if (model.mode === "free-text") + return insertFreeText(model, text, options); + if (!model.contentWillChange({ data: text, inputType: "insertText" })) + return false; + if (!options.insertionMode) options.insertionMode = "replaceSelection"; + if (!options.selectionMode) options.selectionMode = "placeholder"; + if (!options.format) options.format = "auto"; + const { silenceNotifications } = model; + if (options.silenceNotifications) model.silenceNotifications = true; + const contentWasChanging = model.silenceNotifications; + model.silenceNotifications = true; + if (options.insertionMode === "replaceSelection" && !model.selectionIsCollapsed) + model.deleteAtoms(range(model.selection)); + else if (options.insertionMode === "replaceAll") { + model.root.setChildren([], "body"); + model.position = 0; + } else if (options.insertionMode === "insertBefore") + model.collapseSelection("backward"); + else if (options.insertionMode === "insertAfter") + model.collapseSelection("forward"); + const newAtoms = convertStringToAtoms2(text, model.mathfield.context); + applyStyleToUnstyledAtoms(newAtoms, options.style); + if (!newAtoms) return false; + const cursor = model.at(model.position); + const lastNewAtom = cursor.parent.addChildrenAfter(newAtoms, cursor); + model.silenceNotifications = contentWasChanging; + if (options.selectionMode === "before") { + } else if (options.selectionMode === "item") + model.setSelection(model.anchor, model.offsetOf(lastNewAtom)); + else if (lastNewAtom) model.position = model.offsetOf(lastNewAtom); + model.contentDidChange({ data: text, inputType: "insertText" }); + model.silenceNotifications = silenceNotifications; + return true; + } + }; + function insertFreeText(model, text, options) { + if (!model.contentWillChange({ data: text, inputType: "insertText" })) + return false; + if (!options.insertionMode) options.insertionMode = "replaceSelection"; + if (!options.selectionMode) options.selectionMode = "placeholder"; + const { silenceNotifications } = model; + if (options.silenceNotifications) model.silenceNotifications = true; + const contentWasChanging = model.silenceNotifications; + model.silenceNotifications = true; + if (options.insertionMode === "replaceSelection" && !model.selectionIsCollapsed) + model.deleteAtoms(range(model.selection)); + else if (options.insertionMode === "replaceAll") { + model.deleteAtoms([0, -1]); + model.position = 0; + } else if (options.insertionMode === "insertBefore") + model.collapseSelection("backward"); + else if (options.insertionMode === "insertAfter") + model.collapseSelection("forward"); + const start = model.position; + const lines = text.split(/\r\n|\n|\r/); + let lastNewAtom; + for (let i = 0; i < lines.length; i++) { + const atoms = makeFreeTextAtoms(lines[i], options.style); + if (atoms.length > 0) { + const cursor = model.at(model.position); + lastNewAtom = cursor.parent.addChildrenAfter(atoms, cursor); + model.position = model.offsetOf(lastNewAtom); + } + if (i < lines.length - 1) addRowAfter(model); + } + model.silenceNotifications = contentWasChanging; + if (options.selectionMode === "before") model.position = start; + else if (options.selectionMode === "item" && lastNewAtom) + model.setSelection(start, model.offsetOf(lastNewAtom)); + model.contentDidChange({ data: text, inputType: "insertText" }); + model.silenceNotifications = silenceNotifications; + return true; + } + function convertStringToAtoms2(s, context) { + if (s.includes("$")) { + const segments = []; + let i = 0; + let inMath = false; + let currentSegment = ""; + while (i < s.length) { + if (s[i] === "$") { + if (i + 1 < s.length && s[i + 1] === "$") { + if (!inMath && currentSegment) { + segments.push(escapeTextModeCharacters(currentSegment)); + currentSegment = ""; + } else if (inMath && currentSegment) { + segments.push(currentSegment); + currentSegment = ""; + } + segments.push("$$"); + inMath = !inMath; + i += 2; + } else { + if (!inMath && currentSegment) { + segments.push(escapeTextModeCharacters(currentSegment)); + currentSegment = ""; + } else if (inMath && currentSegment) { + segments.push(currentSegment); + currentSegment = ""; + } + segments.push("$"); + inMath = !inMath; + i += 1; + } + } else { + currentSegment += s[i]; + i += 1; + } + } + if (currentSegment) { + if (inMath) segments.push(currentSegment); + else segments.push(escapeTextModeCharacters(currentSegment)); + } + return parseLatex(segments.join(""), { context, parseMode: "text" }); + } + return parseLatex(escapeTextModeCharacters(s), { + context, + parseMode: "text" + }); + } + function escapeTextModeCharacters(s) { + s = s.replace(/\\/g, "\\textbackslash "); + s = s.replace(/#/g, "\\#"); + s = s.replace(/%/g, "\\%"); + s = s.replace(/&/g, "\\&"); + s = s.replace(/_/g, "\\_"); + s = s.replace(/{/g, "\\textbraceleft "); + s = s.replace(/}/g, "\\textbraceright "); + s = s.replace(/lbrace/g, "\\textbraceleft "); + s = s.replace(/rbrace/g, "\\textbraceright "); + s = s.replace(/\^/g, "\\textasciicircum "); + s = s.replace(/~/g, "\\textasciitilde "); + s = s.replace(/£/g, "\\textsterling "); + return s; + } + var textModeEditor = new TextModeEditor(); + ModeEditor._modes["free-text"] = textModeEditor; + + // src/virtual-keyboard/mathfield-proxy.ts + function makeProxy(mf) { + return { + value: mf.model.getValue(), + selectionIsCollapsed: mf.model.selectionIsCollapsed, + canUndo: mf.canUndo(), + canRedo: mf.canRedo(), + style: commonStyle(mf.model), + mode: mf.model.mode + }; + } + function commonStyle(model) { + var _a3; + if (model.selectionIsCollapsed) return (_a3 = model.at(model.position)) == null ? void 0 : _a3.style; + const selectedAtoms = model.getAtoms(model.selection); + if (selectedAtoms.length === 0) return {}; + const style = __spreadValues({}, selectedAtoms[0].style); + for (const atom of selectedAtoms) { + for (const [key, value] of Object.entries(atom.style)) + if (style[key] !== value) delete style[key]; + } + return style; + } + + // src/editor/environment-popover.ts + var padding = 4; + var radius = 20; + var paddedWidth = 2 * (radius + padding); + var newPlus = (x, y) => ` + + + + + `; + var newMinus = (x, y) => ` + + + + + `; + var newArrow = (x, y, theta) => ` + + + + + + `; + var controllerSvg = ` + + + + + ${newArrow(2 * (padding + paddedWidth), 2 * padding + 3 * paddedWidth, 0)} + + + ${newArrow(2 * (padding + paddedWidth), 2 * padding + paddedWidth, 180)} + + + ${newArrow(2 * padding + 3 * paddedWidth, 2 * (padding + paddedWidth), -90)} + + + ${newArrow(2 * padding + paddedWidth, 2 * (padding + paddedWidth), 90)} + + + + + ${newPlus(2 * padding + paddedWidth, padding)} + + + ${newMinus(2 * padding + 2 * paddedWidth, padding)} + + + ${newPlus(2 * padding + 3 * paddedWidth, padding)} + + + ${newPlus(padding, 2 * padding + paddedWidth)} + + + ${newMinus(padding, 2 * padding + 2 * paddedWidth)} + + + ${newPlus(padding, 2 * padding + 3 * paddedWidth)} + +`; + var matrix = (className) => ` + + + + + `; + var pmatrix = (className) => ` + + + + + + + `; + var Bmatrix = (className) => ` + + + + + + + +`; + var bmatrix = (className) => ` + + + + + + + +`; + var vmatrix = (className) => ` + + + + + + + +`; + var Vmatrix = (className) => ` + + + + + + + + + +`; + var cases2 = (className) => ` + + + + + + + +`; + var rcases = (className) => ` + + + + + + + +`; + var matrixButtons = { matrix, pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix }; + var casesButtons = { cases: cases2, rcases, Bmatrix }; + function showEnvironmentPopover(mf) { + var _a3, _d2; + const rows = (_a3 = mf.model.parentEnvironment) == null ? void 0 : _a3.rows; + if (!rows) return; + let columnCount = 0; + rows.forEach((column) => { + if (!columnCount || column.length > columnCount) + columnCount = column.length; + }); + let panel = document.getElementById("mathlive-environment-popover"); + if (!panel) { + panel = getSharedElement("mathlive-environment-popover"); + injectStylesheet("environment-popover"); + injectStylesheet("core"); + panel.setAttribute("aria-hidden", "true"); + } + let flexbox; + const possiblyExistentFlexbox = panel.querySelector( + ".MLEP__environment-controls" + ); + if (possiblyExistentFlexbox) flexbox = possiblyExistentFlexbox; + else { + flexbox = document.createElement("div"); + panel.innerHTML = ""; + panel.appendChild(flexbox); + } + flexbox.className = "MLEP__environment-controls"; + flexbox.style.display = "flex"; + flexbox.style.width = "100%"; + flexbox.style.height = "100%"; + flexbox.style.boxSizing = "border-box"; + flexbox.innerHTML = controllerSvg; + let delimiterOptions = []; + let activeDelimeter = ""; + const environment = mf.model.parentEnvironment.environmentName; + if (isMatrixEnvironment(environment)) { + const normalizedEnvironment = normalizeMatrixName(environment); + activeDelimeter = matrixButtons[normalizedEnvironment]("active"); + const _b3 = matrixButtons, { [normalizedEnvironment]: _ } = _b3, filteredDelimeters = __objRest(_b3, [__restKey(normalizedEnvironment)]); + delimiterOptions = Object.values(filteredDelimeters).map( + (f) => f("inactive") + ); + } else if (isCasesEnvironment(environment)) { + const normalizedEnvironment = normalizeCasesName(environment); + activeDelimeter = casesButtons[normalizedEnvironment]("active"); + const _c2 = casesButtons, { [normalizedEnvironment]: _ } = _c2, filteredDelimeters = __objRest(_c2, [__restKey(normalizedEnvironment)]); + delimiterOptions = Object.values(filteredDelimeters).map( + (f) => f("inactive") + ); + } else if (isAlignEnvironment(environment)) { + activeDelimeter = matrixButtons["matrix"]("active"); + delimiterOptions = Object.values(casesButtons).map( + (f) => f("inactive") + ); + } + const delimiterControls = document.createElement("div"); + delimiterControls.className = "MLEP__environment-delimiter-controls"; + delimiterControls.style.display = "flex"; + delimiterControls.style.flexDirection = "column"; + delimiterControls.innerHTML = ` +
    + ${activeDelimeter} + ${delimiterOptions.join("")} +
    `; + if (activeDelimeter) flexbox.appendChild(delimiterControls); + const arrayControls = flexbox.querySelectorAll( + "[data-command]" + ); + arrayControls.forEach((control) => { + const commandString = control.dataset.command; + let command = commandString; + try { + command = JSON.parse(commandString); + } catch (e) { + } + control.addEventListener("mousedown", (ev) => ev.preventDefault()); + if (command) + control.addEventListener("click", () => mf.executeCommand(command)); + }); + const position = (_d2 = mf.field) == null ? void 0 : _d2.getBoundingClientRect(); + if (position) { + panel.style.top = `${window.scrollY + (position.top - panel.clientHeight - 15)}px`; + panel.style.left = `${position.left + 20}px`; + panel.classList.add("is-visible"); + } + } + function hideEnvironmentPopover() { + const panel = document.getElementById("mathlive-environment-popover"); + panel == null ? void 0 : panel.classList.remove("is-visible"); + } + function disposeEnvironmentPopover() { + if (!document.getElementById("mathlive-environment-popover")) return; + releaseSharedElement("mathlive-environment-popover"); + releaseStylesheet("environment-popover"); + releaseStylesheet("core"); + } + function updateEnvironmentPopover(mf) { + if (!mf.hasFocus()) return; + let visible = false; + if (mf.model.mode === "math") { + const env = mf.model.parentEnvironment; + if (!!(env == null ? void 0 : env.rows) && isTabularEnvironment(env.environmentName)) { + const policy = mf.options.environmentPopoverPolicy; + visible = policy === "auto" || policy === "on"; + } + } + if (visible) showEnvironmentPopover(mf); + else hideEnvironmentPopover(); + } + function normalizeMatrixName(environment) { + return environment.replace("*", ""); + } + function normalizeCasesName(environment) { + if (environment === "dcases") + return "cases"; + return environment; + } + + // src/ui/i18n/utils.ts + function getComputedDir(element) { + const dir = getComputedStyle(element).direction; + return dir === "ltr" || dir === "rtl" ? dir : "ltr"; + } + + // src/ui/geometry/utils.ts + function getEdge(bounds, position, direction) { + if (position === "left" || position === "leading" && direction === "ltr" || position === "trailing" && direction === "rtl") + return bounds.left; + return bounds.right; + } + function getEffectivePos(pos, length, placement, dir) { + if (placement === "middle") return pos - length / 2; + if (placement === "start" && dir === "rtl" || placement === "end" && dir === "ltr" || placement === "top" || placement === "right") + return Math.max(0, pos - length); + return pos; + } + function getOppositeEffectivePos(pos, length, placement, dir) { + if (placement === "middle") return pos - length / 2; + if (placement === "start" && dir === "ltr" || placement === "end" && dir === "rtl" || placement === "top" || placement === "right") + return pos; + return pos - length; + } + function fitInViewport(element, options) { + var _a3, _b3, _c2; + const dir = (_a3 = getComputedDir(element)) != null ? _a3 : "ltr"; + element.style.position = "fixed"; + element.style.left = ""; + element.style.top = ""; + element.style.right = ""; + element.style.bottom = ""; + element.style.height = ""; + element.style.width = ""; + const elementBounds = element.getBoundingClientRect(); + const maxHeight = Number.isFinite(options.maxHeight) ? Math.min(options.maxHeight, window.innerHeight) : window.innerHeight; + let height = Math.min(maxHeight, (_b3 = options.height) != null ? _b3 : elementBounds.height); + let top = getEffectivePos( + options.location.y, + height, + options.verticalPos, + dir + ); + if (top + height > window.innerHeight - 8) { + if (options.alternateLocation) { + top = getEffectivePos( + options.alternateLocation.y, + height, + options.verticalPos, + dir + ); + if (top + height > window.innerHeight - 8) top = void 0; + } else top = void 0; + } + if (!Number.isFinite(top)) { + top = Math.max(8, window.innerHeight - 8 - height); + if (8 + height > window.innerHeight - 8) { + element.style.bottom = "8px"; + } + } + height = Math.min(top + height, window.innerHeight - 8) - top; + const maxWidth = Number.isFinite(options.maxWidth) ? Math.min(options.maxWidth, window.innerWidth) : window.innerWidth; + let width = Math.min(maxWidth, (_c2 = options.width) != null ? _c2 : elementBounds.width); + let left = getEffectivePos( + options.location.x, + width, + options.horizontalPos, + dir + ); + if (left + width > window.innerWidth - 8) { + if (options.alternateLocation) { + left = getOppositeEffectivePos( + options.alternateLocation.x, + width, + options.verticalPos, + dir + ); + if (left + width > window.innerWidth - 8) left = void 0; + } else left = void 0; + } + if (!Number.isFinite(left)) { + left = Math.max(8, window.innerWidth - 8 - width); + if (8 + width > window.innerWidth - 8) { + element.style.right = "8px"; + } + } + width = Math.min(left + width, window.innerWidth - 8) - left; + if (dir === "rtl") { + element.style.right = `${Math.ceil( + window.innerWidth - left - width + ).toString()}px`; + } else element.style.left = `${Math.ceil(left).toString()}px`; + element.style.top = `${Math.ceil(top).toString()}px`; + if (height !== elementBounds.height) + element.style.height = `${Math.ceil(height).toString()}px`; + if (width !== elementBounds.width) + element.style.width = `${Math.ceil(width).toString()}px`; + } + function distance2(p1, p2) { + return Math.hypot(p2.x - p1.x, p2.y - p1.y); + } + + // src/public/ui-menu-types.ts + function isSubmenu(item) { + return "submenu" in item; + } + function isCommand(item) { + return "type" in item && item.type === "command" || "onMenuSelect" in item || "id" in item; + } + function isDivider(item) { + return "type" in item && item.type === "divider"; + } + function isHeading(item) { + return "type" in item && item.type === "heading"; + } + + // src/ui/icons/icons.ts + var ICON_CATALOG = {}; + function icon(name) { + let icon2 = ICON_CATALOG[name]; + if (!icon2) { + let markup; + switch (name) { + case "checkmark": + markup = ``; + break; + case "trailing-chevron": + markup = ``; + break; + case "mixedmark": + markup = ''; + } + if (markup) { + const template = document.createElement("template"); + template.innerHTML = markup; + ICON_CATALOG[name] = template; + icon2 = template; + } + } + if (icon2) { + if ("content" in icon2) + return icon2.content.cloneNode(true); + const element = document.createElement("svg"); + element.innerHTML = icon2.innerHTML; + return element; + } + return void 0; + } + + // src/ui/menu/menu-item.ts + var BLINK_SPEED = 80; + var _MenuItemState = class { + constructor(declaration, parentMenu) { + this._className = ""; + /** The DOM element the menu item is rendered as */ + this._element = null; + var _a3; + this.parentMenu = parentMenu; + this._declaration = declaration; + Object.freeze(this._declaration); + if (isSubmenu(declaration)) { + this.type = "submenu"; + this.submenu = new _MenuListState(declaration.submenu, { + parentMenu, + submenuClass: declaration.submenuClass, + columnCount: declaration.columnCount + }); + } else this.type = (_a3 = declaration.type) != null ? _a3 : "command"; + this.hasCheck = isCommand(declaration) && declaration.checked !== void 0; + } + get rootMenu() { + return this.parentMenu.rootMenu; + } + get abortController() { + if (!this._abortController) this._abortController = new AbortController(); + return this._abortController; + } + dispose() { + var _a3, _b3; + (_a3 = this._abortController) == null ? void 0 : _a3.abort(); + this._abortController = void 0; + (_b3 = this._element) == null ? void 0 : _b3.remove(); + this._element = null; + if (this.submenu) this.submenu.dispose(); + this.submenu = void 0; + } + get menuItem() { + return this._declaration; + } + get label() { + var _a3; + return (_a3 = this._label) != null ? _a3 : ""; + } + set label(value) { + if (value === void 0) value = ""; + if (value === this._label) return; + this._label = value; + this.dirty = true; + } + get visible() { + return this._visible; + } + set visible(value) { + if (value === this._visible) return; + this._visible = value; + this.dirty = true; + } + get enabled() { + return this._enabled; + } + set enabled(value) { + this._enabled = value; + if (this.element) { + if (value) this.element.removeAttribute("aria-disabled"); + else this.element.setAttribute("aria-disabled", "true"); + } + this.dirty = true; + } + get checked() { + return this._checked; + } + set checked(value) { + this._checked = value; + this.dirty = true; + } + get tooltip() { + return this._tooltip; + } + set tooltip(value) { + if (value === this._tooltip) return; + this._tooltip = value; + this.dirty = true; + } + get ariaLabel() { + return this._ariaLabel; + } + set ariaLabel(value) { + if (value === this._ariaLabel) return; + this._ariaLabel = value; + this.dirty = true; + } + get active() { + var _a3, _b3; + return (_b3 = (_a3 = this.element) == null ? void 0 : _a3.classList.contains("active")) != null ? _b3 : false; + } + set active(value) { + if (!this.element) return; + this.element.classList.toggle("active", value); + } + updateState(modifiers) { + var _a3, _b3, _c2; + const declaration = this._declaration; + if (isDivider(declaration)) { + this.enabled = false; + this.checked = false; + return; + } + if (isHeading(declaration)) { + this.enabled = false; + this.checked = false; + this.visible = true; + } + if (isCommand(declaration)) { + this.checked = (_a3 = dynamicValue(declaration.checked, modifiers)) != null ? _a3 : false; + } + if (isCommand(declaration) || isSubmenu(declaration)) { + this.enabled = (_b3 = dynamicValue(declaration.enabled, modifiers)) != null ? _b3 : true; + this.visible = (_c2 = dynamicValue(declaration.visible, modifiers)) != null ? _c2 : true; + if (this.visible && this.enabled && this.submenu) { + this.submenu.updateState(modifiers); + if (!this.submenu.visible) this.visible = false; + } + } + if (isCommand(declaration) || isHeading(declaration) || isSubmenu(declaration)) { + this.label = dynamicValue(declaration.label, modifiers); + this._className = dynamicValue(declaration.class, modifiers); + this.tooltip = dynamicValue(declaration.tooltip, modifiers); + this.ariaLabel = dynamicValue(declaration.ariaLabel, modifiers); + } + if (this._element) this.updateElement(); + } + set dirty(value) { + console.assert(value === true); + if (value && this.parentMenu) this.parentMenu.dirty = true; + } + updateElement() { + var _a3; + if (!this.visible || !this.element) return; + const li = this.element; + li.textContent = ""; + li.className = ""; + li.className = (_a3 = this._className) != null ? _a3 : ""; + if (!this.enabled) li.setAttribute("aria-disabled", "true"); + else li.removeAttribute("aria-disabled"); + if (this.checked === true) { + li.setAttribute("aria-checked", "true"); + li.append(icon("checkmark")); + } else if (this.checked === "mixed") { + li.setAttribute("aria-checked", "mixed"); + li.append(icon("mixedmark")); + } else li.removeAttribute("aria-checked"); + if (this.ariaLabel) li.setAttribute("aria-label", this.ariaLabel); + const span = document.createElement("span"); + span.className = this.parentMenu.hasCheck ? "label indent" : "label"; + if (this.type === "heading") span.classList.add("heading"); + span.innerHTML = this.label; + li.append(span); + if (this._tooltip) { + li.setAttribute("data-tooltip", this._tooltip); + } + if (isCommand(this._declaration) && this._declaration.keyboardShortcut) { + const kbd = document.createElement("kbd"); + kbd.innerHTML = getKeybindingMarkup(this._declaration.keyboardShortcut); + li.append(kbd); + } + if (this.type === "submenu") li.append(icon("trailing-chevron")); + } + get element() { + if (this._element) return this._element; + if (isDivider(this._declaration)) { + const li2 = document.createElement("li"); + li2.setAttribute("part", "menu-divider"); + li2.setAttribute("role", "divider"); + this._element = li2; + return li2; + } + const li = document.createElement("li"); + this._element = li; + if (isCommand(this._declaration) || isHeading(this._declaration) || isSubmenu(this._declaration)) + li.setAttribute("part", "menu-item"); + li.setAttribute("tabindex", "-1"); + if (this.hasCheck) li.setAttribute("role", "menuitemcheckbox"); + else li.setAttribute("role", "menuitem"); + if (this.type === "submenu") { + li.setAttribute("aria-haspopup", "true"); + li.setAttribute("aria-expanded", "false"); + } + const signal = this.abortController.signal; + li.addEventListener("pointerenter", this, { signal }); + li.addEventListener("pointerleave", this, { signal }); + li.addEventListener("pointerup", this, { signal }); + li.addEventListener("click", this, { signal }); + return this._element; + } + /** Dispatch a `menu-select` event, and call the + * `onMenuSelect()` hook if defined. + */ + dispatchSelect() { + var _a3; + if (!isCommand(this._declaration)) return; + const ev = new CustomEvent("menu-select", { + cancelable: true, + bubbles: true, + detail: { + modifiers: this.rootMenu.modifiers, + id: this._declaration.id, + data: this._declaration.data + } + }); + const success = this.parentMenu.dispatchEvent(ev); + if (success && typeof this._declaration.onMenuSelect === "function") { + this._declaration.onMenuSelect({ + target: (_a3 = this.parentMenu.host) != null ? _a3 : void 0, + modifiers: this.rootMenu.modifiers, + id: this._declaration.id, + data: this._declaration.data + }); + } + } + handleEvent(event) { + var _a3; + if (!this.visible || !this.enabled) return; + if (event.type === "click") { + if (this.rootMenu.state === "modal") this.select(); + event.stopPropagation(); + event.preventDefault(); + return; + } + if (event.type === "pointerenter") { + const ev = event; + this.rootMenu.cancelDelayedOperation(); + if (this.parentMenu.isSubmenuOpen && ((_a3 = this.parentMenu.activeMenuItem) == null ? void 0 : _a3.movingTowardSubmenu(ev))) { + this.rootMenu.scheduleOperation(() => { + this.parentMenu.activeMenuItem = this; + this.openSubmenu(); + }); + } else { + this.parentMenu.activeMenuItem = this; + this.openSubmenu({ withDelay: true }); + } + return; + } + if (event.type === "pointerleave") { + if (this.rootMenu.activeSubmenu === this.parentMenu) + this.parentMenu.activeMenuItem = null; + return; + } + if (event.type === "pointerup") { + if (this.rootMenu.state !== "modal") this.select(); + event.stopPropagation(); + event.preventDefault(); + return; + } + } + /** + * Called when a menu item is selected: + * - either dismiss the menu and execute the command + * - or display the submenu + */ + select() { + this.rootMenu.cancelDelayedOperation(); + if (this.type === "submenu") { + this.openSubmenu(); + return; + } + this.active = false; + setTimeout(() => { + this.active = true; + setTimeout(() => { + this.active = false; + this.rootMenu.hide(); + this.dispatchSelect(); + }, BLINK_SPEED); + }, BLINK_SPEED); + } + /** + * Open the submenu of this menu item, with a delay if options.delay + * This delay improves targeting of submenus with the mouse. + */ + openSubmenu(options) { + var _a3; + if (this.type !== "submenu" || !this.element) return; + if ((_a3 = options == null ? void 0 : options.withDelay) != null ? _a3 : false) { + this.rootMenu.scheduleOperation(() => this.openSubmenu()); + return; + } + const bounds = this.element.getBoundingClientRect(); + const dir = getComputedDir(this.element); + this.submenu.show({ + container: this.rootMenu.element.parentNode, + location: { x: getEdge(bounds, "trailing", dir), y: bounds.top - 4 }, + alternateLocation: { + x: getEdge(bounds, "leading", dir), + y: bounds.top - 4 + } + }); + } + movingTowardSubmenu(ev) { + if (!this.element) return false; + if (this.type !== "submenu") return false; + const lastEv = this.rootMenu.lastMoveEvent; + if (!lastEv) return false; + const deltaT = ev.timeStamp - lastEv.timeStamp; + if (deltaT > 500) return false; + const deltaX = ev.clientX - lastEv.clientX; + const s = speed(deltaX, lastEv.clientY - ev.clientY, deltaT); + if (s <= 0.2) return false; + let position = "right"; + if (this.submenu.element) { + const submenuBounds = this.submenu.element.getBoundingClientRect(); + const bounds = this.element.getBoundingClientRect(); + if (submenuBounds.left < bounds.left + bounds.width / 2) + position = "left"; + } + return position === "right" ? deltaX > 0 : deltaX < 0; + } + }; + function speed(dx, dy, dt) { + return Math.hypot(dx, dy) / dt; + } + function dynamicValue(value, modifiers) { + if (value === void 0 || typeof value !== "function") + return value; + modifiers != null ? modifiers : modifiers = { alt: false, control: false, shift: false, meta: false }; + return value(modifiers); + } + + // src/ui/menu/menu-list.ts + var _MenuListState = class __MenuListState { + constructor(items, options) { + /** @private */ + this._element = null; + /** @private */ + this._activeMenuItem = null; + /** @private */ + this._dirty = true; + var _a3, _b3; + this.parentMenu = (_a3 = options == null ? void 0 : options.parentMenu) != null ? _a3 : null; + this._submenuClass = options == null ? void 0 : options.submenuClass; + this.columnCount = (_b3 = options == null ? void 0 : options.columnCount) != null ? _b3 : 1; + this.isSubmenuOpen = false; + this.menuItems = items; + } + get children() { + return Object.freeze([...this._menuItems]); + } + /** Setting the menu items will reset this item and + * redefine a set of _MenuItem objects + */ + set menuItems(items) { + const parent = this.parentMenu; + this.dispose(); + this.parentMenu = parent; + items = [...items]; + this._menuItems = items.map( + (x) => x["onCreate"] ? x["onCreate"](x, this) : new _MenuItemState(x, this) + ); + this.hasCheck = void 0; + this.dirty = true; + } + dispose() { + var _a3; + this.hide(); + if (this._element) this._element.remove(); + if (this._abortController) this._abortController.abort(); + (_a3 = this._menuItems) == null ? void 0 : _a3.forEach((x) => x.dispose()); + this._menuItems = []; + this._activeMenuItem = null; + this.parentMenu = null; + } + handleEvent(event) { + if (event.type === "wheel" && this._element) { + const ev = event; + this._element.scrollBy(0, ev.deltaY); + event.stopPropagation(); + } + } + dispatchEvent(ev) { + return this.rootMenu.dispatchEvent(ev); + } + get host() { + return this.rootMenu.host; + } + get rootMenu() { + return this.parentMenu.rootMenu; + } + /** + * Update the 'model' of this menu (i.e. list of menu items) + */ + updateState(modifiers) { + var _a3, _b3, _c2; + this._menuItems.forEach((x) => x.updateState(modifiers)); + const previousHasCheck = this.hasCheck; + this.hasCheck = this._menuItems.some((x) => x.visible && x.hasCheck); + if (this.hasCheck !== previousHasCheck) { + this._menuItems.forEach((x) => x.updateState(modifiers)); + } + let heading = void 0; + let itemInHeadingCount = 0; + for (const item of this._menuItems) { + if (item.type === "heading") { + if (heading && itemInHeadingCount === 0) heading.visible = false; + heading = item; + itemInHeadingCount = 0; + } else if (item.type === "divider" && heading) { + heading.visible = itemInHeadingCount > 0; + heading = void 0; + itemInHeadingCount = 0; + } else if (heading && item.visible) itemInHeadingCount += 1; + } + if (heading) heading.visible = itemInHeadingCount > 0; + let wasDivider = true; + for (const item of this._menuItems) { + if (item.type === "divider") { + item.visible = !wasDivider; + wasDivider = true; + } else if (item.visible) wasDivider = false; + } + if (!((_a3 = this.activeMenuItem) == null ? void 0 : _a3.visible)) this.activeMenuItem = null; + if (!((_b3 = this.activeMenuItem) == null ? void 0 : _b3.enabled) && ((_c2 = this.activeMenuItem) == null ? void 0 : _c2.type) === "submenu") + this._activeMenuItem.submenu.hide(); + this._dirty = false; + } + get enabled() { + this.updateIfDirty(); + return this._menuItems.some( + (x) => x.type !== "divider" && x.visible && x.enabled + ); + } + get visible() { + this.updateIfDirty(); + return this._menuItems.some((x) => x.type !== "divider" && x.visible); + } + set dirty(value) { + console.assert(value === true); + if (this._dirty === value) return; + if (value && this.parentMenu) { + this._dirty = true; + this.parentMenu.dirty = true; + } + } + updateIfDirty() { + if (this._dirty) this.updateState(this.rootMenu.modifiers); + } + /** If the element has been created, update its content to reflect + * the current state of the menu items + */ + updateElement() { + var _a3; + if (!this._element) return; + this._element.textContent = ""; + for (const { element, visible } of this._menuItems) + if (element && visible) this._element.append(element); + (_a3 = this._element.querySelector("li:first-of-type")) == null ? void 0 : _a3.setAttribute("tabindex", "0"); + } + /** + * Construct (or return a cached version) of an element representing + * the items in this menu (model -> view) + */ + get element() { + if (this._element) return this._element; + const menu = document.createElement("menu"); + menu.setAttribute("role", "menu"); + menu.setAttribute("tabindex", "-1"); + menu.setAttribute("aria-orientation", "vertical"); + menu.setAttribute("part", "ui-menu-container"); + if (this._submenuClass) menu.classList.add(this._submenuClass); + menu.classList.add("ui-menu-container"); + if (!this._abortController) this._abortController = new AbortController(); + const signal = this._abortController.signal; + menu.addEventListener("focus", this, { signal }); + menu.addEventListener("wheel", this, { passive: true, signal }); + this._element = menu; + this.updateElement(); + return menu; + } + /** + * The active menu is displayed on a colored background. + */ + get activeMenuItem() { + return this._activeMenuItem; + } + /** + * Set to null to have no active item. + * Note that setting the active menu item doesn't automatically + * open the submenu (e.g. when keyboard navigating). + * Call `item.submenu.openSubmenu()` to open the submenu. + */ + set activeMenuItem(value) { + var _a3, _b3, _c2, _d2; + this.rootMenu.cancelDelayedOperation(); + if (value !== this._activeMenuItem) { + if (this.activeMenuItem) { + const item = this.activeMenuItem; + item.active = false; + (_a3 = item.submenu) == null ? void 0 : _a3.hide(); + } + if (!((_b3 = value == null ? void 0 : value.visible) != null ? _b3 : true)) { + this._activeMenuItem = null; + return; + } + this._activeMenuItem = value; + if (value) value.active = true; + } + if (value) (_c2 = value.element) == null ? void 0 : _c2.focus({ preventScroll: true }); + else (_d2 = this._element) == null ? void 0 : _d2.focus({ preventScroll: true }); + } + /** First activable menu item */ + get firstMenuItem() { + this.updateIfDirty(); + let result = 0; + let found = false; + const menuItems = this._menuItems; + while (!found && result <= menuItems.length - 1) { + const item = menuItems[result]; + found = item.type !== "divider" && item.visible && item.enabled; + result += 1; + } + return found ? menuItems[result - 1] : null; + } + /** Last activable menu item */ + get lastMenuItem() { + this.updateIfDirty(); + const menuItems = this._menuItems; + let result = menuItems.length - 1; + let found = false; + while (!found && result >= 0) { + const item = menuItems[result]; + found = item.type !== "divider" && item.visible && item.enabled; + result -= 1; + } + return found ? menuItems[result + 1] : null; + } + nextMenuItem(stride) { + if (stride === 0) return this._activeMenuItem; + if (!this._activeMenuItem) + return stride > 0 ? this.firstMenuItem : this.lastMenuItem; + if (!this.firstMenuItem || !this.lastMenuItem || !this._activeMenuItem) + return null; + this.updateIfDirty(); + const first = this._menuItems.indexOf(this.firstMenuItem); + const last = this._menuItems.indexOf(this.lastMenuItem); + let index = this._menuItems.indexOf(this._activeMenuItem); + let count = 1; + while (index >= first && index <= last) { + index += stride > 0 ? 1 : -1; + const item = this._menuItems[index]; + if (!item) break; + if (item.visible && item.enabled) { + if (count === Math.abs(stride)) return this._menuItems[index]; + count += 1; + } + } + return stride > 0 ? this.lastMenuItem : this.firstMenuItem; + } + getMenuItemColumn(menu) { + this.updateIfDirty(); + const visibleItems = this._menuItems.filter((x) => x.visible && x.enabled); + const index = visibleItems.indexOf(menu); + if (index < 0) return -1; + return index % this.columnCount; + } + static get collator() { + if (__MenuListState._collator) return __MenuListState._collator; + __MenuListState._collator = new Intl.Collator(void 0, { + usage: "search", + sensitivity: "base" + }); + return __MenuListState._collator; + } + findMenuItem(text) { + var _a3; + this.updateIfDirty(); + const candidates = this._menuItems.filter( + (x) => x.type !== "divider" && x.visible && x.enabled + ); + if (candidates.length === 0) return null; + const last = Math.max(...candidates.map((x) => x.label.length)) - text.length; + if (last < 0) return null; + let result = null; + let i = 0; + while (i < last && !result) { + result = (_a3 = candidates.find( + (x) => __MenuListState.collator.compare( + text, + x.label.substring(i, text.length) + ) === 0 + )) != null ? _a3 : null; + i++; + } + return result; + } + /** + * @param location: in viewport coordinates + * @param alternateLocation: in viewport coordinates + * @param container: where the menu should be attached + * @return false if no menu to show + */ + show(options) { + if (!this.visible || !options.container) return false; + this.updateElement(); + options.container.appendChild(this.element); + if (supportPopover()) { + this.element.popover = "manual"; + this.element.showPopover(); + } + if (options.location) { + fitInViewport(this.element, { + location: options.location, + alternateLocation: options.alternateLocation, + verticalPos: "bottom", + horizontalPos: "start" + }); + } + suppressFocusEvents(); + this.element.focus({ preventScroll: true }); + enableFocusEvents(); + if (this.parentMenu) this.parentMenu.openSubmenu = this; + return true; + } + hide() { + var _a3, _b3, _c2, _d2, _e, _f; + this.openSubmenu = null; + this.activeMenuItem = null; + if (this.parentMenu) this.parentMenu.openSubmenu = null; + if (!((_a3 = this._element) == null ? void 0 : _a3.isConnected) || !this._element.parentElement) return; + if (supportPopover() && ((_b3 = this._element) == null ? void 0 : _b3.popover)) this._element.hidePopover(); + suppressFocusEvents(); + (_d2 = (_c2 = this.parentMenu) == null ? void 0 : _c2.element) == null ? void 0 : _d2.focus(); + (_f = (_e = this._element) == null ? void 0 : _e.parentNode) == null ? void 0 : _f.removeChild(this._element); + enableFocusEvents(); + } + /** + * This method is called to record that one of our submenus has opened. + * To open a submenu call openSubmenu() on the item with the submenu + * or show() on the submenu. + */ + set openSubmenu(submenu) { + var _a3, _b3, _c2, _d2; + const expanded = submenu !== null; + if (((_a3 = this.activeMenuItem) == null ? void 0 : _a3.type) === "submenu") { + (_b3 = this.activeMenuItem.element) == null ? void 0 : _b3.setAttribute( + "aria-expanded", + expanded.toString() + ); + } + (_d2 = (_c2 = this.activeMenuItem) == null ? void 0 : _c2.element) == null ? void 0 : _d2.classList.toggle("is-submenu-open", expanded); + this.isSubmenuOpen = expanded; + } + }; + function suppressFocusEvents() { + document.addEventListener("focusin", handleFocusEvent, true); + document.addEventListener("focusout", handleFocusEvent, true); + document.addEventListener("focus", handleFocusEvent, true); + document.addEventListener("blur", handleFocusEvent, true); + } + function handleFocusEvent(event) { + event.stopImmediatePropagation(); + event.preventDefault(); + } + function enableFocusEvents() { + document.removeEventListener("focusin", handleFocusEvent, true); + document.removeEventListener("focusout", handleFocusEvent, true); + document.removeEventListener("focus", handleFocusEvent, true); + document.removeEventListener("blur", handleFocusEvent, true); + } + + // src/ui/menu/menu.ts + var _Menu = class _Menu extends _MenuListState { + /** + * The host is the element that the events will be dispatched from + * + */ + constructor(menuItems, options) { + var _a3; + super(menuItems); + /** + * - 'closed': the menu is not visible + * - 'open': the menu is visible as long as the mouse button is pressed + * - 'modal': the menu is visible until dismissed, even with + * the mouse button released + */ + this.state = "closed"; + this.typingBufferResetTimer = 0; + this.hysteresisTimer = 0; + /** @private */ + this._updating = false; + this._host = (_a3 = options == null ? void 0 : options.host) != null ? _a3 : null; + this.isDynamic = menuItems.some(isDynamic); + this._modifiers = { + shift: false, + control: false, + alt: false, + meta: false + }; + this.typingBuffer = ""; + this.state = "closed"; + } + get modifiers() { + return this._modifiers; + } + set modifiers(value) { + if (equalKeyboardModifiers(this._modifiers, value)) return; + this._modifiers = value; + this.dirty = true; + } + /** + * The currently active menu: could be the root menu or a submenu + */ + get activeSubmenu() { + let result = this; + while (result.isSubmenuOpen) result = result.activeMenuItem.submenu; + return result; + } + set dirty(value) { + if (this._updating) return; + console.assert(value === true); + if (this._dirty === value) return; + this._dirty = true; + if (value) { + setTimeout(() => { + this.updateState(this.modifiers); + this.updateElement(); + }); + } + } + updateState(modifiers) { + this._updating = true; + this.modifiers = modifiers != null ? modifiers : this.modifiers; + super.updateState(this.modifiers); + this._updating = false; + } + handleKeyupEvent(ev) { + if (this.isDynamic) this.modifiers = keyboardModifiersFromEvent(ev); + ev.stopImmediatePropagation(); + } + handleKeydownEvent(ev) { + var _a3, _b3, _c2; + if (ev.key === "Tab" || ev.key === "Escape") { + this.hide(); + return; + } + if (this.isDynamic) this.modifiers = keyboardModifiersFromEvent(ev); + let handled = true; + const menu = this.activeSubmenu; + const menuItem = menu.activeMenuItem; + switch (ev.key) { + case " ": + case "Space": + case "Return": + case "Enter": + menuItem == null ? void 0 : menuItem.select(keyboardModifiersFromEvent(ev)); + break; + case "ArrowRight": + if ((menuItem == null ? void 0 : menuItem.type) === "submenu") { + menuItem.select(keyboardModifiersFromEvent(ev)); + this.activeSubmenu.activeMenuItem = this.activeSubmenu.firstMenuItem; + } else if (!menuItem) menu.activeMenuItem = menu.firstMenuItem; + else { + const col = (_a3 = menu.getMenuItemColumn(menuItem)) != null ? _a3 : -1; + if (col >= 0 && col < ((_b3 = menu.columnCount) != null ? _b3 : 1) - 1) { + const next = menu.nextMenuItem(1); + if (next) menu.activeMenuItem = next; + } + } + break; + case "ArrowLeft": + if (menu === this.rootMenu) { + if (!menuItem) menu.activeMenuItem = menu.firstMenuItem; + } else { + const col = menuItem ? (_c2 = menu.getMenuItemColumn(menuItem)) != null ? _c2 : -1 : -1; + if (col <= 0 || !menuItem) { + menu.hide(); + const activeMenu = menu.parentMenu.activeMenuItem; + if (activeMenu) { + const { element } = activeMenu; + element == null ? void 0 : element.focus(); + element == null ? void 0 : element.classList.remove("is-submenu-open"); + } + } else { + const next = menu.nextMenuItem(-1); + if (next) menu.activeMenuItem = next; + } + } + break; + case "ArrowDown": + menu.activeMenuItem = menu.nextMenuItem(menu.columnCount); + break; + case "ArrowUp": + menu.activeMenuItem = menu.nextMenuItem(-menu.columnCount); + break; + case "Home": + case "PageUp": + menu.activeMenuItem = menu.firstMenuItem; + break; + case "End": + case "PageDown": + menu.activeMenuItem = menu.lastMenuItem; + break; + case "Backspace": + if (this.typingBuffer) { + this.typingBuffer = this.typingBuffer.slice(0, -1); + if (this.typingBuffer) { + clearTimeout(this.typingBufferResetTimer); + const newItem = menu.findMenuItem(this.typingBuffer); + if (newItem) menu.activeMenuItem = newItem; + this.typingBufferResetTimer = setTimeout(() => { + this.typingBuffer = ""; + }, 500); + } + } + break; + default: + if (mightProducePrintableCharacter(ev)) { + if (isFinite(this.typingBufferResetTimer)) + clearTimeout(this.typingBufferResetTimer); + this.typingBuffer += ev.key; + const newItem = menu.findMenuItem(this.typingBuffer); + if (newItem) menu.activeMenuItem = newItem; + this.typingBufferResetTimer = setTimeout(() => { + this.typingBuffer = ""; + }, 500); + } else handled = false; + } + if (handled) { + ev.preventDefault(); + ev.stopPropagation(); + } + } + handleEvent(event) { + if (event.type === "keydown") + this.handleKeydownEvent(event); + else if (event.type === "keyup") + this.handleKeyupEvent(event); + else if (event.type === "pointermove") + this.lastMoveEvent = event; + else if (event.type === "pointerup") { + if (Number.isFinite(this.rootMenu._openTimestamp) && Date.now() - this.rootMenu._openTimestamp < 120) { + this.state = "modal"; + } else if (this.state === "modal" && event.target === this.scrim) { + this.hide(); + } + } else if (event.type === "contextmenu") { + event.preventDefault(); + event.stopPropagation(); + return; + } + super.handleEvent(event); + } + /** Return true if the event is **not** canceled */ + dispatchEvent(ev) { + if (!this._host) return true; + return this._host.dispatchEvent(ev); + } + get host() { + return this._host; + } + get scrim() { + return Scrim.element; + } + connectScrim(target) { + const scrim = this.scrim; + scrim.addEventListener("pointerup", this, true); + scrim.addEventListener("contextmenu", this); + scrim.addEventListener("keydown", this); + scrim.addEventListener("keyup", this); + scrim.addEventListener("pointermove", this); + Scrim.open({ root: target, onDismiss: () => this.hide() }); + } + disconnectScrim() { + const scrim = this.scrim; + scrim.removeEventListener("pointerup", this, true); + scrim.removeEventListener("contextmenu", this); + scrim.removeEventListener("keydown", this); + scrim.removeEventListener("keyup", this); + scrim.removeEventListener("pointermove", this); + if (Scrim.state === "open") Scrim.scrim.close(); + } + get rootMenu() { + return this; + } + /** Locations are in viewport coordinate. */ + show(options) { + this._onDismiss = options == null ? void 0 : options.onDismiss; + if (options == null ? void 0 : options.modifiers) this.modifiers = options.modifiers; + this.updateState(); + this.connectScrim(options == null ? void 0 : options.target); + if (!super.show(__spreadProps(__spreadValues({}, options), { container: this.scrim }))) { + this.disconnectScrim(); + return false; + } + this._openTimestamp = Date.now(); + this.state = "open"; + return true; + } + hide() { + this.cancelDelayedOperation(); + if (this.state !== void 0) { + if (this.state !== "closed") { + this.activeMenuItem = null; + Scrim.element.parentElement.focus(); + super.hide(); + this.state = "closed"; + this.disconnectScrim(); + } + if (this._onDismiss) { + this._onDismiss(); + this._onDismiss = void 0; + } + } + } + scheduleOperation(fn) { + this.cancelDelayedOperation(); + const delay = _Menu.SUBMENU_DELAY; + if (delay <= 0) { + fn(); + return; + } + this.hysteresisTimer = setTimeout(() => { + this.hysteresisTimer = 0; + fn(); + }, delay); + } + cancelDelayedOperation() { + if (this.hysteresisTimer) { + clearTimeout(this.hysteresisTimer); + this.hysteresisTimer = 0; + } + } + }; + /** + * Delay (in milliseconds) before displaying a submenu. + * + * Prevents distracting flashing of submenus when moving quickly + * through the options in a menu. + */ + _Menu.SUBMENU_DELAY = 120; + var Menu = _Menu; + function isDynamic(item) { + if (isDivider(item)) return false; + if (typeof item.label === "function" || typeof item.ariaLabel === "function" || typeof item.tooltip === "function") + return true; + if ((isCommand(item) || isSubmenu(item)) && (typeof item.enabled === "function" || typeof item.visible === "function")) + return true; + if (isCommand(item) && typeof item.checked === "function") return true; + if (isSubmenu(item)) return item.submenu.some(isDynamic); + return false; + } + + // src/ui/events/longpress.ts + var LongPress = class { + // Maximum distance between the start and end of the gesture, in pixels + }; + LongPress.DELAY = 300; + // Amount of time before showing the context menu, in ms + LongPress.MAX_DISTANCE = 10; + function onLongPress(triggerEvent) { + return new Promise((resolve, _reject) => { + const startPoint = eventLocation(triggerEvent); + if (!startPoint) resolve(false); + let lastPoint = startPoint; + const timer = setTimeout(() => { + controller.abort(); + resolve(distance2(lastPoint, startPoint) < LongPress.MAX_DISTANCE); + }, LongPress.DELAY); + const controller = new AbortController(); + const signal = controller.signal; + for (const eventType of ["pointermove", "pointerup", "pointercancel"]) { + window.addEventListener( + eventType, + (evt) => { + if (evt.type === "pointerup" || evt.type === "pointercancel") { + clearTimeout(timer); + controller.abort(); + resolve(false); + } else if (evt.type === "pointermove") { + const location = eventLocation(evt); + if (location) lastPoint = location; + } + }, + { passive: true, signal } + ); + } + }); + } + + // src/ui/menu/context-menu.ts + async function onContextMenu(event, target, menu) { + if (event.defaultPrevented) return false; + if (event.type === "contextmenu") { + const evt = event; + event.preventDefault(); + event.stopPropagation(); + if (menu.show({ + target, + location: eventLocation(evt), + modifiers: keyboardModifiersFromEvent(evt) + })) + return true; + } + if (event.type === "keydown") { + const evt = event; + if (evt.code === "ContextMenu" || evt.code === "F10" && evt.shiftKey) { + const bounds = target == null ? void 0 : target.getBoundingClientRect(); + if (acceptContextMenu(target) && bounds && menu.show({ + target, + location: { + x: Math.ceil(bounds.left + bounds.width / 2), + y: Math.ceil(bounds.top + bounds.height / 2) + }, + modifiers: keyboardModifiersFromEvent(evt) + })) { + event.preventDefault(); + event.stopPropagation(); + return true; + } + } + } + if (event.type === "pointerdown" && event.pointerType !== "mouse" && event.button === 0) { + let eventTarget = event.target; + while (eventTarget && target !== eventTarget) + eventTarget = eventTarget.parentNode; + if (!eventTarget) return false; + if (!menu.visible) return false; + const location = eventLocation(event); + if (await onLongPress(event)) { + if (menu.state !== "closed") return false; + if (!acceptContextMenu(target)) return false; + menu.show({ target, location }); + return true; + } + } + return false; + } + function acceptContextMenu(host) { + return host.dispatchEvent(new Event("contextmenu", { cancelable: true })); + } + + // src/formats/atom-to-math-ml.ts + var APPLY_FUNCTION = ""; + var INVISIBLE_TIMES = ""; + function xmlEscape(string) { + return string.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(//g, ">"); + } + function makeID(id, options) { + if (!id || !options.generateID) return ""; + return ` extid="${id}"`; + } + function scanIdentifier(stream, final, options) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h; + let result = false; + final = final != null ? final : stream.atoms.length; + let mathML = ""; + let body = ""; + let atom = stream.atoms[stream.index]; + const variant = (_a3 = atom.style) == null ? void 0 : _a3.variant; + const variantStyle = (_b3 = atom.style) == null ? void 0 : _b3.variantStyle; + let variantProp = ""; + if (atom.value && (variant || variantStyle)) { + const unicodeVariant = (_c2 = mathVariantToUnicode(atom.value, variant, variantStyle)) != null ? _c2 : atom.value; + if (unicodeVariant !== atom.value) { + stream.index += 1; + mathML = `${unicodeVariant}`; + if (!parseSubsup(mathML, stream, options)) { + stream.mathML += mathML; + stream.lastType = "mi"; + } + return true; + } + variantProp = (_d2 = { + "upnormal": "normal", + "boldnormal": "bold", + "italicmain": "italic", + "bolditalicmain": "bold-italic", + "updouble-struck": "double-struck", + "double-struck": "double-struck", + "boldfraktur": "bold-fraktur", + "calligraphic": "script", + "upcalligraphic": "script", + "script": "script", + "boldscript": "bold-script", + "boldcalligraphic": "bold-script", + "fraktur": "fraktur", + "upsans-serif": "sans-serif", + "boldsans-serif": "bold-sans-serif", + "italicsans-serif": "sans-serif-italic", + "bolditalicsans-serif": "sans-serif-bold-italic", + "monospace": "monospace" + }[(variantStyle != null ? variantStyle : "") + (variant != null ? variant : "")]) != null ? _d2 : ""; + if (variantProp) variantProp = ` mathvariant="${variantProp}"`; + } + const SPECIAL_IDENTIFIERS = { + "\\exponentialE": "ⅇ", + "\\imaginaryI": "ⅈ", + "\\differentialD": "ⅆ", + "\\capitalDifferentialD": "ⅅ", + "\\alpha": "α", + "\\pi": "π", + "\\infty": "∞", + "\\forall": "∀", + "\\nexists": "∄", + "\\exists": "∃", + "\\hbar": "\u210F", + "\\cdotp": "\u22C5", + "\\ldots": "\u2026", + "\\cdots": "\u22EF", + "\\ddots": "\u22F1", + "\\vdots": "\u22EE", + "\\ldotp": "." + }; + if (atom.command === "!") { + stream.index += 1; + mathML = "!"; + if (!parseSubsup(mathML, stream, options)) { + stream.mathML += mathML; + stream.lastType = "mo"; + } + return true; + } + if (SPECIAL_IDENTIFIERS[atom.command]) { + stream.index += 1; + let mathML2 = `${SPECIAL_IDENTIFIERS[atom.command]}`; + if (stream.lastType === "mi" || stream.lastType === "mn" || stream.lastType === "mtext" || stream.lastType === "fence") + mathML2 = INVISIBLE_TIMES + mathML2; + if (!parseSubsup(mathML2, stream, options)) { + stream.mathML += mathML2; + stream.lastType = "mi"; + } + return true; + } + if (atom.command === "\\operatorname") { + body = toString2(atom.body); + stream.index += 1; + } else { + if (variant || variantStyle) { + while (stream.index < final && (atom.type === "mord" || atom.type === "macro") && !atom.isDigit() && variant === ((_f = (_e = atom.style) == null ? void 0 : _e.variant) != null ? _f : "") && variantStyle === ((_h = (_g = atom.style) == null ? void 0 : _g.variantStyle) != null ? _h : "")) { + body += toString2([atom]); + stream.index += 1; + atom = stream.atoms[stream.index]; + } + } else if ((atom.type === "mord" || atom.type === "macro") && !atom.isDigit()) { + body += toString2([atom]); + stream.index += 1; + } + } + if (body.length > 0) { + result = true; + mathML = `${body}`; + const lastType = stream.lastType; + if (mathML.endsWith(">f") || mathML.endsWith(">g")) { + mathML += APPLY_FUNCTION; + stream.lastType = "applyfunction"; + } else stream.lastType = /^(.*)<\/mo>$/.test(mathML) ? "mo" : "mi"; + if (!parseSubsup(mathML, stream, options)) { + if (lastType === "mi" || lastType === "mn" || lastType === "mtext" || lastType === "fence") + mathML = INVISIBLE_TIMES + mathML; + stream.mathML += mathML; + } + } + return result; + } + function isSuperscriptAtom(stream) { + return stream.index < stream.atoms.length && stream.atoms[stream.index].superscript && stream.atoms[stream.index].type === "subsup"; + } + function indexOfSuperscriptInNumber(stream) { + let result = -1; + let i = stream.index; + let done = false; + let found = false; + while (i < stream.atoms.length && !done && !found) { + const atom = stream.atoms[i]; + done = !atom.isDigit(); + found = !done && atom.superscript !== void 0; + i++; + } + if (found) result = i - 1; + return result; + } + function parseSubsup(base, stream, options) { + var _a3; + let atom = stream.atoms[stream.index - 1]; + if (!atom) return false; + if (!atom.superscript && !atom.subscript) { + if (((_a3 = stream.atoms[stream.index]) == null ? void 0 : _a3.type) === "subsup") { + atom = stream.atoms[stream.index]; + stream.index += 1; + } else return false; + } + const lastType = stream.lastType; + stream.lastType = ""; + const superscript = toMathML(atom.superscript, options); + stream.lastType = ""; + const subscript = toMathML(atom.subscript, options); + stream.lastType = lastType; + if (!superscript && !subscript) return false; + let mathML = ""; + if (superscript && subscript) + mathML = `${base}${subscript}${superscript}`; + else if (superscript) mathML = `${base}${superscript}`; + else if (subscript) mathML = `${base}${subscript}`; + stream.mathML += mathML; + stream.lastType = ""; + return true; + } + function scanText(stream, final, options) { + final = final != null ? final : stream.atoms.length; + const savedIndex = stream.index; + while (stream.index < final && stream.atoms[stream.index].type === "first") + stream.index += 1; + if (stream.index >= final) { + stream.index = savedIndex; + return false; + } + const initial = stream.index; + let mathML = ""; + let superscript = indexOfSuperscriptInNumber(stream); + if (superscript >= 0 && superscript < final) final = superscript; + const textStyle = stream.atoms[stream.index].style; + while (stream.index < final && isTextMode(stream.atoms[stream.index].mode) && stream.atoms[stream.index].style.fontSeries === textStyle.fontSeries && stream.atoms[stream.index].style.fontShape === textStyle.fontShape && stream.atoms[stream.index].style.textDecoration === textStyle.textDecoration) { + mathML += stream.atoms[stream.index].value ? stream.atoms[stream.index].value : " "; + stream.index += 1; + } + if (mathML.length > 0) { + let attributes = makeID(stream.atoms[initial].id, options); + const { fontSeries, fontShape, textDecoration } = textStyle; + const mathvariant = fontSeries === "b" && fontShape === "it" ? "bold-italic" : fontSeries === "b" ? "bold" : fontShape === "it" ? "italic" : ""; + if (mathvariant) attributes += ` mathvariant="${mathvariant}"`; + if (textDecoration && textDecoration !== "none") + attributes += ` style="text-decoration:${textDecoration}"`; + mathML = `${xmlEscape(mathML)}`; + if (superscript < 0 && isSuperscriptAtom(stream)) { + superscript = stream.index; + stream.index += 1; + } + if (!parseSubsup(mathML, stream, options)) { + stream.mathML += mathML; + stream.lastType = "mtext"; + } + return true; + } + return false; + } + function scanNumber(stream, final, options) { + final = final != null ? final : stream.atoms.length; + const initial = stream.index; + let mathML = ""; + let superscript = indexOfSuperscriptInNumber(stream); + if (superscript >= 0 && superscript < final) final = superscript; + while (stream.index < final && stream.atoms[stream.index].isDigit()) { + mathML += stream.atoms[stream.index].asDigit(); + stream.index += 1; + } + if (mathML.length <= 0) return false; + mathML = "" + mathML + ""; + if (superscript < 0 && isSuperscriptAtom(stream)) { + superscript = stream.index; + stream.index += 1; + } + if (!parseSubsup(mathML, stream, options)) { + stream.mathML += mathML; + stream.lastType = "mn"; + } + return true; + } + function scanFence(stream, final, options) { + let result = false; + final = final != null ? final : stream.atoms.length; + let mathML = ""; + let lastType = ""; + if (stream.index < final && stream.atoms[stream.index].type === "mopen") { + let found = false; + let depth = 0; + const openIndex = stream.index; + let closeIndex = -1; + let index = openIndex + 1; + while (index < final && !found) { + if (stream.atoms[index].type === "mopen") depth += 1; + else if (stream.atoms[index].type === "mclose") depth -= 1; + if (depth === -1) { + found = true; + closeIndex = index; + } + index += 1; + } + if (found) { + mathML = ""; + mathML += toMo(stream.atoms[openIndex], options); + mathML += toMathML(stream.atoms, options, openIndex + 1, closeIndex); + mathML += toMo(stream.atoms[closeIndex], options); + mathML += ""; + stream.index = closeIndex + 1; + if (stream.lastType === "mi" || stream.lastType === "mn" || stream.lastType === "mfrac" || stream.lastType === "fence") + stream.mathML += INVISIBLE_TIMES; + if (parseSubsup(mathML, stream, options)) { + result = true; + stream.lastType = ""; + mathML = ""; + } + lastType = "fence"; + } + } + if (mathML.length > 0) { + result = true; + stream.mathML += mathML; + stream.lastType = lastType; + } + return result; + } + function scanOperator(stream, final, options) { + let result = false; + final = final != null ? final : stream.atoms.length; + let mathML = ""; + let lastType = ""; + const atom = stream.atoms[stream.index]; + if (!atom) return false; + const SPECIAL_OPERATORS = { + "\\ne": "≠", + "\\neq": "≠", + "\\pm": "±", + "\\times": "×", + "\\colon": ":", + "\\vert": "|", + "\\Vert": "\u2225", + "\\mid": "\u2223", + "\\{": "{", + "\\}": "}", + "\\lbrace": "{", + "\\rbrace": "}", + "\\lbrack": "[", + "\\rbrack": "]", + "\\lparen": "(", + "\\rparen": ")", + "\\langle": "\u27E8", + "\\rangle": "\u27E9", + "\\lfloor": "\u230A", + "\\rfloor": "\u230B", + "\\lceil": "\u2308", + "\\rceil": "\u2309" + }; + if (SPECIAL_OPERATORS[atom.command]) { + stream.index += 1; + const mathML2 = `${SPECIAL_OPERATORS[atom.command]}`; + if (!parseSubsup(mathML2, stream, options)) { + stream.mathML += mathML2; + stream.lastType = "mo"; + } + return true; + } + if (stream.index < final && (atom.type === "mbin" || atom.type === "mrel")) { + mathML += atomToMathML(stream.atoms[stream.index], options); + stream.index += 1; + lastType = "mo"; + } else if (stream.index < final && (atom.type === "mop" || atom.type === "operator" || atom.type === "extensible-symbol")) { + if (atom.subsupPlacement === "over-under" && (atom.superscript || atom.subscript)) { + const op = toMo(atom, options); + if (atom.superscript && atom.subscript) { + mathML += "" + op; + mathML += toMathML(atom.subscript, options); + mathML += toMathML(atom.superscript, options); + mathML += ""; + } else if (atom.superscript) { + mathML += "" + op; + mathML += toMathML(atom.superscript, options); + mathML += ""; + } else if (atom.subscript) { + mathML += "" + op; + mathML += toMathML(atom.subscript, options); + mathML += ""; + } + stream.mathML += mathML; + stream.lastType = "mo"; + stream.index += 1; + return true; + } + { + const atom2 = stream.atoms[stream.index]; + const isUnit = atom2.value === "\\operatorname"; + const op = isUnit ? '" + toString2(atom2.value) + "" : toMo(atom2, options); + mathML += op; + if (!isUnit && !/^(.*)<\/mo>$/.test(op)) { + mathML += APPLY_FUNCTION; + lastType = "applyfunction"; + } else lastType = isUnit ? "mi" : "mo"; + } + if ((stream.lastType === "mi" || stream.lastType === "mn") && !/^(.*)<\/mo>$/.test(mathML)) + mathML = INVISIBLE_TIMES + mathML; + stream.index += 1; + } + if (mathML.length > 0) { + result = true; + if (!parseSubsup(mathML, stream, options)) { + stream.mathML += mathML; + stream.lastType = lastType; + } + } + return result; + } + function toMathML(input, options, initial, final) { + options != null ? options : options = {}; + const result = { + atoms: [], + index: initial != null ? initial : 0, + mathML: "", + lastType: "" + }; + if (typeof input === "number" || typeof input === "boolean") + result.mathML = input.toString(); + else if (typeof input === "string") result.mathML = input; + else if (input instanceof Atom) result.mathML = atomToMathML(input, options); + else if (Array.isArray(input)) { + result.atoms = input; + let count = 0; + final = final ? final : input ? input.length : 0; + while (result.index < final) { + if (scanText(result, final, options) || scanNumber(result, final, options) || scanIdentifier(result, final, options) || scanOperator(result, final, options) || scanFence(result, final, options)) + count += 1; + else if (result.index < final) { + let mathML = atomToMathML(result.atoms[result.index], options); + if (result.lastType === "mn" && mathML.length > 0 && result.atoms[result.index].type === "genfrac") { + mathML = "" + mathML; + } + if (result.atoms[result.index].type === "genfrac") + result.lastType = "mfrac"; + else result.lastType = ""; + result.index += 1; + if (parseSubsup(mathML, result, options)) count += 1; + else { + if (mathML.length > 0) { + result.mathML += mathML; + count += 1; + } + } + } + } + if (count > 1) result.mathML = "" + result.mathML + ""; + } + return result.mathML; + } + function toMo(atom, options) { + let result = ""; + const body = toString2(atom.value); + if (body) result = "" + body + ""; + return result; + } + function toString2(atoms) { + if (!atoms) return ""; + if (typeof atoms === "string") return xmlEscape(atoms); + if (!Array.isArray(atoms) && typeof atoms.body === "string") + return xmlEscape(atoms.body); + let result = ""; + for (const atom of atoms) + if (typeof atom.value === "string") result += atom.value; + return xmlEscape(result); + } + function atomToMathML(atom, options) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w; + if (atom.type === "first") return ""; + if (isTextMode(atom.mode)) + return `${xmlEscape(atom.value)}`; + const SVG_CODE_POINTS = { + widehat: "^", + widecheck: "\u02C7", + widetilde: "~", + utilde: "~", + overleftarrow: "\u2190", + underleftarrow: "\u2190", + xleftarrow: "\u2190", + longleftarrow: "\u2190", + overrightarrow: "\u2192", + underrightarrow: "\u2192", + xrightarrow: "\u2192", + longrightarrow: "\u2192", + underbrace: "\u23DF", + overbrace: "\u23DE", + overgroup: "\u23E0", + undergroup: "\u23E1", + overleftrightarrow: "\u2194", + underleftrightarrow: "\u2194", + xleftrightarrow: "\u2194", + Overrightarrow: "\u21D2", + xRightarrow: "\u21D2", + overleftharpoon: "\u21BC", + xleftharpoonup: "\u21BC", + overrightharpoon: "\u21C0", + xrightharpoonup: "\u21C0", + xLeftarrow: "\u21D0", + xLeftrightarrow: "\u21D4", + xhookleftarrow: "\u21A9", + xhookrightarrow: "\u21AA", + xmapsto: "\u21A6", + xrightharpoondown: "\u21C1", + xleftharpoondown: "\u21BD", + xrightleftharpoons: "\u21CC", + longrightleftharpoons: "\u21CC", + xleftrightharpoons: "\u21CB", + xtwoheadleftarrow: "\u219E", + xtwoheadrightarrow: "\u21A0", + xlongequal: "=", + xtofrom: "\u21C4", + xleftrightarrows: "\u21C4", + xRightleftharpoons: "\u21CC", + // Not a perfect match. + longRightleftharpoons: "\u21CC", + // Not a perfect match. + xLeftrightharpoons: "\u21CB", + // None better available. + longLeftrightharpoons: "\u21CB" + // None better available. + }; + const SPACING = { + "\\!": -3 / 18, + "\\ ": 6 / 18, + "\\,": 3 / 18, + "\\:": 4 / 18, + "\\>": 4 / 18, + "\\;": 5 / 18, + "\\enspace": 0.5, + "\\quad": 1, + "\\qquad": 2, + "\\enskip": 0.5 + }; + let result = ""; + let sep = ""; + let col; + let row; + let i; + let underscript; + let overscript; + let body; + const { command } = atom; + if (atom.command === "\\error") { + return `${toMathML( + atom.body, + options + )}`; + } + const SPECIAL_DELIMS = { + "\\vert": "|", + "\\Vert": "\u2225", + "\\mid": "\u2223", + "\\lbrack": "[", + "\\rbrack": "]", + "\\{": "{", + "\\}": "}", + "\\lbrace": "{", + "\\rbrace": "}", + "\\lparen": "(", + "\\rparen": ")", + "\\langle": "\u27E8", + "\\rangle": "\u27E9", + "\\lfloor": "\u230A", + "\\rfloor": "\u230B", + "\\lceil": "\u2308", + "\\rceil": "\u2309" + }; + const SPECIAL_ACCENTS = { + "\\vec": "⃗", + "\\acute": "´", + "\\grave": "`", + "\\dot": "˙", + "\\ddot": "¨", + "\\tilde": "~", + "\\bar": "¯", + "\\breve": "˘", + "\\check": "ˇ", + "\\hat": "^" + }; + switch (atom.type) { + case "first": + break; + // Nothing to do + case "error": + if (atom.command === "\\\\") break; + result = `${toMathML( + atom.body, + options + )}`; + break; + case "group": + case "root": + result = toMathML(atom.body, options); + break; + case "array": + const arrayAtom = atom; + if (arrayAtom.leftDelim && arrayAtom.leftDelim !== "." || arrayAtom.rightDelim && arrayAtom.rightDelim !== ".") { + result += ""; + if (arrayAtom.leftDelim && arrayAtom.leftDelim !== ".") + result += `${xmlEscape(SPECIAL_DELIMS[arrayAtom.leftDelim] || arrayAtom.leftDelim)}`; + } + result += ""; + } + result += ""; + } + result += ""; + if (arrayAtom.leftDelim && arrayAtom.leftDelim !== "." || arrayAtom.rightDelim && arrayAtom.rightDelim !== ".") { + if (arrayAtom.rightDelim && arrayAtom.rightDelim !== ".") + result += `${xmlEscape(SPECIAL_DELIMS[arrayAtom.rightDelim] || arrayAtom.rightDelim)}`; + result += ""; + } + break; + case "genfrac": + const genfracAtom = atom; + if (genfracAtom.leftDelim || genfracAtom.rightDelim) result += ""; + if (genfracAtom.leftDelim && genfracAtom.leftDelim !== ".") { + result += "" + xmlEscape( + SPECIAL_DELIMS[genfracAtom.leftDelim] || genfracAtom.leftDelim + ) + ""; + } + if (genfracAtom.hasBarLine) { + result += ""; + result += toMathML(atom.above, options) || " "; + result += toMathML(atom.below, options) || " "; + result += ""; + } else { + result += ""; + result += "" + toMathML(atom.above, options) + ""; + result += "" + toMathML(atom.below, options) + ""; + result += ""; + } + if (genfracAtom.rightDelim && genfracAtom.rightDelim !== ".") { + result += "" + xmlEscape( + SPECIAL_DELIMS[genfracAtom.rightDelim] || genfracAtom.rightDelim + ) + ""; + } + if (genfracAtom.leftDelim || genfracAtom.rightDelim) result += ""; + break; + case "surd": + if (!atom.hasEmptyBranch("above")) { + result += ""; + result += toMathML(atom.body, options); + result += toMathML(atom.above, options); + result += ""; + } else { + result += ""; + result += toMathML(atom.body, options); + result += ""; + } + break; + case "leftright": + const leftrightAtom = atom; + const lDelim = leftrightAtom.leftDelim; + result = ""; + if (lDelim && lDelim !== ".") { + result += `${xmlEscape( + (_a3 = SPECIAL_DELIMS[lDelim]) != null ? _a3 : lDelim + )}`; + } + if (atom.body) result += toMathML(atom.body, options); + const rDelim = leftrightAtom.matchingRightDelim(); + if (rDelim && rDelim !== ".") { + result += `${xmlEscape( + (_b3 = SPECIAL_DELIMS[rDelim]) != null ? _b3 : rDelim + )}`; + } + result += ""; + break; + case "sizeddelim": + case "delim": + result += `${xmlEscape( + SPECIAL_DELIMS[atom.value] || atom.value + )}`; + break; + case "accent": + const accentAtom = atom; + result += '"; + result += toMathML(atom.body, options); + result += "" + (SPECIAL_ACCENTS[command] || accentAtom.accent) + ""; + result += ""; + break; + case "line": + case "overlap": + break; + case "overunder": + const overunderAtom = atom; + overscript = atom.above; + underscript = atom.below; + if ((overunderAtom.svgAbove || overscript) && (overunderAtom.svgBelow || underscript)) + body = atom.body; + else if (overscript && overscript.length > 0) { + body = atom.body; + if ((_d2 = (_c2 = atom.body) == null ? void 0 : _c2[0]) == null ? void 0 : _d2.below) { + underscript = atom.body[0].below; + body = atom.body[0].body; + } else if (((_f = (_e = atom.body) == null ? void 0 : _e[0]) == null ? void 0 : _f.type) === "first" && ((_h = (_g = atom.body) == null ? void 0 : _g[1]) == null ? void 0 : _h.below)) { + underscript = atom.body[1].below; + body = atom.body[1].body; + } + } else if (underscript && underscript.length > 0) { + body = atom.body; + if ((_j = (_i = atom.body) == null ? void 0 : _i[0]) == null ? void 0 : _j.above) { + overscript = atom.body[0].above; + body = atom.body[0].body; + } else if (((_l = (_k = atom.body) == null ? void 0 : _k[0]) == null ? void 0 : _l.type) === "first" && ((_n = (_m = atom.body) == null ? void 0 : _m[1]) == null ? void 0 : _n.above)) { + overscript = atom.body[1].above; + body = atom.body[1].body; + } + } + if ((overunderAtom.svgAbove || overscript) && (overunderAtom.svgBelow || underscript)) { + result += ``; + result += (_o = SVG_CODE_POINTS[overunderAtom.svgBody]) != null ? _o : toMathML(body, options); + result += (_p = SVG_CODE_POINTS[overunderAtom.svgBelow]) != null ? _p : toMathML(underscript, options); + result += (_q = SVG_CODE_POINTS[overunderAtom.svgAbove]) != null ? _q : toMathML(overscript, options); + result += ""; + } else if (overunderAtom.svgAbove || overscript) { + result += `` + ((_r = SVG_CODE_POINTS[overunderAtom.svgBody]) != null ? _r : toMathML(body, options)); + result += (_s = SVG_CODE_POINTS[overunderAtom.svgAbove]) != null ? _s : toMathML(overscript, options); + result += ""; + } else if (overunderAtom.svgBelow || underscript) { + result += `` + ((_t = SVG_CODE_POINTS[overunderAtom.svgBody]) != null ? _t : toMathML(body, options)); + result += (_u = SVG_CODE_POINTS[overunderAtom.svgBelow]) != null ? _u : toMathML(underscript, options); + result += ""; + } + break; + case "placeholder": + result += "?"; + break; + case "mord": { + result = typeof atom.value === "string" ? atom.value : command; + if (result.length > 0 && result.startsWith("\\")) { + if (typeof atom.value === "string" && atom.value.charCodeAt(0) > 255) { + result = String.fromCodePoint(atom.value.codePointAt(0)); + } else if (typeof atom.value === "string") + result = atom.value.charAt(0); + } else if (atom.command === "\\char") { + const val = (_v = atom.args) == null ? void 0 : _v[0]; + if (val !== void 0 && "number" in val) { + const codepoint = val.number; + if (typeof codepoint === "number" && codepoint >= 0 && codepoint <= 1114111) + result = String.fromCodePoint(codepoint); + } + } else if (typeof atom.value === "string") result = atom.value; + else { + console.error("Did not expect this"); + result = ""; + } + const tag = /\d/.test(result) ? "mn" : "mi"; + result = `<${tag}${makeID(atom.id, options)}>${xmlEscape( + result + )}`; + break; + } + case "mbin": + case "mrel": + case "minner": + result = toMo(atom, options); + break; + case "mpunct": + result = '" + command + ""; + break; + case "mop": + case "operator": + case "extensible-symbol": + if (atom.value !== "\u200B") { + result = ""; + result += command === "\\operatorname" ? atom.body : command || atom.body; + result += ""; + } + break; + // Case 'mathstyle': + // TODO: mathstyle is a switch. Need to figure out its scope to properly wrap it around a tag + // if (atom.mathstyle === 'displaystyle') { + // result += ''; + // result += ''; + // } else { + // result += ''; + // result += ''; + // }; + // break; + case "box": + const boxAtom = atom; + result = '" + toMathML(atom.body, options) + ""; + break; + case "spacing": + result += ''; + break; + case "enclose": + const encloseAtom = atom; + result = '' + toMathML(atom.body, options) + ""; + break; + case "prompt": + result = '' + toMathML(atom.body, options) + ""; + break; + case "space": + result += " "; + break; + case "subsup": + break; + case "phantom": + break; + case "composition": + break; + case "rule": + break; + case "chem": + break; + case "mopen": + result += toMo(atom, options); + break; + case "mclose": + result += toMo(atom, options); + break; + case "macro": + { + const body2 = atom.command + toString2(atom.macroArgs); + if (body2) result += `${body2}`; + } + break; + case "latexgroup": + result += toMathML(atom.body, options); + break; + case "latex": + result += "" + xmlEscape(atom.value) + ""; + break; + case "tooltip": + result += toMathML(atom.body, options); + break; + case "text": + result += `${xmlEscape( + atom.value + )}`; + break; + default: + if (atom.command === "\\displaystyle") { + return `${toMathML(atom.body, options)}`; + } + if (atom.command === "\\textstyle") { + return `${toMathML(atom.body, options)}`; + } + console.info("Unexpected element in conversion to MathML:", atom); + } + return result; + } + + // src/formats/atom-to-speakable-text.ts + var PRONUNCIATION = { + "\\alpha": "alpha ", + "\\mu": "mew ", + "\\sigma": "sigma ", + "\\pi": "pie ", + "\\imaginaryI": "imaginary eye ", + "\\imaginaryJ": "imaginary jay ", + "\\sum": "Summation ", + "\\prod": "Product ", + "+": "plus ", + "-": "minus ", + ";": ' semi-colon ', + ",": ' comma ', + "|": 'Vertical bar', + "(": 'Open paren. ', + ")": ' Close paren. ', + "=": "equals ", + "<": "is less than ", + "\\lt": "is less than ", + "<=": "is less than or equal to ", + "\\le": "is less than or equal to ", + "\\gt": "is greater than ", + ">": "is greater than ", + "\\pm": "plus or minus", + "\\mp": "minus or plus", + "\\ge": "is greater than or equal to ", + "\\geq": "is greater than or equal to ", + "\\leq": "is less than or equal to ", + "\\ne": "is not equal to ", + "\\neq": "is not equal to ", + "!": "factorial ", + "\\sin": "sine ", + "\\cos": "cosine ", + "\u200B": "", + "\u2212": "minus ", + ":": ' such that ', + "\\colon": ' such that ', + "\\hbar": "etch bar ", + "\\iff": 'if, and only if, ', + "\\Longleftrightarrow": 'if, and only if, ', + "\\land": "and ", + "\\lor": "or ", + "\\neg": "not ", + "\\div": "divided by ", + "\\forall": "for all ", + "\\exists": "there exists ", + "\\nexists": "there does not exists ", + "\\in": "element of ", + "\\N": 'the set n', + "\\C": 'the set c', + "\\Z": 'the set z', + "\\Q": 'the set q', + "\\infty": "infinity ", + "\\nabla": "nabla ", + "\\partial": "partial derivative of ", + "\\cdot": "times ", + "\\cdots": "dot dot dot ", + "\\Rightarrow": "implies ", + "\\lparen": 'open paren', + "\\rparen": 'close paren', + "\\lbrace": 'open brace', + "\\{": 'open brace', + "\\rbrace": 'close brace', + "\\}": 'close brace', + "\\langle": 'left angle bracket', + "\\rangle": 'right angle bracket', + "\\lfloor": 'open floor', + "\\rfloor": 'close floor', + "\\lceil": 'open ceiling', + "\\rceil": 'close ceiling', + "\\vert": 'vertical bar', + "\\mvert": 'divides', + "\\lvert": 'left vertical bar', + "\\rvert": 'right vertical bar', + // '\\lbrack': 'left bracket', + // '\\rbrack': 'right bracket', + "\\lbrack": ' open square bracket ', + "\\rbrack": ' close square bracket ', + // Need to add code to detect singluar/plural. Until then spoken as plural since that is vastly more common + // note: need to worry about intervening ⁢. + // note: need to also do this when in numerator of fraction and number preceeds fraction + // note: need to do this for + "mm": "millimeters", + "cm": "centimeters", + "km": "kilometers", + "kg": "kilograms" + }; + var ENVIRONMENTS_NAMES = { + "array": "array", + "matrix": "matrix", + "pmatrix": "parenthesis matrix", + "bmatrix": "square brackets matrix", + "Bmatrix": "braces matrix", + "vmatrix": "bars matrix", + "Vmatrix": "double bars matrix", + "matrix*": "matrix", + "smallmatrix": "small matrix" + }; + function getSpokenName(latex) { + let result = ""; + if (latex.startsWith("\\")) result = " " + latex.replace("\\", "") + " "; + return result; + } + function isAtomic(atoms) { + let count = 0; + if (isArray(atoms)) { + for (const atom of atoms) if (atom.type !== "first") count += 1; + } + return count === 1; + } + function atomicID(atoms) { + if (isArray(atoms)) { + for (const atom of atoms) + if (atom.type !== "first" && atom.id) return atom.id.toString(); + } + return ""; + } + function atomicValue(atoms) { + let result = ""; + if (isArray(atoms)) { + for (const atom of atoms) { + if (atom.type !== "first" && typeof atom.value === "string") + result += atom.value; + } + } + return result; + } + function atomsAsText(atoms) { + if (!atoms) return ""; + return atoms.map((atom) => atom.value).join(""); + } + function atomsAsPotentialText(atoms) { + if (!atoms) return void 0; + if (atoms.some((x) => x.type !== "first" && x.value === void 0)) + return void 0; + return atoms.map((atom) => atom.value).join(""); + } + function emph(s) { + return `${s}`; + } + function atomsToSpeakableFragment(mode, atom) { + var _a3; + let result = ""; + let isInDigitRun = false; + let isInTextRun = false; + for (let i = 0; i < atom.length; i++) { + if (atom[i].type === "first") continue; + if (!isTextMode(atom[i].mode)) isInTextRun = false; + if (i < atom.length - 2 && atom[i].type === "mopen" && atom[i + 2].type === "mclose" && atom[i + 1].type === "mord") { + result += " of "; + result += emph(atomToSpeakableFragment(mode, atom[i + 1])); + i += 2; + } else if (isTextMode(atom[i].mode)) { + if (isInTextRun) result += (_a3 = atom[i].value) != null ? _a3 : " "; + else { + isInTextRun = true; + result += atomToSpeakableFragment("text", atom[i]); + } + } else if (atom[i].isDigit()) { + if (isInDigitRun) result += atom[i].asDigit(); + else { + isInDigitRun = true; + result += atomToSpeakableFragment(mode, atom[i]); + } + } else { + isInDigitRun = false; + result += atomToSpeakableFragment(mode, atom[i]); + } + } + return result; + } + function atomToSpeakableFragment(mode, atom) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h; + function letter(c) { + if (!globalThis.MathfieldElement.textToSpeechMarkup) { + if (/[a-z]/.test(c)) return " '" + c.toUpperCase() + "'"; + if (/[A-Z]/.test(c)) return " 'capital " + c.toUpperCase() + "'"; + return c; + } + if (/[a-z]/.test(c)) + return ` ${c}`; + if (/[A-Z]/.test(c)) + return `capital ${c.toLowerCase()}`; + return c; + } + if (!atom) return ""; + if (isArray(atom)) return atomsToSpeakableFragment(mode, atom); + let result = ""; + if (atom.id && mode === "math") + result += ''; + if (isTextMode(atom.mode)) return result + atom.value; + let numer = ""; + let denom = ""; + let body = ""; + let supsubHandled = false; + const { command } = atom; + switch (command) { + case "\\vec": + return "vector " + atomToSpeakableFragment(mode, atom.body); + case "\\acute": + return atomToSpeakableFragment(mode, atom.body) + " acute"; + case "\\grave": + return atomToSpeakableFragment(mode, atom.body) + " grave"; + case "\\dot": + return "dot over" + atomToSpeakableFragment(mode, atom.body); + case "\\ddot": + return "double dot over" + atomToSpeakableFragment(mode, atom.body); + case "\\mathring": + return "ring over" + atomToSpeakableFragment(mode, atom.body); + case "\\tilde": + case "\\widetilde": + return "tilde over" + atomToSpeakableFragment(mode, atom.body); + case "\\bar": + return atomToSpeakableFragment(mode, atom.body) + " bar"; + case "\\breve": + return atomToSpeakableFragment(mode, atom.body) + " breve"; + case "\\check": + case "\\widecheck": + return "check over " + atomToSpeakableFragment(mode, atom.body); + case "\\hat": + case "\\widehat": + return "hat over" + atomToSpeakableFragment(mode, atom.body); + case "\\overarc": + case "\\overparen": + case "\\wideparen": + return "arc over " + atomToSpeakableFragment(mode, atom.body); + case "\\underarc": + case "\\underparen": + return "arc under " + atomToSpeakableFragment(mode, atom.body); + case "\\mathop": + return (_a3 = atomsAsPotentialText(atom.body)) != null ? _a3 : atomToSpeakableFragment(mode, atom.body); + case "\\mathit": + return (_b3 = atomsAsPotentialText(atom.body)) != null ? _b3 : atomToSpeakableFragment(mode, atom.body); + case "\\mathrm": + return (_c2 = atomsAsPotentialText(atom.body)) != null ? _c2 : atomToSpeakableFragment(mode, atom.body); + case "\\mathbb": + return "blackboard" + ((_d2 = atomsAsPotentialText(atom.body)) != null ? _d2 : atomToSpeakableFragment(mode, atom.body)); + } + switch (atom.type) { + case "prompt": + const input = atom.body.length > 1 ? 'start input . ' + atomToSpeakableFragment(mode, atom.body) + '. end input' : "blank"; + result += ' ' + input + '. ' + ((_e = atom.correctness) != null ? _e : "") + ' . '; + break; + case "array": + const array = atom.rows; + const environment = atom.environmentName; + if (environment === "lines") { + for (let i = 0; i < array.length; i++) { + if (i > 0) result += " line break "; + const line = array[i].map((cell) => atomToSpeakableFragment("text", cell)).join(""); + result += line || " blank "; + } + } else if (Object.keys(ENVIRONMENTS_NAMES).includes(environment)) { + result += ` begin ${ENVIRONMENTS_NAMES[environment]} `; + for (let i = 0; i < array.length; i++) { + if (i > 0) result += ","; + result += ` row ${i + 1} `; + for (let j = 0; j < array[i].length; j++) { + if (j > 0) result += ","; + result += ` column ${j + 1}: `; + result += atomToSpeakableFragment("math", array[i][j]); + } + } + result += ` end ${ENVIRONMENTS_NAMES[environment]} `; + } + break; + case "group": + if (command === "\\ne") result += " not equal "; + else if (command === "\\not") { + result += " not "; + result += atomToSpeakableFragment("math", atom.body); + } else { + result += atomToSpeakableFragment("math", atom.body); + } + break; + case "root": + result += atomToSpeakableFragment("math", atom.body); + break; + case "genfrac": + numer = atomToSpeakableFragment("math", atom.above); + denom = atomToSpeakableFragment("math", atom.below); + if (isAtomic(atom.above) && isAtomic(atom.below)) { + const COMMON_FRACTIONS = { + "1/2": " half ", + "1/3": " one third ", + "2/3": " two third", + "1/4": " one quarter ", + "3/4": " three quarter ", + "1/5": " one fifth ", + "2/5": " two fifths ", + "3/5": " three fifths ", + "4/5": " four fifths ", + "1/6": " one sixth ", + "5/6": " five sixths ", + "1/8": " one eight ", + "3/8": " three eights ", + "5/8": " five eights ", + "7/8": " seven eights ", + "1/9": " one ninth ", + "2/9": " two ninths ", + "4/9": " four ninths ", + "5/9": " five ninths ", + "7/9": " seven ninths ", + "8/9": " eight ninths " + // '1/10': ' one tenth ', + // '1/12': ' one twelfth ', + // 'x/2': ' X over 2', + }; + const commonFraction = COMMON_FRACTIONS[atomicValue(atom.above) + "/" + atomicValue(atom.below)]; + if (commonFraction) result = commonFraction; + else result += numer + " over " + denom; + } else { + result += ' the fraction ' + numer + ' over ' + denom + '. End fraction.'; + } + break; + case "surd": + body = atomToSpeakableFragment("math", atom.body); + if (atom.hasEmptyBranch("above")) { + result += isAtomic(atom.body) ? " the square root of " + body + " , " : ' the square root of ' + body + '. End square root'; + } else { + let index = atomToSpeakableFragment("math", atom.above); + index = index.trim(); + const index2 = index.replace(//g, ""); + if (index2 === "3") { + result += ' the cube root of ' + body + '. End cube root'; + } else if (index2 === "n") { + result += ' the nth root of ' + body + '. End root'; + } else { + result += ' the root with index: ' + index + ', of ' + body + '. End root'; + } + } + break; + case "leftright": + { + const delimAtom = atom; + result += (_f = delimAtom.leftDelim ? PRONUNCIATION[delimAtom.leftDelim] : void 0) != null ? _f : delimAtom.leftDelim; + result += atomToSpeakableFragment("math", atom.body); + result += (_g = delimAtom.rightDelim ? PRONUNCIATION[delimAtom.rightDelim] : void 0) != null ? _g : delimAtom.rightDelim; + } + break; + case "rule": + break; + case "overunder": + break; + case "overlap": + break; + case "macro": + const macroName = command.replace(/^\\/g, ""); + const macro = getMacros()[macroName]; + if (macro == null ? void 0 : macro.expand) result += atomToSpeakableFragment("math", atom.body); + else result += `${macroName} `; + break; + case "placeholder": + result += "placeholder "; + break; + case "delim": + case "sizeddelim": + case "mord": + case "minner": + case "mbin": + case "mrel": + case "mpunct": + case "mopen": + case "mclose": { + if (command === "\\mathbin" || command === "\\mathrel" || command === "\\mathopen" || command === "\\mathclose" || command === "\\mathpunct" || command === "\\mathord" || command === "\\mathinner") { + result = atomToSpeakableFragment(mode, atom.body); + break; + } + let atomValue = atom.isDigit() ? atom.asDigit() : atom.value; + let latexValue = atom.command; + if (atom.type === "delim" || atom.type === "sizeddelim") { + latexValue = atom.value; + atomValue = latexValue; + } + if (mode === "text") result += atomValue; + else { + if (atom.type === "mbin") result += ''; + if (atomValue) { + const value = PRONUNCIATION[atomValue] || (latexValue ? PRONUNCIATION[latexValue.trim()] : ""); + if (value) result += " " + value; + else { + const spokenName = latexValue ? getSpokenName(latexValue.trim()) : ""; + result += spokenName ? spokenName : letter(atomValue); + } + } else result += atomToSpeakableFragment("math", atom.body); + if (atom.type === "mbin") result += ''; + } + break; + } + case "mop": + case "operator": + case "extensible-symbol": + if (atom.value !== "\u200B") { + const trimLatex = atom.command; + if (trimLatex === "\\sum") { + if (!atom.hasEmptyBranch("superscript") && !atom.hasEmptyBranch("subscript")) { + let sup = atomToSpeakableFragment("math", atom.superscript); + sup = sup.trim(); + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += ' the summation from ' + sub + ' to ' + sup + ' of '; + supsubHandled = true; + } else if (!atom.hasEmptyBranch("subscript")) { + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += ' the summation from ' + sub + ' of '; + supsubHandled = true; + } else result += " the summation of"; + } else if (trimLatex === "\\prod") { + if (!atom.hasEmptyBranch("superscript") && !atom.hasEmptyBranch("subscript")) { + let sup = atomToSpeakableFragment("math", atom.superscript); + sup = sup.trim(); + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += ' the product from ' + sub + ' to ' + sup + ' of '; + supsubHandled = true; + } else if (!atom.hasEmptyBranch("subscript")) { + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += ' the product from ' + sub + ' of '; + supsubHandled = true; + } else result += " the product of "; + } else if (trimLatex === "\\int") { + if (!atom.hasEmptyBranch("superscript") && !atom.hasEmptyBranch("subscript")) { + let sup = atomToSpeakableFragment("math", atom.superscript); + sup = sup.trim(); + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += ' the integral from ' + emph(sub) + ' to ' + emph(sup) + ' of '; + supsubHandled = true; + } else result += ' the integral of '; + } else if (trimLatex === "\\operatorname" || trimLatex === "\\operatorname*") + result += atomsAsText(atom.body) + " "; + else if (typeof atom.value === "string") { + const value = (_h = PRONUNCIATION[atom.value]) != null ? _h : atom.command ? PRONUNCIATION[atom.command] : void 0; + result += value ? value : " " + atom.value; + } else if (atom.command) { + if (atom.command === "\\mathop") + result += atomToSpeakableFragment("math", atom.body); + else { + result += atom.command.startsWith("\\") ? " " + atom.command.slice(1) : " " + atom.command; + } + } + } + break; + case "enclose": + body = atomToSpeakableFragment("math", atom.body); + result += " crossed out " + body + ". End crossed out."; + break; + case "space": + case "spacing": + break; + } + if (!supsubHandled && !atom.hasEmptyBranch("superscript")) { + let sup = atomToSpeakableFragment(mode, atom.superscript); + sup = sup.trim(); + const sup2 = sup.replace(/<[^>]*>/g, ""); + if (isAtomic(atom.superscript)) { + if (mode === "math") { + const id = atomicID(atom.superscript); + if (id) result += ''; + } + if (sup2 === "\u2032") result += " prime "; + else if (sup2 === "2") result += " squared "; + else if (sup2 === "3") result += " cubed "; + else if (Number.isNaN(Number.parseInt(sup2))) + result += " to the " + sup + "; "; + else { + result += ' to the ' + sup2 + " power; "; + } + } else if (Number.isNaN(Number.parseInt(sup2))) + result += " raised to the " + sup + "; "; + else { + result += ' raised to the ' + sup2 + " power; "; + } + } + if (!supsubHandled && !atom.hasEmptyBranch("subscript")) { + let sub = atomToSpeakableFragment("math", atom.subscript); + sub = sub.trim(); + result += isAtomic(atom.subscript) ? " sub " + sub : " subscript " + sub + ". End subscript. "; + } + return result; + } + function atomToSpeakableText(atoms) { + var _a3, _b3; + const mfe = globalThis.MathfieldElement; + if (mfe.textToSpeechRules === "sre" && ("sre" in window || "SRE" in window)) { + const mathML = toMathML(atoms); + if (mathML) { + if (mfe.textToSpeechMarkup) { + mfe.textToSpeechRulesOptions = (_a3 = mfe.textToSpeechRulesOptions) != null ? _a3 : {}; + mfe.textToSpeechRulesOptions = __spreadProps(__spreadValues({}, mfe.textToSpeechRulesOptions), { + markup: mfe.textToSpeechMarkup + }); + if (mfe.textToSpeechRulesOptions.markup === "ssml") { + mfe.textToSpeechRulesOptions = __spreadProps(__spreadValues({}, mfe.textToSpeechRulesOptions), { + markup: "ssml_step" + }); + } + mfe.textToSpeechRulesOptions = __spreadProps(__spreadValues({}, mfe.textToSpeechRulesOptions), { + rate: mfe.speechEngineRate + }); + } + const SRE = (_b3 = window["SRE"]) != null ? _b3 : globalThis.sre.System.getInstance(); + if (mfe.textToSpeechRulesOptions) + SRE.setupEngine(mfe.textToSpeechRulesOptions); + let result2 = ""; + try { + result2 = SRE.toSpeech(mathML); + } catch (e) { + console.error( + `MathLive {{SDK_VERSION}}: \`SRE.toSpeech()\` runtime error`, + e + ); + } + return result2; + } + return ""; + } + let result = atomToSpeakableFragment("math", atoms); + if (mfe.textToSpeechMarkup === "ssml") { + let prosody = ""; + if (mfe.speechEngineRate) + prosody = ''; + result = `` + prosody + "

    " + result + "

    " + (prosody ? "
    " : "") + ""; + } else if (mfe.textToSpeechMarkup === "mac" && osPlatform() === "macos") { + result = result.replace(//g, "").replace(//g, "[[emph+]]").replace(/<\/emphasis>/g, "").replace(//g, "[[slc $1]]").replace(/]*>/g, "").replace(/<\/say-as>/g, ""); + } else { + result = result.replace(/<[^>]*>/g, "").replace(/\s{2,}/g, " "); + } + return result; + } + + // src/formats/atom-to-ascii-math.ts + var IDENTIFIERS = { + "\\ne": "\u2260", + "\\neq": "\u2260", + "\u2212": "-", + // MINUS SIGN + "-": "-", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\delta": "delta", + "\\epsilon": "epsilon", + "\\varepsilon": "varepsilon", + "\\zeta": "zeta", + "\\eta": "eta", + "\\theta": "theta", + "\\vartheta": "vartheta", + "\\iota": "iota", + "\\kappa": "kappa", + "\\lambda": "lambda", + "\\mu": "mu", + "\\nu": "nu", + "\\xi": "xi", + "\\pi": "pi", + "\\rho": "rho", + "\\sigma": "sigma", + "\\tau": "tau", + "\\upsilon": "upsilon", + "\\phi": "phi", + "\\varphi": "varphi", + "\\chi": "chi", + "\\psi": "psi", + "\\omega": "omega", + "\\Gamma": "Gamma", + "\\Delta": "Delta", + "\\Theta": "Theta", + "\\Lambda": "Lambda", + "\\Xi": "Xi", + "\\Pi": "Pi", + "\\Sigma": "Sigma", + "\\Phi": "Phi", + "\\Psi": "Psi", + "\\Omega": "Omega", + "\\exponentialE": "e", + "\\imaginaryI": "i", + "\\imaginaryJ": "j", + "\\!": " ", + "\\,": " ", + "\\:": " ", + "\\>": " ", + "\\;": " ", + "\\enskip": " ", + "\\enspace": " ", + "\\qquad": " ", + "\\quad": " ", + "\\infty": "oo", + "\\R": "RR", + "\\mathbb{R}": "RR", + "\\N": "NN", + "\\mathbb{N}": "NN", + "\\Z": "ZZ", + "\\mathbb{Z}": "ZZ", + "\\Q": "QQ", + "\\mathbb{Q}": "QQ", + "\\C": "CC", + "\\mathbb{C}": "CC", + "\\emptyset": "O/", + "\\varnothing": "O/", + "\\varDelta": "Delta", + "\\varTheta": "Theta", + "\\varLambda": "Lambda", + "\\varXi": "Xi", + "\\varPi": "Pi", + "\\varSigma": "Sigma", + "\\varUpsilon": "Upsilon", + "\\varPhi": "Phi", + "\\varPsi": "Psi", + "\\varOmega": "Omega" + }; + var OPERATORS = { + "\\pm": "+-", + "\\colon": " : ", + "\\sum": " sum ", + "\\prod": " prod ", + "\\bigcap": " nnn ", + "\\bigcup": " uuu ", + "\\int": " int ", + "\\oint": " oint ", + "\\ge": ">=", + "\\le": "<=", + "\\ne": "!=", + "\\neq": "!=", + "\\lt": "<", + "\\gt": ">", + "\\gets": "<-", + "\\to": "->", + "\\land": " and ", + "\\lor": " or ", + "\\lnot": " not ", + "\\forall": " AA ", + "\\exists": " EE ", + "\\in": " in ", + "\\notin": " !in ", + "\\mapsto": "|->", + "\\implies": "=>", + "\\iff": "<=>", + "\\cdot": " * ", + "\\ast": " ** ", + "\\star": " *** ", + "\\times": " * ", + "\\div": " -: ", + "\\ltimes": " |>< ", + "\\rtimes": " ><| ", + "\\bowtie": " |><| ", + "\\circ": "@" + // '\\lfloor': '\u230a', + // '\\rfloor': '\u230b', + // '\\lceil': '\u2308', + // '\\rceil': '\u2309', + // '\\vec': '⃗', + // '\\acute': '´', + // '\\grave': '`', + // '\\dot': '˙', + // '\\ddot': '¨', + // '\\tilde': '~', + // '\\bar': '¯', + // '\\breve': '˘', + // '\\check': 'ˇ', + // '\\hat': '^' + }; + var FENCES2 = { + "\\vert": "|", + "\\Vert": "||", + "\\mid": "|", + "\\lbrack": "[", + "\\rbrack": "]", + "\\lbrace": "{", + "\\rbrace": "}", + "\\lparen": "(", + "\\rparen": ")", + "\\langle": "(:", + "\\rangle": ":)" + }; + function joinAsciiMath(xs) { + let result = ""; + for (const x of xs) { + const last = result[result.length - 1]; + if (last !== void 0 && (/\d$/.test(last) && /^\d/.test(x) || /[a-zA-Z]$/.test(last) && /^[a-zA-Z]/.test(x))) + result += " "; + result += x; + } + return result; + } + function atomToAsciiMath(atom, options) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v; + if (!atom) return ""; + if (isArray(atom)) { + if (atom.length === 0) return ""; + let first = 0; + while (((_a3 = atom[first]) == null ? void 0 : _a3.type) === "first") first += 1; + if (first > 0) return atomToAsciiMath(atom.slice(first), options); + if (atom[0].mode === "latex") + return atom.map((x) => atomToAsciiMath(x)).join(""); + if (isTextMode(atom[0].mode)) { + let i2 = 0; + let text = ""; + while (((_b3 = atom[i2]) == null ? void 0 : _b3.type) !== "first" && isTextMode((_d2 = (_c2 = atom[i2]) == null ? void 0 : _c2.mode) != null ? _d2 : "")) { + text += atom[i2].body ? atomToAsciiMath(atom[i2].body, options) : atom[i2].value; + i2++; + } + if (options == null ? void 0 : options.plain) return text + atomToAsciiMath(atom.slice(i2), options); + return `"${text}" ${atomToAsciiMath(atom.slice(i2))}`; + } + let i = 0; + const result2 = []; + while (((_e = atom[i]) == null ? void 0 : _e.mode) === "math") { + let digits = ""; + while (((_f = atom[i]) == null ? void 0 : _f.type) === "mord" && /\d/.test(atom[i].value)) + digits += atom[i++].value; + if (digits) result2.push(digits); + else result2.push(atomToAsciiMath(atom[i++], options)); + } + result2.push(atomToAsciiMath(atom.slice(i), options)); + return joinAsciiMath(result2); + } + if (isTextMode(atom.mode)) + return (options == null ? void 0 : options.plain) ? atom.value : `"${atom.value}"`; + let result = ""; + const { command } = atom; + let m; + if (command === "\\placeholder") + return `(${atomToAsciiMath(atom.body, options)})`; + const latex = Atom.serialize([atom], { + expandMacro: false, + defaultMode: "math" + }); + switch (atom.type) { + case "accent": + const accent = { + "\\vec": "vec", + "\\dot": "dot", + "\\ddot": "ddot", + "\\bar": "bar", + "\\hat": "hat", + "\\acute": "acute;", + // non-standard + "\\grave": "grave", + // non-standard + "\\tilde": "tilde", + // non-standard + "\\breve": "breave", + // non-standard + "\\check": "check" + // non-standard + }[command]; + result = `${accent != null ? accent : ""} ${atomToAsciiMath(atom.body, options)} `; + break; + case "first": + return ""; + case "latexgroup": + return atom.body.map((x) => x.value).join(""); + case "group": + case "root": + result = (_g = IDENTIFIERS[command]) != null ? _g : atomToAsciiMath(atom.body, options); + break; + case "genfrac": + { + const genfracAtom = atom; + if (genfracAtom.leftDelim || genfracAtom.rightDelim) { + result = genfracAtom.leftDelim === "." || !genfracAtom.leftDelim ? "{:" : genfracAtom.leftDelim; + } + if (genfracAtom.hasBarLine) { + result += "("; + result += atomToAsciiMath(genfracAtom.above, options); + result += ")/("; + result += atomToAsciiMath(genfracAtom.below, options); + result += ")"; + } else { + result += "(("; + result += atomToAsciiMath(genfracAtom.above, options); + result += ") choose ("; + result += atomToAsciiMath(genfracAtom.below, options); + result += "))"; + } + if (genfracAtom.leftDelim || genfracAtom.rightDelim) { + result += genfracAtom.rightDelim === "." || !genfracAtom.rightDelim ? "{:" : genfracAtom.rightDelim; + } + } + break; + case "surd": + if (atom.hasEmptyBranch("above")) + result += `sqrt(${atomToAsciiMath(atom.body, options)})`; + else + result += `root(${atomToAsciiMath(atom.above, options)})(${atomToAsciiMath(atom.body, options)})`; + break; + case "latex": + result = atom.value; + break; + case "leftright": + { + const leftrightAtom = atom; + let lDelim = leftrightAtom.leftDelim; + if (lDelim && FENCES2[lDelim]) lDelim = FENCES2[lDelim]; + result += lDelim === "." || !lDelim ? "{:" : lDelim; + result += atomToAsciiMath(leftrightAtom.body, options); + let rDelim = leftrightAtom.matchingRightDelim(); + if (rDelim && FENCES2[rDelim]) rDelim = FENCES2[rDelim]; + result += rDelim === "." || !rDelim ? ":}" : rDelim; + } + break; + case "sizeddelim": + case "delim": + result = atom.value; + break; + case "overlap": + break; + case "overunder": + break; + case "mord": + if (IDENTIFIERS[latex]) return IDENTIFIERS[latex]; + result = (_j = (_i = (_h = IDENTIFIERS[command]) != null ? _h : command) != null ? _i : command) != null ? _j : typeof atom.value === "string" ? atom.value : ""; + if (result.startsWith("\\")) result += " "; + m = command ? command.match(/{?\\char"([\dabcdefABCDEF]+)}?/) : null; + if (m) { + result = String.fromCodePoint(Number.parseInt("0x" + m[1])); + } else if (result.length > 0 && result.startsWith("\\")) { + result = typeof atom.value === "string" ? atom.value.charAt(0) : atom.command; + } + result = asciiStyle(result, atom.style); + break; + case "mbin": + case "mrel": + case "minner": + result = (_m = (_l = (_k = IDENTIFIERS[latex]) != null ? _k : IDENTIFIERS[command]) != null ? _l : OPERATORS[command]) != null ? _m : atom.value; + break; + case "mopen": + case "mclose": + result = atom.value; + break; + case "mpunct": + result = (_n = OPERATORS[command]) != null ? _n : command; + break; + case "mop": + case "operator": + case "extensible-symbol": + if (atom.value !== "\u200B") { + if (OPERATORS[command]) result = OPERATORS[command]; + else { + result = command === "\\operatorname" ? atomToAsciiMath(atom.body, options) : (_o = atom.value) != null ? _o : command; + } + result += " "; + } + break; + case "array": + const environment = atom.environmentName; + if (atom.isMultiline) { + const lines = atom.rows; + result = lines.map( + (line) => line.map( + (cell) => atomToAsciiMath( + (cell != null ? cell : []).filter((child) => child.type !== "first"), + options + ) + ).join("") + ).join("\n"); + } else { + const rowDelim = (_p = { + "bmatrix": ["[", "]"], + "bmatrix*": ["[", "]"] + }[environment]) != null ? _p : ["(", ")"]; + const rows = []; + const array = atom.rows; + for (const row of array) { + const cells = []; + for (const cell of row) cells.push(atomToAsciiMath(cell, options)); + rows.push(rowDelim[0] + cells.join(",") + rowDelim[1]); + } + const delim = (_q = { + "bmatrix": ["[", "]"], + "bmatrix*": ["[", "]"], + "cases": ["{", ":}"] + }[environment]) != null ? _q : ["(", ")"]; + result = delim[0] + rows.join(",") + delim[1]; + } + break; + case "box": + break; + case "spacing": + result = (_s = (_r = IDENTIFIERS[latex]) != null ? _r : IDENTIFIERS[command]) != null ? _s : " "; + break; + case "enclose": + result = "(" + atomToAsciiMath(atom.body, options) + ")"; + break; + case "space": + result = " "; + break; + case "subsup": + result = ""; + break; + case "macro": + result = (_v = (_u = (_t = IDENTIFIERS[latex]) != null ? _t : IDENTIFIERS[command]) != null ? _u : OPERATORS[command]) != null ? _v : atomToAsciiMath(atom.body, options); + break; + } + if (!atom.hasEmptyBranch("subscript")) { + result += "_"; + const arg = atomToAsciiMath(atom.subscript, options); + result += arg.length !== 1 ? `(${arg})` : arg; + } + if (!atom.hasEmptyBranch("superscript")) { + result += "^"; + const arg = atomToAsciiMath(atom.superscript, options); + result += arg.length !== 1 ? `(${arg})` : arg; + } + return result; + } + function asciiStyle(body, style) { + if (!style) return body; + let result = body; + if (style.variant === "double-struck") result = `bbb "${result}"`; + if (style.variant === "script") result = `cc "${result}"`; + if (style.variant === "fraktur") result = `fr "${result}"`; + if (style.variant === "sans-serif") result = `sf "${result}"`; + if (style.variant === "monospace") result = `tt "${result}"`; + if (style.variantStyle === "bold") result = `bb "${result}"`; + if (style.color) return `color({${style.color}})(${result})`; + return result; + } + + // src/public/mathlive-ssr.ts + function convertLatexToMarkup(text, options) { + var _a3; + const from = __spreadProps(__spreadValues({}, getDefaultContext()), { + renderPlaceholder: () => new Box(160, { maxFontSize: 1 }) + }); + if ((options == null ? void 0 : options.letterShapeStyle) && (options == null ? void 0 : options.letterShapeStyle) !== "auto") + from.letterShapeStyle = options.letterShapeStyle; + if (options == null ? void 0 : options.macros) { + const macros = normalizeMacroDictionary(options == null ? void 0 : options.macros); + from.getMacro = (token) => getMacroDefinition(token, macros); + } + if (options == null ? void 0 : options.registers) + from.registers = __spreadValues(__spreadValues({}, from.registers), options.registers); + const defaultMode = (_a3 = options == null ? void 0 : options.defaultMode) != null ? _a3 : "math"; + let parseMode = "math"; + let mathstyle = "displaystyle"; + if (defaultMode === "inline-math") mathstyle = "textstyle"; + else if (defaultMode === "math") mathstyle = "displaystyle"; + else if (defaultMode === "text" || defaultMode === "free-text") { + mathstyle = "textstyle"; + parseMode = "text"; + } + const effectiveContext = new Context({ from }); + const root = new Atom({ + type: "root", + mode: parseMode, + body: parseLatex(text, { context: effectiveContext, parseMode, mathstyle }) + }); + const box = root.render(effectiveContext); + if (!box) return ""; + coalesce(applyInterBoxSpacing(box, effectiveContext)); + const struts = makeStruts(box, { classes: "ML__latex" }); + return struts.toMarkup(); + } + function validateLatex2(s, options) { + const context = __spreadValues({}, getDefaultContext()); + if (options == null ? void 0 : options.macros) { + const macros = normalizeMacroDictionary(options.macros); + context.getMacro = (token) => getMacroDefinition(token, macros); + } + return validateLatex(s, { context }); + } + function convertLatexToMathMl(latex, options = {}) { + return toMathML( + parseLatex(latex, { + parseMode: "math", + args: () => "", + // Prevent #0 arguments to be replaced with placeholder (default behavior) + mathstyle: "displaystyle" + }), + options + ); + } + function convertLatexToSpeakableText(latex) { + const atoms = parseLatex(latex, { + parseMode: "math", + mathstyle: "displaystyle" + }); + return atomToSpeakableText(atoms); + } + var gComputeEngine; + function convertMathJsonToLatex(json) { + var _a3, _b3; + if (!gComputeEngine) { + const ComputeEngineCtor = (_a3 = globalThis[Symbol.for("io.cortexjs.compute-engine")]) == null ? void 0 : _a3.ComputeEngine; + if (ComputeEngineCtor) gComputeEngine = new ComputeEngineCtor(); + else { + console.error( + `MathLive {{SDK_VERSION}}: The CortexJS Compute Engine library is not available. + + Load the library, for example with: + + import "https://esm.run/@cortex-js/compute-engine"` + ); + } + } + return (_b3 = gComputeEngine == null ? void 0 : gComputeEngine.box(json).latex) != null ? _b3 : ""; + } + function convertLatexToAsciiMath(latex, parseMode = "math") { + return atomToAsciiMath( + new Atom({ + type: "root", + body: parseLatex(latex, { parseMode }) + }) + ); + } + function convertAsciiMathToLatex(ascii) { + return parseMathString(ascii, { format: "ascii-math" })[1]; + } + + // src/ui/colors/utils.ts + function asRgb(color) { + if (typeof color === "string") { + const parsed = parseHex2(color); + if (!parsed) throw new Error(`Invalid color: ${color}`); + return parsed; + } + if ("C" in color) return oklchToRgb(color); + if ("a" in color) return oklabToRgb(color); + return color; + } + function clampByte2(v) { + if (v < 0) return 0; + if (v > 255) return 255; + return Math.round(v); + } + function parseHex2(hex) { + if (!hex) return void 0; + if (hex[0] !== "#") return void 0; + hex = hex.slice(1); + let result; + if (hex.length <= 4) { + result = { + r: parseInt(hex[0] + hex[0], 16), + g: parseInt(hex[1] + hex[1], 16), + b: parseInt(hex[2] + hex[2], 16) + }; + if (hex.length === 4) result.a = parseInt(hex[3] + hex[3], 16) / 255; + } else { + result = { + r: parseInt(hex[0] + hex[1], 16), + g: parseInt(hex[2] + hex[3], 16), + b: parseInt(hex[4] + hex[5], 16) + }; + if (hex.length === 8) result.a = parseInt(hex[6] + hex[7], 16) / 255; + } + if (typeof (result == null ? void 0 : result.a) === "undefined") result.a = 1; + return result; + } + function oklchToOklab(_) { + const [L, C, H] = [_.L, _.C, _.H]; + const hRadians = H * Math.PI / 180; + const result = { + L, + a: C * Math.cos(hRadians), + b: C * Math.sin(hRadians) + }; + if (_.alpha !== void 0) result.alpha = _.alpha; + return result; + } + function oklabToOklch(_) { + const [L, a, b] = [_.L, _.a, _.b]; + const C = Math.sqrt(a * a + b * b); + const hRadians = Math.atan2(b, a); + const H = hRadians * 180 / Math.PI; + const result = { L, C, H }; + if (_.alpha !== void 0) result.alpha = _.alpha; + return result; + } + function oklabToUnclippedRgb(_) { + const [l, a, b] = [_.L, _.a, _.b]; + const L = Math.pow( + 0.9999999984505198 * l + 0.39633779217376786 * a + 0.2158037580607588 * b, + 3 + ); + const M = Math.pow( + 1.00000000888176 * l - 0.10556134232365635 * a - 0.0638541747717059 * b, + 3 + ); + const S2 = Math.pow( + l * 1.000000054672411 - 0.0894841820949657 * a - 1.2914855378640917 * b, + 3 + ); + const r = 4.076741661347994 * L - 3.307711590408193 * M + 0.230969928729428 * S2; + const g = -1.2684380040921763 * L + 2.6097574006633715 * M - 0.3413193963102197 * S2; + const bl = -0.004196086541837188 * L - 0.7034186144594493 * M + 1.7076147009309444 * S2; + const conv = (n) => { + const abs = Math.abs(n); + if (abs <= 31308e-7) return n * 12.92; + return (Math.sign(n) || 1) * (1.055 * Math.pow(abs, 1 / 2.4) - 0.055); + }; + return [conv(r), conv(g), conv(bl)]; + } + function inGamut(rgb) { + const [r, g, b] = rgb; + return r >= 0 && r <= 1 && g >= 0 && g <= 1 && b >= 0 && b <= 1; + } + function clampRgb(rgb, alpha) { + let [r, g, b] = rgb; + r = clampByte2(r * 255); + g = clampByte2(g * 255); + b = clampByte2(b * 255); + return alpha !== void 0 ? { r, g, b, alpha } : { r, g, b }; + } + function oklabToRgb(color) { + let [r, g, b] = oklabToUnclippedRgb(color); + if (inGamut([r, g, b])) return clampRgb([r, g, b], color.alpha); + const oklch = oklabToOklch(color); + oklch.C = 0; + [r, g, b] = oklabToUnclippedRgb(oklchToOklab(oklch)); + if (!inGamut([r, g, b])) return clampRgb([r, g, b], color.alpha); + let low = 0; + let high = color.L; + let mid = (low + high) / 2; + oklch.C = mid; + const resolution = 0.36 / Math.pow(2, 12); + while (high - low > resolution) { + mid = (low + high) / 2; + oklch.C = mid; + [r, g, b] = oklabToUnclippedRgb(oklchToOklab(oklch)); + if (inGamut([r, g, b])) low = mid; + else high = mid; + } + return clampRgb([r, g, b], color.alpha); + } + function oklchToRgb(_) { + return oklabToRgb(oklchToOklab(_)); + } + + // src/ui/colors/contrast.ts + function apca(bgColor, fgColor) { + const bgRgb = asRgb(bgColor); + const fgRgb = asRgb(fgColor); + const normBG = 0.56; + const normTXT = 0.57; + const revTXT = 0.62; + const revBG = 0.65; + const blkThrs = 0.022; + const blkClmp = 1.414; + const loClip = 0.1; + const deltaYmin = 5e-4; + const scaleBoW = 1.14; + const loBoWoffset = 0.027; + const scaleWoB = 1.14; + const loWoBoffset = 0.027; + function fclamp(Y) { + return Y >= blkThrs ? Y : Y + (blkThrs - Y) ** blkClmp; + } + function linearize(val) { + const sign = val < 0 ? -1 : 1; + return sign * Math.pow(Math.abs(val), 2.4); + } + const Yfg = fclamp( + linearize(fgRgb.r / 255) * 0.2126729 + linearize(fgRgb.g / 255) * 0.7151522 + linearize(fgRgb.b / 255) * 0.072175 + ); + const Ybg = fclamp( + linearize(bgRgb.r / 255) * 0.2126729 + linearize(bgRgb.g / 255) * 0.7151522 + linearize(bgRgb.b / 255) * 0.072175 + ); + let S2, C, Sapc; + if (Math.abs(Ybg - Yfg) < deltaYmin) C = 0; + else { + if (Ybg > Yfg) { + S2 = Ybg ** normBG - Yfg ** normTXT; + C = S2 * scaleBoW; + } else { + S2 = Ybg ** revBG - Yfg ** revTXT; + C = S2 * scaleWoB; + } + } + if (Math.abs(C) < loClip) Sapc = 0; + else if (C > 0) Sapc = C - loWoBoffset; + else Sapc = C + loBoWoffset; + return Sapc * 100; + } + function contrast(bgColor, dark, light) { + light != null ? light : light = "#fff"; + dark != null ? dark : dark = "#000"; + const lightContrast = apca(bgColor, light); + const darkContrast = apca(bgColor, dark); + return Math.abs(lightContrast) > Math.abs(darkContrast) ? light : dark; + } + + // src/ui/colors/css.ts + function asHexColor(_) { + const rgb = asRgb(_); + let hexString = ((1 << 24) + (clampByte2(rgb.r) << 16) + (clampByte2(rgb.g) << 8) + clampByte2(rgb.b)).toString(16).slice(1); + if (rgb.alpha !== void 0 && rgb.alpha < 1) + hexString += ("00" + Math.round(rgb.alpha * 255).toString(16)).slice(-2); + if (hexString[0] === hexString[1] && hexString[2] === hexString[3] && hexString[4] === hexString[5] && hexString[6] === hexString[7]) { + hexString = hexString[0] + hexString[2] + hexString[4] + (rgb.alpha !== void 0 && rgb.alpha < 1 ? hexString[6] : ""); + } + return "#" + hexString; + } + + // src/editor/default-menu.ts + function getSelectionPlainString(mf) { + const atoms = getSelectionAtoms(mf); + let result = ""; + for (const atom of atoms) { + if (typeof atom.value !== "string") return ""; + result += atom.value; + } + return result; + } + function getSelectionAtoms(mf) { + const model = mf.model; + const ranges = model.selection.ranges; + if (ranges.length !== 1) return []; + let atoms = mf.model.getAtoms(ranges[0]); + if (atoms.length === 1 && atoms[0].isRoot) atoms = atoms[0].children; + return atoms.filter((x) => x.type !== "first"); + } + function validVariantAtom(mf, variant) { + const atoms = getSelectionAtoms(mf); + if (atoms.length !== 1) return false; + const repertoire = VARIANT_REPERTOIRE[variant]; + if (!repertoire) return false; + if (repertoire.test(atoms[0].value)) return true; + return false; + } + function getVariantSubmenu(mf) { + return [ + variantMenuItem(mf, "double-struck", "mathbb", "tooltip.blackboard"), + variantMenuItem(mf, "fraktur", "mathfrak", "tooltip.fraktur"), + variantMenuItem(mf, "calligraphic", "mathcal", "tooltip.caligraphic"), + variantStyleMenuItem(mf, "up", "mathrm", "tooltip.roman-upright"), + variantStyleMenuItem(mf, "bold", "bm", "tooltip.bold"), + variantStyleMenuItem(mf, "italic", "mathit", "tooltip.italic") + ]; + } + function getAccentSubmenu(mf) { + return [ + { + id: "accent-vec", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\vec{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length === 1, + onMenuSelect: () => mf.insert("\\vec{#@}", { selectionMode: "item" }) + }, + { + id: "accent-overrightarrow", + class: "ML__center-menu", + label: () => convertLatexToMarkup( + `\\overrightarrow{${getSelectionPlainString(mf)}}` + ), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\overrightarrow{#@}", { selectionMode: "item" }) + }, + { + id: "accent-overleftarrow", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\overleftarrow{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\overleftarrow{#@}", { selectionMode: "item" }) + }, + { + id: "accent-dot", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\dot{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length === 1, + onMenuSelect: () => mf.insert("\\dot{#@}", { selectionMode: "item" }) + }, + { + id: "accent-ddot", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\ddot{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length === 1, + onMenuSelect: () => mf.insert("\\ddot{#@}", { selectionMode: "item" }) + }, + { + id: "accent-bar", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\bar{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length === 1, + onMenuSelect: () => mf.insert("\\bar{#@}", { selectionMode: "item" }) + }, + { + id: "accent-overline", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\overline{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\overline{#@}", { selectionMode: "item" }) + }, + { + id: "accent-overgroup", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\overgroup{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\overgroup{#@}", { selectionMode: "item" }) + }, + { + id: "accent-overbrace", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\overbrace{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\overbrace{#@}", { selectionMode: "item" }) + }, + { + id: "accent-underline", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\underline{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\underline{#@}", { selectionMode: "item" }) + }, + { + id: "accent-undergroup", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\undergroup{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\undergroup{#@}", { selectionMode: "item" }) + }, + { + id: "accent-underbrace", + class: "ML__center-menu", + label: () => convertLatexToMarkup(`\\underbrace{${getSelectionPlainString(mf)}}`), + visible: () => getSelectionPlainString(mf).length > 0, + onMenuSelect: () => mf.insert("\\underbrace{#@}", { selectionMode: "item" }) + } + ]; + } + function getDecorationSubmenu(mf) { + return [ + // { + // label: () => convertLatexToMarkup(`\\cancel{${getSelection(mf)}}`), + // // visible: () => getSelection(mf).length > 0, + // onMenuSelect: () => mf.insert('\\cancel{#@}', { selectionMode: 'item' }), + // }, + { + id: "decoration-boxed", + label: () => convertLatexToMarkup(`\\boxed{${mf.getValue(mf.model.selection)}}}`), + // visible: () => getSelection(mf).length > 0, + onMenuSelect: () => mf.insert("\\boxed{#@}", { selectionMode: "item" }) + }, + { + id: "decoration-red-box", + label: () => convertLatexToMarkup( + `\\bbox[5px, border: 2px solid red]{${mf.getValue( + mf.model.selection + )}}` + ), + // visible: () => getSelection(mf).length > 0, + onMenuSelect: () => mf.insert("\\bbox[5px, border: 2px solid red]{#@}", { + selectionMode: "item" + }) + }, + { + id: "decoration-dashed-black-box", + label: () => convertLatexToMarkup( + `\\bbox[5px, border: 2px dashed black]{${mf.getValue( + mf.model.selection + )}}` + ), + // visible: () => getSelection(mf).length > 0, + onMenuSelect: () => mf.insert("\\bbox[5px, border: 2px dashed black]{#@}", { + selectionMode: "item" + }) + } + ]; + } + function getBackgroundColorSubmenu(mf) { + const result = []; + for (const color of Object.keys(BACKGROUND_COLORS)) { + result.push({ + id: `background-color-${color}`, + class: (asHexColor(contrast(BACKGROUND_COLORS[color])) === "#000" ? "dark-contrast" : "light-contrast") + " menu-swatch", + label: ``, + ariaLabel: () => { + var _a3; + return (_a3 = localize(color)) != null ? _a3 : color; + }, + checked: () => { + var _a3; + return (_a3 = { some: "mixed", all: true }[mf.queryStyle({ backgroundColor: color })]) != null ? _a3 : false; + }, + onMenuSelect: () => mf.applyStyle({ backgroundColor: color }, { operation: "toggle" }) + }); + } + return result; + } + function getColorSubmenu(mf) { + const result = []; + for (const color of Object.keys(FOREGROUND_COLORS)) { + result.push({ + id: `color-${color}`, + class: (contrast(FOREGROUND_COLORS[color]) === "#000" ? "dark-contrast" : "light-contrast") + " menu-swatch", + label: ``, + ariaLabel: () => { + var _a3; + return (_a3 = localize(color)) != null ? _a3 : color; + }, + checked: () => { + var _a3; + return (_a3 = { some: "mixed", all: true }[mf.queryStyle({ color })]) != null ? _a3 : false; + }, + onMenuSelect: () => mf.applyStyle({ color }, { operation: "toggle" }) + }); + } + return result; + } + var InsertMatrixMenuItem = class extends _MenuItemState { + constructor(decl, parent, row, col) { + super(decl, parent); + this.row = row; + this.col = col; + } + set active(value) { + const cells = this.parentMenu.children; + if (value) { + for (const cell of cells) { + cell.element.classList.toggle( + "active", + cell.row <= this.row && cell.col <= this.col + ); + } + } else for (const cell of cells) cell.element.classList.remove("active"); + } + }; + function getInsertMatrixSubmenu(mf) { + const result = []; + for (let row = 1; row <= 5; row++) { + for (let col = 1; col <= 5; col++) { + result.push({ + id: `insert-matrix-${row}x${col}`, + onCreate: (decl, parent) => new InsertMatrixMenuItem(decl, parent, row, col), + label: `\u2610`, + tooltip: () => localize("tooltip.row-by-col", row, col), + data: { row, col }, + onMenuSelect: () => { + mf.insert( + `\\begin{pmatrix}${Array(row).fill(Array(col).fill("#?").join(" & ")).join("\\\\")}\\end{pmatrix}`, + { + selectionMode: "item" + } + ); + } + }); + } + } + return result; + } + function getDefaultMenuItems(mf) { + return [ + // { + // label: 'Show Virtual Keyboard', + // onMenuSelect: () => window.mathVirtualKeyboard.show({ animate: true }), + // visible: () => window.mathVirtualKeyboard.visible === false, + // }, + // { + // label: 'Hide Virtual Keyboard', + // onMenuSelect: () => window.mathVirtualKeyboard.hide({ animate: true }), + // visible: () => window.mathVirtualKeyboard.visible === true, + // }, + { + label: () => localize("menu.array.add row above"), + id: "add-row-above", + onMenuSelect: () => mf.executeCommand("addRowBefore"), + keyboardShortcut: "shift+alt+[Return]", + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [minRows, _minCols] = minShape(mf); + const [maxRows, _maxCols] = maxShape(mf); + return minRows !== maxRows; + } + }, + { + label: () => localize("menu.array.add row below"), + id: "add-row-below", + onMenuSelect: () => mf.executeCommand("addRowAfter"), + keyboardShortcut: "alt+[Return]", + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [minRows, _minCols] = minShape(mf); + const [maxRows, _maxCols] = maxShape(mf); + return minRows !== maxRows; + } + }, + { + label: () => localize("menu.array.add column before"), + id: "add-column-before", + onMenuSelect: () => mf.executeCommand("addColumnBefore"), + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [_minRows, minCols] = minShape(mf); + const [_maxRows, maxCols] = maxShape(mf); + return minCols !== maxCols; + }, + keyboardShortcut: "shift+alt+[Tab]", + enabled: () => { + const array = mf.model.parentEnvironment; + if (!array) return false; + const [rows, _cols] = shape(mf); + return rows < array.maxColumns; + } + }, + { + label: () => localize("menu.array.add column after"), + id: "add-column-after", + onMenuSelect: () => mf.executeCommand("addColumnAfter"), + keyboardShortcut: "alt+[Tab]", + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [_minRows, minCols] = minShape(mf); + const [_maxRows, maxCols] = maxShape(mf); + return minCols !== maxCols; + } + }, + { + type: "divider" + }, + { + label: () => localize("menu.array.delete row"), + id: "delete-row", + onMenuSelect: () => mf.executeCommand("removeRow"), + enabled: () => { + const [minRows, _minCols] = minShape(mf); + const [rows, _cols] = shape(mf); + return rows > minRows; + }, + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [minRows, _minCols] = minShape(mf); + const [maxRows, _maxCols] = maxShape(mf); + return minRows !== maxRows; + } + }, + { + label: () => localize("menu.array.delete column"), + id: "delete-column", + onMenuSelect: () => mf.executeCommand("removeColumn"), + enabled: () => { + const [_minRows, minCols] = minShape(mf); + const [_rows, cols] = shape(mf); + return cols > minCols; + }, + visible: () => { + if (!mf.isSelectionEditable || !inMatrix(mf)) return false; + const [_minRows, minCols] = minShape(mf); + const [_maxRows, maxCols] = maxShape(mf); + return minCols !== maxCols; + } + }, + { + type: "divider" + }, + { + label: () => localize("menu.borders"), + visible: () => (isMatrixSelected(mf) || inMatrix(mf)) && mf.isSelectionEditable, + submenu: [ + { + label: " \u22F1 ", + id: "environment-no-border", + onMenuSelect: () => performSetEnvironment(mf, "matrix") + }, + { + label: "(\u22F1)", + id: "environment-parentheses", + onMenuSelect: () => performSetEnvironment(mf, "pmatrix") + }, + { + label: "[\u22F1]", + id: "environment-brackets", + onMenuSelect: () => performSetEnvironment(mf, "bmatrix") + }, + { + label: "|\u22F1|", + id: "environment-bar", + onMenuSelect: () => performSetEnvironment(mf, "vmatrix") + }, + { + label: "{\u22F1}", + id: "environment-braces", + onMenuSelect: () => performSetEnvironment(mf, "Bmatrix") + } + ], + submenuClass: "border-submenu" + }, + { + type: "divider" + }, + { + label: () => localize("menu.insert matrix"), + id: "insert-matrix", + visible: () => mf.isSelectionEditable, + submenu: getInsertMatrixSubmenu(mf), + submenuClass: "insert-matrix-submenu", + columnCount: 5 + }, + { + type: "divider" + }, + { + label: () => localize("menu.insert"), + id: "insert", + submenu: insertMenu(mf) + }, + { + type: "divider" + }, + { + label: () => localize("menu.mode"), + id: "mode", + visible: () => mf.isSelectionEditable && mf.model.selectionIsCollapsed, + submenu: [ + { + label: () => localize("menu.mode-math"), + id: "mode-math", + onMenuSelect: () => { + complete(mf, "accept-all"); + mf.executeCommand(["switchMode", "math"]); + }, + checked: () => mf.model.mode === "math" + }, + { + label: () => localize("menu.mode-text"), + id: "mode-text", + onMenuSelect: () => { + complete(mf, "accept-all"); + mf.executeCommand(["switchMode", "text"]); + }, + checked: () => mf.model.mode === "text" + }, + { + label: () => localize("menu.mode-latex"), + id: "mode-latex", + onMenuSelect: () => mf.executeCommand(["switchMode", "latex"]), + checked: () => mf.model.mode === "latex" + } + ] + }, + { + type: "divider" + }, + { + label: () => localize("menu.font-style"), + id: "variant", + visible: () => mf.isSelectionEditable, + submenu: getVariantSubmenu(mf), + submenuClass: "variant-submenu" + }, + { + label: () => localize("menu.color"), + id: "color", + visible: () => mf.isSelectionEditable, + submenu: getColorSubmenu(mf), + columnCount: 4, + submenuClass: "swatches-submenu" + }, + { + label: () => localize("menu.background-color"), + id: "background-color", + visible: () => mf.isSelectionEditable, + submenu: getBackgroundColorSubmenu(mf), + columnCount: 4, + submenuClass: "swatches-submenu" + }, + { + label: () => localize("menu.accent"), + id: "accent", + visible: () => mf.isSelectionEditable, + submenu: getAccentSubmenu(mf), + submenuClass: "variant-submenu" + }, + { + label: () => localize("menu.decoration"), + id: "decoration", + visible: () => mf.isSelectionEditable && getSelectionPlainString(mf).length > 0, + submenu: getDecorationSubmenu(mf), + submenuClass: "variant-submenu" + }, + { + type: "divider" + }, + { + label: () => localize("menu.evaluate"), + id: "ce-evaluate", + visible: () => mf.isSelectionEditable && globalThis.MathfieldElement.computeEngine !== null, + onMenuSelect: () => { + const latex = evaluate(mf); + if (!latex) { + mf.model.announce("plonk"); + return; + } + if (mf.model.selectionIsCollapsed) { + mf.model.position = mf.model.lastOffset; + mf.insert(`=${latex}`, { + insertionMode: "insertAfter", + selectionMode: "item" + }); + } else { + mf.insert(latex, { + insertionMode: "replaceSelection", + selectionMode: "item" + }); + } + } + }, + { + label: () => localize("menu.simplify"), + id: "ce-simplify", + visible: () => mf.isSelectionEditable && globalThis.MathfieldElement.computeEngine !== null, + onMenuSelect: () => { + var _a3, _b3; + if (mf.model.selectionIsCollapsed) { + const result = (_a3 = mf.expression) == null ? void 0 : _a3.simplify(); + mf.model.position = mf.model.lastOffset; + if (!result) { + mf.model.announce("plonk"); + return; + } + mf.insert(`=${result.latex}`, { + insertionMode: "insertAfter", + selectionMode: "item" + }); + } else { + const result = (_b3 = globalThis.MathfieldElement.computeEngine) == null ? void 0 : _b3.parse(mf.getValue(mf.model.selection)).simplify(); + if (!result) { + mf.model.announce("plonk"); + return; + } + mf.insert(result.latex, { + insertionMode: "replaceSelection", + selectionMode: "item" + }); + } + } + }, + { + label: () => { + var _a3; + const ce = globalThis.MathfieldElement.computeEngine; + if (ce === null) return ""; + const unknown = (_a3 = mf.expression) == null ? void 0 : _a3.unknowns[0]; + if (unknown) { + const latex = ce.box(unknown).latex; + return localize("menu.solve-for", convertLatexToMarkup(latex)); + } + return localize("menu.solve"); + }, + id: "ce-solve", + visible: () => { + var _a3; + return mf.isSelectionEditable && globalThis.MathfieldElement.computeEngine !== null && ((_a3 = mf.expression) == null ? void 0 : _a3.unknowns.length) === 1 && mf.expression.unknowns[0] !== "Nothing"; + }, + onMenuSelect: () => { + const expr = mf.expression; + const unknown = expr == null ? void 0 : expr.unknowns[0]; + const solutions = expr.solve(unknown); + const results = Array.isArray(solutions) ? solutions.map( + (x) => { + var _a3; + return (_a3 = x.simplify().latex) != null ? _a3 : ""; + } + ) : null; + if (!results) { + mf.model.announce("plonk"); + return; + } + mf.insert( + `${unknown}=${results.length === 1 ? results[0] : "\\left\\lbrace" + (results == null ? void 0 : results.join(", ")) + "\\right\\rbrace"}`, + { + insertionMode: "replaceAll", + selectionMode: "item" + } + ); + } + }, + { + type: "divider" + }, + { + label: () => localize("menu.cut"), + id: "cut", + onMenuSelect: () => mf.executeCommand("cutToClipboard"), + visible: () => !mf.options.readOnly && mf.isSelectionEditable, + keyboardShortcut: "meta+X" + }, + // { + // label: 'Copy', + // onMenuSelect: () => mf.executeCommand('copyToClipboard'), + // }, + { + label: () => localize("menu.copy"), + id: "copy", + submenu: [ + { + label: () => localize("menu.copy-as-latex"), + id: "copy-latex", + onMenuSelect: () => ModeEditor.copyToClipboard(mf, "latex"), + keyboardShortcut: "meta+C" + }, + { + label: () => localize("menu.copy-as-typst"), + id: "copy-latex", + onMenuSelect: () => ModeEditor.copyToClipboard(mf, "typst") + }, + { + label: () => localize("menu.copy-as-ascii-math"), + id: "copy-ascii-math", + onMenuSelect: () => ModeEditor.copyToClipboard(mf, "ascii-math") + }, + { + label: () => localize("menu.copy-as-mathml"), + id: "copy-math-ml", + onMenuSelect: () => ModeEditor.copyToClipboard(mf, "math-ml") + } + ] + }, + { + label: () => localize("menu.paste"), + id: "paste", + onMenuSelect: () => mf.executeCommand("pasteFromClipboard"), + visible: () => mf.hasEditableContent, + keyboardShortcut: "meta+V" + }, + { + label: () => localize("menu.select-all"), + id: "select-all", + keyboardShortcut: "meta+A", + onMenuSelect: () => mf.executeCommand("selectAll") + } + ]; + } + function inMatrix(mf) { + var _a3, _b3; + const env = (_b3 = (_a3 = mf.model.parentEnvironment) == null ? void 0 : _a3.environmentName) != null ? _b3 : ""; + return [ + "array", + "matrix", + "pmatrix", + "bmatrix", + "vmatrix", + "Bmatrix", + "cases", + "dcases", + "rcases" + ].includes(env); + } + function isMatrixSelected(mf) { + const cursor = mf.model.at(mf.model.position); + if (cursor.type !== "array") return false; + const env = cursor.environmentName; + return ["matrix", "pmatrix", "bmatrix", "vmatrix", "Bmatrix"].includes(env); + } + function shape(mf) { + var _a3; + const rows = (_a3 = mf.model.parentEnvironment) == null ? void 0 : _a3.rows; + if (!rows) return [0, 0]; + return [rows.length, rows.reduce((acc, col) => Math.max(acc, col.length), 0)]; + } + function minShape(mf) { + const array = mf.model.parentEnvironment; + if (!array) return [0, 0]; + return [array.minRows, array.minColumns]; + } + function maxShape(mf) { + const array = mf.model.parentEnvironment; + if (!array) return [0, 0]; + return [array.maxRows, array.maxColumns]; + } + function performSetEnvironment(mf, env) { + removeSuggestion(mf); + mf.flushInlineShortcutBuffer(); + setEnvironment(mf.model, env); + requestUpdate(mf); + } + function evaluate(mf) { + var _a3, _b3; + let expr; + if (mf.model.selectionIsCollapsed) { + expr = (_a3 = globalThis.MathfieldElement.computeEngine) == null ? void 0 : _a3.parse(mf.getValue(), { + canonical: false + }); + } else { + expr = (_b3 = globalThis.MathfieldElement.computeEngine) == null ? void 0 : _b3.parse( + mf.getValue(mf.model.selection), + { canonical: false } + ); + } + if (!expr) return ""; + let result = expr.evaluate(); + if (result.isSame(expr)) result = expr.N(); + return result.latex; + } + function variantMenuItem(mf, variant, command, tooltip) { + return { + id: `variant-${variant}`, + label: () => { + var _a3; + const textSelection = getSelectionPlainString(mf); + if (textSelection.length < 12) { + return convertLatexToMarkup( + `\\${command}{${getSelectionPlainString(mf)}}` + ); + } + return (_a3 = localize(tooltip)) != null ? _a3 : tooltip; + }, + class: "ML__xl", + tooltip: () => { + var _a3; + return (_a3 = localize(tooltip)) != null ? _a3 : tooltip; + }, + visible: () => validVariantAtom(mf, variant), + checked: () => { + var _a3; + return (_a3 = { some: "mixed", all: true }[mf.queryStyle({ variant })]) != null ? _a3 : false; + }, + onMenuSelect: () => mf.applyStyle({ variant }, { operation: "toggle" }) + }; + } + function variantStyleMenuItem(mf, variantStyle, command, tooltip) { + return { + id: `variant-style-${variantStyle}`, + label: () => { + var _a3; + const textSelection = getSelectionPlainString(mf); + if (textSelection.length > 0 && textSelection.length < 12) { + return convertLatexToMarkup( + `\\${command}{${getSelectionPlainString(mf)}}` + ); + } + return (_a3 = localize(tooltip)) != null ? _a3 : tooltip; + }, + class: () => { + const textSelection = getSelectionPlainString(mf); + if (textSelection.length > 0 && textSelection.length < 12) + return "ML__xl"; + return ""; + }, + tooltip: () => { + var _a3; + return (_a3 = localize(tooltip)) != null ? _a3 : tooltip; + }, + visible: true, + checked: () => { + var _a3; + return (_a3 = { some: "mixed", all: true }[mf.queryStyle({ variantStyle })]) != null ? _a3 : false; + }, + onMenuSelect: () => mf.applyStyle({ variantStyle }, { operation: "toggle" }) + }; + } + function insertMenu(mf) { + return [ + { + label: () => insertLabel("abs"), + id: "insert-abs", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("|#?|") + }, + { + label: () => insertLabel("nth-root"), + id: "insert-nth-root", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\sqrt[#?]{#?}") + }, + { + label: () => insertLabel("log-base"), + id: "insert-log-base", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\log_{#?}{#?}") + }, + { + type: "heading", + label: () => localize("menu.insert.heading-calculus") + }, + { + label: () => insertLabel("derivative"), + id: "insert-derivative", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\dfrac{\\mathrm{d}}{\\mathrm{d}x}#?\\bigm|_{x=#?}") + }, + { + label: () => insertLabel("nth-derivative"), + id: "insert-nth-derivative", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\dfrac{\\mathrm{d}^#?}{\\mathrm{d}x^#?}#?\\bigm|_{x=#?}") + }, + { + label: () => insertLabel("integral"), + id: "insert-integral", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\int_#?^#?#?\\,\\mathrm{d}#?") + }, + { + label: () => insertLabel("sum"), + id: "insert-sum", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\sum_#?^#?#?") + }, + { + label: () => insertLabel("product"), + id: "insert-product", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\prod_#?^#?#?") + }, + { + type: "heading", + label: () => localize("menu.insert.heading-complex-numbers") + }, + { + label: () => insertLabel("modulus"), + id: "insert-modulus", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\lvert#?\\rvert") + }, + { + label: () => insertLabel("argument"), + id: "insert-argument", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\arg(#?)") + }, + { + label: () => insertLabel("real-part"), + id: "insert-real-part", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\Re(#?)") + }, + { + label: () => insertLabel("imaginary-part"), + id: "insert-imaginary-part", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\Im(#?)") + }, + { + label: () => insertLabel("conjugate"), + id: "insert-conjugate", + visible: () => mf.isSelectionEditable, + onMenuSelect: () => mf.insert("\\overline{#?}") + } + ]; + } + function insertLabel(id) { + return ` ${convertLatexToMarkup(localize(`menu.insert.${id}-template`))}${localize(`menu.insert.${id}`)}`; + } + + // src/formats/atom-to-typst.ts + function typstTextRun(text, style) { + var _a3, _b3; + let result = `"${text.replace(/"/g, '\\"')}"`; + if (style.fontSeries === "b") result = `#strong[${result}]`; + if (style.fontShape === "it") result = `#emph[${result}]`; + if ((_a3 = style.textDecoration) == null ? void 0 : _a3.includes("underline")) + result = `#underline[${result}]`; + if ((_b3 = style.textDecoration) == null ? void 0 : _b3.includes("line-through")) + result = `#strike[${result}]`; + return result; + } + var IDENTIFIERS2 = { + "\\ne": "!=", + "\\neq": "!=", + "\u2212": "-", + // MINUS SIGN + "-": "-", + "\\alpha": "alpha", + "\\beta": "beta", + "\\gamma": "gamma", + "\\delta": "delta", + "\\epsilon": "epsilon.alt", + "\\varepsilon": "epsilon", + "\\zeta": "zeta", + "\\eta": "eta", + "\\theta": "theta.alt", + "\\vartheta": "theta", + "\\iota": "iota", + "\\kappa": "kappa", + "\\lambda": "lambda", + "\\mu": "mu", + "\\nu": "nu", + "\\xi": "xi", + "\\pi": "pi", + "\\rho": "rho", + "\\sigma": "sigma", + "\\tau": "tau", + "\\upsilon": "upsilon", + "\\phi": "phi.alt", + "\\varphi": "phi", + "\\chi": "chi", + "\\psi": "psi", + "\\omega": "omega", + "\\Gamma": "Gamma", + "\\Delta": "Delta", + "\\Theta": "Theta", + "\\Lambda": "Lambda", + "\\Xi": "Xi", + "\\Pi": "Pi", + "\\Sigma": "Sigma", + "\\Phi": "Phi", + "\\Psi": "Psi", + "\\Omega": "Omega", + "\\exponentialE": "e", + "\\imaginaryI": "i", + "\\imaginaryJ": "j", + "\\!": " #h(-1em/6) ", + "\\,": " thin ", + "\\:": " med ", + "\\>": " med ", + "\\;": " thick ", + "\\enskip": "space.en", + "\\enspace": "space.en", + "\\qquad": "space.quad space.quad", + "\\quad": "space.quad", + "\\infty": "infinity", + "\\R": "RR", + "\\mathbb{R}": "RR", + "\\N": "NN", + "\\mathbb{N}": "NN", + "\\Z": "ZZ", + "\\mathbb{Z}": "ZZ", + "\\Q": "QQ", + "\\mathbb{Q}": "QQ", + "\\C": "CC", + "\\mathbb{C}": "CC", + "\\emptyset": "emptyset", + "\\varnothing": "nothing", + "\\varDelta": "Delta", + "\\varTheta": "Theta", + "\\varLambda": "Lambda", + "\\varXi": "Xi", + "\\varPi": "Pi", + "\\varSigma": "Sigma", + "\\varUpsilon": "Upsilon", + "\\varPhi": "Phi", + "\\varPsi": "Psi", + "\\varOmega": "Omega", + "\\vert": " | ", + "\\Vert": " || ", + "\\mid": " divides ", + "\\lbrack": " bracket.l ", + "\\rbrack": " bracket.r ", + "\\lbrace": " brace.l ", + "\\rbrace": " brace.r ", + "\\lparen": " paren.l ", + "\\rparen": " paren.r ", + "\\langle": " angle.l ", + "\\rangle": " angle.r ", + "\\differentialD": " dif ", + "\\diamond": " diamond.stroked.small ", + "\\square": " square.stroked.small ", + "\\lceil": " ceil.l ", + "\\rceil": " ceil.r ", + "\\lfloor": " floor.l ", + "\\rfloor": " floor.r ", + "\\aleph": " aleph ", + "\\bet": " bet ", + "\\gimel": " gimel ", + "\\dalet": " dalet ", + "\\mod": " mod ", + "\\equiv": " equiv ", + "\\subset": " subset ", + "\\supset": " supset ", + "\\subseteq": " subset.eq ", + "\\supseteq": " supset.eq ", + "\\subsetneq": " subset.neq ", + "\\supsetneq": " supset.neq ", + "\\supsetneqq": " supset.neq ", + "\\nsubset": " subset.not ", + "\\nsupset": " supset.not ", + "\\nsubseteq": " subset.eq.not ", + "\\nsupseteq": " supset.eq.not ", + "\\approx": " approx ", + "\\uparrow": " arrow.t ", + "\\downarrow": " arrow.b ", + "\\rightarrow": " arrow.r ", + "\\leftarrow": " arrow.l ", + "\\longmapsto": " mapsto.long ", + "\\longmapsfrom": " arrow.l.bar.long ", + "/": "\\/", + "&": "&" + }; + var FENCES3 = { + "[": " bracket.l ", + "]": " bracket.r ", + "{": " brace.l ", + "}": " brace.r ", + "(": " paren.l ", + ")": " paren.r ", + "<": " angle.l ", + ">": " angle.r ", + ".": "" + }; + var REVERSE_FENCES = { + " bracket.l ": "[", + " bracket.r ": "]", + " brace.l ": "{", + " brace.r ": "}", + " paren.l ": "(", + " paren.r ": ")", + " angle.l ": " angle.l ", + " angle.r ": " angle.r " + }; + var OPERATORS2 = { + "\\pm": "plus.minus", + "\\colon": " : ", + "\\sum": " sum ", + "\\prod": " product ", + "\\bigcap": " inter.big ", + "\\bigcup": " union.big ", + "\\int": " integral ", + "\\iint": " integral.double ", + "\\iiint": " integral.triple ", + "\\intop": " integral ", + "\\oint": " integral.cont ", + "\\oiint": " integral.surf ", + "\\oiiint": " integral.vol ", + "\\setminus": " without ", + "\\vdots": " without ", + "\\ddots": " dots.down ", + "\\ge": ">=", + "\\le": "<=", + "\\ne": "!=", + "\\neq": "!=", + "\\lt": "<", + "\\gt": ">", + "\\gets": "<-", + "\\to": "->", + "\\land": " and ", + "\\lor": " or ", + "\\lnot": " not ", + "\\forall": " forall ", + "\\exists": " exists ", + "\\in": " in ", + "\\notin": " in.not ", + "\\mapsto": "|->", + "\\implies": "==>", + "\\iff": "<==>", + "\\cdot": " dot.op ", + "\\ast": " * ", + "\\star": " star.op ", + "\\times": " times ", + "\\div": " div ", + "\\ltimes": " times.l ", + "\\rtimes": " times.r ", + "\\bowtie": " \u22C8 ", + "\\circ": " circle.stroked.small " + }; + var CUSTOM_FUNCTIONS = { + underarc: "underparen", + underparen: "underparen", + underbrace: "underbrace", + underline: "underline", + overarc: "overparen", + overparen: "overparen", + overbrace: "overbrace", + overline: "overline", + cancel: "cancel", + displaystyle: "display", + textstyle: "inline" + }; + var CUSTOM_CONVERTERS = { + longrightarrow: (atom) => `arrow.r.long^(${atomToTypst(atom.above)})`, + longleftarrow: (atom) => `arrow.l.long^(${atomToTypst(atom.above)})` + }; + function joinAsciiMath2(xs) { + let result = ""; + for (const x of xs) { + const last = result[result.length - 1]; + if (last !== void 0 && (/\d$/.test(last) && /^\d/.test(x) || /[a-zA-Z]$/.test(last) && /^[a-zA-Z]/.test(x))) + result += " "; + result += x; + } + return result; + } + function atomToTypst(atom) { + var _a3, _b3, _c2, _d2, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _A, _B, _C, _D, _E, _F, _G; + if (!atom) return ""; + if (isArray(atom)) { + if (atom.length === 0) return ""; + let first = 0; + while (((_a3 = atom[first]) == null ? void 0 : _a3.type) === "first") first += 1; + if (first > 0) return atomToTypst(atom.slice(first)); + if (atom[0].mode === "latex") + return atom.map((x) => atomToTypst(x)).join(""); + if (isTextMode(atom[0].mode)) { + let i2 = 0; + const runs = []; + while (((_b3 = atom[i2]) == null ? void 0 : _b3.type) !== "first" && isTextMode((_d2 = (_c2 = atom[i2]) == null ? void 0 : _c2.mode) != null ? _d2 : "")) { + const style = atom[i2].style; + const start = i2; + let text = ""; + while (isTextMode((_f = (_e = atom[i2]) == null ? void 0 : _e.mode) != null ? _f : "") && ((_g = atom[i2]) == null ? void 0 : _g.style.fontSeries) === style.fontSeries && ((_h = atom[i2]) == null ? void 0 : _h.style.fontShape) === style.fontShape && ((_i = atom[i2]) == null ? void 0 : _i.style.textDecoration) === style.textDecoration) { + text += atom[i2].body ? atomToTypst(atom[i2].body) : (_j = atom[i2].value) != null ? _j : ""; + i2 += 1; + } + if (i2 === start) i2 += 1; + runs.push(typstTextRun(text, style)); + } + return ` ${runs.join("")} ${atomToTypst(atom.slice(i2))}`; + } + let i = 0; + const result2 = []; + while (((_k = atom[i]) == null ? void 0 : _k.mode) === "math") { + let digits = ""; + while (((_l = atom[i]) == null ? void 0 : _l.type) === "mord" && /\d/.test(atom[i].value)) + digits += atom[i++].value; + if (digits) result2.push(digits); + else result2.push(atomToTypst(atom[i++])); + } + result2.push(atomToTypst(atom.slice(i))); + return joinAsciiMath2(result2); + } + if (isTextMode(atom.mode)) return typstTextRun((_m = atom.value) != null ? _m : "", atom.style); + let result = ""; + const { command } = atom; + let m; + if (command === "\\placeholder") return `"${atomToTypst(atom.body)}"`; + const latex = Atom.serialize([atom], { + expandMacro: true, + defaultMode: "math" + }); + switch (atom.type) { + case "accent": + const accent = { + "\\vec": "arrow", + "\\dot": "dot", + "\\ddot": "dot.double", + "\\bar": "overline", + "\\hat": "hat", + "\\acute": "acute", + "\\grave": "grave", + "\\tilde": "tilde", + "\\breve": "breve", + "\\check": "caron" + }[command]; + result = `${accent != null ? accent : ""}(${atomToTypst(atom.body)}) `; + break; + case "first": + return ""; + case "latexgroup": + return atom.body.map((x) => x.value).join(""); + case "group": + case "root": + result = (_n = IDENTIFIERS2[command]) != null ? _n : atomToTypst(atom.body); + break; + case "genfrac": + { + const genfracAtom = atom; + if (genfracAtom.hasBarLine) { + result += "("; + result += atomToTypst(genfracAtom.above); + result += ")/("; + result += atomToTypst(genfracAtom.below); + result += ")"; + } else { + result += `binom(${atomToTypst(genfracAtom.above)}, ${atomToTypst(genfracAtom.below)})`; + } + } + break; + case "surd": + if (atom.hasEmptyBranch("above")) + result += `sqrt(${atomToTypst(atom.body)})`; + else + result += `root(${atomToTypst(atom.above)}, ${atomToTypst(atom.body)})`; + break; + case "latex": + result = atom.value; + break; + case "leftright": + { + const leftrightAtom = atom; + let lDelim = leftrightAtom.leftDelim; + if (lDelim && IDENTIFIERS2[lDelim]) lDelim = IDENTIFIERS2[lDelim]; + let rDelim = leftrightAtom.matchingRightDelim(); + if (rDelim && IDENTIFIERS2[rDelim]) rDelim = IDENTIFIERS2[rDelim]; + if (lDelim) lDelim = (_o = FENCES3[lDelim]) != null ? _o : lDelim; + if (rDelim) rDelim = (_p = FENCES3[rDelim]) != null ? _p : rDelim; + if (lDelim && rDelim) { + result = `lr(${(_q = REVERSE_FENCES[lDelim]) != null ? _q : lDelim}${atomToTypst(leftrightAtom.body)}${(_r = REVERSE_FENCES[rDelim]) != null ? _r : rDelim})`; + } else + result = `lr(${lDelim}${atomToTypst(leftrightAtom.body)}${rDelim})`; + } + break; + case "sizeddelim": + case "delim": + result = atom.value; + break; + case "overlap": + break; + case "mord": + if (IDENTIFIERS2[latex]) return IDENTIFIERS2[latex]; + result = (_u = (_t = (_s = IDENTIFIERS2[command]) != null ? _s : command) != null ? _t : command) != null ? _u : typeof atom.value === "string" ? atom.value : ""; + if (result.startsWith("\\")) result += " "; + m = command ? command.match(/{?\\char"([\dabcdefABCDEF]+)}?/) : null; + if (m) { + result = String.fromCodePoint(Number.parseInt("0x" + m[1])); + } else if (result.length > 0 && result.startsWith("\\")) { + result = typeof atom.value === "string" ? atom.value.charAt(0) : atom.command; + } + result = typstStyle(result, atom.style); + result = ` ${result} `; + break; + case "mbin": + case "mrel": + case "minner": + result = (_x = (_w = (_v = IDENTIFIERS2[latex]) != null ? _v : IDENTIFIERS2[command]) != null ? _w : OPERATORS2[command]) != null ? _x : atom.value; + break; + case "mopen": + case "mclose": + result = (_y = IDENTIFIERS2[latex]) != null ? _y : atom.value; + break; + case "mpunct": + result = (_z = OPERATORS2[command]) != null ? _z : command; + break; + case "mop": + case "operator": + case "extensible-symbol": + if (atom.value !== "\u200B") { + if (OPERATORS2[command]) result = OPERATORS2[command]; + else { + result = command === "\\operatorname" ? atomToTypst(atom.body) : (_A = atom.value) != null ? _A : command; + } + result += " "; + } + break; + case "array": + const environment = atom.environmentName; + if (atom.isMultiline) { + const lines = atom.rows; + result = lines.map((line) => line.map((cell) => atomToTypst(cell)).join("")).join("\n"); + } else { + const array = atom.rows; + const rows = array.map((row) => row.map(atomToTypst).join(", ")); + const delim = { + "pmatrix": '"("', + "bmatrix": '"["', + "bmatrix*": '"["', + "Bmatrix": '"{"', + "vmatrix": '"|"', + "matrix": "#none" + }[environment]; + if (delim) result = `mat(delim: ${delim}, ${rows.join(" ; ")})`; + else if (environment === "cases" || environment === "rcases") + result = `cases(reverse: #${environment === "rcases"}, ${rows.join(", ")})`; + else if (environment === "aligned") { + result = array.map((row) => row.map(atomToTypst).join(" & ")).join(" \\ "); + } else + result = array.map((row) => row.map(atomToTypst).join("")).join(""); + } + break; + case "box": + break; + case "spacing": + result = (_C = (_B = IDENTIFIERS2[latex]) != null ? _B : IDENTIFIERS2[command]) != null ? _C : " "; + break; + case "space": + result = " "; + break; + case "subsup": + result = ((_D = atom.leftSibling) == null ? void 0 : _D.value) ? "" : '""'; + break; + case "macro": + result = (_G = (_F = (_E = IDENTIFIERS2[latex]) != null ? _E : IDENTIFIERS2[command]) != null ? _F : OPERATORS2[command]) != null ? _G : atomToTypst(atom.body); + break; + case "overunder": + break; + } + if (!result) { + const customFunction = CUSTOM_FUNCTIONS[atom.command.slice(1)]; + if (customFunction) result = `${customFunction}(${atomToTypst(atom.body)})`; + } + if (!result) { + const customConverter = CUSTOM_CONVERTERS[atom.command.slice(1)]; + if (customConverter) result = customConverter(atom); + } + if (!atom.hasEmptyBranch("subscript")) { + result += "_"; + const arg = atomToTypst(atom.subscript); + result += arg.length !== 1 ? `(${arg})` : arg; + } + if (!atom.hasEmptyBranch("superscript")) { + result += "^"; + const arg = atomToTypst(atom.superscript); + result += arg.length !== 1 ? `(${arg})` : arg; + } + return result; + } + function typstStyle(body, style) { + if (!style) return body; + let result = body; + if (style.variant === "double-struck") result = `bb(${result})`; + if (style.variant === "script") result = `cal(${result})`; + if (style.variant === "fraktur") result = `frak(${result})`; + if (style.variant === "sans-serif") result = `sans(${result})`; + if (style.variant === "monospace") result = `mono(${result})`; + if (style.variantStyle === "bold") result = `bold(${result})`; + return result; + } + + // src/editor/a11y.ts + function speakableText(arg1, arg2) { + if (typeof arg1 === "string") return arg1 + atomToSpeakableText(arg2); + return atomToSpeakableText(arg1); + } + function relationName(atom) { + var _a3; + let result = void 0; + if (atom.parent.type === "prompt") { + if (atom.parentBranch === "body") result = "prompt"; + } else if (atom.parentBranch === "body") { + if (atom.type === "first") { + if (atom.parent.type === "root") result = "mathfield"; + else if (atom.parent.type === "surd") result = "radicand"; + else if (atom.parent.type === "genfrac") result = "fraction"; + else if (atom.parent.type === "sizeddelim") result = "delimiter"; + if (result) return result; + } + if (atom.type === "subsup") { + if (atom.superscript && atom.subscript) + result = "superscript and subscript"; + else if (atom.superscript) result = "superscript"; + else if (atom.subscript) result = "subscript"; + } else if (atom.type) { + result = (_a3 = { + "accent": "accented", + "array": "array", + "box": "box", + "chem": "chemical formula", + "delim": "delimiter", + "enclose": "cross out", + "extensible-symbol": "extensible symbol", + "error": "error", + "first": "first", + "genfrac": "fraction", + "group": "group", + "latex": "LaTeX", + "leftright": "delimiter", + "line": "line", + "subsup": "subscript-superscript", + "operator": "operator", + "overunder": "over-under", + "placeholder": "placeholder", + "rule": "rule", + "sizeddelim": "delimiter", + "space": "space", + "spacing": "spacing", + "surd": "square root", + "text": "text", + "prompt": "prompt", + "root": "math field", + "mop": "operator" + // E.g. `\operatorname`, a `mop` with a body + }[atom.type]) != null ? _a3 : "parent"; + } + } else if (atom.parent.type === "genfrac") { + if (atom.parentBranch === "above") return "numerator"; + if (atom.parentBranch === "below") return "denominator"; + } else if (atom.parent.type === "surd") { + if (atom.parentBranch === "above") result = "index"; + } else if (atom.parentBranch === "superscript") result = "superscript"; + else if (atom.parentBranch === "subscript") result = "subscript"; + return result != null ? result : "parent"; + } + function defaultAnnounceHook(mathfield, action, previousPosition, atoms) { + let liveText = ""; + if (action === "plonk") { + globalThis.MathfieldElement.playSound("plonk"); + mathfield.flushInlineShortcutBuffer(); + return; + } + if (action === "delete") liveText = speakableText("deleted: ", atoms); + else if (action === "focus" || action.includes("move")) { + liveText = getRelationshipAsSpokenText(mathfield.model, previousPosition); + liveText += getNextAtomAsSpokenText(mathfield.model); + } else if (action === "replacement") { + liveText = speakableText(mathfield.model.at(mathfield.model.position)); + } else if (action === "line") { + const label = speakableText(mathfield.model.root); + mathfield.keyboardDelegate.setAriaLabel(label); + } else liveText = atoms ? speakableText(action + " ", atoms) : action; + if (liveText && mathfield.ariaLiveText) { + const ariaLiveChangeHack = mathfield.ariaLiveText.textContent.includes( + "\xA0" + ) ? " \u202F " : " \xA0 "; + mathfield.ariaLiveText.textContent = liveText + ariaLiveChangeHack; + } + } + function getRelationshipAsSpokenText(model, previousOffset) { + if (Number.isNaN(previousOffset)) return ""; + const previous = model.at(previousOffset); + if (!previous) return ""; + if (previous.treeDepth <= model.at(model.position).treeDepth) return ""; + let result = ""; + let ancestor = previous.parent; + const newParent = model.at(model.position).parent; + while (ancestor !== model.root && ancestor !== newParent) { + result += `out of ${relationName(ancestor)};`; + ancestor = ancestor.parent; + } + return result; + } + function getNextAtomAsSpokenText(model) { + if (!model.selectionIsCollapsed) + return `selected: ${speakableText(model.getAtoms(model.selection))}`; + let result = ""; + const cursor = model.at(model.position); + if (cursor.isFirstSibling) result = `start of ${relationName(cursor)}: `; + if (cursor.isLastSibling) { + if (!cursor.isFirstSibling) { + if (!cursor.parent.parent) + return `${speakableText(cursor)}; end of mathfield`; + result = `${speakableText(cursor)}; end of ${relationName(cursor)}`; + } + } else result += speakableText(cursor); + return result; + } + + // src/editor-model/model-private.ts + var _Model = class { + constructor(target, mode, root) { + this.mathfield = target; + this.mode = mode; + this.silenceNotifications = false; + this._selection = { ranges: [[0, 0]], direction: "none" }; + this._anchor = 0; + this._position = 0; + this.root = root; + } + dispose() { + this.mathfield = void 0; + } + getState() { + const selection = { ranges: [...this._selection.ranges] }; + if (this.selection.direction && this.selection.direction !== "none") + selection.direction = this.selection.direction; + return { + content: this.root.toJson(), + selection, + mode: this.mode + }; + } + setState(state, options) { + var _a3; + const wasSuppressing = this.silenceNotifications; + this.silenceNotifications = (_a3 = options == null ? void 0 : options.silenceNotifications) != null ? _a3 : true; + let changeOption = {}; + if ((options == null ? void 0 : options.type) === "undo") changeOption = { inputType: "historyUndo" }; + if ((options == null ? void 0 : options.type) === "redo") changeOption = { inputType: "historyRedo" }; + if (this.contentWillChange(changeOption)) { + const didSuppress = this.silenceNotifications; + this.silenceNotifications = true; + this.mode = state.mode; + this.root = fromJson(state.content); + this.selection = state.selection; + this.silenceNotifications = didSuppress; + this.contentDidChange(changeOption); + this.selectionDidChange(); + } + this.silenceNotifications = wasSuppressing; + } + get atoms() { + return this.root.children; + } + get selection() { + return this._selection; + } + set selection(value) { + this.setSelection(value); + } + setSelection(arg1, arg2) { + if (!this.mathfield.contentEditable && this.mathfield.userSelect === "none") + return false; + return this.deferNotifications({ selection: true, content: true }, () => { + var _a3, _b3, _c2, _d2; + const value = this.normalizeSelection(arg1, arg2); + if (value === void 0) throw new TypeError("Invalid selection"); + if (value.ranges.length === 1 && value.ranges[0][0] === value.ranges[0][1]) { + const pos = value.ranges[0][0]; + if (!this.mathfield.dirty && !((_a3 = this.at(pos)) == null ? void 0 : _a3.parentPrompt) && this.mathfield.hasEditablePrompts) { + if ((_b3 = this.at(pos - 1)) == null ? void 0 : _b3.parentPrompt) { + this._anchor = this.normalizeOffset(pos - 1); + this._position = this._anchor; + this._selection = this.normalizeSelection(this._anchor); + return; + } + if ((_c2 = this.at(pos + 1)) == null ? void 0 : _c2.parentPrompt) { + this._anchor = this.normalizeOffset(pos + 1); + this._position = this._anchor; + this._selection = this.normalizeSelection(this._anchor); + return; + } + this._anchor = 0; + this._position = 0; + this._selection = { ranges: [[0, 0]] }; + return; + } + this._anchor = pos; + this._position = pos; + this._selection = value; + return; + } + let selRange = range(value); + selRange = includeAttachedSubsup(this, selRange); + if (value.direction === "backward") + [this._position, this._anchor] = selRange; + else [this._anchor, this._position] = selRange; + let firstIndex = selRange[0] + 1; + while (firstIndex <= this.lastOffset && ((_d2 = this.at(firstIndex)) == null ? void 0 : _d2.type) === "first" && firstIndex < selRange[1]) + firstIndex += 1; + const first = firstIndex <= this.lastOffset ? this.at(firstIndex) : this.at(selRange[1]); + const last = this.at(selRange[1]); + const commonAncestor = Atom.commonAncestor(first, last); + if ((commonAncestor == null ? void 0 : commonAncestor.type) === "array" && first.parent === commonAncestor && last.parent === commonAncestor) { + this._selection = { ranges: [selRange], direction: value.direction }; + } else + this._selection = { ranges: [selRange], direction: value.direction }; + console.assert(this._position >= 0 && this._position <= this.lastOffset); + return; + }); + } + setPositionHandlingPlaceholder(pos) { + var _a3; + const atom = this.at(pos); + if ((atom == null ? void 0 : atom.type) === "placeholder") { + this.setSelection(pos - 1, pos); + } else if (((_a3 = atom == null ? void 0 : atom.rightSibling) == null ? void 0 : _a3.type) === "placeholder") { + this.setSelection(pos, pos + 1); + } else this.position = pos; + if (atom instanceof LatexAtom && atom.isSuggestion) + atom.isSuggestion = false; + this.mathfield.stopCoalescingUndo(); + } + /** + * The "focus" or "cursor" (i.e. not the anchor) a.k.a the insertion point + * or caret: where things are going to be inserted next. + * + */ + get position() { + return this._position; + } + set position(value) { + this.setSelection(value, value); + } + /** + * The offset from which the selection is extended + */ + get anchor() { + return this._anchor; + } + get selectionIsCollapsed() { + return this._anchor === this._position; + } + get selectionIsPlaceholder() { + if (Math.abs(this._anchor - this._position) === 1) { + return this.at(Math.max(this._anchor, this._position)).type === "placeholder"; + } + return false; + } + collapseSelection(direction = "forward") { + if (this._anchor === this._position) return false; + if (direction === "backward") + this.position = Math.min(this._anchor, this._position); + else this.position = Math.max(this._anchor, this._position); + return true; + } + get lastOffset() { + return this.atoms.length - 1; + } + at(index) { + return this.atoms[index]; + } + offsetOf(atom) { + return this.atoms.indexOf(atom); + } + getSiblingsRange(offset) { + const atom = this.at(offset); + const { parent } = atom; + if (!parent) return [0, this.lastOffset]; + const branch = atom.parent.branch(atom.parentBranch); + return [this.offsetOf(branch[0]), this.offsetOf(branch[branch.length - 1])]; + } + getBranchRange(offset, branchName) { + const branch = this.at(offset).branch(branchName); + return [this.offsetOf(branch[0]), this.offsetOf(branch[branch.length - 1])]; + } + /** If offset is inside a cell, return the range (first and last offset) of the cell */ + getCellRange(offset) { + var _a3, _b3; + const cellIndex = this.getParentCell(offset); + let atom = this.at(offset); + if (!atom) return void 0; + while (atom && ((_a3 = atom.parent) == null ? void 0 : _a3.type) !== "array") atom = atom.parent; + if (((_b3 = atom == null ? void 0 : atom.parent) == null ? void 0 : _b3.type) !== "array") return void 0; + return [this.offsetOf(atom.firstSibling), this.offsetOf(atom.lastSibling)]; + } + getAtoms(arg1, arg2, arg3) { + let options = arg3 != null ? arg3 : {}; + if (isSelection(arg1)) { + options = arg2 != null ? arg2 : {}; + if (arg1.ranges.length > 1) { + return arg1.ranges.reduce( + (acc, range2) => [...acc, ...this.getAtoms(range2, options)], + [] + ); + } + arg1 = arg1.ranges[0]; + } + let start; + let end; + if (isOffset(arg1)) { + start = arg1; + if (!isOffset(arg2)) return []; + end = arg2; + } else { + [start, end] = arg1; + if (Object.keys(options).length === 0) + options = arg2 != null ? arg2 : {}; + } + if (!Number.isFinite(start)) return []; + if (options.includeChildren === void 0) options.includeChildren = false; + if (start < 0) start = this.lastOffset - start + 1; + if (end < 0) end = this.lastOffset + end + 1; + const minPos = Math.min(start, end); + const maxPos = Math.max(start, end); + const first = minPos === 0 ? 0 : minPos + 1; + const last = maxPos; + if (!options.includeChildren && first === 1 && last === this.lastOffset) + return [this.root]; + let result = []; + for (let i = first; i <= last; i++) { + const atom = this.atoms[i]; + if (atomIsInRange(this, atom, first, last, options.includeFirstAtoms)) + result.push(atom); + } + if (!options.includeChildren) { + result = result.filter((atom) => { + let ancestorIncluded = false; + let { parent } = atom; + while (parent && !ancestorIncluded) { + ancestorIncluded = atomIsInRange( + this, + parent, + first, + last, + options.includeFirstAtoms + ); + parent = parent.parent; + } + return !ancestorIncluded; + }); + } + return result; + } + findAtom(filter, startingIndex = 0, direction = "forward") { + let atom = void 0; + const last = this.lastOffset; + if (direction === "forward") { + for (let i = startingIndex; i <= last; i++) { + atom = this.atoms[i]; + if (filter(atom)) return atom; + } + for (let i = 0; i < startingIndex; i++) { + atom = this.atoms[i]; + if (filter(atom)) return atom; + } + return void 0; + } + for (let i = startingIndex; i >= 0; i--) { + atom = this.atoms[i]; + if (filter(atom)) return atom; + } + for (let i = last; i > startingIndex; i--) { + atom = this.atoms[i]; + if (filter(atom)) return atom; + } + return void 0; + } + /** Remove the specified atoms from the tree. + * **WARNING** upon return the selection may now be invalid + */ + extractAtoms(range2) { + var _a3; + let result = this.getAtoms(range2); + if (result.length === 1 && !result[0].parent) { + if (result[0].isRoot) { + if (result[0] instanceof ArrayAtom) + result = result[0].rows.flatMap((x) => x.flatMap((y) => y)); + else result = [...(_a3 = result[0].body) != null ? _a3 : result[0].children]; + result = result.filter((x) => x.type !== "first"); + } + } + for (const child of result) child.parent.removeChild(child); + return result; + } + deleteAtoms(range2) { + range2 != null ? range2 : range2 = [0, -1]; + this.extractAtoms(range2); + if (range2[0] === 0 && range2[1] === -1 && this.root instanceof ArrayAtom) { + while (this.root.rowCount > 1) this.root.removeRow(1); + } + this.position = range2[0]; + } + atomToString(atom, inFormat) { + const format = inFormat != null ? inFormat : "latex"; + if (format.startsWith("latex")) { + return Atom.serialize([atom], { + expandMacro: format === "latex-expanded", + skipStyles: format === "latex-unstyled", + skipPlaceholders: format === "latex-without-placeholders", + defaultMode: this.mathfield.options.defaultMode + }); + } + if (format === "math-ml") return toMathML(atom); + if (format === "spoken") return atomToSpeakableText(atom); + if (format === "spoken-text") { + const saveTextToSpeechMarkup = globalThis.MathfieldElement.textToSpeechMarkup; + globalThis.MathfieldElement.textToSpeechMarkup = ""; + const result = atomToSpeakableText(atom); + globalThis.MathfieldElement.textToSpeechMarkup = saveTextToSpeechMarkup; + return result; + } + if (format === "spoken-ssml" || format === "spoken-ssml-with-highlighting") { + const saveTextToSpeechMarkup = globalThis.MathfieldElement.textToSpeechMarkup; + globalThis.MathfieldElement.textToSpeechMarkup = "ssml"; + const result = atomToSpeakableText(atom); + globalThis.MathfieldElement.textToSpeechMarkup = saveTextToSpeechMarkup; + return result; + } + if (format === "typst") return atomToTypst(atom); + if (format === "plain-text") return atomToAsciiMath(atom, { plain: true }); + if (format === "ascii-math") return atomToAsciiMath(atom); + console.error(`MathLive {{SDK_VERSION}}: Unexpected format "${format}`); + return ""; + } + getValue(arg1, arg2, arg3) { + if (arg1 === void 0) return this.atomToString(this.root, "latex"); + if (typeof arg1 === "string" && arg1 !== "math-json") + return this.atomToString(this.root, arg1); + let ranges; + let format; + if (isOffset(arg1) && isOffset(arg2)) { + ranges = [this.normalizeRange([arg1, arg2])]; + format = arg3; + } else if (isRange(arg1)) { + ranges = [this.normalizeRange(arg1)]; + format = arg2; + } else if (isSelection(arg1)) { + ranges = arg1.ranges; + format = arg2; + } else { + ranges = [this.normalizeRange([0, -1])]; + format = arg1; + } + format != null ? format : format = "latex"; + if (format === "math-json") { + if (!globalThis.MathfieldElement.computeEngine) { + if (!window[Symbol.for("io.cortexjs.compute-engine")]) { + console.error( + 'The CortexJS Compute Engine library is not available.\nLoad the library, for example with:\nimport "https://esm.run/@cortex-js/compute-engine"' + ); + } + return '["Error", "compute-engine-not-available"]'; + } + const latex = this.getValue({ ranges }, "latex-unstyled"); + try { + const expr = globalThis.MathfieldElement.computeEngine.parse(latex); + return JSON.stringify(expr.json); + } catch (e) { + return JSON.stringify(["Error", `'${e.toString()}'`]); + } + } + if (format.startsWith("latex")) { + const options = { + expandMacro: format === "latex-expanded", + skipStyles: format === "latex-unstyled", + skipPlaceholders: format === "latex-without-placeholders", + defaultMode: this.mathfield.options.defaultMode + }; + return joinLatex( + ranges.map((range2) => Atom.serialize(this.getAtoms(range2), options)) + ); + } + return ranges.map( + (range2) => this.getAtoms(range2).map((atom) => this.atomToString(atom, format)).join("") + ).join(""); + } + /** + * Unlike `setSelection`, this method is intended to be used in response + * to a user action, and it performs various adjustments to result in a more + * intuitive selection. + * + * For example: + * - when all the children of an atom are selected, the atom become selected. + * - this method will *not* change the anchor, but may result in a selection + * whose boundary is outside the anchor + */ + extendSelectionTo(anchor, position) { + if (!this.mathfield.contentEditable && this.mathfield.userSelect === "none") + return false; + return this.deferNotifications({ selection: true }, () => { + const range2 = this.normalizeRange([anchor, position]); + let [start, end] = range2; + const expandableTypes = /* @__PURE__ */ new Set([ + "genfrac", + "subsup", + "accent", + "box", + "overlap", + "overunder" + ]); + let { parent } = this.at(end); + if ((parent == null ? void 0 : parent.type) && expandableTypes.has(parent.type)) { + while ((parent == null ? void 0 : parent.type) && expandableTypes.has(parent.type) && childrenInRange(this, parent, [start, end])) { + end = this.offsetOf(parent); + parent = parent.parent; + } + } + parent = this.at(start).parent; + while ((parent == null ? void 0 : parent.type) && expandableTypes.has(parent.type) && childrenInRange(this, parent, [start, end])) { + start = this.offsetOf(parent.leftSibling); + parent = parent.parent; + } + parent = this.at(end).parent; + if ((parent == null ? void 0 : parent.type) && expandableTypes.has(parent.type)) { + while ((parent == null ? void 0 : parent.type) && expandableTypes.has(parent.type) && childrenInRange(this, parent, [start, end])) { + end = this.offsetOf(parent); + console.assert(end >= 0); + parent = parent.parent; + } + } + this._position = this.normalizeOffset(position); + this._selection = { + ranges: [[start, end]], + direction: "none" + }; + }); + } + /** + * This method is called to provide feedback when using a screen reader + * or other assistive device, for example when changing the selection or + * moving the insertion point. + * + * It can also be used with the 'plonk' command to provide an audible + * feedback when a command is not possible. + * + * This method should not be called from other methods of the model + * (such as `setSelection`) as these methods can also be called + * programmatically and a feedback in these case would be inappropriate, + * however they should be called from functions called as a result of a user + * action, such as the functions in `commands.ts` + */ + announce(command, previousPosition, atoms = []) { + var _a3, _b3; + const success = (_b3 = (_a3 = this.mathfield.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("announce", { + detail: { command, previousPosition, atoms }, + cancelable: true, + bubbles: true, + composed: true + }) + )) != null ? _b3 : true; + if (success) + defaultAnnounceHook(this.mathfield, command, previousPosition, atoms); + } + // Suppress notification while scope is executed, then notify of content + // change, and selection change (if actual change) + deferNotifications(options, f) { + const oldSelection = this._selection; + const oldAnchor = this._anchor; + const oldPosition = this._position; + const saved = this.silenceNotifications; + this.silenceNotifications = true; + const previousCounter = this.root.changeCounter; + f(); + this.silenceNotifications = saved; + const selectionChanged = oldAnchor !== this._anchor || oldPosition !== this._position || compareSelection(this._selection, oldSelection) === "different"; + if (options.selection && selectionChanged) this.selectionDidChange(); + const contentChanged = this.root.changeCounter !== previousCounter; + if (options.content && contentChanged) + this.contentDidChange({ inputType: options.type }); + return contentChanged || selectionChanged; + } + normalizeOffset(value) { + if (value > 0) value = Math.min(value, this.lastOffset); + else if (value < 0) value = this.lastOffset + value + 1; + return value; + } + /** + * Ensure that the range is valid and canonical, i.e. + * - start <= end + * - collapsed = start === end + * - start >= 0, end >=0 + */ + normalizeRange(range2) { + let [start, end] = range2; + start = this.normalizeOffset(start); + end = this.normalizeOffset(end); + return start < end ? [start, end] : [end, start]; + } + normalizeSelection(value, value2) { + var _a3; + let result = void 0; + if (isOffset(value)) { + const offset = this.normalizeOffset(value); + if (isOffset(value2)) { + const offset2 = this.normalizeOffset(value2); + result = offset <= offset2 ? { ranges: [[offset, offset2]], direction: "none" } : { + ranges: [[offset2, offset]], + direction: "backward" + }; + } else result = { ranges: [[offset, offset]], direction: "none" }; + } else if (isRange(value)) { + const start = this.normalizeOffset(value[0]); + const end = this.normalizeOffset(value[1]); + result = start <= end ? { ranges: [[start, end]], direction: "none" } : { ranges: [[end, start]], direction: "backward" }; + } else if (isSelection(value)) { + result = { + ranges: value.ranges.map((x) => this.normalizeRange(x)), + direction: (_a3 = value.direction) != null ? _a3 : "none" + }; + } + console.assert(result !== void 0); + return result; + } + /** Returns the first ArrayAtom in ancestry of current position */ + get parentEnvironment() { + let parent = this.at(this.position).parent; + if (!parent) return void 0; + while (parent.parent && parent.type !== "array") parent = parent.parent; + if (parent.type !== "array") return void 0; + return parent; + } + /** Return the cell (row, col) that the current selection is in */ + get parentCell() { + return this.getParentCell(this.position); + } + getParentCell(pos) { + var _a3, _b3; + let atom = this.at(pos); + if (!atom) return void 0; + while (atom && ((_a3 = atom.parent) == null ? void 0 : _a3.type) !== "array") atom = atom.parent; + if (((_b3 = atom == null ? void 0 : atom.parent) == null ? void 0 : _b3.type) !== "array") return void 0; + return atom.parentBranch; + } + contentWillChange(options = {}) { + if (this.silenceNotifications || !this.mathfield) return true; + const save = this.silenceNotifications; + this.silenceNotifications = true; + const result = this.mathfield.onContentWillChange(options); + this.silenceNotifications = save; + return result; + } + contentDidChange(options) { + var _a3; + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.update(makeProxy(this.mathfield)); + if (this.silenceNotifications || !((_a3 = this.mathfield) == null ? void 0 : _a3.host)) return; + const save = this.silenceNotifications; + this.silenceNotifications = true; + setTimeout(() => { + var _a4; + if (!this.mathfield || !isValidMathfield(this.mathfield) || !this.mathfield.host) + return; + this.mathfield.host.dispatchEvent( + new InputEvent("input", __spreadProps(__spreadValues({}, options), { + // To work around a bug in WebKit/Safari (the inputType property gets stripped), include the inputType as the 'data' property. (see #1843) + data: options.data ? options.data : (_a4 = options.inputType) != null ? _a4 : "", + bubbles: true, + composed: true + })) + ); + }, 0); + this.silenceNotifications = save; + } + selectionDidChange() { + if (!this.mathfield) return; + const save = this.silenceNotifications; + if (!save) { + this.silenceNotifications = true; + this.mathfield.onSelectionDidChange(); + } + this.silenceNotifications = save; + } + }; + function atomIsInRange(model, atom, first, last, includeFirstAtoms) { + const offset = model.offsetOf(atom); + if (offset < first || offset > last) return false; + if (!atom.hasChildren) return true; + const firstChild = includeFirstAtoms ? atom.firstChild : firstNonFirstChild(atom); + if (!firstChild) return true; + const lastChild = includeFirstAtoms ? atom.lastChild : lastNonFirstChild(atom); + if (!lastChild) return true; + const firstOffset = model.offsetOf(firstChild); + if (firstOffset >= first && firstOffset <= last) { + const lastOffset = model.offsetOf(lastChild); + if (lastOffset >= first && lastOffset <= last) return true; + } + return false; + } + function childrenInRange(model, atom, range2) { + if (!(atom == null ? void 0 : atom.hasChildren)) return false; + const [start, end] = range2; + const firstChild = firstNonFirstChild(atom); + if (!firstChild) return false; + const lastChild = lastNonFirstChild(atom); + if (!lastChild) return false; + const first = model.offsetOf(firstChild); + const last = model.offsetOf(lastChild); + if (first >= start && first <= end && last >= first && last <= end) + return true; + return false; + } + function includeAttachedSubsup(model, range2) { + let [start, end] = range2; + const candidateOffset = end + 1; + if (candidateOffset > model.lastOffset) return range2; + const candidate = model.at(candidateOffset); + if (shouldAttachSubsup(model, candidate, start, end)) + end = model.offsetOf(candidate); + return [start, end]; + } + function shouldAttachSubsup(model, atom, start, end) { + if ((atom == null ? void 0 : atom.type) !== "subsup") return false; + if (!childrenInRange(model, atom, [start, end])) return false; + const base = atom.leftSibling; + if (!base) return false; + const baseOffset = model.offsetOf(base); + return baseOffset > start && baseOffset <= end; + } + function firstNonFirstChild(atom) { + for (const child of atom.children) if (child.type !== "first") return child; + return void 0; + } + function lastNonFirstChild(atom) { + const { children } = atom; + for (let i = children.length - 1; i >= 0; i--) + if (children[i].type !== "first") return children[i]; + return void 0; + } + + // src/editor-model/commands-delete.ts + register2( + { + deleteAll: (model) => model.contentWillChange({ inputType: "deleteContent" }) && deleteRange(model, [0, -1], "deleteContent"), + deleteForward: (model) => deleteForward(model), + deleteBackward: (model) => deleteBackward(model), + deleteNextWord: (model) => model.contentWillChange({ inputType: "deleteWordForward" }) && skip(model, "forward", { delete: true }), + deletePreviousWord: (model) => model.contentWillChange({ inputType: "deleteWordBackward" }) && skip(model, "backward", { delete: true }), + deleteToGroupStart: (model) => { + if (!model.contentWillChange({ inputType: "deleteSoftLineBackward" })) + return false; + const pos = model.offsetOf(model.at(model.position).firstSibling); + if (pos === model.position) { + model.announce("plonk"); + return false; + } + model.deferNotifications( + { content: true, selection: true, type: "deleteSoftLineBackward" }, + () => model.deleteAtoms([model.anchor, pos]) + ); + model.position = pos; + return true; + }, + deleteToGroupEnd: (model) => { + if (!model.contentWillChange({ inputType: "deleteSoftLineForward" })) + return false; + const pos = model.offsetOf(model.at(model.position).lastSibling); + if (pos === model.position) { + model.announce("plonk"); + return false; + } + model.deferNotifications( + { content: true, selection: true, type: "deleteSoftLineForward" }, + () => model.deleteAtoms([model.anchor, pos]) + ); + return true; + }, + deleteToMathFieldStart: (model) => model.contentWillChange({ inputType: "deleteHardLineBackward" }) && deleteRange(model, [model.anchor, 0], "deleteHardLineBackward"), + deleteToMathFieldEnd: (model) => model.contentWillChange({ inputType: "deleteHardLineForward" }) && deleteRange(model, [model.anchor, -1], "deleteHardLineForward") + }, + { + target: "model", + audioFeedback: "delete", + canUndo: true, + changeContent: true, + changeSelection: true + } + ); + + // src/editor-mathfield/mathfield-private.ts + var DEFAULT_KEYBOARD_TOGGLE_GLYPH = ``; + var MENU_GLYPH = ``; + var _Mathfield = class __Mathfield { + /** + * + * - `options.computeEngine`: An instance of a `ComputeEngine`. It is used to parse and serialize + * LaTeX strings, using the information contained in the dictionaries + * of the Compute Engine to determine, for example, which symbols are + * numbers or which are functions, and therefore correctly interpret + * `bf(x)` as `b \\times f(x)`. + * + * If no instance is provided, a new default one is created. + * + * @param element - The DOM element that this mathfield is attached to. + * Note that `element.mathfield` is this object. + */ + constructor(element, options) { + this.focusBlurInProgress = false; + this.programmaticFocusInProgress = false; + /** When true, the mathfield is listening to the virtual keyboard */ + this.connectedToVirtualKeyboard = false; + var _a3, _b3, _c2; + this.options = __spreadValues(__spreadProps(__spreadValues({}, getDefault()), { + macros: getMacros(), + registers: getDefaultRegisters() + }), update(options)); + this.eventController = new AbortController(); + const signal = this.eventController.signal; + if (options.eventSink) this.host = options.eventSink; + this.element = element; + element.mathfield = this; + this.blurred = true; + this.keystrokeCaptionVisible = false; + this.suggestionIndex = 0; + this.inlineShortcutBuffer = []; + this.inlineShortcutBufferFlushTimer = 0; + this.scientificNotationTimer = 0; + this.defaultStyle = {}; + this.styleBias = "left"; + if (this.options.defaultMode === "inline-math") + this.element.classList.add("ML__is-inline"); + else this.element.classList.remove("ML__is-inline"); + this.dirty = false; + let elementText = (_b3 = (_a3 = options.value) != null ? _a3 : this.element.textContent) != null ? _b3 : ""; + const isFreeMode = options.defaultMode === "free-text" || options.defaultMode === "free-math"; + if (!isFreeMode) elementText = elementText.trim(); + const mode = effectiveMode(this.options); + const body = isFreeMode ? [] : parseLatex(elementText, { + context: this.context, + parseMode: void 0 + }); + let root; + if (options.defaultMode === "free-text") + root = parseFreeTextValue(elementText, this.context); + else if (options.defaultMode === "free-math") + root = parseFreeMathValue(elementText, this.context); + else if (body.length === 1 && body[0].isRoot) root = body[0]; + else root = new Atom({ type: "root", mode, body }); + this.model = new _Model(this, mode, root); + this.undoManager = new UndoManager(this.model); + const markup = []; + markup.push( + `` + ); + markup.push( + '"); + markup.push(""); + markup.push( + "" + ); + markup.push(""); + this.element.innerHTML = globalThis.MathfieldElement.createHTML( + markup.join("") + ); + if (!this.element.children) { + console.error( + `%cMathLive {{SDK_VERSION}}: Something went wrong and the mathfield could not be created.%c +If you are using Vue, this may be because you are using the runtime-only build of Vue. Make sure to include \`runtimeCompiler: true\` in your Vue configuration. There may a warning from Vue in the log above.`, + "color:red;font-family:system-ui;font-size:1.2rem;font-weight:bold", + "color:inherit;font-family:system-ui;font-size:inherit;font-weight:inherit" + ); + return; + } + this._l10Subscription = l10n.subscribe(() => l10n.update(this.element)); + l10n.update(this.element); + this.container = this.element.querySelector("[part=container]"); + this.field = this.container.querySelector("[part=content]"); + this.field.addEventListener( + "click", + (evt) => evt.stopImmediatePropagation(), + { capture: false, signal } + ); + this.field.addEventListener("wheel", this, { passive: false, signal }); + const pointerTarget = this.element; + if ("PointerEvent" in window) + pointerTarget.addEventListener("pointerdown", this, { signal }); + else pointerTarget.addEventListener("mousedown", this, { signal }); + if (this.host) { + const hostPointerHandler = (evt) => { + if (evt.target !== this.host) return; + this.handleEvent(evt); + }; + if ("PointerEvent" in window) { + this.host.addEventListener("pointerdown", hostPointerHandler, { + signal + }); + } else { + this.host.addEventListener("mousedown", hostPointerHandler, { + signal + }); + } + } + const virtualKeyboardToggle = this.element.querySelector( + "[part=virtual-keyboard-toggle]" + ); + virtualKeyboardToggle == null ? void 0 : virtualKeyboardToggle.addEventListener( + "pointerdown", + (ev) => { + if (ev.currentTarget !== virtualKeyboardToggle) return; + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.hide(); + else { + window.mathVirtualKeyboard.show({ animate: true }); + window.mathVirtualKeyboard.update(makeProxy(this)); + setTimeout(() => this.scrollIntoView(), 300); + } + ev.preventDefault(); + ev.stopPropagation(); + if (!this.hasFocus()) this.focus({ preventScroll: true }); + }, + { signal } + ); + this.field.addEventListener("contextmenu", this, { signal }); + const menuToggle = this.element.querySelector("[part=menu-toggle]"); + menuToggle == null ? void 0 : menuToggle.addEventListener( + "pointerdown", + (ev) => { + if (ev.currentTarget !== menuToggle) return; + const menu = this.menu; + if (menu.state !== "closed") return; + this.element.classList.add("tracking"); + const bounds = menuToggle.getBoundingClientRect(); + menu.modifiers = keyboardModifiersFromEvent(ev); + menu.show({ + target: menuToggle, + location: { x: bounds.left, y: bounds.bottom }, + onDismiss: () => this.element.classList.remove("tracking") + }); + ev.preventDefault(); + ev.stopPropagation(); + }, + { signal } + ); + if (this.disabled || this.readOnly && !this.hasEditableContent || this.userSelect === "none") + menuToggle.style.display = "none"; + this.ariaLiveText = (_c2 = this.element.querySelector("[role=status]")) != null ? _c2 : void 0; + this.keyboardDelegate = delegateKeyboardEvents( + this.element.querySelector(".ML__keyboard-sink"), + this.element, + this + ); + window.addEventListener("resize", this, { signal }); + document.addEventListener("scroll", this, { signal }); + this.resizeObserver = new ResizeObserver((_entries) => { + if (this.resizeObserverStarted) { + this.resizeObserverStarted = false; + return; + } + this.updateToggleLayout(); + requestUpdate(this); + }); + this.resizeObserverStarted = true; + this.resizeObserver.observe(this.field); + this.resizeObserver.observe(this.container); + setTimeout(() => this.updateToggleLayout(), 100); + window.mathVirtualKeyboard.addEventListener( + "virtual-keyboard-toggle", + this, + { signal } + ); + if (gKeyboardLayout && !l10n.locale.startsWith(gKeyboardLayout.locale)) + setKeyboardLayoutLocale(l10n.locale); + if (gFontsState !== "ready") + document.fonts.ready.then(() => renderSelection(this)); + element.querySelector("[part=container]").style.removeProperty("visibility"); + this.undoManager.startRecording(); + this.undoManager.snapshot("set-value"); + requestUpdate(this); + } + connectToVirtualKeyboard() { + if (this.connectedToVirtualKeyboard) return; + this.connectedToVirtualKeyboard = true; + window.addEventListener("message", this, { + signal: this.eventController.signal + }); + window.mathVirtualKeyboard.connect(); + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.update(makeProxy(this)); + updateEnvironmentPopover(this); + } + disconnectFromVirtualKeyboard() { + if (!this.connectedToVirtualKeyboard) return; + window.removeEventListener("message", this); + window.mathVirtualKeyboard.disconnect(); + this.connectedToVirtualKeyboard = false; + hideEnvironmentPopover(); + } + showMenu(_) { + var _a3, _b3; + const location = (_b3 = (_a3 = _ == null ? void 0 : _.location) != null ? _a3 : getCaretPoint(this.field)) != null ? _b3 : void 0; + const modifiers = _ == null ? void 0 : _.modifiers; + const target = this.element.querySelector("[part=container]"); + return this._menu.show({ target, location, modifiers }); + } + get colorMap() { + return (name) => { + var _a3, _b3, _c2; + return (_c2 = (_b3 = (_a3 = this.options).colorMap) == null ? void 0 : _b3.call(_a3, name)) != null ? _c2 : defaultColorMap(name); + }; + } + get backgroundColorMap() { + return (name) => { + var _a3, _b3, _c2, _d2, _e, _f; + return (_f = (_e = (_b3 = (_a3 = this.options).backgroundColorMap) == null ? void 0 : _b3.call(_a3, name)) != null ? _e : (_d2 = (_c2 = this.options).colorMap) == null ? void 0 : _d2.call(_c2, name)) != null ? _f : defaultBackgroundColorMap(name); + }; + } + get smartFence() { + var _a3; + return (_a3 = this.options.smartFence) != null ? _a3 : false; + } + get readOnly() { + var _a3; + return (_a3 = this.options.readOnly) != null ? _a3 : false; + } + get disabled() { + var _a3, _b3; + return (_b3 = (_a3 = this.host) == null ? void 0 : _a3["disabled"]) != null ? _b3 : false; + } + // This reflects the contenteditable attribute. + // Use hasEditableContent instead to take into account readonly and disabled + // states. + get contentEditable() { + if (!this.host) return false; + return this.host.getAttribute("contenteditable") !== "false"; + } + // This reflect the `user-select` CSS property + get userSelect() { + if (!this.host) return ""; + const style = getComputedStyle(this.host); + return style.getPropertyValue("user-select") || style.getPropertyValue("-webkit-user-select"); + } + // Use to hide/show the virtual keyboard toggle. If false, no point in + // showing the toggle. + get hasEditableContent() { + if (this.disabled || !this.contentEditable) return false; + return !this.readOnly || this.hasEditablePrompts; + } + get hasEditablePrompts() { + return this.readOnly && !this.disabled && this.contentEditable && this.model.findAtom( + (a) => a.type === "prompt" && !a.locked + ) !== void 0; + } + /** Returns true if the selection is editable: + * - mathfield is not disabled, and has contentEditable + * - if mathfield is readonly, the current selection is in a prompt which is editable (not locked) + */ + get isSelectionEditable() { + if (this.disabled || !this.contentEditable) return false; + if (!this.readOnly) return true; + const anchor = this.model.at(this.model.anchor); + const cursor = this.model.at(this.model.position); + const ancestor = Atom.commonAncestor(anchor, cursor); + if ((ancestor == null ? void 0 : ancestor.type) === "prompt" || (ancestor == null ? void 0 : ancestor.parentPrompt)) return true; + return false; + } + get letterShapeStyle() { + var _a3; + return (_a3 = this.options.letterShapeStyle) != null ? _a3 : "tex"; + } + get minFontScale() { + return this.options.minFontScale; + } + get maxMatrixCols() { + return this.options.maxMatrixCols; + } + /** + * + * If there is a selection, return if all the atoms in the selection, + * some of them or none of them match the `style` argument. + * + * If there is no selection, return 'all' if the current implicit style + * (determined by a combination of the style of the previous atom and + * the current style) matches the `style` argument, 'none' if it does not. + */ + queryStyle(inStyle) { + var _a3; + const style = validateStyle(this, inStyle); + if ("verbatimColor" in style) delete style.verbatimColor; + if ("verbatimBackgroundColor" in style) + delete style.verbatimBackgroundColor; + const keyCount = Object.keys(style).length; + if (keyCount === 0) return "all"; + if (keyCount > 1) { + for (const prop2 of Object.keys(style)) { + const result = this.queryStyle({ [prop2]: style[prop2] }); + if (result === "none") return "none"; + if (result === "some") return "some"; + } + return "all"; + } + const prop = Object.keys(style)[0]; + const value = style[prop]; + if (this.model.selectionIsCollapsed) { + const currentStyle = computeInsertStyle(this); + if (prop === "textDecoration" && typeof value === "string") { + const currentDecorations = String((_a3 = currentStyle[prop]) != null ? _a3 : "").split(" ").filter(Boolean); + const requestedDecorations2 = value.split(" ").filter(Boolean); + return requestedDecorations2.every( + (decoration) => currentDecorations.includes(decoration) + ) ? "all" : "none"; + } + return currentStyle[prop] === value ? "all" : "none"; + } + const atoms = this.model.getAtoms(this.model.selection, { + includeChildren: true + }); + let length = atoms.length; + if (length === 0) return "none"; + let count = 0; + const requestedDecorations = prop === "textDecoration" && typeof value === "string" ? value.split(" ").filter(Boolean) : []; + for (const atom of atoms) { + if (atom.type === "first") { + length -= 1; + continue; + } + if (prop === "textDecoration" && requestedDecorations.length > 0 ? requestedDecorations.every( + (decoration) => { + var _a4; + return String((_a4 = atom.style[prop]) != null ? _a4 : "").split(" ").includes(decoration); + } + ) : atom.style[prop] === value) + count += 1; + } + if (count === 0) return "none"; + if (count === length) return "all"; + return "some"; + } + get keybindings() { + var _a3, _b3; + if (this._keybindings) return this._keybindings; + const [keybindings, errors] = normalizeKeybindings( + this.options.keybindings, + (_a3 = getActiveKeyboardLayout()) != null ? _a3 : getDefaultKeyboardLayout() + ); + if (((_b3 = getActiveKeyboardLayout()) == null ? void 0 : _b3.score) > 0) { + this._keybindings = keybindings; + if (errors.length > 0) { + console.error( + `MathLive {{SDK_VERSION}}: Invalid keybindings for current keyboard layout`, + errors + ); + } + } + return keybindings; + } + get menu() { + var _a3; + (_a3 = this._menu) != null ? _a3 : this._menu = new Menu(getDefaultMenuItems(this), { host: this.host }); + return this._menu; + } + set menuItems(menuItems) { + if (this._menu) this._menu.menuItems = menuItems; + else this._menu = new Menu(menuItems, { host: this.host }); + } + setOptions(config) { + var _a3, _b3, _c2; + const previousDefaultMode = this.options.defaultMode; + const wasFreeLines = previousDefaultMode === "free-text" || previousDefaultMode === "free-math"; + this.options = __spreadValues(__spreadValues({}, this.options), update(config)); + const isFreeLines = this.options.defaultMode === "free-text" || this.options.defaultMode === "free-math"; + this._keybindings = void 0; + if (this.options.defaultMode === "inline-math") + this.element.classList.add("ML__is-inline"); + else this.element.classList.remove("ML__is-inline"); + if ("defaultMode" in config && (isFreeLines !== wasFreeLines || previousDefaultMode !== this.options.defaultMode)) { + const previousPosition = this.model.position; + if (isFreeLines && !isFreeLinesRoot(this.model.root)) { + const body = this.model.root.type === "root" ? [...(_a3 = this.model.root.branch("body")) != null ? _a3 : []] : [this.model.root]; + this.model.root = this.options.defaultMode === "free-math" ? makeFreeMathRoot([body]) : makeFreeTextRoot([body]); + } else if (isFreeLines && isFreeLinesRoot(this.model.root) && (this.options.defaultMode === "free-text" && !isFreeTextRoot(this.model.root) || this.options.defaultMode === "free-math" && ((_b3 = this.model.root.firstChild) == null ? void 0 : _b3.mode) !== "free-math")) { + const content2 = this.model.getValue("latex"); + this.model.root = this.options.defaultMode === "free-math" ? parseFreeMathValue(content2, this.context) : parseFreeTextValue(content2, this.context); + } else if (!isFreeLines && isFreeLinesRoot(this.model.root)) { + const body = this.model.root.rows.flatMap( + (row) => row.flatMap((cell) => { + var _a4; + return (_a4 = cell == null ? void 0 : cell.filter((atom) => atom.type !== "first")) != null ? _a4 : []; + }) + ); + this.model.root = new Atom({ + type: "root", + mode: effectiveMode(this.options), + body + }); + } + this.model.position = Math.min(previousPosition, this.model.lastOffset); + this.model.mode = effectiveMode(this.options); + } + let mode = this.options.defaultMode; + if (mode === "inline-math") mode = "math"; + if (((_c2 = this.model.root.firstChild) == null ? void 0 : _c2.mode) !== mode) + this.model.root.firstChild.mode = mode; + if (this.options.readOnly) { + if (this.hasFocus() && window.mathVirtualKeyboard.visible) + this.executeCommand("hideVirtualKeyboard"); + } + const content = Atom.serialize([this.model.root], { + expandMacro: false, + defaultMode: this.options.defaultMode + }); + if ("macros" in config || this.model.getValue() !== content) reparse(this); + if ("value" in config || "registers" in config || "colorMap" in config || "backgroundColorMap" in config || "letterShapeStyle" in config || "minFontScale" in config || "maxMatrixCols" in config || "readOnly" in config || "contentPlaceholder" in config || "placeholderSymbol" in config) + requestUpdate(this); + } + getOptions(keys) { + return get(this.options, keys); + } + getOption(key) { + return get(this.options, key); + } + /* + * handleEvent is a function invoked when an event is registered with an + * object. + * The name is defined by `addEventListener()` and cannot be changed. + * This pattern is used to be able to release bound event handlers, + * (event handlers that need access to `this`) as the `bind()` function + * would create a new function that would have to be kept track of + * to be able to properly remove the event handler later. + */ + async handleEvent(evt) { + var _a3, _b3, _c2; + if (!isValidMathfield(this)) return; + if (isVirtualKeyboardMessage(evt)) { + if (!validateOrigin(evt.origin, (_a3 = this.options.originValidator) != null ? _a3 : "none")) { + throw new DOMException( + `Message from unknown origin (${evt.origin}) cannot be handled`, + "SecurityError" + ); + } + const { action } = evt.data; + if (action === "execute-command") { + const command = parseCommand(evt.data.command); + if (!command) return; + if (getCommandTarget(command) === "virtual-keyboard") return; + this.executeCommand(command); + } else if (action === "update-state") { + } else if (action === "focus") this.focus({ preventScroll: true }); + else if (action === "blur") this.blur(); + return; + } + switch (evt.type) { + case "focus": + if (!this.programmaticFocusInProgress) + this.onFocus({ suppressEvents: true }); + break; + case "blur": + this.onBlur({ dispatchEvents: false }); + break; + // Safari on iOS <= 13 and Firefox on Android + case "mousedown": + if (this.userSelect !== "none" && !((_b3 = evt.target) == null ? void 0 : _b3.closest( + "[part=virtual-keyboard-toggle],[part=menu-toggle]" + ))) + onPointerDown(this, evt); + break; + case "pointerdown": + if (!evt.defaultPrevented && this.userSelect !== "none" && !((_c2 = evt.target) == null ? void 0 : _c2.closest( + "[part=virtual-keyboard-toggle],[part=menu-toggle]" + ))) { + onPointerDown(this, evt); + if (evt.shiftKey === false) { + if (await onContextMenu(evt, this.container, this.menu)) + PointerTracker.stop(); + } + } + break; + case "contextmenu": + if (this.userSelect !== "none" && evt.shiftKey === false) { + if (await onContextMenu(evt, this.container, this.menu)) + PointerTracker.stop(); + } + break; + case "virtual-keyboard-toggle": + if (this.hasFocus()) updateEnvironmentPopover(this); + if (this.hasFocus() && this.options.mathVirtualKeyboardPolicy !== "manual") { + this.focusBlurInProgress = true; + this.keyboardDelegate.blur(); + this.keyboardDelegate.focus(); + this.focusBlurInProgress = false; + } + break; + case "resize": + if (this.geometryChangeTimer) + cancelAnimationFrame(this.geometryChangeTimer); + this.geometryChangeTimer = requestAnimationFrame( + () => isValidMathfield(this) && this.onGeometryChange() + ); + break; + case "scroll": + if (this.geometryChangeTimer) + cancelAnimationFrame(this.geometryChangeTimer); + this.geometryChangeTimer = requestAnimationFrame( + () => isValidMathfield(this) && this.onGeometryChange() + ); + break; + case "wheel": + this.onWheel(evt); + break; + case "message": + break; + default: + console.warn("Unexpected event type", evt.type); + } + } + /** Update toggle button layout based on mathfield height */ + updateToggleLayout() { + if (!this.element || !this.host) return; + const toggles = this.element.querySelector(".ML__toggles"); + if (!toggles) return; + const height = this.host.offsetHeight; + const hasVerticalClass = toggles.classList.contains( + "ML__toggles--vertical" + ); + if (height >= 100 && !hasVerticalClass) + toggles.classList.add("ML__toggles--vertical"); + else if (height < 100 && hasVerticalClass) + toggles.classList.remove("ML__toggles--vertical"); + } + dispose() { + if (!isValidMathfield(this)) return; + l10n.unsubscribe(this._l10Subscription); + this.keyboardDelegate.dispose(); + this.keyboardDelegate = void 0; + this.eventController.abort(); + this.eventController = void 0; + this.resizeObserver.disconnect(); + window.mathVirtualKeyboard.removeEventListener( + "virtual-keyboard-toggle", + this + ); + this.disconnectFromVirtualKeyboard(); + this.model.dispose(); + const element = this.element; + delete element.mathfield; + this.element = void 0; + this.host = void 0; + this.field = void 0; + this.ariaLiveText = void 0; + disposeKeystrokeCaption(); + disposeSuggestionPopover(); + disposeEnvironmentPopover(); + } + flushInlineShortcutBuffer(options) { + options != null ? options : options = { defer: false }; + if (!options.defer) { + this.inlineShortcutBuffer.length = 0; + clearTimeout(this.inlineShortcutBufferFlushTimer); + this.inlineShortcutBufferFlushTimer = 0; + return; + } + if (this.options.inlineShortcutTimeout > 0) { + clearTimeout(this.inlineShortcutBufferFlushTimer); + this.inlineShortcutBufferFlushTimer = setTimeout( + () => this.flushInlineShortcutBuffer(), + this.options.inlineShortcutTimeout + ); + } + } + executeCommand(command) { + if (getCommandTarget(command) === "virtual-keyboard") { + this.focus({ preventScroll: true }); + window.mathVirtualKeyboard.executeCommand(command); + requestAnimationFrame( + () => window.mathVirtualKeyboard.update(makeProxy(this)) + ); + return false; + } + return perform(this, command); + } + get errors() { + return validateLatex(this.model.getValue(), { context: this.context }); + } + getValue(arg1, arg2, arg3) { + return this.model.getValue(arg1, arg2, arg3); + } + setValue(value, options) { + var _a3; + options = options != null ? options : { mode: effectiveMode(this.options) }; + if (options.insertionMode === void 0) + options.insertionMode = "replaceAll"; + if (options.format === void 0 || options.format === "auto") + options.format = "latex"; + if (options.mode === void 0 || options.mode === "auto") + options.mode = (_a3 = getMode(this.model, this.model.position)) != null ? _a3 : effectiveMode(this.options); + if ((this.options.defaultMode === "free-text" || this.options.defaultMode === "free-math") && (options.mode === "free-text" || options.mode === "free-math" || options.mode === "text") && options.insertionMode === "replaceAll" && (options.format === "latex" || options.format === "plain-text")) { + if (!this.model.contentWillChange({ data: value, inputType: "insertText" })) + return; + const freeMath = this.options.defaultMode === "free-math"; + this.model.root = freeMath ? options.format === "plain-text" ? makeFreeMathRoot(parseFreeMath(value, this.context)) : parseFreeMathValue(value, this.context) : options.format === "plain-text" ? makeFreeTextRoot(parseFreeText(value, this.context)) : parseFreeTextValue(value, this.context); + this.model.position = options.selectionMode === "before" ? 0 : this.model.lastOffset; + this.model.mode = freeMath ? "free-math" : "free-text"; + this.model.contentDidChange({ data: value, inputType: "insertText" }); + requestUpdate(this); + this.undoManager.snapshot("set-value"); + return; + } + const couldUndo = this.undoManager.canUndo(); + if (ModeEditor.insert(this.model, value, options)) { + requestUpdate(this); + if (!couldUndo) this.undoManager.reset(); + this.undoManager.snapshot("set-value"); + } + } + get expression() { + const ce = globalThis.MathfieldElement.computeEngine; + if (!ce) { + console.error( + `MathLive {{SDK_VERSION}}: no compute engine available. Make sure the Compute Engine library is loaded.` + ); + return null; + } + return ce.box(ce.parse(this.model.getValue("latex-unstyled"))); + } + /** Make sure the caret is visible within the matfield. + * If using mathfield element, make sure the mathfield element is visible in + * the page + */ + scrollIntoView() { + var _a3; + if (!this.element) return; + if (this.host) { + if (this.options.onScrollIntoView) this.options.onScrollIntoView(this); + else { + this.host.scrollIntoView({ block: "nearest", inline: "nearest" }); + if (window.mathVirtualKeyboard.visible && window.mathVirtualKeyboard.container === window.document.body) { + const kbdBounds = window.mathVirtualKeyboard.boundingRect; + const mathfieldBounds = this.host.getBoundingClientRect(); + if (mathfieldBounds.bottom > kbdBounds.top) { + (_a3 = window.document.scrollingElement) == null ? void 0 : _a3.scrollBy( + 0, + mathfieldBounds.bottom - kbdBounds.top + 8 + ); + } + } + } + } + if (this.dirty) render(this, { interactive: true }); + const fieldBounds = this.field.getBoundingClientRect(); + let caretPoint = null; + if (this.model.selectionIsCollapsed) + caretPoint = getCaretPoint(this.field); + else { + const selectionBounds = getSelectionBounds(this); + if (selectionBounds.length > 0) { + let maxRight = -Infinity; + let minTop = Infinity; + let maxBottom = -Infinity; + for (const r of selectionBounds) { + if (r.right > maxRight) maxRight = r.right; + if (r.top < minTop) minTop = r.top; + if (r.bottom > maxBottom) maxBottom = r.bottom; + } + const selectionHeight = maxBottom - minTop; + caretPoint = { + x: maxRight + fieldBounds.left - this.field.scrollLeft, + y: minTop + fieldBounds.top - this.field.scrollTop, + height: selectionHeight + }; + } + } + if (this.host && caretPoint) { + const hostBounds = this.host.getBoundingClientRect(); + const SCROLL_PADDING = 20; + const y = caretPoint.y; + const bottom = caretPoint.y + caretPoint.height; + let top = this.host.scrollTop; + if (y < hostBounds.top + SCROLL_PADDING) + top = y - hostBounds.top + this.host.scrollTop - SCROLL_PADDING; + else if (bottom > hostBounds.bottom - SCROLL_PADDING) + top = bottom - hostBounds.bottom + this.host.scrollTop + SCROLL_PADDING; + if (top !== this.host.scrollTop) + this.host.scroll({ top, behavior: "auto" }); + } + if (caretPoint) { + const x = caretPoint.x - window.scrollX; + let left = this.field.scrollLeft; + if (x < fieldBounds.left) + left = x - fieldBounds.left + this.field.scrollLeft - 20; + else if (x > fieldBounds.right) + left = x - fieldBounds.right + this.field.scrollLeft + 20; + this.field.scroll({ top: this.field.scrollTop, left }); + } + } + insert(s, options) { + if (typeof s !== "string") return false; + if (s.length === 0 && ((options == null ? void 0 : options.insertionMode) === "insertBefore" || (options == null ? void 0 : options.insertionMode) === "insertAfter")) + return false; + if (s.length === 0 && this.model.selectionIsCollapsed) return false; + this.flushInlineShortcutBuffer(); + options = options != null ? options : { mode: "math" }; + if (options.focus) this.focus(); + if (options.feedback) { + if (globalThis.MathfieldElement.keypressVibration && canVibrate()) + navigator.vibrate(HAPTIC_FEEDBACK_DURATION); + globalThis.MathfieldElement.playSound("keypress"); + } + if (s === "\\\\") { + addRowAfter(this.model); + } else if (s === "&") addColumnAfter(this.model); + else { + if (this.model.selectionIsCollapsed) { + const style = __spreadValues({}, computeInsertStyle(this)); + if (!/^[a-zA-Z0-9]$/.test(s) && this.styleBias !== "none") { + style.variant = "normal"; + style.variantStyle = void 0; + } + ModeEditor.insert(this.model, s, __spreadValues({ style }, options)); + } else ModeEditor.insert(this.model, s, options); + } + this.snapshot(`insert-${this.model.at(this.model.position).type}`); + requestUpdate(this); + if (options.scrollIntoView) this.scrollIntoView(); + return true; + } + /** + * Switch from the current mode to the new mode, if different. + * Prefix and suffix are optional strings to be inserted before and after + * the mode change, so prefix is interpreted with the current mode and + * suffix with the new mode. + */ + switchMode(mode, prefix = "", suffix = "") { + const canEnterLatexFromEmptyFreeText = (this.options.defaultMode === "free-text" || this.options.defaultMode === "free-math") && (this.model.mode === "free-text" || this.model.mode === "free-math" || this.model.mode === "text") && mode === "latex"; + if (this.model.mode === mode || !this.hasEditableContent && !canEnterLatexFromEmptyFreeText || !this.contentEditable || this.disabled) + return; + const { model } = this; + const previousMode = model.mode; + model.mode = mode; + if (this.host && !this.host.dispatchEvent( + new Event("mode-change", { + bubbles: true, + composed: true, + cancelable: true + }) + )) { + model.mode = previousMode; + return; + } + model.mode = previousMode; + model.deferNotifications( + { + content: Boolean(suffix) || Boolean(prefix), + selection: true, + // Boolean(suffix) || Boolean(prefix), + type: "insertText" + }, + () => { + let cursor = model.at(model.position); + const insertString = (s, options) => { + if (!s) return; + const atoms = isMathMode(model.mode) ? parseLatex(parseMathString(s, { format: "ascii-math" })[1], { + context: this.context + }) : [...s].map((c) => new TextAtom(c, c, {})); + if (options.select) { + const end = cursor.parent.addChildrenAfter(atoms, cursor); + model.setSelection( + model.offsetOf(atoms[0].leftSibling), + model.offsetOf(end) + ); + } else { + model.position = model.offsetOf( + cursor.parent.addChildrenAfter(atoms, cursor) + ); + } + contentChanged = true; + }; + const insertLatexGroup = (latex, options) => { + const atom = new LatexGroupAtom(latex); + cursor.parent.addChildAfter(atom, cursor); + if (options.select) { + model.setSelection( + model.offsetOf(atom.firstChild), + model.offsetOf(atom.lastChild) + ); + } else model.position = model.offsetOf(atom.lastChild); + contentChanged = true; + }; + const getContent = () => { + const format = mode === "latex" ? "latex" : isMathMode(mode) ? "plain-text" : "ascii-math"; + const selRange = range(model.selection); + let content = this.model.getValue(selRange, format); + const atoms = this.model.extractAtoms(selRange); + if (atoms.length === 1 && atoms[0].type === "placeholder") + content = suffix; + cursor = model.at(selRange[0]); + return content; + }; + let contentChanged = false; + this.flushInlineShortcutBuffer(); + this.stopCoalescingUndo(); + complete(this, "accept"); + if (model.selectionIsCollapsed) { + insertString(prefix, { select: false }); + model.mode = mode; + if (mode === "latex") insertLatexGroup(suffix, { select: false }); + else insertString(suffix, { select: false }); + } else { + const content = getContent(); + model.mode = mode; + if (mode === "latex") insertLatexGroup(content, { select: true }); + else insertString(content, { select: true }); + } + requestUpdate(this); + this.undoManager.snapshot(mode === "latex" ? "insert-latex" : "insert"); + return contentChanged; + } + ); + model.mode = mode; + window.mathVirtualKeyboard.update(makeProxy(this)); + } + hasFocus() { + return !this.blurred; + } + focus(options) { + var _a3; + if (this.disabled || this.focusBlurInProgress) return; + if (!this.hasFocus()) { + this.programmaticFocusInProgress = true; + this.onFocus(); + this.model.announce("line"); + } + if (!((_a3 = options == null ? void 0 : options.preventScroll) != null ? _a3 : false)) this.scrollIntoView(); + } + blur() { + this.disconnectFromVirtualKeyboard(); + if (!this.hasFocus()) return; + this.keyboardDelegate.blur(); + } + select() { + this.model.selection = { ranges: [[0, this.model.lastOffset]] }; + this.focus(); + } + applyStyle(inStyle, inOptions = {}) { + var _a3; + let range2; + let operation = "set"; + let silenceNotifications = false; + if (isRange(inOptions)) range2 = inOptions; + else { + if (inOptions.operation === "toggle") operation = "toggle"; + range2 = inOptions.range; + silenceNotifications = (_a3 = inOptions.silenceNotifications) != null ? _a3 : false; + } + if (range2) range2 = this.model.normalizeRange(range2); + if (range2 && range2[0] === range2[1]) range2 = void 0; + const style = validateStyle(this, inStyle); + if (range2 === void 0 && this.model.selectionIsCollapsed) { + if (operation === "set") { + const newStyle2 = __spreadValues({}, this.defaultStyle); + if ("color" in style) delete newStyle2.verbatimColor; + if ("backgroundColor" in style) delete newStyle2.verbatimBackgroundColor; + this.defaultStyle = __spreadValues(__spreadValues({}, newStyle2), style); + this.styleBias = "none"; + requestUpdate(this); + return; + } + const currentStyle = computeInsertStyle(this); + const newStyle = __spreadValues({}, this.defaultStyle); + for (const prop of Object.keys(style)) { + if (currentStyle[prop] === style[prop]) { + if (prop === "color") delete newStyle.verbatimColor; + if (prop === "backgroundColor") + delete newStyle.verbatimBackgroundColor; + delete newStyle[prop]; + } else newStyle[prop] = style[prop]; + } + this.defaultStyle = newStyle; + this.styleBias = "none"; + requestUpdate(this); + return; + } + this.model.deferNotifications( + { content: !silenceNotifications, type: "insertText" }, + () => { + if (range2 === void 0) { + for (const range3 of this.model.selection.ranges) + applyStyle(this.model, range3, style, { operation }); + } else applyStyle(this.model, range2, style, { operation }); + } + ); + requestUpdate(this); + } + toggleContextMenu() { + var _a3; + const menu = this.menu; + if (!menu.visible) return false; + if (menu.state === "open") { + menu.hide(); + return true; + } + const caretBounds = (_a3 = getElementInfo(this, this.model.position)) == null ? void 0 : _a3.bounds; + if (!caretBounds) return false; + const location = { x: caretBounds.right, y: caretBounds.bottom }; + menu.show({ + target: this.element.querySelector("[part=container]"), + location, + onDismiss: () => { + var _a4; + return (_a4 = this.element) == null ? void 0 : _a4.focus(); + } + }); + return true; + } + getPrompt(id) { + const prompt = this.model.findAtom( + (a) => a.type === "prompt" && a.placeholderId === id + ); + console.assert( + prompt !== void 0, + `MathLive {{SDK_VERSION}}: no prompts with matching ID found` + ); + return prompt; + } + getPromptValue(id, format) { + const prompt = this.getPrompt(id); + if (!prompt) return ""; + const first = this.model.offsetOf(prompt.firstChild); + const last = this.model.offsetOf(prompt.lastChild); + return this.model.getValue(first, last, format); + } + getPrompts(filter) { + return this.model.atoms.filter((a) => { + if (a.type !== "prompt") return false; + if (!filter) return true; + if (filter.id && a.placeholderId !== filter.id) return false; + if (filter.locked && a.locked !== filter.locked) return false; + if (filter.correctness === "undefined" && a.correctness) return false; + if (filter.correctness && a.correctness !== filter.correctness) + return false; + return true; + }).map((a) => a.placeholderId); + } + setPromptValue(id, value, insertOptions) { + if (value !== void 0) { + const prompt = this.getPrompt(id); + if (!prompt) { + console.error(`MathLive {{SDK_VERSION}}: unknown prompt ${id}`); + return; + } + const branchRange = this.model.getBranchRange( + this.model.offsetOf(prompt), + "body" + ); + this.model.setSelection(branchRange); + this.insert(value, __spreadProps(__spreadValues({}, insertOptions), { + insertionMode: "replaceSelection" + })); + } + if (insertOptions == null ? void 0 : insertOptions.silenceNotifications) + this.valueOnFocus = this.getValue(); + requestUpdate(this); + } + setPromptState(id, state, locked) { + const prompt = this.getPrompt(id); + if (!prompt) { + console.error(`MathLive {{SDK_VERSION}}: unknown prompt ${id}`); + return; + } + if (state === "undefined") prompt.correctness = void 0; + else if (typeof state === "string") prompt.correctness = state; + if (typeof locked === "boolean") { + prompt.locked = locked; + prompt.captureSelection = locked; + } + requestUpdate(this); + } + getPromptState(id) { + const prompt = this.getPrompt(id); + if (!prompt) { + console.error(`MathLive {{SDK_VERSION}}: unknown prompt ${id}`); + return [void 0, true]; + } + return [prompt.correctness, prompt.locked]; + } + getPromptRange(id) { + const prompt = this.getPrompt(id); + if (!prompt) { + console.error(`MathLive {{SDK_VERSION}}: unknown prompt ${id}`); + return [0, 0]; + } + return this.model.getBranchRange(this.model.offsetOf(prompt), "body"); + } + canUndo() { + return this.undoManager.canUndo(); + } + canRedo() { + return this.undoManager.canRedo(); + } + popUndoStack() { + this.undoManager.pop(); + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.update(makeProxy(this)); + } + snapshot(op) { + var _a3; + if (this.undoManager.snapshot(op)) { + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.update(makeProxy(this)); + (_a3 = this.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("undo-state-change", { + bubbles: true, + composed: true, + detail: { type: "snapshot" } + }) + ); + } + } + stopCoalescingUndo() { + this.undoManager.stopCoalescing(this.model.selection); + } + stopRecording() { + this.undoManager.stopRecording(); + } + startRecording() { + this.undoManager.startRecording(); + } + undo() { + var _a3; + if (!this.undoManager.undo()) return; + (_a3 = this.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("undo-state-change", { + bubbles: true, + composed: true, + detail: { type: "undo" } + }) + ); + } + redo() { + var _a3; + if (!this.undoManager.redo()) return; + (_a3 = this.host) == null ? void 0 : _a3.dispatchEvent( + new CustomEvent("undo-state-change", { + bubbles: true, + composed: true, + detail: { type: "redo" } + }) + ); + } + resetUndo() { + var _a3; + (_a3 = this.undoManager) == null ? void 0 : _a3.reset(); + } + onSelectionDidChange() { + var _a3, _b3; + const model = this.model; + if (model.mathfield.hasFocus()) { + this.keyboardDelegate.setValue( + model.getValue(model.selection, "latex-expanded") + ); + } + if (model.selectionIsCollapsed) { + const latexGroup = getLatexGroup(model); + const pos = model.position; + const cursor = model.at(pos); + const mode = cursor.mode === "text" && this.options.defaultMode === "free-text" ? "free-text" : cursor.mode === "math" && this.options.defaultMode === "free-math" ? "free-math" : (_a3 = cursor.mode) != null ? _a3 : effectiveMode(this.options); + if (latexGroup && (pos < model.offsetOf(latexGroup.firstChild) || pos > model.offsetOf(latexGroup.lastChild))) { + complete(this, "accept", { mode }); + const cursorOffset = model.offsetOf(cursor); + if (cursorOffset >= 0) model.position = cursorOffset; + } else { + const sibling = model.at(pos + 1); + if ((sibling == null ? void 0 : sibling.type) === "first" && sibling.mode === "latex") + model.position = pos + 1; + else if (latexGroup && (sibling == null ? void 0 : sibling.mode) !== "latex") + model.position = pos - 1; + else { + this.switchMode(mode); + } + } + } + (_b3 = this.host) == null ? void 0 : _b3.dispatchEvent( + new Event("selection-change", { + bubbles: true, + composed: true + }) + ); + if (window.mathVirtualKeyboard.visible) + window.mathVirtualKeyboard.update(makeProxy(this)); + updateEnvironmentPopover(this); + } + onContentWillChange(options) { + var _a3, _b3, _c2; + return (_c2 = (_b3 = this.host) == null ? void 0 : _b3.dispatchEvent( + new InputEvent("beforeinput", __spreadProps(__spreadValues({}, options), { + // To work around a bug in WebKit/Safari (the inputType property gets stripped), include the inputType as the 'data' property. (see #1843) + data: options.data ? options.data : (_a3 = options.inputType) != null ? _a3 : "", + cancelable: true, + bubbles: true, + composed: true + })) + )) != null ? _c2 : true; + } + onFocus(options) { + if (this.disabled || this.focusBlurInProgress || !this.blurred) return; + const previouslyFocusedMathfield = __Mathfield._globallyFocusedMathfield; + if (previouslyFocusedMathfield && previouslyFocusedMathfield !== this && !previouslyFocusedMathfield.disabled && previouslyFocusedMathfield.hasFocus()) { + previouslyFocusedMathfield.onBlur({ dispatchEvents: true }); + } + this.focusBlurInProgress = true; + this.blurred = false; + __Mathfield._globallyFocusedMathfield = this; + this.stopCoalescingUndo(); + this.valueOnFocus = this.model.getValue(); + if (this.hasEditablePrompts && !this.model.at(this.model.anchor).parentPrompt) + this.executeCommand("moveToNextPlaceholder"); + render(this, { interactive: true }); + setTimeout(() => { + var _a3, _b3; + if (!isValidMathfield(this)) return; + const suppressEvents = (_a3 = options == null ? void 0 : options.suppressEvents) != null ? _a3 : false; + if (suppressEvents) { + const abortController = new AbortController(); + const signal = abortController.signal; + const captureEvent = (evt) => { + evt.preventDefault(); + evt.stopPropagation(); + }; + for (const event of ["focus", "focusin"]) { + (_b3 = this.host) == null ? void 0 : _b3.addEventListener(event, captureEvent, { + capture: true, + signal + }); + } + this.focusBlurInProgress = false; + this.keyboardDelegate.focus(); + this.connectToVirtualKeyboard(); + setTimeout(() => abortController.abort(), 0); + } else { + this.focusBlurInProgress = false; + this.keyboardDelegate.focus(); + this.connectToVirtualKeyboard(); + setTimeout(() => { + this.programmaticFocusInProgress = false; + }, 0); + } + }, 60); + } + onBlur(options) { + var _a3, _b3, _c2, _d2; + if (this.focusBlurInProgress || this.blurred) return; + this.focusBlurInProgress = true; + this.stopCoalescingUndo(); + this.blurred = true; + if (__Mathfield._globallyFocusedMathfield === this) + __Mathfield._globallyFocusedMathfield = void 0; + if (this.ariaLiveText) this.ariaLiveText.textContent = ""; + hideSuggestionPopover(this); + if (this.model.getValue() !== this.valueOnFocus) { + (_a3 = this.host) == null ? void 0 : _a3.dispatchEvent( + new Event("change", { bubbles: true, composed: true }) + ); + } + this.disconnectFromVirtualKeyboard(); + const dispatchEvents = (_b3 = options == null ? void 0 : options.dispatchEvents) != null ? _b3 : true; + if (dispatchEvents) { + (_c2 = this.host) == null ? void 0 : _c2.dispatchEvent( + new Event("blur", { + bubbles: false, + // DOM 'focus' and 'blur' don't bubble + composed: true + }) + ); + (_d2 = this.host) == null ? void 0 : _d2.dispatchEvent( + new UIEvent("focusout", { + bubbles: true, + // unlike 'blur', focusout does bubble + composed: true + }) + ); + } + requestUpdate(this); + this.focusBlurInProgress = false; + hideEnvironmentPopover(); + if (mathfield_element_default.restoreFocusWhenDocumentFocused) { + const controller = new AbortController(); + const signal = controller.signal; + window.addEventListener( + "blur", + () => { + window.addEventListener( + "focus", + () => { + if (isValidMathfield(this)) this.focus({ preventScroll: true }); + }, + { once: true, signal } + ); + }, + { once: true, signal } + ); + document.addEventListener("focusin", () => controller.abort(), { + once: true + }); + document.addEventListener("click", () => controller.abort(), { + once: true + }); + } + } + onInput(text) { + onInput(this, text); + } + onKeystroke(evt) { + return onKeystroke(this, evt); + } + onCompositionStart(_composition) { + deleteRange(this.model, range(this.model.selection), "insertText"); + const caretPoint = getCaretPoint(this.field); + if (!caretPoint) return; + requestAnimationFrame(() => { + render(this); + this.keyboardDelegate.moveTo( + caretPoint.x, + caretPoint.y - caretPoint.height + ); + }); + } + onCompositionUpdate(composition) { + updateComposition(this.model, composition); + requestUpdate(this); + } + onCompositionEnd(composition) { + removeComposition(this.model); + onInput(this, composition, { simulateKeystroke: true }); + } + onCut(ev) { + if (!this.isSelectionEditable) { + this.model.announce("plonk"); + return; + } + if (this.model.contentWillChange({ inputType: "deleteByCut" })) { + this.stopCoalescingUndo(); + if (ev.clipboardData) ModeEditor.onCopy(this, ev); + else ModeEditor.copyToClipboard(this, "latex"); + deleteRange(this.model, range(this.model.selection), "deleteByCut"); + this.snapshot("cut"); + requestUpdate(this); + } + } + onCopy(ev) { + if (ev.clipboardData) ModeEditor.onCopy(this, ev); + else ModeEditor.copyToClipboard(this, "latex"); + } + onPaste(ev) { + let result = this.isSelectionEditable; + if (result) { + result = ModeEditor.onPaste( + this.model.at(this.model.position).mode, + this, + ev.clipboardData + ); + } + if (!result) this.model.announce("plonk"); + ev.preventDefault(); + ev.stopPropagation(); + return result; + } + onGeometryChange() { + var _a3; + (_a3 = this._menu) == null ? void 0 : _a3.hide(); + updateSuggestionPopoverPosition(this); + updateEnvironmentPopover(this); + } + onWheel(ev) { + const wheelDelta = 5 * ev.deltaX; + if (!Number.isFinite(wheelDelta) || wheelDelta === 0) return; + const field = this.field; + if (wheelDelta < 0 && field.scrollLeft === 0) return; + if (wheelDelta > 0 && field.offsetWidth + field.scrollLeft >= field.scrollWidth) + return; + field.scrollBy({ top: 0, left: wheelDelta }); + ev.preventDefault(); + ev.stopPropagation(); + } + getHTMLElement(atom) { + let target = atom; + while (!target.id && target.hasChildren) target = atom.children[0]; + return this.field.querySelector( + `[data-atom-id="${target.id}"]` + ); + } + get context() { + var _a3, _b3; + return { + registers: (_a3 = this.options.registers) != null ? _a3 : {}, + smartFence: this.smartFence, + letterShapeStyle: this.letterShapeStyle, + minFontScale: this.minFontScale, + maxMatrixCols: this.maxMatrixCols, + placeholderSymbol: (_b3 = this.options.placeholderSymbol) != null ? _b3 : "\u25A2", + colorMap: (name) => this.colorMap(name), + backgroundColorMap: (name) => this.backgroundColorMap(name), + getMacro: (token) => getMacroDefinition( + token, + this.options.macros + ), + atomIdsSettings: { seed: "random", groupNumbers: false } + }; + } + }; + + // src/editor/speech.ts + register2( + { + speak: (mathfield, scope, options) => { + return speak(mathfield, scope, options); + } + }, + { target: "mathfield" } + ); + function speak(mathfield, scope, speakOptions) { + var _a3; + speakOptions = speakOptions != null ? speakOptions : { withHighlighting: false }; + const { model } = mathfield; + function getAtoms(scope2) { + let result = null; + switch (scope2) { + case "all": + result = model.root; + break; + case "selection": + result = model.getAtoms(model.selection); + break; + case "left": { + result = model.getAtoms( + model.offsetOf(model.at(model.position).leftSibling), + model.position + ); + break; + } + case "right": { + result = model.getAtoms( + model.position, + model.offsetOf(model.at(model.position).rightSibling) + ); + break; + } + case "group": + result = model.getAtoms(model.getSiblingsRange(model.position)); + break; + case "parent": { + const { parent } = model.at(model.position); + if (parent == null ? void 0 : parent.parent) result = parent; + else result = model.root; + break; + } + default: + result = model.root; + } + return result; + } + function getFailedSpeech(scope2) { + let result = ""; + switch (scope2) { + case "all": + console.error("Internal failure: speak all failed"); + break; + case "selection": + result = "no selection"; + break; + case "left": + result = "at start"; + break; + case "right": + result = "at end"; + break; + case "group": + console.error("Internal failure: speak group failed"); + break; + case "parent": + result = "no parent"; + break; + default: + console.error('unknown speak_ param value: "' + scope2 + '"'); + break; + } + return result; + } + const mfe = globalThis.MathfieldElement; + const atoms = getAtoms(scope); + if (atoms === null) { + (_a3 = mfe.speakHook) == null ? void 0 : _a3.call(mfe, getFailedSpeech(scope)); + return false; + } + if (speakOptions.withHighlighting || mfe.speechEngine === "amazon") { + mfe.textToSpeechMarkup = globalThis.sre && mfe.textToSpeechRules === "sre" ? "ssml_step" : "ssml"; + } + const text = atomToSpeakableText(atoms); + if (isBrowser() && speakOptions.withHighlighting) { + globalMathLive().readAloudMathfield = mathfield; + render(mathfield, { forHighlighting: true }); + if (mfe.readAloudHook) mfe.readAloudHook(mathfield.field, text); + } else if (mfe.speakHook) mfe.speakHook(text); + return false; + } + function defaultSpeakHook(text) { + var _a3, _b3; + if (!isBrowser()) { + console.log("Speak:", text); + return; + } + const mfe = globalThis.MathfieldElement; + if (!mfe.speechEngine || mfe.speechEngine === "local") { + const utterance = new SpeechSynthesisUtterance(text); + globalThis.speechSynthesis.speak(utterance); + } else if (mfe.speechEngine === "amazon") { + if (!("AWS" in window)) { + console.error( + `MathLive {{SDK_VERSION}}: AWS SDK not loaded. See https://www.npmjs.com/package/aws-sdk` + ); + } else { + const polly = new globalThis.AWS.Polly({ apiVersion: "2016-06-10" }); + const parameters = { + OutputFormat: "mp3", + VoiceId: (_a3 = mfe.speechEngineVoice) != null ? _a3 : "Joanna", + Engine: [ + "Amy", + "Emma", + "Brian", + "Ivy", + "Joanna", + "Kendra", + "Kimberly", + "Salli", + "Joey", + "Justin", + "Matthew" + ].includes((_b3 = mfe.speechEngineVoice) != null ? _b3 : "Joanna") ? "neural" : "standard", + // SampleRate: '24000', + Text: text, + TextType: "ssml" + // SpeechMarkTypes: ['ssml]' + }; + polly.synthesizeSpeech(parameters, (err, data) => { + if (err) { + console.trace( + `MathLive {{SDK_VERSION}}: \`polly.synthesizeSpeech()\` error: ${err}` + ); + } else if (data == null ? void 0 : data.AudioStream) { + const uInt8Array = new Uint8Array(data.AudioStream); + const blob = new Blob([uInt8Array.buffer], { type: "audio/mpeg" }); + const url = URL.createObjectURL(blob); + const audioElement = new Audio(url); + audioElement.play().catch((error) => console.error(error)); + } else console.log("polly.synthesizeSpeech():", data); + }); + } + } else if (mfe.speechEngine === "google") { + console.error( + `MathLive {{SDK_VERSION}}: The Google speech engine is not supported yet. Please come again.` + ); + } + } + + // src/editor/speech-read-aloud.ts + function removeHighlight(element) { + if (!element) return; + element.classList.remove("ML__highlight"); + if (element.children) + for (const child of element.children) removeHighlight(child); + } + function highlightAtomID(element, atomID) { + var _a3; + if (!element) return; + if (!atomID || ((_a3 = element.dataset) == null ? void 0 : _a3.atomId) === atomID) { + element.classList.add("ML__highlight"); + if (element.children && element.children.length > 0) { + [...element.children].forEach((x) => { + if (x instanceof HTMLElement) highlightAtomID(x); + }); + } + } else { + element.classList.remove("ML__highlight"); + if (element.children && element.children.length > 0) { + [...element.children].forEach((x) => { + if (x instanceof HTMLElement) highlightAtomID(x, atomID); + }); + } + } + } + function defaultReadAloudHook(element, text) { + var _a3; + if (!isBrowser()) return; + if (globalThis.MathfieldElement.speechEngine !== "amazon") { + console.error( + `MathLive {{SDK_VERSION}}: Use Amazon TTS Engine for synchronized highlighting` + ); + if (typeof globalThis.MathfieldElement.speakHook === "function") + globalThis.MathfieldElement.speakHook(text); + return; + } + if (!globalThis.AWS) { + console.error( + `MathLive {{SDK_VERSION}}: AWS SDK not loaded. See https://www.npmjs.com/package/aws-sdk` + ); + return; + } + const polly = new globalThis.AWS.Polly({ apiVersion: "2016-06-10" }); + const parameters = { + OutputFormat: "json", + VoiceId: (_a3 = globalThis.MathfieldElement.speechEngineVoice) != null ? _a3 : "Joanna", + Engine: "standard", + // The neural engine does not appear to support ssml marks + Text: text, + TextType: "ssml", + SpeechMarkTypes: ["ssml"] + }; + globalMathLive().readAloudElement = element; + polly.synthesizeSpeech(parameters, (err, data) => { + if (err) { + console.trace( + `MathLive {{SDK_VERSION}}: \`polly.synthesizeSpeech()\` error: ${err}` + ); + return; + } + if (!(data == null ? void 0 : data.AudioStream)) { + console.log("polly.synthesizeSpeech():", data); + return; + } + const response = new TextDecoder("utf-8").decode( + new Uint8Array(data.AudioStream) + ); + globalMathLive().readAloudMarks = response.split("\n").map((x) => x ? JSON.parse(x) : {}); + globalMathLive().readAloudTokens = []; + for (const mark of globalMathLive().readAloudMarks) + if (mark.value) globalMathLive().readAloudTokens.push(mark.value); + globalMathLive().readAloudCurrentMark = ""; + parameters.OutputFormat = "mp3"; + parameters.SpeechMarkTypes = []; + polly.synthesizeSpeech(parameters, (err2, data2) => { + if (err2) { + console.trace( + `MathLive {{SDK_VERSION}}: \`polly.synthesizeSpeech("${text}") error:${err2}` + ); + return; + } + if (!(data2 == null ? void 0 : data2.AudioStream)) return; + const uInt8Array = new Uint8Array(data2.AudioStream); + const blob = new Blob([uInt8Array.buffer], { + type: "audio/mpeg" + }); + const url = URL.createObjectURL(blob); + const global = globalMathLive(); + if (!global.readAloudAudio) { + global.readAloudAudio = new Audio(); + global.readAloudAudio.addEventListener("ended", () => { + const mathfield = global.readAloudMathfield; + global.readAloudStatus = "ended"; + document.body.dispatchEvent( + new Event("read-aloud-status-change", { + bubbles: true, + composed: true + }) + ); + if (mathfield) { + render(mathfield); + global.readAloudElement = null; + global.readAloudMathfield = null; + global.readAloudTokens = []; + global.readAloudMarks = []; + global.readAloudCurrentMark = ""; + } else removeHighlight(global.readAloudElement); + }); + global.readAloudAudio.addEventListener("timeupdate", () => { + let value = ""; + const target = global.readAloudAudio.currentTime * 1e3 + 100; + for (const mark of global.readAloudMarks) + if (mark.time < target) value = mark.value; + if (global.readAloudCurrentMark !== value) { + global.readAloudCurrentToken = value; + if (value && value === global.readAloudFinalToken) + global.readAloudAudio.pause(); + else { + global.readAloudCurrentMark = value; + highlightAtomID( + global.readAloudElement, + global.readAloudCurrentMark + ); + } + } + }); + } else global.readAloudAudio.pause(); + global.readAloudAudio.src = url; + global.readAloudStatus = "playing"; + document.body.dispatchEvent( + new Event("read-aloud-status-change", { + bubbles: true, + composed: true + }) + ); + global.readAloudAudio.play(); + }); + }); + } + + // src/public/mathfield-element.ts + if (!isBrowser()) { + console.error( + `MathLive {{SDK_VERSION}}: this version of the MathLive library is for use in the browser. A subset of the API is available on the server side in the "mathlive-ssr" library. If using server side rendering (with React for example) you may want to do a dynamic import of the MathLive library inside a \`useEffect()\` call.` + ); + } + var gDeferredState = /* @__PURE__ */ new WeakMap(); + var AUDIO_FEEDBACK_VOLUME = 0.5; + var DEPRECATED_OPTIONS = { + letterShapeStyle: "mf.letterShapeStyle = ...", + horizontalSpacingScale: 'Removed. Use `"thinmuskip"`, `"medmuskip"`, and `"thickmuskip"` registers ', + macros: "mf.macros = ...", + registers: "mf.registers = ...", + backgroundColorMap: "mf.backgroundColorMap = ...", + colorMap: "mf.colorMap = ...", + enablePopover: "mf.popoverPolicy = ...", + mathModeSpace: "mf.mathModeSpace = ...", + placeholderSymbol: "mf.placeholderSymbol = ...", + readOnly: "mf.readOnly = ...", + removeExtraneousParentheses: "mf.removeExtraneousParentheses = ...", + scriptDepth: "mf.scriptDepth = ...", + smartFence: "mf.smartFence = ...", + smartMode: "mf.smartMode = ...", + smartSuperscript: "mf.smartSuperscript = ...", + inlineShortcutTimeout: "mf.inlineShortcutTimeout = ...", + inlineShortcuts: "mf.inlineShortcuts = ...", + keybindings: "mf.keybindings = ...", + virtualKeyboardMode: "mf.mathVirtualKeyboardPolicy = ...", + customVirtualKeyboardLayers: "mathVirtualKeyboard.layers = ...", + customVirtualKeyboards: "mathVirtualKeyboard.layouts = ...", + keypressSound: "mathVirtualKeyboard.keypressSound = ...", + keypressVibration: "mathVirtualKeyboard.keypressVibration = ...", + plonkSound: "mathVirtualKeyboard.plonkSound = ...", + virtualKeyboardContainer: "mathVirtualKeyboard.container = ...", + virtualKeyboardLayout: "mathVirtualKeyboard.alphabeticLayout = ...", + virtualKeyboardTheme: "No longer supported", + virtualKeyboardToggleGlyph: "No longer supported", + virtualKeyboardToolbar: "mathVirtualKeyboard.editToolbar = ...", + virtualKeyboards: "Use `mathVirtualKeyboard.layouts`", + speechEngine: "`MathfieldElement.speechEngine`", + speechEngineRate: "`MathfieldElement.speechEngineRate`", + speechEngineVoice: "`MathfieldElement.speechEngineVoice`", + textToSpeechMarkup: "`MathfieldElement.textToSpeechMarkup`", + textToSpeechRules: "`MathfieldElement.textToSpeechRules`", + textToSpeechRulesOptions: "`MathfieldElement.textToSpeechRulesOptions`", + readAloudHook: "`MathfieldElement.readAloudHook`", + speakHook: "`MathfieldElement.speakHook`", + computeEngine: "`MathfieldElement.computeEngine`", + fontsDirectory: "`MathfieldElement.fontsDirectory`", + soundsDirectory: "`MathfieldElement.soundsDirectory`", + createHTML: "`MathfieldElement.createHTML`", + onExport: "`mf.onExport`", + onInlineShortcut: "`mf.onInlineShortcut`", + onScrollIntoView: "`mf.onScrollIntoView`", + locale: "MathfieldElement.locale = ...", + strings: "MathfieldElement.strings = ...", + decimalSeparator: "MathfieldElement.decimalSeparator = ...", + fractionNavigationOrder: "MathfieldElement.fractionNavigationOrder = ..." + }; + var _MathfieldElement = class _MathfieldElement extends HTMLElement { + /** + * To create programmatically a new mathfield use: + * + ```javascript + let mfe = new MathfieldElement(); + + // Set initial value and options + mfe.value = "\\frac{\\sin(x)}{\\cos(x)}"; + + // Options can be set either as an attribute (for simple options)... + mfe.setAttribute("letter-shape-style", "french"); + + // ... or using properties + mfe.letterShapeStyle = "french"; + + // Attach the element to the DOM + document.body.appendChild(mfe); + ``` + */ + constructor(options) { + super(); + /** @internal */ + this._observer = null; + if (options) { + const warnings = []; + for (const key of Object.keys(options)) { + if (DEPRECATED_OPTIONS[key]) { + if (DEPRECATED_OPTIONS[key].startsWith("mf.")) { + if (!DEPRECATED_OPTIONS[key].startsWith(`mf.${key}`)) { + const newName = DEPRECATED_OPTIONS[key].match(/([a-zA-Z]+) =/); + warnings.push( + `Option \`${key}\` has been renamed \`${newName[1]}\`` + ); + } else { + warnings.push( + `Option \`${key}\` cannot be used as a constructor option. Use ${DEPRECATED_OPTIONS[key]}` + ); + } + } else { + warnings.push( + `Option \`${key}\` cannot be used as a constructor option. Use ${DEPRECATED_OPTIONS[key]}` + ); + } + } + } + if (warnings.length > 0) { + console.group( + `%cMathLive {{SDK_VERSION}}: %cInvalid Options`, + "color:#12b; font-size: 1.1rem", + "color:#db1111; font-size: 1.1rem" + ); + console.warn( + `Some of the options passed to \`new MathfieldElement(...)\` are invalid. + See mathfield/changelog/ for details.` + ); + for (const warning of warnings) console.warn(warning); + console.groupEnd(); + } + } + if (isElementInternalsSupported()) { + this._internals = this.attachInternals(); + this._internals["role"] = "math"; + this._internals.ariaLabel = "math input field"; + this._internals.ariaMultiLine = "false"; + } + this.attachShadow({ mode: "open", delegatesFocus: true }); + if (this.shadowRoot && "adoptedStyleSheets" in this.shadowRoot) { + this.shadowRoot.adoptedStyleSheets = [ + getStylesheet("core"), + getStylesheet("mathfield"), + getStylesheet("mathfield-element"), + getStylesheet("ui"), + getStylesheet("menu") + ]; + this.shadowRoot.appendChild(document.createElement("span")); + const slot = document.createElement("slot"); + slot.style.display = "none"; + this.shadowRoot.appendChild(slot); + } else { + this.shadowRoot.innerHTML = "'; + } + if (options) this._setOptions(options); + } + /** @internal */ + static get formAssociated() { + return isElementInternalsSupported(); + } + /** + * Private lifecycle hooks. + * If adding a 'boolean' attribute, add its default value to getOptionsFromAttributes + * @internal + */ + static get optionsAttributes() { + return { + "default-mode": "string", + "letter-shape-style": "string", + "min-font-scale": "number", + "max-matrix-cols": "number", + "popover-policy": "string", + "math-mode-space": "string", + "read-only": "boolean", + "remove-extraneous-parentheses": "on/off", + "smart-fence": "on/off", + "smart-mode": "on/off", + "smart-superscript": "on/off", + "inline-shortcut-timeout": "string", + "script-depth": "string", + "placeholder": "string", + "virtual-keyboard-target-origin": "string", + "math-virtual-keyboard-policy": "string" + }; + } + /** + * Custom elements lifecycle hooks + * @internal + */ + static get observedAttributes() { + return [ + ...Object.keys(this.optionsAttributes), + "contenteditable", + // Global attribute + "disabled", + // Global attribute + "readonly", + // A semi-global attribute (not all standard elements support it, but some do) + "read-only" + // Alternate spelling for `readonly` + ]; + } + /** + * A URL fragment pointing to the directory containing the fonts + * necessary to render a formula. + * + * These fonts are available in the `/fonts` directory of the npm package. + * + * Customize this value to reflect where you have copied these fonts, + * or to use the CDN version. + * + * The default value is `"./fonts"`. Use `null` to prevent + * any fonts from being loaded. + * + * Changing this setting after the mathfield has been created will have + * no effect. + * + * ```javascript + * { + * // Use the CDN version + * fontsDirectory: '' + * } + * ``` + * + * ```javascript + * { + * // Use a directory called "fonts", located next to the + * // `mathlive.js` (or `mathlive.mjs`) file. + * fontsDirectory: './fonts' + * } + * ``` + * + * ```javascript + * { + * // Use a directory located at the root of your website + * fontsDirectory: 'https://example.com/fonts' + * } + * ``` + * + */ + static get fontsDirectory() { + return this._fontsDirectory; + } + static set fontsDirectory(value) { + if (value !== this._fontsDirectory) { + this._fontsDirectory = value; + reloadFonts(); + } + } + /** @internal */ + get fontsDirectory() { + throw new Error("Use MathfieldElement.fontsDirectory instead"); + } + /** @internal */ + set fontsDirectory(_value) { + throw new Error("Use MathfieldElement.fontsDirectory instead"); + } + /** + * A URL fragment pointing to the directory containing the optional + * sounds used to provide feedback while typing. + * + * Some default sounds are available in the `/dist/sounds` directory of the SDK. + * + * Use `null` to prevent any sound from being loaded. + * @category Virtual Keyboard + */ + static get soundsDirectory() { + return this._soundsDirectory; + } + static set soundsDirectory(value) { + this._soundsDirectory = value; + this.audioBuffers = {}; + } + /** @internal */ + get soundsDirectory() { + throw new Error("Use MathfieldElement.soundsDirectory instead"); + } + /** @internal */ + set soundsDirectory(_value) { + throw new Error("Use MathfieldElement.soundsDirectory instead"); + } + /** + * When a key on the virtual keyboard is pressed, produce a short audio + * feedback. + * + * If the property is set to a `string`, the same sound is played in all + * cases. Otherwise, a distinct sound is played: + * + * - `delete` a sound played when the delete key is pressed + * - `return` ... when the return/tab key is pressed + * - `spacebar` ... when the spacebar is pressed + * - `default` ... when any other key is pressed. This property is required, + * the others are optional. If they are missing, this sound is played as + * well. + * + * The value of the properties should be either a string, the name of an + * audio file in the `soundsDirectory` directory or `null` to suppress + * the sound. + * + * If the `soundsDirectory` is `null`, no sound will be played. + * + * @category Virtual Keyboard + */ + static get keypressSound() { + return this._keypressSound; + } + static set keypressSound(value) { + var _a3, _b3, _c2; + this.audioBuffers = {}; + if (value === null) { + this._keypressSound = { + spacebar: null, + return: null, + delete: null, + default: null + }; + } else if (typeof value === "string") { + this._keypressSound = { + spacebar: value, + return: value, + delete: value, + default: value + }; + } else if (typeof value === "object" && "default" in value) { + this._keypressSound = { + spacebar: (_a3 = value.spacebar) != null ? _a3 : value.default, + return: (_b3 = value.return) != null ? _b3 : value.default, + delete: (_c2 = value.delete) != null ? _c2 : value.default, + default: value.default + }; + } + } + /** + * Sound played to provide feedback when a command has no effect, for example + * when pressing the spacebar at the root level. + * + * The property is either: + * - a string, the name of an audio file in the `soundsDirectory` directory + * - `null` to turn off the sound + * + * If the `soundsDirectory` is `null`, no sound will be played. + * + */ + static get plonkSound() { + return this._plonkSound; + } + static set plonkSound(value) { + this.audioBuffers = {}; + this._plonkSound = value; + } + /** @internal */ + static get audioContext() { + if (!this._audioContext) this._audioContext = new AudioContext(); + return this._audioContext; + } + // @todo https://github.com/microsoft/TypeScript/issues/30024 + /** + * Indicates which speech engine to use for speech output. + * + * Use `local` to use the OS-specific TTS engine. + * + * Use `amazon` for Amazon Text-to-Speech cloud API. You must include the + * AWS API library and configure it with your API key before use. + * + * **See** + * {@link mathfield/guides/speech/ | Guide: Speech} + * @category Speech + */ + static get speechEngine() { + return this._speechEngine; + } + static set speechEngine(value) { + this._speechEngine = value; + } + /** + * Sets the speed of the selected voice. + * + * One of `x-slow`, `slow`, `medium`, `fast`, `x-fast` or a value as a + * percentage. + * + * Range is `20%` to `200%` For example `200%` to indicate a speaking rate + * twice the default rate. + * @category Speech + */ + static get speechEngineRate() { + return this._speechEngineRate; + } + static set speechEngineRate(value) { + this._speechEngineRate = value; + } + /** + * Indicates the voice to use with the speech engine. + * + * This is dependent on the speech engine. For Amazon Polly, see here: + * https://docs.aws.amazon.com/polly/latest/dg/voicelist.html + * + * @category Speech + */ + static get speechEngineVoice() { + return this._speechEngineVoice; + } + static set speechEngineVoice(value) { + this._speechEngineVoice = value; + } + /** + * The markup syntax to use for the output of conversion to spoken text. + * + * Possible values are `ssml` for the SSML markup or `mac` for the macOS + * markup, i.e. `[[ltr]]`. + * @category Speech + * + */ + static get textToSpeechMarkup() { + return this._textToSpeechMarkup; + } + static set textToSpeechMarkup(value) { + this._textToSpeechMarkup = value; + } + /** + * Specify which set of text to speech rules to use. + * + * A value of `mathlive` indicates that the simple rules built into MathLive + * should be used. + * + * A value of `sre` indicates that the Speech Rule Engine from Volker Sorge + * should be used. + * + * **(Caution)** SRE is not included or loaded by MathLive. For this option to + * work SRE should be loaded separately. + * + * **See** + * {@link mathfield/guides/speech/ | Guide: Speech} + * @category Speech + */ + static get textToSpeechRules() { + return this._textToSpeechRules; + } + static set textToSpeechRules(value) { + this._textToSpeechRules = value; + } + /** + * A set of key/value pairs that can be used to configure the speech rule + * engine. + * + * Which options are available depends on the speech rule engine in use. + * There are no options available with MathLive's built-in engine. The + * options for the SRE engine are documented + * {@link https://github.com/zorkow/speech-rule-engine | here} + * @category Speech + */ + static get textToSpeechRulesOptions() { + return this._textToSpeechRulesOptions; + } + static set textToSpeechRulesOptions(value) { + this._textToSpeechRulesOptions = value; + } + /** + * The locale (language + region) to use for string localization. + * + * If none is provided, the locale of the browser is used. + * @category Localization + * + */ + static get locale() { + return l10n.locale; + } + static set locale(value) { + if (value === "auto") value = navigator.language.slice(0, 5); + l10n.locale = value; + } + /** @internal */ + get locale() { + throw new Error("Use MathfieldElement.locale instead"); + } + /** @internal */ + set locale(_value) { + throw new Error("Use MathfieldElement.locale instead"); + } + /** + * An object whose keys are a locale string, and whose values are an object of + * string identifier to localized string. + * + * **Example** + * + ```js example + mf.strings = { + "fr-CA": { + "tooltip.undo": "Annuler", + "tooltip.redo": "Refaire", + } + } + ``` + * + * If the locale is already supported, this will override the existing + * strings. If the locale is not supported, it will be added. + * + * @category Localization + */ + static get strings() { + return l10n.strings; + } + static set strings(value) { + l10n.merge(value); + } + /** @internal */ + get strings() { + throw new Error("Use MathfieldElement.strings instead"); + } + /** @internal */ + set strings(_val) { + throw new Error("Use MathfieldElement.strings instead"); + } + /** + * The symbol used to separate the integer part from the fractional part of a + * number. + * + * When `","` is used, the corresponding LaTeX string is `{,}`, in order + * to ensure proper spacing (otherwise an extra gap is displayed after the + * comma). + * + * This affects: + * - what happens when the `,` key is pressed (if `decimalSeparator` is + * `","`, the `{,}` LaTeX string is inserted when following some digits) + * - the label and behavior of the "." key in the default virtual keyboard + * + * **Default**: `"."` + * @category Localization + */ + static get decimalSeparator() { + return this._decimalSeparator; + } + static set decimalSeparator(value) { + this._decimalSeparator = value; + if (this._computeEngine) { + console.warn( + `MathLive {{SDK_VERSION}}: setting MathfieldElement.decimalSeparator after the Compute Engine has been created has no effect on the engine. Reassign MathfieldElement.computeEngine with a freshly configured instance to apply the new separator.` + ); + } + } + /** @internal */ + get decimalSeparator() { + throw new Error("Use MathfieldElement.decimalSeparator instead"); + } + /** @internal */ + set decimalSeparator(_val) { + throw new Error("Use MathfieldElement.decimalSeparator instead"); + } + /** The template used to format numbers in scientific notation. + * The template should include the placeholders `#1` and `#2`, which will + * be replaced by the significand and exponent, respectively. + * + * The template is used when typing a number in scientific notation, e.g. + * `1.23e4`, which will be rendered as `1.23×10^4`. + * + * **Default**: `'#1\\times10^{#2}'` + * + * Other common formats include: + * - `'#1\\,\\mathrm{E}\\mathop{#2}'` (e.g. `1.23\,\mathrm{E}\mathop{-4}`) + * + * @category Localization + */ + static set scientificNotationTemplate(value) { + this._scientificNotationTemplate = value; + } + static get scientificNotationTemplate() { + return this._scientificNotationTemplate; + } + /** + * When using the keyboard to navigate a fraction, the order in which the + * numerator and navigator are traversed: + * - `"numerator-denominator"`: first the elements in the numerator, then + * the elements in the denominator. + * - `"denominator-numerator"`: first the elements in the denominator, then + * the elements in the numerator. In some East-Asian cultures, fractions + * are read and written denominator first ("fēnzhī"). With this option + * the keyboard navigation follows this convention. + * + * **Default**: `"numerator-denominator"` + * @category Localization + */ + static get fractionNavigationOrder() { + return _MathEnvironment.fractionNavigationOrder; + } + static set fractionNavigationOrder(s) { + if (s !== "numerator-denominator" && s !== "denominator-numerator") + throw new Error("Invalid value"); + if (_MathEnvironment.fractionNavigationOrder === s) return; + _MathEnvironment.fractionNavigationOrder = s; + reparseAllMathfields(); + } + /** + * A custom compute engine instance. If none is provided, a default one is + * used. If `null` is specified, no compute engine is used. + */ + static get computeEngine() { + var _a3, _b3; + if (this._computeEngine === void 0) { + const globalComputeEngine = window[Symbol.for("io.cortexjs.compute-engine")]; + const ComputeEngineCtor = globalComputeEngine == null ? void 0 : globalComputeEngine.ComputeEngine; + if (!ComputeEngineCtor) return null; + this._computeEngine = new ComputeEngineCtor(); + if (this._computeEngine && this.decimalSeparator === ",") { + const [major, minor] = String((_a3 = globalComputeEngine == null ? void 0 : globalComputeEngine.version) != null ? _a3 : "").split(".").map((x) => parseInt(x, 10)); + if (major > 0 || major === 0 && minor >= 58) { + this._computeEngine.latexOptions = __spreadProps(__spreadValues({}, this._computeEngine.latexOptions), { + decimalSeparator: "{,}" + }); + } + } + } + return (_b3 = this._computeEngine) != null ? _b3 : null; + } + static set computeEngine(value) { + this._computeEngine = value; + } + /** @internal */ + get computeEngine() { + throw new Error("Use MathfieldElement.computeEngine instead"); + } + /** @internal */ + set computeEngine(_val) { + throw new Error("Use MathfieldElement.computeEngine instead"); + } + static get isFunction() { + if (typeof this._isFunction !== "function") return () => false; + return this._isFunction; + } + static set isFunction(value) { + this._isFunction = value; + reparseAllMathfields(); + } + static async loadSound(sound) { + delete this.audioBuffers[sound]; + let soundFile = ""; + switch (sound) { + case "keypress": + soundFile = this._keypressSound.default; + break; + case "return": + soundFile = this._keypressSound.return; + break; + case "spacebar": + soundFile = this._keypressSound.spacebar; + break; + case "delete": + soundFile = this._keypressSound.delete; + break; + case "plonk": + soundFile = this.plonkSound; + break; + } + if (typeof soundFile !== "string") return; + soundFile = soundFile.trim(); + const soundsDirectory = this.soundsDirectory; + if (soundsDirectory === void 0 || soundsDirectory === null || soundsDirectory === "null" || soundFile === "none" || soundFile === "null") + return; + try { + const response = await fetch( + await resolveUrl(`${soundsDirectory}/${soundFile}`) + ); + const arrayBuffer = await response.arrayBuffer(); + const audioBuffer = await this.audioContext.decodeAudioData(arrayBuffer); + this.audioBuffers[sound] = audioBuffer; + } catch (e) { + } + } + static async playSound(name) { + if (this.audioContext.state === "suspended" || this.audioContext.state === "interrupted") + await this.audioContext.resume(); + if (!this.audioBuffers[name]) await this.loadSound(name); + if (!this.audioBuffers[name]) return; + const soundSource = this.audioContext.createBufferSource(); + soundSource.buffer = this.audioBuffers[name]; + const gainNode = this.audioContext.createGain(); + gainNode.gain.value = AUDIO_FEEDBACK_VOLUME; + soundSource.connect(gainNode).connect(this.audioContext.destination); + soundSource.start(); + } + /** @category Menu */ + showMenu(_) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.showMenu(_)) != null ? _b3 : false; + } + /** @internal */ + get mathVirtualKeyboard() { + throw new Error( + "The `mathVirtualKeyboard` property is not available on the MathfieldElement. Use `window.mathVirtualKeyboard` instead." + ); + } + /** @internal */ + onPointerDown() { + window.addEventListener( + "pointerup", + (evt) => { + const mf = this._mathfield; + if (!mf) return; + if (evt.target === this && !mf.disabled) { + this.dispatchEvent( + new MouseEvent("click", { + altKey: evt.altKey, + button: evt.button, + buttons: evt.buttons, + clientX: evt.clientX, + clientY: evt.clientY, + ctrlKey: evt.ctrlKey, + metaKey: evt.metaKey, + movementX: evt.movementX, + movementY: evt.movementY, + relatedTarget: evt.relatedTarget, + screenX: evt.screenX, + screenY: evt.screenY, + shiftKey: evt.shiftKey + }) + ); + const offset = this.getOffsetFromPoint(evt.clientX, evt.clientY); + if (offset >= 0) _MathfieldElement.openUrl(getHref(mf, offset)); + if (evt.pointerType === "touch" && this.selectionIsCollapsed) + this.position = offset; + } + }, + { once: true } + ); + } + /** + * Return the content of the `\placeholder{}` command with the `placeholderId` + * @category Prompts + */ + getPromptValue(placeholderId, format) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.getPromptValue(placeholderId, format)) != null ? _b3 : ""; + } + /** @category Prompts */ + setPromptValue(id, content, insertOptions) { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.setPromptValue(id, content, insertOptions); + } + /** + * Return the selection range for the specified prompt. + * + * This can be used for example to select the content of the prompt. + * + * ```js + * mf.selection = mf.getPromptRange('my-prompt-id'); + * ``` + * + * @category Prompts + * + */ + getPromptRange(id) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.getPromptRange(id)) != null ? _b3 : null; + } + /** Return the id of the prompts matching the filter. + * @category Prompts + */ + getPrompts(filter) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.getPrompts(filter)) != null ? _b3 : []; + } + /** True if the mathfield has editable content, such as unlocked prompts */ + get hasEditableContent() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.hasEditableContent) != null ? _b3 : false; + } + /** @internal */ + get form() { + var _a3; + return (_a3 = this._internals) == null ? void 0 : _a3["form"]; + } + /** @internal */ + get name() { + var _a3; + return (_a3 = this.getAttribute("name")) != null ? _a3 : ""; + } + /** @internal */ + get type() { + return this.localName; + } + get mode() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.model.mode) != null ? _b3 : this.defaultMode === "free-text" || this.defaultMode === "free-math" ? this.defaultMode : this.defaultMode === "text" ? "text" : "math"; + } + set mode(value) { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.switchMode(value); + } + /** + * If the Compute Engine library is available, return a boxed MathJSON expression representing the value of the mathfield. + * + * To load the Compute Engine library, use: + * ```js + import 'https://esm.run/@cortex-js/compute-engine'; + ``` + * + * @category Accessing and changing the content + */ + get expression() { + if (!this._mathfield) return void 0; + if (!window[Symbol.for("io.cortexjs.compute-engine")]) { + console.error( + `MathLive {{SDK_VERSION}}: The CortexJS Compute Engine library is not available. + + Load the library, for example with: + + import "https://esm.run/@cortex-js/compute-engine"` + ); + return null; + } + return this._mathfield.expression; + } + set expression(mathJson) { + var _a3, _b3; + if (!this._mathfield) return; + const latex = (_b3 = (_a3 = _MathfieldElement.computeEngine) == null ? void 0 : _a3.box(mathJson).latex) != null ? _b3 : null; + if (latex !== null) this._mathfield.setValue(latex); + if (!window[Symbol.for("io.cortexjs.compute-engine")]) { + console.error( + `MathLive {{SDK_VERSION}}: The Compute Engine library is not available. + + Load the library, for example with: + + import "https://esm.run/@cortex-js/compute-engine"` + ); + } + } + /** + * Return an array of LaTeX syntax errors, if any. + * @category Accessing and changing the content + */ + get errors() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.errors) != null ? _b3 : []; + } + _getOptions(keys) { + if (this._mathfield) return get(this._mathfield.options, keys); + if (!gDeferredState.has(this)) return null; + return __spreadValues({}, get( + __spreadValues(__spreadValues({}, getDefault()), update(gDeferredState.get(this).options)), + keys + )); + } + getOptions(keys) { + console.warn( + `%cMathLive {{SDK_VERSION}}: %cDeprecated Usage%c + \`mf.getOptions()\` is deprecated. Read the property directly on the mathfield instead. + See mathfield/changelog/ for details.`, + "color:#12b; font-size: 1.1rem", + "color:#db1111; font-size: 1.1rem", + "color: inherit, font-size: 1rem" + ); + if (this._mathfield) return get(this._mathfield.options, keys); + if (!gDeferredState.has(this)) return null; + return get( + __spreadValues(__spreadValues({}, getDefault()), update(gDeferredState.get(this).options)), + keys + ); + } + /** @internal */ + reflectAttributes() { + const defaultOptions = getDefault(); + const options = this._getOptions(); + Object.keys(_MathfieldElement.optionsAttributes).forEach((x) => { + const prop = x === "placeholder" ? "contentPlaceholder" : toCamelCase(x); + if (_MathfieldElement.optionsAttributes[x] === "on/off") { + if (defaultOptions[prop] !== options[prop]) + this.setAttribute(x, options[prop] ? "on" : "off"); + else this.removeAttribute(x); + } else if (defaultOptions[prop] !== options[prop]) { + if (_MathfieldElement.optionsAttributes[x] === "boolean") { + if (options[prop]) { + this.setAttribute(x, ""); + } else { + this.removeAttribute(x); + } + } else { + if (typeof options[prop] === "string" || typeof options[prop] === "number") + this.setAttribute(x, options[prop].toString()); + } + } + }); + } + /** + * @category Options + * @deprecated + */ + getOption(key) { + console.warn( + `%cMathLive {{SDK_VERSION}}: %cDeprecated Usage%c + \`mf.getOption()\` is deprecated. Read the property directly on the mathfield instead. + See mathfield/changelog/ for details.`, + "color:#12b; font-size: 1.1rem", + "color:#db1111; font-size: 1.1rem", + "color: inherit, font-size: 1rem" + ); + return this._getOptions([key])[key]; + } + /** @internal */ + _getOption(key) { + return this._getOptions([key])[key]; + } + /** @internal */ + _setOptions(options) { + if (this._mathfield) this._mathfield.setOptions(options); + else if (gDeferredState.has(this)) { + const mergedOptions = __spreadValues(__spreadValues({}, gDeferredState.get(this).options), options); + gDeferredState.set(this, __spreadProps(__spreadValues({}, gDeferredState.get(this)), { + selection: { ranges: mergedOptions.readOnly ? [[0, 0]] : [[0, -1]] }, + options: mergedOptions + })); + } else { + gDeferredState.set(this, { + value: void 0, + selection: { ranges: [[0, 0]] }, + options, + menuItems: void 0 + }); + } + this.reflectAttributes(); + } + /** + * @category Options + * @deprecated + */ + setOptions(options) { + console.group( + `%cMathLive {{SDK_VERSION}}: %cDeprecated Usage`, + "color:#12b; font-size: 1.1rem", + "color:#db1111; font-size: 1.1rem" + ); + console.warn( + ` \`mf.setOptions()\` is deprecated. Set the property directly on the mathfield instead. + See mathfield/changelog/ for details.` + ); + for (const key of Object.keys(options)) { + if (DEPRECATED_OPTIONS[key]) { + console.warn( + `\`mf.setOptions({${key}:...})\` -> ${DEPRECATED_OPTIONS[key]}` + ); + } + } + console.groupEnd(); + this._setOptions(options); + } + executeCommand(...args) { + var _a3, _b3; + let selector; + if (args.length === 1) + selector = args[0]; + else selector = [args[0], ...args.slice(1)]; + if (selector) return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.executeCommand(selector)) != null ? _b3 : false; + throw new Error("Invalid selector"); + } + getValue(arg1, arg2, arg3) { + var _a3, _b3; + if (this._mathfield) + return this._mathfield.model.getValue(arg1, arg2, arg3); + if (gDeferredState.has(this)) { + let start; + let end; + let format = void 0; + if (isSelection(arg1)) { + [start, end] = arg1.ranges[0]; + format = arg2; + } else if (isRange(arg1)) { + [start, end] = arg1; + format = arg2; + } else if (isOffset(arg1) && isOffset(arg2)) { + start = arg1; + end = arg2; + format = arg3; + } else { + start = 0; + end = -1; + format = arg1; + } + if ((format === void 0 || format === "latex") && start === 0 && end === -1) + return (_b3 = (_a3 = gDeferredState.get(this).value) != null ? _a3 : this.textContent) != null ? _b3 : ""; + } + return ""; + } + /** + * Set the content of the mathfield to the text interpreted as a + * LaTeX expression. + * + * @category Accessing and changing the content + */ + setValue(value, options) { + if (this._mathfield && value !== void 0) { + const currentValue = this._mathfield.model.getValue(); + if (currentValue === value) return; + options != null ? options : options = { silenceNotifications: true, mode: "math" }; + this._mathfield.setValue(value, options); + return; + } + if (gDeferredState.has(this)) { + const options2 = gDeferredState.get(this).options; + gDeferredState.set(this, { + value, + selection: { ranges: [[-1, -1]], direction: "forward" }, + options: options2, + menuItems: void 0 + }); + return; + } + const attrOptions = getOptionsFromAttributes(this); + gDeferredState.set(this, { + value, + selection: { ranges: [[-1, -1]], direction: "forward" }, + options: attrOptions, + menuItems: void 0 + }); + } + /** + * Return true if the mathfield is currently focused (responds to keyboard + * input). + * + * @category Focus + * + */ + hasFocus() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.hasFocus()) != null ? _b3 : false; + } + /** + * Sets the focus to the mathfield (will respond to keyboard input). + * + * @category Focus + * + */ + focus() { + var _a3; + if (this.disabled) return; + (_a3 = this._mathfield) == null ? void 0 : _a3.focus(); + } + /** + * Remove the focus from the mathfield (will no longer respond to keyboard + * input). + * + * @category Focus + * + */ + blur() { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.blur(); + } + /** + * Select the content of the mathfield. + * @category Selection + */ + select() { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.select(); + } + /** + * Insert a block of text at the current insertion point. + * + * This method can be called explicitly or invoked as a selector with + * `executeCommand("insert")`. + * + * After the insertion, the selection will be set according to the + * `options.selectionMode`. + + * @category Accessing and changing the content + */ + insert(s, options) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.insert(s, options)) != null ? _b3 : false; + } + /** + * Update the style (color, bold, italic, etc...) of the selection or sets + * the style to be applied to future input. + * + * If there is no selection and no range is specified, the style will + * apply to the next character typed. + * + * If a range is specified, the style is applied to the range, otherwise, + * if there is a selection, the style is applied to the selection. + * + * If the operation is `"toggle"` and the range already has this style, + * remove it. If the range + * has the style partially applied (i.e. only some sections), remove it from + * those sections, and apply it to the entire range. + * + * If the operation is `"set"`, the style is applied to the range, + * whether it already has the style or not. + * + * The default operation is `"set"`. + * + * + * + * @category Styles + */ + applyStyle(style, options) { + var _a3; + return (_a3 = this._mathfield) == null ? void 0 : _a3.applyStyle(style, options); + } + /** + * If there is a selection, return if all the atoms in the selection, + * some of them or none of them match the `style` argument. + * + * If there is no selection, return 'all' if the current implicit style + * (determined by a combination of the style of the previous atom and + * the current style) matches the `style` argument, 'none' if it does not. + * + * @category Styles + */ + queryStyle(style) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.queryStyle(style)) != null ? _b3 : "none"; + } + /** The offset closest to the location `(x, y)` in viewport coordinate. + * + * **`bias`**: if `0`, the vertical midline is considered to the left or + * right sibling. If `-1`, the left sibling is favored, if `+1`, the right + * sibling is favored. + * + * @category Selection + */ + getOffsetFromPoint(x, y, options) { + if (!this._mathfield) return -1; + return offsetFromPoint(this._mathfield, x, y, options); + } + getElementInfo(offset) { + return getElementInfo(this._mathfield, offset); + } + /** + * Reset the undo stack + * + * @category Undo + */ + resetUndo() { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.resetUndo(); + } + /** + * Return whether there are undoable items + * @category Undo + */ + canUndo() { + if (!this._mathfield) return false; + return this._mathfield.canUndo(); + } + /** + * Return whether there are redoable items + * @category Undo + */ + canRedo() { + if (!this._mathfield) return false; + return this._mathfield.canRedo(); + } + /** @internal */ + handleEvent(evt) { + var _a3, _b3, _c2, _d2, _e; + if (Scrim.state !== "closed") return; + if (((_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.menu) == null ? void 0 : _b3.state) !== "closed") return; + if (evt.type === "pointerdown") this.onPointerDown(); + if (evt.type === "focus") return; + if (evt.type !== "blur") return; + const touch = isTouchCapable(); + if (touch && ((_c2 = window == null ? void 0 : window.mathVirtualKeyboard) == null ? void 0 : _c2.visible)) return; + if (((_d2 = Scrim.scrim) == null ? void 0 : _d2.state) !== "closed" || touch && isInIframe()) return; + (_e = this._mathfield) == null ? void 0 : _e.onBlur({ dispatchEvents: false }); + } + /** + * Custom elements lifecycle hooks + * @internal + */ + connectedCallback() { + var _a3, _b3, _c2, _d2; + const shadowRoot = this.shadowRoot; + const host = shadowRoot.host; + const computedStyle = window.getComputedStyle(this); + const userSelect = computedStyle.userSelect !== "none"; + if (userSelect) host.addEventListener("pointerdown", this, true); + else { + const span = shadowRoot.querySelector("span"); + span.style.pointerEvents = "none"; + } + host.addEventListener("focus", this, true); + host.addEventListener("blur", this, true); + this._observer = new MutationObserver(() => { + var _a4; + this.value = (_a4 = this.textContent) != null ? _a4 : ""; + }); + this._observer.observe(this, { + childList: true, + characterData: true, + subtree: true + }); + if (!isElementInternalsSupported()) { + if (!this.hasAttribute("role")) this.setAttribute("role", "math"); + if (!this.hasAttribute("aria-label")) + this.setAttribute("aria-label", "math input field"); + this.setAttribute( + "aria-multiline", + this.defaultMode === "free-text" || this.defaultMode === "free-math" ? "true" : "false" + ); + } + if (userSelect && !this.hasAttribute("contenteditable")) + this.setAttribute("contenteditable", "true"); + if (!this.hasAttribute("tabindex")) this.setAttribute("tabindex", "0"); + const slot = shadowRoot.querySelector("slot:not([name])"); + if (slot) { + try { + this._style = slot.assignedElements().filter((x) => x.tagName.toLowerCase() === "style").map((x) => x.textContent).join(""); + } catch (error) { + console.error(error); + } + } + if (this._style) { + const styleElement = document.createElement("style"); + styleElement.textContent = this._style; + shadowRoot.appendChild(styleElement); + } + let value = ""; + if (this.hasAttribute("value")) value = this.getAttribute("value"); + else { + value = (_a3 = slot == null ? void 0 : slot.assignedNodes().map((x) => x.nodeType === 3 ? x.textContent : "").join("").trim()) != null ? _a3 : ""; + } + this._mathfield = new _Mathfield( + shadowRoot.querySelector(":host > span"), + __spreadProps(__spreadValues({}, (_c2 = (_b3 = gDeferredState.get(this)) == null ? void 0 : _b3.options) != null ? _c2 : getOptionsFromAttributes(this)), { + eventSink: this, + value + }) + ); + if (!gDeferredState.has(this)) { + this.upgradeProperty("disabled"); + this.upgradeProperty("readonly"); + for (const attr of Object.keys(_MathfieldElement.optionsAttributes)) + this.upgradeProperty(toCamelCase(attr)); + } + if (!((_d2 = this._mathfield) == null ? void 0 : _d2.model)) { + this._mathfield = null; + return; + } + if (gDeferredState.has(this)) { + const mf = this._mathfield; + const state = gDeferredState.get(this); + const menuItems = state.menuItems; + mf.model.deferNotifications({ content: false, selection: false }, () => { + const value2 = state.value; + if (value2 !== void 0) mf.setValue(value2); + mf.model.selection = state.selection; + gDeferredState.delete(this); + }); + if (menuItems) this.menuItems = menuItems; + } + window.queueMicrotask(() => { + if (!this.isConnected) return; + this.dispatchEvent( + new Event("mount", { + cancelable: false, + bubbles: true, + composed: true + }) + ); + }); + void loadFonts(); + } + /** + * Custom elements lifecycle hooks + * @internal + */ + disconnectedCallback() { + var _a3, _b3, _c2; + this.shadowRoot.host.removeEventListener("pointerdown", this, true); + if (!this._mathfield) return; + (_a3 = this._observer) == null ? void 0 : _a3.disconnect(); + this._observer = null; + window.queueMicrotask( + () => ( + // Notify listeners that we have been unmounted + this.dispatchEvent( + new Event("unmount", { + cancelable: false, + bubbles: true, + composed: true + }) + ) + ) + ); + const options = get( + this._mathfield.options, + Object.keys(_MathfieldElement.optionsAttributes).map((x) => toCamelCase(x)) + ); + gDeferredState.set(this, { + value: this._mathfield.getValue(), + selection: this._mathfield.model.selection, + menuItems: (_c2 = (_b3 = this._mathfield.menu) == null ? void 0 : _b3.menuItems) != null ? _c2 : void 0, + options + }); + this._mathfield.dispose(); + this._mathfield = null; + } + /** + * Private lifecycle hooks + * @internal + */ + upgradeProperty(prop) { + if (this.hasOwnProperty(prop)) { + const value = this[prop]; + delete this[prop]; + if (prop === "readonly" || prop === "read-only") prop = "readOnly"; + this[prop] = value; + } + } + /** + * Custom elements lifecycle hooks + * @internal + */ + attributeChangedCallback(name, oldValue, newValue) { + if (oldValue === newValue) return; + const hasValue = newValue !== null; + switch (name) { + case "contenteditable": + requestUpdate(this._mathfield); + break; + case "placeholder": + if (newValue === false) newValue = ""; + this.placeholder = newValue; + break; + case "disabled": + this.disabled = hasValue; + break; + case "read-only": + case "readonly": + this.readOnly = hasValue; + break; + default: + } + } + get readonly() { + return this.hasAttribute("readonly") || this.hasAttribute("read-only"); + } + set readonly(value) { + const isReadonly = Boolean(value); + if (isReadonly) { + this.setAttribute("readonly", ""); + if (isElementInternalsSupported()) this._internals.ariaReadOnly = "true"; + else this.setAttribute("aria-readonly", "true"); + this.setAttribute("aria-readonly", "true"); + } else { + if (isElementInternalsSupported()) this._internals.ariaReadOnly = "false"; + else this.removeAttribute("aria-readonly"); + this.removeAttribute("readonly"); + this.removeAttribute("read-only"); + } + this._setOptions({ readOnly: isReadonly }); + } + get disabled() { + return this.hasAttribute("disabled"); + } + set disabled(value) { + var _a3; + const isDisabled = Boolean(value); + if (isDisabled) this.setAttribute("disabled", ""); + else this.removeAttribute("disabled"); + if (isElementInternalsSupported()) + this._internals.ariaDisabled = isDisabled ? "true" : "false"; + else this.setAttribute("aria-disabled", isDisabled ? "true" : "false"); + if (isDisabled && ((_a3 = this._mathfield) == null ? void 0 : _a3.hasFocus) && window.mathVirtualKeyboard.visible) + this._mathfield.executeCommand("hideVirtualKeyboard"); + } + /** + * The content of the mathfield as a LaTeX expression. + * ```js + * document.querySelector('mf').value = '\\frac{1}{\\pi}' + * ``` + * @category Accessing and changing the content + */ + get value() { + return this.getValue(); + } + set value(value) { + this.setValue(value); + } + /** + * The mode of the element when it is empty: + * - `"math"`: equivalent to `\displaystyle` (display math mode) + * - `"inline-math"`: equivalent to `\inlinestyle` (inline math mode) + * - `"text"`: text mode + * - `"free-text"`: multiline text editing with inline LaTeX + * - `"free-math"`: multiline math editing with inline text islands + * @category Customization + */ + get defaultMode() { + return this._getOption("defaultMode"); + } + set defaultMode(value) { + this._setOptions({ defaultMode: value }); + } + /** + * A dictionary of LaTeX macros to be used to interpret and render the content. + * + * For example, to add a new macro to the default macro dictionary: + * + ```javascript + mf.macros = { + ...mf.macros, + smallfrac: '^{#1}\\!\\!/\\!_{#2}', + }; + ``` + * + * Note that `...mf.macros` is used to keep the existing macros and add to + * them. + * Otherwise, all the macros are replaced with the new definition. + * + * The code above will support the following notation: + * + ```tex + \smallfrac{5}{16} + ``` + @category Macros + */ + get macros() { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + return this._getOption("macros"); + } + set macros(value) { + this._setOptions({ macros: value }); + } + /** + * @inheritDoc Registers + * @category Registers + */ + get registers() { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + const that = this; + return new Proxy( + {}, + { + get: (_, prop) => { + if (typeof prop !== "string") return void 0; + return that._getOption("registers")[prop]; + }, + set(_, prop, value) { + if (typeof prop !== "string") return false; + that._setOptions({ + registers: __spreadProps(__spreadValues({}, that._getOption("registers")), { [prop]: value }) + }); + return true; + }, + ownKeys: () => Reflect.ownKeys(that._getOption("registers")), + getOwnPropertyDescriptor: (_, prop) => { + const value = that._getOption("registers")[prop]; + if (value !== void 0) { + return { + configurable: true, + enumerable: true, + value, + writable: true + }; + } + return void 0; + } + } + ); + } + set registers(value) { + this._setOptions({ registers: value }); + } + /** + * Map a color name as used in commands such as `\textcolor{}{}` or + * `\colorbox{}{}` to a CSS color value. + * + * Use this option to override the standard mapping of colors such as "yellow" + * or "red". + * + * If the name is not one you expected, return `undefined` and the default + * color mapping will be applied. + * + * If a `backgroundColorMap()` function is not provided, the `colorMap()` + * function will be used instead. + * + * If `colorMap()` is not provided, default color mappings are applied. + * + * The following color names have been optimized for a legible foreground + * and background values, and are recommended: + * - `red`, `orange`, `yellow`, `lime`, `green`, `teal`, `blue`, `indigo`, + * `purple`, `magenta`, `black`, `dark-grey`, `grey`, `light-grey`, `white` + * + * @category Customization + */ + get colorMap() { + return this._getOption("colorMap"); + } + set colorMap(value) { + this._setOptions({ colorMap: value }); + } + /** @category Customization */ + get backgroundColorMap() { + return this._getOption("backgroundColorMap"); + } + set backgroundColorMap(value) { + this._setOptions({ backgroundColorMap: value }); + } + /** + * Control the letter shape style: + + | `letterShapeStyle` | xyz | ABC | αβɣ | ΓΔΘ | + | ------------------ | --- | --- | --- | --- | + | `iso` | it | it | it | it | + | `tex` | it | it | it | up | + | `french` | it | up | up | up | + | `upright` | up | up | up | up | + + (it) = italic (up) = upright + + * The default letter shape style is `auto`, which indicates that `french` + * should be used if the locale is "french", and `tex` otherwise. + * + * **Historical Note** + * + * Where do the "french" rules come from? The + * TeX standard font, Computer Modern, is based on Monotype 155M, itself + * based on the Porson greek font which was one of the most widely used + * Greek fonts in english-speaking countries. This font had upright + * capitals, but slanted lowercase. In France, the traditional font for + * greek was Didot, which has both upright capitals and lowercase. + * + * As for roman uppercase, they are recommended by "Lexique des règles + * typographiques en usage à l’Imprimerie Nationale". It should be noted + * that this convention is not universally followed. + * + * @category Customization + */ + get letterShapeStyle() { + return this._getOption("letterShapeStyle"); + } + set letterShapeStyle(value) { + this._setOptions({ letterShapeStyle: value }); + } + /** + * Set the minimum relative font size for nested superscripts and fractions. The value + * should be a number between `0` and `1`. The size is in relative `em` units relative to the + * font size of the `math-field` element. Specifying a value of `0` allows the `math-field` + * to use its default sizing logic. + * + * **Default**: `0` + * + * @category Customization + */ + get minFontScale() { + return this._getOption("minFontScale"); + } + set minFontScale(value) { + this._setOptions({ minFontScale: value }); + } + /** + * Sets the maximum number of columns for the matrix environment. The default is + * 10 columns to match the behavior of the amsmath matrix environment. + * **Default**: `10` + * + * @category Customization + */ + get maxMatrixCols() { + return this._getOption("maxMatrixCols"); + } + set maxMatrixCols(value) { + this._setOptions({ maxMatrixCols: value }); + } + /** + * When `true`, during text input the field will switch automatically between + * 'math' and 'text' mode depending on what is typed and the context of the + * formula. If necessary, what was previously typed will be 'fixed' to + * account for the new info. + * + * For example, when typing "if x >0": + * + * | Type | Interpretation | + * |---:|:---| + * | `i` | math mode, imaginary unit | + * | `if` | text mode, english word "if" | + * | `if x` | all in text mode, maybe the next word is xylophone? | + * | `if x >` | "if" stays in text mode, but now "x >" is in math mode | + * | `if x > 0` | "if" in text mode, "x > 0" in math mode | + * + * **Default**: `false` + * + * Manually switching mode (by typing `alt/option+=`) will temporarily turn + * off smart mode. + * + * + * **Examples** + * + * - `slope = rise/run` + * - `If x > 0, then f(x) = sin(x)` + * - `x^2 + sin (x) when x > 0` + * - `When x<0, x^{2n+1}<0` + * - `Graph x^2 -x+3 =0 for 0<=x<=5` + * - `Divide by x-3 and then add x^2-1 to both sides` + * - `Given g(x) = 4x – 3, when does g(x)=0?` + * - `Let D be the set {(x,y)|0<=x<=1 and 0<=y<=x}` + * - `\int\_{the unit square} f(x,y) dx dy` + * - `For all n in NN` + * + * @category Customization + */ + get smartMode() { + return this._getOption("smartMode"); + } + set smartMode(value) { + this._setOptions({ smartMode: value }); + } + /** + * + * When `true` and an open fence is entered via `typedText()` it will + * generate a contextually appropriate markup, for example using + * `\left...\right` if applicable. + * + * When `false`, the literal value of the character will be inserted instead. + * @category Customization + */ + get smartFence() { + return this._getOption("smartFence"); + } + set smartFence(value) { + this._setOptions({ smartFence: value }); + } + /** + * When `true` and a digit is entered in an empty superscript, the cursor + * leaps automatically out of the superscript. This makes entry of common + * polynomials easier and faster. If entering other characters (for example + * "n+1") the navigation out of the superscript must be done manually (by + * using the cursor keys or the spacebar to leap to the next insertion + * point). + * + * When `false`, the navigation out of the superscript must always be done + * manually. + * @category Customization + */ + get smartSuperscript() { + return this._getOption("smartSuperscript"); + } + set smartSuperscript(value) { + this._setOptions({ smartSuperscript: value }); + } + /** + * This option controls how many levels of subscript/superscript can be entered. For + * example, if `scriptDepth` is "1", there can be one level of superscript or + * subscript. Attempting to enter a superscript while inside a superscript will + * be rejected. Setting a value of 0 will prevent entry of any superscript or + * subscript (but not limits for sum, integrals, etc...) + * + * This can make it easier to enter equations that fit what's expected for the + * domain where the mathfield is used. + * + * To control the depth of superscript and subscript independently, provide an + * array: the first element indicate the maximum depth for subscript and the + * second element the depth of superscript. Thus, a value of `[0, 1]` would + * suppress the entry of subscripts, and allow one level of superscripts. + * @category Customization + */ + get scriptDepth() { + return this._getOption("scriptDepth"); + } + set scriptDepth(value) { + this._setOptions({ scriptDepth: value }); + } + /** + * If `true`, extra parentheses around a numerator or denominator are + * removed automatically. + * + * **Default**: `true` + * @category Customization + */ + get removeExtraneousParentheses() { + return this._getOption("removeExtraneousParentheses"); + } + set removeExtraneousParentheses(value) { + this._setOptions({ removeExtraneousParentheses: value }); + } + /** + * The LaTeX string to insert when the spacebar is pressed (on the physical or + * virtual keyboard). + * + * Use `"\;"` for a thick space, `"\:"` for a medium space, `"\,"` for a + * thin space. + * + * Do not use `" "` (a regular space), as whitespace is skipped by LaTeX + * so this will do nothing. + * + * **Default**: `""` (empty string) + * @category Customization + */ + get mathModeSpace() { + return this._getOption("mathModeSpace"); + } + set mathModeSpace(value) { + this._setOptions({ mathModeSpace: value }); + } + /** + * The symbol used to represent a placeholder in an expression. + * + * **Default**: `▢` `U+25A2 WHITE SQUARE WITH ROUNDED CORNERS` + * + * @category Customization + */ + get placeholderSymbol() { + return this._getOption("placeholderSymbol"); + } + set placeholderSymbol(value) { + this._setOptions({ placeholderSymbol: value }); + } + /** + * A LaTeX string displayed inside the mathfield when there is no content. + * @category Customization + */ + get placeholder() { + return this._getOption("contentPlaceholder"); + } + set placeholder(value) { + this._setOptions({ contentPlaceholder: value }); + } + /** + * If `"auto"` a popover with suggestions may be displayed when a LaTeX + * command is input. + * + * **Default**: `"auto"` + * + * @category Customization + */ + get popoverPolicy() { + return this._getOption("popoverPolicy"); + } + set popoverPolicy(value) { + this._setOptions({ popoverPolicy: value }); + } + /** + * + * If `"auto"` a popover with commands to edit an environment (matrix) + * is displayed when the virtual keyboard is displayed. + * + * **Default**: `"auto"` + * + * @category Customization + */ + get environmentPopoverPolicy() { + return this._getOption("environmentPopoverPolicy"); + } + set environmentPopoverPolicy(value) { + this._setOptions({ environmentPopoverPolicy: value }); + } + /** + * @category Menu + */ + get menuItems() { + var _a3; + if (!this._mathfield) throw new Error("Mathfield not mounted"); + return (_a3 = this._mathfield.menu._menuItems.map((x) => x.menuItem)) != null ? _a3 : []; + } + set menuItems(menuItems) { + var _a3; + if (!this._mathfield) throw new Error("Mathfield not mounted"); + if (this._mathfield) { + const btn = (_a3 = this._mathfield.element) == null ? void 0 : _a3.querySelector( + "[part=menu-toggle]" + ); + if (btn) btn.style.display = menuItems.length === 0 ? "none" : ""; + this._mathfield.menu.menuItems = menuItems; + } + } + /** + * @category Virtual Keyboard + */ + get mathVirtualKeyboardPolicy() { + return this._getOption("mathVirtualKeyboardPolicy"); + } + set mathVirtualKeyboardPolicy(value) { + this._setOptions({ mathVirtualKeyboardPolicy: value }); + } + /** + * The keys of this object literal indicate the sequence of characters + * that will trigger an inline shortcut. + * @category Keyboard Shortcuts + */ + get inlineShortcuts() { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + return this._getOption("inlineShortcuts"); + } + set inlineShortcuts(value) { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + this._setOptions({ inlineShortcuts: value }); + } + /** + * Maximum time, in milliseconds, between consecutive characters for them to be + * considered part of the same shortcut sequence. + * + * A value of 0 is the same as infinity: any consecutive character will be + * candidate for an inline shortcut, regardless of the interval between this + * character and the previous one. + * + * A value of 750 will indicate that the maximum interval between two + * characters to be considered part of the same inline shortcut sequence is + * 3/4 of a second. + * + * This is useful to enter "+-" as a sequence of two characters, while also + * supporting the "±" shortcut with the same sequence. + * + * The first result can be entered by pausing slightly between the first and + * second character if this option is set to a value of 250 or so. + * + * Note that some operations, such as clicking to change the selection, or + * losing the focus on the mathfield, will automatically timeout the + * shortcuts. + * @category Keyboard Shortcuts + */ + get inlineShortcutTimeout() { + return this._getOption("inlineShortcutTimeout"); + } + set inlineShortcutTimeout(value) { + this._setOptions({ inlineShortcutTimeout: value }); + } + /** @category Keyboard Shortcuts */ + get keybindings() { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + return this._getOption("keybindings"); + } + set keybindings(value) { + if (!this._mathfield) throw new Error("Mathfield not mounted"); + this._setOptions({ keybindings: value }); + } + /** @category Styles + */ + get onInsertStyle() { + const hook = this._getOption("onInsertStyle"); + if (hook === void 0) return defaultInsertStyleHook; + return hook; + } + set onInsertStyle(value) { + this._setOptions({ onInsertStyle: value }); + } + /** + * A hook invoked when a string of characters that could be + * interpreted as shortcut has been typed. + * + * If not a special shortcut, return the empty string `""`. + * + * Use this handler to detect multi character symbols, and return them wrapped appropriately, + * for example `\mathrm{${symbol}}`. + * @category Hooks + */ + get onInlineShortcut() { + return this._getOption("onInlineShortcut"); + } + set onInlineShortcut(value) { + this._setOptions({ onInlineShortcut: value }); + } + /** + * A hook invoked when scrolling the mathfield into view is necessary. + * + * Use when scrolling the page would not solve the problem, e.g. + * when the mathfield is in another div that has scrollable content. + * @category Hooks + */ + get onScrollIntoView() { + return this._getOption("onScrollIntoView"); + } + set onScrollIntoView(value) { + this._setOptions({ onScrollIntoView: value }); + } + /** + * This hook is invoked when the user has requested to export the content + * of the mathfield, for example when pressing ctrl/command+C. + * + * This hook should return as a string what should be exported. + * + * The `range` argument indicates which portion of the mathfield should be + * exported. It is not always equal to the current selection, but it can + * be used to export a format other than LaTeX. + * + * By default this is: + * + * ```js + * return `\\begin{equation*}${latex}\\end{equation*}`; + * ``` + * @category Hooks + */ + get onExport() { + return this._getOption("onExport"); + } + set onExport(value) { + this._setOptions({ onExport: value }); + } + get readOnly() { + return this._getOption("readOnly"); + } + set readOnly(value) { + this._setOptions({ readOnly: value }); + } + /** + * This is a standard DOM property + * @internal */ + get isSelectionEditable() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.isSelectionEditable) != null ? _b3 : false; + } + /** @category Prompts */ + setPromptState(id, state, locked) { + var _a3; + (_a3 = this._mathfield) == null ? void 0 : _a3.setPromptState(id, state, locked); + } + /** @category Prompts */ + getPromptState(id) { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.getPromptState(id)) != null ? _b3 : [void 0, true]; + } + /** + * An array of ranges representing the selection. + * + * It is guaranteed there will be at least one element. If a discontinuous + * selection is present, the result will include more than one element. + * + * @category Selection + * + */ + get selection() { + if (this._mathfield) return this._mathfield.model.selection; + if (gDeferredState.has(this)) return gDeferredState.get(this).selection; + return { ranges: [[0, 0]], direction: "forward" }; + } + /** + * + * @category Selection + */ + set selection(sel) { + if (typeof sel === "number") sel = { ranges: [[sel, sel]] }; + if (this._mathfield) { + this._mathfield.model.selection = sel; + requestUpdate(this._mathfield); + return; + } + if (gDeferredState.has(this)) { + gDeferredState.set(this, __spreadProps(__spreadValues({}, gDeferredState.get(this)), { + selection: sel + })); + return; + } + gDeferredState.set(this, { + value: void 0, + selection: sel, + options: getOptionsFromAttributes(this), + menuItems: void 0 + }); + } + /** + * @category Selection + */ + get selectionIsCollapsed() { + const selection = this.selection; + return selection.ranges.length === 1 && selection.ranges[0][0] === selection.ranges[0][1]; + } + /** + * The position of the caret/insertion point, from 0 to `lastOffset`. + * + * @category Selection + * + */ + get position() { + if (this._mathfield) return this._mathfield.model.position; + if (gDeferredState.has(this)) + return gDeferredState.get(this).selection.ranges[0][0]; + return 0; + } + /** + * @category Selection + */ + set position(offset) { + if (this._mathfield) { + this._mathfield.model.position = offset; + requestUpdate(this._mathfield); + } + if (gDeferredState.has(this)) { + gDeferredState.set(this, __spreadProps(__spreadValues({}, gDeferredState.get(this)), { + selection: { ranges: [[offset, offset]] } + })); + return; + } + gDeferredState.set(this, { + value: void 0, + selection: { ranges: [[offset, offset]] }, + options: getOptionsFromAttributes(this), + menuItems: void 0 + }); + } + /** + * The last valid offset. + * @category Selection + */ + get lastOffset() { + var _a3, _b3; + return (_b3 = (_a3 = this._mathfield) == null ? void 0 : _a3.model.lastOffset) != null ? _b3 : -1; + } + }; + _MathfieldElement.version = "{{SDK_VERSION}}"; + _MathfieldElement.openUrl = (href) => { + if (!href) return; + const url = new URL(href); + if (!["http:", "https:", "file:"].includes(url.protocol.toLowerCase())) { + _MathfieldElement.playSound("plonk"); + return; + } + window.open(url, "_blank"); + }; + /** @internal */ + _MathfieldElement._fontsDirectory = "./fonts/"; + /** @internal */ + _MathfieldElement._soundsDirectory = "./sounds"; + /** + * When a key on the virtual keyboard is pressed, produce a short haptic + * feedback, if the device supports it. + * @category Virtual Keyboard + */ + _MathfieldElement.keypressVibration = true; + /** @internal */ + _MathfieldElement._keypressSound = { + spacebar: "keypress-spacebar.wav", + return: "keypress-return.wav", + delete: "keypress-delete.wav", + default: "keypress-standard.wav" + }; + /** @ignore */ + _MathfieldElement._plonkSound = "plonk.wav"; + /** @internal */ + _MathfieldElement.audioBuffers = {}; + /** + * Support for [Trusted Type](https://www.w3.org/TR/trusted-types/). + * + * This optional function will be called before a string of HTML is + * injected in the DOM, allowing that string to be sanitized + * according to a policy defined by the host. + * + * Consider using this option if you are displaying untrusted content. Read more about [Security Considerations](/mathfield/guides/security/) + * + */ + _MathfieldElement.createHTML = (x) => x; + /** @internal */ + _MathfieldElement._speechEngineRate = "100%"; + /** @internal */ + _MathfieldElement._speechEngineVoice = "Joanna"; + /** @internal */ + _MathfieldElement._textToSpeechMarkup = ""; + /** @internal */ + _MathfieldElement._textToSpeechRules = "mathlive"; + /** @internal */ + _MathfieldElement._textToSpeechRulesOptions = {}; + /** @category Speech */ + _MathfieldElement.speakHook = defaultSpeakHook; + /** @category Speech */ + _MathfieldElement.readAloudHook = defaultReadAloudHook; + /** + * When switching from a tab to one that contains a mathfield that was + * previously focused, restore the focus to the mathfield. + * + * This is behavior consistent with ` + + x=\frac{\placeholder[numer]{}}{\placeholder[denom][correct]{3} + + + + + + + + diff --git a/dist/prompts/index.html b/dist/prompts/index.html new file mode 100644 index 000000000..beb08cd45 --- /dev/null +++ b/dist/prompts/index.html @@ -0,0 +1,119 @@ + + + + + Prompts Test + + + + + + +
    +

    Prompts Test

    + +
    +
    +
    + x=\frac{\placeholder[numerator]{x}}{\placeholder[denominator]{y}}}} + + x=\frac{\placeholder{33}}{\placeholder{}}+\frac{1}{}+\placeholder{} + x=\frac{\placeholder[numer][incorrect]{1+x}}{\placeholder[denom][correct]{3}}+\placeholder[other]{\frac{x^2}{\sqrt{x}}} + + + + + + +
    +
    + + + + diff --git a/dist/smoke/index.html b/dist/smoke/index.html new file mode 100644 index 000000000..774b35cab --- /dev/null +++ b/dist/smoke/index.html @@ -0,0 +1,599 @@ + + + + + + Smoke Test + + + + + + + + +
    +

    Smoke Test

    + +
    +
    + + \displaylines{\\ } + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +

    Selection

    +
    + +

    LaTeX

    +
    + +

    Typst

    +
    + +

    MathJSON

    +
    +
    +
    +
    +
    + +

    ASCII Math

    +
    + +

    MathML

    +
    +
    + +
    + +
    + + +
    +
    + + $$\foo$$ +
    + + + + + + + \ No newline at end of file diff --git a/dist/sounds/keypress-delete.wav b/dist/sounds/keypress-delete.wav new file mode 100644 index 000000000..e4a4af728 Binary files /dev/null and b/dist/sounds/keypress-delete.wav differ diff --git a/dist/sounds/keypress-return.wav b/dist/sounds/keypress-return.wav new file mode 100644 index 000000000..8b666ce04 Binary files /dev/null and b/dist/sounds/keypress-return.wav differ diff --git a/dist/sounds/keypress-spacebar.wav b/dist/sounds/keypress-spacebar.wav new file mode 100644 index 000000000..84743a051 Binary files /dev/null and b/dist/sounds/keypress-spacebar.wav differ diff --git a/dist/sounds/keypress-standard.wav b/dist/sounds/keypress-standard.wav new file mode 100644 index 000000000..42dcef5a0 Binary files /dev/null and b/dist/sounds/keypress-standard.wav differ diff --git a/dist/sounds/plonk.wav b/dist/sounds/plonk.wav new file mode 100644 index 000000000..ea05fc87c Binary files /dev/null and b/dist/sounds/plonk.wav differ diff --git a/dist/style.css b/dist/style.css new file mode 100644 index 000000000..6c7f55913 --- /dev/null +++ b/dist/style.css @@ -0,0 +1,487 @@ +body { + margin: 0; +} + +html { + fill: currentColor; + font-family: + system-ui, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + 'Roboto', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + height: 100%; + width: 100%; +} + +body { + --hue: 210; + --on-primary: hsl(var(--hue, 212), 0%, 95%); + --primary: hsl(var(--hue, 212), 40%, 50%); + --surface: #fafafa; + --surface-border: #fff; + --on-surface: hsl(var(--hue, 212), 19%, 26%); + + --secondary-surface: hsl(0, 0%, 99.5%); + --secondary-surface-border: hsl(0, 0%, 93%); + --link: hsl(var(--hue, 212), 100%, 40%); + + --editable: #fff; + --editable-border: #ddd; + --on-editable: #333; + + background: var(--surface); + color: var(--on-surface); +} + +h2 { + font-size: 24px; + font-weight: 600; + line-height: 0.7; + padding-top: 1em; + padding-bottom: 1em; + border: none; +} +h3 { + font-weight: 600; + line-height: 0.7; + margin-top: 3em; + margin-bottom: 2em; +} + +h4 { + margin-top: 2em; + margin-bottom: 1.5em; +} + +h3 strong, +h4 strong { + color: var(--primary, hsl(var(--hue, 212), 40%, 50%)); +} + +h4 { + font-weight: 400; +} +/* h2, h3 { + background: linear-gradient(#eee, #333); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; +} */ +main { + padding-top: 1rem; + width: 640px; + max-width: 100vw; + display: flex; + align-items: flex-start; + flex-flow: column wrap; + margin: auto; +} +main > div { + width: 100%; +} + +main > div.frame { + margin-top: 2em; + padding-left: 1em; + padding-right: 1em; + width: calc(100% - 2em); + margin-bottom: 4em; + background: var(--secondary-surface); + border: 1px solid var(--secondary-surface-border); + border-radius: 8px; +} + +kbd { + font-family: Consolas, Monaco, 'Andale Mono', monospace; + background: #f4f4f4; + color: #333; + padding: 1px 5px; + border-radius: 5px; +} + +.centered { + display: flex; + flex-flow: column; + align-items: center; + justify-content: center; +} + +.links { + display: flex; + justify-content: space-around; + padding-top: 1em; + padding-bottom: 2em; + width: 100%; + font-size: 24px; +} +@media only screen and (max-width: 512px) { + .links { + font-size: 16px; + } +} + +.output { + margin: 10px 0 10px 0; + border-radius: 5px; + border: 1px solid #333; + + min-height: 1em; + padding: 5px; + padding-top: 0.5em; + padding-bottom: 0.5em; + width: calc(100% - 10px); /* Subtract horizontal padding */ + + font-family: 'IBM Plex mono', 'Source Code Pro', Menlo, + 'Bitstream Vera Sans Mono', Monaco, Courier, 'Andale Mono', monospace; + color: #f0c674; + + background: #35434e; + word-break: break-word; + white-space: pre-wrap; +} + +.output > div { + white-space: pre-wrap; + margin-bottom: 1em; +} + +.output > div:last-child { + margin-bottom: 0; +} + +/* input, +textarea { + border: 1px solid var(--editable-border); + border-radius: 5px; + background: var(--editable); + color: var(--on-editable); + padding: 5px; +} */ + +input::placeholder { + opacity: 0.5; +} + +.fa-w-24 { + width: 24px; + vertical-align: -5px; +} + +a, +a:visited, +a:active { + text-decoration: none; + color: var(--link); + border-radius: 1em; + border: 1px solid transparent; +} + +.links a { + padding-left: 1em; + padding-right: 1em; + padding-top: 5px; + padding-bottom: 5px; +} +.links a:visited:hover, +.links a:hover { + border: 1px solid var(--secondary-surface-border); + background: var(--surface); +} + +a:hover { + text-decoration: underline; +} +.links a:hover { + text-decoration: none; +} + +body > header { + /* background-color: var(--primary, hsl(var(--hue, 212), 40%, 50%)); */ + height: 150px; + max-width: 640px; + margin: auto; + display: flex; + flex-flow: column; + justify-content: center; + align-items: flex-start; + + /* box-shadow: 16px 6px 24px rgba(0, 0, 0, 0.2); */ +} + +header > ul { + display: flex; + list-style-type: none; + width: calc(100% - 16px); + margin: 0; + padding: 8px; + border-radius: 8px; + background: #eaeaea; + border: 1px solid #ddd; + gap: 0.5em; +} + +header > ul > li { + /* min-width: 100px; */ + width: 100px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 10px; +} + +header > ul > li:hover { + background: #ddd; +} + +header > ul > li.current { + border-radius: inherit; + background: #fff; +} + +header > ul > li > a { + padding-right: 8px; + padding-left: 8px; + padding-top: 0.5em; + padding-bottom: 0.5em; + font-weight: 600; +} + +header > ul > li.current > a { + color: var(--on-surface); + /* border-radius: 0; */ + /* border-bottom: 2px solid var(--primary); */ +} + +header > ul > li > a:hover, +header > ul > li > a:visited, +header > ul > li > a:active { + text-decoration: none; +} + +/* header > ul > li.current > a, +header > ul > li.current > a:hover, +header > ul > li.current > a:visited, +header > ul > li.current > a:active { + border-radius: inherit; + background: #fff; +} */ + +header h1 { + /* font-size: 3rem; */ + /* color: var(--on-primary); */ + margin-left: auto; + margin-right: auto; + max-width: 1024px; + width: 640px; + margin: auto; + + text-align: left; + font-weight: 900; + letter-spacing: 0.004em; + text-transform: uppercase; + letter-spacing: -0.04ex; + text-rendering: optimizeLegibility; + line-height: 0.9; +} + +footer { + margin-top: 5em; + margin-bottom: 5em; + text-align: center; + + display: flex; + justify-content: center; + flex-flow: column wrap; +} + +footer a, +footer a:visited, +footer a:active { + font-size: 18px; + padding-top: 6px; + padding-bottom: 6px; +} + +math-field:not(:defined) { + visibility: hidden; +} + +/* math-field:focus-within { +outline: none; +background: red; +} */ + +code { + white-space: pre-wrap; +} + +h2 { + font-size: 1em; + padding: 0; + margin: 0; + color: #666; +} + +#mathfield-container { + padding: 8px; + min-width: 50px; + border: 1px solid #ddd; +} + +#ta { + font-size: 1.5em; + font-weight: 700; +} + +#find-input, +#replace-input { + width: 320px; +} + +.hidden { + display: none; +} + +.label { + font-weight: 700; +} + +.math { + display: none; +} + +/* .buttonbar button { */ +button { + font-weight: 600; + font-size: 1rem; + background: none; + border: 1px solid rgba(0, 0, 0, 0.12); + border-radius: 4px; + color: #0066ce; + fill: currentColor; + position: relative; + height: 2.5rem; + line-height: 2.5rem; + margin: 0; + min-width: 120px; + padding: 0 16px; + display: inline-block; + overflow: hidden; + will-change: box-shadow; + transition: + box-shadow 0.2s cubic-bezier(0.4, 0, 1, 1), + background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1), + color 0.2s cubic-bezier(0.4, 0, 0.2, 1); + outline: none; + cursor: pointer; + text-decoration: none; + text-align: center; + vertical-align: middle; + -webkit-user-select: none; + user-select: none; + + /* font-size: 16px; + letter-spacing: 0.08929em; + text-transform: uppercase; + box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), + 0 3px 1px -2px rgba(0, 0, 0, 0.12); */ +} + +button:first-child { + margin-left: 0; +} + +button:hover { + background-color: rgba(0, 0, 0, 0.08); +} + +button:active { + background-color: white; +} + +button.primary, +button.active { + color: white; + fill: currentColor; + background: #0066ce; +} + +button.primary:hover { + background-color: rgba(0, 102, 206, 0.58); +} + +button.primary:active { + color: #0066ce; + fill: currentColor; + background-color: white; +} + +button.round { + width: 64px; + height: 64px; + border-radius: 50%; +} + +.buttonbar { + margin-top: 1em; + display: flex; + flex-wrap: wrap; + gap: 1em; + justify-content: space-evenly; +} + +#keyboard-container { + display: block; + position: relative; + + height: 600px; + width: 1024px; + background: palegreen; + overflow: hidden; + border: 5px solid red; +} + +@media only screen and (max-width: 512px) { + header { + height: 100px; + } + + header h1 { + max-width: 320px; + width: auto; + font-size: 2rem; + } + + .examples { + width: 320px; + } +} + +@media (prefers-color-scheme: dark) { + body { + --surface: hsl(var(--hue, 212), 19%, 26%); + --surface-border: hsl(0, 0%, 20%); + --on-surface: hsl(0, 0%, 98%); + --primary: hsl(var(--hue, 212), 100%, 50%); + + --secondary-surface: hsl(0, 0%, 19%, 0.3); + --secondary-surface-border: hsl(0, 0%, 22%); + --link: hsl(var(--hue, 212), 100%, 63%); + + --editable: #333; + --editable-border: hsl(0, 0%, 13%); + --on-editable: #fff; + } + h2, + h3 { + color: hsl(var(--hue, 212), 20%, 90%); + } +} diff --git a/dist/types/commands.d.ts b/dist/types/commands.d.ts new file mode 100644 index 000000000..e60e75fbd --- /dev/null +++ b/dist/types/commands.d.ts @@ -0,0 +1,333 @@ +import type { Keys } from './types-utils'; +import type { InsertOptions, ParseMode, Style, TabularEnvironment } from './core-types'; +import type { Mathfield, Model } from './mathfield'; +/** + * How much of the formula should be spoken: + * | | | + * |---:|:---| + * | `all` | the entire formula | + * | `selection` | the selection portion of the formula | + * | `left` | the element to the left of the selection | + * | `right` | the element to the right of the selection | + * | `group` | the group (numerator, root, etc..) the selection is in | + * | `parent` | the parent of the selection | + * + * @category Speech + */ +export type SpeechScope = 'all' | 'selection' | 'left' | 'right' | 'group' | 'parent'; +/** + * To perform editing commands on a mathfield, use {@linkcode MathfieldElement.executeCommand} with the commands below. + * + * ```ts + * const mf = document.getElementById('mathfield'); + * mf.executeCommand('selectAll'); + * mf.executeCommand('copyToClipboard'); + * ``` + * + * Some commands require an argument, for example to insert a character: + * + * ```ts + * mf.executeCommand('insert("x")' }); + * ``` + * + * The argument can be specified in parentheses after the command name, or + * using an array: + * + * ```ts + * mf.executeCommand(['switchMode', 'latex']); + * // Same as mf.executeCommand('switchMode("latex")'); + * ``` + * + * Commands (and `executeCommand()`) return true if they resulted in a dirty + * state. + * @category Editing Commands + * @command executeCommand + */ +export interface Commands { + /** + * @category Undo/Redo + */ + undo: (mathfield: Mathfield) => boolean; + /** + * @category Undo/Redo + */ + redo: (mathfield: Mathfield) => boolean; + /** + * Perform a command and include interactive feedback such as sound and + * haptic feedback. + * + * This is useful to simulate user interaction, for example for commands + * from the virtual keyboard + */ + performWithFeedback: (mathfield: Mathfield, command: string) => boolean; + /** Dispatch a custom event on the host (mathfield) */ + dispatchEvent: (mathfield: Mathfield, name: string, detail: number) => boolean; + commit: (mathfield: Mathfield) => boolean; + /** + * @category Auto-complete + */ + complete: (mathfield: Mathfield) => boolean; + /** + * @category Auto-complete + */ + nextSuggestion: (mathfield: Mathfield) => boolean; + /** + * @category Auto-complete + */ + previousSuggestion: (mathfield: Mathfield) => boolean; + /** + * @category Clipboard + */ + copyToClipboard: (mathfield: Mathfield) => boolean; + /** + * @category Clipboard + */ + cutToClipboard: (mathfield: Mathfield) => boolean; + /** + * @category Clipboard + */ + pasteFromClipboard: (mathfield: Mathfield) => boolean; + /** + * @category Scrolling + */ + scrollIntoView: (mathfield: Mathfield) => boolean; + /** + * @category Scrolling + */ + scrollToStart: (mathfield: Mathfield) => boolean; + /** + * @category Scrolling + */ + scrollToEnd: (mathfield: Mathfield) => boolean; + toggleContextMenu: (mathfield: Mathfield) => boolean; + toggleKeystrokeCaption: (mathfield: Mathfield) => boolean; + toggleVirtualKeyboard: (mathfield: Mathfield) => boolean; + showVirtualKeyboard: (mathfield: Mathfield) => boolean; + hideVirtualKeyboard: (mathfield: Mathfield) => boolean; + plonk: (mathfield: Mathfield) => boolean; + switchMode: (mathfield: Mathfield, mode: ParseMode) => boolean; + insert: (mathfield: Mathfield, s: string, options: InsertOptions) => boolean; + insertDecimalSeparator: (mathfield: Mathfield) => boolean; + typedText: (text: string, options: { + /** If true, the mathfield will be focused */ + focus: boolean; + /** If true, provide audio and haptic feedback */ + feedback: boolean; + /** If true, generate some synthetic + * keystrokes (useful to trigger inline shortcuts, for example). + */ + simulateKeystroke: boolean; + }) => boolean; + speak: (mathfield: Mathfield, + /** {@inheritDoc SpeechScope} */ + scope: SpeechScope, options: { + /** + * In addition to speaking the requested portion of the formula, + * visually highlight it as it is read (read aloud functionality) + */ + withHighlighting: boolean; + }) => boolean; + /** + * @category Prompt + */ + insertPrompt: (mathfield: Mathfield, id?: string, options?: InsertOptions) => boolean; + /** + * @category Array + */ + addRowAfter: (model: Model) => boolean; + /** + * @category Array + */ + addColumnAfter: (model: Model) => boolean; + /** + * @category Array + */ + addRowBefore: (model: Model) => boolean; + /** + * @category Array + */ + addColumnBefore: (model: Model) => boolean; + /** + * @category Array + */ + removeRow: (model: Model) => boolean; + /** + * @category Array + */ + removeColumn: (model: Model) => boolean; + /** + * @category Array + */ + setEnvironment: (model: Model, environment: TabularEnvironment) => boolean; + /** + * @category Deleting + */ + deleteAll: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteForward: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteBackward: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteNextWord: (model: Model) => boolean; + /** + * @category Deleting + */ + deletePreviousWord: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteToGroupStart: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteToGroupEnd: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteToMathFieldStart: (model: Model) => boolean; + /** + * @category Deleting + */ + deleteToMathFieldEnd: (model: Model) => boolean; + /** + * @category Selection + */ + moveToOpposite: (model: Model) => boolean; + /** + * @category Selection + */ + moveBeforeParent: (model: Model) => boolean; + /** + * @category Selection + */ + moveAfterParent: (model: Model) => boolean; + /** + * @category Selection + */ + moveToNextPlaceholder: (model: Model) => boolean; + /** + * @category Selection + */ + moveToPreviousPlaceholder: (model: Model) => boolean; + /** + * @category Selection + */ + moveToNextChar: (model: Model) => boolean; + /** + * @category Selection + */ + moveToPreviousChar: (model: Model) => boolean; + /** + * @category Selection + */ + moveUp: (model: Model) => boolean; + /** + * @category Selection + */ + moveDown: (model: Model) => boolean; + /** + * @category Selection + */ + moveToNextWord: (model: Model) => boolean; + /** + * @category Selection + */ + moveToPreviousWord: (model: Model) => boolean; + /** + * @category Selection + */ + moveToGroupStart: (model: Model) => boolean; + /** + * @category Selection + */ + moveToGroupEnd: (model: Model) => boolean; + /** + * @category Selection + */ + moveToNextGroup: (model: Model) => boolean; + /** + * @category Selection + */ + moveToPreviousGroup: (model: Model) => boolean; + /** + * @category Selection + */ + moveToMathfieldStart: (model: Model) => boolean; + /** + * @category Selection + */ + moveToMathfieldEnd: (model: Model) => boolean; + /** + * @category Selection + */ + moveToSuperscript: (model: Model) => boolean; + /** + * @category Selection + */ + moveToSubscript: (model: Model) => boolean; + /** + * @category Selection + */ + selectGroup: (model: Model) => boolean; + /** + * @category Selection + */ + selectAll: (model: Model) => boolean; + /** + * @category Selection + */ + extendSelectionForward: (model: Model) => boolean; + /** + * @category Selection + */ + extendSelectionBackward: (model: Model) => boolean; + /** + * @category Selection + */ + extendToNextWord: (model: Model) => boolean; + /** + * @category Selection + */ + extendToPreviousWord: (model: Model) => boolean; + /** + * @category Selection + */ + extendSelectionUpward: (model: Model) => boolean; + /** + * @category Selection + */ + extendSelectionDownward: (model: Model) => boolean; + /** + * @category Selection + */ + extendToNextBoundary: (model: Model) => boolean; + /** + * @category Selection + */ + extendToPreviousBoundary: (model: Model) => boolean; + /** + * @category Selection + */ + extendToGroupStart: (model: Model) => boolean; + /** + * @category Selection + */ + extendToGroupEnd: (model: Model) => boolean; + /** + * @category Selection + */ + extendToMathFieldStart: (model: Model) => boolean; + /** + * @category Selection + */ + extendToMathFieldEnd: (model: Model) => boolean; + applyStyle: (mathfield: Mathfield, style: Style) => boolean; +} +/** @category Editing Commands */ +export type Selector = Keys; diff --git a/dist/types/core-types.d.ts b/dist/types/core-types.d.ts new file mode 100644 index 000000000..2f2ed04b9 --- /dev/null +++ b/dist/types/core-types.d.ts @@ -0,0 +1,428 @@ +/** @category Styles */ +export type MathstyleName = 'displaystyle' | 'textstyle' | 'scriptstyle' | 'scriptscriptstyle'; +/** @internal */ +export type ArgumentType = ParseMode | ('bbox' | 'colspec' | 'delim' | 'value' | 'rest' | 'string' | 'balanced-string' | 'expression' | 'auto'); +/** @internal */ +export type Token = string; +/** + * The mode that indicates how a portion of content is interpreted + * + */ +/** @internal */ +export type ParseMode = 'math' | 'text' | 'free-text' | 'free-math' | 'latex'; +/** @internal */ +export declare function isTextMode(mode: ParseMode | string): boolean; +/** Return true when the editor should interpret ordinary input as math. */ +export declare function isMathMode(mode: ParseMode | string): boolean; +/** + * Error codes returned by the `mf.errors` property. + * + * + * + | | | + | ------------------ | --- | + | `unknown-command` | There is no definition available for this LaTeX command, e.g. `\zin` | + | `unknown-environment` | There is no definition available for this environment, e.g. `\begin{foo}` | + | `invalid-command` | This command is not valid in the current context (e.g. text command in math mode) | + | `unbalanced-braces` | There are too many or too few `{` or `}` | + | `unbalanced-environment` | An environment was open but never closed (`\begin{array}`) or the `\end` command does not match the `\begin` command (`\begin{array*}\end{array}`) | + | `unbalanced-mode-shift` | A `$`, `$$`, `\(` or `\[` was not balanced | + | `missing-argument` | A required argument is missing, e.g. `\frac{2}` | + | `too-many-infix-commands` | A group can include only one infix command (i.e. `\choose`, `\atop`). In general it's best to avoid infix commands. | + | `unexpected-command-in-string`| A command expected a string argument, but there was a command instead | + | `missing-unit` | An argument requiring a dimension was missing an unit. | + | `unexpected-delimiter` | An invalid symbol or command was used as a delimiter. | + | `unexpected-token` | An unexpected character was encountered. | + | `unexpected-end-of-string` | The end of the string was reached, but some required arguments were missing. | + | `improper-alphabetic-constant` | The alphabetic constant prefix `` ` `` was not followed by a letter or single character command. | +* @category Conversion +*/ +export type ParserErrorCode = 'unknown-command' | 'invalid-command' | 'unbalanced-braces' | 'unknown-environment' | 'unbalanced-environment' | 'unbalanced-mode-shift' | 'missing-argument' | 'too-many-infix-commands' | 'unexpected-command-in-string' | 'missing-unit' | 'unexpected-delimiter' | 'unexpected-token' | 'unexpected-end-of-string' | 'improper-alphabetic-constant'; +/** @category Conversion */ +export type LatexSyntaxError = { + code: T; + arg?: string; + latex?: string; + before?: string; + after?: string; +}; +/** + * Variants indicate a stylistic alternate for some characters. + * + * Typically, those are controlled with explicit commands, such as + * `\mathbb{}` or `\mathfrak{}`. This type is used with the + * {@linkcode MathfieldElement.applyStyle} method to change the styling of a range of + * selected characters. + * + * In mathematical notation these variants are used not only for visual + * presentation, but they may have semantic significance. + * + * For example, + * - the set ℂ should not be confused with + * - the physical unit 𝖢 (Coulomb). + * + * When rendered, these variants can map to some built-in fonts. + * + * LaTeX supports a limited set of characters. However, MathLive will + * map characters not supported by LaTeX fonts (double-stuck variant for digits + * for example) to a Unicode character (see [Mathematical Alphanumeric Symbols on Wikipedia](https://en.wikipedia.org/wiki/Mathematical_Alphanumeric_Symbols) ). + * + * `normal` is a synthetic variant that maps either to `main` (upright) or + * `math` (italic) depending on the symbol and the `letterShapeStyle`. + * + * The `math` variant has italic characters as well as slightly different + * letter shape and spacing (a bit more space after the "f" for example), so + * it's not equivalent to a `main` variant with `italic` variant style applied. + * + * **See Also** + * * {@linkcode Style} + * + * @category Styles + */ +export type Variant = 'ams' | 'double-struck' | 'calligraphic' | 'script' | 'fraktur' | 'sans-serif' | 'monospace' | 'normal' | 'main' | 'math'; +/** + * Some variants support stylistic variations. + * + * Note that these stylistic variations support a limited set of characters, + * typically just uppercase and lowercase letters, and digits 0-9 in some cases. + * +| variant | `up` | `bold` | `italic` | `bolditalic` | +| ------------------ | --- | --- | --- | --- | +| `normal` | ABCabc012 | 𝐀𝐁𝐂𝐚𝐛𝐜𝟎𝟏𝟐 | 𝐴𝐵𝐶𝑎𝑏𝑐 |𝑨𝑩𝑪𝒂𝒃𝒄 | +| `double-struck` | 𝔸𝔹ℂ𝕒𝕓𝕔𝟘𝟙𝟚 | n/a | n/a | n/a | +| `calligraphic` | 𝒜ℬ𝒞𝒶𝒷𝒸 | 𝓐𝓑𝓒𝓪𝓫𝓬 | n/a | n/a | +| `fraktur` | 𝔄𝔅ℭ𝔞𝔟𝔠 | 𝕬𝕭𝕮𝖆𝖇𝖈 | n/a | n/a | +| `sans-serif`| 𝖠𝖡𝖢𝖺𝖻𝖼𝟢𝟣𝟤 | 𝗔𝗕𝗖𝗮𝗯𝗰𝟬𝟭𝟮 | 𝘈𝘉𝘊𝘢𝘣𝘤 | 𝘼𝘽𝘾𝙖𝙗𝙘 | +| `monospace` | 𝙰𝙱𝙲𝚊𝚋𝚌 | n/a | n/a | n/a | + + * @category Styles + */ +export type VariantStyle = 'up' | 'bold' | 'italic' | 'bolditalic' | ''; +/** + * @category Styles + */ +export type FontShape = 'auto' | 'n' | 'it' | 'sl' | 'sc' | ''; +/** + * @category Styles + */ +export type FontSeries = 'auto' | 'm' | 'b' | 'l' | ''; +/** + * @category Styles + */ +export type FontFamily = 'none' | 'roman' | 'monospace' | 'sans-serif'; +/** + * @category Styles + */ +export type FontSize = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10; +/** Text decorations supported by a free-text mathfield. */ +export type TextDecoration = 'none' | 'underline' | 'line-through' | 'underline line-through'; +/** + * Use a `Style` object literal to modify the visual appearance of a + * mathfield or a portion of a mathfield. + * + * You can control the color ("ink") and background color ("paper"), + * the font variant, weight (`FontSeries`), size and more. + * + * **See Also** + * * `applyStyle()` + * * [Interacting with a Mathfield](mathfield/guides/interacting/) + * + * @category Styles + */ +/** + * @category Styles + */ +export interface Style { + color?: string; + backgroundColor?: string; + fontSize?: FontSize | 'auto'; + variant?: Variant; + variantStyle?: VariantStyle; + fontFamily?: FontFamily; + fontShape?: FontShape; + fontSeries?: FontSeries; + textDecoration?: TextDecoration; +} +/** + * **See Also** + * * {@linkcode MacroDictionary} + * * [Macros guide](//mathfield/guides/macros/) + * + * @category Macros + */ +export type MacroDefinition = { + /** Definition of the macro as a LaTeX expression */ + def: string; + /** Number of arguments (`#1`, etc...) in the macro definition */ + args?: number; + /** If `false` elements inside the macro can be selected */ + captureSelection?: boolean; + /** If `false`, even if `expandMacro` is true, do not expand. */ + expand?: boolean; +}; +/** @category Macros */ +export type NormalizedMacroDictionary = Record; +/** @category Macros */ +export type MacroPackageDefinition = { + package: Record; + primitive?: boolean; + captureSelection?: boolean; +}; +/** + * Glue represents flexible spacing, that is a dimension that + * can grow (by the `grow` property) or shrink (by the `shrink` property). + * + * @category Registers + */ +export type Glue = { + glue: Dimension; + shrink?: Dimension; + grow?: Dimension; +}; +/** + * @category Registers + */ +export type DimensionUnit = 'pt' | 'mm' | 'cm' | 'ex' | 'px' | 'em' | 'bp' | 'dd' | 'pc' | 'in' | 'mu' | 'fil' | 'fill' | 'filll'; +/** + * A dimension is used to specify the size of things + * + * @category Registers + */ +export type Dimension = { + dimension: number; + unit?: DimensionUnit; +}; +/** + * A LaTeX expression represent a sequence of tokens that can be evaluated to + * a value, such as a dimension. + * + * @category Registers + */ +export type LatexValue = { + relax?: boolean; +} & (Dimension | Glue | { + string: string; +} | { + number: number; + base?: 'decimal' | 'octal' | 'hexadecimal' | 'alpha'; +} | { + register: string; + factor?: number; + global?: boolean; +}); +/** + * TeX registers represent "variables" and "constants". + * + * Changing the values of some registers can modify the layout + * of math expressions. + * + * The following registers might be of interest: + * + * - `thinmuskip`: space between items of math lists + * - `medmuskip`: space between binary operations + * - `thickmuskip`: space between relational operators + * - `nulldelimiterspace`: minimum space to leave blank in delimiter constructions, for example around a fraction + * - `delimitershortfall`: maximum space to overlap adjacent elements when a delimiter is too short + * - `jot`: space between lines in an array, or between rows in a multiline construct + * - `arraycolsep`: space between columns in an array + * - `arraystretch`: factor by which to stretch the height of each row in an array + * + * To modify a register, use: + * + * ```javascript + * mf.registers.arraystretch = 1.5; + * mf.registers.thinmuskip = { dimension: 2, unit: "mu" }; + * mf.registers.medmuskip = "3mu"; + *``` + * @category Registers + * + */ +export type Registers = Record; +/** + * A dictionary of LaTeX macros to be used to interpret and render the content. + * + * For example: +```javascript +mf.macros = { smallfrac: "^{#1}\\!\\!/\\!_{#2}" }; +``` +The code above will support the following notation: +```latex +\smallfrac{5}{16} +``` + * **See Also** + * * [Macros Example](/mathfield/guides/macros/) + * + * @category Macros + */ +export type MacroDictionary = Record | MacroPackageDefinition>; +/** @internal */ +export type BoxCSSProperties = 'background-color' | 'border' | 'border-bottom' | 'border-color' | 'border-left' | 'border-radius' | 'border-right' | 'border-right-width' | 'border-top' | 'border-top-width' | 'box-sizing' | 'color' | 'display' | 'font-family' | 'left' | 'height' | 'line-height' | 'margin-top' | 'margin-left' | 'margin-right' | 'opacity' | 'padding' | 'padding-left' | 'padding-right' | 'position' | 'top' | 'bottom' | 'vertical-align' | 'width' | 'z-index'; +/** @internal */ +export type MatrixEnvironment = 'matrix' | 'matrix*' | 'pmatrix' | 'pmatrix*' | 'bmatrix' | 'bmatrix*' | 'Bmatrix' | 'Bmatrix*' | 'vmatrix' | 'vmatrix*' | 'Vmatrix' | 'Vmatrix*'; +/** @internal */ +export type CasesEnvironment = 'cases' | 'dcases' | 'rcases'; +/** @internal */ +export type TabularEnvironment = 'array' | 'equation' | 'equation*' | 'subequations' | 'multline' | 'align' | 'align*' | 'aligned' | 'eqnarray' | 'split' | 'gather' | 'gather*' | 'gathered' | 'lines' | 'multline' | 'multline*' | 'cases' | 'dcases' | 'rcases' | 'smallmatrix' | 'smallmatrix*' | CasesEnvironment | MatrixEnvironment; +/** @internal */ +export type AlignEnvironment = 'align' | 'align*' | 'aligned' | 'gather' | 'gather*' | 'gathered' | 'split' | 'multline'; +/** @internal */ +export type Environment = 'math' | 'displaymath' | 'center' | TabularEnvironment; +/** @category MathJSON */ +export declare type Expression = number | string | { + [key: string]: any; +} | [Expression, ...Expression[]]; +/** + * +| Format | Description | +| :-------------------- | :---------------------- | +| `"ascii-math"` | A string of [ASCIIMath](http://asciimath.org/). | +| `"latex"` | LaTeX rendering of the content, with LaTeX macros not expanded. | +| `"latex-expanded"` | All macros are recursively expanded to their definition. | +| `"latex-unstyled"` | Styling (background color, color) is ignored | +| `"latex-without-placeholders"` | Replace `\placeholder` commands with their body | +| `"math-json"` | A MathJSON abstract syntax tree, as an object literal formated as a JSON string. Note: you must import the CortexJS Compute Engine to obtain a result. | +| `"math-ml"` | A string of MathML markup. | +| `"plain-text"` | A plain text rendering of the content. | +| `"spoken"` | Spoken text rendering, using the default format defined in config, which could be either text or SSML markup. | +| `"spoken-text"` | A plain spoken text rendering of the content. | +| `"spoken-ssml"` | A SSML (Speech Synthesis Markup Language) version of the content, which can be used with some text-to-speech engines such as AWS. | +| `"spoken-ssml-with-highlighting"`| Like `"spoken-ssml"` but with additional annotations necessary for synchronized highlighting (read aloud). | + + To use the`"math-json"` format the Compute Engine library must be loaded. Use for example: + +```js +import "https://esm.run/@cortex-js/compute-engine"; +``` + * @category Mathfield + */ +export type OutputFormat = 'ascii-math' | 'latex' | 'latex-expanded' | 'latex-unstyled' | 'latex-without-placeholders' | 'typst' | 'math-json' | 'math-ml' | 'plain-text' | 'spoken' | 'spoken-text' | 'spoken-ssml' | 'spoken-ssml-with-highlighting'; +/** + * @category Mathfield + */ +export type InsertOptions = { + /** If `"auto"` or omitted, the current mode is used */ + mode?: ParseMode | 'auto'; + /** + * The format of the input string: + * + + | | | + |:------------|:------------| + |`"auto"` | The string is a LaTeX fragment or command (default)| + |`"latex"` | The string is a LaTeX fragment| + * + */ + format?: OutputFormat | 'auto'; + insertionMode?: 'replaceSelection' | 'replaceAll' | 'insertBefore' | 'insertAfter'; + /** + * Describes where the selection will be after the insertion: + * + | | | + | :---------- | :---------- | + |`"placeholder"`| The selection will be the first available placeholder in the text that has been inserted (default)| + |`"after"` | The selection will be an insertion point after the inserted text| + |`"before"` | The selection will be an insertion point before the inserted text| + |`"item"` | The inserted text will be selected| + */ + selectionMode?: 'placeholder' | 'after' | 'before' | 'item'; + /** If `true`, silence notifications during insertion */ + silenceNotifications?: boolean; + /** If `true`, the mathfield will be focused after the insertion */ + focus?: boolean; + /** If `true`, provide audio and haptic feedback */ + feedback?: boolean; + /** If `true`, scroll the mathfield into view after insertion such that the insertion point is visible */ + scrollIntoView?: boolean; + /** The style applied to the inserted content */ + style?: Style; +}; +/** + * @category Styles + */ +export type ApplyStyleOptions = { + range?: Range; + operation?: 'set' | 'toggle'; + silenceNotifications?: boolean; +}; +/** + * Some additional information about an element of the formula + * returned by `mf.getElementInfo()`. + * + * @category Mathfield + */ +export type ElementInfo = { + /** The depth in the expression tree. 0 for top-level elements */ + depth?: number; + /** The bounding box of the element */ + bounds?: DOMRect; + /** id associated with this element or its ancestor, set with `\htmlId` or + `\cssId` + */ + id?: string; + /** HTML attributes associated with element or its ancestores, set with + * `\htmlData` + */ + data?: Record; + /** The mode (math, text or LaTeX) */ + mode?: ParseMode; + /** A LaTeX representation of the element */ + latex?: string; + /** The style (color, weight, variant, etc...) of this element. */ + style?: Style; +}; +/** + * Position of the caret/insertion point from the beginning of the formula. + * The first position is 0. The last valid offset is `mf.lastOffset`. + * + * **See Also** + * * {@linkcode Range} + * @category Selection + */ +export type Offset = number; +/** + * A pair of offsets (boundary points) that denote a fragment of a formula. + * + * A range is said to be **collapsed** when `start` and `end` are equal. + * + * When specifying a range, a negative offset can be used to indicate an + * offset relative to the last valid offset, i.e. `-1` is the last valid + * offset, `-2` is one offset before that, etc... + * + * A normalized range will always be such that start \<= end, start \>= 0, + * end \>= 0, start \< lastOffset, end \< lastOffset. All the methods return + * a normalized range. + * + * **See Also** + * * {@linkcode Offset} + * + * @category Selection + */ +export type Range = [start: Offset, end: Offset]; +/** + * A **selection** is a set of ranges (to support discontinuous selection, for + * example when selecting a column in a matrix). + * + * If there is a single range and that range is collapsed, the selection is + * collapsed. + * + * A selection can also have a **direction**. While many operations are + * insensitive to the direction, a few are. For example, when selecting a + * fragment of a formula from left to right, the direction of this range will + * be `"forward"`. + * + * Pressing the left arrow key will sets the insertion at the start of the + * range. + * + * Conversely, if the selection is made from right to left, the direction is + * `"backward"` and pressing the left arrow key will set the insertion point at + * the end of the range. + * + * **See Also** + * * {@linkcode Offset} + * * {@linkcode Range} + * @category Selection + */ +export type Selection = { + ranges: Range[]; + direction?: 'forward' | 'backward' | 'none'; +}; diff --git a/dist/types/keyboard-layout.d.ts b/dist/types/keyboard-layout.d.ts new file mode 100644 index 000000000..d3a1ac7cc --- /dev/null +++ b/dist/types/keyboard-layout.d.ts @@ -0,0 +1,13 @@ +import type { KeyboardLayoutName } from './options'; +/** + * Change the current physical keyboard layout. + * + * @category Localization + */ +export declare function setKeyboardLayout(name: KeyboardLayoutName | 'auto'): void; +/** + * Change the current physical keyboard layout to match the specified locale. + * + * @category Localization + */ +export declare function setKeyboardLayoutLocale(locale: string): void; diff --git a/dist/types/math-static-elements.d.ts b/dist/types/math-static-elements.d.ts new file mode 100644 index 000000000..4d6abd66f --- /dev/null +++ b/dist/types/math-static-elements.d.ts @@ -0,0 +1,135 @@ +/** + * Static rendering web components for MathLive. + * + * These components provide lightweight rendering of mathematical expressions + * without the editing capabilities of the full MathfieldElement. + * + * @module math-static-elements + */ +/** + * Format types supported by static elements + */ +export type StaticElementFormat = 'latex' | 'ascii-math' | 'math-json'; +/** + * Base class for static math rendering elements + */ +declare abstract class MathStaticElement extends HTMLElement { + private _shadowRoot; + private _contentSlot; + private _renderContainer; + private _errorFallback; + private _mathMLContainer?; + private _observer?; + private _hasRendered; + constructor(); + /** + * Get the default mathstyle for this element type + */ + protected abstract getDefaultMathstyle(): 'textstyle' | 'displaystyle'; + /** + * Get the default display CSS value for this element type + */ + protected abstract getDefaultDisplay(): string; + /** + * Observed attributes that trigger re-rendering + */ + static get observedAttributes(): string[]; + connectedCallback(): void; + disconnectedCallback(): void; + attributeChangedCallback(name: string, oldValue: string | null, newValue: string | null): void; + /** + * Handle keyboard navigation (accessibility enhancement) + */ + private _handleKeydown; + /** + * The rendering mode: 'textstyle' or 'displaystyle' + */ + get mode(): 'textstyle' | 'displaystyle'; + set mode(value: 'textstyle' | 'displaystyle'); + /** + * The input format: 'latex', 'ascii-math', or 'math-json' + */ + get format(): StaticElementFormat; + set format(value: StaticElementFormat); + /** + * Letter shape style option + */ + get letterShapeStyle(): 'auto' | 'tex' | 'iso' | 'french' | 'upright' | undefined; + set letterShapeStyle(value: 'auto' | 'tex' | 'iso' | 'french' | 'upright' | undefined); + /** + * Macros to use for rendering + */ + get macros(): string | undefined; + set macros(value: string | undefined); + /** + * Minimum font scale + */ + get minFontScale(): number | undefined; + set minFontScale(value: number | undefined); + /** + * Maximum matrix columns + */ + get maxMatrixCols(): number | undefined; + set maxMatrixCols(value: number | undefined); + /** + * Manually trigger a re-render of the content + */ + render(): void; + /** + * Update accessibility features (ARIA labels and MathML) + */ + private _updateAccessibility; + /** + * Add hidden MathML for screen readers (accessibility enhancement) + */ + private _addMathML; + /** + * Remove MathML container + */ + private _removeMathML; +} +/** + * `` web component for inline mathematical expressions. + * + * Renders mathematical content inline using textstyle by default. + * + * @example + * ```html + * x^2 + y^2 = z^2 + * x^2 + y^2 + * \\sum_{i=1}^n i + * ``` + * + * @event render - Fired when content is successfully rendered + * @event render-error - Fired when rendering fails + */ +export declare class MathSpanElement extends MathStaticElement { + protected getDefaultMathstyle(): 'textstyle' | 'displaystyle'; + protected getDefaultDisplay(): string; +} +/** + * `` web component for block-level mathematical expressions. + * + * Renders mathematical content as a block element using displaystyle by default. + * + * @example + * ```html + * \\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2} + * int_0^oo e^(-x^2) dx + * x + y + * ``` + * + * @event render - Fired when content is successfully rendered + * @event render-error - Fired when rendering fails + */ +export declare class MathDivElement extends MathStaticElement { + protected getDefaultMathstyle(): 'textstyle' | 'displaystyle'; + protected getDefaultDisplay(): string; +} +declare global { + interface HTMLElementTagNameMap { + 'math-span': MathSpanElement; + 'math-div': MathDivElement; + } +} +export {}; diff --git a/dist/types/mathfield-element.d.ts b/dist/types/mathfield-element.d.ts new file mode 100644 index 000000000..62a226e48 --- /dev/null +++ b/dist/types/mathfield-element.d.ts @@ -0,0 +1,1454 @@ +import type { Selector } from './commands'; +import type { Expression, LatexSyntaxError, MacroDictionary, Offset, ParseMode, Registers, Style, Selection, Range, OutputFormat, ElementInfo, InsertOptions } from './core-types'; +import type { InsertStyleHook, Mathfield } from './mathfield'; +import type { InlineShortcutDefinitions, Keybinding, MathfieldOptions } from './options'; +import type { MenuItem } from './ui-menu-types'; +import type { ComputeEngine } from '@cortex-js/compute-engine'; +import { KeyboardModifiers } from './ui-events-types'; +/** + * **Event re-targeting** + * + * Some events bubble up through the DOM tree, so that they are detectable by + * any element on the page. + * + * Bubbling events fired from within shadow DOM are re-targeted so that, to any + * listener external to your component, they appear to come from your + * component itself. + * + * **Custom Event Bubbling** + * + * By default, a bubbling custom event fired inside shadow DOM will stop + * bubbling when it reaches the shadow root. + * + * To make a custom event pass through shadow DOM boundaries, you must set + * both the `composed` and `bubbles` flags to true. + * + * The `move-out` event signals that the user pressed an **arrow** key or + * **tab** key but there was no navigation possible inside the mathfield. + * + * This event provides an opportunity to handle this situation, for example + * by focusing an element adjacent to the mathfield. + * + * If the event is canceled (i.e. `evt.preventDefault()` is called inside your + * event handler), the default behavior is to play a "plonk" sound. + * + * @category Mathfield + */ +export type MoveOutEvent = { + direction: 'forward' | 'backward' | 'upward' | 'downward'; +}; +/** + * - `"auto"`: the virtual keyboard is triggered when a + * mathfield is focused on a touch capable device. + * - `"manual"`: the virtual keyboard is not triggered automatically + * - `"sandboxed"`: the virtual keyboard is displayed in the current browsing + * context (iframe) if it has a defined container or is the top-level browsing + * context. + * + * @category Virtual Keyboard + */ +export type VirtualKeyboardPolicy = 'auto' | 'manual' | 'sandboxed'; +declare global { + /** + * Map the custom event names to types + * @internal + */ + interface HTMLElementEventMap { + 'mode-change': CustomEvent; + 'mount': Event; + 'unmount': Event; + 'move-out': CustomEvent; + 'read-aloud-status-change': Event; + 'selection-change': Event; + 'undo-state-change': CustomEvent; + 'before-virtual-keyboard-toggle': Event; + 'virtual-keyboard-toggle': Event; + } +} +/** + * These attributes of the `` element correspond to matching properties. + * + * @category Mathfield + */ +export interface MathfieldElementAttributes { + [key: string]: unknown; + 'default-mode': string; + 'letter-shape-style': string; + 'min-font-scale': number; + 'max-matrix-cols': number; + 'popover-policy': string; + /** + * The LaTeX string to insert when the spacebar is pressed (on the physical or + * virtual keyboard). Empty by default. Use `\;` for a thick space, `\:` for + * a medium space, `\,` for a thin space. + */ + 'math-mode-space': string; + /** When true, the user cannot edit the mathfield. */ + 'read-only': boolean; + 'remove-extraneous-parentheses': boolean; + /** + * When `on` and an open fence is entered via `typedText()` it will + * generate a contextually appropriate markup, for example using + * `\left...\right` if applicable. + * + * When `off`, the literal value of the character will be inserted instead. + */ + 'smart-fence': string; + /** + * When `on`, during text input the field will switch automatically between + * 'math' and 'text' mode depending on what is typed and the context of the + * formula. If necessary, what was previously typed will be 'fixed' to + * account for the new info. + * + * For example, when typing "if x >0": + * + * | Type | Interpretation | + * |---:|:---| + * | "i" | math mode, imaginary unit | + * | "if" | text mode, english word "if" | + * | "if x" | all in text mode, maybe the next word is xylophone? | + * | "if x >" | "if" stays in text mode, but now "x >" is in math mode | + * | "if x > 0" | "if" in text mode, "x > 0" in math mode | + * + * Smart Mode is `off` by default. + * + * Manually switching mode (by typing `alt/option+=`) will temporarily turn + * off smart mode. + * + * + * **Examples** + * + * - slope = rise/run + * - If x > 0, then f(x) = sin(x) + * - x^2 + sin (x) when x > 0 + * - When x<0, x^b;2n+1d;<0 + * - Graph x^2 -x+3 =0 for 0<=x<=5 + * - Divide by x-3 and then add x^2-1 to both sides + * - Given g(x) = 4x – 3, when does g(x)=0? + * - Let D be the set b;(x,y)|0<=x<=1 and 0<=y<=xd; + * - \int\_b;the unit squared; f(x,y) dx dy + * - For all n in NN + * + */ + 'smart-mode': string; + /** + * When `on`, when a digit is entered in an empty superscript, the cursor + * leaps automatically out of the superscript. This makes entry of common + * polynomials easier and faster. If entering other characters (for example + * "n+1") the navigation out of the superscript must be done manually (by + * using the cursor keys or the spacebar to leap to the next insertion + * point). + * + * When `off`, the navigation out of the superscript must always be done + * manually. + * + */ + 'smart-superscript': string; + /** + * Maximum time, in milliseconds, between consecutive characters for them to be + * considered part of the same shortcut sequence. + * + * A value of 0 is the same as infinity: any consecutive character will be + * candidate for an inline shortcut, regardless of the interval between this + * character and the previous one. + * + * A value of 750 will indicate that the maximum interval between two + * characters to be considered part of the same inline shortcut sequence is + * 3/4 of a second. + * + * This is useful to enter "+-" as a sequence of two characters, while also + * supporting the "±" shortcut with the same sequence. + * + * The first result can be entered by pausing slightly between the first and + * second character if this option is set to a value of 250 or so. + * + * Note that some operations, such as clicking to change the selection, or + * losing the focus on the mathfield, will automatically timeout the + * shortcuts. + */ + 'inline-shortcut-timeout': string; + 'script-depth': string; + /** When the mathfield is empty, display this placeholder LaTeX string + * instead */ + 'placeholder': string; + /** + * - `"auto"`: the virtual keyboard is triggered when a + * mathfield is focused on a touch capable device. + * - `"manual"`: the virtual keyboard is not triggered automatically + * - `"sandboxed"`: the virtual keyboard is displayed in the current browsing + * context (iframe) if it has a defined container or is the top-level browsing + * context. + * + */ + 'math-virtual-keyboard-policy': VirtualKeyboardPolicy; + /** + * Specify the `targetOrigin` parameter for + * [postMessage](https://developer.mozilla.org/en/docs/Web/API/Window/postMessage) + * to send control messages from child to parent frame to remote control + * of mathfield component. + * + * **Default**: `window.origin` + */ + 'virtual-keyboard-target-origin': string; +} +/** + * + * The `MathfieldElement` class is a DOM element that provides a math input + * field. + * + * It is a subclass of the standard + * [`HTMLElement`](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement) + * class and as such inherits all of its properties and methods, such + * as `style`, `tabIndex`, `addEventListener()`, `getAttribute()`, etc... + * + * The `MathfieldElement` class provides additional properties and methods to + * control the display and behavior of `` elements. + * + * **To instantiate a `MathfieldElement`** use the `` tag in HTML. + * You can also instantiate a `MathfieldElement` programmatically using + * `new MathfieldElement()`. + * + * ```javascript + * // 1. Create a new MathfieldElement + * const mf = new MathfieldElement(); + * + * // 2. Attach it to the DOM + * document.body.appendChild(mf); + * + * // 3. Modifying options after the mathfield has been attached to the DOM + * mf.addEventListener("mount"), () => { + * mf.smartFence = true; + * }); + * ``` + * + * Read more about customizing the appearance and behavior of the mathfield in + * the [Customizing the Mathfield](/mathfield/guides/customizing/) guide. + * + * + * #### MathfieldElement CSS Variables + * + * **To customize the appearance of the mathfield**, declare the following CSS + * variables (custom properties) in a ruleset that applies to the mathfield. + * + * ```css + * math-field { + * --hue: 10 // Set the highlight color and caret to a reddish hue + * } + * ``` + * + * Alternatively you can set these CSS variables programatically: + * + * ```js + * document.body.style.setProperty("--hue", "10"); + * ``` + * + * Read more about the [CSS variables](/mathfield/guides/customizing/#css-variables) available for customization. + * + * You can customize the appearance and zindex of the virtual keyboard panel + * with some CSS variables associated with a selector that applies to the + * virtual keyboard panel container. + * + * Read more about [customizing the virtual keyboard appearance](/mathfield/guides/virtual-keyboards/#custom-appearance) + * + * #### MathfieldElement CSS Parts + * + * In addition to the CSS variables, the mathfield exposes [CSS + * parts that can be used to style the mathfield](/mathfield/guides/customizing/#mathfield-parts). + * + * For example, to hide the menu button: + * + * ```css + * math-field::part(menu-toggle) { + * display: none; + * } + * ``` + * + * + * #### MathfieldElement Attributes + * + * An attribute is a key-value pair set as part of the `` tag: + * + * ```html + * + * ``` + * + * The supported attributes are listed in the table below with their + * corresponding property, which can be changed directly on the + * `MathfieldElement` object: + * + * ```javascript + * mf.value = "\\sin x"; + * mf.letterShapeStyle = "tex"; + * ``` + * + * The values of attributes and properties are reflected, which means you can + * change one or the other, for example: + * + * ```javascript + * mf.setAttribute("letter-shape-style", "french"); + * console.log(mf.letterShapeStyle); + * // Result: "french" + * + * mf.letterShapeStyle ="tex"; + * console.log(mf.getAttribute("letter-shape-style"); + * // Result: "tex" + * ``` + * + * An exception is the `value` property, which is not reflected on the `value` + * attribute. For consistency with other DOM elements, the `value` attribute + * remains at its initial value. + * + * + *
    + * + * | Attribute | Property | + * |:---|:---| + * | `disabled` | `mf.disabled` | + * | `default-mode` | `mf.defaultMode` | + * | `letter-shape-style` | `mf.letterShapeStyle` | + * | `min-font-scale` | `mf.minFontScale` | + * | `max-matrix-cols` | `mf.maxMatrixCols` | + * | `popover-policy` | `mf.popoverPolicy` | + * | `math-mode-space` | `mf.mathModeSpace` | + * | `read-only` | `mf.readOnly` | + * | `remove-extraneous-parentheses` | `mf.removeExtraneousParentheses` | + * | `smart-fence` | `mf.smartFence` | + * | `smart-mode` | `mf.smartMode` | + * | `smart-superscript` | `mf.smartSuperscript` | + * | `inline-shortcut-timeout` | `mf.inlineShortcutTimeout` | + * | `script-depth` | `mf.scriptDepth` | + * | `value` | `value` | + * | `math-virtual-keyboard-policy` | `mathVirtualKeyboardPolicy` | + * + *
    + * + * See [more details about these attributes](#mathfieldelementattributes). + * + * In addition, the following DOM elements [global attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes) + * are supported: + * - `class` + * - `data-*` + * - `hidden` + * - `id` + * - `item*` + * - `style` + * - `tabindex` + * + * + * #### MathfieldElement Events + * + * **To listen to these events** use `mf.addEventListener()`. For events with + * additional arguments, the arguments are available in `event.detail`. + * + *
    + * + * | Event Name | Description | + * |:---|:---| + * | `beforeinput` | The value of the mathfield is about to be modified. | + * | `input` | The value of the mathfield has been modified. This happens on almost every keystroke in the mathfield. The `evt.data` property includes a copy of `evt.inputType`. See `InputEvent` | + * | `change` | The user has committed the value of the mathfield. This happens when the user presses **Return** or leaves the mathfield. | + * | `selection-change` | The selection (or caret position) in the mathfield has changed | + * | `mode-change` | The mode (`math`, `text`) of the mathfield has changed | + * | `undo-state-change` | The state of the undo stack has changed. The `evt.detail.type` indicate if a snapshot was taken or an undo performed. | + * | `read-aloud-status-change` | The status of a read aloud operation has changed | + * | `before-virtual-keyboard-toggle` | The visibility of the virtual keyboard panel is about to change. The `evt.detail.visible` property indicate if the keyboard will be visible or not. Listen for this event on `window.mathVirtualKeyboard` | + * | `virtual-keyboard-toggle` | The visibility of the virtual keyboard panel has changed. Listen for this event on `window.mathVirtualKeyboard` | + * | `geometrychange` | The geometry of the virtual keyboard has changed. The `evt.detail.boundingRect` property is the new bounding rectangle of the virtual keyboard. Listen for this event on `window.mathVirtualKeyboard` | + * | `blur` | The mathfield is losing focus | + * | `focus` | The mathfield is gaining focus | + * | `move-out` | The user has pressed an **arrow** key or the **tab** key, but there is nowhere to go. This is an opportunity to change the focus to another element if desired.
    `detail: \{direction: 'forward' | 'backward' | 'upward' | 'downward'\}` **cancellable**| + * | `keypress` | The user pressed a physical keyboard key | + * | `mount` | The element has been attached to the DOM | + * | `unmount` | The element is about to be removed from the DOM | + * + *
    + * @category Mathfield + * @keywords zindex, events, attribute, attributes, property, properties, parts, variables, css, mathfield, mathfieldelement + * + */ +export declare class MathfieldElement extends HTMLElement implements Mathfield { + static version: string; + /** @internal */ + static get formAssociated(): boolean; + /** + * Private lifecycle hooks. + * If adding a 'boolean' attribute, add its default value to getOptionsFromAttributes + * @internal + */ + static get optionsAttributes(): Readonly>; + /** + * Custom elements lifecycle hooks + * @internal + */ + static get observedAttributes(): readonly string[]; + /** + * A URL fragment pointing to the directory containing the fonts + * necessary to render a formula. + * + * These fonts are available in the `/fonts` directory of the npm package. + * + * Customize this value to reflect where you have copied these fonts, + * or to use the CDN version. + * + * The default value is `"./fonts"`. Use `null` to prevent + * any fonts from being loaded. + * + * Changing this setting after the mathfield has been created will have + * no effect. + * + * ```javascript + * { + * // Use the CDN version + * fontsDirectory: '' + * } + * ``` + * + * ```javascript + * { + * // Use a directory called "fonts", located next to the + * // `mathlive.js` (or `mathlive.mjs`) file. + * fontsDirectory: './fonts' + * } + * ``` + * + * ```javascript + * { + * // Use a directory located at the root of your website + * fontsDirectory: 'https://example.com/fonts' + * } + * ``` + * + */ + static get fontsDirectory(): string | null; + static set fontsDirectory(value: string | null); + static openUrl: (href: string) => void; + /** @internal */ + get fontsDirectory(): never; + /** @internal */ + set fontsDirectory(_value: unknown); + /** @internal */ + private static _fontsDirectory; + /** + * A URL fragment pointing to the directory containing the optional + * sounds used to provide feedback while typing. + * + * Some default sounds are available in the `/dist/sounds` directory of the SDK. + * + * Use `null` to prevent any sound from being loaded. + * @category Virtual Keyboard + */ + static get soundsDirectory(): string | null; + static set soundsDirectory(value: string | null); + /** @internal */ + get soundsDirectory(): never; + /** @internal */ + set soundsDirectory(_value: unknown); + /** @internal */ + private static _soundsDirectory; + /** + * When a key on the virtual keyboard is pressed, produce a short haptic + * feedback, if the device supports it. + * @category Virtual Keyboard + */ + static keypressVibration: boolean; + /** + * When a key on the virtual keyboard is pressed, produce a short audio + * feedback. + * + * If the property is set to a `string`, the same sound is played in all + * cases. Otherwise, a distinct sound is played: + * + * - `delete` a sound played when the delete key is pressed + * - `return` ... when the return/tab key is pressed + * - `spacebar` ... when the spacebar is pressed + * - `default` ... when any other key is pressed. This property is required, + * the others are optional. If they are missing, this sound is played as + * well. + * + * The value of the properties should be either a string, the name of an + * audio file in the `soundsDirectory` directory or `null` to suppress + * the sound. + * + * If the `soundsDirectory` is `null`, no sound will be played. + * + * @category Virtual Keyboard + */ + static get keypressSound(): Readonly<{ + spacebar: null | string; + return: null | string; + delete: null | string; + default: null | string; + }>; + static set keypressSound(value: null | string | { + spacebar?: null | string; + return?: null | string; + delete?: null | string; + default: null | string; + }); + /** @internal */ + private static _keypressSound; + /** @ignore */ + private static _plonkSound; + /** + * Sound played to provide feedback when a command has no effect, for example + * when pressing the spacebar at the root level. + * + * The property is either: + * - a string, the name of an audio file in the `soundsDirectory` directory + * - `null` to turn off the sound + * + * If the `soundsDirectory` is `null`, no sound will be played. + * + */ + static get plonkSound(): string | null; + static set plonkSound(value: string | null); + /** @internal */ + private static audioBuffers; + /** @internal */ + private static _audioContext; + /** @internal */ + private static get audioContext(); + /** + * Support for [Trusted Type](https://www.w3.org/TR/trusted-types/). + * + * This optional function will be called before a string of HTML is + * injected in the DOM, allowing that string to be sanitized + * according to a policy defined by the host. + * + * Consider using this option if you are displaying untrusted content. Read more about [Security Considerations](/mathfield/guides/security/) + * + */ + static createHTML: (html: string) => any; + /** + * Indicates which speech engine to use for speech output. + * + * Use `local` to use the OS-specific TTS engine. + * + * Use `amazon` for Amazon Text-to-Speech cloud API. You must include the + * AWS API library and configure it with your API key before use. + * + * **See** + * {@link mathfield/guides/speech/ | Guide: Speech} + * @category Speech + */ + static get speechEngine(): 'local' | 'amazon'; + static set speechEngine(value: 'local' | 'amazon'); + /** @internal */ + private static _speechEngine; + /** + * Sets the speed of the selected voice. + * + * One of `x-slow`, `slow`, `medium`, `fast`, `x-fast` or a value as a + * percentage. + * + * Range is `20%` to `200%` For example `200%` to indicate a speaking rate + * twice the default rate. + * @category Speech + */ + static get speechEngineRate(): string; + static set speechEngineRate(value: string); + /** @internal */ + private static _speechEngineRate; + /** + * Indicates the voice to use with the speech engine. + * + * This is dependent on the speech engine. For Amazon Polly, see here: + * https://docs.aws.amazon.com/polly/latest/dg/voicelist.html + * + * @category Speech + */ + static get speechEngineVoice(): string; + static set speechEngineVoice(value: string); + /** @internal */ + private static _speechEngineVoice; + /** + * The markup syntax to use for the output of conversion to spoken text. + * + * Possible values are `ssml` for the SSML markup or `mac` for the macOS + * markup, i.e. `[[ltr]]`. + * @category Speech + * + */ + static get textToSpeechMarkup(): '' | 'ssml' | 'ssml_step' | 'mac'; + static set textToSpeechMarkup(value: '' | 'ssml' | 'ssml_step' | 'mac'); + /** @internal */ + private static _textToSpeechMarkup; + /** + * Specify which set of text to speech rules to use. + * + * A value of `mathlive` indicates that the simple rules built into MathLive + * should be used. + * + * A value of `sre` indicates that the Speech Rule Engine from Volker Sorge + * should be used. + * + * **(Caution)** SRE is not included or loaded by MathLive. For this option to + * work SRE should be loaded separately. + * + * **See** + * {@link mathfield/guides/speech/ | Guide: Speech} + * @category Speech + */ + static get textToSpeechRules(): 'mathlive' | 'sre'; + static set textToSpeechRules(value: 'mathlive' | 'sre'); + /** @internal */ + private static _textToSpeechRules; + /** + * A set of key/value pairs that can be used to configure the speech rule + * engine. + * + * Which options are available depends on the speech rule engine in use. + * There are no options available with MathLive's built-in engine. The + * options for the SRE engine are documented + * {@link https://github.com/zorkow/speech-rule-engine | here} + * @category Speech + */ + static get textToSpeechRulesOptions(): Readonly>; + static set textToSpeechRulesOptions(value: Record); + /** @internal */ + private static _textToSpeechRulesOptions; + /** @category Speech */ + static speakHook: (text: string) => void; + /** @category Speech */ + static readAloudHook: (element: HTMLElement, text: string) => void; + /** + * The locale (language + region) to use for string localization. + * + * If none is provided, the locale of the browser is used. + * @category Localization + * + */ + static get locale(): string; + static set locale(value: string); + /** @internal */ + get locale(): never; + /** @internal */ + set locale(_value: unknown); + /** + * An object whose keys are a locale string, and whose values are an object of + * string identifier to localized string. + * + * **Example** + * + ```js example + mf.strings = { + "fr-CA": { + "tooltip.undo": "Annuler", + "tooltip.redo": "Refaire", + } + } + ``` + * + * If the locale is already supported, this will override the existing + * strings. If the locale is not supported, it will be added. + * + * @category Localization + */ + static get strings(): Readonly>>; + static set strings(value: Record>); + /** @internal */ + get strings(): never; + /** @internal */ + set strings(_val: unknown); + /** + * When switching from a tab to one that contains a mathfield that was + * previously focused, restore the focus to the mathfield. + * + * This is behavior consistent with ` + + + + x=\frac{\placeholder[numer]{}}{\placeholder[denom][correct]{3} + + x=\frac{3}{4} + + + +
    + + + + + + + +
    + + + + + + \ No newline at end of file diff --git a/dist/vue-mathlive.mjs b/dist/vue-mathlive.mjs new file mode 100644 index 000000000..6bfb4fd1c --- /dev/null +++ b/dist/vue-mathlive.mjs @@ -0,0 +1,3 @@ +/** MathLive 0.110.0 */ +var l={name:"mathlive-mathfield",template:'',props:{id:{type:String,default:""},value:{type:String,default:""}},install(e,t){e!=null&&e.version&&+e.version.split(".")[0]>=3?e.config.globalProperties.$mathlive=t:Object.defineProperty(e.prototype,"$mathlive",{value:t}),e.component("mathlive-mathfield",this)},watch:{value(e){let t=this.$el.getValue();e!==t&&this.$el.setValue(e,{silenceNotifications:!0})}},mounted(){this.$nextTick(()=>{})},methods:{executeCommand(e){this.$el.executeCommand(e)},hasFocus(){return this.$el.hasFocus()},focus(){this.$el.focus()},blur(){this.$el.blur()},getValue(e){return this.$el.getValue(e)},insert(e,t){this.$el.insert(e,t)},select(){this.$el.select()}}};export{l as default}; +//# sourceMappingURL=vue-mathlive.mjs.map diff --git a/dist/vue-mathlive.mjs.map b/dist/vue-mathlive.mjs.map new file mode 100644 index 000000000..4a08777ed --- /dev/null +++ b/dist/vue-mathlive.mjs.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["../src/vue-mathlive.js"], + "sourceRoot": "../src", + "mappings": ";AAAA,IAAOA,EAAQ,CACb,KAAM,qBACN,SAAU,kDACV,MAAO,CACL,GAAI,CACF,KAAM,OACN,QAAS,EACX,EACA,MAAO,CACL,KAAM,OACN,QAAS,EACX,CACF,EAeA,QAAQC,EAAKC,EAAU,CASjBD,GAAA,MAAAA,EAAK,SAAW,CAACA,EAAI,QAAQ,MAAM,GAAG,EAAE,CAAC,GAAK,EAEhDA,EAAI,OAAO,iBAAiB,UAAYC,EAGxC,OAAO,eAAeD,EAAI,UAAW,YAAa,CAAE,MAAOC,CAAS,CAAC,EAGvED,EAAI,UAAU,qBAAsB,IAAI,CAC1C,EACA,MAAO,CACL,MAAME,EAAU,CAId,IAAMC,EAAoB,KAAK,IAAI,SAAS,EACxCD,IAAaC,GACf,KAAK,IAAI,SAASD,EAAU,CAC1B,qBAAsB,EACxB,CAAC,CAEL,CACF,EACA,SAAU,CAIR,KAAK,UAAU,IAAM,CAAC,CAAC,CACzB,EACA,QAAS,CAKP,eAAeE,EAAU,CACvB,KAAK,IAAI,eAAeA,CAAQ,CAClC,EAIA,UAAW,CACT,OAAO,KAAK,IAAI,SAAS,CAC3B,EACA,OAAQ,CACN,KAAK,IAAI,MAAM,CACjB,EACA,MAAO,CACL,KAAK,IAAI,KAAK,CAChB,EACA,SAASC,EAAQ,CACf,OAAO,KAAK,IAAI,SAASA,CAAM,CACjC,EACA,OAAOC,EAAMC,EAAS,CACpB,KAAK,IAAI,OAAOD,EAAMC,CAAO,CAC/B,EACA,QAAS,CACP,KAAK,IAAI,OAAO,CAClB,CACF,CACF", + "names": ["vue_mathlive_default", "vue", "mathlive", "newValue", "oldMathfieldValue", "selector", "format", "text", "options"] +} diff --git a/package.json b/package.json index df3a1fcb9..b343872fd 100644 --- a/package.json +++ b/package.json @@ -9,41 +9,41 @@ }, "private": true, "files": [ - "/dist" + "dist" ], - "types": "./types/mathlive.d.ts", - "module": "./mathlive.min.mjs", - "main": "./mathlive.min.js", + "types": "./dist/types/mathlive.d.ts", + "module": "./dist/mathlive.min.mjs", + "main": "./dist/mathlive.min.js", "exports": { - "./vue": "./vue-mathlive.mjs", - "./fonts.css": "./mathlive-fonts.css", - "./static.css": "./mathlive-static.css", + "./vue": "./dist/vue-mathlive.mjs", + "./fonts.css": "./dist/mathlive-fonts.css", + "./static.css": "./dist/mathlive-static.css", ".": { "browser": { "production": { - "types": "./types/mathlive.d.ts", - "import": "./mathlive.min.mjs", - "require": "./mathlive.min.js" + "types": "./dist/types/mathlive.d.ts", + "import": "./dist/mathlive.min.mjs", + "require": "./dist/mathlive.min.js" }, "development": { - "types": "./types/mathlive.d.ts", - "import": "./mathlive.mjs", - "require": "./mathlive.js" + "types": "./dist/types/mathlive.d.ts", + "import": "./dist/mathlive.mjs", + "require": "./dist/mathlive.js" } }, "node": { - "types": "./types/mathlive-ssr.d.ts", - "import": "./mathlive-ssr.min.mjs" + "types": "./dist/types/mathlive-ssr.d.ts", + "import": "./dist/mathlive-ssr.min.mjs" }, "default": { - "types": "./types/mathlive.d.ts", - "import": "./mathlive.min.mjs", - "require": "./mathlive.min.js" + "types": "./dist/types/mathlive.d.ts", + "import": "./dist/mathlive.min.mjs", + "require": "./dist/mathlive.min.js" } }, "./ssr": { - "types": "./types/mathlive-ssr.d.ts", - "import": "./mathlive-ssr.min.mjs" + "types": "./dist/types/mathlive-ssr.d.ts", + "import": "./dist/mathlive-ssr.min.mjs" } }, "repository": { @@ -57,7 +57,7 @@ "clean": "bash ./scripts/clean.sh", "dist": "bash ./scripts/build.sh production; bash ./scripts/test.sh", "lint": "eslint --fix src/; prettier -w src/", - "prepare": "bash ./scripts/build.sh production", + "prepare": "node ./scripts/build.mjs", "start": "bash ./scripts/start.sh", "test": "bash ./scripts/test.sh", "version": "bash ./scripts/version.sh" diff --git a/src/api.md b/src/api.md index fd4972613..d960ec222 100644 --- a/src/api.md +++ b/src/api.md @@ -516,14 +516,16 @@ and background values, and are recommended: ##### MathfieldElement.defaultMode ```ts -get defaultMode(): "text" | "math" | "inline-math" -set defaultMode(value: "text" | "math" | "inline-math"): void +get defaultMode(): "text" | "free-text" | "free-math" | "math" | "inline-math" +set defaultMode(value: "text" | "free-text" | "free-math" | "math" | "inline-math"): void ``` The mode of the element when it is empty: - `"math"`: equivalent to `\displaystyle` (display math mode) - `"inline-math"`: equivalent to `\inlinestyle` (inline math mode) - `"text"`: text mode +- `"free-text"`: multiline text editing with inline LaTeX +- `"free-math"`: multiline math editing with inline text islands @@ -6795,7 +6797,7 @@ colorMap: (name) => string | undefined; ##### LayoutOptions.defaultMode ```ts -defaultMode: "inline-math" | "math" | "text"; +defaultMode: "inline-math" | "math" | "text" | "free-text" | "free-math"; ``` diff --git a/src/atoms/array.ts b/src/atoms/array.ts index f5ce37e15..99e7d6d1a 100644 --- a/src/atoms/array.ts +++ b/src/atoms/array.ts @@ -4,6 +4,7 @@ import type { Environment, ParseMode, } from '../public/core-types'; +import { isTextMode } from '../public/core-types'; import { Atom, isCellBranch, isNamedBranch } from '../core/atom-class'; import { Box } from '../core/box'; @@ -68,11 +69,123 @@ export type ArrayAtomConstructorOptions = { type ArrayRow = { cells: Box[]; + directions?: ('auto' | 'ltr')[]; height: number; depth: number; pos: number; }; +function freeTextRowDirection(atoms: readonly Atom[]): 'auto' | 'ltr' { + let hasMath = false; + for (const atom of atoms) { + const bidiClass = freeTextBidiClass(atom); + if (bidiClass === 'rtl' || bidiClass === 'ltr') return 'auto'; + if (bidiClass === 'math') hasMath = true; + } + return hasMath ? 'ltr' : 'auto'; +} + +type FreeTextBidiClass = 'rtl' | 'ltr' | 'neutral' | 'math'; + +function freeTextBidiClass(atom: Atom): FreeTextBidiClass { + if (!isTextMode(atom.mode)) return 'math'; + if (!atom.value || atom.type === 'first') return 'neutral'; + // JavaScript does not expose Unicode Bidi_Class as a regular-expression + // property. Cover the RTL script blocks supported by the editor, then treat + // remaining letters and numbers as LTR strong content. + if (/[\u0590-\u08ff\ufb1d-\ufdff\ufe70-\ufeff]/u.test(atom.value)) + return 'rtl'; + if (/[\p{Letter}\p{Number}]/u.test(atom.value)) return 'ltr'; + return 'neutral'; +} + +function renderFreeTextAtoms( + context: Context, + atoms: readonly Atom[] +): Box[] { + const runs: { atoms: Atom[]; isText: boolean }[] = []; + for (const atom of atoms) { + const atomIsText = atom.type === 'first' || isTextMode(atom.mode); + const current = runs[runs.length - 1]; + if (current?.isText !== atomIsText) + runs.push({ atoms: [atom], isText: atomIsText }); + else current.atoms.push(atom); + } + + return runs.flatMap((run) => { + const box = Atom.createBox(context, run.atoms, { type: 'ignore' }); + if (!box) return []; + if (run.isText) return [box]; + return [ + new Box(box, { + classes: 'ML__free-text-math-island', + attributes: { dir: 'ltr' }, + }), + ]; + }); +} + +function makeFreeTextCellBox( + context: Context, + atoms: readonly Atom[] +): Box | null { + const boxes: Box[] = []; + let index = 0; + while (index < atoms.length) { + if (freeTextBidiClass(atoms[index]) === 'rtl') { + let end = index + 1; + while (end < atoms.length && freeTextBidiClass(atoms[end]) === 'rtl') + end++; + boxes.push(...renderFreeTextAtoms(context, atoms.slice(index, end))); + index = end; + continue; + } + + let end = index + 1; + while (end < atoms.length && freeTextBidiClass(atoms[end]) !== 'rtl') end++; + const region = atoms.slice(index, end); + const hasMath = region.some((atom) => freeTextBidiClass(atom) === 'math'); + if (!hasMath) boxes.push(...renderFreeTextAtoms(context, region)); + else { + // Native bidi keeps text-only runs in WhatsApp-style logical order. A + // formula needs a wider isolate: include adjacent LTR/neutral content up + // to the next strong RTL character so "formula then English" does not + // visually reverse into "English then formula" in an RTL paragraph. + let islandStart = 0; + let islandEnd = region.length; + while ( + islandStart < islandEnd && + freeTextBidiClass(region[islandStart]) === 'neutral' + ) + islandStart++; + while ( + islandEnd > islandStart && + freeTextBidiClass(region[islandEnd - 1]) === 'neutral' + ) + islandEnd--; + + boxes.push( + ...renderFreeTextAtoms(context, region.slice(0, islandStart)) + ); + const island = renderFreeTextAtoms( + context, + region.slice(islandStart, islandEnd) + ); + if (island.length > 0) + boxes.push( + new Box(island, { + classes: 'ML__free-text-ltr-island', + attributes: { dir: 'ltr' }, + }) + ); + boxes.push(...renderFreeTextAtoms(context, region.slice(islandEnd))); + } + index = end; + } + if (boxes.length === 0) return null; + return new Box(boxes, { type: 'ignore' }); +} + /** * Normalize cells: * - ensure the array of cells is dense (not sparse) @@ -469,6 +582,7 @@ export class ArrayAtom extends Atom { const arstrutDepth = 0.3 * arrayskip; // \@arstrutbox in lttab.dtx let totalHeight = 0; const body: ArrayRow[] = []; + const isFreeText = this.classes.includes('ML__free-text-root'); let nc = 0; const nr = this._rows.length; for (let r = 0; r < nr; ++r) { @@ -483,7 +597,13 @@ export class ArrayAtom extends Atom { ); let height = arstrutHeight / cellContext.scalingFactor; // \@array adds an \@arstrut let depth = arstrutDepth / cellContext.scalingFactor; // To each row (via the template) - const outrow: ArrayRow = { cells: [], height: 0, depth: 0, pos: 0 }; + const outrow: ArrayRow = { + cells: [], + directions: isFreeText ? [] : undefined, + height: 0, + depth: 0, + pos: 0, + }; for (const element of inrow) { const elt = this.isMultiline && element && isEmptyMultilineCell(element) @@ -491,11 +611,14 @@ export class ArrayAtom extends Atom { height: arstrutHeight / cellContext.scalingFactor, depth: arstrutDepth / cellContext.scalingFactor, }) - : (Atom.createBox(cellContext, element, { type: 'ignore' }) ?? + : ((isFreeText + ? makeFreeTextCellBox(cellContext, element ?? []) + : Atom.createBox(cellContext, element, { type: 'ignore' })) ?? new Box(null, { type: 'ignore' })); depth = Math.max(depth, elt.depth); height = Math.max(height, elt.height); outrow.cells.push(elt); + outrow.directions?.push(freeTextRowDirection(element ?? [])); } let gap: number = convertDimensionToEm(this.rowGaps[r]) ?? 0; @@ -541,7 +664,13 @@ export class ArrayAtom extends Atom { element.depth = row.depth; element.height = row.height; - stack.push({ box: element, shift: row.pos - offset }); + const direction = row.directions?.[colIndex]; + stack.push({ + box: element, + shift: row.pos - offset, + classes: direction ? ['ML__free-text-line'] : undefined, + attributes: direction ? { dir: direction } : undefined, + }); } } diff --git a/src/core/atom-class.ts b/src/core/atom-class.ts index aa68b4be9..b05207831 100644 --- a/src/core/atom-class.ts +++ b/src/core/atom-class.ts @@ -1,3 +1,4 @@ +import { isTextMode } from '../public/core-types'; import type { ParseMode, Style, FontSize } from '../public/core-types'; import { PT_PER_EM, X_HEIGHT } from './font-metrics'; @@ -547,6 +548,8 @@ export class Atom { this.style.fontShape = style.fontShape; if (style.fontSeries && !this.style.fontSeries) this.style.fontSeries = style.fontSeries; + if (style.textDecoration && !this.style.textDecoration) + this.style.textDecoration = style.textDecoration; if (style.fontSize && !this.style.fontSize) this.style.fontSize = style.fontSize; if (style.variant && !this.style.variant) @@ -1066,7 +1069,7 @@ export class Atom { let classes = options?.classes ?? ''; - if (this.mode === 'text') classes += ' ML__text'; + if (isTextMode(this.mode)) classes += ' ML__text'; const result = typeof value === 'string' || value === undefined @@ -1249,7 +1252,7 @@ function renderStyleRun( } function isText(atom: Atom): boolean { - return atom.mode === 'text'; + return isTextMode(atom.mode); } function argumentsToJson(args: T): any { diff --git a/src/core/box.ts b/src/core/box.ts index 02adc19a8..524a6235f 100644 --- a/src/core/box.ts +++ b/src/core/box.ts @@ -528,7 +528,8 @@ export class Box implements BoxInterface { // // 5. Add markup for the caret // - if (this.caret === 'text') result += ''; + if (this.caret === 'text' || this.caret === 'free-text') + result += ''; else if (this.caret === 'math') result += ''; return result; diff --git a/src/core/modes-math.ts b/src/core/modes-math.ts index abab90ca5..8b2e23fd9 100644 --- a/src/core/modes-math.ts +++ b/src/core/modes-math.ts @@ -14,6 +14,7 @@ import type { Variant, VariantStyle, } from '../public/core-types'; +import { isTextMode } from '../public/core-types'; import { mathVariantToUnicode } from './unicode'; import type { TokenDefinition } from 'latex-commands/types'; import type { FontName, ToLatexOptions } from './types'; @@ -115,6 +116,7 @@ const LETTER_SHAPE_MODIFIER = { export class MathMode extends Mode { constructor() { super('math'); + Mode._registry['free-math'] = this; } createAtom(command: string, info: TokenDefinition, style?: Style): Atom { @@ -165,7 +167,7 @@ export class MathMode extends Mode { serialize(run: Atom[], options: ToLatexOptions): string[] { const result = emitBoldRun(run, { ...options, defaultMode: 'math' }); - if (result.length === 0 || options.defaultMode !== 'text') return result; + if (result.length === 0 || !isTextMode(options.defaultMode)) return result; return ['$ ', ...result, ' $']; } diff --git a/src/core/modes-text.ts b/src/core/modes-text.ts index 214af1d90..fce02cfb1 100644 --- a/src/core/modes-text.ts +++ b/src/core/modes-text.ts @@ -3,7 +3,12 @@ import { TextAtom } from '../atoms/text'; import type { Atom } from './atom'; import type { Box } from './box'; import { Mode, getPropertyRuns } from './modes-utils'; -import type { FontSeries, FontShape, Style } from '../public/core-types'; +import type { + FontSeries, + FontShape, + Style, + TextDecoration, +} from '../public/core-types'; import { joinLatex, latexCommand } from './tokenizer'; import type { TokenDefinition } from '../latex-commands/types'; import type { ToLatexOptions, FontName } from './types'; @@ -73,6 +78,24 @@ function emitSizeTextRun(run: Atom[], options: ToLatexOptions): string[] { }); } +function emitTextDecorationTextRun( + run: readonly Atom[], + options: ToLatexOptions, + needsWrap: boolean +): string[] { + return getPropertyRuns(run, 'textDecoration').map((x: Atom[]) => { + const body = emitFontFamilyTextRun(x, options, needsWrap); + const decoration = x[0].style.textDecoration; + if (!decoration || decoration === 'none') return joinLatex(body); + + let result = joinLatex(body); + if (decoration.includes('underline')) result = `\\underline{${result}}`; + if (decoration.includes('line-through')) + result = `\\enclose{horizontalstrike}{${result}}`; + return result; + }); +} + function emitFontFamilyTextRun( run: Atom[], options: ToLatexOptions, @@ -114,6 +137,9 @@ const TEXT_FONT_CLASS: Record = { export class TextMode extends Mode { constructor() { super('text'); + // Free-text uses the text atom/parser implementation, but is a distinct + // editing mode at the MathLive API level. + Mode._registry['free-text'] = this; } createAtom( @@ -133,13 +159,10 @@ export class TextMode extends Mode { } serialize(run: Atom[], options: ToLatexOptions): string[] { - return emitFontFamilyTextRun( + return emitTextDecorationTextRun( run, - { - ...options, - defaultMode: 'text', - }, - options.defaultMode !== 'text' + { ...options, defaultMode: 'text' }, + options.defaultMode !== 'text' && options.defaultMode !== 'free-text' ); } @@ -152,6 +175,7 @@ export class TextMode extends Mode { fontFamily?: string; fontShape?: FontShape; fontSeries?: FontSeries; + textDecoration?: TextDecoration; } ): FontName | null { const { fontFamily } = style; @@ -206,6 +230,13 @@ export class TextMode extends Mode { } } + if (style.textDecoration && style.textDecoration !== 'none') { + if (style.textDecoration.includes('underline')) + box.classes += ' ML__underline'; + if (style.textDecoration.includes('line-through')) + box.classes += ' ML__line-through'; + } + // Always use the metrics of 'Main-Regular' in text mode return 'Main-Regular'; } diff --git a/src/core/modes-utils.ts b/src/core/modes-utils.ts index 658721204..71755cb54 100644 --- a/src/core/modes-utils.ts +++ b/src/core/modes-utils.ts @@ -6,9 +6,11 @@ import type { FontSize, ParseMode, Style, + TextDecoration, Variant, VariantStyle, } from '../public/core-types'; +import { isTextMode } from '../public/core-types'; import { getDefinition } from '../latex-commands/definitions-utils'; import { joinLatex, latexCommand } from './tokenizer'; import type { TokenDefinition } from 'latex-commands/types'; @@ -63,6 +65,7 @@ export abstract class Mode { fontFamily?: string; fontShape?: FontShape; fontSeries?: FontSeries; + textDecoration?: TextDecoration; } ): FontName | null { return Mode._registry[mode].getFont(box, style); @@ -88,6 +91,7 @@ export abstract class Mode { fontFamily?: string; fontShape?: FontShape; fontSeries?: FontSeries; + textDecoration?: TextDecoration; fontSize?: FontSize | 'auto'; letterShapeStyle?: 'tex' | 'french' | 'iso' | 'upright'; } @@ -203,7 +207,7 @@ function emitColorRun(run: readonly Atom[], options: ToLatexOptions): string[] { const style = colorRun[0].style; const body = Mode._registry[colorRun[0].mode].serialize(colorRun, { ...options, - defaultMode: mode === 'text' ? 'text' : 'math', + defaultMode: isTextMode(mode) ? 'text' : 'math', }); if ( !options.skipStyles && diff --git a/src/core/parser.ts b/src/core/parser.ts index 4e833a29c..b42a0ad4b 100644 --- a/src/core/parser.ts +++ b/src/core/parser.ts @@ -41,6 +41,11 @@ import { Argument, LatexCommandDefinition } from 'latex-commands/types'; import { codePointToLatex } from './unicode'; import { isArray } from '../common/types'; +// Used by the free-text parser to carry literal tab characters through TeX +// tokenization. A private-use marker is needed because TeX normally folds +// tabs and spaces into the same whitespace token. +export const FREE_TEXT_TAB_MARKER = '\uE000'; + // // - Literal (character token): a letter, digit or punctuation // - Token: a space ``, a literal, name, group or mode shift @@ -156,7 +161,14 @@ export class Parser { parent: undefined, mathlist: [], style: options.style ?? {}, - parseMode: options.parseMode ?? 'math', + // Free-text has the text parser semantics. Free-math has the ordinary + // math parser semantics; both distinctions are editor/layout modes. + parseMode: + options.parseMode === 'free-text' + ? 'text' + : options.parseMode === 'free-math' + ? 'math' + : options.parseMode ?? 'math', mathstyle: options.mathstyle ?? 'displaystyle', tabular: false, }; @@ -1318,6 +1330,9 @@ export class Parser { // Is it a literal? // if (isLiteral(token)) { + if (token === FREE_TEXT_TAB_MARKER) { + return [new TextAtom(token, '\t', this.style)]; + } const result = Mode.createAtom(this.parseMode, token, { ...this.style }); return result ? [result] : null; } diff --git a/src/core/types.ts b/src/core/types.ts index 3d02d736f..6ab22fef8 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -216,7 +216,7 @@ export type ToLatexOptions = { // Don't emit unnecessary style shift commands: you can assume we're in // this default mode. - defaultMode: 'text' | 'math' | 'inline-math'; + defaultMode: 'text' | 'free-text' | 'free-math' | 'math' | 'inline-math'; }; // IMPORTANT: when adding a new atom type, add its constructor to `toJson()` diff --git a/src/core/v-box.ts b/src/core/v-box.ts index 129be8bd9..b6a91a8e4 100644 --- a/src/core/v-box.ts +++ b/src/core/v-box.ts @@ -9,6 +9,7 @@ type VBoxElement = { marginRight?: number; classes?: string[]; style?: Style; + attributes?: Record; }; export type VBoxElementAndShift = VBoxElement & { shift: number }; @@ -160,6 +161,7 @@ function makeRows( const childWrap = new Box([pstrut, box], { classes: classes.join(' '), style: child.style, + attributes: child.attributes, }); box.setStyle('height', box.height + box.depth, 'em'); box.setStyle('display', 'inline-block'); diff --git a/src/editor-mathfield/commands.ts b/src/editor-mathfield/commands.ts index 815f3f4c0..6da11d1aa 100644 --- a/src/editor-mathfield/commands.ts +++ b/src/editor-mathfield/commands.ts @@ -3,8 +3,9 @@ import type { _Mathfield } from './mathfield-private'; import { onInput } from './keyboard-input'; import { toggleKeystrokeCaption } from './keystroke-caption'; import { requestUpdate } from './render'; -import { ParseMode } from '../public/core-types'; +import { isMathMode, ParseMode } from '../public/core-types'; import { updateAutocomplete } from './autocomplete'; +import { isFreeLinesRoot, markFreeTextAnchors } from './free-text'; // Commands that don't change content registerCommand({ @@ -72,7 +73,7 @@ registerCommand( insertDecimalSeparator: (mathfield: _Mathfield) => { const model = mathfield.model; if ( - model.mode === 'math' && + isMathMode(model.mode) && globalThis.MathfieldElement.decimalSeparator === ',' ) { const child = model.at(Math.max(model.position, model.anchor)); @@ -89,13 +90,26 @@ registerCommand( // e.g. when using a virtual keyboard commit: (mathfield: _Mathfield) => { const model = mathfield.model; + const freeMode = + mathfield.options.defaultMode === 'free-math' + ? 'free-math' + : mathfield.options.defaultMode === 'free-text' + ? 'free-text' + : undefined; if (model.contentWillChange({ inputType: 'insertLineBreak' })) { mathfield.host?.dispatchEvent( new Event('change', { bubbles: true, composed: true }) ); // If we're in a multiline environment, insert a newline - if (model.parentEnvironment?.isMultiline) + if (model.parentEnvironment?.isMultiline) { mathfield.executeCommand('addRowAfter'); + if (freeMode) { + if (isFreeLinesRoot(model.root)) + markFreeTextAnchors(model.root, freeMode); + if (model.mode !== freeMode) mathfield.switchMode(freeMode); + if (model.mode !== freeMode) model.mode = freeMode; + } + } model.contentDidChange({ inputType: 'insertLineBreak' }); } diff --git a/src/editor-mathfield/free-text.ts b/src/editor-mathfield/free-text.ts new file mode 100644 index 000000000..3f277babb --- /dev/null +++ b/src/editor-mathfield/free-text.ts @@ -0,0 +1,316 @@ +import { ArrayAtom } from '../atoms/array'; +import { TextAtom } from '../atoms/text'; +import { splitGraphemes } from '../core/grapheme-splitter'; +import { FREE_TEXT_TAB_MARKER, parseLatex } from '../core/parser'; +import { getDefinition } from '../latex-commands/definitions-utils'; +import type { Atom } from '../core/atom-class'; +import type { ContextInterface } from '../core/types'; +import type { Style } from '../public/core-types'; + +// TeX parsing normally treats a tab as collapsible whitespace. Keep a +// private marker through the parser when rehydrating a serialized free-text +// lines root, then restore it to a real text atom. +/** Create the root used by the free-text editor. */ +export function makeFreeTextRoot( + lines: readonly (readonly Atom[])[] +): ArrayAtom { + return makeFreeLinesRoot(lines, 'free-text'); +} + +/** Create a multiline root whose ordinary input is interpreted as math. */ +export function makeFreeMathRoot( + lines: readonly (readonly Atom[])[] +): ArrayAtom { + return makeFreeLinesRoot(lines, 'free-math'); +} + +function makeFreeLinesRoot( + lines: readonly (readonly Atom[])[], + mode: 'free-text' | 'free-math' +): ArrayAtom { + return markFreeTextAnchors( + new ArrayAtom( + 'lines', + lines.map((line) => [[...line]]), + [], + { + leftDelim: '.', + rightDelim: '.', + columns: [{ align: 'l' }], + isRoot: true, + minColumns: 1, + maxColumns: 1, + minRows: 1, + } + ), + mode + ); +} + +/** Mark row anchors as free-text so moving the caret across an empty row does + * not implicitly switch the editor back to math mode. */ +export function markFreeTextAnchors( + root: ArrayAtom, + mode: 'free-text' | 'free-math' = 'free-text' +): ArrayAtom { + root.classes = root.classes.filter( + (className) => + className !== 'ML__free-text-root' && className !== 'ML__free-math-root' + ); + root.classes.push( + mode === 'free-text' ? 'ML__free-text-root' : 'ML__free-math-root' + ); + for (const row of root.rows) + for (const cell of row) + if (cell?.[0]?.type === 'first') cell[0].mode = mode; + return root; +} + +export function isFreeLinesRoot(root: Atom): root is ArrayAtom { + return ( + root instanceof ArrayAtom && + root.environmentName === 'lines' && + root.isRoot + ); +} + +export function isFreeTextRoot(root: Atom): root is ArrayAtom { + return isFreeLinesRoot(root) && freeLinesMode(root) === 'free-text'; +} + +export function isFreeMathRoot(root: Atom): root is ArrayAtom { + return isFreeLinesRoot(root) && freeLinesMode(root) === 'free-math'; +} + +function freeLinesMode(root: ArrayAtom): 'free-text' | 'free-math' | undefined { + const mode = root.rows[0]?.[0]?.[0]?.mode; + return mode === 'free-text' || mode === 'free-math' ? mode : undefined; +} + +/** Turn pasted plain text into atoms without losing tabs or other whitespace. */ +export function makeFreeTextAtoms(text: string, style: Style = {}): TextAtom[] { + const graphemes = splitGraphemes(text); + const result: TextAtom[] = []; + for (const grapheme of typeof graphemes === 'string' ? [...graphemes] : graphemes) + result.push(new TextAtom(grapheme, grapheme, style)); + return result; +} + +/** + * Parse a free-text value. Ordinary characters remain text atoms, while + * explicit LaTeX commands and `$...$` regions become math atoms. + * Newlines are returned as separate rows so empty and trailing lines survive. + */ +export function parseFreeText( + value: string, + context: ContextInterface, + style: Style = {} +): Atom[][] { + return value.split(/\r\n|\n|\r/).map((line) => + parseFreeTextLine(line, context, style) + ); +} + +/** Parse a serialized free-text value, preserving an existing `lines` root. */ +export function parseFreeTextValue( + value: string, + context: ContextInterface +): ArrayAtom { + if ( + /\\displaylines|\\begin\{(?:lines|gathered|gather)\}|\$\$|\\(?:\(|\[)/.test( + value + ) + ) { + const atoms = parseLatex(value.split('\t').join(FREE_TEXT_TAB_MARKER), { + context, + }); + if (atoms.length === 1 && isFreeLinesRoot(atoms[0])) { + restoreFreeTextTabs(atoms[0]); + return markFreeTextAnchors(atoms[0]); + } + } + + return makeFreeTextRoot(parseFreeText(value, context)); +} + +/** Parse a serialized free-math value, preserving line breaks and tabs. */ +export function parseFreeMathValue( + value: string, + context: ContextInterface +): ArrayAtom { + if (/\\displaylines|\\begin\{(?:lines|gathered|gather)\}/.test(value)) { + const atoms = parseLatex(value, { context, parseMode: 'math' }); + if (atoms.length === 1 && isFreeLinesRoot(atoms[0])) + return markFreeTextAnchors(atoms[0], 'free-math'); + } + + return makeFreeMathRoot(parseFreeMath(value, context)); +} + +/** Parse ordinary free-math input one line at a time. Spaces follow math-mode + * rules, while tabs remain explicit indentation atoms. */ +export function parseFreeMath( + value: string, + context: ContextInterface, + style: Style = {} +): Atom[][] { + return value.split(/\r\n|\n|\r/).map((line) => + parseFreeMathLine(line, context, style) + ); +} + +function parseFreeMathLine( + line: string, + context: ContextInterface, + style: Style +): Atom[] { + const result: Atom[] = []; + const segments = line.split('\t'); + for (let index = 0; index < segments.length; index++) { + if (index > 0) result.push(new TextAtom('\t', '\t', style)); + if (segments[index]) { + result.push( + ...parseLatex(segments[index], { + context, + parseMode: 'math', + style, + }) + ); + } + } + return result; +} + +function restoreFreeTextTabs(root: Atom): void { + if (root instanceof TextAtom && root.value.includes(FREE_TEXT_TAB_MARKER)) { + root.value = root.value.split(FREE_TEXT_TAB_MARKER).join('\t'); + if (root.verbatimLatex !== undefined) + root.verbatimLatex = root.verbatimLatex.split(FREE_TEXT_TAB_MARKER).join('\t'); + } + for (const child of root.children) restoreFreeTextTabs(child); +} + +function parseFreeTextLine( + line: string, + context: ContextInterface, + style: Style +): Atom[] { + const result: Atom[] = []; + let textStart = 0; + let index = 0; + + const flushText = (end: number): void => { + if (end <= textStart) return; + result.push(...makeFreeTextAtoms(line.slice(textStart, end), style)); + }; + + while (index < line.length) { + const c = line[index]; + + if (c === '$') { + const end = line.indexOf('$', index + 1); + if (end > index + 1) { + const atoms = parseLatex(line.slice(index + 1, end), { + context, + style, + }); + if (atoms.length > 0) { + flushText(index); + result.push(...atoms); + index = end + 1; + textStart = index; + continue; + } + } + } + + if (c === '\\') { + const commandEnd = commandNameEnd(line, index); + const command = line.slice(index, commandEnd); + if (command === '\\item') { + flushText(index); + result.push(...makeFreeTextAtoms('\u2022 ', style)); + index = commandEnd; + textStart = index; + continue; + } + + const definition = getDefinition(command, 'math'); + if (definition) { + const end = + definition.definitionType === 'symbol' + ? commandEnd + : commandWithArgumentsEnd(line, commandEnd, definition); + if (end >= commandEnd) { + const atoms = parseLatex(line.slice(index, end), { + context, + parseMode: 'math', + style, + }); + if (atoms.length > 0) { + flushText(index); + result.push(...atoms); + index = end; + textStart = index; + continue; + } + } + } + } + + index += 1; + } + + flushText(line.length); + return result; +} + +function commandNameEnd(value: string, start: number): number { + if (start + 1 >= value.length) return value.length; + if (/[A-Za-z*]/.test(value[start + 1])) { + let end = start + 2; + while (end < value.length && /[A-Za-z*]/.test(value[end])) end += 1; + return end; + } + return start + 2; +} + +function commandWithArgumentsEnd( + value: string, + start: number, + definition: ReturnType +): number { + if (!definition || definition.definitionType !== 'function') return start; + + let index = start; + for (const parameter of definition.params) { + while (index < value.length && /[ \t]/.test(value[index])) index += 1; + + if (value[index] === '[') index = balancedEnd(value, index, '[', ']'); + else if (value[index] === '{') index = balancedEnd(value, index, '{', '}'); + else if (parameter.isOptional) continue; + else if (index < value.length) index += 1; + else return start; + + if (index === -1) return start; + } + + return index; +} + +function balancedEnd( + value: string, + start: number, + open: string, + close: string +): number { + let depth = 0; + for (let index = start; index < value.length; index++) { + if (value[index] === open) depth += 1; + else if (value[index] === close) { + depth -= 1; + if (depth === 0) return index + 1; + } + } + return -1; +} diff --git a/src/editor-mathfield/keyboard-input.ts b/src/editor-mathfield/keyboard-input.ts index 1f3b74802..e0a1680f3 100644 --- a/src/editor-mathfield/keyboard-input.ts +++ b/src/editor-mathfield/keyboard-input.ts @@ -18,17 +18,20 @@ import { range } from '../editor-model/selection-utils'; import { complete, removeSuggestion, updateAutocomplete } from './autocomplete'; import { getLatexGroupBody } from './mode-editor-latex'; import { getDefinition } from '../latex-commands/definitions-utils'; +import { parseLatex } from '../core/parser'; import { requestUpdate } from './render'; import type { _Mathfield } from './mathfield-private'; import { removeIsolatedSpace, smartMode } from './smartmode'; import { showKeystroke } from './keystroke-caption'; import { ModeEditor } from './mode-editor'; +import { isMathMode } from 'public/core-types'; import type { ParseMode, Style } from 'public/core-types'; import type { _Model } from 'editor-model/model-private'; import { LeftRightAtom } from 'atoms/leftright'; import { RIGHT_DELIM, LEFT_DELIM } from 'core/delimiters'; import { mightProducePrintableCharacter } from '../ui/events/utils'; import { computeInsertStyle } from './styling'; +import { isFreeLinesRoot, markFreeTextAnchors } from './free-text'; /** * Handler in response to a keystroke event (or to a virtual keyboard keycap @@ -63,6 +66,25 @@ export function onKeystroke( const { model } = mathfield; const keystroke = keyboardEventToString(evt); + + // In free-text mode, a backslash is the explicit escape into an editable + // LaTeX run. Handle it before smart-mode processing: smart-mode can + // otherwise reinterpret the key and change the model to `text` before the + // free-text binding below gets a chance to run. + if ( + (mathfield.options.defaultMode === 'free-text' || + mathfield.options.defaultMode === 'free-math') && + keyboardEventToChar(evt) === '\\' && + !evt.ctrlKey && + !evt.metaKey && + !evt.altKey + ) { + mathfield.switchMode('latex', '', '\\'); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + return false; + } + // 1. Update the current keyboard layout based on this event if (evt.isTrusted) { validateKeyboardLayout(evt); @@ -120,7 +142,7 @@ export function onKeystroke( if (mathfield.isSelectionEditable) { if ( - model.mode === 'math' && + isMathMode(model.mode) && (!model.selectionIsPlaceholder || placeholderReplaced) ) { if (keystroke === '[Backspace]') { @@ -198,9 +220,22 @@ export function onKeystroke( if (shortcut) { // If we found a shortcut (e.g. "alpha"), // switch to math mode and insert it - mathfield.switchMode('math'); - } else if (smartMode(mathfield, keystroke, evt)) { - mathfield.switchMode({ math: 'text', text: 'math' }[model.mode]); + mathfield.switchMode( + mathfield.options.defaultMode === 'free-math' ? 'free-math' : 'math' + ); + } else if ( + model.mode !== 'free-math' && + smartMode(mathfield, keystroke, evt) + ) { + mathfield.switchMode( + isMathMode(model.mode) + ? mathfield.options.defaultMode === 'free-text' + ? 'free-text' + : mathfield.options.defaultMode === 'free-math' + ? 'free-math' + : 'text' + : 'math' + ); selector = ''; } } @@ -212,6 +247,34 @@ export function onKeystroke( // Shift+Backquote is a keybinding that inserts "\~"", but "~~" is a // shortcut for "\approx" and needs to have priority over Shift+Backquote if (!shortcut) { + // A physical backslash in free-text always starts an editable LaTeX + // group. Keyboard layouts can report this key differently from the + // normalized keybinding table, so handle it explicitly here. + if ( + (model.mode === 'free-text' || model.mode === 'free-math') && + keyboardEventToChar(evt) === '\\' + ) { + mathfield.switchMode('latex', '', '\\'); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + return false; + } + + if ( + (model.mode === 'free-text' || model.mode === 'free-math') && + keystroke === '[Tab]' + ) { + onInput(mathfield, '\t'); + if (evt.preventDefault) evt.preventDefault(); + if (evt.stopPropagation) evt.stopPropagation(); + // Tab is a literal free-text character here, not a focus-navigation + // command. Restore the MathLive keyboard target after insertion so a + // trusted physical Tab event cannot leave subsequent typing detached + // from the field. + mathfield.focus({ preventScroll: true }); + return false; + } + if (!selector) { selector = getCommandForKeybinding( mathfield.keybindings, @@ -236,9 +299,50 @@ export function onKeystroke( evt.preventDefault(); evt.stopPropagation(); } else { - // If we're in a multiline environment, insert a newline - if (model.parentEnvironment?.isMultiline) + // Free-text fields use a lines root, so Return inserts a new line. + if (model.parentEnvironment?.isMultiline) { + // A new free-text row has its own anchor atom. Capture the style + // at the insertion point before splitting the row, then make it + // the explicit insertion style for the empty row. Otherwise the + // row anchor wins over the toolbar's pending bold/italic/etc. + // state and the first character after Enter is unformatted. + const freeTextLineStyle = + (mathfield.options.defaultMode === 'free-text' || + mathfield.options.defaultMode === 'free-math') && + (model.mode === 'free-text' || model.mode === 'free-math') + ? { ...computeInsertStyle(mathfield) } + : undefined; + const continueListPrefix = + mathfield.options.defaultMode === 'free-text' && + model.mode === 'free-text' && + currentLineListPrefix(model); mathfield.executeCommand('addRowAfter'); + if (isFreeLinesRoot(model.root)) + markFreeTextAnchors( + model.root, + mathfield.options.defaultMode === 'free-math' + ? 'free-math' + : 'free-text' + ); + if (freeTextLineStyle) { + mathfield.defaultStyle = { + ...mathfield.defaultStyle, + ...freeTextLineStyle, + }; + mathfield.styleBias = 'none'; + } + if ( + (mathfield.options.defaultMode === 'free-text' || + mathfield.options.defaultMode === 'free-math') && + model.mode !== mathfield.options.defaultMode + ) + mathfield.switchMode(mathfield.options.defaultMode); + if (continueListPrefix) + ModeEditor.insert(model, continueListPrefix, { + mode: 'free-text', + selectionMode: 'after', + }); + } // Dispatch an 'input' event matching the behavior of ` Playwright End-to-end Test - \ No newline at end of file + diff --git a/test/playwright-tests/physical-keyboard.spec.ts b/test/playwright-tests/physical-keyboard.spec.ts index e81c0b0bf..d8cdfadac 100644 --- a/test/playwright-tests/physical-keyboard.spec.ts +++ b/test/playwright-tests/physical-keyboard.spec.ts @@ -290,6 +290,447 @@ test('test inline shortcuts', async ({ page }) => { await page.locator('#mf-1').evaluate((e: MathfieldElement) => e.value) ).toBe(String.raw`\pm\nabla\cdot\alpha+\tan x-20\ge40`); }); +test('free-text mode preserves lines and inline math', async ({ page }) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + await field.pressSequentially('First line'); + await field.press('Enter'); + await field.pressSequentially('Value: '); + await field.pressSequentially(String.raw`\alpha`); + await field.press('Space'); + await field.pressSequentially(' second line'); + + const values = await field.evaluate((e: MathfieldElement) => ({ + mode: e.mode, + latex: e.getValue('latex'), + plainText: e.getValue('plain-text'), + ariaMultiline: e.shadowRoot + ?.querySelector('[part="keyboard-sink"]') + ?.getAttribute('aria-multiline'), + })); + + expect(values.mode).toBe('free-text'); + expect(values.latex).toContain(String.raw`\displaylines{`); + expect(values.latex).toContain(String.raw`\alpha`); + expect(values.plainText).toContain('First line\nValue: '); + expect(values.plainText).toContain(' second line'); + expect(values.ariaMultiline).toBe('true'); +}); + +test('free-text resolves each line direction and isolates math runs', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + const layout = await field.evaluate(async (e: MathfieldElement) => { + e.dir = 'rtl'; + e.style.display = 'block'; + e.style.width = '600px'; + e.setValue('\u05d0\u05d1 asdf \u05d2\u05d3\nEnglish line\n$x+1$', { + mode: 'free-text', + format: 'plain-text', + }); + await new Promise((resolve) => + requestAnimationFrame(() => requestAnimationFrame(() => resolve())) + ); + + const content = e.shadowRoot?.querySelector('[part="content"]'); + const root = e.shadowRoot?.querySelector('.ML__free-text-root'); + const lines = [ + ...(root?.querySelectorAll('.ML__free-text-line') ?? []), + ]; + const math = root?.querySelector('.ML__free-text-math-island'); + if (!content || !root || lines.length !== 3 || !math) + throw new Error('Expected rendered free-text direction markers'); + + const contentRect = content.getBoundingClientRect(); + const rootRect = root.getBoundingClientRect(); + return { + value: e.getValue('plain-text'), + contentDirection: getComputedStyle(content).direction, + contentJustify: getComputedStyle(content).justifyContent, + lineAttributes: lines.map((line) => line.getAttribute('dir')), + lineDirections: lines.map((line) => getComputedStyle(line).direction), + lineTextAlignments: lines.map((line) => getComputedStyle(line).textAlign), + mathDirection: getComputedStyle(math).direction, + mathBidi: getComputedStyle(math).unicodeBidi, + leftGap: rootRect.left - contentRect.left, + rightGap: contentRect.right - rootRect.right, + }; + }); + + expect(layout.value).toBe( + '\u05d0\u05d1 asdf \u05d2\u05d3\nEnglish line\nx+1' + ); + expect(layout.contentDirection).toBe('rtl'); + expect(layout.contentJustify).toBe('flex-start'); + expect(layout.lineAttributes).toEqual(['auto', 'auto', 'ltr']); + expect(layout.lineDirections).toEqual(['rtl', 'ltr', 'ltr']); + expect(layout.lineTextAlignments).toEqual(['start', 'start', 'start']); + expect(layout.mathDirection).toBe('ltr'); + expect(layout.mathBidi).toBe('isolate'); + expect(layout.rightGap).toBeLessThan(layout.leftGap); +}); + +test('free-text keeps the visual caret with mixed RTL and LTR input', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + await field.evaluate((e: MathfieldElement) => { + e.dir = 'rtl'; + e.setValue('', { mode: 'free-text' }); + e.focus(); + }); + + await field.pressSequentially('\u05d0\u05d1 asdf \u05d2\u05d3'); + await expect + .poll(() => + field.evaluate((e: MathfieldElement) => e.getValue('plain-text')) + ) + .toBe('\u05d0\u05d1 asdf \u05d2\u05d3'); + + const caret = await field.evaluate((e: MathfieldElement) => { + const line = e.shadowRoot?.querySelector( + '.ML__free-text-line' + ); + const marker = e.shadowRoot?.querySelector('.ML__text-caret'); + const textNodes = [ + ...(line?.querySelectorAll('.ML__text') ?? []), + ]; + if (!line || !marker || textNodes.length === 0) + throw new Error('Expected a mixed-direction line and visible text caret'); + const markerRect = marker.getBoundingClientRect(); + const textLeft = Math.min( + ...textNodes.map((node) => node.getBoundingClientRect().left) + ); + return { + lineDirection: getComputedStyle(line).direction, + lineAttribute: line.getAttribute('dir'), + caretLeft: markerRect.left, + textLeft, + }; + }); + + expect(caret.lineAttribute).toBe('auto'); + expect(caret.lineDirection).toBe('rtl'); + expect(caret.caretLeft).toBeLessThanOrEqual(caret.textLeft + 2); + + await field.press('Enter'); + await field.pressSequentially('\\alpha'); + await expect + .poll(() => field.evaluate((e: MathfieldElement) => e.mode)) + .toBe('latex'); + const latexLine = await field.evaluate((e: MathfieldElement) => { + const lines = [ + ...(e.shadowRoot?.querySelectorAll('.ML__free-text-line') ?? + []), + ]; + const line = lines.at(-1); + const math = line?.querySelector('.ML__free-text-math-island'); + return { + attribute: line?.getAttribute('dir'), + direction: line ? getComputedStyle(line).direction : null, + mathDirection: math ? getComputedStyle(math).direction : null, + }; + }); + expect(latexLine).toEqual({ + attribute: 'ltr', + direction: 'ltr', + mathDirection: 'ltr', + }); +}); + +test('free-text preserves formula and Latin order inside RTL prose', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + await field.evaluate((e: MathfieldElement) => { + e.dir = 'rtl'; + e.setValue('', { mode: 'free-text' }); + e.focus(); + }); + + await field.pressSequentially('\u05d0\u05d1 '); + await field.pressSequentially(String.raw`\int`); + await field.press('Space'); + await field.pressSequentially('asdf '); + await field.pressSequentially('\u05d2\u05d3'); + + const layout = await field.evaluate((e: MathfieldElement) => { + const line = e.shadowRoot?.querySelector( + '.ML__free-text-line' + ); + const island = line?.querySelector( + '.ML__free-text-ltr-island' + ); + const math = island?.querySelector( + '.ML__free-text-math-island' + ); + if (!line || !island || !math) + throw new Error('Expected a formula and Latin text in one LTR island'); + const latinRects: DOMRect[] = []; + const walker = document.createTreeWalker(island, NodeFilter.SHOW_TEXT); + for (let node = walker.nextNode(); node; node = walker.nextNode()) { + if (!/[A-Za-z]/u.test(node.textContent ?? '')) continue; + const range = document.createRange(); + range.selectNodeContents(node); + latinRects.push(range.getBoundingClientRect()); + } + if (latinRects.length === 0) + throw new Error('Expected Latin text inside the LTR island'); + return { + plainText: e.getValue('plain-text'), + latex: e.getValue('latex'), + mode: e.mode, + islandDirection: getComputedStyle(island).direction, + mathRight: math.getBoundingClientRect().right, + latinLeft: Math.min(...latinRects.map((rect) => rect.left)), + islandText: island.textContent, + }; + }); + + expect(layout.plainText).toContain('\u05d0\u05d1'); + expect(layout.plainText).toContain('asdf'); + expect(layout.plainText).toContain('\u05d2\u05d3'); + expect(layout.latex).toContain(String.raw`\int`); + expect(layout.mode).toBe('free-text'); + expect(layout.islandDirection).toBe('ltr'); + expect(layout.islandText).toContain('asdf'); + expect(layout.mathRight).toBeLessThanOrEqual(layout.latinLeft + 2); +}); + +test('free-text preserves empty lines, tabs, bullets, styles, and outputs', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + const values = await field.evaluate((e: MathfieldElement) => { + const bullet = String.fromCodePoint(0x2022); + e.setValue(`first\n\n\t${bullet} item\n`, { mode: 'free-text' }); + e.selection = { ranges: [[0, 5]] }; + e.applyStyle({ + fontSeries: 'b', + fontShape: 'it', + textDecoration: 'underline line-through', + }); + e.selection = e.lastOffset; + + return { + plain: e.getValue('plain-text'), + latex: e.getValue('latex'), + typst: e.getValue('typst'), + mathml: e.getValue('math-ml'), + spoken: e.getValue('spoken-text'), + json: (e as any)._mathfield.model.root.toJson(), + }; + }); + + expect(values.plain).toBe( + `first\n\n\t${String.fromCodePoint(0x2022)} item\n` + ); + expect(values.latex).toContain(String.raw`\displaylines{`); + expect(values.latex).toContain(String.raw`\textbf{\textit{first}}`); + expect(values.typst).toContain('#strong'); + expect(values.typst).toContain('#underline'); + expect(values.mathml).toContain('/g)?.length).toBe(4); + expect(values.spoken).toContain('line break'); + expect(values.json.environmentName).toBe('lines'); + expect(values.json.array.length).toBe(4); + + const roundTrip = await field.evaluate((e: MathfieldElement, serialized) => { + e.setValue(serialized, { mode: 'free-text', format: 'latex' }); + return { + plain: e.getValue('plain-text'), + rows: (e as any)._mathfield.model.root.toJson().array.length, + mode: e.mode, + }; + }, values.latex); + expect(roundTrip).toEqual({ + plain: values.plain, + rows: 4, + mode: 'free-text', + }); +}); + +test('free-text clipboard exports plain text', async ({ + page, + browserName, +}) => { + test.skip( + browserName !== 'chromium', + 'ClipboardEvent construction differs by browser' + ); + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + const clipboard = await field.evaluate((e: MathfieldElement) => { + e.setValue('first\n\n\t? item\n', { + mode: 'free-text', + format: 'plain-text', + }); + const data = new DataTransfer(); + e.shadowRoot + ?.querySelector('[part="keyboard-sink"]') + ?.dispatchEvent(new ClipboardEvent('copy', { clipboardData: data })); + return { + plain: e.getValue('plain-text'), + copied: data.getData('text/plain'), + }; + }); + + expect(clipboard.copied).toBe(clipboard.plain); +}); + +test('free-text keeps large mathematical structures as math islands', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + for (const command of ['\\alpha', '\\sum', '\\int']) { + await field.evaluate((e: MathfieldElement) => { + e.setValue('', { mode: 'free-text' }); + e.focus(); + }); + await field.pressSequentially(command); + await field.press('Space'); + const values = await field.evaluate((e: MathfieldElement) => ({ + mode: e.mode, + latex: e.getValue('latex'), + })); + expect(values.mode).toBe('free-text'); + expect(values.latex).toContain(command); + } +}); + +test('free-math uses math atoms while preserving multiline editing', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-math'); + + await field.pressSequentially('x y'); + await field.press('Tab'); + await field.pressSequentially('z'); + await field.press('Enter'); + await field.pressSequentially(String.raw`\alpha`); + await field.press('Space'); + await field.pressSequentially('q'); + + const values = await field.evaluate((e: MathfieldElement) => ({ + mode: e.mode, + latex: e.getValue('latex'), + plainText: e.getValue('plain-text'), + ariaMultiline: e.shadowRoot + ?.querySelector('[part="keyboard-sink"]') + ?.getAttribute('aria-multiline'), + mathClasses: Array.from( + e.shadowRoot?.querySelectorAll('.ML__mathit, .ML__text') ?? [] + ).map((x) => x.className), + })); + + expect(values.mode).toBe('free-math'); + expect(values.latex).toContain(String.raw`\displaylines{`); + expect(values.latex).toContain(String.raw`\alpha`); + expect(values.latex).toContain('\t'); + expect(values.plainText).toContain('\n'); + expect(values.ariaMultiline).toBe('true'); + expect(values.mathClasses.some((x) => String(x).includes('ML__mathit'))).toBe( + true + ); +}); + +test('free modes keep compatibility shortcuts for group navigation and commit', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-text'); + + await field.evaluate((e: MathfieldElement) => { + e.setValue(String.raw`\frac{#0}{#1}`, { + mode: 'free-text', + format: 'latex', + }); + e.executeCommand('moveToMathfieldStart'); + e.executeCommand('moveToNextPlaceholder'); + }); + const positionBefore = await field.evaluate( + (e: MathfieldElement) => e.position + ); + await field.press('Control+Tab'); + const positionAfter = await field.evaluate( + (e: MathfieldElement) => e.position + ); + expect(positionAfter).toBeGreaterThan(positionBefore); + + await field.evaluate((e: MathfieldElement) => { + e.setValue('', { + mode: 'free-text', + format: 'plain-text', + insertionMode: 'replaceAll', + }); + e.focus(); + }); + await field.pressSequentially('first'); + await field.press('Control+Enter'); + await field.pressSequentially('second'); + await expect + .poll(() => + field.evaluate((e: MathfieldElement) => e.getValue('plain-text')) + ) + .toBe('first\nsecond'); +}); + +test('free-math setValue preserves rows, tabs, math semantics, and outputs', async ({ + page, +}) => { + await page.goto('/dist/playwright-test-page/'); + const field = page.locator('#mf-free-math'); + + const values = await field.evaluate((e: MathfieldElement) => { + e.setValue('x y\n\n\tz', { mode: 'free-math', format: 'plain-text' }); + return { + mode: e.mode, + plain: e.getValue('plain-text'), + latex: e.getValue('latex'), + typst: e.getValue('typst'), + mathml: e.getValue('math-ml'), + spoken: e.getValue('spoken-text'), + json: (e as any)._mathfield.model.root.toJson(), + }; + }); + + expect(values.mode).toBe('free-math'); + expect(values.plain).toBe('x y\n\n\tz'); + expect(values.latex).toContain(String.raw`\displaylines{`); + expect(values.latex).toContain('\t'); + expect(values.typst).toContain('\t'); + expect(values.mathml).toContain('/g)?.length).toBe(3); + expect(values.spoken).toContain('line break'); + expect(values.json.environmentName).toBe('lines'); + expect(values.json.array.length).toBe(3); + + const roundTrip = await field.evaluate((e: MathfieldElement, serialized) => { + e.setValue(serialized, { mode: 'free-math', format: 'latex' }); + return { + mode: e.mode, + plain: e.getValue('plain-text'), + rows: (e as any)._mathfield.model.root.toJson().array.length, + }; + }, values.latex); + expect(roundTrip).toEqual({ + mode: 'free-math', + plain: values.plain, + rows: 3, + }); +}); test('underscore subscript', async ({ page }) => { await page.goto('/dist/playwright-test-page/'); @@ -719,7 +1160,9 @@ test('issue #2733: inline shortcut buffer should flush when field becomes empty' expect(latex).toBe('x'); }); -test('backspace should not trap caret in empty latex group', async ({ page }) => { +test('backspace should not trap caret in empty latex group', async ({ + page, +}) => { await page.goto('/dist/playwright-test-page/'); await page.locator('#mf-1').pressSequentially('a\\'); @@ -769,7 +1212,9 @@ test('fraction after parenthesized expression', async ({ page }) => { expect(latex).toBeTruthy(); }); -test('fraction after parenthesized expression then ctrl+a delete retype', async ({ page }) => { +test('fraction after parenthesized expression then ctrl+a delete retype', async ({ + page, +}) => { // Regression test for issue #2974: after building a fraction via the // keyboard sequence 5 ) Home ( End /, then Ctrl+A/Delete, typing should // still work (no orphaned parent references in the model) @@ -810,7 +1255,9 @@ test('fraction after parenthesized expression then ctrl+a delete retype', async expect(latex).toBe('42'); }); -test('fraction after parenthesized expression then more input', async ({ page }) => { +test('fraction after parenthesized expression then more input', async ({ + page, +}) => { // Core regression test for issue #2974: fraction insertion should work await page.goto('/dist/playwright-test-page/'); @@ -869,7 +1316,9 @@ test('fraction after complex parenthesized expression', async ({ page }) => { expect(final).not.toBe(''); }); -test('select and wrap in parens then delete should not empty field (#2974)', async ({ page }) => { +test('select and wrap in parens then delete should not empty field (#2974)', async ({ + page, +}) => { // Regression: typing 1, selecting it, typing ( to wrap in parens, // then pressing Delete should not make the mathfield empty/uninteractable await page.goto('/dist/playwright-test-page/'); @@ -900,7 +1349,6 @@ test('select and wrap in parens then delete should not empty field (#2974)', asy expect(finalLatex).toBe('2'); }); - async function tab(page) { await page.keyboard.press('Tab'); // Wait some time for focus to change