UNPKG

better-react-mathjax

Version:

Up-to-date component for using MathJax in latest React (using functional components and hooks API). Focuses on being versatile and making the use of MathJax in React a pleasant experience without flashes of non-typeset content, both with respect to initia

1 lines 4.65 kB
"use strict";"use client";var v2Promise,v3Promise,v4Promise,__assign=this&&this.__assign||function(){return(__assign=Object.assign||function(e){for(var t,o=1,r=arguments.length;o<r;o++)for(var n in t=arguments[o])Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e}).apply(this,arguments)},__createBinding=this&&this.__createBinding||(Object.create?function(e,t,o,r){void 0===r&&(r=o);var n=Object.getOwnPropertyDescriptor(t,o);n&&("get"in n?t.__esModule:!n.writable&&!n.configurable)||(n={enumerable:!0,get:function(){return t[o]}}),Object.defineProperty(e,r,n)}:function(e,t,o,r){e[r=void 0===r?o:r]=t[o]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||(()=>{var n=function(e){return(n=Object.getOwnPropertyNames||function(e){var t,o=[];for(t in e)Object.prototype.hasOwnProperty.call(e,t)&&(o[o.length]=t);return o})(e)};return function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var o=n(e),r=0;r<o.length;r++)"default"!==o[r]&&__createBinding(t,e,o[r]);return __setModuleDefault(t,e),t}})(),react_1=(Object.defineProperty(exports,"__esModule",{value:!0}),exports.MathJaxBaseContext=void 0,__importStar(require("react"))),DEFAULT_V2_SRC=(exports.MathJaxBaseContext=(0,react_1.createContext)(void 0),"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-MML-AM_CHTML"),DEFAULT_V3_SRC="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.js",DEFAULT_V4_SRC="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js",MathJaxContext=function(e){var r=e.config,t=e.version,t=void 0===t?4:t,o=e.src,o=void 0===o?2===t?DEFAULT_V2_SRC:3===t?DEFAULT_V3_SRC:DEFAULT_V4_SRC:o,n=e.onStartup,i=e.onLoad,a=e.asyncLoad,s=void 0!==a&&a,c=e.onError,a=e.typesettingOptions,d=e.renderMode,d=void 0===d?"post":d,u=e.hideUntilTypeset,e=e.children,h=(0,react_1.useContext)(exports.MathJaxBaseContext);if(void 0!==(null==h?void 0:h.version)&&(null==h?void 0:h.version)!==t)throw Error("Cannot nest MathJaxContexts with different versions. MathJaxContexts should not be nested at all but if they are, they cannot have different versions. Stick with one version of MathJax in your app and avoid using more than one MathJaxContext.");if(2===t&&(void 0!==v3Promise||void 0!==v4Promise)||3===t&&(void 0!==v2Promise||void 0!==v4Promise)||4===t&&(void 0!==v2Promise||void 0!==v3Promise))throw Error("Cannot use two MathJax versions simultaneously in the same app due to how MathJax is set up in the browser; either you have multiple MathJaxContexts with different versions or you have mounted and unmounted MathJaxContexts with different versions. Please stick with one version of MathJax in your app. File an issue in the project Github page if you need this feature.");var v=(0,react_1.useRef)(h),h=(0,react_1.useRef)((null==h?void 0:h.version)||null);if(null===h.current)h.current=t;else if(h.current!==t)throw Error("Cannot change version of MathJax in a MathJaxContext after it has mounted. Reload the page with a new version when this must happen.");var l=o||(2===t?DEFAULT_V2_SRC:3===t?DEFAULT_V3_SRC:DEFAULT_V4_SRC);function f(t,o){r&&(window.MathJax=r);var e=document.createElement("script");e.type="text/javascript",e.src=l,e.async=s,e.addEventListener("load",function(){var e=window.MathJax;n&&n(e),t(e),i&&i()}),e.addEventListener("error",function(e){return o(e)}),document.getElementsByTagName("head")[0].appendChild(e)}return void 0===v.current&&(h={typesettingOptions:a,renderMode:d,hideUntilTypeset:u},2===t?void 0===v2Promise&&("undefined"!=typeof window?(v2Promise=new Promise(f)).catch(function(e){if(!c)throw Error("Failed to download MathJax version 2 from '".concat(l,"' due to: ").concat(JSON.stringify(e)));c(e)}):(v2Promise=Promise.reject()).catch(function(e){})):3===t?void 0===v3Promise&&("undefined"!=typeof window?(v3Promise=new Promise(f)).catch(function(e){if(!c)throw Error("Failed to download MathJax version 3 from '".concat(l,"' due to: ").concat(e));c(e)}):(v3Promise=Promise.reject()).catch(function(e){})):void 0===v4Promise&&("undefined"!=typeof window?(v4Promise=new Promise(f)).catch(function(e){if(!c)throw Error("Failed to download MathJax version 4 from '".concat(l,"' due to: ").concat(e));c(e)}):(v4Promise=Promise.reject()).catch(function(e){})),v.current=__assign(__assign({},h),2===t?{version:2,promise:v2Promise}:3===t?{version:3,promise:v3Promise}:{version:4,promise:v4Promise})),react_1.default.createElement(exports.MathJaxBaseContext.Provider,{value:v.current},e)};exports.default=MathJaxContext;