diff --git a/dash_chat/ChatComponent.py b/dash_chat/ChatComponent.py index b2ae21a..c9161e7 100644 --- a/dash_chat/ChatComponent.py +++ b/dash_chat/ChatComponent.py @@ -15,12 +15,12 @@ class ChatComponent(Component): Keyword arguments: - id (string; optional): - The ID of this component, used to identify dash components in - callbacks. The ID needs to be unique across all of the components + The ID of this component, used to identify dash components in + callbacks. The ID needs to be unique across all of the components in an app. - assistant_bubble_style (dict; optional): - Css styles to customize the assistant message bubbles. + Css styles to customize the assistant message bubble. - class_name (string; default ""): Name for the class attribute to be added to the chat container. @@ -47,8 +47,8 @@ class ChatComponent(Component): - messages (list of dicts; optional): An array of options. The list of chat messages. Each message - object should have: - `role` (string): The message sender, - either \"user\" or \"assistant\". - `content` (string): The + object should have: - `role` (string): The message sender, + either \"user\" or \"assistant\". - `content` (string): The content of the message. `messages` is a list of dicts with keys: @@ -71,12 +71,12 @@ class ChatComponent(Component): for a dark mode appearance. - typing_indicator (a value equal to: "dots", "spinner"; default "dots"): - The type of typing indicator to display. Options are: - - `\"dots\"`: Displays animated dots. - `\"spinner\"`: Displays a - spinner animation. + The type of typing indicator to display. Options are: - + `\"dots\"`: Displays animated dots. - `\"spinner\"`: Displays + a spinner animation. - user_bubble_style (dict; optional): - Css styles to customize the user message bubbles.""" + Css styles to customize the user message bubble.""" _children_props = [] _base_nodes = ["children"] @@ -102,7 +102,7 @@ def __init__( class_name=Component.UNDEFINED, persistence=Component.UNDEFINED, persistence_type=Component.UNDEFINED, - **kwargs + **kwargs, ): self._prop_names = [ "id", diff --git a/dash_chat/_imports_.py b/dash_chat/_imports_.py index 8e03586..1d4b8c5 100644 --- a/dash_chat/_imports_.py +++ b/dash_chat/_imports_.py @@ -1,3 +1,5 @@ from .ChatComponent import ChatComponent -__all__ = ["ChatComponent"] +__all__ = [ + "ChatComponent" +] \ No newline at end of file diff --git a/dash_chat/dash_chat.min.js b/dash_chat/dash_chat.min.js index b50600a..e2d2d5f 100644 --- a/dash_chat/dash_chat.min.js +++ b/dash_chat/dash_chat.min.js @@ -1,3 +1,3 @@ /*! For license information please see dash_chat.min.js.LICENSE.txt */ -(()=>{var e={386:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(354),o=n.n(r),i=n(314),l=n.n(i)()(o());l.push([e.id,".chat-container {\n border: 1px solid;\n border-radius: 8px;\n padding: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.message-input-container {\n display: flex;\n margin-top: 10px;\n padding-top: 10px;\n}\n\n.message-input-field {\n flex: 1;\n padding: 8px;\n border: 1px solid;\n border-radius: 4px;\n margin-right: 5px;\n}\n\n.message-input-field:focus {\n outline: none;\n}\n\n.message-input-button {\n background-color: #007bff;\n color: white;\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.message-input-container .disabled {\n background-color: #efefef4d;\n color: #1010104d;\n border-color: #efefef4d;\n cursor: auto;\n}\n\n.message-input-button:hover {\n background-color: #0056b3;\n}\n\n.message-input-container .disabled:hover {\n background-color: #efefef4d;\n}\n\n.chat-bubble {\n max-width: 75%;\n margin-bottom: 10px;\n padding: 0px 10px 0px;\n border-radius: 12px;\n word-wrap: break-word;\n}\n\n.user .markdown-content a {\n color: #fff;\n text-decoration: underline;\n}\n\n.user .markdown-content a:hover {\n color: #212427;\n}\n\n.markdown-content code {\n background-color: rgba(0, 0, 0, 0.4);\n color: #ffffffda;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.empty-chat {\n margin: 0 auto;\n}\n\n.actionBtnContainer {\n position: relative;\n}\n\n.dotsButton {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n}\n\n.dotsButton:hover {\n background: #cccccc1f;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.dropdown {\n position: relative;\n display: inline-block;\n}\n\n.dropdownMenu {\n position: absolute;\n background-color: white;\n width: 100px;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n}\n\n.dropdownItem {\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n width: 100%;\n cursor: pointer;\n}\n\n.dropdownItem:hover {\n background-color: #f1f1f1;\n}\n\n","",{version:3,sources:["webpack://./src/styles/chatStyles.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,yBAAyB;IACzB,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,YAAY;AAChB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;AACzB;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,oCAAoC;IACpC,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI,kBAAkB;IAClB,uBAAuB;IACvB,YAAY;IACZ,wCAAwC;IACxC,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,yBAAyB;AAC7B",sourcesContent:[".chat-container {\n border: 1px solid;\n border-radius: 8px;\n padding: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.message-input-container {\n display: flex;\n margin-top: 10px;\n padding-top: 10px;\n}\n\n.message-input-field {\n flex: 1;\n padding: 8px;\n border: 1px solid;\n border-radius: 4px;\n margin-right: 5px;\n}\n\n.message-input-field:focus {\n outline: none;\n}\n\n.message-input-button {\n background-color: #007bff;\n color: white;\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.message-input-container .disabled {\n background-color: #efefef4d;\n color: #1010104d;\n border-color: #efefef4d;\n cursor: auto;\n}\n\n.message-input-button:hover {\n background-color: #0056b3;\n}\n\n.message-input-container .disabled:hover {\n background-color: #efefef4d;\n}\n\n.chat-bubble {\n max-width: 75%;\n margin-bottom: 10px;\n padding: 0px 10px 0px;\n border-radius: 12px;\n word-wrap: break-word;\n}\n\n.user .markdown-content a {\n color: #fff;\n text-decoration: underline;\n}\n\n.user .markdown-content a:hover {\n color: #212427;\n}\n\n.markdown-content code {\n background-color: rgba(0, 0, 0, 0.4);\n color: #ffffffda;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.empty-chat {\n margin: 0 auto;\n}\n\n.actionBtnContainer {\n position: relative;\n}\n\n.dotsButton {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n}\n\n.dotsButton:hover {\n background: #cccccc1f;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.dropdown {\n position: relative;\n display: inline-block;\n}\n\n.dropdownMenu {\n position: absolute;\n background-color: white;\n width: 100px;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n}\n\n.dropdownItem {\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n width: 100%;\n cursor: pointer;\n}\n\n.dropdownItem:hover {\n background-color: #f1f1f1;\n}\n\n"],sourceRoot:""}]);const a=l},796:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(354),o=n.n(r),i=n(314),l=n.n(i)()(o());l.push([e.id,".typing-dots {\n display: flex;\n gap: 4px;\n}\n\n.typing-dots span {\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: gray;\n border-radius: 50%;\n animation: bounce 1.2s infinite ease-in-out;\n}\n\n.typing-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.typing-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n.typing-spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 3px solid gray;\n border-top: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n\n@keyframes bounce {\n\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}","",{version:3,sources:["webpack://./src/styles/indicatorStyle.css"],names:[],mappings:"AAAA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,qBAAqB;IACrB,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,kBAAkB;IAClB,2CAA2C;AAC/C;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,sBAAsB;IACtB,iCAAiC;IACjC,kBAAkB;IAClB,kCAAkC;AACtC;;AAEA;IACI;QACI,uBAAuB;IAC3B;;IAEA;QACI,yBAAyB;IAC7B;AACJ;;;AAGA;;IAEI;;;QAGI,mBAAmB;IACvB;;IAEA;QACI,mBAAmB;IACvB;AACJ",sourcesContent:[".typing-dots {\n display: flex;\n gap: 4px;\n}\n\n.typing-dots span {\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: gray;\n border-radius: 50%;\n animation: bounce 1.2s infinite ease-in-out;\n}\n\n.typing-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.typing-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n.typing-spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 3px solid gray;\n border-top: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n\n@keyframes bounce {\n\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}"],sourceRoot:""}]);const a=l},314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var l={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=i),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),t.push(u))}},t}},354:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},849:e=>{"use strict";var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===n.call(e)},l=function(e){if(!e||"[object Object]"!==n.call(e))return!1;var r,o=t.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&t.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!o&&!i)return!1;for(r in e);return void 0===r||t.call(e,r)},a=function(e,t){r&&"__proto__"===t.name?r(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},s=function(e,n){if("__proto__"===n){if(!t.call(e,n))return;if(o)return o(e,n).value}return e[n]};e.exports=function e(){var t,n,r,o,c,u,f=arguments[0],p=1,d=arguments.length,h=!1;for("boolean"==typeof f&&(h=f,f=arguments[1]||{},p=2),(null==f||"object"!=typeof f&&"function"!=typeof f)&&(f={});p{var t=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,l=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,s=/^\s+|\s+$/g,c="";function u(e){return e?e.replace(s,c):c}e.exports=function(e,s){if("string"!=typeof e)throw new TypeError("First argument must be a string");if(!e)return[];s=s||{};var f=1,p=1;function d(e){var t=e.match(n);t&&(f+=t.length);var r=e.lastIndexOf("\n");p=~r?e.length-r:p+e.length}function h(){var e={line:f,column:p};return function(t){return t.position=new m(e),k(),t}}function m(e){this.start=e,this.end={line:f,column:p},this.source=s.source}m.prototype.content=e;var g=[];function y(t){var n=new Error(s.source+":"+f+":"+p+": "+t);if(n.reason=t,n.filename=s.source,n.line=f,n.column=p,n.source=e,!s.silent)throw n;g.push(n)}function v(t){var n=t.exec(e);if(n){var r=n[0];return d(r),e=e.slice(r.length),n}}function k(){v(r)}function b(e){var t;for(e=e||[];t=x();)!1!==t&&e.push(t);return e}function x(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;c!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,c===e.charAt(n-1))return y("End of comment missing");var r=e.slice(2,n-2);return p+=2,d(r),e=e.slice(n),p+=2,t({type:"comment",comment:r})}}function A(){var e=h(),n=v(o);if(n){if(x(),!v(i))return y("property missing ':'");var r=v(l),s=e({type:"declaration",property:u(n[0].replace(t,c)),value:r?u(r[0].replace(t,c)):c});return v(a),s}}return k(),function(){var e,t=[];for(b(t);e=A();)!1!==e&&(t.push(e),b(t));return t}()}},20:(e,t,n)=>{"use strict";var r=n(609),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)l.call(t,r)&&!s.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:a.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},848:(e,t,n)=>{"use strict";e.exports=n(20)},72:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},133:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=null;if(!e||"string"!=typeof e)return n;var r=(0,o.default)(e),i="function"==typeof t;return r.forEach((function(e){if("declaration"===e.type){var r=e.property,o=e.value;i?t(r,o,e):o&&((n=n||{})[r]=o)}})),n};var o=r(n(788))},609:e=>{"use strict";e.exports=window.React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r,o=function(){var e=document.currentScript;if(!e){for(var t=document.getElementsByTagName("script"),n=[],r=0;r{"use strict";n.r(l),n.d(l,{ChatComponent:()=>el});var e={};n.r(e),n.d(e,{boolean:()=>y,booleanish:()=>v,commaOrSpaceSeparated:()=>w,commaSeparated:()=>A,number:()=>b,overloadedBoolean:()=>k,spaceSeparated:()=>x});var t={};n.r(t),n.d(t,{attentionMarkers:()=>rn,contentInitial:()=>Kt,disable:()=>on,document:()=>Zt,flow:()=>Gt,flowInitial:()=>Xt,insideSpan:()=>nn,string:()=>en,text:()=>tn});var r=n(609),o=n.n(r);const i=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,a=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,s={};function c(e,t){return((t||s).jsx?a:i).test(e)}const u=/[ \t\n\f\r]/g;function f(e){return""===e.replace(u,"")}class p{constructor(e,t,n){this.property=e,this.normal=t,n&&(this.space=n)}}function d(e,t){const n={},r={};let o=-1;for(;++o"xlink:"+t.slice(5).toLowerCase(),properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null}}),O=T({space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase(),properties:{xmlLang:null,xmlBase:null,xmlSpace:null}});function D(e,t){return t in e?e[t]:t}function L(e,t){return D(e,t.toLowerCase())}const F=T({space:"xmlns",attributes:{xmlnsxlink:"xmlns:xlink"},transform:L,properties:{xmlns:null,xmlnsXLink:null}}),M=T({transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase(),properties:{ariaActiveDescendant:null,ariaAtomic:v,ariaAutoComplete:null,ariaBusy:v,ariaChecked:v,ariaColCount:b,ariaColIndex:b,ariaColSpan:b,ariaControls:x,ariaCurrent:null,ariaDescribedBy:x,ariaDetails:null,ariaDisabled:v,ariaDropEffect:x,ariaErrorMessage:null,ariaExpanded:v,ariaFlowTo:x,ariaGrabbed:v,ariaHasPopup:null,ariaHidden:v,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:x,ariaLevel:b,ariaLive:null,ariaModal:v,ariaMultiLine:v,ariaMultiSelectable:v,ariaOrientation:null,ariaOwns:x,ariaPlaceholder:null,ariaPosInSet:b,ariaPressed:v,ariaReadOnly:v,ariaRelevant:null,ariaRequired:v,ariaRoleDescription:x,ariaRowCount:b,ariaRowIndex:b,ariaRowSpan:b,ariaSelected:v,ariaSetSize:b,ariaSort:null,ariaValueMax:b,ariaValueMin:b,ariaValueNow:b,ariaValueText:null,role:null}}),z=T({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:L,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:A,acceptCharset:x,accessKey:x,action:null,allow:null,allowFullScreen:y,allowPaymentRequest:y,allowUserMedia:y,alt:null,as:null,async:y,autoCapitalize:null,autoComplete:x,autoFocus:y,autoPlay:y,blocking:x,capture:null,charSet:null,checked:y,cite:null,className:x,cols:b,colSpan:null,content:null,contentEditable:v,controls:y,controlsList:x,coords:b|A,crossOrigin:null,data:null,dateTime:null,decoding:null,default:y,defer:y,dir:null,dirName:null,disabled:y,download:k,draggable:v,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:y,formTarget:null,headers:x,height:b,hidden:y,high:b,href:null,hrefLang:null,htmlFor:x,httpEquiv:x,id:null,imageSizes:null,imageSrcSet:null,inert:y,inputMode:null,integrity:null,is:null,isMap:y,itemId:null,itemProp:x,itemRef:x,itemScope:y,itemType:x,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:y,low:b,manifest:null,max:null,maxLength:b,media:null,method:null,min:null,minLength:b,multiple:y,muted:y,name:null,nonce:null,noModule:y,noValidate:y,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:y,optimum:b,pattern:null,ping:x,placeholder:null,playsInline:y,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:y,referrerPolicy:null,rel:x,required:y,reversed:y,rows:b,rowSpan:b,sandbox:x,scope:null,scoped:y,seamless:y,selected:y,shadowRootClonable:y,shadowRootDelegatesFocus:y,shadowRootMode:null,shape:null,size:b,sizes:null,slot:null,span:b,spellCheck:v,src:null,srcDoc:null,srcLang:null,srcSet:null,start:b,step:null,style:null,tabIndex:b,target:null,title:null,translate:null,type:null,typeMustMatch:y,useMap:null,value:v,width:b,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:x,axis:null,background:null,bgColor:null,border:b,borderColor:null,bottomMargin:b,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:y,declare:y,event:null,face:null,frame:null,frameBorder:null,hSpace:b,leftMargin:b,link:null,longDesc:null,lowSrc:null,marginHeight:b,marginWidth:b,noResize:y,noHref:y,noShade:y,noWrap:y,object:null,profile:null,prompt:null,rev:null,rightMargin:b,rules:null,scheme:null,scrolling:v,standby:null,summary:null,text:null,topMargin:b,valueType:null,version:null,vAlign:null,vLink:null,vSpace:b,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:y,disableRemotePlayback:y,prefix:null,property:null,results:b,security:null,unselectable:null}}),_=T({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:D,properties:{about:w,accentHeight:b,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:b,amplitude:b,arabicForm:null,ascent:b,attributeName:null,attributeType:null,azimuth:b,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:b,by:null,calcMode:null,capHeight:b,className:x,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:b,diffuseConstant:b,direction:null,display:null,dur:null,divisor:b,dominantBaseline:null,download:y,dx:null,dy:null,edgeMode:null,editable:null,elevation:b,enableBackground:null,end:null,event:null,exponent:b,externalResourcesRequired:null,fill:null,fillOpacity:b,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:A,g2:A,glyphName:A,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:b,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:b,horizOriginX:b,horizOriginY:b,id:null,ideographic:b,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:b,k:b,k1:b,k2:b,k3:b,k4:b,kernelMatrix:w,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:b,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:b,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:b,overlineThickness:b,paintOrder:null,panose1:null,path:null,pathLength:b,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:x,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:b,pointsAtY:b,pointsAtZ:b,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:w,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:w,rev:w,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:w,requiredFeatures:w,requiredFonts:w,requiredFormats:w,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:b,specularExponent:b,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:b,strikethroughThickness:b,string:null,stroke:null,strokeDashArray:w,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:b,strokeOpacity:b,strokeWidth:null,style:null,surfaceScale:b,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:w,tabIndex:b,tableValues:null,target:null,targetX:b,targetY:b,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:w,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:b,underlineThickness:b,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:b,values:null,vAlphabetic:b,vMathematical:b,vectorEffect:null,vHanging:b,vIdeographic:b,version:null,vertAdvY:b,vertOriginX:b,vertOriginY:b,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:b,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}}),R=d([O,P,F,M,z],"html"),N=d([O,P,F,M,_],"svg"),j=/^data[-\w.:]+$/i,U=/-[a-z]/g,H=/[A-Z]/g;function q(e){return"-"+e.toLowerCase()}function V(e){return e.charAt(1).toUpperCase()}const Y={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};var W=n(133);const $=W.default||W,Q=Z("end"),J=Z("start");function Z(e){return function(t){const n=t&&t.position&&t.position[e]||{};if("number"==typeof n.line&&n.line>0&&"number"==typeof n.column&&n.column>0)return{line:n.line,column:n.column,offset:"number"==typeof n.offset&&n.offset>-1?n.offset:void 0}}}function K(e){return e&&"object"==typeof e?"position"in e||"type"in e?G(e.position):"start"in e||"end"in e?G(e):"line"in e||"column"in e?X(e):"":""}function X(e){return ee(e&&e.line)+":"+ee(e&&e.column)}function G(e){return X(e&&e.start)+"-"+X(e&&e.end)}function ee(e){return e&&"number"==typeof e?e:1}class te extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",o={},i=!1;if(t&&(o="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!o.cause&&e&&(i=!0,r=e.message,o.cause=e),!o.ruleId&&!o.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?o.ruleId=n:(o.source=n.slice(0,e),o.ruleId=n.slice(e+1))}if(!o.place&&o.ancestors&&o.ancestors){const e=o.ancestors[o.ancestors.length-1];e&&(o.place=e.position)}const l=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file,this.message=r,this.line=l?l.line:void 0,this.name=K(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=i&&o.cause&&"string"==typeof o.cause.stack?o.cause.stack:"",this.actual,this.expected,this.note,this.url}}te.prototype.file="",te.prototype.name="",te.prototype.reason="",te.prototype.message="",te.prototype.stack="",te.prototype.column=void 0,te.prototype.line=void 0,te.prototype.ancestors=void 0,te.prototype.cause=void 0,te.prototype.fatal=void 0,te.prototype.place=void 0,te.prototype.ruleId=void 0,te.prototype.source=void 0;const ne={}.hasOwnProperty,re=new Map,oe=/[A-Z]/g,ie=/-([a-z])/g,le=new Set(["table","tbody","thead","tfoot","tr"]),ae=new Set(["td","th"]),se="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function ce(e,t,n){return"element"===t.type?function(e,t,n){const r=e.schema;let o=r;"svg"===t.tagName.toLowerCase()&&"html"===r.space&&(o=N,e.schema=o),e.ancestors.push(t);const i=he(e,t.tagName,!1),l=function(e,t){const n={};let r,o;for(o in t.properties)if("children"!==o&&ne.call(t.properties,o)){const i=de(e,o,t.properties[o]);if(i){const[o,l]=i;e.tableCellAlignToStyle&&"align"===o&&"string"==typeof l&&ae.has(t.tagName)?r=l:n[o]=l}}return r&&((n.style||(n.style={}))["css"===e.stylePropertyNameCase?"text-align":"textAlign"]=r),n}(e,t);let a=pe(e,t);return le.has(t.tagName)&&(a=a.filter((function(e){return"string"!=typeof e||!("object"==typeof(t=e)?"text"===t.type&&f(t.value):f(t));var t}))),ue(e,l,i,t),fe(l,a),e.ancestors.pop(),e.schema=r,e.create(t,i,l,n)}(e,t,n):"mdxFlowExpression"===t.type||"mdxTextExpression"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}me(e,t.position)}(e,t):"mdxJsxFlowElement"===t.type||"mdxJsxTextElement"===t.type?function(e,t,n){const r=e.schema;let o=r;"svg"===t.name&&"html"===r.space&&(o=N,e.schema=o),e.ancestors.push(t);const i=null===t.name?e.Fragment:he(e,t.name,!0),l=function(e,t){const n={};for(const r of t.attributes)if("mdxJsxExpressionAttribute"===r.type)if(r.data&&r.data.estree&&e.evaluater){const t=r.data.estree.body[0];t.type;const o=t.expression;o.type;const i=o.properties[0];i.type,Object.assign(n,e.evaluater.evaluateExpression(i.argument))}else me(e,t.position);else{const o=r.name;let i;if(r.value&&"object"==typeof r.value)if(r.value.data&&r.value.data.estree&&e.evaluater){const t=r.value.data.estree.body[0];t.type,i=e.evaluater.evaluateExpression(t.expression)}else me(e,t.position);else i=null===r.value||r.value;n[o]=i}return n}(e,t),a=pe(e,t);return ue(e,l,i,t),fe(l,a),e.ancestors.pop(),e.schema=r,e.create(t,i,l,n)}(e,t,n):"mdxjsEsm"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);me(e,t.position)}(e,t):"root"===t.type?function(e,t,n){const r={};return fe(r,pe(e,t)),e.create(t,e.Fragment,r,n)}(e,t,n):"text"===t.type?function(e,t){return t.value}(0,t):void 0}function ue(e,t,n,r){"string"!=typeof n&&n!==e.Fragment&&e.passNode&&(t.node=r)}function fe(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function pe(e,t){const n=[];let r=-1;const o=e.passKeys?new Map:re;for(;++r4&&"data"===n.slice(0,4)&&j.test(t)){if("-"===t.charAt(4)){const e=t.slice(5).replace(U,V);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{const e=t.slice(4);if(!U.test(e)){let n=e.replace(H,q);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}o=I}return new o(r,t)}(e.schema,t);if(!(null==n||"number"==typeof n&&Number.isNaN(n))){if(Array.isArray(n)&&(n=r.commaSeparated?function(e){const t={};return(""===e[e.length-1]?[...e,""]:e).join((t.padRight?" ":"")+","+(!1===t.padLeft?"":" ")).trim()}(n):n.join(" ").trim()),"style"===r.property){let t="object"==typeof n?n:function(e,t){const n={};try{$(t,(function(e,t){let r=e;"--"!==r.slice(0,2)&&("-ms-"===r.slice(0,4)&&(r="ms-"+r.slice(4)),r=r.replace(ie,ye)),n[r]=t}))}catch(t){if(!e.ignoreInvalidStyle){const n=t,r=new te("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=se+"#cannot-parse-style-attribute",r}}return n}(e,String(n));return"css"===e.stylePropertyNameCase&&(t=function(e){const t={};let n;for(n in e)ne.call(e,n)&&(t[ge(n)]=e[n]);return t}(t)),["style",t]}return["react"===e.elementAttributeNameCase&&r.space?Y[r.property]||r.property:r.attribute,n]}}function he(e,t,n){let r;if(n)if(t.includes(".")){const e=t.split(".");let n,o=-1;for(;++oo?0:o+t:t>o?o:t,n=n>0?n:0,r.length<1e4)i=Array.from(r),i.unshift(t,n),e.splice(...i);else for(n&&e.splice(t,n);l0?(Se(e,e.length,0,t),e):t}class Ee{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){const r=t||0;this.setCursor(Math.trunc(e));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return n&&Be(this.left,n),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(e){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(e)}pushMany(e){this.setCursor(Number.POSITIVE_INFINITY),Be(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Be(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&0===this.right.length||e<0&&0===this.left.length))if(e-1&&e.test(String.fromCharCode(t))}}function Qe(e,t,n,r){const o=r?r-1:Number.POSITIVE_INFINITY;let i=0;return function(r){return Ve(r)?(e.enter(n),l(r)):t(r)};function l(r){return Ve(r)&&i++i))return;const n=t.events.length;let o,a,s=n;for(;s--;)if("exit"===t.events[s][0]&&"chunkFlow"===t.events[s][1].type){if(o){a=t.events[s][1].end;break}o=!0}for(y(l),e=n;er;){const r=n[o];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){r.write([null]),o=void 0,r=void 0,t.containerState._closeFlow=void 0}}},Ke={tokenize:function(e,t,n){return Qe(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},Xe={partial:!0,tokenize:function(e,t,n){return function(t){return Ve(t)?Qe(e,r,"linePrefix")(t):r(t)};function r(e){return null===e||He(e)?t(e):n(e)}}},Ge={resolve:function(e){return Te(e),e},tokenize:function(e,t){let n;return function(t){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(t)};function r(t){return null===t?o(t):He(t)?e.check(et,i,o)(t):(e.consume(t),r)}function o(n){return e.exit("chunkContent"),e.exit("content"),t(n)}function i(t){return e.consume(t),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}},et={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),Qe(e,o,"linePrefix")};function o(o){if(null===o||He(o))return n(o);const i=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?t(o):e.interrupt(r.parser.constructs.flow,n,t)(o)}}},tt={tokenize:function(e){const t=this,n=e.attempt(Xe,(function(r){if(null!==r)return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n;e.consume(r)}),e.attempt(this.parser.constructs.flowInitial,r,Qe(e,e.attempt(this.parser.constructs.flow,r,e.attempt(Ge,r)),"linePrefix")));return n;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(r)}}},nt={resolveAll:lt()},rt=it("string"),ot=it("text");function it(e){return{resolveAll:lt("text"===e?at:void 0),tokenize:function(t){const n=this,r=this.parser.constructs[e],o=t.attempt(r,i,l);return i;function i(e){return s(e)?o(e):l(e)}function l(e){if(null!==e)return t.enter("data"),t.consume(e),a;t.consume(e)}function a(e){return s(e)?(t.exit("data"),o(e)):(t.consume(e),a)}function s(e){if(null===e)return!0;const t=r[e];let o=-1;if(t)for(;++o=3&&(null===i||He(i))?(e.exit("thematicBreak"),t(i)):n(i)}function l(t){return t===r?(e.consume(t),o++,l):(e.exit("thematicBreakSequence"),Ve(t)?Qe(e,i,"whitespace")(t):i(t))}}},ct={continuation:{tokenize:function(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(Xe,(function(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Qe(e,t,"listItemIndent",r.containerState.size+1)(n)}),(function(n){return r.containerState.furtherBlankLines||!Ve(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ft,t,o)(n))}));function o(o){return r.containerState._closeFlow=!0,r.interrupt=void 0,Qe(e,e.attempt(ct,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o)}}},exit:function(e){e.exit(this.containerState.type)},name:"list",tokenize:function(e,t,n){const r=this,o=r.events[r.events.length-1];let i=o&&"linePrefix"===o[1].type?o[2].sliceSerialize(o[1],!0).length:0,l=0;return function(t){const o=r.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===o?!r.containerState.marker||t===r.containerState.marker:Ne(t)){if(r.containerState.type||(r.containerState.type=o,e.enter(o,{_container:!0})),"listUnordered"===o)return e.enter("listItemPrefix"),42===t||45===t?e.check(st,n,s)(t):s(t);if(!r.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),a(t)}return n(t)};function a(t){return Ne(t)&&++l<10?(e.consume(t),a):(!r.interrupt||l<2)&&(r.containerState.marker?t===r.containerState.marker:41===t||46===t)?(e.exit("listItemValue"),s(t)):n(t)}function s(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||t,e.check(Xe,r.interrupt?n:c,e.attempt(ut,f,u))}function c(e){return r.containerState.initialBlankLine=!0,i++,f(e)}function u(t){return Ve(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),f):n(t)}function f(n){return r.containerState.size=i+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(n)}}},ut={partial:!0,tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return!Ve(e)&&o&&"listItemPrefixWhitespace"===o[1].type?t(e):n(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},ft={partial:!0,tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return o&&"listItemIndent"===o[1].type&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?t(e):n(e)}),"listItemIndent",r.containerState.size+1)}},pt={continuation:{tokenize:function(e,t,n){const r=this;return function(t){return Ve(t)?Qe(e,o,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):o(t)};function o(r){return e.attempt(pt,t,n)(r)}}},exit:function(e){e.exit("blockQuote")},name:"blockQuote",tokenize:function(e,t,n){const r=this;return function(t){if(62===t){const n=r.containerState;return n.open||(e.enter("blockQuote",{_container:!0}),n.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(t),e.exit("blockQuoteMarker"),o}return n(t)};function o(n){return Ve(n)?(e.enter("blockQuotePrefixWhitespace"),e.consume(n),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(n))}}};function dt(e,t,n,r,o,i,l,a,s){const c=s||Number.POSITIVE_INFINITY;let u=0;return function(t){return 60===t?(e.enter(r),e.enter(o),e.enter(i),e.consume(t),e.exit(i),f):null===t||32===t||41===t||Re(t)?n(t):(e.enter(r),e.enter(l),e.enter(a),e.enter("chunkString",{contentType:"string"}),h(t))};function f(n){return 62===n?(e.enter(i),e.consume(n),e.exit(i),e.exit(o),e.exit(r),t):(e.enter(a),e.enter("chunkString",{contentType:"string"}),p(n))}function p(t){return 62===t?(e.exit("chunkString"),e.exit(a),f(t)):null===t||60===t||He(t)?n(t):(e.consume(t),92===t?d:p)}function d(t){return 60===t||62===t||92===t?(e.consume(t),p):p(t)}function h(o){return u||null!==o&&41!==o&&!qe(o)?u999||null===f||91===f||93===f&&!a||94===f&&!s&&"_hiddenFootnoteSupport"in l.parser.constructs?n(f):93===f?(e.exit(i),e.enter(o),e.consume(f),e.exit(o),e.exit(r),t):He(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),u(f))}function u(t){return null===t||91===t||93===t||He(t)||s++>999?(e.exit("chunkString"),c(t)):(e.consume(t),a||(a=!Ve(t)),92===t?f:u)}function f(t){return 91===t||92===t||93===t?(e.consume(t),s++,u):u(t)}}function mt(e,t,n,r,o,i){let l;return function(t){return 34===t||39===t||40===t?(e.enter(r),e.enter(o),e.consume(t),e.exit(o),l=40===t?41:t,a):n(t)};function a(n){return n===l?(e.enter(o),e.consume(n),e.exit(o),e.exit(r),t):(e.enter(i),s(n))}function s(t){return t===l?(e.exit(i),a(l)):null===t?n(t):He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),Qe(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(t))}function c(t){return t===l||null===t||He(t)?(e.exit("chunkString"),s(t)):(e.consume(t),92===t?u:c)}function u(t){return t===l||92===t?(e.consume(t),c):c(t)}}function gt(e,t){let n;return function r(o){return He(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n=!0,r):Ve(o)?Qe(e,r,n?"linePrefix":"lineSuffix")(o):t(o)}}function yt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const vt={name:"definition",tokenize:function(e,t,n){const r=this;let o;return function(t){return e.enter("definition"),function(t){return ht.call(r,e,i,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(t)}(t)};function i(t){return o=yt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),l):n(t)}function l(t){return qe(t)?gt(e,a)(t):a(t)}function a(t){return dt(e,s,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(t)}function s(t){return e.attempt(kt,c,c)(t)}function c(t){return Ve(t)?Qe(e,u,"whitespace")(t):u(t)}function u(i){return null===i||He(i)?(e.exit("definition"),r.parser.defined.push(o),t(i)):n(i)}}},kt={partial:!0,tokenize:function(e,t,n){return function(t){return qe(t)?gt(e,r)(t):n(t)};function r(t){return mt(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t)}function o(t){return Ve(t)?Qe(e,i,"whitespace")(t):i(t)}function i(e){return null===e||He(e)?t(e):n(e)}}},bt={name:"codeIndented",tokenize:function(e,t,n){const r=this;return function(t){return e.enter("codeIndented"),Qe(e,o,"linePrefix",5)(t)};function o(e){const t=r.events[r.events.length-1];return t&&"linePrefix"===t[1].type&&t[2].sliceSerialize(t[1],!0).length>=4?i(e):n(e)}function i(t){return null===t?a(t):He(t)?e.attempt(xt,i,a)(t):(e.enter("codeFlowValue"),l(t))}function l(t){return null===t||He(t)?(e.exit("codeFlowValue"),i(t)):(e.consume(t),l)}function a(n){return e.exit("codeIndented"),t(n)}}},xt={partial:!0,tokenize:function(e,t,n){const r=this;return o;function o(t){return r.parser.lazy[r.now().line]?n(t):He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o):Qe(e,i,"linePrefix",5)(t)}function i(e){const i=r.events[r.events.length-1];return i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?t(e):He(e)?o(e):n(e)}}},At={name:"headingAtx",resolve:function(e,t){let n,r,o=e.length-2,i=3;return"whitespace"===e[i][1].type&&(i+=2),o-2>i&&"whitespace"===e[o][1].type&&(o-=2),"atxHeadingSequence"===e[o][1].type&&(i===o-1||o-4>i&&"whitespace"===e[o-2][1].type)&&(o-=i+1===o?2:4),o>i&&(n={type:"atxHeadingText",start:e[i][1].start,end:e[o][1].end},r={type:"chunkText",start:e[i][1].start,end:e[o][1].end,contentType:"text"},Se(e,i,o-i+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e},tokenize:function(e,t,n){let r=0;return function(t){return e.enter("atxHeading"),function(t){return e.enter("atxHeadingSequence"),o(t)}(t)};function o(t){return 35===t&&r++<6?(e.consume(t),o):null===t||qe(t)?(e.exit("atxHeadingSequence"),i(t)):n(t)}function i(n){return 35===n?(e.enter("atxHeadingSequence"),l(n)):null===n||He(n)?(e.exit("atxHeading"),t(n)):Ve(n)?Qe(e,i,"whitespace")(n):(e.enter("atxHeadingText"),a(n))}function l(t){return 35===t?(e.consume(t),l):(e.exit("atxHeadingSequence"),i(t))}function a(t){return null===t||35===t||qe(t)?(e.exit("atxHeadingText"),i(t)):(e.consume(t),a)}}},wt={name:"setextUnderline",resolveTo:function(e,t){let n,r,o,i=e.length;for(;i--;)if("enter"===e[i][0]){if("content"===e[i][1].type){n=i;break}"paragraph"===e[i][1].type&&(r=i)}else"content"===e[i][1].type&&e.splice(i,1),o||"definition"!==e[i][1].type||(o=i);const l={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",o?(e.splice(r,0,["enter",l,t]),e.splice(o+1,0,["exit",e[n][1],t]),e[n][1].end={...e[o][1].end}):e[n][1]=l,e.push(["exit",l,t]),e},tokenize:function(e,t,n){const r=this;let o;return function(t){let l,a=r.events.length;for(;a--;)if("lineEnding"!==r.events[a][1].type&&"linePrefix"!==r.events[a][1].type&&"content"!==r.events[a][1].type){l="paragraph"===r.events[a][1].type;break}return r.parser.lazy[r.now().line]||!r.interrupt&&!l?n(t):(e.enter("setextHeadingLine"),o=t,function(t){return e.enter("setextHeadingLineSequence"),i(t)}(t))};function i(t){return t===o?(e.consume(t),i):(e.exit("setextHeadingLineSequence"),Ve(t)?Qe(e,l,"lineSuffix")(t):l(t))}function l(r){return null===r||He(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}}},Ct=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],St=["pre","script","style","textarea"],It={concrete:!0,name:"htmlFlow",resolveTo:function(e){let t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););return t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e},tokenize:function(e,t,n){const r=this;let o,i,l,a,s;return function(t){return function(t){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(t),c}(t)};function c(a){return 33===a?(e.consume(a),u):47===a?(e.consume(a),i=!0,d):63===a?(e.consume(a),o=3,r.interrupt?t:F):Me(a)?(e.consume(a),l=String.fromCharCode(a),h):n(a)}function u(i){return 45===i?(e.consume(i),o=2,f):91===i?(e.consume(i),o=5,a=0,p):Me(i)?(e.consume(i),o=4,r.interrupt?t:F):n(i)}function f(o){return 45===o?(e.consume(o),r.interrupt?t:F):n(o)}function p(o){return o==="CDATA[".charCodeAt(a++)?(e.consume(o),6===a?r.interrupt?t:I:p):n(o)}function d(t){return Me(t)?(e.consume(t),l=String.fromCharCode(t),h):n(t)}function h(a){if(null===a||47===a||62===a||qe(a)){const s=47===a,c=l.toLowerCase();return s||i||!St.includes(c)?Ct.includes(l.toLowerCase())?(o=6,s?(e.consume(a),m):r.interrupt?t(a):I(a)):(o=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(a):i?g(a):y(a)):(o=1,r.interrupt?t(a):I(a))}return 45===a||ze(a)?(e.consume(a),l+=String.fromCharCode(a),h):n(a)}function m(o){return 62===o?(e.consume(o),r.interrupt?t:I):n(o)}function g(t){return Ve(t)?(e.consume(t),g):C(t)}function y(t){return 47===t?(e.consume(t),C):58===t||95===t||Me(t)?(e.consume(t),v):Ve(t)?(e.consume(t),y):C(t)}function v(t){return 45===t||46===t||58===t||95===t||ze(t)?(e.consume(t),v):k(t)}function k(t){return 61===t?(e.consume(t),b):Ve(t)?(e.consume(t),k):y(t)}function b(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,x):Ve(t)?(e.consume(t),b):A(t)}function x(t){return t===s?(e.consume(t),s=null,w):null===t||He(t)?n(t):(e.consume(t),x)}function A(t){return null===t||34===t||39===t||47===t||60===t||61===t||62===t||96===t||qe(t)?k(t):(e.consume(t),A)}function w(e){return 47===e||62===e||Ve(e)?y(e):n(e)}function C(t){return 62===t?(e.consume(t),S):n(t)}function S(t){return null===t||He(t)?I(t):Ve(t)?(e.consume(t),S):n(t)}function I(t){return 45===t&&2===o?(e.consume(t),P):60===t&&1===o?(e.consume(t),O):62===t&&4===o?(e.consume(t),M):63===t&&3===o?(e.consume(t),F):93===t&&5===o?(e.consume(t),L):!He(t)||6!==o&&7!==o?null===t||He(t)?(e.exit("htmlFlowData"),E(t)):(e.consume(t),I):(e.exit("htmlFlowData"),e.check(Et,z,E)(t))}function E(t){return e.check(Bt,B,z)(t)}function B(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),T}function T(t){return null===t||He(t)?E(t):(e.enter("htmlFlowData"),I(t))}function P(t){return 45===t?(e.consume(t),F):I(t)}function O(t){return 47===t?(e.consume(t),l="",D):I(t)}function D(t){if(62===t){const n=l.toLowerCase();return St.includes(n)?(e.consume(t),M):I(t)}return Me(t)&&l.length<8?(e.consume(t),l+=String.fromCharCode(t),D):I(t)}function L(t){return 93===t?(e.consume(t),F):I(t)}function F(t){return 62===t?(e.consume(t),M):45===t&&2===o?(e.consume(t),F):I(t)}function M(t){return null===t||He(t)?(e.exit("htmlFlowData"),z(t)):(e.consume(t),M)}function z(n){return e.exit("htmlFlow"),t(n)}}},Et={partial:!0,tokenize:function(e,t,n){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(Xe,t,n)}}},Bt={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o):n(t)};function o(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},Tt={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return null===t?n(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o)};function o(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},Pt={concrete:!0,name:"codeFenced",tokenize:function(e,t,n){const r=this,o={partial:!0,tokenize:function(e,t,n){let o=0;return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l};function l(t){return e.enter("codeFencedFence"),Ve(t)?Qe(e,s,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):s(t)}function s(t){return t===i?(e.enter("codeFencedFenceSequence"),c(t)):n(t)}function c(t){return t===i?(o++,e.consume(t),c):o>=a?(e.exit("codeFencedFenceSequence"),Ve(t)?Qe(e,u,"whitespace")(t):u(t)):n(t)}function u(r){return null===r||He(r)?(e.exit("codeFencedFence"),t(r)):n(r)}}};let i,l=0,a=0;return function(t){return function(t){const n=r.events[r.events.length-1];return l=n&&"linePrefix"===n[1].type?n[2].sliceSerialize(n[1],!0).length:0,i=t,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(t)}(t)};function s(t){return t===i?(a++,e.consume(t),s):a<3?n(t):(e.exit("codeFencedFenceSequence"),Ve(t)?Qe(e,c,"whitespace")(t):c(t))}function c(n){return null===n||He(n)?(e.exit("codeFencedFence"),r.interrupt?t(n):e.check(Tt,d,v)(n)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),u(n))}function u(t){return null===t||He(t)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),c(t)):Ve(t)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),Qe(e,f,"whitespace")(t)):96===t&&t===i?n(t):(e.consume(t),u)}function f(t){return null===t||He(t)?c(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),p(t))}function p(t){return null===t||He(t)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),c(t)):96===t&&t===i?n(t):(e.consume(t),p)}function d(t){return e.attempt(o,v,h)(t)}function h(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),m}function m(t){return l>0&&Ve(t)?Qe(e,g,"linePrefix",l+1)(t):g(t)}function g(t){return null===t||He(t)?e.check(Tt,d,v)(t):(e.enter("codeFlowValue"),y(t))}function y(t){return null===t||He(t)?(e.exit("codeFlowValue"),g(t)):(e.consume(t),y)}function v(n){return e.exit("codeFenced"),t(n)}}},Ot=document.createElement("i");function Dt(e){const t="&"+e+";";Ot.innerHTML=t;const n=Ot.textContent;return(59!==n.charCodeAt(n.length-1)||"semi"===e)&&n!==t&&n}const Lt={name:"characterReference",tokenize:function(e,t,n){const r=this;let o,i,l=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),a};function a(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),o=31,i=ze,c(t))}function s(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,i=je,c):(e.enter("characterReferenceValue"),o=7,i=Ne,c(t))}function c(a){if(59===a&&l){const o=e.exit("characterReferenceValue");return i!==ze||Dt(r.sliceSerialize(o))?(e.enter("characterReferenceMarker"),e.consume(a),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(a)}return i(a)&&l++1&&e[u][1].end.offset-e[u][1].start.offset>1?2:1;const f={...e[n][1].end},p={...e[u][1].start};Vt(f,-a),Vt(p,a),i={type:a>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},l={type:a>1?"strongSequence":"emphasisSequence",start:{...e[u][1].start},end:p},o={type:a>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[u][1].start}},r={type:a>1?"strong":"emphasis",start:{...i.start},end:{...l.end}},e[n][1].end={...i.start},e[u][1].start={...l.end},s=[],e[n][1].end.offset-e[n][1].start.offset&&(s=Ie(s,[["enter",e[n][1],t],["exit",e[n][1],t]])),s=Ie(s,[["enter",r,t],["enter",i,t],["exit",i,t],["enter",o,t]]),s=Ie(s,zt(t.parser.constructs.insideSpan.null,e.slice(n+1,u),t)),s=Ie(s,[["exit",o,t],["enter",l,t],["exit",l,t],["exit",r,t]]),e[u][1].end.offset-e[u][1].start.offset?(c=2,s=Ie(s,[["enter",e[u][1],t],["exit",e[u][1],t]])):c=0,Se(e,n-1,u-n+3,s),u=n+s.length-c-2;break}for(u=-1;++u-1){const e=l[0];"string"==typeof e?l[0]=e.slice(r):l.shift()}i>0&&l.push(e[o].slice(0,i))}return l}(l,e)}function h(){const{_bufferIndex:e,_index:t,line:n,column:o,offset:i}=r;return{_bufferIndex:e,_index:t,line:n,column:o,offset:i}}function m(e){s=void 0,f=e,p=p(e)}function g(e,t){t.restore()}function y(e,t){return function(n,o,i){let l,f,p,d;return Array.isArray(n)?m(n):"tokenize"in n?m([n]):function(e){return function(t){const n=null!==t&&e[t],r=null!==t&&e.null;return m([...Array.isArray(n)?n:n?[n]:[],...Array.isArray(r)?r:r?[r]:[]])(t)}}(n);function m(e){return l=e,f=0,0===e.length?i:g(e[f])}function g(e){return function(n){return d=function(){const e=h(),t=u.previous,n=u.currentConstruct,o=u.events.length,i=Array.from(a);return{from:o,restore:function(){r=e,u.previous=t,u.currentConstruct=n,u.events.length=o,a=i,k()}}}(),p=e,e.partial||(u.currentConstruct=e),e.name&&u.parser.constructs.disable.null.includes(e.name)?v():e.tokenize.call(t?Object.assign(Object.create(u),t):u,c,y,v)(n)}}function y(t){return s=!0,e(p,d),o}function v(e){return s=!0,d.restore(),++f13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||!(65535&~n)||65534==(65535&n)||n>1114111?"�":String.fromCodePoint(n)}const cn=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function un(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){const e=n.charCodeAt(1),t=120===e||88===e;return sn(n.slice(t?2:1),t?16:10)}return Dt(n)||e}const fn={}.hasOwnProperty;function pn(e,n,r){return"string"!=typeof n&&(r=n,n=void 0),function(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(v),autolinkProtocol:u,autolinkEmail:u,atxHeading:o(m),blockQuote:o((function(){return{type:"blockquote",children:[]}})),characterEscape:u,characterReference:u,codeFenced:o(h),codeFencedFenceInfo:i,codeFencedFenceMeta:i,codeIndented:o(h,i),codeText:o((function(){return{type:"inlineCode",value:""}}),i),codeTextData:u,data:u,codeFlowValue:u,definition:o((function(){return{type:"definition",identifier:"",label:null,title:null,url:""}})),definitionDestinationString:i,definitionLabelString:i,definitionTitleString:i,emphasis:o((function(){return{type:"emphasis",children:[]}})),hardBreakEscape:o(g),hardBreakTrailing:o(g),htmlFlow:o(y,i),htmlFlowData:u,htmlText:o(y,i),htmlTextData:u,image:o((function(){return{type:"image",title:null,url:"",alt:null}})),label:i,link:o(v),listItem:o((function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}})),listItemValue:function(e){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:o(k,(function(){this.data.expectingFirstListItemValue=!0})),listUnordered:o(k),paragraph:o((function(){return{type:"paragraph",children:[]}})),reference:function(){this.data.referenceType="collapsed"},referenceString:i,resourceDestinationString:i,resourceTitleString:i,setextHeading:o(m),strong:o((function(){return{type:"strong",children:[]}})),thematicBreak:o((function(){return{type:"thematicBreak"}}))},exit:{atxHeading:a(),atxHeadingSequence:function(e){const t=this.stack[this.stack.length-1];if(!t.depth){const n=this.sliceSerialize(e).length;t.depth=n}},autolink:a(),autolinkEmail:function(e){f.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){f.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:a(),characterEscapeValue:f,characterReferenceMarkerHexadecimal:d,characterReferenceMarkerNumeric:d,characterReferenceValue:function(e){const t=this.sliceSerialize(e),n=this.data.characterReferenceType;let r;n?(r=sn(t,"characterReferenceMarkerNumeric"===n?10:16),this.data.characterReferenceType=void 0):r=Dt(t);this.stack[this.stack.length-1].value+=r},characterReference:function(e){this.stack.pop().position.end=dn(e.end)},codeFenced:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0})),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){const e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){const e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:f,codeIndented:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")})),codeText:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),codeTextData:f,data:f,definition:a(),definitionDestinationString:function(){const e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){const e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:a(),hardBreakEscape:a(p),hardBreakTrailing:a(p),htmlFlow:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),htmlFlowData:f,htmlText:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),htmlTextData:f,image:a((function(){const e=this.stack[this.stack.length-1];if(this.data.inReference){const t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0})),label:function(){const e=this.stack[this.stack.length-1],t=this.resume(),n=this.stack[this.stack.length-1];if(this.data.inReference=!0,"link"===n.type){const t=e.children;n.children=t}else n.alt=t},labelText:function(e){const t=this.sliceSerialize(e),n=this.stack[this.stack.length-2];n.label=function(e){return e.replace(cn,un)}(t),n.identifier=yt(t).toLowerCase()},lineEnding:function(e){const n=this.stack[this.stack.length-1];if(this.data.atHardBreak)return n.children[n.children.length-1].position.end=dn(e.end),void(this.data.atHardBreak=void 0);!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(n.type)&&(u.call(this,e),f.call(this,e))},link:a((function(){const e=this.stack[this.stack.length-1];if(this.data.inReference){const t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0})),listItem:a(),listOrdered:a(),listUnordered:a(),paragraph:a(),referenceString:function(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){const e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){const e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){this.data.inReference=void 0},setextHeading:a((function(){this.data.setextHeadingSlurpLineEnding=void 0})),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:a(),thematicBreak:a()}};hn(t,(e||{}).mdastExtensions||[]);const n={};return function(e){let o={type:"root",children:[]};const a={stack:[o],tokenStack:[],config:t,enter:l,exit:s,buffer:i,resume:c,data:n},u=[];let f=-1;for(;++f0){const e=a.tokenStack[a.tokenStack.length-1];(e[1]||gn).call(a,void 0,e[0])}for(o.position={start:dn(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:dn(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},f=-1;++f((e,t)=>{const n=(t,n)=>(e.set(n,t),t),r=o=>{if(e.has(o))return e.get(o);const[i,l]=t[o];switch(i){case 0:case-1:return n(l,o);case 1:{const e=n([],o);for(const t of l)e.push(r(t));return e}case 2:{const e=n({},o);for(const[t,n]of l)e[r(t)]=r(n);return e}case 3:return n(new Date(l),o);case 4:{const{source:e,flags:t}=l;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,n]of l)e.set(r(t),r(n));return e}case 6:{const e=n(new Set,o);for(const t of l)e.add(r(t));return e}case 7:{const{name:e,message:t}=l;return n(new vn[e](t),o)}case 8:return n(BigInt(l),o);case"BigInt":return n(Object(BigInt(l)),o);case"ArrayBuffer":return n(new Uint8Array(l).buffer,l);case"DataView":{const{buffer:e}=new Uint8Array(l);return n(new DataView(e),l)}}return n(new vn[i](l),o)};return r})(new Map,e)(0),bn="",{toString:xn}={},{keys:An}=Object,wn=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const n=xn.call(e).slice(8,-1);switch(n){case"Array":return[1,bn];case"Object":return[2,bn];case"Date":return[3,bn];case"RegExp":return[4,bn];case"Map":return[5,bn];case"Set":return[6,bn];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},Cn=([e,t])=>0===e&&("function"===t||"symbol"===t),Sn=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const o=(e,t)=>{const o=r.push(e)-1;return n.set(t,o),o},i=r=>{if(n.has(r))return n.get(r);let[l,a]=wn(r);switch(l){case 0:{let t=r;switch(a){case"bigint":l=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+a);t=null;break;case"undefined":return o([-1],r)}return o([l,t],r)}case 1:{if(a){let e=r;return"DataView"===a?e=new Uint8Array(r.buffer):"ArrayBuffer"===a&&(e=new Uint8Array(r)),o([a,[...e]],r)}const e=[],t=o([l,e],r);for(const t of r)e.push(i(t));return t}case 2:{if(a)switch(a){case"BigInt":return o([a,r.toString()],r);case"Boolean":case"Number":case"String":return o([a,r.valueOf()],r)}if(t&&"toJSON"in r)return i(r.toJSON());const n=[],s=o([l,n],r);for(const t of An(r))!e&&Cn(wn(r[t]))||n.push([i(t),i(r[t])]);return s}case 3:return o([l,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return o([l,{source:e,flags:t}],r)}case 5:{const t=[],n=o([l,t],r);for(const[n,o]of r)(e||!Cn(wn(n))&&!Cn(wn(o)))&&t.push([i(n),i(o)]);return n}case 6:{const t=[],n=o([l,t],r);for(const n of r)!e&&Cn(wn(n))||t.push(i(n));return n}}const{message:s}=r;return o([l,{name:a,message:s}],r)};return i})(!(t||n),!!t,new Map,r)(e),r},In="function"==typeof structuredClone?(e,t)=>t&&("json"in t||"lossy"in t)?kn(Sn(e,t)):structuredClone(e):(e,t)=>kn(Sn(e,t));function En(e){const t=[];let n=-1,r=0,o=0;for(;++n55295&&i<57344){const t=e.charCodeAt(n+1);i<56320&&t>56319&&t<57344?(l=String.fromCharCode(i,t),o=1):l="�"}else l=String.fromCharCode(i);l&&(t.push(e.slice(r,n),encodeURIComponent(l)),r=n+o+1,l=""),o&&(n+=o,o=0)}return t.join("")+e.slice(r)}function Bn(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function Tn(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}const Pn=function(e){if(null==e)return Dn;if("function"==typeof e)return On(e);if("object"==typeof e)return Array.isArray(e)?function(e){const t=[];let n=-1;for(;++n":"")+")"})}return u;function u(){let c,u,f,p=Ln;if((!t||i(o,a,s[s.length-1]||void 0))&&(p=function(e){return Array.isArray(e)?e:"number"==typeof e?[true,e]:null==e?Ln:[e]}(n(o,s)),p[0]===Fn))return p;if("children"in o&&o.children){const t=o;if(t.children&&"skip"!==p[0])for(u=(r?t.children.length:-1)+l,f=s.concat(t);u>-1&&u1:t}function Nn(e){const t=String(e),n=/\r?\n|\r/g;let r=n.exec(t),o=0;const i=[];for(;r;)i.push(jn(t.slice(o,r.index),o>0,!0),r[0]),o=r.index+r[0].length,r=n.exec(t);return i.push(jn(t.slice(o),o>0,!1)),i.join("")}function jn(e,t,n){let r=0,o=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(o-1);for(;9===t||32===t;)o--,t=e.codePointAt(o-1)}return o>r?e.slice(r,o):""}const Un={blockquote:function(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){const n=t.value?t.value+"\n":"",r={};t.lang&&(r.className=["language-"+t.lang]);let o={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o},delete:function(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:function(e,t){const n="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),o=En(r.toLowerCase()),i=e.footnoteOrder.indexOf(r);let l,a=e.footnoteCounts.get(r);void 0===a?(a=0,e.footnoteOrder.push(r),l=e.footnoteOrder.length):l=i+1,a+=1,e.footnoteCounts.set(r,a);const s={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+o,id:n+"fnref-"+o+(a>1?"-"+a:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(t,s);const c={type:"element",tagName:"sup",properties:{},children:[s]};return e.patch(t,c),e.applyData(t,c)},heading:function(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}},imageReference:function(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return _n(e,t);const o={src:En(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(o.title=r.title);const i={type:"element",tagName:"img",properties:o,children:[]};return e.patch(t,i),e.applyData(t,i)},image:function(e,t){const n={src:En(t.url)};null!==t.alt&&void 0!==t.alt&&(n.alt=t.alt),null!==t.title&&void 0!==t.title&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)},inlineCode:function(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return _n(e,t);const o={href:En(r.url||"")};null!==r.title&&void 0!==r.title&&(o.title=r.title);const i={type:"element",tagName:"a",properties:o,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)},link:function(e,t){const n={href:En(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)},listItem:function(e,t,n){const r=e.all(t),o=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;const n=e.children;let r=-1;for(;!t&&++r0&&n.children.unshift({type:"text",value:" "}),n.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let a=-1;for(;++a0){const r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},i=J(t.children[1]),l=Q(t.children[t.children.length-1]);i&&l&&(r.position={start:i,end:l}),o.push(r)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(t,i),e.applyData(t,i)},tableCell:function(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){const r=n?n.children:void 0,o=0===(r?r.indexOf(t):1)?"th":"td",i=n&&"table"===n.type?n.align:void 0,l=i?i.length:t.children.length;let a=-1;const s=[];for(;++a0&&n.push({type:"text",value:"\n"}),n}function Jn(e){let t=0,n=e.charCodeAt(t);for(;9===n||32===n;)t++,n=e.charCodeAt(t);return e.slice(t)}function Zn(e,t){const n=function(e,t){const n=t||Vn,r=new Map,o=new Map,i=new Map,l={...Un,...n.handlers},a={all:function(e){const t=[];if("children"in e){const n=e.children;let r=-1;for(;++r0&&f.push({type:"text",value:" "});let e="string"==typeof n?n:n(s,u);"string"==typeof e&&(e={type:"text",value:e}),f.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+c+(u>1?"-"+u:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof r?r:r(s,u),className:["data-footnote-backref"]},children:Array.isArray(e)?e:[e]})}const d=i[i.length-1];if(d&&"element"===d.type&&"p"===d.tagName){const e=d.children[d.children.length-1];e&&"text"===e.type?e.value+=" ":d.children.push({type:"text",value:" "}),d.children.push(...f)}else i.push(...f);const h={type:"element",tagName:"li",properties:{id:t+"fn-"+c},children:e.wrap(i,!0)};e.patch(o,h),a.push(h)}if(0!==a.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...In(l),id:"footnote-label"},children:[{type:"text",value:o}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(a,!0)},{type:"text",value:"\n"}]}}(n),i=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return o&&i.children.push({type:"text",value:"\n"},o),i}function Kn(e,t){return e&&"run"in e?async function(n,r){const o=Zn(n,{file:r,...t});await e.run(o,r)}:function(n,r){return Zn(n,{file:r,...e||t})}}function Xn(e){if(e)throw e}var Gn=n(849);function er(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)}const tr=function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');lr(e);let n,r=0,o=-1,i=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;i--;)if(47===e.codePointAt(i)){if(n){r=i+1;break}}else o<0&&(n=!0,o=i+1);return o<0?"":e.slice(r,o)}if(t===e)return"";let l=-1,a=t.length-1;for(;i--;)if(47===e.codePointAt(i)){if(n){r=i+1;break}}else l<0&&(n=!0,l=i+1),a>-1&&(e.codePointAt(i)===t.codePointAt(a--)?a<0&&(o=i):(a=-1,o=l));return r===o?o=l:o<0&&(o=e.length),e.slice(r,o)},nr=function(e){if(lr(e),0===e.length)return".";let t,n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},rr=function(e){lr(e);let t,n=e.length,r=-1,o=0,i=-1,l=0;for(;n--;){const a=e.codePointAt(n);if(47!==a)r<0&&(t=!0,r=n+1),46===a?i<0?i=n:1!==l&&(l=1):i>-1&&(l=-1);else if(t){o=n+1;break}}return i<0||r<0||0===l||1===l&&i===r-1&&i===o+1?"":e.slice(i,r)},or=function(...e){let t,n=-1;for(;++n2){if(r=o.lastIndexOf("/"),r!==o.length-1){r<0?(o="",i=0):(o=o.slice(0,r),i=o.length-1-o.lastIndexOf("/")),l=s,a=0;continue}}else if(o.length>0){o="",i=0,l=s,a=0;continue}t&&(o=o.length>0?o+"/..":"..",i=2)}else o.length>0?o+="/"+e.slice(l+1,s):o=e.slice(l+1,s),i=s-l-1;l=s,a=0}else 46===n&&a>-1?a++:a=-1}return o}(e,!t);return 0!==n.length||t||(n="."),n.length>0&&47===e.codePointAt(e.length-1)&&(n+="/"),t?"/"+n:n}(t)},ir="/";function lr(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const ar=function(){return"/"};function sr(e){return Boolean(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}const cr=["history","path","basename","stem","extname","dirname"];class ur{constructor(e){let t;t=e?sr(e)?{path:e}:"string"==typeof e||function(e){return Boolean(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd="cwd"in t?"":ar(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n,r=-1;for(;++rt.length;let l;i&&t.push(r);try{l=e.apply(this,t)}catch(e){if(i&&n)throw e;return r(e)}i||(l&&l.then&&"function"==typeof l.then?l.then(o,r):l instanceof Error?r(l):o(l))};function r(e,...r){n||(n=!0,t(e,...r))}function o(e){r(null,e)}}(a,o)(...l):r(null,...l)}}(null,...t)},use:function(n){if("function"!=typeof n)throw new TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}};return t}()}copy(){const e=new gr;let t=-1;for(;++t0){let[r,...i]=t;const l=n[o][1];er(l)&&er(r)&&(r=Gn(!0,l,r)),n[o]=[e,r,...i]}}}}const yr=(new gr).freeze();function vr(e,t){if("function"!=typeof t)throw new TypeError("Cannot `"+e+"` without `parser`")}function kr(e,t){if("function"!=typeof t)throw new TypeError("Cannot `"+e+"` without `compiler`")}function br(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function xr(e){if(!er(e)||"string"!=typeof e.type)throw new TypeError("Expected node, got `"+e+"`")}function Ar(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function wr(e){return function(e){return Boolean(e&&"object"==typeof e&&"message"in e&&"messages"in e)}(e)?e:new ur(e)}const Cr=[],Sr={allowDangerousHtml:!0},Ir=/^(https?|ircs?|mailto|xmpp)$/i,Er=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Br(e){const t=e.allowedElements,n=e.allowElement,r=e.children||"",o=e.className,i=e.components,l=e.disallowedElements,a=e.rehypePlugins||Cr,s=e.remarkPlugins||Cr,c=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Sr}:Sr,u=e.skipHtml,f=e.unwrapDisallowed,p=e.urlTransform||Tr,d=yr().use(yn).use(s).use(Kn,c).use(a),h=new ur;"string"==typeof r&&(h.value=r);for(const t of Er)Object.hasOwn(e,t.from)&&(t.from,t.to&&t.to,t.id);const m=d.parse(h);let g=d.runSync(m,h);return o&&(g={type:"element",tagName:"div",properties:{className:o},children:"root"===g.type?g.children:[g]}),zn(g,(function(e,r,o){if("raw"===e.type&&o&&"number"==typeof r)return u?o.children.splice(r,1):o.children[r]={type:"text",value:e.value},r;if("element"===e.type){let t;for(t in ke)if(Object.hasOwn(ke,t)&&Object.hasOwn(e.properties,t)){const n=e.properties[t],r=ke[t];(null===r||r.includes(e.tagName))&&(e.properties[t]=p(String(n||""),t,e))}}if("element"===e.type){let i=t?!t.includes(e.tagName):!!l&&l.includes(e.tagName);if(!i&&n&&"number"==typeof r&&(i=!n(e,r,o)),i&&o&&"number"==typeof r)return f&&e.children?o.children.splice(r,1,...e.children):o.children.splice(r,1),r}})),function(e,t){if(!t||void 0===t.Fragment)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if("function"!=typeof t.jsxDEV)throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=function(e,t){return function(n,r,o,i){const l=Array.isArray(o.children),a=J(n);return t(r,o,i,l,{columnNumber:a?a.column-1:void 0,fileName:e,lineNumber:a?a.line:void 0},void 0)}}(n,t.jsxDEV)}else{if("function"!=typeof t.jsx)throw new TypeError("Expected `jsx` in production options");if("function"!=typeof t.jsxs)throw new TypeError("Expected `jsxs` in production options");o=t.jsx,i=t.jsxs,r=function(e,t,n,r){const l=Array.isArray(n.children)?i:o;return r?l(t,n,r):l(t,n)}}var o,i;const l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:!1!==t.passKeys,passNode:t.passNode||!1,schema:"svg"===t.space?N:R,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==t.tableCellAlignToStyle},a=ce(l,e,void 0);return a&&"string"!=typeof a?a:l.create(e,l.Fragment,{children:a||void 0},void 0)}(g,{Fragment:be.Fragment,components:i,ignoreInvalidStyle:!0,jsx:be.jsx,jsxs:be.jsxs,passKeys:!0,passNode:!0})}function Tr(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),o=e.indexOf("/");return-1===t||-1!==o&&t>o||-1!==n&&t>n||-1!==r&&t>r||Ir.test(e.slice(0,t))?e:""}const Pr=window.PropTypes;var Or=n.n(Pr);function Dr(e,t){const n=String(e);if("string"!=typeof t)throw new TypeError("Expected character");let r=0,o=n.indexOf(t);for(;-1!==o;)r++,o=n.indexOf(t,o+t.length);return r}function Lr(e){return"function"==typeof e?e:function(){return e}}const Fr="phrasing",Mr=["autolink","link","image","label"];function zr(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function _r(e){this.config.enter.autolinkProtocol.call(this,e)}function Rr(e){this.config.exit.autolinkProtocol.call(this,e)}function Nr(e){this.config.exit.data.call(this,e);const t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function jr(e){this.config.exit.autolinkEmail.call(this,e)}function Ur(e){this.exit(e)}function Hr(e){!function(e,t,n){const r=Pn((n||{}).ignore||[]),o=function(e){const t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const n=!e[0]||Array.isArray(e[0])?e:[e];let r=-1;for(;++r0?{type:"text",value:i}:void 0),!1===i?r.lastIndex=n+1:(a!==n&&u.push({type:"text",value:e.value.slice(a,n)}),Array.isArray(i)?u.push(...i):i&&u.push(i),a=n+f[0].length,c=!0),!r.global)break;f=r.exec(e.value)}return c?(a?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const o=Dr(e,"(");let i=Dr(e,")");for(;-1!==r&&o>i;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),i++;return[e,n]}(n+r);if(!l[0])return!1;const a={type:"link",title:null,url:i+t+l[0],children:[{type:"text",value:t+l[0]}]};return l[1]?[a,{type:"text",value:l[1]}]:a}function Vr(e,t,n,r){return!(!Yr(r,!0)||/[-\d_]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function Yr(e,t){const n=e.input.charCodeAt(e.index-1);return(0===e.index||We(n)||Ye(n))&&(!t||47!==n)}function Wr(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function $r(){this.buffer()}function Qr(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()}function Jr(e){this.exit(e)}function Zr(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function Kr(){this.buffer()}function Xr(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()}function Gr(e){this.exit(e)}function eo(e,t,n,r){const o=n.createTracker(r);let i=o.move("[^");const l=n.enter("footnoteReference"),a=n.enter("reference");return i+=o.move(n.safe(n.associationId(e),{...o.current(),before:i,after:"]"})),a(),l(),i+=o.move("]"),i}function to(e,t,n,r){const o=n.createTracker(r);let i=o.move("[^");const l=n.enter("footnoteDefinition"),a=n.enter("label");return i+=o.move(n.safe(n.associationId(e),{...o.current(),before:i,after:"]"})),a(),i+=o.move("]:"+(e.children&&e.children.length>0?" ":"")),o.shift(4),i+=o.move(n.indentLines(n.containerFlow(e,o.current()),no)),l(),i}function no(e,t,n){return 0===t?e:(n?"":" ")+e}eo.peek=function(){return"["};const ro=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];function oo(e){this.enter({type:"delete",children:[]},e)}function io(e){this.exit(e)}function lo(e,t,n,r){const o=n.createTracker(r),i=n.enter("strikethrough");let l=o.move("~~");return l+=n.containerPhrasing(e,{...o.current(),before:l,after:"~"}),l+=o.move("~~"),i(),l}function ao(e){return e.length}function so(e){const t="string"==typeof e?e.codePointAt(0):0;return 67===t||99===t?99:76===t||108===t?108:82===t||114===t?114:0}function co(e,t,n){return">"+(n?"":" ")+e}function uo(e,t,n){if("string"==typeof t&&(t=[t]),!t||0===t.length)return n;let r=-1;for(;++r",...s.current()})),c+=s.move(">")):(a=n.enter("destinationRaw"),c+=s.move(n.safe(e.url,{before:c,after:e.title?" ":")",...s.current()}))),a(),e.title&&(a=n.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(n.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),a()),c+=s.move(")"),l(),c}function bo(e,t,n,r){const o=e.referenceType,i=n.enter("imageReference");let l=n.enter("label");const a=n.createTracker(r);let s=a.move("![");const c=n.safe(e.alt,{before:s,after:"]",...a.current()});s+=a.move(c+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const f=n.safe(n.associationId(e),{before:s,after:"]",...a.current()});return l(),n.stack=u,i(),"full"!==o&&c&&c===f?"shortcut"===o?s=s.slice(0,-1):s+=a.move("]"):s+=a.move(f+"]"),s}function xo(e,t,n){let r=e.value||"",o="`",i=-1;for(;new RegExp("(^|[^`])"+o+"([^`]|$)").test(r);)o+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++i\u007F]/.test(e.url))}function wo(e,t,n,r){const o=ho(n),i='"'===o?"Quote":"Apostrophe",l=n.createTracker(r);let a,s;if(Ao(e,n)){const t=n.stack;n.stack=[],a=n.enter("autolink");let r=l.move("<");return r+=l.move(n.containerPhrasing(e,{before:r,after:">",...l.current()})),r+=l.move(">"),a(),n.stack=t,r}a=n.enter("link"),s=n.enter("label");let c=l.move("[");return c+=l.move(n.containerPhrasing(e,{before:c,after:"](",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(n.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=n.enter("destinationRaw"),c+=l.move(n.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=n.enter(`title${i}`),c+=l.move(" "+o),c+=l.move(n.safe(e.title,{before:c,after:o,...l.current()})),c+=l.move(o),s()),c+=l.move(")"),a(),c}function Co(e,t,n,r){const o=e.referenceType,i=n.enter("linkReference");let l=n.enter("label");const a=n.createTracker(r);let s=a.move("[");const c=n.containerPhrasing(e,{before:s,after:"]",...a.current()});s+=a.move(c+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const f=n.safe(n.associationId(e),{before:s,after:"]",...a.current()});return l(),n.stack=u,i(),"full"!==o&&c&&c===f?"shortcut"===o?s=s.slice(0,-1):s+=a.move("]"):s+=a.move(f+"]"),s}function So(e){const t=e.options.bullet||"*";if("*"!==t&&"+"!==t&&"-"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function Io(e){const t=e.options.rule||"*";if("*"!==t&&"-"!==t&&"_"!==t)throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}lo.peek=function(){return"~"},yo.peek=function(e,t,n){return n.options.emphasis||"*"},vo.peek=function(){return"<"},ko.peek=function(){return"!"},bo.peek=function(){return"!"},xo.peek=function(){return"`"},wo.peek=function(e,t,n){return Ao(e,n)?"<":"["},Co.peek=function(){return"["};const Eo=Pn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function Bo(e,t,n,r){const o=function(e){const t=e.options.strong||"*";if("*"!==t&&"_"!==t)throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}(n),i=n.enter("strong"),l=n.createTracker(r),a=l.move(o+o);let s=l.move(n.containerPhrasing(e,{after:o,before:a,...l.current()}));const c=s.charCodeAt(0),u=go(r.before.charCodeAt(r.before.length-1),c,o);u.inside&&(s=mo(c)+s.slice(1));const f=s.charCodeAt(s.length-1),p=go(r.after.charCodeAt(0),f,o);p.inside&&(s=s.slice(0,-1)+mo(f));const d=l.move(o+o);return i(),n.attentionEncodeSurroundingInfo={after:p.outside,before:u.outside},a+s+d}Bo.peek=function(e,t,n){return n.options.strong||"*"};const To={blockquote:function(e,t,n,r){const o=n.enter("blockquote"),i=n.createTracker(r);i.move("> "),i.shift(2);const l=n.indentLines(n.containerFlow(e,i.current()),co);return o(),l},break:fo,code:function(e,t,n,r){const o=function(e){const t=e.options.fence||"`";if("`"!==t&&"~"!==t)throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}(n),i=e.value||"",l="`"===o?"GraveAccent":"Tilde";if(function(e,t){return Boolean(!1===t.options.fences&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}(e,n)){const e=n.enter("codeIndented"),t=n.indentLines(i,po);return e(),t}const a=n.createTracker(r),s=o.repeat(Math.max(function(e,t){const n=String(e);let r=n.indexOf(t),o=r,i=0,l=0;if("string"!=typeof t)throw new TypeError("Expected substring");for(;-1!==r;)r===o?++i>l&&(l=i):i=1,o=r+t.length,r=n.indexOf(t,o);return l}(i,o)+1,3)),c=n.enter("codeFenced");let u=a.move(s);if(e.lang){const t=n.enter(`codeFencedLang${l}`);u+=a.move(n.safe(e.lang,{before:u,after:" ",encode:["`"],...a.current()})),t()}if(e.lang&&e.meta){const t=n.enter(`codeFencedMeta${l}`);u+=a.move(" "),u+=a.move(n.safe(e.meta,{before:u,after:"\n",encode:["`"],...a.current()})),t()}return u+=a.move("\n"),i&&(u+=a.move(i+"\n")),u+=a.move(s),c(),u},definition:function(e,t,n,r){const o=ho(n),i='"'===o?"Quote":"Apostrophe",l=n.enter("definition");let a=n.enter("label");const s=n.createTracker(r);let c=s.move("[");return c+=s.move(n.safe(n.associationId(e),{before:c,after:"]",...s.current()})),c+=s.move("]: "),a(),!e.url||/[\0- \u007F]/.test(e.url)?(a=n.enter("destinationLiteral"),c+=s.move("<"),c+=s.move(n.safe(e.url,{before:c,after:">",...s.current()})),c+=s.move(">")):(a=n.enter("destinationRaw"),c+=s.move(n.safe(e.url,{before:c,after:e.title?" ":"\n",...s.current()}))),a(),e.title&&(a=n.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(n.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),a()),l(),c},emphasis:yo,hardBreak:fo,heading:function(e,t,n,r){const o=Math.max(Math.min(6,e.depth||1),1),i=n.createTracker(r);if(function(e,t){let n=!1;return zn(e,(function(e){if("value"in e&&/\r?\n|\r/.test(e.value)||"break"===e.type)return n=!0,Fn})),Boolean((!e.depth||e.depth<3)&&Ae(e)&&(t.options.setext||n))}(e,n)){const t=n.enter("headingSetext"),r=n.enter("phrasing"),l=n.containerPhrasing(e,{...i.current(),before:"\n",after:"\n"});return r(),t(),l+"\n"+(1===o?"=":"-").repeat(l.length-(Math.max(l.lastIndexOf("\r"),l.lastIndexOf("\n"))+1))}const l="#".repeat(o),a=n.enter("headingAtx"),s=n.enter("phrasing");i.move(l+" ");let c=n.containerPhrasing(e,{before:"# ",after:"\n",...i.current()});return/^[\t ]/.test(c)&&(c=mo(c.charCodeAt(0))+c.slice(1)),c=c?l+" "+c:l,n.options.closeAtx&&(c+=" "+l),s(),a(),c},html:vo,image:ko,imageReference:bo,inlineCode:xo,link:wo,linkReference:Co,list:function(e,t,n,r){const o=n.enter("list"),i=n.bulletCurrent;let l=e.ordered?function(e){const t=e.options.bulletOrdered||".";if("."!==t&&")"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}(n):So(n);const a=e.ordered?"."===l?")":".":function(e){const t=So(e),n=e.options.bulletOther;if(!n)return"*"===t?"-":"*";if("*"!==n&&"+"!==n&&"-"!==n)throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}(n);let s=!(!t||!n.bulletLastUsed)&&l===n.bulletLastUsed;if(!e.ordered){const t=e.children?e.children[0]:void 0;if("*"!==l&&"-"!==l||!t||t.children&&t.children[0]||"list"!==n.stack[n.stack.length-1]||"listItem"!==n.stack[n.stack.length-2]||"list"!==n.stack[n.stack.length-3]||"listItem"!==n.stack[n.stack.length-4]||0!==n.indexStack[n.indexStack.length-1]||0!==n.indexStack[n.indexStack.length-2]||0!==n.indexStack[n.indexStack.length-3]||(s=!0),Io(n)===l&&t){let t=-1;for(;++t-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+i);let l=i.length+1;("tab"===o||"mixed"===o&&(t&&"list"===t.type&&t.spread||e.spread))&&(l=4*Math.ceil(l/4));const a=n.createTracker(r);a.move(i+" ".repeat(l-i.length)),a.shift(l);const s=n.enter("listItem"),c=n.indentLines(n.containerFlow(e,a.current()),(function(e,t,n){return t?(n?"":" ".repeat(l))+e:(n?i:i+" ".repeat(l-i.length))+e}));return s(),c},paragraph:function(e,t,n,r){const o=n.enter("paragraph"),i=n.enter("phrasing"),l=n.containerPhrasing(e,r);return i(),o(),l},root:function(e,t,n,r){return(e.children.some((function(e){return Eo(e)}))?n.containerPhrasing:n.containerFlow).call(n,e,r)},strong:Bo,text:function(e,t,n,r){return n.safe(e.value,r)},thematicBreak:function(e,t,n){const r=(Io(n)+(n.options.ruleSpaces?" ":"")).repeat(function(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}(n));return n.options.ruleSpaces?r.slice(0,-1):r}};function Po(e){const t=e._align;this.enter({type:"table",align:t.map((function(e){return"none"===e?null:e})),children:[]},e),this.data.inTable=!0}function Oo(e){this.exit(e),this.data.inTable=void 0}function Do(e){this.enter({type:"tableRow",children:[]},e)}function Lo(e){this.exit(e)}function Fo(e){this.enter({type:"tableCell",children:[]},e)}function Mo(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,zo));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function zo(e,t){return"|"===t?t:e}function _o(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,o=t.stringLength,i=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:function(e,t,n){let r=To.inlineCode(e,t,n);return n.stack.includes("tableCell")&&(r=r.replace(/\|/g,"\\$&")),r},table:function(e,t,n,r){return a(function(e,t,n){const r=e.children;let o=-1;const i=[],l=t.enter("table");for(;++oc&&(c=e[u].length);++is[i])&&(s[i]=e)}t.push(l)}l[u]=t,a[u]=r}var f;let p=-1;if("object"==typeof r&&"length"in r)for(;++ps[p]&&(s[p]=o),h[p]=o),d[p]=l}l.splice(1,0,d),a.splice(1,0,h),u=-1;const m=[];for(;++u0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}Jo[43]=Qo,Jo[45]=Qo,Jo[46]=Qo,Jo[95]=Qo,Jo[72]=[Qo,$o],Jo[104]=[Qo,$o],Jo[87]=[Qo,Wo],Jo[119]=[Qo,Wo];const ni={tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return o&&"gfmFootnoteDefinitionIndent"===o[1].type&&4===o[2].sliceSerialize(o[1],!0).length?t(e):n(e)}),"gfmFootnoteDefinitionIndent",5)},partial:!0};function ri(e,t,n){const r=this;let o=r.events.length;const i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let l;for(;o--;){const e=r.events[o][1];if("labelImage"===e.type){l=e;break}if("gfmFootnoteCall"===e.type||"labelLink"===e.type||"label"===e.type||"image"===e.type||"link"===e.type)break}return function(o){if(!l||!l._balanced)return n(o);const a=yt(r.sliceSerialize({start:l.end,end:r.now()}));return 94===a.codePointAt(0)&&i.includes(a.slice(1))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(o),e.exit("gfmFootnoteCallLabelMarker"),t(o)):n(o)}}function oi(e,t){let n,r=e.length;for(;r--;)if("labelImage"===e[r][1].type&&"enter"===e[r][0]){n=e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const o={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const l={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},l.start),end:Object.assign({},l.end)},s=[e[r+1],e[r+2],["enter",o,t],e[r+3],e[r+4],["enter",i,t],["exit",i,t],["enter",l,t],["enter",a,t],["exit",a,t],["exit",l,t],e[e.length-2],e[e.length-1],["exit",o,t]];return e.splice(r,e.length-r+1,...s),e}function ii(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,l=0;return function(t){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(t),e.exit("gfmFootnoteCallLabelMarker"),a};function a(t){return 94!==t?n(t):(e.enter("gfmFootnoteCallMarker"),e.consume(t),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",s)}function s(a){if(l>999||93===a&&!i||null===a||91===a||qe(a))return n(a);if(93===a){e.exit("chunkString");const i=e.exit("gfmFootnoteCallString");return o.includes(yt(r.sliceSerialize(i)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(a),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(a)}return qe(a)||(i=!0),l++,e.consume(a),92===a?c:s}function c(t){return 91===t||92===t||93===t?(e.consume(t),l++,s):s(t)}}function li(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,l,a=0;return function(t){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),s};function s(t){return 94===t?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",c):n(t)}function c(t){if(a>999||93===t&&!l||null===t||91===t||qe(t))return n(t);if(93===t){e.exit("chunkString");const n=e.exit("gfmFootnoteDefinitionLabelString");return i=yt(r.sliceSerialize(n)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return qe(t)||(l=!0),a++,e.consume(t),92===t?u:c}function u(t){return 91===t||92===t||93===t?(e.consume(t),a++,c):c(t)}function f(t){return 58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o.includes(i)||o.push(i),Qe(e,p,"gfmFootnoteDefinitionWhitespace")):n(t)}function p(e){return t(e)}}function ai(e,t,n){return e.check(Xe,t,e.attempt(ni,t,n))}function si(e){e.exit("gfmFootnoteDefinition")}function ci(e){let t=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:function(e,n,r){const o=this.previous,i=this.events;let l=0;return function(t){return 126===o&&"characterEscape"!==i[i.length-1][1].type?r(t):(e.enter("strikethroughSequenceTemporary"),a(t))};function a(i){const s=Ht(o);if(126===i)return l>1?r(i):(e.consume(i),l++,a);if(l<2&&!t)return r(i);const c=e.exit("strikethroughSequenceTemporary"),u=Ht(i);return c._open=!u||2===u&&Boolean(s),c._close=!s||2===s&&Boolean(u),n(i)}},resolveAll:function(e,t){let n=-1;for(;++n0;)t-=1,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(const t of r)e.push(t);r=n.pop()}this.map.length=0}}function fi(e,t){let n=!1;const r=[];for(;t-1;){const e=r.events[t][1].type;if("lineEnding"!==e&&"linePrefix"!==e)break;t--}const o=t>-1?r.events[t][1].type:null,i="tableHead"===o||"tableRow"===o?b:a;return i===b&&r.parser.lazy[r.now().line]?n(e):i(e)};function a(t){return e.enter("tableHead"),e.enter("tableRow"),function(e){return 124===e||(o=!0,l+=1),s(e)}(t)}function s(t){return null===t?n(t):He(t)?l>1?(l=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),f):n(t):Ve(t)?Qe(e,s,"whitespace")(t):(l+=1,o&&(o=!1,i+=1),124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),o=!0,s):(e.enter("data"),c(t)))}function c(t){return null===t||124===t||qe(t)?(e.exit("data"),s(t)):(e.consume(t),92===t?u:c)}function u(t){return 92===t||124===t?(e.consume(t),c):c(t)}function f(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter("tableDelimiterRow"),o=!1,Ve(t)?Qe(e,p,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):p(t))}function p(t){return 45===t||58===t?h(t):124===t?(o=!0,e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),d):k(t)}function d(t){return Ve(t)?Qe(e,h,"whitespace")(t):h(t)}function h(t){return 58===t?(l+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),m):45===t?(l+=1,m(t)):null===t||He(t)?v(t):k(t)}function m(t){return 45===t?(e.enter("tableDelimiterFiller"),g(t)):k(t)}function g(t){return 45===t?(e.consume(t),g):58===t?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(t))}function y(t){return Ve(t)?Qe(e,v,"whitespace")(t):v(t)}function v(n){return 124===n?p(n):(null===n||He(n))&&o&&i===l?(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(n)):k(n)}function k(e){return n(e)}function b(t){return e.enter("tableRow"),x(t)}function x(n){return 124===n?(e.enter("tableCellDivider"),e.consume(n),e.exit("tableCellDivider"),x):null===n||He(n)?(e.exit("tableRow"),t(n)):Ve(n)?Qe(e,x,"whitespace")(n):(e.enter("data"),A(n))}function A(t){return null===t||124===t||qe(t)?(e.exit("data"),x(t)):(e.consume(t),92===t?w:A)}function w(t){return 92===t||124===t?(e.consume(t),A):A(t)}}function di(e,t){let n,r,o,i=-1,l=!0,a=0,s=[0,0,0,0],c=[0,0,0,0],u=!1,f=0;const p=new ui;for(;++in[2]+1){const t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[["exit",l,t]])}return void 0!==o&&(i.end=Object.assign({},gi(t.events,o)),e.add(o,0,[["exit",i,t]]),i=void 0),i}function mi(e,t,n,r,o){const i=[],l=gi(t.events,n);o&&(o.end=Object.assign({},l),i.push(["exit",o,t])),r.end=Object.assign({},l),i.push(["exit",r,t]),e.add(n+1,0,i)}function gi(e,t){const n=e[t],r="enter"===n[0]?"start":"end";return n[1][r]}const yi={name:"tasklistCheck",tokenize:function(e,t,n){const r=this;return function(t){return null===r.previous&&r._gfmTasklistFirstContentOfListItem?(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),o):n(t)};function o(t){return qe(t)?(e.enter("taskListCheckValueUnchecked"),e.consume(t),e.exit("taskListCheckValueUnchecked"),i):88===t||120===t?(e.enter("taskListCheckValueChecked"),e.consume(t),e.exit("taskListCheckValueChecked"),i):n(t)}function i(t){return 93===t?(e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):n(t)}function l(r){return He(r)?t(r):Ve(r)?e.check({tokenize:vi},t,n)(r):n(r)}}};function vi(e,t,n){return Qe(e,(function(e){return null===e?n(e):t(e)}),"whitespace")}const ki={};function bi(e){const t=e||ki,n=this.data(),r=n.micromarkExtensions||(n.micromarkExtensions=[]),o=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),i=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);r.push(function(e){return De([{text:Jo},{document:{91:{name:"gfmFootnoteDefinition",tokenize:li,continuation:{tokenize:ai},exit:si}},text:{91:{name:"gfmFootnoteCall",tokenize:ii},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:ri,resolveTo:oi}}},ci(e),{flow:{null:{name:"table",tokenize:pi,resolveAll:di}}},{text:{91:yi}}])}(t)),o.push([{transforms:[Hr],enter:{literalAutolink:zr,literalAutolinkEmail:_r,literalAutolinkHttp:_r,literalAutolinkWww:_r},exit:{literalAutolink:Ur,literalAutolinkEmail:jr,literalAutolinkHttp:Rr,literalAutolinkWww:Nr}},{enter:{gfmFootnoteDefinition:Wr,gfmFootnoteDefinitionLabelString:$r,gfmFootnoteCall:Zr,gfmFootnoteCallString:Kr},exit:{gfmFootnoteDefinition:Jr,gfmFootnoteDefinitionLabelString:Qr,gfmFootnoteCall:Gr,gfmFootnoteCallString:Xr}},{canContainEols:["delete"],enter:{strikethrough:oo},exit:{strikethrough:io}},{enter:{table:Po,tableData:Fo,tableHeader:Fo,tableRow:Do},exit:{codeText:Mo,table:Oo,tableData:Lo,tableHeader:Lo,tableRow:Lo}},{exit:{taskListCheckValueChecked:Ro,taskListCheckValueUnchecked:Ro,paragraph:No}}]),i.push(function(e){return{extensions:[{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Fr,notInConstruct:Mr},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Fr,notInConstruct:Mr},{character:":",before:"[ps]",after:"\\/",inConstruct:Fr,notInConstruct:Mr}]},{unsafe:[{character:"[",inConstruct:["phrasing","label","reference"]}],handlers:{footnoteDefinition:to,footnoteReference:eo}},{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:ro}],handlers:{delete:lo}},_o(e),{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:jo}}]}}(t))}var xi=function(e){var t=e.onSend,n=e.handleInputChange,r=e.value,i=e.placeholder,l=void 0===i?"Start typing...":i,a=e.buttonLabel,s=void 0===a?"Send":a,c=e.customStyles,u=void 0===c?null:c,f=e.inputComponentStyles,p=void 0===f?null:f,d=e.showTyping,h=void 0!==d&&d;return o().createElement("div",{className:"message-input-container",style:u},o().createElement("input",{type:"text",value:r,placeholder:l,onChange:n,onKeyDown:function(e){"Enter"!==e.key||h||t()},style:p,className:"message-input-field"}),o().createElement("button",{onClick:t,className:"message-input-button ".concat(h?"disabled":""),"data-testid":"send-button",disabled:h},s))};xi.propTypes={onSend:Or().func.isRequired,handleInputChange:Or().func.isRequired,value:Or().string,placeholder:Or().string,buttonLabel:Or().string,customStyles:Or().object,inputComponentStyles:Or().object,showTyping:Or().bool};const Ai=xi;var wi=n(72),Ci=n.n(wi),Si=n(825),Ii=n.n(Si),Ei=n(659),Bi=n.n(Ei),Ti=n(56),Pi=n.n(Ti),Oi=n(540),Di=n.n(Oi),Li=n(113),Fi=n.n(Li),Mi=n(796),zi={};zi.styleTagTransform=Fi(),zi.setAttributes=Pi(),zi.insert=Bi().bind(null,"head"),zi.domAPI=Ii(),zi.insertStyleElement=Di(),Ci()(Mi.A,zi),Mi.A&&Mi.A.locals&&Mi.A.locals;var _i=function(e){var t=e.color,n=void 0===t?"gray":t;return o().createElement("div",{className:"typing-dots",style:{color:n}},o().createElement("span",null),o().createElement("span",null),o().createElement("span",null))};_i.propTypes={color:Or().string};const Ri=_i;var Ni=function(e){var t=e.size,n=void 0===t?20:t,r=e.color,i=void 0===r?"gray":r;return o().createElement("div",{className:"typing-spinner",style:{width:n,height:n,borderColor:i,borderTopColor:"transparent"}})};Ni.propTypes={size:Or().number,color:Or().string};const ji=Ni;var Ui=n(386),Hi={};function qi(e){return qi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qi(e)}function Vi(e){return function(e){if(Array.isArray(e))return $i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Wi(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yi(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,l,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw o}}return a}}(e,t)||Wi(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wi(e,t){if(e){if("string"==typeof e)return $i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$i(e,t):void 0}}function $i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0?H(e):!r&&l.length>0&&(H(l),window[t].setItem(n,JSON.stringify(l)),window[t].setItem("".concat(n,"-initialized"),"true"))}else H(l)}),[n,D,t]),(0,r.useEffect)((function(){D&&U.length>0&&window[t].setItem(n,JSON.stringify(U))}),[U,n,D,t]),(0,r.useEffect)((function(){if(l.length>0){var e=l.slice(-1).pop();"assistant"===(null==e?void 0:e.role)&&V?(Y(!1),H((function(t){return[].concat(Vi(t),[e])}))):H(l||[])}}),[l]),(0,r.useEffect)((function(){J.current&&J.current.scrollIntoView({behavior:"smooth"})}),[U]),(0,r.useEffect)((function(){var e=function(e){Z.current&&!Z.current.contains(e.target)&&Q(!1)};return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[]);var K={},X={};return K.height=b?"100%":"50%",K.width=A?"auto":"50%","dark"===s?(K.backgroundColor="#161618",K.borderColor="#444444",K.color="#ffffff",X.borderColor="#f1f0f0",X.color="#000000"):(K.backgroundColor="#ffffff",K.borderColor="#e0e0e0",K.color="#e0e0e0",X.borderColor="#e0e0e0"),o().createElement("div",{className:"chat-container ".concat(P),style:Ji(Ji({},K),u)},D&&o().createElement("div",{className:"actionBtnContainer",ref:Z},o().createElement("div",{className:"dropdown"},o().createElement("button",{className:"dotsButton",onClick:function(){return Q(!$)},"aria-label":"clear"},"⋮"),$&&o().createElement("div",{className:"dropdownMenu"},o().createElement("button",{onClick:function(){H([]),D&&window[t].removeItem(n),Q(!1)},className:"dropdownItem"},"Clear chat")))),o().createElement("div",{className:"chat-messages"},0===U.length?o().createElement("div",{className:"empty-chat"},"No conversation yet."):U.map((function(e,t){if(!e||"object"!==qi(e)||!e.role||!e.content)return null;var n="user"===e.role?M:z;return o().createElement("div",{key:t,className:"chat-bubble ".concat(e.role),style:n},o().createElement("div",{className:"markdown-content"},o().createElement(Br,{remarkPlugins:[bi],components:{a:function(e){var t=e.href,n=e.children;return o().createElement("a",{href:t,target:"_blank",rel:"noopener noreferrer"},n)}}},e.content)))})),V&&o().createElement("div",{className:"typing-indicator user-typing","data-testid":"typing-indicator"},"dots"===p&&o().createElement(Ri,null),"spinner"===p&&o().createElement(ji,null)),o().createElement("div",{ref:J})),o().createElement("div",{className:"chat-input"},o().createElement(Ai,{onSend:function(){if(R.trim()){var e={role:"user",content:R};H((function(r){var o=[].concat(Vi(r),[e]);return D&&window[t].setItem(n,JSON.stringify(o)),o})),v&&v({new_message:e}),Y(!0),N("")}},handleInputChange:function(e){N(e.target.value)},value:R,customStyles:h,inputComponentStyles:Ji(Ji({},X),g),placeholder:B,showTyping:V})))};Gi.propTypes={id:Or().string,messages:Or().arrayOf(Or().shape({role:Or().oneOf(["user","assistant"]).isRequired,content:Or().string.isRequired})),setProps:Or().func,theme:Or().string,container_style:Or().object,typing_indicator:Or().oneOf(["dots","spinner"]),new_message:Or().object,input_container_style:Or().object,input_text_style:Or().object,fill_height:Or().bool,fill_width:Or().bool,user_bubble_style:Or().object,assistant_bubble_style:Or().object,input_placeholder:Or().string,class_name:Or().string,persistence:Or().bool,persistence_type:Or().oneOf(["local","session"])};const el=Gi})(),window.dash_chat=l})(); +(()=>{var e={386:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(354),o=n.n(r),i=n(314),l=n.n(i)()(o());l.push([e.id,".chat-container {\n border: 1px solid;\n border-radius: 8px;\n padding: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.message-input-container {\n display: flex;\n margin-top: 10px;\n padding-top: 10px;\n}\n\n.message-input-field {\n flex: 1;\n padding: 8px;\n border: 1px solid;\n border-radius: 4px;\n margin-right: 5px;\n}\n\n.message-input-field:focus {\n outline: none;\n}\n\n.message-input-button {\n background-color: #007bff;\n color: white;\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.message-input-container .disabled {\n background-color: #efefef4d;\n color: #1010104d;\n border-color: #efefef4d;\n cursor: auto;\n}\n\n.message-input-button:hover {\n background-color: #0056b3;\n}\n\n.message-input-container .disabled:hover {\n background-color: #efefef4d;\n}\n\n.chat-bubble {\n max-width: 75%;\n margin-bottom: 10px;\n padding: 0px 10px 0px;\n border-radius: 12px;\n word-wrap: break-word;\n}\n\n.user .markdown-content a {\n color: #fff;\n text-decoration: underline;\n}\n\n.user .markdown-content a:hover {\n color: #212427;\n}\n\n.markdown-content code {\n background-color: rgba(0, 0, 0, 0.4);\n color: #ffffffda;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.empty-chat {\n margin: 0 auto;\n}\n\n.actionBtnContainer {\n position: relative;\n}\n\n.dotsButton {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n}\n\n.dotsButton:hover {\n background: #cccccc1f;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.dropdown {\n position: relative;\n display: inline-block;\n}\n\n.dropdownMenu {\n position: absolute;\n background-color: white;\n width: 100px;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n}\n\n.dropdownItem {\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n width: 100%;\n cursor: pointer;\n}\n\n.dropdownItem:hover {\n background-color: #f1f1f1;\n}\n\n","",{version:3,sources:["webpack://./src/styles/chatStyles.css"],names:[],mappings:"AAAA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,yBAAyB;IACzB,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,YAAY;AAChB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;AACzB;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,oCAAoC;IACpC,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI,kBAAkB;IAClB,uBAAuB;IACvB,YAAY;IACZ,wCAAwC;IACxC,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,yBAAyB;AAC7B",sourcesContent:[".chat-container {\r\n border: 1px solid;\r\n border-radius: 8px;\r\n padding: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.chat-messages {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 5px;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.message-input-container {\r\n display: flex;\r\n margin-top: 10px;\r\n padding-top: 10px;\r\n}\r\n\r\n.message-input-field {\r\n flex: 1;\r\n padding: 8px;\r\n border: 1px solid;\r\n border-radius: 4px;\r\n margin-right: 5px;\r\n}\r\n\r\n.message-input-field:focus {\r\n outline: none;\r\n}\r\n\r\n.message-input-button {\r\n background-color: #007bff;\r\n color: white;\r\n padding: 8px 12px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n\r\n.message-input-container .disabled {\r\n background-color: #efefef4d;\r\n color: #1010104d;\r\n border-color: #efefef4d;\r\n cursor: auto;\r\n}\r\n\r\n.message-input-button:hover {\r\n background-color: #0056b3;\r\n}\r\n\r\n.message-input-container .disabled:hover {\r\n background-color: #efefef4d;\r\n}\r\n\r\n.chat-bubble {\r\n max-width: 75%;\r\n margin-bottom: 10px;\r\n padding: 0px 10px 0px;\r\n border-radius: 12px;\r\n word-wrap: break-word;\r\n}\r\n\r\n.user .markdown-content a {\r\n color: #fff;\r\n text-decoration: underline;\r\n}\r\n\r\n.user .markdown-content a:hover {\r\n color: #212427;\r\n}\r\n\r\n.markdown-content code {\r\n background-color: rgba(0, 0, 0, 0.4);\r\n color: #ffffffda;\r\n padding: 2px 4px;\r\n border-radius: 4px;\r\n}\r\n\r\n.empty-chat {\r\n margin: 0 auto;\r\n}\r\n\r\n.actionBtnContainer {\r\n position: relative;\r\n}\r\n\r\n.dotsButton {\r\n background: none;\r\n border: none;\r\n font-size: 1.5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.dotsButton:hover {\r\n background: #cccccc1f;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n}\r\n\r\n.dropdown {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.dropdownMenu {\r\n position: absolute;\r\n background-color: white;\r\n width: 100px;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n z-index: 1000;\r\n}\r\n\r\n.dropdownItem {\r\n padding: 8px 12px;\r\n background: none;\r\n border: none;\r\n text-align: left;\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.dropdownItem:hover {\r\n background-color: #f1f1f1;\r\n}\r\n\r\n"],sourceRoot:""}]);const a=l},796:(e,t,n)=>{"use strict";n.d(t,{A:()=>a});var r=n(354),o=n.n(r),i=n(314),l=n.n(i)()(o());l.push([e.id,".typing-dots {\n display: flex;\n gap: 4px;\n}\n\n.typing-dots span {\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: gray;\n border-radius: 50%;\n animation: bounce 1.2s infinite ease-in-out;\n}\n\n.typing-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.typing-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n.typing-spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 3px solid gray;\n border-top: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n\n@keyframes bounce {\n\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}","",{version:3,sources:["webpack://./src/styles/indicatorStyle.css"],names:[],mappings:"AAAA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,qBAAqB;IACrB,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,kBAAkB;IAClB,2CAA2C;AAC/C;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,sBAAsB;IACtB,iCAAiC;IACjC,kBAAkB;IAClB,kCAAkC;AACtC;;AAEA;IACI;QACI,uBAAuB;IAC3B;;IAEA;QACI,yBAAyB;IAC7B;AACJ;;;AAGA;;IAEI;;;QAGI,mBAAmB;IACvB;;IAEA;QACI,mBAAmB;IACvB;AACJ",sourcesContent:[".typing-dots {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.typing-dots span {\r\n display: inline-block;\r\n width: 8px;\r\n height: 8px;\r\n background-color: gray;\r\n border-radius: 50%;\r\n animation: bounce 1.2s infinite ease-in-out;\r\n}\r\n\r\n.typing-dots span:nth-child(2) {\r\n animation-delay: 0.2s;\r\n}\r\n\r\n.typing-dots span:nth-child(3) {\r\n animation-delay: 0.4s;\r\n}\r\n\r\n.typing-spinner {\r\n display: inline-block;\r\n width: 20px;\r\n height: 20px;\r\n border: 3px solid gray;\r\n border-top: 3px solid transparent;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n\r\n@keyframes bounce {\r\n\r\n 0%,\r\n 80%,\r\n 100% {\r\n transform: scale(0);\r\n }\r\n\r\n 40% {\r\n transform: scale(1);\r\n }\r\n}"],sourceRoot:""}]);const a=l},314:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,o,i){"string"==typeof e&&(e=[[null,e,void 0]]);var l={};if(r)for(var a=0;a0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=i),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),o&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=o):u[4]="".concat(o)),t.push(u))}},t}},354:e=>{"use strict";e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[t].concat([i]).join("\n")}return[t].join("\n")}},849:e=>{"use strict";var t=Object.prototype.hasOwnProperty,n=Object.prototype.toString,r=Object.defineProperty,o=Object.getOwnPropertyDescriptor,i=function(e){return"function"==typeof Array.isArray?Array.isArray(e):"[object Array]"===n.call(e)},l=function(e){if(!e||"[object Object]"!==n.call(e))return!1;var r,o=t.call(e,"constructor"),i=e.constructor&&e.constructor.prototype&&t.call(e.constructor.prototype,"isPrototypeOf");if(e.constructor&&!o&&!i)return!1;for(r in e);return void 0===r||t.call(e,r)},a=function(e,t){r&&"__proto__"===t.name?r(e,t.name,{enumerable:!0,configurable:!0,value:t.newValue,writable:!0}):e[t.name]=t.newValue},s=function(e,n){if("__proto__"===n){if(!t.call(e,n))return;if(o)return o(e,n).value}return e[n]};e.exports=function e(){var t,n,r,o,c,u,f=arguments[0],p=1,d=arguments.length,h=!1;for("boolean"==typeof f&&(h=f,f=arguments[1]||{},p=2),(null==f||"object"!=typeof f&&"function"!=typeof f)&&(f={});p{var t=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,n=/\n/g,r=/^\s*/,o=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,i=/^:\s*/,l=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,a=/^[;\s]*/,s=/^\s+|\s+$/g,c="";function u(e){return e?e.replace(s,c):c}e.exports=function(e,s){if("string"!=typeof e)throw new TypeError("First argument must be a string");if(!e)return[];s=s||{};var f=1,p=1;function d(e){var t=e.match(n);t&&(f+=t.length);var r=e.lastIndexOf("\n");p=~r?e.length-r:p+e.length}function h(){var e={line:f,column:p};return function(t){return t.position=new m(e),k(),t}}function m(e){this.start=e,this.end={line:f,column:p},this.source=s.source}m.prototype.content=e;var g=[];function y(t){var n=new Error(s.source+":"+f+":"+p+": "+t);if(n.reason=t,n.filename=s.source,n.line=f,n.column=p,n.source=e,!s.silent)throw n;g.push(n)}function v(t){var n=t.exec(e);if(n){var r=n[0];return d(r),e=e.slice(r.length),n}}function k(){v(r)}function b(e){var t;for(e=e||[];t=x();)!1!==t&&e.push(t);return e}function x(){var t=h();if("/"==e.charAt(0)&&"*"==e.charAt(1)){for(var n=2;c!=e.charAt(n)&&("*"!=e.charAt(n)||"/"!=e.charAt(n+1));)++n;if(n+=2,c===e.charAt(n-1))return y("End of comment missing");var r=e.slice(2,n-2);return p+=2,d(r),e=e.slice(n),p+=2,t({type:"comment",comment:r})}}function A(){var e=h(),n=v(o);if(n){if(x(),!v(i))return y("property missing ':'");var r=v(l),s=e({type:"declaration",property:u(n[0].replace(t,c)),value:r?u(r[0].replace(t,c)):c});return v(a),s}}return k(),function(){var e,t=[];for(b(t);e=A();)!1!==e&&(t.push(e),b(t));return t}()}},20:(e,t,n)=>{"use strict";var r=n(609),o=Symbol.for("react.element"),i=Symbol.for("react.fragment"),l=Object.prototype.hasOwnProperty,a=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,s={key:!0,ref:!0,__self:!0,__source:!0};function c(e,t,n){var r,i={},c=null,u=null;for(r in void 0!==n&&(c=""+n),void 0!==t.key&&(c=""+t.key),void 0!==t.ref&&(u=t.ref),t)l.call(t,r)&&!s.hasOwnProperty(r)&&(i[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps)void 0===i[r]&&(i[r]=t[r]);return{$$typeof:o,type:e,key:c,ref:u,props:i,_owner:a.current}}t.Fragment=i,t.jsx=c,t.jsxs=c},848:(e,t,n)=>{"use strict";e.exports=n(20)},72:e=>{"use strict";var t=[];function n(e){for(var n=-1,r=0;r{"use strict";var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},540:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},56:(e,t,n)=>{"use strict";e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},825:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var o=void 0!==n.layer;o&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,o&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var i=n.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},113:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},133:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var n=null;if(!e||"string"!=typeof e)return n;var r=(0,o.default)(e),i="function"==typeof t;return r.forEach((function(e){if("declaration"===e.type){var r=e.property,o=e.value;i?t(r,o,e):o&&((n=n||{})[r]=o)}})),n};var o=r(n(788))},609:e=>{"use strict";e.exports=window.React}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={id:r,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r,o=function(){var e=document.currentScript;if(!e){for(var t=document.getElementsByTagName("script"),n=[],r=0;r{"use strict";n.r(l),n.d(l,{ChatComponent:()=>el});var e={};n.r(e),n.d(e,{boolean:()=>y,booleanish:()=>v,commaOrSpaceSeparated:()=>w,commaSeparated:()=>A,number:()=>b,overloadedBoolean:()=>k,spaceSeparated:()=>x});var t={};n.r(t),n.d(t,{attentionMarkers:()=>rn,contentInitial:()=>Kt,disable:()=>on,document:()=>Zt,flow:()=>Gt,flowInitial:()=>Xt,insideSpan:()=>nn,string:()=>en,text:()=>tn});var r=n(609),o=n.n(r);const i=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,a=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,s={};function c(e,t){return((t||s).jsx?a:i).test(e)}const u=/[ \t\n\f\r]/g;function f(e){return""===e.replace(u,"")}class p{constructor(e,t,n){this.property=e,this.normal=t,n&&(this.space=n)}}function d(e,t){const n={},r={};let o=-1;for(;++o"xlink:"+t.slice(5).toLowerCase(),properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null}}),O=T({space:"xml",transform:(e,t)=>"xml:"+t.slice(3).toLowerCase(),properties:{xmlLang:null,xmlBase:null,xmlSpace:null}});function D(e,t){return t in e?e[t]:t}function L(e,t){return D(e,t.toLowerCase())}const F=T({space:"xmlns",attributes:{xmlnsxlink:"xmlns:xlink"},transform:L,properties:{xmlns:null,xmlnsXLink:null}}),M=T({transform:(e,t)=>"role"===t?t:"aria-"+t.slice(4).toLowerCase(),properties:{ariaActiveDescendant:null,ariaAtomic:v,ariaAutoComplete:null,ariaBusy:v,ariaChecked:v,ariaColCount:b,ariaColIndex:b,ariaColSpan:b,ariaControls:x,ariaCurrent:null,ariaDescribedBy:x,ariaDetails:null,ariaDisabled:v,ariaDropEffect:x,ariaErrorMessage:null,ariaExpanded:v,ariaFlowTo:x,ariaGrabbed:v,ariaHasPopup:null,ariaHidden:v,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:x,ariaLevel:b,ariaLive:null,ariaModal:v,ariaMultiLine:v,ariaMultiSelectable:v,ariaOrientation:null,ariaOwns:x,ariaPlaceholder:null,ariaPosInSet:b,ariaPressed:v,ariaReadOnly:v,ariaRelevant:null,ariaRequired:v,ariaRoleDescription:x,ariaRowCount:b,ariaRowIndex:b,ariaRowSpan:b,ariaSelected:v,ariaSetSize:b,ariaSort:null,ariaValueMax:b,ariaValueMin:b,ariaValueNow:b,ariaValueText:null,role:null}}),z=T({space:"html",attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},transform:L,mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:A,acceptCharset:x,accessKey:x,action:null,allow:null,allowFullScreen:y,allowPaymentRequest:y,allowUserMedia:y,alt:null,as:null,async:y,autoCapitalize:null,autoComplete:x,autoFocus:y,autoPlay:y,blocking:x,capture:null,charSet:null,checked:y,cite:null,className:x,cols:b,colSpan:null,content:null,contentEditable:v,controls:y,controlsList:x,coords:b|A,crossOrigin:null,data:null,dateTime:null,decoding:null,default:y,defer:y,dir:null,dirName:null,disabled:y,download:k,draggable:v,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:y,formTarget:null,headers:x,height:b,hidden:y,high:b,href:null,hrefLang:null,htmlFor:x,httpEquiv:x,id:null,imageSizes:null,imageSrcSet:null,inert:y,inputMode:null,integrity:null,is:null,isMap:y,itemId:null,itemProp:x,itemRef:x,itemScope:y,itemType:x,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:y,low:b,manifest:null,max:null,maxLength:b,media:null,method:null,min:null,minLength:b,multiple:y,muted:y,name:null,nonce:null,noModule:y,noValidate:y,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:y,optimum:b,pattern:null,ping:x,placeholder:null,playsInline:y,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:y,referrerPolicy:null,rel:x,required:y,reversed:y,rows:b,rowSpan:b,sandbox:x,scope:null,scoped:y,seamless:y,selected:y,shadowRootClonable:y,shadowRootDelegatesFocus:y,shadowRootMode:null,shape:null,size:b,sizes:null,slot:null,span:b,spellCheck:v,src:null,srcDoc:null,srcLang:null,srcSet:null,start:b,step:null,style:null,tabIndex:b,target:null,title:null,translate:null,type:null,typeMustMatch:y,useMap:null,value:v,width:b,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:x,axis:null,background:null,bgColor:null,border:b,borderColor:null,bottomMargin:b,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:y,declare:y,event:null,face:null,frame:null,frameBorder:null,hSpace:b,leftMargin:b,link:null,longDesc:null,lowSrc:null,marginHeight:b,marginWidth:b,noResize:y,noHref:y,noShade:y,noWrap:y,object:null,profile:null,prompt:null,rev:null,rightMargin:b,rules:null,scheme:null,scrolling:v,standby:null,summary:null,text:null,topMargin:b,valueType:null,version:null,vAlign:null,vLink:null,vSpace:b,allowTransparency:null,autoCorrect:null,autoSave:null,disablePictureInPicture:y,disableRemotePlayback:y,prefix:null,property:null,results:b,security:null,unselectable:null}}),_=T({space:"svg",attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},transform:D,properties:{about:w,accentHeight:b,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:b,amplitude:b,arabicForm:null,ascent:b,attributeName:null,attributeType:null,azimuth:b,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:b,by:null,calcMode:null,capHeight:b,className:x,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:b,diffuseConstant:b,direction:null,display:null,dur:null,divisor:b,dominantBaseline:null,download:y,dx:null,dy:null,edgeMode:null,editable:null,elevation:b,enableBackground:null,end:null,event:null,exponent:b,externalResourcesRequired:null,fill:null,fillOpacity:b,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:A,g2:A,glyphName:A,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:b,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:b,horizOriginX:b,horizOriginY:b,id:null,ideographic:b,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:b,k:b,k1:b,k2:b,k3:b,k4:b,kernelMatrix:w,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:b,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:b,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:b,overlineThickness:b,paintOrder:null,panose1:null,path:null,pathLength:b,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:x,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:b,pointsAtY:b,pointsAtZ:b,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:w,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:w,rev:w,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:w,requiredFeatures:w,requiredFonts:w,requiredFormats:w,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:b,specularExponent:b,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:b,strikethroughThickness:b,string:null,stroke:null,strokeDashArray:w,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:b,strokeOpacity:b,strokeWidth:null,style:null,surfaceScale:b,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:w,tabIndex:b,tableValues:null,target:null,targetX:b,targetY:b,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:w,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:b,underlineThickness:b,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:b,values:null,vAlphabetic:b,vMathematical:b,vectorEffect:null,vHanging:b,vIdeographic:b,version:null,vertAdvY:b,vertOriginX:b,vertOriginY:b,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:b,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null}}),R=d([O,P,F,M,z],"html"),N=d([O,P,F,M,_],"svg"),j=/^data[-\w.:]+$/i,U=/-[a-z]/g,H=/[A-Z]/g;function q(e){return"-"+e.toLowerCase()}function V(e){return e.charAt(1).toUpperCase()}const Y={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"};var W=n(133);const $=W.default||W,Q=Z("end"),J=Z("start");function Z(e){return function(t){const n=t&&t.position&&t.position[e]||{};if("number"==typeof n.line&&n.line>0&&"number"==typeof n.column&&n.column>0)return{line:n.line,column:n.column,offset:"number"==typeof n.offset&&n.offset>-1?n.offset:void 0}}}function K(e){return e&&"object"==typeof e?"position"in e||"type"in e?G(e.position):"start"in e||"end"in e?G(e):"line"in e||"column"in e?X(e):"":""}function X(e){return ee(e&&e.line)+":"+ee(e&&e.column)}function G(e){return X(e&&e.start)+"-"+X(e&&e.end)}function ee(e){return e&&"number"==typeof e?e:1}class te extends Error{constructor(e,t,n){super(),"string"==typeof t&&(n=t,t=void 0);let r="",o={},i=!1;if(t&&(o="line"in t&&"column"in t||"start"in t&&"end"in t?{place:t}:"type"in t?{ancestors:[t],place:t.position}:{...t}),"string"==typeof e?r=e:!o.cause&&e&&(i=!0,r=e.message,o.cause=e),!o.ruleId&&!o.source&&"string"==typeof n){const e=n.indexOf(":");-1===e?o.ruleId=n:(o.source=n.slice(0,e),o.ruleId=n.slice(e+1))}if(!o.place&&o.ancestors&&o.ancestors){const e=o.ancestors[o.ancestors.length-1];e&&(o.place=e.position)}const l=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=l?l.column:void 0,this.fatal=void 0,this.file,this.message=r,this.line=l?l.line:void 0,this.name=K(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=i&&o.cause&&"string"==typeof o.cause.stack?o.cause.stack:"",this.actual,this.expected,this.note,this.url}}te.prototype.file="",te.prototype.name="",te.prototype.reason="",te.prototype.message="",te.prototype.stack="",te.prototype.column=void 0,te.prototype.line=void 0,te.prototype.ancestors=void 0,te.prototype.cause=void 0,te.prototype.fatal=void 0,te.prototype.place=void 0,te.prototype.ruleId=void 0,te.prototype.source=void 0;const ne={}.hasOwnProperty,re=new Map,oe=/[A-Z]/g,ie=/-([a-z])/g,le=new Set(["table","tbody","thead","tfoot","tr"]),ae=new Set(["td","th"]),se="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function ce(e,t,n){return"element"===t.type?function(e,t,n){const r=e.schema;let o=r;"svg"===t.tagName.toLowerCase()&&"html"===r.space&&(o=N,e.schema=o),e.ancestors.push(t);const i=he(e,t.tagName,!1),l=function(e,t){const n={};let r,o;for(o in t.properties)if("children"!==o&&ne.call(t.properties,o)){const i=de(e,o,t.properties[o]);if(i){const[o,l]=i;e.tableCellAlignToStyle&&"align"===o&&"string"==typeof l&&ae.has(t.tagName)?r=l:n[o]=l}}return r&&((n.style||(n.style={}))["css"===e.stylePropertyNameCase?"text-align":"textAlign"]=r),n}(e,t);let a=pe(e,t);return le.has(t.tagName)&&(a=a.filter((function(e){return"string"!=typeof e||!("object"==typeof(t=e)?"text"===t.type&&f(t.value):f(t));var t}))),ue(e,l,i,t),fe(l,a),e.ancestors.pop(),e.schema=r,e.create(t,i,l,n)}(e,t,n):"mdxFlowExpression"===t.type||"mdxTextExpression"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater){const n=t.data.estree.body[0];return n.type,e.evaluater.evaluateExpression(n.expression)}me(e,t.position)}(e,t):"mdxJsxFlowElement"===t.type||"mdxJsxTextElement"===t.type?function(e,t,n){const r=e.schema;let o=r;"svg"===t.name&&"html"===r.space&&(o=N,e.schema=o),e.ancestors.push(t);const i=null===t.name?e.Fragment:he(e,t.name,!0),l=function(e,t){const n={};for(const r of t.attributes)if("mdxJsxExpressionAttribute"===r.type)if(r.data&&r.data.estree&&e.evaluater){const t=r.data.estree.body[0];t.type;const o=t.expression;o.type;const i=o.properties[0];i.type,Object.assign(n,e.evaluater.evaluateExpression(i.argument))}else me(e,t.position);else{const o=r.name;let i;if(r.value&&"object"==typeof r.value)if(r.value.data&&r.value.data.estree&&e.evaluater){const t=r.value.data.estree.body[0];t.type,i=e.evaluater.evaluateExpression(t.expression)}else me(e,t.position);else i=null===r.value||r.value;n[o]=i}return n}(e,t),a=pe(e,t);return ue(e,l,i,t),fe(l,a),e.ancestors.pop(),e.schema=r,e.create(t,i,l,n)}(e,t,n):"mdxjsEsm"===t.type?function(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);me(e,t.position)}(e,t):"root"===t.type?function(e,t,n){const r={};return fe(r,pe(e,t)),e.create(t,e.Fragment,r,n)}(e,t,n):"text"===t.type?function(e,t){return t.value}(0,t):void 0}function ue(e,t,n,r){"string"!=typeof n&&n!==e.Fragment&&e.passNode&&(t.node=r)}function fe(e,t){if(t.length>0){const n=t.length>1?t:t[0];n&&(e.children=n)}}function pe(e,t){const n=[];let r=-1;const o=e.passKeys?new Map:re;for(;++r4&&"data"===n.slice(0,4)&&j.test(t)){if("-"===t.charAt(4)){const e=t.slice(5).replace(U,V);r="data"+e.charAt(0).toUpperCase()+e.slice(1)}else{const e=t.slice(4);if(!U.test(e)){let n=e.replace(H,q);"-"!==n.charAt(0)&&(n="-"+n),t="data"+n}}o=I}return new o(r,t)}(e.schema,t);if(!(null==n||"number"==typeof n&&Number.isNaN(n))){if(Array.isArray(n)&&(n=r.commaSeparated?function(e){const t={};return(""===e[e.length-1]?[...e,""]:e).join((t.padRight?" ":"")+","+(!1===t.padLeft?"":" ")).trim()}(n):n.join(" ").trim()),"style"===r.property){let t="object"==typeof n?n:function(e,t){const n={};try{$(t,(function(e,t){let r=e;"--"!==r.slice(0,2)&&("-ms-"===r.slice(0,4)&&(r="ms-"+r.slice(4)),r=r.replace(ie,ye)),n[r]=t}))}catch(t){if(!e.ignoreInvalidStyle){const n=t,r=new te("Cannot parse `style` attribute",{ancestors:e.ancestors,cause:n,ruleId:"style",source:"hast-util-to-jsx-runtime"});throw r.file=e.filePath||void 0,r.url=se+"#cannot-parse-style-attribute",r}}return n}(e,String(n));return"css"===e.stylePropertyNameCase&&(t=function(e){const t={};let n;for(n in e)ne.call(e,n)&&(t[ge(n)]=e[n]);return t}(t)),["style",t]}return["react"===e.elementAttributeNameCase&&r.space?Y[r.property]||r.property:r.attribute,n]}}function he(e,t,n){let r;if(n)if(t.includes(".")){const e=t.split(".");let n,o=-1;for(;++oo?0:o+t:t>o?o:t,n=n>0?n:0,r.length<1e4)i=Array.from(r),i.unshift(t,n),e.splice(...i);else for(n&&e.splice(t,n);l0?(Se(e,e.length,0,t),e):t}class Ee{constructor(e){this.left=e?[...e]:[],this.right=[]}get(e){if(e<0||e>=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+e+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return ethis.left.length?this.right.slice(this.right.length-n+this.left.length,this.right.length-e+this.left.length).reverse():this.left.slice(e).concat(this.right.slice(this.right.length-n+this.left.length).reverse())}splice(e,t,n){const r=t||0;this.setCursor(Math.trunc(e));const o=this.right.splice(this.right.length-r,Number.POSITIVE_INFINITY);return n&&Be(this.left,n),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(e){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(e)}pushMany(e){this.setCursor(Number.POSITIVE_INFINITY),Be(this.left,e)}unshift(e){this.setCursor(0),this.right.push(e)}unshiftMany(e){this.setCursor(0),Be(this.right,e.reverse())}setCursor(e){if(!(e===this.left.length||e>this.left.length&&0===this.right.length||e<0&&0===this.left.length))if(e-1&&e.test(String.fromCharCode(t))}}function Qe(e,t,n,r){const o=r?r-1:Number.POSITIVE_INFINITY;let i=0;return function(r){return Ve(r)?(e.enter(n),l(r)):t(r)};function l(r){return Ve(r)&&i++i))return;const n=t.events.length;let o,a,s=n;for(;s--;)if("exit"===t.events[s][0]&&"chunkFlow"===t.events[s][1].type){if(o){a=t.events[s][1].end;break}o=!0}for(y(l),e=n;er;){const r=n[o];t.containerState=r[1],r[0].exit.call(t,e)}n.length=r}function v(){r.write([null]),o=void 0,r=void 0,t.containerState._closeFlow=void 0}}},Ke={tokenize:function(e,t,n){return Qe(e,e.attempt(this.parser.constructs.document,t,n),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}},Xe={partial:!0,tokenize:function(e,t,n){return function(t){return Ve(t)?Qe(e,r,"linePrefix")(t):r(t)};function r(e){return null===e||He(e)?t(e):n(e)}}},Ge={resolve:function(e){return Te(e),e},tokenize:function(e,t){let n;return function(t){return e.enter("content"),n=e.enter("chunkContent",{contentType:"content"}),r(t)};function r(t){return null===t?o(t):He(t)?e.check(et,i,o)(t):(e.consume(t),r)}function o(n){return e.exit("chunkContent"),e.exit("content"),t(n)}function i(t){return e.consume(t),e.exit("chunkContent"),n.next=e.enter("chunkContent",{contentType:"content",previous:n}),n=n.next,r}}},et={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return e.exit("chunkContent"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),Qe(e,o,"linePrefix")};function o(o){if(null===o||He(o))return n(o);const i=r.events[r.events.length-1];return!r.parser.constructs.disable.null.includes("codeIndented")&&i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?t(o):e.interrupt(r.parser.constructs.flow,n,t)(o)}}},tt={tokenize:function(e){const t=this,n=e.attempt(Xe,(function(r){if(null!==r)return e.enter("lineEndingBlank"),e.consume(r),e.exit("lineEndingBlank"),t.currentConstruct=void 0,n;e.consume(r)}),e.attempt(this.parser.constructs.flowInitial,r,Qe(e,e.attempt(this.parser.constructs.flow,r,e.attempt(Ge,r)),"linePrefix")));return n;function r(r){if(null!==r)return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),t.currentConstruct=void 0,n;e.consume(r)}}},nt={resolveAll:lt()},rt=it("string"),ot=it("text");function it(e){return{resolveAll:lt("text"===e?at:void 0),tokenize:function(t){const n=this,r=this.parser.constructs[e],o=t.attempt(r,i,l);return i;function i(e){return s(e)?o(e):l(e)}function l(e){if(null!==e)return t.enter("data"),t.consume(e),a;t.consume(e)}function a(e){return s(e)?(t.exit("data"),o(e)):(t.consume(e),a)}function s(e){if(null===e)return!0;const t=r[e];let o=-1;if(t)for(;++o=3&&(null===i||He(i))?(e.exit("thematicBreak"),t(i)):n(i)}function l(t){return t===r?(e.consume(t),o++,l):(e.exit("thematicBreakSequence"),Ve(t)?Qe(e,i,"whitespace")(t):i(t))}}},ct={continuation:{tokenize:function(e,t,n){const r=this;return r.containerState._closeFlow=void 0,e.check(Xe,(function(n){return r.containerState.furtherBlankLines=r.containerState.furtherBlankLines||r.containerState.initialBlankLine,Qe(e,t,"listItemIndent",r.containerState.size+1)(n)}),(function(n){return r.containerState.furtherBlankLines||!Ve(n)?(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,o(n)):(r.containerState.furtherBlankLines=void 0,r.containerState.initialBlankLine=void 0,e.attempt(ft,t,o)(n))}));function o(o){return r.containerState._closeFlow=!0,r.interrupt=void 0,Qe(e,e.attempt(ct,t,n),"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(o)}}},exit:function(e){e.exit(this.containerState.type)},name:"list",tokenize:function(e,t,n){const r=this,o=r.events[r.events.length-1];let i=o&&"linePrefix"===o[1].type?o[2].sliceSerialize(o[1],!0).length:0,l=0;return function(t){const o=r.containerState.type||(42===t||43===t||45===t?"listUnordered":"listOrdered");if("listUnordered"===o?!r.containerState.marker||t===r.containerState.marker:Ne(t)){if(r.containerState.type||(r.containerState.type=o,e.enter(o,{_container:!0})),"listUnordered"===o)return e.enter("listItemPrefix"),42===t||45===t?e.check(st,n,s)(t):s(t);if(!r.interrupt||49===t)return e.enter("listItemPrefix"),e.enter("listItemValue"),a(t)}return n(t)};function a(t){return Ne(t)&&++l<10?(e.consume(t),a):(!r.interrupt||l<2)&&(r.containerState.marker?t===r.containerState.marker:41===t||46===t)?(e.exit("listItemValue"),s(t)):n(t)}function s(t){return e.enter("listItemMarker"),e.consume(t),e.exit("listItemMarker"),r.containerState.marker=r.containerState.marker||t,e.check(Xe,r.interrupt?n:c,e.attempt(ut,f,u))}function c(e){return r.containerState.initialBlankLine=!0,i++,f(e)}function u(t){return Ve(t)?(e.enter("listItemPrefixWhitespace"),e.consume(t),e.exit("listItemPrefixWhitespace"),f):n(t)}function f(n){return r.containerState.size=i+r.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(n)}}},ut={partial:!0,tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return!Ve(e)&&o&&"listItemPrefixWhitespace"===o[1].type?t(e):n(e)}),"listItemPrefixWhitespace",r.parser.constructs.disable.null.includes("codeIndented")?void 0:5)}},ft={partial:!0,tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return o&&"listItemIndent"===o[1].type&&o[2].sliceSerialize(o[1],!0).length===r.containerState.size?t(e):n(e)}),"listItemIndent",r.containerState.size+1)}},pt={continuation:{tokenize:function(e,t,n){const r=this;return function(t){return Ve(t)?Qe(e,o,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):o(t)};function o(r){return e.attempt(pt,t,n)(r)}}},exit:function(e){e.exit("blockQuote")},name:"blockQuote",tokenize:function(e,t,n){const r=this;return function(t){if(62===t){const n=r.containerState;return n.open||(e.enter("blockQuote",{_container:!0}),n.open=!0),e.enter("blockQuotePrefix"),e.enter("blockQuoteMarker"),e.consume(t),e.exit("blockQuoteMarker"),o}return n(t)};function o(n){return Ve(n)?(e.enter("blockQuotePrefixWhitespace"),e.consume(n),e.exit("blockQuotePrefixWhitespace"),e.exit("blockQuotePrefix"),t):(e.exit("blockQuotePrefix"),t(n))}}};function dt(e,t,n,r,o,i,l,a,s){const c=s||Number.POSITIVE_INFINITY;let u=0;return function(t){return 60===t?(e.enter(r),e.enter(o),e.enter(i),e.consume(t),e.exit(i),f):null===t||32===t||41===t||Re(t)?n(t):(e.enter(r),e.enter(l),e.enter(a),e.enter("chunkString",{contentType:"string"}),h(t))};function f(n){return 62===n?(e.enter(i),e.consume(n),e.exit(i),e.exit(o),e.exit(r),t):(e.enter(a),e.enter("chunkString",{contentType:"string"}),p(n))}function p(t){return 62===t?(e.exit("chunkString"),e.exit(a),f(t)):null===t||60===t||He(t)?n(t):(e.consume(t),92===t?d:p)}function d(t){return 60===t||62===t||92===t?(e.consume(t),p):p(t)}function h(o){return u||null!==o&&41!==o&&!qe(o)?u999||null===f||91===f||93===f&&!a||94===f&&!s&&"_hiddenFootnoteSupport"in l.parser.constructs?n(f):93===f?(e.exit(i),e.enter(o),e.consume(f),e.exit(o),e.exit(r),t):He(f)?(e.enter("lineEnding"),e.consume(f),e.exit("lineEnding"),c):(e.enter("chunkString",{contentType:"string"}),u(f))}function u(t){return null===t||91===t||93===t||He(t)||s++>999?(e.exit("chunkString"),c(t)):(e.consume(t),a||(a=!Ve(t)),92===t?f:u)}function f(t){return 91===t||92===t||93===t?(e.consume(t),s++,u):u(t)}}function mt(e,t,n,r,o,i){let l;return function(t){return 34===t||39===t||40===t?(e.enter(r),e.enter(o),e.consume(t),e.exit(o),l=40===t?41:t,a):n(t)};function a(n){return n===l?(e.enter(o),e.consume(n),e.exit(o),e.exit(r),t):(e.enter(i),s(n))}function s(t){return t===l?(e.exit(i),a(l)):null===t?n(t):He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),Qe(e,s,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),c(t))}function c(t){return t===l||null===t||He(t)?(e.exit("chunkString"),s(t)):(e.consume(t),92===t?u:c)}function u(t){return t===l||92===t?(e.consume(t),c):c(t)}}function gt(e,t){let n;return function r(o){return He(o)?(e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),n=!0,r):Ve(o)?Qe(e,r,n?"linePrefix":"lineSuffix")(o):t(o)}}function yt(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const vt={name:"definition",tokenize:function(e,t,n){const r=this;let o;return function(t){return e.enter("definition"),function(t){return ht.call(r,e,i,n,"definitionLabel","definitionLabelMarker","definitionLabelString")(t)}(t)};function i(t){return o=yt(r.sliceSerialize(r.events[r.events.length-1][1]).slice(1,-1)),58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),l):n(t)}function l(t){return qe(t)?gt(e,a)(t):a(t)}function a(t){return dt(e,s,n,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(t)}function s(t){return e.attempt(kt,c,c)(t)}function c(t){return Ve(t)?Qe(e,u,"whitespace")(t):u(t)}function u(i){return null===i||He(i)?(e.exit("definition"),r.parser.defined.push(o),t(i)):n(i)}}},kt={partial:!0,tokenize:function(e,t,n){return function(t){return qe(t)?gt(e,r)(t):n(t)};function r(t){return mt(e,o,n,"definitionTitle","definitionTitleMarker","definitionTitleString")(t)}function o(t){return Ve(t)?Qe(e,i,"whitespace")(t):i(t)}function i(e){return null===e||He(e)?t(e):n(e)}}},bt={name:"codeIndented",tokenize:function(e,t,n){const r=this;return function(t){return e.enter("codeIndented"),Qe(e,o,"linePrefix",5)(t)};function o(e){const t=r.events[r.events.length-1];return t&&"linePrefix"===t[1].type&&t[2].sliceSerialize(t[1],!0).length>=4?i(e):n(e)}function i(t){return null===t?a(t):He(t)?e.attempt(xt,i,a)(t):(e.enter("codeFlowValue"),l(t))}function l(t){return null===t||He(t)?(e.exit("codeFlowValue"),i(t)):(e.consume(t),l)}function a(n){return e.exit("codeIndented"),t(n)}}},xt={partial:!0,tokenize:function(e,t,n){const r=this;return o;function o(t){return r.parser.lazy[r.now().line]?n(t):He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o):Qe(e,i,"linePrefix",5)(t)}function i(e){const i=r.events[r.events.length-1];return i&&"linePrefix"===i[1].type&&i[2].sliceSerialize(i[1],!0).length>=4?t(e):He(e)?o(e):n(e)}}},At={name:"headingAtx",resolve:function(e,t){let n,r,o=e.length-2,i=3;return"whitespace"===e[i][1].type&&(i+=2),o-2>i&&"whitespace"===e[o][1].type&&(o-=2),"atxHeadingSequence"===e[o][1].type&&(i===o-1||o-4>i&&"whitespace"===e[o-2][1].type)&&(o-=i+1===o?2:4),o>i&&(n={type:"atxHeadingText",start:e[i][1].start,end:e[o][1].end},r={type:"chunkText",start:e[i][1].start,end:e[o][1].end,contentType:"text"},Se(e,i,o-i+1,[["enter",n,t],["enter",r,t],["exit",r,t],["exit",n,t]])),e},tokenize:function(e,t,n){let r=0;return function(t){return e.enter("atxHeading"),function(t){return e.enter("atxHeadingSequence"),o(t)}(t)};function o(t){return 35===t&&r++<6?(e.consume(t),o):null===t||qe(t)?(e.exit("atxHeadingSequence"),i(t)):n(t)}function i(n){return 35===n?(e.enter("atxHeadingSequence"),l(n)):null===n||He(n)?(e.exit("atxHeading"),t(n)):Ve(n)?Qe(e,i,"whitespace")(n):(e.enter("atxHeadingText"),a(n))}function l(t){return 35===t?(e.consume(t),l):(e.exit("atxHeadingSequence"),i(t))}function a(t){return null===t||35===t||qe(t)?(e.exit("atxHeadingText"),i(t)):(e.consume(t),a)}}},wt={name:"setextUnderline",resolveTo:function(e,t){let n,r,o,i=e.length;for(;i--;)if("enter"===e[i][0]){if("content"===e[i][1].type){n=i;break}"paragraph"===e[i][1].type&&(r=i)}else"content"===e[i][1].type&&e.splice(i,1),o||"definition"!==e[i][1].type||(o=i);const l={type:"setextHeading",start:{...e[r][1].start},end:{...e[e.length-1][1].end}};return e[r][1].type="setextHeadingText",o?(e.splice(r,0,["enter",l,t]),e.splice(o+1,0,["exit",e[n][1],t]),e[n][1].end={...e[o][1].end}):e[n][1]=l,e.push(["exit",l,t]),e},tokenize:function(e,t,n){const r=this;let o;return function(t){let l,a=r.events.length;for(;a--;)if("lineEnding"!==r.events[a][1].type&&"linePrefix"!==r.events[a][1].type&&"content"!==r.events[a][1].type){l="paragraph"===r.events[a][1].type;break}return r.parser.lazy[r.now().line]||!r.interrupt&&!l?n(t):(e.enter("setextHeadingLine"),o=t,function(t){return e.enter("setextHeadingLineSequence"),i(t)}(t))};function i(t){return t===o?(e.consume(t),i):(e.exit("setextHeadingLineSequence"),Ve(t)?Qe(e,l,"lineSuffix")(t):l(t))}function l(r){return null===r||He(r)?(e.exit("setextHeadingLine"),t(r)):n(r)}}},Ct=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],St=["pre","script","style","textarea"],It={concrete:!0,name:"htmlFlow",resolveTo:function(e){let t=e.length;for(;t--&&("enter"!==e[t][0]||"htmlFlow"!==e[t][1].type););return t>1&&"linePrefix"===e[t-2][1].type&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e},tokenize:function(e,t,n){const r=this;let o,i,l,a,s;return function(t){return function(t){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(t),c}(t)};function c(a){return 33===a?(e.consume(a),u):47===a?(e.consume(a),i=!0,d):63===a?(e.consume(a),o=3,r.interrupt?t:F):Me(a)?(e.consume(a),l=String.fromCharCode(a),h):n(a)}function u(i){return 45===i?(e.consume(i),o=2,f):91===i?(e.consume(i),o=5,a=0,p):Me(i)?(e.consume(i),o=4,r.interrupt?t:F):n(i)}function f(o){return 45===o?(e.consume(o),r.interrupt?t:F):n(o)}function p(o){return o==="CDATA[".charCodeAt(a++)?(e.consume(o),6===a?r.interrupt?t:I:p):n(o)}function d(t){return Me(t)?(e.consume(t),l=String.fromCharCode(t),h):n(t)}function h(a){if(null===a||47===a||62===a||qe(a)){const s=47===a,c=l.toLowerCase();return s||i||!St.includes(c)?Ct.includes(l.toLowerCase())?(o=6,s?(e.consume(a),m):r.interrupt?t(a):I(a)):(o=7,r.interrupt&&!r.parser.lazy[r.now().line]?n(a):i?g(a):y(a)):(o=1,r.interrupt?t(a):I(a))}return 45===a||ze(a)?(e.consume(a),l+=String.fromCharCode(a),h):n(a)}function m(o){return 62===o?(e.consume(o),r.interrupt?t:I):n(o)}function g(t){return Ve(t)?(e.consume(t),g):C(t)}function y(t){return 47===t?(e.consume(t),C):58===t||95===t||Me(t)?(e.consume(t),v):Ve(t)?(e.consume(t),y):C(t)}function v(t){return 45===t||46===t||58===t||95===t||ze(t)?(e.consume(t),v):k(t)}function k(t){return 61===t?(e.consume(t),b):Ve(t)?(e.consume(t),k):y(t)}function b(t){return null===t||60===t||61===t||62===t||96===t?n(t):34===t||39===t?(e.consume(t),s=t,x):Ve(t)?(e.consume(t),b):A(t)}function x(t){return t===s?(e.consume(t),s=null,w):null===t||He(t)?n(t):(e.consume(t),x)}function A(t){return null===t||34===t||39===t||47===t||60===t||61===t||62===t||96===t||qe(t)?k(t):(e.consume(t),A)}function w(e){return 47===e||62===e||Ve(e)?y(e):n(e)}function C(t){return 62===t?(e.consume(t),S):n(t)}function S(t){return null===t||He(t)?I(t):Ve(t)?(e.consume(t),S):n(t)}function I(t){return 45===t&&2===o?(e.consume(t),P):60===t&&1===o?(e.consume(t),O):62===t&&4===o?(e.consume(t),M):63===t&&3===o?(e.consume(t),F):93===t&&5===o?(e.consume(t),L):!He(t)||6!==o&&7!==o?null===t||He(t)?(e.exit("htmlFlowData"),E(t)):(e.consume(t),I):(e.exit("htmlFlowData"),e.check(Et,z,E)(t))}function E(t){return e.check(Bt,B,z)(t)}function B(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),T}function T(t){return null===t||He(t)?E(t):(e.enter("htmlFlowData"),I(t))}function P(t){return 45===t?(e.consume(t),F):I(t)}function O(t){return 47===t?(e.consume(t),l="",D):I(t)}function D(t){if(62===t){const n=l.toLowerCase();return St.includes(n)?(e.consume(t),M):I(t)}return Me(t)&&l.length<8?(e.consume(t),l+=String.fromCharCode(t),D):I(t)}function L(t){return 93===t?(e.consume(t),F):I(t)}function F(t){return 62===t?(e.consume(t),M):45===t&&2===o?(e.consume(t),F):I(t)}function M(t){return null===t||He(t)?(e.exit("htmlFlowData"),z(t)):(e.consume(t),M)}function z(n){return e.exit("htmlFlow"),t(n)}}},Et={partial:!0,tokenize:function(e,t,n){return function(r){return e.enter("lineEnding"),e.consume(r),e.exit("lineEnding"),e.attempt(Xe,t,n)}}},Bt={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return He(t)?(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o):n(t)};function o(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},Tt={partial:!0,tokenize:function(e,t,n){const r=this;return function(t){return null===t?n(t):(e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),o)};function o(e){return r.parser.lazy[r.now().line]?n(e):t(e)}}},Pt={concrete:!0,name:"codeFenced",tokenize:function(e,t,n){const r=this,o={partial:!0,tokenize:function(e,t,n){let o=0;return function(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),l};function l(t){return e.enter("codeFencedFence"),Ve(t)?Qe(e,s,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):s(t)}function s(t){return t===i?(e.enter("codeFencedFenceSequence"),c(t)):n(t)}function c(t){return t===i?(o++,e.consume(t),c):o>=a?(e.exit("codeFencedFenceSequence"),Ve(t)?Qe(e,u,"whitespace")(t):u(t)):n(t)}function u(r){return null===r||He(r)?(e.exit("codeFencedFence"),t(r)):n(r)}}};let i,l=0,a=0;return function(t){return function(t){const n=r.events[r.events.length-1];return l=n&&"linePrefix"===n[1].type?n[2].sliceSerialize(n[1],!0).length:0,i=t,e.enter("codeFenced"),e.enter("codeFencedFence"),e.enter("codeFencedFenceSequence"),s(t)}(t)};function s(t){return t===i?(a++,e.consume(t),s):a<3?n(t):(e.exit("codeFencedFenceSequence"),Ve(t)?Qe(e,c,"whitespace")(t):c(t))}function c(n){return null===n||He(n)?(e.exit("codeFencedFence"),r.interrupt?t(n):e.check(Tt,d,v)(n)):(e.enter("codeFencedFenceInfo"),e.enter("chunkString",{contentType:"string"}),u(n))}function u(t){return null===t||He(t)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),c(t)):Ve(t)?(e.exit("chunkString"),e.exit("codeFencedFenceInfo"),Qe(e,f,"whitespace")(t)):96===t&&t===i?n(t):(e.consume(t),u)}function f(t){return null===t||He(t)?c(t):(e.enter("codeFencedFenceMeta"),e.enter("chunkString",{contentType:"string"}),p(t))}function p(t){return null===t||He(t)?(e.exit("chunkString"),e.exit("codeFencedFenceMeta"),c(t)):96===t&&t===i?n(t):(e.consume(t),p)}function d(t){return e.attempt(o,v,h)(t)}function h(t){return e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),m}function m(t){return l>0&&Ve(t)?Qe(e,g,"linePrefix",l+1)(t):g(t)}function g(t){return null===t||He(t)?e.check(Tt,d,v)(t):(e.enter("codeFlowValue"),y(t))}function y(t){return null===t||He(t)?(e.exit("codeFlowValue"),g(t)):(e.consume(t),y)}function v(n){return e.exit("codeFenced"),t(n)}}},Ot=document.createElement("i");function Dt(e){const t="&"+e+";";Ot.innerHTML=t;const n=Ot.textContent;return(59!==n.charCodeAt(n.length-1)||"semi"===e)&&n!==t&&n}const Lt={name:"characterReference",tokenize:function(e,t,n){const r=this;let o,i,l=0;return function(t){return e.enter("characterReference"),e.enter("characterReferenceMarker"),e.consume(t),e.exit("characterReferenceMarker"),a};function a(t){return 35===t?(e.enter("characterReferenceMarkerNumeric"),e.consume(t),e.exit("characterReferenceMarkerNumeric"),s):(e.enter("characterReferenceValue"),o=31,i=ze,c(t))}function s(t){return 88===t||120===t?(e.enter("characterReferenceMarkerHexadecimal"),e.consume(t),e.exit("characterReferenceMarkerHexadecimal"),e.enter("characterReferenceValue"),o=6,i=je,c):(e.enter("characterReferenceValue"),o=7,i=Ne,c(t))}function c(a){if(59===a&&l){const o=e.exit("characterReferenceValue");return i!==ze||Dt(r.sliceSerialize(o))?(e.enter("characterReferenceMarker"),e.consume(a),e.exit("characterReferenceMarker"),e.exit("characterReference"),t):n(a)}return i(a)&&l++1&&e[u][1].end.offset-e[u][1].start.offset>1?2:1;const f={...e[n][1].end},p={...e[u][1].start};Vt(f,-a),Vt(p,a),i={type:a>1?"strongSequence":"emphasisSequence",start:f,end:{...e[n][1].end}},l={type:a>1?"strongSequence":"emphasisSequence",start:{...e[u][1].start},end:p},o={type:a>1?"strongText":"emphasisText",start:{...e[n][1].end},end:{...e[u][1].start}},r={type:a>1?"strong":"emphasis",start:{...i.start},end:{...l.end}},e[n][1].end={...i.start},e[u][1].start={...l.end},s=[],e[n][1].end.offset-e[n][1].start.offset&&(s=Ie(s,[["enter",e[n][1],t],["exit",e[n][1],t]])),s=Ie(s,[["enter",r,t],["enter",i,t],["exit",i,t],["enter",o,t]]),s=Ie(s,zt(t.parser.constructs.insideSpan.null,e.slice(n+1,u),t)),s=Ie(s,[["exit",o,t],["enter",l,t],["exit",l,t],["exit",r,t]]),e[u][1].end.offset-e[u][1].start.offset?(c=2,s=Ie(s,[["enter",e[u][1],t],["exit",e[u][1],t]])):c=0,Se(e,n-1,u-n+3,s),u=n+s.length-c-2;break}for(u=-1;++u-1){const e=l[0];"string"==typeof e?l[0]=e.slice(r):l.shift()}i>0&&l.push(e[o].slice(0,i))}return l}(l,e)}function h(){const{_bufferIndex:e,_index:t,line:n,column:o,offset:i}=r;return{_bufferIndex:e,_index:t,line:n,column:o,offset:i}}function m(e){s=void 0,f=e,p=p(e)}function g(e,t){t.restore()}function y(e,t){return function(n,o,i){let l,f,p,d;return Array.isArray(n)?m(n):"tokenize"in n?m([n]):function(e){return function(t){const n=null!==t&&e[t],r=null!==t&&e.null;return m([...Array.isArray(n)?n:n?[n]:[],...Array.isArray(r)?r:r?[r]:[]])(t)}}(n);function m(e){return l=e,f=0,0===e.length?i:g(e[f])}function g(e){return function(n){return d=function(){const e=h(),t=u.previous,n=u.currentConstruct,o=u.events.length,i=Array.from(a);return{from:o,restore:function(){r=e,u.previous=t,u.currentConstruct=n,u.events.length=o,a=i,k()}}}(),p=e,e.partial||(u.currentConstruct=e),e.name&&u.parser.constructs.disable.null.includes(e.name)?v():e.tokenize.call(t?Object.assign(Object.create(u),t):u,c,y,v)(n)}}function y(t){return s=!0,e(p,d),o}function v(e){return s=!0,d.restore(),++f13&&n<32||n>126&&n<160||n>55295&&n<57344||n>64975&&n<65008||!(65535&~n)||65534==(65535&n)||n>1114111?"�":String.fromCodePoint(n)}const cn=/\\([!-/:-@[-`{-~])|&(#(?:\d{1,7}|x[\da-f]{1,6})|[\da-z]{1,31});/gi;function un(e,t,n){if(t)return t;if(35===n.charCodeAt(0)){const e=n.charCodeAt(1),t=120===e||88===e;return sn(n.slice(t?2:1),t?16:10)}return Dt(n)||e}const fn={}.hasOwnProperty;function pn(e,n,r){return"string"!=typeof n&&(r=n,n=void 0),function(e){const t={transforms:[],canContainEols:["emphasis","fragment","heading","paragraph","strong"],enter:{autolink:o(v),autolinkProtocol:u,autolinkEmail:u,atxHeading:o(m),blockQuote:o((function(){return{type:"blockquote",children:[]}})),characterEscape:u,characterReference:u,codeFenced:o(h),codeFencedFenceInfo:i,codeFencedFenceMeta:i,codeIndented:o(h,i),codeText:o((function(){return{type:"inlineCode",value:""}}),i),codeTextData:u,data:u,codeFlowValue:u,definition:o((function(){return{type:"definition",identifier:"",label:null,title:null,url:""}})),definitionDestinationString:i,definitionLabelString:i,definitionTitleString:i,emphasis:o((function(){return{type:"emphasis",children:[]}})),hardBreakEscape:o(g),hardBreakTrailing:o(g),htmlFlow:o(y,i),htmlFlowData:u,htmlText:o(y,i),htmlTextData:u,image:o((function(){return{type:"image",title:null,url:"",alt:null}})),label:i,link:o(v),listItem:o((function(e){return{type:"listItem",spread:e._spread,checked:null,children:[]}})),listItemValue:function(e){this.data.expectingFirstListItemValue&&(this.stack[this.stack.length-2].start=Number.parseInt(this.sliceSerialize(e),10),this.data.expectingFirstListItemValue=void 0)},listOrdered:o(k,(function(){this.data.expectingFirstListItemValue=!0})),listUnordered:o(k),paragraph:o((function(){return{type:"paragraph",children:[]}})),reference:function(){this.data.referenceType="collapsed"},referenceString:i,resourceDestinationString:i,resourceTitleString:i,setextHeading:o(m),strong:o((function(){return{type:"strong",children:[]}})),thematicBreak:o((function(){return{type:"thematicBreak"}}))},exit:{atxHeading:a(),atxHeadingSequence:function(e){const t=this.stack[this.stack.length-1];if(!t.depth){const n=this.sliceSerialize(e).length;t.depth=n}},autolink:a(),autolinkEmail:function(e){f.call(this,e),this.stack[this.stack.length-1].url="mailto:"+this.sliceSerialize(e)},autolinkProtocol:function(e){f.call(this,e),this.stack[this.stack.length-1].url=this.sliceSerialize(e)},blockQuote:a(),characterEscapeValue:f,characterReferenceMarkerHexadecimal:d,characterReferenceMarkerNumeric:d,characterReferenceValue:function(e){const t=this.sliceSerialize(e),n=this.data.characterReferenceType;let r;n?(r=sn(t,"characterReferenceMarkerNumeric"===n?10:16),this.data.characterReferenceType=void 0):r=Dt(t);this.stack[this.stack.length-1].value+=r},characterReference:function(e){this.stack.pop().position.end=dn(e.end)},codeFenced:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/^(\r?\n|\r)|(\r?\n|\r)$/g,""),this.data.flowCodeInside=void 0})),codeFencedFence:function(){this.data.flowCodeInside||(this.buffer(),this.data.flowCodeInside=!0)},codeFencedFenceInfo:function(){const e=this.resume();this.stack[this.stack.length-1].lang=e},codeFencedFenceMeta:function(){const e=this.resume();this.stack[this.stack.length-1].meta=e},codeFlowValue:f,codeIndented:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e.replace(/(\r?\n|\r)$/g,"")})),codeText:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),codeTextData:f,data:f,definition:a(),definitionDestinationString:function(){const e=this.resume();this.stack[this.stack.length-1].url=e},definitionLabelString:function(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()},definitionTitleString:function(){const e=this.resume();this.stack[this.stack.length-1].title=e},emphasis:a(),hardBreakEscape:a(p),hardBreakTrailing:a(p),htmlFlow:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),htmlFlowData:f,htmlText:a((function(){const e=this.resume();this.stack[this.stack.length-1].value=e})),htmlTextData:f,image:a((function(){const e=this.stack[this.stack.length-1];if(this.data.inReference){const t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0})),label:function(){const e=this.stack[this.stack.length-1],t=this.resume(),n=this.stack[this.stack.length-1];if(this.data.inReference=!0,"link"===n.type){const t=e.children;n.children=t}else n.alt=t},labelText:function(e){const t=this.sliceSerialize(e),n=this.stack[this.stack.length-2];n.label=function(e){return e.replace(cn,un)}(t),n.identifier=yt(t).toLowerCase()},lineEnding:function(e){const n=this.stack[this.stack.length-1];if(this.data.atHardBreak)return n.children[n.children.length-1].position.end=dn(e.end),void(this.data.atHardBreak=void 0);!this.data.setextHeadingSlurpLineEnding&&t.canContainEols.includes(n.type)&&(u.call(this,e),f.call(this,e))},link:a((function(){const e=this.stack[this.stack.length-1];if(this.data.inReference){const t=this.data.referenceType||"shortcut";e.type+="Reference",e.referenceType=t,delete e.url,delete e.title}else delete e.identifier,delete e.label;this.data.referenceType=void 0})),listItem:a(),listOrdered:a(),listUnordered:a(),paragraph:a(),referenceString:function(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase(),this.data.referenceType="full"},resourceDestinationString:function(){const e=this.resume();this.stack[this.stack.length-1].url=e},resourceTitleString:function(){const e=this.resume();this.stack[this.stack.length-1].title=e},resource:function(){this.data.inReference=void 0},setextHeading:a((function(){this.data.setextHeadingSlurpLineEnding=void 0})),setextHeadingLineSequence:function(e){this.stack[this.stack.length-1].depth=61===this.sliceSerialize(e).codePointAt(0)?1:2},setextHeadingText:function(){this.data.setextHeadingSlurpLineEnding=!0},strong:a(),thematicBreak:a()}};hn(t,(e||{}).mdastExtensions||[]);const n={};return function(e){let o={type:"root",children:[]};const a={stack:[o],tokenStack:[],config:t,enter:l,exit:s,buffer:i,resume:c,data:n},u=[];let f=-1;for(;++f0){const e=a.tokenStack[a.tokenStack.length-1];(e[1]||gn).call(a,void 0,e[0])}for(o.position={start:dn(e.length>0?e[0][1].start:{line:1,column:1,offset:0}),end:dn(e.length>0?e[e.length-2][1].end:{line:1,column:1,offset:0})},f=-1;++f((e,t)=>{const n=(t,n)=>(e.set(n,t),t),r=o=>{if(e.has(o))return e.get(o);const[i,l]=t[o];switch(i){case 0:case-1:return n(l,o);case 1:{const e=n([],o);for(const t of l)e.push(r(t));return e}case 2:{const e=n({},o);for(const[t,n]of l)e[r(t)]=r(n);return e}case 3:return n(new Date(l),o);case 4:{const{source:e,flags:t}=l;return n(new RegExp(e,t),o)}case 5:{const e=n(new Map,o);for(const[t,n]of l)e.set(r(t),r(n));return e}case 6:{const e=n(new Set,o);for(const t of l)e.add(r(t));return e}case 7:{const{name:e,message:t}=l;return n(new vn[e](t),o)}case 8:return n(BigInt(l),o);case"BigInt":return n(Object(BigInt(l)),o);case"ArrayBuffer":return n(new Uint8Array(l).buffer,l);case"DataView":{const{buffer:e}=new Uint8Array(l);return n(new DataView(e),l)}}return n(new vn[i](l),o)};return r})(new Map,e)(0),bn="",{toString:xn}={},{keys:An}=Object,wn=e=>{const t=typeof e;if("object"!==t||!e)return[0,t];const n=xn.call(e).slice(8,-1);switch(n){case"Array":return[1,bn];case"Object":return[2,bn];case"Date":return[3,bn];case"RegExp":return[4,bn];case"Map":return[5,bn];case"Set":return[6,bn];case"DataView":return[1,n]}return n.includes("Array")?[1,n]:n.includes("Error")?[7,n]:[2,n]},Cn=([e,t])=>0===e&&("function"===t||"symbol"===t),Sn=(e,{json:t,lossy:n}={})=>{const r=[];return((e,t,n,r)=>{const o=(e,t)=>{const o=r.push(e)-1;return n.set(t,o),o},i=r=>{if(n.has(r))return n.get(r);let[l,a]=wn(r);switch(l){case 0:{let t=r;switch(a){case"bigint":l=8,t=r.toString();break;case"function":case"symbol":if(e)throw new TypeError("unable to serialize "+a);t=null;break;case"undefined":return o([-1],r)}return o([l,t],r)}case 1:{if(a){let e=r;return"DataView"===a?e=new Uint8Array(r.buffer):"ArrayBuffer"===a&&(e=new Uint8Array(r)),o([a,[...e]],r)}const e=[],t=o([l,e],r);for(const t of r)e.push(i(t));return t}case 2:{if(a)switch(a){case"BigInt":return o([a,r.toString()],r);case"Boolean":case"Number":case"String":return o([a,r.valueOf()],r)}if(t&&"toJSON"in r)return i(r.toJSON());const n=[],s=o([l,n],r);for(const t of An(r))!e&&Cn(wn(r[t]))||n.push([i(t),i(r[t])]);return s}case 3:return o([l,r.toISOString()],r);case 4:{const{source:e,flags:t}=r;return o([l,{source:e,flags:t}],r)}case 5:{const t=[],n=o([l,t],r);for(const[n,o]of r)(e||!Cn(wn(n))&&!Cn(wn(o)))&&t.push([i(n),i(o)]);return n}case 6:{const t=[],n=o([l,t],r);for(const n of r)!e&&Cn(wn(n))||t.push(i(n));return n}}const{message:s}=r;return o([l,{name:a,message:s}],r)};return i})(!(t||n),!!t,new Map,r)(e),r},In="function"==typeof structuredClone?(e,t)=>t&&("json"in t||"lossy"in t)?kn(Sn(e,t)):structuredClone(e):(e,t)=>kn(Sn(e,t));function En(e){const t=[];let n=-1,r=0,o=0;for(;++n55295&&i<57344){const t=e.charCodeAt(n+1);i<56320&&t>56319&&t<57344?(l=String.fromCharCode(i,t),o=1):l="�"}else l=String.fromCharCode(i);l&&(t.push(e.slice(r,n),encodeURIComponent(l)),r=n+o+1,l=""),o&&(n+=o,o=0)}return t.join("")+e.slice(r)}function Bn(e,t){const n=[{type:"text",value:"↩"}];return t>1&&n.push({type:"element",tagName:"sup",properties:{},children:[{type:"text",value:String(t)}]}),n}function Tn(e,t){return"Back to reference "+(e+1)+(t>1?"-"+t:"")}const Pn=function(e){if(null==e)return Dn;if("function"==typeof e)return On(e);if("object"==typeof e)return Array.isArray(e)?function(e){const t=[];let n=-1;for(;++n":"")+")"})}return u;function u(){let c,u,f,p=Ln;if((!t||i(o,a,s[s.length-1]||void 0))&&(p=function(e){return Array.isArray(e)?e:"number"==typeof e?[true,e]:null==e?Ln:[e]}(n(o,s)),p[0]===Fn))return p;if("children"in o&&o.children){const t=o;if(t.children&&"skip"!==p[0])for(u=(r?t.children.length:-1)+l,f=s.concat(t);u>-1&&u1:t}function Nn(e){const t=String(e),n=/\r?\n|\r/g;let r=n.exec(t),o=0;const i=[];for(;r;)i.push(jn(t.slice(o,r.index),o>0,!0),r[0]),o=r.index+r[0].length,r=n.exec(t);return i.push(jn(t.slice(o),o>0,!1)),i.join("")}function jn(e,t,n){let r=0,o=e.length;if(t){let t=e.codePointAt(r);for(;9===t||32===t;)r++,t=e.codePointAt(r)}if(n){let t=e.codePointAt(o-1);for(;9===t||32===t;)o--,t=e.codePointAt(o-1)}return o>r?e.slice(r,o):""}const Un={blockquote:function(e,t){const n={type:"element",tagName:"blockquote",properties:{},children:e.wrap(e.all(t),!0)};return e.patch(t,n),e.applyData(t,n)},break:function(e,t){const n={type:"element",tagName:"br",properties:{},children:[]};return e.patch(t,n),[e.applyData(t,n),{type:"text",value:"\n"}]},code:function(e,t){const n=t.value?t.value+"\n":"",r={};t.lang&&(r.className=["language-"+t.lang]);let o={type:"element",tagName:"code",properties:r,children:[{type:"text",value:n}]};return t.meta&&(o.data={meta:t.meta}),e.patch(t,o),o=e.applyData(t,o),o={type:"element",tagName:"pre",properties:{},children:[o]},e.patch(t,o),o},delete:function(e,t){const n={type:"element",tagName:"del",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},emphasis:function(e,t){const n={type:"element",tagName:"em",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},footnoteReference:function(e,t){const n="string"==typeof e.options.clobberPrefix?e.options.clobberPrefix:"user-content-",r=String(t.identifier).toUpperCase(),o=En(r.toLowerCase()),i=e.footnoteOrder.indexOf(r);let l,a=e.footnoteCounts.get(r);void 0===a?(a=0,e.footnoteOrder.push(r),l=e.footnoteOrder.length):l=i+1,a+=1,e.footnoteCounts.set(r,a);const s={type:"element",tagName:"a",properties:{href:"#"+n+"fn-"+o,id:n+"fnref-"+o+(a>1?"-"+a:""),dataFootnoteRef:!0,ariaDescribedBy:["footnote-label"]},children:[{type:"text",value:String(l)}]};e.patch(t,s);const c={type:"element",tagName:"sup",properties:{},children:[s]};return e.patch(t,c),e.applyData(t,c)},heading:function(e,t){const n={type:"element",tagName:"h"+t.depth,properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},html:function(e,t){if(e.options.allowDangerousHtml){const n={type:"raw",value:t.value};return e.patch(t,n),e.applyData(t,n)}},imageReference:function(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return _n(e,t);const o={src:En(r.url||""),alt:t.alt};null!==r.title&&void 0!==r.title&&(o.title=r.title);const i={type:"element",tagName:"img",properties:o,children:[]};return e.patch(t,i),e.applyData(t,i)},image:function(e,t){const n={src:En(t.url)};null!==t.alt&&void 0!==t.alt&&(n.alt=t.alt),null!==t.title&&void 0!==t.title&&(n.title=t.title);const r={type:"element",tagName:"img",properties:n,children:[]};return e.patch(t,r),e.applyData(t,r)},inlineCode:function(e,t){const n={type:"text",value:t.value.replace(/\r?\n|\r/g," ")};e.patch(t,n);const r={type:"element",tagName:"code",properties:{},children:[n]};return e.patch(t,r),e.applyData(t,r)},linkReference:function(e,t){const n=String(t.identifier).toUpperCase(),r=e.definitionById.get(n);if(!r)return _n(e,t);const o={href:En(r.url||"")};null!==r.title&&void 0!==r.title&&(o.title=r.title);const i={type:"element",tagName:"a",properties:o,children:e.all(t)};return e.patch(t,i),e.applyData(t,i)},link:function(e,t){const n={href:En(t.url)};null!==t.title&&void 0!==t.title&&(n.title=t.title);const r={type:"element",tagName:"a",properties:n,children:e.all(t)};return e.patch(t,r),e.applyData(t,r)},listItem:function(e,t,n){const r=e.all(t),o=n?function(e){let t=!1;if("list"===e.type){t=e.spread||!1;const n=e.children;let r=-1;for(;!t&&++r0&&n.children.unshift({type:"text",value:" "}),n.children.unshift({type:"element",tagName:"input",properties:{type:"checkbox",checked:t.checked,disabled:!0},children:[]}),i.className=["task-list-item"]}let a=-1;for(;++a0){const r={type:"element",tagName:"tbody",properties:{},children:e.wrap(n,!0)},i=J(t.children[1]),l=Q(t.children[t.children.length-1]);i&&l&&(r.position={start:i,end:l}),o.push(r)}const i={type:"element",tagName:"table",properties:{},children:e.wrap(o,!0)};return e.patch(t,i),e.applyData(t,i)},tableCell:function(e,t){const n={type:"element",tagName:"td",properties:{},children:e.all(t)};return e.patch(t,n),e.applyData(t,n)},tableRow:function(e,t,n){const r=n?n.children:void 0,o=0===(r?r.indexOf(t):1)?"th":"td",i=n&&"table"===n.type?n.align:void 0,l=i?i.length:t.children.length;let a=-1;const s=[];for(;++a0&&n.push({type:"text",value:"\n"}),n}function Jn(e){let t=0,n=e.charCodeAt(t);for(;9===n||32===n;)t++,n=e.charCodeAt(t);return e.slice(t)}function Zn(e,t){const n=function(e,t){const n=t||Vn,r=new Map,o=new Map,i=new Map,l={...Un,...n.handlers},a={all:function(e){const t=[];if("children"in e){const n=e.children;let r=-1;for(;++r0&&f.push({type:"text",value:" "});let e="string"==typeof n?n:n(s,u);"string"==typeof e&&(e={type:"text",value:e}),f.push({type:"element",tagName:"a",properties:{href:"#"+t+"fnref-"+c+(u>1?"-"+u:""),dataFootnoteBackref:"",ariaLabel:"string"==typeof r?r:r(s,u),className:["data-footnote-backref"]},children:Array.isArray(e)?e:[e]})}const d=i[i.length-1];if(d&&"element"===d.type&&"p"===d.tagName){const e=d.children[d.children.length-1];e&&"text"===e.type?e.value+=" ":d.children.push({type:"text",value:" "}),d.children.push(...f)}else i.push(...f);const h={type:"element",tagName:"li",properties:{id:t+"fn-"+c},children:e.wrap(i,!0)};e.patch(o,h),a.push(h)}if(0!==a.length)return{type:"element",tagName:"section",properties:{dataFootnotes:!0,className:["footnotes"]},children:[{type:"element",tagName:i,properties:{...In(l),id:"footnote-label"},children:[{type:"text",value:o}]},{type:"text",value:"\n"},{type:"element",tagName:"ol",properties:{},children:e.wrap(a,!0)},{type:"text",value:"\n"}]}}(n),i=Array.isArray(r)?{type:"root",children:r}:r||{type:"root",children:[]};return o&&i.children.push({type:"text",value:"\n"},o),i}function Kn(e,t){return e&&"run"in e?async function(n,r){const o=Zn(n,{file:r,...t});await e.run(o,r)}:function(n,r){return Zn(n,{file:r,...e||t})}}function Xn(e){if(e)throw e}var Gn=n(849);function er(e){if("object"!=typeof e||null===e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)}const tr=function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');lr(e);let n,r=0,o=-1,i=e.length;if(void 0===t||0===t.length||t.length>e.length){for(;i--;)if(47===e.codePointAt(i)){if(n){r=i+1;break}}else o<0&&(n=!0,o=i+1);return o<0?"":e.slice(r,o)}if(t===e)return"";let l=-1,a=t.length-1;for(;i--;)if(47===e.codePointAt(i)){if(n){r=i+1;break}}else l<0&&(n=!0,l=i+1),a>-1&&(e.codePointAt(i)===t.codePointAt(a--)?a<0&&(o=i):(a=-1,o=l));return r===o?o=l:o<0&&(o=e.length),e.slice(r,o)},nr=function(e){if(lr(e),0===e.length)return".";let t,n=-1,r=e.length;for(;--r;)if(47===e.codePointAt(r)){if(t){n=r;break}}else t||(t=!0);return n<0?47===e.codePointAt(0)?"/":".":1===n&&47===e.codePointAt(0)?"//":e.slice(0,n)},rr=function(e){lr(e);let t,n=e.length,r=-1,o=0,i=-1,l=0;for(;n--;){const a=e.codePointAt(n);if(47!==a)r<0&&(t=!0,r=n+1),46===a?i<0?i=n:1!==l&&(l=1):i>-1&&(l=-1);else if(t){o=n+1;break}}return i<0||r<0||0===l||1===l&&i===r-1&&i===o+1?"":e.slice(i,r)},or=function(...e){let t,n=-1;for(;++n2){if(r=o.lastIndexOf("/"),r!==o.length-1){r<0?(o="",i=0):(o=o.slice(0,r),i=o.length-1-o.lastIndexOf("/")),l=s,a=0;continue}}else if(o.length>0){o="",i=0,l=s,a=0;continue}t&&(o=o.length>0?o+"/..":"..",i=2)}else o.length>0?o+="/"+e.slice(l+1,s):o=e.slice(l+1,s),i=s-l-1;l=s,a=0}else 46===n&&a>-1?a++:a=-1}return o}(e,!t);return 0!==n.length||t||(n="."),n.length>0&&47===e.codePointAt(e.length-1)&&(n+="/"),t?"/"+n:n}(t)},ir="/";function lr(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}const ar=function(){return"/"};function sr(e){return Boolean(null!==e&&"object"==typeof e&&"href"in e&&e.href&&"protocol"in e&&e.protocol&&void 0===e.auth)}const cr=["history","path","basename","stem","extname","dirname"];class ur{constructor(e){let t;t=e?sr(e)?{path:e}:"string"==typeof e||function(e){return Boolean(e&&"object"==typeof e&&"byteLength"in e&&"byteOffset"in e)}(e)?{value:e}:e:{},this.cwd="cwd"in t?"":ar(),this.data={},this.history=[],this.messages=[],this.value,this.map,this.result,this.stored;let n,r=-1;for(;++rt.length;let l;i&&t.push(r);try{l=e.apply(this,t)}catch(e){if(i&&n)throw e;return r(e)}i||(l&&l.then&&"function"==typeof l.then?l.then(o,r):l instanceof Error?r(l):o(l))};function r(e,...r){n||(n=!0,t(e,...r))}function o(e){r(null,e)}}(a,o)(...l):r(null,...l)}}(null,...t)},use:function(n){if("function"!=typeof n)throw new TypeError("Expected `middelware` to be a function, not "+n);return e.push(n),t}};return t}()}copy(){const e=new gr;let t=-1;for(;++t0){let[r,...i]=t;const l=n[o][1];er(l)&&er(r)&&(r=Gn(!0,l,r)),n[o]=[e,r,...i]}}}}const yr=(new gr).freeze();function vr(e,t){if("function"!=typeof t)throw new TypeError("Cannot `"+e+"` without `parser`")}function kr(e,t){if("function"!=typeof t)throw new TypeError("Cannot `"+e+"` without `compiler`")}function br(e,t){if(t)throw new Error("Cannot call `"+e+"` on a frozen processor.\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.")}function xr(e){if(!er(e)||"string"!=typeof e.type)throw new TypeError("Expected node, got `"+e+"`")}function Ar(e,t,n){if(!n)throw new Error("`"+e+"` finished async. Use `"+t+"` instead")}function wr(e){return function(e){return Boolean(e&&"object"==typeof e&&"message"in e&&"messages"in e)}(e)?e:new ur(e)}const Cr=[],Sr={allowDangerousHtml:!0},Ir=/^(https?|ircs?|mailto|xmpp)$/i,Er=[{from:"astPlugins",id:"remove-buggy-html-in-markdown-parser"},{from:"allowDangerousHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"allowNode",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowElement"},{from:"allowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"allowedElements"},{from:"disallowedTypes",id:"replace-allownode-allowedtypes-and-disallowedtypes",to:"disallowedElements"},{from:"escapeHtml",id:"remove-buggy-html-in-markdown-parser"},{from:"includeElementIndex",id:"#remove-includeelementindex"},{from:"includeNodeIndex",id:"change-includenodeindex-to-includeelementindex"},{from:"linkTarget",id:"remove-linktarget"},{from:"plugins",id:"change-plugins-to-remarkplugins",to:"remarkPlugins"},{from:"rawSourcePos",id:"#remove-rawsourcepos"},{from:"renderers",id:"change-renderers-to-components",to:"components"},{from:"source",id:"change-source-to-children",to:"children"},{from:"sourcePos",id:"#remove-sourcepos"},{from:"transformImageUri",id:"#add-urltransform",to:"urlTransform"},{from:"transformLinkUri",id:"#add-urltransform",to:"urlTransform"}];function Br(e){const t=e.allowedElements,n=e.allowElement,r=e.children||"",o=e.className,i=e.components,l=e.disallowedElements,a=e.rehypePlugins||Cr,s=e.remarkPlugins||Cr,c=e.remarkRehypeOptions?{...e.remarkRehypeOptions,...Sr}:Sr,u=e.skipHtml,f=e.unwrapDisallowed,p=e.urlTransform||Tr,d=yr().use(yn).use(s).use(Kn,c).use(a),h=new ur;"string"==typeof r&&(h.value=r);for(const t of Er)Object.hasOwn(e,t.from)&&(t.from,t.to&&t.to,t.id);const m=d.parse(h);let g=d.runSync(m,h);return o&&(g={type:"element",tagName:"div",properties:{className:o},children:"root"===g.type?g.children:[g]}),zn(g,(function(e,r,o){if("raw"===e.type&&o&&"number"==typeof r)return u?o.children.splice(r,1):o.children[r]={type:"text",value:e.value},r;if("element"===e.type){let t;for(t in ke)if(Object.hasOwn(ke,t)&&Object.hasOwn(e.properties,t)){const n=e.properties[t],r=ke[t];(null===r||r.includes(e.tagName))&&(e.properties[t]=p(String(n||""),t,e))}}if("element"===e.type){let i=t?!t.includes(e.tagName):!!l&&l.includes(e.tagName);if(!i&&n&&"number"==typeof r&&(i=!n(e,r,o)),i&&o&&"number"==typeof r)return f&&e.children?o.children.splice(r,1,...e.children):o.children.splice(r,1),r}})),function(e,t){if(!t||void 0===t.Fragment)throw new TypeError("Expected `Fragment` in options");const n=t.filePath||void 0;let r;if(t.development){if("function"!=typeof t.jsxDEV)throw new TypeError("Expected `jsxDEV` in options when `development: true`");r=function(e,t){return function(n,r,o,i){const l=Array.isArray(o.children),a=J(n);return t(r,o,i,l,{columnNumber:a?a.column-1:void 0,fileName:e,lineNumber:a?a.line:void 0},void 0)}}(n,t.jsxDEV)}else{if("function"!=typeof t.jsx)throw new TypeError("Expected `jsx` in production options");if("function"!=typeof t.jsxs)throw new TypeError("Expected `jsxs` in production options");o=t.jsx,i=t.jsxs,r=function(e,t,n,r){const l=Array.isArray(n.children)?i:o;return r?l(t,n,r):l(t,n)}}var o,i;const l={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:r,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:n,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:!1!==t.passKeys,passNode:t.passNode||!1,schema:"svg"===t.space?N:R,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:!1!==t.tableCellAlignToStyle},a=ce(l,e,void 0);return a&&"string"!=typeof a?a:l.create(e,l.Fragment,{children:a||void 0},void 0)}(g,{Fragment:be.Fragment,components:i,ignoreInvalidStyle:!0,jsx:be.jsx,jsxs:be.jsxs,passKeys:!0,passNode:!0})}function Tr(e){const t=e.indexOf(":"),n=e.indexOf("?"),r=e.indexOf("#"),o=e.indexOf("/");return-1===t||-1!==o&&t>o||-1!==n&&t>n||-1!==r&&t>r||Ir.test(e.slice(0,t))?e:""}const Pr=window.PropTypes;var Or=n.n(Pr);function Dr(e,t){const n=String(e);if("string"!=typeof t)throw new TypeError("Expected character");let r=0,o=n.indexOf(t);for(;-1!==o;)r++,o=n.indexOf(t,o+t.length);return r}function Lr(e){return"function"==typeof e?e:function(){return e}}const Fr="phrasing",Mr=["autolink","link","image","label"];function zr(e){this.enter({type:"link",title:null,url:"",children:[]},e)}function _r(e){this.config.enter.autolinkProtocol.call(this,e)}function Rr(e){this.config.exit.autolinkProtocol.call(this,e)}function Nr(e){this.config.exit.data.call(this,e);const t=this.stack[this.stack.length-1];t.type,t.url="http://"+this.sliceSerialize(e)}function jr(e){this.config.exit.autolinkEmail.call(this,e)}function Ur(e){this.exit(e)}function Hr(e){!function(e,t,n){const r=Pn((n||{}).ignore||[]),o=function(e){const t=[];if(!Array.isArray(e))throw new TypeError("Expected find and replace tuple or list of tuples");const n=!e[0]||Array.isArray(e[0])?e:[e];let r=-1;for(;++r0?{type:"text",value:i}:void 0),!1===i?r.lastIndex=n+1:(a!==n&&u.push({type:"text",value:e.value.slice(a,n)}),Array.isArray(i)?u.push(...i):i&&u.push(i),a=n+f[0].length,c=!0),!r.global)break;f=r.exec(e.value)}return c?(a?\]}]+$/.exec(e);if(!t)return[e,void 0];e=e.slice(0,t.index);let n=t[0],r=n.indexOf(")");const o=Dr(e,"(");let i=Dr(e,")");for(;-1!==r&&o>i;)e+=n.slice(0,r+1),n=n.slice(r+1),r=n.indexOf(")"),i++;return[e,n]}(n+r);if(!l[0])return!1;const a={type:"link",title:null,url:i+t+l[0],children:[{type:"text",value:t+l[0]}]};return l[1]?[a,{type:"text",value:l[1]}]:a}function Vr(e,t,n,r){return!(!Yr(r,!0)||/[-\d_]$/.test(n))&&{type:"link",title:null,url:"mailto:"+t+"@"+n,children:[{type:"text",value:t+"@"+n}]}}function Yr(e,t){const n=e.input.charCodeAt(e.index-1);return(0===e.index||We(n)||Ye(n))&&(!t||47!==n)}function Wr(e){this.enter({type:"footnoteDefinition",identifier:"",label:"",children:[]},e)}function $r(){this.buffer()}function Qr(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()}function Jr(e){this.exit(e)}function Zr(e){this.enter({type:"footnoteReference",identifier:"",label:""},e)}function Kr(){this.buffer()}function Xr(e){const t=this.resume(),n=this.stack[this.stack.length-1];n.type,n.label=t,n.identifier=yt(this.sliceSerialize(e)).toLowerCase()}function Gr(e){this.exit(e)}function eo(e,t,n,r){const o=n.createTracker(r);let i=o.move("[^");const l=n.enter("footnoteReference"),a=n.enter("reference");return i+=o.move(n.safe(n.associationId(e),{...o.current(),before:i,after:"]"})),a(),l(),i+=o.move("]"),i}function to(e,t,n,r){const o=n.createTracker(r);let i=o.move("[^");const l=n.enter("footnoteDefinition"),a=n.enter("label");return i+=o.move(n.safe(n.associationId(e),{...o.current(),before:i,after:"]"})),a(),i+=o.move("]:"+(e.children&&e.children.length>0?" ":"")),o.shift(4),i+=o.move(n.indentLines(n.containerFlow(e,o.current()),no)),l(),i}function no(e,t,n){return 0===t?e:(n?"":" ")+e}eo.peek=function(){return"["};const ro=["autolink","destinationLiteral","destinationRaw","reference","titleQuote","titleApostrophe"];function oo(e){this.enter({type:"delete",children:[]},e)}function io(e){this.exit(e)}function lo(e,t,n,r){const o=n.createTracker(r),i=n.enter("strikethrough");let l=o.move("~~");return l+=n.containerPhrasing(e,{...o.current(),before:l,after:"~"}),l+=o.move("~~"),i(),l}function ao(e){return e.length}function so(e){const t="string"==typeof e?e.codePointAt(0):0;return 67===t||99===t?99:76===t||108===t?108:82===t||114===t?114:0}function co(e,t,n){return">"+(n?"":" ")+e}function uo(e,t,n){if("string"==typeof t&&(t=[t]),!t||0===t.length)return n;let r=-1;for(;++r",...s.current()})),c+=s.move(">")):(a=n.enter("destinationRaw"),c+=s.move(n.safe(e.url,{before:c,after:e.title?" ":")",...s.current()}))),a(),e.title&&(a=n.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(n.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),a()),c+=s.move(")"),l(),c}function bo(e,t,n,r){const o=e.referenceType,i=n.enter("imageReference");let l=n.enter("label");const a=n.createTracker(r);let s=a.move("![");const c=n.safe(e.alt,{before:s,after:"]",...a.current()});s+=a.move(c+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const f=n.safe(n.associationId(e),{before:s,after:"]",...a.current()});return l(),n.stack=u,i(),"full"!==o&&c&&c===f?"shortcut"===o?s=s.slice(0,-1):s+=a.move("]"):s+=a.move(f+"]"),s}function xo(e,t,n){let r=e.value||"",o="`",i=-1;for(;new RegExp("(^|[^`])"+o+"([^`]|$)").test(r);)o+="`";for(/[^ \r\n]/.test(r)&&(/^[ \r\n]/.test(r)&&/[ \r\n]$/.test(r)||/^`|`$/.test(r))&&(r=" "+r+" ");++i\u007F]/.test(e.url))}function wo(e,t,n,r){const o=ho(n),i='"'===o?"Quote":"Apostrophe",l=n.createTracker(r);let a,s;if(Ao(e,n)){const t=n.stack;n.stack=[],a=n.enter("autolink");let r=l.move("<");return r+=l.move(n.containerPhrasing(e,{before:r,after:">",...l.current()})),r+=l.move(">"),a(),n.stack=t,r}a=n.enter("link"),s=n.enter("label");let c=l.move("[");return c+=l.move(n.containerPhrasing(e,{before:c,after:"](",...l.current()})),c+=l.move("]("),s(),!e.url&&e.title||/[\0- \u007F]/.test(e.url)?(s=n.enter("destinationLiteral"),c+=l.move("<"),c+=l.move(n.safe(e.url,{before:c,after:">",...l.current()})),c+=l.move(">")):(s=n.enter("destinationRaw"),c+=l.move(n.safe(e.url,{before:c,after:e.title?" ":")",...l.current()}))),s(),e.title&&(s=n.enter(`title${i}`),c+=l.move(" "+o),c+=l.move(n.safe(e.title,{before:c,after:o,...l.current()})),c+=l.move(o),s()),c+=l.move(")"),a(),c}function Co(e,t,n,r){const o=e.referenceType,i=n.enter("linkReference");let l=n.enter("label");const a=n.createTracker(r);let s=a.move("[");const c=n.containerPhrasing(e,{before:s,after:"]",...a.current()});s+=a.move(c+"]["),l();const u=n.stack;n.stack=[],l=n.enter("reference");const f=n.safe(n.associationId(e),{before:s,after:"]",...a.current()});return l(),n.stack=u,i(),"full"!==o&&c&&c===f?"shortcut"===o?s=s.slice(0,-1):s+=a.move("]"):s+=a.move(f+"]"),s}function So(e){const t=e.options.bullet||"*";if("*"!==t&&"+"!==t&&"-"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.bullet`, expected `*`, `+`, or `-`");return t}function Io(e){const t=e.options.rule||"*";if("*"!==t&&"-"!==t&&"_"!==t)throw new Error("Cannot serialize rules with `"+t+"` for `options.rule`, expected `*`, `-`, or `_`");return t}lo.peek=function(){return"~"},yo.peek=function(e,t,n){return n.options.emphasis||"*"},vo.peek=function(){return"<"},ko.peek=function(){return"!"},bo.peek=function(){return"!"},xo.peek=function(){return"`"},wo.peek=function(e,t,n){return Ao(e,n)?"<":"["},Co.peek=function(){return"["};const Eo=Pn(["break","delete","emphasis","footnote","footnoteReference","image","imageReference","inlineCode","inlineMath","link","linkReference","mdxJsxTextElement","mdxTextExpression","strong","text","textDirective"]);function Bo(e,t,n,r){const o=function(e){const t=e.options.strong||"*";if("*"!==t&&"_"!==t)throw new Error("Cannot serialize strong with `"+t+"` for `options.strong`, expected `*`, or `_`");return t}(n),i=n.enter("strong"),l=n.createTracker(r),a=l.move(o+o);let s=l.move(n.containerPhrasing(e,{after:o,before:a,...l.current()}));const c=s.charCodeAt(0),u=go(r.before.charCodeAt(r.before.length-1),c,o);u.inside&&(s=mo(c)+s.slice(1));const f=s.charCodeAt(s.length-1),p=go(r.after.charCodeAt(0),f,o);p.inside&&(s=s.slice(0,-1)+mo(f));const d=l.move(o+o);return i(),n.attentionEncodeSurroundingInfo={after:p.outside,before:u.outside},a+s+d}Bo.peek=function(e,t,n){return n.options.strong||"*"};const To={blockquote:function(e,t,n,r){const o=n.enter("blockquote"),i=n.createTracker(r);i.move("> "),i.shift(2);const l=n.indentLines(n.containerFlow(e,i.current()),co);return o(),l},break:fo,code:function(e,t,n,r){const o=function(e){const t=e.options.fence||"`";if("`"!==t&&"~"!==t)throw new Error("Cannot serialize code with `"+t+"` for `options.fence`, expected `` ` `` or `~`");return t}(n),i=e.value||"",l="`"===o?"GraveAccent":"Tilde";if(function(e,t){return Boolean(!1===t.options.fences&&e.value&&!e.lang&&/[^ \r\n]/.test(e.value)&&!/^[\t ]*(?:[\r\n]|$)|(?:^|[\r\n])[\t ]*$/.test(e.value))}(e,n)){const e=n.enter("codeIndented"),t=n.indentLines(i,po);return e(),t}const a=n.createTracker(r),s=o.repeat(Math.max(function(e,t){const n=String(e);let r=n.indexOf(t),o=r,i=0,l=0;if("string"!=typeof t)throw new TypeError("Expected substring");for(;-1!==r;)r===o?++i>l&&(l=i):i=1,o=r+t.length,r=n.indexOf(t,o);return l}(i,o)+1,3)),c=n.enter("codeFenced");let u=a.move(s);if(e.lang){const t=n.enter(`codeFencedLang${l}`);u+=a.move(n.safe(e.lang,{before:u,after:" ",encode:["`"],...a.current()})),t()}if(e.lang&&e.meta){const t=n.enter(`codeFencedMeta${l}`);u+=a.move(" "),u+=a.move(n.safe(e.meta,{before:u,after:"\n",encode:["`"],...a.current()})),t()}return u+=a.move("\n"),i&&(u+=a.move(i+"\n")),u+=a.move(s),c(),u},definition:function(e,t,n,r){const o=ho(n),i='"'===o?"Quote":"Apostrophe",l=n.enter("definition");let a=n.enter("label");const s=n.createTracker(r);let c=s.move("[");return c+=s.move(n.safe(n.associationId(e),{before:c,after:"]",...s.current()})),c+=s.move("]: "),a(),!e.url||/[\0- \u007F]/.test(e.url)?(a=n.enter("destinationLiteral"),c+=s.move("<"),c+=s.move(n.safe(e.url,{before:c,after:">",...s.current()})),c+=s.move(">")):(a=n.enter("destinationRaw"),c+=s.move(n.safe(e.url,{before:c,after:e.title?" ":"\n",...s.current()}))),a(),e.title&&(a=n.enter(`title${i}`),c+=s.move(" "+o),c+=s.move(n.safe(e.title,{before:c,after:o,...s.current()})),c+=s.move(o),a()),l(),c},emphasis:yo,hardBreak:fo,heading:function(e,t,n,r){const o=Math.max(Math.min(6,e.depth||1),1),i=n.createTracker(r);if(function(e,t){let n=!1;return zn(e,(function(e){if("value"in e&&/\r?\n|\r/.test(e.value)||"break"===e.type)return n=!0,Fn})),Boolean((!e.depth||e.depth<3)&&Ae(e)&&(t.options.setext||n))}(e,n)){const t=n.enter("headingSetext"),r=n.enter("phrasing"),l=n.containerPhrasing(e,{...i.current(),before:"\n",after:"\n"});return r(),t(),l+"\n"+(1===o?"=":"-").repeat(l.length-(Math.max(l.lastIndexOf("\r"),l.lastIndexOf("\n"))+1))}const l="#".repeat(o),a=n.enter("headingAtx"),s=n.enter("phrasing");i.move(l+" ");let c=n.containerPhrasing(e,{before:"# ",after:"\n",...i.current()});return/^[\t ]/.test(c)&&(c=mo(c.charCodeAt(0))+c.slice(1)),c=c?l+" "+c:l,n.options.closeAtx&&(c+=" "+l),s(),a(),c},html:vo,image:ko,imageReference:bo,inlineCode:xo,link:wo,linkReference:Co,list:function(e,t,n,r){const o=n.enter("list"),i=n.bulletCurrent;let l=e.ordered?function(e){const t=e.options.bulletOrdered||".";if("."!==t&&")"!==t)throw new Error("Cannot serialize items with `"+t+"` for `options.bulletOrdered`, expected `.` or `)`");return t}(n):So(n);const a=e.ordered?"."===l?")":".":function(e){const t=So(e),n=e.options.bulletOther;if(!n)return"*"===t?"-":"*";if("*"!==n&&"+"!==n&&"-"!==n)throw new Error("Cannot serialize items with `"+n+"` for `options.bulletOther`, expected `*`, `+`, or `-`");if(n===t)throw new Error("Expected `bullet` (`"+t+"`) and `bulletOther` (`"+n+"`) to be different");return n}(n);let s=!(!t||!n.bulletLastUsed)&&l===n.bulletLastUsed;if(!e.ordered){const t=e.children?e.children[0]:void 0;if("*"!==l&&"-"!==l||!t||t.children&&t.children[0]||"list"!==n.stack[n.stack.length-1]||"listItem"!==n.stack[n.stack.length-2]||"list"!==n.stack[n.stack.length-3]||"listItem"!==n.stack[n.stack.length-4]||0!==n.indexStack[n.indexStack.length-1]||0!==n.indexStack[n.indexStack.length-2]||0!==n.indexStack[n.indexStack.length-3]||(s=!0),Io(n)===l&&t){let t=-1;for(;++t-1?t.start:1)+(!1===n.options.incrementListMarker?0:t.children.indexOf(e))+i);let l=i.length+1;("tab"===o||"mixed"===o&&(t&&"list"===t.type&&t.spread||e.spread))&&(l=4*Math.ceil(l/4));const a=n.createTracker(r);a.move(i+" ".repeat(l-i.length)),a.shift(l);const s=n.enter("listItem"),c=n.indentLines(n.containerFlow(e,a.current()),(function(e,t,n){return t?(n?"":" ".repeat(l))+e:(n?i:i+" ".repeat(l-i.length))+e}));return s(),c},paragraph:function(e,t,n,r){const o=n.enter("paragraph"),i=n.enter("phrasing"),l=n.containerPhrasing(e,r);return i(),o(),l},root:function(e,t,n,r){return(e.children.some((function(e){return Eo(e)}))?n.containerPhrasing:n.containerFlow).call(n,e,r)},strong:Bo,text:function(e,t,n,r){return n.safe(e.value,r)},thematicBreak:function(e,t,n){const r=(Io(n)+(n.options.ruleSpaces?" ":"")).repeat(function(e){const t=e.options.ruleRepetition||3;if(t<3)throw new Error("Cannot serialize rules with repetition `"+t+"` for `options.ruleRepetition`, expected `3` or more");return t}(n));return n.options.ruleSpaces?r.slice(0,-1):r}};function Po(e){const t=e._align;this.enter({type:"table",align:t.map((function(e){return"none"===e?null:e})),children:[]},e),this.data.inTable=!0}function Oo(e){this.exit(e),this.data.inTable=void 0}function Do(e){this.enter({type:"tableRow",children:[]},e)}function Lo(e){this.exit(e)}function Fo(e){this.enter({type:"tableCell",children:[]},e)}function Mo(e){let t=this.resume();this.data.inTable&&(t=t.replace(/\\([\\|])/g,zo));const n=this.stack[this.stack.length-1];n.type,n.value=t,this.exit(e)}function zo(e,t){return"|"===t?t:e}function _o(e){const t=e||{},n=t.tableCellPadding,r=t.tablePipeAlign,o=t.stringLength,i=n?" ":"|";return{unsafe:[{character:"\r",inConstruct:"tableCell"},{character:"\n",inConstruct:"tableCell"},{atBreak:!0,character:"|",after:"[\t :-]"},{character:"|",inConstruct:"tableCell"},{atBreak:!0,character:":",after:"-"},{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{inlineCode:function(e,t,n){let r=To.inlineCode(e,t,n);return n.stack.includes("tableCell")&&(r=r.replace(/\|/g,"\\$&")),r},table:function(e,t,n,r){return a(function(e,t,n){const r=e.children;let o=-1;const i=[],l=t.enter("table");for(;++oc&&(c=e[u].length);++is[i])&&(s[i]=e)}t.push(l)}l[u]=t,a[u]=r}var f;let p=-1;if("object"==typeof r&&"length"in r)for(;++ps[p]&&(s[p]=o),h[p]=o),d[p]=l}l.splice(1,0,d),a.splice(1,0,h),u=-1;const m=[];for(;++u0&&!n&&(e[e.length-1][1]._gfmAutolinkLiteralWalkedInto=!0),n}Jo[43]=Qo,Jo[45]=Qo,Jo[46]=Qo,Jo[95]=Qo,Jo[72]=[Qo,$o],Jo[104]=[Qo,$o],Jo[87]=[Qo,Wo],Jo[119]=[Qo,Wo];const ni={tokenize:function(e,t,n){const r=this;return Qe(e,(function(e){const o=r.events[r.events.length-1];return o&&"gfmFootnoteDefinitionIndent"===o[1].type&&4===o[2].sliceSerialize(o[1],!0).length?t(e):n(e)}),"gfmFootnoteDefinitionIndent",5)},partial:!0};function ri(e,t,n){const r=this;let o=r.events.length;const i=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let l;for(;o--;){const e=r.events[o][1];if("labelImage"===e.type){l=e;break}if("gfmFootnoteCall"===e.type||"labelLink"===e.type||"label"===e.type||"image"===e.type||"link"===e.type)break}return function(o){if(!l||!l._balanced)return n(o);const a=yt(r.sliceSerialize({start:l.end,end:r.now()}));return 94===a.codePointAt(0)&&i.includes(a.slice(1))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(o),e.exit("gfmFootnoteCallLabelMarker"),t(o)):n(o)}}function oi(e,t){let n,r=e.length;for(;r--;)if("labelImage"===e[r][1].type&&"enter"===e[r][0]){n=e[r][1];break}e[r+1][1].type="data",e[r+3][1].type="gfmFootnoteCallLabelMarker";const o={type:"gfmFootnoteCall",start:Object.assign({},e[r+3][1].start),end:Object.assign({},e[e.length-1][1].end)},i={type:"gfmFootnoteCallMarker",start:Object.assign({},e[r+3][1].end),end:Object.assign({},e[r+3][1].end)};i.end.column++,i.end.offset++,i.end._bufferIndex++;const l={type:"gfmFootnoteCallString",start:Object.assign({},i.end),end:Object.assign({},e[e.length-1][1].start)},a={type:"chunkString",contentType:"string",start:Object.assign({},l.start),end:Object.assign({},l.end)},s=[e[r+1],e[r+2],["enter",o,t],e[r+3],e[r+4],["enter",i,t],["exit",i,t],["enter",l,t],["enter",a,t],["exit",a,t],["exit",l,t],e[e.length-2],e[e.length-1],["exit",o,t]];return e.splice(r,e.length-r+1,...s),e}function ii(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,l=0;return function(t){return e.enter("gfmFootnoteCall"),e.enter("gfmFootnoteCallLabelMarker"),e.consume(t),e.exit("gfmFootnoteCallLabelMarker"),a};function a(t){return 94!==t?n(t):(e.enter("gfmFootnoteCallMarker"),e.consume(t),e.exit("gfmFootnoteCallMarker"),e.enter("gfmFootnoteCallString"),e.enter("chunkString").contentType="string",s)}function s(a){if(l>999||93===a&&!i||null===a||91===a||qe(a))return n(a);if(93===a){e.exit("chunkString");const i=e.exit("gfmFootnoteCallString");return o.includes(yt(r.sliceSerialize(i)))?(e.enter("gfmFootnoteCallLabelMarker"),e.consume(a),e.exit("gfmFootnoteCallLabelMarker"),e.exit("gfmFootnoteCall"),t):n(a)}return qe(a)||(i=!0),l++,e.consume(a),92===a?c:s}function c(t){return 91===t||92===t||93===t?(e.consume(t),l++,s):s(t)}}function li(e,t,n){const r=this,o=r.parser.gfmFootnotes||(r.parser.gfmFootnotes=[]);let i,l,a=0;return function(t){return e.enter("gfmFootnoteDefinition")._container=!0,e.enter("gfmFootnoteDefinitionLabel"),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),s};function s(t){return 94===t?(e.enter("gfmFootnoteDefinitionMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionMarker"),e.enter("gfmFootnoteDefinitionLabelString"),e.enter("chunkString").contentType="string",c):n(t)}function c(t){if(a>999||93===t&&!l||null===t||91===t||qe(t))return n(t);if(93===t){e.exit("chunkString");const n=e.exit("gfmFootnoteDefinitionLabelString");return i=yt(r.sliceSerialize(n)),e.enter("gfmFootnoteDefinitionLabelMarker"),e.consume(t),e.exit("gfmFootnoteDefinitionLabelMarker"),e.exit("gfmFootnoteDefinitionLabel"),f}return qe(t)||(l=!0),a++,e.consume(t),92===t?u:c}function u(t){return 91===t||92===t||93===t?(e.consume(t),a++,c):c(t)}function f(t){return 58===t?(e.enter("definitionMarker"),e.consume(t),e.exit("definitionMarker"),o.includes(i)||o.push(i),Qe(e,p,"gfmFootnoteDefinitionWhitespace")):n(t)}function p(e){return t(e)}}function ai(e,t,n){return e.check(Xe,t,e.attempt(ni,t,n))}function si(e){e.exit("gfmFootnoteDefinition")}function ci(e){let t=(e||{}).singleTilde;const n={name:"strikethrough",tokenize:function(e,n,r){const o=this.previous,i=this.events;let l=0;return function(t){return 126===o&&"characterEscape"!==i[i.length-1][1].type?r(t):(e.enter("strikethroughSequenceTemporary"),a(t))};function a(i){const s=Ht(o);if(126===i)return l>1?r(i):(e.consume(i),l++,a);if(l<2&&!t)return r(i);const c=e.exit("strikethroughSequenceTemporary"),u=Ht(i);return c._open=!u||2===u&&Boolean(s),c._close=!s||2===s&&Boolean(u),n(i)}},resolveAll:function(e,t){let n=-1;for(;++n0;)t-=1,n.push(e.slice(this.map[t][0]+this.map[t][1]),this.map[t][2]),e.length=this.map[t][0];n.push(e.slice()),e.length=0;let r=n.pop();for(;r;){for(const t of r)e.push(t);r=n.pop()}this.map.length=0}}function fi(e,t){let n=!1;const r=[];for(;t-1;){const e=r.events[t][1].type;if("lineEnding"!==e&&"linePrefix"!==e)break;t--}const o=t>-1?r.events[t][1].type:null,i="tableHead"===o||"tableRow"===o?b:a;return i===b&&r.parser.lazy[r.now().line]?n(e):i(e)};function a(t){return e.enter("tableHead"),e.enter("tableRow"),function(e){return 124===e||(o=!0,l+=1),s(e)}(t)}function s(t){return null===t?n(t):He(t)?l>1?(l=0,r.interrupt=!0,e.exit("tableRow"),e.enter("lineEnding"),e.consume(t),e.exit("lineEnding"),f):n(t):Ve(t)?Qe(e,s,"whitespace")(t):(l+=1,o&&(o=!1,i+=1),124===t?(e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),o=!0,s):(e.enter("data"),c(t)))}function c(t){return null===t||124===t||qe(t)?(e.exit("data"),s(t)):(e.consume(t),92===t?u:c)}function u(t){return 92===t||124===t?(e.consume(t),c):c(t)}function f(t){return r.interrupt=!1,r.parser.lazy[r.now().line]?n(t):(e.enter("tableDelimiterRow"),o=!1,Ve(t)?Qe(e,p,"linePrefix",r.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(t):p(t))}function p(t){return 45===t||58===t?h(t):124===t?(o=!0,e.enter("tableCellDivider"),e.consume(t),e.exit("tableCellDivider"),d):k(t)}function d(t){return Ve(t)?Qe(e,h,"whitespace")(t):h(t)}function h(t){return 58===t?(l+=1,o=!0,e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),m):45===t?(l+=1,m(t)):null===t||He(t)?v(t):k(t)}function m(t){return 45===t?(e.enter("tableDelimiterFiller"),g(t)):k(t)}function g(t){return 45===t?(e.consume(t),g):58===t?(o=!0,e.exit("tableDelimiterFiller"),e.enter("tableDelimiterMarker"),e.consume(t),e.exit("tableDelimiterMarker"),y):(e.exit("tableDelimiterFiller"),y(t))}function y(t){return Ve(t)?Qe(e,v,"whitespace")(t):v(t)}function v(n){return 124===n?p(n):(null===n||He(n))&&o&&i===l?(e.exit("tableDelimiterRow"),e.exit("tableHead"),t(n)):k(n)}function k(e){return n(e)}function b(t){return e.enter("tableRow"),x(t)}function x(n){return 124===n?(e.enter("tableCellDivider"),e.consume(n),e.exit("tableCellDivider"),x):null===n||He(n)?(e.exit("tableRow"),t(n)):Ve(n)?Qe(e,x,"whitespace")(n):(e.enter("data"),A(n))}function A(t){return null===t||124===t||qe(t)?(e.exit("data"),x(t)):(e.consume(t),92===t?w:A)}function w(t){return 92===t||124===t?(e.consume(t),A):A(t)}}function di(e,t){let n,r,o,i=-1,l=!0,a=0,s=[0,0,0,0],c=[0,0,0,0],u=!1,f=0;const p=new ui;for(;++in[2]+1){const t=n[2]+1,r=n[3]-n[2]-1;e.add(t,r,[])}}e.add(n[3]+1,0,[["exit",l,t]])}return void 0!==o&&(i.end=Object.assign({},gi(t.events,o)),e.add(o,0,[["exit",i,t]]),i=void 0),i}function mi(e,t,n,r,o){const i=[],l=gi(t.events,n);o&&(o.end=Object.assign({},l),i.push(["exit",o,t])),r.end=Object.assign({},l),i.push(["exit",r,t]),e.add(n+1,0,i)}function gi(e,t){const n=e[t],r="enter"===n[0]?"start":"end";return n[1][r]}const yi={name:"tasklistCheck",tokenize:function(e,t,n){const r=this;return function(t){return null===r.previous&&r._gfmTasklistFirstContentOfListItem?(e.enter("taskListCheck"),e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),o):n(t)};function o(t){return qe(t)?(e.enter("taskListCheckValueUnchecked"),e.consume(t),e.exit("taskListCheckValueUnchecked"),i):88===t||120===t?(e.enter("taskListCheckValueChecked"),e.consume(t),e.exit("taskListCheckValueChecked"),i):n(t)}function i(t){return 93===t?(e.enter("taskListCheckMarker"),e.consume(t),e.exit("taskListCheckMarker"),e.exit("taskListCheck"),l):n(t)}function l(r){return He(r)?t(r):Ve(r)?e.check({tokenize:vi},t,n)(r):n(r)}}};function vi(e,t,n){return Qe(e,(function(e){return null===e?n(e):t(e)}),"whitespace")}const ki={};function bi(e){const t=e||ki,n=this.data(),r=n.micromarkExtensions||(n.micromarkExtensions=[]),o=n.fromMarkdownExtensions||(n.fromMarkdownExtensions=[]),i=n.toMarkdownExtensions||(n.toMarkdownExtensions=[]);r.push(function(e){return De([{text:Jo},{document:{91:{name:"gfmFootnoteDefinition",tokenize:li,continuation:{tokenize:ai},exit:si}},text:{91:{name:"gfmFootnoteCall",tokenize:ii},93:{name:"gfmPotentialFootnoteCall",add:"after",tokenize:ri,resolveTo:oi}}},ci(e),{flow:{null:{name:"table",tokenize:pi,resolveAll:di}}},{text:{91:yi}}])}(t)),o.push([{transforms:[Hr],enter:{literalAutolink:zr,literalAutolinkEmail:_r,literalAutolinkHttp:_r,literalAutolinkWww:_r},exit:{literalAutolink:Ur,literalAutolinkEmail:jr,literalAutolinkHttp:Rr,literalAutolinkWww:Nr}},{enter:{gfmFootnoteDefinition:Wr,gfmFootnoteDefinitionLabelString:$r,gfmFootnoteCall:Zr,gfmFootnoteCallString:Kr},exit:{gfmFootnoteDefinition:Jr,gfmFootnoteDefinitionLabelString:Qr,gfmFootnoteCall:Gr,gfmFootnoteCallString:Xr}},{canContainEols:["delete"],enter:{strikethrough:oo},exit:{strikethrough:io}},{enter:{table:Po,tableData:Fo,tableHeader:Fo,tableRow:Do},exit:{codeText:Mo,table:Oo,tableData:Lo,tableHeader:Lo,tableRow:Lo}},{exit:{taskListCheckValueChecked:Ro,taskListCheckValueUnchecked:Ro,paragraph:No}}]),i.push(function(e){return{extensions:[{unsafe:[{character:"@",before:"[+\\-.\\w]",after:"[\\-.\\w]",inConstruct:Fr,notInConstruct:Mr},{character:".",before:"[Ww]",after:"[\\-.\\w]",inConstruct:Fr,notInConstruct:Mr},{character:":",before:"[ps]",after:"\\/",inConstruct:Fr,notInConstruct:Mr}]},{unsafe:[{character:"[",inConstruct:["phrasing","label","reference"]}],handlers:{footnoteDefinition:to,footnoteReference:eo}},{unsafe:[{character:"~",inConstruct:"phrasing",notInConstruct:ro}],handlers:{delete:lo}},_o(e),{unsafe:[{atBreak:!0,character:"-",after:"[:|-]"}],handlers:{listItem:jo}}]}}(t))}var xi=function(e){var t=e.onSend,n=e.handleInputChange,r=e.value,i=e.placeholder,l=void 0===i?"Start typing...":i,a=e.buttonLabel,s=void 0===a?"Send":a,c=e.customStyles,u=void 0===c?null:c,f=e.inputComponentStyles,p=void 0===f?null:f,d=e.showTyping,h=void 0!==d&&d;return o().createElement("div",{className:"message-input-container",style:u},o().createElement("input",{type:"text",value:r,placeholder:l,onChange:n,onKeyDown:function(e){"Enter"!==e.key||h||t()},style:p,className:"message-input-field"}),o().createElement("button",{onClick:t,className:"message-input-button ".concat(h?"disabled":""),"data-testid":"send-button",disabled:h},s))};xi.propTypes={onSend:Or().func.isRequired,handleInputChange:Or().func.isRequired,value:Or().string,placeholder:Or().string,buttonLabel:Or().string,customStyles:Or().object,inputComponentStyles:Or().object,showTyping:Or().bool};const Ai=xi;var wi=n(72),Ci=n.n(wi),Si=n(825),Ii=n.n(Si),Ei=n(659),Bi=n.n(Ei),Ti=n(56),Pi=n.n(Ti),Oi=n(540),Di=n.n(Oi),Li=n(113),Fi=n.n(Li),Mi=n(796),zi={};zi.styleTagTransform=Fi(),zi.setAttributes=Pi(),zi.insert=Bi().bind(null,"head"),zi.domAPI=Ii(),zi.insertStyleElement=Di(),Ci()(Mi.A,zi),Mi.A&&Mi.A.locals&&Mi.A.locals;var _i=function(e){var t=e.color,n=void 0===t?"gray":t;return o().createElement("div",{className:"typing-dots",style:{color:n}},o().createElement("span",null),o().createElement("span",null),o().createElement("span",null))};_i.propTypes={color:Or().string};const Ri=_i;var Ni=function(e){var t=e.size,n=void 0===t?20:t,r=e.color,i=void 0===r?"gray":r;return o().createElement("div",{className:"typing-spinner",style:{width:n,height:n,borderColor:i,borderTopColor:"transparent"}})};Ni.propTypes={size:Or().number,color:Or().string};const ji=Ni;var Ui=n(386),Hi={};function qi(e){return qi="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},qi(e)}function Vi(e){return function(e){if(Array.isArray(e))return $i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||Wi(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Yi(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,l,a=[],s=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw o}}return a}}(e,t)||Wi(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Wi(e,t){if(e){if("string"==typeof e)return $i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?$i(e,t):void 0}}function $i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n0?H(e):!r&&l.length>0&&(H(l),window[t].setItem(n,JSON.stringify(l)),window[t].setItem("".concat(n,"-initialized"),"true"))}else H(l)}),[n,D,t]),(0,r.useEffect)((function(){D&&U.length>0&&window[t].setItem(n,JSON.stringify(U))}),[U,n,D,t]),(0,r.useEffect)((function(){if(l.length>0){var e=l.slice(-1).pop();"assistant"===(null==e?void 0:e.role)&&V?(Y(!1),H((function(t){return[].concat(Vi(t),[e])}))):H(l||[])}}),[l]),(0,r.useEffect)((function(){J.current&&J.current.scrollIntoView({behavior:"smooth",block:"nearest",inline:"start"})}),[U]),(0,r.useEffect)((function(){var e=function(e){Z.current&&!Z.current.contains(e.target)&&Q(!1)};return document.addEventListener("mousedown",e),function(){document.removeEventListener("mousedown",e)}}),[]);var K={},X={};return K.height=b?"100%":"50%",K.width=A?"auto":"50%","dark"===s?(K.backgroundColor="#161618",K.borderColor="#444444",K.color="#ffffff",X.borderColor="#f1f0f0",X.color="#000000"):(K.backgroundColor="#ffffff",K.borderColor="#e0e0e0",K.color="#e0e0e0",X.borderColor="#e0e0e0"),o().createElement("div",{className:"chat-container ".concat(P),style:Ji(Ji({},K),u)},D&&o().createElement("div",{className:"actionBtnContainer",ref:Z},o().createElement("div",{className:"dropdown"},o().createElement("button",{className:"dotsButton",onClick:function(){return Q(!$)},"aria-label":"clear"},"⋮"),$&&o().createElement("div",{className:"dropdownMenu"},o().createElement("button",{onClick:function(){H([]),D&&window[t].removeItem(n),Q(!1)},className:"dropdownItem"},"Clear chat")))),o().createElement("div",{className:"chat-messages"},0===U.length?o().createElement("div",{className:"empty-chat"},"No conversation yet."):U.map((function(e,t){if(!e||"object"!==qi(e)||!e.role||!e.content)return null;var n="user"===e.role?M:z;return o().createElement("div",{key:t,className:"chat-bubble ".concat(e.role),style:n},o().createElement("div",{className:"markdown-content"},o().createElement(Br,{remarkPlugins:[bi],components:{a:function(e){var t=e.href,n=e.children;return o().createElement("a",{href:t,target:"_blank",rel:"noopener noreferrer"},n)}}},e.content)))})),V&&o().createElement("div",{className:"typing-indicator user-typing","data-testid":"typing-indicator"},"dots"===p&&o().createElement(Ri,null),"spinner"===p&&o().createElement(ji,null)),o().createElement("div",{ref:J})),o().createElement("div",{className:"chat-input"},o().createElement(Ai,{onSend:function(){if(R.trim()){var e={role:"user",content:R};H((function(r){var o=[].concat(Vi(r),[e]);return D&&window[t].setItem(n,JSON.stringify(o)),o})),v&&v({new_message:e}),Y(!0),N("")}},handleInputChange:function(e){N(e.target.value)},value:R,customStyles:h,inputComponentStyles:Ji(Ji({},X),g),placeholder:B,showTyping:V})))};Gi.propTypes={id:Or().string,messages:Or().arrayOf(Or().shape({role:Or().oneOf(["user","assistant"]).isRequired,content:Or().string.isRequired})),setProps:Or().func,theme:Or().string,container_style:Or().object,typing_indicator:Or().oneOf(["dots","spinner"]),new_message:Or().object,input_container_style:Or().object,input_text_style:Or().object,fill_height:Or().bool,fill_width:Or().bool,user_bubble_style:Or().object,assistant_bubble_style:Or().object,input_placeholder:Or().string,class_name:Or().string,persistence:Or().bool,persistence_type:Or().oneOf(["local","session"])};const el=Gi})(),window.dash_chat=l})(); //# sourceMappingURL=dash_chat.min.js.map \ No newline at end of file diff --git a/dash_chat/dash_chat.min.js.map b/dash_chat/dash_chat.min.js.map index deb6d01..4bfc577 100644 --- a/dash_chat/dash_chat.min.js.map +++ b/dash_chat/dash_chat.min.js.map @@ -1 +1 @@ -{"version":3,"file":"dash_chat.min.js","mappings":"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","sources":["webpack:///./src/styles/chatStyles.css","webpack:///./src/styles/indicatorStyle.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack:///./node_modules/extend/index.js","webpack:///./node_modules/inline-style-parser/index.js","webpack:///./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack:///./node_modules/react/jsx-runtime.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack:///./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack:///./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack:///./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack:///./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack:///./node_modules/style-to-object/cjs/index.js","webpack:///external window \"React\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/compat","webpack:///webpack/runtime/nonce","webpack:///./node_modules/estree-util-is-identifier-name/lib/index.js","webpack:///./node_modules/hast-util-whitespace/lib/index.js","webpack:///./node_modules/property-information/lib/util/schema.js","webpack:///./node_modules/property-information/lib/util/merge.js","webpack:///./node_modules/property-information/lib/normalize.js","webpack:///./node_modules/property-information/lib/util/info.js","webpack:///./node_modules/property-information/lib/util/types.js","webpack:///./node_modules/property-information/lib/util/defined-info.js","webpack:///./node_modules/property-information/lib/util/create.js","webpack:///./node_modules/property-information/lib/xlink.js","webpack:///./node_modules/property-information/lib/xml.js","webpack:///./node_modules/property-information/lib/util/case-sensitive-transform.js","webpack:///./node_modules/property-information/lib/util/case-insensitive-transform.js","webpack:///./node_modules/property-information/lib/xmlns.js","webpack:///./node_modules/property-information/lib/aria.js","webpack:///./node_modules/property-information/lib/html.js","webpack:///./node_modules/property-information/lib/svg.js","webpack:///./node_modules/property-information/index.js","webpack:///./node_modules/property-information/lib/find.js","webpack:///./node_modules/property-information/lib/hast-to-react.js","webpack:///./node_modules/style-to-object/esm/index.mjs","webpack:///./node_modules/unist-util-position/lib/index.js","webpack:///./node_modules/unist-util-stringify-position/lib/index.js","webpack:///./node_modules/vfile-message/lib/index.js","webpack:///./node_modules/hast-util-to-jsx-runtime/lib/index.js","webpack:///./node_modules/comma-separated-tokens/index.js","webpack:///./node_modules/space-separated-tokens/index.js","webpack:///./node_modules/html-url-attributes/lib/index.js","webpack:///./node_modules/mdast-util-to-string/lib/index.js","webpack:///./node_modules/micromark-util-chunked/index.js","webpack:///./node_modules/micromark-util-subtokenize/lib/splice-buffer.js","webpack:///./node_modules/micromark-util-subtokenize/index.js","webpack:///./node_modules/micromark-util-combine-extensions/index.js","webpack:///./node_modules/micromark-util-character/index.js","webpack:///./node_modules/micromark-factory-space/index.js","webpack:///./node_modules/micromark/lib/initialize/content.js","webpack:///./node_modules/micromark/lib/initialize/document.js","webpack:///./node_modules/micromark-core-commonmark/lib/blank-line.js","webpack:///./node_modules/micromark-core-commonmark/lib/content.js","webpack:///./node_modules/micromark/lib/initialize/flow.js","webpack:///./node_modules/micromark/lib/initialize/text.js","webpack:///./node_modules/micromark-core-commonmark/lib/thematic-break.js","webpack:///./node_modules/micromark-core-commonmark/lib/list.js","webpack:///./node_modules/micromark-core-commonmark/lib/block-quote.js","webpack:///./node_modules/micromark-factory-destination/index.js","webpack:///./node_modules/micromark-factory-label/index.js","webpack:///./node_modules/micromark-factory-title/index.js","webpack:///./node_modules/micromark-factory-whitespace/index.js","webpack:///./node_modules/micromark-util-normalize-identifier/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/definition.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-indented.js","webpack:///./node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack:///./node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack:///./node_modules/micromark-util-html-tag-name/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/html-flow.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack:///./node_modules/decode-named-character-reference/index.dom.js","webpack:///./node_modules/micromark-core-commonmark/lib/character-reference.js","webpack:///./node_modules/micromark-core-commonmark/lib/character-escape.js","webpack:///./node_modules/micromark-core-commonmark/lib/line-ending.js","webpack:///./node_modules/micromark-util-resolve-all/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-end.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack:///./node_modules/micromark-util-classify-character/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/attention.js","webpack:///./node_modules/micromark-core-commonmark/lib/autolink.js","webpack:///./node_modules/micromark-core-commonmark/lib/html-text.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack:///./node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-text.js","webpack:///./node_modules/micromark/lib/constructs.js","webpack:///./node_modules/micromark/lib/create-tokenizer.js","webpack:///./node_modules/micromark/lib/preprocess.js","webpack:///./node_modules/micromark-util-decode-numeric-character-reference/index.js","webpack:///./node_modules/micromark-util-decode-string/index.js","webpack:///./node_modules/mdast-util-from-markdown/lib/index.js","webpack:///./node_modules/micromark/lib/postprocess.js","webpack:///./node_modules/micromark/lib/parse.js","webpack:///./node_modules/remark-parse/lib/index.js","webpack:///./node_modules/@ungap/structured-clone/esm/types.js","webpack:///./node_modules/@ungap/structured-clone/esm/deserialize.js","webpack:///./node_modules/@ungap/structured-clone/esm/serialize.js","webpack:///./node_modules/@ungap/structured-clone/esm/index.js","webpack:///./node_modules/micromark-util-sanitize-uri/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/footer.js","webpack:///./node_modules/unist-util-is/lib/index.js","webpack:///./node_modules/unist-util-visit-parents/lib/index.js","webpack:///./node_modules/unist-util-visit/lib/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/revert.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/list-item.js","webpack:///./node_modules/trim-lines/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/break.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/code.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/delete.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/heading.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/html.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/image.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/link.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/list.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/root.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/strong.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table-row.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/text.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","webpack:///./node_modules/mdast-util-to-hast/lib/state.js","webpack:///./node_modules/mdast-util-to-hast/lib/index.js","webpack:///./node_modules/remark-rehype/lib/index.js","webpack:///./node_modules/bail/index.js","webpack:///./node_modules/unified/node_modules/is-plain-obj/index.js","webpack:///./node_modules/vfile/lib/minpath.browser.js","webpack:///./node_modules/vfile/lib/minproc.browser.js","webpack:///./node_modules/vfile/lib/minurl.shared.js","webpack:///./node_modules/vfile/lib/index.js","webpack:///./node_modules/vfile/lib/minurl.browser.js","webpack:///./node_modules/unified/lib/callable-instance.js","webpack:///./node_modules/unified/lib/index.js","webpack:///./node_modules/trough/lib/index.js","webpack:///./node_modules/react-markdown/lib/index.js","webpack:///external window \"PropTypes\"","webpack:///./node_modules/ccount/index.js","webpack:///./node_modules/mdast-util-find-and-replace/lib/index.js","webpack:///./node_modules/mdast-util-gfm-autolink-literal/lib/index.js","webpack:///./node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","webpack:///./node_modules/mdast-util-gfm-footnote/lib/index.js","webpack:///./node_modules/mdast-util-gfm-strikethrough/lib/index.js","webpack:///./node_modules/markdown-table/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/break.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/code.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-quote.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/encode-info.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/html.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/image.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/link.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-rule.js","webpack:///./node_modules/mdast-util-phrasing/lib/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/strong.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-strong.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-fence.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","webpack:///./node_modules/longest-streak/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/definition.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/heading.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/list.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/list-item.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/root.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/text.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","webpack:///./node_modules/mdast-util-gfm-table/lib/index.js","webpack:///./node_modules/mdast-util-gfm-task-list-item/lib/index.js","webpack:///./node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-footnote/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/edit-map.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/infer.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","webpack:///./node_modules/remark-gfm/lib/index.js","webpack:///./node_modules/micromark-extension-gfm/index.js","webpack:///./node_modules/mdast-util-gfm/lib/index.js","webpack:///./src/private/ChatMessageInput.js","webpack:///./src/styles/indicatorStyle.css?f59a","webpack:///./src/private/DotsIndicator.js","webpack:///./src/private/SpinnerIndicator.js","webpack:///./src/styles/chatStyles.css?5f1e","webpack:///./src/lib/components/ChatComponent.js"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.chat-container {\n border: 1px solid;\n border-radius: 8px;\n padding: 10px;\n display: flex;\n flex-direction: column;\n}\n\n.chat-messages {\n flex: 1;\n overflow-y: auto;\n padding: 5px;\n display: flex;\n flex-direction: column;\n}\n\n.message-input-container {\n display: flex;\n margin-top: 10px;\n padding-top: 10px;\n}\n\n.message-input-field {\n flex: 1;\n padding: 8px;\n border: 1px solid;\n border-radius: 4px;\n margin-right: 5px;\n}\n\n.message-input-field:focus {\n outline: none;\n}\n\n.message-input-button {\n background-color: #007bff;\n color: white;\n padding: 8px 12px;\n border: none;\n border-radius: 4px;\n cursor: pointer;\n}\n\n.message-input-container .disabled {\n background-color: #efefef4d;\n color: #1010104d;\n border-color: #efefef4d;\n cursor: auto;\n}\n\n.message-input-button:hover {\n background-color: #0056b3;\n}\n\n.message-input-container .disabled:hover {\n background-color: #efefef4d;\n}\n\n.chat-bubble {\n max-width: 75%;\n margin-bottom: 10px;\n padding: 0px 10px 0px;\n border-radius: 12px;\n word-wrap: break-word;\n}\n\n.user .markdown-content a {\n color: #fff;\n text-decoration: underline;\n}\n\n.user .markdown-content a:hover {\n color: #212427;\n}\n\n.markdown-content code {\n background-color: rgba(0, 0, 0, 0.4);\n color: #ffffffda;\n padding: 2px 4px;\n border-radius: 4px;\n}\n\n.empty-chat {\n margin: 0 auto;\n}\n\n.actionBtnContainer {\n position: relative;\n}\n\n.dotsButton {\n background: none;\n border: none;\n font-size: 1.5rem;\n cursor: pointer;\n}\n\n.dotsButton:hover {\n background: #cccccc1f;\n border-radius: 50%;\n cursor: pointer;\n}\n\n.dropdown {\n position: relative;\n display: inline-block;\n}\n\n.dropdownMenu {\n position: absolute;\n background-color: white;\n width: 100px;\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\n z-index: 1000;\n}\n\n.dropdownItem {\n padding: 8px 12px;\n background: none;\n border: none;\n text-align: left;\n width: 100%;\n cursor: pointer;\n}\n\n.dropdownItem:hover {\n background-color: #f1f1f1;\n}\n\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/chatStyles.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,yBAAyB;IACzB,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,YAAY;AAChB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;AACzB;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,oCAAoC;IACpC,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI,kBAAkB;IAClB,uBAAuB;IACvB,YAAY;IACZ,wCAAwC;IACxC,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,yBAAyB;AAC7B\",\"sourcesContent\":[\".chat-container {\\n border: 1px solid;\\n border-radius: 8px;\\n padding: 10px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.chat-messages {\\n flex: 1;\\n overflow-y: auto;\\n padding: 5px;\\n display: flex;\\n flex-direction: column;\\n}\\n\\n.message-input-container {\\n display: flex;\\n margin-top: 10px;\\n padding-top: 10px;\\n}\\n\\n.message-input-field {\\n flex: 1;\\n padding: 8px;\\n border: 1px solid;\\n border-radius: 4px;\\n margin-right: 5px;\\n}\\n\\n.message-input-field:focus {\\n outline: none;\\n}\\n\\n.message-input-button {\\n background-color: #007bff;\\n color: white;\\n padding: 8px 12px;\\n border: none;\\n border-radius: 4px;\\n cursor: pointer;\\n}\\n\\n.message-input-container .disabled {\\n background-color: #efefef4d;\\n color: #1010104d;\\n border-color: #efefef4d;\\n cursor: auto;\\n}\\n\\n.message-input-button:hover {\\n background-color: #0056b3;\\n}\\n\\n.message-input-container .disabled:hover {\\n background-color: #efefef4d;\\n}\\n\\n.chat-bubble {\\n max-width: 75%;\\n margin-bottom: 10px;\\n padding: 0px 10px 0px;\\n border-radius: 12px;\\n word-wrap: break-word;\\n}\\n\\n.user .markdown-content a {\\n color: #fff;\\n text-decoration: underline;\\n}\\n\\n.user .markdown-content a:hover {\\n color: #212427;\\n}\\n\\n.markdown-content code {\\n background-color: rgba(0, 0, 0, 0.4);\\n color: #ffffffda;\\n padding: 2px 4px;\\n border-radius: 4px;\\n}\\n\\n.empty-chat {\\n margin: 0 auto;\\n}\\n\\n.actionBtnContainer {\\n position: relative;\\n}\\n\\n.dotsButton {\\n background: none;\\n border: none;\\n font-size: 1.5rem;\\n cursor: pointer;\\n}\\n\\n.dotsButton:hover {\\n background: #cccccc1f;\\n border-radius: 50%;\\n cursor: pointer;\\n}\\n\\n.dropdown {\\n position: relative;\\n display: inline-block;\\n}\\n\\n.dropdownMenu {\\n position: absolute;\\n background-color: white;\\n width: 100px;\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\\n z-index: 1000;\\n}\\n\\n.dropdownItem {\\n padding: 8px 12px;\\n background: none;\\n border: none;\\n text-align: left;\\n width: 100%;\\n cursor: pointer;\\n}\\n\\n.dropdownItem:hover {\\n background-color: #f1f1f1;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.typing-dots {\n display: flex;\n gap: 4px;\n}\n\n.typing-dots span {\n display: inline-block;\n width: 8px;\n height: 8px;\n background-color: gray;\n border-radius: 50%;\n animation: bounce 1.2s infinite ease-in-out;\n}\n\n.typing-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.typing-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n.typing-spinner {\n display: inline-block;\n width: 20px;\n height: 20px;\n border: 3px solid gray;\n border-top: 3px solid transparent;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n\n@keyframes bounce {\n\n 0%,\n 80%,\n 100% {\n transform: scale(0);\n }\n\n 40% {\n transform: scale(1);\n }\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/indicatorStyle.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,qBAAqB;IACrB,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,kBAAkB;IAClB,2CAA2C;AAC/C;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,sBAAsB;IACtB,iCAAiC;IACjC,kBAAkB;IAClB,kCAAkC;AACtC;;AAEA;IACI;QACI,uBAAuB;IAC3B;;IAEA;QACI,yBAAyB;IAC7B;AACJ;;;AAGA;;IAEI;;;QAGI,mBAAmB;IACvB;;IAEA;QACI,mBAAmB;IACvB;AACJ\",\"sourcesContent\":[\".typing-dots {\\n display: flex;\\n gap: 4px;\\n}\\n\\n.typing-dots span {\\n display: inline-block;\\n width: 8px;\\n height: 8px;\\n background-color: gray;\\n border-radius: 50%;\\n animation: bounce 1.2s infinite ease-in-out;\\n}\\n\\n.typing-dots span:nth-child(2) {\\n animation-delay: 0.2s;\\n}\\n\\n.typing-dots span:nth-child(3) {\\n animation-delay: 0.4s;\\n}\\n\\n.typing-spinner {\\n display: inline-block;\\n width: 20px;\\n height: 20px;\\n border: 3px solid gray;\\n border-top: 3px solid transparent;\\n border-radius: 50%;\\n animation: spin 1s linear infinite;\\n}\\n\\n@keyframes spin {\\n from {\\n transform: rotate(0deg);\\n }\\n\\n to {\\n transform: rotate(360deg);\\n }\\n}\\n\\n\\n@keyframes bounce {\\n\\n 0%,\\n 80%,\\n 100% {\\n transform: scale(0);\\n }\\n\\n 40% {\\n transform: scale(1);\\n }\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function (node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n var styleObject = null;\n if (!style || typeof style !== 'string') {\n return styleObject;\n }\n var declarations = (0, inline_style_parser_1.default)(style);\n var hasIterator = typeof iterator === 'function';\n declarations.forEach(function (declaration) {\n if (declaration.type !== 'declaration') {\n return;\n }\n var property = declaration.property, value = declaration.value;\n if (hasIterator) {\n iterator(property, value, declaration);\n }\n else if (value) {\n styleObject = styleObject || {};\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\n//# sourceMappingURL=index.js.map","module.exports = window[\"React\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var getCurrentScript = function() {\n var script = document.currentScript;\n if (!script) {\n /* Shim for IE11 and below */\n /* Do not take into account async scripts and inline scripts */\n\n var doc_scripts = document.getElementsByTagName('script');\n var scripts = [];\n\n for (var i = 0; i < doc_scripts.length; i++) {\n scripts.push(doc_scripts[i]);\n }\n\n scripts = scripts.filter(function(s) { return !s.async && !s.text && !s.textContent; });\n script = scripts.slice(-1)[0];\n }\n\n return script;\n};\n\nvar isLocalScript = function(script) {\n return /\\/_dash-component-suites\\//.test(script.src);\n};\n\nObject.defineProperty(__webpack_require__, 'p', {\n get: (function () {\n var script = getCurrentScript();\n\n var url = script.src.split('/').slice(0, -1).join('/') + '/';\n\n return function() {\n return url;\n };\n })()\n});\n\nif (typeof jsonpScriptSrc !== 'undefined') {\n var __jsonpScriptSrc__ = jsonpScriptSrc;\n jsonpScriptSrc = function(chunkId) {\n var script = getCurrentScript();\n var isLocal = isLocalScript(script);\n\n var src = __jsonpScriptSrc__(chunkId);\n\n if(!isLocal) {\n return src;\n }\n\n var srcFragments = src.split('/');\n var fileFragments = srcFragments.slice(-1)[0].split('.');\n\n fileFragments.splice(1, 0, \"v0_2_0m1739031316\");\n srcFragments.splice(-1, 1, fileFragments.join('.'))\n\n return srcFragments.join('/');\n };\n}\n","__webpack_require__.nc = undefined;","/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n * Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @returns {boolean}\n * Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? contReJsx : contRe\n return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n * Identifier to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? nameReJsx : nameRe\n return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See .\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record} Properties\n * @typedef {Record} Normal\n */\n\nexport class Schema {\n /**\n * @constructor\n * @param {Properties} property\n * @param {Normal} normal\n * @param {string} [space]\n */\n constructor(property, normal, space) {\n this.property = property\n this.normal = normal\n if (space) {\n this.space = space\n }\n }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n let index = -1\n\n while (++index < definitions.length) {\n Object.assign(property, definitions[index].property)\n Object.assign(normal, definitions[index].normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","export class Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n */\n constructor(property, attribute) {\n /** @type {string} */\n this.property = property\n /** @type {string} */\n this.attribute = attribute\n }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n * @param {number|null} [mask]\n * @param {string} [space]\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n if (value) {\n // @ts-expect-error: assume `value` matches the expected value of `key`.\n values[key] = value\n }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n /** @type {string} */\n let prop\n\n for (prop in definition.properties) {\n if (own.call(definition.properties, prop)) {\n const value = definition.properties[prop]\n const info = new DefinedInfo(\n prop,\n definition.transform(definition.attributes || {}, prop),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(prop)\n ) {\n info.mustUseProperty = true\n }\n\n property[prop] = info\n\n normal[normalize(prop)] = prop\n normal[normalize(info.attribute)] = prop\n }\n }\n\n return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n space: 'xlink',\n transform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase()\n },\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n space: 'xml',\n transform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase()\n },\n properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n space: 'xmlns',\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n transform: caseInsensitiveTransform,\n properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n transform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n },\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n }\n})\n","import {\n boolean,\n overloadedBoolean,\n booleanish,\n number,\n spaceSeparated,\n commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: boolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // ``. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // ``. List of URIs to archives\n axis: null, // `` and ``. Use `scope` on ``\n background: null, // ``. Use CSS `background-image` instead\n bgColor: null, // `` and table elements. Use CSS `background-color` instead\n border: number, // ``. Use CSS `border-width` instead,\n borderColor: null, // `
`. Use CSS `border-color` instead,\n bottomMargin: number, // ``\n cellPadding: null, // `
`\n cellSpacing: null, // `
`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // ``\n clear: null, // `
`. Use CSS `clear` instead\n code: null, // ``\n codeBase: null, // ``\n codeType: null, // ``\n color: null, // `` and `
`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // ``\n event: null, // `\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n // Always the case.\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n partial: true,\n tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record} */\n const columnStart = {};\n /** @type {Array} */\n const resolveAllConstructs = [];\n /** @type {Array} */\n let chunks = [];\n /** @type {Array} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n /** @type {number} */\n let chunkIndex;\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {Pick} token\n * Token.\n * @returns {Array}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = [];\n /** @type {RegExpMatchArray | null} */\n let match;\n /** @type {number} */\n let next;\n /** @type {number} */\n let startPosition;\n /** @type {number} */\n let endPosition;\n /** @type {Code} */\n let code;\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n match = search.exec(value);\n endPosition = match && match.index !== undefined ? match.index : value.length;\n code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) chunks.push(-1);\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5);\n if (buffer) chunks.push(buffer);\n chunks.push(null);\n }\n return chunks;\n }\n}","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array} */\n const listStack = [];\n let index = -1;\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n while (++index <= length) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n events[start][1]._spread = listSpread;\n return length;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array} events\n * Events.\n * @returns {Array}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser} Parser\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {Omit} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n case 'ArrayBuffer':\n return as(new Uint8Array(value).buffer, value);\n case 'DataView': {\n const { buffer } = new Uint8Array(value);\n return as(new DataView(buffer), value);\n }\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n case 'DataView':\n return [ARRAY, asString];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type) {\n let spread = value;\n if (type === 'DataView') {\n spread = new Uint8Array(value.buffer);\n }\n else if (type === 'ArrayBuffer') {\n spread = new Uint8Array(value);\n }\n return as([type, [...spread]], value);\n }\n\n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''));\n if (!protocol) {\n return value;\n }\n const colon = value.indexOf(':');\n const questionMark = value.indexOf('?');\n const numberSign = value.indexOf('#');\n const slash = value.indexOf('/');\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))) {\n return value;\n }\n return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\nexport function normalizeUri(value) {\n /** @type {Array} */\n const result = [];\n let index = -1;\n let start = 0;\n let skip = 0;\n while (++index < value.length) {\n const code = value.charCodeAt(index);\n /** @type {string} */\n let replace = '';\n\n // A correct percent encoded value.\n if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n skip = 2;\n }\n // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code);\n }\n }\n // Astral.\n else if (code > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1);\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\n replace = String.fromCharCode(code, next);\n skip = 1;\n }\n // Lone surrogate.\n else {\n replace = \"\\uFFFD\";\n }\n }\n // Unicode.\n else {\n replace = String.fromCharCode(code);\n }\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace));\n start = index + skip + 1;\n replace = '';\n }\n if (skip) {\n index += skip;\n skip = 0;\n }\n }\n return result.join('') + value.slice(start);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const definition = state.footnoteById.get(\n state.footnoteOrder[referenceIndex]\n )\n\n if (!definition) {\n continue\n }\n\n const content = state.all(definition)\n const id = String(definition.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\n }\n\n const tail = content[content.length - 1]\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1]\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' '\n } else {\n tail.children.push({type: 'text', value: ' '})\n }\n\n tail.children.push(...backReferences)\n } else {\n content.push(...backReferences)\n }\n\n /** @type {Element} */\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {id: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(definition, listItem)\n\n listItems.push(listItem)\n }\n\n if (listItems.length === 0) {\n return\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {dataFootnotes: true, className: ['footnotes']},\n children: [\n {\n type: 'element',\n tagName: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: footnoteLabel}]\n },\n {type: 'text', value: '\\n'},\n {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n },\n {type: 'text', value: '\\n'}\n ]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly} */\n let result = empty\n /** @type {Readonly} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {Extract} node\n * Reference node (image, link).\n * @returns {Array}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType\n let suffix = ']'\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return [{type: 'text', value: '![' + node.alt + suffix}]\n }\n\n const contents = state.all(node)\n const head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift({type: 'text', value: '['})\n }\n\n const tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push({type: 'text', value: suffix})\n }\n\n return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node)\n const loose = parent ? listLoose(parent) : listItemLoose(node)\n /** @type {Properties} */\n const properties = {}\n /** @type {Array} */\n const children = []\n\n if (typeof node.checked === 'boolean') {\n const head = results[0]\n /** @type {Element} */\n let paragraph\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head\n } else {\n paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n results.unshift(paragraph)\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({type: 'text', value: ' '})\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {type: 'checkbox', checked: node.checked, disabled: true},\n children: []\n })\n\n // According to github-markdown-css, this class hides bullet.\n // See: .\n properties.className = ['task-list-item']\n }\n\n let index = -1\n\n while (++index < results.length) {\n const child = results[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (\n loose ||\n index !== 0 ||\n child.type !== 'element' ||\n child.tagName !== 'p'\n ) {\n children.push({type: 'text', value: '\\n'})\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n const tail = results[results.length - 1]\n\n // Add a final eol.\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({type: 'text', value: '\\n'})\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'li', properties, children}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n let loose = false\n if (node.type === 'list') {\n loose = node.spread || false\n const children = node.children\n let index = -1\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index])\n }\n }\n\n return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n const spread = node.spread\n\n return spread === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\nexport function trimLines(value) {\n const source = String(value)\n const search = /\\r?\\n|\\r/g\n let match = search.exec(source)\n let last = 0\n /** @type {Array} */\n const lines = []\n\n while (match) {\n lines.push(\n trimLine(source.slice(last, match.index), last > 0, true),\n match[0]\n )\n\n last = match.index + match[0].length\n match = search.exec(source)\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false))\n\n return lines.join('')\n}\n\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\nfunction trimLine(value, start, end) {\n let startIndex = 0\n let endIndex = value.length\n\n if (start) {\n let code = value.codePointAt(startIndex)\n\n while (code === tab || code === space) {\n startIndex++\n code = value.codePointAt(startIndex)\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1)\n\n while (code === tab || code === space) {\n endIndex--\n code = value.codePointAt(endIndex - 1)\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n\n if (node.lang) {\n properties.className = ['language-' + node.lang]\n }\n\n // Create ``.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `
`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   

\n * \n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array} all\n * Transform the children of an mdast parent to hast.\n * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map} definitionById\n * Definitions by their identifier.\n * @property {Map} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map} */\n const definitionById = new Map()\n /** @type {Map} */\n const footnoteById = new Map()\n /** @type {Map} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: .\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// \n\n/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given, runs the (rehype) plugins used on it with a\n * hast tree, then discards the result (*bridge mode*)\n * * otherwise, returns a hast tree, the plugins used after `remarkRehype`\n * are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only way\n * to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly | null | undefined} [options]\n * When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > .\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","export const CallableInstance =\n /**\n * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin, any, any> |\n * PluginTuple, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// .\n/**\n * @template {Array} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback} next\n * Callback.\n * @returns {(\n * Promise |\n * Promise | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : // Unknown.\n * Processor\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback> | undefined} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor}\n *\n * @overload\n * @param {Plugin} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Element, ElementContent, Nodes, Parents, Root} from 'hast'\n * @import {ComponentProps, ElementType, ReactElement} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList} from 'unified'\n */\n\n/**\n * @callback AllowElement\n * Filter elements.\n * @param {Readonly} element\n * Element to check.\n * @param {number} index\n * Index of `element` in `parent`.\n * @param {Readonly | undefined} parent\n * Parent of `element`.\n * @returns {boolean | null | undefined}\n * Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n * Extra fields we pass.\n * @property {Element | undefined} [node]\n * passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n * [Key in Extract]?: ElementType & ExtraProps>\n * }} Components\n * Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n * Deprecation.\n * @property {string} from\n * Old field.\n * @property {string} id\n * ID in readme.\n * @property {keyof Options} [to]\n * New field.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n * Filter elements (optional);\n * `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray | null | undefined} [allowedElements]\n * Tag names to allow (default: all tag names);\n * cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n * Markdown.\n * @property {string | null | undefined} [className]\n * Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n * Map tag names to components.\n * @property {ReadonlyArray | null | undefined} [disallowedElements]\n * Tag names to disallow (default: `[]`);\n * cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n * List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n * List of remark plugins to use.\n * @property {Readonly | null | undefined} [remarkRehypeOptions]\n * Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n * Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n * Extract (unwrap) what’s in disallowed elements (default: `false`);\n * normally when say `strong` is not allowed, it and it’s children are dropped,\n * with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n * Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @callback UrlTransform\n * Transform all URLs.\n * @param {string} url\n * URL.\n * @param {string} key\n * Property name (example: `'href'`).\n * @param {Readonly} node\n * Node.\n * @returns {string | null | undefined}\n * Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray>} */\nconst deprecations = [\n {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {\n from: 'allowNode',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowElement'\n },\n {\n from: 'allowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowedElements'\n },\n {\n from: 'disallowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'disallowedElements'\n },\n {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n {\n from: 'includeNodeIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n },\n {from: 'linkTarget', id: 'remove-linktarget'},\n {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n {from: 'source', id: 'change-source-to-children', to: 'children'},\n {from: 'sourcePos', id: '#remove-sourcepos'},\n {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly} options\n * Props.\n * @returns {ReactElement}\n * React element.\n */\nexport function Markdown(options) {\n const allowedElements = options.allowedElements\n const allowElement = options.allowElement\n const children = options.children || ''\n const className = options.className\n const components = options.components\n const disallowedElements = options.disallowedElements\n const rehypePlugins = options.rehypePlugins || emptyPlugins\n const remarkPlugins = options.remarkPlugins || emptyPlugins\n const remarkRehypeOptions = options.remarkRehypeOptions\n ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n : emptyRemarkRehypeOptions\n const skipHtml = options.skipHtml\n const unwrapDisallowed = options.unwrapDisallowed\n const urlTransform = options.urlTransform || defaultUrlTransform\n\n const processor = unified()\n .use(remarkParse)\n .use(remarkPlugins)\n .use(remarkRehype, remarkRehypeOptions)\n .use(rehypePlugins)\n\n const file = new VFile()\n\n if (typeof children === 'string') {\n file.value = children\n } else {\n unreachable(\n 'Unexpected value `' +\n children +\n '` for `children` prop, expected `string`'\n )\n }\n\n if (allowedElements && disallowedElements) {\n unreachable(\n 'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n )\n }\n\n for (const deprecation of deprecations) {\n if (Object.hasOwn(options, deprecation.from)) {\n unreachable(\n 'Unexpected `' +\n deprecation.from +\n '` prop, ' +\n (deprecation.to\n ? 'use `' + deprecation.to + '` instead'\n : 'remove it') +\n ' (see <' +\n changelog +\n '#' +\n deprecation.id +\n '> for more info)'\n )\n }\n }\n\n const mdastTree = processor.parse(file)\n /** @type {Nodes} */\n let hastTree = processor.runSync(mdastTree, file)\n\n // Wrap in `div` if there’s a class name.\n if (className) {\n hastTree = {\n type: 'element',\n tagName: 'div',\n properties: {className},\n // Assume no doctypes.\n children: /** @type {Array} */ (\n hastTree.type === 'root' ? hastTree.children : [hastTree]\n )\n }\n }\n\n visit(hastTree, transform)\n\n return toJsxRuntime(hastTree, {\n Fragment,\n // @ts-expect-error\n // React components are allowed to return numbers,\n // but not according to the types in hast-util-to-jsx-runtime\n components,\n ignoreInvalidStyle: true,\n jsx,\n jsxs,\n passKeys: true,\n passNode: true\n })\n\n /** @type {BuildVisitor} */\n function transform(node, index, parent) {\n if (node.type === 'raw' && parent && typeof index === 'number') {\n if (skipHtml) {\n parent.children.splice(index, 1)\n } else {\n parent.children[index] = {type: 'text', value: node.value}\n }\n\n return index\n }\n\n if (node.type === 'element') {\n /** @type {string} */\n let key\n\n for (key in urlAttributes) {\n if (\n Object.hasOwn(urlAttributes, key) &&\n Object.hasOwn(node.properties, key)\n ) {\n const value = node.properties[key]\n const test = urlAttributes[key]\n if (test === null || test.includes(node.tagName)) {\n node.properties[key] = urlTransform(String(value || ''), key, node)\n }\n }\n }\n }\n\n if (node.type === 'element') {\n let remove = allowedElements\n ? !allowedElements.includes(node.tagName)\n : disallowedElements\n ? disallowedElements.includes(node.tagName)\n : false\n\n if (!remove && allowElement && typeof index === 'number') {\n remove = !allowElement(node, index, parent)\n }\n\n if (remove && parent && typeof index === 'number') {\n if (unwrapDisallowed && node.children) {\n parent.children.splice(index, 1, ...node.children)\n } else {\n parent.children.splice(index, 1)\n }\n\n return index\n }\n }\n }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n * URL.\n * @returns {string}\n * Safe URL.\n */\nexport function defaultUrlTransform(value) {\n // Same as:\n // \n // But without the `encode` part.\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n\n if (\n // If there is no protocol, it’s relative.\n colon === -1 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash !== -1 && colon > slash) ||\n (questionMark !== -1 && colon > questionMark) ||\n (numberSign !== -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n safeProtocol.test(value.slice(0, colon))\n ) {\n return value\n }\n\n return ''\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"PropTypes\"];","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n handlers: {footnoteDefinition, footnoteReference}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n value += tracker.move(\n ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n )\n tracker.shift(4)\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map)\n )\n exit()\n\n return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n if (index === 0) {\n return line\n }\n\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: \n *\n * @type {Array}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray>} table\n * Table data (matrix of strings).\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array>} Cells per row. */\n const cellMatrix = []\n /** @type {Array>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array>} matrix\n * @param {Array | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: \n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: .\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: .\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // \n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // .\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: .\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > \n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array} events\n// * @param {Array} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly} context\n * @param {Readonly} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly} map\n * @param {Readonly} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly>} events\n * @param {number} index\n * @returns {Readonly}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/// \n/// \n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-gfm').Options} MdastOptions\n * @typedef {import('micromark-extension-gfm').Options} MicromarkOptions\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {MicromarkOptions & MdastOptions} Options\n * Configuration.\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n * Configuration.\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\n * Example Usage:\n * ```\n * \n * ```\n*/\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * A reusable message input component for chat interfaces.\n*/\n\nconst MessageInput = ({\n onSend,\n handleInputChange,\n value,\n placeholder = \"Start typing...\",\n buttonLabel = \"Send\",\n customStyles = null,\n inputComponentStyles = null,\n showTyping = false,\n}) => {\n return (\n
\n {\n if (e.key === \"Enter\" && !showTyping){\n onSend();\n }\n }}\n style={inputComponentStyles}\n className=\"message-input-field\"\n />\n \n {buttonLabel}\n \n
\n );\n};\n\nMessageInput.propTypes = {\n /**\n * Callback to send the current message. Triggered on button click or pressing \"Enter\".\n */\n onSend: PropTypes.func.isRequired,\n /**\n * Callback to handle input field changes.\n */\n handleInputChange: PropTypes.func.isRequired,\n /**\n * The current value of the input field.\n */\n value: PropTypes.string,\n /**\n * Placeholder text for the input field. Default is `\"Start typing...\"`.\n */\n placeholder: PropTypes.string,\n /**\n * Label for the send button. Default is `\"Send\"`.\n */\n buttonLabel: PropTypes.string,\n /**\n * Inline styles for the container holding the input and button.\n */\n customStyles: PropTypes.object,\n /**\n * Inline styles for the input field.\n */\n inputComponentStyles: PropTypes.object,\n /**\n * Disable button when waiting for message.\n */\n showTyping: PropTypes.bool,\n};\n\nexport default MessageInput;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./indicatorStyle.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./indicatorStyle.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport \"../styles/indicatorStyle.css\"\n\n/**\n * A resuable dots typing indicator\n*/\n\nconst TypingIndicatorDots = ({ color = \"gray\" }) => {\n return (\n
\n \n \n \n
\n );\n};\n\nTypingIndicatorDots.propTypes = {\n /**\n * Color of the dots\n */\n color: PropTypes.string,\n};\n\nexport default TypingIndicatorDots;\n","import React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport \"../styles/indicatorStyle.css\"\n\n/**\n * A resuable spinner typing indicator\n*/\nconst SPINNER_SIZE = 20;\n\nconst TypingIndicatorSpinner = ({ size = SPINNER_SIZE, color = \"gray\" }) => {\n return (\n
\n );\n};\n\nTypingIndicatorSpinner.propTypes = {\n /**\n * size of the spinner\n */\n size: PropTypes.number,\n /**\n * Color of the spinner\n */\n color: PropTypes.string,\n};\n\nexport default TypingIndicatorSpinner;\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./chatStyles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./chatStyles.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\n * Example Usage:\n * ```\n * \n * ```\n*/\n\nimport React, { useEffect, useRef, useState } from \"react\";\nimport Markdown from \"react-markdown\";\nimport PropTypes from \"prop-types\";\nimport remarkGfm from \"remark-gfm\";\n\nimport MessageInput from \"../../private/ChatMessageInput\";\nimport TypingIndicatorDots from \"../../private/DotsIndicator\";\nimport TypingIndicatorSpinner from \"../../private/SpinnerIndicator\";\n\nimport \"../../styles/chatStyles.css\";\n\nconst defaultUserBubbleStyle = {\n backgroundColor: \"#007bff\",\n color: \"white\",\n marginLeft: \"auto\",\n textAlign: \"right\",\n};\n\nconst defaultAssistantBubbleStyle = {\n backgroundColor: \"#f1f0f0\",\n color: \"black\",\n marginRight: \"auto\",\n textAlign: \"left\",\n};\n\n/**\n * ChatComponent - A React-based chat interface with customizable styles and typing indicators.\n * * This component provides a chat interface with support for:\n * - Displaying messages exchanged between 2 users typically a user and an assistant.\n * - Customizable themes and styles for the chat UI.\n * - Typing indicators for both the user and assistant.\n * - Integration with Dash via the `setProps` callback for state management.\n*/\n\nconst ChatComponent = ({\n /**\n * allowing snake_case to support Python's naming convention\n * except for setProps which is automatically set by dash and\n * it's expected to be named in the camelCase format.\n * https://dash.plotly.com/react-for-python-developers\n */\n id,\n messages = [],\n theme = \"light\",\n container_style: containerStyle = null,\n typing_indicator: typingIndicator = \"dots\",\n input_container_style: inputContainerStyle = null,\n input_text_style: inputTextStyle = null,\n setProps = () => { },\n fill_height: fillHeight = true,\n fill_width: fillWidth = true,\n user_bubble_style: userBubbleStyleProp = {},\n assistant_bubble_style: assistantBubbleStyleProp = {},\n input_placeholder: inputPlaceholder = \"\",\n class_name: className = \"\",\n persistence = false,\n persistence_type: persistenceType = \"local\",\n}) => {\n const userBubbleStyle = { ...defaultUserBubbleStyle, ...userBubbleStyleProp };\n const assistantBubbleStyle = { ...defaultAssistantBubbleStyle, ...assistantBubbleStyleProp };\n const [currentMessage, setCurrentMessage] = useState(\"\");\n const [localMessages, setLocalMessages] = useState([]);\n const [showTyping, setShowTyping] = useState(false);\n const [dropdownOpen, setDropdownOpen] = useState(false);\n const messageEndRef = useRef(null);\n const dropdownRef = useRef(null);\n\n let storeType;\n if (persistenceType === \"local\") {\n storeType = \"localStorage\";\n } else if (persistenceType === \"local\") {\n storeType = \"sessionStorage\";\n }\n\n // load messages from storage or initialize from messages\n useEffect(() => {\n if (persistence) {\n const savedMessages = JSON.parse(window[storeType].getItem(id)) || [];\n const initialized = JSON.parse(window[storeType].getItem(`${id}-initialized`));\n if (savedMessages.length > 0) {\n setLocalMessages(savedMessages);\n } else if (!initialized && messages.length > 0) {\n setLocalMessages(messages);\n window[storeType].setItem(id, JSON.stringify(messages));\n window[storeType].setItem(`${id}-initialized`, \"true\");\n }\n } else {\n setLocalMessages(messages);\n }\n }, [id, persistence, storeType]);\n\n // persist messages whenever localMessages updates\n useEffect(() => {\n if (persistence && localMessages.length > 0) {\n window[storeType].setItem(id, JSON.stringify(localMessages));\n }\n }, [localMessages, id, persistence, storeType]);\n\n // hide typing indicator & update local messages with new ones\n useEffect(() => {\n if (messages.length > 0) {\n const lastMsg = messages.slice(-1).pop();\n if (lastMsg?.role === \"assistant\" && showTyping) {\n setShowTyping(false);\n setLocalMessages((prevMessages) => [...prevMessages, lastMsg]);\n } else {\n setLocalMessages(messages || []);\n }\n }\n }, [messages]);\n\n useEffect(() => {\n if (messageEndRef.current) {\n messageEndRef.current.scrollIntoView({ behavior: \"smooth\" });\n }\n }, [localMessages]);\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\n setDropdownOpen(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, []);\n\n\n const handleInputChange = (e) => {\n setCurrentMessage(e.target.value);\n };\n\n const handleSendMessage = () => {\n if (currentMessage.trim()) {\n const newMessage = { role: \"user\", content: currentMessage };\n setLocalMessages((prevMessages) => {\n const updatedMessages = [...prevMessages, newMessage];\n if (persistence) {\n window[storeType].setItem(id, JSON.stringify(updatedMessages));\n }\n return updatedMessages;\n });\n\n if (setProps) {\n setProps({ new_message: newMessage });\n }\n\n setShowTyping(true);\n setCurrentMessage(\"\");\n }\n };\n\n const handleClearChat = () => {\n setLocalMessages([]);\n if (persistence) {\n window[storeType].removeItem(id);\n }\n setDropdownOpen(false);\n };\n\n const styleChatContainer = {};\n const inputFieldStyle = {};\n if (fillHeight) {\n styleChatContainer.height = \"100%\";\n } else {\n styleChatContainer.height = \"50%\";\n }\n if (fillWidth) {\n styleChatContainer.width = \"auto\";\n } else {\n styleChatContainer.width = \"50%\";\n }\n if (theme === \"dark\") {\n styleChatContainer.backgroundColor = \"#161618\";\n styleChatContainer.borderColor = \"#444444\";\n styleChatContainer.color = \"#ffffff\";\n inputFieldStyle.borderColor = \"#f1f0f0\";\n inputFieldStyle.color = \"#000000\";\n } else {\n styleChatContainer.backgroundColor = \"#ffffff\";\n styleChatContainer.borderColor = \"#e0e0e0\";\n styleChatContainer.color = \"#e0e0e0\";\n inputFieldStyle.borderColor = \"#e0e0e0\"\n }\n\n return (\n
\n {persistence && (\n
\n
\n \n {dropdownOpen && (\n
\n \n
\n )}\n
\n
\n )}\n
\n {localMessages.length === 0 ? (\n
No conversation yet.
\n ) : (\n localMessages.map((message, index) => {\n if (!message || typeof message !== \"object\" || !message.role || !message.content) {\n return null;\n }\n const bubbleStyle = message.role === \"user\" ? userBubbleStyle : assistantBubbleStyle;\n return (\n \n
\n (\n \n {children}\n \n ),\n }}\n >\n {message.content}\n \n
\n
\n )\n })\n )}\n {showTyping && (\n
\n {typingIndicator === \"dots\" && }\n {typingIndicator === \"spinner\" && }\n
\n )}\n
\n
\n
\n \n
\n
\n );\n};\n\nChatComponent.propTypes = {\n /**\n * The ID of this component, used to identify dash components\n * in callbacks. The ID needs to be unique across all of the\n * components in an app.\n */\n id: PropTypes.string,\n /**\n * An array of options. The list of chat messages. Each message object should have:\n * - `role` (string): The message sender, either \"user\" or \"assistant\".\n * - `content` (string): The content of the message.\n */\n messages: PropTypes.arrayOf(\n PropTypes.shape({\n role: PropTypes.oneOf([\"user\", \"assistant\"]).isRequired,\n content: PropTypes.string.isRequired,\n })\n ),\n /**\n * Dash-assigned callback that gets fired when the value for messages and isTyping changes.\n */\n setProps: PropTypes.func,\n /**\n * Theme for the chat interface. Default is \"light\". Use \"dark\" for a dark mode appearance.\n */\n theme: PropTypes.string,\n /**\n * Inline css styles to customize the chat container.\n */\n container_style: PropTypes.object,\n /**\n * The type of typing indicator to display. Options are:\n * - `\"dots\"`: Displays animated dots.\n * - `\"spinner\"`: Displays a spinner animation.\n */\n typing_indicator: PropTypes.oneOf([\"dots\", \"spinner\"]),\n /**\n * Latest chat message that was appended to messages array.\n */\n new_message: PropTypes.object,\n /**\n * Inline styles for the container holding the message input field.\n */\n input_container_style: PropTypes.object,\n /**\n * Inline styles for the message input field itself.\n */\n input_text_style: PropTypes.object,\n /**\n * Whether to vertically fill the screen with the chat container. If False, centers and constrains container to a maximum height.\n */\n fill_height: PropTypes.bool,\n /**\n * Whether to horizontally fill the screen with the chat container. If False, centers and constrains container to a maximum width.\n */\n fill_width: PropTypes.bool,\n /**\n * Css styles to customize the user message bubbles.\n */\n user_bubble_style: PropTypes.object,\n /**\n * Css styles to customize the assistant message bubbles.\n */\n assistant_bubble_style: PropTypes.object,\n /**\n * Placeholder input to bne used in the input field\n */\n input_placeholder: PropTypes.string,\n /**\n * Name for the class attribute to be added to the chat container\n */\n class_name: PropTypes.string,\n /**\n * Whether messages should be stored for persistence\n */\n persistence: PropTypes.bool,\n /**\n * Where persisted messages will be stored\n */\n persistence_type: PropTypes.oneOf([\"local\", \"session\"]),\n};\n\nexport default ChatComponent;\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","cssWithMappingToString","list","toString","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","hasOwn","Object","prototype","hasOwnProperty","toStr","defineProperty","gOPD","getOwnPropertyDescriptor","isArray","arr","Array","call","isPlainObject","obj","key","hasOwnConstructor","hasIsPrototypeOf","constructor","setProperty","target","options","name","enumerable","configurable","value","newValue","writable","getProperty","extend","src","copy","copyIsArray","clone","arguments","deep","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","trim","str","replace","style","TypeError","lineno","column","updatePosition","lines","match","lastIndexOf","position","start","line","node","Position","whitespace","end","source","errorsList","error","msg","err","Error","reason","filename","silent","re","m","exec","slice","comments","rules","c","comment","pos","charAt","type","declaration","prop","val","ret","property","decl","decls","declarations","f","Symbol","for","l","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","ref","__self","__source","q","a","g","b","d","e","h","defaultProps","$$typeof","props","_owner","current","Fragment","jsx","jsxs","stylesInDOM","getIndexByIdentifier","identifier","result","modulesToDom","idCountMap","identifiers","base","count","indexByIdentifier","css","sourceMap","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","getTarget","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","__importDefault","mod","__esModule","iterator","styleObject","inline_style_parser_1","default","hasIterator","forEach","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","o","get","r","toStringTag","url","getCurrentScript","script","currentScript","doc_scripts","getElementsByTagName","scripts","filter","s","async","text","textContent","split","jsonpScriptSrc","__jsonpScriptSrc__","chunkId","isLocal","test","srcFragments","fileFragments","nc","nameRe","nameReJsx","emptyOptions","empty","Schema","normal","space","merge","definitions","assign","normalize","toLowerCase","Info","attribute","boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","defined","powers","increment","checks","keys","DefinedInfo","mask","super","mark","check","values","own","create","properties","info","transform","includes","xlink","_","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlns","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabel","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","html","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","action","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","alt","as","autoCapitalize","autoComplete","autoFocus","autoPlay","blocking","capture","charSet","checked","cite","className","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","defer","dir","dirName","disabled","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","high","href","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","is","isMap","itemId","itemProp","itemRef","itemScope","itemType","kind","label","lang","language","loading","loop","low","manifest","max","maxLength","method","min","minLength","multiple","muted","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","open","optimum","pattern","ping","placeholder","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","readOnly","referrerPolicy","rel","required","reversed","rows","rowSpan","sandbox","scope","scoped","seamless","selected","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","shape","size","sizes","slot","span","spellCheck","srcDoc","srcLang","srcSet","step","tabIndex","title","translate","typeMustMatch","useMap","width","wrap","writingSuggestions","align","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","char","charOff","classId","clear","code","codeBase","codeType","color","compact","declare","event","face","frame","frameBorder","hSpace","leftMargin","link","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","object","profile","prompt","rev","rightMargin","scheme","scrolling","standby","summary","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","prefix","results","security","unselectable","svg","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","transformOrigin","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","begin","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","divisor","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","fill","filterRes","filterUnits","focusable","focusHighlight","format","fr","from","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","handler","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","offset","opacity","operator","order","orient","orientation","origin","overflow","overlay","path","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","resource","restart","rotate","rx","ry","scale","seed","side","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","string","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","to","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","valid","dash","cap","kebab","$0","camelcase","toUpperCase","hastToReact","pointEnd","point","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","place","ancestors","cause","message","ruleId","indexOf","parent","fatal","file","stack","actual","expected","note","emptyMap","Map","dashSomething","tableElements","Set","tableCellElement","docs","one","state","parentSchema","schema","tagName","findComponentFromName","alignValue","createProperty","tableCellAlignToStyle","has","stylePropertyNameCase","createElementProps","children","createChildren","child","thing","addNode","addChildren","pop","estree","evaluater","expression","body","evaluateExpression","crashEstree","mdxExpression","objectExpression","argument","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","root","passNode","countsByName","passKeys","set","Type","rest","dashes","find","Number","isNaN","settings","padRight","padLeft","toCamel","ignoreInvalidStyle","filePath","parseStyle","String","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","elementAttributeNameCase","allowExpression","computed","Boolean","optional","components","toDash","$1","urlAttributes","icon","includeImageAlt","includeHtml","items","parameters","chunkStart","unshift","SpliceBuffer","initial","left","right","RangeError","shift","setCursor","stop","POSITIVE_INFINITY","reverse","deleteCount","Math","trunc","removed","chunkedPush","pushMany","unshiftMany","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","events","_tokenizer","_isInFirstContentOfListItem","contentType","subcontent","_container","eventIndex","token","context","startPosition","startPositions","tokenizer","parser","childEvents","gaps","stream","previous","adjust","breaks","sliceStream","next","defineSkip","_gfmTasklistFirstContentOfListItem","write","combineExtensions","extensions","all","syntaxExtension","extension","hook","constructs","existing","before","add","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","fromCharCode","factorySpace","effects","ok","limit","enter","consume","exit","tokenize","contentStart","attempt","contentInitial","lineStart","self","childFlow","childToken","lineStartOffset","continued","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","now","containerContinue","flow","flowContinue","writeToChild","endOfFile","seen","entry","nok","disable","null","blankLine","partial","after","resolve","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","tail","sliceSerialize","flowInitial","afterConstruct","resolver","resolveAll","createResolver","initializeFactory","field","resolveAllLineSuffixes","notText","atBreak","extraResolver","chunks","tabs","bufferIndex","chunk","charCodeAt","_bufferIndex","thematicBreak","marker","sequence","furtherBlankLines","initialBlankLine","notInCurrentItem","indentConstruct","initialSize","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","blockQuote","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","escape","factoryWhitespace","normalizeIdentifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","resolveTo","heading","paragraph","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","decodeNamedCharacterReference","characterReference","innerHTML","numeric","characterEscape","lineEnding","called","labelEnd","newEvents","close","_inactive","_balanced","group","insideSpan","labelStart","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","openingSequence","closingSequence","use","nextEvents","_close","_open","movePoint","attentionMarkers","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","htmlText","returnState","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","tailExitIndex","headEnterIndex","between","createTokenizer","initialize","columnStart","resolveAllConstructs","consumed","constructFactory","construct","addResult","onsuccessfulcheck","accountForPotentialSkip","fields","expandTabs","atTab","serializeChunks","chunkIndex","go","main","expectedCode","startIndex","startBufferIndex","endIndex","endBufferIndex","view","sliceChunks","restore","onreturn","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","search","decodeNumericCharacterReference","parseInt","fromCodePoint","characterEscapeOrReference","decode","$2","hex","fromMarkdown","encoding","config","transforms","canContainEols","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","htmlFlowData","htmlTextData","image","listItem","spread","_spread","listItemValue","expectingFirstListItemValue","listOrdered","listUnordered","reference","referenceType","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","depth","onexitdata","characterEscapeValue","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","characterReferenceType","resume","flowCodeInside","codeFencedFence","onexithardbreak","inReference","fragment","labelText","ancestor","decodeString","atHardBreak","setextHeadingSlurpLineEnding","setextHeadingLineSequence","codePointAt","setextHeadingText","configure","mdastExtensions","tree","tokenStack","listStack","prepareList","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","and","errorHandler","onExitError","siblings","ordered","compiler","postprocess","atCarriageReturn","endPosition","TextDecoder","lastIndex","ceil","preprocess","combined","remarkParse","doc","env","globalThis","deserialize","serialized","$","out","unpair","Date","flags","RegExp","BigInt","Uint8Array","DataView","deserializer","EMPTY","asString","shouldSkip","TYPE","serialize","json","lossy","strict","pair","valueOf","toJSON","entries","toISOString","serializer","structuredClone","any","normalizeUri","skip","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","convert","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","testFunction","looksLikeANode","EXIT","visitParents","visitor","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","revert","subtype","suffix","contents","listItemLoose","trimLines","last","trimLine","blockquote","patch","applyData","break","delete","footnoteReference","clobberPrefix","safeId","footnoteOrder","counter","reuseCounter","footnoteCounts","dataFootnoteRef","sup","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","loose","listLoose","table","firstRow","tableContent","tableCell","tableRow","cellIndex","cells","cell","toml","ignore","yaml","footnoteDefinition","hName","hChildren","hProperties","defaultUnknownHandler","nodes","trimMarkdownSpaceStart","toHast","footnoteById","handlers","handle","passThrough","shallow","unknownHandler","createState","foot","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","dataFootnoteBackref","tailTail","dataFootnotes","footer","remarkRehype","destination","hastTree","run","bail","getPrototypeOf","minpath","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","minproc","isUrl","fileUrlOrPath","protocol","auth","VFile","isUint8Array","cwd","history","messages","stored","basename","assertNonEmpty","assertPart","dirname","stem","URL","hostname","pathname","third","decodeURIComponent","getPathFromURLPosix","urlToPath","fail","part","CallableInstance","proto","setPrototypeOf","Processor","Compiler","Parser","attachers","freezeIndex","frozen","namespace","transformers","fns","pipeline","middlewareIndex","callback","output","fn","middleware","fnExpectsCallback","done","then","middelware","trough","attacher","assertUnfrozen","freeze","transformer","parse","realFile","vfile","assertParser","process","assertCompiler","executor","Promise","reject","parseTree","realDone","compileTree","compileResult","processSync","complete","assertDone","assertNode","outputTree","resultingTree","runSync","addPlugin","addList","addPreset","plugin","plugins","entryIndex","primary","currentPrimary","unified","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","processor","deprecation","mdastTree","development","jsxDEV","isStaticChildren","columnNumber","fileName","lineNumber","developmentCreate","createEvaluater","toJsxRuntime","colon","questionMark","numberSign","ccount","character","toFunction","inConstruct","notInConstruct","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","exitLiteralAutolinkEmail","exitLiteralAutolink","transformGfmAutolinkLiterals","ignored","pairs","tupleOrList","tuple","toPairs","pairIndex","grandparent","change","matchObject","input","global","findAndReplace","findUrl","findEmail","domain","parts","isCorrectDomain","trailExec","trail","closingParenIndex","openingParens","closingParens","splitUrl","atext","email","enterFootnoteDefinition","enterFootnoteDefinitionLabelString","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","enterFootnoteCall","enterFootnoteCallString","exitFootnoteCallString","exitFootnoteCall","tracker","createTracker","move","subexit","safe","associationId","indentLines","containerFlow","blank","peek","constructsWithoutStrikethrough","enterStrikethrough","exitStrikethrough","handleDelete","containerPhrasing","defaultStringLength","toAlignment","listInScope","none","_1","unsafe","checkQuote","quote","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","checkEmphasis","betweenHead","betweenTail","attentionEncodeSurroundingInfo","compilePattern","formatLinkAsAutolink","resourceLink","checkBullet","bullet","checkRule","rule","phrasing","checkStrong","fence","checkFence","fences","formatCodeAsIndented","repeat","substring","longestStreak","encode","rank","literalWithBreak","setext","formatHeadingAsSetext","closeAtx","bulletCurrent","bulletOrdered","checkBulletOrdered","bulletOther","checkBulletOther","useDifferentMarker","bulletLastUsed","firstListItem","indexStack","listItemIndent","checkListItemIndent","incrementListMarker","some","ruleSpaces","repetition","ruleRepetition","checkRuleRepetition","enterTable","_align","inTable","exitTable","enterRow","enterCell","exitCodeText","gfmTableToMarkdown","padding","tableCellPadding","alignDelimiters","tablePipeAlign","stringLength","around","serializeData","handleTableRowAsData","handleTableAsData","handleTableCell","matrix","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","row","columnIndex","delimiterStart","delimiterEnd","markdownTable","exitCheck","exitParagraphWithTaskListItem","firstParaghraph","sibling","listItemWithTaskListItem","checkable","checkbox","wwwPrefix","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","emailDomainDotTrail","wwwAutolink","previousWww","previousUnbalanced","wwwAfter","protocolAutolink","previousProtocol","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","emailAutolink","dot","gfmAtext","previousEmail","emailDomain","emailDomainAfter","emailDomainDot","_gfmAutolinkLiteralWalkedInto","indent","tokenizePotentialGfmFootnoteCall","gfmFootnotes","resolveToPotentialGfmFootnoteCall","replacement","tokenizeGfmFootnoteCall","callStart","callData","callEscape","tokenizeDefinitionStart","labelAtMarker","whitespaceAfter","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","gfmStrikethrough","single","singleTilde","strikethrough","EditMap","editMap","at","addImplementation","sort","vecs","gfmTableAlign","inDelimiterRow","alignIndex","tokenizeTable","sizeB","bodyRowStart","headRowBefore","headRowBreak","headRowStart","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","resolveTable","currentTable","currentBody","currentCell","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","flushTableEnd","flushCell","range","rowEnd","previousCell","groupName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","tasklistCheck","spaceThenNonSpace","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","gfm","literalAutolink","literalAutolinkEmail","literalAutolinkHttp","literalAutolinkWww","gfmFootnoteDefinition","gfmFootnoteDefinitionLabelString","gfmFootnoteCall","gfmFootnoteCallString","tableData","tableHeader","taskListCheckValueChecked","taskListCheckValueUnchecked","gfmToMarkdown","MessageInput","_ref","onSend","handleInputChange","_ref$placeholder","_ref$buttonLabel","buttonLabel","_ref$customStyles","customStyles","_ref$inputComponentSt","inputComponentStyles","_ref$showTyping","showTyping","React","propTypes","PropTypes","isRequired","locals","TypingIndicatorDots","_ref$color","TypingIndicatorSpinner","_ref$size","borderTopColor","defaultUserBubbleStyle","backgroundColor","marginLeft","textAlign","defaultAssistantBubbleStyle","marginRight","ChatComponent","storeType","_ref$messages","_ref$theme","theme","_ref$container_style","container_style","containerStyle","_ref$typing_indicator","typing_indicator","typingIndicator","_ref$input_container_","input_container_style","inputContainerStyle","_ref$input_text_style","input_text_style","inputTextStyle","_ref$setProps","setProps","_ref$fill_height","fill_height","fillHeight","_ref$fill_width","fill_width","fillWidth","_ref$user_bubble_styl","user_bubble_style","userBubbleStyleProp","_ref$assistant_bubble","assistant_bubble_style","assistantBubbleStyleProp","_ref$input_placeholde","input_placeholder","inputPlaceholder","_ref$class_name","class_name","_ref$persistence","persistence","_ref$persistence_type","persistence_type","persistenceType","userBubbleStyle","_objectSpread","assistantBubbleStyle","_useState2","_slicedToArray","useState","currentMessage","setCurrentMessage","_useState4","localMessages","setLocalMessages","_useState6","setShowTyping","_useState8","dropdownOpen","setDropdownOpen","messageEndRef","useRef","dropdownRef","useEffect","savedMessages","getItem","initialized","setItem","lastMsg","prevMessages","_toConsumableArray","scrollIntoView","behavior","handleClickOutside","contains","addEventListener","removeEventListener","styleChatContainer","inputFieldStyle","removeItem","_typeof","bubbleStyle","_ref2","newMessage","updatedMessages","new_message"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"dash_chat.min.js","mappings":"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","sources":["webpack:///./src/styles/chatStyles.css","webpack:///./src/styles/indicatorStyle.css","webpack:///./node_modules/css-loader/dist/runtime/api.js","webpack:///./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack:///./node_modules/extend/index.js","webpack:///./node_modules/inline-style-parser/index.js","webpack:///./node_modules/react/cjs/react-jsx-runtime.production.min.js","webpack:///./node_modules/react/jsx-runtime.js","webpack:///./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack:///./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack:///./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack:///./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack:///./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack:///./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack:///./node_modules/style-to-object/cjs/index.js","webpack:///external window \"React\"","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///webpack/runtime/make namespace object","webpack:///webpack/runtime/compat","webpack:///webpack/runtime/nonce","webpack:///./node_modules/estree-util-is-identifier-name/lib/index.js","webpack:///./node_modules/hast-util-whitespace/lib/index.js","webpack:///./node_modules/property-information/lib/util/schema.js","webpack:///./node_modules/property-information/lib/util/merge.js","webpack:///./node_modules/property-information/lib/normalize.js","webpack:///./node_modules/property-information/lib/util/info.js","webpack:///./node_modules/property-information/lib/util/types.js","webpack:///./node_modules/property-information/lib/util/defined-info.js","webpack:///./node_modules/property-information/lib/util/create.js","webpack:///./node_modules/property-information/lib/xlink.js","webpack:///./node_modules/property-information/lib/xml.js","webpack:///./node_modules/property-information/lib/util/case-sensitive-transform.js","webpack:///./node_modules/property-information/lib/util/case-insensitive-transform.js","webpack:///./node_modules/property-information/lib/xmlns.js","webpack:///./node_modules/property-information/lib/aria.js","webpack:///./node_modules/property-information/lib/html.js","webpack:///./node_modules/property-information/lib/svg.js","webpack:///./node_modules/property-information/index.js","webpack:///./node_modules/property-information/lib/find.js","webpack:///./node_modules/property-information/lib/hast-to-react.js","webpack:///./node_modules/style-to-object/esm/index.mjs","webpack:///./node_modules/unist-util-position/lib/index.js","webpack:///./node_modules/unist-util-stringify-position/lib/index.js","webpack:///./node_modules/vfile-message/lib/index.js","webpack:///./node_modules/hast-util-to-jsx-runtime/lib/index.js","webpack:///./node_modules/comma-separated-tokens/index.js","webpack:///./node_modules/space-separated-tokens/index.js","webpack:///./node_modules/html-url-attributes/lib/index.js","webpack:///./node_modules/mdast-util-to-string/lib/index.js","webpack:///./node_modules/micromark-util-chunked/index.js","webpack:///./node_modules/micromark-util-subtokenize/lib/splice-buffer.js","webpack:///./node_modules/micromark-util-subtokenize/index.js","webpack:///./node_modules/micromark-util-combine-extensions/index.js","webpack:///./node_modules/micromark-util-character/index.js","webpack:///./node_modules/micromark-factory-space/index.js","webpack:///./node_modules/micromark/lib/initialize/content.js","webpack:///./node_modules/micromark/lib/initialize/document.js","webpack:///./node_modules/micromark-core-commonmark/lib/blank-line.js","webpack:///./node_modules/micromark-core-commonmark/lib/content.js","webpack:///./node_modules/micromark/lib/initialize/flow.js","webpack:///./node_modules/micromark/lib/initialize/text.js","webpack:///./node_modules/micromark-core-commonmark/lib/thematic-break.js","webpack:///./node_modules/micromark-core-commonmark/lib/list.js","webpack:///./node_modules/micromark-core-commonmark/lib/block-quote.js","webpack:///./node_modules/micromark-factory-destination/index.js","webpack:///./node_modules/micromark-factory-label/index.js","webpack:///./node_modules/micromark-factory-title/index.js","webpack:///./node_modules/micromark-factory-whitespace/index.js","webpack:///./node_modules/micromark-util-normalize-identifier/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/definition.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-indented.js","webpack:///./node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack:///./node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack:///./node_modules/micromark-util-html-tag-name/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/html-flow.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack:///./node_modules/decode-named-character-reference/index.dom.js","webpack:///./node_modules/micromark-core-commonmark/lib/character-reference.js","webpack:///./node_modules/micromark-core-commonmark/lib/character-escape.js","webpack:///./node_modules/micromark-core-commonmark/lib/line-ending.js","webpack:///./node_modules/micromark-util-resolve-all/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-end.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack:///./node_modules/micromark-util-classify-character/index.js","webpack:///./node_modules/micromark-core-commonmark/lib/attention.js","webpack:///./node_modules/micromark-core-commonmark/lib/autolink.js","webpack:///./node_modules/micromark-core-commonmark/lib/html-text.js","webpack:///./node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack:///./node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack:///./node_modules/micromark-core-commonmark/lib/code-text.js","webpack:///./node_modules/micromark/lib/constructs.js","webpack:///./node_modules/micromark/lib/create-tokenizer.js","webpack:///./node_modules/micromark/lib/preprocess.js","webpack:///./node_modules/micromark-util-decode-numeric-character-reference/index.js","webpack:///./node_modules/micromark-util-decode-string/index.js","webpack:///./node_modules/mdast-util-from-markdown/lib/index.js","webpack:///./node_modules/micromark/lib/postprocess.js","webpack:///./node_modules/micromark/lib/parse.js","webpack:///./node_modules/remark-parse/lib/index.js","webpack:///./node_modules/@ungap/structured-clone/esm/types.js","webpack:///./node_modules/@ungap/structured-clone/esm/deserialize.js","webpack:///./node_modules/@ungap/structured-clone/esm/serialize.js","webpack:///./node_modules/@ungap/structured-clone/esm/index.js","webpack:///./node_modules/micromark-util-sanitize-uri/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/footer.js","webpack:///./node_modules/unist-util-is/lib/index.js","webpack:///./node_modules/unist-util-visit-parents/lib/index.js","webpack:///./node_modules/unist-util-visit/lib/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/revert.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/list-item.js","webpack:///./node_modules/trim-lines/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/index.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/blockquote.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/break.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/code.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/delete.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/emphasis.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/footnote-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/heading.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/html.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/image-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/image.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/inline-code.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/link-reference.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/link.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/list.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/paragraph.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/root.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/strong.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table-cell.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/table-row.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/text.js","webpack:///./node_modules/mdast-util-to-hast/lib/handlers/thematic-break.js","webpack:///./node_modules/mdast-util-to-hast/lib/state.js","webpack:///./node_modules/mdast-util-to-hast/lib/index.js","webpack:///./node_modules/remark-rehype/lib/index.js","webpack:///./node_modules/bail/index.js","webpack:///./node_modules/unified/node_modules/is-plain-obj/index.js","webpack:///./node_modules/vfile/lib/minpath.browser.js","webpack:///./node_modules/vfile/lib/minproc.browser.js","webpack:///./node_modules/vfile/lib/minurl.shared.js","webpack:///./node_modules/vfile/lib/index.js","webpack:///./node_modules/vfile/lib/minurl.browser.js","webpack:///./node_modules/unified/lib/callable-instance.js","webpack:///./node_modules/unified/lib/index.js","webpack:///./node_modules/trough/lib/index.js","webpack:///./node_modules/react-markdown/lib/index.js","webpack:///external window \"PropTypes\"","webpack:///./node_modules/ccount/index.js","webpack:///./node_modules/mdast-util-find-and-replace/lib/index.js","webpack:///./node_modules/mdast-util-gfm-autolink-literal/lib/index.js","webpack:///./node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp/index.js","webpack:///./node_modules/mdast-util-gfm-footnote/lib/index.js","webpack:///./node_modules/mdast-util-gfm-strikethrough/lib/index.js","webpack:///./node_modules/markdown-table/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/blockquote.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/pattern-in-scope.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/break.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/code.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-quote.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/encode-character-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/encode-info.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/emphasis.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-emphasis.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/html.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/image.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/image-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/inline-code.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-link-as-autolink.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/link.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/link-reference.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-rule.js","webpack:///./node_modules/mdast-util-phrasing/lib/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/strong.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-strong.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-fence.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-code-as-indented.js","webpack:///./node_modules/longest-streak/index.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/definition.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/heading.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/format-heading-as-setext.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/list.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet-ordered.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-bullet-other.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/list-item.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-list-item-indent.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/paragraph.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/root.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/text.js","webpack:///./node_modules/mdast-util-to-markdown/lib/handle/thematic-break.js","webpack:///./node_modules/mdast-util-to-markdown/lib/util/check-rule-repetition.js","webpack:///./node_modules/mdast-util-gfm-table/lib/index.js","webpack:///./node_modules/mdast-util-gfm-task-list-item/lib/index.js","webpack:///./node_modules/micromark-extension-gfm-autolink-literal/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-footnote/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-strikethrough/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/edit-map.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/infer.js","webpack:///./node_modules/micromark-extension-gfm-table/lib/syntax.js","webpack:///./node_modules/micromark-extension-gfm-task-list-item/lib/syntax.js","webpack:///./node_modules/remark-gfm/lib/index.js","webpack:///./node_modules/micromark-extension-gfm/index.js","webpack:///./node_modules/mdast-util-gfm/lib/index.js","webpack:///./src/private/ChatMessageInput.js","webpack:///./src/styles/indicatorStyle.css?f59a","webpack:///./src/private/DotsIndicator.js","webpack:///./src/private/SpinnerIndicator.js","webpack:///./src/styles/chatStyles.css?5f1e","webpack:///./src/lib/components/ChatComponent.js"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.chat-container {\r\n border: 1px solid;\r\n border-radius: 8px;\r\n padding: 10px;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.chat-messages {\r\n flex: 1;\r\n overflow-y: auto;\r\n padding: 5px;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.message-input-container {\r\n display: flex;\r\n margin-top: 10px;\r\n padding-top: 10px;\r\n}\r\n\r\n.message-input-field {\r\n flex: 1;\r\n padding: 8px;\r\n border: 1px solid;\r\n border-radius: 4px;\r\n margin-right: 5px;\r\n}\r\n\r\n.message-input-field:focus {\r\n outline: none;\r\n}\r\n\r\n.message-input-button {\r\n background-color: #007bff;\r\n color: white;\r\n padding: 8px 12px;\r\n border: none;\r\n border-radius: 4px;\r\n cursor: pointer;\r\n}\r\n\r\n.message-input-container .disabled {\r\n background-color: #efefef4d;\r\n color: #1010104d;\r\n border-color: #efefef4d;\r\n cursor: auto;\r\n}\r\n\r\n.message-input-button:hover {\r\n background-color: #0056b3;\r\n}\r\n\r\n.message-input-container .disabled:hover {\r\n background-color: #efefef4d;\r\n}\r\n\r\n.chat-bubble {\r\n max-width: 75%;\r\n margin-bottom: 10px;\r\n padding: 0px 10px 0px;\r\n border-radius: 12px;\r\n word-wrap: break-word;\r\n}\r\n\r\n.user .markdown-content a {\r\n color: #fff;\r\n text-decoration: underline;\r\n}\r\n\r\n.user .markdown-content a:hover {\r\n color: #212427;\r\n}\r\n\r\n.markdown-content code {\r\n background-color: rgba(0, 0, 0, 0.4);\r\n color: #ffffffda;\r\n padding: 2px 4px;\r\n border-radius: 4px;\r\n}\r\n\r\n.empty-chat {\r\n margin: 0 auto;\r\n}\r\n\r\n.actionBtnContainer {\r\n position: relative;\r\n}\r\n\r\n.dotsButton {\r\n background: none;\r\n border: none;\r\n font-size: 1.5rem;\r\n cursor: pointer;\r\n}\r\n\r\n.dotsButton:hover {\r\n background: #cccccc1f;\r\n border-radius: 50%;\r\n cursor: pointer;\r\n}\r\n\r\n.dropdown {\r\n position: relative;\r\n display: inline-block;\r\n}\r\n\r\n.dropdownMenu {\r\n position: absolute;\r\n background-color: white;\r\n width: 100px;\r\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\r\n z-index: 1000;\r\n}\r\n\r\n.dropdownItem {\r\n padding: 8px 12px;\r\n background: none;\r\n border: none;\r\n text-align: left;\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.dropdownItem:hover {\r\n background-color: #f1f1f1;\r\n}\r\n\r\n`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/chatStyles.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,iBAAiB;IACjB,kBAAkB;IAClB,aAAa;IACb,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,OAAO;IACP,gBAAgB;IAChB,YAAY;IACZ,aAAa;IACb,sBAAsB;AAC1B;;AAEA;IACI,aAAa;IACb,gBAAgB;IAChB,iBAAiB;AACrB;;AAEA;IACI,OAAO;IACP,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;AACrB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,yBAAyB;IACzB,YAAY;IACZ,iBAAiB;IACjB,YAAY;IACZ,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,2BAA2B;IAC3B,gBAAgB;IAChB,uBAAuB;IACvB,YAAY;AAChB;;AAEA;IACI,yBAAyB;AAC7B;;AAEA;IACI,2BAA2B;AAC/B;;AAEA;IACI,cAAc;IACd,mBAAmB;IACnB,qBAAqB;IACrB,mBAAmB;IACnB,qBAAqB;AACzB;;AAEA;IACI,WAAW;IACX,0BAA0B;AAC9B;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,oCAAoC;IACpC,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;AACtB;;AAEA;IACI,cAAc;AAClB;;AAEA;IACI,kBAAkB;AACtB;;AAEA;IACI,gBAAgB;IAChB,YAAY;IACZ,iBAAiB;IACjB,eAAe;AACnB;;AAEA;IACI,qBAAqB;IACrB,kBAAkB;IAClB,eAAe;AACnB;;AAEA;IACI,kBAAkB;IAClB,qBAAqB;AACzB;;AAEA;IACI,kBAAkB;IAClB,uBAAuB;IACvB,YAAY;IACZ,wCAAwC;IACxC,aAAa;AACjB;;AAEA;IACI,iBAAiB;IACjB,gBAAgB;IAChB,YAAY;IACZ,gBAAgB;IAChB,WAAW;IACX,eAAe;AACnB;;AAEA;IACI,yBAAyB;AAC7B\",\"sourcesContent\":[\".chat-container {\\r\\n border: 1px solid;\\r\\n border-radius: 8px;\\r\\n padding: 10px;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.chat-messages {\\r\\n flex: 1;\\r\\n overflow-y: auto;\\r\\n padding: 5px;\\r\\n display: flex;\\r\\n flex-direction: column;\\r\\n}\\r\\n\\r\\n.message-input-container {\\r\\n display: flex;\\r\\n margin-top: 10px;\\r\\n padding-top: 10px;\\r\\n}\\r\\n\\r\\n.message-input-field {\\r\\n flex: 1;\\r\\n padding: 8px;\\r\\n border: 1px solid;\\r\\n border-radius: 4px;\\r\\n margin-right: 5px;\\r\\n}\\r\\n\\r\\n.message-input-field:focus {\\r\\n outline: none;\\r\\n}\\r\\n\\r\\n.message-input-button {\\r\\n background-color: #007bff;\\r\\n color: white;\\r\\n padding: 8px 12px;\\r\\n border: none;\\r\\n border-radius: 4px;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.message-input-container .disabled {\\r\\n background-color: #efefef4d;\\r\\n color: #1010104d;\\r\\n border-color: #efefef4d;\\r\\n cursor: auto;\\r\\n}\\r\\n\\r\\n.message-input-button:hover {\\r\\n background-color: #0056b3;\\r\\n}\\r\\n\\r\\n.message-input-container .disabled:hover {\\r\\n background-color: #efefef4d;\\r\\n}\\r\\n\\r\\n.chat-bubble {\\r\\n max-width: 75%;\\r\\n margin-bottom: 10px;\\r\\n padding: 0px 10px 0px;\\r\\n border-radius: 12px;\\r\\n word-wrap: break-word;\\r\\n}\\r\\n\\r\\n.user .markdown-content a {\\r\\n color: #fff;\\r\\n text-decoration: underline;\\r\\n}\\r\\n\\r\\n.user .markdown-content a:hover {\\r\\n color: #212427;\\r\\n}\\r\\n\\r\\n.markdown-content code {\\r\\n background-color: rgba(0, 0, 0, 0.4);\\r\\n color: #ffffffda;\\r\\n padding: 2px 4px;\\r\\n border-radius: 4px;\\r\\n}\\r\\n\\r\\n.empty-chat {\\r\\n margin: 0 auto;\\r\\n}\\r\\n\\r\\n.actionBtnContainer {\\r\\n position: relative;\\r\\n}\\r\\n\\r\\n.dotsButton {\\r\\n background: none;\\r\\n border: none;\\r\\n font-size: 1.5rem;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.dotsButton:hover {\\r\\n background: #cccccc1f;\\r\\n border-radius: 50%;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.dropdown {\\r\\n position: relative;\\r\\n display: inline-block;\\r\\n}\\r\\n\\r\\n.dropdownMenu {\\r\\n position: absolute;\\r\\n background-color: white;\\r\\n width: 100px;\\r\\n box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);\\r\\n z-index: 1000;\\r\\n}\\r\\n\\r\\n.dropdownItem {\\r\\n padding: 8px 12px;\\r\\n background: none;\\r\\n border: none;\\r\\n text-align: left;\\r\\n width: 100%;\\r\\n cursor: pointer;\\r\\n}\\r\\n\\r\\n.dropdownItem:hover {\\r\\n background-color: #f1f1f1;\\r\\n}\\r\\n\\r\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.typing-dots {\r\n display: flex;\r\n gap: 4px;\r\n}\r\n\r\n.typing-dots span {\r\n display: inline-block;\r\n width: 8px;\r\n height: 8px;\r\n background-color: gray;\r\n border-radius: 50%;\r\n animation: bounce 1.2s infinite ease-in-out;\r\n}\r\n\r\n.typing-dots span:nth-child(2) {\r\n animation-delay: 0.2s;\r\n}\r\n\r\n.typing-dots span:nth-child(3) {\r\n animation-delay: 0.4s;\r\n}\r\n\r\n.typing-spinner {\r\n display: inline-block;\r\n width: 20px;\r\n height: 20px;\r\n border: 3px solid gray;\r\n border-top: 3px solid transparent;\r\n border-radius: 50%;\r\n animation: spin 1s linear infinite;\r\n}\r\n\r\n@keyframes spin {\r\n from {\r\n transform: rotate(0deg);\r\n }\r\n\r\n to {\r\n transform: rotate(360deg);\r\n }\r\n}\r\n\r\n\r\n@keyframes bounce {\r\n\r\n 0%,\r\n 80%,\r\n 100% {\r\n transform: scale(0);\r\n }\r\n\r\n 40% {\r\n transform: scale(1);\r\n }\r\n}`, \"\",{\"version\":3,\"sources\":[\"webpack://./src/styles/indicatorStyle.css\"],\"names\":[],\"mappings\":\"AAAA;IACI,aAAa;IACb,QAAQ;AACZ;;AAEA;IACI,qBAAqB;IACrB,UAAU;IACV,WAAW;IACX,sBAAsB;IACtB,kBAAkB;IAClB,2CAA2C;AAC/C;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;AACzB;;AAEA;IACI,qBAAqB;IACrB,WAAW;IACX,YAAY;IACZ,sBAAsB;IACtB,iCAAiC;IACjC,kBAAkB;IAClB,kCAAkC;AACtC;;AAEA;IACI;QACI,uBAAuB;IAC3B;;IAEA;QACI,yBAAyB;IAC7B;AACJ;;;AAGA;;IAEI;;;QAGI,mBAAmB;IACvB;;IAEA;QACI,mBAAmB;IACvB;AACJ\",\"sourcesContent\":[\".typing-dots {\\r\\n display: flex;\\r\\n gap: 4px;\\r\\n}\\r\\n\\r\\n.typing-dots span {\\r\\n display: inline-block;\\r\\n width: 8px;\\r\\n height: 8px;\\r\\n background-color: gray;\\r\\n border-radius: 50%;\\r\\n animation: bounce 1.2s infinite ease-in-out;\\r\\n}\\r\\n\\r\\n.typing-dots span:nth-child(2) {\\r\\n animation-delay: 0.2s;\\r\\n}\\r\\n\\r\\n.typing-dots span:nth-child(3) {\\r\\n animation-delay: 0.4s;\\r\\n}\\r\\n\\r\\n.typing-spinner {\\r\\n display: inline-block;\\r\\n width: 20px;\\r\\n height: 20px;\\r\\n border: 3px solid gray;\\r\\n border-top: 3px solid transparent;\\r\\n border-radius: 50%;\\r\\n animation: spin 1s linear infinite;\\r\\n}\\r\\n\\r\\n@keyframes spin {\\r\\n from {\\r\\n transform: rotate(0deg);\\r\\n }\\r\\n\\r\\n to {\\r\\n transform: rotate(360deg);\\r\\n }\\r\\n}\\r\\n\\r\\n\\r\\n@keyframes bounce {\\r\\n\\r\\n 0%,\\r\\n 80%,\\r\\n 100% {\\r\\n transform: scale(0);\\r\\n }\\r\\n\\r\\n 40% {\\r\\n transform: scale(1);\\r\\n }\\r\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n if (!cssMapping) {\n return content;\n }\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n return [content].concat([sourceMapping]).join(\"\\n\");\n }\n return [content].join(\"\\n\");\n};","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","// http://www.w3.org/TR/CSS21/grammar.html\n// https://github.com/visionmedia/css-parse/pull/49#issuecomment-30088027\nvar COMMENT_REGEX = /\\/\\*[^*]*\\*+([^/*][^*]*\\*+)*\\//g;\n\nvar NEWLINE_REGEX = /\\n/g;\nvar WHITESPACE_REGEX = /^\\s*/;\n\n// declaration\nvar PROPERTY_REGEX = /^(\\*?[-#/*\\\\\\w]+(\\[[0-9a-z_-]+\\])?)\\s*/;\nvar COLON_REGEX = /^:\\s*/;\nvar VALUE_REGEX = /^((?:'(?:\\\\'|.)*?'|\"(?:\\\\\"|.)*?\"|\\([^)]*?\\)|[^};])+)/;\nvar SEMICOLON_REGEX = /^[;\\s]*/;\n\n// https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim#Polyfill\nvar TRIM_REGEX = /^\\s+|\\s+$/g;\n\n// strings\nvar NEWLINE = '\\n';\nvar FORWARD_SLASH = '/';\nvar ASTERISK = '*';\nvar EMPTY_STRING = '';\n\n// types\nvar TYPE_COMMENT = 'comment';\nvar TYPE_DECLARATION = 'declaration';\n\n/**\n * @param {String} style\n * @param {Object} [options]\n * @return {Object[]}\n * @throws {TypeError}\n * @throws {Error}\n */\nmodule.exports = function (style, options) {\n if (typeof style !== 'string') {\n throw new TypeError('First argument must be a string');\n }\n\n if (!style) return [];\n\n options = options || {};\n\n /**\n * Positional.\n */\n var lineno = 1;\n var column = 1;\n\n /**\n * Update lineno and column based on `str`.\n *\n * @param {String} str\n */\n function updatePosition(str) {\n var lines = str.match(NEWLINE_REGEX);\n if (lines) lineno += lines.length;\n var i = str.lastIndexOf(NEWLINE);\n column = ~i ? str.length - i : column + str.length;\n }\n\n /**\n * Mark position and patch `node.position`.\n *\n * @return {Function}\n */\n function position() {\n var start = { line: lineno, column: column };\n return function (node) {\n node.position = new Position(start);\n whitespace();\n return node;\n };\n }\n\n /**\n * Store position information for a node.\n *\n * @constructor\n * @property {Object} start\n * @property {Object} end\n * @property {undefined|String} source\n */\n function Position(start) {\n this.start = start;\n this.end = { line: lineno, column: column };\n this.source = options.source;\n }\n\n /**\n * Non-enumerable source string.\n */\n Position.prototype.content = style;\n\n var errorsList = [];\n\n /**\n * Error `msg`.\n *\n * @param {String} msg\n * @throws {Error}\n */\n function error(msg) {\n var err = new Error(\n options.source + ':' + lineno + ':' + column + ': ' + msg\n );\n err.reason = msg;\n err.filename = options.source;\n err.line = lineno;\n err.column = column;\n err.source = style;\n\n if (options.silent) {\n errorsList.push(err);\n } else {\n throw err;\n }\n }\n\n /**\n * Match `re` and return captures.\n *\n * @param {RegExp} re\n * @return {undefined|Array}\n */\n function match(re) {\n var m = re.exec(style);\n if (!m) return;\n var str = m[0];\n updatePosition(str);\n style = style.slice(str.length);\n return m;\n }\n\n /**\n * Parse whitespace.\n */\n function whitespace() {\n match(WHITESPACE_REGEX);\n }\n\n /**\n * Parse comments.\n *\n * @param {Object[]} [rules]\n * @return {Object[]}\n */\n function comments(rules) {\n var c;\n rules = rules || [];\n while ((c = comment())) {\n if (c !== false) {\n rules.push(c);\n }\n }\n return rules;\n }\n\n /**\n * Parse comment.\n *\n * @return {Object}\n * @throws {Error}\n */\n function comment() {\n var pos = position();\n if (FORWARD_SLASH != style.charAt(0) || ASTERISK != style.charAt(1)) return;\n\n var i = 2;\n while (\n EMPTY_STRING != style.charAt(i) &&\n (ASTERISK != style.charAt(i) || FORWARD_SLASH != style.charAt(i + 1))\n ) {\n ++i;\n }\n i += 2;\n\n if (EMPTY_STRING === style.charAt(i - 1)) {\n return error('End of comment missing');\n }\n\n var str = style.slice(2, i - 2);\n column += 2;\n updatePosition(str);\n style = style.slice(i);\n column += 2;\n\n return pos({\n type: TYPE_COMMENT,\n comment: str\n });\n }\n\n /**\n * Parse declaration.\n *\n * @return {Object}\n * @throws {Error}\n */\n function declaration() {\n var pos = position();\n\n // prop\n var prop = match(PROPERTY_REGEX);\n if (!prop) return;\n comment();\n\n // :\n if (!match(COLON_REGEX)) return error(\"property missing ':'\");\n\n // val\n var val = match(VALUE_REGEX);\n\n var ret = pos({\n type: TYPE_DECLARATION,\n property: trim(prop[0].replace(COMMENT_REGEX, EMPTY_STRING)),\n value: val\n ? trim(val[0].replace(COMMENT_REGEX, EMPTY_STRING))\n : EMPTY_STRING\n });\n\n // ;\n match(SEMICOLON_REGEX);\n\n return ret;\n }\n\n /**\n * Parse declarations.\n *\n * @return {Object[]}\n */\n function declarations() {\n var decls = [];\n\n comments(decls);\n\n // declarations\n var decl;\n while ((decl = declaration())) {\n if (decl !== false) {\n decls.push(decl);\n comments(decls);\n }\n }\n\n return decls;\n }\n\n whitespace();\n return declarations();\n};\n\n/**\n * Trim `str`.\n *\n * @param {String} str\n * @return {String}\n */\nfunction trim(str) {\n return str ? str.replace(TRIM_REGEX, EMPTY_STRING) : EMPTY_STRING;\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use strict\";\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n var needLayer = typeof obj.layer !== \"undefined\";\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n css += obj.css;\n if (needLayer) {\n css += \"}\";\n }\n if (obj.media) {\n css += \"}\";\n }\n if (obj.supports) {\n css += \"}\";\n }\n var sourceMap = obj.sourceMap;\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n }\n\n // For old IE\n /* istanbul ignore if */\n options.styleTagTransform(css, styleElement, options.options);\n}\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n styleElement.parentNode.removeChild(styleElement);\n}\n\n/* istanbul ignore next */\nfunction domAPI(options) {\n if (typeof document === \"undefined\") {\n return {\n update: function update() {},\n remove: function remove() {}\n };\n }\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\nmodule.exports = domAPI;","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n styleElement.appendChild(document.createTextNode(css));\n }\n}\nmodule.exports = styleTagTransform;","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.default = StyleToObject;\nvar inline_style_parser_1 = __importDefault(require(\"inline-style-parser\"));\n/**\n * Parses inline style to object.\n *\n * @param style - Inline style.\n * @param iterator - Iterator.\n * @returns - Style object or null.\n *\n * @example Parsing inline style to object:\n *\n * ```js\n * import parse from 'style-to-object';\n * parse('line-height: 42;'); // { 'line-height': '42' }\n * ```\n */\nfunction StyleToObject(style, iterator) {\n var styleObject = null;\n if (!style || typeof style !== 'string') {\n return styleObject;\n }\n var declarations = (0, inline_style_parser_1.default)(style);\n var hasIterator = typeof iterator === 'function';\n declarations.forEach(function (declaration) {\n if (declaration.type !== 'declaration') {\n return;\n }\n var property = declaration.property, value = declaration.value;\n if (hasIterator) {\n iterator(property, value, declaration);\n }\n else if (value) {\n styleObject = styleObject || {};\n styleObject[property] = value;\n }\n });\n return styleObject;\n}\n//# sourceMappingURL=index.js.map","module.exports = window[\"React\"];","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var getCurrentScript = function() {\n var script = document.currentScript;\n if (!script) {\n /* Shim for IE11 and below */\n /* Do not take into account async scripts and inline scripts */\n\n var doc_scripts = document.getElementsByTagName('script');\n var scripts = [];\n\n for (var i = 0; i < doc_scripts.length; i++) {\n scripts.push(doc_scripts[i]);\n }\n\n scripts = scripts.filter(function(s) { return !s.async && !s.text && !s.textContent; });\n script = scripts.slice(-1)[0];\n }\n\n return script;\n};\n\nvar isLocalScript = function(script) {\n return /\\/_dash-component-suites\\//.test(script.src);\n};\n\nObject.defineProperty(__webpack_require__, 'p', {\n get: (function () {\n var script = getCurrentScript();\n\n var url = script.src.split('/').slice(0, -1).join('/') + '/';\n\n return function() {\n return url;\n };\n })()\n});\n\nif (typeof jsonpScriptSrc !== 'undefined') {\n var __jsonpScriptSrc__ = jsonpScriptSrc;\n jsonpScriptSrc = function(chunkId) {\n var script = getCurrentScript();\n var isLocal = isLocalScript(script);\n\n var src = __jsonpScriptSrc__(chunkId);\n\n if(!isLocal) {\n return src;\n }\n\n var srcFragments = src.split('/');\n var fileFragments = srcFragments.slice(-1)[0].split('.');\n\n fileFragments.splice(1, 0, \"v0_2_0m1741710596\");\n srcFragments.splice(-1, 1, fileFragments.join('.'))\n\n return srcFragments.join('/');\n };\n}\n","__webpack_require__.nc = undefined;","/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [jsx=false]\n * Support JSX identifiers (default: `false`).\n */\n\nconst startRe = /[$_\\p{ID_Start}]/u\nconst contRe = /[$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst contReJsx = /[-$_\\u{200C}\\u{200D}\\p{ID_Continue}]/u\nconst nameRe = /^[$_\\p{ID_Start}][$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\nconst nameReJsx = /^[$_\\p{ID_Start}][-$_\\u{200C}\\u{200D}\\p{ID_Continue}]*$/u\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Checks if the given code point can start an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @returns {boolean}\n * Whether `code` can start an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function start(code) {\n return code ? startRe.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given code point can continue an identifier.\n *\n * @param {number | undefined} code\n * Code point to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `code` can continue an identifier.\n */\n// Note: `undefined` is supported so you can pass the result from `''.codePointAt`.\nexport function cont(code, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? contReJsx : contRe\n return code ? re.test(String.fromCodePoint(code)) : false\n}\n\n/**\n * Checks if the given value is a valid identifier name.\n *\n * @param {string} name\n * Identifier to check.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {boolean}\n * Whether `name` can be an identifier.\n */\nexport function name(name, options) {\n const settings = options || emptyOptions\n const re = settings.jsx ? nameReJsx : nameRe\n return re.test(name)\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See .\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @typedef {import('./info.js').Info} Info\n * @typedef {Record} Properties\n * @typedef {Record} Normal\n */\n\nexport class Schema {\n /**\n * @constructor\n * @param {Properties} property\n * @param {Normal} normal\n * @param {string} [space]\n */\n constructor(property, normal, space) {\n this.property = property\n this.normal = normal\n if (space) {\n this.space = space\n }\n }\n}\n\n/** @type {Properties} */\nSchema.prototype.property = {}\n/** @type {Normal} */\nSchema.prototype.normal = {}\n/** @type {string|null} */\nSchema.prototype.space = null\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {Schema[]} definitions\n * @param {string} [space]\n * @returns {Schema}\n */\nexport function merge(definitions, space) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n let index = -1\n\n while (++index < definitions.length) {\n Object.assign(property, definitions[index].property)\n Object.assign(normal, definitions[index].normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * @param {string} value\n * @returns {string}\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","export class Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n */\n constructor(property, attribute) {\n /** @type {string} */\n this.property = property\n /** @type {string} */\n this.attribute = attribute\n }\n}\n\n/** @type {string|null} */\nInfo.prototype.space = null\nInfo.prototype.boolean = false\nInfo.prototype.booleanish = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.number = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.spaceSeparated = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.defined = false\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","import {Info} from './info.js'\nimport * as types from './types.js'\n\n/** @type {Array} */\n// @ts-expect-error: hush.\nconst checks = Object.keys(types)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * @param {string} attribute\n * @param {number|null} [mask]\n * @param {string} [space]\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @param {DefinedInfo} values\n * @param {string} key\n * @param {unknown} value\n */\nfunction mark(values, key, value) {\n if (value) {\n // @ts-expect-error: assume `value` matches the expected value of `key`.\n values[key] = value\n }\n}\n","/**\n * @typedef {import('./schema.js').Properties} Properties\n * @typedef {import('./schema.js').Normal} Normal\n *\n * @typedef {Record} Attributes\n *\n * @typedef {Object} Definition\n * @property {Record} properties\n * @property {(attributes: Attributes, property: string) => string} transform\n * @property {string} [space]\n * @property {Attributes} [attributes]\n * @property {Array} [mustUseProperty]\n */\n\nimport {normalize} from '../normalize.js'\nimport {Schema} from './schema.js'\nimport {DefinedInfo} from './defined-info.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Definition} definition\n * @returns {Schema}\n */\nexport function create(definition) {\n /** @type {Properties} */\n const property = {}\n /** @type {Normal} */\n const normal = {}\n /** @type {string} */\n let prop\n\n for (prop in definition.properties) {\n if (own.call(definition.properties, prop)) {\n const value = definition.properties[prop]\n const info = new DefinedInfo(\n prop,\n definition.transform(definition.attributes || {}, prop),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(prop)\n ) {\n info.mustUseProperty = true\n }\n\n property[prop] = info\n\n normal[normalize(prop)] = prop\n normal[normalize(info.attribute)] = prop\n }\n }\n\n return new Schema(property, normal, definition.space)\n}\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n space: 'xlink',\n transform(_, prop) {\n return 'xlink:' + prop.slice(5).toLowerCase()\n },\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n }\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n space: 'xml',\n transform(_, prop) {\n return 'xml:' + prop.slice(3).toLowerCase()\n },\n properties: {xmlLang: null, xmlBase: null, xmlSpace: null}\n})\n","/**\n * @param {Record} attributes\n * @param {string} attribute\n * @returns {string}\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record} attributes\n * @param {string} property\n * @returns {string}\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n space: 'xmlns',\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n transform: caseInsensitiveTransform,\n properties: {xmlns: null, xmlnsXLink: null}\n})\n","import {booleanish, number, spaceSeparated} from './util/types.js'\nimport {create} from './util/create.js'\n\nexport const aria = create({\n transform(_, prop) {\n return prop === 'role' ? prop : 'aria-' + prop.slice(4).toLowerCase()\n },\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n }\n})\n","import {\n boolean,\n overloadedBoolean,\n booleanish,\n number,\n spaceSeparated,\n commaSeparated\n} from './util/types.js'\nimport {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const html = create({\n space: 'html',\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n transform: caseInsensitiveTransform,\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: boolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // ``. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // ``. List of URIs to archives\n axis: null, // `
` and ``. Use `scope` on ``\n background: null, // ``. Use CSS `background-image` instead\n bgColor: null, // `` and table elements. Use CSS `background-color` instead\n border: number, // ``. Use CSS `border-width` instead,\n borderColor: null, // `
`. Use CSS `border-color` instead,\n bottomMargin: number, // ``\n cellPadding: null, // `
`\n cellSpacing: null, // `
`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // ``\n clear: null, // `
`. Use CSS `clear` instead\n code: null, // ``\n codeBase: null, // ``\n codeType: null, // ``\n color: null, // `` and `
`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // ``\n event: null, // `\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code);\n buffer = '';\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase();\n if (htmlRawNames.includes(name)) {\n effects.consume(code);\n return continuationClose;\n }\n return continuation(code);\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n // Always the case.\n effects.consume(code);\n buffer += String.fromCharCode(code);\n return continuationRawEndTag;\n }\n return continuation(code);\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code);\n return continuationClose;\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code);\n return continuationDeclarationInside;\n }\n return continuation(code);\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"htmlFlowData\");\n return continuationAfter(code);\n }\n effects.consume(code);\n return continuationClose;\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit(\"htmlFlow\");\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start;\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return effects.attempt(blankLine, ok, nok);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nconst nonLazyContinuation = {\n partial: true,\n tokenize: tokenizeNonLazyContinuation\n};\n\n/** @type {Construct} */\nexport const codeFenced = {\n concrete: true,\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this;\n /** @type {Construct} */\n const closeStart = {\n partial: true,\n tokenize: tokenizeCloseStart\n };\n let initialPrefix = 0;\n let sizeOpen = 0;\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code);\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1];\n initialPrefix = tail && tail[1].type === \"linePrefix\" ? tail[2].sliceSerialize(tail[1], true).length : 0;\n marker = code;\n effects.enter(\"codeFenced\");\n effects.enter(\"codeFencedFence\");\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++;\n effects.consume(code);\n return sequenceOpen;\n }\n if (sizeOpen < 3) {\n return nok(code);\n }\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, infoBefore, \"whitespace\")(code) : infoBefore(code);\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return self.interrupt ? ok(code) : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFencedFenceInfo\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return info(code);\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return infoBefore(code);\n }\n if (markdownSpace(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceInfo\");\n return factorySpace(effects, metaBefore, \"whitespace\")(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return info;\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code);\n }\n effects.enter(\"codeFencedFenceMeta\");\n effects.enter(\"chunkString\", {\n contentType: \"string\"\n });\n return meta(code);\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function meta(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"chunkString\");\n effects.exit(\"codeFencedFenceMeta\");\n return infoBefore(code);\n }\n if (code === 96 && code === marker) {\n return nok(code);\n }\n effects.consume(code);\n return meta;\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code);\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return contentStart;\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code) ? factorySpace(effects, beforeContentChunk, \"linePrefix\", initialPrefix + 1)(code) : beforeContentChunk(code);\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code);\n }\n effects.enter(\"codeFlowValue\");\n return contentChunk(code);\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFlowValue\");\n return beforeContentChunk(code);\n }\n effects.consume(code);\n return contentChunk;\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit(\"codeFenced\");\n return ok(code);\n }\n\n /**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0;\n return startBefore;\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return start;\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter(\"codeFencedFence\");\n return markdownSpace(code) ? factorySpace(effects, beforeSequenceClose, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : beforeSequenceClose(code);\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter(\"codeFencedFenceSequence\");\n return sequenceClose(code);\n }\n return nok(code);\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++;\n effects.consume(code);\n return sequenceClose;\n }\n if (size >= sizeOpen) {\n effects.exit(\"codeFencedFenceSequence\");\n return markdownSpace(code) ? factorySpace(effects, sequenceCloseAfter, \"whitespace\")(code) : sequenceCloseAfter(code);\n }\n return nok(code);\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit(\"codeFencedFence\");\n return ok(code);\n }\n return nok(code);\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code);\n }\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineStart;\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code);\n }\n}","/// \n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n const characterReference = '&' + value + ';'\n element.innerHTML = characterReference\n const char = element.textContent\n\n // Some named character references do not require the closing semicolon\n // (`¬`, for instance), which leads to situations where parsing the assumed\n // named reference of `¬it;` will result in the string `¬it;`.\n // When we encounter a trailing semicolon after parsing, and the character\n // reference to decode was not a semicolon (`;`), we can assume that the\n // matching was not complete.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n return false\n }\n\n // If the decoded string is equal to the input, the character reference was\n // not valid.\n // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n // yield `null`.\n return char === characterReference ? false : char\n}\n","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { asciiAlphanumeric, asciiDigit, asciiHexDigit } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this;\n let size = 0;\n /** @type {number} */\n let max;\n /** @type {(code: Code) => boolean} */\n let test;\n return start;\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterReference\");\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n return open;\n }\n\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 35) {\n effects.enter(\"characterReferenceMarkerNumeric\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerNumeric\");\n return numeric;\n }\n effects.enter(\"characterReferenceValue\");\n max = 31;\n test = asciiAlphanumeric;\n return value(code);\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function numeric(code) {\n if (code === 88 || code === 120) {\n effects.enter(\"characterReferenceMarkerHexadecimal\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarkerHexadecimal\");\n effects.enter(\"characterReferenceValue\");\n max = 6;\n test = asciiHexDigit;\n return value;\n }\n effects.enter(\"characterReferenceValue\");\n max = 7;\n test = asciiDigit;\n return value(code);\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit(\"characterReferenceValue\");\n if (test === asciiAlphanumeric && !decodeNamedCharacterReference(self.sliceSerialize(token))) {\n return nok(code);\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter(\"characterReferenceMarker\");\n effects.consume(code);\n effects.exit(\"characterReferenceMarker\");\n effects.exit(\"characterReference\");\n return ok;\n }\n if (test(code) && size++ < max) {\n effects.consume(code);\n return value;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiPunctuation } from 'micromark-util-character';\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"characterEscape\");\n effects.enter(\"escapeMarker\");\n effects.consume(code);\n effects.exit(\"escapeMarker\");\n return inside;\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\n if (asciiPunctuation(code)) {\n effects.enter(\"characterEscapeValue\");\n effects.consume(code);\n effects.exit(\"characterEscapeValue\");\n effects.exit(\"characterEscape\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start;\n\n /** @type {State} */\n function start(code) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return factorySpace(effects, ok, \"linePrefix\");\n }\n}","/**\n * @import {Event, Resolver, TokenizeContext} from 'micromark-util-types'\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {ReadonlyArray<{resolveAll?: Resolver | undefined}>} constructs\n * List of constructs, optionally with `resolveAll`s.\n * @param {Array} events\n * List of events.\n * @param {TokenizeContext} context\n * Context used by `tokenize`.\n * @returns {Array}\n * Changed events.\n */\nexport function resolveAll(constructs, events, context) {\n /** @type {Array} */\n const called = []\n let index = -1\n\n while (++index < constructs.length) {\n const resolve = constructs[index].resolveAll\n\n if (resolve && !called.includes(resolve)) {\n events = resolve(events, context)\n called.push(resolve)\n }\n }\n\n return events\n}\n","/**\n * @import {\n * Construct,\n * Event,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { factoryDestination } from 'micromark-factory-destination';\nimport { factoryLabel } from 'micromark-factory-label';\nimport { factoryTitle } from 'micromark-factory-title';\nimport { factoryWhitespace } from 'micromark-factory-whitespace';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n resolveAll: resolveAllLabelEnd,\n resolveTo: resolveToLabelEnd,\n tokenize: tokenizeLabelEnd\n};\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n};\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n};\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n};\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1;\n /** @type {Array} */\n const newEvents = [];\n while (++index < events.length) {\n const token = events[index][1];\n newEvents.push(events[index]);\n if (token.type === \"labelImage\" || token.type === \"labelLink\" || token.type === \"labelEnd\") {\n // Remove the marker.\n const offset = token.type === \"labelImage\" ? 4 : 2;\n token.type = \"data\";\n index += offset;\n }\n }\n\n // If the events are equal, we don't have to copy newEvents to events\n if (events.length !== newEvents.length) {\n splice(events, 0, events.length, newEvents);\n }\n return events;\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length;\n let offset = 0;\n /** @type {Token} */\n let token;\n /** @type {number | undefined} */\n let open;\n /** @type {number | undefined} */\n let close;\n /** @type {Array} */\n let media;\n\n // Find an opening.\n while (index--) {\n token = events[index][1];\n if (open) {\n // If we see another link, or inactive link label, we’ve been here before.\n if (token.type === \"link\" || token.type === \"labelLink\" && token._inactive) {\n break;\n }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\n if (events[index][0] === 'enter' && token.type === \"labelLink\") {\n token._inactive = true;\n }\n } else if (close) {\n if (events[index][0] === 'enter' && (token.type === \"labelImage\" || token.type === \"labelLink\") && !token._balanced) {\n open = index;\n if (token.type !== \"labelLink\") {\n offset = 2;\n break;\n }\n }\n } else if (token.type === \"labelEnd\") {\n close = index;\n }\n }\n const group = {\n type: events[open][1].type === \"labelLink\" ? \"link\" : \"image\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[events.length - 1][1].end\n }\n };\n const label = {\n type: \"label\",\n start: {\n ...events[open][1].start\n },\n end: {\n ...events[close][1].end\n }\n };\n const text = {\n type: \"labelText\",\n start: {\n ...events[open + offset + 2][1].end\n },\n end: {\n ...events[close - 2][1].start\n }\n };\n media = [['enter', group, context], ['enter', label, context]];\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3));\n\n // Text open.\n media = push(media, [['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n media = push(media, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + offset + 4, close - 3), context));\n\n // Text close, marker close, label close.\n media = push(media, [['exit', text, context], events[close - 2], events[close - 1], ['exit', label, context]]);\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1));\n\n // Media close.\n media = push(media, [['exit', group, context]]);\n splice(events, open, events.length, media);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n /** @type {Token} */\n let labelStart;\n /** @type {boolean} */\n let defined;\n\n // Find an opening.\n while (index--) {\n if ((self.events[index][1].type === \"labelImage\" || self.events[index][1].type === \"labelLink\") && !self.events[index][1]._balanced) {\n labelStart = self.events[index][1];\n break;\n }\n }\n return start;\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code);\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code);\n }\n defined = self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n })));\n effects.enter(\"labelEnd\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelEnd\");\n return after;\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(resourceConstruct, labelEndOk, defined ? labelEndOk : labelEndNok)(code);\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(referenceFullConstruct, labelEndOk, defined ? referenceNotFull : labelEndNok)(code);\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code);\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(referenceCollapsedConstruct, labelEndOk, labelEndNok)(code);\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code);\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true;\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart;\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter(\"resource\");\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n return resourceBefore;\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceOpen)(code) : resourceOpen(code);\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code);\n }\n return factoryDestination(effects, resourceDestinationAfter, resourceDestinationMissing, \"resourceDestination\", \"resourceDestinationLiteral\", \"resourceDestinationLiteralMarker\", \"resourceDestinationRaw\", \"resourceDestinationString\", 32)(code);\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceBetween)(code) : resourceEnd(code);\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code);\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(effects, resourceTitleAfter, nok, \"resourceTitle\", \"resourceTitleMarker\", \"resourceTitleString\")(code);\n }\n return resourceEnd(code);\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code) ? factoryWhitespace(effects, resourceEnd)(code) : resourceEnd(code);\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(code) {\n if (code === 41) {\n effects.enter(\"resourceMarker\");\n effects.consume(code);\n effects.exit(\"resourceMarker\");\n effects.exit(\"resource\");\n return ok;\n }\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this;\n return referenceFull;\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(self, effects, referenceFullAfter, referenceFullMissing, \"reference\", \"referenceMarker\", \"referenceString\")(code);\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(code) {\n return self.parser.defined.includes(normalizeIdentifier(self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1))) ? ok(code) : nok(code);\n }\n\n /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart;\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter(\"reference\");\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n return referenceCollapsedOpen;\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(code) {\n if (code === 93) {\n effects.enter(\"referenceMarker\");\n effects.consume(code);\n effects.exit(\"referenceMarker\");\n effects.exit(\"reference\");\n return ok;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartImage\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelImage\");\n effects.enter(\"labelImageMarker\");\n effects.consume(code);\n effects.exit(\"labelImageMarker\");\n return open;\n }\n\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 91) {\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelImage\");\n return after;\n }\n return nok(code);\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {Code} from 'micromark-util-types'\n */\n\nimport { markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\n/**\n * Classify whether a code represents whitespace, punctuation, or something\n * else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * > 👉 **Note**: eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * Code.\n * @returns {typeof constants.characterGroupWhitespace | typeof constants.characterGroupPunctuation | undefined}\n * Group.\n */\nexport function classifyCharacter(code) {\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return 1;\n }\n if (unicodePunctuation(code)) {\n return 2;\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * Event,\n * Point,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { push, splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n resolveAll: resolveAllAttention,\n tokenize: tokenizeAttention\n};\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n// eslint-disable-next-line complexity\nfunction resolveAllAttention(events, context) {\n let index = -1;\n /** @type {number} */\n let open;\n /** @type {Token} */\n let group;\n /** @type {Token} */\n let text;\n /** @type {Token} */\n let openingSequence;\n /** @type {Token} */\n let closingSequence;\n /** @type {number} */\n let use;\n /** @type {Array} */\n let nextEvents;\n /** @type {number} */\n let offset;\n\n // Walk through all events.\n //\n // Note: performance of this is fine on an mb of normal markdown, but it’s\n // a bottleneck for malicious stuff.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'attentionSequence' && events[index][1]._close) {\n open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'attentionSequence' && events[open][1]._open &&\n // If the markers are the same:\n context.sliceSerialize(events[open][1]).charCodeAt(0) === context.sliceSerialize(events[index][1]).charCodeAt(0)) {\n // If the opening can close or the closing can open,\n // and the close size *is not* a multiple of three,\n // but the sum of the opening and closing size *is* multiple of three,\n // then don’t match.\n if ((events[open][1]._close || events[index][1]._open) && (events[index][1].end.offset - events[index][1].start.offset) % 3 && !((events[open][1].end.offset - events[open][1].start.offset + events[index][1].end.offset - events[index][1].start.offset) % 3)) {\n continue;\n }\n\n // Number of markers to use from the sequence.\n use = events[open][1].end.offset - events[open][1].start.offset > 1 && events[index][1].end.offset - events[index][1].start.offset > 1 ? 2 : 1;\n const start = {\n ...events[open][1].end\n };\n const end = {\n ...events[index][1].start\n };\n movePoint(start, -use);\n movePoint(end, use);\n openingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start,\n end: {\n ...events[open][1].end\n }\n };\n closingSequence = {\n type: use > 1 ? \"strongSequence\" : \"emphasisSequence\",\n start: {\n ...events[index][1].start\n },\n end\n };\n text = {\n type: use > 1 ? \"strongText\" : \"emphasisText\",\n start: {\n ...events[open][1].end\n },\n end: {\n ...events[index][1].start\n }\n };\n group = {\n type: use > 1 ? \"strong\" : \"emphasis\",\n start: {\n ...openingSequence.start\n },\n end: {\n ...closingSequence.end\n }\n };\n events[open][1].end = {\n ...openingSequence.start\n };\n events[index][1].start = {\n ...closingSequence.end\n };\n nextEvents = [];\n\n // If there are more markers in the opening, add them before.\n if (events[open][1].end.offset - events[open][1].start.offset) {\n nextEvents = push(nextEvents, [['enter', events[open][1], context], ['exit', events[open][1], context]]);\n }\n\n // Opening.\n nextEvents = push(nextEvents, [['enter', group, context], ['enter', openingSequence, context], ['exit', openingSequence, context], ['enter', text, context]]);\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(nextEvents, resolveAll(context.parser.constructs.insideSpan.null, events.slice(open + 1, index), context));\n\n // Closing.\n nextEvents = push(nextEvents, [['exit', text, context], ['enter', closingSequence, context], ['exit', closingSequence, context], ['exit', group, context]]);\n\n // If there are more markers in the closing, add them after.\n if (events[index][1].end.offset - events[index][1].start.offset) {\n offset = 2;\n nextEvents = push(nextEvents, [['enter', events[index][1], context], ['exit', events[index][1], context]]);\n } else {\n offset = 0;\n }\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - offset - 2;\n break;\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data';\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAttention(effects, ok) {\n const attentionMarkers = this.parser.constructs.attentionMarkers.null;\n const previous = this.previous;\n const before = classifyCharacter(previous);\n\n /** @type {NonNullable} */\n let marker;\n return start;\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code;\n effects.enter('attentionSequence');\n return inside(code);\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code);\n return inside;\n }\n const token = effects.exit('attentionSequence');\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code);\n\n // Always populated by defaults.\n\n const open = !after || after === 2 && before || attentionMarkers.includes(code);\n const close = !before || before === 2 && after || attentionMarkers.includes(previous);\n token._open = Boolean(marker === 42 ? open : open && (before || !close));\n token._close = Boolean(marker === 42 ? close : close && (after || !open));\n return ok(code);\n }\n}\n\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * Point.\n * @param {number} offset\n * Amount to move.\n * @returns {undefined}\n * Nothing.\n */\nfunction movePoint(point, offset) {\n point.column += offset;\n point.offset += offset;\n point._bufferIndex += offset;\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { asciiAlphanumeric, asciiAlpha, asciiAtext, asciiControl } from 'micromark-util-character';\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0;\n return start;\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"autolink\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.enter(\"autolinkProtocol\");\n return open;\n }\n\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code);\n return schemeOrEmailAtext;\n }\n if (code === 64) {\n return nok(code);\n }\n return emailAtext(code);\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1;\n return schemeInsideOrEmailAtext(code);\n }\n return emailAtext(code);\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code);\n size = 0;\n return urlInside;\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if ((code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) && size++ < 32) {\n effects.consume(code);\n return schemeInsideOrEmailAtext;\n }\n size = 0;\n return emailAtext(code);\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit(\"autolinkProtocol\");\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code);\n }\n effects.consume(code);\n return urlInside;\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code);\n return emailAtSignOrDot;\n }\n if (asciiAtext(code)) {\n effects.consume(code);\n return emailAtext;\n }\n return nok(code);\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code);\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailLabel(code) {\n if (code === 46) {\n effects.consume(code);\n size = 0;\n return emailAtSignOrDot;\n }\n if (code === 62) {\n // Exit, then change the token type.\n effects.exit(\"autolinkProtocol\").type = \"autolinkEmail\";\n effects.enter(\"autolinkMarker\");\n effects.consume(code);\n effects.exit(\"autolinkMarker\");\n effects.exit(\"autolink\");\n return ok;\n }\n return emailValue(code);\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel;\n effects.consume(code);\n return next;\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Code,\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { asciiAlphanumeric, asciiAlpha, markdownLineEndingOrSpace, markdownLineEnding, markdownSpace } from 'micromark-util-character';\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this;\n /** @type {NonNullable | undefined} */\n let marker;\n /** @type {number} */\n let index;\n /** @type {State} */\n let returnState;\n return start;\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"htmlText\");\n effects.enter(\"htmlTextData\");\n effects.consume(code);\n return open;\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code);\n return declarationOpen;\n }\n if (code === 47) {\n effects.consume(code);\n return tagCloseStart;\n }\n if (code === 63) {\n effects.consume(code);\n return instruction;\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagOpen;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code);\n return commentOpenInside;\n }\n if (code === 91) {\n effects.consume(code);\n index = 0;\n return cdataOpenInside;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return declaration;\n }\n return nok(code);\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return nok(code);\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 45) {\n effects.consume(code);\n return commentClose;\n }\n if (markdownLineEnding(code)) {\n returnState = comment;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return comment;\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code);\n return commentEnd;\n }\n return comment(code);\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62 ? end(code) : code === 45 ? commentClose(code) : comment(code);\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = \"CDATA[\";\n if (code === value.charCodeAt(index++)) {\n effects.consume(code);\n return index === value.length ? cdata : cdataOpenInside;\n }\n return nok(code);\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataClose;\n }\n if (markdownLineEnding(code)) {\n returnState = cdata;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return cdata;\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code);\n }\n if (code === 93) {\n effects.consume(code);\n return cdataEnd;\n }\n return cdata(code);\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code);\n }\n if (markdownLineEnding(code)) {\n returnState = declaration;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return declaration;\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code);\n }\n if (code === 63) {\n effects.consume(code);\n return instructionClose;\n }\n if (markdownLineEnding(code)) {\n returnState = instruction;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return instruction;\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code);\n return tagClose;\n }\n return nok(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagClose;\n }\n return tagCloseBetween(code);\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagCloseBetween;\n }\n return end(code);\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpen;\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code);\n return end;\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenBetween;\n }\n return end(code);\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\n if (code === 45 || code === 46 || code === 58 || code === 95 || asciiAlphanumeric(code)) {\n effects.consume(code);\n return tagOpenAttributeName;\n }\n return tagOpenAttributeNameAfter(code);\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeNameAfter;\n }\n return tagOpenBetween(code);\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueBefore(code) {\n if (code === null || code === 60 || code === 61 || code === 62 || code === 96) {\n return nok(code);\n }\n if (code === 34 || code === 39) {\n effects.consume(code);\n marker = code;\n return tagOpenAttributeValueQuoted;\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore;\n return lineEndingBefore(code);\n }\n if (markdownSpace(code)) {\n effects.consume(code);\n return tagOpenAttributeValueBefore;\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code);\n marker = undefined;\n return tagOpenAttributeValueQuotedAfter;\n }\n if (code === null) {\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted;\n return lineEndingBefore(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueQuoted;\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueUnquoted(code) {\n if (code === null || code === 34 || code === 39 || code === 60 || code === 61 || code === 96) {\n return nok(code);\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n effects.consume(code);\n return tagOpenAttributeValueUnquoted;\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code);\n }\n return nok(code);\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function end(code) {\n if (code === 62) {\n effects.consume(code);\n effects.exit(\"htmlTextData\");\n effects.exit(\"htmlText\");\n return ok;\n }\n return nok(code);\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit(\"htmlTextData\");\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return lineEndingAfter;\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code) ? factorySpace(effects, lineEndingAfterPrefix, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code) : lineEndingAfterPrefix(code);\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter(\"htmlTextData\");\n return returnState(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { labelEnd } from './label-end.js';\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n resolveAll: labelEnd.resolveAll,\n tokenize: tokenizeLabelStartLink\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this;\n return start;\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"labelLink\");\n effects.enter(\"labelMarker\");\n effects.consume(code);\n effects.exit(\"labelMarker\");\n effects.exit(\"labelLink\");\n return after;\n }\n\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\n /* c8 ignore next 3 */\n return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs ? nok(code) : ok(code);\n }\n}","/**\n * @import {\n * Construct,\n * State,\n * TokenizeContext,\n * Tokenizer\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n};\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start;\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"hardBreakEscape\");\n effects.consume(code);\n return after;\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit(\"hardBreakEscape\");\n return ok(code);\n }\n return nok(code);\n }\n}","/**\n * @import {\n * Construct,\n * Previous,\n * Resolver,\n * State,\n * TokenizeContext,\n * Tokenizer,\n * Token\n * } from 'micromark-util-types'\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n previous,\n resolve: resolveCodeText,\n tokenize: tokenizeCodeText\n};\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4;\n let headEnterIndex = 3;\n /** @type {number} */\n let index;\n /** @type {number | undefined} */\n let enter;\n\n // If we start and end with an EOL or a space.\n if ((events[headEnterIndex][1].type === \"lineEnding\" || events[headEnterIndex][1].type === 'space') && (events[tailExitIndex][1].type === \"lineEnding\" || events[tailExitIndex][1].type === 'space')) {\n index = headEnterIndex;\n\n // And we have data.\n while (++index < tailExitIndex) {\n if (events[index][1].type === \"codeTextData\") {\n // Then we have padding.\n events[headEnterIndex][1].type = \"codeTextPadding\";\n events[tailExitIndex][1].type = \"codeTextPadding\";\n headEnterIndex += 2;\n tailExitIndex -= 2;\n break;\n }\n }\n }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1;\n tailExitIndex++;\n while (++index <= tailExitIndex) {\n if (enter === undefined) {\n if (index !== tailExitIndex && events[index][1].type !== \"lineEnding\") {\n enter = index;\n }\n } else if (index === tailExitIndex || events[index][1].type === \"lineEnding\") {\n events[enter][1].type = \"codeTextData\";\n if (index !== enter + 2) {\n events[enter][1].end = events[index - 1][1].end;\n events.splice(enter + 2, index - enter - 2);\n tailExitIndex -= index - enter - 2;\n index = enter + 2;\n }\n enter = undefined;\n }\n }\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Previous}\n */\nfunction previous(code) {\n // If there is a previous code, there will always be a tail.\n return code !== 96 || this.events[this.events.length - 1][1].type === \"characterEscape\";\n}\n\n/**\n * @this {TokenizeContext}\n * Context.\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this;\n let sizeOpen = 0;\n /** @type {number} */\n let size;\n /** @type {Token} */\n let token;\n return start;\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter(\"codeText\");\n effects.enter(\"codeTextSequence\");\n return sequenceOpen(code);\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code);\n sizeOpen++;\n return sequenceOpen;\n }\n effects.exit(\"codeTextSequence\");\n return between(code);\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code);\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space');\n effects.consume(code);\n effects.exit('space');\n return between;\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter(\"codeTextSequence\");\n size = 0;\n return sequenceClose(code);\n }\n if (markdownLineEnding(code)) {\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return between;\n }\n\n // Data.\n effects.enter(\"codeTextData\");\n return data(code);\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 32 || code === 96 || markdownLineEnding(code)) {\n effects.exit(\"codeTextData\");\n return between(code);\n }\n effects.consume(code);\n return data;\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code);\n size++;\n return sequenceClose;\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit(\"codeTextSequence\");\n effects.exit(\"codeText\");\n return ok(code);\n }\n\n // More or less accents: mark as data.\n token.type = \"codeTextData\";\n return data(code);\n }\n}","/**\n * @import {Extension} from 'micromark-util-types'\n */\n\nimport { attention, autolink, blockQuote, characterEscape, characterReference, codeFenced, codeIndented, codeText, definition, hardBreakEscape, headingAtx, htmlFlow, htmlText, labelEnd, labelStartImage, labelStartLink, lineEnding, list, setextUnderline, thematicBreak } from 'micromark-core-commonmark';\nimport { resolver as resolveText } from './initialize/text.js';\n\n/** @satisfies {Extension['document']} */\nexport const document = {\n [42]: list,\n [43]: list,\n [45]: list,\n [48]: list,\n [49]: list,\n [50]: list,\n [51]: list,\n [52]: list,\n [53]: list,\n [54]: list,\n [55]: list,\n [56]: list,\n [57]: list,\n [62]: blockQuote\n};\n\n/** @satisfies {Extension['contentInitial']} */\nexport const contentInitial = {\n [91]: definition\n};\n\n/** @satisfies {Extension['flowInitial']} */\nexport const flowInitial = {\n [-2]: codeIndented,\n [-1]: codeIndented,\n [32]: codeIndented\n};\n\n/** @satisfies {Extension['flow']} */\nexport const flow = {\n [35]: headingAtx,\n [42]: thematicBreak,\n [45]: [setextUnderline, thematicBreak],\n [60]: htmlFlow,\n [61]: setextUnderline,\n [95]: thematicBreak,\n [96]: codeFenced,\n [126]: codeFenced\n};\n\n/** @satisfies {Extension['string']} */\nexport const string = {\n [38]: characterReference,\n [92]: characterEscape\n};\n\n/** @satisfies {Extension['text']} */\nexport const text = {\n [-5]: lineEnding,\n [-4]: lineEnding,\n [-3]: lineEnding,\n [33]: labelStartImage,\n [38]: characterReference,\n [42]: attention,\n [60]: [autolink, htmlText],\n [91]: labelStartLink,\n [92]: [hardBreakEscape, characterEscape],\n [93]: labelEnd,\n [95]: attention,\n [96]: codeText\n};\n\n/** @satisfies {Extension['insideSpan']} */\nexport const insideSpan = {\n null: [attention, resolveText]\n};\n\n/** @satisfies {Extension['attentionMarkers']} */\nexport const attentionMarkers = {\n null: [42, 95]\n};\n\n/** @satisfies {Extension['disable']} */\nexport const disable = {\n null: []\n};","/**\n * @import {\n * Chunk,\n * Code,\n * ConstructRecord,\n * Construct,\n * Effects,\n * InitialConstruct,\n * ParseContext,\n * Point,\n * State,\n * TokenizeContext,\n * Token\n * } from 'micromark-util-types'\n */\n\n/**\n * @callback Restore\n * Restore the state.\n * @returns {undefined}\n * Nothing.\n *\n * @typedef Info\n * Info.\n * @property {Restore} restore\n * Restore.\n * @property {number} from\n * From.\n *\n * @callback ReturnHandle\n * Handle a successful run.\n * @param {Construct} construct\n * Construct.\n * @param {Info} info\n * Info.\n * @returns {undefined}\n * Nothing.\n */\n\nimport { markdownLineEnding } from 'micromark-util-character';\nimport { push, splice } from 'micromark-util-chunked';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * Parser.\n * @param {InitialConstruct} initialize\n * Construct.\n * @param {Omit | undefined} [from]\n * Point (optional).\n * @returns {TokenizeContext}\n * Context.\n */\nexport function createTokenizer(parser, initialize, from) {\n /** @type {Point} */\n let point = {\n _bufferIndex: -1,\n _index: 0,\n line: from && from.line || 1,\n column: from && from.column || 1,\n offset: from && from.offset || 0\n };\n /** @type {Record} */\n const columnStart = {};\n /** @type {Array} */\n const resolveAllConstructs = [];\n /** @type {Array} */\n let chunks = [];\n /** @type {Array} */\n let stack = [];\n /** @type {boolean | undefined} */\n let consumed = true;\n\n /**\n * Tools used for tokenizing.\n *\n * @type {Effects}\n */\n const effects = {\n attempt: constructFactory(onsuccessfulconstruct),\n check: constructFactory(onsuccessfulcheck),\n consume,\n enter,\n exit,\n interrupt: constructFactory(onsuccessfulcheck, {\n interrupt: true\n })\n };\n\n /**\n * State and tools for resolving and serializing.\n *\n * @type {TokenizeContext}\n */\n const context = {\n code: null,\n containerState: {},\n defineSkip,\n events: [],\n now,\n parser,\n previous: null,\n sliceSerialize,\n sliceStream,\n write\n };\n\n /**\n * The state function.\n *\n * @type {State | undefined}\n */\n let state = initialize.tokenize.call(context, effects);\n\n /**\n * Track which character we expect to be consumed, to catch bugs.\n *\n * @type {Code}\n */\n let expectedCode;\n if (initialize.resolveAll) {\n resolveAllConstructs.push(initialize);\n }\n return context;\n\n /** @type {TokenizeContext['write']} */\n function write(slice) {\n chunks = push(chunks, slice);\n main();\n\n // Exit if we’re not done, resolve might change stuff.\n if (chunks[chunks.length - 1] !== null) {\n return [];\n }\n addResult(initialize, 0);\n\n // Otherwise, resolve, and exit.\n context.events = resolveAll(resolveAllConstructs, context.events, context);\n return context.events;\n }\n\n //\n // Tools.\n //\n\n /** @type {TokenizeContext['sliceSerialize']} */\n function sliceSerialize(token, expandTabs) {\n return serializeChunks(sliceStream(token), expandTabs);\n }\n\n /** @type {TokenizeContext['sliceStream']} */\n function sliceStream(token) {\n return sliceChunks(chunks, token);\n }\n\n /** @type {TokenizeContext['now']} */\n function now() {\n // This is a hot path, so we clone manually instead of `Object.assign({}, point)`\n const {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n } = point;\n return {\n _bufferIndex,\n _index,\n line,\n column,\n offset\n };\n }\n\n /** @type {TokenizeContext['defineSkip']} */\n function defineSkip(value) {\n columnStart[value.line] = value.column;\n accountForPotentialSkip();\n }\n\n //\n // State management.\n //\n\n /**\n * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n * `consume`).\n * Here is where we walk through the chunks, which either include strings of\n * several characters, or numerical character codes.\n * The reason to do this in a loop instead of a call is so the stack can\n * drain.\n *\n * @returns {undefined}\n * Nothing.\n */\n function main() {\n /** @type {number} */\n let chunkIndex;\n while (point._index < chunks.length) {\n const chunk = chunks[point._index];\n\n // If we’re in a buffer chunk, loop through it.\n if (typeof chunk === 'string') {\n chunkIndex = point._index;\n if (point._bufferIndex < 0) {\n point._bufferIndex = 0;\n }\n while (point._index === chunkIndex && point._bufferIndex < chunk.length) {\n go(chunk.charCodeAt(point._bufferIndex));\n }\n } else {\n go(chunk);\n }\n }\n }\n\n /**\n * Deal with one code.\n *\n * @param {Code} code\n * Code.\n * @returns {undefined}\n * Nothing.\n */\n function go(code) {\n consumed = undefined;\n expectedCode = code;\n state = state(code);\n }\n\n /** @type {Effects['consume']} */\n function consume(code) {\n if (markdownLineEnding(code)) {\n point.line++;\n point.column = 1;\n point.offset += code === -3 ? 2 : 1;\n accountForPotentialSkip();\n } else if (code !== -1) {\n point.column++;\n point.offset++;\n }\n\n // Not in a string chunk.\n if (point._bufferIndex < 0) {\n point._index++;\n } else {\n point._bufferIndex++;\n\n // At end of string chunk.\n if (point._bufferIndex ===\n // Points w/ non-negative `_bufferIndex` reference\n // strings.\n /** @type {string} */\n chunks[point._index].length) {\n point._bufferIndex = -1;\n point._index++;\n }\n }\n\n // Expose the previous character.\n context.previous = code;\n\n // Mark as consumed.\n consumed = true;\n }\n\n /** @type {Effects['enter']} */\n function enter(type, fields) {\n /** @type {Token} */\n // @ts-expect-error Patch instead of assign required fields to help GC.\n const token = fields || {};\n token.type = type;\n token.start = now();\n context.events.push(['enter', token, context]);\n stack.push(token);\n return token;\n }\n\n /** @type {Effects['exit']} */\n function exit(type) {\n const token = stack.pop();\n token.end = now();\n context.events.push(['exit', token, context]);\n return token;\n }\n\n /**\n * Use results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulconstruct(construct, info) {\n addResult(construct, info.from);\n }\n\n /**\n * Discard results.\n *\n * @type {ReturnHandle}\n */\n function onsuccessfulcheck(_, info) {\n info.restore();\n }\n\n /**\n * Factory to attempt/check/interrupt.\n *\n * @param {ReturnHandle} onreturn\n * Callback.\n * @param {{interrupt?: boolean | undefined} | undefined} [fields]\n * Fields.\n */\n function constructFactory(onreturn, fields) {\n return hook;\n\n /**\n * Handle either an object mapping codes to constructs, a list of\n * constructs, or a single construct.\n *\n * @param {Array | ConstructRecord | Construct} constructs\n * Constructs.\n * @param {State} returnState\n * State.\n * @param {State | undefined} [bogusState]\n * State.\n * @returns {State}\n * State.\n */\n function hook(constructs, returnState, bogusState) {\n /** @type {ReadonlyArray} */\n let listOfConstructs;\n /** @type {number} */\n let constructIndex;\n /** @type {Construct} */\n let currentConstruct;\n /** @type {Info} */\n let info;\n return Array.isArray(constructs) ? /* c8 ignore next 1 */\n handleListOfConstructs(constructs) : 'tokenize' in constructs ?\n // Looks like a construct.\n handleListOfConstructs([(/** @type {Construct} */constructs)]) : handleMapOfConstructs(constructs);\n\n /**\n * Handle a list of construct.\n *\n * @param {ConstructRecord} map\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleMapOfConstructs(map) {\n return start;\n\n /** @type {State} */\n function start(code) {\n const left = code !== null && map[code];\n const all = code !== null && map.null;\n const list = [\n // To do: add more extension tests.\n /* c8 ignore next 2 */\n ...(Array.isArray(left) ? left : left ? [left] : []), ...(Array.isArray(all) ? all : all ? [all] : [])];\n return handleListOfConstructs(list)(code);\n }\n }\n\n /**\n * Handle a list of construct.\n *\n * @param {ReadonlyArray} list\n * Constructs.\n * @returns {State}\n * State.\n */\n function handleListOfConstructs(list) {\n listOfConstructs = list;\n constructIndex = 0;\n if (list.length === 0) {\n return bogusState;\n }\n return handleConstruct(list[constructIndex]);\n }\n\n /**\n * Handle a single construct.\n *\n * @param {Construct} construct\n * Construct.\n * @returns {State}\n * State.\n */\n function handleConstruct(construct) {\n return start;\n\n /** @type {State} */\n function start(code) {\n // To do: not needed to store if there is no bogus state, probably?\n // Currently doesn’t work because `inspect` in document does a check\n // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n // by not storing.\n info = store();\n currentConstruct = construct;\n if (!construct.partial) {\n context.currentConstruct = construct;\n }\n\n // Always populated by defaults.\n\n if (construct.name && context.parser.constructs.disable.null.includes(construct.name)) {\n return nok(code);\n }\n return construct.tokenize.call(\n // If we do have fields, create an object w/ `context` as its\n // prototype.\n // This allows a “live binding”, which is needed for `interrupt`.\n fields ? Object.assign(Object.create(context), fields) : context, effects, ok, nok)(code);\n }\n }\n\n /** @type {State} */\n function ok(code) {\n consumed = true;\n onreturn(currentConstruct, info);\n return returnState;\n }\n\n /** @type {State} */\n function nok(code) {\n consumed = true;\n info.restore();\n if (++constructIndex < listOfConstructs.length) {\n return handleConstruct(listOfConstructs[constructIndex]);\n }\n return bogusState;\n }\n }\n }\n\n /**\n * @param {Construct} construct\n * Construct.\n * @param {number} from\n * From.\n * @returns {undefined}\n * Nothing.\n */\n function addResult(construct, from) {\n if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n resolveAllConstructs.push(construct);\n }\n if (construct.resolve) {\n splice(context.events, from, context.events.length - from, construct.resolve(context.events.slice(from), context));\n }\n if (construct.resolveTo) {\n context.events = construct.resolveTo(context.events, context);\n }\n }\n\n /**\n * Store state.\n *\n * @returns {Info}\n * Info.\n */\n function store() {\n const startPoint = now();\n const startPrevious = context.previous;\n const startCurrentConstruct = context.currentConstruct;\n const startEventsIndex = context.events.length;\n const startStack = Array.from(stack);\n return {\n from: startEventsIndex,\n restore\n };\n\n /**\n * Restore state.\n *\n * @returns {undefined}\n * Nothing.\n */\n function restore() {\n point = startPoint;\n context.previous = startPrevious;\n context.currentConstruct = startCurrentConstruct;\n context.events.length = startEventsIndex;\n stack = startStack;\n accountForPotentialSkip();\n }\n }\n\n /**\n * Move the current point a bit forward in the line when it’s on a column\n * skip.\n *\n * @returns {undefined}\n * Nothing.\n */\n function accountForPotentialSkip() {\n if (point.line in columnStart && point.column < 2) {\n point.column = columnStart[point.line];\n point.offset += columnStart[point.line] - 1;\n }\n }\n}\n\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {Pick} token\n * Token.\n * @returns {Array}\n * Chunks.\n */\nfunction sliceChunks(chunks, token) {\n const startIndex = token.start._index;\n const startBufferIndex = token.start._bufferIndex;\n const endIndex = token.end._index;\n const endBufferIndex = token.end._bufferIndex;\n /** @type {Array} */\n let view;\n if (startIndex === endIndex) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)];\n } else {\n view = chunks.slice(startIndex, endIndex);\n if (startBufferIndex > -1) {\n const head = view[0];\n if (typeof head === 'string') {\n view[0] = head.slice(startBufferIndex);\n } else {\n view.shift();\n }\n }\n if (endBufferIndex > 0) {\n // @ts-expect-error `_bufferIndex` is used on string chunks.\n view.push(chunks[endIndex].slice(0, endBufferIndex));\n }\n }\n return view;\n}\n\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {ReadonlyArray} chunks\n * Chunks.\n * @param {boolean | undefined} [expandTabs=false]\n * Whether to expand tabs (default: `false`).\n * @returns {string}\n * Result.\n */\nfunction serializeChunks(chunks, expandTabs) {\n let index = -1;\n /** @type {Array} */\n const result = [];\n /** @type {boolean | undefined} */\n let atTab;\n while (++index < chunks.length) {\n const chunk = chunks[index];\n /** @type {string} */\n let value;\n if (typeof chunk === 'string') {\n value = chunk;\n } else switch (chunk) {\n case -5:\n {\n value = \"\\r\";\n break;\n }\n case -4:\n {\n value = \"\\n\";\n break;\n }\n case -3:\n {\n value = \"\\r\" + \"\\n\";\n break;\n }\n case -2:\n {\n value = expandTabs ? \" \" : \"\\t\";\n break;\n }\n case -1:\n {\n if (!expandTabs && atTab) continue;\n value = \" \";\n break;\n }\n default:\n {\n // Currently only replacement character.\n value = String.fromCharCode(chunk);\n }\n }\n atTab = chunk === -2;\n result.push(value);\n }\n return result.join('');\n}","/**\n * @import {Chunk, Code, Encoding, Value} from 'micromark-util-types'\n */\n\n/**\n * @callback Preprocessor\n * Preprocess a value.\n * @param {Value} value\n * Value.\n * @param {Encoding | null | undefined} [encoding]\n * Encoding when `value` is a typed array (optional).\n * @param {boolean | null | undefined} [end=false]\n * Whether this is the last chunk (default: `false`).\n * @returns {Array}\n * Chunks.\n */\n\nconst search = /[\\0\\t\\n\\r]/g;\n\n/**\n * @returns {Preprocessor}\n * Preprocess a value.\n */\nexport function preprocess() {\n let column = 1;\n let buffer = '';\n /** @type {boolean | undefined} */\n let start = true;\n /** @type {boolean | undefined} */\n let atCarriageReturn;\n return preprocessor;\n\n /** @type {Preprocessor} */\n // eslint-disable-next-line complexity\n function preprocessor(value, encoding, end) {\n /** @type {Array} */\n const chunks = [];\n /** @type {RegExpMatchArray | null} */\n let match;\n /** @type {number} */\n let next;\n /** @type {number} */\n let startPosition;\n /** @type {number} */\n let endPosition;\n /** @type {Code} */\n let code;\n value = buffer + (typeof value === 'string' ? value.toString() : new TextDecoder(encoding || undefined).decode(value));\n startPosition = 0;\n buffer = '';\n if (start) {\n // To do: `markdown-rs` actually parses BOMs (byte order mark).\n if (value.charCodeAt(0) === 65279) {\n startPosition++;\n }\n start = undefined;\n }\n while (startPosition < value.length) {\n search.lastIndex = startPosition;\n match = search.exec(value);\n endPosition = match && match.index !== undefined ? match.index : value.length;\n code = value.charCodeAt(endPosition);\n if (!match) {\n buffer = value.slice(startPosition);\n break;\n }\n if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n chunks.push(-3);\n atCarriageReturn = undefined;\n } else {\n if (atCarriageReturn) {\n chunks.push(-5);\n atCarriageReturn = undefined;\n }\n if (startPosition < endPosition) {\n chunks.push(value.slice(startPosition, endPosition));\n column += endPosition - startPosition;\n }\n switch (code) {\n case 0:\n {\n chunks.push(65533);\n column++;\n break;\n }\n case 9:\n {\n next = Math.ceil(column / 4) * 4;\n chunks.push(-2);\n while (column++ < next) chunks.push(-1);\n break;\n }\n case 10:\n {\n chunks.push(-4);\n column = 1;\n break;\n }\n default:\n {\n atCarriageReturn = true;\n column = 1;\n }\n }\n }\n startPosition = endPosition + 1;\n }\n if (end) {\n if (atCarriageReturn) chunks.push(-5);\n if (buffer) chunks.push(buffer);\n chunks.push(null);\n }\n return chunks;\n }\n}","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * Sort of like `String.fromCodePoint(Number.parseInt(value, base))`, but makes\n * non-characters and control characters safe.\n *\n * @param {string} value\n * Value to decode.\n * @param {number} base\n * Numeric base.\n * @returns {string}\n * Character.\n */\nexport function decodeNumericCharacterReference(value, base) {\n const code = Number.parseInt(value, base);\n if (\n // C0 except for HT, LF, FF, CR, space.\n code < 9 || code === 11 || code > 13 && code < 32 ||\n // Control character (DEL) of C0, and C1 controls.\n code > 126 && code < 160 ||\n // Lone high surrogates and low surrogates.\n code > 55_295 && code < 57_344 ||\n // Noncharacters.\n code > 64_975 && code < 65_008 || /* eslint-disable no-bitwise */\n (code & 65_535) === 65_535 || (code & 65_535) === 65_534 || /* eslint-enable no-bitwise */\n // Out of range\n code > 1_114_111) {\n return \"\\uFFFD\";\n }\n return String.fromCodePoint(code);\n}","import { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nconst characterEscapeOrReference = /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi;\n\n/**\n * Decode markdown strings (which occur in places such as fenced code info\n * strings, destinations, labels, and titles).\n *\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * Value to decode.\n * @returns {string}\n * Decoded value.\n */\nexport function decodeString(value) {\n return value.replace(characterEscapeOrReference, decode);\n}\n\n/**\n * @param {string} $0\n * Match.\n * @param {string} $1\n * Character escape.\n * @param {string} $2\n * Character reference.\n * @returns {string}\n * Decoded value\n */\nfunction decode($0, $1, $2) {\n if ($1) {\n // Escape.\n return $1;\n }\n\n // Reference.\n const head = $2.charCodeAt(0);\n if (head === 35) {\n const head = $2.charCodeAt(1);\n const hex = head === 120 || head === 88;\n return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10);\n }\n return decodeNamedCharacterReference($2) || $0;\n}","/**\n * @import {\n * Break,\n * Blockquote,\n * Code,\n * Definition,\n * Emphasis,\n * Heading,\n * Html,\n * Image,\n * InlineCode,\n * Link,\n * ListItem,\n * List,\n * Nodes,\n * Paragraph,\n * PhrasingContent,\n * ReferenceType,\n * Root,\n * Strong,\n * Text,\n * ThematicBreak\n * } from 'mdast'\n * @import {\n * Encoding,\n * Event,\n * Token,\n * Value\n * } from 'micromark-util-types'\n * @import {Point} from 'unist'\n * @import {\n * CompileContext,\n * CompileData,\n * Config,\n * Extension,\n * Handle,\n * OnEnterError,\n * Options\n * } from './types.js'\n */\n\nimport { toString } from 'mdast-util-to-string';\nimport { parse, postprocess, preprocess } from 'micromark';\nimport { decodeNumericCharacterReference } from 'micromark-util-decode-numeric-character-reference';\nimport { decodeString } from 'micromark-util-decode-string';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nimport { decodeNamedCharacterReference } from 'decode-named-character-reference';\nimport { stringifyPosition } from 'unist-util-stringify-position';\nconst own = {}.hasOwnProperty;\n\n/**\n * Turn markdown into a syntax tree.\n *\n * @overload\n * @param {Value} value\n * @param {Encoding | null | undefined} [encoding]\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @overload\n * @param {Value} value\n * @param {Options | null | undefined} [options]\n * @returns {Root}\n *\n * @param {Value} value\n * Markdown to parse.\n * @param {Encoding | Options | null | undefined} [encoding]\n * Character encoding for when `value` is `Buffer`.\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {Root}\n * mdast tree.\n */\nexport function fromMarkdown(value, encoding, options) {\n if (typeof encoding !== 'string') {\n options = encoding;\n encoding = undefined;\n }\n return compiler(options)(postprocess(parse(options).document().write(preprocess()(value, encoding, true))));\n}\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n /** @type {Config} */\n const config = {\n transforms: [],\n canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n enter: {\n autolink: opener(link),\n autolinkProtocol: onenterdata,\n autolinkEmail: onenterdata,\n atxHeading: opener(heading),\n blockQuote: opener(blockQuote),\n characterEscape: onenterdata,\n characterReference: onenterdata,\n codeFenced: opener(codeFlow),\n codeFencedFenceInfo: buffer,\n codeFencedFenceMeta: buffer,\n codeIndented: opener(codeFlow, buffer),\n codeText: opener(codeText, buffer),\n codeTextData: onenterdata,\n data: onenterdata,\n codeFlowValue: onenterdata,\n definition: opener(definition),\n definitionDestinationString: buffer,\n definitionLabelString: buffer,\n definitionTitleString: buffer,\n emphasis: opener(emphasis),\n hardBreakEscape: opener(hardBreak),\n hardBreakTrailing: opener(hardBreak),\n htmlFlow: opener(html, buffer),\n htmlFlowData: onenterdata,\n htmlText: opener(html, buffer),\n htmlTextData: onenterdata,\n image: opener(image),\n label: buffer,\n link: opener(link),\n listItem: opener(listItem),\n listItemValue: onenterlistitemvalue,\n listOrdered: opener(list, onenterlistordered),\n listUnordered: opener(list),\n paragraph: opener(paragraph),\n reference: onenterreference,\n referenceString: buffer,\n resourceDestinationString: buffer,\n resourceTitleString: buffer,\n setextHeading: opener(heading),\n strong: opener(strong),\n thematicBreak: opener(thematicBreak)\n },\n exit: {\n atxHeading: closer(),\n atxHeadingSequence: onexitatxheadingsequence,\n autolink: closer(),\n autolinkEmail: onexitautolinkemail,\n autolinkProtocol: onexitautolinkprotocol,\n blockQuote: closer(),\n characterEscapeValue: onexitdata,\n characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n characterReferenceValue: onexitcharacterreferencevalue,\n characterReference: onexitcharacterreference,\n codeFenced: closer(onexitcodefenced),\n codeFencedFence: onexitcodefencedfence,\n codeFencedFenceInfo: onexitcodefencedfenceinfo,\n codeFencedFenceMeta: onexitcodefencedfencemeta,\n codeFlowValue: onexitdata,\n codeIndented: closer(onexitcodeindented),\n codeText: closer(onexitcodetext),\n codeTextData: onexitdata,\n data: onexitdata,\n definition: closer(),\n definitionDestinationString: onexitdefinitiondestinationstring,\n definitionLabelString: onexitdefinitionlabelstring,\n definitionTitleString: onexitdefinitiontitlestring,\n emphasis: closer(),\n hardBreakEscape: closer(onexithardbreak),\n hardBreakTrailing: closer(onexithardbreak),\n htmlFlow: closer(onexithtmlflow),\n htmlFlowData: onexitdata,\n htmlText: closer(onexithtmltext),\n htmlTextData: onexitdata,\n image: closer(onexitimage),\n label: onexitlabel,\n labelText: onexitlabeltext,\n lineEnding: onexitlineending,\n link: closer(onexitlink),\n listItem: closer(),\n listOrdered: closer(),\n listUnordered: closer(),\n paragraph: closer(),\n referenceString: onexitreferencestring,\n resourceDestinationString: onexitresourcedestinationstring,\n resourceTitleString: onexitresourcetitlestring,\n resource: onexitresource,\n setextHeading: closer(onexitsetextheading),\n setextHeadingLineSequence: onexitsetextheadinglinesequence,\n setextHeadingText: onexitsetextheadingtext,\n strong: closer(),\n thematicBreak: closer()\n }\n };\n configure(config, (options || {}).mdastExtensions || []);\n\n /** @type {CompileData} */\n const data = {};\n return compile;\n\n /**\n * Turn micromark events into an mdast tree.\n *\n * @param {Array} events\n * Events.\n * @returns {Root}\n * mdast tree.\n */\n function compile(events) {\n /** @type {Root} */\n let tree = {\n type: 'root',\n children: []\n };\n /** @type {Omit} */\n const context = {\n stack: [tree],\n tokenStack: [],\n config,\n enter,\n exit,\n buffer,\n resume,\n data\n };\n /** @type {Array} */\n const listStack = [];\n let index = -1;\n while (++index < events.length) {\n // We preprocess lists to add `listItem` tokens, and to infer whether\n // items the list itself are spread out.\n if (events[index][1].type === \"listOrdered\" || events[index][1].type === \"listUnordered\") {\n if (events[index][0] === 'enter') {\n listStack.push(index);\n } else {\n const tail = listStack.pop();\n index = prepareList(events, tail, index);\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n const handler = config[events[index][0]];\n if (own.call(handler, events[index][1].type)) {\n handler[events[index][1].type].call(Object.assign({\n sliceSerialize: events[index][2].sliceSerialize\n }, context), events[index][1]);\n }\n }\n\n // Handle tokens still being open.\n if (context.tokenStack.length > 0) {\n const tail = context.tokenStack[context.tokenStack.length - 1];\n const handler = tail[1] || defaultOnError;\n handler.call(context, undefined, tail[0]);\n }\n\n // Figure out `root` position.\n tree.position = {\n start: point(events.length > 0 ? events[0][1].start : {\n line: 1,\n column: 1,\n offset: 0\n }),\n end: point(events.length > 0 ? events[events.length - 2][1].end : {\n line: 1,\n column: 1,\n offset: 0\n })\n };\n\n // Call transforms.\n index = -1;\n while (++index < config.transforms.length) {\n tree = config.transforms[index](tree) || tree;\n }\n return tree;\n }\n\n /**\n * @param {Array} events\n * @param {number} start\n * @param {number} length\n * @returns {number}\n */\n function prepareList(events, start, length) {\n let index = start - 1;\n let containerBalance = -1;\n let listSpread = false;\n /** @type {Token | undefined} */\n let listItem;\n /** @type {number | undefined} */\n let lineIndex;\n /** @type {number | undefined} */\n let firstBlankLineIndex;\n /** @type {boolean | undefined} */\n let atMarker;\n while (++index <= length) {\n const event = events[index];\n switch (event[1].type) {\n case \"listUnordered\":\n case \"listOrdered\":\n case \"blockQuote\":\n {\n if (event[0] === 'enter') {\n containerBalance++;\n } else {\n containerBalance--;\n }\n atMarker = undefined;\n break;\n }\n case \"lineEndingBlank\":\n {\n if (event[0] === 'enter') {\n if (listItem && !atMarker && !containerBalance && !firstBlankLineIndex) {\n firstBlankLineIndex = index;\n }\n atMarker = undefined;\n }\n break;\n }\n case \"linePrefix\":\n case \"listItemValue\":\n case \"listItemMarker\":\n case \"listItemPrefix\":\n case \"listItemPrefixWhitespace\":\n {\n // Empty.\n\n break;\n }\n default:\n {\n atMarker = undefined;\n }\n }\n if (!containerBalance && event[0] === 'enter' && event[1].type === \"listItemPrefix\" || containerBalance === -1 && event[0] === 'exit' && (event[1].type === \"listUnordered\" || event[1].type === \"listOrdered\")) {\n if (listItem) {\n let tailIndex = index;\n lineIndex = undefined;\n while (tailIndex--) {\n const tailEvent = events[tailIndex];\n if (tailEvent[1].type === \"lineEnding\" || tailEvent[1].type === \"lineEndingBlank\") {\n if (tailEvent[0] === 'exit') continue;\n if (lineIndex) {\n events[lineIndex][1].type = \"lineEndingBlank\";\n listSpread = true;\n }\n tailEvent[1].type = \"lineEnding\";\n lineIndex = tailIndex;\n } else if (tailEvent[1].type === \"linePrefix\" || tailEvent[1].type === \"blockQuotePrefix\" || tailEvent[1].type === \"blockQuotePrefixWhitespace\" || tailEvent[1].type === \"blockQuoteMarker\" || tailEvent[1].type === \"listItemIndent\") {\n // Empty\n } else {\n break;\n }\n }\n if (firstBlankLineIndex && (!lineIndex || firstBlankLineIndex < lineIndex)) {\n listItem._spread = true;\n }\n\n // Fix position.\n listItem.end = Object.assign({}, lineIndex ? events[lineIndex][1].start : event[1].end);\n events.splice(lineIndex || index, 0, ['exit', listItem, event[2]]);\n index++;\n length++;\n }\n\n // Create a new list item.\n if (event[1].type === \"listItemPrefix\") {\n /** @type {Token} */\n const item = {\n type: 'listItem',\n _spread: false,\n start: Object.assign({}, event[1].start),\n // @ts-expect-error: we’ll add `end` in a second.\n end: undefined\n };\n listItem = item;\n events.splice(index, 0, ['enter', item, event[2]]);\n index++;\n length++;\n firstBlankLineIndex = undefined;\n atMarker = true;\n }\n }\n }\n events[start][1]._spread = listSpread;\n return length;\n }\n\n /**\n * Create an opener handle.\n *\n * @param {(token: Token) => Nodes} create\n * Create a node.\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function opener(create, and) {\n return open;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function open(token) {\n enter.call(this, create(token), token);\n if (and) and.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['buffer']}\n */\n function buffer() {\n this.stack.push({\n type: 'fragment',\n children: []\n });\n }\n\n /**\n * @type {CompileContext['enter']}\n */\n function enter(node, token, errorHandler) {\n const parent = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = parent.children;\n siblings.push(node);\n this.stack.push(node);\n this.tokenStack.push([token, errorHandler || undefined]);\n node.position = {\n start: point(token.start),\n // @ts-expect-error: `end` will be patched later.\n end: undefined\n };\n }\n\n /**\n * Create a closer handle.\n *\n * @param {Handle | undefined} [and]\n * Optional function to also run.\n * @returns {Handle}\n * Handle.\n */\n function closer(and) {\n return close;\n\n /**\n * @this {CompileContext}\n * @param {Token} token\n * @returns {undefined}\n */\n function close(token) {\n if (and) and.call(this, token);\n exit.call(this, token);\n }\n }\n\n /**\n * @type {CompileContext['exit']}\n */\n function exit(token, onExitError) {\n const node = this.stack.pop();\n const open = this.tokenStack.pop();\n if (!open) {\n throw new Error('Cannot close `' + token.type + '` (' + stringifyPosition({\n start: token.start,\n end: token.end\n }) + '): it’s not open');\n } else if (open[0].type !== token.type) {\n if (onExitError) {\n onExitError.call(this, token, open[0]);\n } else {\n const handler = open[1] || defaultOnError;\n handler.call(this, token, open[0]);\n }\n }\n node.position.end = point(token.end);\n }\n\n /**\n * @type {CompileContext['resume']}\n */\n function resume() {\n return toString(this.stack.pop());\n }\n\n //\n // Handlers.\n //\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistordered() {\n this.data.expectingFirstListItemValue = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onenterlistitemvalue(token) {\n if (this.data.expectingFirstListItemValue) {\n const ancestor = this.stack[this.stack.length - 2];\n ancestor.start = Number.parseInt(this.sliceSerialize(token), 10);\n this.data.expectingFirstListItemValue = undefined;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfenceinfo() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.lang = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfencemeta() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.meta = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefencedfence() {\n // Exit if this is the closing fence.\n if (this.data.flowCodeInside) return;\n this.buffer();\n this.data.flowCodeInside = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodefenced() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '');\n this.data.flowCodeInside = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcodeindented() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data.replace(/(\\r?\\n|\\r)$/g, '');\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitionlabelstring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.label = label;\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiontitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitdefinitiondestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitatxheadingsequence(token) {\n const node = this.stack[this.stack.length - 1];\n if (!node.depth) {\n const depth = this.sliceSerialize(token).length;\n node.depth = depth;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadingtext() {\n this.data.setextHeadingSlurpLineEnding = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheadinglinesequence(token) {\n const node = this.stack[this.stack.length - 1];\n node.depth = this.sliceSerialize(token).codePointAt(0) === 61 ? 1 : 2;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitsetextheading() {\n this.data.setextHeadingSlurpLineEnding = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterdata(token) {\n const node = this.stack[this.stack.length - 1];\n /** @type {Array} */\n const siblings = node.children;\n let tail = siblings[siblings.length - 1];\n if (!tail || tail.type !== 'text') {\n // Add a new text node.\n tail = text();\n tail.position = {\n start: point(token.start),\n // @ts-expect-error: we’ll add `end` later.\n end: undefined\n };\n siblings.push(tail);\n }\n this.stack.push(tail);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitdata(token) {\n const tail = this.stack.pop();\n tail.value += this.sliceSerialize(token);\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlineending(token) {\n const context = this.stack[this.stack.length - 1];\n // If we’re at a hard break, include the line ending in there.\n if (this.data.atHardBreak) {\n const tail = context.children[context.children.length - 1];\n tail.position.end = point(token.end);\n this.data.atHardBreak = undefined;\n return;\n }\n if (!this.data.setextHeadingSlurpLineEnding && config.canContainEols.includes(context.type)) {\n onenterdata.call(this, token);\n onexitdata.call(this, token);\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithardbreak() {\n this.data.atHardBreak = true;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmlflow() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexithtmltext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcodetext() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.value = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlink() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitimage() {\n const node = this.stack[this.stack.length - 1];\n // Note: there are also `identifier` and `label` fields on this link node!\n // These are used / cleaned here.\n\n // To do: clean.\n if (this.data.inReference) {\n /** @type {ReferenceType} */\n const referenceType = this.data.referenceType || 'shortcut';\n node.type += 'Reference';\n // @ts-expect-error: mutate.\n node.referenceType = referenceType;\n // @ts-expect-error: mutate.\n delete node.url;\n delete node.title;\n } else {\n // @ts-expect-error: mutate.\n delete node.identifier;\n // @ts-expect-error: mutate.\n delete node.label;\n }\n this.data.referenceType = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabeltext(token) {\n const string = this.sliceSerialize(token);\n const ancestor = this.stack[this.stack.length - 2];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n ancestor.label = decodeString(string);\n // @ts-expect-error: same as above.\n ancestor.identifier = normalizeIdentifier(string).toLowerCase();\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitlabel() {\n const fragment = this.stack[this.stack.length - 1];\n const value = this.resume();\n const node = this.stack[this.stack.length - 1];\n // Assume a reference.\n this.data.inReference = true;\n if (node.type === 'link') {\n /** @type {Array} */\n const children = fragment.children;\n node.children = children;\n } else {\n node.alt = value;\n }\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcedestinationstring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.url = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresourcetitlestring() {\n const data = this.resume();\n const node = this.stack[this.stack.length - 1];\n node.title = data;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitresource() {\n this.data.inReference = undefined;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onenterreference() {\n this.data.referenceType = 'collapsed';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitreferencestring(token) {\n const label = this.resume();\n const node = this.stack[this.stack.length - 1];\n // @ts-expect-error: stash this on the node, as it might become a reference\n // later.\n node.label = label;\n // @ts-expect-error: same as above.\n node.identifier = normalizeIdentifier(this.sliceSerialize(token)).toLowerCase();\n this.data.referenceType = 'full';\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n\n function onexitcharacterreferencemarker(token) {\n this.data.characterReferenceType = token.type;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreferencevalue(token) {\n const data = this.sliceSerialize(token);\n const type = this.data.characterReferenceType;\n /** @type {string} */\n let value;\n if (type) {\n value = decodeNumericCharacterReference(data, type === \"characterReferenceMarkerNumeric\" ? 10 : 16);\n this.data.characterReferenceType = undefined;\n } else {\n const result = decodeNamedCharacterReference(data);\n value = result;\n }\n const tail = this.stack[this.stack.length - 1];\n tail.value += value;\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitcharacterreference(token) {\n const tail = this.stack.pop();\n tail.position.end = point(token.end);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkprotocol(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = this.sliceSerialize(token);\n }\n\n /**\n * @this {CompileContext}\n * @type {Handle}\n */\n function onexitautolinkemail(token) {\n onexitdata.call(this, token);\n const node = this.stack[this.stack.length - 1];\n node.url = 'mailto:' + this.sliceSerialize(token);\n }\n\n //\n // Creaters.\n //\n\n /** @returns {Blockquote} */\n function blockQuote() {\n return {\n type: 'blockquote',\n children: []\n };\n }\n\n /** @returns {Code} */\n function codeFlow() {\n return {\n type: 'code',\n lang: null,\n meta: null,\n value: ''\n };\n }\n\n /** @returns {InlineCode} */\n function codeText() {\n return {\n type: 'inlineCode',\n value: ''\n };\n }\n\n /** @returns {Definition} */\n function definition() {\n return {\n type: 'definition',\n identifier: '',\n label: null,\n title: null,\n url: ''\n };\n }\n\n /** @returns {Emphasis} */\n function emphasis() {\n return {\n type: 'emphasis',\n children: []\n };\n }\n\n /** @returns {Heading} */\n function heading() {\n return {\n type: 'heading',\n // @ts-expect-error `depth` will be set later.\n depth: 0,\n children: []\n };\n }\n\n /** @returns {Break} */\n function hardBreak() {\n return {\n type: 'break'\n };\n }\n\n /** @returns {Html} */\n function html() {\n return {\n type: 'html',\n value: ''\n };\n }\n\n /** @returns {Image} */\n function image() {\n return {\n type: 'image',\n title: null,\n url: '',\n alt: null\n };\n }\n\n /** @returns {Link} */\n function link() {\n return {\n type: 'link',\n title: null,\n url: '',\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {List}\n */\n function list(token) {\n return {\n type: 'list',\n ordered: token.type === 'listOrdered',\n start: null,\n spread: token._spread,\n children: []\n };\n }\n\n /**\n * @param {Token} token\n * @returns {ListItem}\n */\n function listItem(token) {\n return {\n type: 'listItem',\n spread: token._spread,\n checked: null,\n children: []\n };\n }\n\n /** @returns {Paragraph} */\n function paragraph() {\n return {\n type: 'paragraph',\n children: []\n };\n }\n\n /** @returns {Strong} */\n function strong() {\n return {\n type: 'strong',\n children: []\n };\n }\n\n /** @returns {Text} */\n function text() {\n return {\n type: 'text',\n value: ''\n };\n }\n\n /** @returns {ThematicBreak} */\n function thematicBreak() {\n return {\n type: 'thematicBreak'\n };\n }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n * Point-like value.\n * @returns {Point}\n * unist point.\n */\nfunction point(d) {\n return {\n line: d.line,\n column: d.column,\n offset: d.offset\n };\n}\n\n/**\n * @param {Config} combined\n * @param {Array | Extension>} extensions\n * @returns {undefined}\n */\nfunction configure(combined, extensions) {\n let index = -1;\n while (++index < extensions.length) {\n const value = extensions[index];\n if (Array.isArray(value)) {\n configure(combined, value);\n } else {\n extension(combined, value);\n }\n }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {undefined}\n */\nfunction extension(combined, extension) {\n /** @type {keyof Extension} */\n let key;\n for (key in extension) {\n if (own.call(extension, key)) {\n switch (key) {\n case 'canContainEols':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'transforms':\n {\n const right = extension[key];\n if (right) {\n combined[key].push(...right);\n }\n break;\n }\n case 'enter':\n case 'exit':\n {\n const right = extension[key];\n if (right) {\n Object.assign(combined[key], right);\n }\n break;\n }\n // No default\n }\n }\n }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n if (left) {\n throw new Error('Cannot close `' + left.type + '` (' + stringifyPosition({\n start: left.start,\n end: left.end\n }) + '): a different token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is open');\n } else {\n throw new Error('Cannot close document, a token (`' + right.type + '`, ' + stringifyPosition({\n start: right.start,\n end: right.end\n }) + ') is still open');\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\nimport { subtokenize } from 'micromark-util-subtokenize';\n\n/**\n * @param {Array} events\n * Events.\n * @returns {Array}\n * Events.\n */\nexport function postprocess(events) {\n while (!subtokenize(events)) {\n // Empty\n }\n return events;\n}","/**\n * @import {\n * Create,\n * FullNormalizedExtension,\n * InitialConstruct,\n * ParseContext,\n * ParseOptions\n * } from 'micromark-util-types'\n */\n\nimport { combineExtensions } from 'micromark-util-combine-extensions';\nimport { content } from './initialize/content.js';\nimport { document } from './initialize/document.js';\nimport { flow } from './initialize/flow.js';\nimport { string, text } from './initialize/text.js';\nimport * as defaultConstructs from './constructs.js';\nimport { createTokenizer } from './create-tokenizer.js';\n\n/**\n * @param {ParseOptions | null | undefined} [options]\n * Configuration (optional).\n * @returns {ParseContext}\n * Parser.\n */\nexport function parse(options) {\n const settings = options || {};\n const constructs = /** @type {FullNormalizedExtension} */\n combineExtensions([defaultConstructs, ...(settings.extensions || [])]);\n\n /** @type {ParseContext} */\n const parser = {\n constructs,\n content: create(content),\n defined: [],\n document: create(document),\n flow: create(flow),\n lazy: {},\n string: create(string),\n text: create(text)\n };\n return parser;\n\n /**\n * @param {InitialConstruct} initial\n * Construct to start with.\n * @returns {Create}\n * Create a tokenizer.\n */\n function create(initial) {\n return creator;\n /** @type {Create} */\n function creator(from) {\n return createTokenizer(parser, initial, from);\n }\n }\n}","/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-from-markdown').Options} FromMarkdownOptions\n * @typedef {import('unified').Parser} Parser\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {Omit} Options\n */\n\nimport {fromMarkdown} from 'mdast-util-from-markdown'\n\n/**\n * Aadd support for parsing from markdown.\n *\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkParse(options) {\n /** @type {Processor} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n\n self.parser = parser\n\n /**\n * @type {Parser}\n */\n function parser(doc) {\n return fromMarkdown(doc, {\n ...self.data('settings'),\n ...options,\n // Note: these options are not in the readme.\n // The goal is for them to be set by plugins on `data` instead of being\n // passed by users.\n extensions: self.data('micromarkExtensions') || [],\n mdastExtensions: self.data('fromMarkdownExtensions') || []\n })\n }\n}\n","export const VOID = -1;\nexport const PRIMITIVE = 0;\nexport const ARRAY = 1;\nexport const OBJECT = 2;\nexport const DATE = 3;\nexport const REGEXP = 4;\nexport const MAP = 5;\nexport const SET = 6;\nexport const ERROR = 7;\nexport const BIGINT = 8;\n// export const SYMBOL = 9;\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst env = typeof self === 'object' ? self : globalThis;\n\nconst deserializer = ($, _) => {\n const as = (out, index) => {\n $.set(index, out);\n return out;\n };\n\n const unpair = index => {\n if ($.has(index))\n return $.get(index);\n\n const [type, value] = _[index];\n switch (type) {\n case PRIMITIVE:\n case VOID:\n return as(value, index);\n case ARRAY: {\n const arr = as([], index);\n for (const index of value)\n arr.push(unpair(index));\n return arr;\n }\n case OBJECT: {\n const object = as({}, index);\n for (const [key, index] of value)\n object[unpair(key)] = unpair(index);\n return object;\n }\n case DATE:\n return as(new Date(value), index);\n case REGEXP: {\n const {source, flags} = value;\n return as(new RegExp(source, flags), index);\n }\n case MAP: {\n const map = as(new Map, index);\n for (const [key, index] of value)\n map.set(unpair(key), unpair(index));\n return map;\n }\n case SET: {\n const set = as(new Set, index);\n for (const index of value)\n set.add(unpair(index));\n return set;\n }\n case ERROR: {\n const {name, message} = value;\n return as(new env[name](message), index);\n }\n case BIGINT:\n return as(BigInt(value), index);\n case 'BigInt':\n return as(Object(BigInt(value)), index);\n case 'ArrayBuffer':\n return as(new Uint8Array(value).buffer, value);\n case 'DataView': {\n const { buffer } = new Uint8Array(value);\n return as(new DataView(buffer), value);\n }\n }\n return as(new env[type](value), index);\n };\n\n return unpair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns a deserialized value from a serialized array of Records.\n * @param {Record[]} serialized a previously serialized value.\n * @returns {any}\n */\nexport const deserialize = serialized => deserializer(new Map, serialized)(0);\n","import {\n VOID, PRIMITIVE,\n ARRAY, OBJECT,\n DATE, REGEXP, MAP, SET,\n ERROR, BIGINT\n} from './types.js';\n\nconst EMPTY = '';\n\nconst {toString} = {};\nconst {keys} = Object;\n\nconst typeOf = value => {\n const type = typeof value;\n if (type !== 'object' || !value)\n return [PRIMITIVE, type];\n\n const asString = toString.call(value).slice(8, -1);\n switch (asString) {\n case 'Array':\n return [ARRAY, EMPTY];\n case 'Object':\n return [OBJECT, EMPTY];\n case 'Date':\n return [DATE, EMPTY];\n case 'RegExp':\n return [REGEXP, EMPTY];\n case 'Map':\n return [MAP, EMPTY];\n case 'Set':\n return [SET, EMPTY];\n case 'DataView':\n return [ARRAY, asString];\n }\n\n if (asString.includes('Array'))\n return [ARRAY, asString];\n\n if (asString.includes('Error'))\n return [ERROR, asString];\n\n return [OBJECT, asString];\n};\n\nconst shouldSkip = ([TYPE, type]) => (\n TYPE === PRIMITIVE &&\n (type === 'function' || type === 'symbol')\n);\n\nconst serializer = (strict, json, $, _) => {\n\n const as = (out, value) => {\n const index = _.push(out) - 1;\n $.set(value, index);\n return index;\n };\n\n const pair = value => {\n if ($.has(value))\n return $.get(value);\n\n let [TYPE, type] = typeOf(value);\n switch (TYPE) {\n case PRIMITIVE: {\n let entry = value;\n switch (type) {\n case 'bigint':\n TYPE = BIGINT;\n entry = value.toString();\n break;\n case 'function':\n case 'symbol':\n if (strict)\n throw new TypeError('unable to serialize ' + type);\n entry = null;\n break;\n case 'undefined':\n return as([VOID], value);\n }\n return as([TYPE, entry], value);\n }\n case ARRAY: {\n if (type) {\n let spread = value;\n if (type === 'DataView') {\n spread = new Uint8Array(value.buffer);\n }\n else if (type === 'ArrayBuffer') {\n spread = new Uint8Array(value);\n }\n return as([type, [...spread]], value);\n }\n\n const arr = [];\n const index = as([TYPE, arr], value);\n for (const entry of value)\n arr.push(pair(entry));\n return index;\n }\n case OBJECT: {\n if (type) {\n switch (type) {\n case 'BigInt':\n return as([type, value.toString()], value);\n case 'Boolean':\n case 'Number':\n case 'String':\n return as([type, value.valueOf()], value);\n }\n }\n\n if (json && ('toJSON' in value))\n return pair(value.toJSON());\n\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const key of keys(value)) {\n if (strict || !shouldSkip(typeOf(value[key])))\n entries.push([pair(key), pair(value[key])]);\n }\n return index;\n }\n case DATE:\n return as([TYPE, value.toISOString()], value);\n case REGEXP: {\n const {source, flags} = value;\n return as([TYPE, {source, flags}], value);\n }\n case MAP: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const [key, entry] of value) {\n if (strict || !(shouldSkip(typeOf(key)) || shouldSkip(typeOf(entry))))\n entries.push([pair(key), pair(entry)]);\n }\n return index;\n }\n case SET: {\n const entries = [];\n const index = as([TYPE, entries], value);\n for (const entry of value) {\n if (strict || !shouldSkip(typeOf(entry)))\n entries.push(pair(entry));\n }\n return index;\n }\n }\n\n const {message} = value;\n return as([TYPE, {name: type, message}], value);\n };\n\n return pair;\n};\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} value a serializable value.\n * @param {{json?: boolean, lossy?: boolean}?} options an object with a `lossy` or `json` property that,\n * if `true`, will not throw errors on incompatible types, and behave more\n * like JSON stringify would behave. Symbol and Function will be discarded.\n * @returns {Record[]}\n */\n export const serialize = (value, {json, lossy} = {}) => {\n const _ = [];\n return serializer(!(json || lossy), !!json, new Map, _)(value), _;\n};\n","import {deserialize} from './deserialize.js';\nimport {serialize} from './serialize.js';\n\n/**\n * @typedef {Array} Record a type representation\n */\n\n/**\n * Returns an array of serialized Records.\n * @param {any} any a serializable value.\n * @param {{transfer?: any[], json?: boolean, lossy?: boolean}?} options an object with\n * a transfer option (ignored when polyfilled) and/or non standard fields that\n * fallback to the polyfill if present.\n * @returns {Record[]}\n */\nexport default typeof structuredClone === \"function\" ?\n /* c8 ignore start */\n (any, options) => (\n options && ('json' in options || 'lossy' in options) ?\n deserialize(serialize(any, options)) : structuredClone(any)\n ) :\n (any, options) => deserialize(serialize(any, options));\n /* c8 ignore stop */\n\nexport {deserialize, serialize};\n","import { asciiAlphanumeric } from 'micromark-util-character';\nimport { encode } from 'micromark-util-encode';\n/**\n * Make a value safe for injection as a URL.\n *\n * This encodes unsafe characters with percent-encoding and skips already\n * encoded sequences (see `normalizeUri`).\n * Further unsafe characters are encoded as character references (see\n * `micromark-util-encode`).\n *\n * A regex of allowed protocols can be given, in which case the URL is\n * sanitized.\n * For example, `/^(https?|ircs?|mailto|xmpp)$/i` can be used for `a[href]`, or\n * `/^https?$/i` for `img[src]` (this is what `github.com` allows).\n * If the URL includes an unknown protocol (one not matched by `protocol`, such\n * as a dangerous example, `javascript:`), the value is ignored.\n *\n * @param {string | null | undefined} url\n * URI to sanitize.\n * @param {RegExp | null | undefined} [protocol]\n * Allowed protocols.\n * @returns {string}\n * Sanitized URI.\n */\nexport function sanitizeUri(url, protocol) {\n const value = encode(normalizeUri(url || ''));\n if (!protocol) {\n return value;\n }\n const colon = value.indexOf(':');\n const questionMark = value.indexOf('?');\n const numberSign = value.indexOf('#');\n const slash = value.indexOf('/');\n if (\n // If there is no protocol, it’s relative.\n colon < 0 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n slash > -1 && colon > slash || questionMark > -1 && colon > questionMark || numberSign > -1 && colon > numberSign ||\n // It is a protocol, it should be allowed.\n protocol.test(value.slice(0, colon))) {\n return value;\n }\n return '';\n}\n\n/**\n * Normalize a URL.\n *\n * Encode unsafe characters with percent-encoding, skipping already encoded\n * sequences.\n *\n * @param {string} value\n * URI to normalize.\n * @returns {string}\n * Normalized URI.\n */\nexport function normalizeUri(value) {\n /** @type {Array} */\n const result = [];\n let index = -1;\n let start = 0;\n let skip = 0;\n while (++index < value.length) {\n const code = value.charCodeAt(index);\n /** @type {string} */\n let replace = '';\n\n // A correct percent encoded value.\n if (code === 37 && asciiAlphanumeric(value.charCodeAt(index + 1)) && asciiAlphanumeric(value.charCodeAt(index + 2))) {\n skip = 2;\n }\n // ASCII.\n else if (code < 128) {\n if (!/[!#$&-;=?-Z_a-z~]/.test(String.fromCharCode(code))) {\n replace = String.fromCharCode(code);\n }\n }\n // Astral.\n else if (code > 55_295 && code < 57_344) {\n const next = value.charCodeAt(index + 1);\n\n // A correct surrogate pair.\n if (code < 56_320 && next > 56_319 && next < 57_344) {\n replace = String.fromCharCode(code, next);\n skip = 1;\n }\n // Lone surrogate.\n else {\n replace = \"\\uFFFD\";\n }\n }\n // Unicode.\n else {\n replace = String.fromCharCode(code);\n }\n if (replace) {\n result.push(value.slice(start, index), encodeURIComponent(replace));\n start = index + skip + 1;\n replace = '';\n }\n if (skip) {\n index += skip;\n skip = 0;\n }\n }\n return result.join('') + value.slice(start);\n}","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('./state.js').State} State\n */\n\n/**\n * @callback FootnoteBackContentTemplate\n * Generate content for the backreference dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array | ElementContent | string}\n * Content for the backreference when linking back from definitions to their\n * reference.\n *\n * @callback FootnoteBackLabelTemplate\n * Generate a back label dynamically.\n *\n * For the following markdown:\n *\n * ```markdown\n * Alpha[^micromark], bravo[^micromark], and charlie[^remark].\n *\n * [^remark]: things about remark\n * [^micromark]: things about micromark\n * ```\n *\n * This function will be called with:\n *\n * * `0` and `0` for the backreference from `things about micromark` to\n * `alpha`, as it is the first used definition, and the first call to it\n * * `0` and `1` for the backreference from `things about micromark` to\n * `bravo`, as it is the first used definition, and the second call to it\n * * `1` and `0` for the backreference from `things about remark` to\n * `charlie`, as it is the second used definition\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Back label to use when linking back from definitions to their reference.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Generate the default content that GitHub uses on backreferences.\n *\n * @param {number} _\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {Array}\n * Content.\n */\nexport function defaultFootnoteBackContent(_, rereferenceIndex) {\n /** @type {Array} */\n const result = [{type: 'text', value: '↩'}]\n\n if (rereferenceIndex > 1) {\n result.push({\n type: 'element',\n tagName: 'sup',\n properties: {},\n children: [{type: 'text', value: String(rereferenceIndex)}]\n })\n }\n\n return result\n}\n\n/**\n * Generate the default label that GitHub uses on backreferences.\n *\n * @param {number} referenceIndex\n * Index of the definition in the order that they are first referenced,\n * 0-indexed.\n * @param {number} rereferenceIndex\n * Index of calls to the same definition, 0-indexed.\n * @returns {string}\n * Label.\n */\nexport function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n return (\n 'Back to reference ' +\n (referenceIndex + 1) +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n )\n}\n\n/**\n * Generate a hast footer for called footnote definitions.\n *\n * @param {State} state\n * Info passed around.\n * @returns {Element | undefined}\n * `section` element or `undefined`.\n */\n// eslint-disable-next-line complexity\nexport function footer(state) {\n const clobberPrefix =\n typeof state.options.clobberPrefix === 'string'\n ? state.options.clobberPrefix\n : 'user-content-'\n const footnoteBackContent =\n state.options.footnoteBackContent || defaultFootnoteBackContent\n const footnoteBackLabel =\n state.options.footnoteBackLabel || defaultFootnoteBackLabel\n const footnoteLabel = state.options.footnoteLabel || 'Footnotes'\n const footnoteLabelTagName = state.options.footnoteLabelTagName || 'h2'\n const footnoteLabelProperties = state.options.footnoteLabelProperties || {\n className: ['sr-only']\n }\n /** @type {Array} */\n const listItems = []\n let referenceIndex = -1\n\n while (++referenceIndex < state.footnoteOrder.length) {\n const definition = state.footnoteById.get(\n state.footnoteOrder[referenceIndex]\n )\n\n if (!definition) {\n continue\n }\n\n const content = state.all(definition)\n const id = String(definition.identifier).toUpperCase()\n const safeId = normalizeUri(id.toLowerCase())\n let rereferenceIndex = 0\n /** @type {Array} */\n const backReferences = []\n const counts = state.footnoteCounts.get(id)\n\n // eslint-disable-next-line no-unmodified-loop-condition\n while (counts !== undefined && ++rereferenceIndex <= counts) {\n if (backReferences.length > 0) {\n backReferences.push({type: 'text', value: ' '})\n }\n\n let children =\n typeof footnoteBackContent === 'string'\n ? footnoteBackContent\n : footnoteBackContent(referenceIndex, rereferenceIndex)\n\n if (typeof children === 'string') {\n children = {type: 'text', value: children}\n }\n\n backReferences.push({\n type: 'element',\n tagName: 'a',\n properties: {\n href:\n '#' +\n clobberPrefix +\n 'fnref-' +\n safeId +\n (rereferenceIndex > 1 ? '-' + rereferenceIndex : ''),\n dataFootnoteBackref: '',\n ariaLabel:\n typeof footnoteBackLabel === 'string'\n ? footnoteBackLabel\n : footnoteBackLabel(referenceIndex, rereferenceIndex),\n className: ['data-footnote-backref']\n },\n children: Array.isArray(children) ? children : [children]\n })\n }\n\n const tail = content[content.length - 1]\n\n if (tail && tail.type === 'element' && tail.tagName === 'p') {\n const tailTail = tail.children[tail.children.length - 1]\n if (tailTail && tailTail.type === 'text') {\n tailTail.value += ' '\n } else {\n tail.children.push({type: 'text', value: ' '})\n }\n\n tail.children.push(...backReferences)\n } else {\n content.push(...backReferences)\n }\n\n /** @type {Element} */\n const listItem = {\n type: 'element',\n tagName: 'li',\n properties: {id: clobberPrefix + 'fn-' + safeId},\n children: state.wrap(content, true)\n }\n\n state.patch(definition, listItem)\n\n listItems.push(listItem)\n }\n\n if (listItems.length === 0) {\n return\n }\n\n return {\n type: 'element',\n tagName: 'section',\n properties: {dataFootnotes: true, className: ['footnotes']},\n children: [\n {\n type: 'element',\n tagName: footnoteLabelTagName,\n properties: {\n ...structuredClone(footnoteLabelProperties),\n id: 'footnote-label'\n },\n children: [{type: 'text', value: footnoteLabel}]\n },\n {type: 'text', value: '\\n'},\n {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: state.wrap(listItems, true)\n },\n {type: 'text', value: '\\n'}\n ]\n }\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Parent} Parent\n */\n\n/**\n * @template Fn\n * @template Fallback\n * @typedef {Fn extends (value: any) => value is infer Thing ? Thing : Fallback} Predicate\n */\n\n/**\n * @callback Check\n * Check that an arbitrary value is a node.\n * @param {unknown} this\n * The given context.\n * @param {unknown} [node]\n * Anything (typically a node).\n * @param {number | null | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | null | undefined} [parent]\n * The node’s parent.\n * @returns {boolean}\n * Whether this is a node and passes a test.\n *\n * @typedef {Record | Node} Props\n * Object to check for equivalence.\n *\n * Note: `Node` is included as it is common but is not indexable.\n *\n * @typedef {Array | Props | TestFunction | string | null | undefined} Test\n * Check for an arbitrary node.\n *\n * @callback TestFunction\n * Check if a node passes a test.\n * @param {unknown} this\n * The given context.\n * @param {Node} node\n * A node.\n * @param {number | undefined} [index]\n * The node’s position in its parent.\n * @param {Parent | undefined} [parent]\n * The node’s parent.\n * @returns {boolean | undefined | void}\n * Whether this node passes the test.\n *\n * Note: `void` is included until TS sees no return as `undefined`.\n */\n\n/**\n * Check if `node` is a `Node` and whether it passes the given test.\n *\n * @param {unknown} node\n * Thing to check, typically `Node`.\n * @param {Test} test\n * A check for a specific node.\n * @param {number | null | undefined} index\n * The node’s position in its parent.\n * @param {Parent | null | undefined} parent\n * The node’s parent.\n * @param {unknown} context\n * Context object (`this`) to pass to `test` functions.\n * @returns {boolean}\n * Whether `node` is a node and passes a test.\n */\nexport const is =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((node: unknown, test: Condition, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((node?: null | undefined) => false) &\n * ((node: unknown, test?: null | undefined, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((node: unknown, test?: Test, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => boolean)\n * )}\n */\n (\n /**\n * @param {unknown} [node]\n * @param {Test} [test]\n * @param {number | null | undefined} [index]\n * @param {Parent | null | undefined} [parent]\n * @param {unknown} [context]\n * @returns {boolean}\n */\n // eslint-disable-next-line max-params\n function (node, test, index, parent, context) {\n const check = convert(test)\n\n if (\n index !== undefined &&\n index !== null &&\n (typeof index !== 'number' ||\n index < 0 ||\n index === Number.POSITIVE_INFINITY)\n ) {\n throw new Error('Expected positive finite index')\n }\n\n if (\n parent !== undefined &&\n parent !== null &&\n (!is(parent) || !parent.children)\n ) {\n throw new Error('Expected parent node')\n }\n\n if (\n (parent === undefined || parent === null) !==\n (index === undefined || index === null)\n ) {\n throw new Error('Expected both parent and index')\n }\n\n return looksLikeANode(node)\n ? check.call(context, node, index, parent)\n : false\n }\n )\n\n/**\n * Generate an assertion from a test.\n *\n * Useful if you’re going to test many nodes, for example when creating a\n * utility where something else passes a compatible test.\n *\n * The created function is a bit faster because it expects valid input only:\n * a `node`, `index`, and `parent`.\n *\n * @param {Test} test\n * * when nullish, checks if `node` is a `Node`.\n * * when `string`, works like passing `(node) => node.type === test`.\n * * when `function` checks if function passed the node is true.\n * * when `object`, checks that all keys in test are in node, and that they have (strictly) equal values.\n * * when `array`, checks if any one of the subtests pass.\n * @returns {Check}\n * An assertion.\n */\nexport const convert =\n // Note: overloads in JSDoc can’t yet use different `@template`s.\n /**\n * @type {(\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & {type: Condition}) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Condition) &\n * ((test: Condition) => (node: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node & Predicate) &\n * ((test?: null | undefined) => (node?: unknown, index?: number | null | undefined, parent?: Parent | null | undefined, context?: unknown) => node is Node) &\n * ((test?: Test) => Check)\n * )}\n */\n (\n /**\n * @param {Test} [test]\n * @returns {Check}\n */\n function (test) {\n if (test === null || test === undefined) {\n return ok\n }\n\n if (typeof test === 'function') {\n return castFactory(test)\n }\n\n if (typeof test === 'object') {\n return Array.isArray(test) ? anyFactory(test) : propsFactory(test)\n }\n\n if (typeof test === 'string') {\n return typeFactory(test)\n }\n\n throw new Error('Expected function, string, or object as test')\n }\n )\n\n/**\n * @param {Array} tests\n * @returns {Check}\n */\nfunction anyFactory(tests) {\n /** @type {Array} */\n const checks = []\n let index = -1\n\n while (++index < tests.length) {\n checks[index] = convert(tests[index])\n }\n\n return castFactory(any)\n\n /**\n * @this {unknown}\n * @type {TestFunction}\n */\n function any(...parameters) {\n let index = -1\n\n while (++index < checks.length) {\n if (checks[index].apply(this, parameters)) return true\n }\n\n return false\n }\n}\n\n/**\n * Turn an object into a test for a node with a certain fields.\n *\n * @param {Props} check\n * @returns {Check}\n */\nfunction propsFactory(check) {\n const checkAsRecord = /** @type {Record} */ (check)\n\n return castFactory(all)\n\n /**\n * @param {Node} node\n * @returns {boolean}\n */\n function all(node) {\n const nodeAsRecord = /** @type {Record} */ (\n /** @type {unknown} */ (node)\n )\n\n /** @type {string} */\n let key\n\n for (key in check) {\n if (nodeAsRecord[key] !== checkAsRecord[key]) return false\n }\n\n return true\n }\n}\n\n/**\n * Turn a string into a test for a node with a certain type.\n *\n * @param {string} check\n * @returns {Check}\n */\nfunction typeFactory(check) {\n return castFactory(type)\n\n /**\n * @param {Node} node\n */\n function type(node) {\n return node && node.type === check\n }\n}\n\n/**\n * Turn a custom test into a test for a node that passes that test.\n *\n * @param {TestFunction} testFunction\n * @returns {Check}\n */\nfunction castFactory(testFunction) {\n return check\n\n /**\n * @this {unknown}\n * @type {Check}\n */\n function check(value, index, parent) {\n return Boolean(\n looksLikeANode(value) &&\n testFunction.call(\n this,\n value,\n typeof index === 'number' ? index : undefined,\n parent || undefined\n )\n )\n }\n}\n\nfunction ok() {\n return true\n}\n\n/**\n * @param {unknown} value\n * @returns {value is Node}\n */\nfunction looksLikeANode(value) {\n return value !== null && typeof value === 'object' && 'type' in value\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {InternalAncestor, Child>} Ancestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {'skip' | boolean} Action\n * Union of the action types.\n *\n * @typedef {number} Index\n * Move to the sibling at `index` next (after node itself is completely\n * traversed).\n *\n * Useful if mutating the tree, such as removing the node the visitor is\n * currently on, or any of its previous siblings.\n * Results less than 0 or greater than or equal to `children.length` stop\n * traversing the parent.\n *\n * @typedef {[(Action | null | undefined | void)?, (Index | null | undefined)?]} ActionTuple\n * List with one or two values, the first an action, the second an index.\n *\n * @typedef {Action | ActionTuple | Index | null | undefined | void} VisitorResult\n * Any value that can be returned from a visitor.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform the parent of node (the last of `ancestors`).\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of an ancestor still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Array} ancestors\n * Ancestors of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [VisitedParents=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor, Check>, Ancestor, Check>>>} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parents`.\n * @template {UnistNode} [Tree=UnistNode]\n * Tree type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {convert} from 'unist-util-is'\nimport {color} from 'unist-util-visit-parents/do-not-use-color'\n\n/** @type {Readonly} */\nconst empty = []\n\n/**\n * Continue traversing as normal.\n */\nexport const CONTINUE = true\n\n/**\n * Stop traversing immediately.\n */\nexport const EXIT = false\n\n/**\n * Do not traverse this node’s children.\n */\nexport const SKIP = 'skip'\n\n/**\n * Visit nodes, with ancestral information.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} test\n * `unist-util-is`-compatible test\n * @param {Visitor | boolean | null | undefined} [visitor]\n * Handle each node.\n * @param {boolean | null | undefined} [reverse]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visitParents(tree, test, visitor, reverse) {\n /** @type {Test} */\n let check\n\n if (typeof test === 'function' && typeof visitor !== 'function') {\n reverse = visitor\n // @ts-expect-error no visitor given, so `visitor` is test.\n visitor = test\n } else {\n // @ts-expect-error visitor given, so `test` isn’t a visitor.\n check = test\n }\n\n const is = convert(check)\n const step = reverse ? -1 : 1\n\n factory(tree, undefined, [])()\n\n /**\n * @param {UnistNode} node\n * @param {number | undefined} index\n * @param {Array} parents\n */\n function factory(node, index, parents) {\n const value = /** @type {Record} */ (\n node && typeof node === 'object' ? node : {}\n )\n\n if (typeof value.type === 'string') {\n const name =\n // `hast`\n typeof value.tagName === 'string'\n ? value.tagName\n : // `xast`\n typeof value.name === 'string'\n ? value.name\n : undefined\n\n Object.defineProperty(visit, 'name', {\n value:\n 'node (' + color(node.type + (name ? '<' + name + '>' : '')) + ')'\n })\n }\n\n return visit\n\n function visit() {\n /** @type {Readonly} */\n let result = empty\n /** @type {Readonly} */\n let subresult\n /** @type {number} */\n let offset\n /** @type {Array} */\n let grandparents\n\n if (!test || is(node, index, parents[parents.length - 1] || undefined)) {\n // @ts-expect-error: `visitor` is now a visitor.\n result = toResult(visitor(node, parents))\n\n if (result[0] === EXIT) {\n return result\n }\n }\n\n if ('children' in node && node.children) {\n const nodeAsParent = /** @type {UnistParent} */ (node)\n\n if (nodeAsParent.children && result[0] !== SKIP) {\n offset = (reverse ? nodeAsParent.children.length : -1) + step\n grandparents = parents.concat(nodeAsParent)\n\n while (offset > -1 && offset < nodeAsParent.children.length) {\n const child = nodeAsParent.children[offset]\n\n subresult = factory(child, offset, grandparents)()\n\n if (subresult[0] === EXIT) {\n return subresult\n }\n\n offset =\n typeof subresult[1] === 'number' ? subresult[1] : offset + step\n }\n }\n }\n\n return result\n }\n }\n}\n\n/**\n * Turn a return value into a clean result.\n *\n * @param {VisitorResult} value\n * Valid return values from visitors.\n * @returns {Readonly}\n * Clean result.\n */\nfunction toResult(value) {\n if (Array.isArray(value)) {\n return value\n }\n\n if (typeof value === 'number') {\n return [CONTINUE, value]\n }\n\n return value === null || value === undefined ? empty : [value]\n}\n","/**\n * @typedef {import('unist').Node} UnistNode\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist-util-visit-parents').VisitorResult} VisitorResult\n */\n\n/**\n * @typedef {Exclude | undefined} Test\n * Test from `unist-util-is`.\n *\n * Note: we have remove and add `undefined`, because otherwise when generating\n * automatic `.d.ts` files, TS tries to flatten paths from a local perspective,\n * which doesn’t work when publishing on npm.\n */\n\n// To do: use types from `unist-util-visit-parents` when it’s released.\n\n/**\n * @typedef {(\n * Fn extends (value: any) => value is infer Thing\n * ? Thing\n * : Fallback\n * )} Predicate\n * Get the value of a type guard `Fn`.\n * @template Fn\n * Value; typically function that is a type guard (such as `(x): x is Y`).\n * @template Fallback\n * Value to yield if `Fn` is not a type guard.\n */\n\n/**\n * @typedef {(\n * Check extends null | undefined // No test.\n * ? Value\n * : Value extends {type: Check} // String (type) test.\n * ? Value\n * : Value extends Check // Partial test.\n * ? Value\n * : Check extends Function // Function test.\n * ? Predicate extends Value\n * ? Predicate\n * : never\n * : never // Some other test?\n * )} MatchesOne\n * Check whether a node matches a primitive check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test, but not arrays.\n */\n\n/**\n * @typedef {(\n * Check extends Array\n * ? MatchesOne\n * : MatchesOne\n * )} Matches\n * Check whether a node matches a check in the type system.\n * @template Value\n * Value; typically unist `Node`.\n * @template Check\n * Value; typically `unist-util-is`-compatible test.\n */\n\n/**\n * @typedef {0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10} Uint\n * Number; capped reasonably.\n */\n\n/**\n * @typedef {I extends 0 ? 1 : I extends 1 ? 2 : I extends 2 ? 3 : I extends 3 ? 4 : I extends 4 ? 5 : I extends 5 ? 6 : I extends 6 ? 7 : I extends 7 ? 8 : I extends 8 ? 9 : 10} Increment\n * Increment a number in the type system.\n * @template {Uint} [I=0]\n * Index.\n */\n\n/**\n * @typedef {(\n * Node extends UnistParent\n * ? Node extends {children: Array}\n * ? Child extends Children ? Node : never\n * : never\n * : never\n * )} InternalParent\n * Collect nodes that can be parents of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {InternalParent, Child>} Parent\n * Collect nodes in `Tree` that can be parents of `Child`.\n * @template {UnistNode} Tree\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n */\n\n/**\n * @typedef {(\n * Depth extends Max\n * ? never\n * :\n * | InternalParent\n * | InternalAncestor, Max, Increment>\n * )} InternalAncestor\n * Collect nodes in `Tree` that can be ancestors of `Child`.\n * @template {UnistNode} Node\n * All node types in a tree.\n * @template {UnistNode} Child\n * Node to search for.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @typedef {(\n * Tree extends UnistParent\n * ? Depth extends Max\n * ? Tree\n * : Tree | InclusiveDescendant>\n * : Tree\n * )} InclusiveDescendant\n * Collect all (inclusive) descendants of `Tree`.\n *\n * > 👉 **Note**: for performance reasons, this seems to be the fastest way to\n * > recurse without actually running into an infinite loop, which the\n * > previous version did.\n * >\n * > Practically, a max of `2` is typically enough assuming a `Root` is\n * > passed, but it doesn’t improve performance.\n * > It gets higher with `List > ListItem > Table > TableRow > TableCell`.\n * > Using up to `10` doesn’t hurt or help either.\n * @template {UnistNode} Tree\n * Tree type.\n * @template {Uint} [Max=10]\n * Max; searches up to this depth.\n * @template {Uint} [Depth=0]\n * Current depth.\n */\n\n/**\n * @callback Visitor\n * Handle a node (matching `test`, if given).\n *\n * Visitors are free to transform `node`.\n * They can also transform `parent`.\n *\n * Replacing `node` itself, if `SKIP` is not returned, still causes its\n * descendants to be walked (which is a bug).\n *\n * When adding or removing previous siblings of `node` (or next siblings, in\n * case of reverse), the `Visitor` should return a new `Index` to specify the\n * sibling to traverse after `node` is traversed.\n * Adding or removing next siblings of `node` (or previous siblings, in case\n * of reverse) is handled as expected without needing to return a new `Index`.\n *\n * Removing the children property of `parent` still results in them being\n * traversed.\n * @param {Visited} node\n * Found node.\n * @param {Visited extends UnistNode ? number | undefined : never} index\n * Index of `node` in `parent`.\n * @param {Ancestor extends UnistParent ? Ancestor | undefined : never} parent\n * Parent of `node`.\n * @returns {VisitorResult}\n * What to do next.\n *\n * An `Index` is treated as a tuple of `[CONTINUE, Index]`.\n * An `Action` is treated as a tuple of `[Action]`.\n *\n * Passing a tuple back only makes sense if the `Action` is `SKIP`.\n * When the `Action` is `EXIT`, that action can be returned.\n * When the `Action` is `CONTINUE`, `Index` can be returned.\n * @template {UnistNode} [Visited=UnistNode]\n * Visited node type.\n * @template {UnistParent} [Ancestor=UnistParent]\n * Ancestor type.\n */\n\n/**\n * @typedef {Visitor>} BuildVisitorFromMatch\n * Build a typed `Visitor` function from a node and all possible parents.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Visited\n * Node type.\n * @template {UnistParent} Ancestor\n * Parent type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromMatch<\n * Matches,\n * Extract\n * >\n * )} BuildVisitorFromDescendants\n * Build a typed `Visitor` function from a list of descendants and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} Descendant\n * Node type.\n * @template {Test} Check\n * Test type.\n */\n\n/**\n * @typedef {(\n * BuildVisitorFromDescendants<\n * InclusiveDescendant,\n * Check\n * >\n * )} BuildVisitor\n * Build a typed `Visitor` function from a tree and a test.\n *\n * It will infer which values are passed as `node` and which as `parent`.\n * @template {UnistNode} [Tree=UnistNode]\n * Node type.\n * @template {Test} [Check=Test]\n * Test type.\n */\n\nimport {visitParents} from 'unist-util-visit-parents'\n\nexport {CONTINUE, EXIT, SKIP} from 'unist-util-visit-parents'\n\n/**\n * Visit nodes.\n *\n * This algorithm performs *depth-first* *tree traversal* in *preorder*\n * (**NLR**) or if `reverse` is given, in *reverse preorder* (**NRL**).\n *\n * You can choose for which nodes `visitor` is called by passing a `test`.\n * For complex tests, you should test yourself in `visitor`, as it will be\n * faster and will have improved type information.\n *\n * Walking the tree is an intensive task.\n * Make use of the return values of the visitor when possible.\n * Instead of walking a tree multiple times, walk it once, use `unist-util-is`\n * to check if a node matches, and then perform different operations.\n *\n * You can change the tree.\n * See `Visitor` for more info.\n *\n * @overload\n * @param {Tree} tree\n * @param {Check} check\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @overload\n * @param {Tree} tree\n * @param {BuildVisitor} visitor\n * @param {boolean | null | undefined} [reverse]\n * @returns {undefined}\n *\n * @param {UnistNode} tree\n * Tree to traverse.\n * @param {Visitor | Test} testOrVisitor\n * `unist-util-is`-compatible test (optional, omit to pass a visitor).\n * @param {Visitor | boolean | null | undefined} [visitorOrReverse]\n * Handle each node (when test is omitted, pass `reverse`).\n * @param {boolean | null | undefined} [maybeReverse=false]\n * Traverse in reverse preorder (NRL) instead of the default preorder (NLR).\n * @returns {undefined}\n * Nothing.\n *\n * @template {UnistNode} Tree\n * Node type.\n * @template {Test} Check\n * `unist-util-is`-compatible test.\n */\nexport function visit(tree, testOrVisitor, visitorOrReverse, maybeReverse) {\n /** @type {boolean | null | undefined} */\n let reverse\n /** @type {Test} */\n let test\n /** @type {Visitor} */\n let visitor\n\n if (\n typeof testOrVisitor === 'function' &&\n typeof visitorOrReverse !== 'function'\n ) {\n test = undefined\n visitor = testOrVisitor\n reverse = visitorOrReverse\n } else {\n // @ts-expect-error: assume the overload with test was given.\n test = testOrVisitor\n // @ts-expect-error: assume the overload with test was given.\n visitor = visitorOrReverse\n reverse = maybeReverse\n }\n\n visitParents(tree, test, overload, reverse)\n\n /**\n * @param {UnistNode} node\n * @param {Array} parents\n */\n function overload(node, parents) {\n const parent = parents[parents.length - 1]\n const index = parent ? parent.children.indexOf(node) : undefined\n return visitor(node, index, parent)\n }\n}\n","/**\n * @typedef {import('hast').ElementContent} ElementContent\n *\n * @typedef {import('mdast').Nodes} Nodes\n * @typedef {import('mdast').Reference} Reference\n *\n * @typedef {import('./state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Return the content of a reference without definition as plain text.\n *\n * @param {State} state\n * Info passed around.\n * @param {Extract} node\n * Reference node (image, link).\n * @returns {Array}\n * hast content.\n */\nexport function revert(state, node) {\n const subtype = node.referenceType\n let suffix = ']'\n\n if (subtype === 'collapsed') {\n suffix += '[]'\n } else if (subtype === 'full') {\n suffix += '[' + (node.label || node.identifier) + ']'\n }\n\n if (node.type === 'imageReference') {\n return [{type: 'text', value: '![' + node.alt + suffix}]\n }\n\n const contents = state.all(node)\n const head = contents[0]\n\n if (head && head.type === 'text') {\n head.value = '[' + head.value\n } else {\n contents.unshift({type: 'text', value: '['})\n }\n\n const tail = contents[contents.length - 1]\n\n if (tail && tail.type === 'text') {\n tail.value += suffix\n } else {\n contents.push({type: 'text', value: suffix})\n }\n\n return contents\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `listItem` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {ListItem} node\n * mdast node.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {Element}\n * hast node.\n */\nexport function listItem(state, node, parent) {\n const results = state.all(node)\n const loose = parent ? listLoose(parent) : listItemLoose(node)\n /** @type {Properties} */\n const properties = {}\n /** @type {Array} */\n const children = []\n\n if (typeof node.checked === 'boolean') {\n const head = results[0]\n /** @type {Element} */\n let paragraph\n\n if (head && head.type === 'element' && head.tagName === 'p') {\n paragraph = head\n } else {\n paragraph = {type: 'element', tagName: 'p', properties: {}, children: []}\n results.unshift(paragraph)\n }\n\n if (paragraph.children.length > 0) {\n paragraph.children.unshift({type: 'text', value: ' '})\n }\n\n paragraph.children.unshift({\n type: 'element',\n tagName: 'input',\n properties: {type: 'checkbox', checked: node.checked, disabled: true},\n children: []\n })\n\n // According to github-markdown-css, this class hides bullet.\n // See: .\n properties.className = ['task-list-item']\n }\n\n let index = -1\n\n while (++index < results.length) {\n const child = results[index]\n\n // Add eols before nodes, except if this is a loose, first paragraph.\n if (\n loose ||\n index !== 0 ||\n child.type !== 'element' ||\n child.tagName !== 'p'\n ) {\n children.push({type: 'text', value: '\\n'})\n }\n\n if (child.type === 'element' && child.tagName === 'p' && !loose) {\n children.push(...child.children)\n } else {\n children.push(child)\n }\n }\n\n const tail = results[results.length - 1]\n\n // Add a final eol.\n if (tail && (loose || tail.type !== 'element' || tail.tagName !== 'p')) {\n children.push({type: 'text', value: '\\n'})\n }\n\n /** @type {Element} */\n const result = {type: 'element', tagName: 'li', properties, children}\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * @param {Parents} node\n * @return {Boolean}\n */\nfunction listLoose(node) {\n let loose = false\n if (node.type === 'list') {\n loose = node.spread || false\n const children = node.children\n let index = -1\n\n while (!loose && ++index < children.length) {\n loose = listItemLoose(children[index])\n }\n }\n\n return loose\n}\n\n/**\n * @param {ListItem} node\n * @return {Boolean}\n */\nfunction listItemLoose(node) {\n const spread = node.spread\n\n return spread === null || spread === undefined\n ? node.children.length > 1\n : spread\n}\n","const tab = 9 /* `\\t` */\nconst space = 32 /* ` ` */\n\n/**\n * Remove initial and final spaces and tabs at the line breaks in `value`.\n * Does not trim initial and final spaces and tabs of the value itself.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Trimmed value.\n */\nexport function trimLines(value) {\n const source = String(value)\n const search = /\\r?\\n|\\r/g\n let match = search.exec(source)\n let last = 0\n /** @type {Array} */\n const lines = []\n\n while (match) {\n lines.push(\n trimLine(source.slice(last, match.index), last > 0, true),\n match[0]\n )\n\n last = match.index + match[0].length\n match = search.exec(source)\n }\n\n lines.push(trimLine(source.slice(last), last > 0, false))\n\n return lines.join('')\n}\n\n/**\n * @param {string} value\n * Line to trim.\n * @param {boolean} start\n * Whether to trim the start of the line.\n * @param {boolean} end\n * Whether to trim the end of the line.\n * @returns {string}\n * Trimmed line.\n */\nfunction trimLine(value, start, end) {\n let startIndex = 0\n let endIndex = value.length\n\n if (start) {\n let code = value.codePointAt(startIndex)\n\n while (code === tab || code === space) {\n startIndex++\n code = value.codePointAt(startIndex)\n }\n }\n\n if (end) {\n let code = value.codePointAt(endIndex - 1)\n\n while (code === tab || code === space) {\n endIndex--\n code = value.codePointAt(endIndex - 1)\n }\n }\n\n return endIndex > startIndex ? value.slice(startIndex, endIndex) : ''\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {strikethrough} from './delete.js'\nimport {emphasis} from './emphasis.js'\nimport {footnoteReference} from './footnote-reference.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {imageReference} from './image-reference.js'\nimport {image} from './image.js'\nimport {inlineCode} from './inline-code.js'\nimport {linkReference} from './link-reference.js'\nimport {link} from './link.js'\nimport {listItem} from './list-item.js'\nimport {list} from './list.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {table} from './table.js'\nimport {tableRow} from './table-row.js'\nimport {tableCell} from './table-cell.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default handlers for nodes.\n *\n * @satisfies {import('../state.js').Handlers}\n */\nexport const handlers = {\n blockquote,\n break: hardBreak,\n code,\n delete: strikethrough,\n emphasis,\n footnoteReference,\n heading,\n html,\n imageReference,\n image,\n inlineCode,\n linkReference,\n link,\n listItem,\n list,\n paragraph,\n // @ts-expect-error: root is different, but hard to type.\n root,\n strong,\n table,\n tableCell,\n tableRow,\n text,\n thematicBreak,\n toml: ignore,\n yaml: ignore,\n definition: ignore,\n footnoteDefinition: ignore\n}\n\n// Return nothing for nodes that are ignored.\nfunction ignore() {\n return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `blockquote` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Blockquote} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function blockquote(state, node) {\n /** @type {Element} */\n const result = {\n type: 'element',\n tagName: 'blockquote',\n properties: {},\n children: state.wrap(state.all(node), true)\n }\n state.patch(node, result)\n return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').Break} Break\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `break` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Break} node\n * mdast node.\n * @returns {Array}\n * hast element content.\n */\nexport function hardBreak(state, node) {\n /** @type {Element} */\n const result = {type: 'element', tagName: 'br', properties: {}, children: []}\n state.patch(node, result)\n return [state.applyData(node, result), {type: 'text', value: '\\n'}]\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Code} Code\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `code` node into hast.\n *\n * @param {State} state\n * Info passed around.\n * @param {Code} node\n * mdast node.\n * @returns {Element}\n * hast node.\n */\nexport function code(state, node) {\n const value = node.value ? node.value + '\\n' : ''\n /** @type {Properties} */\n const properties = {}\n\n if (node.lang) {\n properties.className = ['language-' + node.lang]\n }\n\n // Create ``.\n /** @type {Element} */\n let result = {\n type: 'element',\n tagName: 'code',\n properties,\n children: [{type: 'text', value}]\n }\n\n if (node.meta) {\n result.data = {meta: node.meta}\n }\n\n state.patch(node, result)\n result = state.applyData(node, result)\n\n // Create `
`.\n  result = {type: 'element', tagName: 'pre', properties: {}, children: [result]}\n  state.patch(node, result)\n  return result\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Delete} Delete\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `delete` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Delete} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strikethrough(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'del',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `emphasis` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Emphasis} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function emphasis(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'em',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `footnoteReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {FootnoteReference} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function footnoteReference(state, node) {\n  const clobberPrefix =\n    typeof state.options.clobberPrefix === 'string'\n      ? state.options.clobberPrefix\n      : 'user-content-'\n  const id = String(node.identifier).toUpperCase()\n  const safeId = normalizeUri(id.toLowerCase())\n  const index = state.footnoteOrder.indexOf(id)\n  /** @type {number} */\n  let counter\n\n  let reuseCounter = state.footnoteCounts.get(id)\n\n  if (reuseCounter === undefined) {\n    reuseCounter = 0\n    state.footnoteOrder.push(id)\n    counter = state.footnoteOrder.length\n  } else {\n    counter = index + 1\n  }\n\n  reuseCounter += 1\n  state.footnoteCounts.set(id, reuseCounter)\n\n  /** @type {Element} */\n  const link = {\n    type: 'element',\n    tagName: 'a',\n    properties: {\n      href: '#' + clobberPrefix + 'fn-' + safeId,\n      id:\n        clobberPrefix +\n        'fnref-' +\n        safeId +\n        (reuseCounter > 1 ? '-' + reuseCounter : ''),\n      dataFootnoteRef: true,\n      ariaDescribedBy: ['footnote-label']\n    },\n    children: [{type: 'text', value: String(counter)}]\n  }\n  state.patch(node, link)\n\n  /** @type {Element} */\n  const sup = {\n    type: 'element',\n    tagName: 'sup',\n    properties: {},\n    children: [link]\n  }\n  state.patch(node, sup)\n  return state.applyData(node, sup)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `heading` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Heading} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function heading(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'h' + node.depth,\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Html} Html\n * @typedef {import('../state.js').State} State\n * @typedef {import('../../index.js').Raw} Raw\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `html` node into hast (`raw` node in dangerous mode, otherwise\n * nothing).\n *\n * @param {State} state\n *   Info passed around.\n * @param {Html} node\n *   mdast node.\n * @returns {Element | Raw | undefined}\n *   hast node.\n */\nexport function html(state, node) {\n  if (state.options.allowDangerousHtml) {\n    /** @type {Raw} */\n    const result = {type: 'raw', value: node.value}\n    state.patch(node, result)\n    return state.applyData(node, result)\n  }\n\n  return undefined\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `imageReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ImageReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function imageReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(definition.url || ''), alt: node.alt}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Image} Image\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `image` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Image} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function image(state, node) {\n  /** @type {Properties} */\n  const properties = {src: normalizeUri(node.url)}\n\n  if (node.alt !== null && node.alt !== undefined) {\n    properties.alt = node.alt\n  }\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {type: 'element', tagName: 'img', properties, children: []}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Text} Text\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `inlineCode` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {InlineCode} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function inlineCode(state, node) {\n  /** @type {Text} */\n  const text = {type: 'text', value: node.value.replace(/\\r?\\n|\\r/g, ' ')}\n  state.patch(node, text)\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'code',\n    properties: {},\n    children: [text]\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\nimport {revert} from '../revert.js'\n\n/**\n * Turn an mdast `linkReference` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {LinkReference} node\n *   mdast node.\n * @returns {Array | ElementContent}\n *   hast node.\n */\nexport function linkReference(state, node) {\n  const id = String(node.identifier).toUpperCase()\n  const definition = state.definitionById.get(id)\n\n  if (!definition) {\n    return revert(state, node)\n  }\n\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(definition.url || '')}\n\n  if (definition.title !== null && definition.title !== undefined) {\n    properties.title = definition.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Link} Link\n * @typedef {import('../state.js').State} State\n */\n\nimport {normalizeUri} from 'micromark-util-sanitize-uri'\n\n/**\n * Turn an mdast `link` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Link} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function link(state, node) {\n  /** @type {Properties} */\n  const properties = {href: normalizeUri(node.url)}\n\n  if (node.title !== null && node.title !== undefined) {\n    properties.title = node.title\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'a',\n    properties,\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').List} List\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `list` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {List} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function list(state, node) {\n  /** @type {Properties} */\n  const properties = {}\n  const results = state.all(node)\n  let index = -1\n\n  if (typeof node.start === 'number' && node.start !== 1) {\n    properties.start = node.start\n  }\n\n  // Like GitHub, add a class for custom styling.\n  while (++index < results.length) {\n    const child = results[index]\n\n    if (\n      child.type === 'element' &&\n      child.tagName === 'li' &&\n      child.properties &&\n      Array.isArray(child.properties.className) &&\n      child.properties.className.includes('task-list-item')\n    ) {\n      properties.className = ['contains-task-list']\n      break\n    }\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: node.ordered ? 'ol' : 'ul',\n    properties,\n    children: state.wrap(results, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `paragraph` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Paragraph} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function paragraph(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'p',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Parents} HastParents\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `root` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastRoot} node\n *   mdast node.\n * @returns {HastParents}\n *   hast node.\n */\nexport function root(state, node) {\n  /** @type {HastRoot} */\n  const result = {type: 'root', children: state.wrap(state.all(node))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `strong` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Strong} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function strong(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'strong',\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').Table} Table\n * @typedef {import('../state.js').State} State\n */\n\nimport {pointEnd, pointStart} from 'unist-util-position'\n\n/**\n * Turn an mdast `table` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {Table} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function table(state, node) {\n  const rows = state.all(node)\n  const firstRow = rows.shift()\n  /** @type {Array} */\n  const tableContent = []\n\n  if (firstRow) {\n    /** @type {Element} */\n    const head = {\n      type: 'element',\n      tagName: 'thead',\n      properties: {},\n      children: state.wrap([firstRow], true)\n    }\n    state.patch(node.children[0], head)\n    tableContent.push(head)\n  }\n\n  if (rows.length > 0) {\n    /** @type {Element} */\n    const body = {\n      type: 'element',\n      tagName: 'tbody',\n      properties: {},\n      children: state.wrap(rows, true)\n    }\n\n    const start = pointStart(node.children[1])\n    const end = pointEnd(node.children[node.children.length - 1])\n    if (start && end) body.position = {start, end}\n    tableContent.push(body)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'table',\n    properties: {},\n    children: state.wrap(tableContent, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableCell` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableCell} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function tableCell(state, node) {\n  // Note: this function is normally not called: see `table-row` for how rows\n  // and their cells are compiled.\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'td', // Assume body cell.\n    properties: {},\n    children: state.all(node)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n * @typedef {import('hast').Properties} Properties\n * @typedef {import('mdast').Parents} Parents\n * @typedef {import('mdast').TableRow} TableRow\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `tableRow` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {TableRow} node\n *   mdast node.\n * @param {Parents | undefined} parent\n *   Parent of `node`.\n * @returns {Element}\n *   hast node.\n */\nexport function tableRow(state, node, parent) {\n  const siblings = parent ? parent.children : undefined\n  // Generate a body row when without parent.\n  const rowIndex = siblings ? siblings.indexOf(node) : 1\n  const tagName = rowIndex === 0 ? 'th' : 'td'\n  // To do: option to use `style`?\n  const align = parent && parent.type === 'table' ? parent.align : undefined\n  const length = align ? align.length : node.children.length\n  let cellIndex = -1\n  /** @type {Array} */\n  const cells = []\n\n  while (++cellIndex < length) {\n    // Note: can also be undefined.\n    const cell = node.children[cellIndex]\n    /** @type {Properties} */\n    const properties = {}\n    const alignValue = align ? align[cellIndex] : undefined\n\n    if (alignValue) {\n      properties.align = alignValue\n    }\n\n    /** @type {Element} */\n    let result = {type: 'element', tagName, properties, children: []}\n\n    if (cell) {\n      result.children = state.all(cell)\n      state.patch(cell, result)\n      result = state.applyData(cell, result)\n    }\n\n    cells.push(result)\n  }\n\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'tr',\n    properties: {},\n    children: state.wrap(cells, true)\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').Text} HastText\n * @typedef {import('mdast').Text} MdastText\n * @typedef {import('../state.js').State} State\n */\n\nimport {trimLines} from 'trim-lines'\n\n/**\n * Turn an mdast `text` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {MdastText} node\n *   mdast node.\n * @returns {HastElement | HastText}\n *   hast node.\n */\nexport function text(state, node) {\n  /** @type {HastText} */\n  const result = {type: 'text', value: trimLines(String(node.value))}\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('../state.js').State} State\n */\n\n// Make VS Code show references to the above types.\n''\n\n/**\n * Turn an mdast `thematicBreak` node into hast.\n *\n * @param {State} state\n *   Info passed around.\n * @param {ThematicBreak} node\n *   mdast node.\n * @returns {Element}\n *   hast node.\n */\nexport function thematicBreak(state, node) {\n  /** @type {Element} */\n  const result = {\n    type: 'element',\n    tagName: 'hr',\n    properties: {},\n    children: []\n  }\n  state.patch(node, result)\n  return state.applyData(node, result)\n}\n","/**\n * @typedef {import('hast').Element} HastElement\n * @typedef {import('hast').ElementContent} HastElementContent\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('hast').Properties} HastProperties\n * @typedef {import('hast').RootContent} HastRootContent\n * @typedef {import('hast').Text} HastText\n *\n * @typedef {import('mdast').Definition} MdastDefinition\n * @typedef {import('mdast').FootnoteDefinition} MdastFootnoteDefinition\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('mdast').Parents} MdastParents\n *\n * @typedef {import('vfile').VFile} VFile\n *\n * @typedef {import('./footer.js').FootnoteBackContentTemplate} FootnoteBackContentTemplate\n * @typedef {import('./footer.js').FootnoteBackLabelTemplate} FootnoteBackLabelTemplate\n */\n\n/**\n * @callback Handler\n *   Handle a node.\n * @param {State} state\n *   Info passed around.\n * @param {any} node\n *   mdast node to handle.\n * @param {MdastParents | undefined} parent\n *   Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n *   hast node.\n *\n * @typedef {Partial>} Handlers\n *   Handle nodes.\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n *   Whether to persist raw HTML in markdown in the hast tree (default:\n *   `false`).\n * @property {string | null | undefined} [clobberPrefix='user-content-']\n *   Prefix to use before the `id` property on footnotes to prevent them from\n *   *clobbering* (default: `'user-content-'`).\n *\n *   Pass `''` for trusted markdown and when you are careful with\n *   polyfilling.\n *   You could pass a different prefix.\n *\n *   DOM clobbering is this:\n *\n *   ```html\n *   

\n * \n * ```\n *\n * The above example shows that elements are made available by browsers, by\n * their ID, on the `window` object.\n * This is a security risk because you might be expecting some other variable\n * at that place.\n * It can also break polyfills.\n * Using a prefix solves these problems.\n * @property {VFile | null | undefined} [file]\n * Corresponding virtual file representing the input document (optional).\n * @property {FootnoteBackContentTemplate | string | null | undefined} [footnoteBackContent]\n * Content of the backreference back to references (default: `defaultFootnoteBackContent`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackContent(_, rereferenceIndex) {\n * const result = [{type: 'text', value: '↩'}]\n *\n * if (rereferenceIndex > 1) {\n * result.push({\n * type: 'element',\n * tagName: 'sup',\n * properties: {},\n * children: [{type: 'text', value: String(rereferenceIndex)}]\n * })\n * }\n *\n * return result\n * }\n * ```\n *\n * This content is used in the `a` element of each backreference (the `↩`\n * links).\n * @property {FootnoteBackLabelTemplate | string | null | undefined} [footnoteBackLabel]\n * Label to describe the backreference back to references (default:\n * `defaultFootnoteBackLabel`).\n *\n * The default value is:\n *\n * ```js\n * function defaultFootnoteBackLabel(referenceIndex, rereferenceIndex) {\n * return (\n * 'Back to reference ' +\n * (referenceIndex + 1) +\n * (rereferenceIndex > 1 ? '-' + rereferenceIndex : '')\n * )\n * }\n * ```\n *\n * Change it when the markdown is not in English.\n *\n * This label is used in the `ariaLabel` property on each backreference\n * (the `↩` links).\n * It affects users of assistive technology.\n * @property {string | null | undefined} [footnoteLabel='Footnotes']\n * Textual label to use for the footnotes section (default: `'Footnotes'`).\n *\n * Change it when the markdown is not in English.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {HastProperties | null | undefined} [footnoteLabelProperties={className: ['sr-only']}]\n * Properties to use on the footnote label (default: `{className:\n * ['sr-only']}`).\n *\n * Change it to show the label and add other properties.\n *\n * This label is typically hidden visually (assuming an `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass an empty string.\n * You can also add different properties.\n *\n * > **Note**: `id: 'footnote-label'` is always added, because footnote\n * > calls use it with `aria-describedby` to provide an accessible label.\n * @property {string | null | undefined} [footnoteLabelTagName='h2']\n * HTML tag name to use for the footnote label element (default: `'h2'`).\n *\n * Change it to match your document structure.\n *\n * This label is typically hidden visually (assuming a `sr-only` CSS class\n * is defined that does that) and so affects screen readers only.\n * If you do have such a class, but want to show this section to everyone,\n * pass different properties with the `footnoteLabelProperties` option.\n * @property {Handlers | null | undefined} [handlers]\n * Extra handlers for nodes (optional).\n * @property {Array | null | undefined} [passThrough]\n * List of custom mdast node types to pass through (keep) in hast (note that\n * the node itself is passed, but eventual children are transformed)\n * (optional).\n * @property {Handler | null | undefined} [unknownHandler]\n * Handler for all unknown nodes (optional).\n *\n * @typedef State\n * Info passed around.\n * @property {(node: MdastNodes) => Array} all\n * Transform the children of an mdast parent to hast.\n * @property {(from: MdastNodes, to: Type) => HastElement | Type} applyData\n * Honor the `data` of `from`, and generate an element instead of `node`.\n * @property {Map} definitionById\n * Definitions by their identifier.\n * @property {Map} footnoteById\n * Footnote definitions by their identifier.\n * @property {Map} footnoteCounts\n * Counts for how often the same footnote was called.\n * @property {Array} footnoteOrder\n * Identifiers of order when footnote calls first appear in tree order.\n * @property {Handlers} handlers\n * Applied handlers.\n * @property {(node: MdastNodes, parent: MdastParents | undefined) => Array | HastElementContent | undefined} one\n * Transform an mdast node to hast.\n * @property {Options} options\n * Configuration.\n * @property {(from: MdastNodes, node: HastNodes) => undefined} patch\n * Copy a node’s positional info.\n * @property {(nodes: Array, loose?: boolean | undefined) => Array} wrap\n * Wrap `nodes` with line endings between each node, adds initial/final line endings when `loose`.\n */\n\nimport structuredClone from '@ungap/structured-clone'\nimport {visit} from 'unist-util-visit'\nimport {position} from 'unist-util-position'\nimport {handlers as defaultHandlers} from './handlers/index.js'\n\nconst own = {}.hasOwnProperty\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Create `state` from an mdast tree.\n *\n * @param {MdastNodes} tree\n * mdast node to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {State}\n * `state` function.\n */\nexport function createState(tree, options) {\n const settings = options || emptyOptions\n /** @type {Map} */\n const definitionById = new Map()\n /** @type {Map} */\n const footnoteById = new Map()\n /** @type {Map} */\n const footnoteCounts = new Map()\n /** @type {Handlers} */\n // @ts-expect-error: the root handler returns a root.\n // Hard to type.\n const handlers = {...defaultHandlers, ...settings.handlers}\n\n /** @type {State} */\n const state = {\n all,\n applyData,\n definitionById,\n footnoteById,\n footnoteCounts,\n footnoteOrder: [],\n handlers,\n one,\n options: settings,\n patch,\n wrap\n }\n\n visit(tree, function (node) {\n if (node.type === 'definition' || node.type === 'footnoteDefinition') {\n const map = node.type === 'definition' ? definitionById : footnoteById\n const id = String(node.identifier).toUpperCase()\n\n // Mimick CM behavior of link definitions.\n // See: .\n if (!map.has(id)) {\n // @ts-expect-error: node type matches map.\n map.set(id, node)\n }\n }\n })\n\n return state\n\n /**\n * Transform an mdast node into a hast node.\n *\n * @param {MdastNodes} node\n * mdast node.\n * @param {MdastParents | undefined} [parent]\n * Parent of `node`.\n * @returns {Array | HastElementContent | undefined}\n * Resulting hast node.\n */\n function one(node, parent) {\n const type = node.type\n const handle = state.handlers[type]\n\n if (own.call(state.handlers, type) && handle) {\n return handle(state, node, parent)\n }\n\n if (state.options.passThrough && state.options.passThrough.includes(type)) {\n if ('children' in node) {\n const {children, ...shallow} = node\n const result = structuredClone(shallow)\n // @ts-expect-error: TS doesn’t understand…\n result.children = state.all(node)\n // @ts-expect-error: TS doesn’t understand…\n return result\n }\n\n // @ts-expect-error: it’s custom.\n return structuredClone(node)\n }\n\n const unknown = state.options.unknownHandler || defaultUnknownHandler\n\n return unknown(state, node, parent)\n }\n\n /**\n * Transform the children of an mdast node into hast nodes.\n *\n * @param {MdastNodes} parent\n * mdast node to compile\n * @returns {Array}\n * Resulting hast nodes.\n */\n function all(parent) {\n /** @type {Array} */\n const values = []\n\n if ('children' in parent) {\n const nodes = parent.children\n let index = -1\n while (++index < nodes.length) {\n const result = state.one(nodes[index], parent)\n\n // To do: see if we van clean this? Can we merge texts?\n if (result) {\n if (index && nodes[index - 1].type === 'break') {\n if (!Array.isArray(result) && result.type === 'text') {\n result.value = trimMarkdownSpaceStart(result.value)\n }\n\n if (!Array.isArray(result) && result.type === 'element') {\n const head = result.children[0]\n\n if (head && head.type === 'text') {\n head.value = trimMarkdownSpaceStart(head.value)\n }\n }\n }\n\n if (Array.isArray(result)) {\n values.push(...result)\n } else {\n values.push(result)\n }\n }\n }\n }\n\n return values\n }\n}\n\n/**\n * Copy a node’s positional info.\n *\n * @param {MdastNodes} from\n * mdast node to copy from.\n * @param {HastNodes} to\n * hast node to copy into.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(from, to) {\n if (from.position) to.position = position(from)\n}\n\n/**\n * Honor the `data` of `from` and maybe generate an element instead of `to`.\n *\n * @template {HastNodes} Type\n * Node type.\n * @param {MdastNodes} from\n * mdast node to use data from.\n * @param {Type} to\n * hast node to change.\n * @returns {HastElement | Type}\n * Nothing.\n */\nfunction applyData(from, to) {\n /** @type {HastElement | Type} */\n let result = to\n\n // Handle `data.hName`, `data.hProperties, `data.hChildren`.\n if (from && from.data) {\n const hName = from.data.hName\n const hChildren = from.data.hChildren\n const hProperties = from.data.hProperties\n\n if (typeof hName === 'string') {\n // Transforming the node resulted in an element with a different name\n // than wanted:\n if (result.type === 'element') {\n result.tagName = hName\n }\n // Transforming the node resulted in a non-element, which happens for\n // raw, text, and root nodes (unless custom handlers are passed).\n // The intent of `hName` is to create an element, but likely also to keep\n // the content around (otherwise: pass `hChildren`).\n else {\n /** @type {Array} */\n // @ts-expect-error: assume no doctypes in `root`.\n const children = 'children' in result ? result.children : [result]\n result = {type: 'element', tagName: hName, properties: {}, children}\n }\n }\n\n if (result.type === 'element' && hProperties) {\n Object.assign(result.properties, structuredClone(hProperties))\n }\n\n if (\n 'children' in result &&\n result.children &&\n hChildren !== null &&\n hChildren !== undefined\n ) {\n result.children = hChildren\n }\n }\n\n return result\n}\n\n/**\n * Transform an unknown node.\n *\n * @param {State} state\n * Info passed around.\n * @param {MdastNodes} node\n * Unknown mdast node.\n * @returns {HastElement | HastText}\n * Resulting hast node.\n */\nfunction defaultUnknownHandler(state, node) {\n const data = node.data || {}\n /** @type {HastElement | HastText} */\n const result =\n 'value' in node &&\n !(own.call(data, 'hProperties') || own.call(data, 'hChildren'))\n ? {type: 'text', value: node.value}\n : {\n type: 'element',\n tagName: 'div',\n properties: {},\n children: state.all(node)\n }\n\n state.patch(node, result)\n return state.applyData(node, result)\n}\n\n/**\n * Wrap `nodes` with line endings between each node.\n *\n * @template {HastRootContent} Type\n * Node type.\n * @param {Array} nodes\n * List of nodes to wrap.\n * @param {boolean | undefined} [loose=false]\n * Whether to add line endings at start and end (default: `false`).\n * @returns {Array}\n * Wrapped nodes.\n */\nexport function wrap(nodes, loose) {\n /** @type {Array} */\n const result = []\n let index = -1\n\n if (loose) {\n result.push({type: 'text', value: '\\n'})\n }\n\n while (++index < nodes.length) {\n if (index) result.push({type: 'text', value: '\\n'})\n result.push(nodes[index])\n }\n\n if (loose && nodes.length > 0) {\n result.push({type: 'text', value: '\\n'})\n }\n\n return result\n}\n\n/**\n * Trim spaces and tabs at the start of `value`.\n *\n * @param {string} value\n * Value to trim.\n * @returns {string}\n * Result.\n */\nfunction trimMarkdownSpaceStart(value) {\n let index = 0\n let code = value.charCodeAt(index)\n\n while (code === 9 || code === 32) {\n index++\n code = value.charCodeAt(index)\n }\n\n return value.slice(index)\n}\n","/**\n * @typedef {import('hast').Nodes} HastNodes\n * @typedef {import('mdast').Nodes} MdastNodes\n * @typedef {import('./state.js').Options} Options\n */\n\nimport {ok as assert} from 'devlop'\nimport {footer} from './footer.js'\nimport {createState} from './state.js'\n\n/**\n * Transform mdast to hast.\n *\n * ##### Notes\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most utilities ignore `raw` nodes but two notable ones don’t:\n *\n * * `hast-util-to-html` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful\n * if you completely trust authors\n * * `hast-util-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only\n * way to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `mdast-util-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * Example: headings (DOM clobbering) in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @param {MdastNodes} tree\n * mdast tree.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {HastNodes}\n * hast tree.\n */\nexport function toHast(tree, options) {\n const state = createState(tree, options)\n const node = state.one(tree, undefined)\n const foot = footer(state)\n /** @type {HastNodes} */\n const result = Array.isArray(node)\n ? {type: 'root', children: node}\n : node || {type: 'root', children: []}\n\n if (foot) {\n // If there’s a footer, there were definitions, meaning block\n // content.\n // So `result` is a parent node.\n assert('children' in result)\n result.children.push({type: 'text', value: '\\n'}, foot)\n }\n\n return result\n}\n","// Include `data` fields in mdast and `raw` nodes in hast.\n/// \n\n/**\n * @import {Root as HastRoot} from 'hast'\n * @import {Root as MdastRoot} from 'mdast'\n * @import {Options as ToHastOptions} from 'mdast-util-to-hast'\n * @import {Processor} from 'unified'\n * @import {VFile} from 'vfile'\n */\n\n/**\n * @typedef {Omit} Options\n *\n * @callback TransformBridge\n * Bridge-mode.\n *\n * Runs the destination with the new hast tree.\n * Discards result.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {Promise}\n * Nothing.\n *\n * @callback TransformMutate\n * Mutate-mode.\n *\n * Further transformers run on the hast tree.\n * @param {MdastRoot} tree\n * Tree.\n * @param {VFile} file\n * File.\n * @returns {HastRoot}\n * Tree (hast).\n */\n\nimport {toHast} from 'mdast-util-to-hast'\n\n/**\n * Turn markdown into HTML.\n *\n * ##### Notes\n *\n * ###### Signature\n *\n * * if a processor is given, runs the (rehype) plugins used on it with a\n * hast tree, then discards the result (*bridge mode*)\n * * otherwise, returns a hast tree, the plugins used after `remarkRehype`\n * are rehype plugins (*mutate mode*)\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass a `processor`.\n *\n * ###### HTML\n *\n * Raw HTML is available in mdast as `html` nodes and can be embedded in hast\n * as semistandard `raw` nodes.\n * Most plugins ignore `raw` nodes but two notable ones don’t:\n *\n * * `rehype-stringify` also has an option `allowDangerousHtml` which will\n * output the raw HTML.\n * This is typically discouraged as noted by the option name but is useful if\n * you completely trust authors\n * * `rehype-raw` can handle the raw embedded HTML strings by parsing them\n * into standard hast nodes (`element`, `text`, etc).\n * This is a heavy task as it needs a full HTML parser, but it is the only way\n * to support untrusted content\n *\n * ###### Footnotes\n *\n * Many options supported here relate to footnotes.\n * Footnotes are not specified by CommonMark, which we follow by default.\n * They are supported by GitHub, so footnotes can be enabled in markdown with\n * `remark-gfm`.\n *\n * The options `footnoteBackLabel` and `footnoteLabel` define natural language\n * that explains footnotes, which is hidden for sighted users but shown to\n * assistive technology.\n * When your page is not in English, you must define translated values.\n *\n * Back references use ARIA attributes, but the section label itself uses a\n * heading that is hidden with an `sr-only` class.\n * To show it to sighted users, define different attributes in\n * `footnoteLabelProperties`.\n *\n * ###### Clobbering\n *\n * Footnotes introduces a problem, as it links footnote calls to footnote\n * definitions on the page through `id` attributes generated from user content,\n * which results in DOM clobbering.\n *\n * DOM clobbering is this:\n *\n * ```html\n *

\n * \n * ```\n *\n * Elements by their ID are made available by browsers on the `window` object,\n * which is a security risk.\n * Using a prefix solves this problem.\n *\n * More information on how to handle clobbering and the prefix is explained in\n * *Example: headings (DOM clobbering)* in `rehype-sanitize`.\n *\n * ###### Unknown nodes\n *\n * Unknown nodes are nodes with a type that isn’t in `handlers` or `passThrough`.\n * The default behavior for unknown nodes is:\n *\n * * when the node has a `value` (and doesn’t have `data.hName`,\n * `data.hProperties`, or `data.hChildren`, see later), create a hast `text`\n * node\n * * otherwise, create a `
` element (which could be changed with\n * `data.hName`), with its children mapped from mdast to hast as well\n *\n * This behavior can be changed by passing an `unknownHandler`.\n *\n * @overload\n * @param {Processor} processor\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformBridge}\n *\n * @overload\n * @param {Readonly | null | undefined} [options]\n * @returns {TransformMutate}\n *\n * @param {Readonly | Processor | null | undefined} [destination]\n * Processor or configuration (optional).\n * @param {Readonly | null | undefined} [options]\n * When a processor was given, configuration (optional).\n * @returns {TransformBridge | TransformMutate}\n * Transform.\n */\nexport default function remarkRehype(destination, options) {\n if (destination && 'run' in destination) {\n /**\n * @type {TransformBridge}\n */\n return async function (tree, file) {\n // Cast because root in -> root out.\n const hastTree = /** @type {HastRoot} */ (\n toHast(tree, {file, ...options})\n )\n await destination.run(hastTree, file)\n }\n }\n\n /**\n * @type {TransformMutate}\n */\n return function (tree, file) {\n // Cast because root in -> root out.\n // To do: in the future, disallow ` || options` fallback.\n // With `unified-engine`, `destination` can be `undefined` but\n // `options` will be the file set.\n // We should not pass that as `options`.\n return /** @type {HastRoot} */ (\n toHast(tree, {file, ...(destination || options)})\n )\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// A derivative work based on:\n// .\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// .\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// .\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: \nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > .\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: \n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","export const CallableInstance =\n /**\n * @type {new , Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin, any, any> |\n * PluginTuple, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// .\n/**\n * @template {Array} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback} next\n * Callback.\n * @returns {(\n * Promise |\n * Promise | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor\n * : // Unknown.\n * Processor\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback> | undefined} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback} [done]\n * Callback (optional).\n * @returns {Promise | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor}\n *\n * @overload\n * @param {Plugin} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","/**\n * @import {Element, ElementContent, Nodes, Parents, Root} from 'hast'\n * @import {ComponentProps, ElementType, ReactElement} from 'react'\n * @import {Options as RemarkRehypeOptions} from 'remark-rehype'\n * @import {BuildVisitor} from 'unist-util-visit'\n * @import {PluggableList} from 'unified'\n */\n\n/**\n * @callback AllowElement\n * Filter elements.\n * @param {Readonly} element\n * Element to check.\n * @param {number} index\n * Index of `element` in `parent`.\n * @param {Readonly | undefined} parent\n * Parent of `element`.\n * @returns {boolean | null | undefined}\n * Whether to allow `element` (default: `false`).\n */\n\n/**\n * @typedef ExtraProps\n * Extra fields we pass.\n * @property {Element | undefined} [node]\n * passed when `passNode` is on.\n */\n\n/**\n * @typedef {{\n * [Key in Extract]?: ElementType & ExtraProps>\n * }} Components\n * Map tag names to components.\n */\n\n/**\n * @typedef Deprecation\n * Deprecation.\n * @property {string} from\n * Old field.\n * @property {string} id\n * ID in readme.\n * @property {keyof Options} [to]\n * New field.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {AllowElement | null | undefined} [allowElement]\n * Filter elements (optional);\n * `allowedElements` / `disallowedElements` is used first.\n * @property {ReadonlyArray | null | undefined} [allowedElements]\n * Tag names to allow (default: all tag names);\n * cannot combine w/ `disallowedElements`.\n * @property {string | null | undefined} [children]\n * Markdown.\n * @property {string | null | undefined} [className]\n * Wrap in a `div` with this class name.\n * @property {Components | null | undefined} [components]\n * Map tag names to components.\n * @property {ReadonlyArray | null | undefined} [disallowedElements]\n * Tag names to disallow (default: `[]`);\n * cannot combine w/ `allowedElements`.\n * @property {PluggableList | null | undefined} [rehypePlugins]\n * List of rehype plugins to use.\n * @property {PluggableList | null | undefined} [remarkPlugins]\n * List of remark plugins to use.\n * @property {Readonly | null | undefined} [remarkRehypeOptions]\n * Options to pass through to `remark-rehype`.\n * @property {boolean | null | undefined} [skipHtml=false]\n * Ignore HTML in markdown completely (default: `false`).\n * @property {boolean | null | undefined} [unwrapDisallowed=false]\n * Extract (unwrap) what’s in disallowed elements (default: `false`);\n * normally when say `strong` is not allowed, it and it’s children are dropped,\n * with `unwrapDisallowed` the element itself is replaced by its children.\n * @property {UrlTransform | null | undefined} [urlTransform]\n * Change URLs (default: `defaultUrlTransform`)\n */\n\n/**\n * @callback UrlTransform\n * Transform all URLs.\n * @param {string} url\n * URL.\n * @param {string} key\n * Property name (example: `'href'`).\n * @param {Readonly} node\n * Node.\n * @returns {string | null | undefined}\n * Transformed URL (optional).\n */\n\nimport {unreachable} from 'devlop'\nimport {toJsxRuntime} from 'hast-util-to-jsx-runtime'\nimport {urlAttributes} from 'html-url-attributes'\nimport {Fragment, jsx, jsxs} from 'react/jsx-runtime'\nimport remarkParse from 'remark-parse'\nimport remarkRehype from 'remark-rehype'\nimport {unified} from 'unified'\nimport {visit} from 'unist-util-visit'\nimport {VFile} from 'vfile'\n\nconst changelog =\n 'https://github.com/remarkjs/react-markdown/blob/main/changelog.md'\n\n/** @type {PluggableList} */\nconst emptyPlugins = []\n/** @type {Readonly} */\nconst emptyRemarkRehypeOptions = {allowDangerousHtml: true}\nconst safeProtocol = /^(https?|ircs?|mailto|xmpp)$/i\n\n// Mutable because we `delete` any time it’s used and a message is sent.\n/** @type {ReadonlyArray>} */\nconst deprecations = [\n {from: 'astPlugins', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'allowDangerousHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {\n from: 'allowNode',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowElement'\n },\n {\n from: 'allowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'allowedElements'\n },\n {\n from: 'disallowedTypes',\n id: 'replace-allownode-allowedtypes-and-disallowedtypes',\n to: 'disallowedElements'\n },\n {from: 'escapeHtml', id: 'remove-buggy-html-in-markdown-parser'},\n {from: 'includeElementIndex', id: '#remove-includeelementindex'},\n {\n from: 'includeNodeIndex',\n id: 'change-includenodeindex-to-includeelementindex'\n },\n {from: 'linkTarget', id: 'remove-linktarget'},\n {from: 'plugins', id: 'change-plugins-to-remarkplugins', to: 'remarkPlugins'},\n {from: 'rawSourcePos', id: '#remove-rawsourcepos'},\n {from: 'renderers', id: 'change-renderers-to-components', to: 'components'},\n {from: 'source', id: 'change-source-to-children', to: 'children'},\n {from: 'sourcePos', id: '#remove-sourcepos'},\n {from: 'transformImageUri', id: '#add-urltransform', to: 'urlTransform'},\n {from: 'transformLinkUri', id: '#add-urltransform', to: 'urlTransform'}\n]\n\n/**\n * Component to render markdown.\n *\n * @param {Readonly} options\n * Props.\n * @returns {ReactElement}\n * React element.\n */\nexport function Markdown(options) {\n const allowedElements = options.allowedElements\n const allowElement = options.allowElement\n const children = options.children || ''\n const className = options.className\n const components = options.components\n const disallowedElements = options.disallowedElements\n const rehypePlugins = options.rehypePlugins || emptyPlugins\n const remarkPlugins = options.remarkPlugins || emptyPlugins\n const remarkRehypeOptions = options.remarkRehypeOptions\n ? {...options.remarkRehypeOptions, ...emptyRemarkRehypeOptions}\n : emptyRemarkRehypeOptions\n const skipHtml = options.skipHtml\n const unwrapDisallowed = options.unwrapDisallowed\n const urlTransform = options.urlTransform || defaultUrlTransform\n\n const processor = unified()\n .use(remarkParse)\n .use(remarkPlugins)\n .use(remarkRehype, remarkRehypeOptions)\n .use(rehypePlugins)\n\n const file = new VFile()\n\n if (typeof children === 'string') {\n file.value = children\n } else {\n unreachable(\n 'Unexpected value `' +\n children +\n '` for `children` prop, expected `string`'\n )\n }\n\n if (allowedElements && disallowedElements) {\n unreachable(\n 'Unexpected combined `allowedElements` and `disallowedElements`, expected one or the other'\n )\n }\n\n for (const deprecation of deprecations) {\n if (Object.hasOwn(options, deprecation.from)) {\n unreachable(\n 'Unexpected `' +\n deprecation.from +\n '` prop, ' +\n (deprecation.to\n ? 'use `' + deprecation.to + '` instead'\n : 'remove it') +\n ' (see <' +\n changelog +\n '#' +\n deprecation.id +\n '> for more info)'\n )\n }\n }\n\n const mdastTree = processor.parse(file)\n /** @type {Nodes} */\n let hastTree = processor.runSync(mdastTree, file)\n\n // Wrap in `div` if there’s a class name.\n if (className) {\n hastTree = {\n type: 'element',\n tagName: 'div',\n properties: {className},\n // Assume no doctypes.\n children: /** @type {Array} */ (\n hastTree.type === 'root' ? hastTree.children : [hastTree]\n )\n }\n }\n\n visit(hastTree, transform)\n\n return toJsxRuntime(hastTree, {\n Fragment,\n // @ts-expect-error\n // React components are allowed to return numbers,\n // but not according to the types in hast-util-to-jsx-runtime\n components,\n ignoreInvalidStyle: true,\n jsx,\n jsxs,\n passKeys: true,\n passNode: true\n })\n\n /** @type {BuildVisitor} */\n function transform(node, index, parent) {\n if (node.type === 'raw' && parent && typeof index === 'number') {\n if (skipHtml) {\n parent.children.splice(index, 1)\n } else {\n parent.children[index] = {type: 'text', value: node.value}\n }\n\n return index\n }\n\n if (node.type === 'element') {\n /** @type {string} */\n let key\n\n for (key in urlAttributes) {\n if (\n Object.hasOwn(urlAttributes, key) &&\n Object.hasOwn(node.properties, key)\n ) {\n const value = node.properties[key]\n const test = urlAttributes[key]\n if (test === null || test.includes(node.tagName)) {\n node.properties[key] = urlTransform(String(value || ''), key, node)\n }\n }\n }\n }\n\n if (node.type === 'element') {\n let remove = allowedElements\n ? !allowedElements.includes(node.tagName)\n : disallowedElements\n ? disallowedElements.includes(node.tagName)\n : false\n\n if (!remove && allowElement && typeof index === 'number') {\n remove = !allowElement(node, index, parent)\n }\n\n if (remove && parent && typeof index === 'number') {\n if (unwrapDisallowed && node.children) {\n parent.children.splice(index, 1, ...node.children)\n } else {\n parent.children.splice(index, 1)\n }\n\n return index\n }\n }\n }\n}\n\n/**\n * Make a URL safe.\n *\n * @satisfies {UrlTransform}\n * @param {string} value\n * URL.\n * @returns {string}\n * Safe URL.\n */\nexport function defaultUrlTransform(value) {\n // Same as:\n // \n // But without the `encode` part.\n const colon = value.indexOf(':')\n const questionMark = value.indexOf('?')\n const numberSign = value.indexOf('#')\n const slash = value.indexOf('/')\n\n if (\n // If there is no protocol, it’s relative.\n colon === -1 ||\n // If the first colon is after a `?`, `#`, or `/`, it’s not a protocol.\n (slash !== -1 && colon > slash) ||\n (questionMark !== -1 && colon > questionMark) ||\n (numberSign !== -1 && colon > numberSign) ||\n // It is a protocol, it should be allowed.\n safeProtocol.test(value.slice(0, colon))\n ) {\n return value\n }\n\n return ''\n}\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"PropTypes\"];","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @import {Nodes, Parents, PhrasingContent, Root, Text} from 'mdast'\n * @import {BuildVisitor, Test, VisitorResult} from 'unist-util-visit-parents'\n */\n\n/**\n * @typedef RegExpMatchObject\n * Info on the match.\n * @property {number} index\n * The index of the search at which the result was found.\n * @property {string} input\n * A copy of the search string in the text node.\n * @property {[...Array, Text]} stack\n * All ancestors of the text node, where the last node is the text itself.\n *\n * @typedef {RegExp | string} Find\n * Pattern to find.\n *\n * Strings are escaped and then turned into global expressions.\n *\n * @typedef {Array} FindAndReplaceList\n * Several find and replaces, in array form.\n *\n * @typedef {[Find, Replace?]} FindAndReplaceTuple\n * Find and replace in tuple form.\n *\n * @typedef {ReplaceFunction | string | null | undefined} Replace\n * Thing to replace with.\n *\n * @callback ReplaceFunction\n * Callback called when a search matches.\n * @param {...any} parameters\n * The parameters are the result of corresponding search expression:\n *\n * * `value` (`string`) — whole match\n * * `...capture` (`Array`) — matches from regex capture groups\n * * `match` (`RegExpMatchObject`) — info on the match\n * @returns {Array | PhrasingContent | string | false | null | undefined}\n * Thing to replace with.\n *\n * * when `null`, `undefined`, `''`, remove the match\n * * …or when `false`, do not replace at all\n * * …or when `string`, replace with a text node of that value\n * * …or when `Node` or `Array`, replace with those nodes\n *\n * @typedef {[RegExp, ReplaceFunction]} Pair\n * Normalized find and replace.\n *\n * @typedef {Array} Pairs\n * All find and replaced.\n *\n * @typedef Options\n * Configuration.\n * @property {Test | null | undefined} [ignore]\n * Test for which nodes to ignore (optional).\n */\n\nimport escape from 'escape-string-regexp'\nimport {visitParents} from 'unist-util-visit-parents'\nimport {convert} from 'unist-util-is'\n\n/**\n * Find patterns in a tree and replace them.\n *\n * The algorithm searches the tree in *preorder* for complete values in `Text`\n * nodes.\n * Partial matches are not supported.\n *\n * @param {Nodes} tree\n * Tree to change.\n * @param {FindAndReplaceList | FindAndReplaceTuple} list\n * Patterns to find.\n * @param {Options | null | undefined} [options]\n * Configuration (when `find` is not `Find`).\n * @returns {undefined}\n * Nothing.\n */\nexport function findAndReplace(tree, list, options) {\n const settings = options || {}\n const ignored = convert(settings.ignore || [])\n const pairs = toPairs(list)\n let pairIndex = -1\n\n while (++pairIndex < pairs.length) {\n visitParents(tree, 'text', visitor)\n }\n\n /** @type {BuildVisitor} */\n function visitor(node, parents) {\n let index = -1\n /** @type {Parents | undefined} */\n let grandparent\n\n while (++index < parents.length) {\n const parent = parents[index]\n /** @type {Array | undefined} */\n const siblings = grandparent ? grandparent.children : undefined\n\n if (\n ignored(\n parent,\n siblings ? siblings.indexOf(parent) : undefined,\n grandparent\n )\n ) {\n return\n }\n\n grandparent = parent\n }\n\n if (grandparent) {\n return handler(node, parents)\n }\n }\n\n /**\n * Handle a text node which is not in an ignored parent.\n *\n * @param {Text} node\n * Text node.\n * @param {Array} parents\n * Parents.\n * @returns {VisitorResult}\n * Result.\n */\n function handler(node, parents) {\n const parent = parents[parents.length - 1]\n const find = pairs[pairIndex][0]\n const replace = pairs[pairIndex][1]\n let start = 0\n /** @type {Array} */\n const siblings = parent.children\n const index = siblings.indexOf(node)\n let change = false\n /** @type {Array} */\n let nodes = []\n\n find.lastIndex = 0\n\n let match = find.exec(node.value)\n\n while (match) {\n const position = match.index\n /** @type {RegExpMatchObject} */\n const matchObject = {\n index: match.index,\n input: match.input,\n stack: [...parents, node]\n }\n let value = replace(...match, matchObject)\n\n if (typeof value === 'string') {\n value = value.length > 0 ? {type: 'text', value} : undefined\n }\n\n // It wasn’t a match after all.\n if (value === false) {\n // False acts as if there was no match.\n // So we need to reset `lastIndex`, which currently being at the end of\n // the current match, to the beginning.\n find.lastIndex = position + 1\n } else {\n if (start !== position) {\n nodes.push({\n type: 'text',\n value: node.value.slice(start, position)\n })\n }\n\n if (Array.isArray(value)) {\n nodes.push(...value)\n } else if (value) {\n nodes.push(value)\n }\n\n start = position + match[0].length\n change = true\n }\n\n if (!find.global) {\n break\n }\n\n match = find.exec(node.value)\n }\n\n if (change) {\n if (start < node.value.length) {\n nodes.push({type: 'text', value: node.value.slice(start)})\n }\n\n parent.children.splice(index, 1, ...nodes)\n } else {\n nodes = [node]\n }\n\n return index + nodes.length\n }\n}\n\n/**\n * Turn a tuple or a list of tuples into pairs.\n *\n * @param {FindAndReplaceList | FindAndReplaceTuple} tupleOrList\n * Schema.\n * @returns {Pairs}\n * Clean pairs.\n */\nfunction toPairs(tupleOrList) {\n /** @type {Pairs} */\n const result = []\n\n if (!Array.isArray(tupleOrList)) {\n throw new TypeError('Expected find and replace tuple or list of tuples')\n }\n\n /** @type {FindAndReplaceList} */\n // @ts-expect-error: correct.\n const list =\n !tupleOrList[0] || Array.isArray(tupleOrList[0])\n ? tupleOrList\n : [tupleOrList]\n\n let index = -1\n\n while (++index < list.length) {\n const tuple = list[index]\n result.push([toExpression(tuple[0]), toFunction(tuple[1])])\n }\n\n return result\n}\n\n/**\n * Turn a find into an expression.\n *\n * @param {Find} find\n * Find.\n * @returns {RegExp}\n * Expression.\n */\nfunction toExpression(find) {\n return typeof find === 'string' ? new RegExp(escape(find), 'g') : find\n}\n\n/**\n * Turn a replace into a function.\n *\n * @param {Replace} replace\n * Replace.\n * @returns {ReplaceFunction}\n * Function.\n */\nfunction toFunction(replace) {\n return typeof replace === 'function'\n ? replace\n : function () {\n return replace\n }\n}\n","/**\n * @import {RegExpMatchObject, ReplaceFunction} from 'mdast-util-find-and-replace'\n * @import {CompileContext, Extension as FromMarkdownExtension, Handle as FromMarkdownHandle, Transform as FromMarkdownTransform} from 'mdast-util-from-markdown'\n * @import {ConstructName, Options as ToMarkdownExtension} from 'mdast-util-to-markdown'\n * @import {Link, PhrasingContent} from 'mdast'\n */\n\nimport {ccount} from 'ccount'\nimport {ok as assert} from 'devlop'\nimport {unicodePunctuation, unicodeWhitespace} from 'micromark-util-character'\nimport {findAndReplace} from 'mdast-util-find-and-replace'\n\n/** @type {ConstructName} */\nconst inConstruct = 'phrasing'\n/** @type {Array} */\nconst notInConstruct = ['autolink', 'link', 'image', 'label']\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralFromMarkdown() {\n return {\n transforms: [transformGfmAutolinkLiterals],\n enter: {\n literalAutolink: enterLiteralAutolink,\n literalAutolinkEmail: enterLiteralAutolinkValue,\n literalAutolinkHttp: enterLiteralAutolinkValue,\n literalAutolinkWww: enterLiteralAutolinkValue\n },\n exit: {\n literalAutolink: exitLiteralAutolink,\n literalAutolinkEmail: exitLiteralAutolinkEmail,\n literalAutolinkHttp: exitLiteralAutolinkHttp,\n literalAutolinkWww: exitLiteralAutolinkWww\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM autolink\n * literals in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM autolink literals.\n */\nexport function gfmAutolinkLiteralToMarkdown() {\n return {\n unsafe: [\n {\n character: '@',\n before: '[+\\\\-.\\\\w]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: '.',\n before: '[Ww]',\n after: '[\\\\-.\\\\w]',\n inConstruct,\n notInConstruct\n },\n {\n character: ':',\n before: '[ps]',\n after: '\\\\/',\n inConstruct,\n notInConstruct\n }\n ]\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolink(token) {\n this.enter({type: 'link', title: null, url: '', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterLiteralAutolinkValue(token) {\n this.config.enter.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkHttp(token) {\n this.config.exit.autolinkProtocol.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkWww(token) {\n this.config.exit.data.call(this, token)\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'link')\n node.url = 'http://' + this.sliceSerialize(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolinkEmail(token) {\n this.config.exit.autolinkEmail.call(this, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitLiteralAutolink(token) {\n this.exit(token)\n}\n\n/** @type {FromMarkdownTransform} */\nfunction transformGfmAutolinkLiterals(tree) {\n findAndReplace(\n tree,\n [\n [/(https?:\\/\\/|www(?=\\.))([-.\\w]+)([^ \\t\\r\\n]*)/gi, findUrl],\n [/(?<=^|\\s|\\p{P}|\\p{S})([-.\\w+]+)@([-\\w]+(?:\\.[-\\w]+)+)/gu, findEmail]\n ],\n {ignore: ['link', 'linkReference']}\n )\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} protocol\n * @param {string} domain\n * @param {string} path\n * @param {RegExpMatchObject} match\n * @returns {Array | Link | false}\n */\n// eslint-disable-next-line max-params\nfunction findUrl(_, protocol, domain, path, match) {\n let prefix = ''\n\n // Not an expected previous character.\n if (!previous(match)) {\n return false\n }\n\n // Treat `www` as part of the domain.\n if (/^w/i.test(protocol)) {\n domain = protocol + domain\n protocol = ''\n prefix = 'http://'\n }\n\n if (!isCorrectDomain(domain)) {\n return false\n }\n\n const parts = splitUrl(domain + path)\n\n if (!parts[0]) return false\n\n /** @type {Link} */\n const result = {\n type: 'link',\n title: null,\n url: prefix + protocol + parts[0],\n children: [{type: 'text', value: protocol + parts[0]}]\n }\n\n if (parts[1]) {\n return [result, {type: 'text', value: parts[1]}]\n }\n\n return result\n}\n\n/**\n * @type {ReplaceFunction}\n * @param {string} _\n * @param {string} atext\n * @param {string} label\n * @param {RegExpMatchObject} match\n * @returns {Link | false}\n */\nfunction findEmail(_, atext, label, match) {\n if (\n // Not an expected previous character.\n !previous(match, true) ||\n // Label ends in not allowed character.\n /[-\\d_]$/.test(label)\n ) {\n return false\n }\n\n return {\n type: 'link',\n title: null,\n url: 'mailto:' + atext + '@' + label,\n children: [{type: 'text', value: atext + '@' + label}]\n }\n}\n\n/**\n * @param {string} domain\n * @returns {boolean}\n */\nfunction isCorrectDomain(domain) {\n const parts = domain.split('.')\n\n if (\n parts.length < 2 ||\n (parts[parts.length - 1] &&\n (/_/.test(parts[parts.length - 1]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 1]))) ||\n (parts[parts.length - 2] &&\n (/_/.test(parts[parts.length - 2]) ||\n !/[a-zA-Z\\d]/.test(parts[parts.length - 2])))\n ) {\n return false\n }\n\n return true\n}\n\n/**\n * @param {string} url\n * @returns {[string, string | undefined]}\n */\nfunction splitUrl(url) {\n const trailExec = /[!\"&'),.:;<>?\\]}]+$/.exec(url)\n\n if (!trailExec) {\n return [url, undefined]\n }\n\n url = url.slice(0, trailExec.index)\n\n let trail = trailExec[0]\n let closingParenIndex = trail.indexOf(')')\n const openingParens = ccount(url, '(')\n let closingParens = ccount(url, ')')\n\n while (closingParenIndex !== -1 && openingParens > closingParens) {\n url += trail.slice(0, closingParenIndex + 1)\n trail = trail.slice(closingParenIndex + 1)\n closingParenIndex = trail.indexOf(')')\n closingParens++\n }\n\n return [url, trail]\n}\n\n/**\n * @param {RegExpMatchObject} match\n * @param {boolean | null | undefined} [email=false]\n * @returns {boolean}\n */\nfunction previous(match, email) {\n const code = match.input.charCodeAt(match.index - 1)\n\n return (\n (match.index === 0 ||\n unicodeWhitespace(code) ||\n unicodePunctuation(code)) &&\n // If it’s an email, the previous character should not be a slash.\n (!email || code !== 47)\n )\n}\n","export default function escapeStringRegexp(string) {\n\tif (typeof string !== 'string') {\n\t\tthrow new TypeError('Expected a string');\n\t}\n\n\t// Escape characters with special meaning either inside or outside character sets.\n\t// Use a simple backslash escape when it’s always valid, and a `\\xnn` escape when the simpler form would be disallowed by Unicode patterns’ stricter grammar.\n\treturn string\n\t\t.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n\t\t.replace(/-/g, '\\\\x2d');\n}\n","/**\n * @typedef {import('mdast').FootnoteDefinition} FootnoteDefinition\n * @typedef {import('mdast').FootnoteReference} FootnoteReference\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Map} Map\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\nimport {ok as assert} from 'devlop'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n\nfootnoteReference.peek = footnoteReferencePeek\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown`.\n */\nexport function gfmFootnoteFromMarkdown() {\n return {\n enter: {\n gfmFootnoteDefinition: enterFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: enterFootnoteDefinitionLabelString,\n gfmFootnoteCall: enterFootnoteCall,\n gfmFootnoteCallString: enterFootnoteCallString\n },\n exit: {\n gfmFootnoteDefinition: exitFootnoteDefinition,\n gfmFootnoteDefinitionLabelString: exitFootnoteDefinitionLabelString,\n gfmFootnoteCall: exitFootnoteCall,\n gfmFootnoteCallString: exitFootnoteCallString\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM footnotes\n * in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown`.\n */\nexport function gfmFootnoteToMarkdown() {\n return {\n // This is on by default already.\n unsafe: [{character: '[', inConstruct: ['phrasing', 'label', 'reference']}],\n handlers: {footnoteDefinition, footnoteReference}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinition(token) {\n this.enter(\n {type: 'footnoteDefinition', identifier: '', label: '', children: []},\n token\n )\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteDefinitionLabelString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinitionLabelString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteDefinition')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteDefinition(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCall(token) {\n this.enter({type: 'footnoteReference', identifier: '', label: ''}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterFootnoteCallString() {\n this.buffer()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCallString(token) {\n const label = this.resume()\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'footnoteReference')\n node.label = label\n node.identifier = normalizeIdentifier(\n this.sliceSerialize(token)\n ).toLowerCase()\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitFootnoteCall(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteReference} node\n */\nfunction footnoteReference(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteReference')\n const subexit = state.enter('reference')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n exit()\n value += tracker.move(']')\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction footnoteReferencePeek() {\n return '['\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {FootnoteDefinition} node\n */\nfunction footnoteDefinition(node, _, state, info) {\n const tracker = state.createTracker(info)\n let value = tracker.move('[^')\n const exit = state.enter('footnoteDefinition')\n const subexit = state.enter('label')\n value += tracker.move(\n state.safe(state.associationId(node), {\n ...tracker.current(),\n before: value,\n after: ']'\n })\n )\n subexit()\n value += tracker.move(\n ']:' + (node.children && node.children.length > 0 ? ' ' : '')\n )\n tracker.shift(4)\n value += tracker.move(\n state.indentLines(state.containerFlow(node, tracker.current()), map)\n )\n exit()\n\n return value\n}\n\n/** @type {Map} */\nfunction map(line, index, blank) {\n if (index === 0) {\n return line\n }\n\n return (blank ? '' : ' ') + line\n}\n","/**\n * @typedef {import('mdast').Delete} Delete\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').ConstructName} ConstructName\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * List of constructs that occur in phrasing (paragraphs, headings), but cannot\n * contain strikethrough.\n * So they sort of cancel each other out.\n * Note: could use a better name.\n *\n * Note: keep in sync with: \n *\n * @type {Array}\n */\nconst constructsWithoutStrikethrough = [\n 'autolink',\n 'destinationLiteral',\n 'destinationRaw',\n 'reference',\n 'titleQuote',\n 'titleApostrophe'\n]\n\nhandleDelete.peek = peekDelete\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughFromMarkdown() {\n return {\n canContainEols: ['delete'],\n enter: {strikethrough: enterStrikethrough},\n exit: {strikethrough: exitStrikethrough}\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM\n * strikethrough in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM strikethrough.\n */\nexport function gfmStrikethroughToMarkdown() {\n return {\n unsafe: [\n {\n character: '~',\n inConstruct: 'phrasing',\n notInConstruct: constructsWithoutStrikethrough\n }\n ],\n handlers: {delete: handleDelete}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterStrikethrough(token) {\n this.enter({type: 'delete', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitStrikethrough(token) {\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {Delete} node\n */\nfunction handleDelete(node, _, state, info) {\n const tracker = state.createTracker(info)\n const exit = state.enter('strikethrough')\n let value = tracker.move('~~')\n value += state.containerPhrasing(node, {\n ...tracker.current(),\n before: value,\n after: '~'\n })\n value += tracker.move('~~')\n exit()\n return value\n}\n\n/** @type {ToMarkdownHandle} */\nfunction peekDelete() {\n return '~'\n}\n","// To do: next major: remove.\n/**\n * @typedef {Options} MarkdownTableOptions\n * Configuration.\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [alignDelimiters=true]\n * Whether to align the delimiters (default: `true`);\n * they are aligned by default:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * Pass `false` to make them staggered:\n *\n * ```markdown\n * | Alpha | B |\n * | - | - |\n * | C | Delta |\n * ```\n * @property {ReadonlyArray | string | null | undefined} [align]\n * How to align columns (default: `''`);\n * one style for all columns or styles for their respective columns;\n * each style is either `'l'` (left), `'r'` (right), or `'c'` (center);\n * other values are treated as `''`, which doesn’t place the colon in the\n * alignment row but does align left;\n * *only the lowercased first character is used, so `Right` is fine.*\n * @property {boolean | null | undefined} [delimiterEnd=true]\n * Whether to end each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are ending delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no ending delimiters:\n *\n * ```markdown\n * | Alpha | B\n * | ----- | -----\n * | C | Delta\n * ```\n * @property {boolean | null | undefined} [delimiterStart=true]\n * Whether to begin each row with the delimiter (default: `true`).\n *\n * > 👉 **Note**: please don’t use this: it could create fragile structures\n * > that aren’t understandable to some markdown parsers.\n *\n * When `true`, there are starting delimiters:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there are no starting delimiters:\n *\n * ```markdown\n * Alpha | B |\n * ----- | ----- |\n * C | Delta |\n * ```\n * @property {boolean | null | undefined} [padding=true]\n * Whether to add a space of padding between delimiters and cells\n * (default: `true`).\n *\n * When `true`, there is padding:\n *\n * ```markdown\n * | Alpha | B |\n * | ----- | ----- |\n * | C | Delta |\n * ```\n *\n * When `false`, there is no padding:\n *\n * ```markdown\n * |Alpha|B |\n * |-----|-----|\n * |C |Delta|\n * ```\n * @property {((value: string) => number) | null | undefined} [stringLength]\n * Function to detect the length of table cell content (optional);\n * this is used when aligning the delimiters (`|`) between table cells;\n * full-width characters and emoji mess up delimiter alignment when viewing\n * the markdown source;\n * to fix this, you can pass this function,\n * which receives the cell content and returns its “visible” size;\n * note that what is and isn’t visible depends on where the text is displayed.\n *\n * Without such a function, the following:\n *\n * ```js\n * markdownTable([\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ])\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | - | - |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n *\n * With [`string-width`](https://github.com/sindresorhus/string-width):\n *\n * ```js\n * import stringWidth from 'string-width'\n *\n * markdownTable(\n * [\n * ['Alpha', 'Bravo'],\n * ['中文', 'Charlie'],\n * ['👩‍❤️‍👩', 'Delta']\n * ],\n * {stringLength: stringWidth}\n * )\n * ```\n *\n * Yields:\n *\n * ```markdown\n * | Alpha | Bravo |\n * | ----- | ------- |\n * | 中文 | Charlie |\n * | 👩‍❤️‍👩 | Delta |\n * ```\n */\n\n/**\n * @param {string} value\n * Cell value.\n * @returns {number}\n * Cell size.\n */\nfunction defaultStringLength(value) {\n return value.length\n}\n\n/**\n * Generate a markdown\n * ([GFM](https://docs.github.com/en/github/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables))\n * table.\n *\n * @param {ReadonlyArray>} table\n * Table data (matrix of strings).\n * @param {Readonly | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Result.\n */\nexport function markdownTable(table, options) {\n const settings = options || {}\n // To do: next major: change to spread.\n const align = (settings.align || []).concat()\n const stringLength = settings.stringLength || defaultStringLength\n /** @type {Array} Character codes as symbols for alignment per column. */\n const alignments = []\n /** @type {Array>} Cells per row. */\n const cellMatrix = []\n /** @type {Array>} Sizes of each cell per row. */\n const sizeMatrix = []\n /** @type {Array} */\n const longestCellByColumn = []\n let mostCellsPerRow = 0\n let rowIndex = -1\n\n // This is a superfluous loop if we don’t align delimiters, but otherwise we’d\n // do superfluous work when aligning, so optimize for aligning.\n while (++rowIndex < table.length) {\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n let columnIndex = -1\n\n if (table[rowIndex].length > mostCellsPerRow) {\n mostCellsPerRow = table[rowIndex].length\n }\n\n while (++columnIndex < table[rowIndex].length) {\n const cell = serialize(table[rowIndex][columnIndex])\n\n if (settings.alignDelimiters !== false) {\n const size = stringLength(cell)\n sizes[columnIndex] = size\n\n if (\n longestCellByColumn[columnIndex] === undefined ||\n size > longestCellByColumn[columnIndex]\n ) {\n longestCellByColumn[columnIndex] = size\n }\n }\n\n row.push(cell)\n }\n\n cellMatrix[rowIndex] = row\n sizeMatrix[rowIndex] = sizes\n }\n\n // Figure out which alignments to use.\n let columnIndex = -1\n\n if (typeof align === 'object' && 'length' in align) {\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = toAlignment(align[columnIndex])\n }\n } else {\n const code = toAlignment(align)\n\n while (++columnIndex < mostCellsPerRow) {\n alignments[columnIndex] = code\n }\n }\n\n // Inject the alignment row.\n columnIndex = -1\n /** @type {Array} */\n const row = []\n /** @type {Array} */\n const sizes = []\n\n while (++columnIndex < mostCellsPerRow) {\n const code = alignments[columnIndex]\n let before = ''\n let after = ''\n\n if (code === 99 /* `c` */) {\n before = ':'\n after = ':'\n } else if (code === 108 /* `l` */) {\n before = ':'\n } else if (code === 114 /* `r` */) {\n after = ':'\n }\n\n // There *must* be at least one hyphen-minus in each alignment cell.\n let size =\n settings.alignDelimiters === false\n ? 1\n : Math.max(\n 1,\n longestCellByColumn[columnIndex] - before.length - after.length\n )\n\n const cell = before + '-'.repeat(size) + after\n\n if (settings.alignDelimiters !== false) {\n size = before.length + size + after.length\n\n if (size > longestCellByColumn[columnIndex]) {\n longestCellByColumn[columnIndex] = size\n }\n\n sizes[columnIndex] = size\n }\n\n row[columnIndex] = cell\n }\n\n // Inject the alignment row.\n cellMatrix.splice(1, 0, row)\n sizeMatrix.splice(1, 0, sizes)\n\n rowIndex = -1\n /** @type {Array} */\n const lines = []\n\n while (++rowIndex < cellMatrix.length) {\n const row = cellMatrix[rowIndex]\n const sizes = sizeMatrix[rowIndex]\n columnIndex = -1\n /** @type {Array} */\n const line = []\n\n while (++columnIndex < mostCellsPerRow) {\n const cell = row[columnIndex] || ''\n let before = ''\n let after = ''\n\n if (settings.alignDelimiters !== false) {\n const size =\n longestCellByColumn[columnIndex] - (sizes[columnIndex] || 0)\n const code = alignments[columnIndex]\n\n if (code === 114 /* `r` */) {\n before = ' '.repeat(size)\n } else if (code === 99 /* `c` */) {\n if (size % 2) {\n before = ' '.repeat(size / 2 + 0.5)\n after = ' '.repeat(size / 2 - 0.5)\n } else {\n before = ' '.repeat(size / 2)\n after = before\n }\n } else {\n after = ' '.repeat(size)\n }\n }\n\n if (settings.delimiterStart !== false && !columnIndex) {\n line.push('|')\n }\n\n if (\n settings.padding !== false &&\n // Don’t add the opening space if we’re not aligning and the cell is\n // empty: there will be a closing space.\n !(settings.alignDelimiters === false && cell === '') &&\n (settings.delimiterStart !== false || columnIndex)\n ) {\n line.push(' ')\n }\n\n if (settings.alignDelimiters !== false) {\n line.push(before)\n }\n\n line.push(cell)\n\n if (settings.alignDelimiters !== false) {\n line.push(after)\n }\n\n if (settings.padding !== false) {\n line.push(' ')\n }\n\n if (\n settings.delimiterEnd !== false ||\n columnIndex !== mostCellsPerRow - 1\n ) {\n line.push('|')\n }\n }\n\n lines.push(\n settings.delimiterEnd === false\n ? line.join('').replace(/ +$/, '')\n : line.join('')\n )\n }\n\n return lines.join('\\n')\n}\n\n/**\n * @param {string | null | undefined} [value]\n * Value to serialize.\n * @returns {string}\n * Result.\n */\nfunction serialize(value) {\n return value === null || value === undefined ? '' : String(value)\n}\n\n/**\n * @param {string | null | undefined} value\n * Value.\n * @returns {number}\n * Alignment.\n */\nfunction toAlignment(value) {\n const code = typeof value === 'string' ? value.codePointAt(0) : 0\n\n return code === 67 /* `C` */ || code === 99 /* `c` */\n ? 99 /* `c` */\n : code === 76 /* `L` */ || code === 108 /* `l` */\n ? 108 /* `l` */\n : code === 82 /* `R` */ || code === 114 /* `r` */\n ? 114 /* `r` */\n : 0\n}\n","/**\n * @import {Blockquote, Parents} from 'mdast'\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Blockquote} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function blockquote(node, _, state, info) {\n const exit = state.enter('blockquote')\n const tracker = state.createTracker(info)\n tracker.move('> ')\n tracker.shift(2)\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return '>' + (blank ? '' : ' ') + line\n}\n","/**\n * @import {ConstructName, Unsafe} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {Array} stack\n * @param {Unsafe} pattern\n * @returns {boolean}\n */\nexport function patternInScope(stack, pattern) {\n return (\n listInScope(stack, pattern.inConstruct, true) &&\n !listInScope(stack, pattern.notInConstruct, false)\n )\n}\n\n/**\n * @param {Array} stack\n * @param {Unsafe['inConstruct']} list\n * @param {boolean} none\n * @returns {boolean}\n */\nfunction listInScope(stack, list, none) {\n if (typeof list === 'string') {\n list = [list]\n }\n\n if (!list || list.length === 0) {\n return none\n }\n\n let index = -1\n\n while (++index < list.length) {\n if (stack.includes(list[index])) {\n return true\n }\n }\n\n return false\n}\n","/**\n * @import {Break, Parents} from 'mdast'\n * @import {Info, State} from 'mdast-util-to-markdown'\n */\n\nimport {patternInScope} from '../util/pattern-in-scope.js'\n\n/**\n * @param {Break} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function hardBreak(_, _1, state, info) {\n let index = -1\n\n while (++index < state.unsafe.length) {\n // If we can’t put eols in this construct (setext headings, tables), use a\n // space instead.\n if (\n state.unsafe[index].character === '\\n' &&\n patternInScope(state.stack, state.unsafe[index])\n ) {\n return /[ \\t]/.test(info.before) ? '' : ' '\n }\n }\n\n return '\\\\\\n'\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {Code, Parents} from 'mdast'\n */\n\nimport {longestStreak} from 'longest-streak'\nimport {formatCodeAsIndented} from '../util/format-code-as-indented.js'\nimport {checkFence} from '../util/check-fence.js'\n\n/**\n * @param {Code} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function code(node, _, state, info) {\n const marker = checkFence(state)\n const raw = node.value || ''\n const suffix = marker === '`' ? 'GraveAccent' : 'Tilde'\n\n if (formatCodeAsIndented(node, state)) {\n const exit = state.enter('codeIndented')\n const value = state.indentLines(raw, map)\n exit()\n return value\n }\n\n const tracker = state.createTracker(info)\n const sequence = marker.repeat(Math.max(longestStreak(raw, marker) + 1, 3))\n const exit = state.enter('codeFenced')\n let value = tracker.move(sequence)\n\n if (node.lang) {\n const subexit = state.enter(`codeFencedLang${suffix}`)\n value += tracker.move(\n state.safe(node.lang, {\n before: value,\n after: ' ',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n if (node.lang && node.meta) {\n const subexit = state.enter(`codeFencedMeta${suffix}`)\n value += tracker.move(' ')\n value += tracker.move(\n state.safe(node.meta, {\n before: value,\n after: '\\n',\n encode: ['`'],\n ...tracker.current()\n })\n )\n subexit()\n }\n\n value += tracker.move('\\n')\n\n if (raw) {\n value += tracker.move(raw + '\\n')\n }\n\n value += tracker.move(sequence)\n exit()\n return value\n}\n\n/** @type {Map} */\nfunction map(line, _, blank) {\n return (blank ? '' : ' ') + line\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkQuote(state) {\n const marker = state.options.quote || '\"'\n\n if (marker !== '\"' && marker !== \"'\") {\n throw new Error(\n 'Cannot serialize title with `' +\n marker +\n '` for `options.quote`, expected `\"`, or `\\'`'\n )\n }\n\n return marker\n}\n","/**\n * Encode a code point as a character reference.\n *\n * @param {number} code\n * Code point to encode.\n * @returns {string}\n * Encoded character reference.\n */\nexport function encodeCharacterReference(code) {\n return '&#x' + code.toString(16).toUpperCase() + ';'\n}\n","/**\n * @import {EncodeSides} from '../types.js'\n */\n\nimport {classifyCharacter} from 'micromark-util-classify-character'\n\n/**\n * Check whether to encode (as a character reference) the characters\n * surrounding an attention run.\n *\n * Which characters are around an attention run influence whether it works or\n * not.\n *\n * See for more info.\n * See this markdown in a particular renderer to see what works:\n *\n * ```markdown\n * | | A (letter inside) | B (punctuation inside) | C (whitespace inside) | D (nothing inside) |\n * | ----------------------- | ----------------- | ---------------------- | --------------------- | ------------------ |\n * | 1 (letter outside) | x*y*z | x*.*z | x* *z | x**z |\n * | 2 (punctuation outside) | .*y*. | .*.*. | .* *. | .**. |\n * | 3 (whitespace outside) | x *y* z | x *.* z | x * * z | x ** z |\n * | 4 (nothing outside) | *x* | *.* | * * | ** |\n * ```\n *\n * @param {number} outside\n * Code point on the outer side of the run.\n * @param {number} inside\n * Code point on the inner side of the run.\n * @param {'*' | '_'} marker\n * Marker of the run.\n * Underscores are handled more strictly (they form less often) than\n * asterisks.\n * @returns {EncodeSides}\n * Whether to encode characters.\n */\n// Important: punctuation must never be encoded.\n// Punctuation is solely used by markdown constructs.\n// And by encoding itself.\n// Encoding them will break constructs or double encode things.\nexport function encodeInfo(outside, inside, marker) {\n const outsideKind = classifyCharacter(outside)\n const insideKind = classifyCharacter(inside)\n\n // Letter outside:\n if (outsideKind === undefined) {\n return insideKind === undefined\n ? // Letter inside:\n // we have to encode *both* letters for `_` as it is looser.\n // it already forms for `*` (and GFMs `~`).\n marker === '_'\n ? {inside: true, outside: true}\n : {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (letter, whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: encode outer (letter)\n {inside: false, outside: true}\n }\n\n // Whitespace outside:\n if (outsideKind === 1) {\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode both (whitespace).\n {inside: true, outside: true}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n }\n\n // Punctuation outside:\n return insideKind === undefined\n ? // Letter inside: already forms.\n {inside: false, outside: false}\n : insideKind === 1\n ? // Whitespace inside: encode inner (whitespace).\n {inside: true, outside: false}\n : // Punctuation inside: already forms.\n {inside: false, outside: false}\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Emphasis, Parents} from 'mdast'\n */\n\nimport {checkEmphasis} from '../util/check-emphasis.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nemphasis.peek = emphasisPeek\n\n/**\n * @param {Emphasis} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function emphasis(node, _, state, info) {\n const marker = checkEmphasis(state)\n const exit = state.enter('emphasis')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Emphasis} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction emphasisPeek(_, _1, state) {\n return state.options.emphasis || '*'\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkEmphasis(state) {\n const marker = state.options.emphasis || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize emphasis with `' +\n marker +\n '` for `options.emphasis`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Html} from 'mdast'\n */\n\nhtml.peek = htmlPeek\n\n/**\n * @param {Html} node\n * @returns {string}\n */\nexport function html(node) {\n return node.value || ''\n}\n\n/**\n * @returns {string}\n */\nfunction htmlPeek() {\n return '<'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Image, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\nimage.peek = imagePeek\n\n/**\n * @param {Image} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function image(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('image')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n value += tracker.move(\n state.safe(node.alt, {before: value, after: ']', ...tracker.current()})\n )\n value += tracker.move('](')\n\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n exit()\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imagePeek() {\n return '!'\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {ImageReference, Parents} from 'mdast'\n */\n\nimageReference.peek = imageReferencePeek\n\n/**\n * @param {ImageReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function imageReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('imageReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('![')\n const alt = state.safe(node.alt, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(alt + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !alt || alt !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction imageReferencePeek() {\n return '!'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {InlineCode, Parents} from 'mdast'\n */\n\ninlineCode.peek = inlineCodePeek\n\n/**\n * @param {InlineCode} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nexport function inlineCode(node, _, state) {\n let value = node.value || ''\n let sequence = '`'\n let index = -1\n\n // If there is a single grave accent on its own in the code, use a fence of\n // two.\n // If there are two in a row, use one.\n while (new RegExp('(^|[^`])' + sequence + '([^`]|$)').test(value)) {\n sequence += '`'\n }\n\n // If this is not just spaces or eols (tabs don’t count), and either the\n // first or last character are a space, eol, or tick, then pad with spaces.\n if (\n /[^ \\r\\n]/.test(value) &&\n ((/^[ \\r\\n]/.test(value) && /[ \\r\\n]$/.test(value)) || /^`|`$/.test(value))\n ) {\n value = ' ' + value + ' '\n }\n\n // We have a potential problem: certain characters after eols could result in\n // blocks being seen.\n // For example, if someone injected the string `'\\n# b'`, then that would\n // result in an ATX heading.\n // We can’t escape characters in `inlineCode`, but because eols are\n // transformed to spaces when going from markdown to HTML anyway, we can swap\n // them out.\n while (++index < state.unsafe.length) {\n const pattern = state.unsafe[index]\n const expression = state.compilePattern(pattern)\n /** @type {RegExpExecArray | null} */\n let match\n\n // Only look for `atBreak`s.\n // Btw: note that `atBreak` patterns will always start the regex at LF or\n // CR.\n if (!pattern.atBreak) continue\n\n while ((match = expression.exec(value))) {\n let position = match.index\n\n // Support CRLF (patterns only look for one of the characters).\n if (\n value.charCodeAt(position) === 10 /* `\\n` */ &&\n value.charCodeAt(position - 1) === 13 /* `\\r` */\n ) {\n position--\n }\n\n value = value.slice(0, position) + ' ' + value.slice(match.index + 1)\n }\n }\n\n return sequence + value + sequence\n}\n\n/**\n * @returns {string}\n */\nfunction inlineCodePeek() {\n return '`'\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Link} from 'mdast'\n */\n\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Link} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatLinkAsAutolink(node, state) {\n const raw = toString(node)\n\n return Boolean(\n !state.options.resourceLink &&\n // If there’s a url…\n node.url &&\n // And there’s a no title…\n !node.title &&\n // And the content of `node` is a single text node…\n node.children &&\n node.children.length === 1 &&\n node.children[0].type === 'text' &&\n // And if the url is the same as the content…\n (raw === node.url || 'mailto:' + raw === node.url) &&\n // And that starts w/ a protocol…\n /^[a-z][a-z+.-]+:/i.test(node.url) &&\n // And that doesn’t contain ASCII control codes (character escapes and\n // references don’t work), space, or angle brackets…\n !/[\\0- <>\\u007F]/.test(node.url)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Link, Parents} from 'mdast'\n * @import {Exit} from '../types.js'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\nimport {formatLinkAsAutolink} from '../util/format-link-as-autolink.js'\n\nlink.peek = linkPeek\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function link(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const tracker = state.createTracker(info)\n /** @type {Exit} */\n let exit\n /** @type {Exit} */\n let subexit\n\n if (formatLinkAsAutolink(node, state)) {\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n exit = state.enter('autolink')\n let value = tracker.move('<')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '>',\n ...tracker.current()\n })\n )\n value += tracker.move('>')\n exit()\n state.stack = stack\n return value\n }\n\n exit = state.enter('link')\n subexit = state.enter('label')\n let value = tracker.move('[')\n value += tracker.move(\n state.containerPhrasing(node, {\n before: value,\n after: '](',\n ...tracker.current()\n })\n )\n value += tracker.move('](')\n subexit()\n\n if (\n // If there’s no url but there is a title…\n (!node.url && node.title) ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : ')',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n value += tracker.move(')')\n\n exit()\n return value\n}\n\n/**\n * @param {Link} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @returns {string}\n */\nfunction linkPeek(node, _, state) {\n return formatLinkAsAutolink(node, state) ? '<' : '['\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {LinkReference, Parents} from 'mdast'\n */\n\nlinkReference.peek = linkReferencePeek\n\n/**\n * @param {LinkReference} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function linkReference(node, _, state, info) {\n const type = node.referenceType\n const exit = state.enter('linkReference')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n const text = state.containerPhrasing(node, {\n before: value,\n after: ']',\n ...tracker.current()\n })\n value += tracker.move(text + '][')\n\n subexit()\n // Hide the fact that we’re in phrasing, because escapes don’t work.\n const stack = state.stack\n state.stack = []\n subexit = state.enter('reference')\n // Note: for proper tracking, we should reset the output positions when we end\n // up making a `shortcut` reference, because then there is no brace output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n const reference = state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n subexit()\n state.stack = stack\n exit()\n\n if (type === 'full' || !text || text !== reference) {\n value += tracker.move(reference + ']')\n } else if (type === 'shortcut') {\n // Remove the unwanted `[`.\n value = value.slice(0, -1)\n } else {\n value += tracker.move(']')\n }\n\n return value\n}\n\n/**\n * @returns {string}\n */\nfunction linkReferencePeek() {\n return '['\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBullet(state) {\n const marker = state.options.bullet || '*'\n\n if (marker !== '*' && marker !== '+' && marker !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bullet`, expected `*`, `+`, or `-`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRule(state) {\n const marker = state.options.rule || '*'\n\n if (marker !== '*' && marker !== '-' && marker !== '_') {\n throw new Error(\n 'Cannot serialize rules with `' +\n marker +\n '` for `options.rule`, expected `*`, `-`, or `_`'\n )\n }\n\n return marker\n}\n","/**\n * @typedef {import('mdast').Html} Html\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n */\n\nimport {convert} from 'unist-util-is'\n\n/**\n * Check if the given value is *phrasing content*.\n *\n * > 👉 **Note**: Excludes `html`, which can be both phrasing or flow.\n *\n * @param node\n * Thing to check, typically `Node`.\n * @returns\n * Whether `value` is phrasing content.\n */\n\nexport const phrasing =\n /** @type {(node?: unknown) => node is Exclude} */\n (\n convert([\n 'break',\n 'delete',\n 'emphasis',\n // To do: next major: removed since footnotes were added to GFM.\n 'footnote',\n 'footnoteReference',\n 'image',\n 'imageReference',\n 'inlineCode',\n // Enabled by `mdast-util-math`:\n 'inlineMath',\n 'link',\n 'linkReference',\n // Enabled by `mdast-util-mdx`:\n 'mdxJsxTextElement',\n // Enabled by `mdast-util-mdx`:\n 'mdxTextExpression',\n 'strong',\n 'text',\n // Enabled by `mdast-util-directive`:\n 'textDirective'\n ])\n )\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Strong} from 'mdast'\n */\n\nimport {checkStrong} from '../util/check-strong.js'\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {encodeInfo} from '../util/encode-info.js'\n\nstrong.peek = strongPeek\n\n/**\n * @param {Strong} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function strong(node, _, state, info) {\n const marker = checkStrong(state)\n const exit = state.enter('strong')\n const tracker = state.createTracker(info)\n const before = tracker.move(marker + marker)\n\n let between = tracker.move(\n state.containerPhrasing(node, {\n after: marker,\n before,\n ...tracker.current()\n })\n )\n const betweenHead = between.charCodeAt(0)\n const open = encodeInfo(\n info.before.charCodeAt(info.before.length - 1),\n betweenHead,\n marker\n )\n\n if (open.inside) {\n between = encodeCharacterReference(betweenHead) + between.slice(1)\n }\n\n const betweenTail = between.charCodeAt(between.length - 1)\n const close = encodeInfo(info.after.charCodeAt(0), betweenTail, marker)\n\n if (close.inside) {\n between = between.slice(0, -1) + encodeCharacterReference(betweenTail)\n }\n\n const after = tracker.move(marker + marker)\n\n exit()\n\n state.attentionEncodeSurroundingInfo = {\n after: close.outside,\n before: open.outside\n }\n return before + between + after\n}\n\n/**\n * @param {Strong} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nfunction strongPeek(_, _1, state) {\n return state.options.strong || '*'\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkStrong(state) {\n const marker = state.options.strong || '*'\n\n if (marker !== '*' && marker !== '_') {\n throw new Error(\n 'Cannot serialize strong with `' +\n marker +\n '` for `options.strong`, expected `*`, or `_`'\n )\n }\n\n return marker\n}\n","import {blockquote} from './blockquote.js'\nimport {hardBreak} from './break.js'\nimport {code} from './code.js'\nimport {definition} from './definition.js'\nimport {emphasis} from './emphasis.js'\nimport {heading} from './heading.js'\nimport {html} from './html.js'\nimport {image} from './image.js'\nimport {imageReference} from './image-reference.js'\nimport {inlineCode} from './inline-code.js'\nimport {link} from './link.js'\nimport {linkReference} from './link-reference.js'\nimport {list} from './list.js'\nimport {listItem} from './list-item.js'\nimport {paragraph} from './paragraph.js'\nimport {root} from './root.js'\nimport {strong} from './strong.js'\nimport {text} from './text.js'\nimport {thematicBreak} from './thematic-break.js'\n\n/**\n * Default (CommonMark) handlers.\n */\nexport const handle = {\n blockquote,\n break: hardBreak,\n code,\n definition,\n emphasis,\n hardBreak,\n heading,\n html,\n image,\n imageReference,\n inlineCode,\n link,\n linkReference,\n list,\n listItem,\n paragraph,\n root,\n strong,\n text,\n thematicBreak\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkFence(state) {\n const marker = state.options.fence || '`'\n\n if (marker !== '`' && marker !== '~') {\n throw new Error(\n 'Cannot serialize code with `' +\n marker +\n '` for `options.fence`, expected `` ` `` or `~`'\n )\n }\n\n return marker\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Code} from 'mdast'\n */\n\n/**\n * @param {Code} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatCodeAsIndented(node, state) {\n return Boolean(\n state.options.fences === false &&\n node.value &&\n // If there’s no info…\n !node.lang &&\n // And there’s a non-whitespace character…\n /[^ \\r\\n]/.test(node.value) &&\n // And the value doesn’t start or end in a blank…\n !/^[\\t ]*(?:[\\r\\n]|$)|(?:^|[\\r\\n])[\\t ]*$/.test(node.value)\n )\n}\n","/**\n * Get the count of the longest repeating streak of `substring` in `value`.\n *\n * @param {string} value\n * Content to search in.\n * @param {string} substring\n * Substring to look for, typically one character.\n * @returns {number}\n * Count of most frequent adjacent `substring`s in `value`.\n */\nexport function longestStreak(value, substring) {\n const source = String(value)\n let index = source.indexOf(substring)\n let expected = index\n let count = 0\n let max = 0\n\n if (typeof substring !== 'string') {\n throw new TypeError('Expected substring')\n }\n\n while (index !== -1) {\n if (index === expected) {\n if (++count > max) {\n max = count\n }\n } else {\n count = 1\n }\n\n expected = index + substring.length\n index = source.indexOf(substring, expected)\n }\n\n return max\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Definition, Parents} from 'mdast'\n */\n\nimport {checkQuote} from '../util/check-quote.js'\n\n/**\n * @param {Definition} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function definition(node, _, state, info) {\n const quote = checkQuote(state)\n const suffix = quote === '\"' ? 'Quote' : 'Apostrophe'\n const exit = state.enter('definition')\n let subexit = state.enter('label')\n const tracker = state.createTracker(info)\n let value = tracker.move('[')\n value += tracker.move(\n state.safe(state.associationId(node), {\n before: value,\n after: ']',\n ...tracker.current()\n })\n )\n value += tracker.move(']: ')\n\n subexit()\n\n if (\n // If there’s no url, or…\n !node.url ||\n // If there are control characters or whitespace.\n /[\\0- \\u007F]/.test(node.url)\n ) {\n subexit = state.enter('destinationLiteral')\n value += tracker.move('<')\n value += tracker.move(\n state.safe(node.url, {before: value, after: '>', ...tracker.current()})\n )\n value += tracker.move('>')\n } else {\n // No whitespace, raw is prettier.\n subexit = state.enter('destinationRaw')\n value += tracker.move(\n state.safe(node.url, {\n before: value,\n after: node.title ? ' ' : '\\n',\n ...tracker.current()\n })\n )\n }\n\n subexit()\n\n if (node.title) {\n subexit = state.enter(`title${suffix}`)\n value += tracker.move(' ' + quote)\n value += tracker.move(\n state.safe(node.title, {\n before: value,\n after: quote,\n ...tracker.current()\n })\n )\n value += tracker.move(quote)\n subexit()\n }\n\n exit()\n\n return value\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Heading, Parents} from 'mdast'\n */\n\nimport {encodeCharacterReference} from '../util/encode-character-reference.js'\nimport {formatHeadingAsSetext} from '../util/format-heading-as-setext.js'\n\n/**\n * @param {Heading} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function heading(node, _, state, info) {\n const rank = Math.max(Math.min(6, node.depth || 1), 1)\n const tracker = state.createTracker(info)\n\n if (formatHeadingAsSetext(node, state)) {\n const exit = state.enter('headingSetext')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...tracker.current(),\n before: '\\n',\n after: '\\n'\n })\n subexit()\n exit()\n\n return (\n value +\n '\\n' +\n (rank === 1 ? '=' : '-').repeat(\n // The whole size…\n value.length -\n // Minus the position of the character after the last EOL (or\n // 0 if there is none)…\n (Math.max(value.lastIndexOf('\\r'), value.lastIndexOf('\\n')) + 1)\n )\n )\n }\n\n const sequence = '#'.repeat(rank)\n const exit = state.enter('headingAtx')\n const subexit = state.enter('phrasing')\n\n // Note: for proper tracking, we should reset the output positions when there\n // is no content returned, because then the space is not output.\n // Practically, in that case, there is no content, so it doesn’t matter that\n // we’ve tracked one too many characters.\n tracker.move(sequence + ' ')\n\n let value = state.containerPhrasing(node, {\n before: '# ',\n after: '\\n',\n ...tracker.current()\n })\n\n if (/^[\\t ]/.test(value)) {\n // To do: what effect has the character reference on tracking?\n value = encodeCharacterReference(value.charCodeAt(0)) + value.slice(1)\n }\n\n value = value ? sequence + ' ' + value : sequence\n\n if (state.options.closeAtx) {\n value += ' ' + sequence\n }\n\n subexit()\n exit()\n\n return value\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Heading} from 'mdast'\n */\n\nimport {EXIT, visit} from 'unist-util-visit'\nimport {toString} from 'mdast-util-to-string'\n\n/**\n * @param {Heading} node\n * @param {State} state\n * @returns {boolean}\n */\nexport function formatHeadingAsSetext(node, state) {\n let literalWithBreak = false\n\n // Look for literals with a line break.\n // Note that this also\n visit(node, function (node) {\n if (\n ('value' in node && /\\r?\\n|\\r/.test(node.value)) ||\n node.type === 'break'\n ) {\n literalWithBreak = true\n return EXIT\n }\n })\n\n return Boolean(\n (!node.depth || node.depth < 3) &&\n toString(node) &&\n (state.options.setext || literalWithBreak)\n )\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {List, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkBulletOther} from '../util/check-bullet-other.js'\nimport {checkBulletOrdered} from '../util/check-bullet-ordered.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {List} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function list(node, parent, state, info) {\n const exit = state.enter('list')\n const bulletCurrent = state.bulletCurrent\n /** @type {string} */\n let bullet = node.ordered ? checkBulletOrdered(state) : checkBullet(state)\n /** @type {string} */\n const bulletOther = node.ordered\n ? bullet === '.'\n ? ')'\n : '.'\n : checkBulletOther(state)\n let useDifferentMarker =\n parent && state.bulletLastUsed ? bullet === state.bulletLastUsed : false\n\n if (!node.ordered) {\n const firstListItem = node.children ? node.children[0] : undefined\n\n // If there’s an empty first list item directly in two list items,\n // we have to use a different bullet:\n //\n // ```markdown\n // * - *\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (\n // Bullet could be used as a thematic break marker:\n (bullet === '*' || bullet === '-') &&\n // Empty first list item:\n firstListItem &&\n (!firstListItem.children || !firstListItem.children[0]) &&\n // Directly in two other list items:\n state.stack[state.stack.length - 1] === 'list' &&\n state.stack[state.stack.length - 2] === 'listItem' &&\n state.stack[state.stack.length - 3] === 'list' &&\n state.stack[state.stack.length - 4] === 'listItem' &&\n // That are each the first child.\n state.indexStack[state.indexStack.length - 1] === 0 &&\n state.indexStack[state.indexStack.length - 2] === 0 &&\n state.indexStack[state.indexStack.length - 3] === 0\n ) {\n useDifferentMarker = true\n }\n\n // If there’s a thematic break at the start of the first list item,\n // we have to use a different bullet:\n //\n // ```markdown\n // * ---\n // ```\n //\n // …because otherwise it would become one big thematic break.\n if (checkRule(state) === bullet && firstListItem) {\n let index = -1\n\n while (++index < node.children.length) {\n const item = node.children[index]\n\n if (\n item &&\n item.type === 'listItem' &&\n item.children &&\n item.children[0] &&\n item.children[0].type === 'thematicBreak'\n ) {\n useDifferentMarker = true\n break\n }\n }\n }\n }\n\n if (useDifferentMarker) {\n bullet = bulletOther\n }\n\n state.bulletCurrent = bullet\n const value = state.containerFlow(node, info)\n state.bulletLastUsed = bullet\n state.bulletCurrent = bulletCurrent\n exit()\n return value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOrdered(state) {\n const marker = state.options.bulletOrdered || '.'\n\n if (marker !== '.' && marker !== ')') {\n throw new Error(\n 'Cannot serialize items with `' +\n marker +\n '` for `options.bulletOrdered`, expected `.` or `)`'\n )\n }\n\n return marker\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\nimport {checkBullet} from './check-bullet.js'\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkBulletOther(state) {\n const bullet = checkBullet(state)\n const bulletOther = state.options.bulletOther\n\n if (!bulletOther) {\n return bullet === '*' ? '-' : '*'\n }\n\n if (bulletOther !== '*' && bulletOther !== '+' && bulletOther !== '-') {\n throw new Error(\n 'Cannot serialize items with `' +\n bulletOther +\n '` for `options.bulletOther`, expected `*`, `+`, or `-`'\n )\n }\n\n if (bulletOther === bullet) {\n throw new Error(\n 'Expected `bullet` (`' +\n bullet +\n '`) and `bulletOther` (`' +\n bulletOther +\n '`) to be different'\n )\n }\n\n return bulletOther\n}\n","/**\n * @import {Info, Map, State} from 'mdast-util-to-markdown'\n * @import {ListItem, Parents} from 'mdast'\n */\n\nimport {checkBullet} from '../util/check-bullet.js'\nimport {checkListItemIndent} from '../util/check-list-item-indent.js'\n\n/**\n * @param {ListItem} node\n * @param {Parents | undefined} parent\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function listItem(node, parent, state, info) {\n const listItemIndent = checkListItemIndent(state)\n let bullet = state.bulletCurrent || checkBullet(state)\n\n // Add the marker value for ordered lists.\n if (parent && parent.type === 'list' && parent.ordered) {\n bullet =\n (typeof parent.start === 'number' && parent.start > -1\n ? parent.start\n : 1) +\n (state.options.incrementListMarker === false\n ? 0\n : parent.children.indexOf(node)) +\n bullet\n }\n\n let size = bullet.length + 1\n\n if (\n listItemIndent === 'tab' ||\n (listItemIndent === 'mixed' &&\n ((parent && parent.type === 'list' && parent.spread) || node.spread))\n ) {\n size = Math.ceil(size / 4) * 4\n }\n\n const tracker = state.createTracker(info)\n tracker.move(bullet + ' '.repeat(size - bullet.length))\n tracker.shift(size)\n const exit = state.enter('listItem')\n const value = state.indentLines(\n state.containerFlow(node, tracker.current()),\n map\n )\n exit()\n\n return value\n\n /** @type {Map} */\n function map(line, index, blank) {\n if (index) {\n return (blank ? '' : ' '.repeat(size)) + line\n }\n\n return (blank ? bullet : bullet + ' '.repeat(size - bullet.length)) + line\n }\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkListItemIndent(state) {\n const style = state.options.listItemIndent || 'one'\n\n if (style !== 'tab' && style !== 'one' && style !== 'mixed') {\n throw new Error(\n 'Cannot serialize items with `' +\n style +\n '` for `options.listItemIndent`, expected `tab`, `one`, or `mixed`'\n )\n }\n\n return style\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Paragraph, Parents} from 'mdast'\n */\n\n/**\n * @param {Paragraph} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function paragraph(node, _, state, info) {\n const exit = state.enter('paragraph')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, info)\n subexit()\n exit()\n return value\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Root} from 'mdast'\n */\n\nimport {phrasing} from 'mdast-util-phrasing'\n\n/**\n * @param {Root} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function root(node, _, state, info) {\n // Note: `html` nodes are ambiguous.\n const hasPhrasing = node.children.some(function (d) {\n return phrasing(d)\n })\n\n const container = hasPhrasing ? state.containerPhrasing : state.containerFlow\n return container.call(state, node, info)\n}\n","/**\n * @import {Info, State} from 'mdast-util-to-markdown'\n * @import {Parents, Text} from 'mdast'\n */\n\n/**\n * @param {Text} node\n * @param {Parents | undefined} _\n * @param {State} state\n * @param {Info} info\n * @returns {string}\n */\nexport function text(node, _, state, info) {\n return state.safe(node.value, info)\n}\n","/**\n * @import {State} from 'mdast-util-to-markdown'\n * @import {Parents, ThematicBreak} from 'mdast'\n */\n\nimport {checkRuleRepetition} from '../util/check-rule-repetition.js'\nimport {checkRule} from '../util/check-rule.js'\n\n/**\n * @param {ThematicBreak} _\n * @param {Parents | undefined} _1\n * @param {State} state\n * @returns {string}\n */\nexport function thematicBreak(_, _1, state) {\n const value = (\n checkRule(state) + (state.options.ruleSpaces ? ' ' : '')\n ).repeat(checkRuleRepetition(state))\n\n return state.options.ruleSpaces ? value.slice(0, -1) : value\n}\n","/**\n * @import {Options, State} from 'mdast-util-to-markdown'\n */\n\n/**\n * @param {State} state\n * @returns {Exclude}\n */\nexport function checkRuleRepetition(state) {\n const repetition = state.options.ruleRepetition || 3\n\n if (repetition < 3) {\n throw new Error(\n 'Cannot serialize rules with repetition `' +\n repetition +\n '` for `options.ruleRepetition`, expected `3` or more'\n )\n }\n\n return repetition\n}\n","/**\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Table} Table\n * @typedef {import('mdast').TableCell} TableCell\n * @typedef {import('mdast').TableRow} TableRow\n *\n * @typedef {import('markdown-table').Options} MarkdownTableOptions\n *\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n *\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').State} State\n * @typedef {import('mdast-util-to-markdown').Info} Info\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [tableCellPadding=true]\n * Whether to add a space of padding between delimiters and cells (default:\n * `true`).\n * @property {boolean | null | undefined} [tablePipeAlign=true]\n * Whether to align the delimiters (default: `true`).\n * @property {MarkdownTableOptions['stringLength'] | null | undefined} [stringLength]\n * Function to detect the length of table cell content, used when aligning\n * the delimiters between cells (optional).\n */\n\nimport {ok as assert} from 'devlop'\nimport {markdownTable} from 'markdown-table'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM tables in\n * markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM tables.\n */\nexport function gfmTableFromMarkdown() {\n return {\n enter: {\n table: enterTable,\n tableData: enterCell,\n tableHeader: enterCell,\n tableRow: enterRow\n },\n exit: {\n codeText: exitCodeText,\n table: exitTable,\n tableData: exit,\n tableHeader: exit,\n tableRow: exit\n }\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterTable(token) {\n const align = token._align\n assert(align, 'expected `_align` on table')\n this.enter(\n {\n type: 'table',\n align: align.map(function (d) {\n return d === 'none' ? null : d\n }),\n children: []\n },\n token\n )\n this.data.inTable = true\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitTable(token) {\n this.exit(token)\n this.data.inTable = undefined\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterRow(token) {\n this.enter({type: 'tableRow', children: []}, token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exit(token) {\n this.exit(token)\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction enterCell(token) {\n this.enter({type: 'tableCell', children: []}, token)\n}\n\n// Overwrite the default code text data handler to unescape escaped pipes when\n// they are in tables.\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCodeText(token) {\n let value = this.resume()\n\n if (this.data.inTable) {\n value = value.replace(/\\\\([\\\\|])/g, replace)\n }\n\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'inlineCode')\n node.value = value\n this.exit(token)\n}\n\n/**\n * @param {string} $0\n * @param {string} $1\n * @returns {string}\n */\nfunction replace($0, $1) {\n // Pipes work, backslashes don’t (but can’t escape pipes).\n return $1 === '|' ? $1 : $0\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM tables in\n * markdown.\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM tables.\n */\nexport function gfmTableToMarkdown(options) {\n const settings = options || {}\n const padding = settings.tableCellPadding\n const alignDelimiters = settings.tablePipeAlign\n const stringLength = settings.stringLength\n const around = padding ? ' ' : '|'\n\n return {\n unsafe: [\n {character: '\\r', inConstruct: 'tableCell'},\n {character: '\\n', inConstruct: 'tableCell'},\n // A pipe, when followed by a tab or space (padding), or a dash or colon\n // (unpadded delimiter row), could result in a table.\n {atBreak: true, character: '|', after: '[\\t :-]'},\n // A pipe in a cell must be encoded.\n {character: '|', inConstruct: 'tableCell'},\n // A colon must be followed by a dash, in which case it could start a\n // delimiter row.\n {atBreak: true, character: ':', after: '-'},\n // A delimiter row can also start with a dash, when followed by more\n // dashes, a colon, or a pipe.\n // This is a stricter version than the built in check for lists, thematic\n // breaks, and setex heading underlines though:\n // \n {atBreak: true, character: '-', after: '[:|-]'}\n ],\n handlers: {\n inlineCode: inlineCodeWithTable,\n table: handleTable,\n tableCell: handleTableCell,\n tableRow: handleTableRow\n }\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {Table} node\n */\n function handleTable(node, _, state, info) {\n return serializeData(handleTableAsData(node, state, info), node.align)\n }\n\n /**\n * This function isn’t really used normally, because we handle rows at the\n * table level.\n * But, if someone passes in a table row, this ensures we make somewhat sense.\n *\n * @type {ToMarkdownHandle}\n * @param {TableRow} node\n */\n function handleTableRow(node, _, state, info) {\n const row = handleTableRowAsData(node, state, info)\n const value = serializeData([row])\n // `markdown-table` will always add an align row\n return value.slice(0, value.indexOf('\\n'))\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {TableCell} node\n */\n function handleTableCell(node, _, state, info) {\n const exit = state.enter('tableCell')\n const subexit = state.enter('phrasing')\n const value = state.containerPhrasing(node, {\n ...info,\n before: around,\n after: around\n })\n subexit()\n exit()\n return value\n }\n\n /**\n * @param {Array>} matrix\n * @param {Array | null | undefined} [align]\n */\n function serializeData(matrix, align) {\n return markdownTable(matrix, {\n align,\n // @ts-expect-error: `markdown-table` types should support `null`.\n alignDelimiters,\n // @ts-expect-error: `markdown-table` types should support `null`.\n padding,\n // @ts-expect-error: `markdown-table` types should support `null`.\n stringLength\n })\n }\n\n /**\n * @param {Table} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array>} */\n const result = []\n const subexit = state.enter('table')\n\n while (++index < children.length) {\n result[index] = handleTableRowAsData(children[index], state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @param {TableRow} node\n * @param {State} state\n * @param {Info} info\n */\n function handleTableRowAsData(node, state, info) {\n const children = node.children\n let index = -1\n /** @type {Array} */\n const result = []\n const subexit = state.enter('tableRow')\n\n while (++index < children.length) {\n // Note: the positional info as used here is incorrect.\n // Making it correct would be impossible due to aligning cells?\n // And it would need copy/pasting `markdown-table` into this project.\n result[index] = handleTableCell(children[index], node, state, info)\n }\n\n subexit()\n\n return result\n }\n\n /**\n * @type {ToMarkdownHandle}\n * @param {InlineCode} node\n */\n function inlineCodeWithTable(node, parent, state) {\n let value = defaultHandlers.inlineCode(node, parent, state)\n\n if (state.stack.includes('tableCell')) {\n value = value.replace(/\\|/g, '\\\\$&')\n }\n\n return value\n }\n}\n","/**\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast-util-from-markdown').CompileContext} CompileContext\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-from-markdown').Handle} FromMarkdownHandle\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Handle} ToMarkdownHandle\n */\n\nimport {ok as assert} from 'devlop'\nimport {defaultHandlers} from 'mdast-util-to-markdown'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM task\n * list items in markdown.\n *\n * @returns {FromMarkdownExtension}\n * Extension for `mdast-util-from-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemFromMarkdown() {\n return {\n exit: {\n taskListCheckValueChecked: exitCheck,\n taskListCheckValueUnchecked: exitCheck,\n paragraph: exitParagraphWithTaskListItem\n }\n }\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM task list\n * items in markdown.\n *\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM task list items.\n */\nexport function gfmTaskListItemToMarkdown() {\n return {\n unsafe: [{atBreak: true, character: '-', after: '[:|-]'}],\n handlers: {listItem: listItemWithTaskListItem}\n }\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitCheck(token) {\n // We’re always in a paragraph, in a list item.\n const node = this.stack[this.stack.length - 2]\n assert(node.type === 'listItem')\n node.checked = token.type === 'taskListCheckValueChecked'\n}\n\n/**\n * @this {CompileContext}\n * @type {FromMarkdownHandle}\n */\nfunction exitParagraphWithTaskListItem(token) {\n const parent = this.stack[this.stack.length - 2]\n\n if (\n parent &&\n parent.type === 'listItem' &&\n typeof parent.checked === 'boolean'\n ) {\n const node = this.stack[this.stack.length - 1]\n assert(node.type === 'paragraph')\n const head = node.children[0]\n\n if (head && head.type === 'text') {\n const siblings = parent.children\n let index = -1\n /** @type {Paragraph | undefined} */\n let firstParaghraph\n\n while (++index < siblings.length) {\n const sibling = siblings[index]\n if (sibling.type === 'paragraph') {\n firstParaghraph = sibling\n break\n }\n }\n\n if (firstParaghraph === node) {\n // Must start with a space or a tab.\n head.value = head.value.slice(1)\n\n if (head.value.length === 0) {\n node.children.shift()\n } else if (\n node.position &&\n head.position &&\n typeof head.position.start.offset === 'number'\n ) {\n head.position.start.column++\n head.position.start.offset++\n node.position.start = Object.assign({}, head.position.start)\n }\n }\n }\n }\n\n this.exit(token)\n}\n\n/**\n * @type {ToMarkdownHandle}\n * @param {ListItem} node\n */\nfunction listItemWithTaskListItem(node, parent, state, info) {\n const head = node.children[0]\n const checkable =\n typeof node.checked === 'boolean' && head && head.type === 'paragraph'\n const checkbox = '[' + (node.checked ? 'x' : ' ') + '] '\n const tracker = state.createTracker(info)\n\n if (checkable) {\n tracker.move(checkbox)\n }\n\n let value = defaultHandlers.listItem(node, parent, state, {\n ...info,\n ...tracker.current()\n })\n\n if (checkable) {\n value = value.replace(/^(?:[*+-]|\\d+\\.)([\\r\\n]| {1,3})/, check)\n }\n\n return value\n\n /**\n * @param {string} $0\n * @returns {string}\n */\n function check($0) {\n return $0 + checkbox\n }\n}\n","/**\n * @import {Code, ConstructRecord, Event, Extension, Previous, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { asciiAlpha, asciiAlphanumeric, asciiControl, markdownLineEndingOrSpace, unicodePunctuation, unicodeWhitespace } from 'micromark-util-character';\nconst wwwPrefix = {\n tokenize: tokenizeWwwPrefix,\n partial: true\n};\nconst domain = {\n tokenize: tokenizeDomain,\n partial: true\n};\nconst path = {\n tokenize: tokenizePath,\n partial: true\n};\nconst trail = {\n tokenize: tokenizeTrail,\n partial: true\n};\nconst emailDomainDotTrail = {\n tokenize: tokenizeEmailDomainDotTrail,\n partial: true\n};\nconst wwwAutolink = {\n name: 'wwwAutolink',\n tokenize: tokenizeWwwAutolink,\n previous: previousWww\n};\nconst protocolAutolink = {\n name: 'protocolAutolink',\n tokenize: tokenizeProtocolAutolink,\n previous: previousProtocol\n};\nconst emailAutolink = {\n name: 'emailAutolink',\n tokenize: tokenizeEmailAutolink,\n previous: previousEmail\n};\n\n/** @type {ConstructRecord} */\nconst text = {};\n\n/**\n * Create an extension for `micromark` to support GitHub autolink literal\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * autolink literal syntax.\n */\nexport function gfmAutolinkLiteral() {\n return {\n text\n };\n}\n\n/** @type {Code} */\nlet code = 48;\n\n// Add alphanumerics.\nwhile (code < 123) {\n text[code] = emailAutolink;\n code++;\n if (code === 58) code = 65;else if (code === 91) code = 97;\n}\ntext[43] = emailAutolink;\ntext[45] = emailAutolink;\ntext[46] = emailAutolink;\ntext[95] = emailAutolink;\ntext[72] = [emailAutolink, protocolAutolink];\ntext[104] = [emailAutolink, protocolAutolink];\ntext[87] = [emailAutolink, wwwAutolink];\ntext[119] = [emailAutolink, wwwAutolink];\n\n// To do: perform email autolink literals on events, afterwards.\n// That’s where `markdown-rs` and `cmark-gfm` perform it.\n// It should look for `@`, then for atext backwards, and then for a label\n// forwards.\n// To do: `mailto:`, `xmpp:` protocol as prefix.\n\n/**\n * Email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailAutolink(effects, ok, nok) {\n const self = this;\n /** @type {boolean | undefined} */\n let dot;\n /** @type {boolean} */\n let data;\n return start;\n\n /**\n * Start of email autolink literal.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (!gfmAtext(code) || !previousEmail.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkEmail');\n return atext(code);\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function atext(code) {\n if (gfmAtext(code)) {\n effects.consume(code);\n return atext;\n }\n if (code === 64) {\n effects.consume(code);\n return emailDomain;\n }\n return nok(code);\n }\n\n /**\n * In email domain.\n *\n * The reference code is a bit overly complex as it handles the `@`, of which\n * there may be just one.\n * Source: \n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomain(code) {\n // Dot followed by alphanumerical (not `-` or `_`).\n if (code === 46) {\n return effects.check(emailDomainDotTrail, emailDomainAfter, emailDomainDot)(code);\n }\n\n // Alphanumerical, `-`, and `_`.\n if (code === 45 || code === 95 || asciiAlphanumeric(code)) {\n data = true;\n effects.consume(code);\n return emailDomain;\n }\n\n // To do: `/` if xmpp.\n\n // Note: normally we’d truncate trailing punctuation from the link.\n // However, email autolink literals cannot contain any of those markers,\n // except for `.`, but that can only occur if it isn’t trailing.\n // So we can ignore truncating!\n return emailDomainAfter(code);\n }\n\n /**\n * In email domain, on dot that is not a trail.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainDot(code) {\n effects.consume(code);\n dot = true;\n return emailDomain;\n }\n\n /**\n * After email domain.\n *\n * ```markdown\n * > | a contact@example.org b\n * ^\n * ```\n *\n * @type {State}\n */\n function emailDomainAfter(code) {\n // Domain must not be empty, must include a dot, and must end in alphabetical.\n // Source: .\n if (data && dot && asciiAlpha(self.previous)) {\n effects.exit('literalAutolinkEmail');\n effects.exit('literalAutolink');\n return ok(code);\n }\n return nok(code);\n }\n}\n\n/**\n * `www` autolink literal.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwAutolink(effects, ok, nok) {\n const self = this;\n return wwwStart;\n\n /**\n * Start of www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwStart(code) {\n if (code !== 87 && code !== 119 || !previousWww.call(self, self.previous) || previousUnbalanced(self.events)) {\n return nok(code);\n }\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkWww');\n // Note: we *check*, so we can discard the `www.` we parsed.\n // If it worked, we consider it as a part of the domain.\n return effects.check(wwwPrefix, effects.attempt(domain, effects.attempt(path, wwwAfter), nok), nok)(code);\n }\n\n /**\n * After a www autolink literal.\n *\n * ```markdown\n * > | www.example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwAfter(code) {\n effects.exit('literalAutolinkWww');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * Protocol autolink literal.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeProtocolAutolink(effects, ok, nok) {\n const self = this;\n let buffer = '';\n let seen = false;\n return protocolStart;\n\n /**\n * Start of protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolStart(code) {\n if ((code === 72 || code === 104) && previousProtocol.call(self, self.previous) && !previousUnbalanced(self.events)) {\n effects.enter('literalAutolink');\n effects.enter('literalAutolinkHttp');\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n return nok(code);\n }\n\n /**\n * In protocol.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^^^^\n * ```\n *\n * @type {State}\n */\n function protocolPrefixInside(code) {\n // `5` is size of `https`\n if (asciiAlpha(code) && buffer.length < 5) {\n // @ts-expect-error: definitely number.\n buffer += String.fromCodePoint(code);\n effects.consume(code);\n return protocolPrefixInside;\n }\n if (code === 58) {\n const protocol = buffer.toLowerCase();\n if (protocol === 'http' || protocol === 'https') {\n effects.consume(code);\n return protocolSlashesInside;\n }\n }\n return nok(code);\n }\n\n /**\n * In slashes.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^^\n * ```\n *\n * @type {State}\n */\n function protocolSlashesInside(code) {\n if (code === 47) {\n effects.consume(code);\n if (seen) {\n return afterProtocol;\n }\n seen = true;\n return protocolSlashesInside;\n }\n return nok(code);\n }\n\n /**\n * After protocol, before domain.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function afterProtocol(code) {\n // To do: this is different from `markdown-rs`:\n // https://github.com/wooorm/markdown-rs/blob/b3a921c761309ae00a51fe348d8a43adbc54b518/src/construct/gfm_autolink_literal.rs#L172-L182\n return code === null || asciiControl(code) || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || unicodePunctuation(code) ? nok(code) : effects.attempt(domain, effects.attempt(path, protocolAfter), nok)(code);\n }\n\n /**\n * After a protocol autolink literal.\n *\n * ```markdown\n * > | https://example.com/a?b#c\n * ^\n * ```\n *\n * @type {State}\n */\n function protocolAfter(code) {\n effects.exit('literalAutolinkHttp');\n effects.exit('literalAutolink');\n return ok(code);\n }\n}\n\n/**\n * `www` prefix.\n *\n * ```markdown\n * > | a www.example.org b\n * ^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeWwwPrefix(effects, ok, nok) {\n let size = 0;\n return wwwPrefixInside;\n\n /**\n * In www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixInside(code) {\n if ((code === 87 || code === 119) && size < 3) {\n size++;\n effects.consume(code);\n return wwwPrefixInside;\n }\n if (code === 46 && size === 3) {\n effects.consume(code);\n return wwwPrefixAfter;\n }\n return nok(code);\n }\n\n /**\n * After www prefix.\n *\n * ```markdown\n * > | www.example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function wwwPrefixAfter(code) {\n // If there is *anything*, we can link.\n return code === null ? nok(code) : ok(code);\n }\n}\n\n/**\n * Domain.\n *\n * ```markdown\n * > | a https://example.org b\n * ^^^^^^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDomain(effects, ok, nok) {\n /** @type {boolean | undefined} */\n let underscoreInLastSegment;\n /** @type {boolean | undefined} */\n let underscoreInLastLastSegment;\n /** @type {boolean | undefined} */\n let seen;\n return domainInside;\n\n /**\n * In domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^^^^^^^^^^\n * ```\n *\n * @type {State}\n */\n function domainInside(code) {\n // Check whether this marker, which is a trailing punctuation\n // marker, optionally followed by more trailing markers, and then\n // followed by an end.\n if (code === 46 || code === 95) {\n return effects.check(trail, domainAfter, domainAtPunctuation)(code);\n }\n\n // GH documents that only alphanumerics (other than `-`, `.`, and `_`) can\n // occur, which sounds like ASCII only, but they also support `www.點看.com`,\n // so that’s Unicode.\n // Instead of some new production for Unicode alphanumerics, markdown\n // already has that for Unicode punctuation and whitespace, so use those.\n // Source: .\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code) || code !== 45 && unicodePunctuation(code)) {\n return domainAfter(code);\n }\n seen = true;\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * In domain, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com\n * ^\n * ```\n *\n * @type {State}\n */\n function domainAtPunctuation(code) {\n // There is an underscore in the last segment of the domain\n if (code === 95) {\n underscoreInLastSegment = true;\n }\n // Otherwise, it’s a `.`: save the last segment underscore in the\n // penultimate segment slot.\n else {\n underscoreInLastLastSegment = underscoreInLastSegment;\n underscoreInLastSegment = undefined;\n }\n effects.consume(code);\n return domainInside;\n }\n\n /**\n * After domain.\n *\n * ```markdown\n * > | https://example.com/a\n * ^\n * ```\n *\n * @type {State} */\n function domainAfter(code) {\n // Note: that’s GH says a dot is needed, but it’s not true:\n // \n if (underscoreInLastLastSegment || underscoreInLastSegment || !seen) {\n return nok(code);\n }\n return ok(code);\n }\n}\n\n/**\n * Path.\n *\n * ```markdown\n * > | a https://example.org/stuff b\n * ^^^^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePath(effects, ok) {\n let sizeOpen = 0;\n let sizeClose = 0;\n return pathInside;\n\n /**\n * In path.\n *\n * ```markdown\n * > | https://example.com/a\n * ^^\n * ```\n *\n * @type {State}\n */\n function pathInside(code) {\n if (code === 40) {\n sizeOpen++;\n effects.consume(code);\n return pathInside;\n }\n\n // To do: `markdown-rs` also needs this.\n // If this is a paren, and there are less closings than openings,\n // we don’t check for a trail.\n if (code === 41 && sizeClose < sizeOpen) {\n return pathAtPunctuation(code);\n }\n\n // Check whether this trailing punctuation marker is optionally\n // followed by more trailing markers, and then followed\n // by an end.\n if (code === 33 || code === 34 || code === 38 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 60 || code === 63 || code === 93 || code === 95 || code === 126) {\n return effects.check(trail, ok, pathAtPunctuation)(code);\n }\n if (code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n effects.consume(code);\n return pathInside;\n }\n\n /**\n * In path, at potential trailing punctuation, that was not trailing.\n *\n * ```markdown\n * > | https://example.com/a\"b\n * ^\n * ```\n *\n * @type {State}\n */\n function pathAtPunctuation(code) {\n // Count closing parens.\n if (code === 41) {\n sizeClose++;\n }\n effects.consume(code);\n return pathInside;\n }\n}\n\n/**\n * Trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the entire trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | https://example.com\").\n * ^^^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTrail(effects, ok, nok) {\n return trail;\n\n /**\n * In trail of domain or path.\n *\n * ```markdown\n * > | https://example.com\").\n * ^\n * ```\n *\n * @type {State}\n */\n function trail(code) {\n // Regular trailing punctuation.\n if (code === 33 || code === 34 || code === 39 || code === 41 || code === 42 || code === 44 || code === 46 || code === 58 || code === 59 || code === 63 || code === 95 || code === 126) {\n effects.consume(code);\n return trail;\n }\n\n // `&` followed by one or more alphabeticals and then a `;`, is\n // as a whole considered as trailing punctuation.\n // In all other cases, it is considered as continuation of the URL.\n if (code === 38) {\n effects.consume(code);\n return trailCharacterReferenceStart;\n }\n\n // Needed because we allow literals after `[`, as we fix:\n // .\n // Check that it is not followed by `(` or `[`.\n if (code === 93) {\n effects.consume(code);\n return trailBracketAfter;\n }\n if (\n // `<` is an end.\n code === 60 ||\n // So is whitespace.\n code === null || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return nok(code);\n }\n\n /**\n * In trail, after `]`.\n *\n * > 👉 **Note**: this deviates from `cmark-gfm` to fix a bug.\n * > See end of for more.\n *\n * ```markdown\n * > | https://example.com](\n * ^\n * ```\n *\n * @type {State}\n */\n function trailBracketAfter(code) {\n // Whitespace or something that could start a resource or reference is the end.\n // Switch back to trail otherwise.\n if (code === null || code === 40 || code === 91 || markdownLineEndingOrSpace(code) || unicodeWhitespace(code)) {\n return ok(code);\n }\n return trail(code);\n }\n\n /**\n * In character-reference like trail, after `&`.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceStart(code) {\n // When non-alpha, it’s not a trail.\n return asciiAlpha(code) ? trailCharacterReferenceInside(code) : nok(code);\n }\n\n /**\n * In character-reference like trail.\n *\n * ```markdown\n * > | https://example.com&).\n * ^\n * ```\n *\n * @type {State}\n */\n function trailCharacterReferenceInside(code) {\n // Switch back to trail if this is well-formed.\n if (code === 59) {\n effects.consume(code);\n return trail;\n }\n if (asciiAlpha(code)) {\n effects.consume(code);\n return trailCharacterReferenceInside;\n }\n\n // It’s not a trail.\n return nok(code);\n }\n}\n\n/**\n * Dot in email domain trail.\n *\n * This calls `ok` if this *is* the trail, followed by an end, which means\n * the trail is not part of the link.\n * It calls `nok` if this *is* part of the link.\n *\n * ```markdown\n * > | contact@example.org.\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeEmailDomainDotTrail(effects, ok, nok) {\n return start;\n\n /**\n * Dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Must be dot.\n effects.consume(code);\n return after;\n }\n\n /**\n * After dot.\n *\n * ```markdown\n * > | contact@example.org.\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Not a trail if alphanumeric.\n return asciiAlphanumeric(code) ? nok(code) : ok(code);\n }\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousWww(code) {\n return code === null || code === 40 || code === 42 || code === 95 || code === 91 || code === 93 || code === 126 || markdownLineEndingOrSpace(code);\n}\n\n/**\n * See:\n * .\n *\n * @type {Previous}\n */\nfunction previousProtocol(code) {\n return !asciiAlpha(code);\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Previous}\n */\nfunction previousEmail(code) {\n // Do not allow a slash “inside” atext.\n // The reference code is a bit weird, but that’s what it results in.\n // Source: .\n // Other than slash, every preceding character is allowed.\n return !(code === 47 || gfmAtext(code));\n}\n\n/**\n * @param {Code} code\n * @returns {boolean}\n */\nfunction gfmAtext(code) {\n return code === 43 || code === 45 || code === 46 || code === 95 || asciiAlphanumeric(code);\n}\n\n/**\n * @param {Array} events\n * @returns {boolean}\n */\nfunction previousUnbalanced(events) {\n let index = events.length;\n let result = false;\n while (index--) {\n const token = events[index][1];\n if ((token.type === 'labelLink' || token.type === 'labelImage') && !token._balanced) {\n result = true;\n break;\n }\n\n // If we’ve seen this token, and it was marked as not having any unbalanced\n // bracket before it, we can exit.\n if (token._gfmAutolinkLiteralWalkedInto) {\n result = false;\n break;\n }\n }\n if (events.length > 0 && !result) {\n // Mark the last token as “walked into” w/o finding\n // anything.\n events[events.length - 1][1]._gfmAutolinkLiteralWalkedInto = true;\n }\n return result;\n}","/**\n * @import {Event, Exiter, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { blankLine } from 'micromark-core-commonmark';\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEndingOrSpace } from 'micromark-util-character';\nimport { normalizeIdentifier } from 'micromark-util-normalize-identifier';\nconst indent = {\n tokenize: tokenizeIndent,\n partial: true\n};\n\n// To do: micromark should support a `_hiddenGfmFootnoteSupport`, which only\n// affects label start (image).\n// That will let us drop `tokenizePotentialGfmFootnote*`.\n// It currently has a `_hiddenFootnoteSupport`, which affects that and more.\n// That can be removed when `micromark-extension-footnote` is archived.\n\n/**\n * Create an extension for `micromark` to enable GFM footnote syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to\n * enable GFM footnote syntax.\n */\nexport function gfmFootnote() {\n /** @type {Extension} */\n return {\n document: {\n [91]: {\n name: 'gfmFootnoteDefinition',\n tokenize: tokenizeDefinitionStart,\n continuation: {\n tokenize: tokenizeDefinitionContinuation\n },\n exit: gfmFootnoteDefinitionEnd\n }\n },\n text: {\n [91]: {\n name: 'gfmFootnoteCall',\n tokenize: tokenizeGfmFootnoteCall\n },\n [93]: {\n name: 'gfmPotentialFootnoteCall',\n add: 'after',\n tokenize: tokenizePotentialGfmFootnoteCall,\n resolveTo: resolveToPotentialGfmFootnoteCall\n }\n }\n };\n}\n\n// To do: remove after micromark update.\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizePotentialGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n let index = self.events.length;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {Token} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n const token = self.events[index][1];\n if (token.type === \"labelImage\") {\n labelStart = token;\n break;\n }\n\n // Exit if we’ve walked far enough.\n if (token.type === 'gfmFootnoteCall' || token.type === \"labelLink\" || token.type === \"label\" || token.type === \"image\" || token.type === \"link\") {\n break;\n }\n }\n return start;\n\n /**\n * @type {State}\n */\n function start(code) {\n if (!labelStart || !labelStart._balanced) {\n return nok(code);\n }\n const id = normalizeIdentifier(self.sliceSerialize({\n start: labelStart.end,\n end: self.now()\n }));\n if (id.codePointAt(0) !== 94 || !defined.includes(id.slice(1))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return ok(code);\n }\n}\n\n// To do: remove after micromark update.\n/** @type {Resolver} */\nfunction resolveToPotentialGfmFootnoteCall(events, context) {\n let index = events.length;\n /** @type {Token | undefined} */\n let labelStart;\n\n // Find an opening.\n while (index--) {\n if (events[index][1].type === \"labelImage\" && events[index][0] === 'enter') {\n labelStart = events[index][1];\n break;\n }\n }\n // Change the `labelImageMarker` to a `data`.\n events[index + 1][1].type = \"data\";\n events[index + 3][1].type = 'gfmFootnoteCallLabelMarker';\n\n // The whole (without `!`):\n /** @type {Token} */\n const call = {\n type: 'gfmFootnoteCall',\n start: Object.assign({}, events[index + 3][1].start),\n end: Object.assign({}, events[events.length - 1][1].end)\n };\n // The `^` marker\n /** @type {Token} */\n const marker = {\n type: 'gfmFootnoteCallMarker',\n start: Object.assign({}, events[index + 3][1].end),\n end: Object.assign({}, events[index + 3][1].end)\n };\n // Increment the end 1 character.\n marker.end.column++;\n marker.end.offset++;\n marker.end._bufferIndex++;\n /** @type {Token} */\n const string = {\n type: 'gfmFootnoteCallString',\n start: Object.assign({}, marker.end),\n end: Object.assign({}, events[events.length - 1][1].start)\n };\n /** @type {Token} */\n const chunk = {\n type: \"chunkString\",\n contentType: 'string',\n start: Object.assign({}, string.start),\n end: Object.assign({}, string.end)\n };\n\n /** @type {Array} */\n const replacement = [\n // Take the `labelImageMarker` (now `data`, the `!`)\n events[index + 1], events[index + 2], ['enter', call, context],\n // The `[`\n events[index + 3], events[index + 4],\n // The `^`.\n ['enter', marker, context], ['exit', marker, context],\n // Everything in between.\n ['enter', string, context], ['enter', chunk, context], ['exit', chunk, context], ['exit', string, context],\n // The ending (`]`, properly parsed and labelled).\n events[events.length - 2], events[events.length - 1], ['exit', call, context]];\n events.splice(index, events.length - index + 1, ...replacement);\n return events;\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeGfmFootnoteCall(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n let size = 0;\n /** @type {boolean} */\n let data;\n\n // Note: the implementation of `markdown-rs` is different, because it houses\n // core *and* extensions in one project.\n // Therefore, it can include footnote logic inside `label-end`.\n // We can’t do that, but luckily, we can parse footnotes in a simpler way than\n // needed for labels.\n return start;\n\n /**\n * Start of footnote label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteCall');\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n return callStart;\n }\n\n /**\n * After `[`, at `^`.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callStart(code) {\n if (code !== 94) return nok(code);\n effects.enter('gfmFootnoteCallMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallMarker');\n effects.enter('gfmFootnoteCallString');\n effects.enter('chunkString').contentType = 'string';\n return callData;\n }\n\n /**\n * In label.\n *\n * ```markdown\n * > | a [^b] c\n * ^\n * ```\n *\n * @type {State}\n */\n function callData(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteCallString');\n if (!defined.includes(normalizeIdentifier(self.sliceSerialize(token)))) {\n return nok(code);\n }\n effects.enter('gfmFootnoteCallLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteCallLabelMarker');\n effects.exit('gfmFootnoteCall');\n return ok;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? callEscape : callData;\n }\n\n /**\n * On character after escape.\n *\n * ```markdown\n * > | a [^b\\c] d\n * ^\n * ```\n *\n * @type {State}\n */\n function callEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return callData;\n }\n return callData(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionStart(effects, ok, nok) {\n const self = this;\n const defined = self.parser.gfmFootnotes || (self.parser.gfmFootnotes = []);\n /** @type {string} */\n let identifier;\n let size = 0;\n /** @type {boolean | undefined} */\n let data;\n return start;\n\n /**\n * Start of GFM footnote definition.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('gfmFootnoteDefinition')._container = true;\n effects.enter('gfmFootnoteDefinitionLabel');\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n return labelAtMarker;\n }\n\n /**\n * In label, at caret.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAtMarker(code) {\n if (code === 94) {\n effects.enter('gfmFootnoteDefinitionMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionMarker');\n effects.enter('gfmFootnoteDefinitionLabelString');\n effects.enter('chunkString').contentType = 'string';\n return labelInside;\n }\n return nok(code);\n }\n\n /**\n * In label.\n *\n * > 👉 **Note**: `cmark-gfm` prevents whitespace from occurring in footnote\n * > definition labels.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelInside(code) {\n if (\n // Too long.\n size > 999 ||\n // Closing brace with nothing.\n code === 93 && !data ||\n // Space or tab is not supported by GFM for some reason.\n // `\\n` and `[` not being supported makes sense.\n code === null || code === 91 || markdownLineEndingOrSpace(code)) {\n return nok(code);\n }\n if (code === 93) {\n effects.exit('chunkString');\n const token = effects.exit('gfmFootnoteDefinitionLabelString');\n identifier = normalizeIdentifier(self.sliceSerialize(token));\n effects.enter('gfmFootnoteDefinitionLabelMarker');\n effects.consume(code);\n effects.exit('gfmFootnoteDefinitionLabelMarker');\n effects.exit('gfmFootnoteDefinitionLabel');\n return labelAfter;\n }\n if (!markdownLineEndingOrSpace(code)) {\n data = true;\n }\n size++;\n effects.consume(code);\n return code === 92 ? labelEscape : labelInside;\n }\n\n /**\n * After `\\`, at a special character.\n *\n * > 👉 **Note**: `cmark-gfm` currently does not support escaped brackets:\n * > \n *\n * ```markdown\n * > | [^a\\*b]: c\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEscape(code) {\n if (code === 91 || code === 92 || code === 93) {\n effects.consume(code);\n size++;\n return labelInside;\n }\n return labelInside(code);\n }\n\n /**\n * After definition label.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelAfter(code) {\n if (code === 58) {\n effects.enter('definitionMarker');\n effects.consume(code);\n effects.exit('definitionMarker');\n if (!defined.includes(identifier)) {\n defined.push(identifier);\n }\n\n // Any whitespace after the marker is eaten, forming indented code\n // is not possible.\n // No space is also fine, just like a block quote marker.\n return factorySpace(effects, whitespaceAfter, 'gfmFootnoteDefinitionWhitespace');\n }\n return nok(code);\n }\n\n /**\n * After definition prefix.\n *\n * ```markdown\n * > | [^a]: b\n * ^\n * ```\n *\n * @type {State}\n */\n function whitespaceAfter(code) {\n // `markdown-rs` has a wrapping token for the prefix that is closed here.\n return ok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinitionContinuation(effects, ok, nok) {\n /// Start of footnote definition continuation.\n ///\n /// ```markdown\n /// | [^a]: b\n /// > | c\n /// ^\n /// ```\n //\n // Either a blank line, which is okay, or an indented thing.\n return effects.check(blankLine, ok, effects.attempt(indent, ok, nok));\n}\n\n/** @type {Exiter} */\nfunction gfmFootnoteDefinitionEnd(effects) {\n effects.exit('gfmFootnoteDefinition');\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeIndent(effects, ok, nok) {\n const self = this;\n return factorySpace(effects, afterPrefix, 'gfmFootnoteDefinitionIndent', 4 + 1);\n\n /**\n * @type {State}\n */\n function afterPrefix(code) {\n const tail = self.events[self.events.length - 1];\n return tail && tail[1].type === 'gfmFootnoteDefinitionIndent' && tail[2].sliceSerialize(tail[1], true).length === 4 ? ok(code) : nok(code);\n }\n}","/**\n * @import {Options} from 'micromark-extension-gfm-strikethrough'\n * @import {Event, Extension, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { splice } from 'micromark-util-chunked';\nimport { classifyCharacter } from 'micromark-util-classify-character';\nimport { resolveAll } from 'micromark-util-resolve-all';\n/**\n * Create an extension for `micromark` to enable GFM strikethrough syntax.\n *\n * @param {Options | null | undefined} [options={}]\n * Configuration.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions`, to\n * enable GFM strikethrough syntax.\n */\nexport function gfmStrikethrough(options) {\n const options_ = options || {};\n let single = options_.singleTilde;\n const tokenizer = {\n name: 'strikethrough',\n tokenize: tokenizeStrikethrough,\n resolveAll: resolveAllStrikethrough\n };\n if (single === null || single === undefined) {\n single = true;\n }\n return {\n text: {\n [126]: tokenizer\n },\n insideSpan: {\n null: [tokenizer]\n },\n attentionMarkers: {\n null: [126]\n }\n };\n\n /**\n * Take events and resolve strikethrough.\n *\n * @type {Resolver}\n */\n function resolveAllStrikethrough(events, context) {\n let index = -1;\n\n // Walk through all events.\n while (++index < events.length) {\n // Find a token that can close.\n if (events[index][0] === 'enter' && events[index][1].type === 'strikethroughSequenceTemporary' && events[index][1]._close) {\n let open = index;\n\n // Now walk back to find an opener.\n while (open--) {\n // Find a token that can open the closer.\n if (events[open][0] === 'exit' && events[open][1].type === 'strikethroughSequenceTemporary' && events[open][1]._open &&\n // If the sizes are the same:\n events[index][1].end.offset - events[index][1].start.offset === events[open][1].end.offset - events[open][1].start.offset) {\n events[index][1].type = 'strikethroughSequence';\n events[open][1].type = 'strikethroughSequence';\n\n /** @type {Token} */\n const strikethrough = {\n type: 'strikethrough',\n start: Object.assign({}, events[open][1].start),\n end: Object.assign({}, events[index][1].end)\n };\n\n /** @type {Token} */\n const text = {\n type: 'strikethroughText',\n start: Object.assign({}, events[open][1].end),\n end: Object.assign({}, events[index][1].start)\n };\n\n // Opening.\n /** @type {Array} */\n const nextEvents = [['enter', strikethrough, context], ['enter', events[open][1], context], ['exit', events[open][1], context], ['enter', text, context]];\n const insideSpan = context.parser.constructs.insideSpan.null;\n if (insideSpan) {\n // Between.\n splice(nextEvents, nextEvents.length, 0, resolveAll(insideSpan, events.slice(open + 1, index), context));\n }\n\n // Closing.\n splice(nextEvents, nextEvents.length, 0, [['exit', text, context], ['enter', events[index][1], context], ['exit', events[index][1], context], ['exit', strikethrough, context]]);\n splice(events, open - 1, index - open + 3, nextEvents);\n index = open + nextEvents.length - 2;\n break;\n }\n }\n }\n }\n index = -1;\n while (++index < events.length) {\n if (events[index][1].type === 'strikethroughSequenceTemporary') {\n events[index][1].type = \"data\";\n }\n }\n return events;\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeStrikethrough(effects, ok, nok) {\n const previous = this.previous;\n const events = this.events;\n let size = 0;\n return start;\n\n /** @type {State} */\n function start(code) {\n if (previous === 126 && events[events.length - 1][1].type !== \"characterEscape\") {\n return nok(code);\n }\n effects.enter('strikethroughSequenceTemporary');\n return more(code);\n }\n\n /** @type {State} */\n function more(code) {\n const before = classifyCharacter(previous);\n if (code === 126) {\n // If this is the third marker, exit.\n if (size > 1) return nok(code);\n effects.consume(code);\n size++;\n return more;\n }\n if (size < 2 && !single) return nok(code);\n const token = effects.exit('strikethroughSequenceTemporary');\n const after = classifyCharacter(code);\n token._open = !after || after === 2 && Boolean(before);\n token._close = !before || before === 2 && Boolean(after);\n return ok(code);\n }\n }\n}","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n// Port of `edit_map.rs` from `markdown-rs`.\n// This should move to `markdown-js` later.\n\n// Deal with several changes in events, batching them together.\n//\n// Preferably, changes should be kept to a minimum.\n// Sometimes, it’s needed to change the list of events, because parsing can be\n// messy, and it helps to expose a cleaner interface of events to the compiler\n// and other users.\n// It can also help to merge many adjacent similar events.\n// And, in other cases, it’s needed to parse subcontent: pass some events\n// through another tokenizer and inject the result.\n\n/**\n * @typedef {[number, number, Array]} Change\n * @typedef {[number, number, number]} Jump\n */\n\n/**\n * Tracks a bunch of edits.\n */\nexport class EditMap {\n /**\n * Create a new edit map.\n */\n constructor() {\n /**\n * Record of changes.\n *\n * @type {Array}\n */\n this.map = [];\n }\n\n /**\n * Create an edit: a remove and/or add at a certain place.\n *\n * @param {number} index\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\n add(index, remove, add) {\n addImplementation(this, index, remove, add);\n }\n\n // To do: add this when moving to `micromark`.\n // /**\n // * Create an edit: but insert `add` before existing additions.\n // *\n // * @param {number} index\n // * @param {number} remove\n // * @param {Array} add\n // * @returns {undefined}\n // */\n // addBefore(index, remove, add) {\n // addImplementation(this, index, remove, add, true)\n // }\n\n /**\n * Done, change the events.\n *\n * @param {Array} events\n * @returns {undefined}\n */\n consume(events) {\n this.map.sort(function (a, b) {\n return a[0] - b[0];\n });\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (this.map.length === 0) {\n return;\n }\n\n // To do: if links are added in events, like they are in `markdown-rs`,\n // this is needed.\n // // Calculate jumps: where items in the current list move to.\n // /** @type {Array} */\n // const jumps = []\n // let index = 0\n // let addAcc = 0\n // let removeAcc = 0\n // while (index < this.map.length) {\n // const [at, remove, add] = this.map[index]\n // removeAcc += remove\n // addAcc += add.length\n // jumps.push([at, removeAcc, addAcc])\n // index += 1\n // }\n //\n // . shiftLinks(events, jumps)\n\n let index = this.map.length;\n /** @type {Array>} */\n const vecs = [];\n while (index > 0) {\n index -= 1;\n vecs.push(events.slice(this.map[index][0] + this.map[index][1]), this.map[index][2]);\n\n // Truncate rest.\n events.length = this.map[index][0];\n }\n vecs.push(events.slice());\n events.length = 0;\n let slice = vecs.pop();\n while (slice) {\n for (const element of slice) {\n events.push(element);\n }\n slice = vecs.pop();\n }\n\n // Truncate everything.\n this.map.length = 0;\n }\n}\n\n/**\n * Create an edit.\n *\n * @param {EditMap} editMap\n * @param {number} at\n * @param {number} remove\n * @param {Array} add\n * @returns {undefined}\n */\nfunction addImplementation(editMap, at, remove, add) {\n let index = 0;\n\n /* c8 ignore next 3 -- `resolve` is never called without tables, so without edits. */\n if (remove === 0 && add.length === 0) {\n return;\n }\n while (index < editMap.map.length) {\n if (editMap.map[index][0] === at) {\n editMap.map[index][1] += remove;\n\n // To do: before not used by tables, use when moving to micromark.\n // if (before) {\n // add.push(...editMap.map[index][2])\n // editMap.map[index][2] = add\n // } else {\n editMap.map[index][2].push(...add);\n // }\n\n return;\n }\n index += 1;\n }\n editMap.map.push([at, remove, add]);\n}\n\n// /**\n// * Shift `previous` and `next` links according to `jumps`.\n// *\n// * This fixes links in case there are events removed or added between them.\n// *\n// * @param {Array} events\n// * @param {Array} jumps\n// */\n// function shiftLinks(events, jumps) {\n// let jumpIndex = 0\n// let index = 0\n// let add = 0\n// let rm = 0\n\n// while (index < events.length) {\n// const rmCurr = rm\n\n// while (jumpIndex < jumps.length && jumps[jumpIndex][0] <= index) {\n// add = jumps[jumpIndex][2]\n// rm = jumps[jumpIndex][1]\n// jumpIndex += 1\n// }\n\n// // Ignore items that will be removed.\n// if (rm > rmCurr) {\n// index += rm - rmCurr\n// } else {\n// // ?\n// // if let Some(link) = &events[index].link {\n// // if let Some(next) = link.next {\n// // events[next].link.as_mut().unwrap().previous = Some(index + add - rm);\n// // while jumpIndex < jumps.len() && jumps[jumpIndex].0 <= next {\n// // add = jumps[jumpIndex].2;\n// // rm = jumps[jumpIndex].1;\n// // jumpIndex += 1;\n// // }\n// // events[index].link.as_mut().unwrap().next = Some(next + add - rm);\n// // index = next;\n// // continue;\n// // }\n// // }\n// index += 1\n// }\n// }\n// }","/**\n * @import {Event} from 'micromark-util-types'\n */\n\n/**\n * @typedef {'center' | 'left' | 'none' | 'right'} Align\n */\n\n/**\n * Figure out the alignment of a GFM table.\n *\n * @param {Readonly>} events\n * List of events.\n * @param {number} index\n * Table enter event.\n * @returns {Array}\n * List of aligns.\n */\nexport function gfmTableAlign(events, index) {\n let inDelimiterRow = false;\n /** @type {Array} */\n const align = [];\n while (index < events.length) {\n const event = events[index];\n if (inDelimiterRow) {\n if (event[0] === 'enter') {\n // Start of alignment value: set a new column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n if (event[1].type === 'tableContent') {\n align.push(events[index + 1][1].type === 'tableDelimiterMarker' ? 'left' : 'none');\n }\n }\n // Exits:\n // End of alignment value: change the column.\n // To do: `markdown-rs` uses `tableDelimiterCellValue`.\n else if (event[1].type === 'tableContent') {\n if (events[index - 1][1].type === 'tableDelimiterMarker') {\n const alignIndex = align.length - 1;\n align[alignIndex] = align[alignIndex] === 'left' ? 'center' : 'right';\n }\n }\n // Done!\n else if (event[1].type === 'tableDelimiterRow') {\n break;\n }\n } else if (event[0] === 'enter' && event[1].type === 'tableDelimiterRow') {\n inDelimiterRow = true;\n }\n index += 1;\n }\n return align;\n}","/**\n * @import {Event, Extension, Point, Resolver, State, Token, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\n/**\n * @typedef {[number, number, number, number]} Range\n * Cell info.\n *\n * @typedef {0 | 1 | 2 | 3} RowKind\n * Where we are: `1` for head row, `2` for delimiter row, `3` for body row.\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nimport { EditMap } from './edit-map.js';\nimport { gfmTableAlign } from './infer.js';\n\n/**\n * Create an HTML extension for `micromark` to support GitHub tables syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * table syntax.\n */\nexport function gfmTable() {\n return {\n flow: {\n null: {\n name: 'table',\n tokenize: tokenizeTable,\n resolveAll: resolveTable\n }\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTable(effects, ok, nok) {\n const self = this;\n let size = 0;\n let sizeB = 0;\n /** @type {boolean | undefined} */\n let seen;\n return start;\n\n /**\n * Start of a GFM table.\n *\n * If there is a valid table row or table head before, then we try to parse\n * another row.\n * Otherwise, we try to parse a head.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * > | | b |\n * ^\n * ```\n * @type {State}\n */\n function start(code) {\n let index = self.events.length - 1;\n while (index > -1) {\n const type = self.events[index][1].type;\n if (type === \"lineEnding\" ||\n // Note: markdown-rs uses `whitespace` instead of `linePrefix`\n type === \"linePrefix\") index--;else break;\n }\n const tail = index > -1 ? self.events[index][1].type : null;\n const next = tail === 'tableHead' || tail === 'tableRow' ? bodyRowStart : headRowBefore;\n\n // Don’t allow lazy body rows.\n if (next === bodyRowStart && self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n return next(code);\n }\n\n /**\n * Before table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBefore(code) {\n effects.enter('tableHead');\n effects.enter('tableRow');\n return headRowStart(code);\n }\n\n /**\n * Before table head row, after whitespace.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowStart(code) {\n if (code === 124) {\n return headRowBreak(code);\n }\n\n // To do: micromark-js should let us parse our own whitespace in extensions,\n // like `markdown-rs`:\n //\n // ```js\n // // 4+ spaces.\n // if (markdownSpace(code)) {\n // return nok(code)\n // }\n // ```\n\n seen = true;\n // Count the first character, that isn’t a pipe, double.\n sizeB += 1;\n return headRowBreak(code);\n }\n\n /**\n * At break in table head row.\n *\n * ```markdown\n * > | | a |\n * ^\n * ^\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowBreak(code) {\n if (code === null) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownLineEnding(code)) {\n // If anything other than one pipe (ignoring whitespace) was used, it’s fine.\n if (sizeB > 1) {\n sizeB = 0;\n // To do: check if this works.\n // Feel free to interrupt:\n self.interrupt = true;\n effects.exit('tableRow');\n effects.enter(\"lineEnding\");\n effects.consume(code);\n effects.exit(\"lineEnding\");\n return headDelimiterStart;\n }\n\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n if (markdownSpace(code)) {\n // To do: check if this is fine.\n // effects.attempt(State::Next(StateName::GfmTableHeadRowBreak), State::Nok)\n // State::Retry(space_or_tab(tokenizer))\n return factorySpace(effects, headRowBreak, \"whitespace\")(code);\n }\n sizeB += 1;\n if (seen) {\n seen = false;\n // Header cell count.\n size += 1;\n }\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n // Whether a delimiter was seen.\n seen = true;\n return headRowBreak;\n }\n\n // Anything else is cell data.\n effects.enter(\"data\");\n return headRowData(code);\n }\n\n /**\n * In table head row data.\n *\n * ```markdown\n * > | | a |\n * ^\n * | | - |\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return headRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? headRowEscape : headRowData;\n }\n\n /**\n * In table head row escape.\n *\n * ```markdown\n * > | | a\\-b |\n * ^\n * | | ---- |\n * | | c |\n * ```\n *\n * @type {State}\n */\n function headRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return headRowData;\n }\n return headRowData(code);\n }\n\n /**\n * Before delimiter row.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterStart(code) {\n // Reset `interrupt`.\n self.interrupt = false;\n\n // Note: in `markdown-rs`, we need to handle piercing here too.\n if (self.parser.lazy[self.now().line]) {\n return nok(code);\n }\n effects.enter('tableDelimiterRow');\n // Track if we’ve seen a `:` or `|`.\n seen = false;\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterBefore, \"linePrefix\", self.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4)(code);\n }\n return headDelimiterBefore(code);\n }\n\n /**\n * Before delimiter row, after optional whitespace.\n *\n * Reused when a `|` is found later, to parse another cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * | | b |\n * ```\n *\n * @type {State}\n */\n function headDelimiterBefore(code) {\n if (code === 45 || code === 58) {\n return headDelimiterValueBefore(code);\n }\n if (code === 124) {\n seen = true;\n // If we start with a pipe, we open a cell marker.\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return headDelimiterCellBefore;\n }\n\n // More whitespace / empty row not allowed at start.\n return headDelimiterNok(code);\n }\n\n /**\n * After `|`, before delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellBefore(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterValueBefore, \"whitespace\")(code);\n }\n return headDelimiterValueBefore(code);\n }\n\n /**\n * Before delimiter cell value.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterValueBefore(code) {\n // Align: left.\n if (code === 58) {\n sizeB += 1;\n seen = true;\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterLeftAlignmentAfter;\n }\n\n // Align: none.\n if (code === 45) {\n sizeB += 1;\n // To do: seems weird that this *isn’t* left aligned, but that state is used?\n return headDelimiterLeftAlignmentAfter(code);\n }\n if (code === null || markdownLineEnding(code)) {\n return headDelimiterCellAfter(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * After delimiter cell left alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | :- |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterLeftAlignmentAfter(code) {\n if (code === 45) {\n effects.enter('tableDelimiterFiller');\n return headDelimiterFiller(code);\n }\n\n // Anything else is not ok after the left-align colon.\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter cell filler.\n *\n * ```markdown\n * | | a |\n * > | | - |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterFiller(code) {\n if (code === 45) {\n effects.consume(code);\n return headDelimiterFiller;\n }\n\n // Align is `center` if it was `left`, `right` otherwise.\n if (code === 58) {\n seen = true;\n effects.exit('tableDelimiterFiller');\n effects.enter('tableDelimiterMarker');\n effects.consume(code);\n effects.exit('tableDelimiterMarker');\n return headDelimiterRightAlignmentAfter;\n }\n effects.exit('tableDelimiterFiller');\n return headDelimiterRightAlignmentAfter(code);\n }\n\n /**\n * After delimiter cell right alignment marker.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterRightAlignmentAfter(code) {\n if (markdownSpace(code)) {\n return factorySpace(effects, headDelimiterCellAfter, \"whitespace\")(code);\n }\n return headDelimiterCellAfter(code);\n }\n\n /**\n * After delimiter cell.\n *\n * ```markdown\n * | | a |\n * > | | -: |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterCellAfter(code) {\n if (code === 124) {\n return headDelimiterBefore(code);\n }\n if (code === null || markdownLineEnding(code)) {\n // Exit when:\n // * there was no `:` or `|` at all (it’s a thematic break or setext\n // underline instead)\n // * the header cell count is not the delimiter cell count\n if (!seen || size !== sizeB) {\n return headDelimiterNok(code);\n }\n\n // Note: in markdown-rs`, a reset is needed here.\n effects.exit('tableDelimiterRow');\n effects.exit('tableHead');\n // To do: in `markdown-rs`, resolvers need to be registered manually.\n // effects.register_resolver(ResolveName::GfmTable)\n return ok(code);\n }\n return headDelimiterNok(code);\n }\n\n /**\n * In delimiter row, at a disallowed byte.\n *\n * ```markdown\n * | | a |\n * > | | x |\n * ^\n * ```\n *\n * @type {State}\n */\n function headDelimiterNok(code) {\n // Note: in `markdown-rs`, we need to reset, in `micromark-js` we don‘t.\n return nok(code);\n }\n\n /**\n * Before table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowStart(code) {\n // Note: in `markdown-rs` we need to manually take care of a prefix,\n // but in `micromark-js` that is done for us, so if we’re here, we’re\n // never at whitespace.\n effects.enter('tableRow');\n return bodyRowBreak(code);\n }\n\n /**\n * At break in table body row.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ^\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowBreak(code) {\n if (code === 124) {\n effects.enter('tableCellDivider');\n effects.consume(code);\n effects.exit('tableCellDivider');\n return bodyRowBreak;\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('tableRow');\n return ok(code);\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, bodyRowBreak, \"whitespace\")(code);\n }\n\n // Anything else is cell content.\n effects.enter(\"data\");\n return bodyRowData(code);\n }\n\n /**\n * In table body row data.\n *\n * ```markdown\n * | | a |\n * | | - |\n * > | | b |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowData(code) {\n if (code === null || code === 124 || markdownLineEndingOrSpace(code)) {\n effects.exit(\"data\");\n return bodyRowBreak(code);\n }\n effects.consume(code);\n return code === 92 ? bodyRowEscape : bodyRowData;\n }\n\n /**\n * In table body row escape.\n *\n * ```markdown\n * | | a |\n * | | ---- |\n * > | | b\\-c |\n * ^\n * ```\n *\n * @type {State}\n */\n function bodyRowEscape(code) {\n if (code === 92 || code === 124) {\n effects.consume(code);\n return bodyRowData;\n }\n return bodyRowData(code);\n }\n}\n\n/** @type {Resolver} */\n\nfunction resolveTable(events, context) {\n let index = -1;\n let inFirstCellAwaitingPipe = true;\n /** @type {RowKind} */\n let rowKind = 0;\n /** @type {Range} */\n let lastCell = [0, 0, 0, 0];\n /** @type {Range} */\n let cell = [0, 0, 0, 0];\n let afterHeadAwaitingFirstBodyRow = false;\n let lastTableEnd = 0;\n /** @type {Token | undefined} */\n let currentTable;\n /** @type {Token | undefined} */\n let currentBody;\n /** @type {Token | undefined} */\n let currentCell;\n const map = new EditMap();\n while (++index < events.length) {\n const event = events[index];\n const token = event[1];\n if (event[0] === 'enter') {\n // Start of head.\n if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = false;\n\n // Inject previous (body end and) table end.\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n currentBody = undefined;\n lastTableEnd = 0;\n }\n\n // Inject table start.\n currentTable = {\n type: 'table',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentTable, context]]);\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n inFirstCellAwaitingPipe = true;\n currentCell = undefined;\n lastCell = [0, 0, 0, 0];\n cell = [0, index + 1, 0, 0];\n\n // Inject table body start.\n if (afterHeadAwaitingFirstBodyRow) {\n afterHeadAwaitingFirstBodyRow = false;\n currentBody = {\n type: 'tableBody',\n start: Object.assign({}, token.start),\n // Note: correct end is set later.\n end: Object.assign({}, token.end)\n };\n map.add(index, 0, [['enter', currentBody, context]]);\n }\n rowKind = token.type === 'tableDelimiterRow' ? 2 : currentBody ? 3 : 1;\n }\n // Cell data.\n else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n inFirstCellAwaitingPipe = false;\n\n // First value in cell.\n if (cell[2] === 0) {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n lastCell = [0, 0, 0, 0];\n }\n cell[2] = index;\n }\n } else if (token.type === 'tableCellDivider') {\n if (inFirstCellAwaitingPipe) {\n inFirstCellAwaitingPipe = false;\n } else {\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, undefined, currentCell);\n }\n lastCell = cell;\n cell = [lastCell[1], index, 0, 0];\n }\n }\n }\n // Exit events.\n else if (token.type === 'tableHead') {\n afterHeadAwaitingFirstBodyRow = true;\n lastTableEnd = index;\n } else if (token.type === 'tableRow' || token.type === 'tableDelimiterRow') {\n lastTableEnd = index;\n if (lastCell[1] !== 0) {\n cell[0] = cell[1];\n currentCell = flushCell(map, context, lastCell, rowKind, index, currentCell);\n } else if (cell[1] !== 0) {\n currentCell = flushCell(map, context, cell, rowKind, index, currentCell);\n }\n rowKind = 0;\n } else if (rowKind && (token.type === \"data\" || token.type === 'tableDelimiterMarker' || token.type === 'tableDelimiterFiller')) {\n cell[3] = index;\n }\n }\n if (lastTableEnd !== 0) {\n flushTableEnd(map, context, lastTableEnd, currentTable, currentBody);\n }\n map.consume(context.events);\n\n // To do: move this into `html`, when events are exposed there.\n // That’s what `markdown-rs` does.\n // That needs updates to `mdast-util-gfm-table`.\n index = -1;\n while (++index < context.events.length) {\n const event = context.events[index];\n if (event[0] === 'enter' && event[1].type === 'table') {\n event[1]._align = gfmTableAlign(context.events, index);\n }\n }\n return events;\n}\n\n/**\n * Generate a cell.\n *\n * @param {EditMap} map\n * @param {Readonly} context\n * @param {Readonly} range\n * @param {RowKind} rowKind\n * @param {number | undefined} rowEnd\n * @param {Token | undefined} previousCell\n * @returns {Token | undefined}\n */\n// eslint-disable-next-line max-params\nfunction flushCell(map, context, range, rowKind, rowEnd, previousCell) {\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCell' : 'tableCell'\n const groupName = rowKind === 1 ? 'tableHeader' : rowKind === 2 ? 'tableDelimiter' : 'tableData';\n // `markdown-rs` uses:\n // rowKind === 2 ? 'tableDelimiterCellValue' : 'tableCellText'\n const valueName = 'tableContent';\n\n // Insert an exit for the previous cell, if there is one.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[0] !== 0) {\n previousCell.end = Object.assign({}, getPoint(context.events, range[0]));\n map.add(range[0], 0, [['exit', previousCell, context]]);\n }\n\n // Insert enter of this cell.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^^^^-- this cell\n // ```\n const now = getPoint(context.events, range[1]);\n previousCell = {\n type: groupName,\n start: Object.assign({}, now),\n // Note: correct end is set later.\n end: Object.assign({}, now)\n };\n map.add(range[1], 0, [['enter', previousCell, context]]);\n\n // Insert text start at first data start and end at last data end, and\n // remove events between.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- enter\n // ^-- exit\n // ^^^^-- this cell\n // ```\n if (range[2] !== 0) {\n const relatedStart = getPoint(context.events, range[2]);\n const relatedEnd = getPoint(context.events, range[3]);\n /** @type {Token} */\n const valueToken = {\n type: valueName,\n start: Object.assign({}, relatedStart),\n end: Object.assign({}, relatedEnd)\n };\n map.add(range[2], 0, [['enter', valueToken, context]]);\n if (rowKind !== 2) {\n // Fix positional info on remaining events\n const start = context.events[range[2]];\n const end = context.events[range[3]];\n start[1].end = Object.assign({}, end[1].end);\n start[1].type = \"chunkText\";\n start[1].contentType = \"text\";\n\n // Remove if needed.\n if (range[3] > range[2] + 1) {\n const a = range[2] + 1;\n const b = range[3] - range[2] - 1;\n map.add(a, b, []);\n }\n }\n map.add(range[3] + 1, 0, [['exit', valueToken, context]]);\n }\n\n // Insert an exit for the last cell, if at the row end.\n //\n // ```markdown\n // > | | aa | bb | cc |\n // ^-- exit\n // ^^^^^^-- this cell (the last one contains two “between” parts)\n // ```\n if (rowEnd !== undefined) {\n previousCell.end = Object.assign({}, getPoint(context.events, rowEnd));\n map.add(rowEnd, 0, [['exit', previousCell, context]]);\n previousCell = undefined;\n }\n return previousCell;\n}\n\n/**\n * Generate table end (and table body end).\n *\n * @param {Readonly} map\n * @param {Readonly} context\n * @param {number} index\n * @param {Token} table\n * @param {Token | undefined} tableBody\n */\n// eslint-disable-next-line max-params\nfunction flushTableEnd(map, context, index, table, tableBody) {\n /** @type {Array} */\n const exits = [];\n const related = getPoint(context.events, index);\n if (tableBody) {\n tableBody.end = Object.assign({}, related);\n exits.push(['exit', tableBody, context]);\n }\n table.end = Object.assign({}, related);\n exits.push(['exit', table, context]);\n map.add(index + 1, 0, exits);\n}\n\n/**\n * @param {Readonly>} events\n * @param {number} index\n * @returns {Readonly}\n */\nfunction getPoint(events, index) {\n const event = events[index];\n const side = event[0] === 'enter' ? 'start' : 'end';\n return event[1][side];\n}","/**\n * @import {Extension, State, TokenizeContext, Tokenizer} from 'micromark-util-types'\n */\n\nimport { factorySpace } from 'micromark-factory-space';\nimport { markdownLineEnding, markdownLineEndingOrSpace, markdownSpace } from 'micromark-util-character';\nconst tasklistCheck = {\n name: 'tasklistCheck',\n tokenize: tokenizeTasklistCheck\n};\n\n/**\n * Create an HTML extension for `micromark` to support GFM task list items\n * syntax.\n *\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM task list items when serializing to HTML.\n */\nexport function gfmTaskListItem() {\n return {\n text: {\n [91]: tasklistCheck\n }\n };\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTasklistCheck(effects, ok, nok) {\n const self = this;\n return open;\n\n /**\n * At start of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (\n // Exit if there’s stuff before.\n self.previous !== null ||\n // Exit if not in the first content that is the first child of a list\n // item.\n !self._gfmTasklistFirstContentOfListItem) {\n return nok(code);\n }\n effects.enter('taskListCheck');\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n return inside;\n }\n\n /**\n * In task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // Currently we match how GH works in files.\n // To match how GH works in comments, use `markdownSpace` (`[\\t ]`) instead\n // of `markdownLineEndingOrSpace` (`[\\t\\n\\r ]`).\n if (markdownLineEndingOrSpace(code)) {\n effects.enter('taskListCheckValueUnchecked');\n effects.consume(code);\n effects.exit('taskListCheckValueUnchecked');\n return close;\n }\n if (code === 88 || code === 120) {\n effects.enter('taskListCheckValueChecked');\n effects.consume(code);\n effects.exit('taskListCheckValueChecked');\n return close;\n }\n return nok(code);\n }\n\n /**\n * At close of task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function close(code) {\n if (code === 93) {\n effects.enter('taskListCheckMarker');\n effects.consume(code);\n effects.exit('taskListCheckMarker');\n effects.exit('taskListCheck');\n return after;\n }\n return nok(code);\n }\n\n /**\n * @type {State}\n */\n function after(code) {\n // EOL in paragraph means there must be something else after it.\n if (markdownLineEnding(code)) {\n return ok(code);\n }\n\n // Space or tab?\n // Check what comes after.\n if (markdownSpace(code)) {\n return effects.check({\n tokenize: spaceThenNonSpace\n }, ok, nok)(code);\n }\n\n // EOF, or non-whitespace, both wrong.\n return nok(code);\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction spaceThenNonSpace(effects, ok, nok) {\n return factorySpace(effects, after, \"whitespace\");\n\n /**\n * After whitespace, after task list item check.\n *\n * ```markdown\n * > | * [x] y.\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // EOF means there was nothing, so bad.\n // EOL means there’s content after it, so good.\n // Impossible to have more spaces.\n // Anything else is good.\n return code === null ? nok(code) : ok(code);\n }\n}","/// \n/// \n\n/**\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast-util-gfm').Options} MdastOptions\n * @typedef {import('micromark-extension-gfm').Options} MicromarkOptions\n * @typedef {import('unified').Processor} Processor\n */\n\n/**\n * @typedef {MicromarkOptions & MdastOptions} Options\n * Configuration.\n */\n\nimport {gfmFromMarkdown, gfmToMarkdown} from 'mdast-util-gfm'\nimport {gfm} from 'micromark-extension-gfm'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/**\n * Add support GFM (autolink literals, footnotes, strikethrough, tables,\n * tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function remarkGfm(options) {\n // @ts-expect-error: TS is wrong about `this`.\n // eslint-disable-next-line unicorn/no-this-assignment\n const self = /** @type {Processor} */ (this)\n const settings = options || emptyOptions\n const data = self.data()\n\n const micromarkExtensions =\n data.micromarkExtensions || (data.micromarkExtensions = [])\n const fromMarkdownExtensions =\n data.fromMarkdownExtensions || (data.fromMarkdownExtensions = [])\n const toMarkdownExtensions =\n data.toMarkdownExtensions || (data.toMarkdownExtensions = [])\n\n micromarkExtensions.push(gfm(settings))\n fromMarkdownExtensions.push(gfmFromMarkdown())\n toMarkdownExtensions.push(gfmToMarkdown(settings))\n}\n","/**\n * @typedef {import('micromark-extension-gfm-footnote').HtmlOptions} HtmlOptions\n * @typedef {import('micromark-extension-gfm-strikethrough').Options} Options\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {\n combineExtensions,\n combineHtmlExtensions\n} from 'micromark-util-combine-extensions'\nimport {\n gfmAutolinkLiteral,\n gfmAutolinkLiteralHtml\n} from 'micromark-extension-gfm-autolink-literal'\nimport {gfmFootnote, gfmFootnoteHtml} from 'micromark-extension-gfm-footnote'\nimport {\n gfmStrikethrough,\n gfmStrikethroughHtml\n} from 'micromark-extension-gfm-strikethrough'\nimport {gfmTable, gfmTableHtml} from 'micromark-extension-gfm-table'\nimport {gfmTagfilterHtml} from 'micromark-extension-gfm-tagfilter'\nimport {\n gfmTaskListItem,\n gfmTaskListItemHtml\n} from 'micromark-extension-gfm-task-list-item'\n\n/**\n * Create an extension for `micromark` to enable GFM syntax.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-strikethrough`.\n * @returns {Extension}\n * Extension for `micromark` that can be passed in `extensions` to enable GFM\n * syntax.\n */\nexport function gfm(options) {\n return combineExtensions([\n gfmAutolinkLiteral(),\n gfmFootnote(),\n gfmStrikethrough(options),\n gfmTable(),\n gfmTaskListItem()\n ])\n}\n\n/**\n * Create an extension for `micromark` to support GFM when serializing to HTML.\n *\n * @param {HtmlOptions | null | undefined} [options]\n * Configuration (optional).\n *\n * Passed to `micromark-extens-gfm-footnote`.\n * @returns {HtmlExtension}\n * Extension for `micromark` that can be passed in `htmlExtensions` to\n * support GFM when serializing to HTML.\n */\nexport function gfmHtml(options) {\n return combineHtmlExtensions([\n gfmAutolinkLiteralHtml(),\n gfmFootnoteHtml(options),\n gfmStrikethroughHtml(),\n gfmTableHtml(),\n gfmTagfilterHtml(),\n gfmTaskListItemHtml()\n ])\n}\n","/**\n * @typedef {import('mdast-util-from-markdown').Extension} FromMarkdownExtension\n * @typedef {import('mdast-util-to-markdown').Options} ToMarkdownExtension\n */\n\n/**\n * @typedef {import('mdast-util-gfm-table').Options} Options\n * Configuration.\n */\n\nimport {\n gfmAutolinkLiteralFromMarkdown,\n gfmAutolinkLiteralToMarkdown\n} from 'mdast-util-gfm-autolink-literal'\nimport {\n gfmFootnoteFromMarkdown,\n gfmFootnoteToMarkdown\n} from 'mdast-util-gfm-footnote'\nimport {\n gfmStrikethroughFromMarkdown,\n gfmStrikethroughToMarkdown\n} from 'mdast-util-gfm-strikethrough'\nimport {gfmTableFromMarkdown, gfmTableToMarkdown} from 'mdast-util-gfm-table'\nimport {\n gfmTaskListItemFromMarkdown,\n gfmTaskListItemToMarkdown\n} from 'mdast-util-gfm-task-list-item'\n\n/**\n * Create an extension for `mdast-util-from-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @returns {Array}\n * Extension for `mdast-util-from-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmFromMarkdown() {\n return [\n gfmAutolinkLiteralFromMarkdown(),\n gfmFootnoteFromMarkdown(),\n gfmStrikethroughFromMarkdown(),\n gfmTableFromMarkdown(),\n gfmTaskListItemFromMarkdown()\n ]\n}\n\n/**\n * Create an extension for `mdast-util-to-markdown` to enable GFM (autolink\n * literals, footnotes, strikethrough, tables, tasklists).\n *\n * @param {Options | null | undefined} [options]\n * Configuration.\n * @returns {ToMarkdownExtension}\n * Extension for `mdast-util-to-markdown` to enable GFM (autolink literals,\n * footnotes, strikethrough, tables, tasklists).\n */\nexport function gfmToMarkdown(options) {\n return {\n extensions: [\n gfmAutolinkLiteralToMarkdown(),\n gfmFootnoteToMarkdown(),\n gfmStrikethroughToMarkdown(),\n gfmTableToMarkdown(options),\n gfmTaskListItemToMarkdown()\n ]\n }\n}\n","/**\r\n * Example Usage:\r\n * ```\r\n * \r\n * ```\r\n*/\r\n\r\nimport React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\n/**\r\n * A reusable message input component for chat interfaces.\r\n*/\r\n\r\nconst MessageInput = ({\r\n onSend,\r\n handleInputChange,\r\n value,\r\n placeholder = \"Start typing...\",\r\n buttonLabel = \"Send\",\r\n customStyles = null,\r\n inputComponentStyles = null,\r\n showTyping = false,\r\n}) => {\r\n return (\r\n
\r\n {\r\n if (e.key === \"Enter\" && !showTyping){\r\n onSend();\r\n }\r\n }}\r\n style={inputComponentStyles}\r\n className=\"message-input-field\"\r\n />\r\n \r\n {buttonLabel}\r\n \r\n
\r\n );\r\n};\r\n\r\nMessageInput.propTypes = {\r\n /**\r\n * Callback to send the current message. Triggered on button click or pressing \"Enter\".\r\n */\r\n onSend: PropTypes.func.isRequired,\r\n /**\r\n * Callback to handle input field changes.\r\n */\r\n handleInputChange: PropTypes.func.isRequired,\r\n /**\r\n * The current value of the input field.\r\n */\r\n value: PropTypes.string,\r\n /**\r\n * Placeholder text for the input field. Default is `\"Start typing...\"`.\r\n */\r\n placeholder: PropTypes.string,\r\n /**\r\n * Label for the send button. Default is `\"Send\"`.\r\n */\r\n buttonLabel: PropTypes.string,\r\n /**\r\n * Inline styles for the container holding the input and button.\r\n */\r\n customStyles: PropTypes.object,\r\n /**\r\n * Inline styles for the input field.\r\n */\r\n inputComponentStyles: PropTypes.object,\r\n /**\r\n * Disable button when waiting for message.\r\n */\r\n showTyping: PropTypes.bool,\r\n};\r\n\r\nexport default MessageInput;\r\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./indicatorStyle.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./indicatorStyle.css\";\n export default content && content.locals ? content.locals : undefined;\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport \"../styles/indicatorStyle.css\"\r\n\r\n/**\r\n * A resuable dots typing indicator\r\n*/\r\n\r\nconst TypingIndicatorDots = ({ color = \"gray\" }) => {\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nTypingIndicatorDots.propTypes = {\r\n /**\r\n * Color of the dots\r\n */\r\n color: PropTypes.string,\r\n};\r\n\r\nexport default TypingIndicatorDots;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nimport \"../styles/indicatorStyle.css\"\r\n\r\n/**\r\n * A resuable spinner typing indicator\r\n*/\r\nconst SPINNER_SIZE = 20;\r\n\r\nconst TypingIndicatorSpinner = ({ size = SPINNER_SIZE, color = \"gray\" }) => {\r\n return (\r\n
\r\n );\r\n};\r\n\r\nTypingIndicatorSpinner.propTypes = {\r\n /**\r\n * size of the spinner\r\n */\r\n size: PropTypes.number,\r\n /**\r\n * Color of the spinner\r\n */\r\n color: PropTypes.string,\r\n};\r\n\r\nexport default TypingIndicatorSpinner;\r\n","\n import API from \"!../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../node_modules/css-loader/dist/cjs.js!./chatStyles.css\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../node_modules/css-loader/dist/cjs.js!./chatStyles.css\";\n export default content && content.locals ? content.locals : undefined;\n","/**\r\n * Example Usage:\r\n * ```\r\n * \r\n * ```\r\n*/\r\n\r\nimport React, { useEffect, useRef, useState } from \"react\";\r\nimport Markdown from \"react-markdown\";\r\nimport PropTypes from \"prop-types\";\r\nimport remarkGfm from \"remark-gfm\";\r\n\r\nimport MessageInput from \"../../private/ChatMessageInput\";\r\nimport TypingIndicatorDots from \"../../private/DotsIndicator\";\r\nimport TypingIndicatorSpinner from \"../../private/SpinnerIndicator\";\r\n\r\nimport \"../../styles/chatStyles.css\";\r\n\r\nconst defaultUserBubbleStyle = {\r\n backgroundColor: \"#007bff\",\r\n color: \"white\",\r\n marginLeft: \"auto\",\r\n textAlign: \"right\",\r\n};\r\n\r\nconst defaultAssistantBubbleStyle = {\r\n backgroundColor: \"#f1f0f0\",\r\n color: \"black\",\r\n marginRight: \"auto\",\r\n textAlign: \"left\",\r\n};\r\n\r\n/**\r\n * ChatComponent - A React-based chat interface with customizable styles and typing indicators.\r\n * * This component provides a chat interface with support for:\r\n * - Displaying messages exchanged between 2 users typically a user and an assistant.\r\n * - Customizable themes and styles for the chat UI.\r\n * - Typing indicators for both the user and assistant.\r\n * - Integration with Dash via the `setProps` callback for state management.\r\n*/\r\n\r\nconst ChatComponent = ({\r\n /**\r\n * allowing snake_case to support Python's naming convention\r\n * except for setProps which is automatically set by dash and\r\n * it's expected to be named in the camelCase format.\r\n * https://dash.plotly.com/react-for-python-developers\r\n */\r\n id,\r\n messages = [],\r\n theme = \"light\",\r\n container_style: containerStyle = null,\r\n typing_indicator: typingIndicator = \"dots\",\r\n input_container_style: inputContainerStyle = null,\r\n input_text_style: inputTextStyle = null,\r\n setProps = () => { },\r\n fill_height: fillHeight = true,\r\n fill_width: fillWidth = true,\r\n user_bubble_style: userBubbleStyleProp = {},\r\n assistant_bubble_style: assistantBubbleStyleProp = {},\r\n input_placeholder: inputPlaceholder = \"\",\r\n class_name: className = \"\",\r\n persistence = false,\r\n persistence_type: persistenceType = \"local\",\r\n}) => {\r\n const userBubbleStyle = { ...defaultUserBubbleStyle, ...userBubbleStyleProp };\r\n const assistantBubbleStyle = { ...defaultAssistantBubbleStyle, ...assistantBubbleStyleProp };\r\n const [currentMessage, setCurrentMessage] = useState(\"\");\r\n const [localMessages, setLocalMessages] = useState([]);\r\n const [showTyping, setShowTyping] = useState(false);\r\n const [dropdownOpen, setDropdownOpen] = useState(false);\r\n const messageEndRef = useRef(null);\r\n const dropdownRef = useRef(null);\r\n\r\n let storeType;\r\n if (persistenceType === \"local\") {\r\n storeType = \"localStorage\";\r\n } else if (persistenceType === \"local\") {\r\n storeType = \"sessionStorage\";\r\n }\r\n\r\n // load messages from storage or initialize from messages\r\n useEffect(() => {\r\n if (persistence) {\r\n const savedMessages = JSON.parse(window[storeType].getItem(id)) || [];\r\n const initialized = JSON.parse(window[storeType].getItem(`${id}-initialized`));\r\n if (savedMessages.length > 0) {\r\n setLocalMessages(savedMessages);\r\n } else if (!initialized && messages.length > 0) {\r\n setLocalMessages(messages);\r\n window[storeType].setItem(id, JSON.stringify(messages));\r\n window[storeType].setItem(`${id}-initialized`, \"true\");\r\n }\r\n } else {\r\n setLocalMessages(messages);\r\n }\r\n }, [id, persistence, storeType]);\r\n\r\n // persist messages whenever localMessages updates\r\n useEffect(() => {\r\n if (persistence && localMessages.length > 0) {\r\n window[storeType].setItem(id, JSON.stringify(localMessages));\r\n }\r\n }, [localMessages, id, persistence, storeType]);\r\n\r\n // hide typing indicator & update local messages with new ones\r\n useEffect(() => {\r\n if (messages.length > 0) {\r\n const lastMsg = messages.slice(-1).pop();\r\n if (lastMsg?.role === \"assistant\" && showTyping) {\r\n setShowTyping(false);\r\n setLocalMessages((prevMessages) => [...prevMessages, lastMsg]);\r\n } else {\r\n setLocalMessages(messages || []);\r\n }\r\n }\r\n }, [messages]);\r\n\r\n useEffect(() => {\r\n if (messageEndRef.current) {\r\n messageEndRef.current.scrollIntoView({ behavior: \"smooth\", block: \"nearest\", inline: \"start\" });\r\n }\r\n }, [localMessages]);\r\n\r\n useEffect(() => {\r\n const handleClickOutside = (event) => {\r\n if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {\r\n setDropdownOpen(false);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickOutside);\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickOutside);\r\n };\r\n }, []);\r\n\r\n\r\n const handleInputChange = (e) => {\r\n setCurrentMessage(e.target.value);\r\n };\r\n\r\n const handleSendMessage = () => {\r\n if (currentMessage.trim()) {\r\n const newMessage = { role: \"user\", content: currentMessage };\r\n setLocalMessages((prevMessages) => {\r\n const updatedMessages = [...prevMessages, newMessage];\r\n if (persistence) {\r\n window[storeType].setItem(id, JSON.stringify(updatedMessages));\r\n }\r\n return updatedMessages;\r\n });\r\n\r\n if (setProps) {\r\n setProps({ new_message: newMessage });\r\n }\r\n\r\n setShowTyping(true);\r\n setCurrentMessage(\"\");\r\n }\r\n };\r\n\r\n const handleClearChat = () => {\r\n setLocalMessages([]);\r\n if (persistence) {\r\n window[storeType].removeItem(id);\r\n }\r\n setDropdownOpen(false);\r\n };\r\n\r\n const styleChatContainer = {};\r\n const inputFieldStyle = {};\r\n if (fillHeight) {\r\n styleChatContainer.height = \"100%\";\r\n } else {\r\n styleChatContainer.height = \"50%\";\r\n }\r\n if (fillWidth) {\r\n styleChatContainer.width = \"auto\";\r\n } else {\r\n styleChatContainer.width = \"50%\";\r\n }\r\n if (theme === \"dark\") {\r\n styleChatContainer.backgroundColor = \"#161618\";\r\n styleChatContainer.borderColor = \"#444444\";\r\n styleChatContainer.color = \"#ffffff\";\r\n inputFieldStyle.borderColor = \"#f1f0f0\";\r\n inputFieldStyle.color = \"#000000\";\r\n } else {\r\n styleChatContainer.backgroundColor = \"#ffffff\";\r\n styleChatContainer.borderColor = \"#e0e0e0\";\r\n styleChatContainer.color = \"#e0e0e0\";\r\n inputFieldStyle.borderColor = \"#e0e0e0\"\r\n }\r\n\r\n return (\r\n
\r\n {persistence && (\r\n
\r\n
\r\n \r\n {dropdownOpen && (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n
\r\n )}\r\n
\r\n {localMessages.length === 0 ? (\r\n
No conversation yet.
\r\n ) : (\r\n localMessages.map((message, index) => {\r\n if (!message || typeof message !== \"object\" || !message.role || !message.content) {\r\n return null;\r\n }\r\n const bubbleStyle = message.role === \"user\" ? userBubbleStyle : assistantBubbleStyle;\r\n return (\r\n \r\n
\r\n (\r\n \r\n {children}\r\n \r\n ),\r\n }}\r\n >\r\n {message.content}\r\n \r\n
\r\n
\r\n )\r\n })\r\n )}\r\n {showTyping && (\r\n
\r\n {typingIndicator === \"dots\" && }\r\n {typingIndicator === \"spinner\" && }\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nChatComponent.propTypes = {\r\n /**\r\n * The ID of this component, used to identify dash components\r\n * in callbacks. The ID needs to be unique across all of the\r\n * components in an app.\r\n */\r\n id: PropTypes.string,\r\n /**\r\n * An array of options. The list of chat messages. Each message object should have:\r\n * - `role` (string): The message sender, either \"user\" or \"assistant\".\r\n * - `content` (string): The content of the message.\r\n */\r\n messages: PropTypes.arrayOf(\r\n PropTypes.shape({\r\n role: PropTypes.oneOf([\"user\", \"assistant\"]).isRequired,\r\n content: PropTypes.string.isRequired,\r\n })\r\n ),\r\n /**\r\n * Dash-assigned callback that gets fired when the value for messages and isTyping changes.\r\n */\r\n setProps: PropTypes.func,\r\n /**\r\n * Theme for the chat interface. Default is \"light\". Use \"dark\" for a dark mode appearance.\r\n */\r\n theme: PropTypes.string,\r\n /**\r\n * Inline css styles to customize the chat container.\r\n */\r\n container_style: PropTypes.object,\r\n /**\r\n * The type of typing indicator to display. Options are:\r\n * - `\"dots\"`: Displays animated dots.\r\n * - `\"spinner\"`: Displays a spinner animation.\r\n */\r\n typing_indicator: PropTypes.oneOf([\"dots\", \"spinner\"]),\r\n /**\r\n * Latest chat message that was appended to messages array.\r\n */\r\n new_message: PropTypes.object,\r\n /**\r\n * Inline styles for the container holding the message input field.\r\n */\r\n input_container_style: PropTypes.object,\r\n /**\r\n * Inline styles for the message input field itself.\r\n */\r\n input_text_style: PropTypes.object,\r\n /**\r\n * Whether to vertically fill the screen with the chat container. If False, centers and constrains container to a maximum height.\r\n */\r\n fill_height: PropTypes.bool,\r\n /**\r\n * Whether to horizontally fill the screen with the chat container. If False, centers and constrains container to a maximum width.\r\n */\r\n fill_width: PropTypes.bool,\r\n /**\r\n * Css styles to customize the user message bubble.\r\n */\r\n user_bubble_style: PropTypes.object,\r\n /**\r\n * Css styles to customize the assistant message bubble.\r\n */\r\n assistant_bubble_style: PropTypes.object,\r\n /**\r\n * Placeholder input to bne used in the input field\r\n */\r\n input_placeholder: PropTypes.string,\r\n /**\r\n * Name for the class attribute to be added to the chat container\r\n */\r\n class_name: PropTypes.string,\r\n /**\r\n * Whether messages should be stored for persistence\r\n */\r\n persistence: PropTypes.bool,\r\n /**\r\n * Where persisted messages will be stored\r\n */\r\n persistence_type: PropTypes.oneOf([\"local\", \"session\"]),\r\n};\r\n\r\nexport default ChatComponent;\r\n"],"names":["___CSS_LOADER_EXPORT___","push","module","id","exports","cssWithMappingToString","list","toString","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","hasOwn","Object","prototype","hasOwnProperty","toStr","defineProperty","gOPD","getOwnPropertyDescriptor","isArray","arr","Array","call","isPlainObject","obj","key","hasOwnConstructor","hasIsPrototypeOf","constructor","setProperty","target","options","name","enumerable","configurable","value","newValue","writable","getProperty","extend","src","copy","copyIsArray","clone","arguments","deep","COMMENT_REGEX","NEWLINE_REGEX","WHITESPACE_REGEX","PROPERTY_REGEX","COLON_REGEX","VALUE_REGEX","SEMICOLON_REGEX","TRIM_REGEX","EMPTY_STRING","trim","str","replace","style","TypeError","lineno","column","updatePosition","lines","match","lastIndexOf","position","start","line","node","Position","whitespace","end","source","errorsList","error","msg","err","Error","reason","filename","silent","re","m","exec","slice","comments","rules","c","comment","pos","charAt","type","declaration","prop","val","ret","property","decl","decls","declarations","f","Symbol","for","l","n","__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","ReactCurrentOwner","p","ref","__self","__source","q","a","g","b","d","e","h","defaultProps","$$typeof","props","_owner","current","Fragment","jsx","jsxs","stylesInDOM","getIndexByIdentifier","identifier","result","modulesToDom","idCountMap","identifiers","base","count","indexByIdentifier","css","sourceMap","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","getTarget","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","__importDefault","mod","__esModule","iterator","styleObject","inline_style_parser_1","default","hasIterator","forEach","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","getter","definition","o","get","r","toStringTag","url","getCurrentScript","script","currentScript","doc_scripts","getElementsByTagName","scripts","filter","s","async","text","textContent","split","jsonpScriptSrc","__jsonpScriptSrc__","chunkId","isLocal","test","srcFragments","fileFragments","nc","nameRe","nameReJsx","emptyOptions","empty","Schema","normal","space","merge","definitions","assign","normalize","toLowerCase","Info","attribute","boolean","booleanish","overloadedBoolean","number","commaSeparated","spaceSeparated","commaOrSpaceSeparated","mustUseProperty","defined","powers","increment","checks","keys","DefinedInfo","mask","super","mark","check","values","own","create","properties","info","transform","includes","xlink","_","xLinkActuate","xLinkArcRole","xLinkHref","xLinkRole","xLinkShow","xLinkTitle","xLinkType","xml","xmlLang","xmlBase","xmlSpace","caseSensitiveTransform","caseInsensitiveTransform","xmlns","xmlnsxlink","xmlnsXLink","aria","ariaActiveDescendant","ariaAtomic","ariaAutoComplete","ariaBusy","ariaChecked","ariaColCount","ariaColIndex","ariaColSpan","ariaControls","ariaCurrent","ariaDescribedBy","ariaDetails","ariaDisabled","ariaDropEffect","ariaErrorMessage","ariaExpanded","ariaFlowTo","ariaGrabbed","ariaHasPopup","ariaHidden","ariaInvalid","ariaKeyShortcuts","ariaLabel","ariaLabelledBy","ariaLevel","ariaLive","ariaModal","ariaMultiLine","ariaMultiSelectable","ariaOrientation","ariaOwns","ariaPlaceholder","ariaPosInSet","ariaPressed","ariaReadOnly","ariaRelevant","ariaRequired","ariaRoleDescription","ariaRowCount","ariaRowIndex","ariaRowSpan","ariaSelected","ariaSetSize","ariaSort","ariaValueMax","ariaValueMin","ariaValueNow","ariaValueText","role","html","acceptcharset","classname","htmlfor","httpequiv","abbr","accept","acceptCharset","accessKey","action","allow","allowFullScreen","allowPaymentRequest","allowUserMedia","alt","as","autoCapitalize","autoComplete","autoFocus","autoPlay","blocking","capture","charSet","checked","cite","className","cols","colSpan","contentEditable","controls","controlsList","coords","crossOrigin","dateTime","decoding","defer","dir","dirName","disabled","download","draggable","encType","enterKeyHint","fetchPriority","form","formAction","formEncType","formMethod","formNoValidate","formTarget","headers","height","hidden","high","href","hrefLang","htmlFor","httpEquiv","imageSizes","imageSrcSet","inert","inputMode","integrity","is","isMap","itemId","itemProp","itemRef","itemScope","itemType","kind","label","lang","language","loading","loop","low","manifest","max","maxLength","method","min","minLength","multiple","muted","noModule","noValidate","onAbort","onAfterPrint","onAuxClick","onBeforeMatch","onBeforePrint","onBeforeToggle","onBeforeUnload","onBlur","onCancel","onCanPlay","onCanPlayThrough","onChange","onClick","onClose","onContextLost","onContextMenu","onContextRestored","onCopy","onCueChange","onCut","onDblClick","onDrag","onDragEnd","onDragEnter","onDragExit","onDragLeave","onDragOver","onDragStart","onDrop","onDurationChange","onEmptied","onEnded","onError","onFocus","onFormData","onHashChange","onInput","onInvalid","onKeyDown","onKeyPress","onKeyUp","onLanguageChange","onLoad","onLoadedData","onLoadedMetadata","onLoadEnd","onLoadStart","onMessage","onMessageError","onMouseDown","onMouseEnter","onMouseLeave","onMouseMove","onMouseOut","onMouseOver","onMouseUp","onOffline","onOnline","onPageHide","onPageShow","onPaste","onPause","onPlay","onPlaying","onPopState","onProgress","onRateChange","onRejectionHandled","onReset","onResize","onScroll","onScrollEnd","onSecurityPolicyViolation","onSeeked","onSeeking","onSelect","onSlotChange","onStalled","onStorage","onSubmit","onSuspend","onTimeUpdate","onToggle","onUnhandledRejection","onUnload","onVolumeChange","onWaiting","onWheel","open","optimum","pattern","ping","placeholder","playsInline","popover","popoverTarget","popoverTargetAction","poster","preload","readOnly","referrerPolicy","rel","required","reversed","rows","rowSpan","sandbox","scope","scoped","seamless","selected","shadowRootClonable","shadowRootDelegatesFocus","shadowRootMode","shape","size","sizes","slot","span","spellCheck","srcDoc","srcLang","srcSet","step","tabIndex","title","translate","typeMustMatch","useMap","width","wrap","writingSuggestions","align","aLink","archive","axis","background","bgColor","border","borderColor","bottomMargin","cellPadding","cellSpacing","char","charOff","classId","clear","code","codeBase","codeType","color","compact","declare","event","face","frame","frameBorder","hSpace","leftMargin","link","longDesc","lowSrc","marginHeight","marginWidth","noResize","noHref","noShade","noWrap","object","profile","prompt","rev","rightMargin","scheme","scrolling","standby","summary","topMargin","valueType","version","vAlign","vLink","vSpace","allowTransparency","autoCorrect","autoSave","disablePictureInPicture","disableRemotePlayback","prefix","results","security","unselectable","svg","accentHeight","alignmentBaseline","arabicForm","baselineShift","capHeight","clipPath","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","dataType","dominantBaseline","enableBackground","fillOpacity","fillRule","floodColor","floodOpacity","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","horizAdvX","horizOriginX","horizOriginY","imageRendering","letterSpacing","lightingColor","markerEnd","markerMid","markerStart","navDown","navDownLeft","navDownRight","navLeft","navNext","navPrev","navRight","navUp","navUpLeft","navUpRight","onActivate","onBegin","onEnd","onFocusIn","onFocusOut","onMouseWheel","onRepeat","onShow","onZoom","overlinePosition","overlineThickness","paintOrder","panose1","pointerEvents","renderingIntent","shapeRendering","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","strokeDashArray","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","strokeOpacity","strokeWidth","textAnchor","textDecoration","textRendering","transformOrigin","typeOf","underlinePosition","underlineThickness","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","vHanging","vIdeographic","vMathematical","vectorEffect","vertAdvY","vertOriginX","vertOriginY","wordSpacing","writingMode","xHeight","playbackOrder","timelineBegin","about","accumulate","additive","alphabetic","amplitude","ascent","attributeName","attributeType","azimuth","bandwidth","baseFrequency","baseProfile","bbox","begin","bias","by","calcMode","clip","clipPathUnits","contentScriptType","contentStyleType","cursor","cx","cy","defaultAction","descent","diffuseConstant","direction","display","dur","divisor","dx","dy","edgeMode","editable","elevation","exponent","externalResourcesRequired","fill","filterRes","filterUnits","focusable","focusHighlight","format","fr","from","fx","fy","g1","g2","glyphRef","gradientTransform","gradientUnits","handler","hanging","hatchContentUnits","hatchUnits","ideographic","initialVisibility","in","in2","intercept","k1","k2","k3","k4","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","kerning","lengthAdjust","limitingConeAngle","local","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","mathematical","mediaCharacterEncoding","mediaContentEncodings","mediaSize","mediaTime","mode","numOctaves","observer","offset","opacity","operator","order","orient","orientation","origin","overflow","overlay","path","pathLength","patternContentUnits","patternTransform","patternUnits","phase","pitch","points","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","propagate","radius","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","requiredFonts","requiredFormats","resource","restart","rotate","rx","ry","scale","seed","side","slope","snapshotTime","specularConstant","specularExponent","spreadMethod","spacing","startOffset","stdDeviation","stemh","stemv","stitchTiles","string","stroke","surfaceScale","syncBehavior","syncBehaviorDefault","syncMaster","syncTolerance","syncToleranceDefault","systemLanguage","tableValues","targetX","targetY","textLength","transformBehavior","to","u1","u2","unicode","viewBox","viewTarget","visibility","widths","x","x1","x2","xChannelSelector","y","y1","y2","yChannelSelector","z","zoomAndPan","valid","dash","cap","kebab","$0","camelcase","toUpperCase","hastToReact","pointEnd","point","pointStart","stringifyPosition","VFileMessage","causeOrReason","optionsOrParentOrPlace","legacyCause","place","ancestors","cause","message","ruleId","indexOf","parent","fatal","file","stack","actual","expected","note","emptyMap","Map","dashSomething","tableElements","Set","tableCellElement","docs","one","state","parentSchema","schema","tagName","findComponentFromName","alignValue","createProperty","tableCellAlignToStyle","has","stylePropertyNameCase","createElementProps","children","createChildren","child","thing","addNode","addChildren","pop","estree","evaluater","expression","body","evaluateExpression","crashEstree","mdxExpression","objectExpression","argument","createJsxElementProps","mdxJsxElement","evaluateProgram","mdxEsm","root","passNode","countsByName","passKeys","set","Type","rest","dashes","find","Number","isNaN","settings","padRight","padLeft","toCamel","ignoreInvalidStyle","filePath","parseStyle","String","domCasing","cssCasing","transformStyleToCssCasing","transformStylesToCssCasing","elementAttributeNameCase","allowExpression","computed","Boolean","optional","components","toDash","$1","urlAttributes","icon","includeImageAlt","includeHtml","items","parameters","chunkStart","unshift","SpliceBuffer","initial","left","right","RangeError","shift","setCursor","stop","POSITIVE_INFINITY","reverse","deleteCount","Math","trunc","removed","chunkedPush","pushMany","unshiftMany","subtokenize","eventsArray","jumps","lineIndex","otherIndex","otherEvent","subevents","more","events","_tokenizer","_isInFirstContentOfListItem","contentType","subcontent","_container","eventIndex","token","context","startPosition","startPositions","tokenizer","parser","childEvents","gaps","stream","previous","adjust","breaks","sliceStream","next","defineSkip","_gfmTasklistFirstContentOfListItem","write","combineExtensions","extensions","all","syntaxExtension","extension","hook","constructs","existing","before","add","asciiAlpha","regexCheck","asciiAlphanumeric","asciiAtext","asciiControl","asciiDigit","asciiHexDigit","asciiPunctuation","markdownLineEnding","markdownLineEndingOrSpace","markdownSpace","unicodePunctuation","unicodeWhitespace","regex","fromCharCode","factorySpace","effects","ok","limit","enter","consume","exit","tokenize","contentStart","attempt","contentInitial","lineStart","self","childFlow","childToken","lineStartOffset","continued","containerState","continuation","documentContinue","checkNewContainers","_closeFlow","closeFlow","indexBeforeExits","indexBeforeFlow","exitContainers","documentContinued","currentConstruct","concrete","flowStart","interrupt","_gfmTableDynamicInterruptHack","containerConstruct","thereIsANewContainer","thereIsNoNewContainer","lazy","now","containerContinue","flow","flowContinue","writeToChild","endOfFile","seen","entry","nok","disable","null","blankLine","partial","after","resolve","chunkInside","contentEnd","continuationConstruct","contentContinue","prefixed","tail","sliceSerialize","flowInitial","afterConstruct","resolver","resolveAll","createResolver","initializeFactory","field","resolveAllLineSuffixes","notText","atBreak","extraResolver","chunks","tabs","bufferIndex","chunk","charCodeAt","_bufferIndex","thematicBreak","marker","sequence","furtherBlankLines","initialBlankLine","notInCurrentItem","indentConstruct","initialSize","atMarker","inside","onBlank","listItemPrefixWhitespaceConstruct","endOfPrefix","otherPrefix","blockQuote","contBefore","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","enclosedBefore","raw","enclosed","enclosedEscape","rawEscape","factoryLabel","markerType","labelInside","labelEscape","factoryTitle","escape","factoryWhitespace","normalizeIdentifier","labelAfter","markerAfter","destinationBefore","destinationAfter","titleBefore","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","codeIndented","afterPrefix","furtherStart","headingAtx","sequenceOpen","sequenceFurther","setextUnderline","resolveTo","heading","paragraph","htmlBlockNames","htmlRawNames","htmlFlow","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","commentOpenInside","cdataOpenInside","slash","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationStart","blankLineBefore","continuationAfter","nonLazyContinuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","nonLazyContinuation","codeFenced","closeStart","beforeSequenceClose","sequenceClose","sizeOpen","sequenceCloseAfter","initialPrefix","beforeSequenceOpen","infoBefore","atNonLazyBreak","metaBefore","meta","contentBefore","beforeContentChunk","contentChunk","decodeNamedCharacterReference","characterReference","innerHTML","numeric","characterEscape","lineEnding","called","labelEnd","newEvents","close","_inactive","_balanced","group","insideSpan","labelStart","labelEndNok","resourceConstruct","labelEndOk","referenceFullConstruct","referenceNotFull","referenceCollapsedConstruct","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFullAfter","referenceFullMissing","referenceCollapsedOpen","labelStartImage","classifyCharacter","attention","openingSequence","closingSequence","use","nextEvents","_close","_open","movePoint","attentionMarkers","autolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","htmlText","returnState","instruction","tagOpen","commentEnd","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelStartLink","hardBreakEscape","codeText","tailExitIndex","headEnterIndex","between","createTokenizer","initialize","columnStart","resolveAllConstructs","consumed","constructFactory","construct","addResult","onsuccessfulcheck","accountForPotentialSkip","fields","expandTabs","atTab","serializeChunks","chunkIndex","go","main","expectedCode","startIndex","startBufferIndex","endIndex","endBufferIndex","view","sliceChunks","restore","onreturn","bogusState","listOfConstructs","constructIndex","handleListOfConstructs","handleMapOfConstructs","handleConstruct","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","store","search","decodeNumericCharacterReference","parseInt","fromCodePoint","characterEscapeOrReference","decode","$2","hex","fromMarkdown","encoding","config","transforms","canContainEols","opener","autolinkProtocol","onenterdata","autolinkEmail","atxHeading","codeFlow","codeFencedFenceInfo","codeFencedFenceMeta","codeTextData","codeFlowValue","definitionDestinationString","definitionLabelString","definitionTitleString","emphasis","hardBreak","hardBreakTrailing","htmlFlowData","htmlTextData","image","listItem","spread","_spread","listItemValue","expectingFirstListItemValue","listOrdered","listUnordered","reference","referenceType","referenceString","resourceDestinationString","resourceTitleString","setextHeading","strong","closer","atxHeadingSequence","depth","onexitdata","characterEscapeValue","characterReferenceMarkerHexadecimal","onexitcharacterreferencemarker","characterReferenceMarkerNumeric","characterReferenceValue","characterReferenceType","resume","flowCodeInside","codeFencedFence","onexithardbreak","inReference","fragment","labelText","ancestor","decodeString","atHardBreak","setextHeadingSlurpLineEnding","setextHeadingLineSequence","codePointAt","setextHeadingText","configure","mdastExtensions","tree","tokenStack","listStack","prepareList","defaultOnError","firstBlankLineIndex","containerBalance","listSpread","tailIndex","tailEvent","and","errorHandler","onExitError","siblings","ordered","compiler","postprocess","atCarriageReturn","endPosition","TextDecoder","lastIndex","ceil","preprocess","combined","remarkParse","doc","env","globalThis","deserialize","serialized","$","out","unpair","Date","flags","RegExp","BigInt","Uint8Array","DataView","deserializer","EMPTY","asString","shouldSkip","TYPE","serialize","json","lossy","strict","pair","valueOf","toJSON","entries","toISOString","serializer","structuredClone","any","normalizeUri","skip","defaultFootnoteBackContent","rereferenceIndex","defaultFootnoteBackLabel","referenceIndex","convert","castFactory","tests","anyFactory","checkAsRecord","nodeAsRecord","propsFactory","testFunction","looksLikeANode","EXIT","visitParents","visitor","factory","parents","visit","subresult","grandparents","toResult","nodeAsParent","testOrVisitor","visitorOrReverse","maybeReverse","revert","subtype","suffix","contents","listItemLoose","trimLines","last","trimLine","blockquote","patch","applyData","break","delete","footnoteReference","clobberPrefix","safeId","footnoteOrder","counter","reuseCounter","footnoteCounts","dataFootnoteRef","sup","allowDangerousHtml","imageReference","definitionById","inlineCode","linkReference","loose","listLoose","table","firstRow","tableContent","tableCell","tableRow","cellIndex","cells","cell","toml","ignore","yaml","footnoteDefinition","hName","hChildren","hProperties","defaultUnknownHandler","nodes","trimMarkdownSpaceStart","toHast","footnoteById","handlers","handle","passThrough","shallow","unknownHandler","createState","foot","footnoteBackContent","footnoteBackLabel","footnoteLabel","footnoteLabelTagName","footnoteLabelProperties","listItems","backReferences","counts","dataFootnoteBackref","tailTail","dataFootnotes","footer","remarkRehype","destination","hastTree","run","bail","getPrototypeOf","minpath","extname","assertPath","seenNonSlash","firstNonSlashEnd","extnameIndex","unmatchedSlash","startPart","startDot","preDotState","segments","joined","absolute","allowAboveRoot","lastSlashIndex","lastSegmentLength","lastSlash","dots","normalizeString","minproc","isUrl","fileUrlOrPath","protocol","auth","VFile","isUint8Array","cwd","history","messages","stored","basename","assertNonEmpty","assertPart","dirname","stem","URL","hostname","pathname","third","decodeURIComponent","getPathFromURLPosix","urlToPath","fail","part","CallableInstance","proto","setPrototypeOf","Processor","Compiler","Parser","attachers","freezeIndex","frozen","namespace","transformers","fns","pipeline","middlewareIndex","callback","output","fn","middleware","fnExpectsCallback","done","then","middelware","trough","attacher","assertUnfrozen","freeze","transformer","parse","realFile","vfile","assertParser","process","assertCompiler","executor","Promise","reject","parseTree","realDone","compileTree","compileResult","processSync","complete","assertDone","assertNode","outputTree","resultingTree","runSync","addPlugin","addList","addPreset","plugin","plugins","entryIndex","primary","currentPrimary","unified","asyncName","looksLikeAVFile","emptyPlugins","emptyRemarkRehypeOptions","safeProtocol","deprecations","Markdown","allowedElements","allowElement","disallowedElements","rehypePlugins","remarkPlugins","remarkRehypeOptions","skipHtml","unwrapDisallowed","urlTransform","defaultUrlTransform","processor","deprecation","mdastTree","development","jsxDEV","isStaticChildren","columnNumber","fileName","lineNumber","developmentCreate","createEvaluater","toJsxRuntime","colon","questionMark","numberSign","ccount","character","toFunction","inConstruct","notInConstruct","enterLiteralAutolink","enterLiteralAutolinkValue","exitLiteralAutolinkHttp","exitLiteralAutolinkWww","exitLiteralAutolinkEmail","exitLiteralAutolink","transformGfmAutolinkLiterals","ignored","pairs","tupleOrList","tuple","toPairs","pairIndex","grandparent","change","matchObject","input","global","findAndReplace","findUrl","findEmail","domain","parts","isCorrectDomain","trailExec","trail","closingParenIndex","openingParens","closingParens","splitUrl","atext","email","enterFootnoteDefinition","enterFootnoteDefinitionLabelString","exitFootnoteDefinitionLabelString","exitFootnoteDefinition","enterFootnoteCall","enterFootnoteCallString","exitFootnoteCallString","exitFootnoteCall","tracker","createTracker","move","subexit","safe","associationId","indentLines","containerFlow","blank","peek","constructsWithoutStrikethrough","enterStrikethrough","exitStrikethrough","handleDelete","containerPhrasing","defaultStringLength","toAlignment","listInScope","none","_1","unsafe","checkQuote","quote","encodeCharacterReference","encodeInfo","outside","outsideKind","insideKind","checkEmphasis","betweenHead","betweenTail","attentionEncodeSurroundingInfo","compilePattern","formatLinkAsAutolink","resourceLink","checkBullet","bullet","checkRule","rule","phrasing","checkStrong","fence","checkFence","fences","formatCodeAsIndented","repeat","substring","longestStreak","encode","rank","literalWithBreak","setext","formatHeadingAsSetext","closeAtx","bulletCurrent","bulletOrdered","checkBulletOrdered","bulletOther","checkBulletOther","useDifferentMarker","bulletLastUsed","firstListItem","indexStack","listItemIndent","checkListItemIndent","incrementListMarker","some","ruleSpaces","repetition","ruleRepetition","checkRuleRepetition","enterTable","_align","inTable","exitTable","enterRow","enterCell","exitCodeText","gfmTableToMarkdown","padding","tableCellPadding","alignDelimiters","tablePipeAlign","stringLength","around","serializeData","handleTableRowAsData","handleTableAsData","handleTableCell","matrix","alignments","cellMatrix","sizeMatrix","longestCellByColumn","mostCellsPerRow","rowIndex","row","columnIndex","delimiterStart","delimiterEnd","markdownTable","exitCheck","exitParagraphWithTaskListItem","firstParaghraph","sibling","listItemWithTaskListItem","checkable","checkbox","wwwPrefix","wwwPrefixInside","wwwPrefixAfter","underscoreInLastSegment","underscoreInLastLastSegment","domainInside","domainAfter","domainAtPunctuation","sizeClose","pathInside","pathAtPunctuation","trailCharacterReferenceStart","trailBracketAfter","trailCharacterReferenceInside","emailDomainDotTrail","wwwAutolink","previousWww","previousUnbalanced","wwwAfter","protocolAutolink","previousProtocol","protocolPrefixInside","protocolSlashesInside","afterProtocol","protocolAfter","emailAutolink","dot","gfmAtext","previousEmail","emailDomain","emailDomainAfter","emailDomainDot","_gfmAutolinkLiteralWalkedInto","indent","tokenizePotentialGfmFootnoteCall","gfmFootnotes","resolveToPotentialGfmFootnoteCall","replacement","tokenizeGfmFootnoteCall","callStart","callData","callEscape","tokenizeDefinitionStart","labelAtMarker","whitespaceAfter","tokenizeDefinitionContinuation","gfmFootnoteDefinitionEnd","gfmStrikethrough","single","singleTilde","strikethrough","EditMap","editMap","at","addImplementation","sort","vecs","gfmTableAlign","inDelimiterRow","alignIndex","tokenizeTable","sizeB","bodyRowStart","headRowBefore","headRowBreak","headRowStart","headDelimiterStart","headRowData","headRowEscape","headDelimiterBefore","headDelimiterValueBefore","headDelimiterCellBefore","headDelimiterNok","headDelimiterLeftAlignmentAfter","headDelimiterCellAfter","headDelimiterFiller","headDelimiterRightAlignmentAfter","bodyRowBreak","bodyRowData","bodyRowEscape","resolveTable","currentTable","currentBody","currentCell","inFirstCellAwaitingPipe","rowKind","lastCell","afterHeadAwaitingFirstBodyRow","lastTableEnd","flushTableEnd","flushCell","range","rowEnd","previousCell","groupName","getPoint","relatedStart","relatedEnd","valueToken","tableBody","exits","related","tasklistCheck","spaceThenNonSpace","remarkGfm","micromarkExtensions","fromMarkdownExtensions","toMarkdownExtensions","gfm","literalAutolink","literalAutolinkEmail","literalAutolinkHttp","literalAutolinkWww","gfmFootnoteDefinition","gfmFootnoteDefinitionLabelString","gfmFootnoteCall","gfmFootnoteCallString","tableData","tableHeader","taskListCheckValueChecked","taskListCheckValueUnchecked","gfmToMarkdown","MessageInput","_ref","onSend","handleInputChange","_ref$placeholder","_ref$buttonLabel","buttonLabel","_ref$customStyles","customStyles","_ref$inputComponentSt","inputComponentStyles","_ref$showTyping","showTyping","React","propTypes","PropTypes","isRequired","locals","TypingIndicatorDots","_ref$color","TypingIndicatorSpinner","_ref$size","borderTopColor","defaultUserBubbleStyle","backgroundColor","marginLeft","textAlign","defaultAssistantBubbleStyle","marginRight","ChatComponent","storeType","_ref$messages","_ref$theme","theme","_ref$container_style","container_style","containerStyle","_ref$typing_indicator","typing_indicator","typingIndicator","_ref$input_container_","input_container_style","inputContainerStyle","_ref$input_text_style","input_text_style","inputTextStyle","_ref$setProps","setProps","_ref$fill_height","fill_height","fillHeight","_ref$fill_width","fill_width","fillWidth","_ref$user_bubble_styl","user_bubble_style","userBubbleStyleProp","_ref$assistant_bubble","assistant_bubble_style","assistantBubbleStyleProp","_ref$input_placeholde","input_placeholder","inputPlaceholder","_ref$class_name","class_name","_ref$persistence","persistence","_ref$persistence_type","persistence_type","persistenceType","userBubbleStyle","_objectSpread","assistantBubbleStyle","_useState2","_slicedToArray","useState","currentMessage","setCurrentMessage","_useState4","localMessages","setLocalMessages","_useState6","setShowTyping","_useState8","dropdownOpen","setDropdownOpen","messageEndRef","useRef","dropdownRef","useEffect","savedMessages","getItem","initialized","setItem","lastMsg","prevMessages","_toConsumableArray","scrollIntoView","behavior","block","inline","handleClickOutside","contains","addEventListener","removeEventListener","styleChatContainer","inputFieldStyle","removeItem","_typeof","bubbleStyle","_ref2","newMessage","updatedMessages","new_message"],"sourceRoot":""} \ No newline at end of file diff --git a/dash_chat/metadata.json b/dash_chat/metadata.json index 72e0882..5b1f8c4 100644 --- a/dash_chat/metadata.json +++ b/dash_chat/metadata.json @@ -1 +1 @@ -{"src/lib/components/ChatComponent.js":{"description":"ChatComponent - A React-based chat interface with customizable styles and typing indicators.\n* This component provides a chat interface with support for:\n- Displaying messages exchanged between 2 users typically a user and an assistant.\n- Customizable themes and styles for the chat UI.\n- Typing indicators for both the user and assistant.\n- Integration with Dash via the `setProps` callback for state management.","displayName":"ChatComponent","methods":[],"props":{"id":{"type":{"name":"string"},"required":false,"description":"The ID of this component, used to identify dash components\nin callbacks. The ID needs to be unique across all of the\ncomponents in an app."},"messages":{"type":{"name":"arrayOf","value":{"name":"shape","value":{"role":{"name":"enum","value":[{"value":"\"user\"","computed":false},{"value":"\"assistant\"","computed":false}],"required":true},"content":{"name":"string","required":true}}}},"required":false,"description":"An array of options. The list of chat messages. Each message object should have:\n - `role` (string): The message sender, either \"user\" or \"assistant\".\n - `content` (string): The content of the message.","defaultValue":{"value":"[]","computed":false}},"setProps":{"type":{"name":"func"},"required":false,"description":"Dash-assigned callback that gets fired when the value for messages and isTyping changes.","defaultValue":{"value":"() => { }","computed":false}},"theme":{"type":{"name":"string"},"required":false,"description":"Theme for the chat interface. Default is \"light\". Use \"dark\" for a dark mode appearance.","defaultValue":{"value":"\"light\"","computed":false}},"container_style":{"type":{"name":"object"},"required":false,"description":"Inline css styles to customize the chat container.","defaultValue":{"value":"null","computed":false}},"typing_indicator":{"type":{"name":"enum","value":[{"value":"\"dots\"","computed":false},{"value":"\"spinner\"","computed":false}]},"required":false,"description":"The type of typing indicator to display. Options are:\n - `\"dots\"`: Displays animated dots.\n - `\"spinner\"`: Displays a spinner animation.","defaultValue":{"value":"\"dots\"","computed":false}},"new_message":{"type":{"name":"object"},"required":false,"description":"Latest chat message that was appended to messages array."},"input_container_style":{"type":{"name":"object"},"required":false,"description":"Inline styles for the container holding the message input field.","defaultValue":{"value":"null","computed":false}},"input_text_style":{"type":{"name":"object"},"required":false,"description":"Inline styles for the message input field itself.","defaultValue":{"value":"null","computed":false}},"fill_height":{"type":{"name":"bool"},"required":false,"description":"Whether to vertically fill the screen with the chat container. If False, centers and constrains container to a maximum height.","defaultValue":{"value":"true","computed":false}},"fill_width":{"type":{"name":"bool"},"required":false,"description":"Whether to horizontally fill the screen with the chat container. If False, centers and constrains container to a maximum width.","defaultValue":{"value":"true","computed":false}},"user_bubble_style":{"type":{"name":"object"},"required":false,"description":"Css styles to customize the user message bubbles.","defaultValue":{"value":"{}","computed":false}},"assistant_bubble_style":{"type":{"name":"object"},"required":false,"description":"Css styles to customize the assistant message bubbles.","defaultValue":{"value":"{}","computed":false}},"input_placeholder":{"type":{"name":"string"},"required":false,"description":"Placeholder input to bne used in the input field","defaultValue":{"value":"\"\"","computed":false}},"class_name":{"type":{"name":"string"},"required":false,"description":"Name for the class attribute to be added to the chat container","defaultValue":{"value":"\"\"","computed":false}},"persistence":{"type":{"name":"bool"},"required":false,"description":"Whether messages should be stored for persistence","defaultValue":{"value":"false","computed":false}},"persistence_type":{"type":{"name":"enum","value":[{"value":"\"local\"","computed":false},{"value":"\"session\"","computed":false}]},"required":false,"description":"Where persisted messages will be stored","defaultValue":{"value":"\"local\"","computed":false}}}}} \ No newline at end of file +{"src/lib/components/ChatComponent.js":{"description":"ChatComponent - A React-based chat interface with customizable styles and typing indicators.\r\n* This component provides a chat interface with support for:\r\n- Displaying messages exchanged between 2 users typically a user and an assistant.\r\n- Customizable themes and styles for the chat UI.\r\n- Typing indicators for both the user and assistant.\r\n- Integration with Dash via the `setProps` callback for state management.","displayName":"ChatComponent","methods":[],"props":{"id":{"type":{"name":"string"},"required":false,"description":"The ID of this component, used to identify dash components\r\nin callbacks. The ID needs to be unique across all of the\r\ncomponents in an app."},"messages":{"type":{"name":"arrayOf","value":{"name":"shape","value":{"role":{"name":"enum","value":[{"value":"\"user\"","computed":false},{"value":"\"assistant\"","computed":false}],"required":true},"content":{"name":"string","required":true}}}},"required":false,"description":"An array of options. The list of chat messages. Each message object should have:\r\n - `role` (string): The message sender, either \"user\" or \"assistant\".\r\n - `content` (string): The content of the message.","defaultValue":{"value":"[]","computed":false}},"setProps":{"type":{"name":"func"},"required":false,"description":"Dash-assigned callback that gets fired when the value for messages and isTyping changes.","defaultValue":{"value":"() => { }","computed":false}},"theme":{"type":{"name":"string"},"required":false,"description":"Theme for the chat interface. Default is \"light\". Use \"dark\" for a dark mode appearance.","defaultValue":{"value":"\"light\"","computed":false}},"container_style":{"type":{"name":"object"},"required":false,"description":"Inline css styles to customize the chat container.","defaultValue":{"value":"null","computed":false}},"typing_indicator":{"type":{"name":"enum","value":[{"value":"\"dots\"","computed":false},{"value":"\"spinner\"","computed":false}]},"required":false,"description":"The type of typing indicator to display. Options are:\r\n - `\"dots\"`: Displays animated dots.\r\n - `\"spinner\"`: Displays a spinner animation.","defaultValue":{"value":"\"dots\"","computed":false}},"new_message":{"type":{"name":"object"},"required":false,"description":"Latest chat message that was appended to messages array."},"input_container_style":{"type":{"name":"object"},"required":false,"description":"Inline styles for the container holding the message input field.","defaultValue":{"value":"null","computed":false}},"input_text_style":{"type":{"name":"object"},"required":false,"description":"Inline styles for the message input field itself.","defaultValue":{"value":"null","computed":false}},"fill_height":{"type":{"name":"bool"},"required":false,"description":"Whether to vertically fill the screen with the chat container. If False, centers and constrains container to a maximum height.","defaultValue":{"value":"true","computed":false}},"fill_width":{"type":{"name":"bool"},"required":false,"description":"Whether to horizontally fill the screen with the chat container. If False, centers and constrains container to a maximum width.","defaultValue":{"value":"true","computed":false}},"user_bubble_style":{"type":{"name":"object"},"required":false,"description":"Css styles to customize the user message bubble.","defaultValue":{"value":"{}","computed":false}},"assistant_bubble_style":{"type":{"name":"object"},"required":false,"description":"Css styles to customize the assistant message bubble.","defaultValue":{"value":"{}","computed":false}},"input_placeholder":{"type":{"name":"string"},"required":false,"description":"Placeholder input to bne used in the input field","defaultValue":{"value":"\"\"","computed":false}},"class_name":{"type":{"name":"string"},"required":false,"description":"Name for the class attribute to be added to the chat container","defaultValue":{"value":"\"\"","computed":false}},"persistence":{"type":{"name":"bool"},"required":false,"description":"Whether messages should be stored for persistence","defaultValue":{"value":"false","computed":false}},"persistence_type":{"type":{"name":"enum","value":[{"value":"\"local\"","computed":false},{"value":"\"session\"","computed":false}]},"required":false,"description":"Where persisted messages will be stored","defaultValue":{"value":"\"local\"","computed":false}}}}} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 6771c9e..f391c0e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "dash-chat", - "version": "0.1.1", + "version": "0.2.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "dash-chat", - "version": "0.1.1", + "version": "0.2.0", "license": "MIT", "dependencies": { "ramda": "^0.26.1", diff --git a/src/lib/components/ChatComponent.js b/src/lib/components/ChatComponent.js index 6d00187..c60028e 100644 --- a/src/lib/components/ChatComponent.js +++ b/src/lib/components/ChatComponent.js @@ -127,7 +127,7 @@ const ChatComponent = ({ useEffect(() => { if (messageEndRef.current) { - messageEndRef.current.scrollIntoView({ behavior: "smooth" }); + messageEndRef.current.scrollIntoView({ behavior: "smooth", block: "nearest", inline: "start" }); } }, [localMessages]);