wasm-html-to-image 1.0.21 → 1.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli-options.d.ts +44 -0
- package/dist/cli-options.js +94 -1
- package/dist/cli.js +41 -3
- package/dist/core-orchestrate.d.ts +2 -0
- package/dist/core-orchestrate.js +6 -4
- package/dist/core-resources.d.ts +8 -0
- package/dist/core-resources.js +16 -3
- package/dist/core.d.ts +10 -0
- package/dist/core.js +2 -0
- package/dist/encode-args.d.ts +7 -0
- package/dist/encode-args.js +18 -1
- package/dist/html-to-image-wasm.js +3 -3
- package/dist/html-to-image.wasm +0 -0
- package/dist/katex-css.d.ts +6 -0
- package/dist/katex-css.js +7 -0
- package/dist/markdown-math-syntax.d.ts +20 -0
- package/dist/markdown-math-syntax.js +60 -0
- package/dist/markdown-math.d.ts +27 -0
- package/dist/markdown-math.js +25 -0
- package/dist/markdown-template.d.ts +113 -0
- package/dist/markdown-template.js +174 -0
- package/dist/markdown.d.ts +88 -0
- package/dist/markdown.js +302 -0
- package/dist/web-workers.js +34 -5
- package/package.json +13 -2
package/dist/html-to-image.wasm
CHANGED
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** The katex version the stylesheet and font list below were taken from. */
|
|
2
|
+
export declare const KATEX_CSS_VERSION = "0.16.47";
|
|
3
|
+
/** [family, style, weight, woff2 file] of every KaTeX font. */
|
|
4
|
+
export declare const KATEX_FONT_FACES: readonly (readonly [string, string, string, string])[];
|
|
5
|
+
/** katex.min.css without its @font-face rules. */
|
|
6
|
+
export declare const KATEX_RULES = ".katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.16.47\"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{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}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\"(\" counter(katexEqnNo) \")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\" counter(mmlEqnNo) \")\";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Generated by scripts/gen-katex-css.mjs from katex@0.16.47. Do not edit.
|
|
2
|
+
/** The katex version the stylesheet and font list below were taken from. */
|
|
3
|
+
export const KATEX_CSS_VERSION = "0.16.47";
|
|
4
|
+
/** [family, style, weight, woff2 file] of every KaTeX font. */
|
|
5
|
+
export const KATEX_FONT_FACES = [["KaTeX_AMS", "normal", "400", "KaTeX_AMS-Regular.woff2"], ["KaTeX_Caligraphic", "normal", "700", "KaTeX_Caligraphic-Bold.woff2"], ["KaTeX_Caligraphic", "normal", "400", "KaTeX_Caligraphic-Regular.woff2"], ["KaTeX_Fraktur", "normal", "700", "KaTeX_Fraktur-Bold.woff2"], ["KaTeX_Fraktur", "normal", "400", "KaTeX_Fraktur-Regular.woff2"], ["KaTeX_Main", "normal", "700", "KaTeX_Main-Bold.woff2"], ["KaTeX_Main", "italic", "700", "KaTeX_Main-BoldItalic.woff2"], ["KaTeX_Main", "italic", "400", "KaTeX_Main-Italic.woff2"], ["KaTeX_Main", "normal", "400", "KaTeX_Main-Regular.woff2"], ["KaTeX_Math", "italic", "700", "KaTeX_Math-BoldItalic.woff2"], ["KaTeX_Math", "italic", "400", "KaTeX_Math-Italic.woff2"], ["\"KaTeX_SansSerif\"", "normal", "700", "KaTeX_SansSerif-Bold.woff2"], ["\"KaTeX_SansSerif\"", "italic", "400", "KaTeX_SansSerif-Italic.woff2"], ["\"KaTeX_SansSerif\"", "normal", "400", "KaTeX_SansSerif-Regular.woff2"], ["KaTeX_Script", "normal", "400", "KaTeX_Script-Regular.woff2"], ["KaTeX_Size1", "normal", "400", "KaTeX_Size1-Regular.woff2"], ["KaTeX_Size2", "normal", "400", "KaTeX_Size2-Regular.woff2"], ["KaTeX_Size3", "normal", "400", "KaTeX_Size3-Regular.woff2"], ["KaTeX_Size4", "normal", "400", "KaTeX_Size4-Regular.woff2"], ["KaTeX_Typewriter", "normal", "400", "KaTeX_Typewriter-Regular.woff2"]];
|
|
6
|
+
/** katex.min.css without its @font-face rules. */
|
|
7
|
+
export const KATEX_RULES = ".katex{font:normal 1.21em KaTeX_Main,Times New Roman,serif;line-height:1.2;position:relative;text-indent:0;text-rendering:auto}.katex *{-ms-high-contrast-adjust:none!important;border-color:currentColor}.katex .katex-version:after{content:\"0.16.47\"}.katex .katex-mathml{border:0;-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;overflow:hidden;padding:0;position:absolute;width:1px}.katex .katex-html>.newline{display:block}.katex .base{position:relative;white-space:nowrap;width:-webkit-min-content;width:-moz-min-content;width:min-content}.katex .base,.katex .strut{display:inline-block}.katex .textbf{font-weight:700}.katex .textit{font-style:italic}.katex .textrm{font-family:KaTeX_Main}.katex .textsf{font-family:KaTeX_SansSerif}.katex .texttt{font-family:KaTeX_Typewriter}.katex .mathnormal{font-family:KaTeX_Math;font-style:italic}.katex .mathit{font-family:KaTeX_Main;font-style:italic}.katex .mathrm{font-style:normal}.katex .mathbf{font-family:KaTeX_Main;font-weight:700}.katex .boldsymbol{font-family:KaTeX_Math;font-style:italic;font-weight:700}.katex .amsrm,.katex .mathbb,.katex .textbb{font-family:KaTeX_AMS}.katex .mathcal{font-family:KaTeX_Caligraphic}.katex .mathfrak,.katex .textfrak{font-family:KaTeX_Fraktur}.katex .mathboldfrak,.katex .textboldfrak{font-family:KaTeX_Fraktur;font-weight:700}.katex .mathtt{font-family:KaTeX_Typewriter}.katex .mathscr,.katex .textscr{font-family:KaTeX_Script}.katex .mathsf,.katex .textsf{font-family:KaTeX_SansSerif}.katex .mathboldsf,.katex .textboldsf{font-family:KaTeX_SansSerif;font-weight:700}.katex .mathitsf,.katex .mathsfit,.katex .textitsf{font-family:KaTeX_SansSerif;font-style:italic}.katex .mainrm{font-family:KaTeX_Main;font-style:normal}.katex .vlist-t{border-collapse:collapse;display:inline-table;table-layout:fixed}.katex .vlist-r{display:table-row}.katex .vlist{display:table-cell;position:relative;vertical-align:bottom}.katex .vlist>span{display:block;height:0;position:relative}.katex .vlist>span>span{display:inline-block}.katex .vlist>span>.pstrut{overflow:hidden;width:0}.katex .vlist-t2{margin-right:-2px}.katex .vlist-s{display:table-cell;font-size:1px;min-width:2px;vertical-align:bottom;width:2px}.katex .vbox{align-items:baseline;display:inline-flex;flex-direction:column}.katex .hbox{width:100%}.katex .hbox,.katex .thinbox{display:inline-flex;flex-direction:row}.katex .thinbox{max-width:0;width:0}.katex .msupsub{text-align:left}.katex .mfrac>span>span{text-align:center}.katex .mfrac .frac-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline,.katex .hline,.katex .mfrac .frac-line,.katex .overline .overline-line,.katex .rule,.katex .underline .underline-line{min-height:1px}.katex .mspace{display:inline-block}.katex .smash{display:inline;line-height:0}.katex .clap,.katex .llap,.katex .rlap{position:relative;width:0}.katex .clap>.inner,.katex .llap>.inner,.katex .rlap>.inner{position:absolute}.katex .clap>.fix,.katex .llap>.fix,.katex .rlap>.fix{display:inline-block}.katex .llap>.inner{right:0}.katex .clap>.inner,.katex .rlap>.inner{left:0}.katex .clap>.inner>span{margin-left:-50%;margin-right:50%}.katex .rule{border:0 solid;display:inline-block;position:relative}.katex .hline,.katex .overline .overline-line,.katex .underline .underline-line{border-bottom-style:solid;display:inline-block;width:100%}.katex .hdashline{border-bottom-style:dashed;display:inline-block;width:100%}.katex .sqrt>.root{margin-left:.2777777778em;margin-right:-.5555555556em}.katex .fontsize-ensurer.reset-size1.size1,.katex .sizing.reset-size1.size1{font-size:1em}.katex .fontsize-ensurer.reset-size1.size2,.katex .sizing.reset-size1.size2{font-size:1.2em}.katex .fontsize-ensurer.reset-size1.size3,.katex .sizing.reset-size1.size3{font-size:1.4em}.katex .fontsize-ensurer.reset-size1.size4,.katex .sizing.reset-size1.size4{font-size:1.6em}.katex .fontsize-ensurer.reset-size1.size5,.katex .sizing.reset-size1.size5{font-size:1.8em}.katex .fontsize-ensurer.reset-size1.size6,.katex .sizing.reset-size1.size6{font-size:2em}.katex .fontsize-ensurer.reset-size1.size7,.katex .sizing.reset-size1.size7{font-size:2.4em}.katex .fontsize-ensurer.reset-size1.size8,.katex .sizing.reset-size1.size8{font-size:2.88em}.katex .fontsize-ensurer.reset-size1.size9,.katex .sizing.reset-size1.size9{font-size:3.456em}.katex .fontsize-ensurer.reset-size1.size10,.katex .sizing.reset-size1.size10{font-size:4.148em}.katex .fontsize-ensurer.reset-size1.size11,.katex .sizing.reset-size1.size11{font-size:4.976em}.katex .fontsize-ensurer.reset-size2.size1,.katex .sizing.reset-size2.size1{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size2.size2,.katex .sizing.reset-size2.size2{font-size:1em}.katex .fontsize-ensurer.reset-size2.size3,.katex .sizing.reset-size2.size3{font-size:1.1666666667em}.katex .fontsize-ensurer.reset-size2.size4,.katex .sizing.reset-size2.size4{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size2.size5,.katex .sizing.reset-size2.size5{font-size:1.5em}.katex .fontsize-ensurer.reset-size2.size6,.katex .sizing.reset-size2.size6{font-size:1.6666666667em}.katex .fontsize-ensurer.reset-size2.size7,.katex .sizing.reset-size2.size7{font-size:2em}.katex .fontsize-ensurer.reset-size2.size8,.katex .sizing.reset-size2.size8{font-size:2.4em}.katex .fontsize-ensurer.reset-size2.size9,.katex .sizing.reset-size2.size9{font-size:2.88em}.katex .fontsize-ensurer.reset-size2.size10,.katex .sizing.reset-size2.size10{font-size:3.4566666667em}.katex .fontsize-ensurer.reset-size2.size11,.katex .sizing.reset-size2.size11{font-size:4.1466666667em}.katex .fontsize-ensurer.reset-size3.size1,.katex .sizing.reset-size3.size1{font-size:.7142857143em}.katex .fontsize-ensurer.reset-size3.size2,.katex .sizing.reset-size3.size2{font-size:.8571428571em}.katex .fontsize-ensurer.reset-size3.size3,.katex .sizing.reset-size3.size3{font-size:1em}.katex .fontsize-ensurer.reset-size3.size4,.katex .sizing.reset-size3.size4{font-size:1.1428571429em}.katex .fontsize-ensurer.reset-size3.size5,.katex .sizing.reset-size3.size5{font-size:1.2857142857em}.katex .fontsize-ensurer.reset-size3.size6,.katex .sizing.reset-size3.size6{font-size:1.4285714286em}.katex .fontsize-ensurer.reset-size3.size7,.katex .sizing.reset-size3.size7{font-size:1.7142857143em}.katex .fontsize-ensurer.reset-size3.size8,.katex .sizing.reset-size3.size8{font-size:2.0571428571em}.katex .fontsize-ensurer.reset-size3.size9,.katex .sizing.reset-size3.size9{font-size:2.4685714286em}.katex .fontsize-ensurer.reset-size3.size10,.katex .sizing.reset-size3.size10{font-size:2.9628571429em}.katex .fontsize-ensurer.reset-size3.size11,.katex .sizing.reset-size3.size11{font-size:3.5542857143em}.katex .fontsize-ensurer.reset-size4.size1,.katex .sizing.reset-size4.size1{font-size:.625em}.katex .fontsize-ensurer.reset-size4.size2,.katex .sizing.reset-size4.size2{font-size:.75em}.katex .fontsize-ensurer.reset-size4.size3,.katex .sizing.reset-size4.size3{font-size:.875em}.katex .fontsize-ensurer.reset-size4.size4,.katex .sizing.reset-size4.size4{font-size:1em}.katex .fontsize-ensurer.reset-size4.size5,.katex .sizing.reset-size4.size5{font-size:1.125em}.katex .fontsize-ensurer.reset-size4.size6,.katex .sizing.reset-size4.size6{font-size:1.25em}.katex .fontsize-ensurer.reset-size4.size7,.katex .sizing.reset-size4.size7{font-size:1.5em}.katex .fontsize-ensurer.reset-size4.size8,.katex .sizing.reset-size4.size8{font-size:1.8em}.katex .fontsize-ensurer.reset-size4.size9,.katex .sizing.reset-size4.size9{font-size:2.16em}.katex .fontsize-ensurer.reset-size4.size10,.katex .sizing.reset-size4.size10{font-size:2.5925em}.katex .fontsize-ensurer.reset-size4.size11,.katex .sizing.reset-size4.size11{font-size:3.11em}.katex .fontsize-ensurer.reset-size5.size1,.katex .sizing.reset-size5.size1{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size5.size2,.katex .sizing.reset-size5.size2{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size5.size3,.katex .sizing.reset-size5.size3{font-size:.7777777778em}.katex .fontsize-ensurer.reset-size5.size4,.katex .sizing.reset-size5.size4{font-size:.8888888889em}.katex .fontsize-ensurer.reset-size5.size5,.katex .sizing.reset-size5.size5{font-size:1em}.katex .fontsize-ensurer.reset-size5.size6,.katex .sizing.reset-size5.size6{font-size:1.1111111111em}.katex .fontsize-ensurer.reset-size5.size7,.katex .sizing.reset-size5.size7{font-size:1.3333333333em}.katex .fontsize-ensurer.reset-size5.size8,.katex .sizing.reset-size5.size8{font-size:1.6em}.katex .fontsize-ensurer.reset-size5.size9,.katex .sizing.reset-size5.size9{font-size:1.92em}.katex .fontsize-ensurer.reset-size5.size10,.katex .sizing.reset-size5.size10{font-size:2.3044444444em}.katex .fontsize-ensurer.reset-size5.size11,.katex .sizing.reset-size5.size11{font-size:2.7644444444em}.katex .fontsize-ensurer.reset-size6.size1,.katex .sizing.reset-size6.size1{font-size:.5em}.katex .fontsize-ensurer.reset-size6.size2,.katex .sizing.reset-size6.size2{font-size:.6em}.katex .fontsize-ensurer.reset-size6.size3,.katex .sizing.reset-size6.size3{font-size:.7em}.katex .fontsize-ensurer.reset-size6.size4,.katex .sizing.reset-size6.size4{font-size:.8em}.katex .fontsize-ensurer.reset-size6.size5,.katex .sizing.reset-size6.size5{font-size:.9em}.katex .fontsize-ensurer.reset-size6.size6,.katex .sizing.reset-size6.size6{font-size:1em}.katex .fontsize-ensurer.reset-size6.size7,.katex .sizing.reset-size6.size7{font-size:1.2em}.katex .fontsize-ensurer.reset-size6.size8,.katex .sizing.reset-size6.size8{font-size:1.44em}.katex .fontsize-ensurer.reset-size6.size9,.katex .sizing.reset-size6.size9{font-size:1.728em}.katex .fontsize-ensurer.reset-size6.size10,.katex .sizing.reset-size6.size10{font-size:2.074em}.katex .fontsize-ensurer.reset-size6.size11,.katex .sizing.reset-size6.size11{font-size:2.488em}.katex .fontsize-ensurer.reset-size7.size1,.katex .sizing.reset-size7.size1{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size7.size2,.katex .sizing.reset-size7.size2{font-size:.5em}.katex .fontsize-ensurer.reset-size7.size3,.katex .sizing.reset-size7.size3{font-size:.5833333333em}.katex .fontsize-ensurer.reset-size7.size4,.katex .sizing.reset-size7.size4{font-size:.6666666667em}.katex .fontsize-ensurer.reset-size7.size5,.katex .sizing.reset-size7.size5{font-size:.75em}.katex .fontsize-ensurer.reset-size7.size6,.katex .sizing.reset-size7.size6{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size7.size7,.katex .sizing.reset-size7.size7{font-size:1em}.katex .fontsize-ensurer.reset-size7.size8,.katex .sizing.reset-size7.size8{font-size:1.2em}.katex .fontsize-ensurer.reset-size7.size9,.katex .sizing.reset-size7.size9{font-size:1.44em}.katex .fontsize-ensurer.reset-size7.size10,.katex .sizing.reset-size7.size10{font-size:1.7283333333em}.katex .fontsize-ensurer.reset-size7.size11,.katex .sizing.reset-size7.size11{font-size:2.0733333333em}.katex .fontsize-ensurer.reset-size8.size1,.katex .sizing.reset-size8.size1{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size8.size2,.katex .sizing.reset-size8.size2{font-size:.4166666667em}.katex .fontsize-ensurer.reset-size8.size3,.katex .sizing.reset-size8.size3{font-size:.4861111111em}.katex .fontsize-ensurer.reset-size8.size4,.katex .sizing.reset-size8.size4{font-size:.5555555556em}.katex .fontsize-ensurer.reset-size8.size5,.katex .sizing.reset-size8.size5{font-size:.625em}.katex .fontsize-ensurer.reset-size8.size6,.katex .sizing.reset-size8.size6{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size8.size7,.katex .sizing.reset-size8.size7{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size8.size8,.katex .sizing.reset-size8.size8{font-size:1em}.katex .fontsize-ensurer.reset-size8.size9,.katex .sizing.reset-size8.size9{font-size:1.2em}.katex .fontsize-ensurer.reset-size8.size10,.katex .sizing.reset-size8.size10{font-size:1.4402777778em}.katex .fontsize-ensurer.reset-size8.size11,.katex .sizing.reset-size8.size11{font-size:1.7277777778em}.katex .fontsize-ensurer.reset-size9.size1,.katex .sizing.reset-size9.size1{font-size:.2893518519em}.katex .fontsize-ensurer.reset-size9.size2,.katex .sizing.reset-size9.size2{font-size:.3472222222em}.katex .fontsize-ensurer.reset-size9.size3,.katex .sizing.reset-size9.size3{font-size:.4050925926em}.katex .fontsize-ensurer.reset-size9.size4,.katex .sizing.reset-size9.size4{font-size:.462962963em}.katex .fontsize-ensurer.reset-size9.size5,.katex .sizing.reset-size9.size5{font-size:.5208333333em}.katex .fontsize-ensurer.reset-size9.size6,.katex .sizing.reset-size9.size6{font-size:.5787037037em}.katex .fontsize-ensurer.reset-size9.size7,.katex .sizing.reset-size9.size7{font-size:.6944444444em}.katex .fontsize-ensurer.reset-size9.size8,.katex .sizing.reset-size9.size8{font-size:.8333333333em}.katex .fontsize-ensurer.reset-size9.size9,.katex .sizing.reset-size9.size9{font-size:1em}.katex .fontsize-ensurer.reset-size9.size10,.katex .sizing.reset-size9.size10{font-size:1.2002314815em}.katex .fontsize-ensurer.reset-size9.size11,.katex .sizing.reset-size9.size11{font-size:1.4398148148em}.katex .fontsize-ensurer.reset-size10.size1,.katex .sizing.reset-size10.size1{font-size:.2410800386em}.katex .fontsize-ensurer.reset-size10.size2,.katex .sizing.reset-size10.size2{font-size:.2892960463em}.katex .fontsize-ensurer.reset-size10.size3,.katex .sizing.reset-size10.size3{font-size:.337512054em}.katex .fontsize-ensurer.reset-size10.size4,.katex .sizing.reset-size10.size4{font-size:.3857280617em}.katex .fontsize-ensurer.reset-size10.size5,.katex .sizing.reset-size10.size5{font-size:.4339440694em}.katex .fontsize-ensurer.reset-size10.size6,.katex .sizing.reset-size10.size6{font-size:.4821600771em}.katex .fontsize-ensurer.reset-size10.size7,.katex .sizing.reset-size10.size7{font-size:.5785920926em}.katex .fontsize-ensurer.reset-size10.size8,.katex .sizing.reset-size10.size8{font-size:.6943105111em}.katex .fontsize-ensurer.reset-size10.size9,.katex .sizing.reset-size10.size9{font-size:.8331726133em}.katex .fontsize-ensurer.reset-size10.size10,.katex .sizing.reset-size10.size10{font-size:1em}.katex .fontsize-ensurer.reset-size10.size11,.katex .sizing.reset-size10.size11{font-size:1.1996142719em}.katex .fontsize-ensurer.reset-size11.size1,.katex .sizing.reset-size11.size1{font-size:.2009646302em}.katex .fontsize-ensurer.reset-size11.size2,.katex .sizing.reset-size11.size2{font-size:.2411575563em}.katex .fontsize-ensurer.reset-size11.size3,.katex .sizing.reset-size11.size3{font-size:.2813504823em}.katex .fontsize-ensurer.reset-size11.size4,.katex .sizing.reset-size11.size4{font-size:.3215434084em}.katex .fontsize-ensurer.reset-size11.size5,.katex .sizing.reset-size11.size5{font-size:.3617363344em}.katex .fontsize-ensurer.reset-size11.size6,.katex .sizing.reset-size11.size6{font-size:.4019292605em}.katex .fontsize-ensurer.reset-size11.size7,.katex .sizing.reset-size11.size7{font-size:.4823151125em}.katex .fontsize-ensurer.reset-size11.size8,.katex .sizing.reset-size11.size8{font-size:.578778135em}.katex .fontsize-ensurer.reset-size11.size9,.katex .sizing.reset-size11.size9{font-size:.6945337621em}.katex .fontsize-ensurer.reset-size11.size10,.katex .sizing.reset-size11.size10{font-size:.8336012862em}.katex .fontsize-ensurer.reset-size11.size11,.katex .sizing.reset-size11.size11{font-size:1em}.katex .delimsizing.size1{font-family:KaTeX_Size1}.katex .delimsizing.size2{font-family:KaTeX_Size2}.katex .delimsizing.size3{font-family:KaTeX_Size3}.katex .delimsizing.size4{font-family:KaTeX_Size4}.katex .delimsizing.mult .delim-size1>span{font-family:KaTeX_Size1}.katex .delimsizing.mult .delim-size4>span{font-family:KaTeX_Size4}.katex .nulldelimiter{display:inline-block;width:.12em}.katex .delimcenter,.katex .op-symbol{position:relative}.katex .op-symbol.small-op{font-family:KaTeX_Size1}.katex .op-symbol.large-op{font-family:KaTeX_Size2}.katex .accent>.vlist-t,.katex .op-limits>.vlist-t{text-align:center}.katex .accent .accent-body{position:relative}.katex .accent .accent-body:not(.accent-full){width:0}.katex .overlay{display:block}.katex .mtable .vertical-separator{display:inline-block;min-width:1px}.katex .mtable .arraycolsep{display:inline-block}.katex .mtable .col-align-c>.vlist-t{text-align:center}.katex .mtable .col-align-l>.vlist-t{text-align:left}.katex .mtable .col-align-r>.vlist-t{text-align:right}.katex .svg-align{text-align:left}.katex svg{fill:currentColor;stroke:currentColor;display:block;height:inherit;position:absolute;width:100%}.katex svg path{stroke:none}.katex svg{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}.katex img{border-style:none;max-height:none;max-width:none;min-height:0;min-width:0}.katex .stretchy{display:block;overflow:hidden;position:relative;width:100%}.katex .stretchy:after,.katex .stretchy:before{content:\"\"}.katex .hide-tail{overflow:hidden;position:relative;width:100%}.katex .halfarrow-left{left:0;overflow:hidden;position:absolute;width:50.2%}.katex .halfarrow-right{overflow:hidden;position:absolute;right:0;width:50.2%}.katex .brace-left{left:0;overflow:hidden;position:absolute;width:25.1%}.katex .brace-center{left:25%;overflow:hidden;position:absolute;width:50%}.katex .brace-right{overflow:hidden;position:absolute;right:0;width:25.1%}.katex .x-arrow-pad{padding:0 .5em}.katex .cd-arrow-pad{padding:0 .55556em 0 .27778em}.katex .mover,.katex .munder,.katex .x-arrow{text-align:center}.katex .boxpad{padding:0 .3em}.katex .fbox,.katex .fcolorbox{border:.04em solid;box-sizing:border-box}.katex .cancel-pad{padding:0 .2em}.katex .cancel-lap{margin-left:-.2em;margin-right:-.2em}.katex .sout{border-bottom-style:solid;border-bottom-width:.08em}.katex .angl{border-right:.049em solid;border-top:.049em solid;box-sizing:border-box;margin-right:.03889em}.katex .anglpad{padding:0 .03889em}.katex .eqn-num:before{content:\"(\" counter(katexEqnNo) \")\";counter-increment:katexEqnNo}.katex .mml-eqn-num:before{content:\"(\" counter(mmlEqnNo) \")\";counter-increment:mmlEqnNo}.katex .mtr-glue{width:50%}.katex .cd-vert-arrow{display:inline-block;position:relative}.katex .cd-label-left{display:inline-block;position:absolute;right:calc(50% + .3em);text-align:left}.katex .cd-label-right{display:inline-block;left:calc(50% + .3em);position:absolute;text-align:right}.katex-display{display:block;margin:1em 0;text-align:center}.katex-display>.katex{display:block;text-align:center;white-space:nowrap}.katex-display>.katex>.katex-html{display:block;position:relative}.katex-display>.katex>.katex-html>.tag{position:absolute;right:0}.katex-display.leqno>.katex>.katex-html>.tag{left:0;right:auto}.katex-display.fleqn>.katex{padding-left:2em;text-align:left}body{counter-reset:katexEqnNo mmlEqnNo}";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MarkedExtension } from "marked";
|
|
2
|
+
/**
|
|
3
|
+
* What `markdownToHtml` needs from a maths renderer. `markdown-math` provides one built on KaTeX; any
|
|
4
|
+
* function that turns TeX into an HTML fragment works (the stylesheet it depends on goes in `css`).
|
|
5
|
+
*/
|
|
6
|
+
export interface MathRenderer {
|
|
7
|
+
/** TeX to an HTML fragment. `display` is true for `$$...$$` blocks. */
|
|
8
|
+
render(tex: string, display: boolean): string;
|
|
9
|
+
/** Stylesheet the fragments need (appended after the built-in one). */
|
|
10
|
+
css?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* `$...$` (inline) and `$$...$$` (block) for marked.
|
|
14
|
+
*
|
|
15
|
+
* Inline follows the pandoc rules so prices stay prices: the opening `$` is followed by a non-space,
|
|
16
|
+
* the closing `$` is preceded by a non-space and is not followed by a digit, and `\$` is a literal
|
|
17
|
+
* dollar. A block is `$$` on its own line up to the next line with `$$` (or one-line `$$ x $$`).
|
|
18
|
+
* Code spans and fences never reach these tokenizers, so `$` inside them is left alone.
|
|
19
|
+
*/
|
|
20
|
+
export declare function mathExtension(math: MathRenderer): MarkedExtension;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `$...$` (inline) and `$$...$$` (block) for marked.
|
|
3
|
+
*
|
|
4
|
+
* Inline follows the pandoc rules so prices stay prices: the opening `$` is followed by a non-space,
|
|
5
|
+
* the closing `$` is preceded by a non-space and is not followed by a digit, and `\$` is a literal
|
|
6
|
+
* dollar. A block is `$$` on its own line up to the next line with `$$` (or one-line `$$ x $$`).
|
|
7
|
+
* Code spans and fences never reach these tokenizers, so `$` inside them is left alone.
|
|
8
|
+
*/
|
|
9
|
+
export function mathExtension(math) {
|
|
10
|
+
const fail = (tex, e) => `<code class="math-error" title="${String(e).replace(/"/g, """)}">${tex.replace(/&/g, "&").replace(/</g, "<")}</code>`;
|
|
11
|
+
const render = (tex, display) => {
|
|
12
|
+
try {
|
|
13
|
+
return math.render(tex, display);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
return fail(tex, e);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
extensions: [
|
|
21
|
+
{
|
|
22
|
+
name: "math",
|
|
23
|
+
level: "block",
|
|
24
|
+
start: (src) => /(^|\n)\$\$/.exec(src)?.index,
|
|
25
|
+
tokenizer(src) {
|
|
26
|
+
const m = /^\$\$[ \t]*\n([\s\S]+?)\n[ \t]*\$\$[ \t]*(?:\n|$)/.exec(src) ?? /^\$\$([^\n]+?)\$\$[ \t]*(?:\n|$)/.exec(src);
|
|
27
|
+
if (!m)
|
|
28
|
+
return undefined;
|
|
29
|
+
return { type: "math", raw: m[0], text: m[1].trim(), display: true };
|
|
30
|
+
},
|
|
31
|
+
renderer(token) {
|
|
32
|
+
const t = token;
|
|
33
|
+
return `<div class="math-display">${render(t.text, true)}</div>\n`;
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
name: "math-inline",
|
|
38
|
+
level: "inline",
|
|
39
|
+
start: (src) => {
|
|
40
|
+
const i = src.search(/(^|[^\\])\$/);
|
|
41
|
+
return i < 0 ? undefined : src[i] === "$" ? i : i + 1;
|
|
42
|
+
},
|
|
43
|
+
tokenizer(src) {
|
|
44
|
+
// $$x$$ inside a paragraph is display-style maths too.
|
|
45
|
+
const dd = /^\$\$([^\n$]+?)\$\$/.exec(src);
|
|
46
|
+
if (dd)
|
|
47
|
+
return { type: "math-inline", raw: dd[0], text: dd[1].trim(), display: true };
|
|
48
|
+
const m = /^\$(?!\s)((?:\\.|[^\\$\n])+?)(?<!\s)\$(?!\d)/.exec(src);
|
|
49
|
+
if (!m)
|
|
50
|
+
return undefined;
|
|
51
|
+
return { type: "math-inline", raw: m[0], text: m[1], display: false };
|
|
52
|
+
},
|
|
53
|
+
renderer(token) {
|
|
54
|
+
const t = token;
|
|
55
|
+
return render(t.text, t.display);
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { MathRenderer } from "./markdown-math-syntax.js";
|
|
2
|
+
export type { MathRenderer } from "./markdown-math-syntax.js";
|
|
3
|
+
export interface KatexMathOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Where the KaTeX font files (`KaTeX_Main-Regular.woff2`, ...) are served from, without a trailing
|
|
6
|
+
* slash. Defaults to the jsDelivr copy of the KaTeX version the stylesheet was taken from; point it
|
|
7
|
+
* at your own host to render without a third-party request.
|
|
8
|
+
*/
|
|
9
|
+
fontBase?: string;
|
|
10
|
+
/** Passed to `katex.renderToString` (`output` and `displayMode` are set here). */
|
|
11
|
+
katex?: Omit<katex.KatexOptions, "output" | "displayMode">;
|
|
12
|
+
}
|
|
13
|
+
/** Stylesheet for KaTeX HTML: its rules plus one woff2 `@font-face` per font, served from `fontBase`. */
|
|
14
|
+
export declare function katexCss(fontBase?: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* KaTeX as the `math` option of `markdownToHtml`:
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { markdownToHtml } from "wasm-html-to-image/markdown";
|
|
20
|
+
* import { katexMath } from "wasm-html-to-image/markdown-math";
|
|
21
|
+
* const html = markdownToHtml("Euler: $e^{i\\pi} + 1 = 0$", { math: katexMath() });
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* Pure JavaScript (KaTeX's HTML output, not MathML), so it runs in Node, browsers and Workers. The fonts
|
|
25
|
+
* are fetched by the renderer from `fontBase` when the page is drawn.
|
|
26
|
+
*/
|
|
27
|
+
export declare function katexMath(options?: KatexMathOptions): MathRenderer;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import katex from "katex";
|
|
2
|
+
import { KATEX_CSS_VERSION, KATEX_FONT_FACES, KATEX_RULES } from "./katex-css.js";
|
|
3
|
+
/** Stylesheet for KaTeX HTML: its rules plus one woff2 `@font-face` per font, served from `fontBase`. */
|
|
4
|
+
export function katexCss(fontBase = `https://cdn.jsdelivr.net/npm/katex@${KATEX_CSS_VERSION}/dist/fonts`) {
|
|
5
|
+
const faces = KATEX_FONT_FACES.map(([family, style, weight, file]) => `@font-face{font-family:${family};font-style:${style};font-weight:${weight};src:url(${fontBase}/${file}) format("woff2")}`).join("");
|
|
6
|
+
return faces + KATEX_RULES;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* KaTeX as the `math` option of `markdownToHtml`:
|
|
10
|
+
*
|
|
11
|
+
* ```ts
|
|
12
|
+
* import { markdownToHtml } from "wasm-html-to-image/markdown";
|
|
13
|
+
* import { katexMath } from "wasm-html-to-image/markdown-math";
|
|
14
|
+
* const html = markdownToHtml("Euler: $e^{i\\pi} + 1 = 0$", { math: katexMath() });
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Pure JavaScript (KaTeX's HTML output, not MathML), so it runs in Node, browsers and Workers. The fonts
|
|
18
|
+
* are fetched by the renderer from `fontBase` when the page is drawn.
|
|
19
|
+
*/
|
|
20
|
+
export function katexMath(options = {}) {
|
|
21
|
+
return {
|
|
22
|
+
render: (tex, display) => katex.renderToString(tex, { throwOnError: true, ...options.katex, output: "html", displayMode: display }),
|
|
23
|
+
css: katexCss(options.fontBase),
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Templates for Markdown -> PDF: a look you pick by name (`template: report` in the front matter, or
|
|
3
|
+
* `template` in the options) and adjust with a few settings, without writing CSS.
|
|
4
|
+
*
|
|
5
|
+
* A template is plain data (it works in Node, browsers and Workers alike) made of three parts:
|
|
6
|
+
* - `type`: typography and structure (fonts, size, line height, how headings and the first page look);
|
|
7
|
+
* - `page`: the PDF page (size, margins, running header and footer);
|
|
8
|
+
* - `defaults`: document settings the template starts from (a cover, a contents page, an accent colour).
|
|
9
|
+
* Colours are not part of a template: light and dark are a separate `theme`, so every template comes in both.
|
|
10
|
+
*/
|
|
11
|
+
/** Document settings: what the front matter, a template's `defaults` and the options all speak. */
|
|
12
|
+
export interface DocumentSettings {
|
|
13
|
+
title?: string;
|
|
14
|
+
/** A line under the title on the cover. */
|
|
15
|
+
subtitle?: string;
|
|
16
|
+
author?: string;
|
|
17
|
+
/** Shown as written (on the cover and in `{{date}}`). */
|
|
18
|
+
date?: string;
|
|
19
|
+
/** Name of a bundled template (see {@link TEMPLATES}). */
|
|
20
|
+
template?: string;
|
|
21
|
+
/** A table of contents (see `MarkdownOptions.toc`). */
|
|
22
|
+
toc?: boolean;
|
|
23
|
+
/** A cover page with the title, subtitle, author, date and logo. Needs a title. */
|
|
24
|
+
cover?: boolean;
|
|
25
|
+
/** Logo image for the cover and the header: a URL or a `data:` URL. */
|
|
26
|
+
logo?: string;
|
|
27
|
+
/** Link, heading rule and cover accent colour, e.g. `#c2410c`. */
|
|
28
|
+
accent?: string;
|
|
29
|
+
/** Body font family (any family the renderer can load, or a generic `serif` / `sans-serif`). */
|
|
30
|
+
font?: string;
|
|
31
|
+
/** `A4`, `A5`, `B5`, `Letter`, ..., or two lengths such as `210mm 297mm`. */
|
|
32
|
+
page_size?: string;
|
|
33
|
+
/** Text printed in the header of every page (`DRAFT`, `Confidential`, ...). */
|
|
34
|
+
stamp?: string;
|
|
35
|
+
/** BCP 47 language tag of the text (`<html lang>`). */
|
|
36
|
+
lang?: string;
|
|
37
|
+
/** `ltr`, `rtl` or `auto`. */
|
|
38
|
+
dir?: string;
|
|
39
|
+
}
|
|
40
|
+
/** Typography and structure of a template. Every field has a default, so a template lists only what differs. */
|
|
41
|
+
export interface TemplateType {
|
|
42
|
+
/** Body font stack. `serif` / `sans-serif` resolve to the renderer's Noto Serif / Sans JP. */
|
|
43
|
+
font: string;
|
|
44
|
+
/** Heading font stack; the body font when omitted. */
|
|
45
|
+
headingFont?: string;
|
|
46
|
+
/** Code font stack. */
|
|
47
|
+
mono: string;
|
|
48
|
+
/** Body size in px. */
|
|
49
|
+
size: number;
|
|
50
|
+
/** Unitless line height. */
|
|
51
|
+
lineHeight: number;
|
|
52
|
+
/** Justify paragraphs (and hyphenate nothing: the renderer breaks CJK text anywhere). */
|
|
53
|
+
justify: boolean;
|
|
54
|
+
/** A rule under h1 / h2 (GitHub style). */
|
|
55
|
+
h1Rule: boolean;
|
|
56
|
+
h2Rule: boolean;
|
|
57
|
+
/** Heading weight. */
|
|
58
|
+
headingWeight: number;
|
|
59
|
+
/** Colour headings with the accent colour instead of the text colour. */
|
|
60
|
+
accentHeadings: boolean;
|
|
61
|
+
/** Every h1 starts a new page (chapters of a book). */
|
|
62
|
+
chapterBreak: boolean;
|
|
63
|
+
/** Corner radius of code blocks and inline code, px. */
|
|
64
|
+
radius: number;
|
|
65
|
+
}
|
|
66
|
+
export interface TemplatePage {
|
|
67
|
+
/** Page size when the document says nothing (`A4`). */
|
|
68
|
+
size: string;
|
|
69
|
+
/** Page margin: a CSS `margin` value, e.g. `20mm 18mm`. */
|
|
70
|
+
margin: string;
|
|
71
|
+
/** Running header HTML: `{{pageNumber}}`, `{{totalPages}}`, `{{title}}`, `{{author}}`, `{{date}}`, `{{stamp}}`. */
|
|
72
|
+
header?: string;
|
|
73
|
+
/** Running footer HTML, same variables. */
|
|
74
|
+
footer?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface MarkdownTemplate {
|
|
77
|
+
/** One line for `listTemplates()`. */
|
|
78
|
+
description?: string;
|
|
79
|
+
type?: Partial<TemplateType>;
|
|
80
|
+
page?: Partial<TemplatePage>;
|
|
81
|
+
defaults?: DocumentSettings;
|
|
82
|
+
/** Extra CSS appended after the generated stylesheet (cover and contents tuning, ...). */
|
|
83
|
+
css?: string;
|
|
84
|
+
}
|
|
85
|
+
export declare const DEFAULT_TYPE: TemplateType;
|
|
86
|
+
export declare const DEFAULT_PAGE: TemplatePage;
|
|
87
|
+
/**
|
|
88
|
+
* The flat `key: value` lines of a front matter block. Values may be quoted; `toc` and `cover` take
|
|
89
|
+
* `true` / `false`. Lists, nested values, comments and keys this module does not know are skipped
|
|
90
|
+
* (front matter is shared with other tools), so they never break a document. `page-size` is read as
|
|
91
|
+
* `page_size`.
|
|
92
|
+
*/
|
|
93
|
+
export declare function parseFrontMatter(block: string): DocumentSettings;
|
|
94
|
+
/** `<br>` and `<br/>` break a title line, everything else is text. */
|
|
95
|
+
export declare function titleHtml(title: string): string;
|
|
96
|
+
export declare const escapeHtml: (text: string) => string;
|
|
97
|
+
/**
|
|
98
|
+
* Fill `{{title}}`, `{{author}}`, `{{date}}` and `{{stamp}}` of a running header or footer. The page
|
|
99
|
+
* numbers (`{{pageNumber}}`, `{{totalPages}}`) are left for the renderer, which knows the pages.
|
|
100
|
+
*/
|
|
101
|
+
export declare function fillRunningText(template: string, settings: DocumentSettings): string;
|
|
102
|
+
/**
|
|
103
|
+
* The bundled templates. A name picks one (`template: book`); anything it does not set comes from the
|
|
104
|
+
* default. Typography is original to this package, not borrowed from another tool.
|
|
105
|
+
*/
|
|
106
|
+
export declare const TEMPLATES: Record<string, MarkdownTemplate>;
|
|
107
|
+
/** The names of the bundled templates, each with its one-line description. */
|
|
108
|
+
export declare function listTemplates(): {
|
|
109
|
+
name: string;
|
|
110
|
+
description: string;
|
|
111
|
+
}[];
|
|
112
|
+
/** A template by name (a bundled one) or as given. An unknown name is an error that lists the choices. */
|
|
113
|
+
export declare function resolveTemplate(template: string | MarkdownTemplate | undefined): MarkdownTemplate;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Templates for Markdown -> PDF: a look you pick by name (`template: report` in the front matter, or
|
|
3
|
+
* `template` in the options) and adjust with a few settings, without writing CSS.
|
|
4
|
+
*
|
|
5
|
+
* A template is plain data (it works in Node, browsers and Workers alike) made of three parts:
|
|
6
|
+
* - `type`: typography and structure (fonts, size, line height, how headings and the first page look);
|
|
7
|
+
* - `page`: the PDF page (size, margins, running header and footer);
|
|
8
|
+
* - `defaults`: document settings the template starts from (a cover, a contents page, an accent colour).
|
|
9
|
+
* Colours are not part of a template: light and dark are a separate `theme`, so every template comes in both.
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_TYPE = {
|
|
12
|
+
font: "sans-serif",
|
|
13
|
+
mono: "monospace",
|
|
14
|
+
size: 16,
|
|
15
|
+
lineHeight: 1.5,
|
|
16
|
+
justify: false,
|
|
17
|
+
h1Rule: true,
|
|
18
|
+
h2Rule: true,
|
|
19
|
+
headingWeight: 600,
|
|
20
|
+
accentHeadings: false,
|
|
21
|
+
chapterBreak: false,
|
|
22
|
+
radius: 6,
|
|
23
|
+
};
|
|
24
|
+
export const DEFAULT_PAGE = { size: "A4", margin: "32px" };
|
|
25
|
+
const KNOWN_KEYS = new Set([
|
|
26
|
+
"title",
|
|
27
|
+
"subtitle",
|
|
28
|
+
"author",
|
|
29
|
+
"date",
|
|
30
|
+
"template",
|
|
31
|
+
"toc",
|
|
32
|
+
"cover",
|
|
33
|
+
"logo",
|
|
34
|
+
"accent",
|
|
35
|
+
"font",
|
|
36
|
+
"page_size",
|
|
37
|
+
"stamp",
|
|
38
|
+
"lang",
|
|
39
|
+
"dir",
|
|
40
|
+
]);
|
|
41
|
+
const BOOLEAN_KEYS = new Set(["toc", "cover"]);
|
|
42
|
+
/**
|
|
43
|
+
* The flat `key: value` lines of a front matter block. Values may be quoted; `toc` and `cover` take
|
|
44
|
+
* `true` / `false`. Lists, nested values, comments and keys this module does not know are skipped
|
|
45
|
+
* (front matter is shared with other tools), so they never break a document. `page-size` is read as
|
|
46
|
+
* `page_size`.
|
|
47
|
+
*/
|
|
48
|
+
export function parseFrontMatter(block) {
|
|
49
|
+
const out = {};
|
|
50
|
+
for (const line of block.split(/\r?\n/)) {
|
|
51
|
+
const m = /^([A-Za-z_][\w-]*):[ \t]*(.*?)[ \t]*$/.exec(line);
|
|
52
|
+
if (!m)
|
|
53
|
+
continue; // blank, comment, indented (nested) or a list item
|
|
54
|
+
const key = m[1].replace(/-/g, "_");
|
|
55
|
+
if (!KNOWN_KEYS.has(key))
|
|
56
|
+
continue;
|
|
57
|
+
let value = m[2];
|
|
58
|
+
const quoted = /^(["'])(.*)\1$/.exec(value);
|
|
59
|
+
if (quoted)
|
|
60
|
+
value = quoted[2];
|
|
61
|
+
else
|
|
62
|
+
value = value.replace(/[ \t]+#.*$/, ""); // a trailing comment on an unquoted value
|
|
63
|
+
if (value === "")
|
|
64
|
+
continue;
|
|
65
|
+
if (BOOLEAN_KEYS.has(key)) {
|
|
66
|
+
if (!quoted && (value === "true" || value === "false"))
|
|
67
|
+
out[key] = value === "true";
|
|
68
|
+
}
|
|
69
|
+
else
|
|
70
|
+
out[key] = value;
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
/** `<br>` and `<br/>` break a title line, everything else is text. */
|
|
75
|
+
export function titleHtml(title) {
|
|
76
|
+
return title
|
|
77
|
+
.split(/<br\s*\/?>/i)
|
|
78
|
+
.map(escapeHtml)
|
|
79
|
+
.join("<br>");
|
|
80
|
+
}
|
|
81
|
+
export const escapeHtml = (text) => text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """);
|
|
82
|
+
/**
|
|
83
|
+
* Fill `{{title}}`, `{{author}}`, `{{date}}` and `{{stamp}}` of a running header or footer. The page
|
|
84
|
+
* numbers (`{{pageNumber}}`, `{{totalPages}}`) are left for the renderer, which knows the pages.
|
|
85
|
+
*/
|
|
86
|
+
export function fillRunningText(template, settings) {
|
|
87
|
+
const vars = {
|
|
88
|
+
title: settings.title && titleHtml(settings.title).replace(/<br>/g, " "),
|
|
89
|
+
author: settings.author && escapeHtml(settings.author),
|
|
90
|
+
date: settings.date && escapeHtml(settings.date),
|
|
91
|
+
stamp: settings.stamp && escapeHtml(settings.stamp),
|
|
92
|
+
};
|
|
93
|
+
return template.replace(/\{\{(title|author|date|stamp)\}\}/g, (_, k) => vars[k] ?? "");
|
|
94
|
+
}
|
|
95
|
+
const RUNNING = "font-size:11px;color:#6b7280;font-family:sans-serif;line-height:1.2;";
|
|
96
|
+
/**
|
|
97
|
+
* The bundled templates. A name picks one (`template: book`); anything it does not set comes from the
|
|
98
|
+
* default. Typography is original to this package, not borrowed from another tool.
|
|
99
|
+
*/
|
|
100
|
+
export const TEMPLATES = {
|
|
101
|
+
default: {
|
|
102
|
+
description: "GitHub-like page, good for images and quick PDFs",
|
|
103
|
+
},
|
|
104
|
+
report: {
|
|
105
|
+
description: "Business document: cover, contents, the title in the header and the page number in the footer",
|
|
106
|
+
type: { size: 15, lineHeight: 1.65, h1Rule: false, h2Rule: false, accentHeadings: true, headingWeight: 700, radius: 4 },
|
|
107
|
+
page: {
|
|
108
|
+
margin: "26mm 22mm 24mm",
|
|
109
|
+
header: `<div style="${RUNNING}display:flex;justify-content:space-between;padding-top:8mm"><span>{{title}}</span><span>{{stamp}}</span></div>`,
|
|
110
|
+
footer: `<div style="${RUNNING}display:flex;justify-content:space-between;padding-bottom:8mm"><span>{{author}}</span><span>{{pageNumber}} / {{totalPages}}</span></div>`,
|
|
111
|
+
},
|
|
112
|
+
defaults: { cover: true, toc: true, accent: "#1d4ed8" },
|
|
113
|
+
css: `.markdown-body h2 { margin-top: 32px; padding-bottom: 6px; border-bottom: 2px solid var(--accent, #1d4ed8); }
|
|
114
|
+
.markdown-body h1 { margin-top: 40px; }
|
|
115
|
+
.cover { margin: 60mm 0 0; padding-left: 14px; border-left: 6px solid var(--accent, #1d4ed8); }`,
|
|
116
|
+
},
|
|
117
|
+
book: {
|
|
118
|
+
description: "Book: serif text, justified, every chapter (h1) on a new page, inner-margin friendly page",
|
|
119
|
+
type: { font: "serif", size: 15, lineHeight: 1.8, justify: true, h1Rule: false, h2Rule: false, headingWeight: 700, chapterBreak: true, radius: 3 },
|
|
120
|
+
page: {
|
|
121
|
+
size: "A5",
|
|
122
|
+
margin: "20mm 17mm 22mm",
|
|
123
|
+
footer: `<div style="${RUNNING}text-align:center;padding-bottom:9mm">{{pageNumber}}</div>`,
|
|
124
|
+
},
|
|
125
|
+
defaults: { cover: true, toc: true, accent: "#7c2d12" },
|
|
126
|
+
css: `.markdown-body h1 { margin: 0 0 1.4em; font-size: 1.9em; text-align: center; }
|
|
127
|
+
.markdown-body h2 { margin-top: 1.8em; font-size: 1.3em; }
|
|
128
|
+
.markdown-body p { margin-bottom: 0; text-indent: 1em; }
|
|
129
|
+
.markdown-body p:first-child, .markdown-body h1 + p, .markdown-body h2 + p, .markdown-body h3 + p { text-indent: 0; }
|
|
130
|
+
.markdown-body p + p { margin-top: 0; }
|
|
131
|
+
.cover { margin: 45mm 0 0; text-align: center; }`,
|
|
132
|
+
},
|
|
133
|
+
paper: {
|
|
134
|
+
description: "Paper / technical note: serif, justified, tight leading, numbers in the footer",
|
|
135
|
+
type: { font: "serif", size: 13, lineHeight: 1.55, justify: true, h1Rule: false, h2Rule: false, headingWeight: 700, radius: 2 },
|
|
136
|
+
page: {
|
|
137
|
+
margin: "22mm 20mm",
|
|
138
|
+
footer: `<div style="${RUNNING}text-align:center;padding-bottom:8mm">{{pageNumber}}</div>`,
|
|
139
|
+
},
|
|
140
|
+
defaults: { cover: false, toc: false },
|
|
141
|
+
css: `.markdown-body h1 { margin: 0 0 0.6em; font-size: 1.8em; text-align: center; }
|
|
142
|
+
.markdown-body h2 { margin-top: 1.4em; margin-bottom: 0.5em; font-size: 1.2em; }
|
|
143
|
+
.markdown-body h3 { margin-top: 1.1em; margin-bottom: 0.4em; font-size: 1.05em; font-style: italic; }
|
|
144
|
+
.markdown-body p { margin-bottom: 0.7em; }
|
|
145
|
+
.markdown-body table { font-size: 0.92em; }`,
|
|
146
|
+
},
|
|
147
|
+
compact: {
|
|
148
|
+
description: "Notes and cheat sheets: small text, narrow margins, no cover or contents",
|
|
149
|
+
type: { size: 12, lineHeight: 1.4, h1Rule: false, h2Rule: false, headingWeight: 600, radius: 3 },
|
|
150
|
+
page: { margin: "12mm 12mm" },
|
|
151
|
+
defaults: { cover: false, toc: false },
|
|
152
|
+
css: `.markdown-body h1 { margin: 0.8em 0 0.4em; font-size: 1.5em; }
|
|
153
|
+
.markdown-body h2 { margin: 0.9em 0 0.35em; font-size: 1.25em; }
|
|
154
|
+
.markdown-body h3 { margin: 0.8em 0 0.3em; font-size: 1.1em; }
|
|
155
|
+
.markdown-body p, .markdown-body ul, .markdown-body ol, .markdown-body blockquote, .markdown-body pre, .markdown-body table { margin-bottom: 8px; }
|
|
156
|
+
.markdown-body th, .markdown-body td { padding: 3px 8px; }
|
|
157
|
+
.markdown-body pre { padding: 8px 10px; }`,
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
/** The names of the bundled templates, each with its one-line description. */
|
|
161
|
+
export function listTemplates() {
|
|
162
|
+
return Object.entries(TEMPLATES).map(([name, t]) => ({ name, description: t.description ?? "" }));
|
|
163
|
+
}
|
|
164
|
+
/** A template by name (a bundled one) or as given. An unknown name is an error that lists the choices. */
|
|
165
|
+
export function resolveTemplate(template) {
|
|
166
|
+
if (template === undefined)
|
|
167
|
+
return TEMPLATES.default;
|
|
168
|
+
if (typeof template !== "string")
|
|
169
|
+
return template;
|
|
170
|
+
const found = TEMPLATES[template];
|
|
171
|
+
if (!found)
|
|
172
|
+
throw new Error(`unknown template "${template}". Choose from: ${Object.keys(TEMPLATES).join(", ")}`);
|
|
173
|
+
return found;
|
|
174
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { type MathRenderer } from "./markdown-math-syntax.js";
|
|
2
|
+
import { type DocumentSettings, type MarkdownTemplate, type TemplateType } from "./markdown-template.js";
|
|
3
|
+
/** Options for {@link markdownToHtml}. */
|
|
4
|
+
export { listTemplates, TEMPLATES } from "./markdown-template.js";
|
|
5
|
+
export type { DocumentSettings, MarkdownTemplate, TemplatePage, TemplateType } from "./markdown-template.js";
|
|
6
|
+
export interface MarkdownOptions {
|
|
7
|
+
/** Colour scheme of the built-in stylesheet. Defaults to `"light"`. */
|
|
8
|
+
theme?: "light" | "dark";
|
|
9
|
+
/** Extra CSS appended after the built-in stylesheet (it wins on equal specificity). */
|
|
10
|
+
css?: string;
|
|
11
|
+
/** Page padding around the article in px. Defaults to 32. */
|
|
12
|
+
padding?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Paginated output (`format: "pdf"`): `padding` becomes the `@page` margin on every page instead
|
|
15
|
+
* of padding around the article, so pages after the first keep their top and bottom margins.
|
|
16
|
+
*/
|
|
17
|
+
paged?: boolean;
|
|
18
|
+
/** Maximum width of the article in px; omit for the full viewport width. */
|
|
19
|
+
maxWidth?: number;
|
|
20
|
+
/** `<title>` of the generated document. Defaults to the `title` of the front matter, if any. */
|
|
21
|
+
title?: string;
|
|
22
|
+
/** Highlight fenced code blocks that name a known language. Defaults to true. */
|
|
23
|
+
highlight?: boolean;
|
|
24
|
+
/** Strip a leading `---` YAML front matter block (and read its `title`). Defaults to true. */
|
|
25
|
+
frontMatter?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Typeset `$...$` and `$$...$$` with this renderer (`katexMath()` from `wasm-html-to-image/markdown-math`).
|
|
28
|
+
* Without it a dollar sign is just text.
|
|
29
|
+
*/
|
|
30
|
+
math?: MathRenderer;
|
|
31
|
+
/** Replace the built-in stylesheet entirely (`theme` is then ignored). */
|
|
32
|
+
stylesheet?: string;
|
|
33
|
+
/**
|
|
34
|
+
* A table of contents before the text: every heading down to `depth` (default 3), each a link to its
|
|
35
|
+
* heading with the page it lands on filled in by the PDF renderer. On by default for paged
|
|
36
|
+
* (`paged: true`, i.e. PDF) output, off otherwise; `false` switches it off, `true` or an object on.
|
|
37
|
+
*/
|
|
38
|
+
toc?: boolean | TocOptions;
|
|
39
|
+
/**
|
|
40
|
+
* The look: a bundled template by name (`"default"`, `"report"`, `"book"`, `"paper"`, `"compact"`, see
|
|
41
|
+
* `listTemplates()`) or your own {@link MarkdownTemplate}. A front matter `template:` picks one too; this
|
|
42
|
+
* option wins. Without either the page is the plain GitHub-like one.
|
|
43
|
+
*/
|
|
44
|
+
template?: string | MarkdownTemplate;
|
|
45
|
+
/**
|
|
46
|
+
* Document settings that override the front matter (`title`, `author`, `accent`, `font`, `page_size`,
|
|
47
|
+
* `cover`, `stamp`, ...). Precedence: template defaults < front matter < `settings` / the other options.
|
|
48
|
+
*/
|
|
49
|
+
settings?: DocumentSettings;
|
|
50
|
+
}
|
|
51
|
+
export interface TocOptions {
|
|
52
|
+
/** Deepest heading level listed, 1-6. Defaults to 3. */
|
|
53
|
+
depth?: number;
|
|
54
|
+
/** Heading above the list. Defaults to "Contents"; an empty string leaves it out. */
|
|
55
|
+
title?: string;
|
|
56
|
+
}
|
|
57
|
+
/** The built-in GitHub-like stylesheet. Plain selectors only: it has to render in the engine as well. */
|
|
58
|
+
export declare function markdownStylesheet(theme?: "light" | "dark", padding?: number, maxWidth?: number, paged?: boolean, type?: TemplateType, accent?: string, page?: {
|
|
59
|
+
size?: string;
|
|
60
|
+
margin: string;
|
|
61
|
+
}): string;
|
|
62
|
+
/**
|
|
63
|
+
* Convert Markdown (GitHub flavoured, via `marked`) to a complete HTML document with a built-in
|
|
64
|
+
* GitHub-like stylesheet, ready to pass to `render({ value })`.
|
|
65
|
+
*/
|
|
66
|
+
export declare function markdownToHtml(markdown: string, options?: MarkdownOptions): string;
|
|
67
|
+
/** What `render()` needs besides the HTML for the template's running header and footer. */
|
|
68
|
+
export interface MarkdownRenderOptions {
|
|
69
|
+
/** The theme's page colour, for a dark theme: the PDF page (margins included) takes it, not only the text area. */
|
|
70
|
+
pdfBackground?: string;
|
|
71
|
+
pdfHeader?: string;
|
|
72
|
+
pdfFooter?: string;
|
|
73
|
+
pdfTitle?: string;
|
|
74
|
+
pdfAuthor?: string;
|
|
75
|
+
}
|
|
76
|
+
export interface MarkdownDocument {
|
|
77
|
+
/** The page, ready for `render({ value })`. */
|
|
78
|
+
html: string;
|
|
79
|
+
/** The settings that applied (template defaults < front matter < options), for your own use. */
|
|
80
|
+
settings: DocumentSettings;
|
|
81
|
+
/** Spread into `render()` for a PDF: the template's header and footer, the PDF's title and author. */
|
|
82
|
+
renderOptions: MarkdownRenderOptions;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert Markdown (GitHub flavoured, via `marked`) to a page and the render options that go with it
|
|
86
|
+
* (a template's running header and footer, the PDF's title). {@link markdownToHtml} is the HTML alone.
|
|
87
|
+
*/
|
|
88
|
+
export declare function markdownToDocument(markdown: string, options?: MarkdownOptions): MarkdownDocument;
|