neko-ui 0.0.5 → 0.0.7

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.
Files changed (56) hide show
  1. package/es/back-top/index.js +1 -1
  2. package/es/back-top/index.js.map +1 -1
  3. package/es/back-top/index.less +2 -0
  4. package/es/get-default-theme/index.d.ts +7 -0
  5. package/es/get-default-theme/index.js +2 -0
  6. package/es/get-default-theme/index.js.map +1 -0
  7. package/es/index.d.ts +5 -0
  8. package/es/index.js +1 -1
  9. package/es/index.js.map +1 -1
  10. package/es/markdown/index.global.less +6 -5
  11. package/es/markdown/index.js +1 -1
  12. package/es/markdown/index.js.map +1 -1
  13. package/es/markdown/md.less +11 -13
  14. package/es/markdown/pre-code.less +197 -198
  15. package/es/markdown/prism.js +1 -1
  16. package/es/markdown/prism.js.map +1 -1
  17. package/es/tag/index.d.ts +6 -0
  18. package/es/tag/index.js +2 -0
  19. package/es/tag/index.js.map +1 -0
  20. package/es/tag/index.less +22 -0
  21. package/es/{utils/use-theme.d.ts → use-theme/index.d.ts} +3 -8
  22. package/es/{utils/use-theme.js → use-theme/index.js} +2 -2
  23. package/es/use-theme/index.js.map +1 -0
  24. package/lib/back-top/index.js +1 -1
  25. package/lib/back-top/index.js.map +1 -1
  26. package/lib/back-top/index.less +2 -0
  27. package/lib/get-default-theme/index.d.ts +7 -0
  28. package/lib/get-default-theme/index.js +2 -0
  29. package/lib/get-default-theme/index.js.map +1 -0
  30. package/lib/index.d.ts +5 -0
  31. package/lib/index.js +1 -1
  32. package/lib/index.js.map +1 -1
  33. package/lib/markdown/index.global.less +6 -5
  34. package/lib/markdown/index.js +1 -1
  35. package/lib/markdown/index.js.map +1 -1
  36. package/lib/markdown/markdown-util.js +1 -1
  37. package/lib/markdown/markdown-util.js.map +1 -1
  38. package/lib/markdown/md.less +11 -13
  39. package/lib/markdown/pre-code.less +197 -198
  40. package/lib/markdown/prism.js +1 -1
  41. package/lib/markdown/prism.js.map +1 -1
  42. package/lib/tag/index.d.ts +6 -0
  43. package/lib/tag/index.js +2 -0
  44. package/lib/tag/index.js.map +1 -0
  45. package/lib/tag/index.less +22 -0
  46. package/lib/{utils/use-theme.d.ts → use-theme/index.d.ts} +3 -8
  47. package/lib/use-theme/index.js +2 -0
  48. package/lib/use-theme/index.js.map +1 -0
  49. package/lib/utils/document.js +1 -1
  50. package/lib/utils/document.js.map +1 -1
  51. package/lib/utils/str-to-highlight.js +1 -1
  52. package/lib/utils/str-to-highlight.js.map +1 -1
  53. package/package.json +10 -9
  54. package/es/utils/use-theme.js.map +0 -1
  55. package/lib/utils/use-theme.js +0 -2
  56. package/lib/utils/use-theme.js.map +0 -1
@@ -1,2 +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 _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 _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 _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}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,{useCallback,useMemo,useRef}from"react";import styles from"./index.less";import{getMaxZindex,getScrollTop}from"../utils/document";import{isEqual,isFunction}from"lodash";var BackTop=function(_param){var _target=_param.target,target=_target===void 0?function(){return window}:_target,_visibilityHeight=_param.visibilityHeight,visibilityHeight=_visibilityHeight===void 0?400:_visibilityHeight,className=_param.className,props=_objectWithoutProperties(_param,["target","visibilityHeight","className"]);var ref3=useRef(null);var ref1=_slicedToArray(React.useState(null),2),show=ref1[0],setShow=ref1[1];var ref2=_slicedToArray(React.useState(false),2),init=ref2[0],setInit=ref2[1];var handleScrollY=React.useCallback(function(){var scrollTop=0;var offsetHeight=0;if(isFunction(target)){var ele=target();if(ele){scrollTop=getScrollTop(ele);offsetHeight=ele.offsetHeight}ele=null}else{scrollTop=getScrollTop();offsetHeight=document.documentElement.offsetHeight||document.body.offsetHeight}var nextShow=scrollTop>offsetHeight/3||scrollTop>visibilityHeight;if(Boolean(show)!==nextShow){setShow(nextShow)}},[show,target,visibilityHeight]);var handleBackTop=useCallback(function(){var ref;(ref=target())===null||ref===void 0?void 0:ref.scrollTo({top:0,behavior:"smooth"})},[target]);React.useEffect(function(){var timer;var outing=show===false;if(show&&ref3.current){ref3.current.style.zIndex=getMaxZindex().toString()}if(init){if(outing){timer=setTimeout(function(){setShow(null);clearTimeout(timer)},1e3)}}else{if(outing){setShow(null)}setInit(true)}return function(){clearTimeout(timer)}},[init,show]);React.useEffect(function(){if(isFunction(target)){var ref;(ref=target())===null||ref===void 0?void 0:ref.addEventListener("scroll",handleScrollY,false)}return function(){if(isFunction(target)){var ref;(ref=target())===null||ref===void 0?void 0:ref.removeEventListener("scroll",handleScrollY,false)}}},[handleScrollY,target]);var cls=useMemo(function(){return[styles.backTop,className,!show&&styles.out].filter(Boolean).join(" ")},[className,show]);return show===null?null:React.createElement("div",_extends({},props,{ref:ref3,className:cls,onClick:handleBackTop}))};export default React.memo(BackTop,isEqual)
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 _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 _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 _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}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,{memo,useCallback,useEffect,useMemo,useRef,useState}from"react";import styles from"./index.less";import{getMaxZindex,getScrollTop}from"../utils/document";import{isEqual,isFunction}from"lodash";var BackTop=function(_param){var _target=_param.target,target=_target===void 0?function(){return window}:_target,_visibilityHeight=_param.visibilityHeight,visibilityHeight=_visibilityHeight===void 0?400:_visibilityHeight,className=_param.className,props=_objectWithoutProperties(_param,["target","visibilityHeight","className"]);var ref=useRef(null);var ref1=_slicedToArray(useState(null),2),show=ref1[0],setShow=ref1[1];var ref2=_slicedToArray(useState(false),2),init=ref2[0],setInit=ref2[1];var handleScrollY=useCallback(function(){var scrollTop=0;var offsetHeight=0;if(isFunction(target)){var ele=target();if(ele){scrollTop=getScrollTop(ele);offsetHeight=ele.offsetHeight}ele=null}else{scrollTop=getScrollTop();offsetHeight=document.documentElement.offsetHeight||document.body.offsetHeight}var nextShow=scrollTop>offsetHeight/3||scrollTop>visibilityHeight;if(Boolean(show)!==nextShow){setShow(nextShow)}},[show,target,visibilityHeight]);var handleBackTop=useCallback(function(){var ref;(ref=target())===null||ref===void 0?void 0:ref.scrollTo({top:0,behavior:"smooth"})},[target]);React.useEffect(function(){var timer;var outing=show===false;if(show&&ref.current){ref.current.style.zIndex=getMaxZindex().toString()}if(init){if(outing){timer=setTimeout(function(){setShow(null);clearTimeout(timer)},1e3)}}else{if(outing){setShow(null)}setInit(true)}return function(){clearTimeout(timer)}},[init,show]);useEffect(function(){if(isFunction(target)){var ref;(ref=target())===null||ref===void 0?void 0:ref.addEventListener("scroll",handleScrollY,false)}return function(){if(isFunction(target)){var ref;(ref=target())===null||ref===void 0?void 0:ref.removeEventListener("scroll",handleScrollY,false)}}},[handleScrollY,target]);var cls=useMemo(function(){return[styles.backTop,className,!show&&styles.out].filter(Boolean).join(" ")},[className,show]);return show===null?null:React.createElement("div",_extends({},props,{ref:ref,className:cls,onClick:handleBackTop}))};export default memo(BackTop,isEqual)
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../components/back-top/index.tsx"],"sourcesContent":["import React, { useCallback, useMemo, useRef } from 'react';\nimport styles from './index.less';\nimport { getMaxZindex, getScrollTop } from '../utils/document';\nimport { isEqual, isFunction } from 'lodash';\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] = React.useState<boolean | null>(null);\n const [init, setInit] = React.useState<boolean>(false);\n const handleScrollY = React.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 React.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 React.memo(BackTop, isEqual);\n"],"names":["React","useCallback","useMemo","useRef","styles","getMaxZindex","getScrollTop","isEqual","isFunction","BackTop","target","window","visibilityHeight","className","props","ref","useState","show","setShow","init","setInit","handleScrollY","scrollTop","offsetHeight","ele","document","documentElement","body","nextShow","Boolean","handleBackTop","scrollTo","top","behavior","useEffect","timer","outing","current","style","zIndex","toString","setTimeout","clearTimeout","addEventListener","removeEventListener","cls","backTop","out","filter","join","div","onClick","memo"],"mappings":"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"}
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, isFunction } from 'lodash';\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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"}
@@ -25,7 +25,9 @@
25
25
  border-radius: 50%;
26
26
  color: var(--back-top-color);
27
27
  background-color: var(--back-top-bg);
28
+ backdrop-filter: blur(16px);
28
29
  transition: background-color .3s, color .3s;
30
+ z-index: 9;
29
31
 
30
32
  &::before {
31
33
  content: '';
@@ -0,0 +1,7 @@
1
+ import type { ThemeTypes } from 'neko-ui';
2
+ /**
3
+ * 判断当前时间是晚上还是白天
4
+ * @returns {string} light | dark
5
+ */
6
+ declare const getDefaultTheme: () => ThemeTypes['type'];
7
+ export default getDefaultTheme;
@@ -0,0 +1,2 @@
1
+ var getDefaultTheme=function(){var endTime=new Date().setHours(6,0,0,0);var startTime=new Date().setHours(18,0,0,0);var justNowTime=new Date().getTime();var defaultTheme="light";if(justNowTime>endTime){if(justNowTime>startTime){defaultTheme="dark"}else{defaultTheme="light"}}else{defaultTheme="dark"}endTime=null;startTime=null;justNowTime=null;return defaultTheme};export default getDefaultTheme
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../components/get-default-theme/index.ts"],"sourcesContent":["import type { ThemeTypes } from 'neko-ui';\n\n/**\n * 判断当前时间是晚上还是白天\n * @returns {string} light | dark\n */\nconst getDefaultTheme = (): ThemeTypes['type'] => {\n let endTime: number | null = new Date().setHours(6, 0, 0, 0); // 当天6点\n let startTime: number | null = new Date().setHours(18, 0, 0, 0); // 当天18点\n let justNowTime: number | null = new Date().getTime(); // 现在\n let defaultTheme: ThemeTypes['type'] = 'light';\n\n if (justNowTime > endTime) {\n // 过了早上6点\n if (justNowTime > startTime) {\n // 过晚上6点,晚上\n defaultTheme = 'dark';\n } else {\n // 白天\n defaultTheme = 'light';\n }\n } else {\n // 还是晚上\n defaultTheme = 'dark';\n }\n\n endTime = null;\n startTime = null;\n justNowTime = null;\n return defaultTheme;\n};\n\nexport default getDefaultTheme;\n"],"names":["getDefaultTheme","endTime","Date","setHours","startTime","justNowTime","getTime","defaultTheme"],"mappings":"AAMA,IAAMA,eAAe,CAAG,UAA0B,CAChD,IAAIC,OAAO,CAAkB,IAAIC,IAAI,EAAE,CAACC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAAC,AAAC,AAC7D,KAAIC,SAAS,CAAkB,IAAIF,IAAI,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,CAAC,AAAC,AAChE,KAAIE,WAAW,CAAkB,IAAIH,IAAI,EAAE,CAACI,OAAO,EAAE,AAAC,AACtD,KAAIC,YAAY,CAAuB,OAAO,AAAC,AAE/C,IAAIF,WAAW,CAAGJ,OAAO,CAAE,CAEzB,GAAII,WAAW,CAAGD,SAAS,CAAE,CAE3BG,YAAY,CAAG,MAAM,CACtB,IAAM,CAELA,YAAY,CAAG,OAAO,CACvB,CACF,IAAM,CAELA,YAAY,CAAG,MAAM,CACtB,AAEDN,OAAO,CAAG,IAAI,AACdG,CAAAA,SAAS,CAAG,IAAI,AAChBC,CAAAA,WAAW,CAAG,IAAI,AAClB,QAAOE,YAAY,AAAC,CACrB,AAAC,AAEF,gBAAeP,eAAe,AAAC"}
package/es/index.d.ts CHANGED
@@ -2,3 +2,8 @@ export { default as Markdown } from './markdown';
2
2
  export type { MarkdownProps, CodeBlockToolType, AnchorType } from './markdown';
3
3
  export { default as BackTop } from './back-top';
4
4
  export type { BackTopProps } from './back-top';
5
+ export { default as Tag } from './tag';
6
+ export type { TagProps } from './tag';
7
+ export { default as useTheme } from './use-theme';
8
+ export type { ThemeTypes } from './use-theme';
9
+ export { default as getDefaultTheme } from './get-default-theme';
package/es/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{default as Markdown}from"./markdown";export{default as BackTop}from"./back-top"
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 getDefaultTheme}from"./get-default-theme"
2
2
  //# sourceMappingURL=index.js.map
package/es/index.js.map CHANGED
@@ -1 +1 @@
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"],"names":["default","Markdown","BackTop"],"mappings":"AAAA,OAASA,OAAO,IAAIC,QAAQ,KAAQ,YAAY,AAAC,AAGjD,QAASD,OAAO,IAAIE,OAAO,KAAQ,YAAY,AAAC,AACD"}
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 useTheme } from './use-theme';\nexport type { ThemeTypes } from './use-theme';\n\nexport { default as getDefaultTheme } from './get-default-theme';\n"],"names":["default","Markdown","BackTop","Tag","useTheme","getDefaultTheme"],"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,QAAQ,KAAQ,aAAa,AAAC,AAGlD,QAASJ,OAAO,IAAIK,eAAe,KAAQ,qBAAqB,AAAC"}
@@ -1,5 +1,6 @@
1
- @import url('./vars.less');
2
- @import url('./icon.less');
3
- @import url('./copy.less');
4
- @import url('./md.less');
5
- @import url('./pre-code.less');
1
+ // @import url('./vars.less');
2
+ // @import url('./icon.less');
3
+ // @import url('./copy.less');
4
+ // @import url('./md.less');
5
+ // @import url('./pre-code.less');
6
+ @import './vars.less';
@@ -1,2 +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,{Fragment,useCallback,useEffect,useMemo,useRef,useState}from"react";import{getScrollTop,setClipboard}from"../utils/document";import{getMarkedImgList,markdownUtil}from"./markdown-util";import{PhotoSlider}from"react-photo-view";import"react-photo-view/dist/react-photo-view.css";import"./index.global.less";import isEqual from"lodash/isEqual";var toggleAnchor=function(anchor){var ref,ref1,ref2;(ref1=(ref=anchor.offsetParent)===null||ref===void 0?void 0:ref.querySelectorAll("li"))===null||ref1===void 0?void 0:ref1.forEach(function(a){a.classList.remove("active")});(ref2=anchor.parentElement)===null||ref2===void 0?void 0:ref2.classList.add("active")};var Markdown=function(param){var className=param.className,style=param.style,text=param.text,_pictureViewer=param.pictureViewer,pictureViewer=_pictureViewer===void 0?true:_pictureViewer,_langLineNumber=param.langLineNumber,langLineNumber=_langLineNumber===void 0?true:_langLineNumber,_tools=param.tools,tools=_tools===void 0?["copy"]:_tools,_getAnchorContainer=param.getAnchorContainer,getAnchorContainer=_getAnchorContainer===void 0?function(){return window}:_getAnchorContainer;var ref9=useRef(null);var ref3=_slicedToArray(useState(false),2),visible=ref3[0],setVisible=ref3[1];var ref4=_slicedToArray(useState(0),2),photoIndex=ref4[0],setPhotoIndex=ref4[1];var ref5=_slicedToArray(useState(""),2),htmlString=ref5[0],setHtmlString=ref5[1];var ref6=_slicedToArray(useState([]),2),imgList=ref6[0],setImgList=ref6[1];var htmlStrRef=useRef(htmlString);var anchors=useRef([]);useMemo(function(){var str=htmlStrRef.current;if(text){str=markdownUtil(text,{langLineNumber:langLineNumber,langToolbar:tools})}else{str=""}if(str!==htmlStrRef.current){Object.assign(htmlStrRef,{current:str});setHtmlString(str)}},[langLineNumber,tools,text]);useEffect(function(){var timer=setTimeout(function(){window.Prism.highlightAll();if(typeof timer==="number")clearTimeout(timer)},0);if(pictureViewer){setImgList(getMarkedImgList(htmlString))}return function(){if(typeof timer==="number"){clearTimeout(timer)}}},[htmlString,pictureViewer]);var handleAnchor=function(e){var ref,ref7,ref8;e.preventDefault();e.stopPropagation();toggleAnchor(e.target);(ref8=(ref=ref9.current)===null||ref===void 0?void 0:ref.querySelector(decodeURIComponent((ref7=e.target)===null||ref7===void 0?void 0:ref7.hash)))===null||ref8===void 0?void 0:ref8.scrollIntoView({behavior:"smooth",block:"center"})};useEffect(function(){var ref12,ref10;var _anchors=[];(ref10=(ref12=ref9.current)===null||ref12===void 0?void 0:ref12.querySelectorAll(".markdown-toc li a"))===null||ref10===void 0?void 0:ref10.forEach(function(e){var ref,ref11;var a=e;var _el=(ref=ref9.current)===null||ref===void 0?void 0:ref.querySelector(decodeURIComponent((ref11=a)===null||ref11===void 0?void 0:ref11.hash));_anchors.push({anchor:a,top:_el.offsetTop});e.onclick=handleAnchor});Object.assign(anchors,{current:_anchors})},[htmlString]);var handleClick=useCallback(function(event){var target=event.target;if((target===null||target===void 0?void 0:target.tagName)==="IMG"&&pictureViewer){var ref;var arr=((ref=ref9.current)===null||ref===void 0?void 0:ref.getElementsByTagName("img"))||[];for(var i=0,len=arr.length;i<len;i++){if(arr[i]===target){setPhotoIndex(i);setVisible(true)}}}else if(target.className.includes("toolbar-copy")&&(tools===null||tools===void 0?void 0:tools.includes("copy"))){if(target.offsetParent&&!target.offsetParent.hasAttribute("data-copy")){setClipboard(target.offsetParent.innerText,target.offsetParent)}}},[tools,pictureViewer]);var handleWheel=useCallback(function(event){var offsetParent=event.target.offsetParent;if(!offsetParent||offsetParent.tagName!=="PRE"){return}var rows=offsetParent===null||offsetParent===void 0?void 0:offsetParent.getElementsByClassName("line-numbers-rows");if(rows===null||rows===void 0?void 0:rows.length){var codeTag=offsetParent.getElementsByTagName("code")[0];if(codeTag.scrollHeight-codeTag.offsetHeight&&rows[0].scrollTop!==codeTag.scrollTop){rows[0].scrollTop=codeTag.scrollTop}}},[]);var handleScroll=useCallback(function(e){if(!anchors.current.length)return;var el=e.target;var top=getScrollTop(el);var anchor=null;anchors.current.forEach(function(a){if(top-a.top> -el.offsetHeight/2)anchor=a.anchor});if(anchor){toggleAnchor(anchor)}},[]);useEffect(function(){var ref13;(ref13=getAnchorContainer())===null||ref13===void 0?void 0:ref13.addEventListener("scroll",handleScroll);return function(){var ref;(ref=getAnchorContainer())===null||ref===void 0?void 0:ref.removeEventListener("scroll",handleScroll)}},[getAnchorContainer,handleScroll]);var cls=useMemo(function(){return["markdown-box",className].filter(Boolean).join(" ")},[className]);return React.createElement(Fragment,null,React.createElement("div",{ref:ref9,className:cls,style:style,dangerouslySetInnerHTML:{__html:htmlString},onClick:handleClick,onWheel:handleWheel}),imgList.length?React.createElement(PhotoSlider,{images:imgList,visible:visible,onClose:function(){return setVisible(false)},index:photoIndex,onIndexChange:setPhotoIndex}):null)};export default React.memo(Markdown,isEqual)
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,{Fragment,useCallback,useEffect,useMemo,useRef,useState}from"react";import{getScrollTop,setClipboard}from"../utils/document";import{getMarkedImgList,markdownUtil}from"./markdown-util";import{PhotoSlider}from"react-photo-view";import"react-photo-view/dist/react-photo-view.css";import"./index.global.less";import isEqual from"lodash/isEqual";var toggleAnchor=function(anchor){var ref,ref1,ref2;(ref1=(ref=anchor.offsetParent)===null||ref===void 0?void 0:ref.querySelectorAll("li"))===null||ref1===void 0?void 0:ref1.forEach(function(a){a.classList.remove("active")});(ref2=anchor.parentElement)===null||ref2===void 0?void 0:ref2.classList.add("active")};var Markdown=function(param){var className=param.className,style=param.style,text=param.text,_pictureViewer=param.pictureViewer,pictureViewer=_pictureViewer===void 0?true:_pictureViewer,_langLineNumber=param.langLineNumber,langLineNumber=_langLineNumber===void 0?true:_langLineNumber,_tools=param.tools,tools=_tools===void 0?["copy"]:_tools,_getAnchorContainer=param.getAnchorContainer,getAnchorContainer=_getAnchorContainer===void 0?function(){return window}:_getAnchorContainer;var ref=useRef(null);var ref1=_slicedToArray(useState(false),2),visible=ref1[0],setVisible=ref1[1];var ref2=_slicedToArray(useState(0),2),photoIndex=ref2[0],setPhotoIndex=ref2[1];var ref3=_slicedToArray(useState(""),2),htmlString=ref3[0],setHtmlString=ref3[1];var ref4=_slicedToArray(useState([]),2),imgList=ref4[0],setImgList=ref4[1];var htmlStrRef=useRef(htmlString);var anchors=useRef([]);useMemo(function(){var str=htmlStrRef.current;if(text){str=markdownUtil(text,{langLineNumber:langLineNumber,langToolbar:tools})}else{str=""}if(str!==htmlStrRef.current){Object.assign(htmlStrRef,{current:str});setHtmlString(str)}},[langLineNumber,tools,text]);useEffect(function(){var timer=setTimeout(function(){window.Prism.highlightAll();if(typeof timer==="number")clearTimeout(timer)},0);if(pictureViewer){setImgList(getMarkedImgList(htmlString))}return function(){if(typeof timer==="number"){clearTimeout(timer)}}},[htmlString,pictureViewer]);var handleAnchor=function(e){var ref1,ref2,ref3;e.preventDefault();e.stopPropagation();toggleAnchor(e.target);(ref3=(ref1=ref.current)===null||ref1===void 0?void 0:ref1.querySelector(decodeURIComponent((ref2=e.target)===null||ref2===void 0?void 0:ref2.hash)))===null||ref3===void 0?void 0:ref3.scrollIntoView({behavior:"smooth",block:"center"})};useEffect(function(){var ref1,ref2;var _anchors=[];(ref2=(ref1=ref.current)===null||ref1===void 0?void 0:ref1.querySelectorAll(".markdown-toc li a"))===null||ref2===void 0?void 0:ref2.forEach(function(e){var ref1,ref2;var a=e;var _el=(ref1=ref.current)===null||ref1===void 0?void 0:ref1.querySelector(decodeURIComponent((ref2=a)===null||ref2===void 0?void 0:ref2.hash));_anchors.push({anchor:a,top:_el.offsetTop});e.onclick=handleAnchor});Object.assign(anchors,{current:_anchors})},[htmlString]);var handleClick=useCallback(function(event){var target=event.target;if((target===null||target===void 0?void 0:target.tagName)==="IMG"&&pictureViewer){var ref1;var arr=((ref1=ref.current)===null||ref1===void 0?void 0:ref1.getElementsByTagName("img"))||[];for(var i=0,len=arr.length;i<len;i++){if(arr[i]===target){setPhotoIndex(i);setVisible(true)}}}else if(target.className.includes("toolbar-copy")&&(tools===null||tools===void 0?void 0:tools.includes("copy"))){if(target.offsetParent&&!target.offsetParent.hasAttribute("data-copy")){setClipboard(target.offsetParent.innerText,target.offsetParent)}}},[tools,pictureViewer]);var handleWheel=useCallback(function(event){var offsetParent=event.target.offsetParent;if(!offsetParent||offsetParent.tagName!=="PRE"){return}var rows=offsetParent===null||offsetParent===void 0?void 0:offsetParent.getElementsByClassName("line-numbers-rows");if(rows===null||rows===void 0?void 0:rows.length){var codeTag=offsetParent.getElementsByTagName("code")[0];if(codeTag.scrollHeight-codeTag.offsetHeight&&rows[0].scrollTop!==codeTag.scrollTop){rows[0].scrollTop=codeTag.scrollTop}}},[]);var handleScroll=useCallback(function(e){if(!anchors.current.length)return;var el=e.target;var top=getScrollTop(el);var anchor=null;anchors.current.forEach(function(a){if(top-a.top> -el.offsetHeight/2)anchor=a.anchor});if(anchor){toggleAnchor(anchor)}},[]);useEffect(function(){var ref;(ref=getAnchorContainer())===null||ref===void 0?void 0:ref.addEventListener("scroll",handleScroll);return function(){var ref;(ref=getAnchorContainer())===null||ref===void 0?void 0:ref.removeEventListener("scroll",handleScroll)}},[getAnchorContainer,handleScroll]);var cls=useMemo(function(){return["markdown-box",className].filter(Boolean).join(" ")},[className]);return React.createElement(Fragment,null,React.createElement("div",{ref:ref,className:cls,style:style,dangerouslySetInnerHTML:{__html:htmlString},onClick:handleClick,onWheel:handleWheel}),imgList.length?React.createElement(PhotoSlider,{images:imgList,visible:visible,onClose:function(){return setVisible(false)},index:photoIndex,onIndexChange:setPhotoIndex}):null)};export default React.memo(Markdown,isEqual)
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
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}\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}) => {\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 });\n } else {\n str = '';\n }\n if (str !== htmlStrRef.current) {\n Object.assign(htmlStrRef, {\n current: str,\n });\n setHtmlString(str);\n }\n }, [langLineNumber, tools, text]);\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","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}\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}) => {\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 });\n } else {\n str = '';\n }\n if (str !== htmlStrRef.current) {\n Object.assign(htmlStrRef, {\n current: str,\n });\n setHtmlString(str);\n }\n }, [langLineNumber, tools, text]);\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","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":"AAAA,2zCAAA,OAAOA,KAAK,EAAIC,QAAQ,CAAEC,WAAW,CAAEC,SAAS,CAAEC,OAAO,CAAEC,MAAM,CAAEC,QAAQ,KAAQ,OAAO,AAAC,AAE3F,QAASC,YAAY,CAAEC,YAAY,KAAQ,mBAAmB,AAAC,AAC/D,QAASC,gBAAgB,CAAEC,YAAY,KAAQ,iBAAiB,AAAC,AACjE,QAASC,WAAW,KAAQ,kBAAkB,AAAC,AAE/C,OAAO,4CAA4C,AAAC,AACpD,OAAO,qBAAqB,AAAC,AAC7B,QAAOC,OAAO,KAAM,gBAAgB,AAAC,AAwBrC,KAAMC,YAAY,CAAG,SAACC,MAAyB,CAAK,KAClDA,GAAmB,MAGnBA,IAAoB,AAHpBA,OAAAA,CAAAA,GAAmB,CAAnBA,MAAM,CAACC,YAAY,UAAnBD,GAAmB,SAAkB,CAArCA,KAAAA,CAAqC,CAArCA,GAAmB,CAAEE,gBAAgB,CAAC,IAAI,CAAC,uBAAS,CAApDF,KAAAA,CAAoD,CAApDA,KAA6CG,OAAO,CAAC,SAACC,CAAC,CAAK,CAC1DA,CAAC,CAACC,SAAS,CAACC,MAAM,CAAC,QAAQ,CAAC,CAC7B,CAAC,AACFN,EAAAA,IAAoB,CAApBA,MAAM,CAACO,aAAa,UAApBP,IAAoB,SAAW,CAA/BA,KAAAA,CAA+B,CAA/BA,IAAoB,CAAEK,SAAS,CAACG,GAAG,CAAC,QAAQ,CAAC,CAC9C,AAAC,AAEF,KAAMC,QAAQ,CAAsB,eAQ9B,KAPJC,SAAS,OAATA,SAAS,CACTC,KAAK,OAALA,KAAK,CACLC,IAAI,OAAJA,IAAI,sBACJC,aAAa,CAAbA,aAAa,yBAAG,IAAI,eAAA,uBACpBC,cAAc,CAAdA,cAAc,0BAAG,IAAI,gBAAA,cACrBC,KAAK,CAALA,KAAK,iBAAG,CAAC,MAAM,CAAC,OAAA,2BAChBC,kBAAkB,CAAlBA,kBAAkB,8BAAG,kBAAMC,MAAM,CAAA,oBAAA,AAEjC,KAAMC,GAAG,CAAG3B,MAAM,CAAiB,IAAI,CAAC,AAAC,AACzC,KAA8BC,IAAe,gBAAfA,QAAQ,CAAC,KAAK,CAAC,GAAA,CAAtC2B,OAAO,CAAgB3B,IAAe,GAA/B,CAAE4B,UAAU,CAAI5B,IAAe,GAAnB,AAAoB,AAC9C,KAAoCA,IAAW,gBAAXA,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAxC6B,UAAU,CAAmB7B,IAAW,GAA9B,CAAE8B,aAAa,CAAI9B,IAAW,GAAf,AAAgB,AAChD,KAAoCA,IAAoB,gBAApBA,QAAQ,CAAS,EAAE,CAAC,GAAA,CAAjD+B,UAAU,CAAmB/B,IAAoB,GAAvC,CAAEgC,aAAa,CAAIhC,IAAoB,GAAxB,AAAyB,AACzD,KAA8BA,IAAiC,gBAAjCA,QAAQ,CAAsB,EAAE,CAAC,GAAA,CAAxDiC,OAAO,CAAgBjC,IAAiC,GAAjD,CAAEkC,UAAU,CAAIlC,IAAiC,GAArC,AAAsC,AAChE,KAAMmC,UAAU,CAAGpC,MAAM,CAASgC,UAAU,CAAC,AAAC,AAC9C,KAAMK,OAAO,CAAGrC,MAAM,CAAe,EAAE,CAAC,AAAC,AAEzCD,CAAAA,OAAO,CAAC,UAAM,CACZ,IAAIuC,GAAG,CAAGF,UAAU,CAACG,OAAO,AAAC,AAE7B,IAAIlB,IAAI,CAAE,CACRiB,GAAG,CAAGjC,YAAY,CAACgB,IAAI,CAAE,CACvBE,cAAc,CAAdA,cAAc,CACdiB,WAAW,CAAEhB,KAAK,CACnB,CAAC,CACH,IAAM,CACLc,GAAG,CAAG,EAAE,CACT,AACD,GAAIA,GAAG,GAAKF,UAAU,CAACG,OAAO,CAAE,CAC9BE,MAAM,CAACC,MAAM,CAACN,UAAU,CAAE,CACxBG,OAAO,CAAED,GAAG,CACb,CAAC,AACFL,CAAAA,aAAa,CAACK,GAAG,CAAC,CACnB,CACF,CAAE,CAACf,cAAc,CAAEC,KAAK,CAAEH,IAAI,CAAC,CAAC,AAEjCvB,CAAAA,SAAS,CAAC,UAAM,CACd,IAAM6C,KAAK,CAAmBC,UAAU,CAAC,UAAM,CAC7ClB,MAAM,CAACmB,KAAK,CAACC,YAAY,EAAE,AAC3B,IAAI,OAAOH,KAAK,GAAK,QAAQ,CAAEI,YAAY,CAACJ,KAAK,CAAC,AAAC,CACpD,CAAE,CAAC,CAAC,AAAC,AAEN,IAAIrB,aAAa,CAAE,CACjBa,UAAU,CAAC/B,gBAAgB,CAAC4B,UAAU,CAAC,CAAC,CACzC,AACD,OAAO,UAAM,CACX,GAAI,OAAOW,KAAK,GAAK,QAAQ,CAAE,CAC7BI,YAAY,CAACJ,KAAK,CAAC,CACpB,CACF,AAAC,CACH,CAAE,CAACX,UAAU,CAAEV,aAAa,CAAC,CAAC,AAE/B,KAAM0B,YAAY,CAAG,SAACC,CAAQ,CAAK,KAIjCtB,IAAW,CAC0B,IAA+B,KAJpEsB,CAAAA,CAAC,CAACC,cAAc,EAAE,AAClBD,CAAAA,CAAC,CAACE,eAAe,EAAE,AACnB3C,CAAAA,YAAY,CAACyC,CAAC,CAACG,MAAM,CAAsB,AAC3CzB,OAAAA,CAAAA,IAAW,CAAXA,GAAG,CAACY,OAAO,UAAXZ,IAAW,SACM,CADjBA,KAAAA,CACiB,CADjBA,IAAW,CACP0B,aAAa,CAACC,kBAAkB,CAAC,CAAA,IAA+B,CAA9BL,CAAC,CAACG,MAAM,UAAT,IAA+B,SAAM,CAArC,KAAA,CAAqC,CAArC,IAA+B,CAAEG,IAAI,CAAC,CAAC,uBAC1D,CAFlB5B,KAAAA,CAEkB,CAFlBA,KAEI6B,cAAc,CAAC,CACfC,QAAQ,CAAE,QAAQ,CAClBC,KAAK,CAAE,QAAQ,CAChB,CAAC,CACL,AAAC,AAEF5D,CAAAA,SAAS,CAAC,UAAM,KAGd6B,IAAW,KAFX,KAAMgC,QAAQ,CAAiB,EAAE,AAAC,AAElChC,OAAAA,CAAAA,IAAW,CAAXA,GAAG,CAACY,OAAO,UAAXZ,IAAW,SAAkB,CAA7BA,KAAAA,CAA6B,CAA7BA,IAAW,CAAEhB,gBAAgB,CAAC,oBAAoB,CAAC,uBAAS,CAA5DgB,KAAAA,CAA4D,CAA5DA,KAAqDf,OAAO,CAAC,SAACqC,CAAC,CAAK,KAEtDtB,IAAW,CACF,IAAwB,AAF7C,KAAMd,CAAC,CAAGoC,CAAC,AAAqB,AAAC,AACjC,KAAMW,GAAG,CAAGjC,CAAAA,IAAW,CAAXA,GAAG,CAACY,OAAO,UAAXZ,IAAW,SAAe,CAA1BA,KAAAA,CAA0B,CAA1BA,IAAW,CAAE0B,aAAa,CACpCC,kBAAkB,CAAC,CAAA,IAAwB,CAAvBzC,CAAC,UAAF,IAAwB,SAAM,CAA9B,KAAA,CAA8B,CAA9B,IAAwB,CAAE0C,IAAI,CAAC,CACnD,AAAe,AAAC,AAEjBI,CAAAA,QAAQ,CAACE,IAAI,CAAC,CACZpD,MAAM,CAAEI,CAAC,CACTiD,GAAG,CAAEF,GAAG,CAACG,SAAS,CACnB,CAAC,AACF,CAACd,CAAC,CAAuBe,OAAO,CAAGhB,YAAY,CAChD,CAAC,AAEFP,CAAAA,MAAM,CAACC,MAAM,CAACL,OAAO,CAAE,CACrBE,OAAO,CAAEoB,QAAQ,CAClB,CAAC,CACH,CAAE,CAAC3B,UAAU,CAAC,CAAC,AAEhB,KAAMiC,WAAW,CAAGpE,WAAW,CAC7B,SAACqE,KAAiC,CAAK,CACrC,IAAMd,MAAM,CAAGc,KAAK,CAACd,MAAM,AAAe,AAAC,AAE3C,IAAIA,CAAAA,MAAM,SAANA,MAAM,SAAS,CAAfA,KAAAA,CAAe,CAAfA,MAAM,CAAEe,OAAO,CAAA,GAAK,KAAK,EAAI7C,aAAa,CAAE,KAClCK,IAAW,AAAvB,KAAMyC,GAAG,CAAGzC,CAAAA,CAAAA,IAAW,CAAXA,GAAG,CAACY,OAAO,UAAXZ,IAAW,SAAsB,CAAjCA,KAAAA,CAAiC,CAAjCA,IAAW,CAAE0C,oBAAoB,CAAC,KAAK,CAAC,GAAI,EAAE,AAAC,AAE3D,KAAK,IAAIC,CAAC,CAAG,CAAC,CAAEC,GAAG,CAAGH,GAAG,CAACI,MAAM,CAAEF,CAAC,CAAGC,GAAG,CAAED,CAAC,EAAE,CAAE,CAC9C,GAAIF,GAAG,CAACE,CAAC,CAAC,GAAKlB,MAAM,CAAE,CACrBrB,aAAa,CAACuC,CAAC,CAAC,AAChBzC,CAAAA,UAAU,CAAC,IAAI,CAAC,CACjB,CACF,CACF,KAAM,GAAIuB,MAAM,CAACjC,SAAS,CAACsD,QAAQ,CAAC,cAAc,CAAC,GAAIjD,KAAK,SAALA,KAAK,SAAU,CAAfA,KAAAA,CAAe,CAAfA,KAAK,CAAEiD,QAAQ,CAAC,MAAM,CAAC,CAAA,CAAE,CAC/E,GAAIrB,MAAM,CAAC1C,YAAY,EAAI,CAAC0C,MAAM,CAAC1C,YAAY,CAACgE,YAAY,CAAC,WAAW,CAAC,CAAE,CACzEvE,YAAY,CAAC,AAACiD,MAAM,CAAC1C,YAAY,CAAiBiE,SAAS,CAAEvB,MAAM,CAAC1C,YAAY,CAAC,CAClF,CACF,CACF,CACD,CAACc,KAAK,CAAEF,aAAa,CAAC,CACvB,AAAC,AAEF,KAAMsD,WAAW,CAAG/E,WAAW,CAAC,SAACqE,KAAiC,CAAK,CACrE,IAAMxD,YAAY,CAAG,AAACwD,KAAK,CAACd,MAAM,CAAiB1C,YAAY,AAAC,AAEhE,IAAI,CAACA,YAAY,EAAIA,YAAY,CAACyD,OAAO,GAAK,KAAK,CAAE,CACnD,MAAO,CACR,AACD,IAAMU,IAAI,CAAGnE,YAAY,SAAZA,YAAY,SAAwB,CAApCA,KAAAA,CAAoC,CAApCA,YAAY,CAAEoE,sBAAsB,CAAC,mBAAmB,CAAC,AAAC,AAEvE,IAAID,IAAI,SAAJA,IAAI,SAAQ,CAAZA,KAAAA,CAAY,CAAZA,IAAI,CAAEL,MAAM,CAAE,CAChB,IAAMO,OAAO,CAAgBrE,YAAY,CAAC2D,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,AAAC,AAE1E,IAAIU,OAAO,CAACC,YAAY,CAAGD,OAAO,CAACE,YAAY,EAAIJ,IAAI,CAAC,CAAC,CAAC,CAACK,SAAS,GAAKH,OAAO,CAACG,SAAS,CAAE,CAE1FL,IAAI,CAAC,CAAC,CAAC,CAACK,SAAS,CAAGH,OAAO,CAACG,SAAS,CACtC,CACF,CACF,CAAE,EAAE,CAAC,AAAC,AACP,KAAMC,YAAY,CAAGtF,WAAW,CAAC,SAACoD,CAAQ,CAAK,CAC7C,GAAI,CAACZ,OAAO,CAACE,OAAO,CAACiC,MAAM,CAAE,MAAO,AACpC,KAAMY,EAAE,CAAGnC,CAAC,CAACG,MAAM,AAAe,AAAC,AACnC,KAAMU,GAAG,CAAG5D,YAAY,CAACkF,EAAE,CAAC,AAAC,AAE7B,KAAI3E,MAAM,CAA6B,IAAI,AAAC,AAE5C4B,CAAAA,OAAO,CAACE,OAAO,CAAC3B,OAAO,CAAC,SAACC,CAAC,CAAK,CAC7B,GAAIiD,GAAG,CAAGjD,CAAC,CAACiD,GAAG,EAAG,CAACsB,EAAE,CAACH,YAAY,CAAG,CAAC,CAAExE,MAAM,CAAGI,CAAC,CAACJ,MAAM,AAAC,CAC3D,CAAC,AAEF,IAAIA,MAAM,CAAE,CACVD,YAAY,CAACC,MAAM,CAAC,CACrB,CACF,CAAE,EAAE,CAAC,AAAC,AAEPX,CAAAA,SAAS,CAAC,UAAM,KACd2B,GAAoB,AAApBA,EAAAA,GAAoB,CAApBA,kBAAkB,EAAE,UAApBA,GAAoB,SAAkB,CAAtCA,KAAAA,CAAsC,CAAtCA,GAAoB,CAAE4D,gBAAgB,CAAC,QAAQ,CAAEF,YAAY,CAAC,AAC9D,QAAO,UAAM,KACX1D,GAAoB,AAApBA,EAAAA,GAAoB,CAApBA,kBAAkB,EAAE,UAApBA,GAAoB,SAAqB,CAAzCA,KAAAA,CAAyC,CAAzCA,GAAoB,CAAE6D,mBAAmB,CAAC,QAAQ,CAAEH,YAAY,CAAC,CAClE,AAAC,CACH,CAAE,CAAC1D,kBAAkB,CAAE0D,YAAY,CAAC,CAAC,AAEtC,KAAMI,GAAG,CAAGxF,OAAO,CAAC,iBAAM,CAAC,cAAc,CAAEoB,SAAS,CAAC,CAACqE,MAAM,CAACC,OAAO,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAA,CAAE,CAACvE,SAAS,CAAC,CAAC,AAAC,AAE9F,QACE,oBAACvB,QAAQ,MACP,oBAAC+F,KAAG,EACFhE,GAAG,CAAEA,GAAG,CACRR,SAAS,CAAEoE,GAAG,CACdnE,KAAK,CAAEA,KAAK,CACZwE,uBAAuB,CAAE,CACvBC,MAAM,CAAE7D,UAAU,CACnB,CACD8D,OAAO,CAAE7B,WAAW,CACpB8B,OAAO,CAAEnB,WAAW,EACpB,CACD1C,OAAO,CAACsC,MAAM,CACb,oBAAClE,WAAW,EACV0F,MAAM,CAAE9D,OAAO,CACfN,OAAO,CAAEA,OAAO,CAChBqE,OAAO,CAAE,kBAAMpE,UAAU,CAAC,KAAK,CAAC,CAAA,CAChCqE,KAAK,CAAEpE,UAAU,CACjBqE,aAAa,CAAEpE,aAAa,EAC5B,CACA,IAAI,CACC,AACX,CACH,AAAC,AAEF,gBAAepC,KAAK,CAACyG,IAAI,CAAClF,QAAQ,CAAEX,OAAO,CAAC,AAAC"}
@@ -3,11 +3,13 @@
3
3
  margin: 0 auto 70px;
4
4
  overflow-wrap: break-word;
5
5
 
6
- & [data-prefix] {
7
- &::before {
8
- color: var(--primary-color);
9
- content: attr(data-prefix);
10
- }
6
+ .markdown-box {
7
+ margin: 0;
8
+ }
9
+
10
+ & [data-prefix]::before {
11
+ color: var(--primary-color);
12
+ content: attr(data-prefix);
11
13
  }
12
14
 
13
15
  ol {
@@ -237,10 +239,8 @@
237
239
  border-spacing: 0;
238
240
  transition-property: border-color;
239
241
 
240
- tbody {
241
- tr:hover {
242
- background-color: var(--table-row-hover-bg, rgba(60,90,100,.04));
243
- }
242
+ tbody tr:hover {
243
+ background-color: var(--table-row-hover-bg, rgba(60,90,100,.04));
244
244
  }
245
245
 
246
246
  tr {
@@ -268,10 +268,8 @@
268
268
  }
269
269
 
270
270
 
271
- &:last-child {
272
- td {
273
- border-bottom: none;
274
- }
271
+ &:last-child td {
272
+ border-bottom: none;
275
273
  }
276
274
  }
277
275
  }