neko-ui 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +4 -2
- package/es/avatar/index.d.ts +1 -0
- package/es/avatar/index.js +1 -1
- package/es/avatar/index.js.map +1 -1
- package/es/back-top/index.js.map +1 -1
- package/es/back-top/index.less +2 -0
- package/es/highlight-text/index.d.ts +42 -0
- package/es/highlight-text/index.js +2 -0
- package/es/highlight-text/index.js.map +1 -0
- package/es/highlight-text/index.less +3 -0
- package/es/index.d.ts +4 -0
- package/es/index.js +1 -1
- package/es/index.js.map +1 -1
- package/es/markdown/index.js.map +1 -1
- package/es/markdown/markdown-util.js.map +1 -1
- package/es/markdown/prism.js.map +1 -1
- package/es/tag/index.js.map +1 -1
- package/es/use-theme/index.js.map +1 -1
- package/es/utils/broswer.d.ts +17 -0
- package/es/utils/broswer.js +2 -0
- package/es/utils/broswer.js.map +1 -0
- package/es/utils/document.js.map +1 -1
- package/es/utils/fullscreen.d.ts +22 -0
- package/es/utils/fullscreen.js +2 -0
- package/es/utils/fullscreen.js.map +1 -0
- package/es/utils/str-to-highlight.js.map +1 -1
- package/es/wave-circle/index.d.ts +11 -0
- package/es/wave-circle/index.global.less +67 -0
- package/es/wave-circle/index.js +2 -0
- package/es/wave-circle/index.js.map +1 -0
- package/lib/avatar/index.d.ts +1 -0
- package/lib/avatar/index.js +1 -1
- package/lib/avatar/index.js.map +1 -1
- package/lib/back-top/index.js.map +1 -1
- package/lib/back-top/index.less +2 -0
- package/lib/highlight-text/index.d.ts +42 -0
- package/lib/highlight-text/index.js +2 -0
- package/lib/highlight-text/index.js.map +1 -0
- package/lib/highlight-text/index.less +3 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/markdown/index.js.map +1 -1
- package/lib/markdown/markdown-util.js.map +1 -1
- package/lib/markdown/prism.js.map +1 -1
- package/lib/tag/index.js.map +1 -1
- package/lib/use-theme/index.js.map +1 -1
- package/lib/utils/broswer.d.ts +17 -0
- package/lib/utils/broswer.js +2 -0
- package/lib/utils/broswer.js.map +1 -0
- package/lib/utils/document.js.map +1 -1
- package/lib/utils/fullscreen.d.ts +22 -0
- package/lib/utils/fullscreen.js +2 -0
- package/lib/utils/fullscreen.js.map +1 -0
- package/lib/utils/str-to-highlight.js.map +1 -1
- package/lib/wave-circle/index.d.ts +11 -0
- package/lib/wave-circle/index.global.less +67 -0
- package/lib/wave-circle/index.js +2 -0
- package/lib/wave-circle/index.js.map +1 -0
- package/package.json +18 -13
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 Moneko
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Neko UI
|
|
2
2
|
|
|
3
|
-
>
|
|
3
|
+
> 一个轻量的UI组件库
|
|
4
4
|
|
|
5
5
|
[![version][version-tag]][npm-url]
|
|
6
6
|
[![install size][size-tag]][size-url]
|
|
@@ -17,6 +17,8 @@
|
|
|
17
17
|
[size-url]: https://packagephobia.com/result?p=neko-ui@latest
|
|
18
18
|
[download-tag]: https://img.shields.io/npm/dm/neko-ui.svg?logo=docusign
|
|
19
19
|
|
|
20
|
+
> logo轮廓其实是双马尾
|
|
21
|
+
|
|
20
22
|
## 安装依赖
|
|
21
23
|
|
|
22
24
|
```shell
|
package/es/avatar/index.d.ts
CHANGED
package/es/avatar/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}import React,{useMemo}from"react";import styles from"./index.less";var Avatar=function(_param){var className=_param.className,_src=_param.src,src=_src===void 0?"https://gw.alipayobjects.com/zos/alicdn/HJtErOC0O/avatar.png":_src,_imgProps=_param.imgProps,imgProps=_imgProps===void 0?{}:_imgProps,props=_objectWithoutProperties(_param,["className","src","imgProps"]);var cls=useMemo(function(){return[styles.avatar,className].filter(Boolean).join(" ")},[className]);return React.createElement("div",_extends({className:cls},props),React.createElement("img",_extends({src:src}
|
|
1
|
+
function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key]}}}return target};return _extends.apply(this,arguments)}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key]}}return target}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key]}return target}import React,{useMemo}from"react";import styles from"./index.less";var Avatar=function(_param){var className=_param.className,_src=_param.src,src=_src===void 0?"https://gw.alipayobjects.com/zos/alicdn/HJtErOC0O/avatar.png":_src,alt=_param.alt,_imgProps=_param.imgProps,imgProps=_imgProps===void 0?{}:_imgProps,props=_objectWithoutProperties(_param,["className","src","alt","imgProps"]);var cls=useMemo(function(){return[styles.avatar,className].filter(Boolean).join(" ")},[className]);return React.createElement("div",_extends({className:cls},props),React.createElement("img",_extends({},imgProps,{src:src,alt:alt})))};export default Avatar;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/avatar/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../
|
|
1
|
+
{"version":3,"sources":["../../components/avatar/index.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport styles from './index.less';\n\nexport interface AvatarProps extends React.HTMLAttributes<HTMLDivElement> {\n src?: string;\n alt?: string;\n imgProps?: React.HTMLAttributes<HTMLImageElement>;\n}\n\nconst Avatar: React.FC<AvatarProps> = ({\n className,\n src = 'https://gw.alipayobjects.com/zos/alicdn/HJtErOC0O/avatar.png',\n alt,\n imgProps = {},\n ...props\n}) => {\n const cls = useMemo(() => [styles.avatar, className].filter(Boolean).join(' '), [className]);\n\n return (\n <div className={cls} {...props}>\n <img {...imgProps} src={src} alt={alt} />\n </div>\n );\n};\n\nexport default Avatar;\n"],"names":["React","useMemo","styles","Avatar","className","src","alt","imgProps","props","cls","avatar","filter","Boolean","join","div","img"],"mappings":"AAAA,w9BAAA,OAAOA,KAAK,EAAIC,OAAO,KAAQ,OAAO,AAAC,AACvC,QAAOC,MAAM,KAAM,cAAc,AAAC,AAQlC,KAAMC,MAAM,CAA0B,gBAMhC,KALJC,SAAS,QAATA,SAAS,aACTC,GAAG,CAAHA,GAAG,eAAG,8DAA8D,KAAA,CACpEC,GAAG,QAAHA,GAAG,kBACHC,QAAQ,CAARA,QAAQ,oBAAG,EAAE,UAAA,CACVC,KAAK,kCAJRJ,WAAS,CACTC,KAAG,CACHC,KAAG,CACHC,UAAQ,EAGR,KAAME,GAAG,CAAGR,OAAO,CAAC,iBAAM,CAACC,MAAM,CAACQ,MAAM,CAAEN,SAAS,CAAC,CAACO,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAACT,SAAS,CAAC,CAAC,AAAC,AAE7F,QACE,oBAACU,KAAG,WAACV,SAAS,CAAEK,GAAG,EAAMD,KAAK,EAC5B,oBAACO,KAAG,aAAKR,QAAQ,EAAEF,GAAG,CAAEA,GAAG,CAAEC,GAAG,CAAEA,GAAG,GAAI,CACrC,AACN,AACJ,CAAC,AAAC,AAEF,gBAAeH,MAAM,AAAC"}
|
package/es/back-top/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../
|
|
1
|
+
{"version":3,"sources":["../../components/back-top/index.tsx"],"sourcesContent":["import React, { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport styles from './index.less';\nimport { getMaxZindex, getScrollTop } from '../utils/document';\nimport isEqual from 'lodash/isEqual';\nimport isFunction from 'lodash/isFunction';\n\nexport interface BackTopProps extends React.HTMLAttributes<HTMLDivElement> {\n /** 设置需要监听其滚动事件的元素,值为一个返回对应 DOM 元素的函数 */\n target?: () => HTMLElement;\n /** 滚动高度达到此参数值才出现 BackTop */\n visibilityHeight?: number;\n}\n\nconst BackTop: React.FC<BackTopProps> = ({\n target = () => window as unknown as HTMLElement,\n visibilityHeight = 400,\n className,\n ...props\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const [show, setShow] = useState<boolean | null>(null);\n const [init, setInit] = useState<boolean>(false);\n const handleScrollY = useCallback(() => {\n let scrollTop: number | null = 0;\n let offsetHeight: number | null = 0;\n\n if (isFunction(target)) {\n let ele: HTMLElement | null = target();\n\n if (ele) {\n scrollTop = getScrollTop(ele);\n offsetHeight = ele.offsetHeight;\n }\n ele = null;\n } else {\n scrollTop = getScrollTop();\n offsetHeight = document.documentElement.offsetHeight || document.body.offsetHeight;\n }\n const nextShow: boolean = scrollTop > offsetHeight / 3 || scrollTop > visibilityHeight;\n\n if (Boolean(show) !== nextShow) {\n setShow(nextShow);\n }\n }, [show, target, visibilityHeight]);\n const handleBackTop = useCallback(() => {\n target()?.scrollTo({\n top: 0,\n behavior: 'smooth',\n });\n }, [target]);\n\n React.useEffect(() => {\n let timer: NodeJS.Timeout;\n const outing = show === false;\n\n if (show && ref.current) {\n ref.current.style.zIndex = getMaxZindex().toString();\n }\n if (init) {\n if (outing) {\n timer = setTimeout(() => {\n setShow(null);\n clearTimeout(timer);\n }, 1000);\n }\n } else {\n if (outing) {\n setShow(null);\n }\n setInit(true);\n }\n return () => {\n clearTimeout(timer);\n };\n }, [init, show]);\n useEffect(() => {\n if (isFunction(target)) {\n target()?.addEventListener('scroll', handleScrollY, false);\n }\n return () => {\n if (isFunction(target)) {\n target()?.removeEventListener('scroll', handleScrollY, false);\n }\n };\n }, [handleScrollY, target]);\n\n const cls = useMemo(\n () => [styles.backTop, className, !show && styles.out].filter(Boolean).join(' '),\n [className, show]\n );\n\n return show === null ? null : (\n <div {...props} ref={ref} className={cls} onClick={handleBackTop} />\n );\n};\n\nexport default memo(BackTop, isEqual);\n"],"names":["React","memo","useCallback","useEffect","useMemo","useRef","useState","styles","getMaxZindex","getScrollTop","isEqual","isFunction","BackTop","target","window","visibilityHeight","className","props","ref","show","setShow","init","setInit","handleScrollY","scrollTop","offsetHeight","ele","document","documentElement","body","nextShow","Boolean","handleBackTop","scrollTo","top","behavior","timer","outing","current","style","zIndex","toString","setTimeout","clearTimeout","addEventListener","removeEventListener","cls","backTop","out","filter","join","div","onClick"],"mappings":"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"}
|
package/es/back-top/index.less
CHANGED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* 高亮字符串语法
|
|
4
|
+
* @example
|
|
5
|
+
* ```
|
|
6
|
+
* const str = '%c:高亮文字:c%';
|
|
7
|
+
* ```
|
|
8
|
+
*/
|
|
9
|
+
export declare const RegExp_HighLight: RegExp;
|
|
10
|
+
export interface HighlightTextProps {
|
|
11
|
+
className?: string;
|
|
12
|
+
style?: React.CSSProperties;
|
|
13
|
+
/** 命中高亮部分的样式 */
|
|
14
|
+
hitStyle?: React.CSSProperties;
|
|
15
|
+
/** 命中高亮部分的类名 */
|
|
16
|
+
hitClassName?: string;
|
|
17
|
+
/** 内容 */
|
|
18
|
+
text?: string;
|
|
19
|
+
/** 需要高亮的内容 */
|
|
20
|
+
highlight?: string | ({
|
|
21
|
+
highlight: string;
|
|
22
|
+
flag: HighlightFlag;
|
|
23
|
+
} | string)[];
|
|
24
|
+
flag?: HighlightFlag;
|
|
25
|
+
/** 额外需要高亮的内容 */
|
|
26
|
+
extra?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare type HighlightFlag = 'g' | 'i' | 'm' | 'u' | 'y';
|
|
29
|
+
export declare type Highlight = {
|
|
30
|
+
/** 命中高亮 */
|
|
31
|
+
hit?: boolean;
|
|
32
|
+
/** 内容 */
|
|
33
|
+
text: string;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* 字符串转换成高亮字符的Json格式
|
|
37
|
+
* @param {string} text 字符串
|
|
38
|
+
* @returns {HighlightTextJsonType} 高亮字符的Json
|
|
39
|
+
*/
|
|
40
|
+
export declare function strToHighlight(text: string): Highlight[] | null;
|
|
41
|
+
declare const HighlightText: React.FC<HighlightTextProps>;
|
|
42
|
+
export default HighlightText;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _iterableToArrayLimit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _nonIterableRest(){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 _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}import React,{useEffect,useMemo,useState}from"react";import styles from"./index.less";export var RegExp_HighLight=/%c:(.+?):c%/i;export function strToHighlight(text){var str=text,strArr=RegExp_HighLight.exec(str);if(strArr){var textArr=[];for(;strArr!==null;strArr=RegExp_HighLight.exec(str)){var normalText=str.substring(0,strArr.index);if(normalText.trim().length){textArr.push({text:normalText})}textArr.push({hit:true,text:strArr[1]});str=str.substring(strArr[0].length+strArr.index);normalText=null}if(str.trim().length){textArr.push({text:str})}return textArr}return null}var HighlightText=function(param){var className=param.className,style=param.style,hitStyle=param.hitStyle,hitClassName=param.hitClassName,text=param.text,highlight=param.highlight,extra=param.extra,_flag=param.flag,flag=_flag===void 0?"g":_flag;var ref=_slicedToArray(useState(),2),texts=ref[0],setTexts=ref[1];var hitCls=useMemo(function(){return styles.hit+(hitClassName?" ".concat(hitClassName):"")},[hitClassName]);useEffect(function(){if(typeof text==="string"&&highlight){var str=text;if(Array.isArray(highlight)){for(var i=0,len=highlight.length;i<len;i++){var item=highlight[i];var isOne=typeof item==="string";var hitStr=isOne?item:item.highlight;var iFlag=isOne?flag:item.flag;str=str.replace(new RegExp(hitStr,iFlag),"%c:".concat(hitStr,":c%"))}}else{str=str.replace(new RegExp(highlight,flag),"%c:".concat(highlight,":c%"))}setTexts(strToHighlight(str))}else{setTexts(null)}},[flag,highlight,text]);var hitNode=useMemo(function(){var ref;return(ref=texts===null||texts===void 0?void 0:texts.map(function(item,i){return item.hit?React.createElement("span",{key:item.text+i,className:hitCls,"data-text":item.text,style:hitStyle},item.text):item.text}))!==null&&ref!==void 0?ref:text},[hitCls,hitStyle,text,texts]);return React.createElement("div",{className:className,style:style},hitNode,extra&&React.createElement("span",{className:hitCls,style:hitStyle},extra))};export default HighlightText;
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../components/highlight-text/index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport styles from './index.less';\n\n/**\n * 高亮字符串语法\n * @example\n * ```\n * const str = '%c:高亮文字:c%';\n * ```\n */\nexport const RegExp_HighLight = /%c:(.+?):c%/i;\nexport interface HighlightTextProps {\n className?: string;\n style?: React.CSSProperties;\n /** 命中高亮部分的样式 */\n hitStyle?: React.CSSProperties;\n /** 命中高亮部分的类名 */\n hitClassName?: string;\n /** 内容 */\n text?: string;\n /** 需要高亮的内容 */\n highlight?: string | ({ highlight: string; flag: HighlightFlag } | string)[];\n flag?: HighlightFlag;\n /** 额外需要高亮的内容 */\n extra?: string;\n}\nexport type HighlightFlag = 'g' | 'i' | 'm' | 'u' | 'y';\nexport type Highlight = {\n /** 命中高亮 */\n hit?: boolean;\n /** 内容 */\n text: string;\n};\n\n/**\n * 字符串转换成高亮字符的Json格式\n * @param {string} text 字符串\n * @returns {HighlightTextJsonType} 高亮字符的Json\n */\nexport function strToHighlight(text: string): Highlight[] | null {\n let str = text,\n strArr = RegExp_HighLight.exec(str);\n\n if (strArr) {\n const textArr: Highlight[] = [];\n\n for (; strArr !== null; strArr = RegExp_HighLight.exec(str)) {\n // 普通部分\n let normalText: string | null = str.substring(0, strArr.index);\n\n if (normalText.trim().length) {\n textArr.push({\n text: normalText,\n });\n }\n\n // 高亮部分\n textArr.push({\n hit: true,\n text: strArr[1],\n });\n str = str.substring(strArr[0].length + strArr.index);\n normalText = null;\n }\n if (str.trim().length) {\n textArr.push({\n text: str,\n });\n }\n return textArr;\n }\n return null;\n}\n\nconst HighlightText: React.FC<HighlightTextProps> = ({\n className,\n style,\n hitStyle,\n hitClassName,\n text,\n highlight,\n extra,\n flag = 'g',\n}) => {\n const [texts, setTexts] = useState<Highlight[] | null>();\n const hitCls = useMemo(\n () => styles.hit + (hitClassName ? ` ${hitClassName}` : ''),\n [hitClassName]\n );\n\n useEffect(() => {\n if (typeof text === 'string' && highlight) {\n let str = text;\n\n if (Array.isArray(highlight)) {\n for (let i = 0, len = highlight.length; i < len; i++) {\n const item = highlight[i];\n const isOne = typeof item === 'string';\n const hitStr = isOne ? item : item.highlight;\n const iFlag = isOne ? flag : item.flag;\n\n str = str.replace(new RegExp(hitStr, iFlag), `%c:${hitStr}:c%`);\n }\n } else {\n str = str.replace(new RegExp(highlight, flag), `%c:${highlight}:c%`);\n }\n setTexts(strToHighlight(str));\n } else {\n setTexts(null);\n }\n }, [flag, highlight, text]);\n const hitNode = useMemo(() => {\n return (\n texts?.map((item, i) => {\n return item.hit ? (\n <span key={item.text + i} className={hitCls} data-text={item.text} style={hitStyle}>\n {item.text}\n </span>\n ) : (\n item.text\n );\n }) ?? text\n );\n }, [hitCls, hitStyle, text, texts]);\n\n return (\n <div className={className} style={style}>\n {hitNode}\n {extra && (\n <span className={hitCls} style={hitStyle}>\n {extra}\n </span>\n )}\n </div>\n );\n};\n\nexport default HighlightText;\n"],"names":["React","useEffect","useMemo","useState","styles","RegExp_HighLight","strToHighlight","text","str","strArr","exec","textArr","normalText","substring","index","trim","length","push","hit","HighlightText","className","style","hitStyle","hitClassName","highlight","extra","flag","texts","setTexts","hitCls","Array","isArray","i","len","item","isOne","hitStr","iFlag","replace","RegExp","hitNode","map","span","key","data-text","div"],"mappings":"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"}
|
package/es/index.d.ts
CHANGED
|
@@ -4,7 +4,11 @@ export { default as BackTop } from './back-top';
|
|
|
4
4
|
export type { BackTopProps } from './back-top';
|
|
5
5
|
export { default as Tag } from './tag';
|
|
6
6
|
export type { TagProps } from './tag';
|
|
7
|
+
export { default as HighlightText } from './highlight-text';
|
|
8
|
+
export type { Highlight, HighlightTextProps } from './highlight-text';
|
|
7
9
|
export { default as useTheme } from './use-theme';
|
|
8
10
|
export type { ThemeTypes } from './use-theme';
|
|
9
11
|
export { default as Avatar } from './avatar';
|
|
10
12
|
export type { AvatarProps } from './avatar';
|
|
13
|
+
export { default as WaveCircle } from './wave-circle';
|
|
14
|
+
export type { WaveCircleProps } from './wave-circle';
|
package/es/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{default as Markdown}from"./markdown";export{default as BackTop}from"./back-top";export{default as Tag}from"./tag";export{default as useTheme}from"./use-theme";export{default as Avatar}from"./avatar";
|
|
1
|
+
export{default as Markdown}from"./markdown";export{default as BackTop}from"./back-top";export{default as Tag}from"./tag";export{default as HighlightText}from"./highlight-text";export{default as useTheme}from"./use-theme";export{default as Avatar}from"./avatar";export{default as WaveCircle}from"./wave-circle";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/es/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../
|
|
1
|
+
{"version":3,"sources":["../components/index.ts"],"sourcesContent":["export { default as Markdown } from './markdown';\nexport type { MarkdownProps, CodeBlockToolType, AnchorType } from './markdown';\n\nexport { default as BackTop } from './back-top';\nexport type { BackTopProps } from './back-top';\n\nexport { default as Tag } from './tag';\nexport type { TagProps } from './tag';\n\nexport { default as HighlightText } from './highlight-text';\nexport type { Highlight, HighlightTextProps } from './highlight-text';\n\nexport { default as useTheme } from './use-theme';\nexport type { ThemeTypes } from './use-theme';\n\nexport { default as Avatar } from './avatar';\nexport type { AvatarProps } from './avatar';\n\nexport { default as WaveCircle } from './wave-circle';\nexport type { WaveCircleProps } from './wave-circle';\n"],"names":["default","Markdown","BackTop","Tag","HighlightText","useTheme","Avatar","WaveCircle"],"mappings":"AAAA,OAASA,OAAO,IAAIC,QAAQ,KAAQ,YAAY,AAAC,AAGjD,QAASD,OAAO,IAAIE,OAAO,KAAQ,YAAY,AAAC,AAGhD,QAASF,OAAO,IAAIG,GAAG,KAAQ,OAAO,AAAC,AAGvC,QAASH,OAAO,IAAII,aAAa,KAAQ,kBAAkB,AAAC,AAG5D,QAASJ,OAAO,IAAIK,QAAQ,KAAQ,aAAa,AAAC,AAGlD,QAASL,OAAO,IAAIM,MAAM,KAAQ,UAAU,AAAC,AAG7C,QAASN,OAAO,IAAIO,UAAU,KAAQ,eAAe,AAAC,AACD"}
|
package/es/markdown/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/markdown/index.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { FC, MouseEvent, WheelEvent } from 'react';\nimport { getScrollTop, setClipboard } from '../utils/document';\nimport { getMarkedImgList, markdownUtil } from './markdown-util';\nimport { PhotoSlider } from 'react-photo-view';\nimport type { DataType as PhotoViewDataType } from 'react-photo-view/dist/types';\nimport 'react-photo-view/dist/react-photo-view.css';\nimport './index.global.less';\nimport isEqual from 'lodash/isEqual';\n\nexport type CodeBlockToolType = Array<'copy'>;\n\nexport interface MarkdownProps {\n className?: string;\n style?: React.CSSProperties;\n /** md内容 */\n text?: string;\n /** 开启图片查看器 */\n pictureViewer?: boolean;\n /** 显示代码块行号 */\n langLineNumber?: boolean;\n /** 开启代码块工具条 */\n tools?: CodeBlockToolType;\n /** 指定滚动的容器 */\n getAnchorContainer?: () => HTMLElement;\n /** 渲染KateX数学公式 */\n tex?: boolean;\n}\n\nexport type AnchorType = {\n anchor: HTMLAnchorElement;\n top: number;\n};\n\nconst toggleAnchor = (anchor: HTMLAnchorElement) => {\n anchor.offsetParent?.querySelectorAll('li')?.forEach((a) => {\n a.classList.remove('active');\n });\n anchor.parentElement?.classList.add('active');\n};\n\nconst Markdown: FC<MarkdownProps> = ({\n className,\n style,\n text,\n pictureViewer = true,\n langLineNumber = true,\n tools = ['copy'],\n getAnchorContainer = () => window,\n tex,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [photoIndex, setPhotoIndex] = useState(0);\n const [htmlString, setHtmlString] = useState<string>('');\n const [imgList, setImgList] = useState<PhotoViewDataType[]>([]);\n const htmlStrRef = useRef<string>(htmlString);\n const anchors = useRef<AnchorType[]>([]);\n\n useMemo(() => {\n let str = htmlStrRef.current;\n\n if (text) {\n str = markdownUtil(text, {\n langLineNumber,\n langToolbar: tools,\n tex: tex,\n });\n } else {\n str = '';\n }\n if (str !== htmlStrRef.current) {\n Object.assign(htmlStrRef, {\n current: str,\n });\n setHtmlString(str);\n }\n }, [text, langLineNumber, tools, tex]);\n\n useEffect(() => {\n const timer: NodeJS.Timeout = setTimeout(() => {\n window.Prism.highlightAll();\n if (typeof timer === 'number') clearTimeout(timer);\n }, 0);\n\n if (pictureViewer) {\n setImgList(getMarkedImgList(htmlString));\n }\n return () => {\n if (typeof timer === 'number') {\n clearTimeout(timer);\n }\n };\n }, [htmlString, pictureViewer]);\n\n const handleAnchor = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n toggleAnchor(e.target as HTMLAnchorElement);\n ref.current\n ?.querySelector(decodeURIComponent((e.target as HTMLAnchorElement)?.hash))\n ?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n };\n\n useEffect(() => {\n const _anchors: AnchorType[] = [];\n\n ref.current?.querySelectorAll('.markdown-toc li a')?.forEach((e) => {\n const a = e as HTMLAnchorElement;\n const _el = ref.current?.querySelector(\n decodeURIComponent((a as HTMLAnchorElement)?.hash)\n ) as HTMLElement;\n\n _anchors.push({\n anchor: a,\n top: _el.offsetTop,\n });\n (e as HTMLAnchorElement).onclick = handleAnchor;\n });\n\n Object.assign(anchors, {\n current: _anchors,\n });\n }, [htmlString]);\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n if (target?.tagName === 'IMG' && pictureViewer) {\n const arr = ref.current?.getElementsByTagName('img') || [];\n\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === target) {\n setPhotoIndex(i);\n setVisible(true);\n }\n }\n } else if (target.className.includes('toolbar-copy') && tools?.includes('copy')) {\n if (target.offsetParent && !target.offsetParent.hasAttribute('data-copy')) {\n setClipboard((target.offsetParent as HTMLElement).innerText, target.offsetParent);\n }\n }\n },\n [tools, pictureViewer]\n );\n\n const handleWheel = useCallback((event: WheelEvent<HTMLDivElement>) => {\n const offsetParent = (event.target as HTMLElement).offsetParent;\n\n if (!offsetParent || offsetParent.tagName !== 'PRE') {\n return;\n }\n const rows = offsetParent?.getElementsByClassName('line-numbers-rows');\n\n if (rows?.length) {\n const codeTag: HTMLElement = offsetParent.getElementsByTagName('code')[0];\n\n if (codeTag.scrollHeight - codeTag.offsetHeight && rows[0].scrollTop !== codeTag.scrollTop) {\n // 可滚动高度大于0\n rows[0].scrollTop = codeTag.scrollTop;\n }\n }\n }, []);\n const handleScroll = useCallback((e: Event) => {\n if (!anchors.current.length) return;\n const el = e.target as HTMLElement;\n const top = getScrollTop(el);\n\n let anchor: HTMLAnchorElement | null = null;\n\n anchors.current.forEach((a) => {\n if (top - a.top > -el.offsetHeight / 2) anchor = a.anchor;\n });\n\n if (anchor) {\n toggleAnchor(anchor);\n }\n }, []);\n\n useEffect(() => {\n getAnchorContainer()?.addEventListener('scroll', handleScroll);\n return () => {\n getAnchorContainer()?.removeEventListener('scroll', handleScroll);\n };\n }, [getAnchorContainer, handleScroll]);\n\n const cls = useMemo(() => ['markdown-box', className].filter(Boolean).join(' '), [className]);\n\n return (\n <Fragment>\n <div\n ref={ref}\n className={cls}\n style={style}\n dangerouslySetInnerHTML={{\n __html: htmlString,\n }}\n onClick={handleClick}\n onWheel={handleWheel}\n />\n {imgList.length ? (\n <PhotoSlider\n images={imgList}\n visible={visible}\n onClose={() => setVisible(false)}\n index={photoIndex}\n onIndexChange={setPhotoIndex}\n />\n ) : null}\n </Fragment>\n );\n};\n\nexport default React.memo(Markdown, isEqual);\n"],"names":["React","Fragment","useCallback","useEffect","useMemo","useRef","useState","getScrollTop","setClipboard","getMarkedImgList","markdownUtil","PhotoSlider","isEqual","toggleAnchor","anchor","offsetParent","querySelectorAll","forEach","a","classList","remove","parentElement","add","Markdown","className","style","text","pictureViewer","langLineNumber","tools","getAnchorContainer","window","tex","ref","visible","setVisible","photoIndex","setPhotoIndex","htmlString","setHtmlString","imgList","setImgList","htmlStrRef","anchors","str","current","langToolbar","Object","assign","timer","setTimeout","Prism","highlightAll","clearTimeout","handleAnchor","e","preventDefault","stopPropagation","target","querySelector","decodeURIComponent","hash","scrollIntoView","behavior","block","_anchors","_el","push","top","offsetTop","onclick","handleClick","event","tagName","arr","getElementsByTagName","i","len","length","includes","hasAttribute","innerText","handleWheel","rows","getElementsByClassName","codeTag","scrollHeight","offsetHeight","scrollTop","handleScroll","el","addEventListener","removeEventListener","cls","filter","Boolean","join","div","dangerouslySetInnerHTML","__html","onClick","onWheel","images","onClose","index","onIndexChange","memo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../components/markdown/index.tsx"],"sourcesContent":["import React, { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { FC, MouseEvent, WheelEvent } from 'react';\nimport { getScrollTop, setClipboard } from '../utils/document';\nimport { getMarkedImgList, markdownUtil } from './markdown-util';\nimport { PhotoSlider } from 'react-photo-view';\nimport type { DataType as PhotoViewDataType } from 'react-photo-view/dist/types';\nimport 'react-photo-view/dist/react-photo-view.css';\nimport './index.global.less';\nimport isEqual from 'lodash/isEqual';\n\nexport type CodeBlockToolType = Array<'copy'>;\n\nexport interface MarkdownProps {\n className?: string;\n style?: React.CSSProperties;\n /** md内容 */\n text?: string;\n /** 开启图片查看器 */\n pictureViewer?: boolean;\n /** 显示代码块行号 */\n langLineNumber?: boolean;\n /** 开启代码块工具条 */\n tools?: CodeBlockToolType;\n /** 指定滚动的容器 */\n getAnchorContainer?: () => HTMLElement;\n /** 渲染KateX数学公式 */\n tex?: boolean;\n}\n\nexport type AnchorType = {\n anchor: HTMLAnchorElement;\n top: number;\n};\n\nconst toggleAnchor = (anchor: HTMLAnchorElement) => {\n anchor.offsetParent?.querySelectorAll('li')?.forEach((a) => {\n a.classList.remove('active');\n });\n anchor.parentElement?.classList.add('active');\n};\n\nconst Markdown: FC<MarkdownProps> = ({\n className,\n style,\n text,\n pictureViewer = true,\n langLineNumber = true,\n tools = ['copy'],\n getAnchorContainer = () => window,\n tex,\n}) => {\n const ref = useRef<HTMLDivElement>(null);\n const [visible, setVisible] = useState(false);\n const [photoIndex, setPhotoIndex] = useState(0);\n const [htmlString, setHtmlString] = useState<string>('');\n const [imgList, setImgList] = useState<PhotoViewDataType[]>([]);\n const htmlStrRef = useRef<string>(htmlString);\n const anchors = useRef<AnchorType[]>([]);\n\n useMemo(() => {\n let str = htmlStrRef.current;\n\n if (text) {\n str = markdownUtil(text, {\n langLineNumber,\n langToolbar: tools,\n tex: tex,\n });\n } else {\n str = '';\n }\n if (str !== htmlStrRef.current) {\n Object.assign(htmlStrRef, {\n current: str,\n });\n setHtmlString(str);\n }\n }, [text, langLineNumber, tools, tex]);\n\n useEffect(() => {\n const timer: NodeJS.Timeout = setTimeout(() => {\n window.Prism.highlightAll();\n if (typeof timer === 'number') clearTimeout(timer);\n }, 0);\n\n if (pictureViewer) {\n setImgList(getMarkedImgList(htmlString));\n }\n return () => {\n if (typeof timer === 'number') {\n clearTimeout(timer);\n }\n };\n }, [htmlString, pictureViewer]);\n\n const handleAnchor = (e: Event) => {\n e.preventDefault();\n e.stopPropagation();\n toggleAnchor(e.target as HTMLAnchorElement);\n ref.current\n ?.querySelector(decodeURIComponent((e.target as HTMLAnchorElement)?.hash))\n ?.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n });\n };\n\n useEffect(() => {\n const _anchors: AnchorType[] = [];\n\n ref.current?.querySelectorAll('.markdown-toc li a')?.forEach((e) => {\n const a = e as HTMLAnchorElement;\n const _el = ref.current?.querySelector(\n decodeURIComponent((a as HTMLAnchorElement)?.hash)\n ) as HTMLElement;\n\n _anchors.push({\n anchor: a,\n top: _el.offsetTop,\n });\n (e as HTMLAnchorElement).onclick = handleAnchor;\n });\n\n Object.assign(anchors, {\n current: _anchors,\n });\n }, [htmlString]);\n\n const handleClick = useCallback(\n (event: MouseEvent<HTMLDivElement>) => {\n const target = event.target as HTMLElement;\n\n if (target?.tagName === 'IMG' && pictureViewer) {\n const arr = ref.current?.getElementsByTagName('img') || [];\n\n for (let i = 0, len = arr.length; i < len; i++) {\n if (arr[i] === target) {\n setPhotoIndex(i);\n setVisible(true);\n }\n }\n } else if (target.className.includes('toolbar-copy') && tools?.includes('copy')) {\n if (target.offsetParent && !target.offsetParent.hasAttribute('data-copy')) {\n setClipboard((target.offsetParent as HTMLElement).innerText, target.offsetParent);\n }\n }\n },\n [tools, pictureViewer]\n );\n\n const handleWheel = useCallback((event: WheelEvent<HTMLDivElement>) => {\n const offsetParent = (event.target as HTMLElement).offsetParent;\n\n if (!offsetParent || offsetParent.tagName !== 'PRE') {\n return;\n }\n const rows = offsetParent?.getElementsByClassName('line-numbers-rows');\n\n if (rows?.length) {\n const codeTag: HTMLElement = offsetParent.getElementsByTagName('code')[0];\n\n if (codeTag.scrollHeight - codeTag.offsetHeight && rows[0].scrollTop !== codeTag.scrollTop) {\n // 可滚动高度大于0\n rows[0].scrollTop = codeTag.scrollTop;\n }\n }\n }, []);\n const handleScroll = useCallback((e: Event) => {\n if (!anchors.current.length) return;\n const el = e.target as HTMLElement;\n const top = getScrollTop(el);\n\n let anchor: HTMLAnchorElement | null = null;\n\n anchors.current.forEach((a) => {\n if (top - a.top > -el.offsetHeight / 2) anchor = a.anchor;\n });\n\n if (anchor) {\n toggleAnchor(anchor);\n }\n }, []);\n\n useEffect(() => {\n getAnchorContainer()?.addEventListener('scroll', handleScroll);\n return () => {\n getAnchorContainer()?.removeEventListener('scroll', handleScroll);\n };\n }, [getAnchorContainer, handleScroll]);\n\n const cls = useMemo(() => ['markdown-box', className].filter(Boolean).join(' '), [className]);\n\n return (\n <Fragment>\n <div\n ref={ref}\n className={cls}\n style={style}\n dangerouslySetInnerHTML={{\n __html: htmlString,\n }}\n onClick={handleClick}\n onWheel={handleWheel}\n />\n {imgList.length ? (\n <PhotoSlider\n images={imgList}\n visible={visible}\n onClose={() => setVisible(false)}\n index={photoIndex}\n onIndexChange={setPhotoIndex}\n />\n ) : null}\n </Fragment>\n );\n};\n\nexport default React.memo(Markdown, isEqual);\n"],"names":["React","Fragment","useCallback","useEffect","useMemo","useRef","useState","getScrollTop","setClipboard","getMarkedImgList","markdownUtil","PhotoSlider","isEqual","toggleAnchor","anchor","offsetParent","querySelectorAll","forEach","a","classList","remove","parentElement","add","Markdown","className","style","text","pictureViewer","langLineNumber","tools","getAnchorContainer","window","tex","ref","visible","setVisible","photoIndex","setPhotoIndex","htmlString","setHtmlString","imgList","setImgList","htmlStrRef","anchors","str","current","langToolbar","Object","assign","timer","setTimeout","Prism","highlightAll","clearTimeout","handleAnchor","e","preventDefault","stopPropagation","target","querySelector","decodeURIComponent","hash","scrollIntoView","behavior","block","_anchors","_el","push","top","offsetTop","onclick","handleClick","event","tagName","arr","getElementsByTagName","i","len","length","includes","hasAttribute","innerText","handleWheel","rows","getElementsByClassName","codeTag","scrollHeight","offsetHeight","scrollTop","handleScroll","el","addEventListener","removeEventListener","cls","filter","Boolean","join","div","dangerouslySetInnerHTML","__html","onClick","onWheel","images","onClose","index","onIndexChange","memo"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../
|
|
1
|
+
{"version":3,"sources":["../../components/markdown/markdown-util.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\nimport marked from 'marked-completed';\nimport { entityToString } from '../utils/document';\nimport type { DataType as PhotoViewDataType } from 'react-photo-view/dist/types';\nimport * as Prism from './prism.js';\nimport katex from 'katex';\nimport 'katex/dist/katex.css';\n\nconst renderer = new marked.Renderer();\n\nconst replacer = ((blockRegex, inlineRegex) => (text: string) => {\n text = text.replace(blockRegex, (_, expression) => {\n return katex.renderToString(expression, { displayMode: true });\n });\n\n text = text.replace(inlineRegex, (_, expression) => {\n return katex.renderToString(expression, { displayMode: false, output: 'html' });\n });\n\n return text;\n})(/\\$\\$([\\s\\S]+?)\\$\\$/g, /\\$([^\\n\\s]+?)\\$/g);\n\n['listitem', 'paragraph', 'tablecell', 'text'].forEach((type) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const original = renderer[type as keyof marked.Renderer] as any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (renderer[type as keyof marked.Renderer] as any) = (...args: string[]) => {\n args[0] = replacer(args[0]);\n return original(args);\n };\n});\n\nmarked.setOptions({\n highlight: function (code: string, lang: string) {\n const LANGUAGE_REGEX = /^diff-([\\w-]+)/i;\n\n if (Prism.languages[lang]) {\n return Prism.highlight(code, Prism.languages[lang], lang);\n } else if (LANGUAGE_REGEX.test(lang)) {\n Prism.languages[lang] = Prism.languages.diff;\n return Prism.highlight(code, Prism.languages[lang], lang);\n }\n\n return Prism.highlight(code, Prism.languages.markup, 'markup');\n },\n headerPrefix: '# ',\n langLineNumber: true,\n langToolbar: ['copy'],\n breaks: true,\n pedantic: false,\n smartLists: true,\n smartypants: true,\n xhtml: true,\n});\n\n/**\n * Markdown to Html\n * @param {string} text Markdown文本\n * @param {MarkedOptions} option MarkedOptions\n * @returns {string} Html文本\n */\nexport const markdownUtil = (\n text: string,\n option: marked.MarkedOptions & { tex?: boolean } = {}\n): string => {\n const { tex, ...opt } = option;\n\n if (tex) {\n opt.renderer = renderer;\n }\n return marked(text, opt);\n};\n\n/**\n * 提取md图片src\n * @param {string} text HTML string\n * @returns {PhotoViewDataType[]} PhotoViewDataType\n */\nexport const getMarkedImgList = (text: string): PhotoViewDataType[] => {\n if (!text) return [];\n const imageList = text.match(/role=('|\")dialog('|\") src=('|\")(.*?) alt=('|\")(.*?)('|\")/g);\n const imageArr = [];\n\n if (imageList) {\n for (let i = 0, len = imageList.length; i < len; i++) {\n const params: URLSearchParams = new URLSearchParams(\n entityToString(\n imageList[i].replace(/('|\")/g, '').replace(/ src=/, '&src=').replace(/ alt=/, '&alt=')\n )\n );\n\n imageArr.push({\n intro: params.get('alt') || '' + i,\n src: params.get('src') || '',\n key: i,\n });\n }\n }\n return imageArr;\n};\n"],"names":["marked","entityToString","Prism","katex","renderer","Renderer","replacer","blockRegex","inlineRegex","text","replace","_","expression","renderToString","displayMode","output","forEach","type","original","args","setOptions","highlight","code","lang","LANGUAGE_REGEX","languages","test","diff","markup","headerPrefix","langLineNumber","langToolbar","breaks","pedantic","smartLists","smartypants","xhtml","markdownUtil","option","tex","opt","getMarkedImgList","imageList","match","imageArr","i","len","length","params","URLSearchParams","push","intro","get","src","key"],"mappings":"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"}
|